@evomap/evolver-core 2.0.0-beta.9 → 2.0.1

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 (201) hide show
  1. package/dist/algo/antiDistill.js +1 -167
  2. package/dist/algo/bans.js +1 -33
  3. package/dist/algo/candidateAssembly.d.ts +7 -2
  4. package/dist/algo/candidateAssembly.js +1 -205
  5. package/dist/algo/capabilityCandidates.js +1 -136
  6. package/dist/algo/confidence.js +1 -196
  7. package/dist/algo/conversationSniffer.js +1 -149
  8. package/dist/algo/cycleEngine.d.ts +23 -2
  9. package/dist/algo/cycleEngine.js +1 -425
  10. package/dist/algo/cycleFailureClassifier.js +1 -112
  11. package/dist/algo/epigenetics.js +1 -41
  12. package/dist/algo/evolutionEvent.js +1 -24
  13. package/dist/algo/exploration.d.ts +7 -0
  14. package/dist/algo/exploration.js +1 -55
  15. package/dist/algo/geneHealth.d.ts +2 -2
  16. package/dist/algo/geneHealth.js +1 -16
  17. package/dist/algo/geneIntake.js +1 -128
  18. package/dist/algo/genePromotion.js +1 -53
  19. package/dist/algo/geneSelection.d.ts +63 -5
  20. package/dist/algo/geneSelection.js +1 -246
  21. package/dist/algo/index.d.ts +2 -0
  22. package/dist/algo/index.js +1 -20
  23. package/dist/algo/memoryGraph.js +1 -86
  24. package/dist/algo/mutation.js +1 -22
  25. package/dist/algo/orchestrator.d.ts +8 -1
  26. package/dist/algo/orchestrator.js +1 -75
  27. package/dist/algo/publishEligibility.d.ts +34 -0
  28. package/dist/algo/publishEligibility.js +1 -0
  29. package/dist/algo/solidify.js +1 -63
  30. package/dist/algo/strategyPresets.js +1 -61
  31. package/dist/algo/ucb1.d.ts +53 -0
  32. package/dist/algo/ucb1.js +1 -0
  33. package/dist/assetstore/assetSidecarRecords.d.ts +7 -2
  34. package/dist/assetstore/assetSidecarRecords.js +238 -0
  35. package/dist/assetstore/assetSidecarRecovery.js +2 -2
  36. package/dist/assetstore/assetStoreHealth.d.ts +6 -0
  37. package/dist/assetstore/assetStoreHealth.js +56 -14
  38. package/dist/assetstore/assetStoreStorage.d.ts +1 -1
  39. package/dist/assetstore/assetStoreStorage.js +27 -9
  40. package/dist/assetstore/assetSyncLedger.d.ts +86 -0
  41. package/dist/assetstore/assetSyncLedger.js +683 -4
  42. package/dist/assetstore/index.d.ts +1 -0
  43. package/dist/assetstore/index.js +1 -0
  44. package/dist/assetstore/localAssetStoreSnapshot.d.ts +51 -0
  45. package/dist/assetstore/localAssetStoreSnapshot.js +329 -0
  46. package/dist/assetstore/localJsonl.d.ts +4 -2
  47. package/dist/assetstore/localJsonl.js +89 -9
  48. package/dist/assetstore/provenance.d.ts +80 -4
  49. package/dist/assetstore/provenance.js +313 -5
  50. package/dist/assetstore/provider.d.ts +58 -1
  51. package/dist/assetstore/provider.js +97 -6
  52. package/dist/benchmark/antiGeneBenchmark.d.ts +2 -0
  53. package/dist/benchmark/antiGeneBenchmark.js +1 -251
  54. package/dist/benchmark/antiGeneImpact.js +1 -34
  55. package/dist/benchmark/antiGeneRollout.d.ts +2 -0
  56. package/dist/benchmark/antiGeneRollout.js +1 -268
  57. package/dist/benchmark/benchmark.js +1 -26
  58. package/dist/benchmark/evolutionThesisSolver.js +1 -41
  59. package/dist/benchmark/index.d.ts +2 -1
  60. package/dist/benchmark/index.js +1 -6
  61. package/dist/benchmark/selectionFlatAbstention.d.ts +152 -0
  62. package/dist/benchmark/selectionFlatAbstention.js +1 -0
  63. package/dist/benchmark/thesis.js +1 -150
  64. package/dist/benchmark/triggerShift.js +1 -106
  65. package/dist/bootstrap/envFingerprint.d.ts +9 -0
  66. package/dist/bootstrap/envFingerprint.js +5 -0
  67. package/dist/bootstrap/index.d.ts +2 -1
  68. package/dist/bootstrap/index.js +2 -1
  69. package/dist/bootstrap/v1EnvCompat.d.ts +111 -0
  70. package/dist/bootstrap/v1EnvCompat.js +280 -0
  71. package/dist/cycle/cycleTimeline.js +1 -74
  72. package/dist/cycle/index.js +1 -2
  73. package/dist/cycle/stateMachine.js +1 -25
  74. package/dist/events/eventArchive.d.ts +2 -0
  75. package/dist/events/eventArchive.js +13 -3
  76. package/dist/events/eventSchema.d.ts +7 -7
  77. package/dist/events/eventStore.d.ts +2 -0
  78. package/dist/events/eventStore.js +5 -1
  79. package/dist/events/ingest.d.ts +1 -0
  80. package/dist/events/ingest.js +1 -0
  81. package/dist/events/paths.d.ts +3 -1
  82. package/dist/events/paths.js +4 -0
  83. package/dist/events/public.d.ts +2 -2
  84. package/dist/events/public.js +2 -2
  85. package/dist/events/reports.d.ts +2 -0
  86. package/dist/events/reports.js +4 -0
  87. package/dist/exec/autoExec.d.ts +43 -2
  88. package/dist/exec/autoExec.js +76 -9
  89. package/dist/exec/autonomousCycle.d.ts +22 -4
  90. package/dist/exec/autonomousCycle.js +64 -13
  91. package/dist/exec/claudeBridge.d.ts +32 -7
  92. package/dist/exec/claudeBridge.js +281 -29
  93. package/dist/exec/prompt.js +5 -1
  94. package/dist/exec/runnerRegistry.d.ts +68 -26
  95. package/dist/exec/runnerRegistry.js +307 -72
  96. package/dist/exec/selfPr.js +1 -7
  97. package/dist/feedback/envelope.d.ts +61 -0
  98. package/dist/feedback/envelope.js +168 -0
  99. package/dist/feedback/index.d.ts +1 -0
  100. package/dist/feedback/index.js +1 -0
  101. package/dist/hooks/hooks.js +1 -0
  102. package/dist/hub/agentDirectory.js +1 -104
  103. package/dist/hub/assetCallLog.d.ts +35 -1
  104. package/dist/hub/assetCallLog.js +1 -72
  105. package/dist/hub/bindings.d.ts +8 -1
  106. package/dist/hub/bindings.js +1 -110
  107. package/dist/hub/capability.d.ts +90 -3
  108. package/dist/hub/capability.js +1 -1
  109. package/dist/hub/conversationDistiller.js +1 -264
  110. package/dist/hub/fake.d.ts +2 -2
  111. package/dist/hub/fake.js +1 -70
  112. package/dist/hub/hubReview.js +1 -106
  113. package/dist/hub/index.js +1 -11
  114. package/dist/hub/ingest.js +1 -15
  115. package/dist/hub/questionGenerator.d.ts +5 -1
  116. package/dist/hub/questionGenerator.js +1 -406
  117. package/dist/hub/reuseDecision.js +1 -127
  118. package/dist/hub/sanitize.js +1 -322
  119. package/dist/index.d.ts +3 -1
  120. package/dist/index.js +4 -1
  121. package/dist/mailbox/dispatch.d.ts +1 -1
  122. package/dist/mailbox/dispatch.js +22 -6
  123. package/dist/mailbox/envelope.d.ts +7 -1
  124. package/dist/mailbox/envelope.js +9 -2
  125. package/dist/mailbox/ipcServer.d.ts +10 -2
  126. package/dist/mailbox/ipcServer.js +163 -13
  127. package/dist/mailbox/store.d.ts +89 -3
  128. package/dist/mailbox/store.js +895 -41
  129. package/dist/material/boundary.js +1 -14
  130. package/dist/material/consumer.js +1 -55
  131. package/dist/material/emit.js +1 -52
  132. package/dist/material/factory.js +1 -25
  133. package/dist/material/index.js +1 -9
  134. package/dist/material/materialArchive.js +1 -466
  135. package/dist/material/materialStore.js +1 -69
  136. package/dist/material/sampling.js +1 -39
  137. package/dist/material/sources.js +1 -33
  138. package/dist/material/watermark.js +1 -76
  139. package/dist/ops/evolutionGraphProjection.d.ts +20 -0
  140. package/dist/ops/evolutionGraphProjection.js +315 -0
  141. package/dist/ops/index.d.ts +2 -1
  142. package/dist/ops/index.js +2 -1
  143. package/dist/ops/selfUpdate.d.ts +8 -0
  144. package/dist/ops/selfUpdate.js +24 -8
  145. package/dist/personality/drift.js +1 -106
  146. package/dist/personality/events.js +1 -37
  147. package/dist/personality/evolveOps.js +1 -93
  148. package/dist/personality/index.js +1 -11
  149. package/dist/personality/mutate.js +1 -39
  150. package/dist/personality/pivot.js +1 -22
  151. package/dist/personality/prompt.js +1 -62
  152. package/dist/personality/riskGate.js +1 -80
  153. package/dist/personality/schema.d.ts +16 -16
  154. package/dist/personality/schema.js +1 -119
  155. package/dist/personality/select.js +1 -71
  156. package/dist/personality/stats.js +1 -82
  157. package/dist/personality/store.js +1 -92
  158. package/dist/schema/common.js +1 -17
  159. package/dist/schema/evolutionGraph.d.ts +784 -0
  160. package/dist/schema/evolutionGraph.js +1 -0
  161. package/dist/schema/index.d.ts +1 -0
  162. package/dist/schema/index.js +1 -5
  163. package/dist/schema/material.js +1 -50
  164. package/dist/schema/problem.js +1 -45
  165. package/dist/schema/proofOfWork.js +1 -9
  166. package/dist/schema/signal.d.ts +3 -3
  167. package/dist/schema/signal.js +1 -19
  168. package/dist/signals/curriculum.d.ts +55 -0
  169. package/dist/signals/curriculum.js +1 -0
  170. package/dist/signals/cycleHistoryFromEvents.js +1 -96
  171. package/dist/signals/expand.d.ts +15 -1
  172. package/dist/signals/expand.js +1 -125
  173. package/dist/signals/extractor.d.ts +2 -2
  174. package/dist/signals/extractor.js +1 -57
  175. package/dist/signals/index.d.ts +3 -1
  176. package/dist/signals/index.js +1 -6
  177. package/dist/signals/metaSignals.d.ts +4 -0
  178. package/dist/signals/metaSignals.js +1 -158
  179. package/dist/signals/signalGate.js +1 -40
  180. package/dist/signals/taskDomain.d.ts +22 -0
  181. package/dist/signals/taskDomain.js +1 -0
  182. package/dist/signals/traceSignals.js +1 -123
  183. package/dist/strategy/constraintAblation.js +1 -3074
  184. package/dist/strategy/constraintAblationPredicates.d.ts +31 -0
  185. package/dist/strategy/constraintAblationPredicates.js +1 -0
  186. package/dist/strategy/experiment.js +1 -63
  187. package/dist/strategy/index.js +1 -3
  188. package/dist/strategy/strategyPoint.js +1 -23
  189. package/dist/trace/index.d.ts +3 -1
  190. package/dist/trace/index.js +3 -1
  191. package/dist/trace/learningTrace.d.ts +209 -0
  192. package/dist/trace/learningTrace.js +276 -0
  193. package/dist/trace/proxyTurns.d.ts +31 -0
  194. package/dist/trace/proxyTurns.js +137 -0
  195. package/dist/verify/sandboxRunner.d.ts +28 -0
  196. package/dist/verify/sandboxRunner.js +218 -19
  197. package/dist/verify/sandboxedValidation.d.ts +9 -0
  198. package/dist/verify/sandboxedValidation.js +113 -13
  199. package/dist/verify/validation.d.ts +11 -1
  200. package/dist/verify/validation.js +31 -0
  201. package/package.json +5 -2
@@ -1,149 +1 @@
1
- import { createHash } from 'node:crypto';
2
- import { redactString } from '../hub/sanitize.js';
3
- // The Chinese branches require compound/intentful phrases on purpose: everyday words (能力/流程/成功/通过)
4
- // occur in nearly every Chinese dev session, and matching them bare made this fallback the DOMINANT distill
5
- // path — 105 of 118 drafts in one bulk ingest (#562). English gets specificity from \b word boundaries;
6
- // Chinese has no \b, so specificity must come from the phrase itself.
7
- const REUSABLE_RE = /\b(reusable|repeatable|workflow|playbook|runbook|capability|procedure|pattern|recipe|documented|future runs?|next time|can reuse|reuse this)\b|复用|可重用|工作流(?!程)|方法论|沉淀/i;
8
- const PROOF_RE = /\b(validated|verified|passed|green|success(?:ful|fully)?|succeeded|works?|completed|published|uploaded|recorded:true|exit code:?\s*0|all tests passed)\b|(?:验证|校验|测试|检查|构建|编译|运行|执行|部署|发布)(?:都|均|全部)?(?:通过|成功)|全部通过|跑通|已(?:验证|发布|上线)/i;
9
- const FAILURE_RE = /\b(failed|failure|error|exception|traceback|exit code:?\s*[1-9]|not working|unable to)\b|失败|错误|报错/i;
10
- const CHINESE_NEGATED_PROOF_PREFIX_SOURCE = '(?:尚未|并未|还没有|尚没有|并没有|没有|未能|无法|不能|不曾|并非|未|没)';
11
- const CHINESE_NEGATED_PROOF_SOURCE = `(?:${CHINESE_NEGATED_PROOF_PREFIX_SOURCE}\\s*(?:验证|校验|测试|检查|构建|编译|运行|执行|部署|发布)(?:都|均|全部)?\\s*(?:通过|成功)|(?:验证|校验|测试|检查|构建|编译|运行|执行|部署|发布)(?:仍|还|尚)?(?:没有|未能|未)(?:都|均|全部)?\\s*(?:通过|成功))`;
12
- const CHINESE_NEGATED_PROOF_RE = new RegExp(CHINESE_NEGATED_PROOF_SOURCE, 'i');
13
- const CHINESE_NEGATED_PROOF_GLOBAL_RE = new RegExp(CHINESE_NEGATED_PROOF_SOURCE, 'gi');
14
- const EXIT_ZERO_RE = /\bexit code:?\s*0\b/i;
15
- const EXIT_NON_ZERO_RE = /\bexit code:?\s*[1-9]\d*\b/i;
16
- const DOMAIN_TOKENS = [
17
- [/\b(lark|feishu|飞书)\b/i, 'lark'],
18
- [/\b(github|gh|pull request|bugbot)\b/i, 'github'],
19
- [/\b(playwright|screenshot|visual)\b/i, 'playwright'],
20
- [/\b(vitest|jest|test)\b/i, 'test'],
21
- [/\b(pnpm|npm|yarn)\b/i, 'package-manager'],
22
- [/\b(hub|publish|marketplace)\b/i, 'hub-publish'],
23
- [/\b(release|checksum|sha256)\b/i, 'release'],
24
- [/\b(api|http|endpoint)\b/i, 'api'],
25
- [/\b(document|docs?|markdown)\b/i, 'docs'],
26
- ];
27
- function cleanText(value, max = 220) {
28
- const text = redactString(String(value ?? '').replace(/\s+/g, ' ').trim());
29
- return text.length > max ? `${text.slice(0, max - 3)}...` : text;
30
- }
31
- function turnText(turn) {
32
- return cleanText([turn.text, turn.toolResult, turn.errorMessage].filter(Boolean).join('\n'), 500);
33
- }
34
- function stableId(parts) {
35
- return `conversation_capability_${createHash('sha1').update(JSON.stringify(parts), 'utf8').digest('hex').slice(0, 12)}`;
36
- }
37
- function normalizeSignal(value) {
38
- return value.toLowerCase().replace(/[^a-z0-9]+/g, '_').replace(/^_+|_+$/g, '').slice(0, 48);
39
- }
40
- function collectToolCalls(turns) {
41
- const seen = new Set();
42
- for (const turn of turns) {
43
- const tool = cleanText(turn.toolName ?? '', 80);
44
- if (tool)
45
- seen.add(tool);
46
- }
47
- return [...seen].slice(0, 8);
48
- }
49
- function domainSignals(text, toolCalls) {
50
- const out = new Set();
51
- for (const [re, signal] of DOMAIN_TOKENS) {
52
- if (re.test(text))
53
- out.add(signal);
54
- }
55
- for (const tool of toolCalls) {
56
- const normalized = normalizeSignal(tool);
57
- if (normalized)
58
- out.add(normalized);
59
- }
60
- return [...out].slice(0, 6);
61
- }
62
- function isToolTurn(turn) {
63
- return turn.role === 'tool' || Boolean(turn.toolName);
64
- }
65
- function hasPositiveProof(text) {
66
- return PROOF_RE.test(text.replace(CHINESE_NEGATED_PROOF_GLOBAL_RE, ''));
67
- }
68
- function hasFailure(text) {
69
- return FAILURE_RE.test(text) || CHINESE_NEGATED_PROOF_RE.test(text);
70
- }
71
- function classifyToolOutcome(turn) {
72
- const text = turnText(turn);
73
- if (EXIT_NON_ZERO_RE.test(text))
74
- return 'failure';
75
- // A semantic "not yet successful" result is not proof even when the command process itself exited zero.
76
- if (CHINESE_NEGATED_PROOF_RE.test(text))
77
- return 'failure';
78
- if (EXIT_ZERO_RE.test(text))
79
- return 'success';
80
- if (hasPositiveProof(text) && !FAILURE_RE.test(text))
81
- return 'success';
82
- if (hasFailure(text))
83
- return 'failure';
84
- return 'unknown';
85
- }
86
- function hasTerminalSuccessfulToolRun(turns) {
87
- let lastDecisive = 'unknown';
88
- for (const turn of turns) {
89
- if (!isToolTurn(turn))
90
- continue;
91
- const outcome = classifyToolOutcome(turn);
92
- if (outcome !== 'unknown')
93
- lastDecisive = outcome;
94
- }
95
- return lastDecisive === 'success';
96
- }
97
- function pickEvidence(turns, matcher, max = 3) {
98
- const evidence = [];
99
- for (const turn of turns) {
100
- const text = turnText(turn);
101
- if (!text || !(typeof matcher === 'function' ? matcher(text) : matcher.test(text)))
102
- continue;
103
- evidence.push(cleanText(text, 180));
104
- if (evidence.length >= max)
105
- break;
106
- }
107
- return evidence;
108
- }
109
- function pickSummary(turns, reusableEvidence, proofEvidence) {
110
- const assistant = turns
111
- .filter((turn) => turn.role === 'assistant' && !turn.isMeta)
112
- .map(turnText)
113
- .find((text) => text.length >= 40 && (REUSABLE_RE.test(text) || hasPositiveProof(text)));
114
- return cleanText(assistant ?? reusableEvidence[0] ?? proofEvidence[0] ?? 'Verified reusable conversation capability.', 180);
115
- }
116
- export function sniffConversationCapabilities(turns, opts = {}) {
117
- const usableTurns = turns.filter((turn) => !turn.isMeta);
118
- if (usableTurns.length === 0)
119
- return [];
120
- const allText = usableTurns.map(turnText).filter(Boolean).join('\n');
121
- if (!allText.trim())
122
- return [];
123
- const reusableEvidence = pickEvidence(usableTurns, REUSABLE_RE);
124
- const proofEvidence = pickEvidence(usableTurns, hasPositiveProof);
125
- if (reusableEvidence.length === 0 || proofEvidence.length === 0)
126
- return [];
127
- const failureOnly = hasFailure(allText) && !hasPositiveProof(allText);
128
- if (failureOnly)
129
- return [];
130
- if (!hasTerminalSuccessfulToolRun(usableTurns))
131
- return [];
132
- const toolCalls = collectToolCalls(usableTurns);
133
- const domain = domainSignals(allText, toolCalls);
134
- const signals = [...new Set(['reusable_capability', 'verified_workflow', ...domain])].slice(0, 8);
135
- const score = 4 + Math.min(2, reusableEvidence.length) + Math.min(2, proofEvidence.length) + Math.min(2, toolCalls.length);
136
- const summary = pickSummary(usableTurns, reusableEvidence, proofEvidence);
137
- const titleSignal = domain[0] ?? 'verified workflow';
138
- const hit = {
139
- id: stableId({ summary, signals, evidence: [...reusableEvidence, ...proofEvidence].slice(0, 4) }),
140
- title: `Verified reusable capability: ${titleSignal}`,
141
- summary,
142
- signals,
143
- evidence: [...reusableEvidence, ...proofEvidence].slice(0, 4),
144
- score,
145
- reasons: ['reusable_marker', 'proof_marker', ...(toolCalls.length > 0 ? ['tool_evidence'] : [])],
146
- toolCalls,
147
- };
148
- return [hit].slice(0, opts.maxHits ?? 1);
149
- }
1
+ const _0x39adb0=_0x3c9f;(function(_0x472bbf,_0x5a0772){const _0x4a06e7=_0x3c9f,_0x507ff5=_0x472bbf();while(!![]){try{const _0x2535be=parseInt(_0x4a06e7(0x239,'\x34\x53\x38\x58'))/(-0x9*-0x22+0x221+-0x352)*(parseInt(_0x4a06e7(0x218,'\x4e\x32\x67\x32'))/(-0x1fe5+-0x91c*-0x1+0x16cb))+-parseInt(_0x4a06e7(0x251,'\x4b\x32\x48\x43'))/(0x1e4e*-0x1+0x955+0x14fc)*(-parseInt(_0x4a06e7(0x1f3,'\x6c\x24\x52\x4b'))/(0x24f0+0xc33+-0x311f*0x1))+parseInt(_0x4a06e7(0x202,'\x45\x36\x78\x57'))/(0xe53+0x26*-0x107+0x18bc)*(parseInt(_0x4a06e7(0x21a,'\x74\x31\x35\x46'))/(-0x206a+0x16*-0x185+0x41de*0x1))+-parseInt(_0x4a06e7(0x238,'\x6e\x33\x5b\x33'))/(-0x23b6+0x1f0e+0x4af)*(-parseInt(_0x4a06e7(0x1f9,'\x73\x23\x6d\x6e'))/(-0x6c*0x59+-0x7*-0x549+-0x95*-0x1))+parseInt(_0x4a06e7(0x262,'\x6f\x6b\x77\x44'))/(-0x1e61+0x104b+0xe1f)+-parseInt(_0x4a06e7(0x23d,'\x6f\x6b\x77\x44'))/(-0x23b+-0xf33+0x1178)*(-parseInt(_0x4a06e7(0x20f,'\x50\x61\x24\x46'))/(-0x961+0x19c3+-0x1057*0x1))+-parseInt(_0x4a06e7(0x204,'\x4e\x32\x67\x32'))/(-0xef6+-0x25a6+0x34a8);if(_0x2535be===_0x5a0772)break;else _0x507ff5['push'](_0x507ff5['shift']());}catch(_0x438bfc){_0x507ff5['push'](_0x507ff5['shift']());}}}(_0x1b6f,0xe9918+-0x157b66+0x156230));function _0x1b6f(){const _0x32ee74=['\x70\x31\x68\x64\x4d\x43\x6f\x37\x57\x50\x69\x42\x68\x53\x6f\x44','\x57\x4f\x35\x65\x62\x65\x6d\x4e\x57\x4f\x4a\x64\x50\x4d\x71','\x57\x51\x54\x4f\x57\x50\x33\x64\x51\x57','\x7a\x55\x41\x4a\x4a\x45\x4d\x52\x4b\x38\x6f\x37\x35\x52\x73\x7a\x36\x6b\x2b\x42\x6f\x55\x41\x48\x55\x57','\x57\x37\x52\x64\x53\x43\x6b\x7a\x57\x37\x66\x50\x57\x52\x4a\x63\x54\x6d\x6f\x2f','\x57\x4f\x79\x32\x57\x4f\x47\x49\x77\x71','\x57\x51\x31\x49\x57\x4f\x6c\x64\x55\x47','\x57\x34\x56\x63\x56\x4a\x64\x64\x4e\x71','\x45\x6f\x73\x34\x4e\x6f\x41\x42\x50\x58\x6c\x4c\x55\x52\x4a\x50\x4e\x34\x43\x61\x35\x50\x59\x49','\x57\x50\x68\x64\x51\x43\x6f\x4d\x6c\x57','\x67\x43\x6b\x45\x6c\x66\x30\x33','\x57\x37\x58\x50\x76\x47','\x46\x43\x6b\x52\x57\x51\x2f\x64\x51\x38\x6b\x61\x57\x35\x44\x57\x42\x61','\x57\x50\x4e\x64\x4b\x64\x4f\x6b\x66\x48\x46\x63\x4e\x61','\x7a\x49\x57\x6b\x63\x73\x64\x63\x51\x53\x6f\x33\x46\x61','\x57\x50\x58\x63\x73\x53\x6f\x32\x57\x34\x79\x2b\x57\x52\x65\x55\x57\x36\x42\x64\x4c\x61','\x45\x53\x6b\x44\x73\x65\x2f\x63\x50\x43\x6f\x50\x78\x72\x56\x63\x4a\x6d\x6f\x6c\x41\x57','\x57\x36\x66\x7a\x65\x53\x6f\x35','\x43\x43\x6f\x31\x6f\x53\x6f\x6d\x57\x50\x37\x64\x56\x43\x6b\x74\x70\x71','\x57\x51\x37\x63\x4f\x6d\x6b\x71\x57\x36\x66\x5a\x57\x52\x4f','\x57\x35\x6a\x6c\x57\x4f\x65\x63\x75\x71\x30\x44\x6e\x47','\x64\x43\x6b\x7a\x46\x71','\x57\x51\x74\x63\x52\x6d\x6b\x71\x57\x36\x69','\x57\x36\x52\x64\x4f\x53\x6f\x49\x57\x36\x65\x7a\x7a\x57','\x6d\x5a\x75\x6f\x66\x73\x74\x63\x55\x38\x6f\x31','\x79\x53\x6f\x44\x57\x51\x42\x64\x55\x47','\x57\x4f\x33\x64\x4e\x64\x4f\x42\x65\x48\x79','\x79\x49\x53\x63\x57\x52\x52\x63\x54\x57','\x35\x37\x59\x66\x79\x2b\x77\x6f\x48\x6f\x77\x37\x54\x57\x46\x64\x4e\x6d\x6f\x61\x76\x61','\x57\x50\x42\x64\x4f\x6d\x6f\x38\x6f\x66\x4f','\x65\x53\x6b\x37\x57\x37\x61\x62\x70\x4a\x74\x63\x4e\x38\x6b\x59','\x57\x36\x52\x64\x52\x53\x6f\x34\x57\x37\x39\x78\x6c\x57','\x57\x52\x68\x63\x51\x43\x6b\x78\x57\x36\x76\x49','\x57\x36\x48\x39\x76\x49\x42\x64\x56\x6d\x6b\x4c','\x57\x51\x48\x39\x57\x50\x78\x63\x53\x61','\x42\x64\x79\x56','\x57\x37\x42\x63\x4b\x6d\x6f\x5a\x71\x38\x6b\x54\x42\x61','\x57\x50\x5a\x64\x51\x48\x70\x63\x47\x53\x6b\x69\x6c\x4d\x4a\x63\x49\x71','\x44\x53\x6b\x6a\x6d\x43\x6f\x47\x6a\x4d\x79','\x44\x33\x31\x57\x64\x43\x6b\x52','\x57\x52\x78\x63\x55\x6d\x6b\x4a\x57\x51\x4c\x69\x61\x73\x39\x46\x6f\x47\x4b','\x57\x36\x5a\x4c\x4a\x6b\x4a\x4c\x55\x50\x57\x45\x57\x36\x61\x48\x7a\x55\x4d\x64\x4a\x47','\x61\x38\x6b\x2f\x57\x37\x53\x66','\x77\x38\x6f\x59\x57\x51\x69\x2f\x6f\x38\x6b\x36\x6d\x57','\x57\x52\x4c\x53\x57\x4f\x46\x64\x53\x38\x6b\x64\x70\x62\x57','\x77\x31\x6c\x64\x52\x53\x6b\x30\x57\x35\x47\x74\x57\x34\x38\x4b\x57\x35\x52\x63\x49\x71','\x57\x35\x56\x64\x52\x38\x6f\x4a','\x57\x36\x56\x64\x53\x65\x37\x4c\x53\x79\x56\x4d\x4e\x34\x4e\x63\x53\x6f\x77\x35\x4b\x2b\x41\x43\x49\x71','\x57\x34\x30\x79\x68\x38\x6b\x4b\x57\x36\x57\x71','\x57\x35\x66\x30\x76\x53\x6b\x2f','\x79\x53\x6f\x78\x57\x52\x52\x64\x4f\x47','\x46\x43\x6f\x4c\x6e\x53\x6b\x63\x57\x4f\x53','\x36\x6b\x2b\x43\x65\x55\x41\x49\x49\x2b\x4d\x4f\x4a\x78\x5a\x4d\x54\x4f\x74\x4f\x52\x4f\x46\x63\x4b\x61','\x57\x4f\x4e\x63\x55\x61\x34\x77','\x70\x38\x6f\x42\x68\x62\x37\x64\x53\x38\x6f\x73\x73\x57','\x73\x38\x6b\x46\x57\x34\x37\x50\x47\x79\x4a\x4f\x56\x7a\x72\x6b\x35\x4f\x55\x77\x35\x79\x55\x4e','\x65\x72\x78\x64\x50\x58\x38\x72\x72\x6d\x6b\x69\x70\x43\x6b\x65\x6d\x49\x54\x68\x43\x71\x38','\x57\x35\x72\x70\x57\x34\x66\x52\x69\x68\x58\x79\x6f\x64\x4f\x33\x57\x35\x52\x64\x4f\x6d\x6f\x50','\x67\x6d\x6f\x68\x57\x37\x58\x52\x57\x50\x52\x64\x54\x6d\x6f\x41\x45\x58\x5a\x64\x4d\x71','\x45\x6d\x6f\x34\x61\x43\x6b\x4e\x57\x50\x53','\x57\x34\x4a\x63\x51\x45\x41\x59\x50\x45\x41\x44\x53\x53\x6b\x7a\x35\x50\x59\x73\x36\x69\x63\x54\x57\x35\x75','\x35\x50\x36\x78\x36\x69\x63\x38\x57\x35\x5a\x4d\x4c\x36\x56\x4d\x53\x4f\x6a\x35\x35\x6c\x4d\x70\x36\x69\x6b\x7a','\x72\x53\x6b\x44\x57\x51\x43','\x78\x38\x6b\x72\x57\x52\x4f\x55','\x66\x66\x33\x64\x4c\x38\x6f\x4e\x57\x51\x57\x43\x61\x43\x6f\x79','\x57\x37\x5a\x63\x4e\x6d\x6f\x58\x75\x6d\x6b\x38\x44\x47','\x57\x37\x74\x64\x52\x53\x6f\x4d\x57\x37\x72\x63\x6a\x64\x6d','\x70\x38\x6f\x70\x63\x58\x74\x64\x55\x43\x6f\x70\x67\x61\x65','\x57\x35\x52\x64\x55\x59\x64\x64\x48\x53\x6f\x56\x57\x51\x64\x63\x4d\x38\x6b\x34','\x35\x50\x59\x38\x68\x63\x68\x63\x48\x57\x42\x50\x47\x6c\x4f\x58\x35\x7a\x36\x63','\x7a\x45\x77\x46\x48\x59\x74\x4c\x48\x4f\x4e\x50\x47\x69\x42\x63\x4f\x43\x6f\x6f\x64\x71','\x57\x34\x61\x63\x6e\x43\x6b\x4b\x57\x36\x53\x66','\x57\x4f\x70\x64\x56\x63\x5a\x63\x4a\x53\x6b\x41\x6a\x47','\x68\x43\x6b\x58\x57\x37\x61\x71\x6c\x59\x34','\x46\x6d\x6b\x6e\x6e\x53\x6f\x52\x6a\x33\x57\x4a','\x57\x50\x42\x64\x54\x32\x61','\x45\x47\x4a\x63\x47\x38\x6b\x4b\x57\x37\x4c\x6f\x77\x6d\x6b\x66\x6e\x6d\x6b\x32\x57\x34\x58\x6a\x57\x35\x33\x63\x54\x47','\x46\x58\x74\x64\x47\x53\x6f\x47\x57\x35\x4f','\x57\x34\x38\x71\x65\x43\x6b\x54\x57\x36\x4f\x77\x57\x52\x4b','\x57\x52\x66\x55\x57\x4f\x57','\x57\x50\x33\x63\x4a\x66\x52\x64\x55\x30\x57\x57\x57\x52\x5a\x64\x4c\x47','\x57\x36\x48\x4a\x77\x73\x4e\x64\x50\x38\x6b\x33\x71\x71','\x71\x77\x37\x63\x52\x76\x44\x55','\x76\x30\x6c\x63\x53\x30\x4f','\x57\x4f\x4b\x2b\x68\x57','\x57\x4f\x5a\x64\x56\x38\x6f\x39','\x35\x4f\x55\x74\x35\x79\x4d\x71\x78\x73\x33\x64\x49\x38\x6f\x5a\x68\x2b\x4d\x51\x52\x57','\x45\x38\x6f\x72\x57\x52\x53','\x57\x36\x6c\x4c\x48\x69\x33\x50\x47\x6c\x62\x64\x77\x4a\x4c\x37\x6b\x61','\x57\x35\x72\x31\x71\x38\x6f\x56','\x57\x52\x4a\x63\x4e\x76\x52\x64\x55\x30\x71\x2b\x57\x52\x64\x64\x4c\x61','\x6e\x4b\x44\x53\x57\x34\x31\x70\x57\x51\x79\x56\x57\x51\x4b','\x6d\x45\x77\x35\x51\x55\x41\x59\x47\x45\x41\x45\x4d\x43\x6f\x33\x35\x52\x67\x6b\x35\x50\x59\x68\x57\x52\x34','\x57\x35\x64\x63\x4f\x6d\x6f\x71','\x57\x35\x4e\x63\x53\x49\x2f\x64\x4e\x43\x6f\x4b\x57\x51\x71','\x57\x36\x68\x64\x4f\x53\x6f\x49\x57\x37\x62\x77\x6a\x71','\x6a\x61\x71\x2f\x57\x4f\x62\x31\x57\x4f\x79\x70\x57\x51\x37\x63\x4b\x6d\x6b\x76','\x6e\x64\x34\x71\x63\x63\x52\x63\x52\x53\x6f\x33\x44\x47','\x57\x52\x42\x63\x51\x53\x6b\x72\x57\x36\x50\x6a\x57\x52\x70\x63\x4c\x38\x6f\x6d','\x63\x61\x64\x63\x54\x43\x6f\x56\x57\x37\x71\x37\x57\x34\x43','\x57\x50\x37\x64\x51\x48\x6c\x63\x4e\x57','\x57\x36\x75\x44\x45\x43\x6f\x35\x57\x50\x4e\x63\x53\x6d\x6b\x6c\x66\x32\x37\x64\x48\x57','\x57\x34\x37\x63\x50\x5a\x62\x64\x57\x52\x31\x6f\x57\x51\x4a\x64\x4d\x49\x54\x57','\x76\x4b\x5a\x63\x55\x65\x4f','\x57\x36\x4f\x61\x57\x51\x53\x45','\x57\x51\x31\x6b\x62\x43\x6f\x4e\x46\x62\x71\x65\x57\x35\x6d','\x61\x43\x6b\x4d\x57\x37\x65\x79\x70\x72\x4e\x63\x47\x43\x6b\x59','\x57\x4f\x4b\x75\x57\x50\x47\x30','\x42\x64\x61\x49\x57\x52\x6c\x63\x52\x6d\x6b\x6d\x65\x53\x6f\x46','\x57\x35\x78\x64\x51\x38\x6f\x59\x6d\x61\x69\x69\x66\x71','\x57\x34\x64\x64\x56\x38\x6f\x34\x70\x58\x69\x6a\x61\x57','\x46\x49\x75\x78\x57\x51\x64\x63\x56\x53\x6f\x45\x76\x53\x6b\x6b\x57\x51\x62\x73\x57\x51\x76\x62','\x57\x52\x62\x51\x57\x50\x6c\x63\x55\x4a\x44\x43','\x70\x6d\x6f\x59\x57\x35\x64\x63\x54\x6d\x6f\x64\x57\x4f\x53\x57\x67\x31\x58\x67\x57\x51\x6c\x63\x4c\x59\x6a\x57','\x45\x4c\x62\x4e\x57\x35\x39\x69\x57\x51\x38','\x57\x51\x78\x63\x50\x57\x62\x76\x57\x36\x42\x63\x4d\x68\x4e\x64\x48\x61','\x63\x43\x6b\x65\x41\x47','\x57\x35\x37\x64\x51\x38\x6f\x31\x70\x72\x61\x46\x61\x47','\x57\x51\x35\x6d\x70\x43\x6b\x54\x57\x51\x64\x63\x50\x43\x6b\x77','\x57\x4f\x42\x4f\x56\x69\x4a\x4d\x53\x34\x37\x4d\x4e\x6b\x37\x64\x53\x45\x77\x5a\x50\x6f\x41\x59\x54\x6f\x41\x45\x4f\x47','\x57\x50\x42\x64\x55\x43\x6f\x32\x6f\x66\x52\x64\x54\x53\x6f\x4e','\x70\x78\x31\x64\x57\x37\x56\x64\x51\x53\x6b\x6d\x41\x38\x6f\x56','\x7a\x45\x41\x57\x4f\x78\x65','\x70\x38\x6f\x63\x66\x48\x37\x64\x53\x57','\x57\x36\x30\x35\x57\x34\x4e\x64\x52\x4e\x43\x65\x57\x35\x39\x4b\x57\x50\x69\x50\x57\x37\x5a\x64\x48\x53\x6b\x47\x42\x71','\x46\x43\x6b\x52\x57\x4f\x5a\x64\x51\x6d\x6b\x35\x57\x35\x6e\x56\x73\x47','\x66\x43\x6b\x37\x57\x37\x30\x65','\x70\x32\x6e\x39\x57\x36\x42\x63\x4a\x6d\x6b\x35\x6b\x43\x6f\x52\x73\x33\x53','\x57\x50\x46\x64\x51\x43\x6f\x47\x6b\x66\x37\x64\x50\x38\x6f\x34\x57\x36\x43','\x57\x52\x4f\x54\x57\x4f\x33\x64\x56\x53\x6b\x67\x6c\x58\x53\x68','\x57\x4f\x74\x63\x56\x53\x6b\x52\x42\x75\x76\x64\x72\x61\x62\x68\x68\x4b\x6c\x64\x47\x4e\x65','\x79\x4e\x48\x31\x67\x53\x6b\x52\x57\x36\x53','\x57\x37\x4c\x44\x67\x6d\x6f\x4d','\x6f\x38\x6f\x32\x57\x50\x6c\x64\x51\x43\x6b\x54\x57\x37\x4c\x53\x72\x61','\x43\x68\x72\x51\x67\x47','\x57\x4f\x46\x64\x52\x59\x74\x64\x4e\x53\x6f\x56\x57\x52\x5a\x63\x53\x6d\x6b\x43','\x35\x6c\x4d\x44\x57\x4f\x78\x4f\x56\x79\x44\x6c\x35\x42\x6f\x73\x6e\x32\x6d\x42','\x45\x38\x6b\x48\x57\x50\x70\x64\x51\x6d\x6b\x77\x57\x35\x66\x4e','\x35\x50\x36\x73\x79\x2b\x41\x46\x4b\x45\x77\x34\x4a\x4c\x6c\x4e\x56\x36\x6c\x4f\x52\x6b\x34\x73','\x57\x37\x4c\x44\x65\x38\x6f\x4d','\x57\x34\x46\x64\x55\x6d\x6f\x59\x6d\x71','\x57\x52\x46\x63\x55\x38\x6f\x4d\x57\x34\x62\x47\x64\x59\x44\x6e','\x70\x31\x68\x64\x4d\x43\x6f\x37\x57\x50\x38\x42\x67\x38\x6f\x62','\x57\x4f\x2f\x63\x56\x47\x72\x6a\x57\x36\x6c\x63\x49\x78\x53','\x65\x6d\x6b\x6b\x57\x35\x58\x54\x57\x51\x4e\x50\x47\x6b\x5a\x4f\x56\x69\x65\x65','\x57\x51\x48\x51\x57\x4f\x2f\x63\x51\x71','\x57\x4f\x74\x64\x56\x38\x6f\x4d\x6d\x4b\x5a\x64\x53\x43\x6f\x31\x57\x36\x57','\x57\x50\x4e\x64\x55\x47\x6c\x63\x49\x6d\x6b\x6c\x6e\x68\x34','\x42\x53\x6b\x6a\x6c\x6d\x6f\x5a','\x57\x35\x37\x63\x51\x43\x6f\x6f\x6c\x53\x6b\x41\x78\x53\x6b\x51\x57\x52\x38'];_0x1b6f=function(){return _0x32ee74;};return _0x1b6f();}import{createHash}from'\x6e\x6f\x64\x65\x3a\x63\x72\x79\x70\x74\x6f';import{redactString}from'\x2e\x2e\x2f\x68\x75\x62\x2f\x73\x61\x6e\x69\x74\x69\x7a\x65\x2e\x6a\x73';const REUSABLE_RE=/\b(reusable|repeatable|workflow|playbook|runbook|capability|procedure|pattern|recipe|documented|future runs?|next time|can reuse|reuse this)\b|复用|可重用|工作流(?!程)|方法论|沉淀/i,PROOF_RE=/\b(validated|verified|passed|green|success(?:ful|fully)?|succeeded|works?|completed|published|uploaded|recorded:true|exit code:?\s*0|all tests passed)\b|(?:验证|校验|测试|检查|构建|编译|运行|执行|部署|发布)(?:都|均|全部)?(?:通过|成功)|全部通过|跑通|已(?:验证|发布|上线)/i,FAILURE_RE=/\b(failed|failure|error|exception|traceback|exit code:?\s*[1-9]|not working|unable to)\b|失败|错误|报错/i,CHINESE_NEGATED_PROOF_PREFIX_SOURCE=_0x39adb0(0x258,'\x68\x5e\x55\x61')+_0x39adb0(0x20a,'\x55\x70\x28\x78')+_0x39adb0(0x1ef,'\x45\x36\x78\x57')+_0x39adb0(0x266,'\x70\x6c\x45\x23')+_0x39adb0(0x231,'\x6e\x23\x64\x4a')+_0x39adb0(0x20d,'\x6e\x77\x32\x5e'),CHINESE_NEGATED_PROOF_SOURCE=_0x39adb0(0x1e7,'\x56\x6e\x58\x59')+CHINESE_NEGATED_PROOF_PREFIX_SOURCE+('\x5c\x73\x2a\x28\x3f\x3a\u9a8c\u8bc1'+_0x39adb0(0x22c,'\x42\x65\x23\x2a')+_0x39adb0(0x21d,'\x57\x6b\x36\x23')+'\u8fd0\u884c\x7c\u6267\u884c\x7c\u90e8\u7f72'+_0x39adb0(0x252,'\x46\x34\x24\x55')+_0x39adb0(0x26f,'\x6e\x77\x32\x5e')+_0x39adb0(0x223,'\x4c\x68\x4b\x72')+_0x39adb0(0x1e9,'\x68\x5e\x55\x61')+_0x39adb0(0x25d,'\x45\x68\x4e\x6f')+'\u68c0\u67e5\x7c\u6784\u5efa\x7c\u7f16\u8bd1'+'\x7c\u8fd0\u884c\x7c\u6267\u884c\x7c\u90e8'+_0x39adb0(0x245,'\x57\x6b\x36\x23')+_0x39adb0(0x21b,'\x46\x34\x24\x55')+_0x39adb0(0x265,'\x73\x23\x6d\x6e')+_0x39adb0(0x26e,'\x6c\x24\x52\x4b')+_0x39adb0(0x1eb,'\x52\x6e\x40\x79')+_0x39adb0(0x260,'\x4c\x68\x4b\x72')+'\x29\x29'),CHINESE_NEGATED_PROOF_RE=new RegExp(CHINESE_NEGATED_PROOF_SOURCE,'\x69'),CHINESE_NEGATED_PROOF_GLOBAL_RE=new RegExp(CHINESE_NEGATED_PROOF_SOURCE,'\x67\x69'),EXIT_ZERO_RE=/\bexit code:?\s*0\b/i,EXIT_NON_ZERO_RE=/\bexit code:?\s*[1-9]\d*\b/i,DOMAIN_TOKENS=[[/\b(lark|feishu|飞书)\b/i,_0x39adb0(0x23a,'\x57\x76\x6b\x23')],[/\b(github|gh|pull request|bugbot)\b/i,_0x39adb0(0x1f2,'\x4b\x32\x48\x43')],[/\b(playwright|screenshot|visual)\b/i,'\x70\x6c\x61\x79\x77\x72\x69\x67'+'\x68\x74'],[/\b(vitest|jest|test)\b/i,_0x39adb0(0x230,'\x74\x31\x35\x46')],[/\b(pnpm|npm|yarn)\b/i,_0x39adb0(0x20c,'\x45\x36\x78\x57')+_0x39adb0(0x208,'\x37\x38\x37\x69')],[/\b(hub|publish|marketplace)\b/i,_0x39adb0(0x23b,'\x6e\x77\x32\x5e')+_0x39adb0(0x1e8,'\x37\x4c\x6b\x37')],[/\b(release|checksum|sha256)\b/i,_0x39adb0(0x236,'\x6c\x67\x6b\x54')],[/\b(api|http|endpoint)\b/i,'\x61\x70\x69'],[/\b(document|docs?|markdown)\b/i,_0x39adb0(0x211,'\x42\x4c\x6a\x39')]];function cleanText(_0x455021,_0x42cdf0=-0x1*-0x2440+0x987+0x1*-0x2ceb){const _0x30fdd6=_0x39adb0,_0x499c6c=redactString(String(_0x455021??'')[_0x30fdd6(0x21c,'\x4e\x32\x67\x32')](/\s+/g,'\x20')[_0x30fdd6(0x21f,'\x37\x38\x37\x69')]());return _0x499c6c[_0x30fdd6(0x205,'\x6c\x24\x52\x4b')]>_0x42cdf0?_0x499c6c['\x73\x6c\x69\x63\x65'](0x2394+-0x1*-0x2ce+0x1331*-0x2,_0x42cdf0-(-0x302+0xccc+-0x9c7))+'\x2e\x2e\x2e':_0x499c6c;}function turnText(_0x55503b){const _0x39122c=_0x39adb0;return cleanText([_0x55503b[_0x39122c(0x217,'\x57\x76\x6b\x23')],_0x55503b[_0x39122c(0x221,'\x73\x59\x35\x68')+'\x6c\x74'],_0x55503b['\x65\x72\x72\x6f\x72\x4d\x65\x73'+_0x39122c(0x1e6,'\x62\x23\x24\x34')]][_0x39122c(0x243,'\x6c\x67\x6b\x54')](Boolean)['\x6a\x6f\x69\x6e']('\x0a'),0x1ef9*-0x1+-0x1*0x1123+0x1*0x3210);}function stableId(_0x256fb0){const _0x802d44=_0x39adb0;return _0x802d44(0x247,'\x42\x4c\x6a\x39')+_0x802d44(0x22a,'\x32\x78\x34\x45')+_0x802d44(0x1ff,'\x24\x33\x6c\x6c')+createHash(_0x802d44(0x25e,'\x55\x70\x28\x78'))[_0x802d44(0x24a,'\x31\x2a\x46\x54')](JSON[_0x802d44(0x1ed,'\x24\x31\x4f\x30')+'\x79'](_0x256fb0),_0x802d44(0x1ec,'\x56\x6e\x58\x59'))[_0x802d44(0x259,'\x6e\x33\x5b\x33')](_0x802d44(0x257,'\x37\x38\x37\x69'))['\x73\x6c\x69\x63\x65'](0x1923+-0x2595+0xc72,0x1*-0x1070+-0x30f+0x138b);}function _0x3c9f(_0x2befa0,_0x1196cf){_0x2befa0=_0x2befa0-(0xa15+0x5*-0x727+0x1b89);const _0x3db818=_0x1b6f();let _0x55f02a=_0x3db818[_0x2befa0];if(_0x3c9f['\x75\x59\x71\x69\x78\x47']===undefined){var _0x3b2b3e=function(_0x40ec47){const _0x2ac8e2='\x61\x62\x63\x64\x65\x66\x67\x68\x69\x6a\x6b\x6c\x6d\x6e\x6f\x70\x71\x72\x73\x74\x75\x76\x77\x78\x79\x7a\x41\x42\x43\x44\x45\x46\x47\x48\x49\x4a\x4b\x4c\x4d\x4e\x4f\x50\x51\x52\x53\x54\x55\x56\x57\x58\x59\x5a\x30\x31\x32\x33\x34\x35\x36\x37\x38\x39\x2b\x2f\x3d';let _0x5127b4='',_0x56eb03='';for(let _0x127198=-0x16f1*-0x1+-0x1f9a+0x8a9,_0xe04b4c,_0x2c2e76,_0x552b3d=-0x2f*0x38+0xbf+-0x1*-0x989;_0x2c2e76=_0x40ec47['\x63\x68\x61\x72\x41\x74'](_0x552b3d++);~_0x2c2e76&&(_0xe04b4c=_0x127198%(-0x74f+-0x5c4+0x3*0x45d)?_0xe04b4c*(0x1fb7+0xb2*-0x1c+-0xbff)+_0x2c2e76:_0x2c2e76,_0x127198++%(-0x6b*-0x2+-0x7ef+0x71d*0x1))?_0x5127b4+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](-0x961*-0x1+-0xae1*0x3+0x1841&_0xe04b4c>>(-(-0x517+0x2058+-0x1b3f)*_0x127198&-0xaed+-0x2*0xed9+0x821*0x5)):0x2555+0x1847+-0x3d9c){_0x2c2e76=_0x2ac8e2['\x69\x6e\x64\x65\x78\x4f\x66'](_0x2c2e76);}for(let _0x1b0034=-0x1e43*0x1+-0x6a*0x37+0x3509,_0x518985=_0x5127b4['\x6c\x65\x6e\x67\x74\x68'];_0x1b0034<_0x518985;_0x1b0034++){_0x56eb03+='\x25'+('\x30\x30'+_0x5127b4['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x1b0034)['\x74\x6f\x53\x74\x72\x69\x6e\x67'](0x3*-0xad+-0x7f*-0x2+-0x1*-0x119))['\x73\x6c\x69\x63\x65'](-(-0x84*0xb+-0x15dd+-0x281*-0xb));}return decodeURIComponent(_0x56eb03);};const _0x496b1a=function(_0x5922f3,_0x42e2fd){let _0xa770bf=[],_0x4cdf44=-0xdc2+-0x17f0+0x25b2,_0x18aa05,_0x15c003='';_0x5922f3=_0x3b2b3e(_0x5922f3);let _0x499ba0;for(_0x499ba0=0xf74*-0x2+-0x1*-0x5cf+0x19*0x101;_0x499ba0<0x36*0xad+0x85*-0x9+-0x1ed1*0x1;_0x499ba0++){_0xa770bf[_0x499ba0]=_0x499ba0;}for(_0x499ba0=-0x881+-0x99f+0x1220;_0x499ba0<-0x321*0xb+-0x1665+0x39d0;_0x499ba0++){_0x4cdf44=(_0x4cdf44+_0xa770bf[_0x499ba0]+_0x42e2fd['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x499ba0%_0x42e2fd['\x6c\x65\x6e\x67\x74\x68']))%(0x2146+-0x356+-0xe78*0x2),_0x18aa05=_0xa770bf[_0x499ba0],_0xa770bf[_0x499ba0]=_0xa770bf[_0x4cdf44],_0xa770bf[_0x4cdf44]=_0x18aa05;}_0x499ba0=0x82c+-0x22c*0x4+0x21*0x4,_0x4cdf44=-0x613*0x1+-0x206a+0x267d;for(let _0x3a9c75=-0x19f1+0x1*0x1dff+-0x40e;_0x3a9c75<_0x5922f3['\x6c\x65\x6e\x67\x74\x68'];_0x3a9c75++){_0x499ba0=(_0x499ba0+(-0x7*0x309+0xd8d+0x7b3))%(0x3*0x9d6+0x12d3+-0x2f55),_0x4cdf44=(_0x4cdf44+_0xa770bf[_0x499ba0])%(-0x2398+0x1*0x1fe9+0x4af),_0x18aa05=_0xa770bf[_0x499ba0],_0xa770bf[_0x499ba0]=_0xa770bf[_0x4cdf44],_0xa770bf[_0x4cdf44]=_0x18aa05,_0x15c003+=String['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'](_0x5922f3['\x63\x68\x61\x72\x43\x6f\x64\x65\x41\x74'](_0x3a9c75)^_0xa770bf[(_0xa770bf[_0x499ba0]+_0xa770bf[_0x4cdf44])%(0x5b3+0x141c+0x1*-0x18cf)]);}return _0x15c003;};_0x3c9f['\x6b\x41\x68\x56\x54\x5a']=_0x496b1a,_0x3c9f['\x71\x41\x71\x63\x62\x4c']={},_0x3c9f['\x75\x59\x71\x69\x78\x47']=!![];}const _0x54e3c0=_0x3db818[-0x1*0x7b1+0x5*0x5b9+-0x14ec],_0x341a44=_0x2befa0+_0x54e3c0,_0x159412=_0x3c9f['\x71\x41\x71\x63\x62\x4c'][_0x341a44];return!_0x159412?(_0x3c9f['\x6d\x4c\x51\x6c\x6a\x50']===undefined&&(_0x3c9f['\x6d\x4c\x51\x6c\x6a\x50']=!![]),_0x55f02a=_0x3c9f['\x6b\x41\x68\x56\x54\x5a'](_0x55f02a,_0x1196cf),_0x3c9f['\x71\x41\x71\x63\x62\x4c'][_0x341a44]=_0x55f02a):_0x55f02a=_0x159412,_0x55f02a;}function normalizeSignal(_0x593cdc){const _0x46adf5=_0x39adb0;return _0x593cdc[_0x46adf5(0x235,'\x4e\x32\x67\x32')+'\x61\x73\x65']()[_0x46adf5(0x254,'\x4a\x24\x71\x69')](/[^a-z0-9]+/g,'\x5f')[_0x46adf5(0x209,'\x56\x52\x29\x28')](/^_+|_+$/g,'')[_0x46adf5(0x233,'\x51\x75\x5a\x66')](-0x1492+0x13f*-0x7+-0x1d4b*-0x1,-0x1*-0x13a3+-0x86d*-0x1+-0x1be0);}function collectToolCalls(_0x2b0bdd){const _0x38e2a2=_0x39adb0,_0x135b7e=new Set();for(const _0xcc38a9 of _0x2b0bdd){const _0x1cca6b=cleanText(_0xcc38a9[_0x38e2a2(0x1f5,'\x23\x43\x23\x28')]??'',0x9ef*-0x1+-0x1712+-0x3*-0xb1b);if(_0x1cca6b)_0x135b7e[_0x38e2a2(0x1de,'\x73\x23\x6d\x6e')](_0x1cca6b);}return[..._0x135b7e][_0x38e2a2(0x246,'\x37\x4c\x6b\x37')](0xc*0x2de+-0x72*-0x2e+-0x36e4,-0x157c+0x9a7*-0x1+0x1f2b);}function domainSignals(_0x21d010,_0xacef32){const _0x54a82b=_0x39adb0,_0x528a09=new Set();for(const [_0x8a1b85,_0x10ac11]of DOMAIN_TOKENS){if(_0x8a1b85['\x74\x65\x73\x74'](_0x21d010))_0x528a09[_0x54a82b(0x24c,'\x24\x33\x6c\x6c')](_0x10ac11);}for(const _0xf732f of _0xacef32){if(_0x54a82b(0x244,'\x24\x33\x6c\x6c')===_0x54a82b(0x264,'\x6e\x77\x32\x5e'))return _0x5cc0ff[_0x54a82b(0x22b,'\x6d\x59\x47\x73')](_0x2ebf9['\x72\x65\x70\x6c\x61\x63\x65'](_0x254f9c,''));else{const _0x5e4d6f=normalizeSignal(_0xf732f);if(_0x5e4d6f)_0x528a09[_0x54a82b(0x234,'\x31\x2a\x46\x54')](_0x5e4d6f);}}return[..._0x528a09][_0x54a82b(0x1e0,'\x40\x6c\x49\x33')](-0x95f*-0x1+-0x3*-0x337+-0x1304,-0x25bc+0x1*-0x335+-0x28f7*-0x1);}function isToolTurn(_0x25d690){const _0x36dbd7=_0x39adb0;return _0x25d690[_0x36dbd7(0x22f,'\x6d\x59\x47\x73')]===_0x36dbd7(0x25b,'\x59\x38\x67\x6b')||Boolean(_0x25d690[_0x36dbd7(0x210,'\x4e\x32\x67\x32')]);}function hasPositiveProof(_0x217f78){const _0x2c1f41=_0x39adb0;return PROOF_RE[_0x2c1f41(0x232,'\x37\x4c\x6b\x37')](_0x217f78[_0x2c1f41(0x26b,'\x4b\x32\x48\x43')](CHINESE_NEGATED_PROOF_GLOBAL_RE,''));}function hasFailure(_0x26f9aa){const _0x40dc75=_0x39adb0;return FAILURE_RE[_0x40dc75(0x219,'\x6e\x23\x64\x4a')](_0x26f9aa)||CHINESE_NEGATED_PROOF_RE[_0x40dc75(0x1f7,'\x62\x65\x76\x39')](_0x26f9aa);}function classifyToolOutcome(_0x237be5){const _0x20cc9c=_0x39adb0,_0x40cd80=turnText(_0x237be5);if(EXIT_NON_ZERO_RE[_0x20cc9c(0x242,'\x59\x38\x67\x6b')](_0x40cd80))return _0x20cc9c(0x1e1,'\x6e\x33\x5b\x33');if(CHINESE_NEGATED_PROOF_RE[_0x20cc9c(0x224,'\x50\x61\x24\x46')](_0x40cd80))return _0x20cc9c(0x1f6,'\x61\x26\x64\x70');if(EXIT_ZERO_RE[_0x20cc9c(0x268,'\x6b\x71\x47\x7a')](_0x40cd80))return _0x20cc9c(0x226,'\x62\x65\x76\x39');if(hasPositiveProof(_0x40cd80)&&!FAILURE_RE[_0x20cc9c(0x227,'\x42\x65\x23\x2a')](_0x40cd80))return _0x20cc9c(0x25f,'\x34\x53\x38\x58');if(hasFailure(_0x40cd80))return _0x20cc9c(0x200,'\x37\x38\x37\x69');return'\x75\x6e\x6b\x6e\x6f\x77\x6e';}function hasTerminalSuccessfulToolRun(_0x24e6f9){const _0xaf6a77=_0x39adb0;let _0x805bbf=_0xaf6a77(0x1e4,'\x31\x2a\x46\x54');for(const _0x21738a of _0x24e6f9){if(_0xaf6a77(0x1e5,'\x62\x23\x24\x34')===_0xaf6a77(0x22e,'\x6f\x6b\x77\x44')){if(!isToolTurn(_0x21738a))continue;const _0x1d41a3=classifyToolOutcome(_0x21738a);if(_0x1d41a3!==_0xaf6a77(0x222,'\x55\x70\x28\x78'))_0x805bbf=_0x1d41a3;}else{const _0x56e065=_0x39a924(_0x2515e7);if(_0x2807b3['\x74\x65\x73\x74'](_0x56e065))return _0xaf6a77(0x255,'\x6d\x59\x47\x73');if(_0x5742a0[_0xaf6a77(0x1fb,'\x52\x6e\x40\x79')](_0x56e065))return _0xaf6a77(0x1dd,'\x42\x65\x23\x2a');if(_0xb5b5d3[_0xaf6a77(0x219,'\x6e\x23\x64\x4a')](_0x56e065))return _0xaf6a77(0x20b,'\x37\x4c\x6b\x37');if(_0x4bc1a3(_0x56e065)&&!_0x4fa1cb[_0xaf6a77(0x268,'\x6b\x71\x47\x7a')](_0x56e065))return'\x73\x75\x63\x63\x65\x73\x73';if(_0x284683(_0x56e065))return'\x66\x61\x69\x6c\x75\x72\x65';return _0xaf6a77(0x241,'\x32\x25\x5a\x76');}}return _0x805bbf===_0xaf6a77(0x201,'\x37\x38\x37\x69');}function pickEvidence(_0x4722c1,_0x57b4d1,_0x402750=0x27*-0xbb+0x7*0x202+0xe72){const _0x4ac293=_0x39adb0,_0xad12b=[];for(const _0x3eca10 of _0x4722c1){const _0x440e2f=turnText(_0x3eca10);if(!_0x440e2f||!(typeof _0x57b4d1==='\x66\x75\x6e\x63\x74\x69\x6f\x6e'?_0x57b4d1(_0x440e2f):_0x57b4d1[_0x4ac293(0x21e,'\x57\x76\x6b\x23')](_0x440e2f)))continue;_0xad12b[_0x4ac293(0x25a,'\x56\x6e\x58\x59')](cleanText(_0x440e2f,0x635*-0x4+0xb52+-0x71b*-0x2));if(_0xad12b[_0x4ac293(0x248,'\x4b\x32\x48\x43')]>=_0x402750)break;}return _0xad12b;}function pickSummary(_0x1e460c,_0x51e057,_0x4f264f){const _0x19fbd8=_0x39adb0,_0x40a0d3=_0x1e460c[_0x19fbd8(0x216,'\x6e\x23\x64\x4a')](_0x34b2f6=>_0x34b2f6[_0x19fbd8(0x1fa,'\x62\x23\x24\x34')]===_0x19fbd8(0x225,'\x37\x4c\x6b\x37')+'\x74'&&!_0x34b2f6[_0x19fbd8(0x1db,'\x62\x65\x76\x39')])[_0x19fbd8(0x1f0,'\x70\x6c\x45\x23')](turnText)[_0x19fbd8(0x23f,'\x23\x43\x23\x28')](_0x1a53ae=>_0x1a53ae[_0x19fbd8(0x24f,'\x42\x65\x23\x2a')]>=-0x49b+0x20b2+-0x1bef&&(REUSABLE_RE['\x74\x65\x73\x74'](_0x1a53ae)||hasPositiveProof(_0x1a53ae)));return cleanText(_0x40a0d3??_0x51e057[0x6ad*-0x5+-0x12e1+0x3442]??_0x4f264f[0x16d*-0x19+-0x10e7*0x1+0x13*0x2c4]??_0x19fbd8(0x1e3,'\x24\x31\x4f\x30')+_0x19fbd8(0x1ee,'\x6c\x24\x52\x4b')+_0x19fbd8(0x26d,'\x74\x31\x35\x46')+_0x19fbd8(0x26c,'\x34\x53\x38\x58')+_0x19fbd8(0x228,'\x47\x32\x79\x28')+'\x79\x2e',-0x492+-0x1b54+0x6*0x56f);}export function sniffConversationCapabilities(_0x384fa9,_0x17e976={}){const _0x5d45ea=_0x39adb0,_0x2e9f4e=_0x384fa9[_0x5d45ea(0x24d,'\x46\x34\x24\x55')](_0x1ecef7=>!_0x1ecef7[_0x5d45ea(0x270,'\x6e\x33\x5b\x33')]);if(_0x2e9f4e[_0x5d45ea(0x1dc,'\x42\x4c\x6a\x39')]===0xf66+0x1*-0x1c67+0xd01)return[];const _0x5e60c8=_0x2e9f4e[_0x5d45ea(0x1e2,'\x50\x61\x24\x46')](turnText)[_0x5d45ea(0x1f1,'\x74\x31\x35\x46')](Boolean)[_0x5d45ea(0x1fe,'\x6f\x6b\x77\x44')]('\x0a');if(!_0x5e60c8[_0x5d45ea(0x24b,'\x50\x61\x24\x46')]())return[];const _0x286f1a=pickEvidence(_0x2e9f4e,REUSABLE_RE),_0xeff00a=pickEvidence(_0x2e9f4e,hasPositiveProof);if(_0x286f1a[_0x5d45ea(0x203,'\x50\x61\x24\x46')]===-0x8*-0x239+-0x2*-0x69b+-0x1efe||_0xeff00a[_0x5d45ea(0x23c,'\x23\x43\x23\x28')]===-0x18fb+-0x1a6c*0x1+0x3367)return[];const _0x5a537f=hasFailure(_0x5e60c8)&&!hasPositiveProof(_0x5e60c8);if(_0x5a537f)return[];if(!hasTerminalSuccessfulToolRun(_0x2e9f4e))return[];const _0x2ea62f=collectToolCalls(_0x2e9f4e),_0x273844=domainSignals(_0x5e60c8,_0x2ea62f),_0x1c5625=[...new Set([_0x5d45ea(0x1f4,'\x32\x25\x5a\x76')+_0x5d45ea(0x269,'\x73\x59\x35\x68')+_0x5d45ea(0x23e,'\x73\x5e\x68\x7a'),_0x5d45ea(0x24e,'\x62\x65\x76\x39')+_0x5d45ea(0x206,'\x55\x70\x28\x78')+'\x77',..._0x273844])][_0x5d45ea(0x20e,'\x34\x53\x38\x58')](-0x14d2*-0x1+-0x55*0x29+-0x2d*0x29,0x1f05*-0x1+-0x2*-0x593+0x13e7),_0x7d4f45=-0x9cf+0x1495+-0xac2+Math[_0x5d45ea(0x1ea,'\x59\x38\x67\x6b')](0x1100+0x38*-0x7f+0xaca,_0x286f1a['\x6c\x65\x6e\x67\x74\x68'])+Math[_0x5d45ea(0x207,'\x73\x5e\x68\x7a')](-0x1*0xb03+-0xd5e+0x1863,_0xeff00a[_0x5d45ea(0x205,'\x6c\x24\x52\x4b')])+Math[_0x5d45ea(0x267,'\x6b\x71\x47\x7a')](-0x150d+-0x23f3+0x2*0x1c81,_0x2ea62f[_0x5d45ea(0x24f,'\x42\x65\x23\x2a')]),_0x58d2a0=pickSummary(_0x2e9f4e,_0x286f1a,_0xeff00a),_0x185b4b=_0x273844[0x32f+0x4de*-0x1+0x1af]??'\x76\x65\x72\x69\x66\x69\x65\x64'+_0x5d45ea(0x237,'\x32\x25\x5a\x76')+'\x77',_0x24ccfa={'\x69\x64':stableId({'\x73\x75\x6d\x6d\x61\x72\x79':_0x58d2a0,'\x73\x69\x67\x6e\x61\x6c\x73':_0x1c5625,'\x65\x76\x69\x64\x65\x6e\x63\x65':[..._0x286f1a,..._0xeff00a]['\x73\x6c\x69\x63\x65'](0xed9+-0x16a5+0x7cc,0x1ce4+-0x6e1+-0x15ff)}),'\x74\x69\x74\x6c\x65':'\x56\x65\x72\x69\x66\x69\x65\x64'+_0x5d45ea(0x1fc,'\x57\x76\x6b\x23')+_0x5d45ea(0x214,'\x6d\x59\x47\x73')+_0x5d45ea(0x240,'\x4b\x32\x48\x43')+_0x185b4b,'\x73\x75\x6d\x6d\x61\x72\x79':_0x58d2a0,'\x73\x69\x67\x6e\x61\x6c\x73':_0x1c5625,'\x65\x76\x69\x64\x65\x6e\x63\x65':[..._0x286f1a,..._0xeff00a][_0x5d45ea(0x250,'\x6e\x23\x64\x4a')](-0x1030+0xb*-0x23c+0x28c4,-0x7b6+0x1*0x155e+-0xda4*0x1),'\x73\x63\x6f\x72\x65':_0x7d4f45,'\x72\x65\x61\x73\x6f\x6e\x73':[_0x5d45ea(0x213,'\x37\x4c\x6b\x37')+'\x5f\x6d\x61\x72\x6b\x65\x72',_0x5d45ea(0x1fd,'\x42\x4c\x6a\x39')+_0x5d45ea(0x253,'\x42\x4c\x6a\x39'),..._0x2ea62f[_0x5d45ea(0x26a,'\x46\x34\x24\x55')]>-0xf*-0x27e+-0x1d35+0x82d*-0x1?[_0x5d45ea(0x229,'\x73\x59\x35\x68')+_0x5d45ea(0x25c,'\x6e\x77\x32\x5e')]:[]],'\x74\x6f\x6f\x6c\x43\x61\x6c\x6c\x73':_0x2ea62f};return[_0x24ccfa][_0x5d45ea(0x249,'\x23\x43\x23\x28')](-0x82*-0x35+0x1*-0x26da+0xbf0,_0x17e976['\x6d\x61\x78\x48\x69\x74\x73']??0x1a*0x7d+-0x9e1+-0x168*0x2);}
@@ -4,13 +4,14 @@ import type { GepCategory, Mutation, Capsule, EvolutionEvent } from '../wire/ind
4
4
  import type { AssetStoreProvider } from '../assetstore/provider.js';
5
5
  import type { StrategyPoint } from '../strategy/strategyPoint.js';
6
6
  import { type CycleStage } from '../cycle/stateMachine.js';
7
- import { type GeneDecision, type SelectionInput, type GeneCandidateInput, type AntiWarning } from './geneSelection.js';
7
+ import { type GeneDecision, type SelectionInput, type GeneCandidateInput, type AntiWarning, type SelectionGuardMode } from './geneSelection.js';
8
8
  import { type EnvFingerprint } from '../bootstrap/envFingerprint.js';
9
9
  import type { PersonalityStore } from '../personality/store.js';
10
10
  import { type ResolutionStatus } from './solidify.js';
11
11
  import type { ProofOfWork } from '../schema/proofOfWork.js';
12
12
  import { type ClassifyRecentEvent } from './cycleFailureClassifier.js';
13
13
  import type { MemoryGraphGeneEvidence } from './memoryGraph.js';
14
+ import { type SelectionPolicy } from './ucb1.js';
14
15
  export interface TriggerEval {
15
16
  trigger: boolean;
16
17
  reasons: string[];
@@ -66,6 +67,8 @@ export interface CycleEngineDeps {
66
67
  rng?: () => number;
67
68
  /** Injected environment fingerprint (deterministic tests). Defaults to capturing the real runtime env. */
68
69
  envFingerprint?: () => EnvFingerprint;
70
+ /** Latest external capability gaps. Composition owns persistence/wire details; core reads one bounded snapshot. */
71
+ capabilityGaps?: () => readonly string[];
69
72
  /** 触发评估(常注入 TriggerEngine.evaluate 的包装; 缺省=直接触发). */
70
73
  trigger?: (p: ProblemPattern, now: number) => Promise<TriggerEval> | TriggerEval;
71
74
  /** 可进化人格(可选). 注入后, 每轮:
@@ -82,10 +85,20 @@ export interface CycleInput {
82
85
  cycleId: string;
83
86
  problem: ProblemPattern;
84
87
  signals: readonly string[];
88
+ /** Curriculum targets already prepared before candidate assembly. Omit for direct runCycle callers. */
89
+ curriculumSignals?: readonly string[];
85
90
  category: GepCategory;
86
91
  /** Optional explicit strategy preset name; when set, it wins over history-derived meta-signal auto-detection. */
87
92
  strategyName?: string;
88
93
  candidates: readonly GeneCandidateInput[];
94
+ /** Trust-filtered library corpus captured before relevance admission for stable semantic IDF. */
95
+ semanticCorpus?: readonly GeneCandidateInput[];
96
+ /** Emergency rollback: use the pre-IDF semantic scorer for this cycle. */
97
+ disableSemanticIdf?: boolean;
98
+ /** Experimental plateau selection policy. Default preserves engine-health + legacy random drift. */
99
+ selectionPolicy?: SelectionPolicy;
100
+ /** Versioned relevance-guard rollout. Omit for legacy direct-call behavior. */
101
+ selectionGuard?: SelectionGuardMode;
89
102
  selectionFloor?: number;
90
103
  /**
91
104
  * Explicit GEP/runtime-selected gene. Forwarded after candidate assembly and local hard filters, so it cannot
@@ -102,7 +115,7 @@ export interface CycleInput {
102
115
  /**
103
116
  * Distilled-gene fallback pool (ported from v1 #97): broadly-applicable distilled genes that do NOT match the
104
117
  * live signals, assembled (trust/review/ban-filtered) upstream. Forwarded to selection, which uses one only as a
105
- * last resort when no candidate clears the floor — reusing a known distilled strategy instead of a blind innovate.
118
+ * last resort when normal selection has no reusable positive choice — reusing a known distilled strategy instead of a blind innovate.
106
119
  */
107
120
  distilledFallback?: readonly GeneCandidateInput[];
108
121
  /** Advisory-only AntiGene warnings matched upstream for this cycle's base signals. */
@@ -150,5 +163,13 @@ export interface CycleResult {
150
163
  export declare class CycleEngine {
151
164
  private readonly deps;
152
165
  constructor(deps: CycleEngineDeps);
166
+ /**
167
+ * Add V1-compatible curriculum targets from V2's replayable event history. Public so the orchestrator can run
168
+ * it before candidate assembly; runCycle calls it again for direct callers. Set merging makes that idempotent.
169
+ */
170
+ prepareCurriculumSignals(signals: readonly string[]): {
171
+ signals: string[];
172
+ curriculumSignals: string[];
173
+ };
153
174
  runCycle(input: CycleInput): Promise<CycleResult>;
154
175
  }