inkos-n-core 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/agents/ai-tells.d.ts +26 -0
- package/dist/agents/ai-tells.d.ts.map +1 -0
- package/dist/agents/ai-tells.js +140 -0
- package/dist/agents/ai-tells.js.map +1 -0
- package/dist/agents/architect.d.ts +34 -0
- package/dist/agents/architect.d.ts.map +1 -0
- package/dist/agents/architect.js +906 -0
- package/dist/agents/architect.js.map +1 -0
- package/dist/agents/base.d.ts +30 -0
- package/dist/agents/base.d.ts.map +1 -0
- package/dist/agents/base.js +70 -0
- package/dist/agents/base.js.map +1 -0
- package/dist/agents/chapter-analyzer.d.ts +30 -0
- package/dist/agents/chapter-analyzer.d.ts.map +1 -0
- package/dist/agents/chapter-analyzer.js +476 -0
- package/dist/agents/chapter-analyzer.js.map +1 -0
- package/dist/agents/composer.d.ts +36 -0
- package/dist/agents/composer.d.ts.map +1 -0
- package/dist/agents/composer.js +319 -0
- package/dist/agents/composer.js.map +1 -0
- package/dist/agents/consolidator.d.ts +23 -0
- package/dist/agents/consolidator.d.ts.map +1 -0
- package/dist/agents/consolidator.js +141 -0
- package/dist/agents/consolidator.js.map +1 -0
- package/dist/agents/continuity.d.ts +39 -0
- package/dist/agents/continuity.d.ts.map +1 -0
- package/dist/agents/continuity.js +612 -0
- package/dist/agents/continuity.js.map +1 -0
- package/dist/agents/detection-insights.d.ts +9 -0
- package/dist/agents/detection-insights.d.ts.map +1 -0
- package/dist/agents/detection-insights.js +54 -0
- package/dist/agents/detection-insights.js.map +1 -0
- package/dist/agents/detector.d.ts +17 -0
- package/dist/agents/detector.d.ts.map +1 -0
- package/dist/agents/detector.js +77 -0
- package/dist/agents/detector.js.map +1 -0
- package/dist/agents/en-prompt-sections.d.ts +8 -0
- package/dist/agents/en-prompt-sections.d.ts.map +1 -0
- package/dist/agents/en-prompt-sections.js +120 -0
- package/dist/agents/en-prompt-sections.js.map +1 -0
- package/dist/agents/fanfic-canon-importer.d.ts +15 -0
- package/dist/agents/fanfic-canon-importer.d.ts.map +1 -0
- package/dist/agents/fanfic-canon-importer.js +117 -0
- package/dist/agents/fanfic-canon-importer.js.map +1 -0
- package/dist/agents/fanfic-dimensions.d.ts +14 -0
- package/dist/agents/fanfic-dimensions.d.ts.map +1 -0
- package/dist/agents/fanfic-dimensions.js +63 -0
- package/dist/agents/fanfic-dimensions.js.map +1 -0
- package/dist/agents/fanfic-prompt-sections.d.ts +5 -0
- package/dist/agents/fanfic-prompt-sections.d.ts.map +1 -0
- package/dist/agents/fanfic-prompt-sections.js +85 -0
- package/dist/agents/fanfic-prompt-sections.js.map +1 -0
- package/dist/agents/foundation-reviewer.d.ts +29 -0
- package/dist/agents/foundation-reviewer.d.ts.map +1 -0
- package/dist/agents/foundation-reviewer.js +153 -0
- package/dist/agents/foundation-reviewer.js.map +1 -0
- package/dist/agents/length-normalizer.d.ts +32 -0
- package/dist/agents/length-normalizer.d.ts.map +1 -0
- package/dist/agents/length-normalizer.js +156 -0
- package/dist/agents/length-normalizer.js.map +1 -0
- package/dist/agents/observer-prompts.d.ts +10 -0
- package/dist/agents/observer-prompts.d.ts.map +1 -0
- package/dist/agents/observer-prompts.js +113 -0
- package/dist/agents/observer-prompts.js.map +1 -0
- package/dist/agents/planner.d.ts +57 -0
- package/dist/agents/planner.d.ts.map +1 -0
- package/dist/agents/planner.js +594 -0
- package/dist/agents/planner.js.map +1 -0
- package/dist/agents/post-write-validator.d.ts +34 -0
- package/dist/agents/post-write-validator.d.ts.map +1 -0
- package/dist/agents/post-write-validator.js +696 -0
- package/dist/agents/post-write-validator.js.map +1 -0
- package/dist/agents/radar-source.d.ts +38 -0
- package/dist/agents/radar-source.d.ts.map +1 -0
- package/dist/agents/radar-source.js +92 -0
- package/dist/agents/radar-source.js.map +1 -0
- package/dist/agents/radar.d.ts +24 -0
- package/dist/agents/radar.d.ts.map +1 -0
- package/dist/agents/radar.js +85 -0
- package/dist/agents/radar.js.map +1 -0
- package/dist/agents/reviser.d.ts +32 -0
- package/dist/agents/reviser.d.ts.map +1 -0
- package/dist/agents/reviser.js +282 -0
- package/dist/agents/reviser.js.map +1 -0
- package/dist/agents/rules-reader.d.ts +27 -0
- package/dist/agents/rules-reader.d.ts.map +1 -0
- package/dist/agents/rules-reader.js +99 -0
- package/dist/agents/rules-reader.js.map +1 -0
- package/dist/agents/sensitive-words.d.ts +24 -0
- package/dist/agents/sensitive-words.d.ts.map +1 -0
- package/dist/agents/sensitive-words.js +103 -0
- package/dist/agents/sensitive-words.js.map +1 -0
- package/dist/agents/settler-delta-parser.d.ts +7 -0
- package/dist/agents/settler-delta-parser.d.ts.map +1 -0
- package/dist/agents/settler-delta-parser.js +40 -0
- package/dist/agents/settler-delta-parser.js.map +1 -0
- package/dist/agents/settler-parser.d.ts +13 -0
- package/dist/agents/settler-parser.d.ts.map +1 -0
- package/dist/agents/settler-parser.js +20 -0
- package/dist/agents/settler-parser.js.map +1 -0
- package/dist/agents/settler-prompts.d.ts +22 -0
- package/dist/agents/settler-prompts.d.ts.map +1 -0
- package/dist/agents/settler-prompts.js +193 -0
- package/dist/agents/settler-prompts.js.map +1 -0
- package/dist/agents/state-validator.d.ts +26 -0
- package/dist/agents/state-validator.d.ts.map +1 -0
- package/dist/agents/state-validator.js +229 -0
- package/dist/agents/state-validator.js.map +1 -0
- package/dist/agents/style-analyzer.d.ts +11 -0
- package/dist/agents/style-analyzer.d.ts.map +1 -0
- package/dist/agents/style-analyzer.js +81 -0
- package/dist/agents/style-analyzer.js.map +1 -0
- package/dist/agents/writer-parser.d.ts +17 -0
- package/dist/agents/writer-parser.d.ts.map +1 -0
- package/dist/agents/writer-parser.js +131 -0
- package/dist/agents/writer-parser.js.map +1 -0
- package/dist/agents/writer-prompts.d.ts +11 -0
- package/dist/agents/writer-prompts.d.ts.map +1 -0
- package/dist/agents/writer-prompts.js +549 -0
- package/dist/agents/writer-prompts.js.map +1 -0
- package/dist/agents/writer.d.ts +103 -0
- package/dist/agents/writer.d.ts.map +1 -0
- package/dist/agents/writer.js +1052 -0
- package/dist/agents/writer.js.map +1 -0
- package/dist/index.d.ts +80 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +84 -0
- package/dist/index.js.map +1 -0
- package/dist/interaction/edit-controller.d.ts +55 -0
- package/dist/interaction/edit-controller.d.ts.map +1 -0
- package/dist/interaction/edit-controller.js +187 -0
- package/dist/interaction/edit-controller.js.map +1 -0
- package/dist/interaction/events.d.ts +45 -0
- package/dist/interaction/events.d.ts.map +1 -0
- package/dist/interaction/events.js +32 -0
- package/dist/interaction/events.js.map +1 -0
- package/dist/interaction/intents.d.ts +96 -0
- package/dist/interaction/intents.d.ts.map +1 -0
- package/dist/interaction/intents.js +58 -0
- package/dist/interaction/intents.js.map +1 -0
- package/dist/interaction/modes.d.ts +5 -0
- package/dist/interaction/modes.d.ts.map +1 -0
- package/dist/interaction/modes.js +7 -0
- package/dist/interaction/modes.js.map +1 -0
- package/dist/interaction/nl-router.d.ts +8 -0
- package/dist/interaction/nl-router.d.ts.map +1 -0
- package/dist/interaction/nl-router.js +218 -0
- package/dist/interaction/nl-router.js.map +1 -0
- package/dist/interaction/project-control.d.ts +85 -0
- package/dist/interaction/project-control.d.ts.map +1 -0
- package/dist/interaction/project-control.js +123 -0
- package/dist/interaction/project-control.js.map +1 -0
- package/dist/interaction/project-session-store.d.ts +7 -0
- package/dist/interaction/project-session-store.d.ts.map +1 -0
- package/dist/interaction/project-session-store.js +46 -0
- package/dist/interaction/project-session-store.js.map +1 -0
- package/dist/interaction/project-tools.d.ts +20 -0
- package/dist/interaction/project-tools.d.ts.map +1 -0
- package/dist/interaction/project-tools.js +527 -0
- package/dist/interaction/project-tools.js.map +1 -0
- package/dist/interaction/request-router.d.ts +3 -0
- package/dist/interaction/request-router.d.ts.map +1 -0
- package/dist/interaction/request-router.js +5 -0
- package/dist/interaction/request-router.js.map +1 -0
- package/dist/interaction/runtime.d.ts +54 -0
- package/dist/interaction/runtime.d.ts.map +1 -0
- package/dist/interaction/runtime.js +943 -0
- package/dist/interaction/runtime.js.map +1 -0
- package/dist/interaction/session.d.ts +352 -0
- package/dist/interaction/session.d.ts.map +1 -0
- package/dist/interaction/session.js +98 -0
- package/dist/interaction/session.js.map +1 -0
- package/dist/interaction/truth-authority.d.ts +4 -0
- package/dist/interaction/truth-authority.d.ts.map +1 -0
- package/dist/interaction/truth-authority.js +37 -0
- package/dist/interaction/truth-authority.js.map +1 -0
- package/dist/llm/provider.d.ts +87 -0
- package/dist/llm/provider.d.ts.map +1 -0
- package/dist/llm/provider.js +798 -0
- package/dist/llm/provider.js.map +1 -0
- package/dist/models/book-rules.d.ts +118 -0
- package/dist/models/book-rules.d.ts.map +1 -0
- package/dist/models/book-rules.js +55 -0
- package/dist/models/book-rules.js.map +1 -0
- package/dist/models/book.d.ts +51 -0
- package/dist/models/book.d.ts.map +1 -0
- package/dist/models/book.js +27 -0
- package/dist/models/book.js.map +1 -0
- package/dist/models/chapter.d.ts +136 -0
- package/dist/models/chapter.d.ts.map +1 -0
- package/dist/models/chapter.js +38 -0
- package/dist/models/chapter.js.map +1 -0
- package/dist/models/detection.d.ts +25 -0
- package/dist/models/detection.d.ts.map +1 -0
- package/dist/models/detection.js +2 -0
- package/dist/models/detection.js.map +1 -0
- package/dist/models/genre-profile.d.ts +45 -0
- package/dist/models/genre-profile.d.ts.map +1 -0
- package/dist/models/genre-profile.js +26 -0
- package/dist/models/genre-profile.js.map +1 -0
- package/dist/models/input-governance.d.ts +516 -0
- package/dist/models/input-governance.d.ts.map +1 -0
- package/dist/models/input-governance.js +112 -0
- package/dist/models/input-governance.js.map +1 -0
- package/dist/models/length-governance.d.ts +93 -0
- package/dist/models/length-governance.d.ts.map +1 -0
- package/dist/models/length-governance.js +34 -0
- package/dist/models/length-governance.js.map +1 -0
- package/dist/models/project.d.ts +475 -0
- package/dist/models/project.d.ts.map +1 -0
- package/dist/models/project.js +100 -0
- package/dist/models/project.js.map +1 -0
- package/dist/models/runtime-state.d.ts +588 -0
- package/dist/models/runtime-state.d.ts.map +1 -0
- package/dist/models/runtime-state.js +93 -0
- package/dist/models/runtime-state.js.map +1 -0
- package/dist/models/state.d.ts +48 -0
- package/dist/models/state.d.ts.map +1 -0
- package/dist/models/state.js +6 -0
- package/dist/models/state.js.map +1 -0
- package/dist/models/style-profile.d.ts +16 -0
- package/dist/models/style-profile.d.ts.map +1 -0
- package/dist/models/style-profile.js +2 -0
- package/dist/models/style-profile.js.map +1 -0
- package/dist/notify/dispatcher.d.ts +10 -0
- package/dist/notify/dispatcher.d.ts.map +1 -0
- package/dist/notify/dispatcher.js +55 -0
- package/dist/notify/dispatcher.js.map +1 -0
- package/dist/notify/feishu.d.ts +5 -0
- package/dist/notify/feishu.d.ts.map +1 -0
- package/dist/notify/feishu.js +26 -0
- package/dist/notify/feishu.js.map +1 -0
- package/dist/notify/telegram.d.ts +6 -0
- package/dist/notify/telegram.d.ts.map +1 -0
- package/dist/notify/telegram.js +17 -0
- package/dist/notify/telegram.js.map +1 -0
- package/dist/notify/webhook.d.ts +15 -0
- package/dist/notify/webhook.d.ts.map +1 -0
- package/dist/notify/webhook.js +28 -0
- package/dist/notify/webhook.js.map +1 -0
- package/dist/notify/wechat-work.d.ts +5 -0
- package/dist/notify/wechat-work.d.ts.map +1 -0
- package/dist/notify/wechat-work.js +15 -0
- package/dist/notify/wechat-work.js.map +1 -0
- package/dist/pipeline/agent.d.ts +15 -0
- package/dist/pipeline/agent.d.ts.map +1 -0
- package/dist/pipeline/agent.js +550 -0
- package/dist/pipeline/agent.js.map +1 -0
- package/dist/pipeline/chapter-persistence.d.ts +33 -0
- package/dist/pipeline/chapter-persistence.d.ts.map +1 -0
- package/dist/pipeline/chapter-persistence.js +35 -0
- package/dist/pipeline/chapter-persistence.js.map +1 -0
- package/dist/pipeline/chapter-review-cycle.d.ts +79 -0
- package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -0
- package/dist/pipeline/chapter-review-cycle.js +97 -0
- package/dist/pipeline/chapter-review-cycle.js.map +1 -0
- package/dist/pipeline/chapter-state-recovery.d.ts +59 -0
- package/dist/pipeline/chapter-state-recovery.d.ts.map +1 -0
- package/dist/pipeline/chapter-state-recovery.js +133 -0
- package/dist/pipeline/chapter-state-recovery.js.map +1 -0
- package/dist/pipeline/chapter-truth-validation.d.ts +41 -0
- package/dist/pipeline/chapter-truth-validation.d.ts.map +1 -0
- package/dist/pipeline/chapter-truth-validation.js +67 -0
- package/dist/pipeline/chapter-truth-validation.js.map +1 -0
- package/dist/pipeline/detection-runner.d.ts +31 -0
- package/dist/pipeline/detection-runner.d.ts.map +1 -0
- package/dist/pipeline/detection-runner.js +109 -0
- package/dist/pipeline/detection-runner.js.map +1 -0
- package/dist/pipeline/persisted-governed-plan.d.ts +4 -0
- package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -0
- package/dist/pipeline/persisted-governed-plan.js +85 -0
- package/dist/pipeline/persisted-governed-plan.js.map +1 -0
- package/dist/pipeline/runner.d.ts +212 -0
- package/dist/pipeline/runner.d.ts.map +1 -0
- package/dist/pipeline/runner.js +2265 -0
- package/dist/pipeline/runner.js.map +1 -0
- package/dist/pipeline/scheduler.d.ts +58 -0
- package/dist/pipeline/scheduler.d.ts.map +1 -0
- package/dist/pipeline/scheduler.js +322 -0
- package/dist/pipeline/scheduler.js.map +1 -0
- package/dist/state/manager.d.ts +48 -0
- package/dist/state/manager.d.ts.map +1 -0
- package/dist/state/manager.js +435 -0
- package/dist/state/manager.js.map +1 -0
- package/dist/state/memory-db.d.ts +77 -0
- package/dist/state/memory-db.d.ts.map +1 -0
- package/dist/state/memory-db.js +249 -0
- package/dist/state/memory-db.js.map +1 -0
- package/dist/state/runtime-state-store.d.ts +25 -0
- package/dist/state/runtime-state-store.d.ts.map +1 -0
- package/dist/state/runtime-state-store.js +108 -0
- package/dist/state/runtime-state-store.js.map +1 -0
- package/dist/state/state-bootstrap.d.ts +21 -0
- package/dist/state/state-bootstrap.d.ts.map +1 -0
- package/dist/state/state-bootstrap.js +434 -0
- package/dist/state/state-bootstrap.js.map +1 -0
- package/dist/state/state-projections.d.ts +5 -0
- package/dist/state/state-projections.d.ts.map +1 -0
- package/dist/state/state-projections.js +166 -0
- package/dist/state/state-projections.js.map +1 -0
- package/dist/state/state-reducer.d.ts +13 -0
- package/dist/state/state-reducer.d.ts.map +1 -0
- package/dist/state/state-reducer.js +194 -0
- package/dist/state/state-reducer.js.map +1 -0
- package/dist/state/state-validator.d.ts +12 -0
- package/dist/state/state-validator.d.ts.map +1 -0
- package/dist/state/state-validator.js +67 -0
- package/dist/state/state-validator.js.map +1 -0
- package/dist/utils/analytics.d.ts +39 -0
- package/dist/utils/analytics.d.ts.map +1 -0
- package/dist/utils/analytics.js +50 -0
- package/dist/utils/analytics.js.map +1 -0
- package/dist/utils/cadence-policy.d.ts +36 -0
- package/dist/utils/cadence-policy.d.ts.map +1 -0
- package/dist/utils/cadence-policy.js +38 -0
- package/dist/utils/cadence-policy.js.map +1 -0
- package/dist/utils/chapter-cadence.d.ts +34 -0
- package/dist/utils/chapter-cadence.d.ts.map +1 -0
- package/dist/utils/chapter-cadence.js +142 -0
- package/dist/utils/chapter-cadence.js.map +1 -0
- package/dist/utils/chapter-splitter.d.ts +18 -0
- package/dist/utils/chapter-splitter.d.ts.map +1 -0
- package/dist/utils/chapter-splitter.js +60 -0
- package/dist/utils/chapter-splitter.js.map +1 -0
- package/dist/utils/config-loader.d.ts +15 -0
- package/dist/utils/config-loader.d.ts.map +1 -0
- package/dist/utils/config-loader.js +136 -0
- package/dist/utils/config-loader.js.map +1 -0
- package/dist/utils/context-filter.d.ts +20 -0
- package/dist/utils/context-filter.d.ts.map +1 -0
- package/dist/utils/context-filter.js +134 -0
- package/dist/utils/context-filter.js.map +1 -0
- package/dist/utils/governed-context.d.ts +11 -0
- package/dist/utils/governed-context.d.ts.map +1 -0
- package/dist/utils/governed-context.js +42 -0
- package/dist/utils/governed-context.js.map +1 -0
- package/dist/utils/governed-working-set.d.ts +18 -0
- package/dist/utils/governed-working-set.d.ts.map +1 -0
- package/dist/utils/governed-working-set.js +296 -0
- package/dist/utils/governed-working-set.js.map +1 -0
- package/dist/utils/hook-agenda.d.ts +21 -0
- package/dist/utils/hook-agenda.d.ts.map +1 -0
- package/dist/utils/hook-agenda.js +95 -0
- package/dist/utils/hook-agenda.js.map +1 -0
- package/dist/utils/hook-arbiter.d.ts +15 -0
- package/dist/utils/hook-arbiter.d.ts.map +1 -0
- package/dist/utils/hook-arbiter.js +268 -0
- package/dist/utils/hook-arbiter.js.map +1 -0
- package/dist/utils/hook-governance.d.ts +28 -0
- package/dist/utils/hook-governance.d.ts.map +1 -0
- package/dist/utils/hook-governance.js +144 -0
- package/dist/utils/hook-governance.js.map +1 -0
- package/dist/utils/hook-health.d.ts +15 -0
- package/dist/utils/hook-health.d.ts.map +1 -0
- package/dist/utils/hook-health.js +128 -0
- package/dist/utils/hook-health.js.map +1 -0
- package/dist/utils/hook-lifecycle.d.ts +34 -0
- package/dist/utils/hook-lifecycle.d.ts.map +1 -0
- package/dist/utils/hook-lifecycle.js +125 -0
- package/dist/utils/hook-lifecycle.js.map +1 -0
- package/dist/utils/hook-policy.d.ts +74 -0
- package/dist/utils/hook-policy.d.ts.map +1 -0
- package/dist/utils/hook-policy.js +126 -0
- package/dist/utils/hook-policy.js.map +1 -0
- package/dist/utils/length-metrics.d.ts +10 -0
- package/dist/utils/length-metrics.d.ts.map +1 -0
- package/dist/utils/length-metrics.js +85 -0
- package/dist/utils/length-metrics.js.map +1 -0
- package/dist/utils/logger.d.ts +31 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +79 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/long-span-fatigue.d.ts +28 -0
- package/dist/utils/long-span-fatigue.d.ts.map +1 -0
- package/dist/utils/long-span-fatigue.js +406 -0
- package/dist/utils/long-span-fatigue.js.map +1 -0
- package/dist/utils/memory-retrieval.d.ts +25 -0
- package/dist/utils/memory-retrieval.d.ts.map +1 -0
- package/dist/utils/memory-retrieval.js +319 -0
- package/dist/utils/memory-retrieval.js.map +1 -0
- package/dist/utils/pov-filter.d.ts +30 -0
- package/dist/utils/pov-filter.d.ts.map +1 -0
- package/dist/utils/pov-filter.js +129 -0
- package/dist/utils/pov-filter.js.map +1 -0
- package/dist/utils/spot-fix-patches.d.ts +14 -0
- package/dist/utils/spot-fix-patches.d.ts.map +1 -0
- package/dist/utils/spot-fix-patches.js +75 -0
- package/dist/utils/spot-fix-patches.js.map +1 -0
- package/dist/utils/story-markdown.d.ts +13 -0
- package/dist/utils/story-markdown.d.ts.map +1 -0
- package/dist/utils/story-markdown.js +218 -0
- package/dist/utils/story-markdown.js.map +1 -0
- package/dist/utils/web-search.d.ts +23 -0
- package/dist/utils/web-search.d.ts.map +1 -0
- package/dist/utils/web-search.js +68 -0
- package/dist/utils/web-search.js.map +1 -0
- package/genres/cozy.md +43 -0
- package/genres/cultivation.md +42 -0
- package/genres/dungeon-core.md +40 -0
- package/genres/horror.md +51 -0
- package/genres/isekai.md +43 -0
- package/genres/litrpg.md +43 -0
- package/genres/other.md +24 -0
- package/genres/progression.md +41 -0
- package/genres/romantasy.md +45 -0
- package/genres/sci-fi.md +42 -0
- package/genres/system-apocalypse.md +40 -0
- package/genres/tower-climber.md +41 -0
- package/genres/urban.md +53 -0
- package/genres/xianxia.md +46 -0
- package/genres/xuanhuan.md +64 -0
- package/package.json +58 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"architect.js","sourceRoot":"","sources":["../../src/agents/architect.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { LLMClient, LLMMessage, LLMResponse, OnStreamProgress } from "../llm/provider.js";
|
|
2
|
+
import type { Logger } from "../utils/logger.js";
|
|
3
|
+
export interface AgentContext {
|
|
4
|
+
readonly client: LLMClient;
|
|
5
|
+
readonly model: string;
|
|
6
|
+
readonly projectRoot: string;
|
|
7
|
+
readonly bookId?: string;
|
|
8
|
+
readonly logger?: Logger;
|
|
9
|
+
readonly onStreamProgress?: OnStreamProgress;
|
|
10
|
+
}
|
|
11
|
+
export declare abstract class BaseAgent {
|
|
12
|
+
protected readonly ctx: AgentContext;
|
|
13
|
+
constructor(ctx: AgentContext);
|
|
14
|
+
protected get log(): Logger | undefined;
|
|
15
|
+
protected chat(messages: ReadonlyArray<LLMMessage>, options?: {
|
|
16
|
+
readonly temperature?: number;
|
|
17
|
+
readonly maxTokens?: number;
|
|
18
|
+
}): Promise<LLMResponse>;
|
|
19
|
+
/**
|
|
20
|
+
* Chat with web search enabled.
|
|
21
|
+
* OpenAI: uses native web_search_options / web_search_preview.
|
|
22
|
+
* Other providers: searches via Tavily API (TAVILY_API_KEY), injects results into prompt.
|
|
23
|
+
*/
|
|
24
|
+
protected chatWithSearch(messages: ReadonlyArray<LLMMessage>, options?: {
|
|
25
|
+
readonly temperature?: number;
|
|
26
|
+
readonly maxTokens?: number;
|
|
27
|
+
}): Promise<LLMResponse>;
|
|
28
|
+
abstract get name(): string;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=base.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAC;AAG/F,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAEjD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,gBAAgB,CAAC,EAAE,gBAAgB,CAAC;CAC9C;AAED,8BAAsB,SAAS;IAC7B,SAAS,CAAC,QAAQ,CAAC,GAAG,EAAE,YAAY,CAAC;gBAEzB,GAAG,EAAE,YAAY;IAI7B,SAAS,KAAK,GAAG,uBAEhB;cAEe,IAAI,CAClB,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,WAAW,CAAC;IAOvB;;;;OAIG;cACa,cAAc,CAC5B,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,EACnC,OAAO,CAAC,EAAE;QAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAA;KAAE,GACvE,OAAO,CAAC,WAAW,CAAC;IAuDvB,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC;CAC7B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { chatCompletion } from "../llm/provider.js";
|
|
2
|
+
import { searchWeb, fetchUrl } from "../utils/web-search.js";
|
|
3
|
+
export class BaseAgent {
|
|
4
|
+
ctx;
|
|
5
|
+
constructor(ctx) {
|
|
6
|
+
this.ctx = ctx;
|
|
7
|
+
}
|
|
8
|
+
get log() {
|
|
9
|
+
return this.ctx.logger;
|
|
10
|
+
}
|
|
11
|
+
async chat(messages, options) {
|
|
12
|
+
return chatCompletion(this.ctx.client, this.ctx.model, messages, {
|
|
13
|
+
...options,
|
|
14
|
+
onStreamProgress: this.ctx.onStreamProgress,
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Chat with web search enabled.
|
|
19
|
+
* OpenAI: uses native web_search_options / web_search_preview.
|
|
20
|
+
* Other providers: searches via Tavily API (TAVILY_API_KEY), injects results into prompt.
|
|
21
|
+
*/
|
|
22
|
+
async chatWithSearch(messages, options) {
|
|
23
|
+
// OpenAI has native search — use it directly
|
|
24
|
+
if (this.ctx.client.provider === "openai") {
|
|
25
|
+
return chatCompletion(this.ctx.client, this.ctx.model, messages, {
|
|
26
|
+
...options,
|
|
27
|
+
webSearch: true,
|
|
28
|
+
onStreamProgress: this.ctx.onStreamProgress,
|
|
29
|
+
});
|
|
30
|
+
}
|
|
31
|
+
// Other providers: self-hosted search → inject results into prompt
|
|
32
|
+
const lastUserMsg = [...messages].reverse().find((m) => m.role === "user");
|
|
33
|
+
if (!lastUserMsg) {
|
|
34
|
+
return this.chat(messages, options);
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
// Extract search query from user message (first 200 chars)
|
|
38
|
+
const query = lastUserMsg.content.slice(0, 200);
|
|
39
|
+
this.log?.info(`[search] Searching: ${query.slice(0, 60)}...`);
|
|
40
|
+
const results = await searchWeb(query, 3);
|
|
41
|
+
if (results.length === 0) {
|
|
42
|
+
this.log?.warn("[search] No results found, falling back to regular chat");
|
|
43
|
+
return this.chat(messages, options);
|
|
44
|
+
}
|
|
45
|
+
// Fetch top result for full content
|
|
46
|
+
let fullContent = "";
|
|
47
|
+
try {
|
|
48
|
+
fullContent = await fetchUrl(results[0].url, 4000);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
// Fetch failed, use snippets only
|
|
52
|
+
}
|
|
53
|
+
const searchContext = [
|
|
54
|
+
"## Web Search Results\n",
|
|
55
|
+
...results.map((r, i) => `${i + 1}. **${r.title}**\n ${r.url}\n ${r.snippet}`),
|
|
56
|
+
...(fullContent ? [`\n## Full Content (Top Result)\n${fullContent}`] : []),
|
|
57
|
+
].join("\n");
|
|
58
|
+
// Inject search results before the last user message
|
|
59
|
+
const augmentedMessages = messages.map((m) => m === lastUserMsg
|
|
60
|
+
? { ...m, content: `${searchContext}\n\n---\n\n${m.content}` }
|
|
61
|
+
: m);
|
|
62
|
+
return this.chat(augmentedMessages, options);
|
|
63
|
+
}
|
|
64
|
+
catch (e) {
|
|
65
|
+
this.log?.warn(`[search] Search failed: ${e}, falling back to regular chat`);
|
|
66
|
+
return this.chat(messages, options);
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=base.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../../src/agents/base.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import type { BookConfig } from "../models/book.js";
|
|
3
|
+
import type { ContextPackage, RuleStack } from "../models/input-governance.js";
|
|
4
|
+
import { type ParsedWriterOutput } from "./writer-parser.js";
|
|
5
|
+
export interface AnalyzeChapterInput {
|
|
6
|
+
readonly book: BookConfig;
|
|
7
|
+
readonly bookDir: string;
|
|
8
|
+
readonly chapterNumber: number;
|
|
9
|
+
readonly chapterContent: string;
|
|
10
|
+
readonly chapterTitle?: string;
|
|
11
|
+
readonly chapterIntent?: string;
|
|
12
|
+
readonly contextPackage?: ContextPackage;
|
|
13
|
+
readonly ruleStack?: RuleStack;
|
|
14
|
+
}
|
|
15
|
+
export type AnalyzeChapterOutput = ParsedWriterOutput;
|
|
16
|
+
export declare class ChapterAnalyzerAgent extends BaseAgent {
|
|
17
|
+
get name(): string;
|
|
18
|
+
analyzeChapter(input: AnalyzeChapterInput): Promise<AnalyzeChapterOutput>;
|
|
19
|
+
private buildSystemPrompt;
|
|
20
|
+
private buildUserPrompt;
|
|
21
|
+
private buildReducedControlBlock;
|
|
22
|
+
private buildMemoryGoal;
|
|
23
|
+
private findOutlineNode;
|
|
24
|
+
private renderSummarySnapshot;
|
|
25
|
+
private escapeTableCell;
|
|
26
|
+
private readFileOrDefault;
|
|
27
|
+
private missingFilePlaceholder;
|
|
28
|
+
private defaultChapterTitle;
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=chapter-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"chapter-analyzer.d.ts","sourceRoot":"","sources":["../../src/agents/chapter-analyzer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,MAAM,+BAA+B,CAAC;AAE/E,OAAO,EAAqB,KAAK,kBAAkB,EAAE,MAAM,oBAAoB,CAAC;AAYhF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC;IACzC,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,CAAC;CAChC;AAED,MAAM,MAAM,oBAAoB,GAAG,kBAAkB,CAAC;AAEtD,qBAAa,oBAAqB,SAAQ,SAAS;IACjD,IAAI,IAAI,IAAI,MAAM,CAEjB;IAEK,cAAc,CAAC,KAAK,EAAE,mBAAmB,GAAG,OAAO,CAAC,oBAAoB,CAAC;IAuK/E,OAAO,CAAC,iBAAiB;IAmMzB,OAAO,CAAC,eAAe;IAkEvB,OAAO,CAAC,wBAAwB;IA4ChC,OAAO,CAAC,eAAe;IAMvB,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,qBAAqB;IA4C7B,OAAO,CAAC,eAAe;YAIT,iBAAiB;IAQ/B,OAAO,CAAC,sBAAsB;IAI9B,OAAO,CAAC,mBAAmB;CAG5B"}
|
|
@@ -0,0 +1,476 @@
|
|
|
1
|
+
import { BaseAgent } from "./base.js";
|
|
2
|
+
import { readGenreProfile, readBookRules } from "./rules-reader.js";
|
|
3
|
+
import { parseWriterOutput } from "./writer-parser.js";
|
|
4
|
+
import { buildGovernedMemoryEvidenceBlocks } from "../utils/governed-context.js";
|
|
5
|
+
import { buildGovernedCharacterMatrixWorkingSet, buildGovernedHookWorkingSet, } from "../utils/governed-working-set.js";
|
|
6
|
+
import { filterEmotionalArcs, filterSubplots } from "../utils/context-filter.js";
|
|
7
|
+
import { countChapterLength, resolveLengthCountingMode } from "../utils/length-metrics.js";
|
|
8
|
+
import { retrieveMemorySelection } from "../utils/memory-retrieval.js";
|
|
9
|
+
import { readFile } from "node:fs/promises";
|
|
10
|
+
import { join } from "node:path";
|
|
11
|
+
export class ChapterAnalyzerAgent extends BaseAgent {
|
|
12
|
+
get name() {
|
|
13
|
+
return "chapter-analyzer";
|
|
14
|
+
}
|
|
15
|
+
async analyzeChapter(input) {
|
|
16
|
+
const { book, bookDir, chapterNumber, chapterContent, chapterTitle } = input;
|
|
17
|
+
const { profile: genreProfile, body: genreBody } = await readGenreProfile(this.ctx.projectRoot, book.genre);
|
|
18
|
+
const resolvedLanguage = book.language ?? genreProfile.language;
|
|
19
|
+
// Read current truth files (same set as writer.ts)
|
|
20
|
+
const [currentState, ledger, hooks, subplotBoard, emotionalArcs, characterMatrix, storyBible, volumeOutline,] = await Promise.all([
|
|
21
|
+
this.readFileOrDefault(join(bookDir, "story/current_state.md"), resolvedLanguage),
|
|
22
|
+
this.readFileOrDefault(join(bookDir, "story/particle_ledger.md"), resolvedLanguage),
|
|
23
|
+
this.readFileOrDefault(join(bookDir, "story/pending_hooks.md"), resolvedLanguage),
|
|
24
|
+
this.readFileOrDefault(join(bookDir, "story/subplot_board.md"), resolvedLanguage),
|
|
25
|
+
this.readFileOrDefault(join(bookDir, "story/emotional_arcs.md"), resolvedLanguage),
|
|
26
|
+
this.readFileOrDefault(join(bookDir, "story/character_matrix.md"), resolvedLanguage),
|
|
27
|
+
this.readFileOrDefault(join(bookDir, "story/story_bible.md"), resolvedLanguage),
|
|
28
|
+
this.readFileOrDefault(join(bookDir, "story/volume_outline.md"), resolvedLanguage),
|
|
29
|
+
]);
|
|
30
|
+
const parsedBookRules = await readBookRules(bookDir);
|
|
31
|
+
const bookRulesBody = parsedBookRules?.body ?? "";
|
|
32
|
+
const bookRules = parsedBookRules?.rules;
|
|
33
|
+
const governedMode = Boolean(input.chapterIntent && input.contextPackage && input.ruleStack);
|
|
34
|
+
const memorySelection = await retrieveMemorySelection({
|
|
35
|
+
bookDir,
|
|
36
|
+
chapterNumber,
|
|
37
|
+
goal: this.buildMemoryGoal(chapterTitle, chapterContent),
|
|
38
|
+
outlineNode: this.findOutlineNode(volumeOutline, chapterNumber),
|
|
39
|
+
});
|
|
40
|
+
const chapterSummaries = this.renderSummarySnapshot(memorySelection.summaries, resolvedLanguage);
|
|
41
|
+
const governedMemoryBlocks = input.contextPackage
|
|
42
|
+
? buildGovernedMemoryEvidenceBlocks(input.contextPackage, resolvedLanguage)
|
|
43
|
+
: undefined;
|
|
44
|
+
const hooksWorkingSet = governedMode && input.contextPackage
|
|
45
|
+
? buildGovernedHookWorkingSet({
|
|
46
|
+
hooksMarkdown: hooks,
|
|
47
|
+
contextPackage: input.contextPackage,
|
|
48
|
+
chapterIntent: input.chapterIntent,
|
|
49
|
+
chapterNumber,
|
|
50
|
+
language: resolvedLanguage,
|
|
51
|
+
})
|
|
52
|
+
: hooks;
|
|
53
|
+
const subplotWorkingSet = governedMode
|
|
54
|
+
? filterSubplots(subplotBoard)
|
|
55
|
+
: subplotBoard;
|
|
56
|
+
const emotionalWorkingSet = governedMode
|
|
57
|
+
? filterEmotionalArcs(emotionalArcs, chapterNumber)
|
|
58
|
+
: emotionalArcs;
|
|
59
|
+
const matrixWorkingSet = governedMode && input.chapterIntent && input.contextPackage
|
|
60
|
+
? buildGovernedCharacterMatrixWorkingSet({
|
|
61
|
+
matrixMarkdown: characterMatrix,
|
|
62
|
+
chapterIntent: input.chapterIntent,
|
|
63
|
+
contextPackage: input.contextPackage,
|
|
64
|
+
protagonistName: bookRules?.protagonist?.name,
|
|
65
|
+
})
|
|
66
|
+
: characterMatrix;
|
|
67
|
+
const reducedControlBlock = governedMode && input.chapterIntent && input.contextPackage && input.ruleStack
|
|
68
|
+
? this.buildReducedControlBlock(input.chapterIntent, input.contextPackage, input.ruleStack, resolvedLanguage)
|
|
69
|
+
: "";
|
|
70
|
+
const systemPrompt = this.buildSystemPrompt(book, genreProfile, genreBody, bookRulesBody, resolvedLanguage);
|
|
71
|
+
const userPrompt = this.buildUserPrompt({
|
|
72
|
+
language: resolvedLanguage,
|
|
73
|
+
chapterNumber,
|
|
74
|
+
chapterContent,
|
|
75
|
+
chapterTitle,
|
|
76
|
+
currentState,
|
|
77
|
+
ledger: genreProfile.numericalSystem ? ledger : "",
|
|
78
|
+
hooks: hooksWorkingSet,
|
|
79
|
+
chapterSummaries,
|
|
80
|
+
subplotBoard: subplotWorkingSet,
|
|
81
|
+
emotionalArcs: emotionalWorkingSet,
|
|
82
|
+
characterMatrix: matrixWorkingSet,
|
|
83
|
+
bibleBlock: !governedMode && storyBible !== this.missingFilePlaceholder(resolvedLanguage)
|
|
84
|
+
? resolvedLanguage === "en"
|
|
85
|
+
? `\n## Story Bible\n${storyBible}\n`
|
|
86
|
+
: `\n## 世界观设定\n${storyBible}\n`
|
|
87
|
+
: "",
|
|
88
|
+
outlineOrControlBlock: reducedControlBlock || (volumeOutline !== this.missingFilePlaceholder(resolvedLanguage)
|
|
89
|
+
? resolvedLanguage === "en"
|
|
90
|
+
? `\n## Volume Outline\n${volumeOutline}\n`
|
|
91
|
+
: `\n## 卷纲\n${volumeOutline}\n`
|
|
92
|
+
: ""),
|
|
93
|
+
hooksBlock: governedMemoryBlocks?.hooksBlock
|
|
94
|
+
?? (hooksWorkingSet !== this.missingFilePlaceholder(resolvedLanguage)
|
|
95
|
+
? resolvedLanguage === "en"
|
|
96
|
+
? `\n## Current Hooks\n${hooksWorkingSet}\n`
|
|
97
|
+
: `\n## 当前伏笔池\n${hooksWorkingSet}\n`
|
|
98
|
+
: ""),
|
|
99
|
+
summariesBlock: governedMemoryBlocks?.summariesBlock
|
|
100
|
+
?? (chapterSummaries !== this.missingFilePlaceholder(resolvedLanguage)
|
|
101
|
+
? resolvedLanguage === "en"
|
|
102
|
+
? `\n## Existing Chapter Summaries\n${chapterSummaries}\n`
|
|
103
|
+
: `\n## 已有章节摘要\n${chapterSummaries}\n`
|
|
104
|
+
: ""),
|
|
105
|
+
volumeSummariesBlock: governedMemoryBlocks?.volumeSummariesBlock ?? "",
|
|
106
|
+
subplotBlock: subplotWorkingSet !== this.missingFilePlaceholder(resolvedLanguage)
|
|
107
|
+
? resolvedLanguage === "en"
|
|
108
|
+
? `\n## Current Subplot Board\n${subplotWorkingSet}\n`
|
|
109
|
+
: `\n## 当前支线进度板\n${subplotWorkingSet}\n`
|
|
110
|
+
: "",
|
|
111
|
+
emotionalBlock: emotionalWorkingSet !== this.missingFilePlaceholder(resolvedLanguage)
|
|
112
|
+
? resolvedLanguage === "en"
|
|
113
|
+
? `\n## Current Emotional Arcs\n${emotionalWorkingSet}\n`
|
|
114
|
+
: `\n## 当前情感弧线\n${emotionalWorkingSet}\n`
|
|
115
|
+
: "",
|
|
116
|
+
matrixBlock: matrixWorkingSet !== this.missingFilePlaceholder(resolvedLanguage)
|
|
117
|
+
? resolvedLanguage === "en"
|
|
118
|
+
? `\n## Current Character Matrix\n${matrixWorkingSet}\n`
|
|
119
|
+
: `\n## 当前角色交互矩阵\n${matrixWorkingSet}\n`
|
|
120
|
+
: "",
|
|
121
|
+
});
|
|
122
|
+
const response = await this.chat([
|
|
123
|
+
{ role: "system", content: systemPrompt },
|
|
124
|
+
{ role: "user", content: userPrompt },
|
|
125
|
+
], { maxTokens: 16384, temperature: 0.3 });
|
|
126
|
+
const countingMode = resolveLengthCountingMode(book.language ?? genreProfile.language);
|
|
127
|
+
const output = parseWriterOutput(chapterNumber, response.content, genreProfile, countingMode);
|
|
128
|
+
const canonicalContent = chapterContent;
|
|
129
|
+
const canonicalWordCount = countChapterLength(canonicalContent, countingMode);
|
|
130
|
+
// If LLM didn't return a title, use the one from input or derive from chapter number
|
|
131
|
+
if (chapterTitle
|
|
132
|
+
&& (output.title === this.defaultChapterTitle(chapterNumber, resolvedLanguage)
|
|
133
|
+
|| output.title === `第${chapterNumber}章`)) {
|
|
134
|
+
return {
|
|
135
|
+
...output,
|
|
136
|
+
title: chapterTitle,
|
|
137
|
+
content: canonicalContent,
|
|
138
|
+
wordCount: canonicalWordCount,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
return {
|
|
142
|
+
...output,
|
|
143
|
+
content: canonicalContent,
|
|
144
|
+
wordCount: canonicalWordCount,
|
|
145
|
+
};
|
|
146
|
+
}
|
|
147
|
+
buildSystemPrompt(book, genreProfile, genreBody, bookRulesBody, language) {
|
|
148
|
+
if (language === "en") {
|
|
149
|
+
const numericalBlock = genreProfile.numericalSystem
|
|
150
|
+
? "\n- This genre tracks numerical/resources systems; UPDATED_LEDGER must capture every resource change shown in the chapter."
|
|
151
|
+
: "\n- This genre has no numerical system; leave UPDATED_LEDGER empty.";
|
|
152
|
+
return `【LANGUAGE OVERRIDE】ALL output MUST be in English. The === TAG === markers remain unchanged.
|
|
153
|
+
|
|
154
|
+
You are a fiction continuity analyst. Analyze a finished chapter, extract every state change, and update the tracking files.
|
|
155
|
+
|
|
156
|
+
## Working Mode
|
|
157
|
+
|
|
158
|
+
You are not writing new prose. You are reading completed chapter text and updating the book's truth files.
|
|
159
|
+
1. Read the chapter carefully and extract all important facts.
|
|
160
|
+
2. Update the existing tracking files incrementally rather than rebuilding them from scratch.
|
|
161
|
+
3. Keep the output contract identical to the writer pipeline.
|
|
162
|
+
|
|
163
|
+
## What To Extract
|
|
164
|
+
|
|
165
|
+
- Character entrances, exits, injuries, breakthroughs, deaths, and other status changes
|
|
166
|
+
- Location movement and scene transitions
|
|
167
|
+
- Item or resource gains and losses
|
|
168
|
+
- Hook setup, advancement, and payoff
|
|
169
|
+
- Emotional arc movement
|
|
170
|
+
- Subplot progress
|
|
171
|
+
- Relationship changes and information-boundary changes
|
|
172
|
+
|
|
173
|
+
## Book Information
|
|
174
|
+
|
|
175
|
+
- Title: ${book.title}
|
|
176
|
+
- Genre: ${genreProfile.name} (${book.genre})
|
|
177
|
+
- Platform: ${book.platform}
|
|
178
|
+
${numericalBlock}
|
|
179
|
+
|
|
180
|
+
## Genre Guidance
|
|
181
|
+
|
|
182
|
+
${genreBody}
|
|
183
|
+
|
|
184
|
+
${bookRulesBody ? `## Book Rules\n\n${bookRulesBody}` : ""}
|
|
185
|
+
|
|
186
|
+
## Output Format
|
|
187
|
+
|
|
188
|
+
Use === TAG === delimiters exactly as shown:
|
|
189
|
+
|
|
190
|
+
=== CHAPTER_TITLE ===
|
|
191
|
+
(Extract or infer the chapter title. Output title text only.)
|
|
192
|
+
|
|
193
|
+
=== CHAPTER_CONTENT ===
|
|
194
|
+
(Repeat the original chapter content exactly. Do not rewrite.)
|
|
195
|
+
|
|
196
|
+
=== PRE_WRITE_CHECK ===
|
|
197
|
+
(Leave empty in analysis mode.)
|
|
198
|
+
|
|
199
|
+
=== POST_SETTLEMENT ===
|
|
200
|
+
(Leave empty in analysis mode.)
|
|
201
|
+
|
|
202
|
+
=== UPDATED_STATE ===
|
|
203
|
+
Updated state card as a Markdown table reflecting the end-of-chapter state:
|
|
204
|
+
| Field | Value |
|
|
205
|
+
| --- | --- |
|
|
206
|
+
| Current Chapter | {chapter_number} |
|
|
207
|
+
| Current Location | ... |
|
|
208
|
+
| Protagonist State | ... |
|
|
209
|
+
| Current Goal | ... |
|
|
210
|
+
| Current Constraint | ... |
|
|
211
|
+
| Current Alliances | ... |
|
|
212
|
+
| Current Conflict | ... |
|
|
213
|
+
|
|
214
|
+
=== UPDATED_LEDGER ===
|
|
215
|
+
(If the genre has a numerical system: output the fully updated resource ledger table. Otherwise leave empty.)
|
|
216
|
+
|
|
217
|
+
=== UPDATED_HOOKS ===
|
|
218
|
+
Updated hooks pool as a Markdown table with the latest status of every known hook:
|
|
219
|
+
| hook_id | start_chapter | type | status | last_advanced_chapter | expected_payoff | payoff_timing | notes |
|
|
220
|
+
|
|
221
|
+
=== CHAPTER_SUMMARY ===
|
|
222
|
+
Single Markdown table row:
|
|
223
|
+
| Chapter | Title | Characters | Key Events | State Changes | Hook Activity | Mood | Chapter Type |
|
|
224
|
+
|
|
225
|
+
=== UPDATED_SUBPLOTS ===
|
|
226
|
+
Updated subplot board (Markdown table)
|
|
227
|
+
|
|
228
|
+
=== UPDATED_EMOTIONAL_ARCS ===
|
|
229
|
+
Updated emotional arcs (Markdown table)
|
|
230
|
+
|
|
231
|
+
=== UPDATED_CHARACTER_MATRIX ===
|
|
232
|
+
Updated character interaction matrix (Markdown table)
|
|
233
|
+
|
|
234
|
+
## Rules
|
|
235
|
+
|
|
236
|
+
1. UPDATED_STATE and UPDATED_HOOKS must be incremental updates based on the current tracking files.
|
|
237
|
+
2. Every factual change in the chapter must appear in the corresponding tracking file.
|
|
238
|
+
3. Do not miss resource changes, movement, relationship changes, or information changes.
|
|
239
|
+
4. Information boundaries in the character matrix must stay exact: each character only knows what they directly witnessed or learned.`;
|
|
240
|
+
}
|
|
241
|
+
const numericalBlock = genreProfile.numericalSystem
|
|
242
|
+
? `\n- 本题材有数值/资源体系,你必须在 UPDATED_LEDGER 中追踪正文中出现的所有资源变动`
|
|
243
|
+
: `\n- 本题材无数值系统,UPDATED_LEDGER 留空`;
|
|
244
|
+
return `你是小说连续性分析师。你的任务是分析一章已完成的小说正文,从中提取所有状态变化并更新追踪文件。
|
|
245
|
+
|
|
246
|
+
## 工作模式
|
|
247
|
+
|
|
248
|
+
你不是在写作,而是在分析已有正文。你需要:
|
|
249
|
+
1. 仔细阅读正文,提取所有关键信息
|
|
250
|
+
2. 基于"当前追踪文件"做增量更新
|
|
251
|
+
3. 输出格式与写作模块完全一致
|
|
252
|
+
|
|
253
|
+
## 分析维度
|
|
254
|
+
|
|
255
|
+
从正文中提取以下信息:
|
|
256
|
+
- 角色出场、退场、状态变化(受伤/突破/死亡等)
|
|
257
|
+
- 位置移动、场景转换
|
|
258
|
+
- 物品/资源的获得与消耗
|
|
259
|
+
- 伏笔的埋设、推进、回收
|
|
260
|
+
- 情感弧线变化
|
|
261
|
+
- 支线进展
|
|
262
|
+
- 角色间关系变化、新的信息边界
|
|
263
|
+
|
|
264
|
+
## 书籍信息
|
|
265
|
+
|
|
266
|
+
- 标题:${book.title}
|
|
267
|
+
- 题材:${genreProfile.name}(${book.genre})
|
|
268
|
+
- 平台:${book.platform}
|
|
269
|
+
${numericalBlock}
|
|
270
|
+
|
|
271
|
+
## 题材特征
|
|
272
|
+
|
|
273
|
+
${genreBody}
|
|
274
|
+
|
|
275
|
+
${bookRulesBody ? `## 本书规则\n\n${bookRulesBody}` : ""}
|
|
276
|
+
|
|
277
|
+
## 输出格式(必须严格遵循)
|
|
278
|
+
|
|
279
|
+
使用 === TAG === 分隔各部分,与写作模块完全一致:
|
|
280
|
+
|
|
281
|
+
=== CHAPTER_TITLE ===
|
|
282
|
+
(从正文标题行提取或推断章节标题,只输出标题文字)
|
|
283
|
+
|
|
284
|
+
=== CHAPTER_CONTENT ===
|
|
285
|
+
(原样输出正文内容,不做任何修改)
|
|
286
|
+
|
|
287
|
+
=== PRE_WRITE_CHECK ===
|
|
288
|
+
(留空,分析模式不需要写作自检)
|
|
289
|
+
|
|
290
|
+
=== POST_SETTLEMENT ===
|
|
291
|
+
(留空,分析模式不需要写后结算)
|
|
292
|
+
|
|
293
|
+
=== UPDATED_STATE ===
|
|
294
|
+
更新后的状态卡(Markdown表格),反映本章结束时的最新状态:
|
|
295
|
+
| 字段 | 值 |
|
|
296
|
+
|------|-----|
|
|
297
|
+
| 当前章节 | {章节号} |
|
|
298
|
+
| 当前位置 | ... |
|
|
299
|
+
| 主角状态 | ... |
|
|
300
|
+
| 当前目标 | ... |
|
|
301
|
+
| 当前限制 | ... |
|
|
302
|
+
| 当前敌我 | ... |
|
|
303
|
+
| 当前冲突 | ... |
|
|
304
|
+
|
|
305
|
+
=== UPDATED_LEDGER ===
|
|
306
|
+
(如有数值系统:更新后的完整资源账本表格;无则留空)
|
|
307
|
+
|
|
308
|
+
=== UPDATED_HOOKS ===
|
|
309
|
+
更新后的伏笔池(Markdown表格),包含所有已知伏笔的最新状态:
|
|
310
|
+
| hook_id | 起始章节 | 类型 | 状态 | 最近推进 | 预期回收 | 回收节奏 | 备注 |
|
|
311
|
+
|
|
312
|
+
=== CHAPTER_SUMMARY ===
|
|
313
|
+
本章摘要(Markdown表格行):
|
|
314
|
+
| 章节 | 标题 | 出场人物 | 关键事件 | 状态变化 | 伏笔动态 | 情绪基调 | 章节类型 |
|
|
315
|
+
|
|
316
|
+
=== UPDATED_SUBPLOTS ===
|
|
317
|
+
更新后的支线进度板(Markdown表格)
|
|
318
|
+
|
|
319
|
+
=== UPDATED_EMOTIONAL_ARCS ===
|
|
320
|
+
更新后的情感弧线(Markdown表格)
|
|
321
|
+
|
|
322
|
+
=== UPDATED_CHARACTER_MATRIX ===
|
|
323
|
+
更新后的角色交互矩阵(Markdown表格)
|
|
324
|
+
|
|
325
|
+
## 关键规则
|
|
326
|
+
|
|
327
|
+
1. 状态卡和伏笔池必须基于"当前追踪文件"做增量更新,不是从零开始
|
|
328
|
+
2. 正文中的每一个事实性变化都必须反映在对应的追踪文件中
|
|
329
|
+
3. 不要遗漏细节:数值变化、位置变化、关系变化、信息变化都要记录
|
|
330
|
+
4. 角色交互矩阵中的"信息边界"要准确——角色只知道他在场时发生的事`;
|
|
331
|
+
}
|
|
332
|
+
buildUserPrompt(params) {
|
|
333
|
+
if (params.language === "en") {
|
|
334
|
+
const titleLine = params.chapterTitle
|
|
335
|
+
? `Chapter Title: ${params.chapterTitle}\n`
|
|
336
|
+
: "";
|
|
337
|
+
const ledgerBlock = params.ledger
|
|
338
|
+
? `\n## Current Resource Ledger\n${params.ledger}\n`
|
|
339
|
+
: "";
|
|
340
|
+
return `Analyze chapter ${params.chapterNumber} and update all tracking files.
|
|
341
|
+
${titleLine}
|
|
342
|
+
## Chapter Content
|
|
343
|
+
|
|
344
|
+
${params.chapterContent}
|
|
345
|
+
|
|
346
|
+
## Current State
|
|
347
|
+
${params.currentState}
|
|
348
|
+
${ledgerBlock}
|
|
349
|
+
${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
|
|
350
|
+
|
|
351
|
+
Please return the result strictly in the === TAG === format.`;
|
|
352
|
+
}
|
|
353
|
+
const titleLine = params.chapterTitle
|
|
354
|
+
? `章节标题:${params.chapterTitle}\n`
|
|
355
|
+
: "";
|
|
356
|
+
const ledgerBlock = params.ledger
|
|
357
|
+
? `\n## 当前资源账本\n${params.ledger}\n`
|
|
358
|
+
: "";
|
|
359
|
+
return `请分析第${params.chapterNumber}章正文,更新所有追踪文件。
|
|
360
|
+
${titleLine}
|
|
361
|
+
## 正文内容
|
|
362
|
+
|
|
363
|
+
${params.chapterContent}
|
|
364
|
+
|
|
365
|
+
## 当前状态卡
|
|
366
|
+
${params.currentState}
|
|
367
|
+
${ledgerBlock}
|
|
368
|
+
${params.hooksBlock}${params.volumeSummariesBlock}${params.subplotBlock}${params.emotionalBlock}${params.matrixBlock}${params.summariesBlock}${params.outlineOrControlBlock}${params.bibleBlock}
|
|
369
|
+
|
|
370
|
+
请严格按照 === TAG === 格式输出分析结果。`;
|
|
371
|
+
}
|
|
372
|
+
buildReducedControlBlock(chapterIntent, contextPackage, ruleStack, language) {
|
|
373
|
+
const selectedContext = contextPackage.selectedContext
|
|
374
|
+
.map((entry) => `- ${entry.source}: ${entry.reason}${entry.excerpt ? ` | ${entry.excerpt}` : ""}`)
|
|
375
|
+
.join("\n");
|
|
376
|
+
const overrides = ruleStack.activeOverrides.length > 0
|
|
377
|
+
? ruleStack.activeOverrides
|
|
378
|
+
.map((override) => `- ${override.from} -> ${override.to}: ${override.reason} (${override.target})`)
|
|
379
|
+
.join("\n")
|
|
380
|
+
: "- none";
|
|
381
|
+
return language === "en"
|
|
382
|
+
? `\n## Chapter Control Inputs (compiled by Planner/Composer)
|
|
383
|
+
${chapterIntent}
|
|
384
|
+
|
|
385
|
+
### Selected Context
|
|
386
|
+
${selectedContext || "- none"}
|
|
387
|
+
|
|
388
|
+
### Rule Stack
|
|
389
|
+
- Hard guardrails: ${ruleStack.sections.hard.join(", ") || "(none)"}
|
|
390
|
+
- Soft constraints: ${ruleStack.sections.soft.join(", ") || "(none)"}
|
|
391
|
+
- Diagnostic rules: ${ruleStack.sections.diagnostic.join(", ") || "(none)"}
|
|
392
|
+
|
|
393
|
+
### Active Overrides
|
|
394
|
+
${overrides}\n`
|
|
395
|
+
: `\n## 本章控制输入(由 Planner/Composer 编译)
|
|
396
|
+
${chapterIntent}
|
|
397
|
+
|
|
398
|
+
### 已选上下文
|
|
399
|
+
${selectedContext || "- none"}
|
|
400
|
+
|
|
401
|
+
### 规则栈
|
|
402
|
+
- 硬护栏:${ruleStack.sections.hard.join("、") || "(无)"}
|
|
403
|
+
- 软约束:${ruleStack.sections.soft.join("、") || "(无)"}
|
|
404
|
+
- 诊断规则:${ruleStack.sections.diagnostic.join("、") || "(无)"}
|
|
405
|
+
|
|
406
|
+
### 当前覆盖
|
|
407
|
+
${overrides}\n`;
|
|
408
|
+
}
|
|
409
|
+
buildMemoryGoal(chapterTitle, chapterContent) {
|
|
410
|
+
return [chapterTitle ?? "", chapterContent.slice(0, 1500)]
|
|
411
|
+
.filter((part) => part.trim().length > 0)
|
|
412
|
+
.join("\n\n");
|
|
413
|
+
}
|
|
414
|
+
findOutlineNode(volumeOutline, chapterNumber) {
|
|
415
|
+
if (!volumeOutline || volumeOutline === this.missingFilePlaceholder("zh") || volumeOutline === this.missingFilePlaceholder("en")) {
|
|
416
|
+
return undefined;
|
|
417
|
+
}
|
|
418
|
+
const lines = volumeOutline.split("\n").map((line) => line.trim()).filter(Boolean);
|
|
419
|
+
const chapterPatterns = [
|
|
420
|
+
new RegExp(`^#+\\s*Chapter\\s*${chapterNumber}\\b`, "i"),
|
|
421
|
+
new RegExp(`^#+\\s*第\\s*${chapterNumber}\\s*章`),
|
|
422
|
+
];
|
|
423
|
+
const heading = lines.find((line) => chapterPatterns.some((pattern) => pattern.test(line)));
|
|
424
|
+
if (!heading)
|
|
425
|
+
return undefined;
|
|
426
|
+
const headingIndex = lines.indexOf(heading);
|
|
427
|
+
const nextLine = lines[headingIndex + 1];
|
|
428
|
+
return nextLine && !nextLine.startsWith("#") ? nextLine : heading.replace(/^#+\s*/, "");
|
|
429
|
+
}
|
|
430
|
+
renderSummarySnapshot(summaries, language) {
|
|
431
|
+
if (summaries.length === 0) {
|
|
432
|
+
return this.missingFilePlaceholder(language);
|
|
433
|
+
}
|
|
434
|
+
const header = language === "en"
|
|
435
|
+
? [
|
|
436
|
+
"| Chapter | Title | Characters | Key Events | State Changes | Hook Activity | Mood | Chapter Type |",
|
|
437
|
+
"| --- | --- | --- | --- | --- | --- | --- | --- |",
|
|
438
|
+
]
|
|
439
|
+
: [
|
|
440
|
+
"| 章节 | 标题 | 出场人物 | 关键事件 | 状态变化 | 伏笔动态 | 情绪基调 | 章节类型 |",
|
|
441
|
+
"| --- | --- | --- | --- | --- | --- | --- | --- |",
|
|
442
|
+
];
|
|
443
|
+
const rows = summaries.map((summary) => [
|
|
444
|
+
summary.chapter,
|
|
445
|
+
summary.title,
|
|
446
|
+
summary.characters,
|
|
447
|
+
summary.events,
|
|
448
|
+
summary.stateChanges,
|
|
449
|
+
summary.hookActivity,
|
|
450
|
+
summary.mood,
|
|
451
|
+
summary.chapterType,
|
|
452
|
+
].map((cell) => this.escapeTableCell(String(cell))).join(" | "));
|
|
453
|
+
return [
|
|
454
|
+
...header,
|
|
455
|
+
...rows.map((row) => `| ${row} |`),
|
|
456
|
+
].join("\n");
|
|
457
|
+
}
|
|
458
|
+
escapeTableCell(value) {
|
|
459
|
+
return value.replace(/\|/g, "\\|").replace(/\n/g, "<br>");
|
|
460
|
+
}
|
|
461
|
+
async readFileOrDefault(path, language) {
|
|
462
|
+
try {
|
|
463
|
+
return await readFile(path, "utf-8");
|
|
464
|
+
}
|
|
465
|
+
catch {
|
|
466
|
+
return this.missingFilePlaceholder(language);
|
|
467
|
+
}
|
|
468
|
+
}
|
|
469
|
+
missingFilePlaceholder(language) {
|
|
470
|
+
return language === "en" ? "(file not created yet)" : "(文件尚未创建)";
|
|
471
|
+
}
|
|
472
|
+
defaultChapterTitle(chapterNumber, language) {
|
|
473
|
+
return language === "en" ? `Chapter ${chapterNumber}` : `第${chapterNumber}章`;
|
|
474
|
+
}
|
|
475
|
+
}
|
|
476
|
+
//# sourceMappingURL=chapter-analyzer.js.map
|