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,34 @@
|
|
|
1
|
+
import type { HookPayoffTiming } from "../models/runtime-state.js";
|
|
2
|
+
import { type HookPhase } from "./hook-policy.js";
|
|
3
|
+
export declare function normalizeHookPayoffTiming(value: string | undefined | null): HookPayoffTiming | undefined;
|
|
4
|
+
export declare function inferHookPayoffTiming(params: {
|
|
5
|
+
readonly expectedPayoff?: string;
|
|
6
|
+
readonly notes?: string;
|
|
7
|
+
}): HookPayoffTiming;
|
|
8
|
+
export declare function resolveHookPayoffTiming(params: {
|
|
9
|
+
readonly payoffTiming?: string | null;
|
|
10
|
+
readonly expectedPayoff?: string;
|
|
11
|
+
readonly notes?: string;
|
|
12
|
+
}): HookPayoffTiming;
|
|
13
|
+
export declare function localizeHookPayoffTiming(timing: HookPayoffTiming, language: "zh" | "en"): string;
|
|
14
|
+
export declare function describeHookLifecycle(params: {
|
|
15
|
+
readonly payoffTiming?: string | null;
|
|
16
|
+
readonly expectedPayoff?: string;
|
|
17
|
+
readonly notes?: string;
|
|
18
|
+
readonly startChapter: number;
|
|
19
|
+
readonly lastAdvancedChapter: number;
|
|
20
|
+
readonly status: string;
|
|
21
|
+
readonly chapterNumber: number;
|
|
22
|
+
readonly targetChapters?: number;
|
|
23
|
+
}): {
|
|
24
|
+
readonly timing: HookPayoffTiming;
|
|
25
|
+
readonly phase: HookPhase;
|
|
26
|
+
readonly age: number;
|
|
27
|
+
readonly dormancy: number;
|
|
28
|
+
readonly readyToResolve: boolean;
|
|
29
|
+
readonly stale: boolean;
|
|
30
|
+
readonly overdue: boolean;
|
|
31
|
+
readonly advancePressure: number;
|
|
32
|
+
readonly resolvePressure: number;
|
|
33
|
+
};
|
|
34
|
+
//# sourceMappingURL=hook-lifecycle.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-lifecycle.d.ts","sourceRoot":"","sources":["../../src/utils/hook-lifecycle.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AACnE,OAAO,EAML,KAAK,SAAS,EACf,MAAM,kBAAkB,CAAC;AAmC1B,wBAAgB,yBAAyB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,IAAI,GAAG,gBAAgB,GAAG,SAAS,CAWxG;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,gBAAgB,CAcnB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB,GAAG,gBAAgB,CAMnB;AAED,wBAAgB,wBAAwB,CACtC,MAAM,EAAE,gBAAgB,EACxB,QAAQ,EAAE,IAAI,GAAG,IAAI,GACpB,MAAM,CAER;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACtC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,mBAAmB,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;CAClC,GAAG;IACF,QAAQ,CAAC,MAAM,EAAE,gBAAgB,CAAC;IAClC,QAAQ,CAAC,KAAK,EAAE,SAAS,CAAC;IAC1B,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;CAClC,CAgDA"}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { HOOK_ACTIVITY_THRESHOLDS, HOOK_PHASE_THRESHOLDS, HOOK_PHASE_WEIGHT, HOOK_PRESSURE_WEIGHTS, HOOK_TIMING_PROFILES, } from "./hook-policy.js";
|
|
2
|
+
const LABELS = {
|
|
3
|
+
en: {
|
|
4
|
+
immediate: "immediate",
|
|
5
|
+
"near-term": "near-term",
|
|
6
|
+
"mid-arc": "mid-arc",
|
|
7
|
+
"slow-burn": "slow-burn",
|
|
8
|
+
endgame: "endgame",
|
|
9
|
+
},
|
|
10
|
+
zh: {
|
|
11
|
+
immediate: "立即",
|
|
12
|
+
"near-term": "近期",
|
|
13
|
+
"mid-arc": "中程",
|
|
14
|
+
"slow-burn": "慢烧",
|
|
15
|
+
endgame: "终局",
|
|
16
|
+
},
|
|
17
|
+
};
|
|
18
|
+
const TIMING_ALIASES = [
|
|
19
|
+
["immediate", /^(?:立即|马上|当章|本章|下一章|immediate|instant|next(?:\s+chapter|\s+beat)?|right\s+away)$/i],
|
|
20
|
+
["near-term", /^(?:近期|近几章|短线|soon|short(?:\s+run)?|near(?:\s*-\s*|\s+)term|current\s+sequence)$/i],
|
|
21
|
+
["mid-arc", /^(?:中程|中期|卷中|mid(?:\s*-\s*|\s+)arc|mid(?:\s*-\s*|\s+)book|middle)$/i],
|
|
22
|
+
["slow-burn", /^(?:慢烧|长线|后续|later|late(?:r)?|long(?:\s*-\s*|\s+)arc|slow(?:\s*-\s*|\s+)burn)$/i],
|
|
23
|
+
["endgame", /^(?:终局|终章|大结局|最终|climax|finale|endgame|late\s+book)$/i],
|
|
24
|
+
];
|
|
25
|
+
const SIGNAL_PATTERNS = [
|
|
26
|
+
["endgame", /(终局|终章|大结局|最终揭晓|最终摊牌|climax|finale|endgame|final reveal|last act)/i],
|
|
27
|
+
["immediate", /(当章|本章|下一章|马上|立刻|即刻|immediate|next chapter|right away|at once)/i],
|
|
28
|
+
["near-term", /(近期|近几章|很快|短线|soon|near-term|short run|current sequence)/i],
|
|
29
|
+
["mid-arc", /(中期|卷中|本卷中段|mid-book|mid arc|middle of the arc)/i],
|
|
30
|
+
["slow-burn", /(长线|慢烧|后续发酵|慢慢揭开|later|slow burn|long arc|long tail)/i],
|
|
31
|
+
];
|
|
32
|
+
export function normalizeHookPayoffTiming(value) {
|
|
33
|
+
const normalized = value?.trim();
|
|
34
|
+
if (!normalized)
|
|
35
|
+
return undefined;
|
|
36
|
+
for (const [timing, pattern] of TIMING_ALIASES) {
|
|
37
|
+
if (pattern.test(normalized)) {
|
|
38
|
+
return timing;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
return undefined;
|
|
42
|
+
}
|
|
43
|
+
export function inferHookPayoffTiming(params) {
|
|
44
|
+
const combined = [params.expectedPayoff, params.notes]
|
|
45
|
+
.filter((value) => Boolean(value && value.trim()))
|
|
46
|
+
.join(" ")
|
|
47
|
+
.trim();
|
|
48
|
+
if (!combined)
|
|
49
|
+
return "mid-arc";
|
|
50
|
+
for (const [timing, pattern] of SIGNAL_PATTERNS) {
|
|
51
|
+
if (pattern.test(combined)) {
|
|
52
|
+
return timing;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
return "mid-arc";
|
|
56
|
+
}
|
|
57
|
+
export function resolveHookPayoffTiming(params) {
|
|
58
|
+
return normalizeHookPayoffTiming(params.payoffTiming)
|
|
59
|
+
?? inferHookPayoffTiming({
|
|
60
|
+
expectedPayoff: params.expectedPayoff,
|
|
61
|
+
notes: params.notes,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
export function localizeHookPayoffTiming(timing, language) {
|
|
65
|
+
return LABELS[language][timing];
|
|
66
|
+
}
|
|
67
|
+
export function describeHookLifecycle(params) {
|
|
68
|
+
const timing = resolveHookPayoffTiming(params);
|
|
69
|
+
const profile = HOOK_TIMING_PROFILES[timing];
|
|
70
|
+
const phase = resolveHookPhase(params.chapterNumber, params.targetChapters);
|
|
71
|
+
const age = Math.max(0, params.chapterNumber - Math.max(1, params.startChapter));
|
|
72
|
+
const lastTouchChapter = Math.max(params.startChapter, params.lastAdvancedChapter);
|
|
73
|
+
const dormancy = Math.max(0, params.chapterNumber - Math.max(1, lastTouchChapter));
|
|
74
|
+
const explicitProgressing = /^(progressing|advanced|重大推进|持续推进)$/i.test(params.status.trim());
|
|
75
|
+
const phaseReady = HOOK_PHASE_WEIGHT[phase] >= HOOK_PHASE_WEIGHT[profile.minimumPhase];
|
|
76
|
+
const recentlyTouched = dormancy <= HOOK_ACTIVITY_THRESHOLDS.recentlyTouchedDormancy;
|
|
77
|
+
const overdue = phaseReady && age >= profile.overdueAge;
|
|
78
|
+
const cadenceReady = timing === "slow-burn"
|
|
79
|
+
? phase === "late" || overdue
|
|
80
|
+
: timing === "endgame"
|
|
81
|
+
? phase === "late"
|
|
82
|
+
: true;
|
|
83
|
+
const momentum = explicitProgressing || recentlyTouched;
|
|
84
|
+
const stale = phaseReady && (dormancy >= profile.staleDormancy
|
|
85
|
+
|| (overdue && !momentum));
|
|
86
|
+
const readyToResolve = phaseReady
|
|
87
|
+
&& cadenceReady
|
|
88
|
+
&& age >= profile.earliestResolveAge
|
|
89
|
+
&& (momentum || (overdue && explicitProgressing));
|
|
90
|
+
return {
|
|
91
|
+
timing,
|
|
92
|
+
phase,
|
|
93
|
+
age,
|
|
94
|
+
dormancy,
|
|
95
|
+
readyToResolve,
|
|
96
|
+
stale,
|
|
97
|
+
overdue,
|
|
98
|
+
advancePressure: age
|
|
99
|
+
+ dormancy
|
|
100
|
+
+ (stale ? HOOK_PRESSURE_WEIGHTS.staleAdvanceBonus : 0)
|
|
101
|
+
+ (overdue ? HOOK_PRESSURE_WEIGHTS.overdueAdvanceBonus : 0),
|
|
102
|
+
resolvePressure: readyToResolve
|
|
103
|
+
? profile.resolveBias * HOOK_PRESSURE_WEIGHTS.resolveBiasMultiplier
|
|
104
|
+
+ (explicitProgressing ? HOOK_PRESSURE_WEIGHTS.progressingResolveBonus : 0)
|
|
105
|
+
+ Math.min(HOOK_PRESSURE_WEIGHTS.maxDormancyResolveBonus, dormancy * HOOK_PRESSURE_WEIGHTS.dormancyResolveMultiplier)
|
|
106
|
+
+ (overdue ? HOOK_PRESSURE_WEIGHTS.overdueResolveBonus : 0)
|
|
107
|
+
: 0,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
function resolveHookPhase(chapterNumber, targetChapters) {
|
|
111
|
+
if (targetChapters && targetChapters > 0) {
|
|
112
|
+
const progress = chapterNumber / targetChapters;
|
|
113
|
+
if (progress >= HOOK_PHASE_THRESHOLDS.lateProgress)
|
|
114
|
+
return "late";
|
|
115
|
+
if (progress >= HOOK_PHASE_THRESHOLDS.middleProgress)
|
|
116
|
+
return "middle";
|
|
117
|
+
return "opening";
|
|
118
|
+
}
|
|
119
|
+
if (chapterNumber >= HOOK_PHASE_THRESHOLDS.lateChapter)
|
|
120
|
+
return "late";
|
|
121
|
+
if (chapterNumber >= HOOK_PHASE_THRESHOLDS.middleChapter)
|
|
122
|
+
return "middle";
|
|
123
|
+
return "opening";
|
|
124
|
+
}
|
|
125
|
+
//# sourceMappingURL=hook-lifecycle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-lifecycle.js","sourceRoot":"","sources":["../../src/utils/hook-lifecycle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
import type { HookPayoffTiming } from "../models/runtime-state.js";
|
|
2
|
+
export type HookPhase = "opening" | "middle" | "late";
|
|
3
|
+
export type HookAgendaLoad = "light" | "medium" | "heavy";
|
|
4
|
+
export interface HookLifecycleProfile {
|
|
5
|
+
readonly earliestResolveAge: number;
|
|
6
|
+
readonly staleDormancy: number;
|
|
7
|
+
readonly overdueAge: number;
|
|
8
|
+
readonly minimumPhase: HookPhase;
|
|
9
|
+
readonly resolveBias: number;
|
|
10
|
+
}
|
|
11
|
+
export declare const HOOK_TIMING_PROFILES: Record<HookPayoffTiming, HookLifecycleProfile>;
|
|
12
|
+
export declare const HOOK_PHASE_WEIGHT: Record<HookPhase, number>;
|
|
13
|
+
export declare const HOOK_PHASE_THRESHOLDS: {
|
|
14
|
+
readonly middleProgress: 0.33;
|
|
15
|
+
readonly lateProgress: 0.72;
|
|
16
|
+
readonly middleChapter: 8;
|
|
17
|
+
readonly lateChapter: 24;
|
|
18
|
+
};
|
|
19
|
+
export declare const HOOK_PRESSURE_WEIGHTS: {
|
|
20
|
+
readonly staleAdvanceBonus: 8;
|
|
21
|
+
readonly overdueAdvanceBonus: 6;
|
|
22
|
+
readonly resolveBiasMultiplier: 10;
|
|
23
|
+
readonly progressingResolveBonus: 5;
|
|
24
|
+
readonly dormancyResolveMultiplier: 2;
|
|
25
|
+
readonly maxDormancyResolveBonus: 12;
|
|
26
|
+
readonly overdueResolveBonus: 10;
|
|
27
|
+
readonly mustAdvancePressureFloor: 8;
|
|
28
|
+
readonly criticalResolvePressure: 40;
|
|
29
|
+
};
|
|
30
|
+
export declare const HOOK_ACTIVITY_THRESHOLDS: {
|
|
31
|
+
readonly recentlyTouchedDormancy: 1;
|
|
32
|
+
readonly longArcQuietHoldMaxAge: 2;
|
|
33
|
+
readonly longArcQuietHoldMaxDormancy: 1;
|
|
34
|
+
readonly refreshDormancy: 2;
|
|
35
|
+
readonly freshPromiseAge: 1;
|
|
36
|
+
};
|
|
37
|
+
export declare const HOOK_AGENDA_LIMITS: Record<HookAgendaLoad, {
|
|
38
|
+
readonly staleDebt: number;
|
|
39
|
+
readonly mustAdvance: number;
|
|
40
|
+
readonly eligibleResolve: number;
|
|
41
|
+
readonly avoidFamilies: number;
|
|
42
|
+
}>;
|
|
43
|
+
export declare const HOOK_AGENDA_LOAD_THRESHOLDS: {
|
|
44
|
+
readonly heavyReadyCount: 3;
|
|
45
|
+
readonly heavyStaleCount: 4;
|
|
46
|
+
readonly heavyCriticalCount: 3;
|
|
47
|
+
readonly heavyPressuredCount: 6;
|
|
48
|
+
readonly mediumReadyCount: 2;
|
|
49
|
+
readonly mediumStaleCount: 2;
|
|
50
|
+
readonly mediumCriticalCount: 1;
|
|
51
|
+
readonly mediumPressuredFamilies: 3;
|
|
52
|
+
};
|
|
53
|
+
export declare const HOOK_VISIBILITY_WINDOWS: Record<HookPayoffTiming, number>;
|
|
54
|
+
export declare const HOOK_RELEVANT_SELECTION_DEFAULTS: {
|
|
55
|
+
readonly primary: {
|
|
56
|
+
readonly baseLimit: 3;
|
|
57
|
+
readonly pressuredExpansionLimit: 4;
|
|
58
|
+
readonly pressuredThreshold: 4;
|
|
59
|
+
};
|
|
60
|
+
readonly stale: {
|
|
61
|
+
readonly defaultLimit: 1;
|
|
62
|
+
readonly expandedLimit: 2;
|
|
63
|
+
readonly overdueThreshold: 2;
|
|
64
|
+
readonly familySpreadThreshold: 2;
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
export declare const HOOK_HEALTH_DEFAULTS: {
|
|
68
|
+
readonly maxActiveHooks: 12;
|
|
69
|
+
readonly staleAfterChapters: 10;
|
|
70
|
+
readonly noAdvanceWindow: 5;
|
|
71
|
+
readonly newHookBurstThreshold: 2;
|
|
72
|
+
};
|
|
73
|
+
export declare function resolveHookVisibilityWindow(timing: HookPayoffTiming): number;
|
|
74
|
+
//# sourceMappingURL=hook-policy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-policy.d.ts","sourceRoot":"","sources":["../../src/utils/hook-policy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAEnE,MAAM,MAAM,SAAS,GAAG,SAAS,GAAG,QAAQ,GAAG,MAAM,CAAC;AACtD,MAAM,MAAM,cAAc,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAE1D,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,SAAS,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;CAC9B;AAED,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,gBAAgB,EAAE,oBAAoB,CAoC/E,CAAC;AAEF,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,SAAS,EAAE,MAAM,CAIvD,CAAC;AAEF,eAAO,MAAM,qBAAqB;;;;;CAKxB,CAAC;AAEX,eAAO,MAAM,qBAAqB;;;;;;;;;;CAUxB,CAAC;AAEX,eAAO,MAAM,wBAAwB;;;;;;CAM3B,CAAC;AAEX,eAAO,MAAM,kBAAkB,EAAE,MAAM,CAAC,cAAc,EAAE;IACtD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,CAmBA,CAAC;AAEF,eAAO,MAAM,2BAA2B;;;;;;;;;CAS9B,CAAC;AAEX,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,gBAAgB,EAAE,MAAM,CAMpE,CAAC;AAEF,eAAO,MAAM,gCAAgC;;;;;;;;;;;;CAYnC,CAAC;AAEX,eAAO,MAAM,oBAAoB;;;;;CAKvB,CAAC;AAEX,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAE5E"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
export const HOOK_TIMING_PROFILES = {
|
|
2
|
+
immediate: {
|
|
3
|
+
earliestResolveAge: 1,
|
|
4
|
+
staleDormancy: 1,
|
|
5
|
+
overdueAge: 3,
|
|
6
|
+
minimumPhase: "opening",
|
|
7
|
+
resolveBias: 5,
|
|
8
|
+
},
|
|
9
|
+
"near-term": {
|
|
10
|
+
earliestResolveAge: 1,
|
|
11
|
+
staleDormancy: 2,
|
|
12
|
+
overdueAge: 5,
|
|
13
|
+
minimumPhase: "opening",
|
|
14
|
+
resolveBias: 4,
|
|
15
|
+
},
|
|
16
|
+
"mid-arc": {
|
|
17
|
+
earliestResolveAge: 2,
|
|
18
|
+
staleDormancy: 4,
|
|
19
|
+
overdueAge: 8,
|
|
20
|
+
minimumPhase: "opening",
|
|
21
|
+
resolveBias: 3,
|
|
22
|
+
},
|
|
23
|
+
"slow-burn": {
|
|
24
|
+
earliestResolveAge: 4,
|
|
25
|
+
staleDormancy: 5,
|
|
26
|
+
overdueAge: 12,
|
|
27
|
+
minimumPhase: "middle",
|
|
28
|
+
resolveBias: 2,
|
|
29
|
+
},
|
|
30
|
+
endgame: {
|
|
31
|
+
earliestResolveAge: 6,
|
|
32
|
+
staleDormancy: 6,
|
|
33
|
+
overdueAge: 16,
|
|
34
|
+
minimumPhase: "late",
|
|
35
|
+
resolveBias: 1,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
38
|
+
export const HOOK_PHASE_WEIGHT = {
|
|
39
|
+
opening: 0,
|
|
40
|
+
middle: 1,
|
|
41
|
+
late: 2,
|
|
42
|
+
};
|
|
43
|
+
export const HOOK_PHASE_THRESHOLDS = {
|
|
44
|
+
middleProgress: 0.33,
|
|
45
|
+
lateProgress: 0.72,
|
|
46
|
+
middleChapter: 8,
|
|
47
|
+
lateChapter: 24,
|
|
48
|
+
};
|
|
49
|
+
export const HOOK_PRESSURE_WEIGHTS = {
|
|
50
|
+
staleAdvanceBonus: 8,
|
|
51
|
+
overdueAdvanceBonus: 6,
|
|
52
|
+
resolveBiasMultiplier: 10,
|
|
53
|
+
progressingResolveBonus: 5,
|
|
54
|
+
dormancyResolveMultiplier: 2,
|
|
55
|
+
maxDormancyResolveBonus: 12,
|
|
56
|
+
overdueResolveBonus: 10,
|
|
57
|
+
mustAdvancePressureFloor: 8,
|
|
58
|
+
criticalResolvePressure: 40,
|
|
59
|
+
};
|
|
60
|
+
export const HOOK_ACTIVITY_THRESHOLDS = {
|
|
61
|
+
recentlyTouchedDormancy: 1,
|
|
62
|
+
longArcQuietHoldMaxAge: 2,
|
|
63
|
+
longArcQuietHoldMaxDormancy: 1,
|
|
64
|
+
refreshDormancy: 2,
|
|
65
|
+
freshPromiseAge: 1,
|
|
66
|
+
};
|
|
67
|
+
export const HOOK_AGENDA_LIMITS = {
|
|
68
|
+
light: {
|
|
69
|
+
staleDebt: 1,
|
|
70
|
+
mustAdvance: 2,
|
|
71
|
+
eligibleResolve: 1,
|
|
72
|
+
avoidFamilies: 2,
|
|
73
|
+
},
|
|
74
|
+
medium: {
|
|
75
|
+
staleDebt: 2,
|
|
76
|
+
mustAdvance: 2,
|
|
77
|
+
eligibleResolve: 1,
|
|
78
|
+
avoidFamilies: 3,
|
|
79
|
+
},
|
|
80
|
+
heavy: {
|
|
81
|
+
staleDebt: 3,
|
|
82
|
+
mustAdvance: 3,
|
|
83
|
+
eligibleResolve: 2,
|
|
84
|
+
avoidFamilies: 4,
|
|
85
|
+
},
|
|
86
|
+
};
|
|
87
|
+
export const HOOK_AGENDA_LOAD_THRESHOLDS = {
|
|
88
|
+
heavyReadyCount: 3,
|
|
89
|
+
heavyStaleCount: 4,
|
|
90
|
+
heavyCriticalCount: 3,
|
|
91
|
+
heavyPressuredCount: 6,
|
|
92
|
+
mediumReadyCount: 2,
|
|
93
|
+
mediumStaleCount: 2,
|
|
94
|
+
mediumCriticalCount: 1,
|
|
95
|
+
mediumPressuredFamilies: 3,
|
|
96
|
+
};
|
|
97
|
+
export const HOOK_VISIBILITY_WINDOWS = {
|
|
98
|
+
immediate: 5,
|
|
99
|
+
"near-term": 5,
|
|
100
|
+
"mid-arc": 6,
|
|
101
|
+
"slow-burn": 8,
|
|
102
|
+
endgame: 10,
|
|
103
|
+
};
|
|
104
|
+
export const HOOK_RELEVANT_SELECTION_DEFAULTS = {
|
|
105
|
+
primary: {
|
|
106
|
+
baseLimit: 3,
|
|
107
|
+
pressuredExpansionLimit: 4,
|
|
108
|
+
pressuredThreshold: 4,
|
|
109
|
+
},
|
|
110
|
+
stale: {
|
|
111
|
+
defaultLimit: 1,
|
|
112
|
+
expandedLimit: 2,
|
|
113
|
+
overdueThreshold: 2,
|
|
114
|
+
familySpreadThreshold: 2,
|
|
115
|
+
},
|
|
116
|
+
};
|
|
117
|
+
export const HOOK_HEALTH_DEFAULTS = {
|
|
118
|
+
maxActiveHooks: 12,
|
|
119
|
+
staleAfterChapters: 10,
|
|
120
|
+
noAdvanceWindow: 5,
|
|
121
|
+
newHookBurstThreshold: 2,
|
|
122
|
+
};
|
|
123
|
+
export function resolveHookVisibilityWindow(timing) {
|
|
124
|
+
return HOOK_VISIBILITY_WINDOWS[timing];
|
|
125
|
+
}
|
|
126
|
+
//# sourceMappingURL=hook-policy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hook-policy.js","sourceRoot":"","sources":["../../src/utils/hook-policy.ts"],"names":[],"mappings":"AAaA,MAAM,CAAC,MAAM,oBAAoB,GAAmD;IAClF,SAAS,EAAE;QACT,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,CAAC;KACf;IACD,WAAW,EAAE;QACX,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,CAAC;KACf;IACD,SAAS,EAAE;QACT,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,CAAC;QACb,YAAY,EAAE,SAAS;QACvB,WAAW,EAAE,CAAC;KACf;IACD,WAAW,EAAE;QACX,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,QAAQ;QACtB,WAAW,EAAE,CAAC;KACf;IACD,OAAO,EAAE;QACP,kBAAkB,EAAE,CAAC;QACrB,aAAa,EAAE,CAAC;QAChB,UAAU,EAAE,EAAE;QACd,YAAY,EAAE,MAAM;QACpB,WAAW,EAAE,CAAC;KACf;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,iBAAiB,GAA8B;IAC1D,OAAO,EAAE,CAAC;IACV,MAAM,EAAE,CAAC;IACT,IAAI,EAAE,CAAC;CACR,CAAC;AAEF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,cAAc,EAAE,IAAI;IACpB,YAAY,EAAE,IAAI;IAClB,aAAa,EAAE,CAAC;IAChB,WAAW,EAAE,EAAE;CACP,CAAC;AAEX,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,iBAAiB,EAAE,CAAC;IACpB,mBAAmB,EAAE,CAAC;IACtB,qBAAqB,EAAE,EAAE;IACzB,uBAAuB,EAAE,CAAC;IAC1B,yBAAyB,EAAE,CAAC;IAC5B,uBAAuB,EAAE,EAAE;IAC3B,mBAAmB,EAAE,EAAE;IACvB,wBAAwB,EAAE,CAAC;IAC3B,uBAAuB,EAAE,EAAE;CACnB,CAAC;AAEX,MAAM,CAAC,MAAM,wBAAwB,GAAG;IACtC,uBAAuB,EAAE,CAAC;IAC1B,sBAAsB,EAAE,CAAC;IACzB,2BAA2B,EAAE,CAAC;IAC9B,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,CAAC;CACV,CAAC;AAEX,MAAM,CAAC,MAAM,kBAAkB,GAK1B;IACH,KAAK,EAAE;QACL,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,CAAC;KACjB;IACD,MAAM,EAAE;QACN,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,CAAC;KACjB;IACD,KAAK,EAAE;QACL,SAAS,EAAE,CAAC;QACZ,WAAW,EAAE,CAAC;QACd,eAAe,EAAE,CAAC;QAClB,aAAa,EAAE,CAAC;KACjB;CACF,CAAC;AAEF,MAAM,CAAC,MAAM,2BAA2B,GAAG;IACzC,eAAe,EAAE,CAAC;IAClB,eAAe,EAAE,CAAC;IAClB,kBAAkB,EAAE,CAAC;IACrB,mBAAmB,EAAE,CAAC;IACtB,gBAAgB,EAAE,CAAC;IACnB,gBAAgB,EAAE,CAAC;IACnB,mBAAmB,EAAE,CAAC;IACtB,uBAAuB,EAAE,CAAC;CAClB,CAAC;AAEX,MAAM,CAAC,MAAM,uBAAuB,GAAqC;IACvE,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,SAAS,EAAE,CAAC;IACZ,WAAW,EAAE,CAAC;IACd,OAAO,EAAE,EAAE;CACZ,CAAC;AAEF,MAAM,CAAC,MAAM,gCAAgC,GAAG;IAC9C,OAAO,EAAE;QACP,SAAS,EAAE,CAAC;QACZ,uBAAuB,EAAE,CAAC;QAC1B,kBAAkB,EAAE,CAAC;KACtB;IACD,KAAK,EAAE;QACL,YAAY,EAAE,CAAC;QACf,aAAa,EAAE,CAAC;QAChB,gBAAgB,EAAE,CAAC;QACnB,qBAAqB,EAAE,CAAC;KACzB;CACO,CAAC;AAEX,MAAM,CAAC,MAAM,oBAAoB,GAAG;IAClC,cAAc,EAAE,EAAE;IAClB,kBAAkB,EAAE,EAAE;IACtB,eAAe,EAAE,CAAC;IAClB,qBAAqB,EAAE,CAAC;CAChB,CAAC;AAEX,MAAM,UAAU,2BAA2B,CAAC,MAAwB;IAClE,OAAO,uBAAuB,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { LengthCountingMode, LengthNormalizeMode, LengthSpec } from "../models/length-governance.js";
|
|
2
|
+
export type LengthLanguage = "zh" | "en";
|
|
3
|
+
export declare function countChapterLength(content: string, countingMode: LengthCountingMode): number;
|
|
4
|
+
export declare function resolveLengthCountingMode(language?: LengthLanguage): LengthCountingMode;
|
|
5
|
+
export declare function formatLengthCount(count: number, countingMode: LengthCountingMode): string;
|
|
6
|
+
export declare function buildLengthSpec(target: number, language?: LengthLanguage): LengthSpec;
|
|
7
|
+
export declare function isOutsideSoftRange(count: number, spec: Pick<LengthSpec, "softMin" | "softMax">): boolean;
|
|
8
|
+
export declare function isOutsideHardRange(count: number, spec: Pick<LengthSpec, "hardMin" | "hardMax">): boolean;
|
|
9
|
+
export declare function chooseNormalizeMode(count: number, spec: Pick<LengthSpec, "softMin" | "softMax">): LengthNormalizeMode;
|
|
10
|
+
//# sourceMappingURL=length-metrics.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-metrics.d.ts","sourceRoot":"","sources":["../../src/utils/length-metrics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,gCAAgC,CAAC;AAE1G,MAAM,MAAM,cAAc,GAAG,IAAI,GAAG,IAAI,CAAC;AAMzC,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,kBAAkB,GAC/B,MAAM,CASR;AAED,wBAAgB,yBAAyB,CACvC,QAAQ,GAAE,cAAqB,GAC9B,kBAAkB,CAEpB;AAED,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,kBAAkB,GAC/B,MAAM,CAER;AAED,wBAAgB,eAAe,CAC7B,MAAM,EAAE,MAAM,EACd,QAAQ,GAAE,cAAqB,GAC9B,UAAU,CAiBZ;AAMD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,GAC5C,OAAO,CAET;AAED,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,GAC5C,OAAO,CAET;AAED,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,SAAS,GAAG,SAAS,CAAC,GAC5C,mBAAmB,CAIrB"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
const REFERENCE_TARGET = 2200;
|
|
2
|
+
const SOFT_RANGE_DELTA = 300;
|
|
3
|
+
const HARD_RANGE_DELTA = 600;
|
|
4
|
+
export function countChapterLength(content, countingMode) {
|
|
5
|
+
const normalized = stripMarkdownMetadata(content);
|
|
6
|
+
if (countingMode === "en_words") {
|
|
7
|
+
const words = normalized.match(/[A-Za-z0-9]+(?:'[A-Za-z0-9]+)?/g);
|
|
8
|
+
return words?.length ?? 0;
|
|
9
|
+
}
|
|
10
|
+
return normalized.replace(/\s+/g, "").length;
|
|
11
|
+
}
|
|
12
|
+
export function resolveLengthCountingMode(language = "zh") {
|
|
13
|
+
return language === "en" ? "en_words" : "zh_chars";
|
|
14
|
+
}
|
|
15
|
+
export function formatLengthCount(count, countingMode) {
|
|
16
|
+
return countingMode === "en_words" ? `${count} words` : `${count}字`;
|
|
17
|
+
}
|
|
18
|
+
export function buildLengthSpec(target, language = "zh") {
|
|
19
|
+
const softDelta = scaleRangeDelta(target, SOFT_RANGE_DELTA);
|
|
20
|
+
const hardDelta = Math.max(softDelta, scaleRangeDelta(target, HARD_RANGE_DELTA));
|
|
21
|
+
const softMin = Math.max(1, target - softDelta);
|
|
22
|
+
const softMax = target + softDelta;
|
|
23
|
+
const hardMin = Math.max(1, target - hardDelta);
|
|
24
|
+
const hardMax = target + hardDelta;
|
|
25
|
+
return {
|
|
26
|
+
target,
|
|
27
|
+
softMin,
|
|
28
|
+
softMax,
|
|
29
|
+
hardMin,
|
|
30
|
+
hardMax,
|
|
31
|
+
countingMode: resolveLengthCountingMode(language),
|
|
32
|
+
normalizeMode: "none",
|
|
33
|
+
};
|
|
34
|
+
}
|
|
35
|
+
function scaleRangeDelta(target, referenceDelta) {
|
|
36
|
+
return Math.max(1, Math.floor((target * referenceDelta) / REFERENCE_TARGET));
|
|
37
|
+
}
|
|
38
|
+
export function isOutsideSoftRange(count, spec) {
|
|
39
|
+
return count < spec.softMin || count > spec.softMax;
|
|
40
|
+
}
|
|
41
|
+
export function isOutsideHardRange(count, spec) {
|
|
42
|
+
return count < spec.hardMin || count > spec.hardMax;
|
|
43
|
+
}
|
|
44
|
+
export function chooseNormalizeMode(count, spec) {
|
|
45
|
+
if (count < spec.softMin)
|
|
46
|
+
return "expand";
|
|
47
|
+
if (count > spec.softMax)
|
|
48
|
+
return "compress";
|
|
49
|
+
return "none";
|
|
50
|
+
}
|
|
51
|
+
function stripMarkdownMetadata(content) {
|
|
52
|
+
const lines = content.replace(/\r\n/g, "\n").replace(/^\uFEFF/, "").split("\n");
|
|
53
|
+
const proseLines = [];
|
|
54
|
+
let index = 0;
|
|
55
|
+
if (lines[index]?.trim() === "---") {
|
|
56
|
+
index += 1;
|
|
57
|
+
while (index < lines.length && lines[index]?.trim() !== "---") {
|
|
58
|
+
index += 1;
|
|
59
|
+
}
|
|
60
|
+
if (index < lines.length) {
|
|
61
|
+
index += 1;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
let inFence = false;
|
|
65
|
+
for (; index < lines.length; index += 1) {
|
|
66
|
+
const line = lines[index] ?? "";
|
|
67
|
+
const trimmed = line.trim();
|
|
68
|
+
if (/^(```|~~~)/.test(trimmed)) {
|
|
69
|
+
inFence = !inFence;
|
|
70
|
+
continue;
|
|
71
|
+
}
|
|
72
|
+
if (inFence) {
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (/^#{1,6}\s+/.test(trimmed)) {
|
|
76
|
+
continue;
|
|
77
|
+
}
|
|
78
|
+
if (trimmed === "---" || trimmed === "...") {
|
|
79
|
+
continue;
|
|
80
|
+
}
|
|
81
|
+
proseLines.push(line);
|
|
82
|
+
}
|
|
83
|
+
return proseLines.join("\n");
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=length-metrics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"length-metrics.js","sourceRoot":"","sources":["../../src/utils/length-metrics.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
export type LogLevel = "debug" | "info" | "warn" | "error";
|
|
2
|
+
export interface LogEntry {
|
|
3
|
+
readonly level: LogLevel;
|
|
4
|
+
readonly tag: string;
|
|
5
|
+
readonly message: string;
|
|
6
|
+
readonly timestamp: string;
|
|
7
|
+
readonly ctx?: Record<string, unknown>;
|
|
8
|
+
}
|
|
9
|
+
export interface LogSink {
|
|
10
|
+
readonly write: (entry: LogEntry) => void;
|
|
11
|
+
}
|
|
12
|
+
export interface Logger {
|
|
13
|
+
readonly debug: (msg: string, ctx?: Record<string, unknown>) => void;
|
|
14
|
+
readonly info: (msg: string, ctx?: Record<string, unknown>) => void;
|
|
15
|
+
readonly warn: (msg: string, ctx?: Record<string, unknown>) => void;
|
|
16
|
+
readonly error: (msg: string, ctx?: Record<string, unknown>) => void;
|
|
17
|
+
readonly child: (tag: string, extraCtx?: Record<string, unknown>) => Logger;
|
|
18
|
+
}
|
|
19
|
+
export declare function createStderrSink(options: {
|
|
20
|
+
readonly minLevel?: LogLevel;
|
|
21
|
+
readonly enableColors?: boolean;
|
|
22
|
+
}): LogSink;
|
|
23
|
+
export declare function createJsonLineSink(writable: NodeJS.WritableStream): LogSink;
|
|
24
|
+
export declare const nullSink: LogSink;
|
|
25
|
+
export declare function createLogger(options: {
|
|
26
|
+
readonly tag: string;
|
|
27
|
+
readonly sinks: ReadonlyArray<LogSink>;
|
|
28
|
+
readonly minLevel?: LogLevel;
|
|
29
|
+
readonly baseCtx?: Record<string, unknown>;
|
|
30
|
+
}): Logger;
|
|
31
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAE3D,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,QAAQ,CAAC;IACzB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACxC;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,KAAK,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAC;CAC3C;AAED,MAAM,WAAW,MAAM;IACrB,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,IAAI,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACpE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,IAAI,CAAC;IACrE,QAAQ,CAAC,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,MAAM,CAAC;CAC7E;AAuBD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IACxC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,YAAY,CAAC,EAAE,OAAO,CAAC;CACjC,GAAG,OAAO,CAsBV;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,CAAC,cAAc,GAAG,OAAO,CAM3E;AAED,eAAO,MAAM,QAAQ,EAAE,OAEtB,CAAC;AAIF,wBAAgB,YAAY,CAAC,OAAO,EAAE;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,OAAO,CAAC,CAAC;IACvC,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAC;IAC7B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C,GAAG,MAAM,CA+BT"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
// === Types ===
|
|
2
|
+
// === Level Ordering ===
|
|
3
|
+
const LEVEL_ORDER = {
|
|
4
|
+
debug: 0,
|
|
5
|
+
info: 1,
|
|
6
|
+
warn: 2,
|
|
7
|
+
error: 3,
|
|
8
|
+
};
|
|
9
|
+
// === ANSI Colors ===
|
|
10
|
+
const COLORS = {
|
|
11
|
+
debug: "\x1b[90m", // gray
|
|
12
|
+
info: "\x1b[36m", // cyan
|
|
13
|
+
warn: "\x1b[33m", // yellow
|
|
14
|
+
error: "\x1b[31m", // red
|
|
15
|
+
};
|
|
16
|
+
const RESET = "\x1b[0m";
|
|
17
|
+
// === Built-in Sinks ===
|
|
18
|
+
export function createStderrSink(options) {
|
|
19
|
+
const minLevel = options.minLevel ?? "info";
|
|
20
|
+
const enableColors = options.enableColors ?? (process.stderr.isTTY ?? false);
|
|
21
|
+
const minOrder = LEVEL_ORDER[minLevel];
|
|
22
|
+
return {
|
|
23
|
+
write(entry) {
|
|
24
|
+
if (LEVEL_ORDER[entry.level] < minOrder)
|
|
25
|
+
return;
|
|
26
|
+
const levelTag = entry.level.toUpperCase().padEnd(5);
|
|
27
|
+
const prefix = `[${entry.tag}]`;
|
|
28
|
+
if (enableColors) {
|
|
29
|
+
const color = COLORS[entry.level];
|
|
30
|
+
process.stderr.write(`${color}${levelTag}${RESET} ${prefix} ${entry.message}\n`);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
process.stderr.write(`${levelTag} ${prefix} ${entry.message}\n`);
|
|
34
|
+
}
|
|
35
|
+
},
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export function createJsonLineSink(writable) {
|
|
39
|
+
return {
|
|
40
|
+
write(entry) {
|
|
41
|
+
writable.write(JSON.stringify(entry) + "\n");
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
export const nullSink = {
|
|
46
|
+
write() { },
|
|
47
|
+
};
|
|
48
|
+
// === Factory ===
|
|
49
|
+
export function createLogger(options) {
|
|
50
|
+
const { tag, sinks, baseCtx } = options;
|
|
51
|
+
function emit(level, msg, ctx) {
|
|
52
|
+
const entry = {
|
|
53
|
+
level,
|
|
54
|
+
tag,
|
|
55
|
+
message: msg,
|
|
56
|
+
timestamp: new Date().toISOString(),
|
|
57
|
+
...(ctx || baseCtx
|
|
58
|
+
? { ctx: { ...baseCtx, ...ctx } }
|
|
59
|
+
: {}),
|
|
60
|
+
};
|
|
61
|
+
for (const sink of sinks) {
|
|
62
|
+
sink.write(entry);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
return {
|
|
66
|
+
debug: (msg, ctx) => emit("debug", msg, ctx),
|
|
67
|
+
info: (msg, ctx) => emit("info", msg, ctx),
|
|
68
|
+
warn: (msg, ctx) => emit("warn", msg, ctx),
|
|
69
|
+
error: (msg, ctx) => emit("error", msg, ctx),
|
|
70
|
+
child(childTag, extraCtx) {
|
|
71
|
+
return createLogger({
|
|
72
|
+
tag: childTag,
|
|
73
|
+
sinks,
|
|
74
|
+
baseCtx: { ...baseCtx, ...extraCtx },
|
|
75
|
+
});
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA,gBAAgB;AAwBhB,yBAAyB;AAEzB,MAAM,WAAW,GAA6B;IAC5C,KAAK,EAAE,CAAC;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,KAAK,EAAE,CAAC;CACT,CAAC;AAEF,sBAAsB;AAEtB,MAAM,MAAM,GAA6B;IACvC,KAAK,EAAE,UAAU,EAAE,OAAO;IAC1B,IAAI,EAAE,UAAU,EAAG,OAAO;IAC1B,IAAI,EAAE,UAAU,EAAG,SAAS;IAC5B,KAAK,EAAE,UAAU,EAAE,MAAM;CAC1B,CAAC;AACF,MAAM,KAAK,GAAG,SAAS,CAAC;AAExB,yBAAyB;AAEzB,MAAM,UAAU,gBAAgB,CAAC,OAGhC;IACC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC;IAC5C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC;IAC7E,MAAM,QAAQ,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;IAEvC,OAAO;QACL,KAAK,CAAC,KAAe;YACnB,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,QAAQ;gBAAE,OAAO;YAEhD,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,KAAK,CAAC,GAAG,GAAG,CAAC;YAEhC,IAAI,YAAY,EAAE,CAAC;gBACjB,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBAClC,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,GAAG,KAAK,GAAG,QAAQ,GAAG,KAAK,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAC3D,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,QAAQ,IAAI,MAAM,IAAI,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;YACnE,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,QAA+B;IAChE,OAAO;QACL,KAAK,CAAC,KAAe;YACnB,QAAQ,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,CAAC;QAC/C,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B,KAAK,KAAU,CAAC;CACjB,CAAC;AAEF,kBAAkB;AAElB,MAAM,UAAU,YAAY,CAAC,OAK5B;IACC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IAExC,SAAS,IAAI,CAAC,KAAe,EAAE,GAAW,EAAE,GAA6B;QACvE,MAAM,KAAK,GAAa;YACtB,KAAK;YACL,GAAG;YACH,OAAO,EAAE,GAAG;YACZ,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,GAAG,CAAC,GAAG,IAAI,OAAO;gBAChB,CAAC,CAAC,EAAE,GAAG,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,GAAG,EAAE,EAAE;gBACjC,CAAC,CAAC,EAAE,CAAC;SACR,CAAC;QACF,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QACpB,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5C,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;QAC1C,IAAI,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAG,CAAC;QAC1C,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,CAAC;QAC5C,KAAK,CAAC,QAAQ,EAAE,QAAQ;YACtB,OAAO,YAAY,CAAC;gBAClB,GAAG,EAAE,QAAQ;gBACb,KAAK;gBACL,OAAO,EAAE,EAAE,GAAG,OAAO,EAAE,GAAG,QAAQ,EAAE;aACrC,CAAC,CAAC;QACL,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
export interface LongSpanFatigueIssue {
|
|
2
|
+
readonly severity: "warning";
|
|
3
|
+
readonly category: string;
|
|
4
|
+
readonly description: string;
|
|
5
|
+
readonly suggestion: string;
|
|
6
|
+
}
|
|
7
|
+
export interface AnalyzeLongSpanFatigueInput {
|
|
8
|
+
readonly bookDir: string;
|
|
9
|
+
readonly chapterNumber: number;
|
|
10
|
+
readonly chapterContent: string;
|
|
11
|
+
readonly chapterSummary?: string;
|
|
12
|
+
readonly language?: "zh" | "en";
|
|
13
|
+
}
|
|
14
|
+
export interface EnglishVarianceBrief {
|
|
15
|
+
readonly highFrequencyPhrases: ReadonlyArray<string>;
|
|
16
|
+
readonly repeatedOpeningPatterns: ReadonlyArray<string>;
|
|
17
|
+
readonly repeatedEndingShapes: ReadonlyArray<string>;
|
|
18
|
+
readonly sceneObligation: string;
|
|
19
|
+
readonly text: string;
|
|
20
|
+
}
|
|
21
|
+
export declare function buildEnglishVarianceBrief(params: {
|
|
22
|
+
readonly bookDir: string;
|
|
23
|
+
readonly chapterNumber: number;
|
|
24
|
+
}): Promise<EnglishVarianceBrief | null>;
|
|
25
|
+
export declare function analyzeLongSpanFatigue(input: AnalyzeLongSpanFatigueInput): Promise<{
|
|
26
|
+
readonly issues: ReadonlyArray<LongSpanFatigueIssue>;
|
|
27
|
+
}>;
|
|
28
|
+
//# sourceMappingURL=long-span-fatigue.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"long-span-fatigue.d.ts","sourceRoot":"","sources":["../../src/utils/long-span-fatigue.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC7B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,QAAQ,CAAC,EAAE,IAAI,GAAG,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,uBAAuB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACxD,QAAQ,CAAC,oBAAoB,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACrD,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAYD,wBAAsB,yBAAyB,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC,GAAG,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAyCvC;AAED,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,2BAA2B,GACjC,OAAO,CAAC;IAAE,QAAQ,CAAC,MAAM,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAA;CAAE,CAAC,CA+CnE"}
|