@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,311 @@
|
|
|
1
|
+
import { zodToDescription } from './crud-prompt.js';
|
|
2
|
+
/**
|
|
3
|
+
* Extract a compact param signature from a Zod schema for prompt inclusion.
|
|
4
|
+
* Ensures the model knows exact field names even when params get stringified.
|
|
5
|
+
* Handles both Zod v3 (shape is function, desc in _def) and v4 (shape is object, desc as property).
|
|
6
|
+
*/
|
|
7
|
+
function summarizeParams(schema) {
|
|
8
|
+
return `params: ${zodToDescription(schema)}`;
|
|
9
|
+
}
|
|
10
|
+
function buildExampleValue(schema) {
|
|
11
|
+
const def = schema._def;
|
|
12
|
+
if (!def)
|
|
13
|
+
return '<value>';
|
|
14
|
+
const typeName = typeof def.typeName === 'string'
|
|
15
|
+
? def.typeName
|
|
16
|
+
: typeof def.type === 'string'
|
|
17
|
+
? ({
|
|
18
|
+
string: 'ZodString',
|
|
19
|
+
number: 'ZodNumber',
|
|
20
|
+
boolean: 'ZodBoolean',
|
|
21
|
+
array: 'ZodArray',
|
|
22
|
+
object: 'ZodObject',
|
|
23
|
+
optional: 'ZodOptional',
|
|
24
|
+
nullable: 'ZodNullable',
|
|
25
|
+
enum: 'ZodEnum',
|
|
26
|
+
literal: 'ZodLiteral',
|
|
27
|
+
}[def.type] ?? '')
|
|
28
|
+
: '';
|
|
29
|
+
switch (typeName) {
|
|
30
|
+
case 'ZodString':
|
|
31
|
+
return '<string>';
|
|
32
|
+
case 'ZodNumber':
|
|
33
|
+
return 1;
|
|
34
|
+
case 'ZodBoolean':
|
|
35
|
+
return true;
|
|
36
|
+
case 'ZodLiteral':
|
|
37
|
+
return def.value;
|
|
38
|
+
case 'ZodEnum': {
|
|
39
|
+
const values = def.values ?? def.entries;
|
|
40
|
+
const arr = Array.isArray(values) ? values : Object.keys(values);
|
|
41
|
+
return arr[0] ?? '<value>';
|
|
42
|
+
}
|
|
43
|
+
case 'ZodOptional':
|
|
44
|
+
case 'ZodNullable': {
|
|
45
|
+
const inner = def.innerType;
|
|
46
|
+
if (inner && typeof inner === 'object' && '_def' in inner) {
|
|
47
|
+
return buildExampleValue(inner);
|
|
48
|
+
}
|
|
49
|
+
return '<value>';
|
|
50
|
+
}
|
|
51
|
+
case 'ZodArray': {
|
|
52
|
+
const item = (def.type && typeof def.type === 'object' ? def.type : null) ?? def.element;
|
|
53
|
+
if (item && typeof item === 'object' && '_def' in item) {
|
|
54
|
+
return [buildExampleValue(item)];
|
|
55
|
+
}
|
|
56
|
+
return ['<value>'];
|
|
57
|
+
}
|
|
58
|
+
case 'ZodObject': {
|
|
59
|
+
const rawShape = def.shape;
|
|
60
|
+
const shape = typeof rawShape === 'function' ? rawShape() : rawShape;
|
|
61
|
+
if (!shape || typeof shape !== 'object')
|
|
62
|
+
return {};
|
|
63
|
+
const example = {};
|
|
64
|
+
for (const [key, value] of Object.entries(shape)) {
|
|
65
|
+
example[key] = buildExampleValue(value);
|
|
66
|
+
}
|
|
67
|
+
return example;
|
|
68
|
+
}
|
|
69
|
+
default:
|
|
70
|
+
return '<value>';
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
function buildExampleAction(actions) {
|
|
74
|
+
const first = Object.entries(actions)[0];
|
|
75
|
+
if (!first) {
|
|
76
|
+
return '{ "name": "<actionName>", "params": { ... } }';
|
|
77
|
+
}
|
|
78
|
+
const [name, def] = first;
|
|
79
|
+
const params = def.exampleParams ?? buildExampleValue(def.schema);
|
|
80
|
+
return JSON.stringify({ name, params });
|
|
81
|
+
}
|
|
82
|
+
function buildExampleActionFor(name, def) {
|
|
83
|
+
const params = def.exampleParams ?? buildExampleValue(def.schema);
|
|
84
|
+
return JSON.stringify({ name, params });
|
|
85
|
+
}
|
|
86
|
+
function summarizeShape(schema) {
|
|
87
|
+
const def = schema._def;
|
|
88
|
+
const rawShape = def?.shape;
|
|
89
|
+
const shape = typeof rawShape === 'function' ? rawShape() : rawShape;
|
|
90
|
+
if (shape && typeof shape === 'object') {
|
|
91
|
+
// z.object — list fields, recurse into arrays
|
|
92
|
+
const fields = Object.entries(shape).map(([key, val]) => {
|
|
93
|
+
const inner = summarizeInnerType(val);
|
|
94
|
+
if (inner)
|
|
95
|
+
return `${key}: ${inner}`;
|
|
96
|
+
const desc = val.description
|
|
97
|
+
?? val._def?.description;
|
|
98
|
+
return desc ? `${key} (${desc})` : key;
|
|
99
|
+
});
|
|
100
|
+
return `{ ${fields.join(', ')} }`;
|
|
101
|
+
}
|
|
102
|
+
return '{}';
|
|
103
|
+
}
|
|
104
|
+
function summarizeInnerType(schema) {
|
|
105
|
+
const def = schema._def;
|
|
106
|
+
if (!def)
|
|
107
|
+
return null;
|
|
108
|
+
// z.array — unwrap to show item shape (Zod v3: _def.type is ZodType, v4: _def.element is ZodType)
|
|
109
|
+
const rawType = def.type;
|
|
110
|
+
const itemType = (rawType && typeof rawType === 'object' ? rawType : null) ?? def.element;
|
|
111
|
+
if (itemType && typeof itemType === 'object' && '_def' in itemType) {
|
|
112
|
+
const inner = summarizeShape(itemType);
|
|
113
|
+
if (inner !== '{}')
|
|
114
|
+
return `[${inner}]`;
|
|
115
|
+
}
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
/**
|
|
119
|
+
* Build the actions rules section of the system prompt from action definitions.
|
|
120
|
+
* Each action's description IS a behavioral nudge (per playbook §4).
|
|
121
|
+
*/
|
|
122
|
+
export function buildActionsBlock(actions, promptMode = 'conversation', contractStyle = 'full') {
|
|
123
|
+
if (!actions || Object.keys(actions).length === 0)
|
|
124
|
+
return '';
|
|
125
|
+
const lines = ['--- AVAILABLE ACTIONS ---'];
|
|
126
|
+
for (const [name, def] of Object.entries(actions)) {
|
|
127
|
+
if (promptMode === 'focus') {
|
|
128
|
+
// Focus mode is lean on prose but must still communicate tool
|
|
129
|
+
// semantics. Showing `- ${name}` alone forces the model to infer
|
|
130
|
+
// behavior from the name (e.g. runTests was treated as a generic
|
|
131
|
+
// "run my tests" tool until the model hit its Node-only runtime
|
|
132
|
+
// contract at turn 5). Include the description so the contract
|
|
133
|
+
// travels with the name. Params live in the native function-
|
|
134
|
+
// calling schema; this line carries the behavioral nuance.
|
|
135
|
+
if (def.description && def.description.trim().length > 0) {
|
|
136
|
+
lines.push(`- ${name}: ${def.description}`);
|
|
137
|
+
}
|
|
138
|
+
else {
|
|
139
|
+
lines.push(`- ${name}`);
|
|
140
|
+
}
|
|
141
|
+
continue;
|
|
142
|
+
}
|
|
143
|
+
const confidenceLabel = confidenceToLabel(def.confidence, promptMode);
|
|
144
|
+
const paramSig = summarizeParams(def.schema);
|
|
145
|
+
lines.push(`- ${name}`);
|
|
146
|
+
lines.push(` ${contractStyle === 'lean' ? 'use' : 'when'}: ${def.description}`);
|
|
147
|
+
if (paramSig) {
|
|
148
|
+
lines.push(` ${paramSig}`);
|
|
149
|
+
}
|
|
150
|
+
lines.push(` example: ${buildExampleActionFor(name, def)}`);
|
|
151
|
+
if (contractStyle === 'full') {
|
|
152
|
+
lines.push(promptMode === 'operational'
|
|
153
|
+
? ` execution: ${def.confidence} (${confidenceLabel})`
|
|
154
|
+
: ` confidence: ${def.confidence} (${confidenceLabel})`);
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
if (promptMode === 'focus') {
|
|
158
|
+
const toolNotes = [];
|
|
159
|
+
toolNotes.push("- Actions are attempts: any file, browser, test, finish, or handoff action can succeed or fail. You choose every action and action parameter before seeing same-turn outcomes. After each turn, the next turn's input includes outcome notes and action results from what actually happened — for example files written, bytes, match counts, exit codes, failed clicks, skipped finish attempts, or carried-forward read results. That continuity is the state of the world; raw action calls are not.");
|
|
160
|
+
toolNotes.push("- A same-turn visible completion, verification, or handoff message cannot reflect outcomes you have not seen yet. If the message depends on verification actions in this turn, run the verification first, let the outcomes return in the next turn, then decide what to say.");
|
|
161
|
+
if (hasFileMutationAction(actions) && 'browserOpen' in actions) {
|
|
162
|
+
toolNotes.push('- Workspace files and live browser pages are separate surfaces: file changes update the workspace; use browserOpen to load or reload those files before browser actions inspect the updated page.');
|
|
163
|
+
}
|
|
164
|
+
if (toolNotes.length > 0) {
|
|
165
|
+
lines.push('');
|
|
166
|
+
lines.push('How the tools behave here:');
|
|
167
|
+
lines.push(...toolNotes);
|
|
168
|
+
}
|
|
169
|
+
return lines.join('\n');
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
lines.push('');
|
|
173
|
+
lines.push('--- ACTION RESPONSE CONTRACT ---');
|
|
174
|
+
lines.push('actions: [{ "name": "<actionName>", "params": { ... } }]');
|
|
175
|
+
if (contractStyle === 'full') {
|
|
176
|
+
lines.push('exact keys: name, params');
|
|
177
|
+
}
|
|
178
|
+
lines.push(`example item: ${buildExampleAction(actions)}`);
|
|
179
|
+
lines.push(`valid action names: ${Object.keys(actions).join(', ')}`);
|
|
180
|
+
lines.push('Action order: actions are attempts that execute in array order within this turn, and any action can succeed or fail. Later actions run after earlier state changes in the surfaces those actions actually changed, such as files written earlier in the list, but you choose the whole array before any action outcomes are known. Include a later action when it remains the right next action without seeing those outcomes; when a result could change what you do next, let that result return on the next turn first. A same-turn visible completion, verification, or handoff message cannot reflect outcomes you have not seen yet.');
|
|
181
|
+
if (hasFileMutationAction(actions) && 'browserOpen' in actions) {
|
|
182
|
+
lines.push('Workspace files and live browser pages are separate surfaces: file changes update the workspace; use browserOpen to load or reload those files before browser actions inspect the updated page.');
|
|
183
|
+
}
|
|
184
|
+
if (contractStyle === 'full') {
|
|
185
|
+
lines.push('params may only contain keys declared in that action\'s params signature');
|
|
186
|
+
lines.push('if an additional action or param key is uncertain, omit it rather than inventing a nearby one');
|
|
187
|
+
lines.push('');
|
|
188
|
+
lines.push(promptMode === 'operational' ? 'Execution policy:' : 'Confidence levels:');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
if (contractStyle === 'full') {
|
|
192
|
+
if (promptMode === 'operational') {
|
|
193
|
+
lines.push('- low = include the action directly in this turn');
|
|
194
|
+
lines.push('- medium = include the action directly and mention it in message if clarity helps');
|
|
195
|
+
lines.push('- high = do not execute it automatically in this turn; explain it in message as a pending move');
|
|
196
|
+
}
|
|
197
|
+
else {
|
|
198
|
+
lines.push('- low = just do it');
|
|
199
|
+
lines.push('- medium = mention it');
|
|
200
|
+
lines.push('- high = confirm first');
|
|
201
|
+
}
|
|
202
|
+
lines.push('');
|
|
203
|
+
if (promptMode === 'operational') {
|
|
204
|
+
lines.push('Only include actions when the live operational turn should actually change state.');
|
|
205
|
+
lines.push('An action list may contain one action or many related actions; it is the complete set chosen for this turn.');
|
|
206
|
+
}
|
|
207
|
+
else {
|
|
208
|
+
lines.push('Only include actions when warranted — your default is conversation, not action.');
|
|
209
|
+
lines.push('An action list may contain one action or many related actions; it is the complete set chosen for this turn.');
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
return lines.join('\n');
|
|
213
|
+
}
|
|
214
|
+
function hasFileMutationAction(actions) {
|
|
215
|
+
return ['applyPatch', 'writeFile', 'editFile', 'deleteFile'].some(name => name in actions);
|
|
216
|
+
}
|
|
217
|
+
function confidenceToLabel(confidence, promptMode) {
|
|
218
|
+
switch (confidence) {
|
|
219
|
+
case 'low': return 'just do it';
|
|
220
|
+
case 'medium': return promptMode === 'operational' ? 'mention it in message' : promptMode === 'focus' ? 'use only if clearly warranted' : 'mention it';
|
|
221
|
+
case 'high': return promptMode === 'operational' ? 'pending move' : promptMode === 'focus' ? 'avoid unless you are certain' : 'confirm first';
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Build an annotation string for a completed action (for history storage).
|
|
226
|
+
* Annotations are appended to stored messages so the AI doesn't re-process.
|
|
227
|
+
*/
|
|
228
|
+
export function buildActionAnnotation(actionName, params) {
|
|
229
|
+
const summary = Object.entries(params)
|
|
230
|
+
.filter(([, v]) => v != null)
|
|
231
|
+
.map(([k, v]) => `${k}=${typeof v === 'string' ? v : JSON.stringify(v)}`)
|
|
232
|
+
.join(', ');
|
|
233
|
+
return `${actionName}: ${summary}`;
|
|
234
|
+
}
|
|
235
|
+
/**
|
|
236
|
+
* Build a combined annotation string for multiple actions.
|
|
237
|
+
*/
|
|
238
|
+
export function buildAnnotations(actions) {
|
|
239
|
+
return actions.map(a => buildActionAnnotation(a.name, a.params));
|
|
240
|
+
}
|
|
241
|
+
/**
|
|
242
|
+
* Annotate a message with outcome notes and raw action annotations for storage.
|
|
243
|
+
*
|
|
244
|
+
* Two-layer annotation system:
|
|
245
|
+
* - `---outcomes:` — AI-written outcome notes, preserved in LLM history so the AI
|
|
246
|
+
* knows what it did on previous turns. Not shown to the user.
|
|
247
|
+
* - `---actions:` — Raw action data for debugging and UI pills. Stripped before
|
|
248
|
+
* the AI sees history (to prevent API format leakage into future turns).
|
|
249
|
+
*
|
|
250
|
+
* Ordering matters: outcomes BEFORE actions, so stripping ---actions: preserves outcomes.
|
|
251
|
+
*/
|
|
252
|
+
export function annotateMessage(message, annotations, outcomeNotes) {
|
|
253
|
+
let result = message;
|
|
254
|
+
if (outcomeNotes && outcomeNotes.length > 0) {
|
|
255
|
+
result += `\n---outcomes: ${outcomeNotes.join('. ')}`;
|
|
256
|
+
}
|
|
257
|
+
if (annotations.length > 0) {
|
|
258
|
+
result += `\n---actions: ${annotations.join(' | ')}`;
|
|
259
|
+
}
|
|
260
|
+
return result;
|
|
261
|
+
}
|
|
262
|
+
/**
|
|
263
|
+
* Build annotation text for peer consultations that occurred mid-turn.
|
|
264
|
+
* Appended to the assistant message so the persona sees consultation context
|
|
265
|
+
* in its history on subsequent turns.
|
|
266
|
+
*/
|
|
267
|
+
export function buildPeerAnnotation(consultations) {
|
|
268
|
+
if (consultations.length === 0)
|
|
269
|
+
return '';
|
|
270
|
+
return consultations.map(c => {
|
|
271
|
+
const preview = c.response.length > 500
|
|
272
|
+
? c.response.slice(0, 500) + '…'
|
|
273
|
+
: c.response;
|
|
274
|
+
return `---consulted: ${c.peer}---\nQuery: ${c.query}\nResponse: ${preview}\n---end consultation---`;
|
|
275
|
+
}).join('\n');
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Strip all annotation markers from a message for user-facing display.
|
|
279
|
+
* Removes both `---outcomes:` and `---actions:` — the user sees neither.
|
|
280
|
+
* Use this when returning stored messages to the frontend.
|
|
281
|
+
*/
|
|
282
|
+
export function stripAnnotationsForDisplay(content) {
|
|
283
|
+
// Find the earliest annotation marker and strip from there
|
|
284
|
+
const markers = ['\n---outcomes:', '\n---actions:', '\n---consulted:'];
|
|
285
|
+
let earliest = -1;
|
|
286
|
+
for (const marker of markers) {
|
|
287
|
+
const idx = content.indexOf(marker);
|
|
288
|
+
if (idx !== -1 && (earliest === -1 || idx < earliest)) {
|
|
289
|
+
earliest = idx;
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
return earliest !== -1 ? content.slice(0, earliest).trimEnd() : content;
|
|
293
|
+
}
|
|
294
|
+
/**
|
|
295
|
+
* Strip `---actions:` suffixes from assistant messages in history.
|
|
296
|
+
* Preserves `---outcomes:` so the AI knows what it did on previous turns.
|
|
297
|
+
*
|
|
298
|
+
* The raw action data is stripped to prevent API format leakage — the AI
|
|
299
|
+
* must not learn action names or param schemas from historical messages.
|
|
300
|
+
* Outcome notes are safe because they're AI-written natural language.
|
|
301
|
+
*/
|
|
302
|
+
export function stripActionAnnotations(history) {
|
|
303
|
+
return history.map(msg => {
|
|
304
|
+
if (msg.role !== 'assistant' || !msg.content.includes('\n---actions:'))
|
|
305
|
+
return msg;
|
|
306
|
+
// Split on ---actions: and keep everything before it (including ---outcomes: if present)
|
|
307
|
+
const content = msg.content.split('\n---actions:')[0].trimEnd();
|
|
308
|
+
return { ...msg, content };
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
//# sourceMappingURL=actions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../../src/core/actions.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEnD;;;;GAIG;AACH,SAAS,eAAe,CAAC,MAAiB;IACxC,OAAO,WAAW,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAA;AAC9C,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IAC1C,MAAM,GAAG,GAAI,MAAwD,CAAC,IAAI,CAAA;IAC1E,IAAI,CAAC,GAAG;QAAE,OAAO,SAAS,CAAA;IAE1B,MAAM,QAAQ,GAAG,OAAO,GAAG,CAAC,QAAQ,KAAK,QAAQ;QAC/C,CAAC,CAAC,GAAG,CAAC,QAAQ;QACd,CAAC,CAAC,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ;YAC5B,CAAC,CAAC,CAAC;gBACC,MAAM,EAAE,WAAW;gBACnB,MAAM,EAAE,WAAW;gBACnB,OAAO,EAAE,YAAY;gBACrB,KAAK,EAAE,UAAU;gBACjB,MAAM,EAAE,WAAW;gBACnB,QAAQ,EAAE,aAAa;gBACvB,QAAQ,EAAE,aAAa;gBACvB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,YAAY;aACtB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;YACpB,CAAC,CAAC,EAAE,CAAA;IAER,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,WAAW;YACd,OAAO,UAAU,CAAA;QACnB,KAAK,WAAW;YACd,OAAO,CAAC,CAAA;QACV,KAAK,YAAY;YACf,OAAO,IAAI,CAAA;QACb,KAAK,YAAY;YACf,OAAO,GAAG,CAAC,KAAK,CAAA;QAClB,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,OAAO,CAAA;YACxC,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,MAAgB,CAAC,CAAA;YAC1E,OAAO,GAAG,CAAC,CAAC,CAAC,IAAI,SAAS,CAAA;QAC5B,CAAC;QACD,KAAK,aAAa,CAAC;QACnB,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAS,CAAA;YAC3B,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,MAAM,IAAK,KAAgB,EAAE,CAAC;gBACtE,OAAO,iBAAiB,CAAC,KAAkB,CAAC,CAAA;YAC9C,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAA;YACxF,IAAI,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,MAAM,IAAK,IAAe,EAAE,CAAC;gBACnE,OAAO,CAAC,iBAAiB,CAAC,IAAiB,CAAC,CAAC,CAAA;YAC/C,CAAC;YACD,OAAO,CAAC,SAAS,CAAC,CAAA;QACpB,CAAC;QACD,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,QAAQ,GAAG,GAAG,CAAC,KAAK,CAAA;YAC1B,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;YACpE,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;gBAAE,OAAO,EAAE,CAAA;YAClD,MAAM,OAAO,GAA4B,EAAE,CAAA;YAC3C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAkC,CAAC,EAAE,CAAC;gBAC9E,OAAO,CAAC,GAAG,CAAC,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;YACzC,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC;QACD;YACE,OAAO,SAAS,CAAA;IACpB,CAAC;AACH,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAyC;IACnE,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;IACxC,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,+CAA+C,CAAA;IACxD,CAAC;IACD,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,GAAG,KAAK,CAAA;IACzB,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY,EAAE,GAAqB;IAChE,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,IAAI,iBAAiB,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;IACjE,OAAO,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAA;AACzC,CAAC;AAED,SAAS,cAAc,CAAC,MAAiB;IACvC,MAAM,GAAG,GAAI,MAAwD,CAAC,IAAI,CAAA;IAC1E,MAAM,QAAQ,GAAG,GAAG,EAAE,KAAK,CAAA;IAC3B,MAAM,KAAK,GAAG,OAAO,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAA;IAEpE,IAAI,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;QACvC,8CAA8C;QAC9C,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,KAAkC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,EAAE;YACnF,MAAM,KAAK,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;YACrC,IAAI,KAAK;gBAAE,OAAO,GAAG,GAAG,KAAK,KAAK,EAAE,CAAA;YACpC,MAAM,IAAI,GAAI,GAAgC,CAAC,WAAW;mBACpD,GAA2C,CAAC,IAAI,EAAE,WAAW,CAAA;YACnE,OAAO,IAAI,CAAC,CAAC,CAAC,GAAG,GAAG,KAAK,IAAI,GAAG,CAAC,CAAC,CAAC,GAAG,CAAA;QACxC,CAAC,CAAC,CAAA;QACF,OAAO,KAAK,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAA;IACnC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED,SAAS,kBAAkB,CAAC,MAAiB;IAC3C,MAAM,GAAG,GAAI,MAAwD,CAAC,IAAI,CAAA;IAC1E,IAAI,CAAC,GAAG;QAAE,OAAO,IAAI,CAAA;IAErB,kGAAkG;IAClG,MAAM,OAAO,GAAG,GAAG,CAAC,IAAI,CAAA;IACxB,MAAM,QAAQ,GAAG,CAAC,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,OAAO,CAAA;IACzF,IAAI,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,MAAM,IAAK,QAAmB,EAAE,CAAC;QAC/E,MAAM,KAAK,GAAG,cAAc,CAAC,QAAqB,CAAC,CAAA;QACnD,IAAI,KAAK,KAAK,IAAI;YAAE,OAAO,IAAI,KAAK,GAAG,CAAA;IACzC,CAAC;IACD,OAAO,IAAI,CAAA;AACb,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,iBAAiB,CAC/B,OAAqD,EACrD,aAAyB,cAAc,EACvC,gBAAqC,MAAM;IAE3C,IAAI,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAE5D,MAAM,KAAK,GAAa,CAAC,2BAA2B,CAAC,CAAA;IAErD,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAClD,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;YAC3B,8DAA8D;YAC9D,iEAAiE;YACjE,iEAAiE;YACjE,gEAAgE;YAChE,+DAA+D;YAC/D,6DAA6D;YAC7D,2DAA2D;YAC3D,IAAI,GAAG,CAAC,WAAW,IAAI,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzD,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;YAC7C,CAAC;iBAAM,CAAC;gBACN,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;YACzB,CAAC;YACD,SAAQ;QACV,CAAC;QACD,MAAM,eAAe,GAAG,iBAAiB,CAAC,GAAG,CAAC,UAAU,EAAE,UAAU,CAAC,CAAA;QACrE,MAAM,QAAQ,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,CAAA;QAC5C,KAAK,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC,CAAA;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,aAAa,KAAK,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,KAAK,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QAClF,IAAI,QAAQ,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,OAAO,QAAQ,EAAE,CAAC,CAAA;QAC/B,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,gBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CACR,UAAU,KAAK,aAAa;gBAC1B,CAAC,CAAC,kBAAkB,GAAG,CAAC,UAAU,KAAK,eAAe,GAAG;gBACzD,CAAC,CAAC,mBAAmB,GAAG,CAAC,UAAU,KAAK,eAAe,GAAG,CAC7D,CAAA;QACH,CAAC;IACH,CAAC;IAED,IAAI,UAAU,KAAK,OAAO,EAAE,CAAC;QAC3B,MAAM,SAAS,GAAa,EAAE,CAAA;QAC9B,SAAS,CAAC,IAAI,CAAC,yeAAye,CAAC,CAAA;QACzf,SAAS,CAAC,IAAI,CAAC,+QAA+Q,CAAC,CAAA;QAC/R,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;YAC/D,SAAS,CAAC,IAAI,CAAC,mMAAmM,CAAC,CAAA;QACrN,CAAC;QACD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACd,KAAK,CAAC,IAAI,CAAC,4BAA4B,CAAC,CAAA;YACxC,KAAK,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAA;QAC1B,CAAC;QACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACzB,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAA;QAC9C,KAAK,CAAC,IAAI,CAAC,0DAA0D,CAAC,CAAA;QACtE,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAA;QACxC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,iBAAiB,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;QAC1D,KAAK,CAAC,IAAI,CAAC,uBAAuB,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACpE,KAAK,CAAC,IAAI,CAAC,4mBAA4mB,CAAC,CAAA;QACxnB,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,aAAa,IAAI,OAAO,EAAE,CAAC;YAC/D,KAAK,CAAC,IAAI,CAAC,iMAAiM,CAAC,CAAA;QAC/M,CAAC;QACD,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;YAC7B,KAAK,CAAC,IAAI,CAAC,0EAA0E,CAAC,CAAA;YACtF,KAAK,CAAC,IAAI,CAAC,+FAA+F,CAAC,CAAA;YAC3G,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACd,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAA;QACvF,CAAC;IACH,CAAC;IACD,IAAI,aAAa,KAAK,MAAM,EAAE,CAAC;QAC7B,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,kDAAkD,CAAC,CAAA;YAC9D,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAA;YAC/F,KAAK,CAAC,IAAI,CAAC,gGAAgG,CAAC,CAAA;QAC9G,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAA;YAChC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;YACnC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAA;QACtC,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACd,IAAI,UAAU,KAAK,aAAa,EAAE,CAAC;YACjC,KAAK,CAAC,IAAI,CAAC,mFAAmF,CAAC,CAAA;YAC/F,KAAK,CAAC,IAAI,CAAC,6GAA6G,CAAC,CAAA;QAC3H,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;YAC7F,KAAK,CAAC,IAAI,CACR,6GAA6G,CAC9G,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,SAAS,qBAAqB,CAAC,OAAyC;IACtE,OAAO,CAAC,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,OAAO,CAAC,CAAA;AAC5F,CAAC;AAED,SAAS,iBAAiB,CAAC,UAA4B,EAAE,UAAsB;IAC7E,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,KAAK,CAAC,CAAC,OAAO,YAAY,CAAA;QAC/B,KAAK,QAAQ,CAAC,CAAC,OAAO,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,+BAA+B,CAAC,CAAC,CAAC,YAAY,CAAA;QACtJ,KAAK,MAAM,CAAC,CAAC,OAAO,UAAU,KAAK,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,UAAU,KAAK,OAAO,CAAC,CAAC,CAAC,8BAA8B,CAAC,CAAC,CAAC,eAAe,CAAA;IAC/I,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CACnC,UAAkB,EAClB,MAA+B;IAE/B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC;SACnC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC;SAC5B,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;SACxE,IAAI,CAAC,IAAI,CAAC,CAAA;IACb,OAAO,GAAG,UAAU,KAAK,OAAO,EAAE,CAAA;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAC9B,OAAiE;IAEjE,OAAO,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,qBAAqB,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAA;AAClE,CAAC;AAED;;;;;;;;;;GAUG;AACH,MAAM,UAAU,eAAe,CAC7B,OAAe,EACf,WAAqB,EACrB,YAAuB;IAEvB,IAAI,MAAM,GAAG,OAAO,CAAA;IACpB,IAAI,YAAY,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,kBAAkB,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAA;IACvD,CAAC;IACD,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,iBAAiB,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAA;IACtD,CAAC;IACD,OAAO,MAAM,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,aAAiC;IACnE,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IACzC,OAAO,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAC3B,MAAM,OAAO,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,GAAG;YACrC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,GAAG,GAAG;YAChC,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAA;QACd,OAAO,iBAAiB,CAAC,CAAC,IAAI,eAAe,CAAC,CAAC,KAAK,eAAe,OAAO,0BAA0B,CAAA;IACtG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACf,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAe;IACxD,2DAA2D;IAC3D,MAAM,OAAO,GAAG,CAAC,gBAAgB,EAAE,eAAe,EAAE,iBAAiB,CAAC,CAAA;IACtE,IAAI,QAAQ,GAAG,CAAC,CAAC,CAAA;IACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAA;QACnC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,QAAQ,CAAC,EAAE,CAAC;YACtD,QAAQ,GAAG,GAAG,CAAA;QAChB,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,OAAO,CAAA;AACzE,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,sBAAsB,CACpC,OAAY;IAEZ,OAAO,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE;QACvB,IAAI,GAAG,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAC;YAAE,OAAO,GAAG,CAAA;QAClF,yFAAyF;QACzF,MAAM,OAAO,GAAG,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,CAAA;QAC/D,OAAO,EAAE,GAAG,GAAG,EAAE,OAAO,EAAE,CAAA;IAC5B,CAAC,CAAC,CAAA;AACJ,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export declare function buildAttachmentCarryForwardMessage(notes: string[]): string;
|
|
2
|
+
export declare function parseAttachmentCarryForwardMessage(content: string): string[];
|
|
3
|
+
export declare function buildAttachmentCarryForwardSection(notes: string[]): string;
|
|
4
|
+
export declare function collectAttachmentCarryForwardNotes(messages: Array<{
|
|
5
|
+
content: string;
|
|
6
|
+
}>): string[];
|
|
7
|
+
//# sourceMappingURL=attachment-notes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-notes.d.ts","sourceRoot":"","sources":["../../src/core/attachment-notes.ts"],"names":[],"mappings":"AAMA,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAE1E;AAED,wBAAgB,kCAAkC,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,EAAE,CAa5E;AAED,wBAAgB,kCAAkC,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,MAAM,CAS1E;AAED,wBAAgB,kCAAkC,CAChD,QAAQ,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,GACnC,MAAM,EAAE,CAGV"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
const ATTACHMENT_NOTE_MESSAGE_PREFIX = '__archetype_attachment_notes__';
|
|
2
|
+
function normalizeNotes(notes) {
|
|
3
|
+
return [...new Set(notes.map(note => note.trim()).filter(Boolean))];
|
|
4
|
+
}
|
|
5
|
+
export function buildAttachmentCarryForwardMessage(notes) {
|
|
6
|
+
return `${ATTACHMENT_NOTE_MESSAGE_PREFIX}\n${JSON.stringify(normalizeNotes(notes))}`;
|
|
7
|
+
}
|
|
8
|
+
export function parseAttachmentCarryForwardMessage(content) {
|
|
9
|
+
if (!content.startsWith(ATTACHMENT_NOTE_MESSAGE_PREFIX))
|
|
10
|
+
return [];
|
|
11
|
+
const json = content.slice(ATTACHMENT_NOTE_MESSAGE_PREFIX.length).trim();
|
|
12
|
+
if (!json)
|
|
13
|
+
return [];
|
|
14
|
+
try {
|
|
15
|
+
const parsed = JSON.parse(json);
|
|
16
|
+
if (!Array.isArray(parsed))
|
|
17
|
+
return [];
|
|
18
|
+
return normalizeNotes(parsed.map(item => String(item)));
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
return [];
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
export function buildAttachmentCarryForwardSection(notes) {
|
|
25
|
+
const normalized = normalizeNotes(notes);
|
|
26
|
+
if (normalized.length === 0)
|
|
27
|
+
return '';
|
|
28
|
+
return [
|
|
29
|
+
'PRIOR IMAGE CONTEXT:',
|
|
30
|
+
...normalized.map(note => `- ${note}`),
|
|
31
|
+
'These are compact carry-forward notes about earlier uploaded images. Use them when relevant, but do not pretend you can still inspect the raw image.',
|
|
32
|
+
].join('\n');
|
|
33
|
+
}
|
|
34
|
+
export function collectAttachmentCarryForwardNotes(messages) {
|
|
35
|
+
const notes = messages.flatMap(message => parseAttachmentCarryForwardMessage(message.content));
|
|
36
|
+
return normalizeNotes(notes);
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=attachment-notes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attachment-notes.js","sourceRoot":"","sources":["../../src/core/attachment-notes.ts"],"names":[],"mappings":"AAAA,MAAM,8BAA8B,GAAG,gCAAgC,CAAA;AAEvE,SAAS,cAAc,CAAC,KAAe;IACrC,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAA;AACrE,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAAe;IAChE,OAAO,GAAG,8BAA8B,KAAK,IAAI,CAAC,SAAS,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,CAAA;AACtF,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,OAAe;IAChE,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,8BAA8B,CAAC;QAAE,OAAO,EAAE,CAAA;IAElE,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACxE,IAAI,CAAC,IAAI;QAAE,OAAO,EAAE,CAAA;IAEpB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAY,CAAA;QAC1C,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC;YAAE,OAAO,EAAE,CAAA;QACrC,OAAO,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACzD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAA;IACX,CAAC;AACH,CAAC;AAED,MAAM,UAAU,kCAAkC,CAAC,KAAe;IAChE,MAAM,UAAU,GAAG,cAAc,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,CAAA;IAEtC,OAAO;QACL,sBAAsB;QACtB,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,KAAK,IAAI,EAAE,CAAC;QACtC,sJAAsJ;KACvJ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACd,CAAC;AAED,MAAM,UAAU,kCAAkC,CAChD,QAAoC;IAEpC,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,kCAAkC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAA;IAC9F,OAAO,cAAc,CAAC,KAAK,CAAC,CAAA;AAC9B,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { ContextInputDefinition } from '../types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Serialize a single context block into a labeled prompt section.
|
|
4
|
+
*/
|
|
5
|
+
export declare function serializeContextBlock(key: string, definition: ContextInputDefinition, data: unknown): string;
|
|
6
|
+
/**
|
|
7
|
+
* Serialize all context inputs into prompt sections, respecting budgets.
|
|
8
|
+
*/
|
|
9
|
+
export declare function serializeAllContext(definitions: Record<string, ContextInputDefinition>, data: Record<string, unknown>): string;
|
|
10
|
+
//# sourceMappingURL=context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAA;AAEzD;;GAEG;AACH,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,EACX,UAAU,EAAE,sBAAsB,EAClC,IAAI,EAAE,OAAO,GACZ,MAAM,CAkCR;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,sBAAsB,CAAC,EACnD,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAWR"}
|
|
@@ -0,0 +1,108 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Serialize a single context block into a labeled prompt section.
|
|
3
|
+
*/
|
|
4
|
+
export function serializeContextBlock(key, definition, data) {
|
|
5
|
+
if (data == null)
|
|
6
|
+
return '';
|
|
7
|
+
const label = definition.label;
|
|
8
|
+
const format = definition.format ?? 'block';
|
|
9
|
+
let body;
|
|
10
|
+
const includeIds = definition.includeIds ?? false;
|
|
11
|
+
if (Array.isArray(data)) {
|
|
12
|
+
if (data.length === 0) {
|
|
13
|
+
body = '(none)';
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
body = formatArray(data, format, includeIds);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
else if (typeof data === 'string') {
|
|
20
|
+
body = data;
|
|
21
|
+
}
|
|
22
|
+
else if (typeof data === 'object') {
|
|
23
|
+
body = formatObject(data, format);
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
body = String(data);
|
|
27
|
+
}
|
|
28
|
+
// Apply budget if defined
|
|
29
|
+
if (definition.budget && body.length > definition.budget) {
|
|
30
|
+
body = body.slice(0, definition.budget) + '\n... (truncated to budget)';
|
|
31
|
+
}
|
|
32
|
+
const priority = definition.priority === 'critical' ? ' [CRITICAL]' : '';
|
|
33
|
+
const intentLine = definition.intent?.trim()
|
|
34
|
+
? `Intent: ${definition.intent.trim()}\n`
|
|
35
|
+
: '';
|
|
36
|
+
return `--- ${label}${priority} ---\n${intentLine}${body}`;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Serialize all context inputs into prompt sections, respecting budgets.
|
|
40
|
+
*/
|
|
41
|
+
export function serializeAllContext(definitions, data) {
|
|
42
|
+
const blocks = [];
|
|
43
|
+
for (const [key, def] of Object.entries(definitions)) {
|
|
44
|
+
const value = data[key];
|
|
45
|
+
if (value == null)
|
|
46
|
+
continue;
|
|
47
|
+
const block = serializeContextBlock(key, def, value);
|
|
48
|
+
if (block)
|
|
49
|
+
blocks.push(block);
|
|
50
|
+
}
|
|
51
|
+
return blocks.join('\n\n');
|
|
52
|
+
}
|
|
53
|
+
function formatArray(items, format, includeIds = false) {
|
|
54
|
+
return items.map(item => {
|
|
55
|
+
if (typeof item === 'string')
|
|
56
|
+
return `- ${item}`;
|
|
57
|
+
if (typeof item === 'object' && item !== null) {
|
|
58
|
+
return formatObjectAsListItem(item, format, includeIds);
|
|
59
|
+
}
|
|
60
|
+
return `- ${String(item)}`;
|
|
61
|
+
}).join('\n');
|
|
62
|
+
}
|
|
63
|
+
function formatObjectAsListItem(obj, format, includeIds = false) {
|
|
64
|
+
if (format === 'kv') {
|
|
65
|
+
return Object.entries(obj)
|
|
66
|
+
.filter(([k]) => !includeIds || k !== 'id') // id shown as prefix when includeIds
|
|
67
|
+
.map(([k, v]) => ` ${k}: ${String(v)}`)
|
|
68
|
+
.join('\n');
|
|
69
|
+
}
|
|
70
|
+
// Default: try to build a sensible one-liner
|
|
71
|
+
const id = obj['id'] || obj['entityId'];
|
|
72
|
+
const title = obj['title'] || obj['name'] || obj['summary'] || obj['text'] || obj['what'] || obj['content'];
|
|
73
|
+
const status = obj['status'];
|
|
74
|
+
const extra = [];
|
|
75
|
+
for (const [k, v] of Object.entries(obj)) {
|
|
76
|
+
if (['id', 'entityId', 'title', 'name', 'summary', 'text', 'what', 'content', 'status'].includes(k))
|
|
77
|
+
continue;
|
|
78
|
+
if (v != null && v !== '') {
|
|
79
|
+
extra.push(`${k}=${typeof v === 'object' ? JSON.stringify(v) : String(v)}`);
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
let line = '- ';
|
|
83
|
+
if (includeIds && id) {
|
|
84
|
+
line += `(id:${id}) `;
|
|
85
|
+
}
|
|
86
|
+
if (status)
|
|
87
|
+
line += `[${status}] `;
|
|
88
|
+
if (title)
|
|
89
|
+
line += `${title}`;
|
|
90
|
+
if (!includeIds && id)
|
|
91
|
+
line += ` [${id}]`;
|
|
92
|
+
if (extra.length > 0)
|
|
93
|
+
line += ` — ${extra.join(', ')}`;
|
|
94
|
+
return line;
|
|
95
|
+
}
|
|
96
|
+
function formatObject(obj, format) {
|
|
97
|
+
if (format === 'kv') {
|
|
98
|
+
return Object.entries(obj)
|
|
99
|
+
.filter(([, v]) => v != null)
|
|
100
|
+
.map(([k, v]) => `${k}: ${typeof v === 'object' ? JSON.stringify(v) : String(v)}`)
|
|
101
|
+
.join('\n');
|
|
102
|
+
}
|
|
103
|
+
return Object.entries(obj)
|
|
104
|
+
.filter(([, v]) => v != null)
|
|
105
|
+
.map(([k, v]) => `- ${k}: ${typeof v === 'object' ? JSON.stringify(v) : String(v)}`)
|
|
106
|
+
.join('\n');
|
|
107
|
+
}
|
|
108
|
+
//# sourceMappingURL=context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/core/context.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { EntityConfig, PromptContractStyle, PromptMode } from '../types.js';
|
|
2
|
+
import type { z } from 'zod';
|
|
3
|
+
/**
|
|
4
|
+
* Convert any Zod schema to a compact human-readable description.
|
|
5
|
+
* Handles the full Zod type system: primitives, enums, arrays, objects,
|
|
6
|
+
* optionals, nullables, literals, and .describe() annotations.
|
|
7
|
+
*
|
|
8
|
+
* Same traversal pattern as zodToGeminiSchema but outputs text for prompts.
|
|
9
|
+
*/
|
|
10
|
+
export declare function zodToDescription(zodType: z.ZodType): string;
|
|
11
|
+
/**
|
|
12
|
+
* Render the entities block for the system prompt.
|
|
13
|
+
* Includes entity definitions and CRUD format instructions.
|
|
14
|
+
*/
|
|
15
|
+
export declare function buildEntitiesBlock(entities: Record<string, EntityConfig>, promptMode?: PromptMode, contractStyle?: PromptContractStyle): string;
|
|
16
|
+
//# sourceMappingURL=crud-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crud-prompt.d.ts","sourceRoot":"","sources":["../../src/core/crud-prompt.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,YAAY,EAAE,mBAAmB,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AAChF,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAsI5B;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,CAAC,CAAC,OAAO,GAAG,MAAM,CAsF3D;AAID;;;GAGG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,EACtC,UAAU,GAAE,UAA2B,EACvC,aAAa,GAAE,mBAA4B,GAC1C,MAAM,CA6CR"}
|