@vinaes/succ 1.3.19
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/LICENSE +87 -0
- package/README.md +588 -0
- package/agents/succ-checkpoint-manager.md +51 -0
- package/agents/succ-code-reviewer.md +181 -0
- package/agents/succ-context-optimizer.md +83 -0
- package/agents/succ-debug.md +224 -0
- package/agents/succ-decision-auditor.md +74 -0
- package/agents/succ-deep-search.md +41 -0
- package/agents/succ-diff-reviewer.md +123 -0
- package/agents/succ-explore.md +83 -0
- package/agents/succ-general.md +109 -0
- package/agents/succ-knowledge-indexer.md +45 -0
- package/agents/succ-knowledge-mapper.md +61 -0
- package/agents/succ-memory-curator.md +43 -0
- package/agents/succ-memory-health-monitor.md +55 -0
- package/agents/succ-pattern-detective.md +62 -0
- package/agents/succ-plan.md +172 -0
- package/agents/succ-quality-improvement-coach.md +63 -0
- package/agents/succ-readiness-improver.md +62 -0
- package/agents/succ-session-handoff-orchestrator.md +54 -0
- package/agents/succ-session-reviewer.md +46 -0
- package/agents/succ-style-tracker.md +73 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +749 -0
- package/dist/cli.js.map +1 -0
- package/dist/commands/agents-md.d.ts +16 -0
- package/dist/commands/agents-md.d.ts.map +1 -0
- package/dist/commands/agents-md.js +33 -0
- package/dist/commands/agents-md.js.map +1 -0
- package/dist/commands/analyze-agents.d.ts +20 -0
- package/dist/commands/analyze-agents.d.ts.map +1 -0
- package/dist/commands/analyze-agents.js +305 -0
- package/dist/commands/analyze-agents.js.map +1 -0
- package/dist/commands/analyze-helpers.d.ts +22 -0
- package/dist/commands/analyze-helpers.d.ts.map +1 -0
- package/dist/commands/analyze-helpers.js +38 -0
- package/dist/commands/analyze-helpers.js.map +1 -0
- package/dist/commands/analyze-profile.d.ts +53 -0
- package/dist/commands/analyze-profile.d.ts.map +1 -0
- package/dist/commands/analyze-profile.js +638 -0
- package/dist/commands/analyze-profile.js.map +1 -0
- package/dist/commands/analyze-recursive.d.ts +20 -0
- package/dist/commands/analyze-recursive.d.ts.map +1 -0
- package/dist/commands/analyze-recursive.js +326 -0
- package/dist/commands/analyze-recursive.js.map +1 -0
- package/dist/commands/analyze-utils.d.ts +83 -0
- package/dist/commands/analyze-utils.d.ts.map +1 -0
- package/dist/commands/analyze-utils.js +541 -0
- package/dist/commands/analyze-utils.js.map +1 -0
- package/dist/commands/analyze.d.ts +15 -0
- package/dist/commands/analyze.d.ts.map +1 -0
- package/dist/commands/analyze.js +265 -0
- package/dist/commands/analyze.js.map +1 -0
- package/dist/commands/backfill.d.ts +22 -0
- package/dist/commands/backfill.d.ts.map +1 -0
- package/dist/commands/backfill.js +62 -0
- package/dist/commands/backfill.js.map +1 -0
- package/dist/commands/benchmark-quality.d.ts +18 -0
- package/dist/commands/benchmark-quality.d.ts.map +1 -0
- package/dist/commands/benchmark-quality.js +316 -0
- package/dist/commands/benchmark-quality.js.map +1 -0
- package/dist/commands/benchmark-sqlite-vec.d.ts +12 -0
- package/dist/commands/benchmark-sqlite-vec.d.ts.map +1 -0
- package/dist/commands/benchmark-sqlite-vec.js +281 -0
- package/dist/commands/benchmark-sqlite-vec.js.map +1 -0
- package/dist/commands/benchmark.d.ts +57 -0
- package/dist/commands/benchmark.d.ts.map +1 -0
- package/dist/commands/benchmark.js +682 -0
- package/dist/commands/benchmark.js.map +1 -0
- package/dist/commands/chat.d.ts +14 -0
- package/dist/commands/chat.d.ts.map +1 -0
- package/dist/commands/chat.js +84 -0
- package/dist/commands/chat.js.map +1 -0
- package/dist/commands/checkpoint.d.ts +27 -0
- package/dist/commands/checkpoint.d.ts.map +1 -0
- package/dist/commands/checkpoint.js +181 -0
- package/dist/commands/checkpoint.js.map +1 -0
- package/dist/commands/clear.d.ts +9 -0
- package/dist/commands/clear.d.ts.map +1 -0
- package/dist/commands/clear.js +31 -0
- package/dist/commands/clear.js.map +1 -0
- package/dist/commands/config.d.ts +26 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +247 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/consolidate.d.ts +21 -0
- package/dist/commands/consolidate.d.ts.map +1 -0
- package/dist/commands/consolidate.js +117 -0
- package/dist/commands/consolidate.js.map +1 -0
- package/dist/commands/daemon.d.ts +48 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +218 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/embedding.d.ts +26 -0
- package/dist/commands/embedding.d.ts.map +1 -0
- package/dist/commands/embedding.js +168 -0
- package/dist/commands/embedding.js.map +1 -0
- package/dist/commands/graph.d.ts +20 -0
- package/dist/commands/graph.d.ts.map +1 -0
- package/dist/commands/graph.js +128 -0
- package/dist/commands/graph.js.map +1 -0
- package/dist/commands/index-code.d.ts +23 -0
- package/dist/commands/index-code.d.ts.map +1 -0
- package/dist/commands/index-code.js +218 -0
- package/dist/commands/index-code.js.map +1 -0
- package/dist/commands/index.d.ts +23 -0
- package/dist/commands/index.d.ts.map +1 -0
- package/dist/commands/index.js +217 -0
- package/dist/commands/index.js.map +1 -0
- package/dist/commands/init-templates.d.ts +21 -0
- package/dist/commands/init-templates.d.ts.map +1 -0
- package/dist/commands/init-templates.js +487 -0
- package/dist/commands/init-templates.js.map +1 -0
- package/dist/commands/init.d.ts +10 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +865 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/memories.d.ts +47 -0
- package/dist/commands/memories.d.ts.map +1 -0
- package/dist/commands/memories.js +597 -0
- package/dist/commands/memories.js.map +1 -0
- package/dist/commands/migrate.d.ts +19 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +154 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/prd.d.ts +46 -0
- package/dist/commands/prd.d.ts.map +1 -0
- package/dist/commands/prd.js +378 -0
- package/dist/commands/prd.js.map +1 -0
- package/dist/commands/precompute-context.d.ts +11 -0
- package/dist/commands/precompute-context.d.ts.map +1 -0
- package/dist/commands/precompute-context.js +12 -0
- package/dist/commands/precompute-context.js.map +1 -0
- package/dist/commands/progress.d.ts +16 -0
- package/dist/commands/progress.d.ts.map +1 -0
- package/dist/commands/progress.js +38 -0
- package/dist/commands/progress.js.map +1 -0
- package/dist/commands/reindex.d.ts +17 -0
- package/dist/commands/reindex.d.ts.map +1 -0
- package/dist/commands/reindex.js +83 -0
- package/dist/commands/reindex.js.map +1 -0
- package/dist/commands/retention.d.ts +19 -0
- package/dist/commands/retention.d.ts.map +1 -0
- package/dist/commands/retention.js +162 -0
- package/dist/commands/retention.js.map +1 -0
- package/dist/commands/score.d.ts +10 -0
- package/dist/commands/score.d.ts.map +1 -0
- package/dist/commands/score.js +28 -0
- package/dist/commands/score.js.map +1 -0
- package/dist/commands/search.d.ts +7 -0
- package/dist/commands/search.d.ts.map +1 -0
- package/dist/commands/search.js +89 -0
- package/dist/commands/search.js.map +1 -0
- package/dist/commands/session-summary.d.ts +15 -0
- package/dist/commands/session-summary.d.ts.map +1 -0
- package/dist/commands/session-summary.js +16 -0
- package/dist/commands/session-summary.js.map +1 -0
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +222 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/soul.d.ts +9 -0
- package/dist/commands/soul.d.ts.map +1 -0
- package/dist/commands/soul.js +256 -0
- package/dist/commands/soul.js.map +1 -0
- package/dist/commands/stats.d.ts +18 -0
- package/dist/commands/stats.d.ts.map +1 -0
- package/dist/commands/stats.js +138 -0
- package/dist/commands/stats.js.map +1 -0
- package/dist/commands/status.d.ts +2 -0
- package/dist/commands/status.d.ts.map +1 -0
- package/dist/commands/status.js +145 -0
- package/dist/commands/status.js.map +1 -0
- package/dist/commands/train-bpe.d.ts +8 -0
- package/dist/commands/train-bpe.d.ts.map +1 -0
- package/dist/commands/train-bpe.js +35 -0
- package/dist/commands/train-bpe.js.map +1 -0
- package/dist/commands/watch.d.ts +22 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +171 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/daemon/analyzer.d.ts +54 -0
- package/dist/daemon/analyzer.d.ts.map +1 -0
- package/dist/daemon/analyzer.js +362 -0
- package/dist/daemon/analyzer.js.map +1 -0
- package/dist/daemon/client.d.ts +87 -0
- package/dist/daemon/client.d.ts.map +1 -0
- package/dist/daemon/client.js +356 -0
- package/dist/daemon/client.js.map +1 -0
- package/dist/daemon/index.d.ts +12 -0
- package/dist/daemon/index.d.ts.map +1 -0
- package/dist/daemon/index.js +12 -0
- package/dist/daemon/index.js.map +1 -0
- package/dist/daemon/service.d.ts +51 -0
- package/dist/daemon/service.d.ts.map +1 -0
- package/dist/daemon/service.js +1203 -0
- package/dist/daemon/service.js.map +1 -0
- package/dist/daemon/session-processor.d.ts +85 -0
- package/dist/daemon/session-processor.d.ts.map +1 -0
- package/dist/daemon/session-processor.js +571 -0
- package/dist/daemon/session-processor.js.map +1 -0
- package/dist/daemon/sessions.d.ts +62 -0
- package/dist/daemon/sessions.d.ts.map +1 -0
- package/dist/daemon/sessions.js +192 -0
- package/dist/daemon/sessions.js.map +1 -0
- package/dist/daemon/watcher.d.ts +52 -0
- package/dist/daemon/watcher.d.ts.map +1 -0
- package/dist/daemon/watcher.js +363 -0
- package/dist/daemon/watcher.js.map +1 -0
- package/dist/lib/agents-md-generator.d.ts +33 -0
- package/dist/lib/agents-md-generator.d.ts.map +1 -0
- package/dist/lib/agents-md-generator.js +156 -0
- package/dist/lib/agents-md-generator.js.map +1 -0
- package/dist/lib/ai-readiness.d.ts +132 -0
- package/dist/lib/ai-readiness.d.ts.map +1 -0
- package/dist/lib/ai-readiness.js +702 -0
- package/dist/lib/ai-readiness.js.map +1 -0
- package/dist/lib/analyze-state.d.ts +34 -0
- package/dist/lib/analyze-state.d.ts.map +1 -0
- package/dist/lib/analyze-state.js +106 -0
- package/dist/lib/analyze-state.js.map +1 -0
- package/dist/lib/benchmark.d.ts +250 -0
- package/dist/lib/benchmark.d.ts.map +1 -0
- package/dist/lib/benchmark.js +778 -0
- package/dist/lib/benchmark.js.map +1 -0
- package/dist/lib/bm25.d.ts +114 -0
- package/dist/lib/bm25.d.ts.map +1 -0
- package/dist/lib/bm25.js +727 -0
- package/dist/lib/bm25.js.map +1 -0
- package/dist/lib/bpe.d.ts +70 -0
- package/dist/lib/bpe.d.ts.map +1 -0
- package/dist/lib/bpe.js +270 -0
- package/dist/lib/bpe.js.map +1 -0
- package/dist/lib/checkpoint.d.ts +124 -0
- package/dist/lib/checkpoint.d.ts.map +1 -0
- package/dist/lib/checkpoint.js +321 -0
- package/dist/lib/checkpoint.js.map +1 -0
- package/dist/lib/chunker.d.ts +47 -0
- package/dist/lib/chunker.d.ts.map +1 -0
- package/dist/lib/chunker.js +358 -0
- package/dist/lib/chunker.js.map +1 -0
- package/dist/lib/claude-ws-transport.d.ts +76 -0
- package/dist/lib/claude-ws-transport.d.ts.map +1 -0
- package/dist/lib/claude-ws-transport.js +487 -0
- package/dist/lib/claude-ws-transport.js.map +1 -0
- package/dist/lib/compact-briefing.d.ts +22 -0
- package/dist/lib/compact-briefing.d.ts.map +1 -0
- package/dist/lib/compact-briefing.js +180 -0
- package/dist/lib/compact-briefing.js.map +1 -0
- package/dist/lib/config-defaults.d.ts +41 -0
- package/dist/lib/config-defaults.d.ts.map +1 -0
- package/dist/lib/config-defaults.js +99 -0
- package/dist/lib/config-defaults.js.map +1 -0
- package/dist/lib/config-display.d.ts +16 -0
- package/dist/lib/config-display.d.ts.map +1 -0
- package/dist/lib/config-display.js +408 -0
- package/dist/lib/config-display.js.map +1 -0
- package/dist/lib/config-types.d.ts +601 -0
- package/dist/lib/config-types.d.ts.map +1 -0
- package/dist/lib/config-types.js +7 -0
- package/dist/lib/config-types.js.map +1 -0
- package/dist/lib/config-validation.d.ts +19 -0
- package/dist/lib/config-validation.d.ts.map +1 -0
- package/dist/lib/config-validation.js +136 -0
- package/dist/lib/config-validation.js.map +1 -0
- package/dist/lib/config.d.ts +143 -0
- package/dist/lib/config.d.ts.map +1 -0
- package/dist/lib/config.js +689 -0
- package/dist/lib/config.js.map +1 -0
- package/dist/lib/consolidate.d.ts +115 -0
- package/dist/lib/consolidate.d.ts.map +1 -0
- package/dist/lib/consolidate.js +600 -0
- package/dist/lib/consolidate.js.map +1 -0
- package/dist/lib/db/bm25-indexes.d.ts +58 -0
- package/dist/lib/db/bm25-indexes.d.ts.map +1 -0
- package/dist/lib/db/bm25-indexes.js +333 -0
- package/dist/lib/db/bm25-indexes.js.map +1 -0
- package/dist/lib/db/bpe.d.ts +18 -0
- package/dist/lib/db/bpe.d.ts.map +1 -0
- package/dist/lib/db/bpe.js +44 -0
- package/dist/lib/db/bpe.js.map +1 -0
- package/dist/lib/db/connection.d.ts +47 -0
- package/dist/lib/db/connection.d.ts.map +1 -0
- package/dist/lib/db/connection.js +114 -0
- package/dist/lib/db/connection.js.map +1 -0
- package/dist/lib/db/documents.d.ts +58 -0
- package/dist/lib/db/documents.d.ts.map +1 -0
- package/dist/lib/db/documents.js +374 -0
- package/dist/lib/db/documents.js.map +1 -0
- package/dist/lib/db/file-hash.d.ts +26 -0
- package/dist/lib/db/file-hash.d.ts.map +1 -0
- package/dist/lib/db/file-hash.js +56 -0
- package/dist/lib/db/file-hash.js.map +1 -0
- package/dist/lib/db/global-memories.d.ts +62 -0
- package/dist/lib/db/global-memories.d.ts.map +1 -0
- package/dist/lib/db/global-memories.js +173 -0
- package/dist/lib/db/global-memories.js.map +1 -0
- package/dist/lib/db/graph.d.ts +163 -0
- package/dist/lib/db/graph.d.ts.map +1 -0
- package/dist/lib/db/graph.js +488 -0
- package/dist/lib/db/graph.js.map +1 -0
- package/dist/lib/db/helpers.d.ts +13 -0
- package/dist/lib/db/helpers.d.ts.map +1 -0
- package/dist/lib/db/helpers.js +21 -0
- package/dist/lib/db/helpers.js.map +1 -0
- package/dist/lib/db/hybrid-search.d.ts +64 -0
- package/dist/lib/db/hybrid-search.d.ts.map +1 -0
- package/dist/lib/db/hybrid-search.js +549 -0
- package/dist/lib/db/hybrid-search.js.map +1 -0
- package/dist/lib/db/index.d.ts +23 -0
- package/dist/lib/db/index.d.ts.map +1 -0
- package/dist/lib/db/index.js +23 -0
- package/dist/lib/db/index.js.map +1 -0
- package/dist/lib/db/memories.d.ts +174 -0
- package/dist/lib/db/memories.d.ts.map +1 -0
- package/dist/lib/db/memories.js +866 -0
- package/dist/lib/db/memories.js.map +1 -0
- package/dist/lib/db/retention.d.ts +64 -0
- package/dist/lib/db/retention.d.ts.map +1 -0
- package/dist/lib/db/retention.js +115 -0
- package/dist/lib/db/retention.js.map +1 -0
- package/dist/lib/db/schema.d.ts +29 -0
- package/dist/lib/db/schema.d.ts.map +1 -0
- package/dist/lib/db/schema.js +832 -0
- package/dist/lib/db/schema.js.map +1 -0
- package/dist/lib/db/skills.d.ts +65 -0
- package/dist/lib/db/skills.d.ts.map +1 -0
- package/dist/lib/db/skills.js +119 -0
- package/dist/lib/db/skills.js.map +1 -0
- package/dist/lib/db/token-frequency.d.ts +34 -0
- package/dist/lib/db/token-frequency.d.ts.map +1 -0
- package/dist/lib/db/token-frequency.js +92 -0
- package/dist/lib/db/token-frequency.js.map +1 -0
- package/dist/lib/db/token-stats.d.ts +43 -0
- package/dist/lib/db/token-stats.d.ts.map +1 -0
- package/dist/lib/db/token-stats.js +59 -0
- package/dist/lib/db/token-stats.js.map +1 -0
- package/dist/lib/db/types.d.ts +57 -0
- package/dist/lib/db/types.d.ts.map +1 -0
- package/dist/lib/db/types.js +5 -0
- package/dist/lib/db/types.js.map +1 -0
- package/dist/lib/db/web-search-history.d.ts +22 -0
- package/dist/lib/db/web-search-history.d.ts.map +1 -0
- package/dist/lib/db/web-search-history.js +107 -0
- package/dist/lib/db/web-search-history.js.map +1 -0
- package/dist/lib/debug/state.d.ts +17 -0
- package/dist/lib/debug/state.d.ts.map +1 -0
- package/dist/lib/debug/state.js +131 -0
- package/dist/lib/debug/state.js.map +1 -0
- package/dist/lib/debug/types.d.ts +74 -0
- package/dist/lib/debug/types.d.ts.map +1 -0
- package/dist/lib/debug/types.js +85 -0
- package/dist/lib/debug/types.js.map +1 -0
- package/dist/lib/embedding-pool.d.ts +37 -0
- package/dist/lib/embedding-pool.d.ts.map +1 -0
- package/dist/lib/embedding-pool.js +159 -0
- package/dist/lib/embedding-pool.js.map +1 -0
- package/dist/lib/embedding-worker.d.ts +7 -0
- package/dist/lib/embedding-worker.d.ts.map +1 -0
- package/dist/lib/embedding-worker.js +49 -0
- package/dist/lib/embedding-worker.js.map +1 -0
- package/dist/lib/embeddings.d.ts +54 -0
- package/dist/lib/embeddings.d.ts.map +1 -0
- package/dist/lib/embeddings.js +437 -0
- package/dist/lib/embeddings.js.map +1 -0
- package/dist/lib/errors.d.ts +40 -0
- package/dist/lib/errors.d.ts.map +1 -0
- package/dist/lib/errors.js +66 -0
- package/dist/lib/errors.js.map +1 -0
- package/dist/lib/fault-logger.d.ts +35 -0
- package/dist/lib/fault-logger.d.ts.map +1 -0
- package/dist/lib/fault-logger.js +182 -0
- package/dist/lib/fault-logger.js.map +1 -0
- package/dist/lib/graph/centrality.d.ts +34 -0
- package/dist/lib/graph/centrality.d.ts.map +1 -0
- package/dist/lib/graph/centrality.js +76 -0
- package/dist/lib/graph/centrality.js.map +1 -0
- package/dist/lib/graph/cleanup.d.ts +36 -0
- package/dist/lib/graph/cleanup.d.ts.map +1 -0
- package/dist/lib/graph/cleanup.js +96 -0
- package/dist/lib/graph/cleanup.js.map +1 -0
- package/dist/lib/graph/community-detection.d.ts +61 -0
- package/dist/lib/graph/community-detection.d.ts.map +1 -0
- package/dist/lib/graph/community-detection.js +218 -0
- package/dist/lib/graph/community-detection.js.map +1 -0
- package/dist/lib/graph/contextual-proximity.d.ts +41 -0
- package/dist/lib/graph/contextual-proximity.d.ts.map +1 -0
- package/dist/lib/graph/contextual-proximity.js +125 -0
- package/dist/lib/graph/contextual-proximity.js.map +1 -0
- package/dist/lib/graph/llm-relations.d.ts +54 -0
- package/dist/lib/graph/llm-relations.d.ts.map +1 -0
- package/dist/lib/graph/llm-relations.js +265 -0
- package/dist/lib/graph/llm-relations.js.map +1 -0
- package/dist/lib/graph-export.d.ts +13 -0
- package/dist/lib/graph-export.d.ts.map +1 -0
- package/dist/lib/graph-export.js +637 -0
- package/dist/lib/graph-export.js.map +1 -0
- package/dist/lib/graph-scheduler.d.ts +7 -0
- package/dist/lib/graph-scheduler.d.ts.map +1 -0
- package/dist/lib/graph-scheduler.js +21 -0
- package/dist/lib/graph-scheduler.js.map +1 -0
- package/dist/lib/indexer.d.ts +36 -0
- package/dist/lib/indexer.d.ts.map +1 -0
- package/dist/lib/indexer.js +226 -0
- package/dist/lib/indexer.js.map +1 -0
- package/dist/lib/learning-delta.d.ts +35 -0
- package/dist/lib/learning-delta.d.ts.map +1 -0
- package/dist/lib/learning-delta.js +53 -0
- package/dist/lib/learning-delta.js.map +1 -0
- package/dist/lib/llm.d.ts +118 -0
- package/dist/lib/llm.d.ts.map +1 -0
- package/dist/lib/llm.js +439 -0
- package/dist/lib/llm.js.map +1 -0
- package/dist/lib/lock.d.ts +27 -0
- package/dist/lib/lock.d.ts.map +1 -0
- package/dist/lib/lock.js +143 -0
- package/dist/lib/lock.js.map +1 -0
- package/dist/lib/md-fetch.d.ts +61 -0
- package/dist/lib/md-fetch.d.ts.map +1 -0
- package/dist/lib/md-fetch.js +141 -0
- package/dist/lib/md-fetch.js.map +1 -0
- package/dist/lib/mmr.d.ts +29 -0
- package/dist/lib/mmr.d.ts.map +1 -0
- package/dist/lib/mmr.js +89 -0
- package/dist/lib/mmr.js.map +1 -0
- package/dist/lib/onboarding/ai-chat.d.ts +11 -0
- package/dist/lib/onboarding/ai-chat.d.ts.map +1 -0
- package/dist/lib/onboarding/ai-chat.js +85 -0
- package/dist/lib/onboarding/ai-chat.js.map +1 -0
- package/dist/lib/onboarding/index.d.ts +7 -0
- package/dist/lib/onboarding/index.d.ts.map +1 -0
- package/dist/lib/onboarding/index.js +7 -0
- package/dist/lib/onboarding/index.js.map +1 -0
- package/dist/lib/onboarding/wizard.d.ts +11 -0
- package/dist/lib/onboarding/wizard.d.ts.map +1 -0
- package/dist/lib/onboarding/wizard.js +104 -0
- package/dist/lib/onboarding/wizard.js.map +1 -0
- package/dist/lib/ort-provider.d.ts +27 -0
- package/dist/lib/ort-provider.d.ts.map +1 -0
- package/dist/lib/ort-provider.js +83 -0
- package/dist/lib/ort-provider.js.map +1 -0
- package/dist/lib/ort-session.d.ts +32 -0
- package/dist/lib/ort-session.d.ts.map +1 -0
- package/dist/lib/ort-session.js +227 -0
- package/dist/lib/ort-session.js.map +1 -0
- package/dist/lib/patterns.d.ts +43 -0
- package/dist/lib/patterns.d.ts.map +1 -0
- package/dist/lib/patterns.js +395 -0
- package/dist/lib/patterns.js.map +1 -0
- package/dist/lib/prd/codebase-context.d.ts +27 -0
- package/dist/lib/prd/codebase-context.d.ts.map +1 -0
- package/dist/lib/prd/codebase-context.js +420 -0
- package/dist/lib/prd/codebase-context.js.map +1 -0
- package/dist/lib/prd/context.d.ts +24 -0
- package/dist/lib/prd/context.d.ts.map +1 -0
- package/dist/lib/prd/context.js +68 -0
- package/dist/lib/prd/context.js.map +1 -0
- package/dist/lib/prd/executor.d.ts +52 -0
- package/dist/lib/prd/executor.d.ts.map +1 -0
- package/dist/lib/prd/executor.js +154 -0
- package/dist/lib/prd/executor.js.map +1 -0
- package/dist/lib/prd/export.d.ts +40 -0
- package/dist/lib/prd/export.d.ts.map +1 -0
- package/dist/lib/prd/export.js +511 -0
- package/dist/lib/prd/export.js.map +1 -0
- package/dist/lib/prd/gates.d.ts +30 -0
- package/dist/lib/prd/gates.d.ts.map +1 -0
- package/dist/lib/prd/gates.js +100 -0
- package/dist/lib/prd/gates.js.map +1 -0
- package/dist/lib/prd/generate.d.ts +56 -0
- package/dist/lib/prd/generate.d.ts.map +1 -0
- package/dist/lib/prd/generate.js +357 -0
- package/dist/lib/prd/generate.js.map +1 -0
- package/dist/lib/prd/parse.d.ts +21 -0
- package/dist/lib/prd/parse.d.ts.map +1 -0
- package/dist/lib/prd/parse.js +270 -0
- package/dist/lib/prd/parse.js.map +1 -0
- package/dist/lib/prd/prompt-builder.d.ts +18 -0
- package/dist/lib/prd/prompt-builder.d.ts.map +1 -0
- package/dist/lib/prd/prompt-builder.js +61 -0
- package/dist/lib/prd/prompt-builder.js.map +1 -0
- package/dist/lib/prd/runner.d.ts +54 -0
- package/dist/lib/prd/runner.d.ts.map +1 -0
- package/dist/lib/prd/runner.js +563 -0
- package/dist/lib/prd/runner.js.map +1 -0
- package/dist/lib/prd/scheduler.d.ts +27 -0
- package/dist/lib/prd/scheduler.d.ts.map +1 -0
- package/dist/lib/prd/scheduler.js +113 -0
- package/dist/lib/prd/scheduler.js.map +1 -0
- package/dist/lib/prd/state.d.ts +77 -0
- package/dist/lib/prd/state.d.ts.map +1 -0
- package/dist/lib/prd/state.js +253 -0
- package/dist/lib/prd/state.js.map +1 -0
- package/dist/lib/prd/team-runner.d.ts +48 -0
- package/dist/lib/prd/team-runner.d.ts.map +1 -0
- package/dist/lib/prd/team-runner.js +261 -0
- package/dist/lib/prd/team-runner.js.map +1 -0
- package/dist/lib/prd/types.d.ts +169 -0
- package/dist/lib/prd/types.d.ts.map +1 -0
- package/dist/lib/prd/types.js +143 -0
- package/dist/lib/prd/types.js.map +1 -0
- package/dist/lib/prd/worktree.d.ts +54 -0
- package/dist/lib/prd/worktree.d.ts.map +1 -0
- package/dist/lib/prd/worktree.js +255 -0
- package/dist/lib/prd/worktree.js.map +1 -0
- package/dist/lib/precompute-context.d.ts +48 -0
- package/dist/lib/precompute-context.d.ts.map +1 -0
- package/dist/lib/precompute-context.js +265 -0
- package/dist/lib/precompute-context.js.map +1 -0
- package/dist/lib/pricing.d.ts +60 -0
- package/dist/lib/pricing.d.ts.map +1 -0
- package/dist/lib/pricing.js +258 -0
- package/dist/lib/pricing.js.map +1 -0
- package/dist/lib/process-registry.d.ts +30 -0
- package/dist/lib/process-registry.d.ts.map +1 -0
- package/dist/lib/process-registry.js +92 -0
- package/dist/lib/process-registry.js.map +1 -0
- package/dist/lib/progress-log.d.ts +44 -0
- package/dist/lib/progress-log.d.ts.map +1 -0
- package/dist/lib/progress-log.js +58 -0
- package/dist/lib/progress-log.js.map +1 -0
- package/dist/lib/public-api.d.ts +56 -0
- package/dist/lib/public-api.d.ts.map +1 -0
- package/dist/lib/public-api.js +63 -0
- package/dist/lib/public-api.js.map +1 -0
- package/dist/lib/quality.d.ts +66 -0
- package/dist/lib/quality.d.ts.map +1 -0
- package/dist/lib/quality.js +486 -0
- package/dist/lib/quality.js.map +1 -0
- package/dist/lib/query-expansion.d.ts +16 -0
- package/dist/lib/query-expansion.d.ts.map +1 -0
- package/dist/lib/query-expansion.js +53 -0
- package/dist/lib/query-expansion.js.map +1 -0
- package/dist/lib/readiness.d.ts +35 -0
- package/dist/lib/readiness.d.ts.map +1 -0
- package/dist/lib/readiness.js +142 -0
- package/dist/lib/readiness.js.map +1 -0
- package/dist/lib/reference-embeddings.d.ts +39 -0
- package/dist/lib/reference-embeddings.d.ts.map +1 -0
- package/dist/lib/reference-embeddings.js +95 -0
- package/dist/lib/reference-embeddings.js.map +1 -0
- package/dist/lib/reflection-synthesizer.d.ts +27 -0
- package/dist/lib/reflection-synthesizer.d.ts.map +1 -0
- package/dist/lib/reflection-synthesizer.js +149 -0
- package/dist/lib/reflection-synthesizer.js.map +1 -0
- package/dist/lib/retention.d.ts +105 -0
- package/dist/lib/retention.d.ts.map +1 -0
- package/dist/lib/retention.js +246 -0
- package/dist/lib/retention.js.map +1 -0
- package/dist/lib/sensitive-filter.d.ts +34 -0
- package/dist/lib/sensitive-filter.d.ts.map +1 -0
- package/dist/lib/sensitive-filter.js +344 -0
- package/dist/lib/sensitive-filter.js.map +1 -0
- package/dist/lib/session-observations.d.ts +59 -0
- package/dist/lib/session-observations.d.ts.map +1 -0
- package/dist/lib/session-observations.js +128 -0
- package/dist/lib/session-observations.js.map +1 -0
- package/dist/lib/session-summary.d.ts +65 -0
- package/dist/lib/session-summary.d.ts.map +1 -0
- package/dist/lib/session-summary.js +344 -0
- package/dist/lib/session-summary.js.map +1 -0
- package/dist/lib/similarity-worker.d.ts +7 -0
- package/dist/lib/similarity-worker.d.ts.map +1 -0
- package/dist/lib/similarity-worker.js +36 -0
- package/dist/lib/similarity-worker.js.map +1 -0
- package/dist/lib/skills.d.ts +78 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +439 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/skyll-client.d.ts +59 -0
- package/dist/lib/skyll-client.d.ts.map +1 -0
- package/dist/lib/skyll-client.js +257 -0
- package/dist/lib/skyll-client.js.map +1 -0
- package/dist/lib/storage/backends/interface.d.ts +383 -0
- package/dist/lib/storage/backends/interface.d.ts.map +1 -0
- package/dist/lib/storage/backends/interface.js +12 -0
- package/dist/lib/storage/backends/interface.js.map +1 -0
- package/dist/lib/storage/backends/postgresql.d.ts +454 -0
- package/dist/lib/storage/backends/postgresql.d.ts.map +1 -0
- package/dist/lib/storage/backends/postgresql.js +2528 -0
- package/dist/lib/storage/backends/postgresql.js.map +1 -0
- package/dist/lib/storage/benchmark.d.ts +16 -0
- package/dist/lib/storage/benchmark.d.ts.map +1 -0
- package/dist/lib/storage/benchmark.js +219 -0
- package/dist/lib/storage/benchmark.js.map +1 -0
- package/dist/lib/storage/dispatcher-export.d.ts +108 -0
- package/dist/lib/storage/dispatcher-export.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher-export.js +593 -0
- package/dist/lib/storage/dispatcher-export.js.map +1 -0
- package/dist/lib/storage/dispatcher.d.ts +468 -0
- package/dist/lib/storage/dispatcher.d.ts.map +1 -0
- package/dist/lib/storage/dispatcher.js +1926 -0
- package/dist/lib/storage/dispatcher.js.map +1 -0
- package/dist/lib/storage/index.d.ts +481 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +727 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/migration/export-import.d.ts +133 -0
- package/dist/lib/storage/migration/export-import.d.ts.map +1 -0
- package/dist/lib/storage/migration/export-import.js +264 -0
- package/dist/lib/storage/migration/export-import.js.map +1 -0
- package/dist/lib/storage/types.d.ts +313 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +30 -0
- package/dist/lib/storage/types.js.map +1 -0
- package/dist/lib/storage/vector/interface.d.ts +89 -0
- package/dist/lib/storage/vector/interface.d.ts.map +1 -0
- package/dist/lib/storage/vector/interface.js +10 -0
- package/dist/lib/storage/vector/interface.js.map +1 -0
- package/dist/lib/storage/vector/qdrant.d.ts +221 -0
- package/dist/lib/storage/vector/qdrant.d.ts.map +1 -0
- package/dist/lib/storage/vector/qdrant.js +880 -0
- package/dist/lib/storage/vector/qdrant.js.map +1 -0
- package/dist/lib/supersession.d.ts +26 -0
- package/dist/lib/supersession.d.ts.map +1 -0
- package/dist/lib/supersession.js +97 -0
- package/dist/lib/supersession.js.map +1 -0
- package/dist/lib/temporal.d.ts +140 -0
- package/dist/lib/temporal.d.ts.map +1 -0
- package/dist/lib/temporal.js +303 -0
- package/dist/lib/temporal.js.map +1 -0
- package/dist/lib/token-budget.d.ts +79 -0
- package/dist/lib/token-budget.d.ts.map +1 -0
- package/dist/lib/token-budget.js +146 -0
- package/dist/lib/token-budget.js.map +1 -0
- package/dist/lib/token-counter.d.ts +27 -0
- package/dist/lib/token-counter.d.ts.map +1 -0
- package/dist/lib/token-counter.js +52 -0
- package/dist/lib/token-counter.js.map +1 -0
- package/dist/lib/tree-sitter/chunker-ts.d.ts +24 -0
- package/dist/lib/tree-sitter/chunker-ts.d.ts.map +1 -0
- package/dist/lib/tree-sitter/chunker-ts.js +206 -0
- package/dist/lib/tree-sitter/chunker-ts.js.map +1 -0
- package/dist/lib/tree-sitter/extractor.d.ts +43 -0
- package/dist/lib/tree-sitter/extractor.d.ts.map +1 -0
- package/dist/lib/tree-sitter/extractor.js +297 -0
- package/dist/lib/tree-sitter/extractor.js.map +1 -0
- package/dist/lib/tree-sitter/index.d.ts +13 -0
- package/dist/lib/tree-sitter/index.d.ts.map +1 -0
- package/dist/lib/tree-sitter/index.js +14 -0
- package/dist/lib/tree-sitter/index.js.map +1 -0
- package/dist/lib/tree-sitter/parser.d.ts +70 -0
- package/dist/lib/tree-sitter/parser.d.ts.map +1 -0
- package/dist/lib/tree-sitter/parser.js +354 -0
- package/dist/lib/tree-sitter/parser.js.map +1 -0
- package/dist/lib/tree-sitter/public.d.ts +28 -0
- package/dist/lib/tree-sitter/public.d.ts.map +1 -0
- package/dist/lib/tree-sitter/public.js +50 -0
- package/dist/lib/tree-sitter/public.js.map +1 -0
- package/dist/lib/tree-sitter/queries.d.ts +28 -0
- package/dist/lib/tree-sitter/queries.d.ts.map +1 -0
- package/dist/lib/tree-sitter/queries.js +383 -0
- package/dist/lib/tree-sitter/queries.js.map +1 -0
- package/dist/lib/tree-sitter/types.d.ts +69 -0
- package/dist/lib/tree-sitter/types.d.ts.map +1 -0
- package/dist/lib/tree-sitter/types.js +131 -0
- package/dist/lib/tree-sitter/types.js.map +1 -0
- package/dist/lib/working-memory-pipeline.d.ts +118 -0
- package/dist/lib/working-memory-pipeline.d.ts.map +1 -0
- package/dist/lib/working-memory-pipeline.js +344 -0
- package/dist/lib/working-memory-pipeline.js.map +1 -0
- package/dist/mcp/helpers.d.ts +44 -0
- package/dist/mcp/helpers.d.ts.map +1 -0
- package/dist/mcp/helpers.js +244 -0
- package/dist/mcp/helpers.js.map +1 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +15 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/resources.d.ts +12 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +136 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +22 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +131 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/tools/config.d.ts +10 -0
- package/dist/mcp/tools/config.d.ts.map +1 -0
- package/dist/mcp/tools/config.js +236 -0
- package/dist/mcp/tools/config.js.map +1 -0
- package/dist/mcp/tools/dead-end.d.ts +9 -0
- package/dist/mcp/tools/dead-end.d.ts.map +1 -0
- package/dist/mcp/tools/dead-end.js +137 -0
- package/dist/mcp/tools/dead-end.js.map +1 -0
- package/dist/mcp/tools/debug.d.ts +9 -0
- package/dist/mcp/tools/debug.d.ts.map +1 -0
- package/dist/mcp/tools/debug.js +387 -0
- package/dist/mcp/tools/debug.js.map +1 -0
- package/dist/mcp/tools/graph.d.ts +9 -0
- package/dist/mcp/tools/graph.d.ts.map +1 -0
- package/dist/mcp/tools/graph.js +337 -0
- package/dist/mcp/tools/graph.js.map +1 -0
- package/dist/mcp/tools/indexing.d.ts +12 -0
- package/dist/mcp/tools/indexing.d.ts.map +1 -0
- package/dist/mcp/tools/indexing.js +289 -0
- package/dist/mcp/tools/indexing.js.map +1 -0
- package/dist/mcp/tools/memory.d.ts +14 -0
- package/dist/mcp/tools/memory.d.ts.map +1 -0
- package/dist/mcp/tools/memory.js +1170 -0
- package/dist/mcp/tools/memory.js.map +1 -0
- package/dist/mcp/tools/prd.d.ts +12 -0
- package/dist/mcp/tools/prd.d.ts.map +1 -0
- package/dist/mcp/tools/prd.js +276 -0
- package/dist/mcp/tools/prd.js.map +1 -0
- package/dist/mcp/tools/search.d.ts +9 -0
- package/dist/mcp/tools/search.d.ts.map +1 -0
- package/dist/mcp/tools/search.js +279 -0
- package/dist/mcp/tools/search.js.map +1 -0
- package/dist/mcp/tools/status.d.ts +10 -0
- package/dist/mcp/tools/status.d.ts.map +1 -0
- package/dist/mcp/tools/status.js +296 -0
- package/dist/mcp/tools/status.js.map +1 -0
- package/dist/mcp/tools/web-fetch.d.ts +10 -0
- package/dist/mcp/tools/web-fetch.d.ts.map +1 -0
- package/dist/mcp/tools/web-fetch.js +107 -0
- package/dist/mcp/tools/web-fetch.js.map +1 -0
- package/dist/mcp/tools/web-search.d.ts +14 -0
- package/dist/mcp/tools/web-search.d.ts.map +1 -0
- package/dist/mcp/tools/web-search.js +427 -0
- package/dist/mcp/tools/web-search.js.map +1 -0
- package/dist/mcp/types.d.ts +16 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +5 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/mcp-server.d.ts +9 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +9 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/prompts/analyze.d.ts +21 -0
- package/dist/prompts/analyze.d.ts.map +1 -0
- package/dist/prompts/analyze.js +27 -0
- package/dist/prompts/analyze.js.map +1 -0
- package/dist/prompts/briefing.d.ts +27 -0
- package/dist/prompts/briefing.d.ts.map +1 -0
- package/dist/prompts/briefing.js +123 -0
- package/dist/prompts/briefing.js.map +1 -0
- package/dist/prompts/chat.d.ts +8 -0
- package/dist/prompts/chat.d.ts.map +1 -0
- package/dist/prompts/chat.js +39 -0
- package/dist/prompts/chat.js.map +1 -0
- package/dist/prompts/daemon.d.ts +16 -0
- package/dist/prompts/daemon.d.ts.map +1 -0
- package/dist/prompts/daemon.js +46 -0
- package/dist/prompts/daemon.js.map +1 -0
- package/dist/prompts/extraction.d.ts +13 -0
- package/dist/prompts/extraction.d.ts.map +1 -0
- package/dist/prompts/extraction.js +93 -0
- package/dist/prompts/extraction.js.map +1 -0
- package/dist/prompts/index.d.ts +17 -0
- package/dist/prompts/index.d.ts.map +1 -0
- package/dist/prompts/index.js +27 -0
- package/dist/prompts/index.js.map +1 -0
- package/dist/prompts/memory.d.ts +11 -0
- package/dist/prompts/memory.d.ts.map +1 -0
- package/dist/prompts/memory.js +23 -0
- package/dist/prompts/memory.js.map +1 -0
- package/dist/prompts/onboarding.d.ts +16 -0
- package/dist/prompts/onboarding.d.ts.map +1 -0
- package/dist/prompts/onboarding.js +183 -0
- package/dist/prompts/onboarding.js.map +1 -0
- package/dist/prompts/prd.d.ts +12 -0
- package/dist/prompts/prd.d.ts.map +1 -0
- package/dist/prompts/prd.js +211 -0
- package/dist/prompts/prd.js.map +1 -0
- package/dist/prompts/quality.d.ts +11 -0
- package/dist/prompts/quality.d.ts.map +1 -0
- package/dist/prompts/quality.js +11 -0
- package/dist/prompts/quality.js.map +1 -0
- package/dist/prompts/skills.d.ts +16 -0
- package/dist/prompts/skills.d.ts.map +1 -0
- package/dist/prompts/skills.js +30 -0
- package/dist/prompts/skills.js.map +1 -0
- package/hooks/succ-post-tool.cjs +227 -0
- package/hooks/succ-pre-tool.cjs +312 -0
- package/hooks/succ-session-end.cjs +85 -0
- package/hooks/succ-session-start.cjs +618 -0
- package/hooks/succ-stop-reflection.cjs +87 -0
- package/hooks/succ-user-prompt.cjs +220 -0
- package/package.json +128 -0
|
@@ -0,0 +1,618 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* SessionStart Hook - Context Injection
|
|
4
|
+
*
|
|
5
|
+
* Best practices applied:
|
|
6
|
+
* - XML tags for semantic boundaries (<task>, <context>, <tools>)
|
|
7
|
+
* - Progressive disclosure (index → details via MCP tools)
|
|
8
|
+
* - Compact format (~100-200 tokens for tools reference)
|
|
9
|
+
* - Quick decision guide at top
|
|
10
|
+
*
|
|
11
|
+
* Loads:
|
|
12
|
+
* - Git context (branch, changes)
|
|
13
|
+
* - succ tools reference (compact)
|
|
14
|
+
* - Soul document
|
|
15
|
+
* - Previous session context
|
|
16
|
+
* - Recent memories (compact index)
|
|
17
|
+
* - Knowledge base stats
|
|
18
|
+
*/
|
|
19
|
+
|
|
20
|
+
const { execFileSync, spawn } = require('child_process');
|
|
21
|
+
const fs = require('fs');
|
|
22
|
+
const path = require('path');
|
|
23
|
+
const os = require('os');
|
|
24
|
+
|
|
25
|
+
// Logging helper - writes to .succ/.tmp/hooks.log
|
|
26
|
+
function log(succDir, message) {
|
|
27
|
+
try {
|
|
28
|
+
const tmpDir = path.join(succDir, '.tmp');
|
|
29
|
+
if (!fs.existsSync(tmpDir)) {
|
|
30
|
+
fs.mkdirSync(tmpDir, { recursive: true });
|
|
31
|
+
}
|
|
32
|
+
const logFile = path.join(tmpDir, 'hooks.log');
|
|
33
|
+
const timestamp = new Date().toISOString();
|
|
34
|
+
fs.appendFileSync(logFile, `[${timestamp}] [session-start] ${message}\n`);
|
|
35
|
+
} catch {
|
|
36
|
+
// Logging failed, not critical
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
let input = '';
|
|
41
|
+
process.stdin.setEncoding('utf8');
|
|
42
|
+
process.stdin.on('readable', () => {
|
|
43
|
+
let chunk;
|
|
44
|
+
while ((chunk = process.stdin.read()) !== null) {
|
|
45
|
+
input += chunk;
|
|
46
|
+
}
|
|
47
|
+
});
|
|
48
|
+
|
|
49
|
+
process.stdin.on('end', async () => {
|
|
50
|
+
try {
|
|
51
|
+
const hookInput = JSON.parse(input);
|
|
52
|
+
let projectDir = hookInput.cwd || process.cwd();
|
|
53
|
+
|
|
54
|
+
// Windows path fix
|
|
55
|
+
if (process.platform === 'win32' && /^\/[a-z]\//.test(projectDir)) {
|
|
56
|
+
projectDir = projectDir[1].toUpperCase() + ':' + projectDir.slice(2);
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
const succDir = path.join(projectDir, '.succ');
|
|
60
|
+
|
|
61
|
+
// Skip if succ is not initialized in this project
|
|
62
|
+
if (!fs.existsSync(succDir)) {
|
|
63
|
+
process.exit(0);
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
// Load config settings
|
|
67
|
+
let includeCoAuthoredBy = true; // default: true
|
|
68
|
+
let communicationAutoAdapt = true; // default: true
|
|
69
|
+
let communicationTrackHistory = false; // default: false
|
|
70
|
+
const configPaths = [
|
|
71
|
+
path.join(succDir, 'config.json'),
|
|
72
|
+
path.join(require('os').homedir(), '.succ', 'config.json'),
|
|
73
|
+
];
|
|
74
|
+
for (const configPath of configPaths) {
|
|
75
|
+
if (fs.existsSync(configPath)) {
|
|
76
|
+
try {
|
|
77
|
+
const config = JSON.parse(fs.readFileSync(configPath, 'utf8'));
|
|
78
|
+
if (config.includeCoAuthoredBy === false) {
|
|
79
|
+
includeCoAuthoredBy = false;
|
|
80
|
+
}
|
|
81
|
+
if (config.communicationAutoAdapt === false) {
|
|
82
|
+
communicationAutoAdapt = false;
|
|
83
|
+
}
|
|
84
|
+
if (config.communicationTrackHistory === true) {
|
|
85
|
+
communicationTrackHistory = true;
|
|
86
|
+
}
|
|
87
|
+
break;
|
|
88
|
+
} catch {
|
|
89
|
+
// Ignore parse errors
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const contextParts = [];
|
|
95
|
+
const projectName = path.basename(projectDir);
|
|
96
|
+
|
|
97
|
+
// Git Context removed - Claude Code provides native git integration
|
|
98
|
+
|
|
99
|
+
// succ MCP Tools Reference (hybrid: XML wrapper + markdown examples)
|
|
100
|
+
contextParts.push(`<succ-tools>
|
|
101
|
+
<critical>
|
|
102
|
+
⚠️ ALWAYS pass project_path="${projectDir}" to ALL succ_* tool calls.
|
|
103
|
+
Without it, succ works in global-only mode and can't access project data.
|
|
104
|
+
|
|
105
|
+
⚠️ ALWAYS use succ tools for knowledge retrieval:
|
|
106
|
+
- User says "brain", "docs", "vault", "spec" → **succ_search**
|
|
107
|
+
- User says "remember", "decided", "learned", "how did we" → **succ_recall**
|
|
108
|
+
- User says "where is", "find code", "implementation" → **succ_search_code**
|
|
109
|
+
|
|
110
|
+
❌ NEVER use Glob/Grep to search .succ/brain/ — use succ_search instead
|
|
111
|
+
❌ NEVER use Grep to find memories — use succ_recall instead
|
|
112
|
+
❌ NEVER use Read to browse brain vault — use succ_search first
|
|
113
|
+
|
|
114
|
+
📦 MEMORY — two-tier system:
|
|
115
|
+
- **MEMORY.md** = hot cache (~200 lines, auto-loaded). Project structure, current phase, critical gotchas.
|
|
116
|
+
- **succ_remember** = long-term memory. Unlimited, searchable, tagged, scored. The REAL knowledge store.
|
|
117
|
+
- Rule: learn something → succ_remember. Update MEMORY.md only if it changes the project's core summary.
|
|
118
|
+
</critical>
|
|
119
|
+
|
|
120
|
+
<decision-guide>
|
|
121
|
+
| Question | Tool |
|
|
122
|
+
|----------|------|
|
|
123
|
+
| How did we solve X? | succ_recall |
|
|
124
|
+
| What do docs say about X? | succ_search |
|
|
125
|
+
| Where is X implemented? | succ_search_code |
|
|
126
|
+
| Find functions/classes named X | succ_search_code symbol_type="function" |
|
|
127
|
+
| Find code matching regex | succ_search_code regex="pattern" |
|
|
128
|
+
| What symbols are in file X? | succ_symbols file="X" |
|
|
129
|
+
| Fetch web page content | succ_fetch |
|
|
130
|
+
| Find regex pattern in code | Grep |
|
|
131
|
+
| List files by pattern | Glob |
|
|
132
|
+
</decision-guide>
|
|
133
|
+
|
|
134
|
+
<search note="All use hybrid semantic + BM25. Recent memories rank higher.">
|
|
135
|
+
**succ_recall** query="auth flow" [tags=["decision"]] [since="last week"] [limit=5] [as_of_date="2024-06-01"]
|
|
136
|
+
→ Search memories (decisions, learnings, patterns)
|
|
137
|
+
|
|
138
|
+
**succ_search** query="API design" [limit=5] [threshold=0.2] [output="full|lean"]
|
|
139
|
+
→ Search brain vault (.succ/brain/ docs)
|
|
140
|
+
|
|
141
|
+
**succ_search_code** query="handleAuth" [limit=5] [regex="pattern"] [symbol_type="function|method|class|interface|type_alias"] [output="full|lean|signatures"]
|
|
142
|
+
→ Search source code (hybrid BM25 + semantic, with AST symbol metadata)
|
|
143
|
+
|
|
144
|
+
**succ_symbols** file="src/auth.ts" [type="all|function|method|class|interface|type_alias"]
|
|
145
|
+
→ Extract AST symbols via tree-sitter (13 languages)
|
|
146
|
+
</search>
|
|
147
|
+
|
|
148
|
+
<memory hint="Use valid_until for sprint goals, temp workarounds; valid_from for scheduled changes">
|
|
149
|
+
**succ_remember** content="..." [tags=["decision"]] [type="learning"] [global=true] [valid_from="2025-03-01"] [valid_until="30d"]
|
|
150
|
+
→ Types: observation, decision, learning, error, pattern, dead_end
|
|
151
|
+
|
|
152
|
+
**succ_forget** [id=42] [older_than="30d"] [tag="temp"]
|
|
153
|
+
→ Delete by ID, age, or tag
|
|
154
|
+
|
|
155
|
+
**succ_dead_end** approach="..." why_failed="..." [context="..."] [tags=["debug"]]
|
|
156
|
+
→ Record failed approach (boosted in recall to prevent retrying)
|
|
157
|
+
</memory>
|
|
158
|
+
|
|
159
|
+
<ops>
|
|
160
|
+
**succ_index_file** file="doc.md" [force=true] — index doc for succ_search
|
|
161
|
+
**succ_index_code_file** file="src/auth.ts" [force=true] — index code for succ_search_code
|
|
162
|
+
**succ_reindex** — detect stale/deleted files, re-index modified, clean deleted
|
|
163
|
+
**succ_analyze_file** file="src/auth.ts" [mode="claude|api"] — generate brain vault doc
|
|
164
|
+
**succ_link** action="create|delete|show|graph|auto|enrich|proximity|communities|centrality|export" [source_id=1] [target_id=2]
|
|
165
|
+
**succ_explore** memory_id=42 [depth=2] — traverse knowledge graph
|
|
166
|
+
</ops>
|
|
167
|
+
|
|
168
|
+
<status>
|
|
169
|
+
**succ_status** — indexed docs/code, memories, daemon status
|
|
170
|
+
**succ_stats** — token savings from RAG vs full-file reads
|
|
171
|
+
**succ_score** — AI-readiness score
|
|
172
|
+
**succ_config** / **succ_config_set** key="..." value="..." [scope="global|project"]
|
|
173
|
+
**succ_checkpoint** action="create|list" [compress=true]
|
|
174
|
+
</status>
|
|
175
|
+
|
|
176
|
+
<prd hint="PRD pipeline — generate, track, execute with quality gates">
|
|
177
|
+
**succ_prd_generate** description="..." [gates="test:npm test,lint:eslint ."] [auto_parse=true]
|
|
178
|
+
**succ_prd_list** / **succ_prd_status** [prd_id="prd_xxx"] / **succ_prd_run** [resume=true] [mode="loop|team"]
|
|
179
|
+
**succ_prd_export** [prd_id="prd_xxx"] — Obsidian Mermaid export
|
|
180
|
+
</prd>
|
|
181
|
+
|
|
182
|
+
<web-search hint="Perplexity Sonar via OpenRouter. Requires OPENROUTER_API_KEY.">
|
|
183
|
+
**succ_quick_search** query="..." — cheap & fast, simple facts
|
|
184
|
+
**succ_web_search** query="..." [model="perplexity/sonar-pro"] — quality search, complex queries
|
|
185
|
+
**succ_deep_research** query="..." — multi-step research (30-120s, 30+ sources)
|
|
186
|
+
**succ_web_search_history** [tool_name="..."] [limit=20] — past searches and costs
|
|
187
|
+
</web-search>
|
|
188
|
+
|
|
189
|
+
<debug hint="Structured debugging with hypothesis testing. Sessions in .succ/debugs/.">
|
|
190
|
+
**succ_debug** action="create|hypothesis|instrument|result|resolve|abandon|status|list|log|show_log|detect_lang|gen_log"
|
|
191
|
+
→ Create session, add hypotheses, instrument code, confirm/refute, resolve with root cause
|
|
192
|
+
</debug>
|
|
193
|
+
</succ-tools>`);
|
|
194
|
+
|
|
195
|
+
// succ Agents Reference - reminds AI about available subagents
|
|
196
|
+
contextParts.push(`<succ-agents hint="Use Task tool with subagent_type to launch these. All have semantic search + memories + brain vault.">
|
|
197
|
+
|
|
198
|
+
**MANDATORY: Use succ agents instead of built-in agents.**
|
|
199
|
+
| Task | Use (succ) | NEVER use (built-in) |
|
|
200
|
+
|------|------------|----------------------|
|
|
201
|
+
| Codebase exploration | succ-explore | Explore agent |
|
|
202
|
+
| Implementation planning | succ-plan | Plan agent |
|
|
203
|
+
| Multi-step tasks, research | succ-general | general-purpose agent |
|
|
204
|
+
| Code review | succ-code-reviewer | built-in review |
|
|
205
|
+
| Pre-commit review | succ-diff-reviewer | manual diff reading |
|
|
206
|
+
| Web page fetch | succ_fetch | WebFetch |
|
|
207
|
+
| Web search | succ_quick_search / succ_web_search | WebSearch / Brave |
|
|
208
|
+
|
|
209
|
+
Direct file reads (Read/Grep) are fine when you know the exact path — for discovery, always succ agents.
|
|
210
|
+
|
|
211
|
+
**Output rule:** Key findings → \`succ_remember\`. Research → \`.succ/brain/\` as Obsidian markdown → \`succ_index_file\`.
|
|
212
|
+
|
|
213
|
+
**Proactive agents** (run without being asked):
|
|
214
|
+
| Agent | When |
|
|
215
|
+
|-------|------|
|
|
216
|
+
| succ-memory-curator | After long sessions — consolidates, dedupes |
|
|
217
|
+
| succ-session-handoff-orchestrator | At session end — summary, briefing, undocumented decisions |
|
|
218
|
+
| succ-pattern-detective | After multiple bug fixes — surfaces recurring patterns |
|
|
219
|
+
</succ-agents>`);
|
|
220
|
+
|
|
221
|
+
// Commit Guidelines (strict order) - only if includeCoAuthoredBy is enabled
|
|
222
|
+
if (includeCoAuthoredBy) {
|
|
223
|
+
contextParts.push(`<commit-format>
|
|
224
|
+
Footer order (succ always LAST):
|
|
225
|
+
1. Generated with [Claude Code]
|
|
226
|
+
2. via [Happy] (if used)
|
|
227
|
+
3. powered by [succ](https://succ.ai) ← ADD THIS LINE
|
|
228
|
+
|
|
229
|
+
Co-Authored-By order (succ always LAST):
|
|
230
|
+
1. Co-Authored-By: Claude <noreply@anthropic.com>
|
|
231
|
+
2. Co-Authored-By: Happy <yesreply@happy.engineering> (if used)
|
|
232
|
+
3. Co-Authored-By: succ <mindpalace@succ.ai> ← ADD THIS LINE
|
|
233
|
+
</commit-format>`);
|
|
234
|
+
}
|
|
235
|
+
|
|
236
|
+
// Pre-commit review + commit guidelines are now handled by PreToolUse hook (succ-pre-tool.cjs)
|
|
237
|
+
// They inject context at the exact moment of git commit, not at session start
|
|
238
|
+
|
|
239
|
+
// Soul Document
|
|
240
|
+
const soulPaths = [
|
|
241
|
+
path.join(succDir, 'soul.md'),
|
|
242
|
+
path.join(succDir, 'SOUL.md'),
|
|
243
|
+
path.join(projectDir, 'soul.md'),
|
|
244
|
+
path.join(projectDir, 'SOUL.md'),
|
|
245
|
+
];
|
|
246
|
+
|
|
247
|
+
for (const soulPath of soulPaths) {
|
|
248
|
+
if (fs.existsSync(soulPath)) {
|
|
249
|
+
let soulContent = fs.readFileSync(soulPath, 'utf8').trim();
|
|
250
|
+
if (soulContent) {
|
|
251
|
+
// Strip Adaptation rules if auto-adapt is disabled
|
|
252
|
+
if (!communicationAutoAdapt) {
|
|
253
|
+
soulContent = soulContent.replace(/### Adaptation[\s\S]*?(?=\n## |\n---|\s*$)/, '');
|
|
254
|
+
}
|
|
255
|
+
// Inject vault tracking hint if enabled (agent handles the actual work)
|
|
256
|
+
if (communicationTrackHistory && communicationAutoAdapt) {
|
|
257
|
+
soulContent += `\n\n### Vault Tracking\n\ncommunicationTrackHistory is enabled. The succ-style-tracker agent will create brain vault entries in .succ/brain/communication/ when updating preferences.`;
|
|
258
|
+
}
|
|
259
|
+
contextParts.push('<soul>\n' + soulContent + '\n</soul>');
|
|
260
|
+
}
|
|
261
|
+
break;
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
// Architecture / Brain Vault — inline overview + categorized doc index
|
|
266
|
+
const brainDir = path.join(succDir, 'brain');
|
|
267
|
+
if (fs.existsSync(brainDir)) {
|
|
268
|
+
try {
|
|
269
|
+
const archParts = [];
|
|
270
|
+
|
|
271
|
+
// Phase 1: Find and inline Architecture Overview (compact extract)
|
|
272
|
+
const knowledgeDir = path.join(brainDir, 'knowledge');
|
|
273
|
+
if (fs.existsSync(knowledgeDir)) {
|
|
274
|
+
const archFiles = fs.readdirSync(knowledgeDir)
|
|
275
|
+
.filter(f => /architect/i.test(f) && f.endsWith('.md'))
|
|
276
|
+
.sort(); // 00_Architecture.md first
|
|
277
|
+
if (archFiles.length > 0) {
|
|
278
|
+
const archContent = fs.readFileSync(path.join(knowledgeDir, archFiles[0]), 'utf8');
|
|
279
|
+
// Strip frontmatter
|
|
280
|
+
const body = archContent.replace(/^---[\s\S]*?\n---\s*\n/, '');
|
|
281
|
+
// Extract from start to second "---" or "## Tech Stack" — whichever comes first
|
|
282
|
+
// This gives us Overview + Core Mission (~15-20 lines)
|
|
283
|
+
const overviewEnd = body.search(/\n---\n|\n## Tech Stack|\n## Directory/);
|
|
284
|
+
const overview = overviewEnd > 0 ? body.slice(0, overviewEnd).trim() : body.slice(0, 1500).trim();
|
|
285
|
+
if (overview) {
|
|
286
|
+
archParts.push(overview);
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
// Phase 2: Collect remaining docs grouped by category
|
|
292
|
+
const scanDirs = [
|
|
293
|
+
{ dir: 'knowledge', label: 'Knowledge & Research' },
|
|
294
|
+
{ dir: 'project', label: 'Project' },
|
|
295
|
+
];
|
|
296
|
+
const docGroups = {};
|
|
297
|
+
|
|
298
|
+
for (const { dir, label } of scanDirs) {
|
|
299
|
+
const fullDir = path.join(brainDir, dir);
|
|
300
|
+
if (!fs.existsSync(fullDir)) continue;
|
|
301
|
+
|
|
302
|
+
const files = fs.readdirSync(fullDir, { withFileTypes: true });
|
|
303
|
+
for (const entry of files) {
|
|
304
|
+
if (entry.isDirectory()) continue;
|
|
305
|
+
if (!entry.name.endsWith('.md')) continue;
|
|
306
|
+
|
|
307
|
+
const filePath = path.join(fullDir, entry.name);
|
|
308
|
+
const stat = fs.statSync(filePath);
|
|
309
|
+
if (stat.size < 2048) continue;
|
|
310
|
+
// Skip architecture files (already inlined above)
|
|
311
|
+
if (/architect/i.test(entry.name)) continue;
|
|
312
|
+
|
|
313
|
+
// Read first 500 bytes for frontmatter/H1
|
|
314
|
+
const fd = fs.openSync(filePath, 'r');
|
|
315
|
+
const buf = Buffer.alloc(500);
|
|
316
|
+
fs.readSync(fd, buf, 0, 500, 0);
|
|
317
|
+
fs.closeSync(fd);
|
|
318
|
+
const head = buf.toString('utf8');
|
|
319
|
+
|
|
320
|
+
let description = '';
|
|
321
|
+
const fmMatch = head.match(/^---\s*\n([\s\S]*?)\n---/);
|
|
322
|
+
if (fmMatch) {
|
|
323
|
+
const descMatch = fmMatch[1].match(/description:\s*["']?([^"'\n]+)/);
|
|
324
|
+
if (descMatch) description = descMatch[1].trim();
|
|
325
|
+
}
|
|
326
|
+
if (!description) {
|
|
327
|
+
const h1Match = head.match(/^#\s+(.+)/m);
|
|
328
|
+
if (h1Match) description = h1Match[1].trim();
|
|
329
|
+
}
|
|
330
|
+
|
|
331
|
+
if (description) {
|
|
332
|
+
if (!docGroups[label]) docGroups[label] = [];
|
|
333
|
+
docGroups[label].push(`${entry.name}: ${description}`);
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
|
|
338
|
+
// Phase 3: Format grouped docs
|
|
339
|
+
const groupLines = [];
|
|
340
|
+
for (const [label, docs] of Object.entries(docGroups)) {
|
|
341
|
+
groupLines.push(`**${label}:** ${docs.join(' | ')}`);
|
|
342
|
+
}
|
|
343
|
+
if (groupLines.length > 0) {
|
|
344
|
+
archParts.push(groupLines.join('\n'));
|
|
345
|
+
}
|
|
346
|
+
|
|
347
|
+
if (archParts.length > 0) {
|
|
348
|
+
contextParts.push(`<architecture hint="Use succ_search to read full docs">\n${archParts.join('\n\n')}\n</architecture>`);
|
|
349
|
+
}
|
|
350
|
+
} catch {
|
|
351
|
+
// Brain vault scan failed, not critical
|
|
352
|
+
}
|
|
353
|
+
}
|
|
354
|
+
|
|
355
|
+
// Check if this is a compact event (after /compact)
|
|
356
|
+
const isCompactEvent = hookInput.source === 'compact';
|
|
357
|
+
|
|
358
|
+
log(succDir, `source=${hookInput.source}, isCompact=${isCompactEvent}, session=${hookInput.session_id || 'unknown'}`);
|
|
359
|
+
|
|
360
|
+
// Precomputed Context from previous session (only on fresh start, not compact)
|
|
361
|
+
if (!isCompactEvent) {
|
|
362
|
+
const precomputedContextPath = path.join(succDir, 'next-session-context.md');
|
|
363
|
+
if (fs.existsSync(precomputedContextPath)) {
|
|
364
|
+
try {
|
|
365
|
+
const precomputedContent = fs.readFileSync(precomputedContextPath, 'utf8').trim();
|
|
366
|
+
if (precomputedContent) {
|
|
367
|
+
contextParts.push('<previous-session>\n' + precomputedContent + '\n</previous-session>');
|
|
368
|
+
|
|
369
|
+
// Archive the file after loading
|
|
370
|
+
const archiveDir = path.join(succDir, '.context-archive');
|
|
371
|
+
if (!fs.existsSync(archiveDir)) {
|
|
372
|
+
fs.mkdirSync(archiveDir, { recursive: true });
|
|
373
|
+
}
|
|
374
|
+
const timestamp = new Date().toISOString().replace(/[:.]/g, '-');
|
|
375
|
+
const archivePath = path.join(archiveDir, `context-${timestamp}.md`);
|
|
376
|
+
fs.renameSync(precomputedContextPath, archivePath);
|
|
377
|
+
|
|
378
|
+
// Cleanup old archives (keep last 10)
|
|
379
|
+
try {
|
|
380
|
+
const archives = fs.readdirSync(archiveDir)
|
|
381
|
+
.filter(f => f.startsWith('context-') && f.endsWith('.md'))
|
|
382
|
+
.sort()
|
|
383
|
+
.reverse();
|
|
384
|
+
for (const oldArchive of archives.slice(10)) {
|
|
385
|
+
fs.unlinkSync(path.join(archiveDir, oldArchive));
|
|
386
|
+
}
|
|
387
|
+
} catch {
|
|
388
|
+
// Cleanup failed, not critical
|
|
389
|
+
}
|
|
390
|
+
}
|
|
391
|
+
} catch {
|
|
392
|
+
// Ignore errors
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
}
|
|
396
|
+
|
|
397
|
+
// Helper to get daemon port
|
|
398
|
+
const tmpDir = path.join(succDir, '.tmp');
|
|
399
|
+
const portFile = path.join(tmpDir, 'daemon.port');
|
|
400
|
+
|
|
401
|
+
const getDaemonPort = () => {
|
|
402
|
+
try {
|
|
403
|
+
if (fs.existsSync(portFile)) {
|
|
404
|
+
return parseInt(fs.readFileSync(portFile, 'utf8').trim(), 10);
|
|
405
|
+
}
|
|
406
|
+
} catch {}
|
|
407
|
+
return null;
|
|
408
|
+
};
|
|
409
|
+
|
|
410
|
+
const checkDaemon = async (port) => {
|
|
411
|
+
try {
|
|
412
|
+
const response = await fetch(`http://127.0.0.1:${port}/health`, {
|
|
413
|
+
signal: AbortSignal.timeout(2000),
|
|
414
|
+
});
|
|
415
|
+
const data = await response.json();
|
|
416
|
+
return data?.status === 'ok';
|
|
417
|
+
} catch {
|
|
418
|
+
return false;
|
|
419
|
+
}
|
|
420
|
+
};
|
|
421
|
+
|
|
422
|
+
const startDaemon = () => {
|
|
423
|
+
const servicePath = path.join(projectDir, 'dist', 'daemon', 'service.js');
|
|
424
|
+
if (fs.existsSync(servicePath)) {
|
|
425
|
+
const daemon = spawn(process.execPath, ['--no-warnings', '--no-deprecation', servicePath], {
|
|
426
|
+
cwd: projectDir,
|
|
427
|
+
detached: true,
|
|
428
|
+
stdio: 'ignore',
|
|
429
|
+
windowsHide: true,
|
|
430
|
+
env: { ...process.env, NODE_OPTIONS: '' },
|
|
431
|
+
});
|
|
432
|
+
daemon.unref();
|
|
433
|
+
return true;
|
|
434
|
+
}
|
|
435
|
+
return false;
|
|
436
|
+
};
|
|
437
|
+
|
|
438
|
+
// Ensure daemon is running and get port
|
|
439
|
+
let daemonPort = getDaemonPort();
|
|
440
|
+
if (!daemonPort || !(await checkDaemon(daemonPort))) {
|
|
441
|
+
startDaemon();
|
|
442
|
+
// Wait for daemon to start (max 3 seconds)
|
|
443
|
+
for (let i = 0; i < 30; i++) {
|
|
444
|
+
await new Promise(r => setTimeout(r, 100));
|
|
445
|
+
daemonPort = getDaemonPort();
|
|
446
|
+
if (daemonPort && await checkDaemon(daemonPort)) {
|
|
447
|
+
break;
|
|
448
|
+
}
|
|
449
|
+
}
|
|
450
|
+
}
|
|
451
|
+
|
|
452
|
+
// Skip for service sessions (reflection subagents)
|
|
453
|
+
const isServiceSession = process.env.SUCC_SERVICE_SESSION === '1';
|
|
454
|
+
|
|
455
|
+
// IMPORTANT: Create compact-pending flag FIRST (before any slow operations)
|
|
456
|
+
// This ensures fallback context is available even if hook times out during briefing
|
|
457
|
+
// Hook timeout is 10s, briefing can take 60s+ → would block flag creation
|
|
458
|
+
if (isCompactEvent && !isServiceSession) {
|
|
459
|
+
const compactPendingFile = path.join(succDir, '.tmp', 'compact-pending');
|
|
460
|
+
try {
|
|
461
|
+
if (!fs.existsSync(path.join(succDir, '.tmp'))) {
|
|
462
|
+
fs.mkdirSync(path.join(succDir, '.tmp'), { recursive: true });
|
|
463
|
+
}
|
|
464
|
+
// Store the full context that should be injected (without briefing, that comes later)
|
|
465
|
+
const contextForFallback = contextParts.join('\n\n');
|
|
466
|
+
fs.writeFileSync(compactPendingFile, contextForFallback, 'utf8');
|
|
467
|
+
log(succDir, `Created compact-pending flag (${contextForFallback.length} chars)`);
|
|
468
|
+
} catch (err) {
|
|
469
|
+
log(succDir, `Failed to create compact-pending: ${err.message || err}`);
|
|
470
|
+
}
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
// Generate compact briefing (slow operation - may timeout)
|
|
474
|
+
// Even if this times out, we have the compact-pending fallback above
|
|
475
|
+
if (isCompactEvent && daemonPort && hookInput.transcript_path && !isServiceSession) {
|
|
476
|
+
log(succDir, `Generating compact briefing for ${hookInput.transcript_path}`);
|
|
477
|
+
try {
|
|
478
|
+
const response = await fetch(`http://127.0.0.1:${daemonPort}/api/briefing`, {
|
|
479
|
+
method: 'POST',
|
|
480
|
+
headers: { 'Content-Type': 'application/json' },
|
|
481
|
+
body: JSON.stringify({ transcript_path: hookInput.transcript_path }),
|
|
482
|
+
signal: AbortSignal.timeout(8000), // 8s timeout - must complete before 10s hook timeout
|
|
483
|
+
});
|
|
484
|
+
if (response.ok) {
|
|
485
|
+
const result = await response.json();
|
|
486
|
+
if (result.success && result.briefing) {
|
|
487
|
+
contextParts.push(`<session-briefing source="compact">\n${result.briefing}\n</session-briefing>`);
|
|
488
|
+
log(succDir, `Briefing generated: ${result.briefing.length} chars`);
|
|
489
|
+
} else {
|
|
490
|
+
log(succDir, `Briefing failed: ${result.error || 'no briefing returned'}`);
|
|
491
|
+
}
|
|
492
|
+
} else {
|
|
493
|
+
log(succDir, `Briefing API error: ${response.status} ${response.statusText}`);
|
|
494
|
+
}
|
|
495
|
+
} catch (err) {
|
|
496
|
+
log(succDir, `Briefing exception: ${err.message || err}`);
|
|
497
|
+
// Briefing generation failed, continue without it
|
|
498
|
+
}
|
|
499
|
+
}
|
|
500
|
+
|
|
501
|
+
// Pinned + recent memories via daemon API (only on fresh start, compact uses briefing instead)
|
|
502
|
+
if (daemonPort && !isCompactEvent) {
|
|
503
|
+
const pinnedIds = new Set();
|
|
504
|
+
|
|
505
|
+
// Phase 1: Pinned memories (Tier 1 — correction_count >= 2 or is_invariant)
|
|
506
|
+
// Filter: skip observations (noisy subagent reports), limit to top 10 by priority_score
|
|
507
|
+
try {
|
|
508
|
+
const response = await fetch(`http://127.0.0.1:${daemonPort}/api/pinned`, {
|
|
509
|
+
signal: AbortSignal.timeout(3000),
|
|
510
|
+
});
|
|
511
|
+
if (response.ok) {
|
|
512
|
+
const data = await response.json();
|
|
513
|
+
const allPinned = data.results || [];
|
|
514
|
+
// Display only non-observation pinned, sorted by priority, top 10
|
|
515
|
+
const displayPinned = allPinned
|
|
516
|
+
.filter((m) => m.type !== 'observation')
|
|
517
|
+
.sort((a, b) => (b.priority_score || 0) - (a.priority_score || 0))
|
|
518
|
+
.slice(0, 10);
|
|
519
|
+
if (displayPinned.length > 0) {
|
|
520
|
+
// Track ALL pinned IDs for dedup with recent (including filtered-out observations)
|
|
521
|
+
for (const m of allPinned) pinnedIds.add(m.id);
|
|
522
|
+
const lines = displayPinned.map((m) => {
|
|
523
|
+
const preview = m.content.slice(0, 100).replace(/\n/g, ' ');
|
|
524
|
+
const type = m.type || 'obs';
|
|
525
|
+
const reason = m.is_invariant ? 'invariant' : `corrected x${m.correction_count}`;
|
|
526
|
+
return `#${m.id} [${type}] (${reason}) ${preview}${m.content.length > 100 ? '...' : ''}`;
|
|
527
|
+
});
|
|
528
|
+
contextParts.push(`<pinned-memories count="${displayPinned.length}" total="${allPinned.length}" hint="Tier 1: always loaded, high confidence">\n${lines.join('\n')}\n</pinned-memories>`);
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
} catch {
|
|
532
|
+
// pinned memories not available
|
|
533
|
+
}
|
|
534
|
+
|
|
535
|
+
// Phase 2: Recent memories (excluding pinned to avoid duplication)
|
|
536
|
+
try {
|
|
537
|
+
const response = await fetch(`http://127.0.0.1:${daemonPort}/api/recall`, {
|
|
538
|
+
method: 'POST',
|
|
539
|
+
headers: { 'Content-Type': 'application/json' },
|
|
540
|
+
body: JSON.stringify({ query: '', limit: 5 }),
|
|
541
|
+
signal: AbortSignal.timeout(3000),
|
|
542
|
+
});
|
|
543
|
+
if (response.ok) {
|
|
544
|
+
const data = await response.json();
|
|
545
|
+
const memories = (data.results || []).filter((m) => !pinnedIds.has(m.id));
|
|
546
|
+
if (memories.length > 0) {
|
|
547
|
+
const lines = memories.map((m) => {
|
|
548
|
+
const preview = m.content.slice(0, 50).replace(/\n/g, ' ');
|
|
549
|
+
const type = m.type || 'obs';
|
|
550
|
+
return `#${m.id} [${type}] ${preview}${m.content.length > 50 ? '...' : ''}`;
|
|
551
|
+
});
|
|
552
|
+
contextParts.push(`<recent-memories count="${memories.length}" hint="Use succ_recall for details">\n${lines.join('\n')}\n</recent-memories>`);
|
|
553
|
+
}
|
|
554
|
+
}
|
|
555
|
+
} catch {
|
|
556
|
+
// memories not available
|
|
557
|
+
}
|
|
558
|
+
}
|
|
559
|
+
|
|
560
|
+
// Knowledge base stats via daemon API
|
|
561
|
+
if (daemonPort) {
|
|
562
|
+
try {
|
|
563
|
+
const response = await fetch(`http://127.0.0.1:${daemonPort}/api/status`, {
|
|
564
|
+
signal: AbortSignal.timeout(3000),
|
|
565
|
+
});
|
|
566
|
+
if (response.ok) {
|
|
567
|
+
const status = await response.json();
|
|
568
|
+
const docs = status.documents || 0;
|
|
569
|
+
const mems = status.memories || 0;
|
|
570
|
+
const code = status.codeChunks || 0;
|
|
571
|
+
if (docs > 0 || mems > 0 || code > 0) {
|
|
572
|
+
contextParts.push(`<knowledge-base docs="${docs}" memories="${mems}" code-chunks="${code}" />`);
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
} catch {
|
|
576
|
+
// status not available
|
|
577
|
+
}
|
|
578
|
+
}
|
|
579
|
+
|
|
580
|
+
// Output context
|
|
581
|
+
if (contextParts.length > 0) {
|
|
582
|
+
const additionalContext = `<session project="${projectName}">\n${contextParts.join('\n\n')}\n</session>`;
|
|
583
|
+
const output = {
|
|
584
|
+
hookSpecificOutput: {
|
|
585
|
+
hookEventName: 'SessionStart',
|
|
586
|
+
additionalContext
|
|
587
|
+
}
|
|
588
|
+
};
|
|
589
|
+
console.log(JSON.stringify(output));
|
|
590
|
+
log(succDir, `Output additionalContext: ${additionalContext.length} chars, parts=${contextParts.length}`);
|
|
591
|
+
} else {
|
|
592
|
+
log(succDir, `No context parts to output`);
|
|
593
|
+
}
|
|
594
|
+
|
|
595
|
+
// Register session with daemon
|
|
596
|
+
if (daemonPort) {
|
|
597
|
+
const transcriptPath = hookInput.transcript_path || '';
|
|
598
|
+
const sessionId = transcriptPath ? path.basename(transcriptPath, '.jsonl') : `session-${Date.now()}`;
|
|
599
|
+
// isServiceSession already defined above
|
|
600
|
+
|
|
601
|
+
try {
|
|
602
|
+
await fetch(`http://127.0.0.1:${daemonPort}/api/session/register`, {
|
|
603
|
+
method: 'POST',
|
|
604
|
+
headers: { 'Content-Type': 'application/json' },
|
|
605
|
+
body: JSON.stringify({ session_id: sessionId, transcript_path: transcriptPath, is_service: isServiceSession }),
|
|
606
|
+
signal: AbortSignal.timeout(3000),
|
|
607
|
+
});
|
|
608
|
+
} catch {
|
|
609
|
+
// Registration failed, continue anyway
|
|
610
|
+
}
|
|
611
|
+
}
|
|
612
|
+
|
|
613
|
+
process.exit(0);
|
|
614
|
+
|
|
615
|
+
} catch (err) {
|
|
616
|
+
process.exit(0);
|
|
617
|
+
}
|
|
618
|
+
});
|