@hongmaple0820/scale-engine 0.48.0 → 0.50.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 (242) hide show
  1. package/README.en.md +2 -2
  2. package/README.md +2 -2
  3. package/dist/agents/evidenceDiscipline.d.ts +7 -0
  4. package/dist/agents/evidenceDiscipline.js +21 -0
  5. package/dist/agents/evidenceDiscipline.js.map +1 -0
  6. package/dist/agents/profiles.js +8 -1
  7. package/dist/agents/profiles.js.map +1 -1
  8. package/dist/agents/types.d.ts +1 -0
  9. package/dist/api/DashboardHttpConfig.d.ts +28 -0
  10. package/dist/api/DashboardHttpConfig.js +110 -0
  11. package/dist/api/DashboardHttpConfig.js.map +1 -0
  12. package/dist/api/cli.js +102 -11
  13. package/dist/api/cli.js.map +1 -1
  14. package/dist/api/http.d.ts +1 -0
  15. package/dist/api/http.js +50 -0
  16. package/dist/api/http.js.map +1 -0
  17. package/dist/artifact/types.d.ts +64 -0
  18. package/dist/artifact/types.js.map +1 -1
  19. package/dist/bootstrap/DependencyBootstrap.d.ts +1 -0
  20. package/dist/bootstrap/DependencyBootstrap.js +14 -3
  21. package/dist/bootstrap/DependencyBootstrap.js.map +1 -1
  22. package/dist/cli/cortexApplyCommand.d.ts +26 -0
  23. package/dist/cli/cortexApplyCommand.js +74 -0
  24. package/dist/cli/cortexApplyCommand.js.map +1 -0
  25. package/dist/cli/cortexCandidateCommands.d.ts +42 -0
  26. package/dist/cli/cortexCandidateCommands.js +119 -0
  27. package/dist/cli/cortexCandidateCommands.js.map +1 -0
  28. package/dist/cli/cortexCommands.d.ts +51 -0
  29. package/dist/cli/cortexCommands.js +127 -13
  30. package/dist/cli/cortexCommands.js.map +1 -1
  31. package/dist/cli/engineBootstrap.d.ts +1 -1
  32. package/dist/cli/engineBootstrap.js +2 -0
  33. package/dist/cli/engineBootstrap.js.map +1 -1
  34. package/dist/cli/evalCommands.js +13 -1
  35. package/dist/cli/evalCommands.js.map +1 -1
  36. package/dist/cli/phaseCommands.d.ts +81 -1
  37. package/dist/cli/phaseCommands.js +465 -31
  38. package/dist/cli/phaseCommands.js.map +1 -1
  39. package/dist/cli/runtimeSkillCommands.js +12 -2
  40. package/dist/cli/runtimeSkillCommands.js.map +1 -1
  41. package/dist/cli/shieldCommands.d.ts +1 -0
  42. package/dist/cli/shieldCommands.js +20 -7
  43. package/dist/cli/shieldCommands.js.map +1 -1
  44. package/dist/cli/workflowEvidenceCommands.d.ts +120 -0
  45. package/dist/cli/workflowEvidenceCommands.js +228 -2
  46. package/dist/cli/workflowEvidenceCommands.js.map +1 -1
  47. package/dist/cortex/AutoFixEventObservations.d.ts +11 -0
  48. package/dist/cortex/AutoFixEventObservations.js +72 -0
  49. package/dist/cortex/AutoFixEventObservations.js.map +1 -0
  50. package/dist/cortex/GateEvidenceObservations.d.ts +22 -0
  51. package/dist/cortex/GateEvidenceObservations.js +179 -0
  52. package/dist/cortex/GateEvidenceObservations.js.map +1 -0
  53. package/dist/cortex/GovernanceMetrics.d.ts +2 -0
  54. package/dist/cortex/GovernanceMetrics.js +112 -22
  55. package/dist/cortex/GovernanceMetrics.js.map +1 -1
  56. package/dist/cortex/InstinctApplicationRecorder.d.ts +28 -0
  57. package/dist/cortex/InstinctApplicationRecorder.js +145 -0
  58. package/dist/cortex/InstinctApplicationRecorder.js.map +1 -0
  59. package/dist/cortex/InstinctCandidateAudit.d.ts +3 -0
  60. package/dist/cortex/InstinctCandidateAudit.js +39 -0
  61. package/dist/cortex/InstinctCandidateAudit.js.map +1 -0
  62. package/dist/cortex/InstinctCandidateReview.d.ts +32 -0
  63. package/dist/cortex/InstinctCandidateReview.js +125 -0
  64. package/dist/cortex/InstinctCandidateReview.js.map +1 -0
  65. package/dist/cortex/InstinctExtractor.d.ts +1 -0
  66. package/dist/cortex/InstinctExtractor.js +24 -17
  67. package/dist/cortex/InstinctExtractor.js.map +1 -1
  68. package/dist/cortex/InstinctRuntimeEvidence.d.ts +14 -0
  69. package/dist/cortex/InstinctRuntimeEvidence.js +120 -0
  70. package/dist/cortex/InstinctRuntimeEvidence.js.map +1 -0
  71. package/dist/cortex/InstinctStore.d.ts +50 -4
  72. package/dist/cortex/InstinctStore.js +262 -48
  73. package/dist/cortex/InstinctStore.js.map +1 -1
  74. package/dist/cortex/InstinctValidation.d.ts +9 -0
  75. package/dist/cortex/InstinctValidation.js +55 -0
  76. package/dist/cortex/InstinctValidation.js.map +1 -0
  77. package/dist/cortex/SessionInjector.d.ts +1 -0
  78. package/dist/cortex/SessionInjector.js +28 -8
  79. package/dist/cortex/SessionInjector.js.map +1 -1
  80. package/dist/dashboard/DashboardServer.d.ts +79 -0
  81. package/dist/dashboard/DashboardServer.js +330 -6
  82. package/dist/dashboard/DashboardServer.js.map +1 -1
  83. package/dist/dashboard/spa/app.js +515 -0
  84. package/dist/dashboard/spa/components/DataTable.js +53 -0
  85. package/dist/dashboard/spa/components/EventStream.js +66 -0
  86. package/dist/dashboard/spa/components/LoadingState.js +39 -0
  87. package/dist/dashboard/spa/components/MetricCard.js +30 -0
  88. package/dist/dashboard/spa/components/Panel.js +27 -0
  89. package/dist/dashboard/spa/components/StatusBadge.js +51 -0
  90. package/dist/dashboard/spa/i18n.js +767 -0
  91. package/dist/dashboard/spa/index.html +463 -0
  92. package/dist/dashboard/spa/pages/costs.js +522 -0
  93. package/dist/dashboard/spa/pages/documents.js +540 -0
  94. package/dist/dashboard/spa/pages/knowledge.js +457 -0
  95. package/dist/dashboard/spa/pages/monitoring.js +361 -0
  96. package/dist/dashboard/spa/pages/overview.js +301 -0
  97. package/dist/dashboard/spa/pages/topology-renderers.js +251 -0
  98. package/dist/dashboard/spa/pages/topology.js +370 -0
  99. package/dist/dashboard/spa/pages/workflow-renderers.js +239 -0
  100. package/dist/dashboard/spa/pages/workflow.js +217 -0
  101. package/dist/env/EnvironmentDoctor.js +12 -7
  102. package/dist/env/EnvironmentDoctor.js.map +1 -1
  103. package/dist/eval/BenchmarkPublisher.d.ts +2 -0
  104. package/dist/eval/BenchmarkPublisher.js +43 -0
  105. package/dist/eval/BenchmarkPublisher.js.map +1 -1
  106. package/dist/eval/WorkflowEval.d.ts +9 -0
  107. package/dist/eval/WorkflowEval.js +348 -2
  108. package/dist/eval/WorkflowEval.js.map +1 -1
  109. package/dist/guardrails/ast/confirmers.d.ts +18 -0
  110. package/dist/guardrails/ast/confirmers.js +69 -0
  111. package/dist/guardrails/ast/confirmers.js.map +1 -0
  112. package/dist/guardrails/ast/parse.d.ts +20 -0
  113. package/dist/guardrails/ast/parse.js +51 -0
  114. package/dist/guardrails/ast/parse.js.map +1 -0
  115. package/dist/memory/MemoryBrain.d.ts +13 -0
  116. package/dist/memory/MemoryBrain.js +47 -0
  117. package/dist/memory/MemoryBrain.js.map +1 -1
  118. package/dist/memory/MemoryFabric.d.ts +1 -0
  119. package/dist/memory/MemoryFabric.js +12 -8
  120. package/dist/memory/MemoryFabric.js.map +1 -1
  121. package/dist/memory/MemoryLearning.d.ts +1 -0
  122. package/dist/memory/MemoryLearning.js +6 -3
  123. package/dist/memory/MemoryLearning.js.map +1 -1
  124. package/dist/memory/MemoryProviders.d.ts +8 -1
  125. package/dist/memory/MemoryProviders.js +143 -29
  126. package/dist/memory/MemoryProviders.js.map +1 -1
  127. package/dist/output/HTMLDocumentRenderer.d.ts +9 -0
  128. package/dist/output/HTMLDocumentRenderer.js +19 -0
  129. package/dist/output/HTMLDocumentRenderer.js.map +1 -1
  130. package/dist/review/FreshContextVerifier.d.ts +35 -0
  131. package/dist/review/FreshContextVerifier.js +120 -0
  132. package/dist/review/FreshContextVerifier.js.map +1 -0
  133. package/dist/review/JsonLlmClient.d.ts +37 -0
  134. package/dist/review/JsonLlmClient.js +94 -0
  135. package/dist/review/JsonLlmClient.js.map +1 -0
  136. package/dist/review/LlmJudge.d.ts +61 -0
  137. package/dist/review/LlmJudge.js +167 -0
  138. package/dist/review/LlmJudge.js.map +1 -0
  139. package/dist/runtime/AiOsRuntime.d.ts +14 -1
  140. package/dist/runtime/AiOsRuntime.js +59 -3
  141. package/dist/runtime/AiOsRuntime.js.map +1 -1
  142. package/dist/runtime/RuntimeDoctor.js +3 -1
  143. package/dist/runtime/RuntimeDoctor.js.map +1 -1
  144. package/dist/runtime/RuntimeEvidenceLedger.d.ts +6 -0
  145. package/dist/runtime/RuntimeEvidenceLedger.js +52 -1
  146. package/dist/runtime/RuntimeEvidenceLedger.js.map +1 -1
  147. package/dist/runtime/SessionLedger.d.ts +2 -0
  148. package/dist/runtime/SessionLedger.js +4 -0
  149. package/dist/runtime/SessionLedger.js.map +1 -1
  150. package/dist/setup/SetupVerification.js +53 -5
  151. package/dist/setup/SetupVerification.js.map +1 -1
  152. package/dist/shield/PolicyCompiler.js +73 -12
  153. package/dist/shield/PolicyCompiler.js.map +1 -1
  154. package/dist/shield/ProtectedPaths.js +4 -2
  155. package/dist/shield/ProtectedPaths.js.map +1 -1
  156. package/dist/skills/SkillCatalog.d.ts +2 -0
  157. package/dist/skills/SkillCatalog.js +8 -0
  158. package/dist/skills/SkillCatalog.js.map +1 -1
  159. package/dist/skills/SkillDoctor.d.ts +19 -2
  160. package/dist/skills/SkillDoctor.js +163 -13
  161. package/dist/skills/SkillDoctor.js.map +1 -1
  162. package/dist/tools/SafeCommandRunner.d.ts +1 -0
  163. package/dist/tools/SafeCommandRunner.js +1 -0
  164. package/dist/tools/SafeCommandRunner.js.map +1 -1
  165. package/dist/tools/ToolCapabilityRegistry.js +25 -3
  166. package/dist/tools/ToolCapabilityRegistry.js.map +1 -1
  167. package/dist/tools/ToolOrchestrator.js +21 -0
  168. package/dist/tools/ToolOrchestrator.js.map +1 -1
  169. package/dist/version.d.ts +1 -1
  170. package/dist/version.js +1 -1
  171. package/dist/workflow/AgentLoopReadiness.d.ts +103 -0
  172. package/dist/workflow/AgentLoopReadiness.js +371 -0
  173. package/dist/workflow/AgentLoopReadiness.js.map +1 -0
  174. package/dist/workflow/BoundaryEnforcement.d.ts +60 -0
  175. package/dist/workflow/BoundaryEnforcement.js +182 -0
  176. package/dist/workflow/BoundaryEnforcement.js.map +1 -0
  177. package/dist/workflow/EcosystemReadinessGate.d.ts +46 -0
  178. package/dist/workflow/EcosystemReadinessGate.js +126 -0
  179. package/dist/workflow/EcosystemReadinessGate.js.map +1 -0
  180. package/dist/workflow/EngineeringStandards.js +67 -12
  181. package/dist/workflow/EngineeringStandards.js.map +1 -1
  182. package/dist/workflow/GateCatalog.js +21 -2
  183. package/dist/workflow/GateCatalog.js.map +1 -1
  184. package/dist/workflow/GovernanceTemplatePacks.js +2 -26
  185. package/dist/workflow/GovernanceTemplatePacks.js.map +1 -1
  186. package/dist/workflow/GovernanceTemplates.js +8 -1
  187. package/dist/workflow/GovernanceTemplates.js.map +1 -1
  188. package/dist/workflow/ProfileEnforcement.d.ts +7 -0
  189. package/dist/workflow/ProfileEnforcement.js +12 -0
  190. package/dist/workflow/ProfileEnforcement.js.map +1 -0
  191. package/dist/workflow/ReleaseDeploymentLedger.d.ts +63 -0
  192. package/dist/workflow/ReleaseDeploymentLedger.js +154 -0
  193. package/dist/workflow/ReleaseDeploymentLedger.js.map +1 -0
  194. package/dist/workflow/ReviewAnalyzer.js +50 -3
  195. package/dist/workflow/ReviewAnalyzer.js.map +1 -1
  196. package/dist/workflow/ReviewStore.d.ts +10 -0
  197. package/dist/workflow/ReviewStore.js.map +1 -1
  198. package/dist/workflow/SessionPreamble.d.ts +7 -0
  199. package/dist/workflow/SessionPreamble.js +48 -9
  200. package/dist/workflow/SessionPreamble.js.map +1 -1
  201. package/dist/workflow/SurfaceCoverage.d.ts +19 -0
  202. package/dist/workflow/SurfaceCoverage.js +57 -0
  203. package/dist/workflow/SurfaceCoverage.js.map +1 -0
  204. package/dist/workflow/VerificationCommands.d.ts +1 -0
  205. package/dist/workflow/VerificationCommands.js.map +1 -1
  206. package/dist/workflow/VerificationProfile.d.ts +5 -0
  207. package/dist/workflow/VerificationProfile.js +26 -0
  208. package/dist/workflow/VerificationProfile.js.map +1 -1
  209. package/dist/workflow/VerificationSchema.d.ts +3 -0
  210. package/dist/workflow/VerificationSchema.js +6 -0
  211. package/dist/workflow/VerificationSchema.js.map +1 -1
  212. package/dist/workflow/WorkflowEffectiveness.d.ts +97 -0
  213. package/dist/workflow/WorkflowEffectiveness.js +302 -0
  214. package/dist/workflow/WorkflowEffectiveness.js.map +1 -0
  215. package/dist/workflow/WorkflowEffectivenessRenderer.d.ts +2 -0
  216. package/dist/workflow/WorkflowEffectivenessRenderer.js +67 -0
  217. package/dist/workflow/WorkflowEffectivenessRenderer.js.map +1 -0
  218. package/dist/workflow/WorkflowEffectivenessScoring.d.ts +6 -0
  219. package/dist/workflow/WorkflowEffectivenessScoring.js +243 -0
  220. package/dist/workflow/WorkflowEffectivenessScoring.js.map +1 -0
  221. package/dist/workflow/gates/EnhancedGates.js +2 -0
  222. package/dist/workflow/gates/EnhancedGates.js.map +1 -1
  223. package/dist/workflow/gates/GateSystem.d.ts +16 -0
  224. package/dist/workflow/gates/GateSystem.js +208 -41
  225. package/dist/workflow/gates/GateSystem.js.map +1 -1
  226. package/dist/workflow/gates/MetaGovernanceGates.js +269 -8
  227. package/dist/workflow/gates/MetaGovernanceGates.js.map +1 -1
  228. package/dist/workflow/gates/TestIntegrityGate.d.ts +51 -0
  229. package/dist/workflow/gates/TestIntegrityGate.js +175 -0
  230. package/dist/workflow/gates/TestIntegrityGate.js.map +1 -0
  231. package/dist/workflow/types.d.ts +1 -1
  232. package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -0
  233. package/docs/reference/cli.md +2 -1
  234. package/docs/start/agent-governance-demo.md +1 -1
  235. package/docs/workflow/E2E_EXAMPLE.md +133 -0
  236. package/docs/workflow/README.md +7 -1
  237. package/docs/workflow/TEMPLATE_GUIDE.md +162 -0
  238. package/docs/workflow/templates/github-actions-scale-preflight.yml +4 -1
  239. package/docs/workflow/templates/plan.md +26 -0
  240. package/docs/workflow/templates/spec.md +28 -0
  241. package/package.json +7 -3
  242. package/scripts/workflow/run-vitest.mjs +123 -0
@@ -3,37 +3,88 @@
3
3
  // Future: SQLite-backed in Cortex v2
4
4
  import { existsSync, mkdirSync, readdirSync, readFileSync, writeFileSync, unlinkSync } from 'node:fs';
5
5
  import { join } from 'node:path';
6
- import { createHash } from 'node:crypto';
6
+ import { randomUUID } from 'node:crypto';
7
7
  import { logger } from '../core/logger.js';
8
+ import { deriveScopedInstinctId, normalizeInstinctTrigger, validateInstinct, } from './InstinctValidation.js';
8
9
  // ---------------------------------------------------------------------------
9
10
  // InstinctStore
10
11
  // ---------------------------------------------------------------------------
11
12
  export class InstinctStore {
12
- constructor(baseDir = join(process.cwd(), '.scale', 'instincts')) {
13
+ constructor(baseDir = join(process.cwd(), '.scale', 'instincts'), options = {}) {
13
14
  this.baseDir = baseDir;
14
- if (!existsSync(baseDir))
15
+ if (options.createDirs !== false && !existsSync(baseDir))
15
16
  mkdirSync(baseDir, { recursive: true });
16
17
  }
17
18
  /**
18
19
  * Save an instinct to disk.
19
- * Deduplication: if an instinct with the same trigger exists, only keep the higher-confidence one.
20
+ * Deduplication: within the same scope/project/trigger, only keep the higher-confidence one.
20
21
  */
21
22
  save(instinct) {
22
- const existing = this.findByTrigger(instinct.trigger);
23
- if (existing && existing.confidence >= instinct.confidence) {
23
+ const candidate = this.normalizeForSave(instinct);
24
+ const validation = validateInstinct(candidate);
25
+ if (!validation.ok) {
26
+ logger.warn({ id: candidate.id, reasons: validation.reasons }, 'Rejected invalid instinct');
27
+ this.appendAudit({
28
+ op: 'reject',
29
+ id: candidate.id || 'unknown',
30
+ scope: candidate.scope,
31
+ projectId: candidate.projectId,
32
+ after: cloneInstinct(candidate),
33
+ reason: 'validation-failed',
34
+ reasons: validation.reasons,
35
+ });
36
+ return '';
37
+ }
38
+ candidate.id = deriveScopedInstinctId(candidate.trigger, candidate.scope, candidate.projectId);
39
+ const existing = this.findByKey(candidate.trigger, candidate.scope, candidate.projectId);
40
+ if (existing && existing.confidence >= candidate.confidence) {
24
41
  // Keep existing. Increment observation count.
25
- existing.observations += instinct.observations;
26
- existing.updatedAt = new Date().toISOString();
27
- this.writeInstinctFile(existing);
28
- return existing.id;
42
+ const before = cloneInstinct(existing);
43
+ const after = {
44
+ ...existing,
45
+ observations: existing.observations + candidate.observations,
46
+ updatedAt: new Date().toISOString(),
47
+ };
48
+ this.writeInstinctFile(after);
49
+ this.appendAudit({
50
+ op: 'save',
51
+ id: after.id,
52
+ scope: after.scope,
53
+ projectId: after.projectId,
54
+ before,
55
+ after: cloneInstinct(after),
56
+ reason: 'dedup-merge-lower-confidence',
57
+ });
58
+ return after.id;
29
59
  }
30
60
  // New or higher-confidence instinct replaces existing
31
61
  if (existing) {
32
- this.delete(existing.id);
62
+ const before = cloneInstinct(existing);
63
+ this.removeInstinctFile(existing.id);
64
+ candidate.updatedAt = new Date().toISOString();
65
+ this.writeInstinctFile(candidate);
66
+ this.appendAudit({
67
+ op: 'replace',
68
+ id: candidate.id,
69
+ scope: candidate.scope,
70
+ projectId: candidate.projectId,
71
+ before,
72
+ after: cloneInstinct(candidate),
73
+ reason: 'higher-confidence-replacement',
74
+ });
75
+ return candidate.id;
33
76
  }
34
- instinct.updatedAt = new Date().toISOString();
35
- this.writeInstinctFile(instinct);
36
- return instinct.id;
77
+ candidate.updatedAt = new Date().toISOString();
78
+ this.writeInstinctFile(candidate);
79
+ this.appendAudit({
80
+ op: 'save',
81
+ id: candidate.id,
82
+ scope: candidate.scope,
83
+ projectId: candidate.projectId,
84
+ after: cloneInstinct(candidate),
85
+ reason: 'new-instinct',
86
+ });
87
+ return candidate.id;
37
88
  }
38
89
  /**
39
90
  * Load all instincts from disk.
@@ -56,7 +107,9 @@ export class InstinctStore {
56
107
  instincts.push(instinct);
57
108
  }
58
109
  }
59
- catch { /* skip unreadable domains */ }
110
+ catch (err) {
111
+ logger.warn({ err, domain }, 'Skipped unreadable instinct domain');
112
+ }
60
113
  }
61
114
  else if (domain.endsWith('.yaml')) {
62
115
  // Flat file in root
@@ -91,45 +144,68 @@ export class InstinctStore {
91
144
  return instincts;
92
145
  }
93
146
  /**
94
- * Get high-confidence instincts for SessionStart injection (0.7+).
147
+ * Get instincts for SessionStart injection.
148
+ *
149
+ * Default callers only receive strong instincts (0.7+). SessionStart may opt
150
+ * into a conservative reviewed-moderate fallback when no strong instinct is
151
+ * available, so runtime learning can still be measured without injecting
152
+ * tentative or under-observed patterns.
95
153
  */
96
- getInjectionInstincts(projectId) {
97
- return this.query({ minConfidence: 0.7, projectId });
154
+ getInjectionInstincts(projectId, options = {}) {
155
+ const minConfidence = options.minConfidence ?? 0.7;
156
+ const scopedProject = projectId?.trim();
157
+ const inScope = (instinct) => instinct.scope === 'global' ||
158
+ !instinct.projectId ||
159
+ Boolean(scopedProject && instinct.projectId === scopedProject);
160
+ const strong = this.query({ minConfidence }).filter(inScope);
161
+ if (strong.length > 0 || !options.allowModerateFallback)
162
+ return strong;
163
+ const fallbackMinConfidence = options.fallbackMinConfidence ?? 0.5;
164
+ const fallbackMinObservations = options.fallbackMinObservations ?? 3;
165
+ const fallbackLimit = options.fallbackLimit ?? 3;
166
+ return this.query({ minConfidence: fallbackMinConfidence })
167
+ .filter(inScope)
168
+ .filter(instinct => instinct.confidence < minConfidence &&
169
+ instinct.observations >= fallbackMinObservations)
170
+ .slice(0, fallbackLimit);
98
171
  }
99
172
  /**
100
173
  * Find an instinct by trigger pattern.
101
174
  */
102
175
  findByTrigger(trigger) {
103
- const hash = createHash('sha256').update(trigger).digest('hex').slice(0, 10);
104
- const id = `instinct-${hash}`;
105
- return this.findById(id);
176
+ return this.findByKey(trigger);
106
177
  }
107
178
  /**
108
- * Find an instinct by ID.
179
+ * Find an instinct by trigger pattern within an optional scope/project key.
109
180
  */
110
- findById(id) {
111
- // Search all domain directories
112
- if (!existsSync(this.baseDir))
181
+ findByKey(trigger, scope, projectId) {
182
+ const normalizedTrigger = normalizeInstinctTrigger(trigger);
183
+ const normalizedProjectId = projectId?.trim() || undefined;
184
+ if (!normalizedTrigger)
113
185
  return null;
114
- try {
115
- for (const entry of readdirSync(this.baseDir)) {
116
- const full = join(this.baseDir, entry);
117
- if (existsSync(full) && !entry.startsWith('.')) {
118
- if (!entry.endsWith('.yaml')) {
119
- // Domain directory
120
- const filePath = join(full, `${id}.yaml`);
121
- if (existsSync(filePath))
122
- return this.parseInstinctFile(filePath);
123
- }
124
- }
125
- }
186
+ if (scope) {
187
+ const scoped = this.findById(deriveScopedInstinctId(normalizedTrigger, scope, normalizedProjectId));
188
+ if (scoped)
189
+ return scoped;
126
190
  }
127
- catch { /* skip */ }
128
- // Flat file search
129
- const flatPath = join(this.baseDir, `${id}.yaml`);
130
- if (existsSync(flatPath))
131
- return this.parseInstinctFile(flatPath);
132
- return null;
191
+ return this.loadAll().find(instinct => {
192
+ if (normalizeInstinctTrigger(instinct.trigger) !== normalizedTrigger)
193
+ return false;
194
+ if (scope && instinct.scope !== scope)
195
+ return false;
196
+ if (normalizedProjectId !== undefined)
197
+ return (instinct.projectId ?? '') === normalizedProjectId;
198
+ if (scope === 'project')
199
+ return !instinct.projectId;
200
+ return true;
201
+ }) ?? null;
202
+ }
203
+ /**
204
+ * Find an instinct by ID.
205
+ */
206
+ findById(id) {
207
+ const filePath = this.locateInstinctFile(id);
208
+ return filePath ? this.parseInstinctFile(filePath) : null;
133
209
  }
134
210
  /**
135
211
  * Delete an instinct by ID.
@@ -138,11 +214,19 @@ export class InstinctStore {
138
214
  const instinct = this.findById(id);
139
215
  if (!instinct)
140
216
  return false;
141
- const domainDir = join(this.baseDir, instinct.domain);
142
- const filePath = join(domainDir, `${id}.yaml`);
217
+ const before = cloneInstinct(instinct);
143
218
  try {
144
- if (existsSync(filePath))
145
- unlinkSync(filePath);
219
+ const removed = this.removeInstinctFile(id);
220
+ if (!removed)
221
+ return false;
222
+ this.appendAudit({
223
+ op: 'delete',
224
+ id,
225
+ scope: before.scope,
226
+ projectId: before.projectId,
227
+ before,
228
+ reason: 'delete',
229
+ });
146
230
  return true;
147
231
  }
148
232
  catch (err) {
@@ -157,12 +241,87 @@ export class InstinctStore {
157
241
  const instinct = this.findById(id);
158
242
  if (!instinct)
159
243
  return;
244
+ const before = cloneInstinct(instinct);
160
245
  instinct.appliedCount++;
161
246
  instinct.hitRate = instinct.observations > 0
162
247
  ? instinct.appliedCount / instinct.observations
163
248
  : 0;
164
249
  instinct.updatedAt = new Date().toISOString();
165
250
  this.writeInstinctFile(instinct);
251
+ this.appendAudit({
252
+ op: 'apply',
253
+ id,
254
+ scope: instinct.scope,
255
+ projectId: instinct.projectId,
256
+ before,
257
+ after: cloneInstinct(instinct),
258
+ reason: success ? 'application-succeeded' : 'application-failed',
259
+ });
260
+ }
261
+ /**
262
+ * Read append-only instinct audit history, optionally filtered by instinct id.
263
+ */
264
+ history(id) {
265
+ const auditPath = this.auditPath();
266
+ if (!existsSync(auditPath))
267
+ return [];
268
+ try {
269
+ return readFileSync(auditPath, 'utf-8')
270
+ .split('\n')
271
+ .map(line => line.trim())
272
+ .filter(Boolean)
273
+ .map(line => {
274
+ try {
275
+ return JSON.parse(line);
276
+ }
277
+ catch {
278
+ return null;
279
+ }
280
+ })
281
+ .filter((entry) => Boolean(entry))
282
+ .filter(entry => !id || entry.id === id);
283
+ }
284
+ catch (err) {
285
+ logger.warn({ err }, 'Failed to read instinct audit history');
286
+ return [];
287
+ }
288
+ }
289
+ /**
290
+ * Restore the store to the `before` snapshot of an audit entry. If an initial
291
+ * save had no `before`, restore undoes that save by deleting the created item.
292
+ */
293
+ restore(auditId) {
294
+ const entry = this.history().find(item => item.auditId === auditId);
295
+ if (!entry)
296
+ return false;
297
+ const current = entry.id ? this.findById(entry.id) : null;
298
+ if (entry.before) {
299
+ this.writeInstinctFile(entry.before);
300
+ this.appendAudit({
301
+ op: 'restore',
302
+ id: entry.before.id,
303
+ scope: entry.before.scope,
304
+ projectId: entry.before.projectId,
305
+ before: current ? cloneInstinct(current) : undefined,
306
+ after: cloneInstinct(entry.before),
307
+ reason: `restore:${entry.auditId}`,
308
+ });
309
+ return true;
310
+ }
311
+ if (entry.after) {
312
+ const before = this.findById(entry.after.id);
313
+ const removed = this.removeInstinctFile(entry.after.id);
314
+ this.appendAudit({
315
+ op: 'restore',
316
+ id: entry.after.id,
317
+ scope: entry.after.scope,
318
+ projectId: entry.after.projectId,
319
+ before: before ? cloneInstinct(before) : undefined,
320
+ reason: `restore:${entry.auditId}`,
321
+ });
322
+ return removed;
323
+ }
324
+ return false;
166
325
  }
167
326
  /**
168
327
  * Get store statistics.
@@ -192,6 +351,15 @@ export class InstinctStore {
192
351
  // -----------------------------------------------------------------------
193
352
  // Internal
194
353
  // -----------------------------------------------------------------------
354
+ normalizeForSave(instinct) {
355
+ return {
356
+ ...instinct,
357
+ trigger: normalizeInstinctTrigger(instinct.trigger ?? ''),
358
+ action: (instinct.action ?? '').trim(),
359
+ projectId: instinct.projectId?.trim() || undefined,
360
+ scope: instinct.scope ?? 'project',
361
+ };
362
+ }
195
363
  writeInstinctFile(instinct) {
196
364
  const domainDir = join(this.baseDir, instinct.domain);
197
365
  if (!existsSync(domainDir))
@@ -200,6 +368,46 @@ export class InstinctStore {
200
368
  const yaml = this.serializeInstinct(instinct);
201
369
  writeFileSync(filePath, yaml, 'utf-8');
202
370
  }
371
+ locateInstinctFile(id) {
372
+ if (!existsSync(this.baseDir))
373
+ return null;
374
+ try {
375
+ for (const entry of readdirSync(this.baseDir)) {
376
+ const full = join(this.baseDir, entry);
377
+ if (existsSync(full) && !entry.startsWith('.') && !entry.endsWith('.yaml')) {
378
+ const filePath = join(full, `${id}.yaml`);
379
+ if (existsSync(filePath))
380
+ return filePath;
381
+ }
382
+ }
383
+ }
384
+ catch (err) {
385
+ logger.warn({ err, id }, 'Failed to locate instinct file');
386
+ }
387
+ const flatPath = join(this.baseDir, `${id}.yaml`);
388
+ return existsSync(flatPath) ? flatPath : null;
389
+ }
390
+ removeInstinctFile(id) {
391
+ const filePath = this.locateInstinctFile(id);
392
+ if (!filePath)
393
+ return false;
394
+ unlinkSync(filePath);
395
+ return true;
396
+ }
397
+ auditPath() {
398
+ return join(this.baseDir, '.audit.jsonl');
399
+ }
400
+ appendAudit(input) {
401
+ if (!existsSync(this.baseDir))
402
+ mkdirSync(this.baseDir, { recursive: true });
403
+ const entry = {
404
+ auditId: `audit-${Date.now()}-${randomUUID().slice(0, 8)}`,
405
+ ts: new Date().toISOString(),
406
+ ...input,
407
+ };
408
+ writeFileSync(this.auditPath(), `${JSON.stringify(entry)}\n`, { encoding: 'utf-8', flag: 'a' });
409
+ return entry;
410
+ }
203
411
  serializeInstinct(instinct) {
204
412
  const frontmatter = [
205
413
  `id: ${instinct.id}`,
@@ -237,7 +445,7 @@ export class InstinctStore {
237
445
  const frontmatter = fmMatch[1];
238
446
  const body = fmMatch[2] ?? '';
239
447
  const getYamlVal = (key) => {
240
- const m = frontmatter.match(new RegExp(`^${key}:\\s*(.+?)$`, 'm'));
448
+ const m = frontmatter.match(new RegExp(`^${key}:[^\\S\\r\\n]*([^\\r\\n]*)$`, 'm'));
241
449
  return m ? m[1].trim().replace(/^"(.*)"$/, '$1') : '';
242
450
  };
243
451
  return {
@@ -263,4 +471,10 @@ export class InstinctStore {
263
471
  }
264
472
  }
265
473
  }
474
+ function cloneInstinct(instinct) {
475
+ return {
476
+ ...instinct,
477
+ evidence: [...instinct.evidence],
478
+ };
479
+ }
266
480
  //# sourceMappingURL=InstinctStore.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"InstinctStore.js","sourceRoot":"","sources":["../../src/cortex/InstinctStore.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InstinctStore.js","sourceRoot":"","sources":["../../src/cortex/InstinctStore.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { Instinct } from './InstinctExtractor.js';
2
+ export declare const INSTINCT_CONFIDENCE_LEVELS: readonly [0.3, 0.5, 0.7, 0.9];
3
+ export interface InstinctValidationResult {
4
+ ok: boolean;
5
+ reasons: string[];
6
+ }
7
+ export declare function normalizeInstinctTrigger(trigger: string): string;
8
+ export declare function deriveScopedInstinctId(trigger: string, scope?: Instinct['scope'], projectId?: string): string;
9
+ export declare function validateInstinct(instinct: Instinct): InstinctValidationResult;
@@ -0,0 +1,55 @@
1
+ import { createHash } from 'node:crypto';
2
+ export const INSTINCT_CONFIDENCE_LEVELS = [0.3, 0.5, 0.7, 0.9];
3
+ const ACTION_VERB = /\b(add|audit|avoid|build|check|collect|compare|document|ensure|escalate|fix|keep|lint|prefer|record|remove|review|run|scan|split|test|update|use|validate|verify)\b/i;
4
+ const CJK_TEXT = /[\u4e00-\u9fff]/;
5
+ export function normalizeInstinctTrigger(trigger) {
6
+ return trigger.trim().replace(/\s+/g, ' ');
7
+ }
8
+ export function deriveScopedInstinctId(trigger, scope = 'project', projectId) {
9
+ const key = [
10
+ scope,
11
+ (projectId ?? '').trim(),
12
+ normalizeInstinctTrigger(trigger),
13
+ ].join(':');
14
+ return `instinct-${createHash('sha256').update(key).digest('hex').slice(0, 10)}`;
15
+ }
16
+ export function validateInstinct(instinct) {
17
+ const reasons = [];
18
+ const trigger = normalizeInstinctTrigger(instinct.trigger ?? '');
19
+ const action = (instinct.action ?? '').trim();
20
+ if (!trigger)
21
+ reasons.push('trigger is required');
22
+ if (!action) {
23
+ reasons.push('action is required');
24
+ }
25
+ else {
26
+ const actionText = action.replace(/[#*_`>\-\s]/g, '');
27
+ if (actionText.length < 8)
28
+ reasons.push('action is too short');
29
+ if (!ACTION_VERB.test(action) && !CJK_TEXT.test(action)) {
30
+ reasons.push('action must contain actionable guidance');
31
+ }
32
+ }
33
+ if (!Number.isFinite(instinct.confidence)) {
34
+ reasons.push('confidence must be finite');
35
+ }
36
+ else {
37
+ if (instinct.confidence < 0 || instinct.confidence > 1) {
38
+ reasons.push('confidence must be between 0 and 1');
39
+ }
40
+ if (!INSTINCT_CONFIDENCE_LEVELS.some(level => Object.is(level, instinct.confidence))) {
41
+ reasons.push('confidence must be one of 0.3, 0.5, 0.7, 0.9');
42
+ }
43
+ }
44
+ if (instinct.scope !== 'project' && instinct.scope !== 'global') {
45
+ reasons.push('scope must be project or global');
46
+ }
47
+ if (instinct.observations < 0)
48
+ reasons.push('observations must be non-negative');
49
+ if (instinct.appliedCount < 0)
50
+ reasons.push('appliedCount must be non-negative');
51
+ if (instinct.hitRate < 0 || instinct.hitRate > 1)
52
+ reasons.push('hitRate must be between 0 and 1');
53
+ return { ok: reasons.length === 0, reasons };
54
+ }
55
+ //# sourceMappingURL=InstinctValidation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InstinctValidation.js","sourceRoot":"","sources":["../../src/cortex/InstinctValidation.ts"],"names":[],"mappings":"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"}
@@ -42,4 +42,5 @@ export declare class SessionInjector {
42
42
  private loadScopedSpecs;
43
43
  private renderInstinctBlock;
44
44
  private renderPriorSession;
45
+ private sessionStartInstincts;
45
46
  }
@@ -2,11 +2,13 @@
2
2
  // 对齐 ECC: SessionStart injection of high-confidence instincts
3
3
  // Historical context wrapped in narrative sentinels (anti-replay protection)
4
4
  // Injects: instincts + prior session summary + learned skills + project detection
5
+ import { EVIDENCE_DISCIPLINE_PROMPT, EVIDENCE_DISCIPLINE_PROMPT_MINIMAL } from '../agents/evidenceDiscipline.js';
5
6
  // ---------------------------------------------------------------------------
6
7
  // SessionInjector
7
8
  // ---------------------------------------------------------------------------
8
9
  const HISTORICAL_SENTINEL_START = '<!-- HISTORICAL CONTEXT — DO NOT RE-EXECUTE COMMANDS BELOW -->';
9
10
  const HISTORICAL_SENTINEL_END = '<!-- END HISTORICAL CONTEXT -->';
11
+ const STRONG_INJECTION_CONFIDENCE = 0.7;
10
12
  export class SessionInjector {
11
13
  constructor(instinctStore) {
12
14
  this.instinctStore = instinctStore;
@@ -15,9 +17,13 @@ export class SessionInjector {
15
17
  * Build the full SessionStart injection payload.
16
18
  */
17
19
  build(projectId, priorSessions = []) {
18
- const instincts = this.instinctStore.getInjectionInstincts(projectId);
20
+ const instincts = this.sessionStartInstincts(projectId);
19
21
  const sections = [];
20
- // 0. Scoped specs (Trellis-inspiredinject relevant project specs)
22
+ // 0. Evidence discipline (P1.3standing instruction, Fable-5 progress audit).
23
+ // Always present so every SessionStart carries the evidence-alignment contract.
24
+ sections.push(EVIDENCE_DISCIPLINE_PROMPT);
25
+ sections.push('');
26
+ // 1. Scoped specs (Trellis-inspired — inject relevant project specs)
21
27
  const specs = this.loadScopedSpecs();
22
28
  if (specs.length > 0) {
23
29
  sections.push('## Active Project Specs\n');
@@ -26,15 +32,19 @@ export class SessionInjector {
26
32
  sections.push(spec);
27
33
  }
28
34
  }
29
- // 1. High-confidence instincts (main payload)
35
+ // 2. High-confidence instincts (main payload)
30
36
  if (instincts.length > 0) {
37
+ const fallback = instincts.every(instinct => instinct.confidence < STRONG_INJECTION_CONFIDENCE);
31
38
  sections.push('## SCALE Cortex — Learned Instincts\n');
32
39
  sections.push('The following patterns have been learned from prior sessions. Use them to avoid repeating mistakes.\n');
40
+ if (fallback) {
41
+ sections.push('No strong-confidence instinct is available; these reviewed moderate-confidence patterns have repeated evidence and should be used cautiously.\n');
42
+ }
33
43
  for (const instinct of instincts) {
34
44
  sections.push(this.renderInstinctBlock(instinct));
35
45
  }
36
46
  }
37
- // 2. Prior session summaries (with stale replay protection)
47
+ // 3. Prior session summaries (with stale replay protection)
38
48
  if (priorSessions.length > 0) {
39
49
  sections.push('## Recent Session History\n');
40
50
  sections.push(HISTORICAL_SENTINEL_START);
@@ -44,7 +54,7 @@ export class SessionInjector {
44
54
  }
45
55
  sections.push(HISTORICAL_SENTINEL_END);
46
56
  }
47
- // 3. Cortex usage hint
57
+ // 4. Cortex usage hint
48
58
  sections.push('---');
49
59
  sections.push('_SCALE Cortex is active. Run `scale cortex metrics` for ROI dashboard._');
50
60
  const content = sections.join('\n');
@@ -62,10 +72,12 @@ export class SessionInjector {
62
72
  * Build a minimal injection suitable for constrained context budgets.
63
73
  */
64
74
  buildMinimal(projectId) {
65
- const instincts = this.instinctStore.getInjectionInstincts(projectId);
75
+ const instincts = this.sessionStartInstincts(projectId);
76
+ // The evidence-discipline contract is always present at SessionStart, even under
77
+ // a constrained budget — here as the condensed single-line form (P1.3).
66
78
  if (instincts.length === 0) {
67
79
  return {
68
- content: '',
80
+ content: EVIDENCE_DISCIPLINE_PROMPT_MINIMAL,
69
81
  instinctCount: 0,
70
82
  metadata: { projectId, instinctsApplied: [] },
71
83
  };
@@ -73,7 +85,7 @@ export class SessionInjector {
73
85
  // One-liner format for minimal context consumption
74
86
  const lines = instincts.map(i => `[Cortex ${i.confidence}] ${i.domain}: ${i.action.split('\n')[0]?.replace(/^##\s*/, '')?.slice(0, 120)}`);
75
87
  return {
76
- content: `SCALE Cortex Instincts (${instincts.length}):\n${lines.join('\n')}`,
88
+ content: `${EVIDENCE_DISCIPLINE_PROMPT_MINIMAL}\n\nSCALE Cortex Instincts (${instincts.length}):\n${lines.join('\n')}`,
77
89
  instinctCount: instincts.length,
78
90
  metadata: { projectId, instinctsApplied: instincts.map(i => i.id) },
79
91
  };
@@ -156,5 +168,13 @@ export class SessionInjector {
156
168
  ` Gates: ${session.gatesPassed ? 'PASS' : 'FAIL'} | Task: ${session.taskCompleted}`,
157
169
  ].join('\n');
158
170
  }
171
+ sessionStartInstincts(projectId) {
172
+ return this.instinctStore.getInjectionInstincts(projectId, {
173
+ allowModerateFallback: true,
174
+ fallbackMinConfidence: 0.5,
175
+ fallbackMinObservations: 3,
176
+ fallbackLimit: 3,
177
+ });
178
+ }
159
179
  }
160
180
  //# sourceMappingURL=SessionInjector.js.map