Skip to content

Implement draftwise scan with AI plumbing#4

Merged
4nkur merged 1 commit into
mainfrom
scan-command
Apr 25, 2026
Merged

Implement draftwise scan with AI plumbing#4
4nkur merged 1 commit into
mainfrom
scan-command

Conversation

@4nkur
Copy link
Copy Markdown
Owner

@4nkur 4nkur commented Apr 25, 2026

Adds the scan command and the foundations for every AI-driven command that follows. Three layers:

  • src/utils/config.js reads .draftwise/config.yaml (yaml package).
  • src/ai/provider.js routes calls by provider; src/ai/providers/claude.js wraps @anthropic-ai/sdk. OpenAI and Gemini are stubbed with a clear not-yet-wired-up error.
  • src/core/scanner.js gains framework detection (Next/Express/Fastify/ React/Vue/Svelte/etc), Next pages+app router parsing, regex-based Express/Fastify/Koa route detection, React/Vue/Svelte component listing, and Prisma/Mongoose/Drizzle model parsing. Test files are excluded from route detection (caught a bogus match in our own scanner.test.js fixtures).

scan branches on config.mode: api mode calls the model and writes overview.md; agent mode dumps structured scanner data + an instruction to stdout for the host coding agent (Claude Code, Cursor, etc.) to consume and write overview.md itself.

20 tests across config, scanner, and command. Smoke-tested in agent mode against this repo — zero spurious routes after the test-file fix.

Adds the scan command and the foundations for every AI-driven command
that follows. Three layers:

- src/utils/config.js reads .draftwise/config.yaml (yaml package).
- src/ai/provider.js routes calls by provider; src/ai/providers/claude.js
  wraps @anthropic-ai/sdk. OpenAI and Gemini are stubbed with a clear
  not-yet-wired-up error.
- src/core/scanner.js gains framework detection (Next/Express/Fastify/
  React/Vue/Svelte/etc), Next pages+app router parsing, regex-based
  Express/Fastify/Koa route detection, React/Vue/Svelte component
  listing, and Prisma/Mongoose/Drizzle model parsing. Test files are
  excluded from route detection (caught a bogus match in our own
  scanner.test.js fixtures).

scan branches on config.mode: api mode calls the model and writes
overview.md; agent mode dumps structured scanner data + an instruction
to stdout for the host coding agent (Claude Code, Cursor, etc.) to
consume and write overview.md itself.

20 tests across config, scanner, and command. Smoke-tested in agent
mode against this repo — zero spurious routes after the test-file fix.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@4nkur 4nkur merged commit 28fe0c4 into main Apr 25, 2026
@4nkur 4nkur deleted the scan-command branch April 25, 2026 07:35
4nkur added a commit that referenced this pull request Apr 26, 2026
CI workflow at .github/workflows/ci.yml — install + lint + test
on Node 20 and 22, on every PR and push to main. Manual checks
before merge stop being the only line of defense.

Anthropic SDK maxRetries goes from its default 2 to 4. The SDK
already handles 429 / 5xx / network retries internally; the audit
suggested wrapping our own retry but that's redundant with
existing SDK behavior. Bumping the SDK's own knob covers more
transient blips with less code.

scan-cache.json gains a cacheVersion field. When we change scan
output shape later (new field, renamed key), bumping
CACHE_VERSION in src/utils/scan-cache.js makes old caches
miss instead of poisoning downstream commands with stale shapes.

Closes audit P2 #4, #6, #7. All seven P2s now closed.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant