@cogenta/agents 0.5.1 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (77) hide show
  1. package/dist/agents/builtins.d.ts.map +1 -1
  2. package/dist/agents/builtins.js +34 -6
  3. package/dist/agents/builtins.js.map +1 -1
  4. package/dist/agents/store.d.ts.map +1 -1
  5. package/dist/agents/store.js +148 -95
  6. package/dist/agents/store.js.map +1 -1
  7. package/dist/identity/context.d.ts +31 -1
  8. package/dist/identity/context.d.ts.map +1 -1
  9. package/dist/identity/context.js +10 -0
  10. package/dist/identity/context.js.map +1 -1
  11. package/dist/index.d.ts +9 -4
  12. package/dist/index.d.ts.map +1 -1
  13. package/dist/index.js +4 -2
  14. package/dist/index.js.map +1 -1
  15. package/dist/progress/job-store.d.ts.map +1 -1
  16. package/dist/progress/job-store.js +7 -2
  17. package/dist/progress/job-store.js.map +1 -1
  18. package/dist/progress/types.d.ts +20 -1
  19. package/dist/progress/types.d.ts.map +1 -1
  20. package/dist/progress/types.js.map +1 -1
  21. package/dist/providers/image/openai.d.ts +8 -1
  22. package/dist/providers/image/openai.d.ts.map +1 -1
  23. package/dist/providers/image/openai.js +60 -6
  24. package/dist/providers/image/openai.js.map +1 -1
  25. package/dist/providers/resolve.d.ts +17 -0
  26. package/dist/providers/resolve.d.ts.map +1 -1
  27. package/dist/providers/resolve.js +39 -0
  28. package/dist/providers/resolve.js.map +1 -1
  29. package/dist/providers/store.d.ts +25 -0
  30. package/dist/providers/store.d.ts.map +1 -1
  31. package/dist/providers/store.js +28 -1
  32. package/dist/providers/store.js.map +1 -1
  33. package/dist/rag/reference-documents/store.d.ts +21 -0
  34. package/dist/rag/reference-documents/store.d.ts.map +1 -1
  35. package/dist/rag/reference-documents/store.js +14 -1
  36. package/dist/rag/reference-documents/store.js.map +1 -1
  37. package/dist/runtime/loop.d.ts.map +1 -1
  38. package/dist/runtime/loop.js +3 -3
  39. package/dist/runtime/loop.js.map +1 -1
  40. package/dist/site-plan/approval.d.ts +11 -2
  41. package/dist/site-plan/approval.d.ts.map +1 -1
  42. package/dist/site-plan/approval.js +25 -1
  43. package/dist/site-plan/approval.js.map +1 -1
  44. package/dist/site-plan/content-model.d.ts +2 -0
  45. package/dist/site-plan/content-model.d.ts.map +1 -1
  46. package/dist/site-plan/content-model.js +87 -22
  47. package/dist/site-plan/content-model.js.map +1 -1
  48. package/dist/site-plan/enforce.d.ts.map +1 -1
  49. package/dist/site-plan/enforce.js +26 -1
  50. package/dist/site-plan/enforce.js.map +1 -1
  51. package/dist/site-plan/skin-candidates.d.ts +13 -0
  52. package/dist/site-plan/skin-candidates.d.ts.map +1 -1
  53. package/dist/site-plan/skin-candidates.js +27 -3
  54. package/dist/site-plan/skin-candidates.js.map +1 -1
  55. package/dist/site-plan/types.d.ts +14 -1
  56. package/dist/site-plan/types.d.ts.map +1 -1
  57. package/dist/skin/generate.d.ts +14 -0
  58. package/dist/skin/generate.d.ts.map +1 -1
  59. package/dist/skin/generate.js +10 -1
  60. package/dist/skin/generate.js.map +1 -1
  61. package/dist/theme-creator/attachments.d.ts +37 -0
  62. package/dist/theme-creator/attachments.d.ts.map +1 -0
  63. package/dist/theme-creator/attachments.js +57 -0
  64. package/dist/theme-creator/attachments.js.map +1 -0
  65. package/dist/theme-creator/layout-classifier.d.ts +66 -0
  66. package/dist/theme-creator/layout-classifier.d.ts.map +1 -0
  67. package/dist/theme-creator/layout-classifier.js +151 -0
  68. package/dist/theme-creator/layout-classifier.js.map +1 -0
  69. package/dist/theme-creator/propose-theme.d.ts +2 -5
  70. package/dist/theme-creator/propose-theme.d.ts.map +1 -1
  71. package/dist/theme-creator/propose-theme.js +9 -58
  72. package/dist/theme-creator/propose-theme.js.map +1 -1
  73. package/dist/tools/core/media.d.ts +68 -1
  74. package/dist/tools/core/media.d.ts.map +1 -1
  75. package/dist/tools/core/media.js +57 -1
  76. package/dist/tools/core/media.js.map +1 -1
  77. package/package.json +5 -5
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/agents/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAe,MAAM,YAAY,CAAA;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAC9C,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AACrD,eAAO,MAAM,wBAAwB,kBAAkB,CAAA;AACvD,eAAO,MAAM,uBAAuB,iBAAiB,CAAA;AACrD,eAAO,MAAM,wBAAwB,0BAA0B,CAAA;AAK/D,wBAAgB,iBAAiB,IAAI,SAAS,qBAAqB,EAAE,CAiHpE;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrF"}
1
+ {"version":3,"file":"builtins.d.ts","sourceRoot":"","sources":["../../src/agents/builtins.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,qBAAqB,EAAe,MAAM,YAAY,CAAA;AAE3F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAgCG;AACH,eAAO,MAAM,eAAe,kBAAkB,CAAA;AAC9C,eAAO,MAAM,mBAAmB,qBAAqB,CAAA;AACrD,eAAO,MAAM,wBAAwB,kBAAkB,CAAA;AACvD,eAAO,MAAM,uBAAuB,iBAAiB,CAAA;AACrD,eAAO,MAAM,wBAAwB,0BAA0B,CAAA;AAK/D,wBAAgB,iBAAiB,IAAI,SAAS,qBAAqB,EAAE,CAiHpE;AAED;;;;;;;;GAQG;AACH,wBAAsB,mBAAmB,CAAC,KAAK,EAAE,qBAAqB,GAAG,OAAO,CAAC,IAAI,CAAC,CASrF"}
@@ -135,17 +135,17 @@ export function builtinAgentSeeds() {
135
135
  {
136
136
  name: THEME_CREATOR_AGENT_NAME,
137
137
  identity: {
138
- role: 'Designs and adjusts this site’s visual theme from a description and, optionally, attached files (documents, screenshots) — the Appearance screen’s theme generator workshop talks to this agent, not the other way around.',
138
+ role: 'Designs and adjusts this site’s visual theme from a description and, optionally, attached files (documents, screenshots) — the Appearance screen’s theme generator workshop talks to this agent, not the other way around. Has two distinct tools for two distinct jobs: theme.propose_theme (recolour/retune an installed theme package, tokens only) and theme.write_sandbox_file (write real, custom theme.config.*/theme.render.* source code into a sandbox, for a design no installed theme package already renders).',
139
139
  objectives: [
140
- 'Read the brief and any attachments, then call theme.propose_theme with them.',
140
+ 'When the request only needs different colours, fonts, spacing or motion on an already-installed theme, read the brief and attachments then call theme.propose_theme produces contract D skin tokens only, never raw HTML or CSS.',
141
+ 'When the request needs custom layout or markup that no installed theme package renders, call theme.write_sandbox_file for real, one file at a time, writing actual theme.config.*/theme.render.* module code (contract D ThemeManifest/ThemeModule shape) — never describe the files in prose, never claim the tool is unavailable.',
141
142
  'Pick the base theme from the packages this instance actually ships — never invent one.',
142
- 'Produce contract D skin tokens only, never raw HTML or CSS.',
143
- 'Propose 1-3 candidates and stop — this tool never applies anything itself (sideEffects: false); an admin activates a candidate from the workshop.',
143
+ 'Propose 1-3 candidates and stop when using theme.propose_theme (sideEffects: false); when using theme.write_sandbox_file, stop once the sandbox holds working files — an admin previews and deploys it separately from the workshop.',
144
144
  ],
145
145
  style: 'Concrete design rationale, one sentence per candidate, no filler.',
146
146
  },
147
147
  model: DEFAULT_MODEL,
148
- tools: ['theme.propose_theme'],
148
+ tools: ['theme.propose_theme', 'theme.write_sandbox_file'],
149
149
  autonomy: { default: 'propose' },
150
150
  budget: { tokensPerDay: 100_000, callsPerHour: 20 },
151
151
  enabled: true,
@@ -166,8 +166,10 @@ export async function ensureBuiltinAgents(store) {
166
166
  const existing = await store.get(seed.name);
167
167
  if (existing === undefined)
168
168
  await store.create(seed, true);
169
- else
169
+ else {
170
170
  await grantContentBrowse(store, existing);
171
+ await grantThemeSandboxWrite(store, existing);
172
+ }
171
173
  }
172
174
  }
173
175
  /**
@@ -187,4 +189,30 @@ async function grantContentBrowse(store, existing) {
187
189
  return;
188
190
  await store.update(existing.name, { tools: [...existing.tools, ...missing] });
189
191
  }
192
+ /**
193
+ * Fiche 73 task 7's own real-world bug, found by actually running an
194
+ * existing site against the built dist rather than trusting the unit
195
+ * suite: `theme.write_sandbox_file` was added to `themeCreatorAgent`'s
196
+ * in-code declaration, but "never touch an existing seed" (this file's own
197
+ * policy, above) meant a site whose `theme-creator` agent record already
198
+ * existed from before this tool shipped never gained it — its persisted
199
+ * `tools` array stayed frozen at `['theme.propose_theme']` forever, and the
200
+ * model, never even offered the second tool in its own function-calling
201
+ * schema, had no way to call it no matter how explicitly it was asked to.
202
+ * Same narrow-exception shape as `grantContentBrowse`: only the one named
203
+ * builtin, only an addition, never touching whatever an operator may have
204
+ * customised on top (the tool list gains one entry; the identity text this
205
+ * agent's own record carries is left exactly as it is, since that is the
206
+ * one field an operator is explicitly meant to be able to rewrite from the
207
+ * Prompt Settings screen).
208
+ */
209
+ async function grantThemeSandboxWrite(store, existing) {
210
+ if (existing.name !== THEME_CREATOR_AGENT_NAME)
211
+ return;
212
+ if (existing.tools.includes('theme.write_sandbox_file'))
213
+ return;
214
+ await store.update(existing.name, {
215
+ tools: [...existing.tools, 'theme.write_sandbox_file'],
216
+ });
217
+ }
190
218
  //# sourceMappingURL=builtins.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/agents/builtins.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"builtins.js","sourceRoot":"","sources":["../../src/agents/builtins.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/agents/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/agents/store.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,30 @@
1
- import { mkdir, readdir, readFile, rm, writeFile } from 'node:fs/promises';
1
+ import { randomUUID } from 'node:crypto';
2
+ import { mkdir, readdir, readFile, rename, rm, writeFile } from 'node:fs/promises';
2
3
  import { join } from 'node:path';
3
4
  import { CogentaError } from '@cogenta/core';
4
5
  import { parseIdentityMarkdown, renderIdentityMarkdown } from '../identity/markdown.js';
6
+ /**
7
+ * Writes a file so that a reader never sees half of it.
8
+ *
9
+ * `writeFile` truncates the target and then fills it, so a concurrent
10
+ * `readFile` can land in between and get "Unterminated string in JSON" — which
11
+ * is exactly what `cogenta serve` did when an admin changed an agent while the
12
+ * runtime was reading the same record: the PATCH answered 500 about one run in
13
+ * three on CI. Writing beside it and renaming over it is atomic on every
14
+ * filesystem this project targets, so a reader sees the old record or the new
15
+ * one and never a torn one.
16
+ */
17
+ async function writeFileAtomic(path, data) {
18
+ const temporary = `${path}.${randomUUID()}.tmp`;
19
+ await writeFile(temporary, data, 'utf8');
20
+ try {
21
+ await rename(temporary, path);
22
+ }
23
+ catch (error) {
24
+ await rm(temporary, { force: true });
25
+ throw error;
26
+ }
27
+ }
5
28
  const COMBINING_DIACRITICS = /[\u0300-\u036f]/gu;
6
29
  function slugify(name) {
7
30
  const slug = name
@@ -66,13 +89,35 @@ export function createFileAgentDeclarationStore(options) {
66
89
  }
67
90
  async function writeIdentity(slug, name, identity) {
68
91
  const path = identityFile(slug);
69
- await writeFile(path, renderIdentityMarkdown(name, identity), 'utf8');
92
+ await writeFileAtomic(path, renderIdentityMarkdown(name, identity));
70
93
  return path;
71
94
  }
72
95
  async function findBySlug(slug) {
73
96
  const record = await readRecord(slug);
74
97
  return record ?? undefined;
75
98
  }
99
+ // Read-modify-write, serialised per agent.
100
+ //
101
+ // Every mutation reads the record, changes a field and writes the whole
102
+ // record back. Two of them on the same agent at once — an admin's PATCH and
103
+ // the runtime touching the same built-in — each read the old record, and the
104
+ // second write silently undoes the first. With a plain `writeFile` that
105
+ // surfaced as a torn read and a 500; once writes were atomic it became a
106
+ // lost update instead: the agent an admin had just switched on came back
107
+ // disabled and its run answered AGENT_DISABLED (409). A safer write cannot
108
+ // fix that — only not letting the two interleave can.
109
+ const pending = new Map();
110
+ function serialised(slug, work) {
111
+ const previous = pending.get(slug) ?? Promise.resolve();
112
+ const next = previous.catch(() => undefined).then(work);
113
+ const settled = next.catch(() => undefined);
114
+ pending.set(slug, settled);
115
+ void settled.then(() => {
116
+ if (pending.get(slug) === settled)
117
+ pending.delete(slug);
118
+ });
119
+ return next;
120
+ }
76
121
  return {
77
122
  async list() {
78
123
  await ready;
@@ -85,111 +130,119 @@ export function createFileAgentDeclarationStore(options) {
85
130
  async create(input, builtin = false) {
86
131
  await ready;
87
132
  const slug = slugOf(input.name);
88
- const existing = await findBySlug(slug);
89
- if (existing !== undefined) {
90
- throw new CogentaError({
91
- code: 'AGENT_DUPLICATE',
92
- message: `An agent named "${input.name}" already exists.`,
93
- hint: 'Choose a different name, or edit the existing agent instead.',
94
- });
95
- }
96
- const identityPath = await writeIdentity(slug, input.name, input.identity);
97
- const at = now().toISOString();
98
- const record = {
99
- id: slug,
100
- name: input.name,
101
- identity: identityPath,
102
- model: input.model,
103
- tools: input.tools,
104
- ...(input.skills === undefined ? {} : { skills: input.skills }),
105
- ...(input.subagents === undefined ? {} : { subagents: input.subagents }),
106
- ...(input.autonomy === undefined ? {} : { autonomy: input.autonomy }),
107
- ...(input.budget === undefined ? {} : { budget: input.budget }),
108
- ...(input.memory === undefined ? {} : { memory: input.memory }),
109
- ...(input.triggers === undefined ? {} : { triggers: input.triggers }),
110
- enabled: input.enabled ?? true,
111
- builtin,
112
- createdAt: at,
113
- updatedAt: at,
114
- };
115
- await writeFile(recordFile(slug), JSON.stringify(record, null, 2), 'utf8');
116
- return record;
133
+ return serialised(slug, async () => {
134
+ const existing = await findBySlug(slug);
135
+ if (existing !== undefined) {
136
+ throw new CogentaError({
137
+ code: 'AGENT_DUPLICATE',
138
+ message: `An agent named "${input.name}" already exists.`,
139
+ hint: 'Choose a different name, or edit the existing agent instead.',
140
+ });
141
+ }
142
+ const identityPath = await writeIdentity(slug, input.name, input.identity);
143
+ const at = now().toISOString();
144
+ const record = {
145
+ id: slug,
146
+ name: input.name,
147
+ identity: identityPath,
148
+ model: input.model,
149
+ tools: input.tools,
150
+ ...(input.skills === undefined ? {} : { skills: input.skills }),
151
+ ...(input.subagents === undefined ? {} : { subagents: input.subagents }),
152
+ ...(input.autonomy === undefined ? {} : { autonomy: input.autonomy }),
153
+ ...(input.budget === undefined ? {} : { budget: input.budget }),
154
+ ...(input.memory === undefined ? {} : { memory: input.memory }),
155
+ ...(input.triggers === undefined ? {} : { triggers: input.triggers }),
156
+ enabled: input.enabled ?? true,
157
+ builtin,
158
+ createdAt: at,
159
+ updatedAt: at,
160
+ };
161
+ await writeFileAtomic(recordFile(slug), JSON.stringify(record, null, 2));
162
+ return record;
163
+ });
117
164
  },
118
165
  async update(name, patch) {
119
166
  await ready;
120
167
  const slug = slugOf(name);
121
- const existing = await findBySlug(slug);
122
- if (existing === undefined)
123
- throw agentUnknown(name);
124
- const identityPath = patch.identity === undefined
125
- ? existing.identity
126
- : await writeIdentity(slug, existing.name, patch.identity);
127
- const updated = {
128
- ...existing,
129
- identity: identityPath,
130
- model: patch.model ?? existing.model,
131
- tools: patch.tools ?? existing.tools,
132
- ...(patch.skills !== undefined
133
- ? { skills: patch.skills }
134
- : existing.skills === undefined
135
- ? {}
136
- : { skills: existing.skills }),
137
- ...(patch.subagents !== undefined
138
- ? { subagents: patch.subagents }
139
- : existing.subagents === undefined
140
- ? {}
141
- : { subagents: existing.subagents }),
142
- ...(patch.autonomy !== undefined
143
- ? { autonomy: patch.autonomy }
144
- : existing.autonomy === undefined
145
- ? {}
146
- : { autonomy: existing.autonomy }),
147
- ...(patch.budget !== undefined
148
- ? { budget: patch.budget }
149
- : existing.budget === undefined
150
- ? {}
151
- : { budget: existing.budget }),
152
- ...(patch.memory !== undefined
153
- ? { memory: patch.memory }
154
- : existing.memory === undefined
155
- ? {}
156
- : { memory: existing.memory }),
157
- ...(patch.triggers !== undefined
158
- ? { triggers: patch.triggers }
159
- : existing.triggers === undefined
160
- ? {}
161
- : { triggers: existing.triggers }),
162
- enabled: patch.enabled ?? existing.enabled,
163
- updatedAt: now().toISOString(),
164
- };
165
- await writeFile(recordFile(slug), JSON.stringify(updated, null, 2), 'utf8');
166
- return updated;
168
+ return serialised(slug, async () => {
169
+ const existing = await findBySlug(slug);
170
+ if (existing === undefined)
171
+ throw agentUnknown(name);
172
+ const identityPath = patch.identity === undefined
173
+ ? existing.identity
174
+ : await writeIdentity(slug, existing.name, patch.identity);
175
+ const updated = {
176
+ ...existing,
177
+ identity: identityPath,
178
+ model: patch.model ?? existing.model,
179
+ tools: patch.tools ?? existing.tools,
180
+ ...(patch.skills !== undefined
181
+ ? { skills: patch.skills }
182
+ : existing.skills === undefined
183
+ ? {}
184
+ : { skills: existing.skills }),
185
+ ...(patch.subagents !== undefined
186
+ ? { subagents: patch.subagents }
187
+ : existing.subagents === undefined
188
+ ? {}
189
+ : { subagents: existing.subagents }),
190
+ ...(patch.autonomy !== undefined
191
+ ? { autonomy: patch.autonomy }
192
+ : existing.autonomy === undefined
193
+ ? {}
194
+ : { autonomy: existing.autonomy }),
195
+ ...(patch.budget !== undefined
196
+ ? { budget: patch.budget }
197
+ : existing.budget === undefined
198
+ ? {}
199
+ : { budget: existing.budget }),
200
+ ...(patch.memory !== undefined
201
+ ? { memory: patch.memory }
202
+ : existing.memory === undefined
203
+ ? {}
204
+ : { memory: existing.memory }),
205
+ ...(patch.triggers !== undefined
206
+ ? { triggers: patch.triggers }
207
+ : existing.triggers === undefined
208
+ ? {}
209
+ : { triggers: existing.triggers }),
210
+ enabled: patch.enabled ?? existing.enabled,
211
+ updatedAt: now().toISOString(),
212
+ };
213
+ await writeFileAtomic(recordFile(slug), JSON.stringify(updated, null, 2));
214
+ return updated;
215
+ });
167
216
  },
168
217
  async setEnabled(name, enabled) {
169
218
  await ready;
170
219
  const slug = slugOf(name);
171
- const existing = await findBySlug(slug);
172
- if (existing === undefined)
173
- throw agentUnknown(name);
174
- const updated = { ...existing, enabled, updatedAt: now().toISOString() };
175
- await writeFile(recordFile(slug), JSON.stringify(updated, null, 2), 'utf8');
176
- return updated;
220
+ return serialised(slug, async () => {
221
+ const existing = await findBySlug(slug);
222
+ if (existing === undefined)
223
+ throw agentUnknown(name);
224
+ const updated = { ...existing, enabled, updatedAt: now().toISOString() };
225
+ await writeFileAtomic(recordFile(slug), JSON.stringify(updated, null, 2));
226
+ return updated;
227
+ });
177
228
  },
178
229
  async remove(name) {
179
230
  await ready;
180
231
  const slug = slugOf(name);
181
- const existing = await findBySlug(slug);
182
- if (existing === undefined)
183
- throw agentUnknown(name);
184
- if (existing.builtin) {
185
- throw new CogentaError({
186
- code: 'AGENT_BUILTIN_UNDELETABLE',
187
- message: `"${name}" is a built-in agent and cannot be removed.`,
188
- hint: 'Disable it instead — a built-in stays editable but can be turned off.',
189
- });
190
- }
191
- await rm(recordFile(slug), { force: true });
192
- await rm(identityFile(slug), { force: true });
232
+ return serialised(slug, async () => {
233
+ const existing = await findBySlug(slug);
234
+ if (existing === undefined)
235
+ throw agentUnknown(name);
236
+ if (existing.builtin) {
237
+ throw new CogentaError({
238
+ code: 'AGENT_BUILTIN_UNDELETABLE',
239
+ message: `"${name}" is a built-in agent and cannot be removed.`,
240
+ hint: 'Disable it instead — a built-in stays editable but can be turned off.',
241
+ });
242
+ }
243
+ await rm(recordFile(slug), { force: true });
244
+ await rm(identityFile(slug), { force: true });
245
+ });
193
246
  },
194
247
  async readIdentity(name) {
195
248
  await ready;
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/agents/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/agents/store.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAA;AACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAA;AAClF,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAA;AAG5C,OAAO,EAAE,qBAAqB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAA;AAQvF;;;;;;;;;;GAUG;AACH,KAAK,UAAU,eAAe,CAAC,IAAY,EAAE,IAAY;IACvD,MAAM,SAAS,GAAG,GAAG,IAAI,IAAI,UAAU,EAAE,MAAM,CAAA;IAC/C,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,EAAE,MAAM,CAAC,CAAA;IACxC,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,SAAS,EAAE,IAAI,CAAC,CAAA;IAC/B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,EAAE,CAAC,SAAS,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;QACpC,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC;AAqED,MAAM,oBAAoB,GAAG,mBAAmB,CAAA;AAEhD,SAAS,OAAO,CAAC,IAAY;IAC3B,MAAM,IAAI,GAAG,IAAI;SACd,WAAW,EAAE;SACb,SAAS,CAAC,MAAM,CAAC;SACjB,OAAO,CAAC,oBAAoB,EAAE,EAAE,CAAC;SACjC,OAAO,CAAC,cAAc,EAAE,GAAG,CAAC;SAC5B,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAA;IAC3B,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,OAAO,CAAA;AACzC,CAAC;AAED,SAAS,YAAY,CAAC,IAAY;IAChC,OAAO,IAAI,YAAY,CAAC;QACtB,IAAI,EAAE,eAAe;QACrB,OAAO,EAAE,mBAAmB,IAAI,kBAAkB;QAClD,IAAI,EAAE,sDAAsD;KAC7D,CAAC,CAAA;AACJ,CAAC;AAOD,oGAAoG;AACpG,MAAM,UAAU,+BAA+B,CAC7C,OAAyC;IAEzC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,CAAC,GAAS,EAAE,CAAC,IAAI,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,aAAa,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,YAAY,CAAC,CAAA;IACrD,MAAM,KAAK,GAAG,OAAO,CAAC,GAAG,CAAC;QACxB,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;QACvC,KAAK,CAAC,aAAa,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;KAC1C,CAAC,CAAA;IAEF,SAAS,UAAU,CAAC,IAAY;QAC9B,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,IAAI,OAAO,CAAC,CAAA;IAC1C,CAAC;IACD,SAAS,YAAY,CAAC,IAAY;QAChC,OAAO,IAAI,CAAC,aAAa,EAAE,GAAG,IAAI,KAAK,CAAC,CAAA;IAC1C,CAAC;IACD,SAAS,MAAM,CAAC,IAAY;QAC1B,OAAO,OAAO,CAAC,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,IAAY;QACpC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;YACpD,OAAO,IAAI,CAAC,KAAK,CAAC,GAAG,CAAgB,CAAA;QACvC,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ;gBAAE,OAAO,IAAI,CAAA;YACnE,MAAM,IAAI,YAAY,CAAC;gBACrB,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,gCAAgC,IAAI,IAAI;gBACjD,IAAI,EAAE,kDAAkD;gBACxD,KAAK,EAAE,KAAK;aACb,CAAC,CAAA;QACJ,CAAC;IACH,CAAC;IAED,KAAK,UAAU,OAAO;QACpB,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;QACrF,MAAM,MAAM,GAAkB,EAAE,CAAA;QAChC,KAAK,MAAM,KAAK,IAAI,SAAS,EAAE,CAAC;YAC9B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;gBAAE,SAAQ;YAC9D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC,CAAA;YACnE,IAAI,MAAM,KAAK,IAAI;gBAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAC1C,CAAC;QACD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;IAC5D,CAAC;IAED,KAAK,UAAU,aAAa,CAC1B,IAAY,EACZ,IAAY,EACZ,QAA6B;QAE7B,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAA;QAC/B,MAAM,eAAe,CAAC,IAAI,EAAE,sBAAsB,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAA;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IAED,KAAK,UAAU,UAAU,CAAC,IAAY;QACpC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;QACrC,OAAO,MAAM,IAAI,SAAS,CAAA;IAC5B,CAAC;IAED,2CAA2C;IAC3C,EAAE;IACF,wEAAwE;IACxE,4EAA4E;IAC5E,6EAA6E;IAC7E,wEAAwE;IACxE,yEAAyE;IACzE,yEAAyE;IACzE,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,OAAO,GAAG,IAAI,GAAG,EAA4B,CAAA;IACnD,SAAS,UAAU,CAAI,IAAY,EAAE,IAAsB;QACzD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAA;QACvD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACvD,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAA;QAC3C,OAAO,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;QAC1B,KAAK,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE;YACrB,IAAI,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,OAAO;gBAAE,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACzD,CAAC,CAAC,CAAA;QACF,OAAO,IAAI,CAAA;IACb,CAAC;IAED,OAAO;QACL,KAAK,CAAC,IAAI;YACR,MAAM,KAAK,CAAA;YACX,OAAO,OAAO,EAAE,CAAA;QAClB,CAAC;QAED,KAAK,CAAC,GAAG,CAAC,IAAI;YACZ,MAAM,KAAK,CAAA;YACX,OAAO,UAAU,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAA;QACjC,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK;YACjC,MAAM,KAAK,CAAA;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;YAC/B,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACjC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;oBAC3B,MAAM,IAAI,YAAY,CAAC;wBACrB,IAAI,EAAE,iBAAiB;wBACvB,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,mBAAmB;wBACzD,IAAI,EAAE,8DAA8D;qBACrE,CAAC,CAAA;gBACJ,CAAC;gBACD,MAAM,YAAY,GAAG,MAAM,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAC1E,MAAM,EAAE,GAAG,GAAG,EAAE,CAAC,WAAW,EAAE,CAAA;gBAC9B,MAAM,MAAM,GAAgB;oBAC1B,EAAE,EAAE,IAAI;oBACR,IAAI,EAAE,KAAK,CAAC,IAAI;oBAChB,QAAQ,EAAE,YAAY;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,KAAK,EAAE,KAAK,CAAC,KAAK;oBAClB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC/D,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,CAAC;oBACxE,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACrE,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC/D,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC/D,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACrE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,IAAI;oBAC9B,OAAO;oBACP,SAAS,EAAE,EAAE;oBACb,SAAS,EAAE,EAAE;iBACd,CAAA;gBACD,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACxE,OAAO,MAAM,CAAA;YACf,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,KAAK;YACtB,MAAM,KAAK,CAAA;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACjC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS;oBAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;gBAEpD,MAAM,YAAY,GAChB,KAAK,CAAC,QAAQ,KAAK,SAAS;oBAC1B,CAAC,CAAC,QAAQ,CAAC,QAAQ;oBACnB,CAAC,CAAC,MAAM,aAAa,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC,QAAQ,CAAC,CAAA;gBAE9D,MAAM,OAAO,GAAgB;oBAC3B,GAAG,QAAQ;oBACX,QAAQ,EAAE,YAAY;oBACtB,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;oBACpC,KAAK,EAAE,KAAK,CAAC,KAAK,IAAI,QAAQ,CAAC,KAAK;oBACpC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;wBAC5B,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;wBAC1B,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;4BAC7B,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClC,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS;wBAC/B,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE;wBAChC,CAAC,CAAC,QAAQ,CAAC,SAAS,KAAK,SAAS;4BAChC,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,CAAC,SAAS,EAAE,CAAC;oBACxC,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS;wBAC9B,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;wBAC9B,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;4BAC/B,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACtC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;wBAC5B,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;wBAC1B,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;4BAC7B,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClC,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;wBAC5B,CAAC,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,EAAE;wBAC1B,CAAC,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS;4BAC7B,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,CAAC;oBAClC,GAAG,CAAC,KAAK,CAAC,QAAQ,KAAK,SAAS;wBAC9B,CAAC,CAAC,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;wBAC9B,CAAC,CAAC,QAAQ,CAAC,QAAQ,KAAK,SAAS;4BAC/B,CAAC,CAAC,EAAE;4BACJ,CAAC,CAAC,EAAE,QAAQ,EAAE,QAAQ,CAAC,QAAQ,EAAE,CAAC;oBACtC,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO;oBAC1C,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE;iBAC/B,CAAA;gBACD,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzE,OAAO,OAAO,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO;YAC5B,MAAM,KAAK,CAAA;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACjC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS;oBAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;gBACpD,MAAM,OAAO,GAAgB,EAAE,GAAG,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC,WAAW,EAAE,EAAE,CAAA;gBACrF,MAAM,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;gBACzE,OAAO,OAAO,CAAA;YAChB,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,MAAM,CAAC,IAAI;YACf,MAAM,KAAK,CAAA;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACzB,OAAO,UAAU,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE;gBACjC,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;gBACvC,IAAI,QAAQ,KAAK,SAAS;oBAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;gBACpD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;oBACrB,MAAM,IAAI,YAAY,CAAC;wBACrB,IAAI,EAAE,2BAA2B;wBACjC,OAAO,EAAE,IAAI,IAAI,8CAA8C;wBAC/D,IAAI,EAAE,uEAAuE;qBAC9E,CAAC,CAAA;gBACJ,CAAC;gBACD,MAAM,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC3C,MAAM,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAC/C,CAAC,CAAC,CAAA;QACJ,CAAC;QAED,KAAK,CAAC,YAAY,CAAC,IAAI;YACrB,MAAM,KAAK,CAAA;YACX,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAA;YACzB,MAAM,QAAQ,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,CAAA;YACvC,IAAI,QAAQ,KAAK,SAAS;gBAAE,MAAM,YAAY,CAAC,IAAI,CAAC,CAAA;YACpD,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAA;YACtE,MAAM,MAAM,GAAG,qBAAqB,CAAC,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;YACxD,OAAO;gBACL,IAAI,EAAE,MAAM,CAAC,IAAI;gBACjB,UAAU,EAAE,MAAM,CAAC,UAAU;gBAC7B,GAAG,CAAC,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC9D,GAAG,CAAC,MAAM,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC;aACpF,CAAA;QACH,CAAC;KACF,CAAA;AACH,CAAC"}
@@ -23,6 +23,34 @@ export interface AgentIdentity {
23
23
  export interface TaskContext {
24
24
  readonly instruction: string;
25
25
  }
26
+ /**
27
+ * A compile-time domain specification: the durable "here is how this kind of
28
+ * artefact is built" knowledge an agent needs before it can do the work at
29
+ * all — the structure and composition of a Cogenta theme, for the theme
30
+ * creator that motivated this field.
31
+ *
32
+ * It is a separate level from `agent` on purpose. `role`/`objectives` say who
33
+ * an agent is and how it should proceed; a specification says what the thing
34
+ * it produces actually is. Folding one into the other is what left the theme
35
+ * writer with a one-sentence role while its entire structural brief sat in a
36
+ * tool `description` — the place a model reads as API reference rather than
37
+ * as standing instruction.
38
+ *
39
+ * **Never escaped, and therefore never a channel for anything external.**
40
+ * Like `task.instruction` (see `assembleContext` below) this is trusted text,
41
+ * and for the same reason: it is a constant in this repository's own source,
42
+ * not a site owner's input, not a model's output, and not content that
43
+ * arrived from a comment, an import, or a fetch. That matters concretely
44
+ * here — a specification is mostly code and markup examples, and escaping
45
+ * would turn every `<header>` in them into `&lt;header&gt;`, teaching the
46
+ * model to emit exactly the wrong thing. Anything whose origin is not a
47
+ * literal in this codebase belongs in `data`, which is escaped.
48
+ */
49
+ export interface SpecificationContext {
50
+ /** Names what is being specified, e.g. `"Cogenta theme"` — shown as the section's own label. */
51
+ readonly subject: string;
52
+ readonly body: string;
53
+ }
26
54
  /**
27
55
  * One piece of untrusted content — a comment, an import, a fetched page
28
56
  * (R8: "Tout contenu externe... est balisé comme tel"). `source` is shown to
@@ -37,10 +65,12 @@ export interface AssembleContextInput {
37
65
  readonly site: SiteContext;
38
66
  readonly agent: AgentIdentity;
39
67
  readonly task: TaskContext;
68
+ /** Optional and additive — an agent that needs no domain specification simply omits it, and the assembled system prompt has no such section. */
69
+ readonly specification?: SpecificationContext;
40
70
  readonly data?: readonly DataItem[];
41
71
  }
42
72
  export interface AssembledContext {
43
- /** CONSTITUTION → SITE → AGENT → TASK, in that fixed order — this is `ChatRequest.system`. */
73
+ /** CONSTITUTION → SITE → AGENT → SPECIFICATION (when given) → TASK, in that fixed order — this is `ChatRequest.system`. */
44
74
  readonly system: string;
45
75
  /** DATA, one tagged message per item, appended after `system` — never merged into it. */
46
76
  readonly dataMessages: readonly ChatMessage[];
@@ -1 +1 @@
1
- {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/identity/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,8FAA8F;IAC9F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,yFAAyF;IACzF,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAA;CAC9C;AA6DD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CAmB7E"}
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../src/identity/context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAA;AAGxD,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,WAAW,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;CACzC;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAA;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAA;IACvB;;;;;;OAMG;IACH,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAC/B;AAED,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAA;CAC7B;AAED;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,WAAW,oBAAoB;IACnC,gGAAgG;IAChG,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;CACtB;AAED;;;;;GAKG;AACH,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAA;IAC1B,gJAAgJ;IAChJ,QAAQ,CAAC,aAAa,CAAC,EAAE,oBAAoB,CAAA;IAC7C,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,QAAQ,EAAE,CAAA;CACpC;AAED,MAAM,WAAW,gBAAgB;IAC/B,2HAA2H;IAC3H,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,yFAAyF;IACzF,QAAQ,CAAC,YAAY,EAAE,SAAS,WAAW,EAAE,CAAA;CAC9C;AA6DD;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,gBAAgB,CA6B7E"}
@@ -66,6 +66,16 @@ export function assembleContext(input) {
66
66
  tag('constitution', CONSTITUTION_TEXT),
67
67
  tag('site', siteSection(input.site)),
68
68
  tag('agent', agentSection(input.agent)),
69
+ // Sits between AGENT and TASK because that is the order the levels are
70
+ // read in: who you are, then what the thing you build is, then what is
71
+ // being asked of you this time. Not escaped — see `SpecificationContext`.
72
+ ...(input.specification === undefined
73
+ ? []
74
+ : [
75
+ tag('specification', input.specification.body, {
76
+ subject: input.specification.subject,
77
+ }),
78
+ ]),
69
79
  // Not escaped: unlike `data`, a task instruction is runtime-generated
70
80
  // (a trigger, an operator, a schedule), not external content — R8 only
71
81
  // requires balisage for content that entered from a comment, import, or
@@ -1 +1 @@
1
- {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/identity/context.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../src/identity/context.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -99,10 +99,10 @@ export type { OpenAiClientConfig, OpenAiRequestBody } from './providers/openai.j
99
99
  export { buildOpenAiRequest, createOpenAiClient, parseOpenAiResponse } from './providers/openai.js';
100
100
  export type { ProviderEntryConfig, ProviderName, ProviderRegistryConfig, } from './providers/registry.js';
101
101
  export { createProviderRegistry } from './providers/registry.js';
102
- export { resolveProviderRegistryConfig } from './providers/resolve.js';
102
+ export { resolveImageProviderRegistryConfig, resolveProviderRegistryConfig, } from './providers/resolve.js';
103
103
  export type { FileProviderConfigStoreOptions, ProviderConfigInput, ProviderConfigStore, StoredProviderConfig, } from './providers/store.js';
104
104
  export { createFileProviderConfigStore } from './providers/store.js';
105
- export type { ChatMessage, ChatOptions, ChatRequest, ChatResponse, ChatRole, ProviderClient, ProviderToolCall, ProviderToolSpec, StopReason, TokenUsage, } from './providers/types.js';
105
+ export type { ChatContentPart, ChatImagePart, ChatMessage, ChatOptions, ChatRequest, ChatResponse, ChatRole, ChatTextPart, ProviderClient, ProviderToolCall, ProviderToolSpec, StopReason, TokenUsage, } from './providers/types.js';
106
106
  export { chunkDocument } from './rag/chunking/chunk-document.js';
107
107
  export type { IngestionPlan } from './rag/chunking/incremental.js';
108
108
  export { planIncrementalIngestion } from './rag/chunking/incremental.js';
@@ -172,7 +172,11 @@ export { generateSkin } from './skin/generate.js';
172
172
  export { runSubagent } from './subagents/run-subagent.js';
173
173
  export type { AgentToolsDeclaration } from './subagents/types.js';
174
174
  export { validateSubagentTools } from './subagents/validate.js';
175
- export type { ProposeThemeCandidatesInput, ProposeThemeCandidatesResult, ThemeCreatorAttachment, ThemeCreatorCandidate, ThemeCreatorChromeInput, ThemeCreatorTargetTheme, } from './theme-creator/propose-theme.js';
175
+ export type { ProcessedAttachments, ThemeCreatorAttachment, } from './theme-creator/attachments.js';
176
+ export { processAttachments } from './theme-creator/attachments.js';
177
+ export type { ClassifyLayoutNeedInput, ClassifyLayoutNeedResult, } from './theme-creator/layout-classifier.js';
178
+ export { classifyThemeLayoutNeed } from './theme-creator/layout-classifier.js';
179
+ export type { ProposeThemeCandidatesInput, ProposeThemeCandidatesResult, ThemeCreatorCandidate, ThemeCreatorChromeInput, ThemeCreatorTargetTheme, } from './theme-creator/propose-theme.js';
176
180
  export { proposeThemeCandidates } from './theme-creator/propose-theme.js';
177
181
  export type { AgentDelegateInput, AgentDelegateOutput, AgentDelegateToolOptions, } from './tools/core/agent-delegate.js';
178
182
  export { agentDelegateToolName, createAgentDelegateTool } from './tools/core/agent-delegate.js';
@@ -186,7 +190,8 @@ export type { DepsScanOutput, DepsScanToolOptions } from './tools/core/deps-scan
186
190
  export { createDepsScanTool } from './tools/core/deps-scan.js';
187
191
  export type { HttpFetchInput, HttpFetchOutput, HttpFetchToolOptions, } from './tools/core/http-fetch.js';
188
192
  export { createHttpFetchTool } from './tools/core/http-fetch.js';
189
- export { createMediaReadTool, createMediaWriteTool } from './tools/core/media.js';
193
+ export type { MediaStoreImageToolOptions, StoreImageInput, StoreImageOutput, } from './tools/core/media.js';
194
+ export { createMediaReadTool, createMediaStoreImageTool, createMediaWriteTool, } from './tools/core/media.js';
190
195
  export type { NotFoundLogReader } from './tools/core/not-found-log.js';
191
196
  export { createNotFoundLogReadTool } from './tools/core/not-found-log.js';
192
197
  export type { RedirectWriter } from './tools/core/redirects.js';