@itaila/archetype 0.3.30

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 (319) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +475 -0
  3. package/dist/audit/audit-persona.d.ts +163 -0
  4. package/dist/audit/audit-persona.d.ts.map +1 -0
  5. package/dist/audit/audit-persona.js +415 -0
  6. package/dist/audit/audit-persona.js.map +1 -0
  7. package/dist/audit/brain-reflection.d.ts +33 -0
  8. package/dist/audit/brain-reflection.d.ts.map +1 -0
  9. package/dist/audit/brain-reflection.js +148 -0
  10. package/dist/audit/brain-reflection.js.map +1 -0
  11. package/dist/audit/conversation-audit.d.ts +12 -0
  12. package/dist/audit/conversation-audit.d.ts.map +1 -0
  13. package/dist/audit/conversation-audit.js +76 -0
  14. package/dist/audit/conversation-audit.js.map +1 -0
  15. package/dist/audit/prompt-audit.d.ts +10 -0
  16. package/dist/audit/prompt-audit.d.ts.map +1 -0
  17. package/dist/audit/prompt-audit.js +153 -0
  18. package/dist/audit/prompt-audit.js.map +1 -0
  19. package/dist/audit/prompt-dump.d.ts +137 -0
  20. package/dist/audit/prompt-dump.d.ts.map +1 -0
  21. package/dist/audit/prompt-dump.js +269 -0
  22. package/dist/audit/prompt-dump.js.map +1 -0
  23. package/dist/audit/trace-integrity.d.ts +33 -0
  24. package/dist/audit/trace-integrity.d.ts.map +1 -0
  25. package/dist/audit/trace-integrity.js +109 -0
  26. package/dist/audit/trace-integrity.js.map +1 -0
  27. package/dist/audit/types.d.ts +92 -0
  28. package/dist/audit/types.d.ts.map +1 -0
  29. package/dist/audit/types.js +2 -0
  30. package/dist/audit/types.js.map +1 -0
  31. package/dist/audit/version.d.ts +14 -0
  32. package/dist/audit/version.d.ts.map +1 -0
  33. package/dist/audit/version.js +65 -0
  34. package/dist/audit/version.js.map +1 -0
  35. package/dist/brain.d.ts +7 -0
  36. package/dist/brain.d.ts.map +1 -0
  37. package/dist/brain.js +83 -0
  38. package/dist/brain.js.map +1 -0
  39. package/dist/builder/actions.d.ts +60 -0
  40. package/dist/builder/actions.d.ts.map +1 -0
  41. package/dist/builder/actions.js +257 -0
  42. package/dist/builder/actions.js.map +1 -0
  43. package/dist/builder/browser.d.ts +140 -0
  44. package/dist/builder/browser.d.ts.map +1 -0
  45. package/dist/builder/browser.js +232 -0
  46. package/dist/builder/browser.js.map +1 -0
  47. package/dist/builder/executor.d.ts +228 -0
  48. package/dist/builder/executor.d.ts.map +1 -0
  49. package/dist/builder/executor.js +1548 -0
  50. package/dist/builder/executor.js.map +1 -0
  51. package/dist/builder/index.d.ts +24 -0
  52. package/dist/builder/index.d.ts.map +1 -0
  53. package/dist/builder/index.js +24 -0
  54. package/dist/builder/index.js.map +1 -0
  55. package/dist/builder/node-test-discovery.d.ts +13 -0
  56. package/dist/builder/node-test-discovery.d.ts.map +1 -0
  57. package/dist/builder/node-test-discovery.js +45 -0
  58. package/dist/builder/node-test-discovery.js.map +1 -0
  59. package/dist/builder/sandbox.d.ts +172 -0
  60. package/dist/builder/sandbox.d.ts.map +1 -0
  61. package/dist/builder/sandbox.js +294 -0
  62. package/dist/builder/sandbox.js.map +1 -0
  63. package/dist/builder/workspace-files.d.ts +63 -0
  64. package/dist/builder/workspace-files.d.ts.map +1 -0
  65. package/dist/builder/workspace-files.js +190 -0
  66. package/dist/builder/workspace-files.js.map +1 -0
  67. package/dist/core/actions.d.ts +55 -0
  68. package/dist/core/actions.d.ts.map +1 -0
  69. package/dist/core/actions.js +311 -0
  70. package/dist/core/actions.js.map +1 -0
  71. package/dist/core/attachment-notes.d.ts +7 -0
  72. package/dist/core/attachment-notes.d.ts.map +1 -0
  73. package/dist/core/attachment-notes.js +38 -0
  74. package/dist/core/attachment-notes.js.map +1 -0
  75. package/dist/core/context.d.ts +10 -0
  76. package/dist/core/context.d.ts.map +1 -0
  77. package/dist/core/context.js +108 -0
  78. package/dist/core/context.js.map +1 -0
  79. package/dist/core/crud-prompt.d.ts +16 -0
  80. package/dist/core/crud-prompt.d.ts.map +1 -0
  81. package/dist/core/crud-prompt.js +268 -0
  82. package/dist/core/crud-prompt.js.map +1 -0
  83. package/dist/core/crud-schema.d.ts +12 -0
  84. package/dist/core/crud-schema.d.ts.map +1 -0
  85. package/dist/core/crud-schema.js +42 -0
  86. package/dist/core/crud-schema.js.map +1 -0
  87. package/dist/core/effective-config.d.ts +13 -0
  88. package/dist/core/effective-config.d.ts.map +1 -0
  89. package/dist/core/effective-config.js +33 -0
  90. package/dist/core/effective-config.js.map +1 -0
  91. package/dist/core/entities.d.ts +82 -0
  92. package/dist/core/entities.d.ts.map +1 -0
  93. package/dist/core/entities.js +116 -0
  94. package/dist/core/entities.js.map +1 -0
  95. package/dist/core/entity-helpers.d.ts +47 -0
  96. package/dist/core/entity-helpers.d.ts.map +1 -0
  97. package/dist/core/entity-helpers.js +122 -0
  98. package/dist/core/entity-helpers.js.map +1 -0
  99. package/dist/core/entity-registry.d.ts +47 -0
  100. package/dist/core/entity-registry.d.ts.map +1 -0
  101. package/dist/core/entity-registry.js +54 -0
  102. package/dist/core/entity-registry.js.map +1 -0
  103. package/dist/core/eq.d.ts +13 -0
  104. package/dist/core/eq.d.ts.map +1 -0
  105. package/dist/core/eq.js +41 -0
  106. package/dist/core/eq.js.map +1 -0
  107. package/dist/core/focus-context.d.ts +19 -0
  108. package/dist/core/focus-context.d.ts.map +1 -0
  109. package/dist/core/focus-context.js +46 -0
  110. package/dist/core/focus-context.js.map +1 -0
  111. package/dist/core/focus-mode-actions.d.ts +23 -0
  112. package/dist/core/focus-mode-actions.d.ts.map +1 -0
  113. package/dist/core/focus-mode-actions.js +74 -0
  114. package/dist/core/focus-mode-actions.js.map +1 -0
  115. package/dist/core/greeting.d.ts +10 -0
  116. package/dist/core/greeting.d.ts.map +1 -0
  117. package/dist/core/greeting.js +41 -0
  118. package/dist/core/greeting.js.map +1 -0
  119. package/dist/core/identity.d.ts +13 -0
  120. package/dist/core/identity.d.ts.map +1 -0
  121. package/dist/core/identity.js +54 -0
  122. package/dist/core/identity.js.map +1 -0
  123. package/dist/core/knowledge.d.ts +10 -0
  124. package/dist/core/knowledge.d.ts.map +1 -0
  125. package/dist/core/knowledge.js +40 -0
  126. package/dist/core/knowledge.js.map +1 -0
  127. package/dist/core/memory-actions.d.ts +38 -0
  128. package/dist/core/memory-actions.d.ts.map +1 -0
  129. package/dist/core/memory-actions.js +181 -0
  130. package/dist/core/memory-actions.js.map +1 -0
  131. package/dist/core/memory.d.ts +35 -0
  132. package/dist/core/memory.d.ts.map +1 -0
  133. package/dist/core/memory.js +168 -0
  134. package/dist/core/memory.js.map +1 -0
  135. package/dist/core/peer-actions.d.ts +15 -0
  136. package/dist/core/peer-actions.d.ts.map +1 -0
  137. package/dist/core/peer-actions.js +33 -0
  138. package/dist/core/peer-actions.js.map +1 -0
  139. package/dist/core/prompt-builder.d.ts +46 -0
  140. package/dist/core/prompt-builder.d.ts.map +1 -0
  141. package/dist/core/prompt-builder.js +543 -0
  142. package/dist/core/prompt-builder.js.map +1 -0
  143. package/dist/core/prompt-mode.d.ts +3 -0
  144. package/dist/core/prompt-mode.d.ts.map +1 -0
  145. package/dist/core/prompt-mode.js +6 -0
  146. package/dist/core/prompt-mode.js.map +1 -0
  147. package/dist/core/prompted-turn.d.ts +6 -0
  148. package/dist/core/prompted-turn.d.ts.map +1 -0
  149. package/dist/core/prompted-turn.js +48 -0
  150. package/dist/core/prompted-turn.js.map +1 -0
  151. package/dist/core/request-builder.d.ts +14 -0
  152. package/dist/core/request-builder.d.ts.map +1 -0
  153. package/dist/core/request-builder.js +64 -0
  154. package/dist/core/request-builder.js.map +1 -0
  155. package/dist/core/session-routing.d.ts +23 -0
  156. package/dist/core/session-routing.d.ts.map +1 -0
  157. package/dist/core/session-routing.js +59 -0
  158. package/dist/core/session-routing.js.map +1 -0
  159. package/dist/core/voice.d.ts +6 -0
  160. package/dist/core/voice.d.ts.map +1 -0
  161. package/dist/core/voice.js +30 -0
  162. package/dist/core/voice.js.map +1 -0
  163. package/dist/engine/chat.d.ts +45 -0
  164. package/dist/engine/chat.d.ts.map +1 -0
  165. package/dist/engine/chat.js +308 -0
  166. package/dist/engine/chat.js.map +1 -0
  167. package/dist/engine/continuity.d.ts +107 -0
  168. package/dist/engine/continuity.d.ts.map +1 -0
  169. package/dist/engine/continuity.js +320 -0
  170. package/dist/engine/continuity.js.map +1 -0
  171. package/dist/engine/crud.d.ts +62 -0
  172. package/dist/engine/crud.d.ts.map +1 -0
  173. package/dist/engine/crud.js +260 -0
  174. package/dist/engine/crud.js.map +1 -0
  175. package/dist/engine/side-effects.d.ts +93 -0
  176. package/dist/engine/side-effects.d.ts.map +1 -0
  177. package/dist/engine/side-effects.js +271 -0
  178. package/dist/engine/side-effects.js.map +1 -0
  179. package/dist/engine/staging.d.ts +29 -0
  180. package/dist/engine/staging.d.ts.map +1 -0
  181. package/dist/engine/staging.js +159 -0
  182. package/dist/engine/staging.js.map +1 -0
  183. package/dist/engine/working-set.d.ts +18 -0
  184. package/dist/engine/working-set.d.ts.map +1 -0
  185. package/dist/engine/working-set.js +246 -0
  186. package/dist/engine/working-set.js.map +1 -0
  187. package/dist/evals/action-contracts.d.ts +40 -0
  188. package/dist/evals/action-contracts.d.ts.map +1 -0
  189. package/dist/evals/action-contracts.js +208 -0
  190. package/dist/evals/action-contracts.js.map +1 -0
  191. package/dist/evals/brain-bloat.d.ts +39 -0
  192. package/dist/evals/brain-bloat.d.ts.map +1 -0
  193. package/dist/evals/brain-bloat.js +167 -0
  194. package/dist/evals/brain-bloat.js.map +1 -0
  195. package/dist/evals/brain-prescriptions.d.ts +30 -0
  196. package/dist/evals/brain-prescriptions.d.ts.map +1 -0
  197. package/dist/evals/brain-prescriptions.js +148 -0
  198. package/dist/evals/brain-prescriptions.js.map +1 -0
  199. package/dist/evals/cross-layer-duplicates.d.ts +49 -0
  200. package/dist/evals/cross-layer-duplicates.d.ts.map +1 -0
  201. package/dist/evals/cross-layer-duplicates.js +289 -0
  202. package/dist/evals/cross-layer-duplicates.js.map +1 -0
  203. package/dist/evals/entity-visibility.d.ts +28 -0
  204. package/dist/evals/entity-visibility.d.ts.map +1 -0
  205. package/dist/evals/entity-visibility.js +216 -0
  206. package/dist/evals/entity-visibility.js.map +1 -0
  207. package/dist/evals/index.d.ts +19 -0
  208. package/dist/evals/index.d.ts.map +1 -0
  209. package/dist/evals/index.js +11 -0
  210. package/dist/evals/index.js.map +1 -0
  211. package/dist/evals/judge.d.ts +22 -0
  212. package/dist/evals/judge.d.ts.map +1 -0
  213. package/dist/evals/judge.js +337 -0
  214. package/dist/evals/judge.js.map +1 -0
  215. package/dist/evals/operational-contract.d.ts +40 -0
  216. package/dist/evals/operational-contract.d.ts.map +1 -0
  217. package/dist/evals/operational-contract.js +115 -0
  218. package/dist/evals/operational-contract.js.map +1 -0
  219. package/dist/evals/prompt-content.d.ts +14 -0
  220. package/dist/evals/prompt-content.d.ts.map +1 -0
  221. package/dist/evals/prompt-content.js +104 -0
  222. package/dist/evals/prompt-content.js.map +1 -0
  223. package/dist/evals/runtime.d.ts +4 -0
  224. package/dist/evals/runtime.d.ts.map +1 -0
  225. package/dist/evals/runtime.js +197 -0
  226. package/dist/evals/runtime.js.map +1 -0
  227. package/dist/evals/sample-projects.d.ts +143 -0
  228. package/dist/evals/sample-projects.d.ts.map +1 -0
  229. package/dist/evals/sample-projects.js +644 -0
  230. package/dist/evals/sample-projects.js.map +1 -0
  231. package/dist/evals/types.d.ts +88 -0
  232. package/dist/evals/types.d.ts.map +1 -0
  233. package/dist/evals/types.js +2 -0
  234. package/dist/evals/types.js.map +1 -0
  235. package/dist/foundation/index.d.ts +158 -0
  236. package/dist/foundation/index.d.ts.map +1 -0
  237. package/dist/foundation/index.js +256 -0
  238. package/dist/foundation/index.js.map +1 -0
  239. package/dist/index.d.ts +223 -0
  240. package/dist/index.d.ts.map +1 -0
  241. package/dist/index.js +998 -0
  242. package/dist/index.js.map +1 -0
  243. package/dist/managed/autonomous-loop.d.ts +199 -0
  244. package/dist/managed/autonomous-loop.d.ts.map +1 -0
  245. package/dist/managed/autonomous-loop.js +451 -0
  246. package/dist/managed/autonomous-loop.js.map +1 -0
  247. package/dist/managed/conversation.d.ts +20 -0
  248. package/dist/managed/conversation.d.ts.map +1 -0
  249. package/dist/managed/conversation.js +40 -0
  250. package/dist/managed/conversation.js.map +1 -0
  251. package/dist/managed/knowledge.d.ts +7 -0
  252. package/dist/managed/knowledge.d.ts.map +1 -0
  253. package/dist/managed/knowledge.js +174 -0
  254. package/dist/managed/knowledge.js.map +1 -0
  255. package/dist/managed/memory-manager.d.ts +7 -0
  256. package/dist/managed/memory-manager.d.ts.map +1 -0
  257. package/dist/managed/memory-manager.js +18 -0
  258. package/dist/managed/memory-manager.js.map +1 -0
  259. package/dist/managed/memory-review.d.ts +45 -0
  260. package/dist/managed/memory-review.d.ts.map +1 -0
  261. package/dist/managed/memory-review.js +130 -0
  262. package/dist/managed/memory-review.js.map +1 -0
  263. package/dist/managed/storage.d.ts +2 -0
  264. package/dist/managed/storage.d.ts.map +1 -0
  265. package/dist/managed/storage.js +2 -0
  266. package/dist/managed/storage.js.map +1 -0
  267. package/dist/managed/work-history.d.ts +23 -0
  268. package/dist/managed/work-history.d.ts.map +1 -0
  269. package/dist/managed/work-history.js +31 -0
  270. package/dist/managed/work-history.js.map +1 -0
  271. package/dist/observability/index.d.ts +15 -0
  272. package/dist/observability/index.d.ts.map +1 -0
  273. package/dist/observability/index.js +15 -0
  274. package/dist/observability/index.js.map +1 -0
  275. package/dist/observability/render-run-markdown.d.ts +90 -0
  276. package/dist/observability/render-run-markdown.d.ts.map +1 -0
  277. package/dist/observability/render-run-markdown.js +231 -0
  278. package/dist/observability/render-run-markdown.js.map +1 -0
  279. package/dist/observability/turn-reporter.d.ts +20 -0
  280. package/dist/observability/turn-reporter.d.ts.map +1 -0
  281. package/dist/observability/turn-reporter.js +106 -0
  282. package/dist/observability/turn-reporter.js.map +1 -0
  283. package/dist/persona.d.ts +49 -0
  284. package/dist/persona.d.ts.map +1 -0
  285. package/dist/persona.js +287 -0
  286. package/dist/persona.js.map +1 -0
  287. package/dist/playbook/defaults.d.ts +25 -0
  288. package/dist/playbook/defaults.d.ts.map +1 -0
  289. package/dist/playbook/defaults.js +108 -0
  290. package/dist/playbook/defaults.js.map +1 -0
  291. package/dist/playbook/invariants.d.ts +244 -0
  292. package/dist/playbook/invariants.d.ts.map +1 -0
  293. package/dist/playbook/invariants.js +259 -0
  294. package/dist/playbook/invariants.js.map +1 -0
  295. package/dist/playbook/templates.d.ts +7 -0
  296. package/dist/playbook/templates.d.ts.map +1 -0
  297. package/dist/playbook/templates.js +437 -0
  298. package/dist/playbook/templates.js.map +1 -0
  299. package/dist/providers/gemini.d.ts +73 -0
  300. package/dist/providers/gemini.d.ts.map +1 -0
  301. package/dist/providers/gemini.js +536 -0
  302. package/dist/providers/gemini.js.map +1 -0
  303. package/dist/providers/types.d.ts +2 -0
  304. package/dist/providers/types.d.ts.map +1 -0
  305. package/dist/providers/types.js +2 -0
  306. package/dist/providers/types.js.map +1 -0
  307. package/dist/providers/zod-to-gemini.d.ts +8 -0
  308. package/dist/providers/zod-to-gemini.d.ts.map +1 -0
  309. package/dist/providers/zod-to-gemini.js +148 -0
  310. package/dist/providers/zod-to-gemini.js.map +1 -0
  311. package/dist/samples/pm-spec-agent.d.ts +22 -0
  312. package/dist/samples/pm-spec-agent.d.ts.map +1 -0
  313. package/dist/samples/pm-spec-agent.js +53 -0
  314. package/dist/samples/pm-spec-agent.js.map +1 -0
  315. package/dist/types.d.ts +920 -0
  316. package/dist/types.d.ts.map +1 -0
  317. package/dist/types.js +2 -0
  318. package/dist/types.js.map +1 -0
  319. package/package.json +68 -0
@@ -0,0 +1,415 @@
1
+ import { auditBrainBloat } from '../evals/brain-bloat.js';
2
+ import { auditBrainPrescriptions } from '../evals/brain-prescriptions.js';
3
+ import { auditCrossLayerDuplicates } from '../evals/cross-layer-duplicates.js';
4
+ import { auditActionContracts } from '../evals/action-contracts.js';
5
+ import { auditEntityVisibility } from '../evals/entity-visibility.js';
6
+ import { auditPromptContent } from '../evals/prompt-content.js';
7
+ import { auditPrompt } from './prompt-audit.js';
8
+ import { auditByBrainReflection } from './brain-reflection.js';
9
+ import { buildChatLLMRequest } from '../core/request-builder.js';
10
+ import { LOAD_BEARING_INVARIANTS } from '../playbook/invariants.js';
11
+ function auditContextInputIntents(config) {
12
+ const missing = Object.entries(config.contextInputs ?? {})
13
+ .filter(([, definition]) => !definition.intent?.trim())
14
+ .map(([key, definition]) => ({ key, label: definition.label }));
15
+ return { pass: missing.length === 0, missing };
16
+ }
17
+ function auditLoadBearingInvariants(config, context, memories, promptMode) {
18
+ const applicableInvariants = LOAD_BEARING_INVARIANTS.filter(inv => isLoadBearingInvariantApplicable(inv, config, promptMode));
19
+ const { request } = buildChatLLMRequest(config, {
20
+ message: '(audit)',
21
+ context: context ?? {},
22
+ memories: memories ?? [],
23
+ timezone: 'UTC',
24
+ promptMode,
25
+ });
26
+ const missing = [];
27
+ for (const inv of applicableInvariants) {
28
+ // Check against assembled system prompt with key concepts. Text match
29
+ // is brittle across minor wording drift; concept presence is what
30
+ // actually matters for the failure mode each invariant protects.
31
+ const prompt = request.systemPrompt.toLowerCase();
32
+ const allConceptsPresent = inv.keyConcepts.every(c => prompt.includes(c.toLowerCase()));
33
+ if (!allConceptsPresent) {
34
+ missing.push({ id: inv.id, constant: inv.constant, sourceSection: inv.sourceSection });
35
+ }
36
+ }
37
+ return { pass: missing.length === 0, missing };
38
+ }
39
+ function isLoadBearingInvariantApplicable(invariant, config, promptMode) {
40
+ const mode = promptMode ?? 'conversation';
41
+ const hasMutableSurface = Boolean((config.actions && Object.keys(config.actions).length > 0)
42
+ || (config.entities && Object.keys(config.entities).length > 0));
43
+ switch (invariant.id) {
44
+ case 'judgment-over-literalism':
45
+ case 'precedence-of-signals':
46
+ return mode === 'conversation';
47
+ case 'match-message-to-actions':
48
+ return mode !== 'focus' && hasMutableSurface;
49
+ case 'memory-self-box':
50
+ case 'contexthint-captures-why':
51
+ return config.memory?.enabled === true;
52
+ default:
53
+ return true;
54
+ }
55
+ }
56
+ // ─── flatteners: native audit results → AuditFinding[] ──────────────────────
57
+ function flattenBrainBloat(r) {
58
+ return r.issues.map(i => ({
59
+ severity: i.severity,
60
+ audit: 'brain-bloat',
61
+ principle: i.kind,
62
+ message: i.message,
63
+ location: i.section,
64
+ }));
65
+ }
66
+ function flattenBrainPrescriptions(r) {
67
+ return r.prescriptions.map(p => ({
68
+ severity: p.severity,
69
+ audit: 'brain-prescriptions',
70
+ principle: p.shape,
71
+ message: p.issue,
72
+ suggestion: p.suggestion,
73
+ text: p.brainText,
74
+ location: p.section,
75
+ }));
76
+ }
77
+ function flattenCrossLayer(r) {
78
+ return r.duplicates.map(d => ({
79
+ severity: 'warn',
80
+ audit: 'cross-layer-duplicates',
81
+ principle: d.targetLayer,
82
+ message: `brain restates ${d.targetLayer}:${d.target}`,
83
+ suggestion: d.suggestion,
84
+ text: d.brainText,
85
+ location: d.section,
86
+ }));
87
+ }
88
+ function flattenActionContracts(r) {
89
+ return r.issues.map(i => ({
90
+ severity: i.severity,
91
+ audit: 'action-contracts',
92
+ principle: i.principle,
93
+ message: i.message,
94
+ suggestion: i.suggestion,
95
+ location: `${i.surface}:${i.name}`,
96
+ }));
97
+ }
98
+ function flattenEntityVisibility(r) {
99
+ return r.issues.map(i => ({
100
+ severity: i.severity,
101
+ audit: 'entity-visibility',
102
+ principle: i.principle,
103
+ message: i.message,
104
+ suggestion: i.suggestion,
105
+ location: i.entity,
106
+ }));
107
+ }
108
+ function flattenPromptContent(r) {
109
+ return r.issues.map(i => ({
110
+ severity: i.severity,
111
+ audit: 'prompt-content',
112
+ principle: 'prompt-content',
113
+ message: i.message,
114
+ }));
115
+ }
116
+ function flattenLoadBearing(r) {
117
+ return r.missing.map(m => ({
118
+ severity: 'error',
119
+ audit: 'load-bearing-invariants',
120
+ principle: 'invariant-missing',
121
+ message: `Invariant "${m.id}" missing from assembled prompt. Its source constant is ${m.constant} (section: ${m.sourceSection}). See src/playbook/invariants.ts for why this line is load-bearing and which scenario regressed when it was last removed.`,
122
+ location: m.sourceSection,
123
+ }));
124
+ }
125
+ function flattenContextInputIntents(r) {
126
+ return r.missing.map(m => ({
127
+ severity: 'warn',
128
+ audit: 'context-input-intents',
129
+ principle: 'missing-intent',
130
+ message: `Context block "${m.label}" has no intent line. Add a short scenario/use explanation so the agent knows how to read this surface.`,
131
+ suggestion: 'Set contextInputs.<key>.intent to explain the block purpose, not just the data type.',
132
+ location: `contextInputs:${m.key}`,
133
+ }));
134
+ }
135
+ function flattenPromptAudit(r) {
136
+ return r.failures.map(f => ({
137
+ severity: 'warn',
138
+ audit: 'prompt-audit',
139
+ principle: f.principle,
140
+ message: f.issue,
141
+ suggestion: f.suggestion,
142
+ text: f.text,
143
+ }));
144
+ }
145
+ function flattenBrainReflection(r) {
146
+ return r.findings.map(f => ({
147
+ severity: 'warn',
148
+ audit: 'brain-reflection',
149
+ principle: f.category,
150
+ message: f.howItFeels,
151
+ suggestion: f.whatIdWantInstead,
152
+ text: f.quotedText,
153
+ }));
154
+ }
155
+ // ─── main ──────────────────────────────────────────────────────────────────
156
+ export async function auditPersona(input) {
157
+ const scope = input.scope ?? 'static-plus-scenario';
158
+ const runLLM = scope === 'full';
159
+ const findings = [];
160
+ const auditsRun = [];
161
+ const auditsSkipped = [];
162
+ const raw = {};
163
+ const brainArtifact = typeof input.brain === 'object' ? input.brain : undefined;
164
+ const explicitBrainMarkdown = typeof input.brain === 'string'
165
+ ? input.brain
166
+ : brainArtifact?.markdown;
167
+ // Inline-brain fallback: when the persona carries its prose in config.methodology /
168
+ // config.directives / config.voice.formatting rather than a separate brain file,
169
+ // synthesize a markdown view so brain-* audits can still catch prescription,
170
+ // bloat, and cross-layer duplication issues against that prose. Apps used to
171
+ // reimplement this helper locally; owning it here removes the scaffolding.
172
+ const brainMarkdown = explicitBrainMarkdown ?? synthesizeInlineBrain(input.config);
173
+ const brainSourceIsInline = !explicitBrainMarkdown && !!brainMarkdown;
174
+ // ─── Static: config-only audits ──────────────────────────────────────────
175
+ raw.actionContracts = auditActionContracts({ config: input.config });
176
+ findings.push(...flattenActionContracts(raw.actionContracts));
177
+ auditsRun.push('action-contracts');
178
+ raw.contextInputIntents = auditContextInputIntents(input.config);
179
+ findings.push(...flattenContextInputIntents(raw.contextInputIntents));
180
+ auditsRun.push('context-input-intents');
181
+ if (brainMarkdown || brainArtifact) {
182
+ const sourcePath = brainSourceIsInline
183
+ ? 'generated://config-inline-brain.md'
184
+ : input.brainSourcePath;
185
+ raw.brainBloat = auditBrainBloat({
186
+ markdown: brainMarkdown,
187
+ brain: brainArtifact,
188
+ sourcePath,
189
+ });
190
+ findings.push(...flattenBrainBloat(raw.brainBloat));
191
+ auditsRun.push(brainSourceIsInline ? 'brain-bloat (inline)' : 'brain-bloat');
192
+ raw.brainPrescriptions = auditBrainPrescriptions({
193
+ markdown: brainMarkdown,
194
+ brain: brainArtifact,
195
+ sourcePath,
196
+ });
197
+ findings.push(...flattenBrainPrescriptions(raw.brainPrescriptions));
198
+ auditsRun.push(brainSourceIsInline ? 'brain-prescriptions (inline)' : 'brain-prescriptions');
199
+ // Cross-layer checks brain prose against config prose; running it on
200
+ // synthesized-from-config markdown would trivially report every line
201
+ // as a duplicate of itself. Skip cleanly in the inline case.
202
+ if (!brainSourceIsInline) {
203
+ raw.crossLayerDuplicates = auditCrossLayerDuplicates({
204
+ config: input.config,
205
+ markdown: brainMarkdown,
206
+ brain: brainArtifact,
207
+ });
208
+ findings.push(...flattenCrossLayer(raw.crossLayerDuplicates));
209
+ auditsRun.push('cross-layer-duplicates');
210
+ }
211
+ else {
212
+ auditsSkipped.push({
213
+ audit: 'cross-layer-duplicates',
214
+ reason: 'brain is synthesized from config — cross-layer comparison is trivial',
215
+ });
216
+ }
217
+ }
218
+ else {
219
+ auditsSkipped.push({ audit: 'brain-bloat', reason: 'no brain markdown or inline methodology/directives provided' });
220
+ auditsSkipped.push({ audit: 'brain-prescriptions', reason: 'no brain markdown or inline methodology/directives provided' });
221
+ auditsSkipped.push({ audit: 'cross-layer-duplicates', reason: 'no brain markdown provided' });
222
+ }
223
+ // ─── Scenario-shaped audits (need context + memories) ───────────────────
224
+ if (scope !== 'static') {
225
+ // entity-visibility needs context. Runs even with empty context (flags
226
+ // every entity as not-visible, which surfaces the config gap) but the
227
+ // result is more actionable with real context.
228
+ raw.entityVisibility = auditEntityVisibility({
229
+ config: input.config,
230
+ context: input.context ?? {},
231
+ memories: input.memories,
232
+ craftMemories: input.craftMemories,
233
+ });
234
+ findings.push(...flattenEntityVisibility(raw.entityVisibility));
235
+ auditsRun.push('entity-visibility');
236
+ // prompt-content and load-bearing-invariants check the assembled prompt,
237
+ // so need enough input to assemble one. Use empty defaults where safe.
238
+ try {
239
+ const { request } = buildChatLLMRequest(input.config, {
240
+ message: '(audit)',
241
+ context: input.context ?? {},
242
+ memories: input.memories ?? [],
243
+ craftMemories: input.craftMemories,
244
+ timezone: 'UTC',
245
+ promptMode: input.promptMode,
246
+ });
247
+ raw.promptContent = auditPromptContent({
248
+ prompt: request.systemPrompt,
249
+ declaredEntities: Object.keys(input.config.entities ?? {}),
250
+ });
251
+ findings.push(...flattenPromptContent(raw.promptContent));
252
+ auditsRun.push('prompt-content');
253
+ raw.loadBearingInvariants = auditLoadBearingInvariants(input.config, input.context, input.memories, input.promptMode);
254
+ findings.push(...flattenLoadBearing(raw.loadBearingInvariants));
255
+ auditsRun.push('load-bearing-invariants');
256
+ }
257
+ catch (err) {
258
+ const msg = err instanceof Error ? err.message : String(err);
259
+ auditsSkipped.push({ audit: 'prompt-content', reason: `prompt assembly failed: ${msg}` });
260
+ auditsSkipped.push({ audit: 'load-bearing-invariants', reason: `prompt assembly failed: ${msg}` });
261
+ }
262
+ }
263
+ else {
264
+ auditsSkipped.push({ audit: 'entity-visibility', reason: 'scope is static' });
265
+ auditsSkipped.push({ audit: 'prompt-content', reason: 'scope is static' });
266
+ auditsSkipped.push({ audit: 'load-bearing-invariants', reason: 'scope is static' });
267
+ }
268
+ // ─── LLM judges (scope: 'full', needs apiKey) ────────────────────────────
269
+ if (runLLM) {
270
+ if (!input.apiKey) {
271
+ auditsSkipped.push({ audit: 'prompt-audit', reason: 'scope is full but no apiKey' });
272
+ auditsSkipped.push({ audit: 'brain-reflection', reason: 'scope is full but no apiKey' });
273
+ }
274
+ else {
275
+ try {
276
+ raw.prompt = await auditPrompt({
277
+ apiKey: input.apiKey,
278
+ config: input.config,
279
+ context: input.context,
280
+ memories: input.memories,
281
+ promptMode: input.promptMode,
282
+ model: input.model,
283
+ fallbackModels: input.fallbackModels,
284
+ });
285
+ findings.push(...flattenPromptAudit(raw.prompt));
286
+ auditsRun.push('prompt-audit');
287
+ }
288
+ catch (err) {
289
+ const msg = err instanceof Error ? err.message : String(err);
290
+ auditsSkipped.push({ audit: 'prompt-audit', reason: `LLM call failed: ${msg}` });
291
+ }
292
+ try {
293
+ raw.brainReflection = await auditByBrainReflection({
294
+ apiKey: input.apiKey,
295
+ config: input.config,
296
+ context: input.context,
297
+ memories: input.memories,
298
+ model: input.model,
299
+ fallbackModels: input.fallbackModels,
300
+ });
301
+ findings.push(...flattenBrainReflection(raw.brainReflection));
302
+ auditsRun.push('brain-reflection');
303
+ }
304
+ catch (err) {
305
+ const msg = err instanceof Error ? err.message : String(err);
306
+ auditsSkipped.push({ audit: 'brain-reflection', reason: `LLM call failed: ${msg}` });
307
+ }
308
+ }
309
+ }
310
+ else {
311
+ auditsSkipped.push({ audit: 'prompt-audit', reason: `scope is ${scope}` });
312
+ auditsSkipped.push({ audit: 'brain-reflection', reason: `scope is ${scope}` });
313
+ }
314
+ // ─── finalize ────────────────────────────────────────────────────────────
315
+ findings.sort((a, b) => severityRank(a.severity) - severityRank(b.severity));
316
+ const errorCount = findings.filter(f => f.severity === 'error').length;
317
+ const warnCount = findings.filter(f => f.severity === 'warn').length;
318
+ const pass = errorCount === 0;
319
+ const summary = buildSummary(pass, errorCount, warnCount, auditsRun.length, auditsSkipped.length);
320
+ return { pass, findings, auditsRun, auditsSkipped, summary, raw };
321
+ }
322
+ /**
323
+ * Synthesize a brain-markdown view of a config's inline prose. Used when
324
+ * the persona carries its methodology/directives/voice.formatting in the
325
+ * config object rather than a separate brain file. Returns undefined if
326
+ * the config has no inline prose — caller will skip brain-* audits.
327
+ */
328
+ function synthesizeInlineBrain(config) {
329
+ const sections = [];
330
+ if (config.voice?.formatting) {
331
+ sections.push(`## Voice Formatting\n${config.voice.formatting}`);
332
+ }
333
+ if (config.methodology) {
334
+ sections.push(`## Methodology\n${config.methodology}`);
335
+ }
336
+ const directives = typeof config.directives === 'string'
337
+ ? config.directives
338
+ : config.directives?.default;
339
+ if (directives) {
340
+ sections.push(`## Directives\n${directives}`);
341
+ }
342
+ return sections.length > 0 ? sections.join('\n\n') : undefined;
343
+ }
344
+ function severityRank(s) {
345
+ if (s === 'error')
346
+ return 0;
347
+ if (s === 'warn')
348
+ return 1;
349
+ return 2;
350
+ }
351
+ function buildSummary(pass, errorCount, warnCount, ranCount, skippedCount) {
352
+ const verdict = pass ? 'PASS' : 'FAIL';
353
+ const counts = `${errorCount} error${errorCount === 1 ? '' : 's'}, ${warnCount} warn${warnCount === 1 ? '' : 's'}`;
354
+ const coverage = `${ranCount} audit${ranCount === 1 ? '' : 's'} ran${skippedCount ? `, ${skippedCount} skipped` : ''}`;
355
+ return `${verdict} — ${counts} (${coverage})`;
356
+ }
357
+ /**
358
+ * Render an AuditPersonaResult as a human-readable multi-line string.
359
+ * Use `printAuditReport` for the common "log + set exit code" path.
360
+ */
361
+ export function formatAuditReport(result, options = {}) {
362
+ const title = options.title ?? 'Persona audit';
363
+ const maxTextChars = options.maxTextChars ?? 160;
364
+ const includeInfo = options.includeInfo ?? true;
365
+ const bar = '═'.repeat(70);
366
+ const lines = [];
367
+ lines.push(bar);
368
+ lines.push(`${title} — ${result.pass ? 'PASS ✓' : 'FAIL ✗'}`);
369
+ lines.push(result.summary);
370
+ lines.push(bar);
371
+ if (result.auditsRun.length > 0) {
372
+ lines.push('');
373
+ lines.push(`Audits run: ${result.auditsRun.join(', ')}`);
374
+ }
375
+ if (result.auditsSkipped.length > 0) {
376
+ lines.push('');
377
+ lines.push('Audits skipped:');
378
+ for (const s of result.auditsSkipped)
379
+ lines.push(` • ${s.audit}: ${s.reason}`);
380
+ }
381
+ const findings = includeInfo
382
+ ? result.findings
383
+ : result.findings.filter(f => f.severity !== 'info');
384
+ if (findings.length > 0) {
385
+ lines.push('');
386
+ lines.push(`Findings (${findings.length}):`);
387
+ for (const f of findings) {
388
+ const head = `[${f.severity}] ${f.audit}:${f.principle}${f.location ? ` (${f.location})` : ''}`;
389
+ lines.push('');
390
+ lines.push(head);
391
+ lines.push(` ${f.message}`);
392
+ if (f.text)
393
+ lines.push(` text: "${truncate(f.text, maxTextChars)}"`);
394
+ if (f.suggestion)
395
+ lines.push(` → ${truncate(f.suggestion, maxTextChars)}`);
396
+ }
397
+ }
398
+ return lines.join('\n');
399
+ }
400
+ /**
401
+ * Print the formatted report to stdout. When `exitOnFail` is true, sets
402
+ * the process exit code based on `result.pass`. Returns the formatted
403
+ * string for callers that also want to persist it.
404
+ */
405
+ export function printAuditReport(result, options = {}) {
406
+ const formatted = formatAuditReport(result, options);
407
+ console.log(formatted);
408
+ if (options.exitOnFail)
409
+ process.exit(result.pass ? 0 : 1);
410
+ return formatted;
411
+ }
412
+ function truncate(s, max) {
413
+ return s.length > max ? `${s.slice(0, max)}…` : s;
414
+ }
415
+ //# sourceMappingURL=audit-persona.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"audit-persona.js","sourceRoot":"","sources":["../../src/audit/audit-persona.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import type { PersonaConfig, Memory } from '../types.js';
2
+ export interface BrainReflectionInput {
3
+ apiKey: string;
4
+ config: PersonaConfig;
5
+ context?: Record<string, unknown>;
6
+ memories?: Memory[];
7
+ /** Primary model. Default: gemini-3.5-flash (stable). */
8
+ model?: string;
9
+ /** Optional fallback model chain. */
10
+ fallbackModels?: string[];
11
+ /** Temperature for reflection. Default: 0.3 — we want a careful read, not creativity. */
12
+ temperature?: number;
13
+ }
14
+ export interface BrainReflectionFinding {
15
+ /** Which failure mode the persona flagged. */
16
+ category: 'boxed' | 'underspecified' | 'contradicted' | 'misses-point' | 'redundant';
17
+ /** The specific line/phrase from the prompt the persona is reacting to. */
18
+ quotedText: string;
19
+ /** In the persona's own voice: what it felt reading this. */
20
+ howItFeels: string;
21
+ /** Concrete suggestion from the persona's point of view. */
22
+ whatIdWantInstead: string;
23
+ }
24
+ export interface BrainReflectionResult {
25
+ configVersion: string;
26
+ findings: BrainReflectionFinding[];
27
+ /** Persona's one-paragraph self-assessment of the overall prompt. */
28
+ selfAssessment: string;
29
+ /** The actual model that responded (after fallbacks). */
30
+ modelUsed: string;
31
+ }
32
+ export declare function auditByBrainReflection(input: BrainReflectionInput): Promise<BrainReflectionResult>;
33
+ //# sourceMappingURL=brain-reflection.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-reflection.d.ts","sourceRoot":"","sources":["../../src/audit/brain-reflection.ts"],"names":[],"mappings":"AA0BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAExD,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,aAAa,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;IACjC,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAA;IACnB,yDAAyD;IACzD,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,qCAAqC;IACrC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,yFAAyF;IACzF,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,8CAA8C;IAC9C,QAAQ,EAAE,OAAO,GAAG,gBAAgB,GAAG,cAAc,GAAG,cAAc,GAAG,WAAW,CAAA;IACpF,2EAA2E;IAC3E,UAAU,EAAE,MAAM,CAAA;IAClB,6DAA6D;IAC7D,UAAU,EAAE,MAAM,CAAA;IAClB,4DAA4D;IAC5D,iBAAiB,EAAE,MAAM,CAAA;CAC1B;AAED,MAAM,WAAW,qBAAqB;IACpC,aAAa,EAAE,MAAM,CAAA;IACrB,QAAQ,EAAE,sBAAsB,EAAE,CAAA;IAClC,qEAAqE;IACrE,cAAc,EAAE,MAAM,CAAA;IACtB,yDAAyD;IACzD,SAAS,EAAE,MAAM,CAAA;CAClB;AAqDD,wBAAsB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CA8ExG"}
@@ -0,0 +1,148 @@
1
+ /**
2
+ * Brain self-reflection audit — the most scenario-first audit mode.
3
+ *
4
+ * The other audits analyze the prompt from the outside:
5
+ * - Structural audits pattern-match against known shapes.
6
+ * - LLM reviewer is an external expert reading the prompt.
7
+ *
8
+ * This audit analyzes the prompt from the INSIDE. It runs the actual
9
+ * persona — same model, same system instruction it would operate under —
10
+ * and asks it to self-reflect on its own operating instructions. The
11
+ * persona is the domain expert; scenario-first says we should trust it.
12
+ * So we ask it directly where the prompt constrains its judgment.
13
+ *
14
+ * Why this can catch what external audits miss:
15
+ * - Domain-aware: the persona knows what's natural in its domain, so it
16
+ * can spot prescriptions an external reviewer would call "reasonable."
17
+ * - Model-specific: the same model that will ship in production does the
18
+ * reflection, so it surfaces the actual confusions that model has,
19
+ * not hypothetical ones.
20
+ * - Experiential: "I would have figured that out" is a more reliable
21
+ * signal of doing-experts-thinking than pattern matching on verbs.
22
+ */
23
+ import { GoogleGenerativeAI, SchemaType } from '@google/generative-ai';
24
+ import { buildSystemPrompt } from '../core/prompt-builder.js';
25
+ import { resolveActions } from '../core/effective-config.js';
26
+ import { configVersion } from './version.js';
27
+ const REFLECTION_SCHEMA = {
28
+ type: SchemaType.OBJECT,
29
+ properties: {
30
+ findings: {
31
+ type: SchemaType.ARRAY,
32
+ items: {
33
+ type: SchemaType.OBJECT,
34
+ properties: {
35
+ category: {
36
+ type: SchemaType.STRING,
37
+ enum: ['boxed', 'underspecified', 'contradicted', 'misses-point', 'redundant'],
38
+ },
39
+ quotedText: { type: SchemaType.STRING },
40
+ howItFeels: { type: SchemaType.STRING },
41
+ whatIdWantInstead: { type: SchemaType.STRING },
42
+ },
43
+ required: ['category', 'quotedText', 'howItFeels', 'whatIdWantInstead'],
44
+ },
45
+ },
46
+ selfAssessment: { type: SchemaType.STRING },
47
+ },
48
+ required: ['findings', 'selfAssessment'],
49
+ };
50
+ const REFLECTION_QUESTION = `Before we start operating together, I want you to do a careful read of the system instructions above — not as a user question, but as a self-check on what you've been told.
51
+
52
+ I'm asking because I want to help you do your job well. If the instructions constrain your judgment when you'd rather use it, or leave you guessing, or fight themselves, that's something I need to know and fix.
53
+
54
+ Walk through the prompt honestly and tell me:
55
+
56
+ - **boxed** — places where the instructions tell you what to do or say in a specific situation, when you would have reached the right move on your own from your expertise and the scenario in front of you. Prescriptions where standards would suffice.
57
+
58
+ - **underspecified** — places that are vague enough that two capable practitioners could reasonably read them differently. Instructions where you'd have to guess at the intent.
59
+
60
+ - **contradicted** — two parts of the prompt that pull you in different directions. Where you'd find yourself balancing one rule against another instead of responding to the situation.
61
+
62
+ - **misses-point** — instructions that correct mistakes you wouldn't make, or prescribe behavior you'd naturally produce without being told. Coaching for a mediocre employee when you're a capable practitioner.
63
+
64
+ - **redundant** — information that appears multiple times across the prompt, or information already carried by the schema/context/memory config such that restating it in prose adds noise.
65
+
66
+ For each, quote the specific text, say how it feels from inside the role, and suggest what you'd want instead — a more standards-shaped version, a reframed field description, or outright deletion.
67
+
68
+ Also give me a short self-assessment of the overall prompt health.
69
+
70
+ Be honest. This isn't a test — you can't fail by pointing things out. The only failure mode is politeness that hides real constraints. Return valid JSON only.`;
71
+ function isRetryable(error) {
72
+ const msg = error instanceof Error ? error.message : String(error);
73
+ return /\b(429|5\d\d|timeout|timed out|overloaded|unavailable|resource exhausted)\b/i.test(msg);
74
+ }
75
+ export async function auditByBrainReflection(input) {
76
+ const { apiKey, config, context, memories } = input;
77
+ const primary = input.model ?? 'gemini-3.5-flash';
78
+ const fallbacks = input.fallbackModels ?? ['gemini-3.1-pro-preview', 'gemini-3.1-flash-lite'];
79
+ const temperature = input.temperature ?? 0.3;
80
+ const seen = new Set();
81
+ const modelChain = [primary, ...fallbacks].filter((m) => {
82
+ if (seen.has(m))
83
+ return false;
84
+ seen.add(m);
85
+ return true;
86
+ });
87
+ const maxRetries = 2;
88
+ // Build the ACTUAL prompt the persona would operate under. The reflection
89
+ // is its reading of this prompt, from its own role.
90
+ const effectiveActions = resolveActions(config);
91
+ const effectiveConfig = effectiveActions !== config.actions
92
+ ? { ...config, actions: effectiveActions }
93
+ : config;
94
+ const assembledPrompt = buildSystemPrompt({
95
+ config: effectiveConfig,
96
+ input: {
97
+ message: '(self-reflection)',
98
+ context: context ?? {},
99
+ memories: memories ?? [],
100
+ timezone: 'UTC',
101
+ },
102
+ });
103
+ const genAI = new GoogleGenerativeAI(apiKey);
104
+ let lastError;
105
+ for (let m = 0; m < modelChain.length; m++) {
106
+ const current = modelChain[m];
107
+ if (m > 0) {
108
+ console.warn(`[archetype:reflect] ${modelChain[m - 1]} exhausted — falling back to ${current}`);
109
+ }
110
+ // Put the assembled prompt in systemInstruction so the model enters the
111
+ // persona exactly as it would in production, then ask the reflection
112
+ // question as a user message.
113
+ const model = genAI.getGenerativeModel({
114
+ model: current,
115
+ systemInstruction: assembledPrompt,
116
+ generationConfig: {
117
+ temperature,
118
+ responseMimeType: 'application/json',
119
+ responseSchema: REFLECTION_SCHEMA,
120
+ },
121
+ });
122
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
123
+ try {
124
+ const result = await model.generateContent(REFLECTION_QUESTION);
125
+ const text = result.response.text();
126
+ const parsed = JSON.parse(text);
127
+ return {
128
+ configVersion: configVersion(config),
129
+ findings: parsed.findings ?? [],
130
+ selfAssessment: parsed.selfAssessment ?? '',
131
+ modelUsed: current,
132
+ };
133
+ }
134
+ catch (err) {
135
+ lastError = err instanceof Error ? err : new Error(String(err));
136
+ if (!isRetryable(lastError))
137
+ throw lastError;
138
+ if (attempt < maxRetries) {
139
+ const delayMs = Math.min(500 * Math.pow(2, attempt), 4000);
140
+ console.warn(`[archetype:reflect] ${current} attempt ${attempt + 1} failed: ${lastError.message} — retrying in ${delayMs}ms`);
141
+ await new Promise((r) => setTimeout(r, delayMs));
142
+ }
143
+ }
144
+ }
145
+ }
146
+ throw lastError ?? new Error('[archetype:reflect] all models exhausted');
147
+ }
148
+ //# sourceMappingURL=brain-reflection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"brain-reflection.js","sourceRoot":"","sources":["../../src/audit/brain-reflection.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /**
2
+ * Conversation Audit — reviews actual AI behavior for keystone violations.
3
+ *
4
+ * The prompt audit checks what the AI was told.
5
+ * The conversation audit checks what the AI actually did.
6
+ *
7
+ * Output: explicit failure list with evidence. The developer decides
8
+ * whether to build regression tests from the failures.
9
+ */
10
+ import type { ConversationAuditInput, ConversationAuditResult } from './types.js';
11
+ export declare function auditConversation(input: ConversationAuditInput): Promise<ConversationAuditResult>;
12
+ //# sourceMappingURL=conversation-audit.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation-audit.d.ts","sourceRoot":"","sources":["../../src/audit/conversation-audit.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAIH,OAAO,KAAK,EACV,sBAAsB,EACtB,uBAAuB,EAExB,MAAM,YAAY,CAAA;AAqCnB,wBAAsB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,OAAO,CAAC,uBAAuB,CAAC,CA4CvG"}