@winspan/claude-forge 8.54.3 → 9.2.0
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/DEVELOPMENT.md +649 -33
- package/README.md +155 -17
- package/dist/catalogs/agents.json +72 -0
- package/dist/catalogs/skills.json +194 -0
- package/dist/claudemd/claudemd-generator.d.ts +45 -45
- package/dist/claudemd/claudemd-generator.d.ts.map +1 -1
- package/dist/claudemd/claudemd-generator.js +128 -449
- package/dist/claudemd/claudemd-generator.js.map +1 -1
- package/dist/claudemd/index.d.ts +14 -4
- package/dist/claudemd/index.d.ts.map +1 -1
- package/dist/claudemd/index.js +15 -4
- package/dist/claudemd/index.js.map +1 -1
- package/dist/claudemd/resume-manager.d.ts.map +1 -1
- package/dist/claudemd/resume-manager.js +37 -9
- package/dist/claudemd/resume-manager.js.map +1 -1
- package/dist/claudemd/templates/swarm-protocol.md +35 -186
- package/dist/claudemd/violations-manager.d.ts +40 -0
- package/dist/claudemd/violations-manager.d.ts.map +1 -0
- package/dist/claudemd/violations-manager.js +106 -0
- package/dist/claudemd/violations-manager.js.map +1 -0
- package/dist/cli/commands/admin.d.ts +15 -0
- package/dist/cli/commands/admin.d.ts.map +1 -0
- package/dist/cli/commands/admin.js +177 -0
- package/dist/cli/commands/admin.js.map +1 -0
- package/dist/cli/commands/agents.d.ts +18 -0
- package/dist/cli/commands/agents.d.ts.map +1 -0
- package/dist/cli/commands/agents.js +160 -0
- package/dist/cli/commands/agents.js.map +1 -0
- package/dist/cli/commands/bypass.d.ts +18 -0
- package/dist/cli/commands/bypass.d.ts.map +1 -0
- package/dist/cli/commands/bypass.js +87 -0
- package/dist/cli/commands/bypass.js.map +1 -0
- package/dist/cli/commands/claudemd.d.ts +60 -0
- package/dist/cli/commands/claudemd.d.ts.map +1 -1
- package/dist/cli/commands/claudemd.js +174 -37
- package/dist/cli/commands/claudemd.js.map +1 -1
- package/dist/cli/commands/config.d.ts.map +1 -1
- package/dist/cli/commands/config.js +94 -1
- package/dist/cli/commands/config.js.map +1 -1
- package/dist/cli/commands/daemon.d.ts +39 -0
- package/dist/cli/commands/daemon.d.ts.map +1 -1
- package/dist/cli/commands/daemon.js +167 -20
- package/dist/cli/commands/daemon.js.map +1 -1
- package/dist/cli/commands/decisions.d.ts +129 -0
- package/dist/cli/commands/decisions.d.ts.map +1 -0
- package/dist/cli/commands/decisions.js +669 -0
- package/dist/cli/commands/decisions.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +29 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +124 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +35 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +121 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/executions.d.ts +1 -0
- package/dist/cli/commands/executions.d.ts.map +1 -1
- package/dist/cli/commands/executions.js +10 -1
- package/dist/cli/commands/executions.js.map +1 -1
- package/dist/cli/commands/fix.d.ts +31 -0
- package/dist/cli/commands/fix.d.ts.map +1 -0
- package/dist/cli/commands/fix.js +108 -0
- package/dist/cli/commands/fix.js.map +1 -0
- package/dist/cli/commands/governance.d.ts +21 -0
- package/dist/cli/commands/governance.d.ts.map +1 -0
- package/dist/cli/commands/governance.js +60 -0
- package/dist/cli/commands/governance.js.map +1 -0
- package/dist/cli/commands/init.d.ts +27 -0
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +158 -146
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/insights-goal-check.d.ts +50 -0
- package/dist/cli/commands/insights-goal-check.d.ts.map +1 -0
- package/dist/cli/commands/insights-goal-check.js +318 -0
- package/dist/cli/commands/insights-goal-check.js.map +1 -0
- package/dist/cli/commands/insights.d.ts +15 -0
- package/dist/cli/commands/insights.d.ts.map +1 -0
- package/dist/cli/commands/insights.js +127 -0
- package/dist/cli/commands/insights.js.map +1 -0
- package/dist/cli/commands/knowledge.d.ts +66 -0
- package/dist/cli/commands/knowledge.d.ts.map +1 -0
- package/dist/cli/commands/knowledge.js +897 -0
- package/dist/cli/commands/knowledge.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +0 -12
- package/dist/cli/commands/mcp.d.ts.map +1 -1
- package/dist/cli/commands/mcp.js +11 -5
- package/dist/cli/commands/mcp.js.map +1 -1
- package/dist/cli/commands/menu.d.ts.map +1 -1
- package/dist/cli/commands/menu.js +10 -184
- package/dist/cli/commands/menu.js.map +1 -1
- package/dist/cli/commands/project.d.ts +98 -0
- package/dist/cli/commands/project.d.ts.map +1 -0
- package/dist/cli/commands/project.js +382 -0
- package/dist/cli/commands/project.js.map +1 -0
- package/dist/cli/commands/skills.d.ts.map +1 -1
- package/dist/cli/commands/skills.js +14 -128
- package/dist/cli/commands/skills.js.map +1 -1
- package/dist/cli/commands/spec.d.ts +40 -0
- package/dist/cli/commands/spec.d.ts.map +1 -0
- package/dist/cli/commands/spec.js +49 -0
- package/dist/cli/commands/spec.js.map +1 -0
- package/dist/cli/commands/stats.d.ts.map +1 -1
- package/dist/cli/commands/stats.js +3 -2
- package/dist/cli/commands/stats.js.map +1 -1
- package/dist/cli/commands/status.d.ts.map +1 -1
- package/dist/cli/commands/status.js +17 -2
- package/dist/cli/commands/status.js.map +1 -1
- package/dist/cli/commands/trace.d.ts.map +1 -1
- package/dist/cli/commands/trace.js +4 -9
- package/dist/cli/commands/trace.js.map +1 -1
- package/dist/cli/commands/violations.d.ts +14 -0
- package/dist/cli/commands/violations.d.ts.map +1 -0
- package/dist/cli/commands/violations.js +43 -0
- package/dist/cli/commands/violations.js.map +1 -0
- package/dist/cli/index.js +26 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/init/hook-manager.d.ts +1 -1
- package/dist/cli/init/hook-manager.d.ts.map +1 -1
- package/dist/cli/init/hook-manager.js +6 -0
- package/dist/cli/init/hook-manager.js.map +1 -1
- package/dist/cli/utils/resolve-session.d.ts +32 -0
- package/dist/cli/utils/resolve-session.d.ts.map +1 -0
- package/dist/cli/utils/resolve-session.js +39 -0
- package/dist/cli/utils/resolve-session.js.map +1 -0
- package/dist/core/config.d.ts +4 -1
- package/dist/core/config.d.ts.map +1 -1
- package/dist/core/config.js +11 -23
- package/dist/core/config.js.map +1 -1
- package/dist/core/constants.d.ts +14 -13
- package/dist/core/constants.d.ts.map +1 -1
- package/dist/core/constants.js +20 -13
- package/dist/core/constants.js.map +1 -1
- package/dist/core/diagnostics/checks.d.ts +151 -0
- package/dist/core/diagnostics/checks.d.ts.map +1 -0
- package/dist/core/diagnostics/checks.js +765 -0
- package/dist/core/diagnostics/checks.js.map +1 -0
- package/dist/core/diagnostics/daemon-status.d.ts +77 -0
- package/dist/core/diagnostics/daemon-status.d.ts.map +1 -0
- package/dist/core/diagnostics/daemon-status.js +113 -0
- package/dist/core/diagnostics/daemon-status.js.map +1 -0
- package/dist/core/diagnostics/entropy-checks.d.ts +82 -0
- package/dist/core/diagnostics/entropy-checks.d.ts.map +1 -0
- package/dist/core/diagnostics/entropy-checks.js +395 -0
- package/dist/core/diagnostics/entropy-checks.js.map +1 -0
- package/dist/core/diagnostics/fix-runner.d.ts +54 -0
- package/dist/core/diagnostics/fix-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/fix-runner.js +90 -0
- package/dist/core/diagnostics/fix-runner.js.map +1 -0
- package/dist/core/diagnostics/knip-runner.d.ts +49 -0
- package/dist/core/diagnostics/knip-runner.d.ts.map +1 -0
- package/dist/core/diagnostics/knip-runner.js +100 -0
- package/dist/core/diagnostics/knip-runner.js.map +1 -0
- package/dist/core/diagnostics/markers.d.ts +96 -0
- package/dist/core/diagnostics/markers.d.ts.map +1 -0
- package/dist/core/diagnostics/markers.js +153 -0
- package/dist/core/diagnostics/markers.js.map +1 -0
- package/dist/core/governance/global-inject.d.ts +60 -0
- package/dist/core/governance/global-inject.d.ts.map +1 -0
- package/dist/core/governance/global-inject.js +129 -0
- package/dist/core/governance/global-inject.js.map +1 -0
- package/dist/core/queue/index.d.ts +16 -3
- package/dist/core/queue/index.d.ts.map +1 -1
- package/dist/core/queue/index.js +14 -3
- package/dist/core/queue/index.js.map +1 -1
- package/dist/core/storage/base.d.ts +158 -0
- package/dist/core/storage/base.d.ts.map +1 -1
- package/dist/core/storage/base.js +570 -0
- package/dist/core/storage/base.js.map +1 -1
- package/dist/core/storage/codec/tool-input-codec.d.ts +93 -0
- package/dist/core/storage/codec/tool-input-codec.d.ts.map +1 -0
- package/dist/core/storage/codec/tool-input-codec.js +159 -0
- package/dist/core/storage/codec/tool-input-codec.js.map +1 -0
- package/dist/core/storage/decisions.d.ts +362 -0
- package/dist/core/storage/decisions.d.ts.map +1 -0
- package/dist/core/storage/decisions.js +502 -0
- package/dist/core/storage/decisions.js.map +1 -0
- package/dist/core/storage/events.d.ts +112 -8
- package/dist/core/storage/events.d.ts.map +1 -1
- package/dist/core/storage/events.js +390 -39
- package/dist/core/storage/events.js.map +1 -1
- package/dist/core/storage/feedback.d.ts +131 -0
- package/dist/core/storage/feedback.d.ts.map +1 -0
- package/dist/core/storage/feedback.js +187 -0
- package/dist/core/storage/feedback.js.map +1 -0
- package/dist/core/storage/forge-config.d.ts +40 -0
- package/dist/core/storage/forge-config.d.ts.map +1 -0
- package/dist/core/storage/forge-config.js +65 -0
- package/dist/core/storage/forge-config.js.map +1 -0
- package/dist/core/storage/injections.d.ts +28 -0
- package/dist/core/storage/injections.d.ts.map +1 -1
- package/dist/core/storage/injections.js +62 -5
- package/dist/core/storage/injections.js.map +1 -1
- package/dist/core/storage/knowledge.d.ts +106 -0
- package/dist/core/storage/knowledge.d.ts.map +1 -0
- package/dist/core/storage/knowledge.js +202 -0
- package/dist/core/storage/knowledge.js.map +1 -0
- package/dist/core/storage/maintenance.d.ts +36 -9
- package/dist/core/storage/maintenance.d.ts.map +1 -1
- package/dist/core/storage/maintenance.js +56 -24
- package/dist/core/storage/maintenance.js.map +1 -1
- package/dist/core/storage/pipeline-rollup.d.ts +117 -0
- package/dist/core/storage/pipeline-rollup.d.ts.map +1 -0
- package/dist/core/storage/pipeline-rollup.js +471 -0
- package/dist/core/storage/pipeline-rollup.js.map +1 -0
- package/dist/core/storage/routing.d.ts +16 -3
- package/dist/core/storage/routing.d.ts.map +1 -1
- package/dist/core/storage/routing.js +39 -8
- package/dist/core/storage/routing.js.map +1 -1
- package/dist/core/storage/rows.d.ts +50 -7
- package/dist/core/storage/rows.d.ts.map +1 -1
- package/dist/core/storage/schema.sql +302 -23
- package/dist/core/storage/sessions.d.ts +136 -0
- package/dist/core/storage/sessions.d.ts.map +1 -1
- package/dist/core/storage/sessions.js +351 -15
- package/dist/core/storage/sessions.js.map +1 -1
- package/dist/core/storage/skills.d.ts +1 -0
- package/dist/core/storage/skills.d.ts.map +1 -1
- package/dist/core/storage/skills.js +21 -6
- package/dist/core/storage/skills.js.map +1 -1
- package/dist/core/storage/sqlite.d.ts +253 -20
- package/dist/core/storage/sqlite.d.ts.map +1 -1
- package/dist/core/storage/sqlite.js +425 -16
- package/dist/core/storage/sqlite.js.map +1 -1
- package/dist/core/storage/tasks.d.ts +474 -2
- package/dist/core/storage/tasks.d.ts.map +1 -1
- package/dist/core/storage/tasks.js +1213 -18
- package/dist/core/storage/tasks.js.map +1 -1
- package/dist/core/storage/tool-intercepts.d.ts +69 -0
- package/dist/core/storage/tool-intercepts.d.ts.map +1 -0
- package/dist/core/storage/tool-intercepts.js +116 -0
- package/dist/core/storage/tool-intercepts.js.map +1 -0
- package/dist/core/storage/workflow-recommendations.d.ts +124 -0
- package/dist/core/storage/workflow-recommendations.d.ts.map +1 -0
- package/dist/core/storage/workflow-recommendations.js +274 -0
- package/dist/core/storage/workflow-recommendations.js.map +1 -0
- package/dist/core/types.d.ts +112 -17
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js +12 -0
- package/dist/core/types.js.map +1 -1
- package/dist/core/utils/backup.d.ts +81 -0
- package/dist/core/utils/backup.d.ts.map +1 -0
- package/dist/core/utils/backup.js +98 -0
- package/dist/core/utils/backup.js.map +1 -0
- package/dist/core/utils/binary-paths.d.ts +92 -0
- package/dist/core/utils/binary-paths.d.ts.map +1 -0
- package/dist/core/utils/binary-paths.js +166 -0
- package/dist/core/utils/binary-paths.js.map +1 -0
- package/dist/core/utils/bypass-token.d.ts +75 -0
- package/dist/core/utils/bypass-token.d.ts.map +1 -0
- package/dist/core/utils/bypass-token.js +133 -0
- package/dist/core/utils/bypass-token.js.map +1 -0
- package/dist/core/utils/cc-builtin-agents.d.ts +3 -0
- package/dist/core/utils/cc-builtin-agents.d.ts.map +1 -0
- package/dist/core/utils/cc-builtin-agents.js +29 -0
- package/dist/core/utils/cc-builtin-agents.js.map +1 -0
- package/dist/core/utils/claude-cli-spawn.d.ts +106 -0
- package/dist/core/utils/claude-cli-spawn.d.ts.map +1 -0
- package/dist/core/utils/claude-cli-spawn.js +219 -0
- package/dist/core/utils/claude-cli-spawn.js.map +1 -0
- package/dist/core/utils/forge-resume-block.d.ts.map +1 -1
- package/dist/core/utils/forge-resume-block.js +3 -2
- package/dist/core/utils/forge-resume-block.js.map +1 -1
- package/dist/core/utils/logger.d.ts +15 -3
- package/dist/core/utils/logger.d.ts.map +1 -1
- package/dist/core/utils/logger.js +20 -2
- package/dist/core/utils/logger.js.map +1 -1
- package/dist/core/utils/noise-prompt.d.ts +97 -0
- package/dist/core/utils/noise-prompt.d.ts.map +1 -0
- package/dist/core/utils/noise-prompt.js +127 -0
- package/dist/core/utils/noise-prompt.js.map +1 -0
- package/dist/core/utils/path.d.ts +0 -4
- package/dist/core/utils/path.d.ts.map +1 -1
- package/dist/core/utils/path.js +0 -7
- package/dist/core/utils/path.js.map +1 -1
- package/dist/core/utils/time.d.ts +41 -0
- package/dist/core/utils/time.d.ts.map +1 -1
- package/dist/core/utils/time.js +114 -0
- package/dist/core/utils/time.js.map +1 -1
- package/dist/daemon/agent-sync.d.ts +24 -0
- package/dist/daemon/agent-sync.d.ts.map +1 -0
- package/dist/daemon/agent-sync.js +114 -0
- package/dist/daemon/agent-sync.js.map +1 -0
- package/dist/daemon/config-store.d.ts +55 -0
- package/dist/daemon/config-store.d.ts.map +1 -0
- package/dist/daemon/config-store.js +137 -0
- package/dist/daemon/config-store.js.map +1 -0
- package/dist/daemon/event-parser.d.ts +22 -0
- package/dist/daemon/event-parser.d.ts.map +1 -1
- package/dist/daemon/event-parser.js +49 -3
- package/dist/daemon/event-parser.js.map +1 -1
- package/dist/daemon/handlers/history-exporter.d.ts.map +1 -1
- package/dist/daemon/handlers/history-exporter.js +9 -8
- package/dist/daemon/handlers/history-exporter.js.map +1 -1
- package/dist/daemon/handlers/post-tool-use.d.ts +58 -4
- package/dist/daemon/handlers/post-tool-use.d.ts.map +1 -1
- package/dist/daemon/handlers/post-tool-use.js +261 -8
- package/dist/daemon/handlers/post-tool-use.js.map +1 -1
- package/dist/daemon/handlers/pre-tool-use.d.ts +156 -0
- package/dist/daemon/handlers/pre-tool-use.d.ts.map +1 -0
- package/dist/daemon/handlers/pre-tool-use.js +585 -0
- package/dist/daemon/handlers/pre-tool-use.js.map +1 -0
- package/dist/daemon/handlers/stop.d.ts +35 -7
- package/dist/daemon/handlers/stop.d.ts.map +1 -1
- package/dist/daemon/handlers/stop.js +157 -8
- package/dist/daemon/handlers/stop.js.map +1 -1
- package/dist/daemon/handlers/user-prompt.d.ts +36 -14
- package/dist/daemon/handlers/user-prompt.d.ts.map +1 -1
- package/dist/daemon/handlers/user-prompt.js +135 -48
- package/dist/daemon/handlers/user-prompt.js.map +1 -1
- package/dist/daemon/hook-sync.d.ts.map +1 -1
- package/dist/daemon/hook-sync.js +2 -1
- package/dist/daemon/hook-sync.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +471 -43
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/lifecycle.d.ts +48 -1
- package/dist/daemon/lifecycle.d.ts.map +1 -1
- package/dist/daemon/lifecycle.js +98 -2
- package/dist/daemon/lifecycle.js.map +1 -1
- package/dist/daemon/router.d.ts +4 -1
- package/dist/daemon/router.d.ts.map +1 -1
- package/dist/daemon/router.js +4 -2
- package/dist/daemon/router.js.map +1 -1
- package/dist/daemon/rules/defaults.d.ts +20 -0
- package/dist/daemon/rules/defaults.d.ts.map +1 -0
- package/dist/daemon/rules/defaults.js +692 -0
- package/dist/daemon/rules/defaults.js.map +1 -0
- package/dist/daemon/rules/registry.d.ts +47 -0
- package/dist/daemon/rules/registry.d.ts.map +1 -0
- package/dist/daemon/rules/registry.js +84 -0
- package/dist/daemon/rules/registry.js.map +1 -0
- package/dist/daemon/rules/types.d.ts +170 -0
- package/dist/daemon/rules/types.d.ts.map +1 -0
- package/dist/daemon/rules/types.js +15 -0
- package/dist/daemon/rules/types.js.map +1 -0
- package/dist/daemon/rules/whitelist.d.ts +101 -0
- package/dist/daemon/rules/whitelist.d.ts.map +1 -0
- package/dist/daemon/rules/whitelist.js +210 -0
- package/dist/daemon/rules/whitelist.js.map +1 -0
- package/dist/daemon/rules/workflow-defaults.d.ts +52 -0
- package/dist/daemon/rules/workflow-defaults.d.ts.map +1 -0
- package/dist/daemon/rules/workflow-defaults.js +521 -0
- package/dist/daemon/rules/workflow-defaults.js.map +1 -0
- package/dist/daemon/server.d.ts +11 -1
- package/dist/daemon/server.d.ts.map +1 -1
- package/dist/daemon/server.js +7 -1
- package/dist/daemon/server.js.map +1 -1
- package/dist/daemon/services/context-injector.d.ts +34 -0
- package/dist/daemon/services/context-injector.d.ts.map +1 -0
- package/dist/daemon/services/context-injector.js +61 -0
- package/dist/daemon/services/context-injector.js.map +1 -0
- package/dist/daemon/services/decision-hint.d.ts +203 -0
- package/dist/daemon/services/decision-hint.d.ts.map +1 -0
- package/dist/daemon/services/decision-hint.js +487 -0
- package/dist/daemon/services/decision-hint.js.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts +86 -0
- package/dist/daemon/services/event-ttl-sweep.d.ts.map +1 -0
- package/dist/daemon/services/event-ttl-sweep.js +123 -0
- package/dist/daemon/services/event-ttl-sweep.js.map +1 -0
- package/dist/daemon/services/experience-extractor.d.ts +67 -0
- package/dist/daemon/services/experience-extractor.d.ts.map +1 -0
- package/dist/daemon/services/experience-extractor.js +323 -0
- package/dist/daemon/services/experience-extractor.js.map +1 -0
- package/dist/daemon/services/feedback-aggregator.d.ts +179 -0
- package/dist/daemon/services/feedback-aggregator.d.ts.map +1 -0
- package/dist/daemon/services/feedback-aggregator.js +455 -0
- package/dist/daemon/services/feedback-aggregator.js.map +1 -0
- package/dist/daemon/services/heartbeat-writer.d.ts +55 -0
- package/dist/daemon/services/heartbeat-writer.d.ts.map +1 -0
- package/dist/daemon/services/heartbeat-writer.js +111 -0
- package/dist/daemon/services/heartbeat-writer.js.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts +61 -0
- package/dist/daemon/services/idle-session-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/idle-session-sweeper.js +94 -0
- package/dist/daemon/services/idle-session-sweeper.js.map +1 -0
- package/dist/daemon/services/idle-task-budget.d.ts +50 -0
- package/dist/daemon/services/idle-task-budget.d.ts.map +1 -0
- package/dist/daemon/services/idle-task-budget.js +72 -0
- package/dist/daemon/services/idle-task-budget.js.map +1 -0
- package/dist/daemon/services/intercept-revive.d.ts +60 -0
- package/dist/daemon/services/intercept-revive.d.ts.map +1 -0
- package/dist/daemon/services/intercept-revive.js +86 -0
- package/dist/daemon/services/intercept-revive.js.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts +105 -0
- package/dist/daemon/services/intercept-rollback-guard.d.ts.map +1 -0
- package/dist/daemon/services/intercept-rollback-guard.js +152 -0
- package/dist/daemon/services/intercept-rollback-guard.js.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts +58 -0
- package/dist/daemon/services/intercept-timeout-sweeper.d.ts.map +1 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js +83 -0
- package/dist/daemon/services/intercept-timeout-sweeper.js.map +1 -0
- package/dist/daemon/services/kb-injector.d.ts +57 -0
- package/dist/daemon/services/kb-injector.d.ts.map +1 -0
- package/dist/daemon/services/kb-injector.js +140 -0
- package/dist/daemon/services/kb-injector.js.map +1 -0
- package/dist/daemon/services/outcome-classification-service.d.ts +49 -0
- package/dist/daemon/services/outcome-classification-service.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classification-service.js +214 -0
- package/dist/daemon/services/outcome-classification-service.js.map +1 -0
- package/dist/daemon/services/outcome-classifier.d.ts +136 -0
- package/dist/daemon/services/outcome-classifier.d.ts.map +1 -0
- package/dist/daemon/services/outcome-classifier.js +178 -0
- package/dist/daemon/services/outcome-classifier.js.map +1 -0
- package/dist/daemon/services/outcome-nudge.d.ts +107 -0
- package/dist/daemon/services/outcome-nudge.d.ts.map +1 -0
- package/dist/daemon/services/outcome-nudge.js +242 -0
- package/dist/daemon/services/outcome-nudge.js.map +1 -0
- package/dist/daemon/services/spec-approval.d.ts +127 -0
- package/dist/daemon/services/spec-approval.d.ts.map +1 -0
- package/dist/daemon/services/spec-approval.js +216 -0
- package/dist/daemon/services/spec-approval.js.map +1 -0
- package/dist/daemon/services/spec-gate.d.ts +54 -0
- package/dist/daemon/services/spec-gate.d.ts.map +1 -0
- package/dist/daemon/services/spec-gate.js +113 -0
- package/dist/daemon/services/spec-gate.js.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts +78 -0
- package/dist/daemon/services/task-boundary-classifier.d.ts.map +1 -0
- package/dist/daemon/services/task-boundary-classifier.js +202 -0
- package/dist/daemon/services/task-boundary-classifier.js.map +1 -0
- package/dist/daemon/services/task-segmenter.d.ts +219 -1
- package/dist/daemon/services/task-segmenter.d.ts.map +1 -1
- package/dist/daemon/services/task-segmenter.js +481 -17
- package/dist/daemon/services/task-segmenter.js.map +1 -1
- package/dist/daemon/services/violation-reporter.d.ts +130 -0
- package/dist/daemon/services/violation-reporter.d.ts.map +1 -0
- package/dist/daemon/services/violation-reporter.js +339 -0
- package/dist/daemon/services/violation-reporter.js.map +1 -0
- package/dist/daemon/skill-sync.d.ts +7 -2
- package/dist/daemon/skill-sync.d.ts.map +1 -1
- package/dist/daemon/skill-sync.js +114 -9
- package/dist/daemon/skill-sync.js.map +1 -1
- package/dist/daemon/templates/agents/claudemd-writer.md +101 -0
- package/dist/daemon/templates/agents/coder.md +105 -0
- package/dist/daemon/templates/agents/decision-maker.md +460 -0
- package/dist/daemon/templates/agents/doc-reviewer.md +115 -0
- package/dist/daemon/templates/agents/harness-debug-full.md +114 -0
- package/dist/daemon/templates/agents/harness-hotfix.md +99 -0
- package/dist/daemon/templates/agents/hybrid-feature-with-safety.md +104 -0
- package/dist/daemon/templates/agents/knowledge-builder.md +119 -0
- package/dist/daemon/templates/agents/patch-applier.md +144 -0
- package/dist/daemon/templates/agents/planner.md +165 -0
- package/dist/daemon/templates/agents/refactor-specialist.md +98 -0
- package/dist/daemon/templates/agents/skill-distiller.md +113 -0
- package/dist/daemon/templates/agents/task-boundary-classifier.md +64 -0
- package/dist/daemon/templates/agents/verify-agent.md +136 -0
- package/dist/daemon/utils/inject-block.d.ts +39 -0
- package/dist/daemon/utils/inject-block.d.ts.map +1 -0
- package/dist/daemon/utils/inject-block.js +25 -0
- package/dist/daemon/utils/inject-block.js.map +1 -0
- package/dist/hooks/hook-lib.sh +8 -0
- package/dist/hooks/notification.sh +19 -8
- package/dist/hooks/post-tool-use.sh +41 -23
- package/dist/hooks/pre-tool-use.sh +54 -23
- package/dist/hooks/session-start.sh +68 -0
- package/dist/hooks/stop.sh +24 -10
- package/dist/hooks/user-prompt-submit.sh +37 -21
- package/dist/knowledge/adapters/go-adapter.d.ts +65 -0
- package/dist/knowledge/adapters/go-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/go-adapter.js +294 -0
- package/dist/knowledge/adapters/go-adapter.js.map +1 -0
- package/dist/knowledge/adapters/index.d.ts +41 -0
- package/dist/knowledge/adapters/index.d.ts.map +1 -0
- package/dist/knowledge/adapters/index.js +71 -0
- package/dist/knowledge/adapters/index.js.map +1 -0
- package/dist/knowledge/adapters/java-adapter.d.ts +66 -0
- package/dist/knowledge/adapters/java-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/java-adapter.js +260 -0
- package/dist/knowledge/adapters/java-adapter.js.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts +56 -0
- package/dist/knowledge/adapters/js-vue-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/js-vue-adapter.js +203 -0
- package/dist/knowledge/adapters/js-vue-adapter.js.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts +55 -0
- package/dist/knowledge/adapters/kotlin-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/kotlin-adapter.js +209 -0
- package/dist/knowledge/adapters/kotlin-adapter.js.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts +77 -0
- package/dist/knowledge/adapters/monorepo-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/monorepo-adapter.js +170 -0
- package/dist/knowledge/adapters/monorepo-adapter.js.map +1 -0
- package/dist/knowledge/adapters/python-adapter.d.ts +89 -0
- package/dist/knowledge/adapters/python-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/python-adapter.js +358 -0
- package/dist/knowledge/adapters/python-adapter.js.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts +73 -0
- package/dist/knowledge/adapters/rust-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/rust-adapter.js +329 -0
- package/dist/knowledge/adapters/rust-adapter.js.map +1 -0
- package/dist/knowledge/adapters/types.d.ts +99 -0
- package/dist/knowledge/adapters/types.d.ts.map +1 -0
- package/dist/knowledge/adapters/types.js +17 -0
- package/dist/knowledge/adapters/types.js.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts +57 -0
- package/dist/knowledge/adapters/typescript-adapter.d.ts.map +1 -0
- package/dist/knowledge/adapters/typescript-adapter.js +171 -0
- package/dist/knowledge/adapters/typescript-adapter.js.map +1 -0
- package/dist/knowledge/audit-applier.d.ts +70 -0
- package/dist/knowledge/audit-applier.d.ts.map +1 -0
- package/dist/knowledge/audit-applier.js +251 -0
- package/dist/knowledge/audit-applier.js.map +1 -0
- package/dist/knowledge/builder.d.ts +261 -0
- package/dist/knowledge/builder.d.ts.map +1 -0
- package/dist/knowledge/builder.js +937 -0
- package/dist/knowledge/builder.js.map +1 -0
- package/dist/knowledge/cli-provider.d.ts +151 -0
- package/dist/knowledge/cli-provider.d.ts.map +1 -0
- package/dist/knowledge/cli-provider.js +313 -0
- package/dist/knowledge/cli-provider.js.map +1 -0
- package/dist/knowledge/constants.d.ts +73 -0
- package/dist/knowledge/constants.d.ts.map +1 -0
- package/dist/knowledge/constants.js +93 -0
- package/dist/knowledge/constants.js.map +1 -0
- package/dist/knowledge/cross-module.d.ts +139 -0
- package/dist/knowledge/cross-module.d.ts.map +1 -0
- package/dist/knowledge/cross-module.js +370 -0
- package/dist/knowledge/cross-module.js.map +1 -0
- package/dist/knowledge/git-hooks.d.ts +67 -0
- package/dist/knowledge/git-hooks.d.ts.map +1 -0
- package/dist/knowledge/git-hooks.js +258 -0
- package/dist/knowledge/git-hooks.js.map +1 -0
- package/dist/knowledge/module-hash.d.ts +88 -0
- package/dist/knowledge/module-hash.d.ts.map +1 -0
- package/dist/knowledge/module-hash.js +162 -0
- package/dist/knowledge/module-hash.js.map +1 -0
- package/dist/knowledge/project-detector.d.ts +101 -0
- package/dist/knowledge/project-detector.d.ts.map +1 -0
- package/dist/knowledge/project-detector.js +223 -0
- package/dist/knowledge/project-detector.js.map +1 -0
- package/dist/knowledge/prompt.d.ts +228 -0
- package/dist/knowledge/prompt.d.ts.map +1 -0
- package/dist/knowledge/prompt.js +404 -0
- package/dist/knowledge/prompt.js.map +1 -0
- package/dist/knowledge/query.d.ts +105 -0
- package/dist/knowledge/query.d.ts.map +1 -0
- package/dist/knowledge/query.js +341 -0
- package/dist/knowledge/query.js.map +1 -0
- package/dist/knowledge/repo-map.d.ts +91 -0
- package/dist/knowledge/repo-map.d.ts.map +1 -0
- package/dist/knowledge/repo-map.js +408 -0
- package/dist/knowledge/repo-map.js.map +1 -0
- package/dist/knowledge/tools/index.d.ts +14 -0
- package/dist/knowledge/tools/index.d.ts.map +1 -0
- package/dist/knowledge/tools/index.js +11 -0
- package/dist/knowledge/tools/index.js.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts +46 -0
- package/dist/knowledge/tools/knowledge-get-page.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-get-page.js +101 -0
- package/dist/knowledge/tools/knowledge-get-page.js.map +1 -0
- package/dist/knowledge/tools/knowledge-query.d.ts +77 -0
- package/dist/knowledge/tools/knowledge-query.d.ts.map +1 -0
- package/dist/knowledge/tools/knowledge-query.js +104 -0
- package/dist/knowledge/tools/knowledge-query.js.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts +45 -0
- package/dist/knowledge/tools/repo-map-lookup.d.ts.map +1 -0
- package/dist/knowledge/tools/repo-map-lookup.js +82 -0
- package/dist/knowledge/tools/repo-map-lookup.js.map +1 -0
- package/dist/knowledge/types.d.ts +269 -0
- package/dist/knowledge/types.d.ts.map +1 -0
- package/dist/knowledge/types.js +10 -0
- package/dist/knowledge/types.js.map +1 -0
- package/dist/knowledge/validator.d.ts +90 -0
- package/dist/knowledge/validator.d.ts.map +1 -0
- package/dist/knowledge/validator.js +288 -0
- package/dist/knowledge/validator.js.map +1 -0
- package/dist/mcp/server.d.ts.map +1 -1
- package/dist/mcp/server.js +222 -1
- package/dist/mcp/server.js.map +1 -1
- package/dist/skills/builtin-skills.d.ts +35 -0
- package/dist/skills/builtin-skills.d.ts.map +1 -0
- package/dist/skills/builtin-skills.js +68 -0
- package/dist/skills/builtin-skills.js.map +1 -0
- package/dist/skills/distill/attribution.d.ts +59 -0
- package/dist/skills/distill/attribution.d.ts.map +1 -0
- package/dist/skills/distill/attribution.js +101 -0
- package/dist/skills/distill/attribution.js.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts +26 -0
- package/dist/skills/distill/claude-cli-resolver.d.ts.map +1 -0
- package/dist/skills/distill/claude-cli-resolver.js +115 -0
- package/dist/skills/distill/claude-cli-resolver.js.map +1 -0
- package/dist/skills/distill/distiller.d.ts +161 -0
- package/dist/skills/distill/distiller.d.ts.map +1 -0
- package/dist/skills/distill/distiller.js +461 -0
- package/dist/skills/distill/distiller.js.map +1 -0
- package/dist/skills/distill/index.d.ts +223 -0
- package/dist/skills/distill/index.d.ts.map +1 -0
- package/dist/skills/distill/index.js +466 -0
- package/dist/skills/distill/index.js.map +1 -0
- package/dist/skills/distill/project-anchor-guard.d.ts +116 -0
- package/dist/skills/distill/project-anchor-guard.d.ts.map +1 -0
- package/dist/skills/distill/project-anchor-guard.js +334 -0
- package/dist/skills/distill/project-anchor-guard.js.map +1 -0
- package/dist/skills/distill/topic-deduper.d.ts +77 -0
- package/dist/skills/distill/topic-deduper.d.ts.map +1 -0
- package/dist/skills/distill/topic-deduper.js +119 -0
- package/dist/skills/distill/topic-deduper.js.map +1 -0
- package/dist/skills/distill/upstream-fetcher.d.ts +71 -0
- package/dist/skills/distill/upstream-fetcher.d.ts.map +1 -0
- package/dist/skills/distill/upstream-fetcher.js +202 -0
- package/dist/skills/distill/upstream-fetcher.js.map +1 -0
- package/dist/skills/distilled/distilled-api-design.md +491 -0
- package/dist/skills/distilled/distilled-architecture-decision.md +173 -0
- package/dist/skills/distilled/distilled-creator.md +178 -0
- package/dist/skills/distilled/distilled-db-schema-design.md +245 -0
- package/dist/skills/distilled/distilled-defi-amm-security.md +293 -0
- package/dist/skills/distilled/distilled-executing-plans.md +113 -0
- package/dist/skills/distilled/distilled-harness-engineering.md +242 -0
- package/dist/skills/distilled/distilled-karpathy-guidelines.md +104 -0
- package/dist/skills/distilled/distilled-performance-optimization.md +175 -0
- package/dist/skills/distilled/distilled-spec-driven-design.md +193 -0
- package/dist/skills/distilled/distilled-systematic-debugging.md +306 -0
- package/dist/skills/distilled/distilled-verification-before-completion.md +203 -0
- package/dist/skills/keyword-score.d.ts +29 -0
- package/dist/skills/keyword-score.d.ts.map +1 -0
- package/dist/skills/keyword-score.js +54 -0
- package/dist/skills/keyword-score.js.map +1 -0
- package/dist/skills/registry.d.ts +64 -20
- package/dist/skills/registry.d.ts.map +1 -1
- package/dist/skills/registry.js +102 -105
- package/dist/skills/registry.js.map +1 -1
- package/dist/skills/tools/pipeline-suggest.js +14 -14
- package/dist/skills/tools/skill-invoke.d.ts +1 -1
- package/dist/skills/tools/skill-invoke.js +1 -1
- package/dist/web/routes/agent-content.d.ts +30 -0
- package/dist/web/routes/agent-content.d.ts.map +1 -0
- package/dist/web/routes/agent-content.js +139 -0
- package/dist/web/routes/agent-content.js.map +1 -0
- package/dist/web/routes/decisions.d.ts +15 -0
- package/dist/web/routes/decisions.d.ts.map +1 -0
- package/dist/web/routes/decisions.js +181 -0
- package/dist/web/routes/decisions.js.map +1 -0
- package/dist/web/routes/diagnostics.d.ts +61 -0
- package/dist/web/routes/diagnostics.d.ts.map +1 -0
- package/dist/web/routes/diagnostics.js +203 -0
- package/dist/web/routes/diagnostics.js.map +1 -0
- package/dist/web/routes/events.d.ts.map +1 -1
- package/dist/web/routes/events.js +24 -0
- package/dist/web/routes/events.js.map +1 -1
- package/dist/web/routes/health.d.ts +33 -0
- package/dist/web/routes/health.d.ts.map +1 -0
- package/dist/web/routes/health.js +37 -0
- package/dist/web/routes/health.js.map +1 -0
- package/dist/web/routes/insights.d.ts +0 -5
- package/dist/web/routes/insights.d.ts.map +1 -1
- package/dist/web/routes/insights.js +783 -2
- package/dist/web/routes/insights.js.map +1 -1
- package/dist/web/routes/knowledge.d.ts +16 -0
- package/dist/web/routes/knowledge.d.ts.map +1 -0
- package/dist/web/routes/knowledge.js +661 -0
- package/dist/web/routes/knowledge.js.map +1 -0
- package/dist/web/routes/patch.d.ts +60 -1
- package/dist/web/routes/patch.d.ts.map +1 -1
- package/dist/web/routes/patch.js +170 -64
- package/dist/web/routes/patch.js.map +1 -1
- package/dist/web/routes/pipeline.d.ts +37 -0
- package/dist/web/routes/pipeline.d.ts.map +1 -0
- package/dist/web/routes/pipeline.js +149 -0
- package/dist/web/routes/pipeline.js.map +1 -0
- package/dist/web/routes/rules.d.ts.map +1 -1
- package/dist/web/routes/rules.js +6 -1
- package/dist/web/routes/rules.js.map +1 -1
- package/dist/web/routes/sessions.d.ts.map +1 -1
- package/dist/web/routes/sessions.js +9 -1
- package/dist/web/routes/sessions.js.map +1 -1
- package/dist/web/routes/skill-content.d.ts +30 -0
- package/dist/web/routes/skill-content.d.ts.map +1 -0
- package/dist/web/routes/skill-content.js +117 -0
- package/dist/web/routes/skill-content.js.map +1 -0
- package/dist/web/routes/skills-distill.d.ts +29 -0
- package/dist/web/routes/skills-distill.d.ts.map +1 -0
- package/dist/web/routes/skills-distill.js +552 -0
- package/dist/web/routes/skills-distill.js.map +1 -0
- package/dist/web/routes/skills.js +7 -7
- package/dist/web/routes/skills.js.map +1 -1
- package/dist/web/routes/task-timeline.d.ts +102 -0
- package/dist/web/routes/task-timeline.d.ts.map +1 -0
- package/dist/web/routes/task-timeline.js +274 -0
- package/dist/web/routes/task-timeline.js.map +1 -0
- package/dist/web/routes/tasks.d.ts.map +1 -1
- package/dist/web/routes/tasks.js +355 -8
- package/dist/web/routes/tasks.js.map +1 -1
- package/dist/web/routes/trace.d.ts.map +1 -1
- package/dist/web/routes/trace.js +3 -2
- package/dist/web/routes/trace.js.map +1 -1
- package/dist/web/routes/types.d.ts +0 -4
- package/dist/web/routes/types.d.ts.map +1 -1
- package/dist/web/routes/types.js +1 -1
- package/dist/web/routes/types.js.map +1 -1
- package/dist/web/routes/violations.d.ts +14 -0
- package/dist/web/routes/violations.d.ts.map +1 -0
- package/dist/web/routes/violations.js +111 -0
- package/dist/web/routes/violations.js.map +1 -0
- package/dist/web/server.d.ts.map +1 -1
- package/dist/web/server.js +79 -19
- package/dist/web/server.js.map +1 -1
- package/dist/web/services/build-manager.d.ts +72 -0
- package/dist/web/services/build-manager.d.ts.map +1 -0
- package/dist/web/services/build-manager.js +189 -0
- package/dist/web/services/build-manager.js.map +1 -0
- package/dist/web/services/distill-manager.d.ts +125 -0
- package/dist/web/services/distill-manager.d.ts.map +1 -0
- package/dist/web/services/distill-manager.js +308 -0
- package/dist/web/services/distill-manager.js.map +1 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js +2 -0
- package/dist/web/static/assets/AgentContentPage-DkeRNxok.js.map +1 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js +2 -0
- package/dist/web/static/assets/AgentDelegationTable-ByBa0x1l.js.map +1 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js +3 -0
- package/dist/web/static/assets/ContextInsightsPage-oUk7_I8u.js.map +1 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js +2 -0
- package/dist/web/static/assets/DaemonHealthPage-DG2fyOP7.js.map +1 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js +2 -0
- package/dist/web/static/assets/DecisionsPage-CMAPEnKb.js.map +1 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js +2 -0
- package/dist/web/static/assets/DiagnosticsPage-DQd-Zm4r.js.map +1 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js +2 -0
- package/dist/web/static/assets/DriftTab-DqpepOhI.js.map +1 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js +3 -0
- package/dist/web/static/assets/HealthHomePage-CN6zNIie.js.map +1 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js +2 -0
- package/dist/web/static/assets/KbHitRateTable-ByEIWujF.js.map +1 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js +3 -0
- package/dist/web/static/assets/MarkdownRenderer-DZmTl-8J.js.map +1 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js +2 -0
- package/dist/web/static/assets/NotFound-BQPh0vaF.js.map +1 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js +2 -0
- package/dist/web/static/assets/ProjectSwitcher-D3lZMFd3.js.map +1 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js +2 -0
- package/dist/web/static/assets/SettingsPage-oLJBNzQj.js.map +1 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js +2 -0
- package/dist/web/static/assets/SkillContentPage-DK5rgfgw.js.map +1 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js +2 -0
- package/dist/web/static/assets/SkillStatsTable-DYMzjEUV.js.map +1 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js +2 -0
- package/dist/web/static/assets/SkillsDistillTab-C7qaG8q3.js.map +1 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js +6 -0
- package/dist/web/static/assets/TasksHubPage-03wsRRsJ.js.map +1 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js +3 -0
- package/dist/web/static/assets/ViolationsPage-DSiLr-9O.js.map +1 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js +14 -0
- package/dist/web/static/assets/arco-Bhi3a6Qp.js.map +1 -0
- package/dist/web/static/assets/arco-DFQA6dO_.css +1 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js +37 -0
- package/dist/web/static/assets/charts-BuHQWDbQ.js.map +1 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js +2 -0
- package/dist/web/static/assets/date-fns-sbWH3_uq.js.map +1 -0
- package/dist/web/static/assets/index-7bl3kbcx.css +1 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js +4 -0
- package/dist/web/static/assets/index-BIYnq1Dx.js.map +1 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js +72 -0
- package/dist/web/static/assets/lucide-CnlPQoG8.js.map +1 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js +2 -0
- package/dist/web/static/assets/outcome-DUn1NjlC.js.map +1 -0
- package/dist/web/static/assets/query-S6X1S7K9.js +2 -0
- package/dist/web/static/assets/{query-C99w429o.js.map → query-S6X1S7K9.js.map} +1 -1
- package/dist/web/static/assets/{react-router-r79dBVy4.js → react-router-JVUrkhdd.js} +3 -3
- package/dist/web/static/assets/{react-router-r79dBVy4.js.map → react-router-JVUrkhdd.js.map} +1 -1
- package/dist/web/static/assets/react-vendor-tkvCrao7.js +57 -0
- package/dist/web/static/assets/react-vendor-tkvCrao7.js.map +1 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js +6 -0
- package/dist/web/static/assets/syntax-highlighter-BkZfCDsz.js.map +1 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js +2 -0
- package/dist/web/static/assets/useTabsParam-k8qte_0C.js.map +1 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js +65 -0
- package/dist/web/static/assets/vendor-DWgdB1eY.js.map +1 -0
- package/dist/web/static/index.html +12 -8
- package/package.json +14 -3
- package/dist/core/ai/provider.d.ts +0 -63
- package/dist/core/ai/provider.d.ts.map +0 -1
- package/dist/core/ai/provider.js +0 -241
- package/dist/core/ai/provider.js.map +0 -1
- package/dist/core/ai/types.d.ts +0 -43
- package/dist/core/ai/types.d.ts.map +0 -1
- package/dist/core/ai/types.js +0 -5
- package/dist/core/ai/types.js.map +0 -1
- package/dist/core/storage/token-usage.d.ts +0 -36
- package/dist/core/storage/token-usage.d.ts.map +0 -1
- package/dist/core/storage/token-usage.js +0 -59
- package/dist/core/storage/token-usage.js.map +0 -1
- package/dist/core/utils/token-tracker.d.ts +0 -39
- package/dist/core/utils/token-tracker.d.ts.map +0 -1
- package/dist/core/utils/token-tracker.js +0 -69
- package/dist/core/utils/token-tracker.js.map +0 -1
- package/dist/skills/index.d.ts +0 -3
- package/dist/skills/index.d.ts.map +0 -1
- package/dist/skills/index.js +0 -3
- package/dist/skills/index.js.map +0 -1
- package/dist/skills/matcher.d.ts +0 -26
- package/dist/skills/matcher.d.ts.map +0 -1
- package/dist/skills/matcher.js +0 -113
- package/dist/skills/matcher.js.map +0 -1
- package/dist/skills/official/code-simplifier.md +0 -52
- package/dist/skills/official/find-skills.md +0 -142
- package/dist/skills/official/official-api-design.md +0 -30
- package/dist/skills/official/official-architecture-decision.md +0 -41
- package/dist/skills/official/official-bmad.md +0 -118
- package/dist/skills/official/official-db-schema-design.md +0 -34
- package/dist/skills/official/official-debug.md +0 -25
- package/dist/skills/official/official-doc-driven.md +0 -31
- package/dist/skills/official/official-harness-engineering.md +0 -108
- package/dist/skills/official/official-performance-optimization.md +0 -30
- package/dist/skills/official/official-pr-review.md +0 -35
- package/dist/skills/official/official-release-checklist.md +0 -30
- package/dist/skills/official/official-security-hardening.md +0 -32
- package/dist/skills/official/official-spec-driven-design.md +0 -31
- package/dist/skills/official/planning-with-files.md +0 -241
- package/dist/skills/official/ui-ux-pro-max.md +0 -105
- package/dist/skills/official/webapp-testing.md +0 -96
- package/dist/skills/official-skills.d.ts +0 -26
- package/dist/skills/official-skills.d.ts.map +0 -1
- package/dist/skills/official-skills.js +0 -73
- package/dist/skills/official-skills.js.map +0 -1
- package/dist/skills/semantic-matcher.d.ts +0 -60
- package/dist/skills/semantic-matcher.d.ts.map +0 -1
- package/dist/skills/semantic-matcher.js +0 -192
- package/dist/skills/semantic-matcher.js.map +0 -1
- package/dist/skills/upgrade-engine.d.ts +0 -93
- package/dist/skills/upgrade-engine.d.ts.map +0 -1
- package/dist/skills/upgrade-engine.js +0 -447
- package/dist/skills/upgrade-engine.js.map +0 -1
- package/dist/skills/upgrade-prompt.d.ts +0 -20
- package/dist/skills/upgrade-prompt.d.ts.map +0 -1
- package/dist/skills/upgrade-prompt.js +0 -75
- package/dist/skills/upgrade-prompt.js.map +0 -1
- package/dist/web/routes/ai.d.ts +0 -10
- package/dist/web/routes/ai.d.ts.map +0 -1
- package/dist/web/routes/ai.js +0 -186
- package/dist/web/routes/ai.js.map +0 -1
- package/dist/web/routes/token-usage.d.ts +0 -7
- package/dist/web/routes/token-usage.d.ts.map +0 -1
- package/dist/web/routes/token-usage.js +0 -18
- package/dist/web/routes/token-usage.js.map +0 -1
- package/dist/web/ssrf-guard.d.ts +0 -35
- package/dist/web/ssrf-guard.d.ts.map +0 -1
- package/dist/web/ssrf-guard.js +0 -93
- package/dist/web/ssrf-guard.js.map +0 -1
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js +0 -2
- package/dist/web/static/assets/AIConfig-CdDWzJyO.js.map +0 -1
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js +0 -2
- package/dist/web/static/assets/Dashboard-CoEmmIDt.js.map +0 -1
- package/dist/web/static/assets/Drawer-DdRTzlLB.js +0 -2
- package/dist/web/static/assets/Drawer-DdRTzlLB.js.map +0 -1
- package/dist/web/static/assets/Events-DrIq1SUS.js +0 -2
- package/dist/web/static/assets/Events-DrIq1SUS.js.map +0 -1
- package/dist/web/static/assets/Reports-DFBM3MDK.js +0 -2
- package/dist/web/static/assets/Reports-DFBM3MDK.js.map +0 -1
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js +0 -2
- package/dist/web/static/assets/SearchInput-qCj_jAcf.js.map +0 -1
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js +0 -2
- package/dist/web/static/assets/SessionDetail-CCzwdoT7.js.map +0 -1
- package/dist/web/static/assets/Sessions-FfLYkAw9.js +0 -2
- package/dist/web/static/assets/Sessions-FfLYkAw9.js.map +0 -1
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js +0 -2
- package/dist/web/static/assets/Skills-C8Gvs3Qa.js.map +0 -1
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js +0 -2
- package/dist/web/static/assets/TaskDetail-BS8pYhaR.js.map +0 -1
- package/dist/web/static/assets/Tasks-CyuhizG8.js +0 -2
- package/dist/web/static/assets/Tasks-CyuhizG8.js.map +0 -1
- package/dist/web/static/assets/charts-CLrM0_uM.js +0 -37
- package/dist/web/static/assets/charts-CLrM0_uM.js.map +0 -1
- package/dist/web/static/assets/date-fns-CZ_bHujz.js +0 -2
- package/dist/web/static/assets/date-fns-CZ_bHujz.js.map +0 -1
- package/dist/web/static/assets/export-L_VBD2p1.js +0 -4
- package/dist/web/static/assets/export-L_VBD2p1.js.map +0 -1
- package/dist/web/static/assets/index-CBX47X8l.js +0 -3
- package/dist/web/static/assets/index-CBX47X8l.js.map +0 -1
- package/dist/web/static/assets/index-DjIoMdoR.css +0 -1
- package/dist/web/static/assets/lucide-Bs_edTLa.js +0 -232
- package/dist/web/static/assets/lucide-Bs_edTLa.js.map +0 -1
- package/dist/web/static/assets/query-C99w429o.js +0 -2
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js +0 -49
- package/dist/web/static/assets/react-vendor-CSp-GLFF.js.map +0 -1
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js +0 -9
- package/dist/web/static/assets/syntax-highlighter-44FakypI.js.map +0 -1
- package/dist/web/static/assets/task-title-BhOcemuR.js +0 -2
- package/dist/web/static/assets/task-title-BhOcemuR.js.map +0 -1
- package/dist/web/static/assets/time-Bxuk0M-C.js +0 -2
- package/dist/web/static/assets/time-Bxuk0M-C.js.map +0 -1
- package/dist/web/static/assets/vendor-CMMjVdZs.js +0 -64
- package/dist/web/static/assets/vendor-CMMjVdZs.js.map +0 -1
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file constants.ts
|
|
3
|
+
* Centralised constants for the Knowledge Base (KB) subsystem.
|
|
4
|
+
*
|
|
5
|
+
* All file-system paths, AI tuning parameters, and threshold values live here
|
|
6
|
+
* so that callers never hard-code strings scattered across the codebase.
|
|
7
|
+
*/
|
|
8
|
+
import { FORGE_PATHS } from '../core/constants.js';
|
|
9
|
+
import { join } from 'node:path';
|
|
10
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
11
|
+
// Format version
|
|
12
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
13
|
+
/** Schema version for `repo-map.json` and `.meta.json`. */
|
|
14
|
+
export const KB_VERSION = '1.0';
|
|
15
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
16
|
+
// File-system layout (project-local .forge-knowledge/)
|
|
17
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
18
|
+
/** Directory name created in the project root to store KB artefacts. */
|
|
19
|
+
export const KB_DIRNAME = '.forge-knowledge';
|
|
20
|
+
/** Filename for the static repo-map produced by the TypeScript Compiler API. */
|
|
21
|
+
export const KB_REPO_MAP_FILE = 'repo-map.json';
|
|
22
|
+
/** Filename for the KB metadata index. */
|
|
23
|
+
export const KB_META_FILE = '.meta.json';
|
|
24
|
+
/**
|
|
25
|
+
* Hidden `.md` files that live inside `.forge-knowledge/` but are NOT KB pages.
|
|
26
|
+
* `listKnowledge` filters these out (in addition to any `.`-prefixed `.md`).
|
|
27
|
+
* Kept as an explicit allow-list for grep-ability; the leading-dot rule also
|
|
28
|
+
* catches future hidden files without code changes.
|
|
29
|
+
*/
|
|
30
|
+
export const KB_META_MD_FILES = new Set(['.audit-log.md']);
|
|
31
|
+
/** Sub-directory under `KB_DIRNAME` that holds per-module markdown pages. */
|
|
32
|
+
export const KB_MODULES_DIR = 'modules';
|
|
33
|
+
/** Sub-directory under `KB_DIRNAME` used for rolling page backups before apply. */
|
|
34
|
+
export const KB_BACKUPS_DIR = 'backups';
|
|
35
|
+
/**
|
|
36
|
+
* Sub-directory under `KB_DIRNAME` that holds runtime-accumulated agent
|
|
37
|
+
* experience pages (Phase 6 writeback). Files here survive `cf knowledge
|
|
38
|
+
* build` rebuilds — see `BUILDER_PRESERVED_DIRS` in builder.ts.
|
|
39
|
+
*
|
|
40
|
+
* Must match `AGENTS_EXPERIENCE_DIR` in
|
|
41
|
+
* `src/daemon/services/experience-extractor.ts`.
|
|
42
|
+
*/
|
|
43
|
+
export const KB_AGENTS_EXPERIENCE_DIR = 'agents-experience';
|
|
44
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
45
|
+
// Global paths (~/.claude-forge/)
|
|
46
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
47
|
+
/**
|
|
48
|
+
* Absolute path for the build report markdown written after `cf kb build`.
|
|
49
|
+
* Lives in the global forge home so it survives across projects.
|
|
50
|
+
*/
|
|
51
|
+
export const KB_BUILD_REPORT_PATH = join(FORGE_PATHS.home(), 'knowledge-build-report.md');
|
|
52
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
53
|
+
// AI parameters
|
|
54
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
55
|
+
/** Temperature passed to the AI when compiling KB pages (deterministic output). */
|
|
56
|
+
export const KB_AI_TEMPERATURE = 0;
|
|
57
|
+
/** Maximum output tokens requested per AI call during page compilation. */
|
|
58
|
+
export const KB_AI_MAX_TOKENS = 16_000;
|
|
59
|
+
/** AI request timeout (KB module input can be ~25K tokens, default 30s in ClaudeProvider is too short). */
|
|
60
|
+
export const KB_AI_TIMEOUT_MS = 180_000;
|
|
61
|
+
/**
|
|
62
|
+
* Maximum number of input tokens fed to the AI per module compilation.
|
|
63
|
+
* Source content exceeding this limit is truncated before the API call.
|
|
64
|
+
*/
|
|
65
|
+
export const KB_MAX_TOKENS_PER_MODULE = 30_000;
|
|
66
|
+
/**
|
|
67
|
+
* Maximum number of module-compilation AI calls that may run concurrently.
|
|
68
|
+
* Keeps total API throughput within rate-limit headroom.
|
|
69
|
+
*/
|
|
70
|
+
export const KB_MAX_CONCURRENCY = 4;
|
|
71
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
72
|
+
// Validation thresholds
|
|
73
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
74
|
+
/**
|
|
75
|
+
* Maximum allowed line-number drift for a `KBRef` to be considered valid.
|
|
76
|
+
* `0` means the exact line must still exist unchanged; any movement triggers
|
|
77
|
+
* a `stale` audit status.
|
|
78
|
+
*/
|
|
79
|
+
export const KB_MAX_REF_LINE_DRIFT = 0;
|
|
80
|
+
/**
|
|
81
|
+
* Soft-limit for `.forge-knowledge/.audit-log.md` size.
|
|
82
|
+
* `cf knowledge audit --fix` prints a one-line stderr notice when the log
|
|
83
|
+
* grows past this threshold so users know to archive manually.
|
|
84
|
+
*/
|
|
85
|
+
export const KB_AUDIT_LOG_WARN_SIZE = 1 * 1024 * 1024;
|
|
86
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
87
|
+
// Git hook markers
|
|
88
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
89
|
+
/** Start marker injected into the `post-commit` hook script. */
|
|
90
|
+
export const CF_HOOK_MARKER = '# claude-forge knowledge auto-update';
|
|
91
|
+
/** End marker that closes the injected hook block. */
|
|
92
|
+
export const CF_HOOK_END = '# end claude-forge';
|
|
93
|
+
//# sourceMappingURL=constants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"constants.js","sourceRoot":"","sources":["../../src/knowledge/constants.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,gFAAgF;AAChF,iBAAiB;AACjB,gFAAgF;AAEhF,2DAA2D;AAC3D,MAAM,CAAC,MAAM,UAAU,GAAG,KAAc,CAAC;AAEzC,gFAAgF;AAChF,uDAAuD;AACvD,gFAAgF;AAEhF,wEAAwE;AACxE,MAAM,CAAC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AAE7C,gFAAgF;AAChF,MAAM,CAAC,MAAM,gBAAgB,GAAG,eAAe,CAAC;AAEhD,0CAA0C;AAC1C,MAAM,CAAC,MAAM,YAAY,GAAG,YAAY,CAAC;AAEzC;;;;;GAKG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC;AAE3D,6EAA6E;AAC7E,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC,mFAAmF;AACnF,MAAM,CAAC,MAAM,cAAc,GAAG,SAAS,CAAC;AAExC;;;;;;;GAOG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,mBAAmB,CAAC;AAE5D,gFAAgF;AAChF,kCAAkC;AAClC,gFAAgF;AAEhF;;;GAGG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,IAAI,CACtC,WAAW,CAAC,IAAI,EAAE,EAClB,2BAA2B,CAC5B,CAAC;AAEF,gFAAgF;AAChF,gBAAgB;AAChB,gFAAgF;AAEhF,mFAAmF;AACnF,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC;AAEnC,2EAA2E;AAC3E,MAAM,CAAC,MAAM,gBAAgB,GAAG,MAAM,CAAC;AAEvC,2GAA2G;AAC3G,MAAM,CAAC,MAAM,gBAAgB,GAAG,OAAO,CAAC;AAExC;;;GAGG;AACH,MAAM,CAAC,MAAM,wBAAwB,GAAG,MAAM,CAAC;AAE/C;;;GAGG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,CAAC;AAEpC,gFAAgF;AAChF,wBAAwB;AACxB,gFAAgF;AAEhF;;;;GAIG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,CAAC;AAEvC;;;;GAIG;AACH,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,GAAG,IAAI,GAAG,IAAI,CAAC;AAEtD,gFAAgF;AAChF,mBAAmB;AACnB,gFAAgF;AAEhF,gEAAgE;AAChE,MAAM,CAAC,MAAM,cAAc,GAAG,sCAAsC,CAAC;AAErE,sDAAsD;AACtD,MAAM,CAAC,MAAM,WAAW,GAAG,oBAAoB,CAAC"}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file cross-module.ts
|
|
3
|
+
* v9.2 Cross-module page compiler — generates 5 project-level KB pages on
|
|
4
|
+
* top of the per-module pages produced by `buildKnowledge`:
|
|
5
|
+
*
|
|
6
|
+
* - overview.md (project pitch + top-level architecture)
|
|
7
|
+
* - architecture.md (layers, data flow, key interfaces)
|
|
8
|
+
* - decisions.md (ADR-lite, extracted from module decisions + git log)
|
|
9
|
+
* - glossary.md (project-specific terminology)
|
|
10
|
+
* - tech-stack.md (package.json / tsconfig / vitest.config)
|
|
11
|
+
*
|
|
12
|
+
* The 5 pages live at the root of `.forge-knowledge/` (NOT under `modules/`).
|
|
13
|
+
*
|
|
14
|
+
* Cache strategy: a single `crossHash` derived from every module's hash + the
|
|
15
|
+
* three config files. Any change → all 5 pages re-compile. Per-page hash is
|
|
16
|
+
* intentionally NOT tracked (see spec §5.1).
|
|
17
|
+
*
|
|
18
|
+
* Failure isolation: single-page AI failure writes a placeholder; other pages
|
|
19
|
+
* and the module compilation pipeline are unaffected.
|
|
20
|
+
*
|
|
21
|
+
* No new schema is introduced — cross-module pages reuse `KBPage` (refs are
|
|
22
|
+
* always empty `[]`, since these pages reference module names, not file:line).
|
|
23
|
+
*/
|
|
24
|
+
import type { KBPage, KBMeta, ValidationResult } from './types.js';
|
|
25
|
+
import type { RepoMap } from './repo-map.js';
|
|
26
|
+
import type { AIProviderLike, BuildEvent } from './builder.js';
|
|
27
|
+
/**
|
|
28
|
+
* Per-page max line cap used by `validateCrossModulePage`. Mirrors the limit
|
|
29
|
+
* embedded in each system prompt (§ spec 3.x).
|
|
30
|
+
*/
|
|
31
|
+
export declare const CROSS_MODULE_MAX_LINES: Readonly<Record<string, number>>;
|
|
32
|
+
/** Order is preserved in the returned array. */
|
|
33
|
+
export declare const CROSS_MODULE_PAGE_NAMES: readonly string[];
|
|
34
|
+
/**
|
|
35
|
+
* Extract the "## 概述" section from a compiled module markdown page.
|
|
36
|
+
*
|
|
37
|
+
* Falls back to the first 500 characters when no `## 概述` heading is found —
|
|
38
|
+
* keeps the cross-module prompt robust against module pages that drift from
|
|
39
|
+
* the expected schema.
|
|
40
|
+
*/
|
|
41
|
+
export declare function extractSummary(markdown: string): string;
|
|
42
|
+
/**
|
|
43
|
+
* Extract the "## 关键设计决策" section from a compiled module markdown page.
|
|
44
|
+
*
|
|
45
|
+
* Returns an empty string when the section is absent — `buildDecisionsPrompt`
|
|
46
|
+
* filters out empty entries so omission is harmless.
|
|
47
|
+
*/
|
|
48
|
+
export declare function extractDecisions(markdown: string): string;
|
|
49
|
+
/**
|
|
50
|
+
* Build a flattened mini repo-map for the `architecture.md` prompt.
|
|
51
|
+
*
|
|
52
|
+
* Keeps only exported top-level symbols (class / function / interface) and
|
|
53
|
+
* caps each module at `REPO_MAP_MINI_MAX_PER_MODULE` rows so the prompt stays
|
|
54
|
+
* within token budget.
|
|
55
|
+
*/
|
|
56
|
+
export declare function buildRepoMapMini(repoMap: RepoMap): Array<{
|
|
57
|
+
module: string;
|
|
58
|
+
symbol: string;
|
|
59
|
+
kind: string;
|
|
60
|
+
}>;
|
|
61
|
+
/**
|
|
62
|
+
* Lightweight validation for cross-module pages — they carry no refs so the
|
|
63
|
+
* full `validatePage` machinery is overkill.
|
|
64
|
+
*
|
|
65
|
+
* Surfaces:
|
|
66
|
+
* - `error` when content is empty (placeholder or AI returned nothing).
|
|
67
|
+
* - `warn` when line count exceeds the per-page cap.
|
|
68
|
+
*/
|
|
69
|
+
export declare function validateCrossModulePage(page: KBPage, maxLines: number): ValidationResult;
|
|
70
|
+
/**
|
|
71
|
+
* Construct a fresh cross-module `KBPage`. Caller is responsible for setting
|
|
72
|
+
* `source_hash` to the current crossHash before persisting.
|
|
73
|
+
*/
|
|
74
|
+
export declare function makeCrossModulePage(name: string, content: string, model: string): KBPage;
|
|
75
|
+
/**
|
|
76
|
+
* Build a placeholder page for a failed AI call. The content explains why,
|
|
77
|
+
* so users see a clear breadcrumb when they open the file. `source_hash` is
|
|
78
|
+
* left as `'unknown'` so the next build's `writeMetadata` failure-protection
|
|
79
|
+
* path applies (preserves prior hash → next build retries).
|
|
80
|
+
*/
|
|
81
|
+
export declare function makeCrossModulePlaceholder(name: string, reason: string): KBPage;
|
|
82
|
+
export interface CompileCrossModuleOptions {
|
|
83
|
+
/** Map of `modules/<name>.md` → module source_hash. */
|
|
84
|
+
moduleHashes: Map<string, string>;
|
|
85
|
+
/** Compiled module pages produced in the prior step of the pipeline. */
|
|
86
|
+
moduleResults: Array<{
|
|
87
|
+
name: string;
|
|
88
|
+
page: KBPage;
|
|
89
|
+
}>;
|
|
90
|
+
/** Full repo-map (used to build the architecture mini-map). */
|
|
91
|
+
repoMap: RepoMap;
|
|
92
|
+
/** Project root. Used to locate package.json / tsconfig / vitest config / CLAUDE.md / git log. */
|
|
93
|
+
projectRoot: string;
|
|
94
|
+
/**
|
|
95
|
+
* Initialised AI provider.
|
|
96
|
+
*
|
|
97
|
+
* R-B (子 spec B, decision f5a5b030): production callers pass a
|
|
98
|
+
* `CliKnowledgeProvider` that shells out to `claude --agent
|
|
99
|
+
* knowledge-builder --bare ...` per page. Tests inject a mock that
|
|
100
|
+
* implements the same `AIProviderLike` shape — the cross-module pipeline
|
|
101
|
+
* is provider-agnostic.
|
|
102
|
+
*/
|
|
103
|
+
ai: AIProviderLike;
|
|
104
|
+
/** Prior `.meta.json` content for cache lookup. */
|
|
105
|
+
oldMeta: KBMeta | null;
|
|
106
|
+
/** Absolute path to `.forge-knowledge/`. Used to read cached page content. */
|
|
107
|
+
kbDir: string;
|
|
108
|
+
/** Force=true → ignore cache and re-compile every page. */
|
|
109
|
+
force: boolean;
|
|
110
|
+
/** Concurrency for AI calls. */
|
|
111
|
+
concurrency: number;
|
|
112
|
+
/**
|
|
113
|
+
* v9.4: optional progress sink. Used by buildKnowledge → web SSE.
|
|
114
|
+
* Listener exceptions are swallowed by the caller.
|
|
115
|
+
*/
|
|
116
|
+
onEvent?: (ev: BuildEvent) => void;
|
|
117
|
+
}
|
|
118
|
+
export interface CompileCrossModuleEntry {
|
|
119
|
+
name: string;
|
|
120
|
+
page: KBPage;
|
|
121
|
+
validation: ValidationResult;
|
|
122
|
+
cached: boolean;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Compile all 5 cross-module pages.
|
|
126
|
+
*
|
|
127
|
+
* Pipeline:
|
|
128
|
+
* 1. Read package.json / tsconfig.json / vitest.config.ts / CLAUDE.md (best-effort).
|
|
129
|
+
* 2. Read recent git log (best-effort).
|
|
130
|
+
* 3. Compute crossHash over `moduleHashes` + config-file contents.
|
|
131
|
+
* 4. For each of the 5 page names, check `oldMeta.pages[name].source_hash`:
|
|
132
|
+
* - hit → load existing .md content, build a `KBPage`, validate, mark cached.
|
|
133
|
+
* - miss → build the prompt, call AI, mark as fresh build.
|
|
134
|
+
* - AI failure → placeholder page + warning.
|
|
135
|
+
*
|
|
136
|
+
* Returns one entry per page in `CROSS_MODULE_PAGE_NAMES` order.
|
|
137
|
+
*/
|
|
138
|
+
export declare function compileCrossModulePages(opts: CompileCrossModuleOptions): Promise<CompileCrossModuleEntry[]>;
|
|
139
|
+
//# sourceMappingURL=cross-module.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-module.d.ts","sourceRoot":"","sources":["../../src/knowledge/cross-module.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAMH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,EAAmB,MAAM,YAAY,CAAC;AACpF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,KAAK,EAAE,cAAc,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAmB/D;;;GAGG;AACH,eAAO,MAAM,sBAAsB,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMlE,CAAC;AAEH,gDAAgD;AAChD,eAAO,MAAM,uBAAuB,EAAE,SAAS,MAAM,EAMnD,CAAC;AASH;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAKvD;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAIzD;AAED;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,GACf,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC,CA4BzD;AAED;;;;;;;GAOG;AACH,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,MAAM,GACf,gBAAgB,CAqBlB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAUxF;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAU/E;AAyDD,MAAM,WAAW,yBAAyB;IACxC,uDAAuD;IACvD,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAElC,wEAAwE;IACxE,aAAa,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAErD,+DAA+D;IAC/D,OAAO,EAAE,OAAO,CAAC;IAEjB,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAC;IAEpB;;;;;;;;OAQG;IACH,EAAE,EAAE,cAAc,CAAC;IAEnB,mDAAmD;IACnD,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IAEvB,8EAA8E;IAC9E,KAAK,EAAE,MAAM,CAAC;IAEd,2DAA2D;IAC3D,KAAK,EAAE,OAAO,CAAC;IAEf,gCAAgC;IAChC,WAAW,EAAE,MAAM,CAAC;IAEpB;;;OAGG;IACH,OAAO,CAAC,EAAE,CAAC,EAAE,EAAE,UAAU,KAAK,IAAI,CAAC;CACpC;AAED,MAAM,WAAW,uBAAuB;IACtC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,gBAAgB,CAAC;IAC7B,MAAM,EAAE,OAAO,CAAC;CACjB;AAED;;;;;;;;;;;;;GAaG;AACH,wBAAsB,uBAAuB,CAC3C,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,uBAAuB,EAAE,CAAC,CAqJpC"}
|
|
@@ -0,0 +1,370 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @file cross-module.ts
|
|
3
|
+
* v9.2 Cross-module page compiler — generates 5 project-level KB pages on
|
|
4
|
+
* top of the per-module pages produced by `buildKnowledge`:
|
|
5
|
+
*
|
|
6
|
+
* - overview.md (project pitch + top-level architecture)
|
|
7
|
+
* - architecture.md (layers, data flow, key interfaces)
|
|
8
|
+
* - decisions.md (ADR-lite, extracted from module decisions + git log)
|
|
9
|
+
* - glossary.md (project-specific terminology)
|
|
10
|
+
* - tech-stack.md (package.json / tsconfig / vitest.config)
|
|
11
|
+
*
|
|
12
|
+
* The 5 pages live at the root of `.forge-knowledge/` (NOT under `modules/`).
|
|
13
|
+
*
|
|
14
|
+
* Cache strategy: a single `crossHash` derived from every module's hash + the
|
|
15
|
+
* three config files. Any change → all 5 pages re-compile. Per-page hash is
|
|
16
|
+
* intentionally NOT tracked (see spec §5.1).
|
|
17
|
+
*
|
|
18
|
+
* Failure isolation: single-page AI failure writes a placeholder; other pages
|
|
19
|
+
* and the module compilation pipeline are unaffected.
|
|
20
|
+
*
|
|
21
|
+
* No new schema is introduced — cross-module pages reuse `KBPage` (refs are
|
|
22
|
+
* always empty `[]`, since these pages reference module names, not file:line).
|
|
23
|
+
*/
|
|
24
|
+
import { execSync } from 'node:child_process';
|
|
25
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
26
|
+
import path from 'node:path';
|
|
27
|
+
import { computeCrossModuleHash } from './module-hash.js';
|
|
28
|
+
import { buildArchitecturePrompt, buildDecisionsPrompt, buildGlossaryPrompt, buildTechStackPrompt, buildOverviewPrompt, stripMarkdownFence, } from './prompt.js';
|
|
29
|
+
import { withKnowledgeRoutingHints } from './cli-provider.js';
|
|
30
|
+
import * as K from './constants.js';
|
|
31
|
+
import { logger } from '../core/utils/logger.js';
|
|
32
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
33
|
+
// Constants
|
|
34
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
35
|
+
/**
|
|
36
|
+
* Per-page max line cap used by `validateCrossModulePage`. Mirrors the limit
|
|
37
|
+
* embedded in each system prompt (§ spec 3.x).
|
|
38
|
+
*/
|
|
39
|
+
export const CROSS_MODULE_MAX_LINES = Object.freeze({
|
|
40
|
+
'overview.md': 100,
|
|
41
|
+
'architecture.md': 150,
|
|
42
|
+
'decisions.md': 200,
|
|
43
|
+
'glossary.md': 300,
|
|
44
|
+
'tech-stack.md': 150,
|
|
45
|
+
});
|
|
46
|
+
/** Order is preserved in the returned array. */
|
|
47
|
+
export const CROSS_MODULE_PAGE_NAMES = Object.freeze([
|
|
48
|
+
'overview.md',
|
|
49
|
+
'architecture.md',
|
|
50
|
+
'decisions.md',
|
|
51
|
+
'glossary.md',
|
|
52
|
+
'tech-stack.md',
|
|
53
|
+
]);
|
|
54
|
+
/** Cap of symbols per module fed to `architecture.md` prompt. */
|
|
55
|
+
const REPO_MAP_MINI_MAX_PER_MODULE = 20;
|
|
56
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
57
|
+
// Pure helpers (exported for tests)
|
|
58
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
59
|
+
/**
|
|
60
|
+
* Extract the "## 概述" section from a compiled module markdown page.
|
|
61
|
+
*
|
|
62
|
+
* Falls back to the first 500 characters when no `## 概述` heading is found —
|
|
63
|
+
* keeps the cross-module prompt robust against module pages that drift from
|
|
64
|
+
* the expected schema.
|
|
65
|
+
*/
|
|
66
|
+
export function extractSummary(markdown) {
|
|
67
|
+
if (!markdown)
|
|
68
|
+
return '';
|
|
69
|
+
const m = markdown.match(/##\s*概述\s*\n+([\s\S]*?)(?=\n##\s|\n$|$)/);
|
|
70
|
+
if (m && m[1].trim().length > 0)
|
|
71
|
+
return m[1].trim();
|
|
72
|
+
return markdown.slice(0, 500).trim();
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Extract the "## 关键设计决策" section from a compiled module markdown page.
|
|
76
|
+
*
|
|
77
|
+
* Returns an empty string when the section is absent — `buildDecisionsPrompt`
|
|
78
|
+
* filters out empty entries so omission is harmless.
|
|
79
|
+
*/
|
|
80
|
+
export function extractDecisions(markdown) {
|
|
81
|
+
if (!markdown)
|
|
82
|
+
return '';
|
|
83
|
+
const m = markdown.match(/##\s*关键设计决策\s*\n+([\s\S]*?)(?=\n##\s|\n$|$)/);
|
|
84
|
+
return m ? m[1].trim() : '';
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Build a flattened mini repo-map for the `architecture.md` prompt.
|
|
88
|
+
*
|
|
89
|
+
* Keeps only exported top-level symbols (class / function / interface) and
|
|
90
|
+
* caps each module at `REPO_MAP_MINI_MAX_PER_MODULE` rows so the prompt stays
|
|
91
|
+
* within token budget.
|
|
92
|
+
*/
|
|
93
|
+
export function buildRepoMapMini(repoMap) {
|
|
94
|
+
const KEPT_KINDS = new Set(['class', 'function', 'interface']);
|
|
95
|
+
const perModule = new Map();
|
|
96
|
+
for (const s of repoMap.symbols) {
|
|
97
|
+
if (!s.exports)
|
|
98
|
+
continue;
|
|
99
|
+
if (!KEPT_KINDS.has(s.kind))
|
|
100
|
+
continue;
|
|
101
|
+
// file path is relative to src/, e.g. "daemon/server.ts" → module "daemon"
|
|
102
|
+
const m = s.file.match(/^([^/]+)\//);
|
|
103
|
+
if (!m)
|
|
104
|
+
continue;
|
|
105
|
+
const moduleKey = `modules/${m[1]}.md`;
|
|
106
|
+
let bucket = perModule.get(moduleKey);
|
|
107
|
+
if (!bucket) {
|
|
108
|
+
bucket = [];
|
|
109
|
+
perModule.set(moduleKey, bucket);
|
|
110
|
+
}
|
|
111
|
+
if (bucket.length < REPO_MAP_MINI_MAX_PER_MODULE) {
|
|
112
|
+
bucket.push({ symbol: s.name, kind: s.kind });
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
const out = [];
|
|
116
|
+
for (const [mod, syms] of perModule.entries()) {
|
|
117
|
+
for (const s of syms)
|
|
118
|
+
out.push({ module: mod, symbol: s.symbol, kind: s.kind });
|
|
119
|
+
}
|
|
120
|
+
return out;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Lightweight validation for cross-module pages — they carry no refs so the
|
|
124
|
+
* full `validatePage` machinery is overkill.
|
|
125
|
+
*
|
|
126
|
+
* Surfaces:
|
|
127
|
+
* - `error` when content is empty (placeholder or AI returned nothing).
|
|
128
|
+
* - `warn` when line count exceeds the per-page cap.
|
|
129
|
+
*/
|
|
130
|
+
export function validateCrossModulePage(page, maxLines) {
|
|
131
|
+
const issues = [];
|
|
132
|
+
if (!page.content || page.content.trim().length === 0) {
|
|
133
|
+
issues.push({ severity: 'error', msg: 'Empty content' });
|
|
134
|
+
}
|
|
135
|
+
const lineCount = (page.content ?? '').split('\n').length;
|
|
136
|
+
if (lineCount > maxLines) {
|
|
137
|
+
issues.push({
|
|
138
|
+
severity: 'warn',
|
|
139
|
+
msg: `Content exceeds ${maxLines} lines (${lineCount})`,
|
|
140
|
+
});
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
valid: !issues.some((i) => i.severity === 'error'),
|
|
144
|
+
issues,
|
|
145
|
+
refsTotal: 0,
|
|
146
|
+
refsValid: 0,
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Construct a fresh cross-module `KBPage`. Caller is responsible for setting
|
|
151
|
+
* `source_hash` to the current crossHash before persisting.
|
|
152
|
+
*/
|
|
153
|
+
export function makeCrossModulePage(name, content, model) {
|
|
154
|
+
return {
|
|
155
|
+
name,
|
|
156
|
+
title: name.replace(/\.md$/, ''),
|
|
157
|
+
content,
|
|
158
|
+
refs: [],
|
|
159
|
+
generated_at: new Date().toISOString(),
|
|
160
|
+
source_hash: 'unset',
|
|
161
|
+
ai_model: model,
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Build a placeholder page for a failed AI call. The content explains why,
|
|
166
|
+
* so users see a clear breadcrumb when they open the file. `source_hash` is
|
|
167
|
+
* left as `'unknown'` so the next build's `writeMetadata` failure-protection
|
|
168
|
+
* path applies (preserves prior hash → next build retries).
|
|
169
|
+
*/
|
|
170
|
+
export function makeCrossModulePlaceholder(name, reason) {
|
|
171
|
+
return {
|
|
172
|
+
name,
|
|
173
|
+
title: name.replace(/\.md$/, ''),
|
|
174
|
+
content: `<!-- Build failed: ${reason} -->`,
|
|
175
|
+
refs: [],
|
|
176
|
+
generated_at: new Date().toISOString(),
|
|
177
|
+
source_hash: 'unknown',
|
|
178
|
+
ai_model: 'unknown',
|
|
179
|
+
};
|
|
180
|
+
}
|
|
181
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
182
|
+
// Concurrency primitive (mirrors builder.ts runWithConcurrency)
|
|
183
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
184
|
+
async function runWithConcurrency(items, concurrency, fn) {
|
|
185
|
+
const results = new Array(items.length);
|
|
186
|
+
let nextIndex = 0;
|
|
187
|
+
async function worker() {
|
|
188
|
+
while (nextIndex < items.length) {
|
|
189
|
+
const i = nextIndex++;
|
|
190
|
+
results[i] = await fn(items[i]);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
const workers = Array.from({ length: Math.max(1, Math.min(concurrency, items.length)) }, () => worker());
|
|
194
|
+
await Promise.all(workers);
|
|
195
|
+
return results;
|
|
196
|
+
}
|
|
197
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
198
|
+
// Optional input collectors
|
|
199
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
200
|
+
function safeReadFile(p) {
|
|
201
|
+
try {
|
|
202
|
+
return existsSync(p) ? readFileSync(p, 'utf-8') : null;
|
|
203
|
+
}
|
|
204
|
+
catch {
|
|
205
|
+
return null;
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function collectRecentCommits(projectRoot) {
|
|
209
|
+
try {
|
|
210
|
+
const out = execSync('git log --oneline -30', {
|
|
211
|
+
cwd: projectRoot,
|
|
212
|
+
stdio: ['ignore', 'pipe', 'ignore'],
|
|
213
|
+
}).toString();
|
|
214
|
+
return out.split('\n').map((l) => l.trim()).filter(Boolean);
|
|
215
|
+
}
|
|
216
|
+
catch {
|
|
217
|
+
return [];
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Compile all 5 cross-module pages.
|
|
222
|
+
*
|
|
223
|
+
* Pipeline:
|
|
224
|
+
* 1. Read package.json / tsconfig.json / vitest.config.ts / CLAUDE.md (best-effort).
|
|
225
|
+
* 2. Read recent git log (best-effort).
|
|
226
|
+
* 3. Compute crossHash over `moduleHashes` + config-file contents.
|
|
227
|
+
* 4. For each of the 5 page names, check `oldMeta.pages[name].source_hash`:
|
|
228
|
+
* - hit → load existing .md content, build a `KBPage`, validate, mark cached.
|
|
229
|
+
* - miss → build the prompt, call AI, mark as fresh build.
|
|
230
|
+
* - AI failure → placeholder page + warning.
|
|
231
|
+
*
|
|
232
|
+
* Returns one entry per page in `CROSS_MODULE_PAGE_NAMES` order.
|
|
233
|
+
*/
|
|
234
|
+
export async function compileCrossModulePages(opts) {
|
|
235
|
+
// ── 1. Collect optional input files ──────────────────────────────────────
|
|
236
|
+
const projectName = path.basename(opts.projectRoot);
|
|
237
|
+
const packageJson = safeReadFile(path.join(opts.projectRoot, 'package.json'));
|
|
238
|
+
const tsconfig = safeReadFile(path.join(opts.projectRoot, 'tsconfig.json'));
|
|
239
|
+
const vitestConfig = safeReadFile(path.join(opts.projectRoot, 'vitest.config.ts')) ??
|
|
240
|
+
safeReadFile(path.join(opts.projectRoot, 'vitest.config.js'));
|
|
241
|
+
const claudeMd = safeReadFile(path.join(opts.projectRoot, 'CLAUDE.md'));
|
|
242
|
+
const recentCommits = collectRecentCommits(opts.projectRoot);
|
|
243
|
+
// ── 2. crossHash ─────────────────────────────────────────────────────────
|
|
244
|
+
const crossHash = computeCrossModuleHash(opts.moduleHashes, {
|
|
245
|
+
packageJson: packageJson ?? undefined,
|
|
246
|
+
tsconfig: tsconfig ?? undefined,
|
|
247
|
+
vitest: vitestConfig ?? undefined,
|
|
248
|
+
});
|
|
249
|
+
// ── 3. Pre-compute prompt-inputs once (reused across pages) ──────────────
|
|
250
|
+
const moduleSummaries = opts.moduleResults.map((r) => ({
|
|
251
|
+
name: r.name,
|
|
252
|
+
summary: extractSummary(r.page.content),
|
|
253
|
+
}));
|
|
254
|
+
const moduleDecisions = opts.moduleResults.map((r) => ({
|
|
255
|
+
name: r.name,
|
|
256
|
+
decisions: extractDecisions(r.page.content),
|
|
257
|
+
}));
|
|
258
|
+
const moduleContents = opts.moduleResults.map((r) => ({
|
|
259
|
+
name: r.name,
|
|
260
|
+
content: r.page.content,
|
|
261
|
+
}));
|
|
262
|
+
const repoMapMini = buildRepoMapMini(opts.repoMap);
|
|
263
|
+
// ── 4. Per-page prompt-builder factory ───────────────────────────────────
|
|
264
|
+
// Use plain function (not arrow) to keep tsc + minifier-friendly.
|
|
265
|
+
function buildPromptFor(name) {
|
|
266
|
+
switch (name) {
|
|
267
|
+
case 'overview.md':
|
|
268
|
+
return buildOverviewPrompt(moduleSummaries, projectName);
|
|
269
|
+
case 'architecture.md':
|
|
270
|
+
return buildArchitecturePrompt({ moduleSummaries, repoMapMini, projectName });
|
|
271
|
+
case 'decisions.md':
|
|
272
|
+
return buildDecisionsPrompt({ moduleDecisions, recentCommits, projectName });
|
|
273
|
+
case 'glossary.md':
|
|
274
|
+
return buildGlossaryPrompt({ moduleContents, claudeMdContent: claudeMd, projectName });
|
|
275
|
+
case 'tech-stack.md':
|
|
276
|
+
return buildTechStackPrompt({
|
|
277
|
+
packageJson: packageJson ?? '{}',
|
|
278
|
+
tsconfig,
|
|
279
|
+
vitestConfig,
|
|
280
|
+
projectName,
|
|
281
|
+
});
|
|
282
|
+
default:
|
|
283
|
+
throw new Error(`Unknown cross-module page: ${name}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
// ── 5. Compile each page concurrently ────────────────────────────────────
|
|
287
|
+
const safeEmit = (ev) => {
|
|
288
|
+
if (!opts.onEvent)
|
|
289
|
+
return;
|
|
290
|
+
try {
|
|
291
|
+
opts.onEvent(ev);
|
|
292
|
+
}
|
|
293
|
+
catch (err) {
|
|
294
|
+
logger.warn(`[KB] cross-module onEvent listener error: ${err instanceof Error ? err.message : String(err)}`);
|
|
295
|
+
}
|
|
296
|
+
};
|
|
297
|
+
const entries = await runWithConcurrency(CROSS_MODULE_PAGE_NAMES, opts.concurrency, async (pageName) => {
|
|
298
|
+
const cachedHash = opts.oldMeta?.pages[pageName]?.source_hash;
|
|
299
|
+
const pageOnDisk = path.join(opts.kbDir, pageName);
|
|
300
|
+
const canUseCache = !opts.force &&
|
|
301
|
+
cachedHash !== undefined &&
|
|
302
|
+
cachedHash === crossHash &&
|
|
303
|
+
existsSync(pageOnDisk);
|
|
304
|
+
const startedAt = performance.now();
|
|
305
|
+
safeEmit({ type: 'cross-module', name: pageName, status: 'compiling' });
|
|
306
|
+
if (canUseCache) {
|
|
307
|
+
logger.info(`[KB] Cached (cross-module): ${pageName} (hash ${crossHash})`);
|
|
308
|
+
const content = safeReadFile(pageOnDisk) ?? '';
|
|
309
|
+
const priorModel = opts.oldMeta?.pages[pageName]?.ai_model ?? 'unknown';
|
|
310
|
+
const page = {
|
|
311
|
+
name: pageName,
|
|
312
|
+
title: pageName.replace(/\.md$/, ''),
|
|
313
|
+
content,
|
|
314
|
+
refs: [],
|
|
315
|
+
generated_at: opts.oldMeta?.generated_at ?? new Date().toISOString(),
|
|
316
|
+
source_hash: crossHash,
|
|
317
|
+
ai_model: priorModel,
|
|
318
|
+
};
|
|
319
|
+
const maxLines = CROSS_MODULE_MAX_LINES[pageName] ?? 200;
|
|
320
|
+
const validation = validateCrossModulePage(page, maxLines);
|
|
321
|
+
safeEmit({
|
|
322
|
+
type: 'cross-module',
|
|
323
|
+
name: pageName,
|
|
324
|
+
status: 'cached',
|
|
325
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
326
|
+
cached: true,
|
|
327
|
+
});
|
|
328
|
+
return { name: pageName, page, validation, cached: true };
|
|
329
|
+
}
|
|
330
|
+
logger.info(`[KB] Compiling cross-module page: ${pageName}`);
|
|
331
|
+
let page;
|
|
332
|
+
let failed = false;
|
|
333
|
+
try {
|
|
334
|
+
const { system, user } = buildPromptFor(pageName);
|
|
335
|
+
// R-B (sub-spec B): wrap the system prompt with routing hints so the
|
|
336
|
+
// CliKnowledgeProvider knows which page to ask the agent for. Mock
|
|
337
|
+
// providers in tests ignore the extra tagged lines.
|
|
338
|
+
const systemWithHints = withKnowledgeRoutingHints(system, {
|
|
339
|
+
pageKind: 'cross-module',
|
|
340
|
+
pageName,
|
|
341
|
+
});
|
|
342
|
+
const resp = await opts.ai.completeWithUsage(user, {
|
|
343
|
+
system: systemWithHints,
|
|
344
|
+
maxTokens: K.KB_AI_MAX_TOKENS,
|
|
345
|
+
timeoutMs: K.KB_AI_TIMEOUT_MS,
|
|
346
|
+
});
|
|
347
|
+
const cleanedText = stripMarkdownFence(resp.text);
|
|
348
|
+
page = makeCrossModulePage(pageName, cleanedText, resp.model ?? 'unknown');
|
|
349
|
+
page.source_hash = crossHash;
|
|
350
|
+
}
|
|
351
|
+
catch (err) {
|
|
352
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
353
|
+
logger.error(`[KB] Cross-module page "${pageName}" failed: ${msg}`);
|
|
354
|
+
page = makeCrossModulePlaceholder(pageName, msg);
|
|
355
|
+
failed = true;
|
|
356
|
+
}
|
|
357
|
+
const maxLines = CROSS_MODULE_MAX_LINES[pageName] ?? 200;
|
|
358
|
+
const validation = validateCrossModulePage(page, maxLines);
|
|
359
|
+
safeEmit({
|
|
360
|
+
type: 'cross-module',
|
|
361
|
+
name: pageName,
|
|
362
|
+
status: failed ? 'failed' : 'ok',
|
|
363
|
+
durationMs: Math.round(performance.now() - startedAt),
|
|
364
|
+
cached: false,
|
|
365
|
+
});
|
|
366
|
+
return { name: pageName, page, validation, cached: false };
|
|
367
|
+
});
|
|
368
|
+
return entries;
|
|
369
|
+
}
|
|
370
|
+
//# sourceMappingURL=cross-module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cross-module.js","sourceRoot":"","sources":["../../src/knowledge/cross-module.ts"],"names":[],"mappings":"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"}
|