@soleri/forge 5.0.1 → 5.1.1

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 (63) hide show
  1. package/dist/index.js +0 -0
  2. package/dist/templates/claude-md-template.js +2 -2
  3. package/dist/templates/claude-md-template.js.map +1 -1
  4. package/dist/templates/entry-point.js +17 -2
  5. package/dist/templates/entry-point.js.map +1 -1
  6. package/dist/templates/test-facades.js +11 -2
  7. package/dist/templates/test-facades.js.map +1 -1
  8. package/dist/types.d.ts +2 -2
  9. package/package.json +1 -1
  10. package/src/templates/claude-md-template.ts +20 -0
  11. package/src/templates/entry-point.ts +17 -2
  12. package/src/templates/test-facades.ts +11 -2
  13. package/dist/templates/brain.d.ts +0 -6
  14. package/dist/templates/brain.js +0 -478
  15. package/dist/templates/brain.js.map +0 -1
  16. package/dist/templates/core-facade.d.ts +0 -6
  17. package/dist/templates/core-facade.js +0 -564
  18. package/dist/templates/core-facade.js.map +0 -1
  19. package/dist/templates/facade-factory.d.ts +0 -1
  20. package/dist/templates/facade-factory.js +0 -63
  21. package/dist/templates/facade-factory.js.map +0 -1
  22. package/dist/templates/facade-types.d.ts +0 -1
  23. package/dist/templates/facade-types.js +0 -46
  24. package/dist/templates/facade-types.js.map +0 -1
  25. package/dist/templates/intelligence-loader.d.ts +0 -1
  26. package/dist/templates/intelligence-loader.js +0 -43
  27. package/dist/templates/intelligence-loader.js.map +0 -1
  28. package/dist/templates/intelligence-types.d.ts +0 -1
  29. package/dist/templates/intelligence-types.js +0 -24
  30. package/dist/templates/intelligence-types.js.map +0 -1
  31. package/dist/templates/llm-client.d.ts +0 -7
  32. package/dist/templates/llm-client.js +0 -300
  33. package/dist/templates/llm-client.js.map +0 -1
  34. package/dist/templates/llm-key-pool.d.ts +0 -7
  35. package/dist/templates/llm-key-pool.js +0 -211
  36. package/dist/templates/llm-key-pool.js.map +0 -1
  37. package/dist/templates/llm-types.d.ts +0 -5
  38. package/dist/templates/llm-types.js +0 -161
  39. package/dist/templates/llm-types.js.map +0 -1
  40. package/dist/templates/llm-utils.d.ts +0 -5
  41. package/dist/templates/llm-utils.js +0 -260
  42. package/dist/templates/llm-utils.js.map +0 -1
  43. package/dist/templates/planner.d.ts +0 -5
  44. package/dist/templates/planner.js +0 -150
  45. package/dist/templates/planner.js.map +0 -1
  46. package/dist/templates/test-brain.d.ts +0 -6
  47. package/dist/templates/test-brain.js +0 -474
  48. package/dist/templates/test-brain.js.map +0 -1
  49. package/dist/templates/test-llm.d.ts +0 -7
  50. package/dist/templates/test-llm.js +0 -574
  51. package/dist/templates/test-llm.js.map +0 -1
  52. package/dist/templates/test-loader.d.ts +0 -5
  53. package/dist/templates/test-loader.js +0 -146
  54. package/dist/templates/test-loader.js.map +0 -1
  55. package/dist/templates/test-planner.d.ts +0 -5
  56. package/dist/templates/test-planner.js +0 -271
  57. package/dist/templates/test-planner.js.map +0 -1
  58. package/dist/templates/test-vault.d.ts +0 -5
  59. package/dist/templates/test-vault.js +0 -380
  60. package/dist/templates/test-vault.js.map +0 -1
  61. package/dist/templates/vault.d.ts +0 -5
  62. package/dist/templates/vault.js +0 -263
  63. package/dist/templates/vault.js.map +0 -1
package/dist/index.js CHANGED
File without changes
@@ -45,8 +45,8 @@ export function generateClaudeMdTemplate(config) {
45
45
  mdLines.push(`| Capture ${d} | ${bt}${toolName}${bt} | ${bt}capture${bt} |`);
46
46
  }
47
47
  // Memory + Session + Export + Brain + Planning rows
48
- mdLines.push(`| Memory search | ${bt}${facadeId}_core${bt} | ${bt}memory_search${bt} |`, `| Memory capture | ${bt}${facadeId}_core${bt} | ${bt}memory_capture${bt} |`, `| Memory list | ${bt}${facadeId}_core${bt} | ${bt}memory_list${bt} |`, `| Session capture | ${bt}${facadeId}_core${bt} | ${bt}session_capture${bt} |`, `| Export knowledge | ${bt}${facadeId}_core${bt} | ${bt}export${bt} |`, `| Record feedback | ${bt}${facadeId}_core${bt} | ${bt}record_feedback${bt} |`, `| Rebuild vocabulary | ${bt}${facadeId}_core${bt} | ${bt}rebuild_vocabulary${bt} |`, `| Brain stats | ${bt}${facadeId}_core${bt} | ${bt}brain_stats${bt} |`, `| LLM status | ${bt}${facadeId}_core${bt} | ${bt}llm_status${bt} |`, `| Create plan | ${bt}${facadeId}_core${bt} | ${bt}create_plan${bt} |`, `| Get plan | ${bt}${facadeId}_core${bt} | ${bt}get_plan${bt} |`, `| Approve plan | ${bt}${facadeId}_core${bt} | ${bt}approve_plan${bt} |`, `| Update task | ${bt}${facadeId}_core${bt} | ${bt}update_task${bt} |`, `| Complete plan | ${bt}${facadeId}_core${bt} | ${bt}complete_plan${bt} |`);
49
- mdLines.push('', '## Intent Detection', '', '| Signal | Intent |', '|--------|--------|', '| Problem described ("broken", "janky", "weird") | FIX |', '| Need expressed ("I need", "we should have") | BUILD |', '| Quality questioned ("is this right?") | REVIEW |', '| Advice sought ("how should I", "best way") | PLAN |', '| Improvement requested ("make it faster") | IMPROVE |', '', '## Knowledge Protocol', '', 'When seeking guidance: vault before codebase before web.', '', `1. Search vault \u2014 ${bt}${facadeId}_core op:search${bt}`, '2. Codebase \u2014 only if vault has nothing', '3. Web \u2014 last resort', '', '## Knowledge Capture', '', 'When learning something that should persist, use the domain capture ops.', '', '## Session Capture', '', 'A PreCompact hook is configured to call `session_capture` before context compaction.', 'This automatically preserves session summaries as memories for future sessions.', `To manually capture: ${bt}${facadeId}_core op:session_capture params:{ summary: "..." }${bt}`, '', '## Planning', '', 'For multi-step tasks, use the planning system:', `1. Create: ${bt}${facadeId}_core op:create_plan params:{ objective: "...", scope: "...", tasks: [...] }${bt}`, `2. Approve: ${bt}${facadeId}_core op:approve_plan params:{ planId: "...", startExecution: true }${bt}`, `3. Track: ${bt}${facadeId}_core op:update_task params:{ planId: "...", taskId: "...", status: "completed" }${bt}`, `4. Complete: ${bt}${facadeId}_core op:complete_plan params:{ planId: "..." }${bt}`, '', 'Check activation response for recovered plans in `executing` state — remind the user.', '', `<!-- /${marker} -->`);
48
+ mdLines.push(`| Memory search | ${bt}${facadeId}_core${bt} | ${bt}memory_search${bt} |`, `| Memory capture | ${bt}${facadeId}_core${bt} | ${bt}memory_capture${bt} |`, `| Memory list | ${bt}${facadeId}_core${bt} | ${bt}memory_list${bt} |`, `| Session capture | ${bt}${facadeId}_core${bt} | ${bt}session_capture${bt} |`, `| Export knowledge | ${bt}${facadeId}_core${bt} | ${bt}export${bt} |`, `| Record feedback | ${bt}${facadeId}_core${bt} | ${bt}record_feedback${bt} |`, `| Rebuild vocabulary | ${bt}${facadeId}_core${bt} | ${bt}rebuild_vocabulary${bt} |`, `| Brain stats | ${bt}${facadeId}_core${bt} | ${bt}brain_stats${bt} |`, `| LLM status | ${bt}${facadeId}_core${bt} | ${bt}llm_status${bt} |`, `| Create plan | ${bt}${facadeId}_core${bt} | ${bt}create_plan${bt} |`, `| Get plan | ${bt}${facadeId}_core${bt} | ${bt}get_plan${bt} |`, `| Approve plan | ${bt}${facadeId}_core${bt} | ${bt}approve_plan${bt} |`, `| Update task | ${bt}${facadeId}_core${bt} | ${bt}update_task${bt} |`, `| Complete plan | ${bt}${facadeId}_core${bt} | ${bt}complete_plan${bt} |`, `| Route intent | ${bt}${facadeId}_core${bt} | ${bt}route_intent${bt} |`, `| Morph mode | ${bt}${facadeId}_core${bt} | ${bt}morph${bt} |`, `| Get behavior rules | ${bt}${facadeId}_core${bt} | ${bt}get_behavior_rules${bt} |`, `| Get identity | ${bt}${facadeId}_core${bt} | ${bt}get_identity${bt} |`, `| Update identity | ${bt}${facadeId}_core${bt} | ${bt}update_identity${bt} |`, `| Add guideline | ${bt}${facadeId}_core${bt} | ${bt}add_guideline${bt} |`, `| Remove guideline | ${bt}${facadeId}_core${bt} | ${bt}remove_guideline${bt} |`, `| Rollback identity | ${bt}${facadeId}_core${bt} | ${bt}rollback_identity${bt} |`);
49
+ mdLines.push('', '## Auto-Routing', '', 'A UserPromptSubmit hook auto-classifies every prompt via keyword matching.', `When you see a ${bt}[MODE-NAME]${bt} indicator in the system context:`, '', `1. Call ${bt}${facadeId}_core op:route_intent params:{ prompt: "<user message>" }${bt} to get full behavior rules`, '2. Follow the returned behavior rules for the detected mode', '3. Briefly acknowledge mode changes in your response (e.g., "Switching to FIX-MODE")', '', 'Available modes: FIX-MODE, BUILD-MODE, IMPROVE-MODE, DELIVER-MODE, REVIEW-MODE, PLAN-MODE, DESIGN-MODE, VALIDATE-MODE, EXPLORE-MODE, GENERAL-MODE.', 'GENERAL-MODE means the hook detected a work task but could not classify a specific mode — route_intent will refine it.', '', '## Intent Detection', '', '| Signal | Intent |', '|--------|--------|', '| Problem described ("broken", "janky", "weird") | FIX |', '| Need expressed ("I need", "we should have") | BUILD |', '| Quality questioned ("is this right?") | REVIEW |', '| Advice sought ("how should I", "best way") | PLAN |', '| Improvement requested ("make it faster") | IMPROVE |', '', '## Knowledge Protocol', '', 'When seeking guidance: vault before codebase before web.', '', `1. Search vault \u2014 ${bt}${facadeId}_core op:search${bt}`, '2. Codebase \u2014 only if vault has nothing', '3. Web \u2014 last resort', '', '## Knowledge Capture', '', 'When learning something that should persist, use the domain capture ops.', '', '## Session Capture', '', 'A PreCompact hook is configured to call `session_capture` before context compaction.', 'This automatically preserves session summaries as memories for future sessions.', `To manually capture: ${bt}${facadeId}_core op:session_capture params:{ summary: "..." }${bt}`, '', '## Planning', '', 'For multi-step tasks, use the planning system:', `1. Create: ${bt}${facadeId}_core op:create_plan params:{ objective: "...", scope: "...", tasks: [...] }${bt}`, `2. Approve: ${bt}${facadeId}_core op:approve_plan params:{ planId: "...", startExecution: true }${bt}`, `3. Track: ${bt}${facadeId}_core op:update_task params:{ planId: "...", taskId: "...", status: "completed" }${bt}`, `4. Complete: ${bt}${facadeId}_core op:complete_plan params:{ planId: "..." }${bt}`, '', 'Check activation response for recovered plans in `executing` state — remind the user.', '', `<!-- /${marker} -->`);
50
50
  // Escape each markdown line for use in a single-quoted TS string literal
51
51
  const quotedLines = mdLines.map((line) => {
52
52
  const escaped = line.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
@@ -1 +1 @@
1
- {"version":3,"file":"claude-md-template.js","sourceRoot":"","sources":["../../src/templates/claude-md-template.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"claude-md-template.js","sourceRoot":"","sources":["../../src/templates/claude-md-template.ts"],"names":[],"mappings":"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"}
@@ -59,9 +59,13 @@ async function main(): Promise<void> {
59
59
  },
60
60
  {
61
61
  name: 'identity',
62
- description: 'Get agent identity — name, role, principles.',
62
+ description: 'Get agent identity — name, role, principles. Uses IdentityManager with PERSONA fallback.',
63
63
  auth: 'read',
64
- handler: async () => PERSONA,
64
+ handler: async () => {
65
+ const identity = runtime.identityManager.getIdentity('${config.id}');
66
+ if (identity) return identity;
67
+ return PERSONA;
68
+ },
65
69
  },
66
70
  {
67
71
  name: 'activate',
@@ -75,6 +79,17 @@ async function main(): Promise<void> {
75
79
  if (params.deactivate) {
76
80
  return deactivateAgent();
77
81
  }
82
+ // Seed identity from PERSONA on first activation
83
+ if (!runtime.identityManager.getIdentity('${config.id}')) {
84
+ runtime.identityManager.setIdentity('${config.id}', {
85
+ name: PERSONA.name,
86
+ role: PERSONA.role,
87
+ description: PERSONA.description ?? '',
88
+ personality: PERSONA.principles ?? [],
89
+ changedBy: 'system',
90
+ changeReason: 'Initial identity seeded from PERSONA',
91
+ });
92
+ }
78
93
  return activateAgent(runtime.vault, (params.projectPath as string) ?? '.', runtime.planner);
79
94
  },
80
95
  },
@@ -1 +1 @@
1
- {"version":3,"file":"entry-point.js","sourceRoot":"","sources":["../../src/templates/entry-point.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEtD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;gBAwBO,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;qGAkC4E,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA6D9E,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;aAmBhC,MAAM,CAAC,EAAE;;;;;wDAKkC,MAAM,CAAC,EAAE,MAAM,cAAc;;;;aAIxE,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BF,MAAM,CAAC,EAAE;;;CAG5B,CAAC;AACF,CAAC"}
1
+ {"version":3,"file":"entry-point.js","sourceRoot":"","sources":["../../src/templates/entry-point.ts"],"names":[],"mappings":"AAEA;;;;;;GAMG;AACH,MAAM,UAAU,kBAAkB,CAAC,MAAmB;IACpD,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEtD,OAAO;;;;;;;;;;;;;;;;;;;;;;;;gBAwBO,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gEA+BuC,MAAM,CAAC,EAAE;;;;;;;qGAO4B,MAAM,CAAC,IAAI;;;;;;;;;;;oDAW5D,MAAM,CAAC,EAAE;iDACZ,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kCA4DxB,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;;;;;aAmBhC,MAAM,CAAC,EAAE;;;;;wDAKkC,MAAM,CAAC,EAAE,MAAM,cAAc;;;;aAIxE,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oBA8BF,MAAM,CAAC,EAAE;;;CAG5B,CAAC;AACF,CAAC"}
@@ -175,8 +175,17 @@ ${domainDescribes}
175
175
  expect(opNames).toContain('activate');
176
176
  expect(opNames).toContain('inject_claude_md');
177
177
  expect(opNames).toContain('setup');
178
- // Total: 42
179
- expect(facade.ops.length).toBe(42);
178
+ // Control ops (8)
179
+ expect(opNames).toContain('get_identity');
180
+ expect(opNames).toContain('update_identity');
181
+ expect(opNames).toContain('add_guideline');
182
+ expect(opNames).toContain('remove_guideline');
183
+ expect(opNames).toContain('rollback_identity');
184
+ expect(opNames).toContain('route_intent');
185
+ expect(opNames).toContain('morph');
186
+ expect(opNames).toContain('get_behavior_rules');
187
+ // Total: 50
188
+ expect(facade.ops.length).toBe(50);
180
189
  });
181
190
 
182
191
  it('search should query across all domains with ranked results', async () => {
@@ -1 +1 @@
1
- {"version":3,"file":"test-facades.js","sourceRoot":"","sources":["../../src/templates/test-facades.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAChD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCS,MAAM,CAAC,EAAE;;;;;;;;;;;EAWzB,eAAe;;cAEH,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAsEe,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;iBAehC,MAAM,CAAC,EAAE;;;;;;;;kCAQQ,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDAqCM,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAmCvB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;mCACzB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;0CAWlB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;qCA0B9B,MAAM,CAAC,EAAE;;;;;;;;;;;;;;wCAcN,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDhE,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,MAAc;IAC7D,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IAE7D,OAAO,eAAe,UAAU;;4CAEU,OAAO,OAAO,MAAM;;;;;kCAK9B,UAAU;;;;;;;;;iDASK,MAAM;;2BAE5B,MAAM,mBAAmB,MAAM;;;;;;kDAMR,MAAM;;;iCAGvB,MAAM;;2BAEZ,MAAM,kBAAkB,MAAM;;;;;;;wDAOD,MAAM;;;wCAGtB,MAAM;;;;eAI/B,MAAM;;;;;;;;yCAQoB,MAAM;;oCAEX,MAAM;;;;6CAIG,MAAM,mBAAmB,MAAM;;;gDAG5B,MAAM;gCACtB,MAAM;;;;6CAIO,MAAM,mBAAmB,MAAM;;;gDAG5B,MAAM;;kCAEpB,MAAM;;MAElC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC"}
1
+ {"version":3,"file":"test-facades.js","sourceRoot":"","sources":["../../src/templates/test-facades.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAmB;IACrD,MAAM,eAAe,GAAG,MAAM,CAAC,OAAO;SACnC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,sBAAsB,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAChD,IAAI,CAAC,MAAM,CAAC,CAAC;IAEhB,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBAmCS,MAAM,CAAC,EAAE;;;;;;;;;;;EAWzB,eAAe;;cAEH,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;sCAsEe,MAAM,CAAC,IAAI;;;;;;;;;;;;;;;iBAehC,MAAM,CAAC,EAAE;;;;;;;;kCAQQ,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iDA8CM,MAAM,CAAC,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mCAmCvB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;mCACzB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;0CAWlB,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;qCA0B9B,MAAM,CAAC,EAAE;;;;;;;;;;;;;;wCAcN,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDhE,CAAC;AACF,CAAC;AAED,SAAS,sBAAsB,CAAC,OAAe,EAAE,MAAc;IAC7D,MAAM,UAAU,GAAG,GAAG,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;IAE7D,OAAO,eAAe,UAAU;;4CAEU,OAAO,OAAO,MAAM;;;;;kCAK9B,UAAU;;;;;;;;;iDASK,MAAM;;2BAE5B,MAAM,mBAAmB,MAAM;;;;;;kDAMR,MAAM;;;iCAGvB,MAAM;;2BAEZ,MAAM,kBAAkB,MAAM;;;;;;;wDAOD,MAAM;;;wCAGtB,MAAM;;;;eAI/B,MAAM;;;;;;;;yCAQoB,MAAM;;oCAEX,MAAM;;;;6CAIG,MAAM,mBAAmB,MAAM;;;gDAG5B,MAAM;gCACtB,MAAM;;;;6CAIO,MAAM,mBAAmB,MAAM;;;gDAG5B,MAAM;;kCAEpB,MAAM;;MAElC,CAAC;AACP,CAAC;AAED,SAAS,YAAY,CAAC,CAAS;IAC7B,OAAO,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;AACvD,CAAC"}
package/dist/types.d.ts CHANGED
@@ -18,8 +18,8 @@ export declare const AgentConfigSchema: z.ZodObject<{
18
18
  /** Output directory (parent — agent dir will be created inside) */
19
19
  outputDir: z.ZodString;
20
20
  }, "strip", z.ZodTypeAny, {
21
- name: string;
22
21
  id: string;
22
+ name: string;
23
23
  role: string;
24
24
  description: string;
25
25
  domains: string[];
@@ -27,8 +27,8 @@ export declare const AgentConfigSchema: z.ZodObject<{
27
27
  greeting: string;
28
28
  outputDir: string;
29
29
  }, {
30
- name: string;
31
30
  id: string;
31
+ name: string;
32
32
  role: string;
33
33
  description: string;
34
34
  domains: string[];
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@soleri/forge",
3
- "version": "5.0.1",
3
+ "version": "5.1.1",
4
4
  "description": "Scaffold AI agents that learn, remember, and grow with you.",
5
5
  "keywords": [
6
6
  "agent",
@@ -65,9 +65,29 @@ export function generateClaudeMdTemplate(config: AgentConfig): string {
65
65
  `| Approve plan | ${bt}${facadeId}_core${bt} | ${bt}approve_plan${bt} |`,
66
66
  `| Update task | ${bt}${facadeId}_core${bt} | ${bt}update_task${bt} |`,
67
67
  `| Complete plan | ${bt}${facadeId}_core${bt} | ${bt}complete_plan${bt} |`,
68
+ `| Route intent | ${bt}${facadeId}_core${bt} | ${bt}route_intent${bt} |`,
69
+ `| Morph mode | ${bt}${facadeId}_core${bt} | ${bt}morph${bt} |`,
70
+ `| Get behavior rules | ${bt}${facadeId}_core${bt} | ${bt}get_behavior_rules${bt} |`,
71
+ `| Get identity | ${bt}${facadeId}_core${bt} | ${bt}get_identity${bt} |`,
72
+ `| Update identity | ${bt}${facadeId}_core${bt} | ${bt}update_identity${bt} |`,
73
+ `| Add guideline | ${bt}${facadeId}_core${bt} | ${bt}add_guideline${bt} |`,
74
+ `| Remove guideline | ${bt}${facadeId}_core${bt} | ${bt}remove_guideline${bt} |`,
75
+ `| Rollback identity | ${bt}${facadeId}_core${bt} | ${bt}rollback_identity${bt} |`,
68
76
  );
69
77
 
70
78
  mdLines.push(
79
+ '',
80
+ '## Auto-Routing',
81
+ '',
82
+ 'A UserPromptSubmit hook auto-classifies every prompt via keyword matching.',
83
+ `When you see a ${bt}[MODE-NAME]${bt} indicator in the system context:`,
84
+ '',
85
+ `1. Call ${bt}${facadeId}_core op:route_intent params:{ prompt: "<user message>" }${bt} to get full behavior rules`,
86
+ '2. Follow the returned behavior rules for the detected mode',
87
+ '3. Briefly acknowledge mode changes in your response (e.g., "Switching to FIX-MODE")',
88
+ '',
89
+ 'Available modes: FIX-MODE, BUILD-MODE, IMPROVE-MODE, DELIVER-MODE, REVIEW-MODE, PLAN-MODE, DESIGN-MODE, VALIDATE-MODE, EXPLORE-MODE, GENERAL-MODE.',
90
+ 'GENERAL-MODE means the hook detected a work task but could not classify a specific mode — route_intent will refine it.',
71
91
  '',
72
92
  '## Intent Detection',
73
93
  '',
@@ -62,9 +62,13 @@ async function main(): Promise<void> {
62
62
  },
63
63
  {
64
64
  name: 'identity',
65
- description: 'Get agent identity — name, role, principles.',
65
+ description: 'Get agent identity — name, role, principles. Uses IdentityManager with PERSONA fallback.',
66
66
  auth: 'read',
67
- handler: async () => PERSONA,
67
+ handler: async () => {
68
+ const identity = runtime.identityManager.getIdentity('${config.id}');
69
+ if (identity) return identity;
70
+ return PERSONA;
71
+ },
68
72
  },
69
73
  {
70
74
  name: 'activate',
@@ -78,6 +82,17 @@ async function main(): Promise<void> {
78
82
  if (params.deactivate) {
79
83
  return deactivateAgent();
80
84
  }
85
+ // Seed identity from PERSONA on first activation
86
+ if (!runtime.identityManager.getIdentity('${config.id}')) {
87
+ runtime.identityManager.setIdentity('${config.id}', {
88
+ name: PERSONA.name,
89
+ role: PERSONA.role,
90
+ description: PERSONA.description ?? '',
91
+ personality: PERSONA.principles ?? [],
92
+ changedBy: 'system',
93
+ changeReason: 'Initial identity seeded from PERSONA',
94
+ });
95
+ }
81
96
  return activateAgent(runtime.vault, (params.projectPath as string) ?? '.', runtime.planner);
82
97
  },
83
98
  },
@@ -178,8 +178,17 @@ ${domainDescribes}
178
178
  expect(opNames).toContain('activate');
179
179
  expect(opNames).toContain('inject_claude_md');
180
180
  expect(opNames).toContain('setup');
181
- // Total: 42
182
- expect(facade.ops.length).toBe(42);
181
+ // Control ops (8)
182
+ expect(opNames).toContain('get_identity');
183
+ expect(opNames).toContain('update_identity');
184
+ expect(opNames).toContain('add_guideline');
185
+ expect(opNames).toContain('remove_guideline');
186
+ expect(opNames).toContain('rollback_identity');
187
+ expect(opNames).toContain('route_intent');
188
+ expect(opNames).toContain('morph');
189
+ expect(opNames).toContain('get_behavior_rules');
190
+ // Total: 50
191
+ expect(facade.ops.length).toBe(50);
183
192
  });
184
193
 
185
194
  it('search should query across all domains with ranked results', async () => {
@@ -1,6 +0,0 @@
1
- /**
2
- * Generates the brain.ts source file for a new agent.
3
- * The Brain provides a local, zero-dependency intelligence layer:
4
- * TF-IDF scoring, auto-tagging, duplicate detection, and search feedback.
5
- */
6
- export declare function generateBrain(): string;