@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.
- package/LICENSE +21 -0
- package/README.md +475 -0
- package/dist/audit/audit-persona.d.ts +163 -0
- package/dist/audit/audit-persona.d.ts.map +1 -0
- package/dist/audit/audit-persona.js +415 -0
- package/dist/audit/audit-persona.js.map +1 -0
- package/dist/audit/brain-reflection.d.ts +33 -0
- package/dist/audit/brain-reflection.d.ts.map +1 -0
- package/dist/audit/brain-reflection.js +148 -0
- package/dist/audit/brain-reflection.js.map +1 -0
- package/dist/audit/conversation-audit.d.ts +12 -0
- package/dist/audit/conversation-audit.d.ts.map +1 -0
- package/dist/audit/conversation-audit.js +76 -0
- package/dist/audit/conversation-audit.js.map +1 -0
- package/dist/audit/prompt-audit.d.ts +10 -0
- package/dist/audit/prompt-audit.d.ts.map +1 -0
- package/dist/audit/prompt-audit.js +153 -0
- package/dist/audit/prompt-audit.js.map +1 -0
- package/dist/audit/prompt-dump.d.ts +137 -0
- package/dist/audit/prompt-dump.d.ts.map +1 -0
- package/dist/audit/prompt-dump.js +269 -0
- package/dist/audit/prompt-dump.js.map +1 -0
- package/dist/audit/trace-integrity.d.ts +33 -0
- package/dist/audit/trace-integrity.d.ts.map +1 -0
- package/dist/audit/trace-integrity.js +109 -0
- package/dist/audit/trace-integrity.js.map +1 -0
- package/dist/audit/types.d.ts +92 -0
- package/dist/audit/types.d.ts.map +1 -0
- package/dist/audit/types.js +2 -0
- package/dist/audit/types.js.map +1 -0
- package/dist/audit/version.d.ts +14 -0
- package/dist/audit/version.d.ts.map +1 -0
- package/dist/audit/version.js +65 -0
- package/dist/audit/version.js.map +1 -0
- package/dist/brain.d.ts +7 -0
- package/dist/brain.d.ts.map +1 -0
- package/dist/brain.js +83 -0
- package/dist/brain.js.map +1 -0
- package/dist/builder/actions.d.ts +60 -0
- package/dist/builder/actions.d.ts.map +1 -0
- package/dist/builder/actions.js +257 -0
- package/dist/builder/actions.js.map +1 -0
- package/dist/builder/browser.d.ts +140 -0
- package/dist/builder/browser.d.ts.map +1 -0
- package/dist/builder/browser.js +232 -0
- package/dist/builder/browser.js.map +1 -0
- package/dist/builder/executor.d.ts +228 -0
- package/dist/builder/executor.d.ts.map +1 -0
- package/dist/builder/executor.js +1548 -0
- package/dist/builder/executor.js.map +1 -0
- package/dist/builder/index.d.ts +24 -0
- package/dist/builder/index.d.ts.map +1 -0
- package/dist/builder/index.js +24 -0
- package/dist/builder/index.js.map +1 -0
- package/dist/builder/node-test-discovery.d.ts +13 -0
- package/dist/builder/node-test-discovery.d.ts.map +1 -0
- package/dist/builder/node-test-discovery.js +45 -0
- package/dist/builder/node-test-discovery.js.map +1 -0
- package/dist/builder/sandbox.d.ts +172 -0
- package/dist/builder/sandbox.d.ts.map +1 -0
- package/dist/builder/sandbox.js +294 -0
- package/dist/builder/sandbox.js.map +1 -0
- package/dist/builder/workspace-files.d.ts +63 -0
- package/dist/builder/workspace-files.d.ts.map +1 -0
- package/dist/builder/workspace-files.js +190 -0
- package/dist/builder/workspace-files.js.map +1 -0
- package/dist/core/actions.d.ts +55 -0
- package/dist/core/actions.d.ts.map +1 -0
- package/dist/core/actions.js +311 -0
- package/dist/core/actions.js.map +1 -0
- package/dist/core/attachment-notes.d.ts +7 -0
- package/dist/core/attachment-notes.d.ts.map +1 -0
- package/dist/core/attachment-notes.js +38 -0
- package/dist/core/attachment-notes.js.map +1 -0
- package/dist/core/context.d.ts +10 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +108 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/crud-prompt.d.ts +16 -0
- package/dist/core/crud-prompt.d.ts.map +1 -0
- package/dist/core/crud-prompt.js +268 -0
- package/dist/core/crud-prompt.js.map +1 -0
- package/dist/core/crud-schema.d.ts +12 -0
- package/dist/core/crud-schema.d.ts.map +1 -0
- package/dist/core/crud-schema.js +42 -0
- package/dist/core/crud-schema.js.map +1 -0
- package/dist/core/effective-config.d.ts +13 -0
- package/dist/core/effective-config.d.ts.map +1 -0
- package/dist/core/effective-config.js +33 -0
- package/dist/core/effective-config.js.map +1 -0
- package/dist/core/entities.d.ts +82 -0
- package/dist/core/entities.d.ts.map +1 -0
- package/dist/core/entities.js +116 -0
- package/dist/core/entities.js.map +1 -0
- package/dist/core/entity-helpers.d.ts +47 -0
- package/dist/core/entity-helpers.d.ts.map +1 -0
- package/dist/core/entity-helpers.js +122 -0
- package/dist/core/entity-helpers.js.map +1 -0
- package/dist/core/entity-registry.d.ts +47 -0
- package/dist/core/entity-registry.d.ts.map +1 -0
- package/dist/core/entity-registry.js +54 -0
- package/dist/core/entity-registry.js.map +1 -0
- package/dist/core/eq.d.ts +13 -0
- package/dist/core/eq.d.ts.map +1 -0
- package/dist/core/eq.js +41 -0
- package/dist/core/eq.js.map +1 -0
- package/dist/core/focus-context.d.ts +19 -0
- package/dist/core/focus-context.d.ts.map +1 -0
- package/dist/core/focus-context.js +46 -0
- package/dist/core/focus-context.js.map +1 -0
- package/dist/core/focus-mode-actions.d.ts +23 -0
- package/dist/core/focus-mode-actions.d.ts.map +1 -0
- package/dist/core/focus-mode-actions.js +74 -0
- package/dist/core/focus-mode-actions.js.map +1 -0
- package/dist/core/greeting.d.ts +10 -0
- package/dist/core/greeting.d.ts.map +1 -0
- package/dist/core/greeting.js +41 -0
- package/dist/core/greeting.js.map +1 -0
- package/dist/core/identity.d.ts +13 -0
- package/dist/core/identity.d.ts.map +1 -0
- package/dist/core/identity.js +54 -0
- package/dist/core/identity.js.map +1 -0
- package/dist/core/knowledge.d.ts +10 -0
- package/dist/core/knowledge.d.ts.map +1 -0
- package/dist/core/knowledge.js +40 -0
- package/dist/core/knowledge.js.map +1 -0
- package/dist/core/memory-actions.d.ts +38 -0
- package/dist/core/memory-actions.d.ts.map +1 -0
- package/dist/core/memory-actions.js +181 -0
- package/dist/core/memory-actions.js.map +1 -0
- package/dist/core/memory.d.ts +35 -0
- package/dist/core/memory.d.ts.map +1 -0
- package/dist/core/memory.js +168 -0
- package/dist/core/memory.js.map +1 -0
- package/dist/core/peer-actions.d.ts +15 -0
- package/dist/core/peer-actions.d.ts.map +1 -0
- package/dist/core/peer-actions.js +33 -0
- package/dist/core/peer-actions.js.map +1 -0
- package/dist/core/prompt-builder.d.ts +46 -0
- package/dist/core/prompt-builder.d.ts.map +1 -0
- package/dist/core/prompt-builder.js +543 -0
- package/dist/core/prompt-builder.js.map +1 -0
- package/dist/core/prompt-mode.d.ts +3 -0
- package/dist/core/prompt-mode.d.ts.map +1 -0
- package/dist/core/prompt-mode.js +6 -0
- package/dist/core/prompt-mode.js.map +1 -0
- package/dist/core/prompted-turn.d.ts +6 -0
- package/dist/core/prompted-turn.d.ts.map +1 -0
- package/dist/core/prompted-turn.js +48 -0
- package/dist/core/prompted-turn.js.map +1 -0
- package/dist/core/request-builder.d.ts +14 -0
- package/dist/core/request-builder.d.ts.map +1 -0
- package/dist/core/request-builder.js +64 -0
- package/dist/core/request-builder.js.map +1 -0
- package/dist/core/session-routing.d.ts +23 -0
- package/dist/core/session-routing.d.ts.map +1 -0
- package/dist/core/session-routing.js +59 -0
- package/dist/core/session-routing.js.map +1 -0
- package/dist/core/voice.d.ts +6 -0
- package/dist/core/voice.d.ts.map +1 -0
- package/dist/core/voice.js +30 -0
- package/dist/core/voice.js.map +1 -0
- package/dist/engine/chat.d.ts +45 -0
- package/dist/engine/chat.d.ts.map +1 -0
- package/dist/engine/chat.js +308 -0
- package/dist/engine/chat.js.map +1 -0
- package/dist/engine/continuity.d.ts +107 -0
- package/dist/engine/continuity.d.ts.map +1 -0
- package/dist/engine/continuity.js +320 -0
- package/dist/engine/continuity.js.map +1 -0
- package/dist/engine/crud.d.ts +62 -0
- package/dist/engine/crud.d.ts.map +1 -0
- package/dist/engine/crud.js +260 -0
- package/dist/engine/crud.js.map +1 -0
- package/dist/engine/side-effects.d.ts +93 -0
- package/dist/engine/side-effects.d.ts.map +1 -0
- package/dist/engine/side-effects.js +271 -0
- package/dist/engine/side-effects.js.map +1 -0
- package/dist/engine/staging.d.ts +29 -0
- package/dist/engine/staging.d.ts.map +1 -0
- package/dist/engine/staging.js +159 -0
- package/dist/engine/staging.js.map +1 -0
- package/dist/engine/working-set.d.ts +18 -0
- package/dist/engine/working-set.d.ts.map +1 -0
- package/dist/engine/working-set.js +246 -0
- package/dist/engine/working-set.js.map +1 -0
- package/dist/evals/action-contracts.d.ts +40 -0
- package/dist/evals/action-contracts.d.ts.map +1 -0
- package/dist/evals/action-contracts.js +208 -0
- package/dist/evals/action-contracts.js.map +1 -0
- package/dist/evals/brain-bloat.d.ts +39 -0
- package/dist/evals/brain-bloat.d.ts.map +1 -0
- package/dist/evals/brain-bloat.js +167 -0
- package/dist/evals/brain-bloat.js.map +1 -0
- package/dist/evals/brain-prescriptions.d.ts +30 -0
- package/dist/evals/brain-prescriptions.d.ts.map +1 -0
- package/dist/evals/brain-prescriptions.js +148 -0
- package/dist/evals/brain-prescriptions.js.map +1 -0
- package/dist/evals/cross-layer-duplicates.d.ts +49 -0
- package/dist/evals/cross-layer-duplicates.d.ts.map +1 -0
- package/dist/evals/cross-layer-duplicates.js +289 -0
- package/dist/evals/cross-layer-duplicates.js.map +1 -0
- package/dist/evals/entity-visibility.d.ts +28 -0
- package/dist/evals/entity-visibility.d.ts.map +1 -0
- package/dist/evals/entity-visibility.js +216 -0
- package/dist/evals/entity-visibility.js.map +1 -0
- package/dist/evals/index.d.ts +19 -0
- package/dist/evals/index.d.ts.map +1 -0
- package/dist/evals/index.js +11 -0
- package/dist/evals/index.js.map +1 -0
- package/dist/evals/judge.d.ts +22 -0
- package/dist/evals/judge.d.ts.map +1 -0
- package/dist/evals/judge.js +337 -0
- package/dist/evals/judge.js.map +1 -0
- package/dist/evals/operational-contract.d.ts +40 -0
- package/dist/evals/operational-contract.d.ts.map +1 -0
- package/dist/evals/operational-contract.js +115 -0
- package/dist/evals/operational-contract.js.map +1 -0
- package/dist/evals/prompt-content.d.ts +14 -0
- package/dist/evals/prompt-content.d.ts.map +1 -0
- package/dist/evals/prompt-content.js +104 -0
- package/dist/evals/prompt-content.js.map +1 -0
- package/dist/evals/runtime.d.ts +4 -0
- package/dist/evals/runtime.d.ts.map +1 -0
- package/dist/evals/runtime.js +197 -0
- package/dist/evals/runtime.js.map +1 -0
- package/dist/evals/sample-projects.d.ts +143 -0
- package/dist/evals/sample-projects.d.ts.map +1 -0
- package/dist/evals/sample-projects.js +644 -0
- package/dist/evals/sample-projects.js.map +1 -0
- package/dist/evals/types.d.ts +88 -0
- package/dist/evals/types.d.ts.map +1 -0
- package/dist/evals/types.js +2 -0
- package/dist/evals/types.js.map +1 -0
- package/dist/foundation/index.d.ts +158 -0
- package/dist/foundation/index.d.ts.map +1 -0
- package/dist/foundation/index.js +256 -0
- package/dist/foundation/index.js.map +1 -0
- package/dist/index.d.ts +223 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +998 -0
- package/dist/index.js.map +1 -0
- package/dist/managed/autonomous-loop.d.ts +199 -0
- package/dist/managed/autonomous-loop.d.ts.map +1 -0
- package/dist/managed/autonomous-loop.js +451 -0
- package/dist/managed/autonomous-loop.js.map +1 -0
- package/dist/managed/conversation.d.ts +20 -0
- package/dist/managed/conversation.d.ts.map +1 -0
- package/dist/managed/conversation.js +40 -0
- package/dist/managed/conversation.js.map +1 -0
- package/dist/managed/knowledge.d.ts +7 -0
- package/dist/managed/knowledge.d.ts.map +1 -0
- package/dist/managed/knowledge.js +174 -0
- package/dist/managed/knowledge.js.map +1 -0
- package/dist/managed/memory-manager.d.ts +7 -0
- package/dist/managed/memory-manager.d.ts.map +1 -0
- package/dist/managed/memory-manager.js +18 -0
- package/dist/managed/memory-manager.js.map +1 -0
- package/dist/managed/memory-review.d.ts +45 -0
- package/dist/managed/memory-review.d.ts.map +1 -0
- package/dist/managed/memory-review.js +130 -0
- package/dist/managed/memory-review.js.map +1 -0
- package/dist/managed/storage.d.ts +2 -0
- package/dist/managed/storage.d.ts.map +1 -0
- package/dist/managed/storage.js +2 -0
- package/dist/managed/storage.js.map +1 -0
- package/dist/managed/work-history.d.ts +23 -0
- package/dist/managed/work-history.d.ts.map +1 -0
- package/dist/managed/work-history.js +31 -0
- package/dist/managed/work-history.js.map +1 -0
- package/dist/observability/index.d.ts +15 -0
- package/dist/observability/index.d.ts.map +1 -0
- package/dist/observability/index.js +15 -0
- package/dist/observability/index.js.map +1 -0
- package/dist/observability/render-run-markdown.d.ts +90 -0
- package/dist/observability/render-run-markdown.d.ts.map +1 -0
- package/dist/observability/render-run-markdown.js +231 -0
- package/dist/observability/render-run-markdown.js.map +1 -0
- package/dist/observability/turn-reporter.d.ts +20 -0
- package/dist/observability/turn-reporter.d.ts.map +1 -0
- package/dist/observability/turn-reporter.js +106 -0
- package/dist/observability/turn-reporter.js.map +1 -0
- package/dist/persona.d.ts +49 -0
- package/dist/persona.d.ts.map +1 -0
- package/dist/persona.js +287 -0
- package/dist/persona.js.map +1 -0
- package/dist/playbook/defaults.d.ts +25 -0
- package/dist/playbook/defaults.d.ts.map +1 -0
- package/dist/playbook/defaults.js +108 -0
- package/dist/playbook/defaults.js.map +1 -0
- package/dist/playbook/invariants.d.ts +244 -0
- package/dist/playbook/invariants.d.ts.map +1 -0
- package/dist/playbook/invariants.js +259 -0
- package/dist/playbook/invariants.js.map +1 -0
- package/dist/playbook/templates.d.ts +7 -0
- package/dist/playbook/templates.d.ts.map +1 -0
- package/dist/playbook/templates.js +437 -0
- package/dist/playbook/templates.js.map +1 -0
- package/dist/providers/gemini.d.ts +73 -0
- package/dist/providers/gemini.d.ts.map +1 -0
- package/dist/providers/gemini.js +536 -0
- package/dist/providers/gemini.js.map +1 -0
- package/dist/providers/types.d.ts +2 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +2 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/providers/zod-to-gemini.d.ts +8 -0
- package/dist/providers/zod-to-gemini.d.ts.map +1 -0
- package/dist/providers/zod-to-gemini.js +148 -0
- package/dist/providers/zod-to-gemini.js.map +1 -0
- package/dist/samples/pm-spec-agent.d.ts +22 -0
- package/dist/samples/pm-spec-agent.d.ts.map +1 -0
- package/dist/samples/pm-spec-agent.js +53 -0
- package/dist/samples/pm-spec-agent.js.map +1 -0
- package/dist/types.d.ts +920 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- 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 @@
|
|
|
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 @@
|
|
|
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"}
|