@actalk/inkos-core 1.3.6 → 1.3.7
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/dist/agent/agent-session.d.ts +7 -7
- package/dist/agent/agent-session.d.ts.map +1 -1
- package/dist/agent/agent-session.js +392 -63
- package/dist/agent/agent-session.js.map +1 -1
- package/dist/agent/agent-system-prompt.d.ts.map +1 -1
- package/dist/agent/agent-system-prompt.js +20 -16
- package/dist/agent/agent-system-prompt.js.map +1 -1
- package/dist/agent/agent-tools.d.ts +4 -1
- package/dist/agent/agent-tools.d.ts.map +1 -1
- package/dist/agent/agent-tools.js +81 -64
- package/dist/agent/agent-tools.js.map +1 -1
- package/dist/agents/architect.d.ts +18 -20
- package/dist/agents/architect.d.ts.map +1 -1
- package/dist/agents/architect.js +513 -632
- package/dist/agents/architect.js.map +1 -1
- package/dist/agents/chapter-analyzer.d.ts.map +1 -1
- package/dist/agents/chapter-analyzer.js +10 -6
- package/dist/agents/chapter-analyzer.js.map +1 -1
- package/dist/agents/composer.d.ts +1 -13
- package/dist/agents/composer.d.ts.map +1 -1
- package/dist/agents/composer.js +297 -290
- package/dist/agents/composer.js.map +1 -1
- package/dist/agents/consolidator.d.ts +17 -1
- package/dist/agents/consolidator.d.ts.map +1 -1
- package/dist/agents/consolidator.js +44 -6
- package/dist/agents/consolidator.js.map +1 -1
- package/dist/agents/continuity.d.ts +4 -1
- package/dist/agents/continuity.d.ts.map +1 -1
- package/dist/agents/continuity.js +111 -21
- package/dist/agents/continuity.js.map +1 -1
- package/dist/agents/length-normalizer.d.ts.map +1 -1
- package/dist/agents/length-normalizer.js +1 -4
- package/dist/agents/length-normalizer.js.map +1 -1
- package/dist/agents/planner-context.d.ts +54 -0
- package/dist/agents/planner-context.d.ts.map +1 -0
- package/dist/agents/planner-context.js +245 -0
- package/dist/agents/planner-context.js.map +1 -0
- package/dist/agents/planner-prompts.d.ts +36 -0
- package/dist/agents/planner-prompts.d.ts.map +1 -0
- package/dist/agents/planner-prompts.js +350 -0
- package/dist/agents/planner-prompts.js.map +1 -0
- package/dist/agents/planner.d.ts +39 -11
- package/dist/agents/planner.d.ts.map +1 -1
- package/dist/agents/planner.js +212 -195
- package/dist/agents/planner.js.map +1 -1
- package/dist/agents/polisher.d.ts +33 -0
- package/dist/agents/polisher.d.ts.map +1 -0
- package/dist/agents/polisher.js +122 -0
- package/dist/agents/polisher.js.map +1 -0
- package/dist/agents/post-write-validator.d.ts +1 -0
- package/dist/agents/post-write-validator.d.ts.map +1 -1
- package/dist/agents/post-write-validator.js +13 -0
- package/dist/agents/post-write-validator.js.map +1 -1
- package/dist/agents/reviser.d.ts +6 -2
- package/dist/agents/reviser.d.ts.map +1 -1
- package/dist/agents/reviser.js +379 -98
- package/dist/agents/reviser.js.map +1 -1
- package/dist/agents/rules-reader.d.ts +15 -2
- package/dist/agents/rules-reader.d.ts.map +1 -1
- package/dist/agents/rules-reader.js +49 -6
- package/dist/agents/rules-reader.js.map +1 -1
- package/dist/agents/state-validator.d.ts +9 -1
- package/dist/agents/state-validator.d.ts.map +1 -1
- package/dist/agents/state-validator.js +37 -1
- package/dist/agents/state-validator.js.map +1 -1
- package/dist/agents/writer-prompts.d.ts +1 -0
- package/dist/agents/writer-prompts.d.ts.map +1 -1
- package/dist/agents/writer-prompts.js +272 -29
- package/dist/agents/writer-prompts.js.map +1 -1
- package/dist/agents/writer.d.ts +12 -3
- package/dist/agents/writer.d.ts.map +1 -1
- package/dist/agents/writer.js +77 -107
- package/dist/agents/writer.js.map +1 -1
- package/dist/index.d.ts +20 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -5
- package/dist/index.js.map +1 -1
- package/dist/interaction/book-session-store.d.ts.map +1 -1
- package/dist/interaction/book-session-store.js +84 -69
- package/dist/interaction/book-session-store.js.map +1 -1
- package/dist/interaction/events.d.ts +2 -2
- package/dist/interaction/project-tools.d.ts +1 -0
- package/dist/interaction/project-tools.d.ts.map +1 -1
- package/dist/interaction/project-tools.js +51 -3
- package/dist/interaction/project-tools.js.map +1 -1
- package/dist/interaction/session-transcript-legacy.d.ts +4 -0
- package/dist/interaction/session-transcript-legacy.d.ts.map +1 -0
- package/dist/interaction/session-transcript-legacy.js +100 -0
- package/dist/interaction/session-transcript-legacy.js.map +1 -0
- package/dist/interaction/session-transcript-restore.d.ts +17 -0
- package/dist/interaction/session-transcript-restore.d.ts.map +1 -0
- package/dist/interaction/session-transcript-restore.js +493 -0
- package/dist/interaction/session-transcript-restore.js.map +1 -0
- package/dist/interaction/session-transcript-schema.d.ts +402 -0
- package/dist/interaction/session-transcript-schema.d.ts.map +1 -0
- package/dist/interaction/session-transcript-schema.js +59 -0
- package/dist/interaction/session-transcript-schema.js.map +1 -0
- package/dist/interaction/session-transcript.d.ts +14 -0
- package/dist/interaction/session-transcript.d.ts.map +1 -0
- package/dist/interaction/session-transcript.js +152 -0
- package/dist/interaction/session-transcript.js.map +1 -0
- package/dist/interaction/session.d.ts +10 -10
- package/dist/interaction/session.d.ts.map +1 -1
- package/dist/interaction/session.js +5 -3
- package/dist/interaction/session.js.map +1 -1
- package/dist/llm/provider.d.ts +6 -9
- package/dist/llm/provider.d.ts.map +1 -1
- package/dist/llm/provider.js +255 -63
- package/dist/llm/provider.js.map +1 -1
- package/dist/llm/providers/endpoints/ai360.d.ts +10 -0
- package/dist/llm/providers/endpoints/ai360.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/ai360.js +34 -0
- package/dist/llm/providers/endpoints/ai360.js.map +1 -0
- package/dist/llm/providers/endpoints/anthropic.d.ts +12 -0
- package/dist/llm/providers/endpoints/anthropic.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/anthropic.js +72 -0
- package/dist/llm/providers/endpoints/anthropic.js.map +1 -0
- package/dist/llm/providers/endpoints/astronCodingPlan.d.ts +16 -0
- package/dist/llm/providers/endpoints/astronCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/astronCodingPlan.js +16 -0
- package/dist/llm/providers/endpoints/astronCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/baichuan.d.ts +10 -0
- package/dist/llm/providers/endpoints/baichuan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/baichuan.js +20 -0
- package/dist/llm/providers/endpoints/baichuan.js.map +1 -0
- package/dist/llm/providers/endpoints/bailian.d.ts +25 -0
- package/dist/llm/providers/endpoints/bailian.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/bailian.js +42 -0
- package/dist/llm/providers/endpoints/bailian.js.map +1 -0
- package/dist/llm/providers/endpoints/bailianCodingPlan.d.ts +10 -0
- package/dist/llm/providers/endpoints/bailianCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/bailianCodingPlan.js +22 -0
- package/dist/llm/providers/endpoints/bailianCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/custom.d.ts +16 -0
- package/dist/llm/providers/endpoints/custom.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/custom.js +15 -0
- package/dist/llm/providers/endpoints/custom.js.map +1 -0
- package/dist/llm/providers/endpoints/deepseek.d.ts +17 -0
- package/dist/llm/providers/endpoints/deepseek.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/deepseek.js +20 -0
- package/dist/llm/providers/endpoints/deepseek.js.map +1 -0
- package/dist/llm/providers/endpoints/giteeai.d.ts +10 -0
- package/dist/llm/providers/endpoints/giteeai.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/giteeai.js +33 -0
- package/dist/llm/providers/endpoints/giteeai.js.map +1 -0
- package/dist/llm/providers/endpoints/githubCopilot.d.ts +10 -0
- package/dist/llm/providers/endpoints/githubCopilot.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/githubCopilot.js +35 -0
- package/dist/llm/providers/endpoints/githubCopilot.js.map +1 -0
- package/dist/llm/providers/endpoints/glmCodingPlan.d.ts +9 -0
- package/dist/llm/providers/endpoints/glmCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/glmCodingPlan.js +21 -0
- package/dist/llm/providers/endpoints/glmCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/google.d.ts +12 -0
- package/dist/llm/providers/endpoints/google.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/google.js +41 -0
- package/dist/llm/providers/endpoints/google.js.map +1 -0
- package/dist/llm/providers/endpoints/hunyuan.d.ts +10 -0
- package/dist/llm/providers/endpoints/hunyuan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/hunyuan.js +34 -0
- package/dist/llm/providers/endpoints/hunyuan.js.map +1 -0
- package/dist/llm/providers/endpoints/infiniai.d.ts +10 -0
- package/dist/llm/providers/endpoints/infiniai.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/infiniai.js +64 -0
- package/dist/llm/providers/endpoints/infiniai.js.map +1 -0
- package/dist/llm/providers/endpoints/internlm.d.ts +10 -0
- package/dist/llm/providers/endpoints/internlm.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/internlm.js +20 -0
- package/dist/llm/providers/endpoints/internlm.js.map +1 -0
- package/dist/llm/providers/endpoints/kimiCodingPlan.d.ts +9 -0
- package/dist/llm/providers/endpoints/kimiCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/kimiCodingPlan.js +17 -0
- package/dist/llm/providers/endpoints/kimiCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/longcat.d.ts +9 -0
- package/dist/llm/providers/endpoints/longcat.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/longcat.js +18 -0
- package/dist/llm/providers/endpoints/longcat.js.map +1 -0
- package/dist/llm/providers/endpoints/minimax.d.ts +15 -0
- package/dist/llm/providers/endpoints/minimax.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/minimax.js +26 -0
- package/dist/llm/providers/endpoints/minimax.js.map +1 -0
- package/dist/llm/providers/endpoints/minimaxCodingPlan.d.ts +9 -0
- package/dist/llm/providers/endpoints/minimaxCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/minimaxCodingPlan.js +21 -0
- package/dist/llm/providers/endpoints/minimaxCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/mistral.d.ts +11 -0
- package/dist/llm/providers/endpoints/mistral.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/mistral.js +31 -0
- package/dist/llm/providers/endpoints/mistral.js.map +1 -0
- package/dist/llm/providers/endpoints/modelscope.d.ts +10 -0
- package/dist/llm/providers/endpoints/modelscope.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/modelscope.js +22 -0
- package/dist/llm/providers/endpoints/modelscope.js.map +1 -0
- package/dist/llm/providers/endpoints/moonshot.d.ts +12 -0
- package/dist/llm/providers/endpoints/moonshot.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/moonshot.js +29 -0
- package/dist/llm/providers/endpoints/moonshot.js.map +1 -0
- package/dist/llm/providers/endpoints/newapi.d.ts +14 -0
- package/dist/llm/providers/endpoints/newapi.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/newapi.js +14 -0
- package/dist/llm/providers/endpoints/newapi.js.map +1 -0
- package/dist/llm/providers/endpoints/ollama.d.ts +12 -0
- package/dist/llm/providers/endpoints/ollama.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/ollama.js +63 -0
- package/dist/llm/providers/endpoints/ollama.js.map +1 -0
- package/dist/llm/providers/endpoints/openai.d.ts +12 -0
- package/dist/llm/providers/endpoints/openai.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/openai.js +67 -0
- package/dist/llm/providers/endpoints/openai.js.map +1 -0
- package/dist/llm/providers/endpoints/opencodeCodingPlan.d.ts +9 -0
- package/dist/llm/providers/endpoints/opencodeCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/opencodeCodingPlan.js +23 -0
- package/dist/llm/providers/endpoints/opencodeCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/openrouter.d.ts +15 -0
- package/dist/llm/providers/endpoints/openrouter.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/openrouter.js +74 -0
- package/dist/llm/providers/endpoints/openrouter.js.map +1 -0
- package/dist/llm/providers/endpoints/ppio.d.ts +15 -0
- package/dist/llm/providers/endpoints/ppio.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/ppio.js +73 -0
- package/dist/llm/providers/endpoints/ppio.js.map +1 -0
- package/dist/llm/providers/endpoints/qiniu.d.ts +10 -0
- package/dist/llm/providers/endpoints/qiniu.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/qiniu.js +24 -0
- package/dist/llm/providers/endpoints/qiniu.js.map +1 -0
- package/dist/llm/providers/endpoints/sensenova.d.ts +10 -0
- package/dist/llm/providers/endpoints/sensenova.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/sensenova.js +37 -0
- package/dist/llm/providers/endpoints/sensenova.js.map +1 -0
- package/dist/llm/providers/endpoints/siliconcloud.d.ts +14 -0
- package/dist/llm/providers/endpoints/siliconcloud.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/siliconcloud.js +114 -0
- package/dist/llm/providers/endpoints/siliconcloud.js.map +1 -0
- package/dist/llm/providers/endpoints/spark.d.ts +14 -0
- package/dist/llm/providers/endpoints/spark.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/spark.js +21 -0
- package/dist/llm/providers/endpoints/spark.js.map +1 -0
- package/dist/llm/providers/endpoints/stepfun.d.ts +10 -0
- package/dist/llm/providers/endpoints/stepfun.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/stepfun.js +27 -0
- package/dist/llm/providers/endpoints/stepfun.js.map +1 -0
- package/dist/llm/providers/endpoints/tencentcloud.d.ts +10 -0
- package/dist/llm/providers/endpoints/tencentcloud.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/tencentcloud.js +17 -0
- package/dist/llm/providers/endpoints/tencentcloud.js.map +1 -0
- package/dist/llm/providers/endpoints/volcengine.d.ts +10 -0
- package/dist/llm/providers/endpoints/volcengine.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/volcengine.js +44 -0
- package/dist/llm/providers/endpoints/volcengine.js.map +1 -0
- package/dist/llm/providers/endpoints/volcengineCodingPlan.d.ts +19 -0
- package/dist/llm/providers/endpoints/volcengineCodingPlan.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/volcengineCodingPlan.js +25 -0
- package/dist/llm/providers/endpoints/volcengineCodingPlan.js.map +1 -0
- package/dist/llm/providers/endpoints/wenxin.d.ts +10 -0
- package/dist/llm/providers/endpoints/wenxin.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/wenxin.js +98 -0
- package/dist/llm/providers/endpoints/wenxin.js.map +1 -0
- package/dist/llm/providers/endpoints/xai.d.ts +11 -0
- package/dist/llm/providers/endpoints/xai.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/xai.js +25 -0
- package/dist/llm/providers/endpoints/xai.js.map +1 -0
- package/dist/llm/providers/endpoints/xiaomimimo.d.ts +12 -0
- package/dist/llm/providers/endpoints/xiaomimimo.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/xiaomimimo.js +16 -0
- package/dist/llm/providers/endpoints/xiaomimimo.js.map +1 -0
- package/dist/llm/providers/endpoints/zeroone.d.ts +10 -0
- package/dist/llm/providers/endpoints/zeroone.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/zeroone.js +26 -0
- package/dist/llm/providers/endpoints/zeroone.js.map +1 -0
- package/dist/llm/providers/endpoints/zhipu.d.ts +12 -0
- package/dist/llm/providers/endpoints/zhipu.d.ts.map +1 -0
- package/dist/llm/providers/endpoints/zhipu.js +51 -0
- package/dist/llm/providers/endpoints/zhipu.js.map +1 -0
- package/dist/llm/providers/index.d.ts +5 -0
- package/dist/llm/providers/index.d.ts.map +1 -0
- package/dist/llm/providers/index.js +67 -0
- package/dist/llm/providers/index.js.map +1 -0
- package/dist/llm/providers/lookup.d.ts +16 -0
- package/dist/llm/providers/lookup.d.ts.map +1 -0
- package/dist/llm/providers/lookup.js +68 -0
- package/dist/llm/providers/lookup.js.map +1 -0
- package/dist/llm/providers/probe.d.ts +11 -0
- package/dist/llm/providers/probe.d.ts.map +1 -0
- package/dist/llm/providers/probe.js +24 -0
- package/dist/llm/providers/probe.js.map +1 -0
- package/dist/llm/providers/types.d.ts +71 -0
- package/dist/llm/providers/types.d.ts.map +1 -0
- package/dist/llm/providers/types.js +9 -0
- package/dist/llm/providers/types.js.map +1 -0
- package/dist/llm/providers/verify.d.ts +27 -0
- package/dist/llm/providers/verify.d.ts.map +1 -0
- package/dist/llm/providers/verify.js +77 -0
- package/dist/llm/providers/verify.js.map +1 -0
- package/dist/llm/secrets.d.ts.map +1 -1
- package/dist/llm/secrets.js +27 -2
- package/dist/llm/secrets.js.map +1 -1
- package/dist/llm/service-presets.d.ts +13 -3
- package/dist/llm/service-presets.d.ts.map +1 -1
- package/dist/llm/service-presets.js +78 -42
- package/dist/llm/service-presets.js.map +1 -1
- package/dist/llm/service-resolver.d.ts +1 -1
- package/dist/llm/service-resolver.d.ts.map +1 -1
- package/dist/llm/service-resolver.js +13 -0
- package/dist/llm/service-resolver.js.map +1 -1
- package/dist/models/book-rules.d.ts +23 -1
- package/dist/models/book-rules.d.ts.map +1 -1
- package/dist/models/book-rules.js +54 -2
- package/dist/models/book-rules.js.map +1 -1
- package/dist/models/input-governance.d.ts +20 -244
- package/dist/models/input-governance.d.ts.map +1 -1
- package/dist/models/input-governance.js +7 -51
- package/dist/models/input-governance.js.map +1 -1
- package/dist/models/project.d.ts +29 -28
- package/dist/models/project.d.ts.map +1 -1
- package/dist/models/project.js +11 -9
- package/dist/models/project.js.map +1 -1
- package/dist/models/runtime-state.d.ts +120 -0
- package/dist/models/runtime-state.d.ts.map +1 -1
- package/dist/models/runtime-state.js +12 -0
- package/dist/models/runtime-state.js.map +1 -1
- package/dist/pipeline/agent.d.ts.map +1 -1
- package/dist/pipeline/agent.js +59 -10
- package/dist/pipeline/agent.js.map +1 -1
- package/dist/pipeline/chapter-review-cycle.d.ts +11 -4
- package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -1
- package/dist/pipeline/chapter-review-cycle.js +156 -73
- package/dist/pipeline/chapter-review-cycle.js.map +1 -1
- package/dist/pipeline/chapter-truth-validation.d.ts +2 -1
- package/dist/pipeline/chapter-truth-validation.d.ts.map +1 -1
- package/dist/pipeline/chapter-truth-validation.js +1 -1
- package/dist/pipeline/chapter-truth-validation.js.map +1 -1
- package/dist/pipeline/persisted-governed-plan.d.ts +1 -0
- package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -1
- package/dist/pipeline/persisted-governed-plan.js +181 -66
- package/dist/pipeline/persisted-governed-plan.js.map +1 -1
- package/dist/pipeline/runner.d.ts +20 -17
- package/dist/pipeline/runner.d.ts.map +1 -1
- package/dist/pipeline/runner.js +359 -84
- package/dist/pipeline/runner.js.map +1 -1
- package/dist/state/manager.d.ts.map +1 -1
- package/dist/state/manager.js +44 -4
- package/dist/state/manager.js.map +1 -1
- package/dist/state/memory-db.d.ts +6 -0
- package/dist/state/memory-db.d.ts.map +1 -1
- package/dist/state/memory-db.js.map +1 -1
- package/dist/state/runtime-state-store.d.ts.map +1 -1
- package/dist/state/runtime-state-store.js +4 -1
- package/dist/state/runtime-state-store.js.map +1 -1
- package/dist/state/state-projections.d.ts +3 -1
- package/dist/state/state-projections.d.ts.map +1 -1
- package/dist/state/state-projections.js +58 -15
- package/dist/state/state-projections.js.map +1 -1
- package/dist/utils/book-id.d.ts +4 -0
- package/dist/utils/book-id.d.ts.map +1 -0
- package/dist/utils/book-id.js +27 -0
- package/dist/utils/book-id.js.map +1 -0
- package/dist/utils/chapter-cadence.js +1 -0
- package/dist/utils/chapter-cadence.js.map +1 -1
- package/dist/utils/chapter-memo-parser.d.ts +19 -0
- package/dist/utils/chapter-memo-parser.d.ts.map +1 -0
- package/dist/utils/chapter-memo-parser.js +114 -0
- package/dist/utils/chapter-memo-parser.js.map +1 -0
- package/dist/utils/config-loader.d.ts +7 -11
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +13 -253
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/context-assembly.d.ts +24 -0
- package/dist/utils/context-assembly.d.ts.map +1 -0
- package/dist/utils/context-assembly.js +77 -0
- package/dist/utils/context-assembly.js.map +1 -0
- package/dist/utils/effective-llm-config.d.ts +34 -0
- package/dist/utils/effective-llm-config.d.ts.map +1 -0
- package/dist/utils/effective-llm-config.js +417 -0
- package/dist/utils/effective-llm-config.js.map +1 -0
- package/dist/utils/governed-working-set.js +1 -1
- package/dist/utils/governed-working-set.js.map +1 -1
- package/dist/utils/hook-ledger-validator.d.ts +82 -0
- package/dist/utils/hook-ledger-validator.d.ts.map +1 -0
- package/dist/utils/hook-ledger-validator.js +225 -0
- package/dist/utils/hook-ledger-validator.js.map +1 -0
- package/dist/utils/hook-lifecycle.d.ts +5 -0
- package/dist/utils/hook-lifecycle.d.ts.map +1 -1
- package/dist/utils/hook-lifecycle.js +32 -0
- package/dist/utils/hook-lifecycle.js.map +1 -1
- package/dist/utils/hook-policy.d.ts +0 -17
- package/dist/utils/hook-policy.d.ts.map +1 -1
- package/dist/utils/hook-policy.js +0 -30
- package/dist/utils/hook-policy.js.map +1 -1
- package/dist/utils/hook-promotion.d.ts +83 -0
- package/dist/utils/hook-promotion.d.ts.map +1 -0
- package/dist/utils/hook-promotion.js +241 -0
- package/dist/utils/hook-promotion.js.map +1 -0
- package/dist/utils/hook-stale-detection.d.ts +51 -0
- package/dist/utils/hook-stale-detection.d.ts.map +1 -0
- package/dist/utils/hook-stale-detection.js +125 -0
- package/dist/utils/hook-stale-detection.js.map +1 -0
- package/dist/utils/llm-endpoint-auth.d.ts +5 -0
- package/dist/utils/llm-endpoint-auth.d.ts.map +1 -0
- package/dist/utils/llm-endpoint-auth.js +36 -0
- package/dist/utils/llm-endpoint-auth.js.map +1 -0
- package/dist/utils/llm-env.d.ts +14 -0
- package/dist/utils/llm-env.d.ts.map +1 -0
- package/dist/utils/llm-env.js +53 -0
- package/dist/utils/llm-env.js.map +1 -0
- package/dist/utils/memory-retrieval.d.ts +23 -1
- package/dist/utils/memory-retrieval.d.ts.map +1 -1
- package/dist/utils/memory-retrieval.js +45 -2
- package/dist/utils/memory-retrieval.js.map +1 -1
- package/dist/utils/narrative-control.d.ts +16 -0
- package/dist/utils/narrative-control.d.ts.map +1 -0
- package/dist/utils/narrative-control.js +131 -0
- package/dist/utils/narrative-control.js.map +1 -0
- package/dist/utils/path-safety.d.ts +2 -0
- package/dist/utils/path-safety.d.ts.map +1 -0
- package/dist/utils/path-safety.js +11 -0
- package/dist/utils/path-safety.js.map +1 -0
- package/dist/utils/planning-materials.d.ts +35 -0
- package/dist/utils/planning-materials.d.ts.map +1 -0
- package/dist/utils/planning-materials.js +123 -0
- package/dist/utils/planning-materials.js.map +1 -0
- package/dist/utils/proxy-fetch.d.ts +9 -0
- package/dist/utils/proxy-fetch.d.ts.map +1 -0
- package/dist/utils/proxy-fetch.js +31 -0
- package/dist/utils/proxy-fetch.js.map +1 -0
- package/dist/utils/runtime-writer.d.ts +14 -0
- package/dist/utils/runtime-writer.d.ts.map +1 -0
- package/dist/utils/runtime-writer.js +21 -0
- package/dist/utils/runtime-writer.js.map +1 -0
- package/dist/utils/spot-fix-patches.d.ts +7 -0
- package/dist/utils/spot-fix-patches.d.ts.map +1 -1
- package/dist/utils/spot-fix-patches.js +109 -36
- package/dist/utils/spot-fix-patches.js.map +1 -1
- package/dist/utils/story-markdown.d.ts.map +1 -1
- package/dist/utils/story-markdown.js +104 -6
- package/dist/utils/story-markdown.js.map +1 -1
- package/dist/utils/writing-methodology.d.ts +10 -0
- package/dist/utils/writing-methodology.d.ts.map +1 -0
- package/dist/utils/writing-methodology.js +163 -0
- package/dist/utils/writing-methodology.js.map +1 -0
- package/package.json +3 -2
- package/dist/utils/hook-agenda.d.ts +0 -21
- package/dist/utils/hook-agenda.d.ts.map +0 -1
- package/dist/utils/hook-agenda.js +0 -95
- package/dist/utils/hook-agenda.js.map +0 -1
|
@@ -0,0 +1,241 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 7 — hook promotion rules.
|
|
3
|
+
*
|
|
4
|
+
* Architect produces a pool of hook seeds (every row in the initial
|
|
5
|
+
* pending_hooks table is conceptually a seed). Not every seed belongs in
|
|
6
|
+
* the live `pending_hooks.md` ledger — pushing all of them there turns the
|
|
7
|
+
* ledger into noise within a few chapters.
|
|
8
|
+
*
|
|
9
|
+
* A seed is *promoted* into the ledger when any of these four conditions
|
|
10
|
+
* holds. The consolidator (maintains pending_hooks.md post-chapter) calls
|
|
11
|
+
* `shouldPromoteHook` for every tracked seed, and the ledger retains only
|
|
12
|
+
* the hooks that cross the threshold.
|
|
13
|
+
*
|
|
14
|
+
* 1. cross_volume — the hook spans volume boundaries. It either pays off
|
|
15
|
+
* in a later volume, or depends on hooks declared in a later volume.
|
|
16
|
+
* 2. advanced_count >= 2 — the hook has been advanced/pushed in two or
|
|
17
|
+
* more chapters since planting, proving readers already track it.
|
|
18
|
+
* 3. depends_on non-empty — the hook has upstream causal dependencies
|
|
19
|
+
* worth tracking, even if it hasn't been touched recently.
|
|
20
|
+
* 4. core_hook === true — architect marked this hook as main-line
|
|
21
|
+
* load-bearing; it always belongs in the ledger.
|
|
22
|
+
*/
|
|
23
|
+
export function shouldPromoteHook(hook, context) {
|
|
24
|
+
const reasons = [];
|
|
25
|
+
if (hook.coreHook === true) {
|
|
26
|
+
reasons.push("core_hook");
|
|
27
|
+
}
|
|
28
|
+
if ((hook.dependsOn?.length ?? 0) > 0) {
|
|
29
|
+
reasons.push("depends_on");
|
|
30
|
+
}
|
|
31
|
+
const advancedCount = hook.advancedCount
|
|
32
|
+
?? context.advancedCounts.get(hook.hookId)
|
|
33
|
+
?? 0;
|
|
34
|
+
if (advancedCount >= 2) {
|
|
35
|
+
reasons.push("advanced_count");
|
|
36
|
+
}
|
|
37
|
+
if (isCrossVolume(hook, context)) {
|
|
38
|
+
reasons.push("cross_volume");
|
|
39
|
+
}
|
|
40
|
+
return {
|
|
41
|
+
promote: reasons.length > 0,
|
|
42
|
+
reasons,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function isCrossVolume(hook, context) {
|
|
46
|
+
const { volumeBoundaries, allSeedStartChapters } = context;
|
|
47
|
+
if (volumeBoundaries.length < 2)
|
|
48
|
+
return false;
|
|
49
|
+
const seedVolumeIndex = findVolumeIndex(volumeBoundaries, hook.startChapter);
|
|
50
|
+
if (seedVolumeIndex < 0)
|
|
51
|
+
return false;
|
|
52
|
+
// Case A: upstream hook is declared in a later volume than this seed.
|
|
53
|
+
for (const upstreamId of hook.dependsOn ?? []) {
|
|
54
|
+
const upstreamStart = allSeedStartChapters.get(upstreamId);
|
|
55
|
+
if (upstreamStart === undefined)
|
|
56
|
+
continue;
|
|
57
|
+
const upstreamVolumeIndex = findVolumeIndex(volumeBoundaries, upstreamStart);
|
|
58
|
+
if (upstreamVolumeIndex > seedVolumeIndex)
|
|
59
|
+
return true;
|
|
60
|
+
}
|
|
61
|
+
// Case B: pays_off_in_arc mentions a different volume. We stay prose-friendly
|
|
62
|
+
// and only detect obvious "第 N 卷" / "volume N" tokens. When parsing fails
|
|
63
|
+
// we fall back to payoff timing heuristics.
|
|
64
|
+
const arcVolumeIndex = extractVolumeIndexFromArc(hook.paysOffInArc ?? "");
|
|
65
|
+
if (arcVolumeIndex !== null && arcVolumeIndex !== seedVolumeIndex) {
|
|
66
|
+
return true;
|
|
67
|
+
}
|
|
68
|
+
// Case C: payoff timing marks it as endgame / slow-burn while the hook is
|
|
69
|
+
// planted in an early volume — that alone qualifies as cross-volume.
|
|
70
|
+
if ((hook.payoffTiming === "endgame" || hook.payoffTiming === "slow-burn")
|
|
71
|
+
&& seedVolumeIndex < volumeBoundaries.length - 1) {
|
|
72
|
+
return true;
|
|
73
|
+
}
|
|
74
|
+
return false;
|
|
75
|
+
}
|
|
76
|
+
function findVolumeIndex(boundaries, chapter) {
|
|
77
|
+
for (let i = 0; i < boundaries.length; i++) {
|
|
78
|
+
const vol = boundaries[i];
|
|
79
|
+
if (chapter >= vol.startCh && chapter <= vol.endCh)
|
|
80
|
+
return i;
|
|
81
|
+
}
|
|
82
|
+
// Chapter 0 (seed time) counts as volume 0 if volumes start at 1.
|
|
83
|
+
if (chapter <= 0 && boundaries.length > 0)
|
|
84
|
+
return 0;
|
|
85
|
+
return -1;
|
|
86
|
+
}
|
|
87
|
+
const VOLUME_PATTERNS = [
|
|
88
|
+
/第\s*([一二三四五六七八九十百千\d]+)\s*卷/u,
|
|
89
|
+
/volume\s+(\d+)/i,
|
|
90
|
+
/vol\.?\s*(\d+)/i,
|
|
91
|
+
];
|
|
92
|
+
function extractVolumeIndexFromArc(arc) {
|
|
93
|
+
const trimmed = arc.trim();
|
|
94
|
+
if (!trimmed)
|
|
95
|
+
return null;
|
|
96
|
+
for (const pattern of VOLUME_PATTERNS) {
|
|
97
|
+
const match = trimmed.match(pattern);
|
|
98
|
+
if (!match)
|
|
99
|
+
continue;
|
|
100
|
+
const token = match[1] ?? "";
|
|
101
|
+
const n = parseVolumeNumber(token);
|
|
102
|
+
if (n !== null)
|
|
103
|
+
return n - 1; // 1-indexed in prose, 0-indexed here.
|
|
104
|
+
}
|
|
105
|
+
return null;
|
|
106
|
+
}
|
|
107
|
+
const CHINESE_NUMERALS = {
|
|
108
|
+
一: 1, 二: 2, 三: 3, 四: 4, 五: 5,
|
|
109
|
+
六: 6, 七: 7, 八: 8, 九: 9, 十: 10,
|
|
110
|
+
};
|
|
111
|
+
function parseVolumeNumber(token) {
|
|
112
|
+
if (/^\d+$/.test(token))
|
|
113
|
+
return parseInt(token, 10);
|
|
114
|
+
if (token.length === 1 && CHINESE_NUMERALS[token])
|
|
115
|
+
return CHINESE_NUMERALS[token];
|
|
116
|
+
if (token === "十")
|
|
117
|
+
return 10;
|
|
118
|
+
return null;
|
|
119
|
+
}
|
|
120
|
+
/**
|
|
121
|
+
* Derive the default half-life (in chapters) for a hook that did not set it
|
|
122
|
+
* explicitly. Mirrors the prompt defaults: immediate/near-term = 10,
|
|
123
|
+
* mid-arc = 30, slow-burn/endgame = 80. Unknown timing falls to mid-arc.
|
|
124
|
+
*/
|
|
125
|
+
export function defaultHalfLifeChapters(payoffTiming) {
|
|
126
|
+
switch (payoffTiming) {
|
|
127
|
+
case "immediate":
|
|
128
|
+
case "near-term":
|
|
129
|
+
return 10;
|
|
130
|
+
case "slow-burn":
|
|
131
|
+
case "endgame":
|
|
132
|
+
return 80;
|
|
133
|
+
case "mid-arc":
|
|
134
|
+
default:
|
|
135
|
+
return 30;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
export function resolveHalfLifeChapters(hook) {
|
|
139
|
+
return hook.halfLifeChapters ?? defaultHalfLifeChapters(hook.payoffTiming);
|
|
140
|
+
}
|
|
141
|
+
// ---------------------------------------------------------------------------
|
|
142
|
+
// Shared advanced_count promotion pass (used by both consolidator and runner)
|
|
143
|
+
// ---------------------------------------------------------------------------
|
|
144
|
+
/**
|
|
145
|
+
* Escape special regex characters in a string so it can be used as a
|
|
146
|
+
* literal pattern inside `new RegExp(...)`.
|
|
147
|
+
*/
|
|
148
|
+
export function escapeRegex(s) {
|
|
149
|
+
return s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Derive hook advancement counts from chapter_summaries.md content.
|
|
153
|
+
*
|
|
154
|
+
* Counts how many chapter-summary data rows mention each hook id in the
|
|
155
|
+
* hookActivity column (index 5, 0-based — "伏笔动态" / "hookActivity").
|
|
156
|
+
*/
|
|
157
|
+
export function deriveAdvancedCountsFromSummaries(summariesRaw, hookIds) {
|
|
158
|
+
const counts = new Map();
|
|
159
|
+
if (!summariesRaw.trim() || hookIds.length === 0)
|
|
160
|
+
return counts;
|
|
161
|
+
const lines = summariesRaw.split("\n");
|
|
162
|
+
// Detect hookActivity column index from the header row.
|
|
163
|
+
const hookActivityIndex = detectHookActivityColumnIndex(lines);
|
|
164
|
+
for (const hookId of hookIds) {
|
|
165
|
+
const escaped = escapeRegex(hookId);
|
|
166
|
+
const pattern = new RegExp(`\\b${escaped}\\b`, "i");
|
|
167
|
+
let count = 0;
|
|
168
|
+
for (const line of lines) {
|
|
169
|
+
if (!line.startsWith("|"))
|
|
170
|
+
continue;
|
|
171
|
+
// Skip header / separator rows.
|
|
172
|
+
if (line.includes("---") || /\|\s*(章节|Chapter)\s*\|/i.test(line))
|
|
173
|
+
continue;
|
|
174
|
+
// Only match in the hookActivity column, not the full row.
|
|
175
|
+
const cell = extractColumn(line, hookActivityIndex);
|
|
176
|
+
if (cell !== null && pattern.test(cell))
|
|
177
|
+
count += 1;
|
|
178
|
+
}
|
|
179
|
+
if (count > 0)
|
|
180
|
+
counts.set(hookId, count);
|
|
181
|
+
}
|
|
182
|
+
return counts;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Find the 0-based column index of the hookActivity / 伏笔动态 header.
|
|
186
|
+
* Falls back to 5 (the standard position in our schema).
|
|
187
|
+
*/
|
|
188
|
+
function detectHookActivityColumnIndex(lines) {
|
|
189
|
+
const DEFAULT_INDEX = 5;
|
|
190
|
+
for (const line of lines) {
|
|
191
|
+
if (!line.startsWith("|"))
|
|
192
|
+
continue;
|
|
193
|
+
if (/\|\s*(章节|Chapter)\s*\|/i.test(line)) {
|
|
194
|
+
const cols = line.split("|").map((c) => c.trim());
|
|
195
|
+
const idx = cols.findIndex((c) => /^(伏笔动态|hookActivity)$/i.test(c));
|
|
196
|
+
return idx >= 0 ? idx : DEFAULT_INDEX;
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
return DEFAULT_INDEX;
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Extract a single column value from a pipe-delimited table row.
|
|
203
|
+
* Returns null when the column index is out of range.
|
|
204
|
+
*/
|
|
205
|
+
function extractColumn(row, index) {
|
|
206
|
+
const cols = row.split("|");
|
|
207
|
+
if (index >= 0 && index < cols.length) {
|
|
208
|
+
return cols[index].trim();
|
|
209
|
+
}
|
|
210
|
+
return null;
|
|
211
|
+
}
|
|
212
|
+
/**
|
|
213
|
+
* Lightweight promotion pass: read hooks + chapter_summaries, check
|
|
214
|
+
* advancedCount >= 2, flip promoted flag. No LLM calls.
|
|
215
|
+
*
|
|
216
|
+
* Returns the result without doing any I/O — caller decides whether to
|
|
217
|
+
* persist.
|
|
218
|
+
*/
|
|
219
|
+
export function rerunPromotionPass(hooks, summariesRaw) {
|
|
220
|
+
if (hooks.length === 0) {
|
|
221
|
+
return { updated: false, hooks, flippedCount: 0 };
|
|
222
|
+
}
|
|
223
|
+
const derivedCounts = deriveAdvancedCountsFromSummaries(summariesRaw, hooks.map((h) => h.hookId));
|
|
224
|
+
let flipped = 0;
|
|
225
|
+
const nextHooks = hooks.map((hook) => {
|
|
226
|
+
if (hook.promoted === true)
|
|
227
|
+
return hook;
|
|
228
|
+
const advanced = hook.advancedCount ?? derivedCounts.get(hook.hookId) ?? 0;
|
|
229
|
+
if (advanced >= 2) {
|
|
230
|
+
flipped += 1;
|
|
231
|
+
return { ...hook, promoted: true };
|
|
232
|
+
}
|
|
233
|
+
return hook;
|
|
234
|
+
});
|
|
235
|
+
return {
|
|
236
|
+
updated: flipped > 0,
|
|
237
|
+
hooks: nextHooks,
|
|
238
|
+
flippedCount: flipped,
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
//# sourceMappingURL=hook-promotion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-promotion.js","sourceRoot":"","sources":["../../src/utils/hook-promotion.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 7 — stale / blocked hook detection.
|
|
3
|
+
*
|
|
4
|
+
* Runs per-chapter (called from the writer's runtime-state projection
|
|
5
|
+
* pipeline when it emits pending_hooks.md). Tags hooks the reviewer and
|
|
6
|
+
* writer-planner should pay attention to:
|
|
7
|
+
*
|
|
8
|
+
* stale — planted long ago (distance > half_life) and still not
|
|
9
|
+
* marked paid-off / resolved.
|
|
10
|
+
* blocked — depends_on references upstream hooks that are still
|
|
11
|
+
* unplanted or unresolved.
|
|
12
|
+
*
|
|
13
|
+
* The detection is pure: given the current hook list + current chapter
|
|
14
|
+
* number, it returns a map of hook id -> diagnostic flags. Nothing is
|
|
15
|
+
* persisted outside the rendered markdown.
|
|
16
|
+
*/
|
|
17
|
+
import type { StoredHook } from "../state/memory-db.js";
|
|
18
|
+
import type { HookRecord } from "../models/runtime-state.js";
|
|
19
|
+
export interface HookDiagnostics {
|
|
20
|
+
readonly stale: boolean;
|
|
21
|
+
readonly blocked: boolean;
|
|
22
|
+
readonly missingUpstream: ReadonlyArray<string>;
|
|
23
|
+
readonly distance: number;
|
|
24
|
+
readonly halfLife: number;
|
|
25
|
+
/**
|
|
26
|
+
* Phase 7 hotfix 3 — number of chapters this hook has been blocked.
|
|
27
|
+
*
|
|
28
|
+
* When blocked=false this is 0. When blocked=true it is computed as:
|
|
29
|
+
* max over unresolved upstream of (currentChapter - referenceChapter)
|
|
30
|
+
* where referenceChapter is:
|
|
31
|
+
* - upstream.startChapter, if upstream is planted (startChapter > 0)
|
|
32
|
+
* - hook.startChapter, if upstream is missing or not yet planted
|
|
33
|
+
* (blocked since this hook's own planting)
|
|
34
|
+
*
|
|
35
|
+
* Reviewer reads this as the "blocked Y chapters" token for threshold
|
|
36
|
+
* evaluation (5/6+ chapters → warning).
|
|
37
|
+
*/
|
|
38
|
+
readonly blockedDistance: number;
|
|
39
|
+
}
|
|
40
|
+
type HookLike = StoredHook | HookRecord;
|
|
41
|
+
export declare function computeHookDiagnostics(params: {
|
|
42
|
+
readonly hooks: ReadonlyArray<HookLike>;
|
|
43
|
+
readonly currentChapter: number;
|
|
44
|
+
}): Map<string, HookDiagnostics>;
|
|
45
|
+
/**
|
|
46
|
+
* Render the diagnostic flags as a compact marker string suitable for
|
|
47
|
+
* appending to an existing table cell. Empty when nothing is flagged.
|
|
48
|
+
*/
|
|
49
|
+
export declare function renderHookDiagnosticMarker(diagnostics: HookDiagnostics, language: "zh" | "en"): string;
|
|
50
|
+
export {};
|
|
51
|
+
//# sourceMappingURL=hook-stale-detection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-stale-detection.d.ts","sourceRoot":"","sources":["../../src/utils/hook-stale-detection.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACxD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,4BAA4B,CAAC;AAG7D,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B;;;;;;;;;;;;OAYG;IACH,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC;AAED,KAAK,QAAQ,GAAG,UAAU,GAAG,UAAU,CAAC;AAexC,wBAAgB,sBAAsB,CAAC,MAAM,EAAE;IAC7C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,QAAQ,CAAC,CAAC;IACxC,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC,GAAG,GAAG,CAAC,MAAM,EAAE,eAAe,CAAC,CA2E/B;AAED;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,eAAe,EAC5B,QAAQ,EAAE,IAAI,GAAG,IAAI,GACpB,MAAM,CAsBR"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Phase 7 — stale / blocked hook detection.
|
|
3
|
+
*
|
|
4
|
+
* Runs per-chapter (called from the writer's runtime-state projection
|
|
5
|
+
* pipeline when it emits pending_hooks.md). Tags hooks the reviewer and
|
|
6
|
+
* writer-planner should pay attention to:
|
|
7
|
+
*
|
|
8
|
+
* stale — planted long ago (distance > half_life) and still not
|
|
9
|
+
* marked paid-off / resolved.
|
|
10
|
+
* blocked — depends_on references upstream hooks that are still
|
|
11
|
+
* unplanted or unresolved.
|
|
12
|
+
*
|
|
13
|
+
* The detection is pure: given the current hook list + current chapter
|
|
14
|
+
* number, it returns a map of hook id -> diagnostic flags. Nothing is
|
|
15
|
+
* persisted outside the rendered markdown.
|
|
16
|
+
*/
|
|
17
|
+
import { resolveHalfLifeChapters } from "./hook-promotion.js";
|
|
18
|
+
const RESOLVED_STATUSES = [
|
|
19
|
+
/^resolved$/i,
|
|
20
|
+
/^closed$/i,
|
|
21
|
+
/^done$/i,
|
|
22
|
+
/^已回收$/,
|
|
23
|
+
/^已解决$/,
|
|
24
|
+
];
|
|
25
|
+
function isResolved(hook) {
|
|
26
|
+
const status = (hook.status ?? "").trim();
|
|
27
|
+
return RESOLVED_STATUSES.some((pattern) => pattern.test(status));
|
|
28
|
+
}
|
|
29
|
+
export function computeHookDiagnostics(params) {
|
|
30
|
+
const { hooks, currentChapter } = params;
|
|
31
|
+
const byId = new Map();
|
|
32
|
+
for (const hook of hooks) {
|
|
33
|
+
byId.set(hook.hookId, hook);
|
|
34
|
+
}
|
|
35
|
+
const result = new Map();
|
|
36
|
+
for (const hook of hooks) {
|
|
37
|
+
const halfLife = resolveHalfLifeChapters(hook);
|
|
38
|
+
const plantedChapter = Math.max(0, hook.startChapter);
|
|
39
|
+
const distance = Math.max(0, currentChapter - plantedChapter);
|
|
40
|
+
// Stale: past half-life AND not resolved AND actually planted
|
|
41
|
+
// (startChapter > 0 — a seed with startChapter 0 is a pre-planting seed).
|
|
42
|
+
const stale = !isResolved(hook)
|
|
43
|
+
&& plantedChapter > 0
|
|
44
|
+
&& distance > halfLife;
|
|
45
|
+
// Blocked: depends_on references a hook that is unplanted or unresolved.
|
|
46
|
+
// Hotfix 3: also track per-upstream reference chapter so we can compute
|
|
47
|
+
// how long this hook has been blocked (for reviewer threshold eval).
|
|
48
|
+
const missingUpstream = [];
|
|
49
|
+
const upstreamReferenceChapters = [];
|
|
50
|
+
for (const upstreamId of hook.dependsOn ?? []) {
|
|
51
|
+
const upstream = byId.get(upstreamId);
|
|
52
|
+
if (!upstream) {
|
|
53
|
+
missingUpstream.push(upstreamId);
|
|
54
|
+
// Upstream missing from ledger entirely — we've been blocked since
|
|
55
|
+
// our own planting (or since chapter 0 if we're a pre-planting seed).
|
|
56
|
+
upstreamReferenceChapters.push(plantedChapter);
|
|
57
|
+
continue;
|
|
58
|
+
}
|
|
59
|
+
// Upstream is "planted but not delivered" if startChapter is non-zero
|
|
60
|
+
// AND it's not resolved. An upstream that is still a seed (startChapter
|
|
61
|
+
// 0) counts as unplanted.
|
|
62
|
+
const upstreamResolved = isResolved(upstream);
|
|
63
|
+
const upstreamPlanted = upstream.startChapter > 0
|
|
64
|
+
&& upstream.startChapter <= currentChapter;
|
|
65
|
+
if (!upstreamPlanted || !upstreamResolved) {
|
|
66
|
+
// We only block when the upstream genuinely has not cleared its gate.
|
|
67
|
+
// For a pure "must be planted first" relationship, "planted but not
|
|
68
|
+
// resolved" still counts as blocking the downstream from firing.
|
|
69
|
+
missingUpstream.push(upstreamId);
|
|
70
|
+
// Blocked since upstream planting (if planted) or since our own
|
|
71
|
+
// planting (if upstream still unplanted).
|
|
72
|
+
const referenceChapter = upstreamPlanted
|
|
73
|
+
? upstream.startChapter
|
|
74
|
+
: plantedChapter;
|
|
75
|
+
upstreamReferenceChapters.push(referenceChapter);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
const blocked = missingUpstream.length > 0 && !isResolved(hook);
|
|
79
|
+
// Blocked distance = chapters elapsed since the *earliest* reference
|
|
80
|
+
// chapter among unresolved upstream. Picking the min reference yields the
|
|
81
|
+
// max distance — the longest any of these gates has held us up.
|
|
82
|
+
let blockedDistance = 0;
|
|
83
|
+
if (blocked && upstreamReferenceChapters.length > 0) {
|
|
84
|
+
const earliestReference = Math.min(...upstreamReferenceChapters);
|
|
85
|
+
blockedDistance = Math.max(0, currentChapter - earliestReference);
|
|
86
|
+
}
|
|
87
|
+
result.set(hook.hookId, {
|
|
88
|
+
stale,
|
|
89
|
+
blocked,
|
|
90
|
+
missingUpstream,
|
|
91
|
+
distance,
|
|
92
|
+
halfLife,
|
|
93
|
+
blockedDistance,
|
|
94
|
+
});
|
|
95
|
+
}
|
|
96
|
+
return result;
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Render the diagnostic flags as a compact marker string suitable for
|
|
100
|
+
* appending to an existing table cell. Empty when nothing is flagged.
|
|
101
|
+
*/
|
|
102
|
+
export function renderHookDiagnosticMarker(diagnostics, language) {
|
|
103
|
+
const tokens = [];
|
|
104
|
+
if (diagnostics.stale) {
|
|
105
|
+
tokens.push(language === "en"
|
|
106
|
+
? `stale (d=${diagnostics.distance}/half=${diagnostics.halfLife})`
|
|
107
|
+
: `过期 (距=${diagnostics.distance}/半衰=${diagnostics.halfLife})`);
|
|
108
|
+
}
|
|
109
|
+
if (diagnostics.blocked) {
|
|
110
|
+
const missing = diagnostics.missingUpstream.join(", ");
|
|
111
|
+
// Hotfix 3: embed the blocked distance so reviewer can apply its 5/6-chapter
|
|
112
|
+
// threshold without guessing. Token format is load-bearing — it's read by
|
|
113
|
+
// the reviewer prompt verbatim.
|
|
114
|
+
const distanceToken = diagnostics.blockedDistance > 0
|
|
115
|
+
? (language === "en"
|
|
116
|
+
? ` (blocked ${diagnostics.blockedDistance} chapters)`
|
|
117
|
+
: ` (已阻 ${diagnostics.blockedDistance} 章)`)
|
|
118
|
+
: "";
|
|
119
|
+
tokens.push(language === "en"
|
|
120
|
+
? `blocked on ${missing}${distanceToken}`
|
|
121
|
+
: `受阻于 ${missing}${distanceToken}`);
|
|
122
|
+
}
|
|
123
|
+
return tokens.join("; ");
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=hook-stale-detection.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-stale-detection.js","sourceRoot":"","sources":["../../src/utils/hook-stale-detection.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-endpoint-auth.d.ts","sourceRoot":"","sources":["../../src/utils/llm-endpoint-auth.ts"],"names":[],"mappings":"AAAA,wBAAgB,2BAA2B,CAAC,MAAM,EAAE;IAClD,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACvC,GAAG,OAAO,CAwBV"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
export function isApiKeyOptionalForEndpoint(params) {
|
|
2
|
+
if (params.provider === "anthropic") {
|
|
3
|
+
return false;
|
|
4
|
+
}
|
|
5
|
+
if (!params.baseUrl) {
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
try {
|
|
9
|
+
const url = new URL(params.baseUrl);
|
|
10
|
+
const hostname = url.hostname.toLowerCase();
|
|
11
|
+
return (hostname === "localhost"
|
|
12
|
+
|| hostname === "127.0.0.1"
|
|
13
|
+
|| hostname === "::1"
|
|
14
|
+
|| hostname === "0.0.0.0"
|
|
15
|
+
|| hostname === "host.docker.internal"
|
|
16
|
+
|| hostname.endsWith(".local")
|
|
17
|
+
|| isPrivateIpv4(hostname));
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
function isPrivateIpv4(hostname) {
|
|
24
|
+
const parts = hostname.split(".").map((segment) => Number.parseInt(segment, 10));
|
|
25
|
+
if (parts.length !== 4 || parts.some((part) => Number.isNaN(part) || part < 0 || part > 255)) {
|
|
26
|
+
return false;
|
|
27
|
+
}
|
|
28
|
+
if (parts[0] === 10)
|
|
29
|
+
return true;
|
|
30
|
+
if (parts[0] === 192 && parts[1] === 168)
|
|
31
|
+
return true;
|
|
32
|
+
if (parts[0] === 172 && parts[1] >= 16 && parts[1] <= 31)
|
|
33
|
+
return true;
|
|
34
|
+
return false;
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=llm-endpoint-auth.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-endpoint-auth.js","sourceRoot":"","sources":["../../src/utils/llm-endpoint-auth.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,2BAA2B,CAAC,MAG3C;IACC,IAAI,MAAM,CAAC,QAAQ,KAAK,WAAW,EAAE,CAAC;QACpC,OAAO,KAAK,CAAC;IACf,CAAC;IACD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QACpB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QACpC,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,WAAW,EAAE,CAAC;QAE5C,OAAO,CACL,QAAQ,KAAK,WAAW;eACrB,QAAQ,KAAK,WAAW;eACxB,QAAQ,KAAK,KAAK;eAClB,QAAQ,KAAK,SAAS;eACtB,QAAQ,KAAK,sBAAsB;eACnC,QAAQ,CAAC,QAAQ,CAAC,QAAQ,CAAC;eAC3B,aAAa,CAAC,QAAQ,CAAC,CAC3B,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAAgB;IACrC,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,EAAE,CAAC;QAC7F,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;QAAE,OAAO,IAAI,CAAC;IACjC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;QAAE,OAAO,IAAI,CAAC;IACtD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;QAAE,OAAO,IAAI,CAAC;IACtE,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export declare const GLOBAL_CONFIG_DIR: string;
|
|
2
|
+
export declare const GLOBAL_ENV_PATH: string;
|
|
3
|
+
export type LLMEnvMap = Record<string, string | undefined>;
|
|
4
|
+
export interface LLMEnvLayers {
|
|
5
|
+
readonly global: LLMEnvMap;
|
|
6
|
+
readonly project: LLMEnvMap;
|
|
7
|
+
readonly process: LLMEnvMap;
|
|
8
|
+
}
|
|
9
|
+
export declare function loadLLMEnvLayers(root: string, processEnv?: NodeJS.ProcessEnv): Promise<LLMEnvLayers>;
|
|
10
|
+
export declare function mergeEnvMaps(...layers: readonly LLMEnvMap[]): LLMEnvMap;
|
|
11
|
+
export declare function studioIgnoredEnv(layers: LLMEnvLayers): LLMEnvMap;
|
|
12
|
+
export declare function cliOverlayEnv(layers: LLMEnvLayers): LLMEnvMap;
|
|
13
|
+
export declare function legacyEnv(layers: LLMEnvLayers): LLMEnvMap;
|
|
14
|
+
//# sourceMappingURL=llm-env.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-env.d.ts","sourceRoot":"","sources":["../../src/utils/llm-env.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,iBAAiB,QAA4B,CAAC;AAC3D,eAAO,MAAM,eAAe,QAAkC,CAAC;AAE/D,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;AAE3D,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,SAAS,CAAC;CAC7B;AAED,wBAAsB,gBAAgB,CACpC,IAAI,EAAE,MAAM,EACZ,UAAU,GAAE,MAAM,CAAC,UAAwB,GAC1C,OAAO,CAAC,YAAY,CAAC,CAWvB;AAED,wBAAgB,YAAY,CAAC,GAAG,MAAM,EAAE,SAAS,SAAS,EAAE,GAAG,SAAS,CAQvE;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAEhE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAE7D;AAED,wBAAgB,SAAS,CAAC,MAAM,EAAE,YAAY,GAAG,SAAS,CAEzD"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { readFile } from "node:fs/promises";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { join } from "node:path";
|
|
4
|
+
import { parse } from "dotenv";
|
|
5
|
+
export const GLOBAL_CONFIG_DIR = join(homedir(), ".inkos");
|
|
6
|
+
export const GLOBAL_ENV_PATH = join(GLOBAL_CONFIG_DIR, ".env");
|
|
7
|
+
export async function loadLLMEnvLayers(root, processEnv = process.env) {
|
|
8
|
+
const global = await parseEnvFile(GLOBAL_ENV_PATH);
|
|
9
|
+
const project = await parseEnvFile(join(root, ".env"));
|
|
10
|
+
// Compatibility: modelOverrides.apiKeyEnv and detector config still read process.env directly.
|
|
11
|
+
hydrateProcessEnvFromEnvFiles(processEnv, global, project);
|
|
12
|
+
return {
|
|
13
|
+
global,
|
|
14
|
+
project,
|
|
15
|
+
process: { ...processEnv },
|
|
16
|
+
};
|
|
17
|
+
}
|
|
18
|
+
export function mergeEnvMaps(...layers) {
|
|
19
|
+
const merged = {};
|
|
20
|
+
for (const layer of layers) {
|
|
21
|
+
for (const [key, value] of Object.entries(layer)) {
|
|
22
|
+
if (value !== undefined)
|
|
23
|
+
merged[key] = value;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
return merged;
|
|
27
|
+
}
|
|
28
|
+
export function studioIgnoredEnv(layers) {
|
|
29
|
+
return mergeEnvMaps(layers.global, layers.project, layers.process);
|
|
30
|
+
}
|
|
31
|
+
export function cliOverlayEnv(layers) {
|
|
32
|
+
return mergeEnvMaps(layers.global, layers.project, layers.process);
|
|
33
|
+
}
|
|
34
|
+
export function legacyEnv(layers) {
|
|
35
|
+
return mergeEnvMaps(layers.global, layers.project, layers.process);
|
|
36
|
+
}
|
|
37
|
+
async function parseEnvFile(path) {
|
|
38
|
+
try {
|
|
39
|
+
return parse(await readFile(path, "utf-8"));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
return {};
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
function hydrateProcessEnvFromEnvFiles(processEnv, global, project) {
|
|
46
|
+
const fileEnv = mergeEnvMaps(global, project);
|
|
47
|
+
for (const [key, value] of Object.entries(fileEnv)) {
|
|
48
|
+
if (value !== undefined && processEnv[key] === undefined) {
|
|
49
|
+
processEnv[key] = value;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=llm-env.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-env.js","sourceRoot":"","sources":["../../src/utils/llm-env.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAE/B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;AAC3D,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,CAAC;AAU/D,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,IAAY,EACZ,aAAgC,OAAO,CAAC,GAAG;IAE3C,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,eAAe,CAAC,CAAC;IACnD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC;IACvD,+FAA+F;IAC/F,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;IAE3D,OAAO;QACL,MAAM;QACN,OAAO;QACP,OAAO,EAAE,EAAE,GAAG,UAAU,EAAE;KAC3B,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAG,MAA4B;IAC1D,MAAM,MAAM,GAAc,EAAE,CAAC;IAC7B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACjD,IAAI,KAAK,KAAK,SAAS;gBAAE,MAAM,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC/C,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,MAAoB;IACnD,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,aAAa,CAAC,MAAoB;IAChD,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,MAAoB;IAC5C,OAAO,YAAY,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;AACrE,CAAC;AAED,KAAK,UAAU,YAAY,CAAC,IAAY;IACtC,IAAI,CAAC;QACH,OAAO,KAAK,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,CAAC;IAC9C,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,SAAS,6BAA6B,CACpC,UAA6B,EAC7B,MAAiB,EACjB,OAAkB;IAElB,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QACnD,IAAI,KAAK,KAAK,SAAS,IAAI,UAAU,CAAC,GAAG,CAAC,KAAK,SAAS,EAAE,CAAC;YACzD,UAAU,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAC1B,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -1,10 +1,16 @@
|
|
|
1
1
|
import { type Fact, type StoredHook, type StoredSummary } from "../state/memory-db.js";
|
|
2
|
-
export {
|
|
2
|
+
export { isFuturePlannedHook, isHookWithinChapterWindow, } from "./hook-lifecycle.js";
|
|
3
3
|
export { parseChapterSummariesMarkdown, parseCurrentStateFacts, parsePendingHooksMarkdown, renderHookSnapshot, renderSummarySnapshot, } from "./story-markdown.js";
|
|
4
4
|
export interface MemorySelection {
|
|
5
5
|
readonly summaries: ReadonlyArray<StoredSummary>;
|
|
6
6
|
readonly hooks: ReadonlyArray<StoredHook>;
|
|
7
7
|
readonly activeHooks: ReadonlyArray<StoredHook>;
|
|
8
|
+
/**
|
|
9
|
+
* Hooks with recycling pressure — stale hooks that the planner must
|
|
10
|
+
* advance/resolve/defer (and if deferred, justify). Sorted by staleness DESC
|
|
11
|
+
* (most overdue first). See computeRecyclableHooks for the selection rule.
|
|
12
|
+
*/
|
|
13
|
+
readonly recyclableHooks: ReadonlyArray<StoredHook>;
|
|
8
14
|
readonly facts: ReadonlyArray<Fact>;
|
|
9
15
|
readonly volumeSummaries: ReadonlyArray<VolumeSummarySelection>;
|
|
10
16
|
readonly dbPath?: string;
|
|
@@ -21,5 +27,21 @@ export declare function retrieveMemorySelection(params: {
|
|
|
21
27
|
readonly outlineNode?: string;
|
|
22
28
|
readonly mustKeep?: ReadonlyArray<string>;
|
|
23
29
|
}): Promise<MemorySelection>;
|
|
30
|
+
/**
|
|
31
|
+
* Phase 9-2: Hooks that the planner MUST address this chapter.
|
|
32
|
+
*
|
|
33
|
+
* An active hook is "recyclable" (i.e., stale enough to force an
|
|
34
|
+
* advance/resolve/defer decision) when any of the following holds:
|
|
35
|
+
*
|
|
36
|
+
* - pressured / near_payoff / progressing: silent for ≥ 5 chapters
|
|
37
|
+
* - planted / open: silent for ≥ 10 chapters
|
|
38
|
+
* - coreHook === true: silent for ≥ 8 chapters
|
|
39
|
+
*
|
|
40
|
+
* "Silent" = (chapterNumber − max(startChapter, lastAdvancedChapter)).
|
|
41
|
+
* Future-planted hooks are excluded (they aren't overdue yet).
|
|
42
|
+
* Sorted by silence DESC — most overdue first — so the planner sees the
|
|
43
|
+
* worst debt at the top of its prompt slice.
|
|
44
|
+
*/
|
|
45
|
+
export declare function computeRecyclableHooks(hooks: ReadonlyArray<StoredHook>, chapterNumber: number): StoredHook[];
|
|
24
46
|
export declare function extractQueryTerms(goal: string, outlineNode: string | undefined, mustKeep: ReadonlyArray<string>): string[];
|
|
25
47
|
//# sourceMappingURL=memory-retrieval.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"memory-retrieval.d.ts","sourceRoot":"","sources":["../../src/utils/memory-retrieval.ts"],"names":[],"mappings":"AAQA,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"memory-retrieval.d.ts","sourceRoot":"","sources":["../../src/utils/memory-retrieval.ts"],"names":[],"mappings":"AAQA,OAAO,EAAY,KAAK,IAAI,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAcjG,OAAO,EACL,mBAAmB,EACnB,yBAAyB,GAC1B,MAAM,qBAAqB,CAAC;AAC7B,OAAO,EACL,6BAA6B,EAC7B,sBAAsB,EACtB,yBAAyB,EACzB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,qBAAqB,CAAC;AAE7B,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,aAAa,CAAC,CAAC;IACjD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAChD;;;;OAIG;IACH,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,IAAI,CAAC,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,aAAa,CAAC,sBAAsB,CAAC,CAAC;IAChE,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;CACzB;AAED,wBAAsB,uBAAuB,CAAC,MAAM,EAAE;IACpD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,QAAQ,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;CAC3C,GAAG,OAAO,CAAC,eAAe,CAAC,CAqG3B;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,EAChC,aAAa,EAAE,MAAM,GACpB,UAAU,EAAE,CAQd;AAmBD,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAc1H"}
|