@vpxa/kb 0.1.15 → 0.1.16
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 +62 -15
- package/package.json +5 -1
- package/packages/analyzers/dist/blast-radius-analyzer.d.ts +1 -2
- package/packages/analyzers/dist/blast-radius-analyzer.js +1 -2
- package/packages/analyzers/dist/dependency-analyzer.d.ts +2 -3
- package/packages/analyzers/dist/dependency-analyzer.js +3 -4
- package/packages/analyzers/dist/diagram-generator.d.ts +1 -2
- package/packages/analyzers/dist/diagram-generator.js +1 -2
- package/packages/analyzers/dist/entry-point-analyzer.d.ts +1 -2
- package/packages/analyzers/dist/entry-point-analyzer.js +3 -4
- package/packages/analyzers/dist/knowledge-producer.d.ts +6 -2
- package/packages/analyzers/dist/knowledge-producer.js +4 -3
- package/packages/analyzers/dist/pattern-analyzer.d.ts +1 -2
- package/packages/analyzers/dist/pattern-analyzer.js +2 -3
- package/packages/analyzers/dist/regex-call-graph.d.ts +1 -2
- package/packages/analyzers/dist/regex-call-graph.js +1 -2
- package/packages/analyzers/dist/structure-analyzer.d.ts +1 -2
- package/packages/analyzers/dist/structure-analyzer.js +1 -2
- package/packages/analyzers/dist/symbol-analyzer.d.ts +3 -3
- package/packages/analyzers/dist/symbol-analyzer.js +8 -7
- package/packages/analyzers/dist/ts-call-graph.d.ts +1 -2
- package/packages/analyzers/dist/ts-call-graph.js +1 -2
- package/packages/analyzers/dist/types.d.ts +1 -2
- package/packages/chunker/dist/call-graph-extractor.d.ts +3 -3
- package/packages/chunker/dist/call-graph-extractor.js +1 -2
- package/packages/chunker/dist/chunker-factory.d.ts +12 -4
- package/packages/chunker/dist/chunker-factory.js +1 -2
- package/packages/chunker/dist/chunker.interface.d.ts +1 -2
- package/packages/chunker/dist/code-chunker.d.ts +1 -2
- package/packages/chunker/dist/code-chunker.js +1 -2
- package/packages/chunker/dist/extractors/call-extractor.d.ts +24 -0
- package/packages/chunker/dist/extractors/call-extractor.js +1 -0
- package/packages/chunker/dist/extractors/entry-point-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/entry-point-detector.js +1 -0
- package/packages/chunker/dist/extractors/import-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/import-extractor.js +1 -0
- package/packages/chunker/dist/extractors/pattern-detector.d.ts +14 -0
- package/packages/chunker/dist/extractors/pattern-detector.js +1 -0
- package/packages/chunker/dist/extractors/scope-resolver.d.ts +26 -0
- package/packages/chunker/dist/extractors/scope-resolver.js +1 -0
- package/packages/chunker/dist/extractors/symbol-extractor.d.ts +14 -0
- package/packages/chunker/dist/extractors/symbol-extractor.js +1 -0
- package/packages/chunker/dist/extractors/types.d.ts +36 -0
- package/packages/chunker/dist/extractors/types.js +1 -0
- package/packages/chunker/dist/generic-chunker.d.ts +1 -2
- package/packages/chunker/dist/generic-chunker.js +1 -2
- package/packages/chunker/dist/index.d.ts +15 -4
- package/packages/chunker/dist/index.js +1 -1
- package/packages/chunker/dist/markdown-chunker.d.ts +1 -2
- package/packages/chunker/dist/markdown-chunker.js +1 -2
- package/packages/chunker/dist/wasm/languages.d.ts +18 -0
- package/packages/chunker/dist/wasm/languages.js +1 -0
- package/packages/chunker/dist/wasm/query-executor.d.ts +70 -0
- package/packages/chunker/dist/wasm/query-executor.js +1 -0
- package/packages/chunker/dist/wasm/runtime.d.ts +44 -0
- package/packages/chunker/dist/wasm/runtime.js +1 -0
- package/packages/chunker/dist/wasm/types.d.ts +84 -0
- package/packages/chunker/dist/wasm/types.js +1 -0
- package/packages/chunker/dist/wasm-chunker.d.ts +23 -0
- package/packages/chunker/dist/wasm-chunker.js +6 -0
- package/packages/chunker/src/queries/go/calls.scm +11 -0
- package/packages/chunker/src/queries/go/entry-points.scm +20 -0
- package/packages/chunker/src/queries/go/imports.scm +6 -0
- package/packages/chunker/src/queries/go/patterns.scm +25 -0
- package/packages/chunker/src/queries/go/symbols.scm +26 -0
- package/packages/chunker/src/queries/java/calls.scm +10 -0
- package/packages/chunker/src/queries/java/entry-points.scm +27 -0
- package/packages/chunker/src/queries/java/imports.scm +11 -0
- package/packages/chunker/src/queries/java/patterns.scm +27 -0
- package/packages/chunker/src/queries/java/symbols.scm +28 -0
- package/packages/chunker/src/queries/javascript/calls.scm +21 -0
- package/packages/chunker/src/queries/javascript/entry-points.scm +31 -0
- package/packages/chunker/src/queries/javascript/imports.scm +32 -0
- package/packages/chunker/src/queries/javascript/patterns.scm +28 -0
- package/packages/chunker/src/queries/javascript/symbols.scm +52 -0
- package/packages/chunker/src/queries/python/calls.scm +11 -0
- package/packages/chunker/src/queries/python/entry-points.scm +21 -0
- package/packages/chunker/src/queries/python/imports.scm +14 -0
- package/packages/chunker/src/queries/python/patterns.scm +25 -0
- package/packages/chunker/src/queries/python/symbols.scm +17 -0
- package/packages/chunker/src/queries/rust/calls.scm +20 -0
- package/packages/chunker/src/queries/rust/entry-points.scm +7 -0
- package/packages/chunker/src/queries/rust/imports.scm +26 -0
- package/packages/chunker/src/queries/rust/patterns.scm +18 -0
- package/packages/chunker/src/queries/rust/symbols.scm +73 -0
- package/packages/chunker/src/queries/typescript/calls.scm +21 -0
- package/packages/chunker/src/queries/typescript/entry-points.scm +48 -0
- package/packages/chunker/src/queries/typescript/imports.scm +35 -0
- package/packages/chunker/src/queries/typescript/patterns.scm +47 -0
- package/packages/chunker/src/queries/typescript/symbols.scm +79 -0
- package/packages/chunker/wasm/tree-sitter-go.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-java.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-javascript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-python.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-rust.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter-typescript.wasm +0 -0
- package/packages/chunker/wasm/tree-sitter.wasm +0 -0
- package/packages/cli/dist/commands/analyze.d.ts +1 -2
- package/packages/cli/dist/commands/analyze.js +1 -2
- package/packages/cli/dist/commands/context-cmds.d.ts +1 -2
- package/packages/cli/dist/commands/context-cmds.js +1 -2
- package/packages/cli/dist/commands/environment.d.ts +1 -2
- package/packages/cli/dist/commands/environment.js +1 -2
- package/packages/cli/dist/commands/execution.d.ts +1 -2
- package/packages/cli/dist/commands/execution.js +1 -2
- package/packages/cli/dist/commands/graph.d.ts +1 -2
- package/packages/cli/dist/commands/graph.js +1 -2
- package/packages/cli/dist/commands/init/adapters.d.ts +4 -3
- package/packages/cli/dist/commands/init/adapters.js +1 -2
- package/packages/cli/dist/commands/init/config.d.ts +1 -2
- package/packages/cli/dist/commands/init/config.js +3 -4
- package/packages/cli/dist/commands/init/constants.d.ts +18 -0
- package/packages/cli/dist/commands/init/constants.js +1 -0
- package/packages/cli/dist/commands/init/curated.d.ts +1 -2
- package/packages/cli/dist/commands/init/curated.js +1 -2
- package/packages/cli/dist/commands/init/global.d.ts +34 -0
- package/packages/cli/dist/commands/init/global.js +5 -0
- package/packages/cli/dist/commands/init/index.d.ts +7 -2
- package/packages/cli/dist/commands/init/index.js +5 -3
- package/packages/cli/dist/commands/init/scaffold.d.ts +1 -2
- package/packages/cli/dist/commands/init/scaffold.js +1 -2
- package/packages/cli/dist/commands/init/templates.d.ts +3 -4
- package/packages/cli/dist/commands/init/templates.js +106 -243
- package/packages/cli/dist/commands/knowledge.d.ts +1 -2
- package/packages/cli/dist/commands/knowledge.js +1 -2
- package/packages/cli/dist/commands/search.d.ts +1 -2
- package/packages/cli/dist/commands/search.js +1 -2
- package/packages/cli/dist/commands/system.d.ts +1 -2
- package/packages/cli/dist/commands/system.js +3 -4
- package/packages/cli/dist/commands/workspace.d.ts +1 -2
- package/packages/cli/dist/commands/workspace.js +1 -2
- package/packages/cli/dist/context.d.ts +1 -2
- package/packages/cli/dist/context.js +1 -2
- package/packages/cli/dist/helpers.d.ts +1 -2
- package/packages/cli/dist/helpers.js +1 -2
- package/packages/cli/dist/index.d.ts +1 -2
- package/packages/cli/dist/index.js +1 -2
- package/packages/cli/dist/kb-init.d.ts +1 -2
- package/packages/cli/dist/kb-init.js +1 -2
- package/packages/cli/dist/types.d.ts +1 -2
- package/packages/core/dist/constants.d.ts +23 -2
- package/packages/core/dist/constants.js +1 -2
- package/packages/core/dist/content-detector.d.ts +1 -2
- package/packages/core/dist/content-detector.js +1 -2
- package/packages/core/dist/errors.d.ts +1 -2
- package/packages/core/dist/errors.js +1 -2
- package/packages/core/dist/global-registry.d.ts +62 -0
- package/packages/core/dist/global-registry.js +1 -0
- package/packages/core/dist/index.d.ts +4 -3
- package/packages/core/dist/index.js +1 -1
- package/packages/core/dist/logger.d.ts +4 -2
- package/packages/core/dist/logger.js +1 -2
- package/packages/core/dist/types.d.ts +1 -2
- package/packages/core/dist/types.js +1 -2
- package/packages/embeddings/dist/embedder.interface.d.ts +1 -2
- package/packages/embeddings/dist/onnx-embedder.d.ts +1 -2
- package/packages/embeddings/dist/onnx-embedder.js +1 -2
- package/packages/enterprise-bridge/dist/cache.d.ts +1 -2
- package/packages/enterprise-bridge/dist/cache.js +1 -2
- package/packages/enterprise-bridge/dist/er-client.d.ts +1 -2
- package/packages/enterprise-bridge/dist/er-client.js +1 -2
- package/packages/enterprise-bridge/dist/evolution-collector.d.ts +1 -2
- package/packages/enterprise-bridge/dist/evolution-collector.js +1 -2
- package/packages/enterprise-bridge/dist/policy-store.d.ts +1 -2
- package/packages/enterprise-bridge/dist/policy-store.js +1 -2
- package/packages/enterprise-bridge/dist/push-adapter.d.ts +1 -2
- package/packages/enterprise-bridge/dist/push-adapter.js +1 -2
- package/packages/enterprise-bridge/dist/result-merger.d.ts +1 -2
- package/packages/enterprise-bridge/dist/result-merger.js +1 -2
- package/packages/enterprise-bridge/dist/types.d.ts +1 -2
- package/packages/enterprise-bridge/dist/types.js +1 -2
- package/packages/indexer/dist/file-hasher.d.ts +1 -2
- package/packages/indexer/dist/file-hasher.js +1 -2
- package/packages/indexer/dist/filesystem-crawler.d.ts +1 -2
- package/packages/indexer/dist/filesystem-crawler.js +1 -2
- package/packages/indexer/dist/graph-extractor.d.ts +1 -2
- package/packages/indexer/dist/graph-extractor.js +1 -2
- package/packages/indexer/dist/incremental-indexer.d.ts +1 -2
- package/packages/indexer/dist/incremental-indexer.js +1 -2
- package/packages/server/dist/config.d.ts +1 -2
- package/packages/server/dist/config.js +1 -2
- package/packages/server/dist/cross-workspace.d.ts +43 -0
- package/packages/server/dist/cross-workspace.js +1 -0
- package/packages/server/dist/curated-manager.d.ts +2 -3
- package/packages/server/dist/curated-manager.js +4 -5
- package/packages/server/dist/index.js +1 -2
- package/packages/server/dist/replay-interceptor.d.ts +1 -2
- package/packages/server/dist/replay-interceptor.js +1 -2
- package/packages/server/dist/resources/resources.d.ts +1 -2
- package/packages/server/dist/resources/resources.js +1 -2
- package/packages/server/dist/server.d.ts +4 -2
- package/packages/server/dist/server.js +1 -2
- package/packages/server/dist/tools/analyze.tools.d.ts +1 -2
- package/packages/server/dist/tools/analyze.tools.js +1 -2
- package/packages/server/dist/tools/audit.tool.d.ts +1 -2
- package/packages/server/dist/tools/audit.tool.js +1 -2
- package/packages/server/dist/tools/bridge.tools.d.ts +1 -2
- package/packages/server/dist/tools/bridge.tools.js +1 -2
- package/packages/server/dist/tools/evolution.tools.d.ts +1 -2
- package/packages/server/dist/tools/evolution.tools.js +1 -2
- package/packages/server/dist/tools/forge.tools.d.ts +1 -2
- package/packages/server/dist/tools/forge.tools.js +5 -6
- package/packages/server/dist/tools/forget.tool.d.ts +1 -2
- package/packages/server/dist/tools/forget.tool.js +1 -2
- package/packages/server/dist/tools/graph.tool.d.ts +1 -2
- package/packages/server/dist/tools/graph.tool.js +1 -2
- package/packages/server/dist/tools/list.tool.d.ts +1 -2
- package/packages/server/dist/tools/list.tool.js +1 -2
- package/packages/server/dist/tools/lookup.tool.d.ts +1 -2
- package/packages/server/dist/tools/lookup.tool.js +1 -2
- package/packages/server/dist/tools/onboard.tool.d.ts +1 -2
- package/packages/server/dist/tools/onboard.tool.js +1 -2
- package/packages/server/dist/tools/policy.tools.d.ts +1 -2
- package/packages/server/dist/tools/policy.tools.js +1 -2
- package/packages/server/dist/tools/produce.tool.d.ts +1 -2
- package/packages/server/dist/tools/produce.tool.js +1 -2
- package/packages/server/dist/tools/read.tool.d.ts +1 -2
- package/packages/server/dist/tools/read.tool.js +2 -3
- package/packages/server/dist/tools/reindex.tool.d.ts +1 -2
- package/packages/server/dist/tools/reindex.tool.js +3 -3
- package/packages/server/dist/tools/remember.tool.d.ts +1 -2
- package/packages/server/dist/tools/remember.tool.js +1 -2
- package/packages/server/dist/tools/replay.tool.d.ts +1 -2
- package/packages/server/dist/tools/replay.tool.js +1 -2
- package/packages/server/dist/tools/search.tool.d.ts +1 -2
- package/packages/server/dist/tools/search.tool.js +4 -5
- package/packages/server/dist/tools/status.tool.d.ts +7 -3
- package/packages/server/dist/tools/status.tool.js +2 -3
- package/packages/server/dist/tools/toolkit.tools.d.ts +1 -2
- package/packages/server/dist/tools/toolkit.tools.js +19 -19
- package/packages/server/dist/tools/update.tool.d.ts +1 -2
- package/packages/server/dist/tools/update.tool.js +1 -2
- package/packages/server/dist/tools/utility.tools.d.ts +1 -2
- package/packages/server/dist/tools/utility.tools.js +2 -3
- package/packages/server/dist/version-check.d.ts +1 -2
- package/packages/server/dist/version-check.js +1 -2
- package/packages/store/dist/graph-store.interface.d.ts +1 -2
- package/packages/store/dist/lance-store.d.ts +1 -2
- package/packages/store/dist/lance-store.js +1 -2
- package/packages/store/dist/sqlite-graph-store.d.ts +1 -2
- package/packages/store/dist/sqlite-graph-store.js +6 -7
- package/packages/store/dist/store-factory.d.ts +1 -2
- package/packages/store/dist/store-factory.js +1 -2
- package/packages/store/dist/store.interface.d.ts +1 -2
- package/packages/tools/dist/audit.d.ts +1 -2
- package/packages/tools/dist/audit.js +1 -2
- package/packages/tools/dist/batch.d.ts +1 -2
- package/packages/tools/dist/batch.js +1 -2
- package/packages/tools/dist/changelog.d.ts +1 -2
- package/packages/tools/dist/changelog.js +2 -3
- package/packages/tools/dist/check.d.ts +1 -2
- package/packages/tools/dist/check.js +2 -3
- package/packages/tools/dist/checkpoint.d.ts +1 -2
- package/packages/tools/dist/checkpoint.js +1 -2
- package/packages/tools/dist/codemod.d.ts +1 -2
- package/packages/tools/dist/codemod.js +1 -2
- package/packages/tools/dist/compact.d.ts +1 -2
- package/packages/tools/dist/compact.js +1 -2
- package/packages/tools/dist/data-transform.d.ts +1 -2
- package/packages/tools/dist/data-transform.js +1 -2
- package/packages/tools/dist/dead-symbols.d.ts +1 -2
- package/packages/tools/dist/dead-symbols.js +2 -3
- package/packages/tools/dist/delegate.d.ts +1 -2
- package/packages/tools/dist/delegate.js +1 -2
- package/packages/tools/dist/diff-parse.d.ts +1 -2
- package/packages/tools/dist/diff-parse.js +1 -2
- package/packages/tools/dist/digest.d.ts +1 -2
- package/packages/tools/dist/digest.js +1 -2
- package/packages/tools/dist/dogfood-log.d.ts +49 -0
- package/packages/tools/dist/dogfood-log.js +2 -0
- package/packages/tools/dist/encode.d.ts +1 -2
- package/packages/tools/dist/encode.js +1 -2
- package/packages/tools/dist/env-info.d.ts +1 -2
- package/packages/tools/dist/env-info.js +1 -2
- package/packages/tools/dist/eval.d.ts +1 -2
- package/packages/tools/dist/eval.js +1 -2
- package/packages/tools/dist/evidence-map.d.ts +1 -2
- package/packages/tools/dist/evidence-map.js +2 -3
- package/packages/tools/dist/file-cache.d.ts +1 -2
- package/packages/tools/dist/file-cache.js +1 -2
- package/packages/tools/dist/file-summary.d.ts +17 -2
- package/packages/tools/dist/file-summary.js +2 -3
- package/packages/tools/dist/file-walk.d.ts +1 -2
- package/packages/tools/dist/file-walk.js +1 -2
- package/packages/tools/dist/find-examples.d.ts +1 -2
- package/packages/tools/dist/find-examples.js +1 -2
- package/packages/tools/dist/find.d.ts +1 -2
- package/packages/tools/dist/find.js +1 -2
- package/packages/tools/dist/forge-classify.d.ts +1 -2
- package/packages/tools/dist/forge-classify.js +2 -3
- package/packages/tools/dist/forge-ground.d.ts +1 -2
- package/packages/tools/dist/forge-ground.js +1 -2
- package/packages/tools/dist/git-context.d.ts +1 -2
- package/packages/tools/dist/git-context.js +1 -2
- package/packages/tools/dist/graph-query.d.ts +1 -2
- package/packages/tools/dist/graph-query.js +1 -2
- package/packages/tools/dist/guide.d.ts +1 -2
- package/packages/tools/dist/guide.js +1 -2
- package/packages/tools/dist/health.d.ts +1 -2
- package/packages/tools/dist/health.js +1 -2
- package/packages/tools/dist/http-request.d.ts +1 -2
- package/packages/tools/dist/http-request.js +1 -2
- package/packages/tools/dist/index.d.ts +2 -1
- package/packages/tools/dist/index.js +1 -1
- package/packages/tools/dist/lane.d.ts +1 -2
- package/packages/tools/dist/lane.js +3 -4
- package/packages/tools/dist/measure.d.ts +4 -3
- package/packages/tools/dist/measure.js +2 -3
- package/packages/tools/dist/onboard.d.ts +1 -2
- package/packages/tools/dist/onboard.js +14 -15
- package/packages/tools/dist/parse-output.d.ts +1 -2
- package/packages/tools/dist/parse-output.js +2 -3
- package/packages/tools/dist/path-resolver.d.ts +1 -2
- package/packages/tools/dist/path-resolver.js +1 -2
- package/packages/tools/dist/process-manager.d.ts +1 -2
- package/packages/tools/dist/process-manager.js +1 -2
- package/packages/tools/dist/queue.d.ts +1 -2
- package/packages/tools/dist/queue.js +1 -2
- package/packages/tools/dist/regex-test.d.ts +1 -2
- package/packages/tools/dist/regex-test.js +1 -2
- package/packages/tools/dist/rename.d.ts +1 -2
- package/packages/tools/dist/rename.js +1 -2
- package/packages/tools/dist/replay.d.ts +2 -3
- package/packages/tools/dist/replay.js +4 -5
- package/packages/tools/dist/response-envelope.d.ts +1 -2
- package/packages/tools/dist/response-envelope.js +1 -2
- package/packages/tools/dist/schema-validate.d.ts +1 -2
- package/packages/tools/dist/schema-validate.js +1 -2
- package/packages/tools/dist/scope-map.d.ts +1 -2
- package/packages/tools/dist/scope-map.js +1 -2
- package/packages/tools/dist/snippet.d.ts +1 -2
- package/packages/tools/dist/snippet.js +1 -2
- package/packages/tools/dist/stash.d.ts +1 -2
- package/packages/tools/dist/stash.js +1 -2
- package/packages/tools/dist/stratum-card.d.ts +1 -2
- package/packages/tools/dist/stratum-card.js +1 -2
- package/packages/tools/dist/symbol.d.ts +3 -2
- package/packages/tools/dist/symbol.js +3 -4
- package/packages/tools/dist/test-run.d.ts +1 -2
- package/packages/tools/dist/test-run.js +2 -3
- package/packages/tools/dist/text-utils.d.ts +1 -2
- package/packages/tools/dist/text-utils.js +1 -2
- package/packages/tools/dist/time-utils.d.ts +1 -2
- package/packages/tools/dist/time-utils.js +1 -2
- package/packages/tools/dist/trace.d.ts +3 -2
- package/packages/tools/dist/trace.js +2 -3
- package/packages/tools/dist/truncation.d.ts +1 -2
- package/packages/tools/dist/truncation.js +1 -2
- package/packages/tools/dist/watch.d.ts +1 -2
- package/packages/tools/dist/watch.js +1 -2
- package/packages/tools/dist/web-fetch.d.ts +1 -2
- package/packages/tools/dist/web-fetch.js +1 -2
- package/packages/tools/dist/web-search.d.ts +1 -2
- package/packages/tools/dist/web-search.js +1 -2
- package/packages/tools/dist/workset.d.ts +1 -2
- package/packages/tools/dist/workset.js +1 -2
- package/packages/tui/dist/{App-BAlmxCCw.js → App-CYLNJLr6.js} +1 -2
- package/packages/tui/dist/App.d.ts +1 -2
- package/packages/tui/dist/App.js +1 -1
- package/packages/tui/dist/CuratedPanel-sYdZAICX.js +1 -2
- package/packages/tui/dist/LogPanel-DtMnoyXT.js +3 -0
- package/packages/tui/dist/SearchPanel-DREo6zgt.js +1 -2
- package/packages/tui/dist/StatusPanel-2ex8fLOO.js +1 -2
- package/packages/tui/dist/devtools-DUyj952l.js +1 -2
- package/packages/tui/dist/embedder.interface-D4ew0HPW.d.ts +1 -2
- package/packages/tui/dist/index-B9VpfVPP.d.ts +1 -2
- package/packages/tui/dist/index.js +1 -2
- package/packages/tui/dist/jsx-runtime-Cof-kwFn.js +1 -2
- package/packages/tui/dist/panels/CuratedPanel.d.ts +1 -2
- package/packages/tui/dist/panels/LogPanel.d.ts +1 -2
- package/packages/tui/dist/panels/LogPanel.js +1 -1
- package/packages/tui/dist/panels/SearchPanel.d.ts +1 -2
- package/packages/tui/dist/panels/StatusPanel.d.ts +1 -2
- package/packages/tui/dist/store.interface-CnY6SPOH.d.ts +1 -2
- package/scaffold/copilot/agents/Architect-Reviewer-Alpha.agent.md +7 -0
- package/scaffold/copilot/agents/Architect-Reviewer-Beta.agent.md +7 -0
- package/scaffold/copilot/agents/Documenter.agent.md +7 -0
- package/scaffold/copilot/agents/Orchestrator.agent.md +8 -0
- package/scaffold/copilot/agents/Planner.agent.md +9 -0
- package/scaffold/copilot/agents/Refactor.agent.md +6 -0
- package/scaffold/copilot/agents/Researcher-Alpha.agent.md +8 -0
- package/scaffold/copilot/agents/Researcher-Beta.agent.md +8 -0
- package/scaffold/copilot/agents/Researcher-Delta.agent.md +8 -0
- package/scaffold/copilot/agents/Researcher-Gamma.agent.md +8 -0
- package/scaffold/general/agents/Architect-Reviewer-Alpha.agent.md +21 -0
- package/scaffold/general/agents/Architect-Reviewer-Beta.agent.md +21 -0
- package/scaffold/general/agents/Documenter.agent.md +42 -0
- package/scaffold/general/agents/Orchestrator.agent.md +104 -0
- package/scaffold/general/agents/Planner.agent.md +55 -0
- package/scaffold/general/agents/Refactor.agent.md +36 -0
- package/scaffold/general/agents/Researcher-Alpha.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Beta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Delta.agent.md +20 -0
- package/scaffold/general/agents/Researcher-Gamma.agent.md +20 -0
- package/scaffold/{copilot → general}/agents/_shared/code-agent-base.md +18 -0
- package/skills/adr-skill/SKILL.md +329 -0
- package/skills/adr-skill/assets/templates/adr-madr.md +89 -0
- package/skills/adr-skill/assets/templates/adr-readme.md +20 -0
- package/skills/adr-skill/assets/templates/adr-simple.md +46 -0
- package/skills/adr-skill/references/adr-conventions.md +95 -0
- package/skills/adr-skill/references/examples.md +193 -0
- package/skills/adr-skill/references/review-checklist.md +77 -0
- package/skills/adr-skill/references/template-variants.md +52 -0
- package/skills/adr-skill/scripts/bootstrap_adr.js +259 -0
- package/skills/adr-skill/scripts/new_adr.js +391 -0
- package/skills/adr-skill/scripts/set_adr_status.js +169 -0
- package/skills/c4-architecture/SKILL.md +295 -0
- package/skills/c4-architecture/references/advanced-patterns.md +552 -0
- package/skills/c4-architecture/references/c4-syntax.md +492 -0
- package/skills/c4-architecture/references/common-mistakes.md +437 -0
- package/skills/knowledge-base/SKILL.md +78 -1
- package/skills/lesson-learned/SKILL.md +105 -0
- package/skills/lesson-learned/references/anti-patterns.md +55 -0
- package/skills/lesson-learned/references/se-principles.md +109 -0
- package/skills/requirements-clarity/SKILL.md +324 -0
- package/skills/session-handoff/SKILL.md +189 -0
- package/skills/session-handoff/references/handoff-template.md +139 -0
- package/skills/session-handoff/references/resume-checklist.md +80 -0
- package/skills/session-handoff/scripts/check_staleness.js +269 -0
- package/skills/session-handoff/scripts/create_handoff.js +299 -0
- package/skills/session-handoff/scripts/list_handoffs.js +113 -0
- package/skills/session-handoff/scripts/validate_handoff.js +241 -0
- package/packages/chunker/dist/treesitter-chunker.d.ts +0 -44
- package/packages/chunker/dist/treesitter-chunker.js +0 -7
- package/packages/cli/dist/commands/init.d.ts +0 -15
- package/packages/cli/dist/commands/init.js +0 -305
- package/packages/tui/dist/LogPanel-DVB8Sv46.js +0 -4
- /package/scaffold/{copilot → general}/agents/Code-Reviewer-Alpha.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/Code-Reviewer-Beta.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/Debugger.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/Explorer.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/Frontend.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/Implementer.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/README.md +0 -0
- /package/scaffold/{copilot → general}/agents/Security.agent.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/adr-protocol.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/architect-reviewer-base.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/code-reviewer-base.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/decision-protocol.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/forge-protocol.md +0 -0
- /package/scaffold/{copilot → general}/agents/_shared/researcher-base.md +0 -0
- /package/scaffold/{copilot → general}/agents/templates/adr-template.md +0 -0
- /package/scaffold/{copilot → general}/agents/templates/execution-state.md +0 -0
- /package/scaffold/{copilot → general}/prompts/ask.prompt.md +0 -0
- /package/scaffold/{copilot → general}/prompts/debug.prompt.md +0 -0
- /package/scaffold/{copilot → general}/prompts/design.prompt.md +0 -0
- /package/scaffold/{copilot → general}/prompts/implement.prompt.md +0 -0
- /package/scaffold/{copilot → general}/prompts/plan.prompt.md +0 -0
- /package/scaffold/{copilot → general}/prompts/review.prompt.md +0 -0
|
@@ -1,226 +1,143 @@
|
|
|
1
|
-
function e(e,t){
|
|
1
|
+
function e(e,t){return`# ${e} — Copilot Instructions
|
|
2
2
|
|
|
3
|
-
This project
|
|
3
|
+
This project has an MCP server (\`${t}\`) providing 64 tools for search, analysis, memory, and validation.
|
|
4
|
+
**These tools REPLACE most native IDE tools.** You MUST use them.
|
|
4
5
|
|
|
5
|
-
##
|
|
6
|
+
## Step 0: Load KB Tools
|
|
6
7
|
|
|
7
|
-
|
|
8
|
-
|
|
8
|
+
Before doing ANYTHING else, load the KB MCP tools. They are deferred — you must load them first.
|
|
9
|
+
Search for tools matching the server name (e.g. \`knowledge-bas\`):
|
|
9
10
|
\`\`\`
|
|
10
|
-
|
|
11
|
-
${n(`scope_map`)}({ task: "<what you are doing>" })
|
|
11
|
+
tool_search_tool_regex({ pattern: "knowledge-bas" }) // loads all 64 KB tools
|
|
12
12
|
\`\`\`
|
|
13
|
+
Once loaded, KB tools appear as \`mcp_<server>_<tool>\` (e.g. \`mcp_knowledge-bas_search\`).
|
|
13
14
|
|
|
14
|
-
|
|
15
|
-
Do NOT read entire files into context. Use these tools to reduce tokens and focus on what matters:
|
|
15
|
+
## FORBIDDEN: Native Tools When KB Alternative Exists
|
|
16
16
|
|
|
17
|
-
|
|
|
18
|
-
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
|
22
|
-
|
|
|
17
|
+
| NEVER use this | USE THIS KB TOOL INSTEAD | Why |
|
|
18
|
+
|---|---|---|
|
|
19
|
+
| \`read_file\` to understand a file | \`file_summary({ path })\` | Structure, exports, imports — 10x fewer tokens |
|
|
20
|
+
| \`read_file\` to find specific code | \`compact({ path, query })\` | Server-side read + semantic extract — 5-20x reduction |
|
|
21
|
+
| Multiple \`read_file\` calls | \`digest({ sources })\` | Compresses multiple files into token-budgeted summary |
|
|
22
|
+
| \`grep_search\` / \`semantic_search\` | \`search({ query })\` | Hybrid search across all indexed + curated content |
|
|
23
|
+
| \`grep_search\` for a symbol name | \`symbol({ name })\` | Definition + references with scope and call context |
|
|
24
|
+
| \`run_in_terminal\` for find/grep | \`find({ pattern })\` or \`search()\` | No shell needed, richer results |
|
|
25
|
+
| \`run_in_terminal\` for tsc/lint | \`check({})\` | Typecheck + lint combined, summary output |
|
|
26
|
+
| \`run_in_terminal\` for test | \`test_run({})\` | Run tests with structured output |
|
|
27
|
+
| Manual code tracing | \`trace({ symbol, direction })\` | AST call-graph traversal |
|
|
28
|
+
| Line counting / wc | \`measure({ path })\` | Lines, functions, cognitive complexity |
|
|
23
29
|
|
|
24
|
-
|
|
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) |
|
|
30
|
+
**\`read_file\` is ONLY acceptable when you need exact line content FOR EDITING (before \`replace_string_in_file\`).**
|
|
31
|
+
Even then, use \`file_summary\` first to identify which lines to read.
|
|
43
32
|
|
|
44
|
-
|
|
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
|
-
\`\`\`
|
|
33
|
+
## Core Rules
|
|
51
34
|
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
${n(`evidence_map`)}({ claims: [...] }) # Track verified vs assumed claims
|
|
58
|
-
\`\`\`
|
|
35
|
+
1. **Search before acting** — \`search({ query })\` then \`scope_map({ task })\` before ANY code change. If a prior decision exists, follow it.
|
|
36
|
+
2. **Compress, don't read** — \`file_summary\` → \`compact\` → \`digest\`. NEVER raw-read a file to "understand" it.
|
|
37
|
+
3. **Remember** — \`search({ query: "SESSION CHECKPOINT", origin: "curated" })\` at session start. \`remember()\` decisions at session end.
|
|
38
|
+
4. **Validate** — \`check({})\` + \`test_run({})\` before presenting changes. \`blast_radius({ changed_files })\` for impact.
|
|
39
|
+
5. **Lifecycle** — Check \`status({})\` first. If onboard not run, run \`onboard({ path: "." })\`. After implementation, \`reindex({})\` + \`produce_knowledge({})\`. At session end, \`remember()\` checkpoint.
|
|
59
40
|
|
|
60
|
-
##
|
|
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
|
-
\`\`\`
|
|
41
|
+
## Custom Agents
|
|
80
42
|
|
|
81
|
-
|
|
43
|
+
This project has specialized agents in \`.github/agents/\`. Use them instead of built-in modes:
|
|
44
|
+
- **Planner** — for planning and research before implementation
|
|
45
|
+
- **Implementer** — for coding tasks following TDD practices
|
|
46
|
+
- **Researcher** — for deep investigation and context gathering
|
|
47
|
+
- **Explorer** — for rapid codebase navigation
|
|
82
48
|
|
|
83
|
-
|
|
84
|
-
|
|
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
|
|
49
|
+
Check \`.github/agents/\` for the full list of available agents.
|
|
50
|
+
`}function t(e,t){return`# ${e} — Agent Instructions
|
|
90
51
|
|
|
91
|
-
## KB
|
|
52
|
+
## KB MCP Server (\`${t}\`)
|
|
92
53
|
|
|
93
|
-
|
|
54
|
+
64 tools for search, code analysis, persistent memory, validation, and context compression.
|
|
55
|
+
Load them: \`tool_search_tool_regex({ pattern: "knowledge-bas" })\`
|
|
94
56
|
|
|
95
57
|
### Skills Reference
|
|
96
58
|
|
|
97
|
-
| Context | Skill |
|
|
98
|
-
|
|
99
|
-
| KB search, analysis, memory | \`
|
|
100
|
-
| Brainstorming & design | \`brainstorming\` |
|
|
59
|
+
| Context | Skill | Load when |
|
|
60
|
+
|---------|-------|----------|
|
|
61
|
+
| KB search, analysis, memory | \`knowledge-base\` | **Always load at session start.** Tool signatures, workflows, session protocol. |
|
|
62
|
+
| Brainstorming & design | \`brainstorming\` | Before any creative/design work — new features, components, behavior changes. |
|
|
63
|
+
| Session context preservation | \`session-handoff\` | Context window filling up, session ending, or major milestone completed. |
|
|
64
|
+
| Requirements scoring | \`requirements-clarity\` | Before planning vague or complex features — score 0-100 until \u2265 90. |
|
|
65
|
+
| Engineering lessons | \`lesson-learned\` | After completing work — extract principles from git diffs. |
|
|
66
|
+
| Architecture diagrams | \`c4-architecture\` | When documenting or reviewing architecture — C4 Mermaid diagrams. |
|
|
67
|
+
| Architecture decisions | \`adr-skill\` | When making non-trivial technical decisions — executable ADRs. |
|
|
101
68
|
|
|
102
|
-
###
|
|
69
|
+
### Tool Categories
|
|
103
70
|
|
|
104
71
|
| Category | Tools | Purpose |
|
|
105
72
|
|----------|-------|---------|
|
|
106
|
-
| Search & Discovery |
|
|
107
|
-
| Code Analysis |
|
|
108
|
-
| Knowledge |
|
|
109
|
-
| Execution |
|
|
110
|
-
|
|
|
111
|
-
|
|
|
112
|
-
|
|
|
113
|
-
| Web & API |
|
|
114
|
-
| Lanes |
|
|
115
|
-
| Git & Environment |
|
|
116
|
-
| Utilities |
|
|
117
|
-
| System |
|
|
73
|
+
| Search & Discovery | \`search\`, \`find\`, \`symbol\`, \`trace\`, \`scope_map\`, \`lookup\`, \`dead_symbols\`, \`file_summary\` | Find code, symbols, data flow, reading plans |
|
|
74
|
+
| Code Analysis | \`analyze_structure\`, \`analyze_dependencies\`, \`analyze_symbols\`, \`analyze_patterns\`, \`analyze_entry_points\`, \`analyze_diagram\`, \`blast_radius\` | Structure, deps, patterns, impact |
|
|
75
|
+
| Knowledge | \`remember\`, \`read\`, \`update\`, \`forget\`, \`list\`, \`produce_knowledge\` | Persistent cross-session memory |
|
|
76
|
+
| Execution | \`check\`, \`test_run\`, \`eval\`, \`batch\`, \`audit\` | Typecheck, lint, test, run code |
|
|
77
|
+
| Context Compression | \`compact\`, \`digest\`, \`stratum_card\`, \`workset\`, \`stash\`, \`checkpoint\` | Reduce tokens, manage working sets |
|
|
78
|
+
| FORGE | \`forge_ground\`, \`forge_classify\`, \`evidence_map\` | Quality gates for complex tasks |
|
|
79
|
+
| Code Manipulation | \`rename\`, \`codemod\`, \`diff_parse\`, \`data_transform\` | Safe renames, transforms |
|
|
80
|
+
| Web & API | \`web_fetch\`, \`web_search\`, \`http\` | Fetch pages, search web |
|
|
81
|
+
| Lanes | \`lane\` | Isolated file copies for parallel exploration |
|
|
82
|
+
| Git & Environment | \`git_context\`, \`process\`, \`watch\`, \`delegate\` | Git info, process management |
|
|
83
|
+
| Utilities | \`regex_test\`, \`encode\`, \`measure\`, \`changelog\`, \`schema_validate\`, \`snippet\`, \`env\`, \`time\` | Regex, encoding, metrics |
|
|
84
|
+
| System | \`status\`, \`reindex\`, \`health\`, \`guide\`, \`onboard\`, \`graph\`, \`queue\`, \`replay\` | Index management, knowledge graph |
|
|
118
85
|
|
|
119
86
|
---
|
|
120
87
|
|
|
121
|
-
##
|
|
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
|
|
88
|
+
## How to Read Code (Decision Tree)
|
|
126
89
|
|
|
127
90
|
\`\`\`
|
|
128
91
|
Need to understand a file?
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
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
|
|
92
|
+
\u251C\u2500 Just structure? \u2192 file_summary (exports, imports, functions \u2014 ~50 tokens)
|
|
93
|
+
\u251C\u2500 Specific section? \u2192 compact({ path, query }) \u2014 5-20x token reduction
|
|
94
|
+
\u251C\u2500 Multiple files? \u2192 digest (multi-source compression)
|
|
95
|
+
\u251C\u2500 Repeated reference? \u2192 stratum_card (reusable T1/T2 card)
|
|
96
|
+
\u2514\u2500 Need exact lines to EDIT? \u2192 read_file (ONLY acceptable use)
|
|
154
97
|
\`\`\`
|
|
155
98
|
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
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
|
-
\`\`\`
|
|
99
|
+
**Rules:**
|
|
100
|
+
1. NEVER \`read_file\` a file >50 lines to "understand" it — use \`file_summary\` or \`compact\`
|
|
101
|
+
2. NEVER \`grep_search\` or \`semantic_search\` — use \`search\` (hybrid across >12k indexed records)
|
|
102
|
+
3. NEVER \`run_in_terminal\` for tsc/lint/test — use \`check\` / \`test_run\`
|
|
103
|
+
4. \`read_file\` is ONLY for getting exact lines before \`replace_string_in_file\`
|
|
184
104
|
|
|
185
105
|
---
|
|
186
106
|
|
|
187
|
-
##
|
|
188
|
-
|
|
189
|
-
**NEVER write or modify code without first searching for context.**
|
|
107
|
+
## Session Protocol
|
|
190
108
|
|
|
109
|
+
### Start (do ALL)
|
|
191
110
|
\`\`\`
|
|
192
|
-
#
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
111
|
+
status({}) # Check KB health + onboard state
|
|
112
|
+
# If onboard not run → onboard({ path: "." }) # First-time codebase analysis
|
|
113
|
+
list() # See stored knowledge
|
|
114
|
+
search({ query: "SESSION CHECKPOINT", origin: "curated" }) # Resume prior work
|
|
196
115
|
\`\`\`
|
|
197
116
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
117
|
+
### During
|
|
118
|
+
| Situation | Tool |
|
|
119
|
+
|-----------|------|
|
|
120
|
+
| Intermediate result | \`stash({ key, value })\` |
|
|
121
|
+
| Milestone completed | \`checkpoint({ action: "save", name })\` |
|
|
122
|
+
| Architecture decision made | \`remember({ title, content, category: "decisions" })\` |
|
|
123
|
+
| Pattern discovered | \`remember({ title, content, category: "patterns" })\` |
|
|
124
|
+
| About to propose new approach | \`search({ query })\` — check if already decided |
|
|
205
125
|
|
|
126
|
+
### After Implementation (do ALL)
|
|
206
127
|
\`\`\`
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
128
|
+
check({}) # Typecheck + lint
|
|
129
|
+
test_run({}) # Run tests
|
|
130
|
+
blast_radius({ changed_files: ["..."] }) # Impact analysis
|
|
131
|
+
reindex({}) # Background refresh (non-blocking)
|
|
132
|
+
produce_knowledge({ path: "." }) # Regenerate codebase analysis
|
|
133
|
+
remember({ title: "Session checkpoint: ...", ... }) # Persist decisions
|
|
211
134
|
\`\`\`
|
|
212
135
|
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
## FORGE Protocol (for complex tasks)
|
|
216
|
-
|
|
217
|
-
For tasks touching 3+ files or involving architectural decisions:
|
|
218
|
-
|
|
136
|
+
### End (MUST do)
|
|
219
137
|
\`\`\`
|
|
220
|
-
|
|
221
|
-
${n(`forge_ground`)}({ task: "<description>" }) # Full: scope + constraints + evidence
|
|
222
|
-
${n(`evidence_map`)}({ claims: ["claim1", "claim2"] }) # Track verified vs assumed
|
|
138
|
+
remember({ title: "Session checkpoint: <topic>", content: "<decisions, blockers, next steps>", category: "conventions" })
|
|
223
139
|
\`\`\`
|
|
140
|
+
For long sessions or context approaching capacity, use the \`session-handoff\` skill to create a structured handoff document.
|
|
224
141
|
|
|
225
142
|
---
|
|
226
143
|
|
|
@@ -228,75 +145,21 @@ ${n(`evidence_map`)}({ claims: ["claim1", "claim2"] }) # Track verified vs ass
|
|
|
228
145
|
|
|
229
146
|
| Mode | When | Example |
|
|
230
147
|
|------|------|---------|
|
|
231
|
-
| \`hybrid\` (default) | General queries |
|
|
232
|
-
| \`semantic\` | Conceptual
|
|
233
|
-
| \`keyword\` | Exact identifiers |
|
|
234
|
-
|
|
235
|
-
Filters: \`origin\` (\`indexed\`/\`curated\`/\`produced\`), \`category\`, \`content_type\`, \`tags\`, \`min_score\`.
|
|
148
|
+
| \`hybrid\` (default) | General queries | \`search({ query: "error handling" })\` |
|
|
149
|
+
| \`semantic\` | Conceptual | \`search({ query: "retry with backoff", search_mode: "semantic" })\` |
|
|
150
|
+
| \`keyword\` | Exact identifiers | \`search({ query: "CircuitBreaker", search_mode: "keyword" })\` |
|
|
236
151
|
|
|
237
152
|
---
|
|
238
153
|
|
|
239
154
|
## Workflow Chains
|
|
240
155
|
|
|
241
|
-
**
|
|
242
|
-
\`\`\`
|
|
243
|
-
${n(`onboard`)}({ path: "." }) → ${n(`produce_knowledge`)}({ path: "src/" }) → ${n(`remember`)}(...)
|
|
244
|
-
\`\`\`
|
|
156
|
+
**Planning:** \`search\` → \`scope_map\` → \`file_summary\` per file → \`compact\` for detail → \`workset({ action: "save" })\`
|
|
245
157
|
|
|
246
|
-
**
|
|
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
|
-
\`\`\`
|
|
158
|
+
**Bug investigation:** \`parse_output\` → \`symbol\` → \`trace({ direction: "backward" })\` → \`blast_radius\`
|
|
254
159
|
|
|
255
|
-
**
|
|
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
|
-
---
|
|
160
|
+
**Codebase onboarding:** \`onboard({ path: "." })\` → \`produce_knowledge({ path: "src/" })\` → \`remember\`
|
|
292
161
|
|
|
293
|
-
|
|
162
|
+
**After implementation:** \`check\` → \`test_run\` → \`blast_radius\` → \`reindex\` → \`produce_knowledge\` → \`remember\`
|
|
294
163
|
|
|
295
|
-
|
|
296
|
-
|
|
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
|
|
164
|
+
**Complex tasks (FORGE):** \`forge_classify({ task })\` → \`forge_ground({ task })\` → \`evidence_map({ claims })\`
|
|
165
|
+
`}export{t as buildAgentsMd,e as buildCopilotInstructions};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{ctx as e}from"../context.js";import{extractNumFlag as t,extractStrFlag as n,readStdin as r,splitCsv as i}from"../helpers.js";import{compact as a}from"../../../tools/dist/index.js";const o=[{name:`remember`,description:`Store curated knowledge`,usage:`kb remember <title> --category <cat> [--tags tag1,tag2]`,run:async t=>{let a=n(t,`--category`,``).trim(),o=i(n(t,`--tags`,``)),s=t.shift()?.trim()??``,c=await r(),l=c.trim().length>0?c:t.join(` `).trim();(!s||!a||!l.trim())&&(console.error(`Usage: kb remember <title> --category <cat> [--tags tag1,tag2]`),process.exit(1));let{curated:u}=await e(),d=await u.remember(s,l,a,o);console.log(`Stored curated entry`),console.log(` Path: ${d.path}`),console.log(` Category: ${a}`),o.length>0&&console.log(` Tags: ${o.join(`, `)}`)}},{name:`forget`,description:`Remove a curated entry`,usage:`kb forget <path> --reason <reason>`,run:async t=>{let r=n(t,`--reason`,``).trim(),i=t.shift()?.trim()??``;(!i||!r)&&(console.error(`Usage: kb forget <path> --reason <reason>`),process.exit(1));let{curated:a}=await e(),o=await a.forget(i,r);console.log(`Removed curated entry: ${o.path}`)}},{name:`read`,description:`Read a curated entry`,usage:`kb read <path>`,run:async t=>{let n=t.shift()?.trim()??``;n||(console.error(`Usage: kb read <path>`),process.exit(1));let{curated:r}=await e(),i=await r.read(n);console.log(i.title),console.log(`─`.repeat(60)),console.log(`Path: ${i.path}`),console.log(`Category: ${i.category}`),console.log(`Version: ${i.version}`),console.log(`Tags: ${i.tags.length>0?i.tags.join(`, `):`None`}`),console.log(``),console.log(i.content)}},{name:`list`,description:`List curated entries`,usage:`kb list [--category <cat>] [--tag <tag>]`,run:async t=>{let r=n(t,`--category`,``).trim()||void 0,i=n(t,`--tag`,``).trim()||void 0,{curated:a}=await e(),o=await a.list({category:r,tag:i});if(o.length===0){console.log(`No curated entries found.`);return}console.log(`Curated entries (${o.length})`),console.log(`─`.repeat(60));for(let e of o){console.log(e.path),console.log(` ${e.title}`),console.log(` Category: ${e.category} | Version: ${e.version}`),console.log(` Tags: ${e.tags.length>0?e.tags.join(`, `):`None`}`);let t=e.contentPreview.replace(/\s+/g,` `).trim();t&&console.log(` Preview: ${t}`),console.log(``)}}},{name:`update`,description:`Update a curated entry`,usage:`kb update <path> --reason <reason>`,run:async t=>{let i=n(t,`--reason`,``).trim(),a=t.shift()?.trim()??``,o=await r();(!a||!i||!o.trim())&&(console.error(`Usage: kb update <path> --reason <reason>`),process.exit(1));let{curated:s}=await e(),c=await s.update(a,o,i);console.log(`Updated curated entry`),console.log(` Path: ${c.path}`),console.log(` Version: ${c.version}`)}},{name:`compact`,description:`Compress text for context`,usage:`kb compact <query> [--path <file>] [--max-chars N] [--segmentation paragraph|sentence|line]`,run:async i=>{let o=t(i,`--max-chars`,3e3),s=n(i,`--path`,``).trim()||void 0,c=n(i,`--segmentation`,`paragraph`),l=i.join(` `).trim(),u=s?void 0:await r();(!l||!s&&!u?.trim())&&(console.error(`Usage: kb compact <query> --path <file> OR cat file | kb compact <query>`),process.exit(1));let{embedder:d}=await e(),f=await a(d,{text:u,path:s,query:l,maxChars:o,segmentation:c});console.log(`Compressed ${f.originalChars} chars to ${f.compressedChars} chars`),console.log(`Ratio: ${(f.ratio*100).toFixed(1)}% | Segments: ${f.segmentsKept}/${f.segmentsTotal}`),console.log(``),console.log(f.text)}}];export{o as knowledgeCommands};
|
|
2
|
-
//# sourceMappingURL=knowledge.js.map
|
|
1
|
+
import{ctx as e}from"../context.js";import{extractNumFlag as t,extractStrFlag as n,readStdin as r,splitCsv as i}from"../helpers.js";import{compact as a}from"../../../tools/dist/index.js";const o=[{name:`remember`,description:`Store curated knowledge`,usage:`kb remember <title> --category <cat> [--tags tag1,tag2]`,run:async t=>{let a=n(t,`--category`,``).trim(),o=i(n(t,`--tags`,``)),s=t.shift()?.trim()??``,c=await r(),l=c.trim().length>0?c:t.join(` `).trim();(!s||!a||!l.trim())&&(console.error(`Usage: kb remember <title> --category <cat> [--tags tag1,tag2]`),process.exit(1));let{curated:u}=await e(),d=await u.remember(s,l,a,o);console.log(`Stored curated entry`),console.log(` Path: ${d.path}`),console.log(` Category: ${a}`),o.length>0&&console.log(` Tags: ${o.join(`, `)}`)}},{name:`forget`,description:`Remove a curated entry`,usage:`kb forget <path> --reason <reason>`,run:async t=>{let r=n(t,`--reason`,``).trim(),i=t.shift()?.trim()??``;(!i||!r)&&(console.error(`Usage: kb forget <path> --reason <reason>`),process.exit(1));let{curated:a}=await e(),o=await a.forget(i,r);console.log(`Removed curated entry: ${o.path}`)}},{name:`read`,description:`Read a curated entry`,usage:`kb read <path>`,run:async t=>{let n=t.shift()?.trim()??``;n||(console.error(`Usage: kb read <path>`),process.exit(1));let{curated:r}=await e(),i=await r.read(n);console.log(i.title),console.log(`─`.repeat(60)),console.log(`Path: ${i.path}`),console.log(`Category: ${i.category}`),console.log(`Version: ${i.version}`),console.log(`Tags: ${i.tags.length>0?i.tags.join(`, `):`None`}`),console.log(``),console.log(i.content)}},{name:`list`,description:`List curated entries`,usage:`kb list [--category <cat>] [--tag <tag>]`,run:async t=>{let r=n(t,`--category`,``).trim()||void 0,i=n(t,`--tag`,``).trim()||void 0,{curated:a}=await e(),o=await a.list({category:r,tag:i});if(o.length===0){console.log(`No curated entries found.`);return}console.log(`Curated entries (${o.length})`),console.log(`─`.repeat(60));for(let e of o){console.log(e.path),console.log(` ${e.title}`),console.log(` Category: ${e.category} | Version: ${e.version}`),console.log(` Tags: ${e.tags.length>0?e.tags.join(`, `):`None`}`);let t=e.contentPreview.replace(/\s+/g,` `).trim();t&&console.log(` Preview: ${t}`),console.log(``)}}},{name:`update`,description:`Update a curated entry`,usage:`kb update <path> --reason <reason>`,run:async t=>{let i=n(t,`--reason`,``).trim(),a=t.shift()?.trim()??``,o=await r();(!a||!i||!o.trim())&&(console.error(`Usage: kb update <path> --reason <reason>`),process.exit(1));let{curated:s}=await e(),c=await s.update(a,o,i);console.log(`Updated curated entry`),console.log(` Path: ${c.path}`),console.log(` Version: ${c.version}`)}},{name:`compact`,description:`Compress text for context`,usage:`kb compact <query> [--path <file>] [--max-chars N] [--segmentation paragraph|sentence|line]`,run:async i=>{let o=t(i,`--max-chars`,3e3),s=n(i,`--path`,``).trim()||void 0,c=n(i,`--segmentation`,`paragraph`),l=i.join(` `).trim(),u=s?void 0:await r();(!l||!s&&!u?.trim())&&(console.error(`Usage: kb compact <query> --path <file> OR cat file | kb compact <query>`),process.exit(1));let{embedder:d}=await e(),f=await a(d,{text:u,path:s,query:l,maxChars:o,segmentation:c});console.log(`Compressed ${f.originalChars} chars to ${f.compressedChars} chars`),console.log(`Ratio: ${(f.ratio*100).toFixed(1)}% | Segments: ${f.segmentsKept}/${f.segmentsTotal}`),console.log(``),console.log(f.text)}}];export{o as knowledgeCommands};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{ctx as e}from"../context.js";import{extractNumFlag as t,extractStrFlag as n,formatFocusRanges as r,printDeadSymbolsResult as i,printExamplesResult as a,printSymbolInfo as o,printTraceResult as s,rrf as c}from"../helpers.js";import{find as l,findDeadSymbols as u,findExamples as d,scopeMap as f,symbol as p,trace as m}from"../../../tools/dist/index.js";const h=[{name:`search`,description:`Search the knowledge base`,usage:`kb search <query> [--limit N] [--mode hybrid|semantic|keyword] [--graph-hops 0-3]`,run:async r=>{let i=t(r,`--limit`,5),a=n(r,`--mode`,`hybrid`),o=t(r,`--graph-hops`,0),s=r.join(` `).trim();s||(console.error(`Usage: kb search <query>`),process.exit(1));let{embedder:l,store:u,graphStore:d}=await e(),f=await l.embedQuery(s),p;if(a===`keyword`)p=await u.ftsSearch(s,{limit:i});else if(a===`semantic`)p=await u.search(f,{limit:i});else{let[e,t]=await Promise.all([u.search(f,{limit:i*2}),u.ftsSearch(s,{limit:i*2}).catch(()=>[])]);p=c(e,t).slice(0,i)}if(p.length===0){console.log(`No results found.`);return}for(let{record:e,score:t}of p){console.log(`\n${`─`.repeat(60)}`),console.log(`[${(t*100).toFixed(1)}%] ${e.sourcePath}:${e.startLine}-${e.endLine}`),console.log(` Type: ${e.contentType} | Origin: ${e.origin}`),e.tags.length>0&&console.log(` Tags: ${e.tags.join(`, `)}`),console.log(``);let n=e.content.length>500?`${e.content.slice(0,500)}...`:e.content;console.log(n)}if(console.log(`\n${`─`.repeat(60)}`),console.log(`${p.length} result(s) found.`),o>0&&p.length>0)try{let{graphAugmentSearch:e}=await import(`../../../tools/dist/index.js`),t=(await e(d,p.map(e=>({recordId:e.record.id,score:e.score,sourcePath:e.record.sourcePath})),{hops:o,maxPerHit:5})).filter(e=>e.graphContext.nodes.length>0);if(t.length>0){console.log(`\nGraph context (${o} hop${o>1?`s`:``}):\n`);for(let e of t){console.log(` ${e.sourcePath}:`);for(let t of e.graphContext.nodes.slice(0,5))console.log(` → ${t.name} (${t.type})`);for(let t of e.graphContext.edges.slice(0,5))console.log(` → ${t.fromId} --[${t.type}]--> ${t.toId}`)}}}catch(e){console.error(`[graph] augmentation failed: ${e.message}`)}}},{name:`find`,description:`Run federated search across indexed content and files`,usage:`kb find [query] [--glob <pattern>] [--pattern <regex>] [--limit N]`,run:async r=>{let i=t(r,`--limit`,10),a=n(r,`--glob`,``).trim()||void 0,o=n(r,`--pattern`,``).trim()||void 0,s=r.join(` `).trim()||void 0;!s&&!a&&!o&&(console.error(`Usage: kb find [query] [--glob <pattern>] [--pattern <regex>] [--limit N]`),process.exit(1));let{embedder:c,store:u}=await e(),d=await l(c,u,{query:s,glob:a,pattern:o,limit:i});if(d.results.length===0){console.log(`No matches found.`);return}console.log(`Strategies: ${d.strategies.join(`, `)}`),console.log(`Results: ${d.results.length} shown (${d.totalFound} total)`);for(let e of d.results){let t=e.lineRange?`:${e.lineRange.start}-${e.lineRange.end}`:``;console.log(`\n[${e.source}] ${e.path}${t}`),console.log(` Score: ${(e.score*100).toFixed(1)}%`),e.preview&&console.log(` ${e.preview.replace(/\s+/g,` `).trim()}`)}}},{name:`scope-map`,description:`Generate a reading plan for a task`,usage:`kb scope-map <task> [--max-files N]`,run:async n=>{let i=t(n,`--max-files`,15),a=n.join(` `).trim();a||(console.error(`Usage: kb scope-map <task> [--max-files N]`),process.exit(1));let{embedder:o,store:s}=await e(),c=await f(o,s,{task:a,maxFiles:i});console.log(`Task: ${c.task}`),console.log(`Files: ${c.files.length}`),console.log(`Estimated tokens: ${c.totalEstimatedTokens}`),console.log(``),console.log(`Reading order:`);for(let e of c.readingOrder)console.log(` ${e}`);for(let[e,t]of c.files.entries())console.log(`\n${e+1}. ${t.path}`),console.log(` Relevance: ${(t.relevance*100).toFixed(1)}% | Tokens: ${t.estimatedTokens}`),console.log(` Why: ${t.reason}`),t.focusRanges.length>0&&console.log(` Focus: ${r(t.focusRanges)}`)}},{name:`symbol`,description:`Resolve a symbol definition, imports, and references`,usage:`kb symbol <name> [--limit N]`,run:async n=>{let r=t(n,`--limit`,20),i=n.join(` `).trim();i||(console.error(`Usage: kb symbol <name> [--limit N]`),process.exit(1));let{embedder:a,store:s}=await e();o(await p(a,s,{name:i,limit:r}))}},{name:`trace`,description:`Trace forward/backward flow for a symbol or file location`,usage:`kb trace <start> [--direction forward|backward|both] [--max-depth N]`,run:async r=>{let i=n(r,`--direction`,`both`).trim()||`both`,a=t(r,`--max-depth`,3),o=r.join(` `).trim();(!o||![`forward`,`backward`,`both`].includes(i))&&(console.error(`Usage: kb trace <start> [--direction forward|backward|both] [--max-depth N]`),process.exit(1));let{embedder:c,store:l}=await e();s(await m(c,l,{start:o,direction:i,maxDepth:a}))}},{name:`examples`,description:`Find real code examples of a symbol or pattern`,usage:`kb examples <query> [--limit N] [--content-type type]`,run:async r=>{let i=t(r,`--limit`,5),o=n(r,`--content-type`,``).trim()||void 0,s=r.join(` `).trim();s||(console.error(`Usage: kb examples <query> [--limit N] [--content-type type]`),process.exit(1));let{embedder:c,store:l}=await e();a(await d(c,l,{query:s,limit:i,contentType:o}))}},{name:`dead-symbols`,description:`Find exported symbols that appear to be unused`,usage:`kb dead-symbols [--limit N]`,run:async n=>{let r=t(n,`--limit`,100),{embedder:a,store:o}=await e();i(await u(a,o,{limit:r}))}},{name:`lookup`,description:`Look up indexed content by record ID or source path`,usage:`kb lookup <id>`,run:async t=>{let n=t.join(` `).trim();n||(console.error(`Usage: kb lookup <id>`),process.exit(1));let{store:r}=await e(),i=await r.getById(n);if(i){console.log(i.id),console.log(`─`.repeat(60)),console.log(`Path: ${i.sourcePath}`),console.log(`Chunk: ${i.chunkIndex+1}/${i.totalChunks}`),console.log(`Lines: ${i.startLine}-${i.endLine}`),console.log(`Type: ${i.contentType} | Origin: ${i.origin}`),i.tags.length>0&&console.log(`Tags: ${i.tags.join(`, `)}`),console.log(``),console.log(i.content);return}let a=await r.getBySourcePath(n);if(a.length===0){console.log(`No indexed content found for: ${n}`);return}a.sort((e,t)=>e.chunkIndex-t.chunkIndex),console.log(n),console.log(`─`.repeat(60)),console.log(`Chunks: ${a.length} | Type: ${a[0].contentType}`);for(let e of a){let t=e.startLine?` (lines ${e.startLine}-${e.endLine})`:``;console.log(`\nChunk ${e.chunkIndex+1}/${e.totalChunks}${t}`),console.log(e.content)}}}];export{h as searchCommands};
|
|
2
|
-
//# sourceMappingURL=search.js.map
|
|
1
|
+
import{ctx as e}from"../context.js";import{extractNumFlag as t,extractStrFlag as n,formatFocusRanges as r,printDeadSymbolsResult as i,printExamplesResult as a,printSymbolInfo as o,printTraceResult as s,rrf as c}from"../helpers.js";import{find as l,findDeadSymbols as u,findExamples as d,scopeMap as f,symbol as p,trace as m}from"../../../tools/dist/index.js";const h=[{name:`search`,description:`Search the knowledge base`,usage:`kb search <query> [--limit N] [--mode hybrid|semantic|keyword] [--graph-hops 0-3]`,run:async r=>{let i=t(r,`--limit`,5),a=n(r,`--mode`,`hybrid`),o=t(r,`--graph-hops`,0),s=r.join(` `).trim();s||(console.error(`Usage: kb search <query>`),process.exit(1));let{embedder:l,store:u,graphStore:d}=await e(),f=await l.embedQuery(s),p;if(a===`keyword`)p=await u.ftsSearch(s,{limit:i});else if(a===`semantic`)p=await u.search(f,{limit:i});else{let[e,t]=await Promise.all([u.search(f,{limit:i*2}),u.ftsSearch(s,{limit:i*2}).catch(()=>[])]);p=c(e,t).slice(0,i)}if(p.length===0){console.log(`No results found.`);return}for(let{record:e,score:t}of p){console.log(`\n${`─`.repeat(60)}`),console.log(`[${(t*100).toFixed(1)}%] ${e.sourcePath}:${e.startLine}-${e.endLine}`),console.log(` Type: ${e.contentType} | Origin: ${e.origin}`),e.tags.length>0&&console.log(` Tags: ${e.tags.join(`, `)}`),console.log(``);let n=e.content.length>500?`${e.content.slice(0,500)}...`:e.content;console.log(n)}if(console.log(`\n${`─`.repeat(60)}`),console.log(`${p.length} result(s) found.`),o>0&&p.length>0)try{let{graphAugmentSearch:e}=await import(`../../../tools/dist/index.js`),t=(await e(d,p.map(e=>({recordId:e.record.id,score:e.score,sourcePath:e.record.sourcePath})),{hops:o,maxPerHit:5})).filter(e=>e.graphContext.nodes.length>0);if(t.length>0){console.log(`\nGraph context (${o} hop${o>1?`s`:``}):\n`);for(let e of t){console.log(` ${e.sourcePath}:`);for(let t of e.graphContext.nodes.slice(0,5))console.log(` → ${t.name} (${t.type})`);for(let t of e.graphContext.edges.slice(0,5))console.log(` → ${t.fromId} --[${t.type}]--> ${t.toId}`)}}}catch(e){console.error(`[graph] augmentation failed: ${e.message}`)}}},{name:`find`,description:`Run federated search across indexed content and files`,usage:`kb find [query] [--glob <pattern>] [--pattern <regex>] [--limit N]`,run:async r=>{let i=t(r,`--limit`,10),a=n(r,`--glob`,``).trim()||void 0,o=n(r,`--pattern`,``).trim()||void 0,s=r.join(` `).trim()||void 0;!s&&!a&&!o&&(console.error(`Usage: kb find [query] [--glob <pattern>] [--pattern <regex>] [--limit N]`),process.exit(1));let{embedder:c,store:u}=await e(),d=await l(c,u,{query:s,glob:a,pattern:o,limit:i});if(d.results.length===0){console.log(`No matches found.`);return}console.log(`Strategies: ${d.strategies.join(`, `)}`),console.log(`Results: ${d.results.length} shown (${d.totalFound} total)`);for(let e of d.results){let t=e.lineRange?`:${e.lineRange.start}-${e.lineRange.end}`:``;console.log(`\n[${e.source}] ${e.path}${t}`),console.log(` Score: ${(e.score*100).toFixed(1)}%`),e.preview&&console.log(` ${e.preview.replace(/\s+/g,` `).trim()}`)}}},{name:`scope-map`,description:`Generate a reading plan for a task`,usage:`kb scope-map <task> [--max-files N]`,run:async n=>{let i=t(n,`--max-files`,15),a=n.join(` `).trim();a||(console.error(`Usage: kb scope-map <task> [--max-files N]`),process.exit(1));let{embedder:o,store:s}=await e(),c=await f(o,s,{task:a,maxFiles:i});console.log(`Task: ${c.task}`),console.log(`Files: ${c.files.length}`),console.log(`Estimated tokens: ${c.totalEstimatedTokens}`),console.log(``),console.log(`Reading order:`);for(let e of c.readingOrder)console.log(` ${e}`);for(let[e,t]of c.files.entries())console.log(`\n${e+1}. ${t.path}`),console.log(` Relevance: ${(t.relevance*100).toFixed(1)}% | Tokens: ${t.estimatedTokens}`),console.log(` Why: ${t.reason}`),t.focusRanges.length>0&&console.log(` Focus: ${r(t.focusRanges)}`)}},{name:`symbol`,description:`Resolve a symbol definition, imports, and references`,usage:`kb symbol <name> [--limit N]`,run:async n=>{let r=t(n,`--limit`,20),i=n.join(` `).trim();i||(console.error(`Usage: kb symbol <name> [--limit N]`),process.exit(1));let{embedder:a,store:s}=await e();o(await p(a,s,{name:i,limit:r}))}},{name:`trace`,description:`Trace forward/backward flow for a symbol or file location`,usage:`kb trace <start> [--direction forward|backward|both] [--max-depth N]`,run:async r=>{let i=n(r,`--direction`,`both`).trim()||`both`,a=t(r,`--max-depth`,3),o=r.join(` `).trim();(!o||![`forward`,`backward`,`both`].includes(i))&&(console.error(`Usage: kb trace <start> [--direction forward|backward|both] [--max-depth N]`),process.exit(1));let{embedder:c,store:l}=await e();s(await m(c,l,{start:o,direction:i,maxDepth:a}))}},{name:`examples`,description:`Find real code examples of a symbol or pattern`,usage:`kb examples <query> [--limit N] [--content-type type]`,run:async r=>{let i=t(r,`--limit`,5),o=n(r,`--content-type`,``).trim()||void 0,s=r.join(` `).trim();s||(console.error(`Usage: kb examples <query> [--limit N] [--content-type type]`),process.exit(1));let{embedder:c,store:l}=await e();a(await d(c,l,{query:s,limit:i,contentType:o}))}},{name:`dead-symbols`,description:`Find exported symbols that appear to be unused`,usage:`kb dead-symbols [--limit N]`,run:async n=>{let r=t(n,`--limit`,100),{embedder:a,store:o}=await e();i(await u(a,o,{limit:r}))}},{name:`lookup`,description:`Look up indexed content by record ID or source path`,usage:`kb lookup <id>`,run:async t=>{let n=t.join(` `).trim();n||(console.error(`Usage: kb lookup <id>`),process.exit(1));let{store:r}=await e(),i=await r.getById(n);if(i){console.log(i.id),console.log(`─`.repeat(60)),console.log(`Path: ${i.sourcePath}`),console.log(`Chunk: ${i.chunkIndex+1}/${i.totalChunks}`),console.log(`Lines: ${i.startLine}-${i.endLine}`),console.log(`Type: ${i.contentType} | Origin: ${i.origin}`),i.tags.length>0&&console.log(`Tags: ${i.tags.join(`, `)}`),console.log(``),console.log(i.content);return}let a=await r.getBySourcePath(n);if(a.length===0){console.log(`No indexed content found for: ${n}`);return}a.sort((e,t)=>e.chunkIndex-t.chunkIndex),console.log(n),console.log(`─`.repeat(60)),console.log(`Chunks: ${a.length} | Type: ${a[0].contentType}`);for(let e of a){let t=e.startLine?` (lines ${e.startLine}-${e.endLine})`:``;console.log(`\nChunk ${e.chunkIndex+1}/${e.totalChunks}${t}`),console.log(e.content)}}}];export{h as searchCommands};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
import{ctx as e}from"../context.js";import{executeCliBatchOperation as t,extractStrFlag as n,parseBatchPayload as r,printCheckResult as i,readInput as a}from"../helpers.js";import{dirname as o,resolve as s}from"node:path";import{fileURLToPath as c}from"node:url";import{audit as l,batch as u,check as d,guide as f,health as p,replayClear as m,replayList as h,replayTrim as g}from"../../../tools/dist/index.js";import{fork as _}from"node:child_process";const v=o(c(import.meta.url)),y=[{name:`status`,description:`Show knowledge base index status and statistics`,run:async()=>{let{
|
|
2
|
-
`)},c;n?(console.log(`Dropping existing index for full reindex...`),c=await i.reindexAll(o,s)):c=await i.index(o,s),console.log(`Done: ${c.filesProcessed} files, ${c.chunksCreated} chunks in ${(c.durationMs/1e3).toFixed(1)}s`),console.log(`Building FTS index...`),await r.createFtsIndex(),console.log(`Re-indexing curated entries...`);let l=await a.reindexAll();console.log(`Curated: ${l.indexed} entries restored`)}},{name:`serve`,description:`Start the MCP server (stdio or HTTP)`,usage:`kb serve [--transport stdio|http] [--port N]`,run:async e=>{let t=s(v,`..`,`..`,`..`,`server`,`dist`,`index.js`),r=n(e,`--transport`,`stdio`),i=n(e,`--port`,`3210`),a=_(t,[],{stdio:r===`stdio`?[`pipe`,`pipe`,`inherit`,`ipc`]:`inherit`,env:{...process.env,KB_TRANSPORT:r,KB_PORT:i}});r===`stdio`&&a.stdin&&a.stdout&&(process.stdin.pipe(a.stdin),a.stdout.pipe(process.stdout)),a.on(`exit`,e=>process.exit(e??0)),process.on(`SIGINT`,()=>a.kill(`SIGINT`)),process.on(`SIGTERM`,()=>a.kill(`SIGTERM`)),await new Promise(()=>{})}},{name:`init`,description:`Initialize a knowledge base in the current directory`,usage:`kb init [--force] [--guide]`,run:async e=>{
|
|
1
|
+
import{ctx as e}from"../context.js";import{executeCliBatchOperation as t,extractStrFlag as n,parseBatchPayload as r,printCheckResult as i,readInput as a}from"../helpers.js";import{dirname as o,resolve as s}from"node:path";import{fileURLToPath as c}from"node:url";import{audit as l,batch as u,check as d,guide as f,health as p,replayClear as m,replayList as h,replayTrim as g}from"../../../tools/dist/index.js";import{fork as _}from"node:child_process";const v=o(c(import.meta.url)),y=[{name:`status`,description:`Show knowledge base index status and statistics`,run:async()=>{let{isGlobalInstalled:t,getGlobalDataDir:n,computePartitionKey:r,listWorkspaces:i}=await import(`../../../core/dist/index.js`),{existsSync:a}=await import(`node:fs`),o=process.cwd(),c=t(),l=a(s(o,`.vscode`,`mcp.json`)),u,d;if(c&&l)u=`local (overrides global for this workspace)`,d=s(o,`.kb-data`);else if(c){let e=r(o);u=a(s(o,`AGENTS.md`))?`global (workspace scaffolded)`:`global (workspace not scaffolded)`,d=s(n(),e)}else u=`local`,d=s(o,`.kb-data`);if(console.log(`Knowledge Base Status`),console.log(`─`.repeat(40)),console.log(` Mode: ${u}`),console.log(` Data: ${d}`),c&&!l){let e=i();console.log(` Registry: ${e.length} workspace(s) enrolled`)}try{let{store:t}=await e(),n=await t.getStats(),r=await t.listSourcePaths();console.log(` Records: ${n.totalRecords}`),console.log(` Files: ${n.totalFiles}`),console.log(` Indexed: ${n.lastIndexedAt??`Never`}`),console.log(` Backend: ${n.storeBackend}`),console.log(` Model: ${n.embeddingModel}`),console.log(``),console.log(`Content Types:`);for(let[e,t]of Object.entries(n.contentTypeBreakdown))console.log(` ${e}: ${t}`);if(r.length>0){console.log(``),console.log(`Files (${r.length} total):`);for(let e of r.slice(0,20))console.log(` ${e}`);r.length>20&&console.log(` ... and ${r.length-20} more`)}}catch{console.log(``),console.log(" Index not available — run `kb reindex` to index this workspace.")}c&&!l&&!a(s(o,`AGENTS.md`))&&(console.log(``),console.log(" Action: Run `npx @vpxa/kb init` to add AGENTS.md and copilot-instructions.md"))}},{name:`reindex`,description:`Re-index the knowledge base from configured sources`,usage:`kb reindex [--full]`,run:async t=>{let n=t.includes(`--full`),{store:r,indexer:i,curated:a,config:o}=await e();console.log(`Indexing sources...`);let s=e=>{e.phase===`chunking`&&e.currentFile&&process.stdout.write(`\r [${e.filesProcessed+1}/${e.filesTotal}] ${e.currentFile}`),e.phase===`done`&&process.stdout.write(`
|
|
2
|
+
`)},c;n?(console.log(`Dropping existing index for full reindex...`),c=await i.reindexAll(o,s)):c=await i.index(o,s),console.log(`Done: ${c.filesProcessed} files, ${c.chunksCreated} chunks in ${(c.durationMs/1e3).toFixed(1)}s`),console.log(`Building FTS index...`),await r.createFtsIndex(),console.log(`Re-indexing curated entries...`);let l=await a.reindexAll();console.log(`Curated: ${l.indexed} entries restored`)}},{name:`serve`,description:`Start the MCP server (stdio or HTTP)`,usage:`kb serve [--transport stdio|http] [--port N]`,run:async e=>{let t=s(v,`..`,`..`,`..`,`server`,`dist`,`index.js`),r=n(e,`--transport`,`stdio`),i=n(e,`--port`,`3210`),a=_(t,[],{stdio:r===`stdio`?[`pipe`,`pipe`,`inherit`,`ipc`]:`inherit`,env:{...process.env,KB_TRANSPORT:r,KB_PORT:i}});r===`stdio`&&a.stdin&&a.stdout&&(process.stdin.pipe(a.stdin),a.stdout.pipe(process.stdout)),a.on(`exit`,e=>process.exit(e??0)),process.on(`SIGINT`,()=>a.kill(`SIGINT`)),process.on(`SIGTERM`,()=>a.kill(`SIGTERM`)),await new Promise(()=>{})}},{name:`init`,description:`Initialize a knowledge base in the current directory`,usage:`kb init [--global|--local] [--force] [--guide]`,run:async e=>{let t=e.includes(`--global`),n=e.includes(`--local`),r=e.includes(`--guide`),i=e.includes(`--force`);if(t&&n&&(console.error(`Cannot use --global and --local together.`),process.exit(1)),r){let{guideProject:e}=await import(`./init/index.js`);await e();return}if(t){let{initGlobal:e}=await import(`./init/global.js`);await e({force:i})}else if(n){let{initProject:e}=await import(`./init/index.js`);await e({force:i})}else{let{initSmart:e}=await import(`./init/index.js`);await e({force:i})}}},{name:`check`,description:`Run incremental typecheck and lint`,usage:`kb check [--cwd <dir>] [--files f1,f2] [--skip-types] [--skip-lint] [--detail summary|errors|full]`,run:async e=>{let t=n(e,`--cwd`,``).trim()||void 0,r=n(e,`--files`,``),a=n(e,`--detail`,`full`)||`full`,o=r.split(`,`).map(e=>e.trim()).filter(Boolean),s=!1;e.includes(`--skip-types`)&&(e.splice(e.indexOf(`--skip-types`),1),s=!0);let c=!1;e.includes(`--skip-lint`)&&(e.splice(e.indexOf(`--skip-lint`),1),c=!0);let l=await d({cwd:t,files:o.length>0?o:void 0,skipTypes:s,skipLint:c,detail:a});i(l),l.passed||(process.exitCode=1)}},{name:`batch`,description:`Execute built-in operations from JSON input`,usage:`kb batch [--file path] [--concurrency N]`,run:async i=>{let o=n(i,`--file`,``).trim()||void 0,s=(()=>{let e=i.indexOf(`--concurrency`);if(e===-1||e+1>=i.length)return 0;let t=Number.parseInt(i.splice(e,2)[1],10);return Number.isNaN(t)?0:t})(),c=await a(o);c.trim()||(console.error(`Usage: kb batch [--file path] [--concurrency N]`),process.exit(1));let l=r(c),d=s>0?s:l.concurrency,f=l.operations.some(e=>e.type!==`check`)?await e():null,p=await u(l.operations,async e=>t(e,f),{concurrency:d});console.log(JSON.stringify(p,null,2)),p.some(e=>e.status===`error`)&&(process.exitCode=1)}},{name:`health`,description:`Run project health checks on the current directory`,usage:`kb health [path]`,run:async e=>{let t=p(e.shift());console.log(`Project Health: ${t.path}`),console.log(`─`.repeat(50));for(let e of t.checks){let t=e.status===`pass`?`+`:e.status===`warn`?`~`:`X`;console.log(` [${t}] ${e.name}: ${e.message}`)}console.log(`─`.repeat(50)),console.log(`Score: ${t.score}% — ${t.summary}`)}},{name:`audit`,description:`Run a unified project audit (structure, deps, patterns, health, dead symbols, check)`,usage:`kb audit [path] [--checks structure,dependencies,patterns,health,dead_symbols,check,entry_points] [--detail summary|full]`,run:async t=>{let{store:r,embedder:i}=await e(),a=n(t,`--detail`,`summary`)||`summary`,o=n(t,`--checks`,``),s=o?o.split(`,`).map(e=>e.trim()):void 0,c=await l(r,i,{path:t.shift()||`.`,checks:s,detail:a});if(c.ok){if(console.log(c.summary),c.next&&c.next.length>0){console.log(`
|
|
3
3
|
Suggested next steps:`);for(let e of c.next)console.log(` → ${e.tool}: ${e.reason}`)}}else console.error(c.error?.message??`Audit failed`),process.exitCode=1}},{name:`guide`,description:`Tool discovery — recommend KB tools for a given goal`,usage:`kb guide <goal> [--max N]`,run:async e=>{let t=e.indexOf(`--max`),n=5;t!==-1&&t+1<e.length&&(n=Number.parseInt(e.splice(t,2)[1],10)||5);let r=e.join(` `).trim();r||(console.error(`Usage: kb guide <goal> [--max N]`),console.error(`Example: kb guide "audit this project"`),process.exit(1));let i=f(r,n);console.log(`Workflow: ${i.workflow}`),console.log(` ${i.description}\n`),console.log(`Recommended tools:`);for(let e of i.tools){let t=e.suggestedArgs?` ${JSON.stringify(e.suggestedArgs)}`:``;console.log(` ${e.order}. ${e.tool} — ${e.reason}${t}`)}i.alternativeWorkflows.length>0&&console.log(`\nAlternatives: ${i.alternativeWorkflows.join(`, `)}`)}},{name:`replay`,description:`Show recent tool invocation audit trail`,usage:`kb replay [--last N] [--tool <name>] [--source mcp|cli]`,run:async e=>{let t=h({last:Number.parseInt(e[e.indexOf(`--last`)+1],10)||20,tool:e.includes(`--tool`)?e[e.indexOf(`--tool`)+1]:void 0,source:e.includes(`--source`)?e[e.indexOf(`--source`)+1]:void 0});if(t.length===0){console.log(`No replay entries. Activity is logged when tools are invoked.`);return}console.log(`Replay Log (${t.length} entries)\n`);for(let e of t){let t=e.ts.split(`T`)[1]?.split(`.`)[0]??e.ts,n=e.status===`ok`?`✓`:`✗`;console.log(`${t} ${n} ${e.tool} (${e.durationMs}ms) [${e.source}]`),console.log(` in: ${e.input}`),console.log(` out: ${e.output}`)}g()}},{name:`replay-clear`,description:`Clear the replay audit trail`,run:async()=>{m(),console.log(`Replay log cleared.`)}},{name:`tui`,description:`Launch interactive terminal dashboard (human monitoring)`,run:async()=>{try{let{launch:t}=await import(`../../../tui/dist/index.js`),{store:n,embedder:r,config:i}=await e();t({store:n,embedder:r,config:i})}catch(e){throw e.code===`ERR_MODULE_NOT_FOUND`&&(console.error(`TUI requires ink and react. Install them with:
|
|
4
|
-
pnpm add -D ink react @types/react`),process.exit(1)),e}}}];export{y as systemCommands};
|
|
5
|
-
//# sourceMappingURL=system.js.map
|
|
4
|
+
pnpm add -D ink react @types/react`),process.exit(1)),e}}}];export{y as systemCommands};
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{extractStrFlag as e,parseMaybeJsonString as t,printWorkset as n,readStdin as r,splitCsv as i}from"../helpers.js";import{addToWorkset as a,deleteWorkset as o,getWorkset as s,laneCreate as c,laneDiff as l,laneDiscard as u,laneList as d,laneMerge as f,laneStatus as p,listWorksets as m,queueClear as h,queueCreate as g,queueDelete as _,queueDone as v,queueFail as y,queueGet as b,queueList as x,queueNext as S,queuePush as C,removeFromWorkset as w,saveWorkset as T,stashClear as E,stashDelete as D,stashGet as O,stashList as k,stashSet as A}from"../../../tools/dist/index.js";const j=[{name:`workset`,description:`Manage saved file sets`,usage:`kb workset <action> [name] [--files f1,f2] [--description desc]`,run:async t=>{let r=t.shift()?.trim(),c=i(e(t,`--files`,``)),l=e(t,`--description`,``).trim()||void 0,u=t.shift()?.trim();switch(r||(console.error(`Usage: kb workset <action> [name] [--files f1,f2] [--description desc]`),console.error(`Actions: save, get, list, delete, add, remove`),process.exit(1)),r){case`save`:{(!u||c.length===0)&&(console.error(`Usage: kb workset save <name> --files f1,f2 [--description desc]`),process.exit(1));let e=T(u,c,{description:l});console.log(`Saved workset: ${e.name}`),n(e);return}case`get`:{u||(console.error(`Usage: kb workset get <name>`),process.exit(1));let e=s(u);if(!e){console.log(`No workset found: ${u}`);return}n(e);return}case`list`:{let e=m();if(e.length===0){console.log(`No worksets saved.`);return}console.log(`Worksets (${e.length})`),console.log(`─`.repeat(60));for(let t of e)n(t),console.log(``);return}case`delete`:{u||(console.error(`Usage: kb workset delete <name>`),process.exit(1));let e=o(u);console.log(e?`Deleted workset: ${u}`:`No workset found: ${u}`);return}case`add`:{(!u||c.length===0)&&(console.error(`Usage: kb workset add <name> --files f1,f2`),process.exit(1));let e=a(u,c);console.log(`Updated workset: ${e.name}`),n(e);return}case`remove`:{(!u||c.length===0)&&(console.error(`Usage: kb workset remove <name> --files f1,f2`),process.exit(1));let e=w(u,c);if(!e){console.log(`No workset found: ${u}`);return}console.log(`Updated workset: ${e.name}`),n(e);return}default:console.error(`Unknown workset action: ${r}`),console.error(`Actions: save, get, list, delete, add, remove`),process.exit(1)}}},{name:`stash`,description:`Persist and retrieve named intermediate values`,usage:`kb stash <set|get|list|delete|clear> [key] [value]`,run:async e=>{let n=e.shift()?.trim(),i=e.shift()?.trim();switch(n||(console.error(`Usage: kb stash <set|get|list|delete|clear> [key] [value]`),process.exit(1)),n){case`set`:{i||(console.error(`Usage: kb stash set <key> <value>`),process.exit(1));let n=e.join(` `),a=n.trim()?``:await r(),o=A(i,t(n||a));console.log(`Stored stash entry: ${o.key}`),console.log(` Type: ${o.type}`),console.log(` Stored: ${o.storedAt}`);return}case`get`:{i||(console.error(`Usage: kb stash get <key>`),process.exit(1));let e=O(i);if(!e){console.log(`No stash entry found: ${i}`);return}console.log(JSON.stringify(e,null,2));return}case`list`:{let e=k();if(e.length===0){console.log(`No stash entries saved.`);return}console.log(`Stash entries (${e.length})`),console.log(`─`.repeat(60));for(let t of e)console.log(`${t.key} (${t.type})`),console.log(` Stored: ${t.storedAt}`);return}case`delete`:{i||(console.error(`Usage: kb stash delete <key>`),process.exit(1));let e=D(i);console.log(e?`Deleted stash entry: ${i}`:`No stash entry found: ${i}`);return}case`clear`:{let e=E();console.log(`Cleared ${e} stash entr${e===1?`y`:`ies`}.`);return}default:console.error(`Unknown stash action: ${n}`),console.error(`Actions: set, get, list, delete, clear`),process.exit(1)}}},{name:`lane`,description:`Manage verified lanes — isolated file copies for parallel exploration`,usage:`kb lane <create|list|status|diff|merge|discard> [name] [--files f1,f2]`,run:async t=>{let n=t.shift();if((!n||![`create`,`list`,`status`,`diff`,`merge`,`discard`].includes(n))&&(console.error(`Usage: kb lane <create|list|status|diff|merge|discard> [name] [--files f1,f2]`),process.exit(1)),n===`list`){let e=d();if(e.length===0){console.log(`No active lanes.`);return}for(let t of e)console.log(`${t.name} (${t.sourceFiles.length} files, created ${t.createdAt})`);return}let r=t.shift();switch(r||(console.error(`Lane name is required for "${n}".`),process.exit(1)),n){case`create`:{let n=e(t,`--files`,``);n||(console.error(`Usage: kb lane create <name> --files file1.ts,file2.ts`),process.exit(1));let i=c(r,n.split(`,`).map(e=>e.trim()));console.log(`Lane "${i.name}" created with ${i.sourceFiles.length} files.`);break}case`status`:{let e=p(r);console.log(`Lane: ${e.name}`),console.log(`Modified: ${e.modified} | Added: ${e.added} | Deleted: ${e.deleted}`);for(let t of e.entries)console.log(` ${t.status.padEnd(10)} ${t.file}`);break}case`diff`:{let e=l(r);console.log(`Lane: ${e.name} — ${e.modified} modified, ${e.added} added, ${e.deleted} deleted`);for(let t of e.entries)t.diff&&(console.log(`\n--- ${t.file} (${t.status})`),console.log(t.diff));break}case`merge`:{let e=f(r);console.log(`Merged ${e.filesMerged} files from lane "${e.name}".`);for(let t of e.files)console.log(` ${t}`);break}case`discard`:{let e=u(r);console.log(e?`Lane "${r}" discarded.`:`Lane "${r}" not found.`);break}}}},{name:`queue`,description:`Manage task queues for sequential agent operations`,usage:`kb queue <create|push|next|done|fail|get|list|clear|delete> [name] [args]`,run:async e=>{let t=e.shift();if((!t||![`create`,`push`,`next`,`done`,`fail`,`get`,`list`,`clear`,`delete`].includes(t))&&(console.error(`Usage: kb queue <create|push|next|done|fail|get|list|clear|delete> [name] [args]`),process.exit(1)),t===`list`){let e=x();if(e.length===0){console.log(`No queues.`);return}for(let t of e)console.log(`${t.name} pending:${t.pending} done:${t.done} failed:${t.failed} total:${t.total}`);return}let n=e.shift();switch(n||(console.error(`Queue name is required for "${t}".`),process.exit(1)),t){case`create`:{let e=g(n);console.log(`Queue "${e.name}" created.`);break}case`push`:{let t=C(n,e.join(` `)||`Untitled task`);console.log(`Pushed "${t.title}" (${t.id}) to queue "${n}".`);break}case`next`:{let e=S(n);console.log(e?`Next: ${e.title} (${e.id})`:`No pending items in queue "${n}".`);break}case`done`:{let t=e.shift();t||(console.error(`Usage: kb queue done <name> <id>`),process.exit(1));let r=v(n,t);console.log(`Marked "${r.title}" as done.`);break}case`fail`:{let t=e.shift(),r=e.join(` `)||`Unknown error`;t||(console.error(`Usage: kb queue fail <name> <id> [error message]`),process.exit(1));let i=y(n,t,r);console.log(`Marked "${i.title}" as failed: ${r}`);break}case`get`:{let e=b(n);if(!e){console.log(`Queue "${n}" not found.`);return}console.log(`Queue: ${e.name} (${e.items.length} items)`);for(let t of e.items){let e=t.error?` — ${t.error}`:``;console.log(` ${t.status.padEnd(12)} ${t.id} ${t.title}${e}`)}break}case`clear`:{let e=h(n);console.log(`Cleared ${e} completed/failed items from queue "${n}".`);break}case`delete`:{let e=_(n);console.log(e?`Queue "${n}" deleted.`:`Queue "${n}" not found.`);break}}}}];export{j as workspaceCommands};
|
|
2
|
-
//# sourceMappingURL=workspace.js.map
|
|
1
|
+
import{extractStrFlag as e,parseMaybeJsonString as t,printWorkset as n,readStdin as r,splitCsv as i}from"../helpers.js";import{addToWorkset as a,deleteWorkset as o,getWorkset as s,laneCreate as c,laneDiff as l,laneDiscard as u,laneList as d,laneMerge as f,laneStatus as p,listWorksets as m,queueClear as h,queueCreate as g,queueDelete as _,queueDone as v,queueFail as y,queueGet as b,queueList as x,queueNext as S,queuePush as C,removeFromWorkset as w,saveWorkset as T,stashClear as E,stashDelete as D,stashGet as O,stashList as k,stashSet as A}from"../../../tools/dist/index.js";const j=[{name:`workset`,description:`Manage saved file sets`,usage:`kb workset <action> [name] [--files f1,f2] [--description desc]`,run:async t=>{let r=t.shift()?.trim(),c=i(e(t,`--files`,``)),l=e(t,`--description`,``).trim()||void 0,u=t.shift()?.trim();switch(r||(console.error(`Usage: kb workset <action> [name] [--files f1,f2] [--description desc]`),console.error(`Actions: save, get, list, delete, add, remove`),process.exit(1)),r){case`save`:{(!u||c.length===0)&&(console.error(`Usage: kb workset save <name> --files f1,f2 [--description desc]`),process.exit(1));let e=T(u,c,{description:l});console.log(`Saved workset: ${e.name}`),n(e);return}case`get`:{u||(console.error(`Usage: kb workset get <name>`),process.exit(1));let e=s(u);if(!e){console.log(`No workset found: ${u}`);return}n(e);return}case`list`:{let e=m();if(e.length===0){console.log(`No worksets saved.`);return}console.log(`Worksets (${e.length})`),console.log(`─`.repeat(60));for(let t of e)n(t),console.log(``);return}case`delete`:{u||(console.error(`Usage: kb workset delete <name>`),process.exit(1));let e=o(u);console.log(e?`Deleted workset: ${u}`:`No workset found: ${u}`);return}case`add`:{(!u||c.length===0)&&(console.error(`Usage: kb workset add <name> --files f1,f2`),process.exit(1));let e=a(u,c);console.log(`Updated workset: ${e.name}`),n(e);return}case`remove`:{(!u||c.length===0)&&(console.error(`Usage: kb workset remove <name> --files f1,f2`),process.exit(1));let e=w(u,c);if(!e){console.log(`No workset found: ${u}`);return}console.log(`Updated workset: ${e.name}`),n(e);return}default:console.error(`Unknown workset action: ${r}`),console.error(`Actions: save, get, list, delete, add, remove`),process.exit(1)}}},{name:`stash`,description:`Persist and retrieve named intermediate values`,usage:`kb stash <set|get|list|delete|clear> [key] [value]`,run:async e=>{let n=e.shift()?.trim(),i=e.shift()?.trim();switch(n||(console.error(`Usage: kb stash <set|get|list|delete|clear> [key] [value]`),process.exit(1)),n){case`set`:{i||(console.error(`Usage: kb stash set <key> <value>`),process.exit(1));let n=e.join(` `),a=n.trim()?``:await r(),o=A(i,t(n||a));console.log(`Stored stash entry: ${o.key}`),console.log(` Type: ${o.type}`),console.log(` Stored: ${o.storedAt}`);return}case`get`:{i||(console.error(`Usage: kb stash get <key>`),process.exit(1));let e=O(i);if(!e){console.log(`No stash entry found: ${i}`);return}console.log(JSON.stringify(e,null,2));return}case`list`:{let e=k();if(e.length===0){console.log(`No stash entries saved.`);return}console.log(`Stash entries (${e.length})`),console.log(`─`.repeat(60));for(let t of e)console.log(`${t.key} (${t.type})`),console.log(` Stored: ${t.storedAt}`);return}case`delete`:{i||(console.error(`Usage: kb stash delete <key>`),process.exit(1));let e=D(i);console.log(e?`Deleted stash entry: ${i}`:`No stash entry found: ${i}`);return}case`clear`:{let e=E();console.log(`Cleared ${e} stash entr${e===1?`y`:`ies`}.`);return}default:console.error(`Unknown stash action: ${n}`),console.error(`Actions: set, get, list, delete, clear`),process.exit(1)}}},{name:`lane`,description:`Manage verified lanes — isolated file copies for parallel exploration`,usage:`kb lane <create|list|status|diff|merge|discard> [name] [--files f1,f2]`,run:async t=>{let n=t.shift();if((!n||![`create`,`list`,`status`,`diff`,`merge`,`discard`].includes(n))&&(console.error(`Usage: kb lane <create|list|status|diff|merge|discard> [name] [--files f1,f2]`),process.exit(1)),n===`list`){let e=d();if(e.length===0){console.log(`No active lanes.`);return}for(let t of e)console.log(`${t.name} (${t.sourceFiles.length} files, created ${t.createdAt})`);return}let r=t.shift();switch(r||(console.error(`Lane name is required for "${n}".`),process.exit(1)),n){case`create`:{let n=e(t,`--files`,``);n||(console.error(`Usage: kb lane create <name> --files file1.ts,file2.ts`),process.exit(1));let i=c(r,n.split(`,`).map(e=>e.trim()));console.log(`Lane "${i.name}" created with ${i.sourceFiles.length} files.`);break}case`status`:{let e=p(r);console.log(`Lane: ${e.name}`),console.log(`Modified: ${e.modified} | Added: ${e.added} | Deleted: ${e.deleted}`);for(let t of e.entries)console.log(` ${t.status.padEnd(10)} ${t.file}`);break}case`diff`:{let e=l(r);console.log(`Lane: ${e.name} — ${e.modified} modified, ${e.added} added, ${e.deleted} deleted`);for(let t of e.entries)t.diff&&(console.log(`\n--- ${t.file} (${t.status})`),console.log(t.diff));break}case`merge`:{let e=f(r);console.log(`Merged ${e.filesMerged} files from lane "${e.name}".`);for(let t of e.files)console.log(` ${t}`);break}case`discard`:{let e=u(r);console.log(e?`Lane "${r}" discarded.`:`Lane "${r}" not found.`);break}}}},{name:`queue`,description:`Manage task queues for sequential agent operations`,usage:`kb queue <create|push|next|done|fail|get|list|clear|delete> [name] [args]`,run:async e=>{let t=e.shift();if((!t||![`create`,`push`,`next`,`done`,`fail`,`get`,`list`,`clear`,`delete`].includes(t))&&(console.error(`Usage: kb queue <create|push|next|done|fail|get|list|clear|delete> [name] [args]`),process.exit(1)),t===`list`){let e=x();if(e.length===0){console.log(`No queues.`);return}for(let t of e)console.log(`${t.name} pending:${t.pending} done:${t.done} failed:${t.failed} total:${t.total}`);return}let n=e.shift();switch(n||(console.error(`Queue name is required for "${t}".`),process.exit(1)),t){case`create`:{let e=g(n);console.log(`Queue "${e.name}" created.`);break}case`push`:{let t=C(n,e.join(` `)||`Untitled task`);console.log(`Pushed "${t.title}" (${t.id}) to queue "${n}".`);break}case`next`:{let e=S(n);console.log(e?`Next: ${e.title} (${e.id})`:`No pending items in queue "${n}".`);break}case`done`:{let t=e.shift();t||(console.error(`Usage: kb queue done <name> <id>`),process.exit(1));let r=v(n,t);console.log(`Marked "${r.title}" as done.`);break}case`fail`:{let t=e.shift(),r=e.join(` `)||`Unknown error`;t||(console.error(`Usage: kb queue fail <name> <id> [error message]`),process.exit(1));let i=y(n,t,r);console.log(`Marked "${i.title}" as failed: ${r}`);break}case`get`:{let e=b(n);if(!e){console.log(`Queue "${n}" not found.`);return}console.log(`Queue: ${e.name} (${e.items.length} items)`);for(let t of e.items){let e=t.error?` — ${t.error}`:``;console.log(` ${t.status.padEnd(12)} ${t.id} ${t.title}${e}`)}break}case`clear`:{let e=h(n);console.log(`Cleared ${e} completed/failed items from queue "${n}".`);break}case`delete`:{let e=_(n);console.log(e?`Queue "${n}" deleted.`:`Queue "${n}" not found.`);break}}}}];export{j as workspaceCommands};
|
|
@@ -4,5 +4,4 @@ import { KBContext } from "./kb-init.js";
|
|
|
4
4
|
declare function ctx(): Promise<KBContext>;
|
|
5
5
|
declare function getCtx(): KBContext | null;
|
|
6
6
|
//#endregion
|
|
7
|
-
export { type KBContext, ctx, getCtx };
|
|
8
|
-
//# sourceMappingURL=context.d.ts.map
|
|
7
|
+
export { type KBContext, ctx, getCtx };
|
|
@@ -1,2 +1 @@
|
|
|
1
|
-
import{initKB as e}from"./kb-init.js";let t=null;async function n(){return t||=await e(),t}function r(){return t}export{n as ctx,r as getCtx};
|
|
2
|
-
//# sourceMappingURL=context.js.map
|
|
1
|
+
import{initKB as e}from"./kb-init.js";let t=null;async function n(){return t||=await e(),t}function r(){return t}export{n as ctx,r as getCtx};
|
|
@@ -52,5 +52,4 @@ declare function parseRecordString(value: string): Record<string, unknown>;
|
|
|
52
52
|
declare function rrf(vecResults: SearchResult[], ftsResults: SearchResult[], k?: number): SearchResult[];
|
|
53
53
|
declare function executeCliBatchOperation(operation: BatchOperation, context: KBContext | null): Promise<unknown>;
|
|
54
54
|
//#endregion
|
|
55
|
-
export { executeCliBatchOperation, extractBoolFlag, extractNumFlag, extractStrFlag, formatFocusRanges, parseBatchPayload, parseMaybeJsonString, parseRecordString, printCheckResult, printCheckSection, printCheckpoint, printDeadSymbolsResult, printDiffFiles, printExamplesResult, printFileSummary, printGitContext, printManagedProcess, printParsedOutput, printSection, printSymbolInfo, printTestRunResult, printTraceResult, printWorkset, readInput, readStdin, rrf, splitCsv, validateBatchOperations };
|
|
56
|
-
//# sourceMappingURL=helpers.d.ts.map
|
|
55
|
+
export { executeCliBatchOperation, extractBoolFlag, extractNumFlag, extractStrFlag, formatFocusRanges, parseBatchPayload, parseMaybeJsonString, parseRecordString, printCheckResult, printCheckSection, printCheckpoint, printDeadSymbolsResult, printDiffFiles, printExamplesResult, printFileSummary, printGitContext, printManagedProcess, printParsedOutput, printSection, printSymbolInfo, printTestRunResult, printTraceResult, printWorkset, readInput, readStdin, rrf, splitCsv, validateBatchOperations };
|