@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,174 @@
1
+ import { readdir, readFile, stat } from 'node:fs/promises';
2
+ import path from 'node:path';
3
+ export function createMarkdownKnowledgeAdapter(options) {
4
+ return {
5
+ async searchDocuments(input) {
6
+ const tokens = tokenize(input.query);
7
+ if (tokens.length === 0)
8
+ return [];
9
+ const files = await listMarkdownFiles(options.rootDir);
10
+ const docs = [];
11
+ for (const file of files) {
12
+ const doc = await readMarkdownKnowledgeDocument(file, options.rootDir);
13
+ if (!options.includeDrafts && doc.status === 'draft')
14
+ continue;
15
+ const score = scoreDocument(doc, tokens);
16
+ if (score <= 0)
17
+ continue;
18
+ docs.push({ ...doc, score });
19
+ }
20
+ return docs
21
+ .sort((a, b) => b.score - a.score || compareUpdatedAtDesc(a.updatedAt, b.updatedAt))
22
+ .slice(0, input.maxDocuments ?? 12)
23
+ .map(({ score: _score, ...doc }) => doc);
24
+ },
25
+ async getDocument(id) {
26
+ const files = await listMarkdownFiles(options.rootDir);
27
+ for (const file of files) {
28
+ const doc = await readMarkdownKnowledgeDocument(file, options.rootDir);
29
+ if (!options.includeDrafts && doc.status === 'draft')
30
+ continue;
31
+ if (doc.id === id)
32
+ return doc;
33
+ }
34
+ return null;
35
+ },
36
+ };
37
+ }
38
+ async function listMarkdownFiles(rootDir) {
39
+ const entries = await readdir(rootDir, { withFileTypes: true });
40
+ const files = [];
41
+ for (const entry of entries) {
42
+ const fullPath = path.join(rootDir, entry.name);
43
+ if (entry.isDirectory()) {
44
+ files.push(...await listMarkdownFiles(fullPath));
45
+ continue;
46
+ }
47
+ if (entry.isFile() && entry.name.toLowerCase().endsWith('.md')) {
48
+ files.push(fullPath);
49
+ }
50
+ }
51
+ return files;
52
+ }
53
+ async function readMarkdownKnowledgeDocument(filePath, rootDir) {
54
+ const raw = await readFile(filePath, 'utf8');
55
+ const fileStat = await stat(filePath);
56
+ const { frontmatter, body } = extractFrontmatter(raw);
57
+ const title = frontmatter.title ?? extractFirstHeading(body) ?? basenameTitle(filePath);
58
+ const id = frontmatter.id ?? slugify(path.relative(rootDir, filePath).replace(/\.md$/i, ''));
59
+ return {
60
+ id,
61
+ title,
62
+ content: body.trim(),
63
+ summary: frontmatter.summary,
64
+ tags: frontmatter.tags,
65
+ status: frontmatter.status,
66
+ updatedAt: fileStat.mtime.toISOString(),
67
+ path: filePath,
68
+ };
69
+ }
70
+ function extractFrontmatter(raw) {
71
+ if (!raw.startsWith('---\n'))
72
+ return { frontmatter: {}, body: raw };
73
+ const end = raw.indexOf('\n---\n', 4);
74
+ if (end === -1)
75
+ return { frontmatter: {}, body: raw };
76
+ const frontmatterBlock = raw.slice(4, end);
77
+ const body = raw.slice(end + 5);
78
+ const parsed = {};
79
+ for (const line of frontmatterBlock.split('\n')) {
80
+ const [rawKey, ...rawValue] = line.split(':');
81
+ if (!rawKey || rawValue.length === 0)
82
+ continue;
83
+ const key = rawKey.trim();
84
+ const value = rawValue.join(':').trim();
85
+ if (!value)
86
+ continue;
87
+ if (key === 'id')
88
+ parsed.id = stripQuotes(value);
89
+ if (key === 'title')
90
+ parsed.title = stripQuotes(value);
91
+ if (key === 'summary')
92
+ parsed.summary = stripQuotes(value);
93
+ if (key === 'status')
94
+ parsed.status = stripQuotes(value);
95
+ if (key === 'tags')
96
+ parsed.tags = parseTags(value);
97
+ }
98
+ return { frontmatter: parsed, body };
99
+ }
100
+ function parseTags(value) {
101
+ const trimmed = value.trim();
102
+ if (trimmed.startsWith('[') && trimmed.endsWith(']')) {
103
+ return trimmed
104
+ .slice(1, -1)
105
+ .split(',')
106
+ .map(part => stripQuotes(part.trim()))
107
+ .filter(Boolean);
108
+ }
109
+ return trimmed
110
+ .split(',')
111
+ .map(part => stripQuotes(part.trim()))
112
+ .filter(Boolean);
113
+ }
114
+ function extractFirstHeading(body) {
115
+ for (const line of body.split('\n')) {
116
+ const trimmed = line.trim();
117
+ if (trimmed.startsWith('# '))
118
+ return trimmed.slice(2).trim();
119
+ }
120
+ return null;
121
+ }
122
+ function basenameTitle(filePath) {
123
+ return path.basename(filePath, '.md')
124
+ .replace(/[-_]+/g, ' ')
125
+ .replace(/\b\w/g, ch => ch.toUpperCase());
126
+ }
127
+ function tokenize(text) {
128
+ return [...new Set(text
129
+ .toLowerCase()
130
+ .split(/[^a-z0-9]+/g)
131
+ .map(part => part.trim())
132
+ .filter(part => part.length >= 3))];
133
+ }
134
+ function scoreDocument(document, tokens) {
135
+ const title = document.title.toLowerCase();
136
+ const summary = document.summary?.toLowerCase() ?? '';
137
+ const body = document.content.toLowerCase();
138
+ const tags = (document.tags ?? []).join(' ').toLowerCase();
139
+ let score = 0;
140
+ for (const token of tokens) {
141
+ if (title.includes(token))
142
+ score += 8;
143
+ if (tags.includes(token))
144
+ score += 6;
145
+ if (summary.includes(token))
146
+ score += 5;
147
+ if (body.includes(token))
148
+ score += 2;
149
+ }
150
+ if (document.status === 'approved')
151
+ score += 2;
152
+ if (document.status === 'provisional')
153
+ score += 1;
154
+ return score;
155
+ }
156
+ function compareUpdatedAtDesc(a, b) {
157
+ if (!a && !b)
158
+ return 0;
159
+ if (!a)
160
+ return 1;
161
+ if (!b)
162
+ return -1;
163
+ return b.localeCompare(a);
164
+ }
165
+ function stripQuotes(value) {
166
+ return value.replace(/^['"]|['"]$/g, '');
167
+ }
168
+ function slugify(value) {
169
+ return value
170
+ .toLowerCase()
171
+ .replace(/[^a-z0-9]+/g, '-')
172
+ .replace(/^-+|-+$/g, '');
173
+ }
174
+ //# sourceMappingURL=knowledge.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.js","sourceRoot":"","sources":["../../src/managed/knowledge.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { StorageAdapter, Memory } from '../types.js';
2
+ /**
3
+ * Load memories from storage adapter, formatted for prompt injection.
4
+ */
5
+ export declare function loadMemories(adapter: StorageAdapter, budget?: number, pinnedFirst?: boolean): Promise<Memory[]>;
6
+ export declare function expandPromptMemoryLoadBudget(budget: number): number;
7
+ //# sourceMappingURL=memory-manager.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.d.ts","sourceRoot":"","sources":["../../src/managed/memory-manager.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAIzD;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,cAAc,EACvB,MAAM,GAAE,MAAa,EACrB,WAAW,GAAE,OAAc,GAC1B,OAAO,CAAC,MAAM,EAAE,CAAC,CAQnB;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAKnE"}
@@ -0,0 +1,18 @@
1
+ const PROMPT_MEMORY_LOAD_BUDGET_MULTIPLIER = 3;
2
+ const PROMPT_MEMORY_LOAD_BUDGET_MIN = 12000;
3
+ /**
4
+ * Load memories from storage adapter, formatted for prompt injection.
5
+ */
6
+ export async function loadMemories(adapter, budget = 8000, pinnedFirst = true) {
7
+ return adapter.loadMemories({
8
+ // Adapters should return a candidate set, not the final prompt-trimmed slice.
9
+ // We intentionally overfetch here so Archetype's salience-aware selection can
10
+ // decide what survives the actual prompt budget.
11
+ budget: expandPromptMemoryLoadBudget(budget),
12
+ pinnedFirst,
13
+ });
14
+ }
15
+ export function expandPromptMemoryLoadBudget(budget) {
16
+ return Math.max(Math.ceil(budget * PROMPT_MEMORY_LOAD_BUDGET_MULTIPLIER), PROMPT_MEMORY_LOAD_BUDGET_MIN);
17
+ }
18
+ //# sourceMappingURL=memory-manager.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-manager.js","sourceRoot":"","sources":["../../src/managed/memory-manager.ts"],"names":[],"mappings":"AACA,MAAM,oCAAoC,GAAG,CAAC,CAAA;AAC9C,MAAM,6BAA6B,GAAG,KAAK,CAAA;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAuB,EACvB,SAAiB,IAAI,EACrB,cAAuB,IAAI;IAE3B,OAAO,OAAO,CAAC,YAAY,CAAC;QAC1B,8EAA8E;QAC9E,8EAA8E;QAC9E,iDAAiD;QACjD,MAAM,EAAE,4BAA4B,CAAC,MAAM,CAAC;QAC5C,WAAW;KACZ,CAAC,CAAA;AACJ,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACzD,OAAO,IAAI,CAAC,GAAG,CACb,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,oCAAoC,CAAC,EACxD,6BAA6B,CAC9B,CAAA;AACH,CAAC"}
@@ -0,0 +1,45 @@
1
+ import type { StorageAdapter, LLMProvider } from '../types.js';
2
+ export interface MemoryReviewOptions {
3
+ adapter: StorageAdapter;
4
+ provider: LLMProvider;
5
+ /** Only review memories older than this many days (default: 7) */
6
+ maxAge?: number;
7
+ /** Preserve pinned memories from review (default: true) */
8
+ preservePinned?: boolean;
9
+ /** Memory budget for loading (default: 16000 — we load more than prompt budget for review) */
10
+ loadBudget?: number;
11
+ /** Explain what these memories are for across future conversations. */
12
+ memoryPurpose?: string;
13
+ /** Domain-specific memory categories with descriptions. */
14
+ categoryDescriptions?: Record<string, string>;
15
+ /** Memory scope to review: 'user' (default) or 'craft'. Craft memories use a higher bar for removal. */
16
+ scope?: 'user' | 'craft';
17
+ }
18
+ export interface MemoryReviewResult {
19
+ /** Number of old memories removed */
20
+ removed: number;
21
+ /** Number of reviewed memories created */
22
+ created: number;
23
+ }
24
+ /**
25
+ * Review old, non-pinned memories by sending them to the LLM for dedup/consolidation
26
+ * and anti-boxing cleanup.
27
+ *
28
+ * The app decides when to call this (manual trigger, schedule, etc.).
29
+ * Archetype provides the logic but not the scheduling.
30
+ *
31
+ * Flow:
32
+ * 1. Load all memories from adapter
33
+ * 2. Filter to old, non-pinned memories (candidates for review)
34
+ * 3. If no candidates, skip
35
+ * 4. Send to LLM for consolidation
36
+ * 5. Delete old candidates, save reviewed results
37
+ */
38
+ export declare function reviewMemories(options: MemoryReviewOptions): Promise<MemoryReviewResult>;
39
+ /** @deprecated Use reviewMemories instead */
40
+ export declare const compactMemories: typeof reviewMemories;
41
+ /** @deprecated Use MemoryReviewOptions instead */
42
+ export type CompactMemoriesOptions = MemoryReviewOptions;
43
+ /** @deprecated Use MemoryReviewResult instead */
44
+ export type CompactMemoriesResult = MemoryReviewResult;
45
+ //# sourceMappingURL=memory-review.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-review.d.ts","sourceRoot":"","sources":["../../src/managed/memory-review.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAU,WAAW,EAAE,MAAM,aAAa,CAAA;AAEtE,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,cAAc,CAAA;IACvB,QAAQ,EAAE,WAAW,CAAA;IACrB,kEAAkE;IAClE,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,2DAA2D;IAC3D,cAAc,CAAC,EAAE,OAAO,CAAA;IACxB,8FAA8F;IAC9F,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,uEAAuE;IACvE,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,2DAA2D;IAC3D,oBAAoB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC7C,wGAAwG;IACxG,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,qCAAqC;IACrC,OAAO,EAAE,MAAM,CAAA;IACf,0CAA0C;IAC1C,OAAO,EAAE,MAAM,CAAA;CAChB;AAyCD;;;;;;;;;;;;;GAaG;AACH,wBAAsB,cAAc,CAClC,OAAO,EAAE,mBAAmB,GAC3B,OAAO,CAAC,kBAAkB,CAAC,CAoG7B;AAED,6CAA6C;AAC7C,eAAO,MAAM,eAAe,uBAAiB,CAAA;AAC7C,kDAAkD;AAClD,MAAM,MAAM,sBAAsB,GAAG,mBAAmB,CAAA;AACxD,iDAAiD;AACjD,MAAM,MAAM,qBAAqB,GAAG,kBAAkB,CAAA"}
@@ -0,0 +1,130 @@
1
+ function buildReviewPrompt(options) {
2
+ const isCraft = options.scope === 'craft';
3
+ const sections = isCraft
4
+ ? [
5
+ 'You are doing a quiet cleanup pass on an AI assistant\'s craft memories — professional growth observations about its own practice.',
6
+ 'These memories are transferable across users. The bar for removal is higher than user memories: only remove genuine duplicates or observations that turned out to be situational noise, not real patterns.',
7
+ ]
8
+ : [
9
+ 'You are doing a quiet memory cleanup pass for an AI assistant.',
10
+ 'Your job is to turn a noisy list of extracted memories into the smaller, sharper set the assistant would actually want to carry forward into future conversations.',
11
+ ];
12
+ if (options.memoryPurpose?.trim()) {
13
+ sections.push(`MEMORY PURPOSE:\n${options.memoryPurpose.trim()}`);
14
+ }
15
+ if (options.categoryDescriptions && Object.keys(options.categoryDescriptions).length > 0) {
16
+ const categoryGuide = Object.entries(options.categoryDescriptions)
17
+ .map(([name, description]) => `- ${name}: ${description}`)
18
+ .join('\n');
19
+ sections.push(`MEMORY CATEGORIES:\n${categoryGuide}`);
20
+ }
21
+ sections.push(`CLEANUP GUIDANCE:
22
+ - Merge only genuine duplicates and near-duplicates — two memories that say the same thing become the single strongest version. Two memories that say different things both stay.
23
+ - Drop only memories that are pure transcript, changelog, or a one-off situational note with no lasting signal.
24
+ - Everything else that would still help a future conversation stays. There is no target count and shrinking the list is not the goal — keep the set as large as the real, distinct, useful facts require. Sharpen, don't shrink.
25
+ - A stated user fact is ground truth. A preference, routine, recipe (with its amounts), or aversion the user told you — especially source=user, stability=durable — may be tightened in wording but must NEVER be negated, inverted, weakened into something vaguer, merged into a different fact, or dropped. When unsure whether something is a firm preference or a rigid rule, treat it as a fact and keep it exactly.
26
+ - Soften only genuine BEHAVIORAL boxing: a memory that hard-codes how the assistant must act in a situation regardless of context ("always suggest X when Y"). Rewrite those toward the underlying preference. Never confuse "the user always eats X" (a fact — keep it verbatim in meaning) with "always do X" (a rule — soften it). Getting this wrong inverts the person's real preferences, which is the worst thing this pass can do.
27
+ - Respect memory metadata when present:
28
+ - source=user carries more authority than source=suggested
29
+ - stability=temporary should rarely survive unless the situation is still active
30
+ - contextHint should stay compact — keep only what is needed for future interpretation
31
+ - Preserve the best-fit category, and preserve or improve source/stability/contextHint when useful.
32
+ - Return valid JSON: { "compacted": [{ "content": "...", "category": "...", "source": "user|inferred|suggested", "stability": "durable|tentative|temporary", "contextHint": "..." }] }`);
33
+ return sections.join('\n\n');
34
+ }
35
+ /**
36
+ * Review old, non-pinned memories by sending them to the LLM for dedup/consolidation
37
+ * and anti-boxing cleanup.
38
+ *
39
+ * The app decides when to call this (manual trigger, schedule, etc.).
40
+ * Archetype provides the logic but not the scheduling.
41
+ *
42
+ * Flow:
43
+ * 1. Load all memories from adapter
44
+ * 2. Filter to old, non-pinned memories (candidates for review)
45
+ * 3. If no candidates, skip
46
+ * 4. Send to LLM for consolidation
47
+ * 5. Delete old candidates, save reviewed results
48
+ */
49
+ export async function reviewMemories(options) {
50
+ const { adapter, provider, maxAge = 7, preservePinned = true, loadBudget = 16000, memoryPurpose, categoryDescriptions, scope = 'user', } = options;
51
+ // 1. Load all memories (scoped)
52
+ const allMemories = scope === 'craft' && adapter.loadCraftMemories
53
+ ? await adapter.loadCraftMemories({ budget: loadBudget })
54
+ : await adapter.loadMemories({ budget: loadBudget, pinnedFirst: false });
55
+ // 2. Filter candidates: old + non-pinned
56
+ const cutoff = new Date();
57
+ cutoff.setDate(cutoff.getDate() - maxAge);
58
+ const cutoffStr = cutoff.toISOString();
59
+ const candidates = allMemories.filter(m => {
60
+ if (preservePinned && m.pinned)
61
+ return false;
62
+ if (!m.createdAt)
63
+ return true; // no timestamp = old enough
64
+ return m.createdAt < cutoffStr;
65
+ });
66
+ if (candidates.length === 0) {
67
+ return { removed: 0, created: 0 };
68
+ }
69
+ // 3. Build prompt with candidates
70
+ const memoryList = candidates
71
+ .map(m => {
72
+ const meta = [];
73
+ if (m.source)
74
+ meta.push(`source:${m.source}`);
75
+ if (m.stability)
76
+ meta.push(`stability:${m.stability}`);
77
+ const metaText = meta.length > 0 ? ` | ${meta.join(' | ')}` : '';
78
+ const contextText = m.contextHint?.trim() ? ` (context: ${m.contextHint.trim()})` : '';
79
+ return `[${m.category}${metaText}] ${m.content}${contextText}`;
80
+ })
81
+ .join('\n');
82
+ const label = scope === 'craft' ? 'craft memories' : 'memories';
83
+ const message = `Here are ${candidates.length} ${label} to compact:\n\n${memoryList}`;
84
+ // 4. Call LLM
85
+ const response = await provider.chat({
86
+ systemPrompt: buildReviewPrompt({ memoryPurpose, categoryDescriptions, scope }),
87
+ history: [],
88
+ message,
89
+ });
90
+ // 5. Parse response
91
+ let compacted;
92
+ try {
93
+ const parsed = JSON.parse(response.text);
94
+ compacted = parsed.compacted ?? [];
95
+ }
96
+ catch {
97
+ console.error('[archetype] Failed to parse memory review response:', response.text);
98
+ return { removed: 0, created: 0 };
99
+ }
100
+ if (compacted.length === 0) {
101
+ return { removed: 0, created: 0 };
102
+ }
103
+ // 6. Delete old candidates
104
+ const deleteFn = scope === 'craft' && adapter.deleteCraftMemory
105
+ ? adapter.deleteCraftMemory.bind(adapter)
106
+ : adapter.deleteMemory.bind(adapter);
107
+ for (const m of candidates) {
108
+ await deleteFn(m.id);
109
+ }
110
+ // 7. Save reviewed memories
111
+ const saveFn = scope === 'craft' && adapter.saveCraftMemory
112
+ ? (mem) => adapter.saveCraftMemory(mem)
113
+ : (mem) => adapter.saveMemory(mem);
114
+ for (const m of compacted) {
115
+ await saveFn({
116
+ content: m.content,
117
+ category: m.category,
118
+ scope,
119
+ source: m.source,
120
+ stability: m.stability,
121
+ contextHint: m.contextHint,
122
+ pinned: false,
123
+ createdAt: new Date().toISOString(),
124
+ });
125
+ }
126
+ return { removed: candidates.length, created: compacted.length };
127
+ }
128
+ /** @deprecated Use reviewMemories instead */
129
+ export const compactMemories = reviewMemories;
130
+ //# sourceMappingURL=memory-review.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"memory-review.js","sourceRoot":"","sources":["../../src/managed/memory-review.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { StorageAdapter, Conversation, Message, Memory, KnowledgeDocument, KnowledgeAdapter, KnowledgeSearchInput } from '../types.js';
2
+ //# sourceMappingURL=storage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.d.ts","sourceRoot":"","sources":["../../src/managed/storage.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,OAAO,EAAE,MAAM,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,oBAAoB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=storage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"storage.js","sourceRoot":"","sources":["../../src/managed/storage.ts"],"names":[],"mappings":""}
@@ -0,0 +1,23 @@
1
+ export type WorkHistorySource = 'self' | 'action' | 'world';
2
+ export interface WorkHistoryEntry {
3
+ turn: number;
4
+ source: WorkHistorySource;
5
+ text: string;
6
+ /**
7
+ * Number of future turns that should see `text` before it decays to
8
+ * `staleText`. Defaults to durable text.
9
+ */
10
+ resultTurns?: number;
11
+ /**
12
+ * Compact recovery note shown after `resultTurns` has elapsed.
13
+ */
14
+ staleText?: string;
15
+ }
16
+ export interface RenderWorkHistoryOptions {
17
+ currentTurn: number;
18
+ maxEntries?: number;
19
+ }
20
+ export declare function renderWorkHistoryEntries(entries: readonly WorkHistoryEntry[], options: RenderWorkHistoryOptions): string[];
21
+ export declare function renderWorkHistoryEntry(entry: WorkHistoryEntry, currentTurn: number): string;
22
+ export declare function makeWorkHistoryEntry(input: WorkHistoryEntry): WorkHistoryEntry;
23
+ //# sourceMappingURL=work-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-history.d.ts","sourceRoot":"","sources":["../../src/managed/work-history.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GAAG,MAAM,GAAG,QAAQ,GAAG,OAAO,CAAA;AAE3D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,iBAAiB,CAAA;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ;;;OAGG;IACH,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB;;OAEG;IACH,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB;AAED,MAAM,WAAW,wBAAwB;IACvC,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAgB,wBAAwB,CACtC,OAAO,EAAE,SAAS,gBAAgB,EAAE,EACpC,OAAO,EAAE,wBAAwB,GAChC,MAAM,EAAE,CAMV;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM,CAQ3F;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,gBAAgB,CAM9E"}
@@ -0,0 +1,31 @@
1
+ export function renderWorkHistoryEntries(entries, options) {
2
+ const maxEntries = options.maxEntries ?? 24;
3
+ const visible = entries.slice(-maxEntries);
4
+ if (visible.length === 0)
5
+ return ['(empty)'];
6
+ return visible.map(entry => renderWorkHistoryEntry(entry, options.currentTurn));
7
+ }
8
+ export function renderWorkHistoryEntry(entry, currentTurn) {
9
+ const source = entry.source;
10
+ const text = selectWorkHistoryText(entry, currentTurn);
11
+ const trimmed = text.trim();
12
+ if (trimmed.includes('\n')) {
13
+ return `turn ${entry.turn} · ${source}:\n${trimmed}`;
14
+ }
15
+ return `turn ${entry.turn} · ${source}: ${trimmed}`;
16
+ }
17
+ export function makeWorkHistoryEntry(input) {
18
+ return {
19
+ ...input,
20
+ text: input.text.trim(),
21
+ staleText: input.staleText?.trim(),
22
+ };
23
+ }
24
+ function selectWorkHistoryText(entry, currentTurn) {
25
+ if (!entry.staleText)
26
+ return entry.text;
27
+ const resultTurns = entry.resultTurns ?? 1;
28
+ const age = Math.max(0, currentTurn - entry.turn);
29
+ return age <= resultTurns ? entry.text : entry.staleText;
30
+ }
31
+ //# sourceMappingURL=work-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"work-history.js","sourceRoot":"","sources":["../../src/managed/work-history.ts"],"names":[],"mappings":"AAsBA,MAAM,UAAU,wBAAwB,CACtC,OAAoC,EACpC,OAAiC;IAEjC,MAAM,UAAU,GAAG,OAAO,CAAC,UAAU,IAAI,EAAE,CAAA;IAC3C,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,CAAC,CAAA;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,CAAC,SAAS,CAAC,CAAA;IAE5C,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,sBAAsB,CAAC,KAAK,EAAE,OAAO,CAAC,WAAW,CAAC,CAAC,CAAA;AACjF,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAuB,EAAE,WAAmB;IACjF,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAA;IAC3B,MAAM,IAAI,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAA;IACtD,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAA;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,QAAQ,KAAK,CAAC,IAAI,MAAM,MAAM,MAAM,OAAO,EAAE,CAAA;IACtD,CAAC;IACD,OAAO,QAAQ,KAAK,CAAC,IAAI,MAAM,MAAM,KAAK,OAAO,EAAE,CAAA;AACrD,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,OAAO;QACL,GAAG,KAAK;QACR,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE;QACvB,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,IAAI,EAAE;KACnC,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,KAAuB,EAAE,WAAmB;IACzE,IAAI,CAAC,KAAK,CAAC,SAAS;QAAE,OAAO,KAAK,CAAC,IAAI,CAAA;IACvC,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,CAAC,CAAA;IAC1C,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,CAAA;IACjD,OAAO,GAAG,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * archetype/observability — shared telemetry for autonomous-loop consumers.
3
+ *
4
+ * Two pieces today:
5
+ * — createTurnReporter: onTurn hook that writes errors.jsonl +
6
+ * diagnostics.md and emits loud stderr callouts. Replaces the
7
+ * inline onTurn boilerplate every benchmark harness wrote.
8
+ * — renderRunMarkdown: pure renderer that turns a collection of
9
+ * prompt traces + errors + score into a turn-by-turn markdown
10
+ * report. Host CLI owns file I/O (where traces come from, where
11
+ * the report gets written).
12
+ */
13
+ export * from './turn-reporter.js';
14
+ export * from './render-run-markdown.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * archetype/observability — shared telemetry for autonomous-loop consumers.
3
+ *
4
+ * Two pieces today:
5
+ * — createTurnReporter: onTurn hook that writes errors.jsonl +
6
+ * diagnostics.md and emits loud stderr callouts. Replaces the
7
+ * inline onTurn boilerplate every benchmark harness wrote.
8
+ * — renderRunMarkdown: pure renderer that turns a collection of
9
+ * prompt traces + errors + score into a turn-by-turn markdown
10
+ * report. Host CLI owns file I/O (where traces come from, where
11
+ * the report gets written).
12
+ */
13
+ export * from './turn-reporter.js';
14
+ export * from './render-run-markdown.js';
15
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/observability/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AACH,cAAc,oBAAoB,CAAA;AAClC,cAAc,0BAA0B,CAAA"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * Render a benchmark run as a single turn-by-turn TURNS.md-style report.
3
+ *
4
+ * Purpose: the bug is almost always in the prompt the model received.
5
+ * Reading turn-by-turn should take ≤30 seconds and surface:
6
+ * - the system prompt (deduped — appears once if constant across turns)
7
+ * - per-turn input (as the model saw it)
8
+ * - per-turn assistant emission (message verbatim + action summary)
9
+ * - any errors (unknown action, schema fail) flagged inline
10
+ * - a fingerprint header (turn count, action mix, errors)
11
+ *
12
+ * This module is pure: it takes structured data and returns a string.
13
+ * Path discovery (where traces live, where errors.jsonl sits, how to
14
+ * read a score) belongs to the host CLI — archetype/observability ships
15
+ * a renderer, not a file-system reader. See `parseTracePacket` if you
16
+ * want a quick way to hydrate traces from JSON files.
17
+ *
18
+ * Works in browsers and Node (no fs use here).
19
+ */
20
+ export interface HistoryEntry {
21
+ role: string;
22
+ content: string | unknown;
23
+ }
24
+ export interface TracePacket {
25
+ traceGroup?: string;
26
+ transport?: string;
27
+ turn?: number;
28
+ phase?: string;
29
+ attempt?: number;
30
+ systemPrompt?: string;
31
+ message?: string;
32
+ history?: HistoryEntry[];
33
+ responseSchema?: unknown;
34
+ }
35
+ export interface AssistantAction {
36
+ name?: string;
37
+ params?: Record<string, unknown>;
38
+ }
39
+ export interface AssistantPayload {
40
+ message?: string;
41
+ actions?: AssistantAction[];
42
+ diagnostics?: string[];
43
+ }
44
+ export interface RunErrorEntry {
45
+ turn?: number;
46
+ kind?: string;
47
+ action?: string | null;
48
+ reason?: string;
49
+ }
50
+ export interface RunScoreSummary {
51
+ score?: number;
52
+ verdict?: string;
53
+ ship?: string;
54
+ }
55
+ export interface RenderRunMarkdownInput {
56
+ /** Run identifier for the report header. */
57
+ runId: string;
58
+ /** Optional run metadata (benchmarkId, artifactName, status). */
59
+ metadata?: {
60
+ benchmarkId?: string;
61
+ artifactName?: string;
62
+ status?: string;
63
+ };
64
+ /** Prompt traces for every turn (sorted by turn number ascending). */
65
+ traces: TracePacket[];
66
+ /** Error entries (as persisted to errors.jsonl). */
67
+ errors?: RunErrorEntry[];
68
+ /** Customer score (or any scoring surface) for the header. */
69
+ score?: RunScoreSummary | null;
70
+ /** Character budget per turn-input block. Default 1200. */
71
+ inputCharBudget?: number;
72
+ }
73
+ /**
74
+ * Render the final markdown. Returns the full TURNS.md body as a string.
75
+ * Host writes it wherever it wants.
76
+ */
77
+ export declare function renderRunMarkdown(input: RenderRunMarkdownInput): string;
78
+ /**
79
+ * Extract an AssistantPayload from a raw assistant-message string.
80
+ * Handles the common case of prose before a JSON object — everything
81
+ * before the first `{` is ignored.
82
+ */
83
+ export declare function tryParseAssistantPayload(content: string): AssistantPayload | null;
84
+ /**
85
+ * Compact one-line summary of an action: keeps reference keys (path,
86
+ * pattern, id, name, outcome, …) visible, drops bodies (content, stdout,
87
+ * image payloads). Used in the per-turn action list for fast scanning.
88
+ */
89
+ export declare function summarizeAction(a: AssistantAction): string;
90
+ //# sourceMappingURL=render-run-markdown.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"render-run-markdown.d.ts","sourceRoot":"","sources":["../../src/observability/render-run-markdown.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,MAAM,GAAG,OAAO,CAAA;CAC1B;AAED,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,YAAY,EAAE,CAAA;IACxB,cAAc,CAAC,EAAE,OAAO,CAAA;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CACjC;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,eAAe,EAAE,CAAA;IAC3B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAA;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,IAAI,CAAC,EAAE,MAAM,CAAA;CACd;AAED,MAAM,WAAW,sBAAsB;IACrC,4CAA4C;IAC5C,KAAK,EAAE,MAAM,CAAA;IACb,iEAAiE;IACjE,QAAQ,CAAC,EAAE;QACT,WAAW,CAAC,EAAE,MAAM,CAAA;QACpB,YAAY,CAAC,EAAE,MAAM,CAAA;QACrB,MAAM,CAAC,EAAE,MAAM,CAAA;KAChB,CAAA;IACD,sEAAsE;IACtE,MAAM,EAAE,WAAW,EAAE,CAAA;IACrB,oDAAoD;IACpD,MAAM,CAAC,EAAE,aAAa,EAAE,CAAA;IACxB,8DAA8D;IAC9D,KAAK,CAAC,EAAE,eAAe,GAAG,IAAI,CAAA;IAC9B,2DAA2D;IAC3D,eAAe,CAAC,EAAE,MAAM,CAAA;CACzB;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,sBAAsB,GAAG,MAAM,CA0FvE;AAoFD;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,gBAAgB,GAAG,IAAI,CASjF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,eAAe,GAAG,MAAM,CAmB1D"}