@soleri/forge 8.0.0 → 8.1.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.
- package/dist/compose-claude-md.js +10 -8
- package/dist/compose-claude-md.js.map +1 -1
- package/dist/facades/forge.facade.js +20 -4
- package/dist/facades/forge.facade.js.map +1 -1
- package/dist/scaffold-filetree.js +76 -7
- package/dist/scaffold-filetree.js.map +1 -1
- package/dist/templates/entry-point.js +2 -2
- package/package.json +2 -1
- package/src/compose-claude-md.ts +10 -18
- package/src/facades/forge.facade.ts +21 -4
- package/src/scaffold-filetree.ts +78 -7
- package/src/templates/entry-point.ts +2 -2
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
8
8
|
import { join } from 'node:path';
|
|
9
9
|
import { parse as parseYaml } from 'yaml';
|
|
10
|
+
import { ENGINE_MODULE_MANIFEST, CORE_KEY_OPS } from '@soleri/core/module-manifest';
|
|
10
11
|
// ─── Main Composer ────────────────────────────────────────────────────
|
|
11
12
|
/**
|
|
12
13
|
* Compose CLAUDE.md from an agent folder.
|
|
@@ -126,14 +127,15 @@ function composeToolsTable(agent, tools) {
|
|
|
126
127
|
}
|
|
127
128
|
}
|
|
128
129
|
else {
|
|
129
|
-
// Placeholder
|
|
130
|
-
|
|
131
|
-
lines.push(`| \`${agent.id}
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
130
|
+
// Placeholder generated from ENGINE_MODULE_MANIFEST (single source of truth)
|
|
131
|
+
const coreOpsStr = CORE_KEY_OPS.map((o) => `\`${o}\``).join(', ');
|
|
132
|
+
lines.push(`| \`${agent.id}_core\` | ${coreOpsStr} |`);
|
|
133
|
+
for (const mod of ENGINE_MODULE_MANIFEST) {
|
|
134
|
+
if (mod.conditional)
|
|
135
|
+
continue;
|
|
136
|
+
const opsStr = mod.keyOps.map((o) => `\`${o}\``).join(', ');
|
|
137
|
+
lines.push(`| \`${agent.id}_${mod.suffix}\` | ${opsStr} |`);
|
|
138
|
+
}
|
|
137
139
|
// Domain facades from packs
|
|
138
140
|
if (agent.packs) {
|
|
139
141
|
for (const pack of agent.packs) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compose-claude-md.js","sourceRoot":"","sources":["../src/compose-claude-md.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAChE,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"compose-claude-md.js","sourceRoot":"","sources":["../src/compose-claude-md.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { scaffold, previewScaffold, listAgents } from '../scaffolder.js';
|
|
3
|
+
import { scaffoldFileTree } from '../scaffold-filetree.js';
|
|
3
4
|
import { AgentConfigSchema } from '../types.js';
|
|
5
|
+
import { AgentYamlSchema } from '../agent-schema.js';
|
|
4
6
|
import { installKnowledge } from '../knowledge-installer.js';
|
|
5
7
|
import { addDomain } from '../domain-manager.js';
|
|
6
8
|
export const forgeOps = [
|
|
@@ -17,10 +19,24 @@ export const forgeOps = [
|
|
|
17
19
|
},
|
|
18
20
|
{
|
|
19
21
|
name: 'create',
|
|
20
|
-
description: '
|
|
21
|
-
'
|
|
22
|
-
'
|
|
23
|
-
'After creation:
|
|
22
|
+
description: 'Create a file-tree agent (v7, recommended). ' +
|
|
23
|
+
'Generates a folder with agent.yaml, instructions/, workflows/, and CLAUDE.md. ' +
|
|
24
|
+
'No TypeScript, no build step. Ready to use immediately. ' +
|
|
25
|
+
'After creation: run `soleri install` and restart your host client.',
|
|
26
|
+
schema: AgentYamlSchema.extend({
|
|
27
|
+
outputDir: z.string().describe('Parent directory for the new agent folder'),
|
|
28
|
+
}),
|
|
29
|
+
handler: async (params) => {
|
|
30
|
+
const { outputDir, ...input } = params;
|
|
31
|
+
const config = AgentYamlSchema.parse(input);
|
|
32
|
+
return scaffoldFileTree(config, outputDir);
|
|
33
|
+
},
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
name: 'create_legacy',
|
|
37
|
+
description: '[Deprecated] Scaffold a TypeScript MCP agent project (v6). ' +
|
|
38
|
+
'Prefer "create" for file-tree agents. ' +
|
|
39
|
+
'This path generates TypeScript source, runs npm install + build, and registers MCP server.',
|
|
24
40
|
schema: AgentConfigSchema,
|
|
25
41
|
handler: async (params) => {
|
|
26
42
|
const config = AgentConfigSchema.parse(params);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forge.facade.js","sourceRoot":"","sources":["../../src/facades/forge.facade.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AACzE,OAAO,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAC7D,OAAO,EAAE,SAAS,EAAE,MAAM,sBAAsB,CAAC;AASjD,MAAM,CAAC,MAAM,QAAQ,GAAY;IAC/B;QACE,IAAI,EAAE,SAAS;QACf,WAAW,EACT,gEAAgE;YAChE,uEAAuE;YACvE,oCAAoC;QACtC,MAAM,EAAE,iBAAiB;QACzB,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE;YACxB,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;YAC/C,OAAO,eAAe,CAAC,MAAM,CAAC,CAAC;QACjC,CAAC;KACF;IACD;QACE,IAAI,EAAE,QAAQ;QACd,WAAW,EACT,
|
|
1
|
+
{"version":3,"file":"forge.facade.js","sourceRoot":"","sources":["../../src/facades/forge.facade.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,8 +6,9 @@
|
|
|
6
6
|
*
|
|
7
7
|
* Replaces the old scaffold() that generated TypeScript projects.
|
|
8
8
|
*/
|
|
9
|
-
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
10
|
-
import { join } from 'node:path';
|
|
9
|
+
import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
10
|
+
import { join, dirname } from 'node:path';
|
|
11
|
+
import { fileURLToPath } from 'node:url';
|
|
11
12
|
import { stringify as yamlStringify } from 'yaml';
|
|
12
13
|
import { AgentYamlSchema } from './agent-schema.js';
|
|
13
14
|
import { getEngineRulesContent } from './templates/shared-rules.js';
|
|
@@ -72,8 +73,8 @@ When building a new feature, adding functionality, or creating components.
|
|
|
72
73
|
- soleri_vault op:search_intelligent
|
|
73
74
|
- soleri_vault op:capture_knowledge
|
|
74
75
|
- soleri_vault op:link_entries
|
|
75
|
-
-
|
|
76
|
-
-
|
|
76
|
+
- soleri_plan op:create_plan
|
|
77
|
+
- soleri_plan op:approve_plan
|
|
77
78
|
- soleri_brain op:recommend
|
|
78
79
|
`,
|
|
79
80
|
},
|
|
@@ -125,7 +126,7 @@ When fixing bugs, resolving errors, or addressing regressions.
|
|
|
125
126
|
tools: `tools:
|
|
126
127
|
- soleri_vault op:search_intelligent
|
|
127
128
|
- soleri_vault op:capture_knowledge
|
|
128
|
-
-
|
|
129
|
+
- soleri_plan op:create_plan
|
|
129
130
|
- soleri_brain op:recommend
|
|
130
131
|
`,
|
|
131
132
|
},
|
|
@@ -266,14 +267,18 @@ export function scaffoldFileTree(input, outputDir) {
|
|
|
266
267
|
writeFile(agentDir, `workflows/${wf.name}/gates.yaml`, wf.gates, filesCreated);
|
|
267
268
|
writeFile(agentDir, `workflows/${wf.name}/tools.yaml`, wf.tools, filesCreated);
|
|
268
269
|
}
|
|
269
|
-
// ─── 8. Write
|
|
270
|
+
// ─── 8. Write knowledge bundles (seed from starter packs if available) ──
|
|
271
|
+
const starterPacksDir = resolveStarterPacksDir();
|
|
272
|
+
let totalSeeded = 0;
|
|
270
273
|
for (const domain of config.domains) {
|
|
274
|
+
const starterEntries = loadStarterEntries(starterPacksDir, domain);
|
|
271
275
|
const bundle = {
|
|
272
276
|
domain,
|
|
273
277
|
version: '1.0.0',
|
|
274
|
-
entries:
|
|
278
|
+
entries: starterEntries,
|
|
275
279
|
};
|
|
276
280
|
writeFile(agentDir, `knowledge/${domain}.json`, JSON.stringify(bundle, null, 2) + '\n', filesCreated);
|
|
281
|
+
totalSeeded += starterEntries.length;
|
|
277
282
|
}
|
|
278
283
|
// ─── 9. Generate CLAUDE.md ──────────────────────────────────
|
|
279
284
|
const { content: claudeMd } = composeClaudeMd(agentDir);
|
|
@@ -284,6 +289,7 @@ export function scaffoldFileTree(input, outputDir) {
|
|
|
284
289
|
'',
|
|
285
290
|
` Files: ${filesCreated.length}`,
|
|
286
291
|
` Domains: ${config.domains.join(', ')}`,
|
|
292
|
+
` Knowledge: ${totalSeeded} starter entries seeded`,
|
|
287
293
|
` Workflows: ${BUILTIN_WORKFLOWS.map((w) => w.name).join(', ')}`,
|
|
288
294
|
'',
|
|
289
295
|
'Next steps:',
|
|
@@ -358,4 +364,67 @@ function buildAgentYaml(config) {
|
|
|
358
364
|
}
|
|
359
365
|
return yaml;
|
|
360
366
|
}
|
|
367
|
+
// ─── Starter Pack Helpers ────────────────────────────────────────────
|
|
368
|
+
/** Domain aliases — map agent domains to starter pack directories. */
|
|
369
|
+
const DOMAIN_TO_STARTER = {
|
|
370
|
+
// design starter
|
|
371
|
+
frontend: 'design',
|
|
372
|
+
design: 'design',
|
|
373
|
+
'ui-design': 'design',
|
|
374
|
+
accessibility: 'design',
|
|
375
|
+
styling: 'design',
|
|
376
|
+
react: 'design',
|
|
377
|
+
'component-patterns': 'design',
|
|
378
|
+
'responsive-design': 'design',
|
|
379
|
+
// security starter
|
|
380
|
+
security: 'security',
|
|
381
|
+
auth: 'security',
|
|
382
|
+
authentication: 'security',
|
|
383
|
+
// architecture starter
|
|
384
|
+
architecture: 'architecture',
|
|
385
|
+
'api-design': 'architecture',
|
|
386
|
+
database: 'architecture',
|
|
387
|
+
backend: 'architecture',
|
|
388
|
+
infrastructure: 'architecture',
|
|
389
|
+
};
|
|
390
|
+
function resolveStarterPacksDir() {
|
|
391
|
+
// Try repo-relative path (monorepo development)
|
|
392
|
+
const forgeDir = dirname(fileURLToPath(import.meta.url));
|
|
393
|
+
const candidates = [
|
|
394
|
+
join(forgeDir, '..', '..', '..', 'knowledge-packs', 'starter'),
|
|
395
|
+
join(forgeDir, '..', '..', 'knowledge-packs', 'starter'),
|
|
396
|
+
];
|
|
397
|
+
for (const dir of candidates) {
|
|
398
|
+
if (existsSync(dir))
|
|
399
|
+
return dir;
|
|
400
|
+
}
|
|
401
|
+
return null;
|
|
402
|
+
}
|
|
403
|
+
function loadStarterEntries(starterDir, domain) {
|
|
404
|
+
if (!starterDir)
|
|
405
|
+
return [];
|
|
406
|
+
const packName = DOMAIN_TO_STARTER[domain];
|
|
407
|
+
if (!packName)
|
|
408
|
+
return [];
|
|
409
|
+
const vaultDir = join(starterDir, packName, 'vault');
|
|
410
|
+
if (!existsSync(vaultDir))
|
|
411
|
+
return [];
|
|
412
|
+
const entries = [];
|
|
413
|
+
try {
|
|
414
|
+
const files = readdirSync(vaultDir).filter((f) => f.endsWith('.json'));
|
|
415
|
+
for (const file of files) {
|
|
416
|
+
const data = JSON.parse(readFileSync(join(vaultDir, file), 'utf-8'));
|
|
417
|
+
if (Array.isArray(data)) {
|
|
418
|
+
entries.push(...data);
|
|
419
|
+
}
|
|
420
|
+
else if (data.entries && Array.isArray(data.entries)) {
|
|
421
|
+
entries.push(...data.entries);
|
|
422
|
+
}
|
|
423
|
+
}
|
|
424
|
+
}
|
|
425
|
+
catch {
|
|
426
|
+
// Starter pack unavailable — return empty
|
|
427
|
+
}
|
|
428
|
+
return entries;
|
|
429
|
+
}
|
|
361
430
|
//# sourceMappingURL=scaffold-filetree.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"scaffold-filetree.js","sourceRoot":"","sources":["../src/scaffold-filetree.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"scaffold-filetree.js","sourceRoot":"","sources":["../src/scaffold-filetree.ts"],"names":[],"mappings":"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"}
|
|
@@ -254,12 +254,12 @@ ${hasDomainPacks
|
|
|
254
254
|
const domainPacks = await loadDomainPacksFromConfig(${JSON.stringify(config.domainPacks)});
|
|
255
255
|
console.error(\`[\${tag}] Loaded \${domainPacks.length} domain packs\`);
|
|
256
256
|
for (const pack of domainPacks) {
|
|
257
|
-
|
|
257
|
+
const packRuntime = createPackRuntime(runtime);
|
|
258
|
+
if (pack.onActivate) await pack.onActivate(packRuntime, runtime);
|
|
258
259
|
}
|
|
259
260
|
|
|
260
261
|
// ─── Capability Registry ─────────────────────────────────────
|
|
261
262
|
const capabilityRegistry = new CapabilityRegistry();
|
|
262
|
-
const packRuntime = createPackRuntime(runtime);
|
|
263
263
|
|
|
264
264
|
// Register domain pack capabilities
|
|
265
265
|
for (const pack of domainPacks) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@soleri/forge",
|
|
3
|
-
"version": "8.
|
|
3
|
+
"version": "8.1.0",
|
|
4
4
|
"description": "Scaffold AI agents that learn, remember, and grow with you.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agent",
|
|
@@ -51,6 +51,7 @@
|
|
|
51
51
|
},
|
|
52
52
|
"dependencies": {
|
|
53
53
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
54
|
+
"@soleri/core": "^8.0.0",
|
|
54
55
|
"yaml": "^2.8.2",
|
|
55
56
|
"zod": "^3.24.2"
|
|
56
57
|
},
|
package/src/compose-claude-md.ts
CHANGED
|
@@ -9,6 +9,7 @@ import { readFileSync, readdirSync, existsSync } from 'node:fs';
|
|
|
9
9
|
import { join } from 'node:path';
|
|
10
10
|
import { parse as parseYaml } from 'yaml';
|
|
11
11
|
import type { AgentYaml } from './agent-schema.js';
|
|
12
|
+
import { ENGINE_MODULE_MANIFEST, CORE_KEY_OPS } from '@soleri/core/module-manifest';
|
|
12
13
|
|
|
13
14
|
// ─── Types ────────────────────────────────────────────────────────────
|
|
14
15
|
|
|
@@ -160,24 +161,15 @@ function composeToolsTable(agent: AgentYaml, tools?: ToolEntry[]): string {
|
|
|
160
161
|
lines.push(`| \`${tool.facade}\` | ${opsStr}${suffix} |`);
|
|
161
162
|
}
|
|
162
163
|
} else {
|
|
163
|
-
// Placeholder
|
|
164
|
-
|
|
165
|
-
lines.push(
|
|
166
|
-
|
|
167
|
-
)
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
`| \`${agent.id}
|
|
171
|
-
|
|
172
|
-
lines.push(
|
|
173
|
-
`| \`${agent.id}_memory\` | \`memory_search\`, \`memory_capture\`, \`session_capture\` |`,
|
|
174
|
-
);
|
|
175
|
-
lines.push(
|
|
176
|
-
`| \`${agent.id}_curator\` | \`curator_groom\`, \`curator_status\`, \`curator_health\` |`,
|
|
177
|
-
);
|
|
178
|
-
lines.push(
|
|
179
|
-
`| \`${agent.id}_admin\` | \`admin_health\`, \`admin_tool_list\`, \`admin_diagnostic\` |`,
|
|
180
|
-
);
|
|
164
|
+
// Placeholder generated from ENGINE_MODULE_MANIFEST (single source of truth)
|
|
165
|
+
const coreOpsStr = CORE_KEY_OPS.map((o) => `\`${o}\``).join(', ');
|
|
166
|
+
lines.push(`| \`${agent.id}_core\` | ${coreOpsStr} |`);
|
|
167
|
+
|
|
168
|
+
for (const mod of ENGINE_MODULE_MANIFEST) {
|
|
169
|
+
if (mod.conditional) continue;
|
|
170
|
+
const opsStr = mod.keyOps.map((o) => `\`${o}\``).join(', ');
|
|
171
|
+
lines.push(`| \`${agent.id}_${mod.suffix}\` | ${opsStr} |`);
|
|
172
|
+
}
|
|
181
173
|
|
|
182
174
|
// Domain facades from packs
|
|
183
175
|
if (agent.packs) {
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
import { scaffold, previewScaffold, listAgents } from '../scaffolder.js';
|
|
3
|
+
import { scaffoldFileTree } from '../scaffold-filetree.js';
|
|
3
4
|
import { AgentConfigSchema } from '../types.js';
|
|
5
|
+
import { AgentYamlSchema } from '../agent-schema.js';
|
|
4
6
|
import { installKnowledge } from '../knowledge-installer.js';
|
|
5
7
|
import { addDomain } from '../domain-manager.js';
|
|
6
8
|
|
|
@@ -27,10 +29,25 @@ export const forgeOps: OpDef[] = [
|
|
|
27
29
|
{
|
|
28
30
|
name: 'create',
|
|
29
31
|
description:
|
|
30
|
-
'
|
|
31
|
-
'
|
|
32
|
-
'
|
|
33
|
-
'After creation:
|
|
32
|
+
'Create a file-tree agent (v7, recommended). ' +
|
|
33
|
+
'Generates a folder with agent.yaml, instructions/, workflows/, and CLAUDE.md. ' +
|
|
34
|
+
'No TypeScript, no build step. Ready to use immediately. ' +
|
|
35
|
+
'After creation: run `soleri install` and restart your host client.',
|
|
36
|
+
schema: AgentYamlSchema.extend({
|
|
37
|
+
outputDir: z.string().describe('Parent directory for the new agent folder'),
|
|
38
|
+
}),
|
|
39
|
+
handler: async (params) => {
|
|
40
|
+
const { outputDir, ...input } = params as Record<string, unknown> & { outputDir: string };
|
|
41
|
+
const config = AgentYamlSchema.parse(input);
|
|
42
|
+
return scaffoldFileTree(config, outputDir);
|
|
43
|
+
},
|
|
44
|
+
},
|
|
45
|
+
{
|
|
46
|
+
name: 'create_legacy',
|
|
47
|
+
description:
|
|
48
|
+
'[Deprecated] Scaffold a TypeScript MCP agent project (v6). ' +
|
|
49
|
+
'Prefer "create" for file-tree agents. ' +
|
|
50
|
+
'This path generates TypeScript source, runs npm install + build, and registers MCP server.',
|
|
34
51
|
schema: AgentConfigSchema,
|
|
35
52
|
handler: async (params) => {
|
|
36
53
|
const config = AgentConfigSchema.parse(params);
|
package/src/scaffold-filetree.ts
CHANGED
|
@@ -7,8 +7,9 @@
|
|
|
7
7
|
* Replaces the old scaffold() that generated TypeScript projects.
|
|
8
8
|
*/
|
|
9
9
|
|
|
10
|
-
import { mkdirSync, writeFileSync, existsSync } from 'node:fs';
|
|
11
|
-
import { join } from 'node:path';
|
|
10
|
+
import { mkdirSync, writeFileSync, existsSync, readFileSync, readdirSync } from 'node:fs';
|
|
11
|
+
import { join, dirname } from 'node:path';
|
|
12
|
+
import { fileURLToPath } from 'node:url';
|
|
12
13
|
import { stringify as yamlStringify } from 'yaml';
|
|
13
14
|
import type { AgentYaml, AgentYamlInput } from './agent-schema.js';
|
|
14
15
|
import { AgentYamlSchema } from './agent-schema.js';
|
|
@@ -93,8 +94,8 @@ When building a new feature, adding functionality, or creating components.
|
|
|
93
94
|
- soleri_vault op:search_intelligent
|
|
94
95
|
- soleri_vault op:capture_knowledge
|
|
95
96
|
- soleri_vault op:link_entries
|
|
96
|
-
-
|
|
97
|
-
-
|
|
97
|
+
- soleri_plan op:create_plan
|
|
98
|
+
- soleri_plan op:approve_plan
|
|
98
99
|
- soleri_brain op:recommend
|
|
99
100
|
`,
|
|
100
101
|
},
|
|
@@ -146,7 +147,7 @@ When fixing bugs, resolving errors, or addressing regressions.
|
|
|
146
147
|
tools: `tools:
|
|
147
148
|
- soleri_vault op:search_intelligent
|
|
148
149
|
- soleri_vault op:capture_knowledge
|
|
149
|
-
-
|
|
150
|
+
- soleri_plan op:create_plan
|
|
150
151
|
- soleri_brain op:recommend
|
|
151
152
|
`,
|
|
152
153
|
},
|
|
@@ -307,12 +308,16 @@ export function scaffoldFileTree(input: AgentYamlInput, outputDir: string): File
|
|
|
307
308
|
writeFile(agentDir, `workflows/${wf.name}/tools.yaml`, wf.tools, filesCreated);
|
|
308
309
|
}
|
|
309
310
|
|
|
310
|
-
// ─── 8. Write
|
|
311
|
+
// ─── 8. Write knowledge bundles (seed from starter packs if available) ──
|
|
312
|
+
const starterPacksDir = resolveStarterPacksDir();
|
|
313
|
+
let totalSeeded = 0;
|
|
314
|
+
|
|
311
315
|
for (const domain of config.domains) {
|
|
316
|
+
const starterEntries = loadStarterEntries(starterPacksDir, domain);
|
|
312
317
|
const bundle = {
|
|
313
318
|
domain,
|
|
314
319
|
version: '1.0.0',
|
|
315
|
-
entries:
|
|
320
|
+
entries: starterEntries,
|
|
316
321
|
};
|
|
317
322
|
writeFile(
|
|
318
323
|
agentDir,
|
|
@@ -320,6 +325,7 @@ export function scaffoldFileTree(input: AgentYamlInput, outputDir: string): File
|
|
|
320
325
|
JSON.stringify(bundle, null, 2) + '\n',
|
|
321
326
|
filesCreated,
|
|
322
327
|
);
|
|
328
|
+
totalSeeded += starterEntries.length;
|
|
323
329
|
}
|
|
324
330
|
|
|
325
331
|
// ─── 9. Generate CLAUDE.md ──────────────────────────────────
|
|
@@ -332,6 +338,7 @@ export function scaffoldFileTree(input: AgentYamlInput, outputDir: string): File
|
|
|
332
338
|
'',
|
|
333
339
|
` Files: ${filesCreated.length}`,
|
|
334
340
|
` Domains: ${config.domains.join(', ')}`,
|
|
341
|
+
` Knowledge: ${totalSeeded} starter entries seeded`,
|
|
335
342
|
` Workflows: ${BUILTIN_WORKFLOWS.map((w) => w.name).join(', ')}`,
|
|
336
343
|
'',
|
|
337
344
|
'Next steps:',
|
|
@@ -419,3 +426,67 @@ function buildAgentYaml(config: AgentYaml): Record<string, unknown> {
|
|
|
419
426
|
|
|
420
427
|
return yaml;
|
|
421
428
|
}
|
|
429
|
+
|
|
430
|
+
// ─── Starter Pack Helpers ────────────────────────────────────────────
|
|
431
|
+
|
|
432
|
+
/** Domain aliases — map agent domains to starter pack directories. */
|
|
433
|
+
const DOMAIN_TO_STARTER: Record<string, string> = {
|
|
434
|
+
// design starter
|
|
435
|
+
frontend: 'design',
|
|
436
|
+
design: 'design',
|
|
437
|
+
'ui-design': 'design',
|
|
438
|
+
accessibility: 'design',
|
|
439
|
+
styling: 'design',
|
|
440
|
+
react: 'design',
|
|
441
|
+
'component-patterns': 'design',
|
|
442
|
+
'responsive-design': 'design',
|
|
443
|
+
// security starter
|
|
444
|
+
security: 'security',
|
|
445
|
+
auth: 'security',
|
|
446
|
+
authentication: 'security',
|
|
447
|
+
// architecture starter
|
|
448
|
+
architecture: 'architecture',
|
|
449
|
+
'api-design': 'architecture',
|
|
450
|
+
database: 'architecture',
|
|
451
|
+
backend: 'architecture',
|
|
452
|
+
infrastructure: 'architecture',
|
|
453
|
+
};
|
|
454
|
+
|
|
455
|
+
function resolveStarterPacksDir(): string | null {
|
|
456
|
+
// Try repo-relative path (monorepo development)
|
|
457
|
+
const forgeDir = dirname(fileURLToPath(import.meta.url));
|
|
458
|
+
const candidates = [
|
|
459
|
+
join(forgeDir, '..', '..', '..', 'knowledge-packs', 'starter'),
|
|
460
|
+
join(forgeDir, '..', '..', 'knowledge-packs', 'starter'),
|
|
461
|
+
];
|
|
462
|
+
for (const dir of candidates) {
|
|
463
|
+
if (existsSync(dir)) return dir;
|
|
464
|
+
}
|
|
465
|
+
return null;
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
function loadStarterEntries(starterDir: string | null, domain: string): unknown[] {
|
|
469
|
+
if (!starterDir) return [];
|
|
470
|
+
|
|
471
|
+
const packName = DOMAIN_TO_STARTER[domain];
|
|
472
|
+
if (!packName) return [];
|
|
473
|
+
|
|
474
|
+
const vaultDir = join(starterDir, packName, 'vault');
|
|
475
|
+
if (!existsSync(vaultDir)) return [];
|
|
476
|
+
|
|
477
|
+
const entries: unknown[] = [];
|
|
478
|
+
try {
|
|
479
|
+
const files = readdirSync(vaultDir).filter((f: string) => f.endsWith('.json'));
|
|
480
|
+
for (const file of files) {
|
|
481
|
+
const data = JSON.parse(readFileSync(join(vaultDir, file), 'utf-8'));
|
|
482
|
+
if (Array.isArray(data)) {
|
|
483
|
+
entries.push(...data);
|
|
484
|
+
} else if (data.entries && Array.isArray(data.entries)) {
|
|
485
|
+
entries.push(...data.entries);
|
|
486
|
+
}
|
|
487
|
+
}
|
|
488
|
+
} catch {
|
|
489
|
+
// Starter pack unavailable — return empty
|
|
490
|
+
}
|
|
491
|
+
return entries;
|
|
492
|
+
}
|
|
@@ -263,12 +263,12 @@ ${
|
|
|
263
263
|
const domainPacks = await loadDomainPacksFromConfig(${JSON.stringify(config.domainPacks)});
|
|
264
264
|
console.error(\`[\${tag}] Loaded \${domainPacks.length} domain packs\`);
|
|
265
265
|
for (const pack of domainPacks) {
|
|
266
|
-
|
|
266
|
+
const packRuntime = createPackRuntime(runtime);
|
|
267
|
+
if (pack.onActivate) await pack.onActivate(packRuntime, runtime);
|
|
267
268
|
}
|
|
268
269
|
|
|
269
270
|
// ─── Capability Registry ─────────────────────────────────────
|
|
270
271
|
const capabilityRegistry = new CapabilityRegistry();
|
|
271
|
-
const packRuntime = createPackRuntime(runtime);
|
|
272
272
|
|
|
273
273
|
// Register domain pack capabilities
|
|
274
274
|
for (const pack of domainPacks) {
|