@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,451 @@
1
+ /**
2
+ * Autonomous loop — Layer 2 primitive for multi-turn, tool-using flows.
3
+ *
4
+ * Parallel to `withStorage()` (Layer 2 for conversation-oriented personas),
5
+ * `runAutonomousLoop()` is the Layer 2 wrapper for personas that drive a
6
+ * workflow across many turns by emitting typed actions and consuming tool
7
+ * results.
8
+ *
9
+ * What this primitive owns — consumers do NOT re-implement these:
10
+ * - Turn-by-turn history (literal transcript by default; no rebuilt briefs)
11
+ * - History storage policy (assistant entries store compact outcome-aware
12
+ * continuity, never the raw JSON response — raw JSON blows up context by
13
+ * turn ~4 when an action carries a large file body)
14
+ * - Completion detection (explicit completion actions only; "empty actions"
15
+ * is treated as a stall, not a success)
16
+ * - Max-turn budget + per-turn timeout + model retry
17
+ * - ChatInput assembly (`message`, `history`, pass-through persona options)
18
+ *
19
+ * What consumers own — the hooks:
20
+ * - `initialMessage` → the first turn's user prompt
21
+ * - `formatToolResult` → how the prior turn's tool result becomes the next
22
+ * turn's user prompt. THIS IS THE DIFFERENTIATOR
23
+ * between autonomous-loop integrations. It's where
24
+ * you decide how much workspace context the model
25
+ * sees, and in what shape.
26
+ * - `executeAction` → run the action, produce a structured result
27
+ * - `completionActionNames` → which action names (e.g. `returnToSession`)
28
+ * should terminate the loop; defaults to empty, and
29
+ * consumers can also return an explicit `finish`
30
+ * from `executeAction`.
31
+ * - `onBeforeChat` → observer hook invoked with the assembled chat
32
+ * request before calling the provider. Use for
33
+ * prompt tracing.
34
+ * - `onTurn` → observer hook invoked after each turn's result is
35
+ * recorded. Use for logging/evidence gathering.
36
+ *
37
+ * Design note: the primitive deliberately does NOT expose a knob for
38
+ * "synthetic history" or "rebuilt task-frame every turn." Those anti-patterns
39
+ * are the problem this primitive solves — they force the model to re-enter a
40
+ * reconstructed situation on every turn instead of extending its own trace,
41
+ * and the race post-mortem (`foundry/docs/PI_VS_FOUNDRY_WHAT_ARE_WE_MISSING.md`)
42
+ * showed that's a material loss of momentum. If the hypothesis changes,
43
+ * change this primitive; don't patch around it at the consumer layer.
44
+ */
45
+ import { buildChatLLMRequest } from '../core/request-builder.js';
46
+ import { buildAssistantContinuityMessage } from '../engine/continuity.js';
47
+ const DEFAULT_TURN_TIMEOUT_MS = 90_000;
48
+ const DEFAULT_MODEL_RETRIES = 2;
49
+ const DEFAULT_RETRY_DELAY_MS = 2_000;
50
+ const MAX_CONSECUTIVE_STALLS = 3;
51
+ export async function runAutonomousLoop(input) {
52
+ validateHooks(input.hooks);
53
+ const state = {
54
+ history: [],
55
+ records: [],
56
+ finish: null,
57
+ turnsUsed: 0,
58
+ consecutiveStalls: 0,
59
+ };
60
+ const turnTimeoutMs = input.turnTimeoutMs ?? DEFAULT_TURN_TIMEOUT_MS;
61
+ const modelRetries = input.modelRetries ?? DEFAULT_MODEL_RETRIES;
62
+ const retryDelayMs = input.modelRetryDelayMs ?? DEFAULT_RETRY_DELAY_MS;
63
+ const completionNames = new Set(input.hooks.completionActionNames ?? []);
64
+ for (let turn = 1; turn <= input.maxTurns; turn += 1) {
65
+ const ctx = {
66
+ turn,
67
+ maxTurns: input.maxTurns,
68
+ run: input.run,
69
+ };
70
+ const message = buildTurnMessage(state, input.hooks, ctx);
71
+ // Collect any multimodal attachments the previous turn's tool result
72
+ // set. Attachments are delivered once (this turn) and intentionally not
73
+ // persisted in history — future turns see only the text outcome, not
74
+ // the bytes. A browserScreenshot returning a PNG is the canonical case.
75
+ const priorAttachments = collectPriorToolAttachments(state);
76
+ const chatOptions = await resolveLoopChatOptions(input.hooks.chatOptions, ctx, state);
77
+ const chatInput = {
78
+ ...chatOptions,
79
+ message,
80
+ history: [...state.history],
81
+ ...(priorAttachments.length > 0 ? { attachments: priorAttachments } : {}),
82
+ };
83
+ const turnPersona = typeof input.persona === 'function'
84
+ ? await input.persona(ctx)
85
+ : input.persona;
86
+ let result;
87
+ try {
88
+ result = await callPersonaWithRetry({
89
+ persona: turnPersona,
90
+ chatInput,
91
+ turn,
92
+ turnTimeoutMs,
93
+ modelRetries,
94
+ retryDelayMs,
95
+ onBeforeChat: input.hooks.onBeforeChat,
96
+ });
97
+ }
98
+ catch (error) {
99
+ // Provider-level error (MALFORMED_FUNCTION_CALL, empty response, timeout,
100
+ // etc.). Surface only factual continuity to the next turn. Do not turn
101
+ // infrastructure load/timeouts into strategy advice for the agent.
102
+ const summary = error instanceof Error ? error.message : String(error);
103
+ const infrastructureLoad = isInfrastructureLoadError(summary);
104
+ if (infrastructureLoad) {
105
+ console.error(`\x1b[33m[archetype PROVIDER LOAD]\x1b[0m Turn ${turn}: ${summary}. `
106
+ + `No actions ran. The next turn will retry the same active work after recording the timeout.`);
107
+ }
108
+ else {
109
+ console.error(`\x1b[31m[archetype PROVIDER ERROR]\x1b[0m Turn ${turn}: ${summary}. `
110
+ + `No actions ran. If this repeats, inspect the prompt dump and provider payload.`);
111
+ }
112
+ state.records.push({
113
+ turn,
114
+ message,
115
+ assistantMessage: '',
116
+ action: null,
117
+ toolResult: null,
118
+ rawAssistantResponse: null,
119
+ providerError: summary,
120
+ });
121
+ state.turnsUsed = turn;
122
+ state.consecutiveStalls += 1;
123
+ if (state.consecutiveStalls >= MAX_CONSECUTIVE_STALLS) {
124
+ state.finish = {
125
+ outcome: 'blocked',
126
+ summary: `Autonomous loop: ${MAX_CONSECUTIVE_STALLS} consecutive provider failures. Last: ${summary}`,
127
+ };
128
+ break;
129
+ }
130
+ continue;
131
+ }
132
+ const actions = Array.isArray(result.actions) ? result.actions : [];
133
+ // Execute all emitted actions sequentially. Gemini's native function-
134
+ // calling API natively returns multiple `functionCall` parts per turn,
135
+ // and pi's coding agent supports this; rejecting multi-action turns was a
136
+ // holdover from the focus-mode assumption of one-action-per-turn. Each
137
+ // action executes in emission order, its tool result feeds into the
138
+ // aggregate. Early-exit if any action's result sets `finish`.
139
+ const actionResults = input.hooks.executeActions
140
+ ? await input.hooks.executeActions(actions, ctx)
141
+ : [];
142
+ if (!input.hooks.executeActions) {
143
+ for (const a of actions) {
144
+ const r = await input.hooks.executeAction(a, ctx);
145
+ actionResults.push({ action: a, result: r });
146
+ if (r.finish)
147
+ break;
148
+ }
149
+ }
150
+ const action = actions[0] ?? null;
151
+ const toolResult = actionResults[0]?.result ?? null;
152
+ // Validation errors: the model emitted actions the contract rejected
153
+ // (unknown_action, invalid). Archetype's chat.ts puts these on
154
+ // ChatResult.trace.actions but by default they disappear into the void —
155
+ // the model sees no tool result and no explanation. Log strongly AND
156
+ // attach to the record so the next turn can surface the error to the
157
+ // model.
158
+ const validationErrors = (result.trace?.actions ?? [])
159
+ .filter(a => a.status === 'invalid' || a.status === 'unknown_action')
160
+ .map(a => ({ name: a.name, status: a.status, error: a.error }));
161
+ if (validationErrors.length > 0) {
162
+ console.error(`\x1b[31m[archetype CONFUSED PROMPT]\x1b[0m Turn ${turn}: model emitted ${validationErrors.length} action(s) the contract rejected. `
163
+ + `This means the prompt / tool schema we gave the model was ambiguous or misleading — the model made a reasonable try and we said no. `
164
+ + `Surfacing to the model as feedback.\n`
165
+ + validationErrors.map(e => ` - ${e.status} "${e.name}": ${e.error ?? '(no detail)'}`).join('\n'));
166
+ }
167
+ // Update history: user message, then a compact assistant-history entry.
168
+ // Future turns should see outcome continuity, not raw assistant JSON.
169
+ // Providers that reconstruct native function-call history opt into a
170
+ // compact JSON transport that preserves action references while dropping
171
+ // large payload bodies.
172
+ state.history.push({ role: 'user', content: message });
173
+ state.history.push({
174
+ role: 'assistant',
175
+ content: buildAssistantContinuityMessage({
176
+ message: result.message,
177
+ modelOutcomeNotes: result.outcomeNotes,
178
+ actionOutcomes: actionResults.map(({ action, result: toolResult }) => ({
179
+ action,
180
+ outcomeNote: toolResult.outcomeNote,
181
+ text: toolResult.text,
182
+ status: toolResult.finish ? `finish:${toolResult.finish.outcome}` : undefined,
183
+ success: toolResult.finish ? toolResult.finish.outcome === 'success' : undefined,
184
+ })),
185
+ actionsForHistory: actionResults.map(({ action }) => action),
186
+ historyTransport: turnPersona.config.provider.historyTransport,
187
+ }),
188
+ });
189
+ const record = {
190
+ turn,
191
+ message,
192
+ assistantMessage: result.message,
193
+ action,
194
+ toolResult,
195
+ rawAssistantResponse: result.raw ?? null,
196
+ trace: result.trace,
197
+ validationErrors: validationErrors.length > 0 ? validationErrors : undefined,
198
+ extraActionResults: actionResults.length > 1
199
+ ? actionResults.slice(1)
200
+ : undefined,
201
+ };
202
+ state.records.push(record);
203
+ state.turnsUsed = turn;
204
+ // Don't count validation-rejected as a stall: the model DID emit an
205
+ // action, we just rejected it. Reset the stall counter so the model has
206
+ // full budget to adapt.
207
+ state.consecutiveStalls = (action || validationErrors.length > 0) ? 0 : state.consecutiveStalls + 1;
208
+ if (input.hooks.onTurn) {
209
+ await input.hooks.onTurn(record, state);
210
+ }
211
+ // Completion checks, in priority order. Scan ALL action results for a
212
+ // finish signal or a completion-action-name match — any of the multi-
213
+ // action emissions can signal done.
214
+ const finishFromResults = actionResults.find(r => r.result.finish)?.result.finish;
215
+ if (finishFromResults) {
216
+ state.finish = finishFromResults;
217
+ break;
218
+ }
219
+ const completionAction = actionResults.find(r => r.result.executed !== false && completionNames.has(r.action.name));
220
+ if (completionAction) {
221
+ state.finish = finishFromCompletionAction(completionAction.action);
222
+ break;
223
+ }
224
+ if (state.consecutiveStalls >= MAX_CONSECUTIVE_STALLS) {
225
+ state.finish = {
226
+ outcome: 'blocked',
227
+ summary: `Autonomous loop: model stalled (returned no action for ${MAX_CONSECUTIVE_STALLS} consecutive turns).`,
228
+ };
229
+ break;
230
+ }
231
+ }
232
+ const finish = state.finish ?? {
233
+ outcome: 'blocked',
234
+ summary: `Reached max turns (${input.maxTurns}) without completion.`,
235
+ };
236
+ return { state, finish };
237
+ }
238
+ /**
239
+ * Translate a validation rejection into plain English. Zod's raw JSON
240
+ * (`[{code:"too_small",minimum:1,path:["edits",0,"oldText"],message:"String
241
+ * must contain at least 1 character(s)"}]`) is technically correct but
242
+ * reads like stack trace — the model repeated the same empty-oldText
243
+ * mistake four turns in a row on 2026-04-21 despite seeing that JSON each
244
+ * turn. Format each error to say what the field represents and why the
245
+ * value was invalid, without prescribing the next move.
246
+ */
247
+ function formatValidationError(e) {
248
+ if (e.status === 'unknown_action') {
249
+ return (` - Unknown action "${e.name}": not in the AVAILABLE ACTIONS list. `
250
+ + `The valid set is fixed by the contract above — no other names exist.`);
251
+ }
252
+ let parsed = [];
253
+ if (e.error) {
254
+ try {
255
+ const maybe = JSON.parse(e.error);
256
+ if (Array.isArray(maybe))
257
+ parsed = maybe;
258
+ }
259
+ catch {
260
+ // raw string — keep as-is
261
+ }
262
+ }
263
+ if (parsed.length === 0) {
264
+ return ` - Invalid action "${e.name}": ${e.error ?? '(no detail)'}`;
265
+ }
266
+ const details = parsed.map((issue) => {
267
+ const fieldPath = (issue.path ?? []).map(String).join('.');
268
+ const fieldRef = fieldPath || '(root)';
269
+ switch (issue.code) {
270
+ case 'too_small':
271
+ if (issue.expected === 'array') {
272
+ return `${fieldRef} was empty — the schema requires at least ${issue.minimum ?? 1} entr${(issue.minimum ?? 1) === 1 ? 'y' : 'ies'}.`;
273
+ }
274
+ return `${fieldRef} was empty or too short — the schema requires at least ${issue.minimum ?? 1} character${(issue.minimum ?? 1) === 1 ? '' : 's'}.`;
275
+ case 'invalid_type':
276
+ return `${fieldRef} had the wrong type — expected ${issue.expected ?? '?'}, got ${issue.received ?? '?'}.`;
277
+ case 'unrecognized_keys':
278
+ return `${fieldRef} contained unrecognized keys — only the declared param names are accepted.`;
279
+ case 'invalid_enum_value':
280
+ return `${fieldRef} was not one of the allowed values — see the action's schema above.`;
281
+ default:
282
+ return `${fieldRef}: ${issue.message ?? issue.code ?? 'invalid'}.`;
283
+ }
284
+ }).join(' ');
285
+ return ` - "${e.name}" was rejected: ${details}`;
286
+ }
287
+ /**
288
+ * Gather attachments from the most recent turn's tool results. Only the
289
+ * "prior turn" contributes. We deliver only the latest attachment once,
290
+ * on the turn after it was produced; screenshot-heavy tool batches should
291
+ * carry the final visual state without bloating the next model request.
292
+ */
293
+ function collectPriorToolAttachments(state) {
294
+ if (state.records.length === 0)
295
+ return [];
296
+ const prior = state.records[state.records.length - 1];
297
+ const attachments = [];
298
+ if (prior.toolResult?.attachments && prior.toolResult.attachments.length > 0) {
299
+ attachments.push(...prior.toolResult.attachments);
300
+ }
301
+ if (prior.extraActionResults) {
302
+ for (const extra of prior.extraActionResults) {
303
+ if (extra.result.attachments && extra.result.attachments.length > 0) {
304
+ attachments.push(...extra.result.attachments);
305
+ }
306
+ }
307
+ }
308
+ const latest = attachments.at(-1);
309
+ return latest ? [latest] : [];
310
+ }
311
+ function validateHooks(hooks) {
312
+ if (typeof hooks.initialMessage !== 'function') {
313
+ throw new Error('runAutonomousLoop: hooks.initialMessage must be a function');
314
+ }
315
+ if (typeof hooks.formatToolResult !== 'function') {
316
+ throw new Error('runAutonomousLoop: hooks.formatToolResult must be a function');
317
+ }
318
+ if (typeof hooks.executeAction !== 'function') {
319
+ throw new Error('runAutonomousLoop: hooks.executeAction must be a function');
320
+ }
321
+ if (hooks.chatOptions) {
322
+ if (typeof hooks.chatOptions === 'function')
323
+ return;
324
+ const options = hooks.chatOptions;
325
+ if ('message' in options || 'history' in options) {
326
+ throw new Error('runAutonomousLoop: hooks.chatOptions may not include `message` or `history` — those are primitive-owned.');
327
+ }
328
+ }
329
+ }
330
+ async function resolveLoopChatOptions(chatOptions, ctx, state) {
331
+ const resolved = typeof chatOptions === 'function'
332
+ ? await chatOptions(ctx, state)
333
+ : (chatOptions ?? {});
334
+ if ('message' in resolved || 'history' in resolved) {
335
+ throw new Error('runAutonomousLoop: hooks.chatOptions may not include `message` or `history` — those are primitive-owned.');
336
+ }
337
+ return resolved;
338
+ }
339
+ function buildTurnMessage(state, hooks, ctx) {
340
+ // Turn 1 — initial message.
341
+ if (state.records.length === 0) {
342
+ return hooks.initialMessage(ctx);
343
+ }
344
+ const prior = state.records[state.records.length - 1];
345
+ // Provider error: preserve the active work and add neutral continuity.
346
+ // Timeouts/load are infrastructure facts, not evidence that the agent chose
347
+ // a bad strategy or needs to make the artifact smaller.
348
+ if (prior.providerError) {
349
+ return (`${prior.message}\n\n`
350
+ + `The LLM request timed out or the provider was under heavy load. No actions ran.\n`
351
+ + `${prior.providerError}\n\n`
352
+ + `Please try again from the same active work.`);
353
+ }
354
+ // Validation errors: the model emitted actions that the contract rejected.
355
+ // Translate each rejection into plain language so the model can see WHY
356
+ // the call was invalid and what the field is. Echoing the raw Zod JSON
357
+ // is not enough — we saw the same model emit the same empty-oldText
358
+ // editFile four turns in a row, because the tail "pick closest available
359
+ // shape" read as guess-advice, not as "your oldText field was empty."
360
+ if (prior.validationErrors && prior.validationErrors.length > 0 && !prior.action) {
361
+ const lines = prior.validationErrors.map((e) => formatValidationError(e)).join('\n');
362
+ return `Previous action(s) rejected by the tool contract:\n${lines}`;
363
+ }
364
+ // Normal tool result — single or multi-action. For multi-action turns,
365
+ // format each result and join; the model then sees all its tool calls'
366
+ // outputs in emission order.
367
+ if (prior.action && prior.toolResult) {
368
+ const head = hooks.formatToolResult(prior.action, prior.toolResult, ctx);
369
+ if (!prior.extraActionResults || prior.extraActionResults.length === 0) {
370
+ return head;
371
+ }
372
+ const tail = prior.extraActionResults
373
+ .map(({ action, result }) => hooks.formatToolResult(action, result, ctx))
374
+ .join('\n\n');
375
+ return `${head}\n\n${tail}`;
376
+ }
377
+ // Fallback — no action, no error, no tool result (shouldn't happen but keep
378
+ // a factual nudge).
379
+ return '(your previous turn produced no action — continue with a concrete next step or call the completion action if you are done)';
380
+ }
381
+ async function callPersonaWithRetry(args) {
382
+ let lastError = null;
383
+ for (let attempt = 1; attempt <= args.modelRetries + 1; attempt += 1) {
384
+ try {
385
+ if (args.onBeforeChat) {
386
+ const { request } = buildChatLLMRequest(args.persona.config, args.chatInput);
387
+ await args.onBeforeChat({
388
+ request: {
389
+ systemPrompt: request.systemPrompt,
390
+ message: request.message,
391
+ history: request.history,
392
+ attachments: request.attachments,
393
+ responseSchema: request.responseSchema,
394
+ promptMode: request.promptMode,
395
+ },
396
+ turn: args.turn,
397
+ attempt,
398
+ });
399
+ }
400
+ return await withTimeout(args.persona.chat(args.chatInput), args.turnTimeoutMs, `Autonomous loop turn ${args.turn} timed out after ${args.turnTimeoutMs}ms`);
401
+ }
402
+ catch (error) {
403
+ lastError = error;
404
+ const message = error instanceof Error ? error.message : String(error);
405
+ if (attempt > args.modelRetries || !shouldRetry(message)) {
406
+ throw error;
407
+ }
408
+ await sleep(args.retryDelayMs * attempt);
409
+ }
410
+ }
411
+ throw lastError ?? new Error(`Autonomous loop turn ${args.turn} failed`);
412
+ }
413
+ function withTimeout(promise, ms, message) {
414
+ return new Promise((resolve, reject) => {
415
+ const timer = setTimeout(() => reject(new Error(message)), ms);
416
+ promise.then(value => {
417
+ clearTimeout(timer);
418
+ resolve(value);
419
+ }, error => {
420
+ clearTimeout(timer);
421
+ reject(error);
422
+ });
423
+ });
424
+ }
425
+ function shouldRetry(message) {
426
+ return /timed out|timeout|ECONNRESET|ETIMEDOUT|socket hang up|fetch failed|503|504|429/i.test(message);
427
+ }
428
+ function isInfrastructureLoadError(message) {
429
+ return /timed out|timeout|ECONNRESET|ETIMEDOUT|socket hang up|fetch failed|503|504|429|overloaded|unavailable|resource exhausted/i.test(message);
430
+ }
431
+ function sleep(ms) {
432
+ return new Promise(resolve => setTimeout(resolve, ms));
433
+ }
434
+ function normalizeOutcome(value) {
435
+ if (value === 'success' || value === 'blocked' || value === 'failed')
436
+ return value;
437
+ return 'blocked';
438
+ }
439
+ function finishFromCompletionAction(action) {
440
+ const params = action.params;
441
+ return {
442
+ outcome: normalizeCompletionState(params.outcome ?? params.state),
443
+ summary: params.summary ?? params.message ?? `Completion action ${action.name} called.`,
444
+ };
445
+ }
446
+ function normalizeCompletionState(value) {
447
+ if (value === 'ready')
448
+ return 'success';
449
+ return normalizeOutcome(value);
450
+ }
451
+ //# sourceMappingURL=autonomous-loop.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autonomous-loop.js","sourceRoot":"","sources":["../../src/managed/autonomous-loop.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { StorageAdapter } from '../types.js';
2
+ /**
3
+ * Resolve or create a conversation.
4
+ * Returns the conversation ID (existing or newly created).
5
+ */
6
+ export declare function resolveConversation(adapter: StorageAdapter, conversationId?: string | null, trigger?: string, metadata?: Record<string, unknown>): Promise<string>;
7
+ /**
8
+ * Load conversation history for LLM input.
9
+ * Returns non-note messages in chronological order, up to limit.
10
+ */
11
+ export declare function loadHistory(adapter: StorageAdapter, conversationId: string, limit: number): Promise<Array<{
12
+ role: 'user' | 'assistant';
13
+ content: string;
14
+ }>>;
15
+ export declare function loadAttachmentCarryForwardSections(adapter: StorageAdapter, conversationId: string, limit: number): Promise<string[]>;
16
+ /**
17
+ * End a conversation by setting its endedAt timestamp.
18
+ */
19
+ export declare function endConversation(adapter: StorageAdapter, conversationId: string): Promise<void>;
20
+ //# sourceMappingURL=conversation.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.d.ts","sourceRoot":"","sources":["../../src/managed/conversation.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAyB,MAAM,aAAa,CAAA;AAMxE;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,cAAc,EACvB,cAAc,CAAC,EAAE,MAAM,GAAG,IAAI,EAC9B,OAAO,CAAC,EAAE,MAAM,EAChB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACjC,OAAO,CAAC,MAAM,CAAC,CASjB;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAAC,CAKjE;AAED,wBAAsB,kCAAkC,CACtD,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,EACtB,KAAK,EAAE,MAAM,GACZ,OAAO,CAAC,MAAM,EAAE,CAAC,CAOnB;AAED;;GAEG;AACH,wBAAsB,eAAe,CACnC,OAAO,EAAE,cAAc,EACvB,cAAc,EAAE,MAAM,GACrB,OAAO,CAAC,IAAI,CAAC,CAEf"}
@@ -0,0 +1,40 @@
1
+ import { buildAttachmentCarryForwardSection, collectAttachmentCarryForwardNotes, } from '../core/attachment-notes.js';
2
+ /**
3
+ * Resolve or create a conversation.
4
+ * Returns the conversation ID (existing or newly created).
5
+ */
6
+ export async function resolveConversation(adapter, conversationId, trigger, metadata) {
7
+ if (conversationId)
8
+ return conversationId;
9
+ // Try to find an active conversation
10
+ const active = await adapter.getActiveConversation();
11
+ if (active)
12
+ return active.id;
13
+ // Create a new one
14
+ return adapter.createConversation(trigger ?? 'manual', metadata);
15
+ }
16
+ /**
17
+ * Load conversation history for LLM input.
18
+ * Returns non-note messages in chronological order, up to limit.
19
+ */
20
+ export async function loadHistory(adapter, conversationId, limit) {
21
+ const messages = await adapter.getMessages(conversationId, limit);
22
+ return messages
23
+ .filter(m => !m.isNote && (m.role === 'user' || m.role === 'assistant'))
24
+ .map(m => ({ role: m.role, content: m.content }));
25
+ }
26
+ export async function loadAttachmentCarryForwardSections(adapter, conversationId, limit) {
27
+ const messages = await adapter.getMessages(conversationId, limit);
28
+ const notes = collectAttachmentCarryForwardNotes(messages);
29
+ if (notes.length === 0)
30
+ return [];
31
+ const section = buildAttachmentCarryForwardSection(notes);
32
+ return section ? [section] : [];
33
+ }
34
+ /**
35
+ * End a conversation by setting its endedAt timestamp.
36
+ */
37
+ export async function endConversation(adapter, conversationId) {
38
+ await adapter.endConversation(conversationId);
39
+ }
40
+ //# sourceMappingURL=conversation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"conversation.js","sourceRoot":"","sources":["../../src/managed/conversation.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kCAAkC,EAClC,kCAAkC,GACnC,MAAM,6BAA6B,CAAA;AAEpC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,OAAuB,EACvB,cAA8B,EAC9B,OAAgB,EAChB,QAAkC;IAElC,IAAI,cAAc;QAAE,OAAO,cAAc,CAAA;IAEzC,qCAAqC;IACrC,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,qBAAqB,EAAE,CAAA;IACpD,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC,EAAE,CAAA;IAE5B,mBAAmB;IACnB,OAAO,OAAO,CAAC,kBAAkB,CAAC,OAAO,IAAI,QAAQ,EAAE,QAAQ,CAAC,CAAA;AAClE,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,OAAuB,EACvB,cAAsB,EACtB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IACjE,OAAO,QAAQ;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,CAAC,CAAC;SACvE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAA4B,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAA;AAC7E,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,kCAAkC,CACtD,OAAuB,EACvB,cAAsB,EACtB,KAAa;IAEb,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,WAAW,CAAC,cAAc,EAAE,KAAK,CAAC,CAAA;IACjE,MAAM,KAAK,GAAG,kCAAkC,CAAC,QAAQ,CAAC,CAAA;IAC1D,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEjC,MAAM,OAAO,GAAG,kCAAkC,CAAC,KAAK,CAAC,CAAA;IACzD,OAAO,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,OAAuB,EACvB,cAAsB;IAEtB,MAAM,OAAO,CAAC,eAAe,CAAC,cAAc,CAAC,CAAA;AAC/C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { KnowledgeAdapter } from '../types.js';
2
+ export interface MarkdownKnowledgeAdapterOptions {
3
+ rootDir: string;
4
+ includeDrafts?: boolean;
5
+ }
6
+ export declare function createMarkdownKnowledgeAdapter(options: MarkdownKnowledgeAdapterOptions): KnowledgeAdapter;
7
+ //# sourceMappingURL=knowledge.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"knowledge.d.ts","sourceRoot":"","sources":["../../src/managed/knowledge.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,gBAAgB,EAA2C,MAAM,aAAa,CAAA;AAE5F,MAAM,WAAW,+BAA+B;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,OAAO,CAAA;CACxB;AAUD,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,+BAA+B,GACvC,gBAAgB,CAiClB"}