@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,536 @@
1
+ import { GoogleGenerativeAI, SchemaType, } from '@google/generative-ai';
2
+ import { createHash } from 'node:crypto';
3
+ import { zodToGeminiSchema } from './zod-to-gemini.js';
4
+ const FOLLOW_UPS_CORE_DESCRIPTION = 'Optional short phrases the USER would tap to continue the conversation — written in their voice, not yours. Example: "My right bicep is still sore" not "How is your right bicep feeling?"';
5
+ function stableStringify(value) {
6
+ if (value === null || typeof value !== 'object')
7
+ return JSON.stringify(value);
8
+ if (Array.isArray(value))
9
+ return `[${value.map(stableStringify).join(',')}]`;
10
+ const obj = value;
11
+ return `{${Object.keys(obj).sort().map(key => `${JSON.stringify(key)}:${stableStringify(obj[key])}`).join(',')}}`;
12
+ }
13
+ function sha256(value) {
14
+ return createHash('sha256').update(typeof value === 'string' ? value : stableStringify(value)).digest('hex');
15
+ }
16
+ function traceSafeMessageParts(messageParts) {
17
+ if (typeof messageParts === 'string')
18
+ return messageParts;
19
+ return messageParts.map(part => {
20
+ const inlineData = part.inlineData;
21
+ if (inlineData?.data) {
22
+ return {
23
+ inlineData: {
24
+ mimeType: inlineData.mimeType,
25
+ dataSha256: sha256(inlineData.data),
26
+ dataLength: inlineData.data.length,
27
+ },
28
+ };
29
+ }
30
+ return part;
31
+ });
32
+ }
33
+ function buildFollowUpsDescription(appDescription) {
34
+ if (!appDescription?.trim())
35
+ return FOLLOW_UPS_CORE_DESCRIPTION;
36
+ return `${FOLLOW_UPS_CORE_DESCRIPTION}\n\nApp-specific context: ${appDescription.trim()}`;
37
+ }
38
+ export const DEFAULT_GEMINI_MODEL = 'gemini-3.5-flash';
39
+ export const DEFAULT_GEMINI_FALLBACK_MODELS = ['gemini-3.1-pro-preview', 'gemini-3.1-flash-lite'];
40
+ /**
41
+ * Remove Archetype's "Return one raw JSON object" output directive from the
42
+ * system prompt. In function-calling mode the directive conflicts with tool
43
+ * use — the model follows the explicit text instruction instead of calling
44
+ * functions. Handled as a regex on known marker headings so we don't have to
45
+ * thread a flag through Archetype's prompt builder.
46
+ */
47
+ function stripJsonOutputDirective(systemPrompt) {
48
+ // Each block is separated from its neighbours by a blank line. Match from
49
+ // the heading through the whole block up to the next blank line (or end).
50
+ // Without `/m` the `$` means end-of-string, so a trailing block also strips.
51
+ const markerPatterns = [
52
+ /(?:^|\n)Output contract:\n[\s\S]*?(?=\n\n|$)/,
53
+ /(?:^|\n)Output:\n[\s\S]*?(?=\n\n|$)/,
54
+ ];
55
+ let cleaned = systemPrompt;
56
+ for (const pat of markerPatterns) {
57
+ cleaned = cleaned.replace(pat, '');
58
+ }
59
+ return `${cleaned.trimEnd()}
60
+
61
+ Call tools directly to take actions. Emit text only to narrate what you are doing.`;
62
+ }
63
+ /**
64
+ * Convert Archetype's JSON-schema action shape into Gemini function declarations.
65
+ * Archetype builds `responseSchema.properties.actions.items.anyOf = [{name: enum, params: {...}}, ...]`;
66
+ * each entry becomes a function declaration `{name, description, parameters}`.
67
+ * Returns null if the schema isn't the expected Archetype action shape
68
+ * (CRUD-only schemas, bare text responses, etc. fall through to JSON mode).
69
+ */
70
+ function extractFunctionDeclarationsFromSchema(responseSchema) {
71
+ if (!responseSchema || typeof responseSchema !== 'object')
72
+ return null;
73
+ const properties = responseSchema.properties;
74
+ const actions = properties?.actions;
75
+ const anyOf = actions?.items?.anyOf;
76
+ if (!Array.isArray(anyOf) || anyOf.length === 0)
77
+ return null;
78
+ const declarations = [];
79
+ for (const entry of anyOf) {
80
+ if (!entry || typeof entry !== 'object')
81
+ continue;
82
+ const entryProps = entry.properties;
83
+ const nameField = entryProps?.name;
84
+ const nameEnum = nameField?.enum;
85
+ const name = Array.isArray(nameEnum) && typeof nameEnum[0] === 'string' ? nameEnum[0] : null;
86
+ if (!name)
87
+ continue;
88
+ const params = (entryProps?.params ?? { type: 'object', properties: {} });
89
+ // Pull the action's description from the variant (placed there by
90
+ // buildGeminiResponseSchema). Fall back to a generic only when
91
+ // absolutely no description is available, because a generic description
92
+ // starves the model of tool semantics and forces it to infer from the
93
+ // name alone.
94
+ const description = typeof entry.description === 'string'
95
+ ? entry.description
96
+ : `Call ${name}.`;
97
+ declarations.push({
98
+ name,
99
+ description,
100
+ parameters: params,
101
+ });
102
+ }
103
+ return declarations.length > 0 ? declarations : null;
104
+ }
105
+ /**
106
+ * Build the ordered fallback chain from config + env vars.
107
+ * Precedence: fallbackModels config > fallbackModel config > GEMINI_FALLBACK_MODELS env > GEMINI_FALLBACK_MODEL env > defaults.
108
+ * Passing fallbackModels: [] explicitly disables fallback instead of inheriting env defaults.
109
+ * The primary model and duplicates are excluded.
110
+ */
111
+ export function resolveFallbackChain(primaryModel, config) {
112
+ let raw;
113
+ if (config && 'fallbackModels' in config) {
114
+ raw = config.fallbackModels ?? [];
115
+ }
116
+ else if (config?.fallbackModel) {
117
+ raw = [config.fallbackModel];
118
+ }
119
+ else if (process.env.GEMINI_FALLBACK_MODELS) {
120
+ raw = process.env.GEMINI_FALLBACK_MODELS.split(',').map(s => s.trim()).filter(Boolean);
121
+ }
122
+ else if (process.env.GEMINI_FALLBACK_MODEL) {
123
+ raw = [process.env.GEMINI_FALLBACK_MODEL];
124
+ }
125
+ else {
126
+ raw = [...DEFAULT_GEMINI_FALLBACK_MODELS];
127
+ }
128
+ const seen = new Set([primaryModel]);
129
+ return raw.filter(m => {
130
+ if (seen.has(m))
131
+ return false;
132
+ seen.add(m);
133
+ return true;
134
+ });
135
+ }
136
+ /**
137
+ * Create a Gemini LLM provider.
138
+ * API key resolved from: config.apiKey → GEMINI_API_KEY env var.
139
+ */
140
+ export function Gemini(config) {
141
+ const modelName = config?.model ?? process.env.GEMINI_MODEL ?? DEFAULT_GEMINI_MODEL;
142
+ const fallbackChain = resolveFallbackChain(modelName, config);
143
+ const modelChain = [modelName, ...fallbackChain];
144
+ const maxRetries = config?.maxRetries ?? 0;
145
+ const defaultTemperature = config?.temperature ?? 0.7;
146
+ const timeoutMs = config?.timeoutMs ?? 90 * 1000;
147
+ return {
148
+ name: `gemini:${modelName}`,
149
+ historyTransport: config?.useFunctionCalling ? 'compact-function-calls' : 'text',
150
+ async chat(request) {
151
+ const apiKey = config?.apiKey ?? process.env.GEMINI_API_KEY;
152
+ if (!apiKey) {
153
+ throw new Error('Gemini API key not set — pass apiKey in config or set GEMINI_API_KEY env var');
154
+ }
155
+ const genAI = new GoogleGenerativeAI(apiKey);
156
+ const temperature = request.temperature ?? defaultTemperature;
157
+ // Thinking budget. Pi runs gemini-2.5-flash with `thinkingBudget: 8192`
158
+ // (its "medium" effort preset) for coding tasks. We used to pass -1
159
+ // (unlimited dynamic), which let the model burn its entire output
160
+ // budget on thinking tokens and then return MALFORMED_FUNCTION_CALL
161
+ // because there was no room left to emit the actual tool call. Match
162
+ // pi's cap so the model reasons thoroughly but leaves space for the
163
+ // function call args.
164
+ // See pi-ai's google.js getGoogleBudget() — 2.5-flash@medium => 8192.
165
+ const generationConfig = {
166
+ temperature,
167
+ responseMimeType: 'application/json',
168
+ thinkingConfig: { thinkingBudget: config?.thinkingBudget ?? 8192 },
169
+ ...(request.responseSchema
170
+ ? { responseSchema: request.responseSchema }
171
+ : {}),
172
+ };
173
+ // Gemini requires history to start with 'user' role — strip leading assistant messages
174
+ let trimmedHistory = request.history;
175
+ while (trimmedHistory.length > 0 && trimmedHistory[0].role !== 'user') {
176
+ trimmedHistory = trimmedHistory.slice(1);
177
+ }
178
+ const historyForChat = trimmedHistory.map(msg => {
179
+ if (msg.role === 'user') {
180
+ return { role: 'user', parts: [{ text: msg.content }] };
181
+ }
182
+ // In function-calling mode, the assistant content is the Archetype
183
+ // JSON wrapper `{message, actions: [{name, params}]}`. Parse and
184
+ // reconstruct structured parts so Gemini's conversation history
185
+ // contains real `functionCall` blocks, not a text dump. Without
186
+ // this, the model sees empty/opaque prior model turns and eventually
187
+ // produces MALFORMED_FUNCTION_CALL because it's guessing.
188
+ if (config?.useFunctionCalling) {
189
+ try {
190
+ const parsed = JSON.parse(msg.content);
191
+ const parts = [];
192
+ if (typeof parsed.message === 'string' && parsed.message.trim().length > 0) {
193
+ parts.push({ text: parsed.message });
194
+ }
195
+ if (Array.isArray(parsed.actions)) {
196
+ for (const a of parsed.actions) {
197
+ if (a && typeof a === 'object' && typeof a.name === 'string') {
198
+ parts.push({
199
+ functionCall: {
200
+ name: a.name,
201
+ args: a.params ?? {},
202
+ },
203
+ });
204
+ }
205
+ }
206
+ }
207
+ if (parts.length > 0) {
208
+ return { role: 'model', parts: parts };
209
+ }
210
+ }
211
+ catch {
212
+ // Fall through to plain text if parse fails
213
+ }
214
+ }
215
+ return { role: 'model', parts: [{ text: msg.content }] };
216
+ });
217
+ // Build message parts — multimodal when attachments present
218
+ const messageParts = request.attachments?.length
219
+ ? [
220
+ { text: request.message },
221
+ ...request.attachments.map(att => ({
222
+ inlineData: { mimeType: att.mimeType, data: att.data },
223
+ })),
224
+ ]
225
+ : request.message;
226
+ // Function-calling mode: use Gemini's native tools API when requested.
227
+ // This matches what pi (the reference coding agent) does — `tools:
228
+ // convertTools(...)` in its Gemini call — which unlocks the model's
229
+ // pretrained tool-use fluency rather than asking it to simulate tool
230
+ // calls inside a constrained JSON blob.
231
+ const fnDecls = config?.useFunctionCalling
232
+ ? extractFunctionDeclarationsFromSchema(request.responseSchema)
233
+ : null;
234
+ const requestFingerprint = {
235
+ sha256: sha256({
236
+ systemInstruction: request.systemPrompt,
237
+ generationConfig,
238
+ historyForChat,
239
+ messageParts: traceSafeMessageParts(messageParts),
240
+ responseSchema: request.responseSchema ?? null,
241
+ useFunctionCalling: Boolean(fnDecls && fnDecls.length > 0),
242
+ }),
243
+ systemPromptSha256: sha256(request.systemPrompt),
244
+ historySha256: sha256(historyForChat),
245
+ messageSha256: sha256(traceSafeMessageParts(messageParts)),
246
+ ...(request.responseSchema ? { responseSchemaSha256: sha256(request.responseSchema) } : {}),
247
+ historyCount: historyForChat.length,
248
+ attachmentCount: request.attachments?.length ?? 0,
249
+ };
250
+ const attempts = [];
251
+ /** Attempt a single chat call with the given model name */
252
+ const attempt = async (targetModel) => {
253
+ const modelInit = {
254
+ model: targetModel,
255
+ systemInstruction: request.systemPrompt,
256
+ generationConfig,
257
+ };
258
+ if (fnDecls && fnDecls.length > 0) {
259
+ // In function-calling mode, drop responseMimeType/responseSchema —
260
+ // those would conflict with tool-call output. Keep temperature +
261
+ // thinkingConfig.
262
+ const fnGenConfig = { ...generationConfig };
263
+ delete fnGenConfig.responseMimeType;
264
+ delete fnGenConfig.responseSchema;
265
+ modelInit.generationConfig = fnGenConfig;
266
+ modelInit.tools = [{ functionDeclarations: fnDecls }];
267
+ modelInit.toolConfig = {
268
+ functionCallingConfig: { mode: 'AUTO' },
269
+ };
270
+ // Archetype's default system prompt includes a JSON-output contract
271
+ // ("Return one raw JSON object with 'message' and optional 'actions'").
272
+ // With tools enabled, that directive competes with tool use — the
273
+ // model follows the explicit instruction and emits JSON as text
274
+ // instead of calling functions. Strip the JSON-output section.
275
+ modelInit.systemInstruction = stripJsonOutputDirective(request.systemPrompt);
276
+ }
277
+ const model = genAI.getGenerativeModel(modelInit);
278
+ const chat = model.startChat({ history: historyForChat });
279
+ const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Gemini request timed out after ${timeoutMs / 1000}s`)), timeoutMs));
280
+ const result = await Promise.race([
281
+ chat.sendMessage(messageParts),
282
+ timeoutPromise,
283
+ ]);
284
+ if (fnDecls && fnDecls.length > 0) {
285
+ // Collect text parts + function_call parts from the model's response,
286
+ // then reshape as Archetype's expected `{message, actions}` JSON text
287
+ // so chat.ts parses it the same way it parses JSON-mode output.
288
+ const parts = result.response.candidates?.[0]?.content?.parts ?? [];
289
+ let messageText = '';
290
+ const actions = [];
291
+ for (const p of parts) {
292
+ if (p.thought)
293
+ continue;
294
+ if (typeof p.text === 'string' && p.text.length > 0) {
295
+ messageText += p.text;
296
+ }
297
+ const fc = p.functionCall;
298
+ if (fc && typeof fc.name === 'string') {
299
+ actions.push({ name: fc.name, params: fc.args ?? {} });
300
+ }
301
+ }
302
+ if (!messageText && actions.length === 0) {
303
+ const finishReason = result.response.candidates?.[0]?.finishReason;
304
+ throw new Error(`Gemini returned empty response (finishReason: ${finishReason ?? 'unknown'}). Try again.`);
305
+ }
306
+ attempts.push({ model: targetModel, status: 'success' });
307
+ return { text: JSON.stringify({ message: messageText, actions }), model: targetModel, requestedModel: modelName, requestFingerprint, attempts: [...attempts] };
308
+ }
309
+ const text = result.response.text();
310
+ if (!text?.trim()) {
311
+ const finishReason = result.response.candidates?.[0]?.finishReason;
312
+ throw new Error(`Gemini returned empty response (finishReason: ${finishReason ?? 'unknown'}). Try again.`);
313
+ }
314
+ attempts.push({ model: targetModel, status: 'success' });
315
+ return { text, model: targetModel, requestedModel: modelName, requestFingerprint, attempts: [...attempts] };
316
+ };
317
+ // Cascade through model chain — each model gets full retry treatment
318
+ let lastError;
319
+ for (let m = 0; m < modelChain.length; m++) {
320
+ const currentModel = modelChain[m];
321
+ if (m > 0) {
322
+ console.warn(`[archetype] ${modelChain[m - 1]} exhausted ${maxRetries + 1} attempts — falling back to ${currentModel}`);
323
+ }
324
+ for (let i = 0; i <= maxRetries; i++) {
325
+ try {
326
+ return await attempt(currentModel);
327
+ }
328
+ catch (err) {
329
+ lastError = err instanceof Error ? err : new Error(String(err));
330
+ const retryable = isRetryable(lastError);
331
+ attempts.push({ model: currentModel, status: 'failed', error: lastError.message, retryable });
332
+ if (!retryable) {
333
+ // Schema/config errors (400) won't be fixed by retrying or falling back — fail immediately.
334
+ throw lastError;
335
+ }
336
+ if (i < maxRetries) {
337
+ const delayMs = backoffMs(i);
338
+ console.warn(`[archetype] ${currentModel} attempt ${i + 1} failed: ${lastError.message} — retrying in ${Math.round(delayMs / 1000)}s`);
339
+ await new Promise(r => setTimeout(r, delayMs));
340
+ continue;
341
+ }
342
+ break;
343
+ }
344
+ }
345
+ }
346
+ throw lastError;
347
+ },
348
+ };
349
+ }
350
+ export function isRetryable(err) {
351
+ const msg = err.message;
352
+ return msg.includes('503') || msg.includes('429') || msg.includes('overloaded')
353
+ || msg.includes('timed out') || msg.includes('UNAVAILABLE') || msg.includes('RESOURCE_EXHAUSTED')
354
+ // Empty/blocked responses (SAFETY, MAX_TOKENS, MALFORMED) are flaky per-model,
355
+ // per-attempt — without this the fallback ladder never engages on them.
356
+ || msg.includes('empty response');
357
+ }
358
+ function backoffMs(attempt) {
359
+ const base = attempt === 0 ? 1000 : 3000;
360
+ const jitter = Math.random() * 500;
361
+ return base + jitter;
362
+ }
363
+ /**
364
+ * Build the Gemini-compatible response schema for the standard chat format.
365
+ * Includes message, actions, outcomeNotes, and optional follow-ups/diagnostics.
366
+ *
367
+ * When actions are provided, builds per-action variants using anyOf so the
368
+ * model sees exact param types for each action (discriminated by name).
369
+ *
370
+ * Note: with large action sets (30+), Gemini may stringify params instead
371
+ * of returning objects. validateActions() handles this by parsing JSON
372
+ * strings before Zod validation.
373
+ */
374
+ export function buildGeminiResponseSchema(actions, options) {
375
+ const actionNames = actions ? Object.keys(actions) : [];
376
+ const hasEntities = options?.entities && Object.keys(options.entities).length > 0;
377
+ const focusMode = options?.promptMode === 'focus';
378
+ // Build action array items — per-action variants when schemas available
379
+ const variants = [];
380
+ if (actionNames.length > 0 && actions) {
381
+ for (const name of actionNames) {
382
+ const paramsSchema = zodToGeminiSchema(actions[name].schema);
383
+ // Carry the action's description on the variant so that native
384
+ // function-calling mode can surface it to the model as the tool's
385
+ // description (instead of a generic `Call ${name}.` placeholder).
386
+ // Without this, action descriptions are invisible to the model in
387
+ // both focus-mode prose and FC mode — the model decides based on
388
+ // name alone, which is why e.g. runTests was reached for without
389
+ // understanding its Node-only runtime contract.
390
+ const variant = {
391
+ type: SchemaType.OBJECT,
392
+ properties: {
393
+ name: {
394
+ type: SchemaType.STRING,
395
+ enum: [name],
396
+ },
397
+ params: paramsSchema,
398
+ },
399
+ required: ['name', 'params'],
400
+ };
401
+ if (actions[name].description) {
402
+ variant.description = actions[name].description;
403
+ }
404
+ variants.push(variant);
405
+ }
406
+ }
407
+ // Add crud variant when entities are declared — entity mutations flow through actions
408
+ if (hasEntities) {
409
+ const entityNames = Object.keys(options.entities);
410
+ variants.push({
411
+ type: SchemaType.OBJECT,
412
+ properties: {
413
+ name: {
414
+ type: SchemaType.STRING,
415
+ enum: ['crud'],
416
+ },
417
+ params: {
418
+ type: SchemaType.OBJECT,
419
+ properties: {
420
+ operation: {
421
+ type: SchemaType.STRING,
422
+ enum: ['create', 'update', 'delete'],
423
+ },
424
+ entity: {
425
+ type: SchemaType.STRING,
426
+ enum: entityNames,
427
+ },
428
+ id: {
429
+ type: SchemaType.STRING,
430
+ },
431
+ params: {
432
+ type: SchemaType.STRING,
433
+ },
434
+ },
435
+ required: ['operation', 'entity'],
436
+ },
437
+ },
438
+ required: ['name', 'params'],
439
+ });
440
+ }
441
+ let actionItems;
442
+ if (variants.length > 1) {
443
+ actionItems = { anyOf: variants };
444
+ }
445
+ else if (variants.length === 1) {
446
+ actionItems = variants[0];
447
+ }
448
+ else {
449
+ actionItems = {
450
+ type: SchemaType.OBJECT,
451
+ properties: {
452
+ name: {
453
+ type: SchemaType.STRING,
454
+ },
455
+ params: {
456
+ type: SchemaType.OBJECT,
457
+ properties: {},
458
+ },
459
+ },
460
+ required: ['name', 'params'],
461
+ };
462
+ }
463
+ const properties = focusMode
464
+ ? {
465
+ message: {
466
+ type: SchemaType.STRING,
467
+ },
468
+ actions: {
469
+ type: SchemaType.ARRAY,
470
+ // No maxItems cap. The loop executes actions sequentially in
471
+ // emission order (see runAutonomousLoop). Capping the schema
472
+ // to 1 contradicted the prompt-level "actions is a list"
473
+ // guidance and silently prevented the model from bundling a
474
+ // natural multi-action move (inspect + edit + verify).
475
+ items: actionItems,
476
+ },
477
+ // Mirror the chat-mode diagnostics channel: a lean escape hatch
478
+ // for "I want to do X but the tools don't express it." Without
479
+ // this, the focus prompt promised the channel but the schema
480
+ // rejected it.
481
+ diagnostics: {
482
+ type: SchemaType.ARRAY,
483
+ items: { type: SchemaType.STRING },
484
+ },
485
+ }
486
+ : {
487
+ message: {
488
+ type: SchemaType.STRING,
489
+ description: 'Your conversational response. Match length to complexity.',
490
+ },
491
+ actions: {
492
+ type: SchemaType.ARRAY,
493
+ items: actionItems,
494
+ },
495
+ attachmentNotes: {
496
+ type: SchemaType.ARRAY,
497
+ description: 'Optional compact factual carry-forward notes about uploaded images when they would materially help future turns without re-sending the raw image.',
498
+ items: { type: SchemaType.STRING },
499
+ },
500
+ followUps: {
501
+ type: SchemaType.ARRAY,
502
+ description: buildFollowUpsDescription(options?.followUpsDescription),
503
+ items: { type: SchemaType.STRING },
504
+ },
505
+ diagnostics: {
506
+ type: SchemaType.ARRAY,
507
+ description: 'Optional array of developer-facing observations about setup tensions. Empty array if nothing to flag.',
508
+ items: { type: SchemaType.STRING },
509
+ },
510
+ outcomeNotes: {
511
+ type: SchemaType.ARRAY,
512
+ description: 'Continuity notes for future-you. The conversation is always visible, but structured actions are stripped from history. These notes fill the gap — what your actions changed that isn\'t obvious from the chat alone. Describe what changed, not how (action names/schemas may change). Only for structured actions you included. Empty when no actions.',
513
+ items: { type: SchemaType.STRING },
514
+ },
515
+ };
516
+ return {
517
+ type: SchemaType.OBJECT,
518
+ properties,
519
+ required: focusMode ? ['message'] : ['message', 'actions', 'outcomeNotes'],
520
+ };
521
+ }
522
+ /**
523
+ * Build a Gemini-compatible response schema for silent action-only passes.
524
+ * Useful for internal maintenance flows like retrospective memory updates.
525
+ */
526
+ export function buildGeminiActionOnlySchema(actions, entities) {
527
+ const base = buildGeminiResponseSchema(actions, entities ? { entities } : undefined);
528
+ return {
529
+ type: SchemaType.OBJECT,
530
+ properties: {
531
+ actions: base.properties.actions,
532
+ diagnostics: base.properties.diagnostics,
533
+ },
534
+ };
535
+ }
536
+ //# sourceMappingURL=gemini.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gemini.js","sourceRoot":"","sources":["../../src/providers/gemini.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export type { LLMProvider, LLMProviderRequest, LLMProviderResponse } from '../types.js';
2
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":"AACA,YAAY,EAAE,WAAW,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/providers/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,8 @@
1
+ import type { z } from 'zod';
2
+ /**
3
+ * Convert a Zod schema to a Gemini-compatible schema object.
4
+ * Supports both Zod v3 (typeName) and v4 (type string + element/shape).
5
+ * Falls back to STRING for unknown types (safe default — model will parse from text).
6
+ */
7
+ export declare function zodToGeminiSchema(zodType: z.ZodType): Record<string, unknown>;
8
+ //# sourceMappingURL=zod-to-gemini.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"zod-to-gemini.d.ts","sourceRoot":"","sources":["../../src/providers/zod-to-gemini.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAuD5B;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA+F7E"}