@actalk/inkos-core 1.0.2 → 1.1.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.
Files changed (159) hide show
  1. package/dist/agents/architect.d.ts +4 -2
  2. package/dist/agents/architect.d.ts.map +1 -1
  3. package/dist/agents/architect.js +59 -13
  4. package/dist/agents/architect.js.map +1 -1
  5. package/dist/agents/chapter-analyzer.js +2 -2
  6. package/dist/agents/composer.d.ts +8 -0
  7. package/dist/agents/composer.d.ts.map +1 -1
  8. package/dist/agents/composer.js +170 -5
  9. package/dist/agents/composer.js.map +1 -1
  10. package/dist/agents/continuity.js +8 -8
  11. package/dist/agents/continuity.js.map +1 -1
  12. package/dist/agents/fanfic-canon-importer.d.ts +1 -0
  13. package/dist/agents/fanfic-canon-importer.d.ts.map +1 -1
  14. package/dist/agents/fanfic-canon-importer.js +19 -1
  15. package/dist/agents/fanfic-canon-importer.js.map +1 -1
  16. package/dist/agents/foundation-reviewer.d.ts +29 -0
  17. package/dist/agents/foundation-reviewer.d.ts.map +1 -0
  18. package/dist/agents/foundation-reviewer.js +153 -0
  19. package/dist/agents/foundation-reviewer.js.map +1 -0
  20. package/dist/agents/planner.d.ts +15 -0
  21. package/dist/agents/planner.d.ts.map +1 -1
  22. package/dist/agents/planner.js +247 -36
  23. package/dist/agents/planner.js.map +1 -1
  24. package/dist/agents/post-write-validator.d.ts +3 -1
  25. package/dist/agents/post-write-validator.d.ts.map +1 -1
  26. package/dist/agents/post-write-validator.js +165 -12
  27. package/dist/agents/post-write-validator.js.map +1 -1
  28. package/dist/agents/settler-prompts.d.ts +1 -0
  29. package/dist/agents/settler-prompts.d.ts.map +1 -1
  30. package/dist/agents/settler-prompts.js +8 -1
  31. package/dist/agents/settler-prompts.js.map +1 -1
  32. package/dist/agents/writer-prompts.js +10 -4
  33. package/dist/agents/writer-prompts.js.map +1 -1
  34. package/dist/agents/writer.d.ts +15 -0
  35. package/dist/agents/writer.d.ts.map +1 -1
  36. package/dist/agents/writer.js +181 -15
  37. package/dist/agents/writer.js.map +1 -1
  38. package/dist/index.d.ts +1 -1
  39. package/dist/index.d.ts.map +1 -1
  40. package/dist/index.js +1 -1
  41. package/dist/index.js.map +1 -1
  42. package/dist/llm/provider.d.ts.map +1 -1
  43. package/dist/llm/provider.js +25 -1
  44. package/dist/llm/provider.js.map +1 -1
  45. package/dist/models/chapter.d.ts +4 -4
  46. package/dist/models/chapter.d.ts.map +1 -1
  47. package/dist/models/chapter.js +1 -0
  48. package/dist/models/chapter.js.map +1 -1
  49. package/dist/models/input-governance.d.ts +165 -0
  50. package/dist/models/input-governance.d.ts.map +1 -1
  51. package/dist/models/input-governance.js +34 -0
  52. package/dist/models/input-governance.js.map +1 -1
  53. package/dist/models/project.d.ts +8 -0
  54. package/dist/models/project.d.ts.map +1 -1
  55. package/dist/models/project.js +1 -0
  56. package/dist/models/project.js.map +1 -1
  57. package/dist/models/runtime-state.d.ts +30 -0
  58. package/dist/models/runtime-state.d.ts.map +1 -1
  59. package/dist/models/runtime-state.js +9 -0
  60. package/dist/models/runtime-state.js.map +1 -1
  61. package/dist/pipeline/chapter-persistence.d.ts +33 -0
  62. package/dist/pipeline/chapter-persistence.d.ts.map +1 -0
  63. package/dist/pipeline/chapter-persistence.js +35 -0
  64. package/dist/pipeline/chapter-persistence.js.map +1 -0
  65. package/dist/pipeline/chapter-review-cycle.d.ts +79 -0
  66. package/dist/pipeline/chapter-review-cycle.d.ts.map +1 -0
  67. package/dist/pipeline/chapter-review-cycle.js +97 -0
  68. package/dist/pipeline/chapter-review-cycle.js.map +1 -0
  69. package/dist/pipeline/chapter-state-recovery.d.ts +59 -0
  70. package/dist/pipeline/chapter-state-recovery.d.ts.map +1 -0
  71. package/dist/pipeline/chapter-state-recovery.js +132 -0
  72. package/dist/pipeline/chapter-state-recovery.js.map +1 -0
  73. package/dist/pipeline/chapter-truth-validation.d.ts +41 -0
  74. package/dist/pipeline/chapter-truth-validation.d.ts.map +1 -0
  75. package/dist/pipeline/chapter-truth-validation.js +67 -0
  76. package/dist/pipeline/chapter-truth-validation.js.map +1 -0
  77. package/dist/pipeline/persisted-governed-plan.d.ts +4 -0
  78. package/dist/pipeline/persisted-governed-plan.d.ts.map +1 -0
  79. package/dist/pipeline/persisted-governed-plan.js +85 -0
  80. package/dist/pipeline/persisted-governed-plan.js.map +1 -0
  81. package/dist/pipeline/runner.d.ts +10 -7
  82. package/dist/pipeline/runner.d.ts.map +1 -1
  83. package/dist/pipeline/runner.js +459 -283
  84. package/dist/pipeline/runner.js.map +1 -1
  85. package/dist/state/manager.d.ts +8 -0
  86. package/dist/state/manager.d.ts.map +1 -1
  87. package/dist/state/manager.js +106 -9
  88. package/dist/state/manager.js.map +1 -1
  89. package/dist/state/memory-db.d.ts +2 -0
  90. package/dist/state/memory-db.d.ts.map +1 -1
  91. package/dist/state/memory-db.js +13 -2
  92. package/dist/state/memory-db.js.map +1 -1
  93. package/dist/state/runtime-state-store.d.ts.map +1 -1
  94. package/dist/state/runtime-state-store.js +1 -0
  95. package/dist/state/runtime-state-store.js.map +1 -1
  96. package/dist/state/state-bootstrap.d.ts +2 -5
  97. package/dist/state/state-bootstrap.d.ts.map +1 -1
  98. package/dist/state/state-bootstrap.js +61 -141
  99. package/dist/state/state-bootstrap.js.map +1 -1
  100. package/dist/state/state-projections.d.ts.map +1 -1
  101. package/dist/state/state-projections.js +6 -4
  102. package/dist/state/state-projections.js.map +1 -1
  103. package/dist/state/state-reducer.d.ts.map +1 -1
  104. package/dist/state/state-reducer.js +6 -0
  105. package/dist/state/state-reducer.js.map +1 -1
  106. package/dist/utils/cadence-policy.d.ts +36 -0
  107. package/dist/utils/cadence-policy.d.ts.map +1 -0
  108. package/dist/utils/cadence-policy.js +38 -0
  109. package/dist/utils/cadence-policy.js.map +1 -0
  110. package/dist/utils/chapter-cadence.d.ts +34 -0
  111. package/dist/utils/chapter-cadence.d.ts.map +1 -0
  112. package/dist/utils/chapter-cadence.js +142 -0
  113. package/dist/utils/chapter-cadence.js.map +1 -0
  114. package/dist/utils/context-filter.d.ts +2 -2
  115. package/dist/utils/context-filter.d.ts.map +1 -1
  116. package/dist/utils/context-filter.js +3 -2
  117. package/dist/utils/context-filter.js.map +1 -1
  118. package/dist/utils/governed-context.d.ts +4 -0
  119. package/dist/utils/governed-context.d.ts.map +1 -1
  120. package/dist/utils/governed-context.js +20 -0
  121. package/dist/utils/governed-context.js.map +1 -1
  122. package/dist/utils/governed-working-set.d.ts.map +1 -1
  123. package/dist/utils/governed-working-set.js +2 -1
  124. package/dist/utils/governed-working-set.js.map +1 -1
  125. package/dist/utils/hook-agenda.d.ts +21 -0
  126. package/dist/utils/hook-agenda.d.ts.map +1 -0
  127. package/dist/utils/hook-agenda.js +95 -0
  128. package/dist/utils/hook-agenda.js.map +1 -0
  129. package/dist/utils/hook-arbiter.d.ts.map +1 -1
  130. package/dist/utils/hook-arbiter.js +7 -0
  131. package/dist/utils/hook-arbiter.js.map +1 -1
  132. package/dist/utils/hook-governance.d.ts +2 -0
  133. package/dist/utils/hook-governance.d.ts.map +1 -1
  134. package/dist/utils/hook-governance.js +19 -3
  135. package/dist/utils/hook-governance.js.map +1 -1
  136. package/dist/utils/hook-health.d.ts +1 -0
  137. package/dist/utils/hook-health.d.ts.map +1 -1
  138. package/dist/utils/hook-health.js +85 -26
  139. package/dist/utils/hook-health.js.map +1 -1
  140. package/dist/utils/hook-lifecycle.d.ts +34 -0
  141. package/dist/utils/hook-lifecycle.d.ts.map +1 -0
  142. package/dist/utils/hook-lifecycle.js +125 -0
  143. package/dist/utils/hook-lifecycle.js.map +1 -0
  144. package/dist/utils/hook-policy.d.ts +74 -0
  145. package/dist/utils/hook-policy.d.ts.map +1 -0
  146. package/dist/utils/hook-policy.js +126 -0
  147. package/dist/utils/hook-policy.js.map +1 -0
  148. package/dist/utils/long-span-fatigue.d.ts.map +1 -1
  149. package/dist/utils/long-span-fatigue.js +75 -28
  150. package/dist/utils/long-span-fatigue.js.map +1 -1
  151. package/dist/utils/memory-retrieval.d.ts +2 -16
  152. package/dist/utils/memory-retrieval.d.ts.map +1 -1
  153. package/dist/utils/memory-retrieval.js +14 -269
  154. package/dist/utils/memory-retrieval.js.map +1 -1
  155. package/dist/utils/story-markdown.d.ts +13 -0
  156. package/dist/utils/story-markdown.d.ts.map +1 -0
  157. package/dist/utils/story-markdown.js +218 -0
  158. package/dist/utils/story-markdown.js.map +1 -0
  159. package/package.json +1 -1
@@ -0,0 +1,95 @@
1
+ import { resolveHookPayoffTiming } from "./hook-lifecycle.js";
2
+ export const DEFAULT_HOOK_LOOKAHEAD_CHAPTERS = 3;
3
+ /**
4
+ * Build the hook agenda using simple stalest-first sorting.
5
+ * No lifecycle pressure formulas — just pick the hooks that have been
6
+ * dormant the longest and the ones that are ripe for resolution.
7
+ */
8
+ export function buildPlannerHookAgenda(params) {
9
+ const agendaHooks = params.hooks
10
+ .map(normalizeStoredHook)
11
+ .filter((hook) => !isFuturePlannedHook(hook, params.chapterNumber, 0))
12
+ .filter((hook) => hook.status !== "resolved" && hook.status !== "deferred");
13
+ // mustAdvance: stalest first (lowest lastAdvancedChapter)
14
+ const mustAdvanceHooks = agendaHooks
15
+ .slice()
16
+ .sort((left, right) => (left.lastAdvancedChapter - right.lastAdvancedChapter
17
+ || left.startChapter - right.startChapter
18
+ || left.hookId.localeCompare(right.hookId)))
19
+ .slice(0, params.maxMustAdvance ?? 2);
20
+ // staleDebt: hooks not advanced for 10+ chapters
21
+ const staleThreshold = params.chapterNumber - 10;
22
+ const staleDebtHooks = agendaHooks
23
+ .filter((hook) => {
24
+ const lastTouch = Math.max(hook.startChapter, hook.lastAdvancedChapter);
25
+ return lastTouch > 0 && lastTouch <= staleThreshold;
26
+ })
27
+ .sort((left, right) => (left.lastAdvancedChapter - right.lastAdvancedChapter
28
+ || left.startChapter - right.startChapter
29
+ || left.hookId.localeCompare(right.hookId)))
30
+ .slice(0, params.maxStaleDebt ?? 2);
31
+ // eligibleResolve: started 3+ chapters ago AND recently advanced
32
+ const eligibleResolveHooks = agendaHooks
33
+ .filter((hook) => hook.startChapter <= params.chapterNumber - 3)
34
+ .filter((hook) => hook.lastAdvancedChapter >= params.chapterNumber - 2)
35
+ .sort((left, right) => (left.startChapter - right.startChapter
36
+ || right.lastAdvancedChapter - left.lastAdvancedChapter
37
+ || left.hookId.localeCompare(right.hookId)))
38
+ .slice(0, params.maxEligibleResolve ?? 1);
39
+ const avoidNewHookFamilies = [...new Set([
40
+ ...staleDebtHooks.map((hook) => hook.type.trim()).filter(Boolean),
41
+ ...mustAdvanceHooks.map((hook) => hook.type.trim()).filter(Boolean),
42
+ ...eligibleResolveHooks.map((hook) => hook.type.trim()).filter(Boolean),
43
+ ])].slice(0, 3);
44
+ return {
45
+ pressureMap: [],
46
+ mustAdvance: mustAdvanceHooks.map((hook) => hook.hookId),
47
+ eligibleResolve: eligibleResolveHooks.map((hook) => hook.hookId),
48
+ staleDebt: staleDebtHooks.map((hook) => hook.hookId),
49
+ avoidNewHookFamilies,
50
+ };
51
+ }
52
+ function normalizeStoredHook(hook) {
53
+ return {
54
+ hookId: hook.hookId,
55
+ startChapter: Math.max(0, hook.startChapter),
56
+ type: hook.type,
57
+ status: normalizeStoredHookStatus(hook.status),
58
+ lastAdvancedChapter: Math.max(0, hook.lastAdvancedChapter),
59
+ expectedPayoff: hook.expectedPayoff,
60
+ payoffTiming: resolveHookPayoffTiming(hook),
61
+ notes: hook.notes,
62
+ };
63
+ }
64
+ function normalizeStoredHookStatus(status) {
65
+ if (/^(resolved|closed|done|已回收|已解决)$/i.test(status.trim()))
66
+ return "resolved";
67
+ if (/^(deferred|paused|hold|延后|延期|搁置|暂缓)$/i.test(status.trim()))
68
+ return "deferred";
69
+ if (/^(progressing|advanced|重大推进|持续推进)$/i.test(status.trim()))
70
+ return "progressing";
71
+ return "open";
72
+ }
73
+ export function filterActiveHooks(hooks) {
74
+ return hooks.filter((hook) => normalizeStoredHookStatus(hook.status) !== "resolved");
75
+ }
76
+ export function isFuturePlannedHook(hook, chapterNumber, lookahead = DEFAULT_HOOK_LOOKAHEAD_CHAPTERS) {
77
+ return hook.lastAdvancedChapter <= 0 && hook.startChapter > chapterNumber + lookahead;
78
+ }
79
+ export function isHookWithinChapterWindow(hook, chapterNumber, recentWindow = 5, lookahead = DEFAULT_HOOK_LOOKAHEAD_CHAPTERS) {
80
+ const recentCutoff = Math.max(0, chapterNumber - recentWindow);
81
+ if (hook.lastAdvancedChapter > 0 && hook.lastAdvancedChapter >= recentCutoff) {
82
+ return true;
83
+ }
84
+ if (hook.lastAdvancedChapter > 0) {
85
+ return false;
86
+ }
87
+ if (hook.startChapter <= 0) {
88
+ return true;
89
+ }
90
+ if (hook.startChapter >= recentCutoff && hook.startChapter <= chapterNumber) {
91
+ return true;
92
+ }
93
+ return hook.startChapter > chapterNumber && hook.startChapter <= chapterNumber + lookahead;
94
+ }
95
+ //# sourceMappingURL=hook-agenda.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-agenda.js","sourceRoot":"","sources":["../../src/utils/hook-agenda.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"hook-arbiter.d.ts","sourceRoot":"","sources":["../../src/utils/hook-arbiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAGpC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAMD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC,GAAG;IACF,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CACxD,CAsHA"}
1
+ {"version":3,"file":"hook-arbiter.d.ts","sourceRoot":"","sources":["../../src/utils/hook-arbiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,KAAK,UAAU,EACf,KAAK,gBAAgB,EACrB,KAAK,iBAAiB,EACvB,MAAM,4BAA4B,CAAC;AAIpC,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,MAAM,EAAE,SAAS,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,CAAC;IACjE,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,gBAAgB,CAAC;CACtC;AAMD,wBAAgB,+BAA+B,CAAC,MAAM,EAAE;IACtD,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,iBAAiB,CAAC;CACnC,GAAG;IACF,QAAQ,CAAC,aAAa,EAAE,iBAAiB,CAAC;IAC1C,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC,mBAAmB,CAAC,CAAC;CACxD,CAsHA"}
@@ -1,5 +1,6 @@
1
1
  import { RuntimeStateDeltaSchema, } from "../models/runtime-state.js";
2
2
  import { evaluateHookAdmission } from "./hook-governance.js";
3
+ import { resolveHookPayoffTiming } from "./hook-lifecycle.js";
3
4
  export function arbitrateRuntimeStateDeltaHooks(params) {
4
5
  const delta = RuntimeStateDeltaSchema.parse(params.delta);
5
6
  const workingHooks = params.hooks.map((hook) => ({ ...hook }));
@@ -116,6 +117,11 @@ function mergeCandidateIntoExistingHook(existing, candidate, chapter) {
116
117
  status: existing.status === "resolved" ? "resolved" : "progressing",
117
118
  lastAdvancedChapter: Math.max(existing.lastAdvancedChapter, chapter),
118
119
  expectedPayoff: preferRicherText(existing.expectedPayoff, candidate.expectedPayoff),
120
+ payoffTiming: resolveHookPayoffTiming({
121
+ payoffTiming: candidate.payoffTiming ?? existing.payoffTiming,
122
+ expectedPayoff: preferRicherText(existing.expectedPayoff, candidate.expectedPayoff),
123
+ notes: preferRicherText(existing.notes, candidate.notes),
124
+ }),
119
125
  notes: preferRicherText(existing.notes, candidate.notes),
120
126
  };
121
127
  }
@@ -127,6 +133,7 @@ function createCanonicalHook(params) {
127
133
  status: "open",
128
134
  lastAdvancedChapter: params.chapter,
129
135
  expectedPayoff: params.candidate.expectedPayoff.trim(),
136
+ payoffTiming: resolveHookPayoffTiming(params.candidate),
130
137
  notes: params.candidate.notes.trim(),
131
138
  };
132
139
  }
@@ -1 +1 @@
1
- {"version":3,"file":"hook-arbiter.js","sourceRoot":"","sources":["../../src/utils/hook-arbiter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-arbiter.js","sourceRoot":"","sources":["../../src/utils/hook-arbiter.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export type HookDisposition = "none" | "mention" | "advance" | "resolve" | "defe
3
3
  export interface HookAdmissionCandidate {
4
4
  readonly type: string;
5
5
  readonly expectedPayoff?: string;
6
+ readonly payoffTiming?: string;
6
7
  readonly notes?: string;
7
8
  }
8
9
  export interface HookAdmissionDecision {
@@ -13,6 +14,7 @@ export interface HookAdmissionDecision {
13
14
  export declare function collectStaleHookDebt(params: {
14
15
  readonly hooks: ReadonlyArray<HookRecord>;
15
16
  readonly chapterNumber: number;
17
+ readonly targetChapters?: number;
16
18
  readonly staleAfterChapters?: number;
17
19
  }): HookRecord[];
18
20
  export declare function evaluateHookAdmission(params: {
@@ -1 +1 @@
1
- {"version":3,"file":"hook-governance.d.ts","sourceRoot":"","sources":["../../src/utils/hook-governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAEhF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,uBAAuB,GAAG,kBAAkB,CAAC;IACzF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,UAAU,EAAE,CAaf;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD,GAAG,qBAAqB,CAmExB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAChE,GAAG,eAAe,CAoBlB"}
1
+ {"version":3,"file":"hook-governance.d.ts","sourceRoot":"","sources":["../../src/utils/hook-governance.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGhF,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;AAEnF,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,OAAO,GAAG,cAAc,GAAG,uBAAuB,GAAG,kBAAkB,CAAC;IACzF,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;CACjC;AAED,wBAAgB,oBAAoB,CAAC,MAAM,EAAE;IAC3C,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;CACtC,GAAG,UAAU,EAAE,CA2Bf;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE;IAC5C,QAAQ,CAAC,SAAS,EAAE,sBAAsB,CAAC;IAC3C,QAAQ,CAAC,WAAW,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;CACjD,GAAG,qBAAqB,CAqExB;AAED,wBAAgB,uBAAuB,CAAC,MAAM,EAAE;IAC9C,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;CAChE,GAAG,eAAe,CAoBlB"}
@@ -1,10 +1,24 @@
1
+ import { describeHookLifecycle } from "./hook-lifecycle.js";
1
2
  export function collectStaleHookDebt(params) {
2
- const staleAfterChapters = params.staleAfterChapters ?? 10;
3
- const staleCutoff = params.chapterNumber - staleAfterChapters;
4
3
  return params.hooks
5
4
  .filter((hook) => hook.status !== "resolved" && hook.status !== "deferred")
6
5
  .filter((hook) => hook.startChapter <= params.chapterNumber)
7
- .filter((hook) => hook.lastAdvancedChapter <= staleCutoff)
6
+ .filter((hook) => {
7
+ const lifecycle = describeHookLifecycle({
8
+ payoffTiming: hook.payoffTiming,
9
+ expectedPayoff: hook.expectedPayoff,
10
+ notes: hook.notes,
11
+ startChapter: hook.startChapter,
12
+ lastAdvancedChapter: hook.lastAdvancedChapter,
13
+ status: hook.status,
14
+ chapterNumber: params.chapterNumber,
15
+ targetChapters: params.targetChapters,
16
+ });
17
+ if (params.staleAfterChapters !== undefined) {
18
+ return hook.lastAdvancedChapter <= params.chapterNumber - params.staleAfterChapters;
19
+ }
20
+ return lifecycle.stale || lifecycle.overdue;
21
+ })
8
22
  .sort((left, right) => (left.lastAdvancedChapter - right.lastAdvancedChapter
9
23
  || left.startChapter - right.startChapter
10
24
  || left.hookId.localeCompare(right.hookId)));
@@ -30,6 +44,7 @@ export function evaluateHookAdmission(params) {
30
44
  const candidateNormalized = normalizeText([
31
45
  params.candidate.type,
32
46
  params.candidate.expectedPayoff ?? "",
47
+ params.candidate.payoffTiming ?? "",
33
48
  params.candidate.notes ?? "",
34
49
  ].join(" "));
35
50
  const candidateTerms = extractTerms(candidateNormalized);
@@ -38,6 +53,7 @@ export function evaluateHookAdmission(params) {
38
53
  const activeNormalized = normalizeText([
39
54
  hook.type,
40
55
  hook.expectedPayoff,
56
+ hook.payoffTiming ?? "",
41
57
  hook.notes,
42
58
  ].join(" "));
43
59
  if (candidateNormalized === activeNormalized) {
@@ -1 +1 @@
1
- {"version":3,"file":"hook-governance.js","sourceRoot":"","sources":["../../src/utils/hook-governance.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-governance.js","sourceRoot":"","sources":["../../src/utils/hook-governance.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ import type { HookRecord, RuntimeStateDelta } from "../models/runtime-state.js";
3
3
  export declare function analyzeHookHealth(params: {
4
4
  readonly language: "zh" | "en";
5
5
  readonly chapterNumber: number;
6
+ readonly targetChapters?: number;
6
7
  readonly hooks: ReadonlyArray<HookRecord>;
7
8
  readonly delta?: Pick<RuntimeStateDelta, "chapter" | "hookOps">;
8
9
  readonly existingHookIds?: ReadonlyArray<string>;
@@ -1 +1 @@
1
- {"version":3,"file":"hook-health.d.ts","sourceRoot":"","sources":["../../src/utils/hook-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAGhF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC,GAAG,UAAU,EAAE,CAqFf"}
1
+ {"version":3,"file":"hook-health.d.ts","sourceRoot":"","sources":["../../src/utils/hook-health.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AAC1D,OAAO,KAAK,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AAKhF,wBAAgB,iBAAiB,CAAC,MAAM,EAAE;IACxC,QAAQ,CAAC,QAAQ,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAC1C,QAAQ,CAAC,KAAK,CAAC,EAAE,IAAI,CAAC,iBAAiB,EAAE,SAAS,GAAG,SAAS,CAAC,CAAC;IAChE,QAAQ,CAAC,eAAe,CAAC,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IACjD,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IACrC,QAAQ,CAAC,eAAe,CAAC,EAAE,MAAM,CAAC;IAClC,QAAQ,CAAC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CACzC,GAAG,UAAU,EAAE,CA+Gf"}
@@ -1,11 +1,26 @@
1
1
  import { classifyHookDisposition, collectStaleHookDebt } from "./hook-governance.js";
2
+ import { describeHookLifecycle, localizeHookPayoffTiming } from "./hook-lifecycle.js";
3
+ import { HOOK_HEALTH_DEFAULTS } from "./hook-policy.js";
2
4
  export function analyzeHookHealth(params) {
3
- const maxActiveHooks = params.maxActiveHooks ?? 12;
4
- const staleAfterChapters = params.staleAfterChapters ?? 10;
5
- const noAdvanceWindow = params.noAdvanceWindow ?? 5;
6
- const newHookBurstThreshold = params.newHookBurstThreshold ?? 2;
5
+ const maxActiveHooks = params.maxActiveHooks ?? HOOK_HEALTH_DEFAULTS.maxActiveHooks;
6
+ const staleAfterChapters = params.staleAfterChapters ?? HOOK_HEALTH_DEFAULTS.staleAfterChapters;
7
+ const noAdvanceWindow = params.noAdvanceWindow ?? HOOK_HEALTH_DEFAULTS.noAdvanceWindow;
8
+ const newHookBurstThreshold = params.newHookBurstThreshold ?? HOOK_HEALTH_DEFAULTS.newHookBurstThreshold;
7
9
  const issues = [];
8
10
  const activeHooks = params.hooks.filter((hook) => hook.status !== "resolved");
11
+ const lifecycleEntries = activeHooks.map((hook) => ({
12
+ hook,
13
+ lifecycle: describeHookLifecycle({
14
+ payoffTiming: hook.payoffTiming,
15
+ expectedPayoff: hook.expectedPayoff,
16
+ notes: hook.notes,
17
+ startChapter: hook.startChapter,
18
+ lastAdvancedChapter: hook.lastAdvancedChapter,
19
+ status: hook.status,
20
+ chapterNumber: params.chapterNumber,
21
+ targetChapters: params.targetChapters,
22
+ }),
23
+ }));
9
24
  if (activeHooks.length > maxActiveHooks) {
10
25
  issues.push(warning(params.language, params.language === "en"
11
26
  ? `There are ${activeHooks.length} active hooks, above the recommended cap of ${maxActiveHooks}.`
@@ -13,33 +28,44 @@ export function analyzeHookHealth(params) {
13
28
  ? "Prefer advancing, resolving, or deferring existing debt before opening more hooks."
14
29
  : "优先推进、回收或延后已有伏笔,再继续开新伏笔。"));
15
30
  }
16
- const latestRealAdvance = activeHooks.reduce((max, hook) => Math.max(max, hook.lastAdvancedChapter), 0);
17
- if (activeHooks.length > 0 && params.chapterNumber - latestRealAdvance >= noAdvanceWindow) {
18
- issues.push(warning(params.language, params.language === "en"
19
- ? `No real hook advancement has landed for ${params.chapterNumber - latestRealAdvance} chapters.`
20
- : `已经连续 ${params.chapterNumber - latestRealAdvance} 章没有真实伏笔推进。`, params.language === "en"
21
- ? "Schedule one old hook for real movement instead of opening parallel restatements."
22
- : "下一章优先让一个旧伏笔发生真实推进,而不是继续平行重述。"));
23
- }
24
- const staleHooks = collectStaleHookDebt({
31
+ const staleHookIds = new Set(collectStaleHookDebt({
25
32
  hooks: activeHooks,
26
33
  chapterNumber: params.chapterNumber,
34
+ targetChapters: params.targetChapters,
27
35
  staleAfterChapters,
28
- });
29
- if (params.delta && staleHooks.length > 0) {
30
- const untouchedStale = staleHooks.filter((hook) => {
31
- const disposition = classifyHookDisposition({
32
- hookId: hook.hookId,
33
- delta: params.delta,
34
- });
35
- return disposition === "none" || disposition === "mention";
36
+ }).map((hook) => hook.hookId));
37
+ const pressuredHooks = lifecycleEntries.filter(({ hook, lifecycle }) => staleHookIds.has(hook.hookId)
38
+ || lifecycle.readyToResolve
39
+ || lifecycle.overdue);
40
+ const unresolvedPressure = pressuredHooks.filter(({ hook }) => {
41
+ if (!params.delta) {
42
+ return true;
43
+ }
44
+ const disposition = classifyHookDisposition({
45
+ hookId: hook.hookId,
46
+ delta: params.delta,
36
47
  });
37
- if (untouchedStale.length > 0) {
48
+ return disposition === "none" || disposition === "mention";
49
+ });
50
+ if (unresolvedPressure.length > 0) {
51
+ issues.push(warning(params.language, buildPressureDescription({
52
+ language: params.language,
53
+ entries: unresolvedPressure,
54
+ mentionsCurrentChapter: Boolean(params.delta),
55
+ }), params.language === "en"
56
+ ? "Move one pressured hook with a real payoff, escalation, or explicit defer before opening adjacent debt."
57
+ : "先让一个已进入压力区的伏笔发生真实推进、回收或明确延后,再继续扩展同类债务。"));
58
+ }
59
+ else {
60
+ const latestRealAdvance = activeHooks.reduce((max, hook) => Math.max(max, hook.lastAdvancedChapter), 0);
61
+ if (params.noAdvanceWindow !== undefined
62
+ && activeHooks.length > 0
63
+ && params.chapterNumber - latestRealAdvance >= noAdvanceWindow) {
38
64
  issues.push(warning(params.language, params.language === "en"
39
- ? `Stale hooks received no real disposition this chapter: ${untouchedStale.map((hook) => hook.hookId).join(", ")}.`
40
- : `本章没有真正处理这些陈旧伏笔:${untouchedStale.map((hook) => hook.hookId).join("、")}。`, params.language === "en"
41
- ? "Advance, resolve, or explicitly defer at least one stale hook."
42
- : "至少推进、回收或明确延后一个陈旧伏笔。"));
65
+ ? `No real hook advancement has landed for ${params.chapterNumber - latestRealAdvance} chapters.`
66
+ : `已经连续 ${params.chapterNumber - latestRealAdvance} 章没有真实伏笔推进。`, params.language === "en"
67
+ ? "Schedule one old hook for real movement instead of opening parallel restatements."
68
+ : "下一章优先让一个旧伏笔发生真实推进,而不是继续平行重述。"));
43
69
  }
44
70
  }
45
71
  if (params.delta) {
@@ -58,6 +84,39 @@ export function analyzeHookHealth(params) {
58
84
  }
59
85
  return issues;
60
86
  }
87
+ function buildPressureDescription(params) {
88
+ const summarized = params.entries
89
+ .slice(0, 3)
90
+ .map(({ hook, lifecycle }) => {
91
+ const timing = localizeHookPayoffTiming(lifecycle.timing, params.language);
92
+ const pressure = localizePressureLabel(lifecycle, params.language);
93
+ return params.language === "en"
94
+ ? `${hook.hookId} (${timing}, ${pressure})`
95
+ : `${hook.hookId}(${timing},${pressure})`;
96
+ });
97
+ const suffix = params.entries.length > summarized.length
98
+ ? params.language === "en"
99
+ ? `, +${params.entries.length - summarized.length} more`
100
+ : `,另有 ${params.entries.length - summarized.length} 条`
101
+ : "";
102
+ if (params.language === "en") {
103
+ return params.mentionsCurrentChapter
104
+ ? `Hooks are already under payoff pressure but this chapter left them untouched: ${summarized.join(", ")}${suffix}.`
105
+ : `Hooks are already under payoff pressure without recent movement: ${summarized.join(", ")}${suffix}.`;
106
+ }
107
+ return params.mentionsCurrentChapter
108
+ ? `这些伏笔已经进入回收/推进压力,但本章没有真正处理:${summarized.join("、")}${suffix}。`
109
+ : `这些伏笔已经进入回收/推进压力,但近期没有真实推进:${summarized.join("、")}${suffix}。`;
110
+ }
111
+ function localizePressureLabel(lifecycle, language) {
112
+ if (lifecycle.overdue) {
113
+ return language === "en" ? "overdue" : "已逾期";
114
+ }
115
+ if (lifecycle.readyToResolve) {
116
+ return language === "en" ? "ready to pay off" : "可回收";
117
+ }
118
+ return language === "en" ? "stale" : "陈旧";
119
+ }
61
120
  function warning(language, description, suggestion) {
62
121
  return {
63
122
  severity: "warning",
@@ -1 +1 @@
1
- {"version":3,"file":"hook-health.js","sourceRoot":"","sources":["../../src/utils/hook-health.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hook-health.js","sourceRoot":"","sources":["../../src/utils/hook-health.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,uBAAuB,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,MAAM,qBAAqB,CAAC;AACtF,OAAO,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAExD,MAAM,UAAU,iBAAiB,CAAC,MAWjC;IACC,MAAM,cAAc,GAAG,MAAM,CAAC,cAAc,IAAI,oBAAoB,CAAC,cAAc,CAAC;IACpF,MAAM,kBAAkB,GAAG,MAAM,CAAC,kBAAkB,IAAI,oBAAoB,CAAC,kBAAkB,CAAC;IAChG,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,IAAI,oBAAoB,CAAC,eAAe,CAAC;IACvF,MAAM,qBAAqB,GAAG,MAAM,CAAC,qBAAqB,IAAI,oBAAoB,CAAC,qBAAqB,CAAC;IACzG,MAAM,MAAM,GAAiB,EAAE,CAAC;IAEhC,MAAM,WAAW,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;IAC9E,MAAM,gBAAgB,GAAG,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;QAClD,IAAI;QACJ,SAAS,EAAE,qBAAqB,CAAC;YAC/B,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,cAAc,EAAE,IAAI,CAAC,cAAc;YACnC,KAAK,EAAE,IAAI,CAAC,KAAK;YACjB,YAAY,EAAE,IAAI,CAAC,YAAY;YAC/B,mBAAmB,EAAE,IAAI,CAAC,mBAAmB;YAC7C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,aAAa,EAAE,MAAM,CAAC,aAAa;YACnC,cAAc,EAAE,MAAM,CAAC,cAAc;SACtC,CAAC;KACH,CAAC,CAAC,CAAC;IAEJ,IAAI,WAAW,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;QACxC,MAAM,CAAC,IAAI,CAAC,OAAO,CACjB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,KAAK,IAAI;YACtB,CAAC,CAAC,aAAa,WAAW,CAAC,MAAM,+CAA+C,cAAc,GAAG;YACjG,CAAC,CAAC,OAAO,WAAW,CAAC,MAAM,mBAAmB,cAAc,KAAK,EACnE,MAAM,CAAC,QAAQ,KAAK,IAAI;YACtB,CAAC,CAAC,oFAAoF;YACtF,CAAC,CAAC,yBAAyB,CAC9B,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,oBAAoB,CAAC;QAChD,KAAK,EAAE,WAAW;QAClB,aAAa,EAAE,MAAM,CAAC,aAAa;QACnC,cAAc,EAAE,MAAM,CAAC,cAAc;QACrC,kBAAkB;KACnB,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC/B,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CACrE,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;WAC1B,SAAS,CAAC,cAAc;WACxB,SAAS,CAAC,OAAO,CACrB,CAAC;IACF,MAAM,kBAAkB,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE;QAC5D,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAClB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,WAAW,GAAG,uBAAuB,CAAC;YAC1C,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC,CAAC;QACH,OAAO,WAAW,KAAK,MAAM,IAAI,WAAW,KAAK,SAAS,CAAC;IAC7D,CAAC,CAAC,CAAC;IACH,IAAI,kBAAkB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAClC,MAAM,CAAC,IAAI,CAAC,OAAO,CACjB,MAAM,CAAC,QAAQ,EACf,wBAAwB,CAAC;YACvB,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,OAAO,EAAE,kBAAkB;YAC3B,sBAAsB,EAAE,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC;SAC9C,CAAC,EACF,MAAM,CAAC,QAAQ,KAAK,IAAI;YACtB,CAAC,CAAC,yGAAyG;YAC3G,CAAC,CAAC,wCAAwC,CAC7C,CAAC,CAAC;IACL,CAAC;SAAM,CAAC;QACN,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,CAC1C,CAAC,GAAG,EAAE,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,mBAAmB,CAAC,EACtD,CAAC,CACF,CAAC;QACF,IACE,MAAM,CAAC,eAAe,KAAK,SAAS;eACjC,WAAW,CAAC,MAAM,GAAG,CAAC;eACtB,MAAM,CAAC,aAAa,GAAG,iBAAiB,IAAI,eAAe,EAC9D,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,OAAO,CACjB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACtB,CAAC,CAAC,2CAA2C,MAAM,CAAC,aAAa,GAAG,iBAAiB,YAAY;gBACjG,CAAC,CAAC,QAAQ,MAAM,CAAC,aAAa,GAAG,iBAAiB,aAAa,EACjE,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACtB,CAAC,CAAC,mFAAmF;gBACrF,CAAC,CAAC,8BAA8B,CACnC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,eAAe,IAAI,EAAE,CAAC,CAAC;QAC9D,MAAM,gBAAgB,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;QAC1E,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM;aAC3C,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;aAC1B,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,IAAI,gBAAgB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC;QAEpF,IAAI,UAAU,CAAC,MAAM,IAAI,qBAAqB,IAAI,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC5F,MAAM,CAAC,IAAI,CAAC,OAAO,CACjB,MAAM,CAAC,QAAQ,EACf,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACtB,CAAC,CAAC,UAAU,UAAU,CAAC,MAAM,8CAA8C;gBAC3E,CAAC,CAAC,SAAS,UAAU,CAAC,MAAM,iBAAiB,EAC/C,MAAM,CAAC,QAAQ,KAAK,IAAI;gBACtB,CAAC,CAAC,+EAA+E;gBACjF,CAAC,CAAC,wBAAwB,CAC7B,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,wBAAwB,CAAC,MAOjC;IACC,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO;SAC9B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE;QAC3B,MAAM,MAAM,GAAG,wBAAwB,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC3E,MAAM,QAAQ,GAAG,qBAAqB,CAAC,SAAS,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC;QACnE,OAAO,MAAM,CAAC,QAAQ,KAAK,IAAI;YAC7B,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,KAAK,MAAM,KAAK,QAAQ,GAAG;YAC3C,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,IAAI,MAAM,IAAI,QAAQ,GAAG,CAAC;IAC9C,CAAC,CAAC,CAAC;IACL,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM;QACtD,CAAC,CAAC,MAAM,CAAC,QAAQ,KAAK,IAAI;YACxB,CAAC,CAAC,MAAM,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,OAAO;YACxD,CAAC,CAAC,OAAO,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,UAAU,CAAC,MAAM,IAAI;QACxD,CAAC,CAAC,EAAE,CAAC;IAEP,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,sBAAsB;YAClC,CAAC,CAAC,iFAAiF,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG;YACpH,CAAC,CAAC,oEAAoE,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,CAAC;IAC5G,CAAC;IAED,OAAO,MAAM,CAAC,sBAAsB;QAClC,CAAC,CAAC,6BAA6B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG;QAC/D,CAAC,CAAC,6BAA6B,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AACpE,CAAC;AAED,SAAS,qBAAqB,CAC5B,SAAmD,EACnD,QAAqB;IAErB,IAAI,SAAS,CAAC,OAAO,EAAE,CAAC;QACtB,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC;IAC/C,CAAC;IACD,IAAI,SAAS,CAAC,cAAc,EAAE,CAAC;QAC7B,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC,KAAK,CAAC;IACxD,CAAC;IACD,OAAO,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC;AAC5C,CAAC;AAED,SAAS,OAAO,CACd,QAAqB,EACrB,WAAmB,EACnB,UAAkB;IAElB,OAAO;QACL,QAAQ,EAAE,SAAS;QACnB,QAAQ,EAAE,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM;QAClD,WAAW;QACX,UAAU;KACX,CAAC;AACJ,CAAC"}
@@ -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