@vpxa/kb 0.1.13 → 0.1.15
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +8 -2
- package/package.json +10 -7
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +17 -20
- package/packages/analyzers/dist/blast-radius-analyzer.js +6 -12
- package/packages/analyzers/dist/dependency-analyzer.d.ts +31 -27
- package/packages/analyzers/dist/dependency-analyzer.js +7 -9
- package/packages/analyzers/dist/diagram-generator.d.ts +12 -8
- package/packages/analyzers/dist/diagram-generator.js +3 -4
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +39 -35
- package/packages/analyzers/dist/entry-point-analyzer.js +5 -6
- package/packages/analyzers/dist/index.d.ts +12 -14
- package/packages/analyzers/dist/index.js +1 -1
- package/packages/analyzers/dist/knowledge-producer.d.ts +29 -25
- package/packages/analyzers/dist/knowledge-producer.js +16 -15
- package/packages/analyzers/dist/pattern-analyzer.d.ts +14 -10
- package/packages/analyzers/dist/pattern-analyzer.js +3 -5
- package/packages/analyzers/dist/regex-call-graph.d.ts +6 -12
- package/packages/analyzers/dist/regex-call-graph.js +2 -1
- package/packages/analyzers/dist/structure-analyzer.d.ts +13 -9
- package/packages/analyzers/dist/structure-analyzer.js +3 -4
- package/packages/analyzers/dist/symbol-analyzer.d.ts +12 -8
- package/packages/analyzers/dist/symbol-analyzer.js +8 -13
- package/packages/analyzers/dist/ts-call-graph.d.ts +16 -13
- package/packages/analyzers/dist/ts-call-graph.js +2 -1
- package/packages/analyzers/dist/types.d.ts +82 -79
- package/packages/analyzers/dist/types.js +1 -0
- package/packages/chunker/dist/call-graph-extractor.d.ts +13 -10
- package/packages/chunker/dist/call-graph-extractor.js +2 -1
- package/packages/chunker/dist/chunker-factory.d.ts +6 -2
- package/packages/chunker/dist/chunker-factory.js +2 -1
- package/packages/chunker/dist/chunker.interface.d.ts +8 -4
- package/packages/chunker/dist/chunker.interface.js +1 -0
- package/packages/chunker/dist/code-chunker.d.ts +16 -12
- package/packages/chunker/dist/code-chunker.js +12 -14
- package/packages/chunker/dist/generic-chunker.d.ts +14 -10
- package/packages/chunker/dist/generic-chunker.js +6 -5
- package/packages/chunker/dist/index.d.ts +8 -8
- package/packages/chunker/dist/index.js +1 -1
- package/packages/chunker/dist/markdown-chunker.d.ts +16 -12
- package/packages/chunker/dist/markdown-chunker.js +4 -10
- package/packages/chunker/dist/treesitter-chunker.d.ts +28 -31
- package/packages/chunker/dist/treesitter-chunker.js +7 -8
- package/packages/cli/dist/commands/analyze.d.ts +6 -2
- package/packages/cli/dist/commands/analyze.js +3 -3
- package/packages/cli/dist/commands/context-cmds.d.ts +6 -2
- package/packages/cli/dist/commands/context-cmds.js +2 -1
- package/packages/cli/dist/commands/environment.d.ts +6 -2
- package/packages/cli/dist/commands/environment.js +2 -2
- package/packages/cli/dist/commands/execution.d.ts +6 -2
- package/packages/cli/dist/commands/execution.js +2 -1
- package/packages/cli/dist/commands/graph.d.ts +6 -2
- package/packages/cli/dist/commands/graph.js +6 -6
- package/packages/cli/dist/commands/init/adapters.d.ts +27 -0
- package/packages/cli/dist/commands/init/adapters.js +2 -0
- package/packages/cli/dist/commands/init/config.d.ts +11 -0
- package/packages/cli/dist/commands/init/config.js +4 -0
- package/packages/cli/dist/commands/init/curated.d.ts +8 -0
- package/packages/cli/dist/commands/init/curated.js +2 -0
- package/packages/cli/dist/commands/init/index.d.ts +23 -0
- package/packages/cli/dist/commands/init/index.js +3 -0
- package/packages/cli/dist/commands/init/scaffold.d.ts +24 -0
- package/packages/cli/dist/commands/init/scaffold.js +2 -0
- package/packages/cli/dist/commands/init/templates.d.ts +10 -0
- package/packages/cli/dist/commands/init/templates.js +302 -0
- package/packages/cli/dist/commands/init.d.ts +8 -3
- package/packages/cli/dist/commands/init.js +120 -123
- package/packages/cli/dist/commands/knowledge.d.ts +6 -2
- package/packages/cli/dist/commands/knowledge.js +2 -1
- package/packages/cli/dist/commands/search.d.ts +6 -2
- package/packages/cli/dist/commands/search.js +2 -8
- package/packages/cli/dist/commands/system.d.ts +6 -2
- package/packages/cli/dist/commands/system.js +5 -7
- package/packages/cli/dist/commands/workspace.d.ts +6 -2
- package/packages/cli/dist/commands/workspace.js +2 -2
- package/packages/cli/dist/context.d.ts +7 -4
- package/packages/cli/dist/context.js +2 -1
- package/packages/cli/dist/helpers.d.ts +51 -47
- package/packages/cli/dist/helpers.js +6 -5
- package/packages/cli/dist/index.d.ts +4 -1
- package/packages/cli/dist/index.js +3 -2
- package/packages/cli/dist/kb-init.d.ts +48 -50
- package/packages/cli/dist/kb-init.js +2 -1
- package/packages/cli/dist/types.d.ts +8 -5
- package/packages/cli/dist/types.js +1 -0
- package/packages/core/dist/constants.d.ts +36 -33
- package/packages/core/dist/constants.js +2 -1
- package/packages/core/dist/content-detector.d.ts +8 -7
- package/packages/core/dist/content-detector.js +2 -1
- package/packages/core/dist/errors.d.ts +15 -12
- package/packages/core/dist/errors.js +2 -1
- package/packages/core/dist/index.d.ts +6 -6
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/logger.d.ts +16 -7
- package/packages/core/dist/logger.js +2 -1
- package/packages/core/dist/types.d.ts +107 -91
- package/packages/core/dist/types.js +2 -0
- package/packages/embeddings/dist/embedder.interface.d.ts +22 -19
- package/packages/embeddings/dist/embedder.interface.js +1 -0
- package/packages/embeddings/dist/index.d.ts +3 -3
- package/packages/embeddings/dist/index.js +1 -1
- package/packages/embeddings/dist/onnx-embedder.d.ts +21 -22
- package/packages/embeddings/dist/onnx-embedder.js +2 -1
- package/packages/enterprise-bridge/dist/cache.d.ts +29 -0
- package/packages/enterprise-bridge/dist/cache.js +2 -0
- package/packages/enterprise-bridge/dist/er-client.d.ts +38 -0
- package/packages/enterprise-bridge/dist/er-client.js +2 -0
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +63 -0
- package/packages/enterprise-bridge/dist/evolution-collector.js +2 -0
- package/packages/enterprise-bridge/dist/index.d.ts +8 -0
- package/packages/enterprise-bridge/dist/index.js +1 -0
- package/packages/enterprise-bridge/dist/policy-store.d.ts +46 -0
- package/packages/enterprise-bridge/dist/policy-store.js +2 -0
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +24 -0
- package/packages/enterprise-bridge/dist/push-adapter.js +2 -0
- package/packages/enterprise-bridge/dist/result-merger.d.ts +15 -0
- package/packages/enterprise-bridge/dist/result-merger.js +2 -0
- package/packages/enterprise-bridge/dist/types.d.ts +82 -0
- package/packages/enterprise-bridge/dist/types.js +2 -0
- package/packages/indexer/dist/file-hasher.d.ts +5 -2
- package/packages/indexer/dist/file-hasher.js +2 -1
- package/packages/indexer/dist/filesystem-crawler.d.ts +23 -20
- package/packages/indexer/dist/filesystem-crawler.js +2 -1
- package/packages/indexer/dist/graph-extractor.d.ts +9 -12
- package/packages/indexer/dist/graph-extractor.js +2 -1
- package/packages/indexer/dist/incremental-indexer.d.ts +49 -43
- package/packages/indexer/dist/incremental-indexer.js +2 -1
- package/packages/indexer/dist/index.d.ts +5 -5
- package/packages/indexer/dist/index.js +1 -1
- package/packages/server/dist/api.d.ts +3 -8
- package/packages/server/dist/api.js +1 -1
- package/packages/server/dist/config.d.ts +6 -2
- package/packages/server/dist/config.js +2 -1
- package/packages/server/dist/curated-manager.d.ts +79 -76
- package/packages/server/dist/curated-manager.js +6 -10
- package/packages/server/dist/index.d.ts +1 -2
- package/packages/server/dist/index.js +2 -1
- package/packages/server/dist/replay-interceptor.d.ts +6 -6
- package/packages/server/dist/replay-interceptor.js +2 -1
- package/packages/server/dist/resources/resources.d.ts +7 -3
- package/packages/server/dist/resources/resources.js +3 -2
- package/packages/server/dist/server.d.ts +34 -24
- package/packages/server/dist/server.js +2 -1
- package/packages/server/dist/tools/analyze.tools.d.ts +14 -10
- package/packages/server/dist/tools/analyze.tools.js +2 -3
- package/packages/server/dist/tools/audit.tool.d.ts +8 -4
- package/packages/server/dist/tools/audit.tool.js +2 -4
- package/packages/server/dist/tools/bridge.tools.d.ts +35 -0
- package/packages/server/dist/tools/bridge.tools.js +16 -0
- package/packages/server/dist/tools/evolution.tools.d.ts +8 -0
- package/packages/server/dist/tools/evolution.tools.js +6 -0
- package/packages/server/dist/tools/forge.tools.d.ts +13 -11
- package/packages/server/dist/tools/forge.tools.js +11 -13
- package/packages/server/dist/tools/forget.tool.d.ts +7 -3
- package/packages/server/dist/tools/forget.tool.js +2 -7
- package/packages/server/dist/tools/graph.tool.d.ts +7 -3
- package/packages/server/dist/tools/graph.tool.js +5 -5
- package/packages/server/dist/tools/list.tool.d.ts +7 -3
- package/packages/server/dist/tools/list.tool.js +3 -8
- package/packages/server/dist/tools/lookup.tool.d.ts +7 -3
- package/packages/server/dist/tools/lookup.tool.js +3 -9
- package/packages/server/dist/tools/onboard.tool.d.ts +8 -4
- package/packages/server/dist/tools/onboard.tool.js +3 -2
- package/packages/server/dist/tools/policy.tools.d.ts +8 -0
- package/packages/server/dist/tools/policy.tools.js +3 -0
- package/packages/server/dist/tools/produce.tool.d.ts +6 -2
- package/packages/server/dist/tools/produce.tool.js +3 -2
- package/packages/server/dist/tools/read.tool.d.ts +7 -3
- package/packages/server/dist/tools/read.tool.js +3 -6
- package/packages/server/dist/tools/reindex.tool.d.ts +10 -6
- package/packages/server/dist/tools/reindex.tool.js +3 -2
- package/packages/server/dist/tools/remember.tool.d.ts +8 -3
- package/packages/server/dist/tools/remember.tool.js +4 -5
- package/packages/server/dist/tools/replay.tool.d.ts +6 -2
- package/packages/server/dist/tools/replay.tool.js +3 -6
- package/packages/server/dist/tools/search.tool.d.ts +10 -4
- package/packages/server/dist/tools/search.tool.js +7 -22
- package/packages/server/dist/tools/status.tool.d.ts +7 -3
- package/packages/server/dist/tools/status.tool.js +3 -3
- package/packages/server/dist/tools/toolkit.tools.d.ts +36 -34
- package/packages/server/dist/tools/toolkit.tools.js +20 -24
- package/packages/server/dist/tools/update.tool.d.ts +7 -3
- package/packages/server/dist/tools/update.tool.js +2 -6
- package/packages/server/dist/tools/utility.tools.d.ts +15 -14
- package/packages/server/dist/tools/utility.tools.js +11 -23
- package/packages/server/dist/version-check.d.ts +5 -1
- package/packages/server/dist/version-check.js +2 -1
- package/packages/store/dist/graph-store.interface.d.ts +89 -86
- package/packages/store/dist/graph-store.interface.js +1 -0
- package/packages/store/dist/index.d.ts +6 -6
- package/packages/store/dist/index.js +1 -1
- package/packages/store/dist/lance-store.d.ts +37 -30
- package/packages/store/dist/lance-store.js +2 -1
- package/packages/store/dist/sqlite-graph-store.d.ts +43 -46
- package/packages/store/dist/sqlite-graph-store.js +14 -13
- package/packages/store/dist/store-factory.d.ts +11 -7
- package/packages/store/dist/store-factory.js +2 -1
- package/packages/store/dist/store.interface.d.ts +47 -46
- package/packages/store/dist/store.interface.js +1 -0
- package/packages/tools/dist/audit.d.ts +61 -61
- package/packages/tools/dist/audit.js +5 -5
- package/packages/tools/dist/batch.d.ts +20 -17
- package/packages/tools/dist/batch.js +2 -1
- package/packages/tools/dist/changelog.d.ts +29 -26
- package/packages/tools/dist/changelog.js +3 -2
- package/packages/tools/dist/check.d.ts +42 -38
- package/packages/tools/dist/check.js +3 -2
- package/packages/tools/dist/checkpoint.d.ts +17 -14
- package/packages/tools/dist/checkpoint.js +2 -2
- package/packages/tools/dist/codemod.d.ts +35 -32
- package/packages/tools/dist/codemod.js +3 -2
- package/packages/tools/dist/compact.d.ts +34 -37
- package/packages/tools/dist/compact.js +3 -2
- package/packages/tools/dist/data-transform.d.ts +10 -7
- package/packages/tools/dist/data-transform.js +2 -1
- package/packages/tools/dist/dead-symbols.d.ts +29 -25
- package/packages/tools/dist/dead-symbols.js +3 -2
- package/packages/tools/dist/delegate.d.ts +26 -23
- package/packages/tools/dist/delegate.js +2 -5
- package/packages/tools/dist/diff-parse.d.ts +24 -21
- package/packages/tools/dist/diff-parse.js +4 -3
- package/packages/tools/dist/digest.d.ts +43 -45
- package/packages/tools/dist/digest.js +5 -5
- package/packages/tools/dist/encode.d.ts +11 -8
- package/packages/tools/dist/encode.js +2 -1
- package/packages/tools/dist/env-info.d.ts +25 -22
- package/packages/tools/dist/env-info.js +2 -1
- package/packages/tools/dist/eval.d.ts +13 -10
- package/packages/tools/dist/eval.js +3 -3
- package/packages/tools/dist/evidence-map.d.ts +64 -61
- package/packages/tools/dist/evidence-map.js +3 -3
- package/packages/tools/dist/file-cache.d.ts +42 -0
- package/packages/tools/dist/file-cache.js +4 -0
- package/packages/tools/dist/file-summary.d.ts +34 -29
- package/packages/tools/dist/file-summary.js +3 -2
- package/packages/tools/dist/file-walk.d.ts +6 -3
- package/packages/tools/dist/file-walk.js +2 -1
- package/packages/tools/dist/find-examples.d.ts +26 -21
- package/packages/tools/dist/find-examples.js +4 -3
- package/packages/tools/dist/find.d.ts +39 -40
- package/packages/tools/dist/find.js +2 -1
- package/packages/tools/dist/forge-classify.d.ts +35 -38
- package/packages/tools/dist/forge-classify.js +3 -2
- package/packages/tools/dist/forge-ground.d.ts +58 -60
- package/packages/tools/dist/forge-ground.js +2 -1
- package/packages/tools/dist/git-context.d.ts +22 -19
- package/packages/tools/dist/git-context.js +4 -3
- package/packages/tools/dist/graph-query.d.ts +75 -78
- package/packages/tools/dist/graph-query.js +2 -1
- package/packages/tools/dist/guide.d.ts +14 -11
- package/packages/tools/dist/guide.js +2 -1
- package/packages/tools/dist/health.d.ts +13 -10
- package/packages/tools/dist/health.js +3 -2
- package/packages/tools/dist/http-request.d.ts +20 -17
- package/packages/tools/dist/http-request.js +2 -1
- package/packages/tools/dist/index.d.ts +54 -53
- package/packages/tools/dist/index.js +1 -1
- package/packages/tools/dist/lane.d.ts +28 -25
- package/packages/tools/dist/lane.js +7 -7
- package/packages/tools/dist/measure.d.ts +32 -29
- package/packages/tools/dist/measure.js +3 -2
- package/packages/tools/dist/onboard.d.ts +29 -26
- package/packages/tools/dist/onboard.js +18 -41
- package/packages/tools/dist/parse-output.d.ts +48 -45
- package/packages/tools/dist/parse-output.js +3 -2
- package/packages/tools/dist/path-resolver.d.ts +4 -1
- package/packages/tools/dist/path-resolver.js +2 -1
- package/packages/tools/dist/process-manager.d.ts +18 -15
- package/packages/tools/dist/process-manager.js +2 -1
- package/packages/tools/dist/queue.d.ts +28 -25
- package/packages/tools/dist/queue.js +2 -2
- package/packages/tools/dist/regex-test.d.ts +26 -23
- package/packages/tools/dist/regex-test.js +2 -1
- package/packages/tools/dist/rename.d.ts +28 -25
- package/packages/tools/dist/rename.js +3 -2
- package/packages/tools/dist/replay.d.ts +32 -29
- package/packages/tools/dist/replay.js +5 -6
- package/packages/tools/dist/response-envelope.d.ts +32 -29
- package/packages/tools/dist/response-envelope.js +2 -1
- package/packages/tools/dist/schema-validate.d.ts +15 -12
- package/packages/tools/dist/schema-validate.js +2 -1
- package/packages/tools/dist/scope-map.d.ts +45 -47
- package/packages/tools/dist/scope-map.js +2 -1
- package/packages/tools/dist/snippet.d.ts +26 -24
- package/packages/tools/dist/snippet.js +2 -1
- package/packages/tools/dist/stash.d.ts +13 -10
- package/packages/tools/dist/stash.js +2 -2
- package/packages/tools/dist/stratum-card.d.ts +27 -27
- package/packages/tools/dist/stratum-card.js +4 -5
- package/packages/tools/dist/symbol.d.ts +29 -25
- package/packages/tools/dist/symbol.js +4 -3
- package/packages/tools/dist/test-run.d.ts +19 -15
- package/packages/tools/dist/test-run.js +3 -2
- package/packages/tools/dist/text-utils.d.ts +6 -3
- package/packages/tools/dist/text-utils.js +3 -2
- package/packages/tools/dist/time-utils.d.ts +15 -12
- package/packages/tools/dist/time-utils.js +2 -1
- package/packages/tools/dist/trace.d.ts +24 -20
- package/packages/tools/dist/trace.js +3 -2
- package/packages/tools/dist/truncation.d.ts +6 -3
- package/packages/tools/dist/truncation.js +8 -14
- package/packages/tools/dist/watch.d.ts +28 -25
- package/packages/tools/dist/watch.js +2 -1
- package/packages/tools/dist/web-fetch.d.ts +35 -32
- package/packages/tools/dist/web-fetch.js +7 -12
- package/packages/tools/dist/web-search.d.ts +16 -13
- package/packages/tools/dist/web-search.js +2 -1
- package/packages/tools/dist/workset.d.ts +19 -16
- package/packages/tools/dist/workset.js +2 -2
- package/packages/tui/dist/App-BAlmxCCw.js +3 -0
- package/packages/tui/dist/App.d.ts +11 -5
- package/packages/tui/dist/App.js +1 -450
- package/packages/tui/dist/CuratedPanel-sYdZAICX.js +3 -0
- package/packages/tui/dist/LogPanel-DVB8Sv46.js +4 -0
- package/packages/tui/dist/SearchPanel-DREo6zgt.js +3 -0
- package/packages/tui/dist/StatusPanel-2ex8fLOO.js +3 -0
- package/packages/tui/dist/chunk-D6axbAb-.js +2 -0
- package/packages/tui/dist/devtools-DUyj952l.js +8 -0
- package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +29 -0
- package/packages/tui/dist/index-B9VpfVPP.d.ts +14 -0
- package/packages/tui/dist/index.d.ts +3 -19
- package/packages/tui/dist/index.js +2 -476
- package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +317 -0
- package/packages/tui/dist/panels/CuratedPanel.d.ts +11 -5
- package/packages/tui/dist/panels/CuratedPanel.js +1 -371
- package/packages/tui/dist/panels/LogPanel.d.ts +7 -2
- package/packages/tui/dist/panels/LogPanel.js +1 -449
- package/packages/tui/dist/panels/SearchPanel.d.ts +14 -7
- package/packages/tui/dist/panels/SearchPanel.js +1 -372
- package/packages/tui/dist/panels/StatusPanel.d.ts +11 -5
- package/packages/tui/dist/panels/StatusPanel.js +1 -371
- package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +151 -0
- package/scaffold/adapters/claude-code.mjs +20 -0
- package/scaffold/adapters/copilot.mjs +320 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +14 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +14 -0
- package/scaffold/copilot/agents/Code-Reviewer-Alpha.agent.md +12 -0
- package/scaffold/copilot/agents/Code-Reviewer-Beta.agent.md +12 -0
- package/scaffold/copilot/agents/Debugger.agent.md +31 -0
- package/scaffold/copilot/agents/Documenter.agent.md +35 -0
- package/scaffold/copilot/agents/Explorer.agent.md +50 -0
- package/scaffold/copilot/agents/Frontend.agent.md +29 -0
- package/scaffold/copilot/agents/Implementer.agent.md +31 -0
- package/scaffold/copilot/agents/Orchestrator.agent.md +96 -0
- package/scaffold/copilot/agents/Planner.agent.md +45 -0
- package/scaffold/copilot/agents/README.md +57 -0
- package/scaffold/copilot/agents/Refactor.agent.md +30 -0
- package/scaffold/copilot/agents/Researcher-Alpha.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Beta.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Delta.agent.md +12 -0
- package/scaffold/copilot/agents/Researcher-Gamma.agent.md +12 -0
- package/scaffold/copilot/agents/Security.agent.md +42 -0
- package/scaffold/copilot/agents/_shared/adr-protocol.md +91 -0
- package/scaffold/copilot/agents/_shared/architect-reviewer-base.md +50 -0
- package/scaffold/copilot/agents/_shared/code-agent-base.md +70 -0
- package/scaffold/copilot/agents/_shared/code-reviewer-base.md +54 -0
- package/scaffold/copilot/agents/_shared/decision-protocol.md +27 -0
- package/scaffold/copilot/agents/_shared/forge-protocol.md +46 -0
- package/scaffold/copilot/agents/_shared/researcher-base.md +61 -0
- package/scaffold/copilot/agents/templates/adr-template.md +27 -0
- package/scaffold/copilot/agents/templates/execution-state.md +25 -0
- package/scaffold/copilot/prompts/ask.prompt.md +20 -0
- package/scaffold/copilot/prompts/debug.prompt.md +25 -0
- package/scaffold/copilot/prompts/design.prompt.md +22 -0
- package/scaffold/copilot/prompts/implement.prompt.md +26 -0
- package/scaffold/copilot/prompts/plan.prompt.md +24 -0
- package/scaffold/copilot/prompts/review.prompt.md +31 -0
- package/scaffold/definitions/agents.mjs +165 -0
- package/scaffold/definitions/bodies.mjs +292 -0
- package/scaffold/definitions/hooks.mjs +43 -0
- package/scaffold/definitions/models.mjs +56 -0
- package/scaffold/definitions/plugins.mjs +24 -0
- package/scaffold/definitions/prompts.mjs +145 -0
- package/scaffold/definitions/protocols.mjs +322 -0
- package/scaffold/definitions/tools.mjs +176 -0
- package/scaffold/generate.mjs +74 -0
- package/skills/brainstorming/SKILL.md +259 -0
- package/skills/brainstorming/scripts/frame-template.html +365 -0
- package/skills/brainstorming/scripts/helper.js +216 -0
- package/skills/brainstorming/scripts/server.cjs +9 -0
- package/skills/brainstorming/scripts/server.src.cjs +249 -0
- package/skills/brainstorming/spec-document-reviewer-prompt.md +49 -0
- package/skills/brainstorming/visual-companion.md +430 -0
- package/skills/knowledge-base/SKILL.md +22 -9
|
@@ -1,3 +1,3 @@
|
|
|
1
|
-
import{resolve as
|
|
2
|
-
`);
|
|
3
|
-
|
|
1
|
+
import{resolve as e}from"node:path";const t=[{name:`analyze`,description:`Run analyzer output for a path`,usage:`kb analyze <type> <path>`,run:async t=>{let n=t.shift()?.trim()??``,r=t.shift()?.trim()??``;(!n||!r)&&(console.error(`Usage: kb analyze <type> <path>`),console.error(`Types: structure, deps, symbols, patterns, entry-points, blast-radius, diagram`),process.exit(1));let{BlastRadiusAnalyzer:i,DependencyAnalyzer:a,DiagramGenerator:o,EntryPointAnalyzer:s,PatternAnalyzer:c,StructureAnalyzer:l,SymbolAnalyzer:u}=await import(`../../../analyzers/dist/index.js`),d=e(r),f;switch(n){case`structure`:f=await new l().analyze(d,{format:`markdown`});break;case`deps`:case`dependencies`:f=await new a().analyze(d,{format:`markdown`});break;case`symbols`:f=await new u().analyze(d,{format:`markdown`});break;case`patterns`:f=await new c().analyze(d,{format:`markdown`});break;case`entry-points`:f=await new s().analyze(d,{format:`markdown`});break;case`blast-radius`:f=await new i().analyze(process.cwd(),{files:[r],format:`markdown`});break;case`diagram`:f=await new o().analyze(d,{diagramType:`architecture`});break;default:console.error(`Unknown analyze type: ${n}`),console.error(`Types: structure, deps, symbols, patterns, entry-points, blast-radius, diagram`),process.exit(1)}console.log(f.output)}},{name:`onboard`,description:`Run all analyses for first-time codebase onboarding`,usage:`kb onboard <path> [--generate] [--out-dir <dir>]`,run:async t=>{let{onboard:n}=await import(`../../../tools/dist/index.js`),r=``,i=`memory`,a;for(let e=0;e<t.length;e++){let n=t[e].trim();n===`--generate`?i=`generate`:n===`--out-dir`&&e+1<t.length?a=t[++e].trim():n.startsWith(`--`)||(r=n)}r||=process.cwd();let o=e(r);console.log(`Onboarding: ${o} (mode: ${i})`),console.log(`Running analyses...
|
|
2
|
+
`);let s=await n({path:o,mode:i,outDir:a});for(let e of s.steps){let t=e.status===`success`?`✓`:`✗`,n=e.status===`success`?`${e.durationMs}ms, ${e.output.length} chars`:e.error;console.log(` ${t} ${e.name} — ${n}`)}console.log(`\nTotal: ${s.totalDurationMs}ms`),s.outDir&&console.log(`Output written to: ${s.outDir}`)}}];export{t as analyzeCommands};
|
|
3
|
+
//# sourceMappingURL=analyze.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Command } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/cli/src/commands/context-cmds.d.ts
|
|
4
|
+
declare const contextCommands: Command[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { contextCommands };
|
|
3
7
|
//# sourceMappingURL=context-cmds.d.ts.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{extractBoolFlag as e,extractNumFlag as t,extractStrFlag as n,parseRecordString as r,printCheckpoint as i,printDiffFiles as a,printFileSummary as o,printGitContext as s,printParsedOutput as c,readStdin as l}from"../helpers.js";import{resolve as u}from"node:path";import{checkpointLatest as d,checkpointList as f,checkpointLoad as p,checkpointSave as m,diffParse as h,fileSummary as g,gitContext as _,parseOutput as v}from"../../../tools/dist/index.js";const y=[{name:`parse-output`,description:`Parse build or tool output from stdin`,usage:`kb parse-output [--tool tsc|vitest|biome|git-status]`,run:async e=>{let t=n(e,`--tool`,``).trim()||void 0,r=await l();r.trim()||(console.error(`Usage: kb parse-output [--tool tsc|vitest|biome|git-status]`),process.exit(1)),c(v(r,t))}},{name:`git`,description:`Show git branch, status, recent commits, and optional diff stats`,usage:`kb git [--cwd path] [--commit-count N] [--diff]`,run:async r=>{s(await _({cwd:n(r,`--cwd`,``).trim()||void 0,commitCount:t(r,`--commit-count`,5),includeDiff:e(r,`--diff`)}))}},{name:`diff`,description:`Parse unified diff text from stdin into structured file changes`,usage:`git diff | kb diff`,run:async()=>{let e=await l();e.trim()||(console.error(`Usage: git diff | kb diff`),process.exit(1)),a(h({diff:e}))}},{name:`summarize`,description:`Show a structural summary of a file`,usage:`kb summarize <path>`,run:async e=>{let t=e.shift()?.trim();t||(console.error(`Usage: kb summarize <path>`),process.exit(1)),o(await g({path:u(t)}))}},{name:`checkpoint`,description:`Save and restore lightweight session checkpoints`,usage:`kb checkpoint <save|load|list|latest> [label-or-id] [--data json] [--notes text]`,run:async e=>{let t=e.shift()?.trim();switch(t||(console.error(`Usage: kb checkpoint <save|load|list|latest> [label-or-id] [--data json] [--notes text]`),process.exit(1)),t){case`save`:{let t=e.shift()?.trim(),a=n(e,`--data`,``),o=n(e,`--notes`,``).trim()||void 0,s=a.trim()?``:await l();t||(console.error(`Usage: kb checkpoint save <label> [--data json] [--notes text]`),process.exit(1)),i(m(t,r(a||s),{notes:o}));return}case`load`:{let t=e.shift()?.trim();t||(console.error(`Usage: kb checkpoint load <id>`),process.exit(1));let n=p(t);if(!n){console.log(`No checkpoint found: ${t}`);return}i(n);return}case`list`:{let e=f();if(e.length===0){console.log(`No checkpoints saved.`);return}console.log(`Checkpoints (${e.length})`),console.log(`─`.repeat(60));for(let t of e)console.log(`${t.id}`),console.log(` Label: ${t.label}`),console.log(` Created: ${t.createdAt}`);return}case`latest`:{let e=d();if(!e){console.log(`No checkpoints saved.`);return}i(e);return}default:console.error(`Unknown checkpoint action: ${t}`),console.error(`Actions: save, load, list, latest`),process.exit(1)}}}];export{y as contextCommands};
|
|
2
|
+
//# sourceMappingURL=context-cmds.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Command } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/cli/src/commands/environment.d.ts
|
|
4
|
+
declare const environmentCommands: Command[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { environmentCommands };
|
|
3
7
|
//# sourceMappingURL=environment.d.ts.map
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{
|
|
2
|
-
|
|
1
|
+
import{extractNumFlag as e,extractStrFlag as t,printManagedProcess as n,readStdin as r}from"../helpers.js";import{resolve as i}from"node:path";import{readFile as a}from"node:fs/promises";import{delegate as o,delegateListModels as s,processList as c,processLogs as l,processStart as u,processStatus as d,processStop as f,watchList as p,watchStart as m,watchStop as h}from"../../../tools/dist/index.js";const g=[{name:`proc`,description:`Manage in-memory child processes`,usage:`kb proc <start|stop|status|list|logs> ...`,run:async t=>{let r=t.shift()?.trim()??``;switch(r){case`start`:{let e=t.shift()?.trim(),r=t.shift()?.trim();(!e||!r)&&(console.error(`Usage: kb proc start <id> <command> [args...]`),process.exit(1)),n(u(e,r,t));return}case`stop`:{let e=t.shift()?.trim();e||(console.error(`Usage: kb proc stop <id>`),process.exit(1));let r=f(e);if(!r){console.log(`No managed process found: ${e}`);return}n(r);return}case`status`:{let e=t.shift()?.trim();e||(console.error(`Usage: kb proc status <id>`),process.exit(1));let r=d(e);if(!r){console.log(`No managed process found: ${e}`);return}n(r);return}case`list`:{let e=c();if(e.length===0){console.log(`No managed processes.`);return}for(let t of e)n(t),console.log(``);return}case`logs`:{let n=e(t,`--tail`,50),r=t.shift()?.trim();r||(console.error(`Usage: kb proc logs <id> [--tail N]`),process.exit(1));let i=l(r,n);if(i.length===0){console.log(`No logs found for process: ${r}`);return}for(let e of i)console.log(e);return}default:console.error(`Unknown proc action: ${r}`),console.error(`Actions: start, stop, status, list, logs`),process.exit(1)}}},{name:`watch`,description:`Manage in-memory filesystem watchers`,usage:`kb watch <start|stop|list> ...`,run:async e=>{let t=e.shift()?.trim()??``;switch(t){case`start`:{let t=e.shift()?.trim();t||(console.error(`Usage: kb watch start <path>`),process.exit(1));let n=m({path:i(t)});console.log(`Started watcher: ${n.id}`),console.log(` Path: ${n.path}`),console.log(` Status: ${n.status}`);return}case`stop`:{let t=e.shift()?.trim();t||(console.error(`Usage: kb watch stop <id>`),process.exit(1));let n=h(t);console.log(n?`Stopped watcher: ${t}`:`Watcher not found: ${t}`);return}case`list`:{let e=p();if(e.length===0){console.log(`No active watchers.`);return}for(let t of e)console.log(`${t.id}`),console.log(` Path: ${t.path}`),console.log(` Status: ${t.status}`),console.log(` Events: ${t.eventCount}`);return}default:console.error(`Unknown watch action: ${t}`),console.error(`Actions: start, stop, list`),process.exit(1)}}},{name:`delegate`,description:`Delegate a task to a local Ollama model`,usage:`kb delegate [--model name] [--system prompt] [--temp 0.3] <prompt | --stdin>`,run:async n=>{if((n[0]===`models`?n.shift():void 0)===`models`){try{let e=await s();if(e.length===0){console.log(`No Ollama models available. Pull one with: ollama pull qwen2.5-coder:7b`);return}for(let t of e)console.log(t)}catch{console.error(`Ollama is not running. Start it with: ollama serve`),process.exit(1)}return}let c=t(n,`--model`,``),l=t(n,`--system`,``),u=e(n,`--temp`,.3),d=t(n,`--context`,``),f=n.join(` `);f||=await r(),f||(console.error(`Usage: kb delegate [--model name] <prompt>`),process.exit(1));let p;d&&(p=await a(i(d),`utf-8`));let m=await o({prompt:f,model:c||void 0,system:l||void 0,context:p,temperature:u});m.error&&(console.error(`Error: ${m.error}`),process.exit(1)),console.log(m.response),console.error(`\n(${m.model}, ${m.durationMs}ms, ${m.tokenCount??`?`} tokens)`)}}];export{g as environmentCommands};
|
|
2
|
+
//# sourceMappingURL=environment.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Command } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/cli/src/commands/execution.d.ts
|
|
4
|
+
declare const executionCommands: Command[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { executionCommands };
|
|
3
7
|
//# sourceMappingURL=execution.d.ts.map
|
|
@@ -1 +1,2 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{extractBoolFlag as e,extractNumFlag as t,extractStrFlag as n,printTestRunResult as r,readStdin as i,splitCsv as a}from"../helpers.js";import{resolve as o}from"node:path";import{readFile as s}from"node:fs/promises";import{codemod as c,dataTransform as l,evaluate as u,rename as d,testRun as f}from"../../../tools/dist/index.js";const p=[{name:`eval`,description:`Evaluate JavaScript or TypeScript in a constrained VM sandbox`,usage:`kb eval [code] [--lang js|ts] [--timeout ms]`,run:async e=>{let r=n(e,`--lang`,`js`),a=t(e,`--timeout`,5e3),o=e.join(` `),s=o.trim()?``:await i(),c=o||s;c.trim()||(console.error(`Usage: kb eval [code] [--lang js|ts] [--timeout ms]`),process.exit(1));let l=u({code:c,lang:r===`ts`?`ts`:`js`,timeout:a});if(!l.success){console.error(`Eval failed in ${l.durationMs}ms: ${l.error}`),process.exitCode=1;return}console.log(`Eval succeeded in ${l.durationMs}ms`),console.log(`─`.repeat(60)),console.log(l.output)}},{name:`test`,description:`Run Vitest for all tests or a specific subset`,usage:`kb test [files...] [--grep pattern] [--cwd path] [--timeout ms]`,run:async e=>{let i=n(e,`--grep`,``).trim()||void 0,a=n(e,`--cwd`,``).trim()||void 0,o=t(e,`--timeout`,6e4),s=e.filter(Boolean),c=await f({files:s.length>0?s:void 0,grep:i,cwd:a,timeout:o});r(c),c.passed||(process.exitCode=1)}},{name:`rename`,description:`Rename a symbol across files using whole-word regex matching`,usage:`kb rename <old> <new> <path> [--dry-run] [--extensions .ts,.tsx] [--exclude dist/**]`,run:async t=>{let r=t.shift()?.trim()??``,i=t.shift()?.trim()??``,s=t.shift()?.trim()??``;(!r||!i||!s)&&(console.error(`Usage: kb rename <old> <new> <path> [--dry-run] [--extensions .ts,.tsx] [--exclude dist/**]`),process.exit(1));let c=a(n(t,`--extensions`,``)),l=a(n(t,`--exclude`,``)),u=await d({oldName:r,newName:i,rootPath:o(s),extensions:c.length>0?c:void 0,exclude:l.length>0?l:void 0,dryRun:e(t,`--dry-run`)});console.log(JSON.stringify(u,null,2))}},{name:`codemod`,description:`Apply regex-based codemod rules from a JSON file across a path`,usage:`kb codemod <path> --rules <file.json> [--dry-run] [--extensions .ts,.tsx] [--exclude dist/**]`,run:async t=>{let r=t.shift()?.trim()??``,i=n(t,`--rules`,``).trim();(!r||!i)&&(console.error(`Usage: kb codemod <path> --rules <file.json> [--dry-run] [--extensions .ts,.tsx] [--exclude dist/**]`),process.exit(1));let l=await s(o(i),`utf-8`),u;try{u=JSON.parse(l)}catch{throw Error(`Failed to parse rules file as JSON: ${i}`)}if(!Array.isArray(u))throw Error(`Codemod rules file must contain a JSON array.`);let d=a(n(t,`--extensions`,``)),f=a(n(t,`--exclude`,``)),p=await c({rootPath:o(r),rules:u,extensions:d.length>0?d:void 0,exclude:f.length>0?f:void 0,dryRun:e(t,`--dry-run`)});console.log(JSON.stringify(p,null,2))}},{name:`transform`,description:`Apply jq-like transforms to JSON from stdin`,usage:`cat data.json | kb transform <expression>`,run:async e=>{let t=e.join(` `).trim(),n=await i();(!t||!n.trim())&&(console.error(`Usage: cat data.json | kb transform <expression>`),process.exit(1));let r=l({input:n,expression:t});console.log(r.outputString)}}];export{p as executionCommands};
|
|
2
|
+
//# sourceMappingURL=execution.js.map
|
|
@@ -1,3 +1,7 @@
|
|
|
1
|
-
import
|
|
2
|
-
|
|
1
|
+
import { Command } from "../types.js";
|
|
2
|
+
|
|
3
|
+
//#region packages/cli/src/commands/graph.d.ts
|
|
4
|
+
declare const graphCommands: Command[];
|
|
5
|
+
//#endregion
|
|
6
|
+
export { graphCommands };
|
|
3
7
|
//# sourceMappingURL=graph.d.ts.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import{
|
|
1
|
+
import{ctx as e}from"../context.js";import{extractNumFlag as t,extractStrFlag as n}from"../helpers.js";import{graphQuery as r}from"../../../tools/dist/index.js";const i=[{name:`graph`,description:`Query the knowledge graph`,usage:`kb graph <action> [options]
|
|
2
2
|
Actions: stats, find-nodes, find-edges, neighbors, traverse, delete, clear
|
|
3
|
-
Options: --type, --name, --node-id, --edge-type, --direction, --depth, --limit, --source-path`,run:async
|
|
4
|
-
Actions: stats, find-nodes, find-edges, neighbors, traverse, delete, clear`),process.exit(1));
|
|
5
|
-
Nodes:`);for(
|
|
6
|
-
Edges:`);for(
|
|
7
|
-
|
|
3
|
+
Options: --type, --name, --node-id, --edge-type, --direction, --depth, --limit, --source-path`,run:async i=>{let a=i.shift()?.trim()??``;a||(console.error(`Usage: kb graph <action>
|
|
4
|
+
Actions: stats, find-nodes, find-edges, neighbors, traverse, delete, clear`),process.exit(1));let{graphStore:o}=await e(),s=n(i,`--type`,``),c=n(i,`--name`,``),l=n(i,`--node-id`,``),u=n(i,`--edge-type`,``),d=n(i,`--direction`,`both`),f=t(i,`--depth`,2),p=t(i,`--limit`,50),m=n(i,`--source-path`,``),h={stats:`stats`,"find-nodes":`find_nodes`,"find-edges":`find_edges`,neighbors:`neighbors`,traverse:`traverse`,delete:`delete`,clear:`clear`}[a];h||(console.error(`Unknown graph action: ${a}`),console.error(`Actions: stats, find-nodes, find-edges, neighbors, traverse, delete, clear`),process.exit(1));let g=await r(o,{action:h,nodeType:s||void 0,namePattern:c||void 0,sourcePath:m||void 0,nodeId:l||void 0,edgeType:u||void 0,direction:d,maxDepth:f,limit:p});if(console.log(g.summary),g.nodes&&g.nodes.length>0){console.log(`
|
|
5
|
+
Nodes:`);for(let e of g.nodes){let t=Object.keys(e.properties).length>0?` ${JSON.stringify(e.properties)}`:``;console.log(` ${e.name} (${e.type}, id: ${e.id})${t}`)}}if(g.edges&&g.edges.length>0){console.log(`
|
|
6
|
+
Edges:`);for(let e of g.edges){let t=e.weight===1?``:` (weight: ${e.weight})`;console.log(` ${e.fromId} --[${e.type}]--> ${e.toId}${t}`)}}g.stats&&(console.log(`\nNode types: ${JSON.stringify(g.stats.nodeTypes)}`),console.log(`Edge types: ${JSON.stringify(g.stats.edgeTypes)}`)),g.deleted!==void 0&&console.log(`Deleted: ${g.deleted}`)}}];export{i as graphCommands};
|
|
7
|
+
//# sourceMappingURL=graph.js.map
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
//#region packages/cli/src/commands/init/adapters.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Init module — IDE adapter types and detection.
|
|
4
|
+
*
|
|
5
|
+
* Each IDE has different conventions for where agent files, MCP config,
|
|
6
|
+
* instructions, and skills live. This module defines the interface and
|
|
7
|
+
* provides auto-detection based on workspace markers.
|
|
8
|
+
*/
|
|
9
|
+
type SupportedIde = 'copilot' | 'claude-code';
|
|
10
|
+
interface IdeAdapter {
|
|
11
|
+
/** Create the MCP server config file for this IDE. */
|
|
12
|
+
writeMcpConfig(cwd: string, serverName: string): void;
|
|
13
|
+
/** Create the main instructions file (copilot-instructions.md, CLAUDE.md). */
|
|
14
|
+
writeInstructions(cwd: string, serverName: string): void;
|
|
15
|
+
/** Create the AGENTS.md summary file. */
|
|
16
|
+
writeAgentsMd(cwd: string, serverName: string): void;
|
|
17
|
+
/** The scaffold subdirectory name to copy from. */
|
|
18
|
+
scaffoldDir: string;
|
|
19
|
+
}
|
|
20
|
+
/** Detect IDE from workspace directory markers. */
|
|
21
|
+
declare function detectIde(cwd: string): SupportedIde;
|
|
22
|
+
declare const copilotAdapter: IdeAdapter;
|
|
23
|
+
declare const claudeCodeAdapter: IdeAdapter;
|
|
24
|
+
declare function getAdapter(ide: SupportedIde): IdeAdapter;
|
|
25
|
+
//#endregion
|
|
26
|
+
export { IdeAdapter, SupportedIde, claudeCodeAdapter, copilotAdapter, detectIde, getAdapter };
|
|
27
|
+
//# sourceMappingURL=adapters.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{buildAgentsMd as e,buildCopilotInstructions as t}from"./templates.js";import{existsSync as n,mkdirSync as r,writeFileSync as i}from"node:fs";import{basename as a,resolve as o}from"node:path";function s(e){return n(o(e,`.vscode`))?`copilot`:n(o(e,`.claude`))?`claude-code`:`copilot`}function c(e){return{servers:{[e]:{type:`stdio`,command:`npx`,args:[`@vpxa/kb`,`serve`]}}}}const l={scaffoldDir:`copilot`,writeMcpConfig(e,t){let r=o(e,`.vscode`),a=o(r,`mcp.json`);n(r)&&!n(a)&&(i(a,`${JSON.stringify(c(t),null,2)}\n`,`utf-8`),console.log(` Created .vscode/mcp.json`))},writeInstructions(e,s){let c=o(e,`.github`),l=o(c,`copilot-instructions.md`);n(l)||(r(c,{recursive:!0}),i(l,t(a(e),s),`utf-8`),console.log(` Created .github/copilot-instructions.md`))},writeAgentsMd(t,r){let s=o(t,`AGENTS.md`);n(s)||(i(s,e(a(t),r),`utf-8`),console.log(` Created AGENTS.md`))}},u={scaffoldDir:`claude-code`,writeMcpConfig(e,t){},writeInstructions(e,t){},writeAgentsMd(e,t){}};function d(e){switch(e){case`copilot`:return l;case`claude-code`:return u}}export{u as claudeCodeAdapter,l as copilotAdapter,s as detectIde,d as getAdapter};
|
|
2
|
+
//# sourceMappingURL=adapters.js.map
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
//#region packages/cli/src/commands/init/config.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Init module — config file creation.
|
|
4
|
+
* Handles kb.config.json, .gitignore, and MCP config files.
|
|
5
|
+
*/
|
|
6
|
+
declare function writeKbConfig(cwd: string, force: boolean): boolean;
|
|
7
|
+
declare function ensureGitignore(cwd: string): void;
|
|
8
|
+
declare function getServerName(): string;
|
|
9
|
+
//#endregion
|
|
10
|
+
export { ensureGitignore, getServerName, writeKbConfig };
|
|
11
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import{appendFileSync as e,existsSync as t,readFileSync as n,writeFileSync as r}from"node:fs";import{resolve as i}from"node:path";const a={serverName:`knowledge-base`,sources:[{path:`.`,excludePatterns:[`**/node_modules/**`,`**/dist/**`,`**/build/**`,`**/.git/**`,`**/.kb-data/**`,`**/coverage/**`,`**/*.min.js`,`**/package-lock.json`,`**/pnpm-lock.yaml`]}],indexing:{chunkSize:1500,chunkOverlap:200,minChunkSize:100},embedding:{model:`mixedbread-ai/mxbai-embed-large-v1`,dimensions:1024},store:{backend:`lancedb`,path:`.kb-data/lance`},curated:{path:`curated`}};function o(e,n){let o=i(e,`kb.config.json`);return t(o)&&!n?(console.log(`kb.config.json already exists. Use --force to overwrite.`),!1):(r(o,`${JSON.stringify(a,null,2)}\n`,`utf-8`),console.log(` Created kb.config.json`),!0)}function s(a){let o=i(a,`.gitignore`),s=[{dir:`.kb-data/`,label:`Knowledge base vector store`},{dir:`.brainstorm/`,label:`Brainstorming sessions`},{dir:`curated/`,label:`Curated knowledge entries`},{dir:`curated-archive/`,label:`Archived curated entries`}];if(t(o)){let t=n(o,`utf-8`),r=s.filter(e=>!t.includes(e.dir));r.length>0&&(e(o,`\n${r.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
2
|
+
`)}\n`,`utf-8`),console.log(` Added ${r.map(e=>e.dir).join(`, `)} to .gitignore`))}else r(o,`${s.map(e=>`# ${e.label}\n${e.dir}`).join(`
|
|
3
|
+
`)}\n`,`utf-8`),console.log(` Created .gitignore with KB entries`)}function c(){return a.serverName}export{s as ensureGitignore,c as getServerName,o as writeKbConfig};
|
|
4
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{existsSync as e,mkdirSync as t}from"node:fs";import{resolve as n}from"node:path";const r=[`decisions`,`patterns`,`conventions`,`troubleshooting`];function i(i){let a=n(i,`curated`);e(a)||(t(a,{recursive:!0}),console.log(` Created curated/`));for(let i of r){let r=n(a,i);e(r)||t(r,{recursive:!0})}console.log(` Created curated/{${r.join(`,`)}}/`)}export{i as createCuratedDirs};
|
|
2
|
+
//# sourceMappingURL=curated.js.map
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
//#region packages/cli/src/commands/init/index.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* `kb init` — scaffold a knowledge base in the current directory.
|
|
4
|
+
*
|
|
5
|
+
* Creates kb.config.json, .gitignore entry, IDE-specific config,
|
|
6
|
+
* agent instruction files, skills, scaffold agents/prompts,
|
|
7
|
+
* and curated knowledge directories.
|
|
8
|
+
*
|
|
9
|
+
* This is the main orchestrator that wires together the focused modules:
|
|
10
|
+
* config.ts — kb.config.json + .gitignore
|
|
11
|
+
* adapters.ts — IDE detection + adapter interface
|
|
12
|
+
* scaffold.ts — copy scaffold/skills files from package
|
|
13
|
+
* curated.ts — curated knowledge directories
|
|
14
|
+
* templates.ts — copilot-instructions.md + AGENTS.md content
|
|
15
|
+
*/
|
|
16
|
+
declare function initProject(options: {
|
|
17
|
+
force: boolean;
|
|
18
|
+
}): Promise<void>;
|
|
19
|
+
/** Generate a JSON guide report comparing installed vs source files. */
|
|
20
|
+
declare function guideProject(): Promise<void>;
|
|
21
|
+
//#endregion
|
|
22
|
+
export { guideProject, initProject };
|
|
23
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
import{detectIde as e,getAdapter as t}from"./adapters.js";import{ensureGitignore as n,getServerName as r,writeKbConfig as i}from"./config.js";import{createCuratedDirs as a}from"./curated.js";import{copyScaffold as o,copySkills as s,guideScaffold as c,guideSkills as l}from"./scaffold.js";import{dirname as u,resolve as d}from"node:path";import{fileURLToPath as f}from"node:url";const p=[`knowledge-base`,`brainstorming`];async function m(c){let l=process.cwd();if(!i(l,c.force))return;n(l);let m=r(),h=t(e(l));h.writeMcpConfig(l,m),h.writeInstructions(l,m),h.writeAgentsMd(l,m);let g=d(u(f(import.meta.url)),`..`,`..`,`..`,`..`,`..`);s(l,g,p,c.force),o(l,g,h.scaffoldDir,c.force),a(l),console.log(`
|
|
2
|
+
Knowledge base initialized! Next steps:`),console.log(` kb reindex Index your codebase`),console.log(` kb search Search indexed content`),console.log(` kb serve Start MCP server for IDE integration`)}async function h(){let n=process.cwd(),r=t(e(n)),i=d(u(f(import.meta.url)),`..`,`..`,`..`,`..`,`..`),a=[...l(n,i,p),...c(n,i,r.scaffoldDir)],o={summary:{total:a.length,new:a.filter(e=>e.status===`new`).length,outdated:a.filter(e=>e.status===`outdated`).length,current:a.filter(e=>e.status===`current`).length},files:a};console.log(JSON.stringify(o,null,2))}export{h as guideProject,m as initProject};
|
|
3
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
//#region packages/cli/src/commands/init/scaffold.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Init module — scaffold file copying.
|
|
4
|
+
* Copies agent, prompt, and skill files from the package scaffold into the workspace.
|
|
5
|
+
*/
|
|
6
|
+
interface GuideFileEntry {
|
|
7
|
+
status: 'new' | 'outdated' | 'current';
|
|
8
|
+
relativePath: string;
|
|
9
|
+
sourcePath: string;
|
|
10
|
+
content?: string;
|
|
11
|
+
}
|
|
12
|
+
/** Recursively copy a directory. When force=false, skip files that already exist. */
|
|
13
|
+
declare function copyDirectoryRecursive(srcDir: string, destDir: string, logPrefix?: string, force?: boolean): void;
|
|
14
|
+
/** Copy scaffold files for a given IDE into the workspace .github/ directory. */
|
|
15
|
+
declare function copyScaffold(cwd: string, pkgRoot: string, ide: string, force?: boolean): void;
|
|
16
|
+
/** Copy skill directories from the package into .github/skills/. */
|
|
17
|
+
declare function copySkills(cwd: string, pkgRoot: string, skillNames: string[], force?: boolean): void;
|
|
18
|
+
/** Generate guide report for scaffold files — compare source vs destination. */
|
|
19
|
+
declare function guideScaffold(cwd: string, pkgRoot: string, ide: string): GuideFileEntry[];
|
|
20
|
+
/** Generate guide report for skill files — compare source vs destination. */
|
|
21
|
+
declare function guideSkills(cwd: string, pkgRoot: string, skillNames: string[]): GuideFileEntry[];
|
|
22
|
+
//#endregion
|
|
23
|
+
export { GuideFileEntry, copyDirectoryRecursive, copyScaffold, copySkills, guideScaffold, guideSkills };
|
|
24
|
+
//# sourceMappingURL=scaffold.d.ts.map
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
import{copyFileSync as e,existsSync as t,mkdirSync as n,readFileSync as r,readdirSync as i,statSync as a}from"node:fs";import{resolve as o}from"node:path";function s(r,c,l=``,u=!1){n(c,{recursive:!0});for(let n of i(r)){let i=o(r,n),d=o(c,n),f=l?`${l}/${n}`:n;if(a(i).isDirectory())s(i,d,f,u);else if(u||!t(d)){let n=t(d)?`Updated`:`Created`;e(i,d),console.log(` ${n} .github/${f}`)}}}function c(e,n,s,l){if(t(e))for(let u of i(e)){let i=o(e,u),d=s?`${s}/${u}`:u;if(a(i).isDirectory())c(i,o(n,u),d,l);else{let e=o(n,u),a=r(i,`utf-8`);t(e)?a===r(e,`utf-8`)?l.push({status:`current`,relativePath:d,sourcePath:i}):l.push({status:`outdated`,relativePath:d,sourcePath:i,content:a}):l.push({status:`new`,relativePath:d,sourcePath:i,content:a})}}}function l(e,n,r,i=!1){let a=o(n,`scaffold`,r);for(let n of[`agents`,`prompts`]){let r=o(a,n),c=o(e,`.github`,n);t(r)&&s(r,c,``,i)}}function u(e,n,r,i=!1){for(let a of r){let r=o(n,`skills`,a);t(r)&&s(r,o(e,`.github`,`skills`,a),`skills/${a}`,i)}}function d(e,t,n){let r=[],i=o(t,`scaffold`,n);for(let t of[`agents`,`prompts`])c(o(i,t),o(e,`.github`,t),t,r);return r}function f(e,n,r){let i=[];for(let a of r){let r=o(n,`skills`,a);t(r)&&c(r,o(e,`.github`,`skills`,a),`skills/${a}`,i)}return i}export{s as copyDirectoryRecursive,l as copyScaffold,u as copySkills,d as guideScaffold,f as guideSkills};
|
|
2
|
+
//# sourceMappingURL=scaffold.js.map
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
//#region packages/cli/src/commands/init/templates.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Init module — instruction and AGENTS.md template builders.
|
|
4
|
+
* Content for copilot-instructions.md and AGENTS.md.
|
|
5
|
+
*/
|
|
6
|
+
declare function buildCopilotInstructions(projectName: string, _serverName: string): string;
|
|
7
|
+
declare function buildAgentsMd(projectName: string, _serverName: string): string;
|
|
8
|
+
//#endregion
|
|
9
|
+
export { buildAgentsMd, buildCopilotInstructions };
|
|
10
|
+
//# sourceMappingURL=templates.d.ts.map
|
|
@@ -0,0 +1,302 @@
|
|
|
1
|
+
function e(e,t){let n=e=>e;return`# ${e} — Copilot Instructions
|
|
2
|
+
|
|
3
|
+
This project uses **@vpxa/kb** as an MCP knowledge base server. The KB provides search, context compression, persistent memory, and validation tools that **MUST** be used to maintain quality and performance.
|
|
4
|
+
|
|
5
|
+
## Mandatory Rules
|
|
6
|
+
|
|
7
|
+
### 1. ALWAYS search before acting
|
|
8
|
+
Before writing or modifying code, you MUST recall prior decisions and understand the affected area:
|
|
9
|
+
\`\`\`
|
|
10
|
+
${n(`search`)}({ query: "<task keywords>" })
|
|
11
|
+
${n(`scope_map`)}({ task: "<what you are doing>" })
|
|
12
|
+
\`\`\`
|
|
13
|
+
|
|
14
|
+
### 2. ALWAYS compress context before reading large files
|
|
15
|
+
Do NOT read entire files into context. Use these tools to reduce tokens and focus on what matters:
|
|
16
|
+
|
|
17
|
+
| Situation | Tool | Why |
|
|
18
|
+
|-----------|------|-----|
|
|
19
|
+
| Need relevant sections of a large file | \`${n(`compact`)}\` | Extracts only semantically relevant chunks — 5-20x reduction |
|
|
20
|
+
| Need to summarize multiple sources | \`${n(`digest`)}\` | Compresses multiple text blocks into a token-budgeted summary |
|
|
21
|
+
| Need a quick structural overview of a file | \`${n(`file_summary`)}\` | Returns exports, imports, functions without reading the full file |
|
|
22
|
+
| Need a reusable context card | \`${n(`stratum_card`)}\` | Generates T1/T2 cards — 10-100x token reduction |
|
|
23
|
+
|
|
24
|
+
**Example — reading a 400-line file:**
|
|
25
|
+
\`\`\`
|
|
26
|
+
# BAD: read_file entire file (wastes ~3000 tokens)
|
|
27
|
+
# GOOD: get structure first, then compact only what you need
|
|
28
|
+
${n(`file_summary`)}({ path: "src/http-client.ts" })
|
|
29
|
+
${n(`compact`)}({ path: "src/http-client.ts", query: "retry logic" })
|
|
30
|
+
\`\`\`
|
|
31
|
+
|
|
32
|
+
### 3. ALWAYS use persistent memory
|
|
33
|
+
- **Start of session**: Read prior knowledge with \`${n(`list`)}()\` and \`${n(`search`)}({ query: "SESSION CHECKPOINT", origin: "curated" })\`
|
|
34
|
+
- **During session**: Use \`${n(`stash`)}\` for temporary working data, \`${n(`checkpoint`)}\` to save progress
|
|
35
|
+
- **End of session**: MUST call \`${n(`remember`)}\` to persist decisions, patterns, and lessons learned
|
|
36
|
+
- **Before proposing a new approach**: MUST \`${n(`search`)}\` to check if a decision already exists
|
|
37
|
+
|
|
38
|
+
| Tool | When | Persistence |
|
|
39
|
+
|------|------|-------------|
|
|
40
|
+
| \`${n(`stash`)}\` | Temporary data within a session (intermediate results, scratch notes) | Session only |
|
|
41
|
+
| \`${n(`checkpoint`)}\` | Save/restore session progress (resumable work) | Session only |
|
|
42
|
+
| \`${n(`remember`)}\` | Architecture decisions, conventions, patterns, troubleshooting | Permanent (survives reindex) |
|
|
43
|
+
|
|
44
|
+
### 4. ALWAYS validate before committing
|
|
45
|
+
\`\`\`
|
|
46
|
+
${n(`check`)}({}) # Typecheck + lint (returns summary by default)
|
|
47
|
+
${n(`test_run`)}({}) # Run tests
|
|
48
|
+
${n(`blast_radius`)}({ changed_files: ["..."] }) # Impact analysis
|
|
49
|
+
${n(`audit`)}({}) # Unified project audit with score and recommendations
|
|
50
|
+
\`\`\`
|
|
51
|
+
|
|
52
|
+
### 5. Use FORGE for complex tasks
|
|
53
|
+
For tasks involving multiple files or architectural decisions:
|
|
54
|
+
\`\`\`
|
|
55
|
+
${n(`forge_classify`)}({ task: "<description>" }) # Classify complexity tier
|
|
56
|
+
${n(`forge_ground`)}({ task: "<description>" }) # Full analysis: scope + constraints + evidence
|
|
57
|
+
${n(`evidence_map`)}({ claims: [...] }) # Track verified vs assumed claims
|
|
58
|
+
\`\`\`
|
|
59
|
+
|
|
60
|
+
## Quick Workflow
|
|
61
|
+
|
|
62
|
+
\`\`\`
|
|
63
|
+
# 1. Orient
|
|
64
|
+
${n(`search`)}({ query: "task keywords" })
|
|
65
|
+
${n(`scope_map`)}({ task: "what you are doing" })
|
|
66
|
+
|
|
67
|
+
# 2. Read efficiently (NEVER raw-read large files)
|
|
68
|
+
${n(`file_summary`)}({ path: "relevant-file.ts" })
|
|
69
|
+
${n(`compact`)}({ path: "relevant-file.ts", query: "specific concern" })
|
|
70
|
+
|
|
71
|
+
# 3. Do the work
|
|
72
|
+
|
|
73
|
+
# 4. Validate
|
|
74
|
+
${n(`check`)}({})
|
|
75
|
+
${n(`test_run`)}({})
|
|
76
|
+
|
|
77
|
+
# 5. Persist
|
|
78
|
+
${n(`remember`)}({ title: "What I learned", content: "...", category: "decisions" })
|
|
79
|
+
\`\`\`
|
|
80
|
+
|
|
81
|
+
## Context Budget Rules
|
|
82
|
+
|
|
83
|
+
- **Prefer \`${n(`file_summary`)}\` over \`read_file\`** for understanding file structure
|
|
84
|
+
- **Prefer \`${n(`compact`)}\` over full file reads** when you need specific sections (use \`path\` param to avoid read_file round-trip)
|
|
85
|
+
- **Prefer \`${n(`search`)}\` over \`grep_search\`** for semantic/conceptual queries
|
|
86
|
+
- **Prefer \`${n(`symbol`)}\` over manual grep** for finding definitions and references
|
|
87
|
+
- **Use \`${n(`digest`)}\`** when combining information from 3+ sources
|
|
88
|
+
- **Use \`${n(`stratum_card`)}\`** to create reusable compressed context for repeated reference
|
|
89
|
+
`}function t(e,t){let n=e=>e;return`# ${e} — Agent Instructions
|
|
90
|
+
|
|
91
|
+
## KB Knowledge Base
|
|
92
|
+
|
|
93
|
+
This project has a **@vpxa/kb** MCP server providing search, analysis, memory, and developer tools.
|
|
94
|
+
|
|
95
|
+
### Skills Reference
|
|
96
|
+
|
|
97
|
+
| Context | Skill | Details |
|
|
98
|
+
|---------|-------|--------|
|
|
99
|
+
| KB search, analysis, memory | \`kb\` | See [.github/skills/knowledge-base/SKILL.md](.github/skills/knowledge-base/SKILL.md) or run \`${n(`status`)}({})\` |
|
|
100
|
+
| Brainstorming & design | \`brainstorming\` | See [.github/skills/brainstorming/SKILL.md](.github/skills/brainstorming/SKILL.md) |
|
|
101
|
+
|
|
102
|
+
### Available Tool Categories
|
|
103
|
+
|
|
104
|
+
| Category | Tools | Purpose |
|
|
105
|
+
|----------|-------|---------|
|
|
106
|
+
| Search & Discovery | \`${n(`search`)}\`, \`${n(`find`)}\`, \`${n(`symbol`)}\`, \`${n(`trace`)}\`, \`${n(`scope_map`)}\`, \`${n(`lookup`)}\`, \`${n(`dead_symbols`)}\`, \`${n(`file_summary`)}\` | Find code, symbols, data flow, reading plans |
|
|
107
|
+
| Code Analysis | \`${n(`analyze_structure`)}\`, \`${n(`analyze_dependencies`)}\`, \`${n(`analyze_symbols`)}\`, \`${n(`analyze_patterns`)}\`, \`${n(`analyze_entry_points`)}\`, \`${n(`analyze_diagram`)}\`, \`${n(`blast_radius`)}\` | Structure, deps, patterns, impact, diagrams |
|
|
108
|
+
| Knowledge | \`${n(`remember`)}\`, \`${n(`read`)}\`, \`${n(`update`)}\`, \`${n(`forget`)}\`, \`${n(`list`)}\`, \`${n(`produce_knowledge`)}\` | Persistent cross-session memory |
|
|
109
|
+
| Execution | \`${n(`check`)}\`, \`${n(`test_run`)}\`, \`${n(`eval`)}\`, \`${n(`batch`)}\`, \`${n(`audit`)}\` | Typecheck, lint, test, run code, unified audit. \`check\` defaults to summary output (~300 tokens) |
|
|
110
|
+
| Code Manipulation | \`${n(`rename`)}\`, \`${n(`codemod`)}\`, \`${n(`diff_parse`)}\`, \`${n(`data_transform`)}\` | Safe renames, transforms, diff parsing |
|
|
111
|
+
| Context | \`${n(`compact`)}\`, \`${n(`workset`)}\`, \`${n(`stash`)}\`, \`${n(`checkpoint`)}\`, \`${n(`parse_output`)}\` | Manage working sets, save progress. \`compact\` accepts \`path\` for server-side file read |
|
|
112
|
+
| FORGE | \`${n(`forge_ground`)}\`, \`${n(`forge_classify`)}\`, \`${n(`evidence_map`)}\`, \`${n(`digest`)}\`, \`${n(`stratum_card`)}\` | Quality gates, context compression |
|
|
113
|
+
| Web & API | \`${n(`web_fetch`)}\`, \`${n(`web_search`)}\`, \`${n(`http`)}\` | Fetch pages, search web, test APIs |
|
|
114
|
+
| Lanes | \`${n(`lane`)}\` | Isolated file copies for parallel exploration (create/list/status/diff/merge/discard) |
|
|
115
|
+
| Git & Environment | \`${n(`git_context`)}\`, \`${n(`process`)}\`, \`${n(`watch`)}\`, \`${n(`delegate`)}\` | Git info, process management |
|
|
116
|
+
| Utilities | \`${n(`regex_test`)}\`, \`${n(`encode`)}\`, \`${n(`measure`)}\`, \`${n(`changelog`)}\`, \`${n(`schema_validate`)}\`, \`${n(`snippet`)}\`, \`${n(`env`)}\`, \`${n(`time`)}\` | Regex, encoding, metrics, validation |
|
|
117
|
+
| System | \`${n(`status`)}\`, \`${n(`reindex`)}\`, \`${n(`health`)}\`, \`${n(`guide`)}\`, \`${n(`onboard`)}\`, \`${n(`graph`)}\`, \`${n(`queue`)}\`, \`${n(`replay`)}\` | Index management, health checks, tool discovery, knowledge graph |
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
|
|
121
|
+
## MANDATORY: Context Reduction Protocol
|
|
122
|
+
|
|
123
|
+
**Every agent interaction MUST minimize context window usage.** Raw file reads waste tokens and degrade LLM output quality. Use these tools instead:
|
|
124
|
+
|
|
125
|
+
### Decision Tree — How to Read Code
|
|
126
|
+
|
|
127
|
+
\`\`\`
|
|
128
|
+
Need to understand a file?
|
|
129
|
+
├─ Just structure? → ${n(`file_summary`)} (exports, imports, functions — ~50 tokens)
|
|
130
|
+
├─ Specific section? → ${n(`compact`)}({ path: "file.ts", query: "topic" }) — 5-20x reduction
|
|
131
|
+
├─ Multiple files? → ${n(`digest`)} (multi-source compression — token-budgeted)
|
|
132
|
+
├─ Repeated reference? → ${n(`stratum_card`)} (T1/T2 card — 10-100x reduction)
|
|
133
|
+
└─ Full file needed? → ONLY as last resort, and compact it after reading
|
|
134
|
+
\`\`\`
|
|
135
|
+
|
|
136
|
+
### Rules
|
|
137
|
+
1. **NEVER read a file >100 lines without compressing it first**
|
|
138
|
+
2. **ALWAYS use \`${n(`file_summary`)}\` before \`read_file\`** — often the summary is sufficient
|
|
139
|
+
3. **ALWAYS use \`${n(`compact`)}\` when you only need specific sections** of a file (use \`path\` param to read server-side)
|
|
140
|
+
4. **Use \`${n(`digest`)}\` when synthesizing from 3+ sources** — don't accumulate raw text
|
|
141
|
+
5. **Use \`${n(`stratum_card`)}\` for files you'll reference repeatedly** in a session
|
|
142
|
+
|
|
143
|
+
---
|
|
144
|
+
|
|
145
|
+
## MANDATORY: Memory Protocol
|
|
146
|
+
|
|
147
|
+
**Every session MUST read and write persistent memory.** Without this, every conversation starts from zero.
|
|
148
|
+
|
|
149
|
+
### Session Start (MUST do ALL of these)
|
|
150
|
+
\`\`\`
|
|
151
|
+
${n(`status`)}({}) # Verify KB is ready
|
|
152
|
+
${n(`list`)}() # See what knowledge exists
|
|
153
|
+
${n(`search`)}({ query: "SESSION CHECKPOINT", origin: "curated" }) # Resume prior work
|
|
154
|
+
\`\`\`
|
|
155
|
+
|
|
156
|
+
### During Session
|
|
157
|
+
| Situation | Action |
|
|
158
|
+
|-----------|--------|
|
|
159
|
+
| Found a useful intermediate result | \`${n(`stash`)}({ key: "name", value: "data" })\` |
|
|
160
|
+
| Completed a milestone | \`${n(`checkpoint`)}({ action: "save", name: "milestone" })\` |
|
|
161
|
+
| Made an architecture decision | \`${n(`remember`)}({ title: "...", category: "decisions" })\` |
|
|
162
|
+
| Discovered a pattern or convention | \`${n(`remember`)}({ title: "...", category: "patterns" })\` |
|
|
163
|
+
| Found a non-obvious solution | \`${n(`remember`)}({ title: "...", category: "troubleshooting" })\` |
|
|
164
|
+
| About to propose a new approach | \`${n(`search`)}({ query: "..." })\` — check if decided before |
|
|
165
|
+
|
|
166
|
+
### Session End (MUST do this)
|
|
167
|
+
\`\`\`
|
|
168
|
+
${n(`remember`)}({
|
|
169
|
+
title: "Session checkpoint: <topic>",
|
|
170
|
+
content: "<what was done, decisions made, blockers, next steps>",
|
|
171
|
+
category: "conventions"
|
|
172
|
+
})
|
|
173
|
+
\`\`\`
|
|
174
|
+
|
|
175
|
+
### Memory Decision Tree
|
|
176
|
+
\`\`\`
|
|
177
|
+
Is this data temporary (scratch, intermediate)?
|
|
178
|
+
├─ Yes → ${n(`stash`)} (session-scoped key-value)
|
|
179
|
+
└─ No → Is it resumable progress?
|
|
180
|
+
├─ Yes → ${n(`checkpoint`)} (session-scoped snapshot)
|
|
181
|
+
└─ No → ${n(`remember`)} (permanent, survives reindex)
|
|
182
|
+
Categories: decisions | patterns | conventions | troubleshooting
|
|
183
|
+
\`\`\`
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## MANDATORY: Search-Before-Act Protocol
|
|
188
|
+
|
|
189
|
+
**NEVER write or modify code without first searching for context.**
|
|
190
|
+
|
|
191
|
+
\`\`\`
|
|
192
|
+
# Before ANY code change:
|
|
193
|
+
${n(`search`)}({ query: "<what you're about to change>" }) # Prior decisions?
|
|
194
|
+
${n(`scope_map`)}({ task: "<description>" }) # What files to read?
|
|
195
|
+
${n(`symbol`)}({ name: "<key symbol>" }) # Where is it defined/used?
|
|
196
|
+
\`\`\`
|
|
197
|
+
|
|
198
|
+
If \`${n(`search`)}\` returns a prior decision about the topic, you MUST follow it or explicitly explain why you're deviating.
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## MANDATORY: Validation Protocol
|
|
203
|
+
|
|
204
|
+
**NEVER commit or present code without validation.**
|
|
205
|
+
|
|
206
|
+
\`\`\`
|
|
207
|
+
${n(`check`)}({}) # Typecheck + lint (tsc + biome)
|
|
208
|
+
${n(`test_run`)}({}) # Run tests
|
|
209
|
+
${n(`blast_radius`)}({ changed_files: ["..."] }) # Impact analysis
|
|
210
|
+
${n(`audit`)}({}) # Unified project audit (structure, deps, patterns, health, dead symbols, entry points)
|
|
211
|
+
\`\`\`
|
|
212
|
+
|
|
213
|
+
---
|
|
214
|
+
|
|
215
|
+
## FORGE Protocol (for complex tasks)
|
|
216
|
+
|
|
217
|
+
For tasks touching 3+ files or involving architectural decisions:
|
|
218
|
+
|
|
219
|
+
\`\`\`
|
|
220
|
+
${n(`forge_classify`)}({ task: "<description>" }) # Quick: Floor/Standard/Critical tier
|
|
221
|
+
${n(`forge_ground`)}({ task: "<description>" }) # Full: scope + constraints + evidence
|
|
222
|
+
${n(`evidence_map`)}({ claims: ["claim1", "claim2"] }) # Track verified vs assumed
|
|
223
|
+
\`\`\`
|
|
224
|
+
|
|
225
|
+
---
|
|
226
|
+
|
|
227
|
+
## Search Modes
|
|
228
|
+
|
|
229
|
+
| Mode | When | Example |
|
|
230
|
+
|------|------|---------|
|
|
231
|
+
| \`hybrid\` (default) | General queries | \`${n(`search`)}({ query: "error handling" })\` |
|
|
232
|
+
| \`semantic\` | Conceptual/meaning-based | \`${n(`search`)}({ query: "retry with backoff", search_mode: "semantic" })\` |
|
|
233
|
+
| \`keyword\` | Exact identifiers | \`${n(`search`)}({ query: "CircuitBreaker", search_mode: "keyword" })\` |
|
|
234
|
+
|
|
235
|
+
Filters: \`origin\` (\`indexed\`/\`curated\`/\`produced\`), \`category\`, \`content_type\`, \`tags\`, \`min_score\`.
|
|
236
|
+
|
|
237
|
+
---
|
|
238
|
+
|
|
239
|
+
## Workflow Chains
|
|
240
|
+
|
|
241
|
+
**Codebase onboarding:**
|
|
242
|
+
\`\`\`
|
|
243
|
+
${n(`onboard`)}({ path: "." }) → ${n(`produce_knowledge`)}({ path: "src/" }) → ${n(`remember`)}(...)
|
|
244
|
+
\`\`\`
|
|
245
|
+
|
|
246
|
+
**Planning a task:**
|
|
247
|
+
\`\`\`
|
|
248
|
+
${n(`search`)}({ query: "task keywords" })
|
|
249
|
+
→ ${n(`scope_map`)}({ task: "description" })
|
|
250
|
+
→ ${n(`file_summary`)} for each file in scope
|
|
251
|
+
→ ${n(`compact`)}({ path: "relevant-file.ts", query: "detail needed" }) for files needing detail
|
|
252
|
+
→ ${n(`workset`)}({ action: "save", name: "task", files: [...] })
|
|
253
|
+
\`\`\`
|
|
254
|
+
|
|
255
|
+
**Bug investigation:**
|
|
256
|
+
\`\`\`
|
|
257
|
+
${n(`parse_output`)}({ output: "<error>" })
|
|
258
|
+
→ ${n(`symbol`)}({ name: "failingFn" })
|
|
259
|
+
→ ${n(`trace`)}({ symbol: "failingFn", direction: "backward" })
|
|
260
|
+
→ ${n(`blast_radius`)}({ changed_files: ["suspect.ts"] })
|
|
261
|
+
\`\`\`
|
|
262
|
+
|
|
263
|
+
**Safe refactor with lanes:**
|
|
264
|
+
\`\`\`
|
|
265
|
+
${n(`lane`)}({ action: "create", name: "refactor", files: [...] })
|
|
266
|
+
→ [make changes]
|
|
267
|
+
→ ${n(`lane`)}({ action: "diff", name: "refactor" })
|
|
268
|
+
→ ${n(`check`)}({}) → ${n(`test_run`)}({})
|
|
269
|
+
→ ${n(`lane`)}({ action: "merge", name: "refactor" })
|
|
270
|
+
\`\`\`
|
|
271
|
+
|
|
272
|
+
**After making changes:**
|
|
273
|
+
\`\`\`
|
|
274
|
+
${n(`blast_radius`)}({ changed_files: ["src/file.ts"] })
|
|
275
|
+
→ ${n(`check`)}({}) → ${n(`test_run`)}({})
|
|
276
|
+
→ ${n(`reindex`)}({})
|
|
277
|
+
→ ${n(`remember`)}(...)
|
|
278
|
+
\`\`\`
|
|
279
|
+
|
|
280
|
+
---
|
|
281
|
+
|
|
282
|
+
## Knowledge Categories
|
|
283
|
+
|
|
284
|
+
| Category | What to store |
|
|
285
|
+
|----------|---------------|
|
|
286
|
+
| \`decisions\` | Architecture choices, trade-offs, rejected alternatives |
|
|
287
|
+
| \`patterns\` | Code patterns, naming conventions, structural patterns |
|
|
288
|
+
| \`conventions\` | Session checkpoints, workflow conventions, team agreements |
|
|
289
|
+
| \`troubleshooting\` | Non-obvious fixes, debugging strategies, workarounds |
|
|
290
|
+
|
|
291
|
+
---
|
|
292
|
+
|
|
293
|
+
## Core Rules Summary
|
|
294
|
+
|
|
295
|
+
1. **Search KB before proposing anything new** — prior decisions exist
|
|
296
|
+
2. **Compress context aggressively** — \`file_summary\` → \`compact\` → \`digest\`
|
|
297
|
+
3. **Use persistent memory** — \`remember\` decisions, \`stash\` temporary data
|
|
298
|
+
4. **Validate before committing** — \`check\` + \`test_run\` + \`blast_radius\`
|
|
299
|
+
5. **Follow \`_Next:\` hints** in tool responses for guided workflow
|
|
300
|
+
6. **Use FORGE for complex tasks** — \`forge_classify\` → \`forge_ground\` → \`evidence_map\`
|
|
301
|
+
`}export{t as buildAgentsMd,e as buildCopilotInstructions};
|
|
302
|
+
//# sourceMappingURL=templates.js.map
|