@soleri/forge 0.0.1 → 4.0.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 (128) hide show
  1. package/CHANGELOG.md +98 -0
  2. package/README.md +199 -0
  3. package/dist/facades/forge.facade.d.ts +9 -0
  4. package/dist/facades/forge.facade.js +134 -0
  5. package/dist/facades/forge.facade.js.map +1 -0
  6. package/dist/index.d.ts +2 -0
  7. package/dist/index.js +81 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/knowledge-installer.d.ts +31 -0
  10. package/dist/knowledge-installer.js +437 -0
  11. package/dist/knowledge-installer.js.map +1 -0
  12. package/dist/scaffolder.d.ts +13 -0
  13. package/dist/scaffolder.js +330 -0
  14. package/dist/scaffolder.js.map +1 -0
  15. package/dist/templates/activate.d.ts +9 -0
  16. package/dist/templates/activate.js +139 -0
  17. package/dist/templates/activate.js.map +1 -0
  18. package/dist/templates/brain.d.ts +6 -0
  19. package/dist/templates/brain.js +478 -0
  20. package/dist/templates/brain.js.map +1 -0
  21. package/dist/templates/claude-md-template.d.ts +11 -0
  22. package/dist/templates/claude-md-template.js +73 -0
  23. package/dist/templates/claude-md-template.js.map +1 -0
  24. package/dist/templates/core-facade.d.ts +6 -0
  25. package/dist/templates/core-facade.js +456 -0
  26. package/dist/templates/core-facade.js.map +1 -0
  27. package/dist/templates/domain-facade.d.ts +7 -0
  28. package/dist/templates/domain-facade.js +119 -0
  29. package/dist/templates/domain-facade.js.map +1 -0
  30. package/dist/templates/entry-point.d.ts +5 -0
  31. package/dist/templates/entry-point.js +116 -0
  32. package/dist/templates/entry-point.js.map +1 -0
  33. package/dist/templates/facade-factory.d.ts +1 -0
  34. package/dist/templates/facade-factory.js +63 -0
  35. package/dist/templates/facade-factory.js.map +1 -0
  36. package/dist/templates/facade-types.d.ts +1 -0
  37. package/dist/templates/facade-types.js +46 -0
  38. package/dist/templates/facade-types.js.map +1 -0
  39. package/dist/templates/inject-claude-md.d.ts +11 -0
  40. package/dist/templates/inject-claude-md.js +92 -0
  41. package/dist/templates/inject-claude-md.js.map +1 -0
  42. package/dist/templates/intelligence-loader.d.ts +1 -0
  43. package/dist/templates/intelligence-loader.js +43 -0
  44. package/dist/templates/intelligence-loader.js.map +1 -0
  45. package/dist/templates/intelligence-types.d.ts +1 -0
  46. package/dist/templates/intelligence-types.js +24 -0
  47. package/dist/templates/intelligence-types.js.map +1 -0
  48. package/dist/templates/llm-client.d.ts +7 -0
  49. package/dist/templates/llm-client.js +300 -0
  50. package/dist/templates/llm-client.js.map +1 -0
  51. package/dist/templates/llm-key-pool.d.ts +7 -0
  52. package/dist/templates/llm-key-pool.js +211 -0
  53. package/dist/templates/llm-key-pool.js.map +1 -0
  54. package/dist/templates/llm-types.d.ts +5 -0
  55. package/dist/templates/llm-types.js +161 -0
  56. package/dist/templates/llm-types.js.map +1 -0
  57. package/dist/templates/llm-utils.d.ts +5 -0
  58. package/dist/templates/llm-utils.js +260 -0
  59. package/dist/templates/llm-utils.js.map +1 -0
  60. package/dist/templates/package-json.d.ts +2 -0
  61. package/dist/templates/package-json.js +37 -0
  62. package/dist/templates/package-json.js.map +1 -0
  63. package/dist/templates/persona.d.ts +2 -0
  64. package/dist/templates/persona.js +42 -0
  65. package/dist/templates/persona.js.map +1 -0
  66. package/dist/templates/planner.d.ts +5 -0
  67. package/dist/templates/planner.js +150 -0
  68. package/dist/templates/planner.js.map +1 -0
  69. package/dist/templates/readme.d.ts +5 -0
  70. package/dist/templates/readme.js +316 -0
  71. package/dist/templates/readme.js.map +1 -0
  72. package/dist/templates/setup-script.d.ts +6 -0
  73. package/dist/templates/setup-script.js +112 -0
  74. package/dist/templates/setup-script.js.map +1 -0
  75. package/dist/templates/test-brain.d.ts +6 -0
  76. package/dist/templates/test-brain.js +474 -0
  77. package/dist/templates/test-brain.js.map +1 -0
  78. package/dist/templates/test-facades.d.ts +6 -0
  79. package/dist/templates/test-facades.js +649 -0
  80. package/dist/templates/test-facades.js.map +1 -0
  81. package/dist/templates/test-llm.d.ts +7 -0
  82. package/dist/templates/test-llm.js +574 -0
  83. package/dist/templates/test-llm.js.map +1 -0
  84. package/dist/templates/test-loader.d.ts +5 -0
  85. package/dist/templates/test-loader.js +146 -0
  86. package/dist/templates/test-loader.js.map +1 -0
  87. package/dist/templates/test-planner.d.ts +5 -0
  88. package/dist/templates/test-planner.js +271 -0
  89. package/dist/templates/test-planner.js.map +1 -0
  90. package/dist/templates/test-vault.d.ts +5 -0
  91. package/dist/templates/test-vault.js +380 -0
  92. package/dist/templates/test-vault.js.map +1 -0
  93. package/dist/templates/tsconfig.d.ts +1 -0
  94. package/dist/templates/tsconfig.js +25 -0
  95. package/dist/templates/tsconfig.js.map +1 -0
  96. package/dist/templates/vault.d.ts +5 -0
  97. package/dist/templates/vault.js +263 -0
  98. package/dist/templates/vault.js.map +1 -0
  99. package/dist/templates/vitest-config.d.ts +1 -0
  100. package/dist/templates/vitest-config.js +27 -0
  101. package/dist/templates/vitest-config.js.map +1 -0
  102. package/dist/types.d.ts +89 -0
  103. package/dist/types.js +21 -0
  104. package/dist/types.js.map +1 -0
  105. package/package.json +42 -4
  106. package/src/__tests__/knowledge-installer.test.ts +805 -0
  107. package/src/__tests__/scaffolder.test.ts +323 -0
  108. package/src/facades/forge.facade.ts +150 -0
  109. package/src/index.ts +101 -0
  110. package/src/knowledge-installer.ts +532 -0
  111. package/src/scaffolder.ts +386 -0
  112. package/src/templates/activate.ts +145 -0
  113. package/src/templates/claude-md-template.ts +137 -0
  114. package/src/templates/core-facade.ts +457 -0
  115. package/src/templates/domain-facade.ts +121 -0
  116. package/src/templates/entry-point.ts +120 -0
  117. package/src/templates/inject-claude-md.ts +94 -0
  118. package/src/templates/llm-client.ts +301 -0
  119. package/src/templates/package-json.ts +39 -0
  120. package/src/templates/persona.ts +45 -0
  121. package/src/templates/readme.ts +319 -0
  122. package/src/templates/setup-script.ts +113 -0
  123. package/src/templates/test-facades.ts +656 -0
  124. package/src/templates/tsconfig.ts +25 -0
  125. package/src/templates/vitest-config.ts +26 -0
  126. package/src/types.ts +68 -0
  127. package/tsconfig.json +21 -0
  128. package/vitest.config.ts +15 -0
@@ -0,0 +1,330 @@
1
+ import { mkdirSync, writeFileSync, chmodSync, existsSync, readdirSync, readFileSync, } from 'node:fs';
2
+ import { join } from 'node:path';
3
+ import { homedir } from 'node:os';
4
+ import { generatePackageJson } from './templates/package-json.js';
5
+ import { generateTsconfig } from './templates/tsconfig.js';
6
+ import { generateVitestConfig } from './templates/vitest-config.js';
7
+ import { generatePersona } from './templates/persona.js';
8
+ import { generateDomainFacade } from './templates/domain-facade.js';
9
+ import { generateCoreFacade } from './templates/core-facade.js';
10
+ import { generateEntryPoint } from './templates/entry-point.js';
11
+ import { generateFacadesTest } from './templates/test-facades.js';
12
+ import { generateClaudeMdTemplate } from './templates/claude-md-template.js';
13
+ import { generateInjectClaudeMd } from './templates/inject-claude-md.js';
14
+ import { generateActivate } from './templates/activate.js';
15
+ import { generateReadme } from './templates/readme.js';
16
+ import { generateSetupScript } from './templates/setup-script.js';
17
+ import { generateLLMClient } from './templates/llm-client.js';
18
+ /**
19
+ * Preview what scaffold will create without writing anything.
20
+ */
21
+ export function previewScaffold(config) {
22
+ const agentDir = join(config.outputDir, config.id);
23
+ const files = [
24
+ { path: 'package.json', description: 'NPM package with MCP SDK, SQLite, Zod dependencies' },
25
+ { path: 'tsconfig.json', description: 'TypeScript config (ES2022, NodeNext, strict)' },
26
+ { path: 'vitest.config.ts', description: 'Test config (vitest, forks pool, coverage)' },
27
+ { path: '.gitignore', description: 'Git ignore (node_modules, dist, coverage)' },
28
+ {
29
+ path: 'scripts/copy-assets.js',
30
+ description: 'Build script to copy intelligence data to dist',
31
+ },
32
+ {
33
+ path: 'src/index.ts',
34
+ description: 'Entry point — initializes vault, planner, brain, registers facades, starts stdio',
35
+ },
36
+ {
37
+ path: 'src/llm/llm-client.ts',
38
+ description: 'LLM client — unified OpenAI/Anthropic caller with model routing (optional, needs API keys)',
39
+ },
40
+ {
41
+ path: 'src/facades/core.facade.ts',
42
+ description: 'Core facade — search, vault stats, health, identity',
43
+ },
44
+ ...config.domains.map((d) => ({
45
+ path: `src/facades/${d}.facade.ts`,
46
+ description: `${d} facade — search, get_patterns, capture, remove`,
47
+ })),
48
+ ...config.domains.map((d) => ({
49
+ path: `src/intelligence/data/${d}.json`,
50
+ description: `Empty ${d} intelligence bundle — ready for knowledge capture`,
51
+ })),
52
+ {
53
+ path: 'src/identity/persona.ts',
54
+ description: `${config.name} persona — name, role, principles, greeting`,
55
+ },
56
+ {
57
+ path: 'src/activation/claude-md-content.ts',
58
+ description: `${config.name} CLAUDE.md content with activation triggers and facades table`,
59
+ },
60
+ {
61
+ path: 'src/activation/inject-claude-md.ts',
62
+ description: 'Idempotent CLAUDE.md injection — project-level or global (~/.claude/CLAUDE.md)',
63
+ },
64
+ {
65
+ path: 'src/activation/activate.ts',
66
+ description: `${config.name} activation system — persona adoption, setup status, tool recommendations`,
67
+ },
68
+ {
69
+ path: 'src/__tests__/facades.test.ts',
70
+ description: `Facade integration tests — all ${config.domains.length + 1} facades`,
71
+ },
72
+ { path: '.mcp.json', description: 'MCP client config for connecting to this agent' },
73
+ {
74
+ path: 'README.md',
75
+ description: `${config.name} documentation — quick start, domains, principles, commands`,
76
+ },
77
+ {
78
+ path: 'scripts/setup.sh',
79
+ description: 'Automated setup — Node.js check, build, Claude Code MCP registration',
80
+ },
81
+ ];
82
+ const facades = [
83
+ ...config.domains.map((d) => ({
84
+ name: `${config.id}_${d.replace(/-/g, '_')}`,
85
+ ops: ['get_patterns', 'search', 'get_entry', 'capture', 'remove'],
86
+ })),
87
+ {
88
+ name: `${config.id}_core`,
89
+ ops: [
90
+ 'search',
91
+ 'vault_stats',
92
+ 'list_all',
93
+ 'health',
94
+ 'identity',
95
+ 'activate',
96
+ 'inject_claude_md',
97
+ 'setup',
98
+ 'register',
99
+ 'memory_search',
100
+ 'memory_capture',
101
+ 'memory_list',
102
+ 'session_capture',
103
+ 'export',
104
+ 'create_plan',
105
+ 'get_plan',
106
+ 'approve_plan',
107
+ 'update_task',
108
+ 'complete_plan',
109
+ 'record_feedback',
110
+ 'rebuild_vocabulary',
111
+ 'brain_stats',
112
+ 'llm_status',
113
+ ],
114
+ },
115
+ ];
116
+ return {
117
+ agentDir,
118
+ files,
119
+ facades,
120
+ domains: config.domains,
121
+ persona: { name: config.name, role: config.role },
122
+ };
123
+ }
124
+ /**
125
+ * Scaffold a complete MCP agent project.
126
+ */
127
+ export function scaffold(config) {
128
+ const agentDir = join(config.outputDir, config.id);
129
+ const filesCreated = [];
130
+ if (existsSync(agentDir)) {
131
+ return {
132
+ success: false,
133
+ agentDir,
134
+ filesCreated: [],
135
+ domains: config.domains,
136
+ summary: `Directory already exists: ${agentDir}. Choose a different ID or remove the existing directory.`,
137
+ };
138
+ }
139
+ // Create directory structure
140
+ const dirs = [
141
+ '',
142
+ 'scripts',
143
+ 'src',
144
+ 'src/facades',
145
+ 'src/intelligence',
146
+ 'src/intelligence/data',
147
+ 'src/identity',
148
+ 'src/activation',
149
+ 'src/llm',
150
+ 'src/__tests__',
151
+ ];
152
+ for (const dir of dirs) {
153
+ mkdirSync(join(agentDir, dir), { recursive: true });
154
+ }
155
+ // Write project config files
156
+ const projectFiles = [
157
+ ['package.json', generatePackageJson(config)],
158
+ ['tsconfig.json', generateTsconfig()],
159
+ ['vitest.config.ts', generateVitestConfig()],
160
+ ['.gitignore', 'node_modules/\ndist/\ncoverage/\n*.tsbuildinfo\n.env\n.DS_Store\n*.log\n'],
161
+ [
162
+ '.mcp.json',
163
+ JSON.stringify({ mcpServers: { [config.id]: { command: 'node', args: ['dist/index.js'], cwd: '.' } } }, null, 2),
164
+ ],
165
+ ['scripts/copy-assets.js', generateCopyAssetsScript()],
166
+ ['README.md', generateReadme(config)],
167
+ ['scripts/setup.sh', generateSetupScript(config)],
168
+ ];
169
+ for (const [path, content] of projectFiles) {
170
+ writeFileSync(join(agentDir, path), content, 'utf-8');
171
+ filesCreated.push(path);
172
+ }
173
+ // Make setup script executable
174
+ chmodSync(join(agentDir, 'scripts', 'setup.sh'), 0o755);
175
+ // Write source files
176
+ const sourceFiles = [
177
+ ['src/facades/core.facade.ts', generateCoreFacade(config)],
178
+ ['src/identity/persona.ts', generatePersona(config)],
179
+ ['src/activation/claude-md-content.ts', generateClaudeMdTemplate(config)],
180
+ ['src/activation/inject-claude-md.ts', generateInjectClaudeMd(config)],
181
+ ['src/activation/activate.ts', generateActivate(config)],
182
+ ['src/index.ts', generateEntryPoint(config)],
183
+ ['src/llm/llm-client.ts', generateLLMClient(config)],
184
+ ['src/__tests__/facades.test.ts', generateFacadesTest(config)],
185
+ ];
186
+ // Domain facades and empty data files
187
+ for (const domain of config.domains) {
188
+ sourceFiles.push([`src/facades/${domain}.facade.ts`, generateDomainFacade(config.id, domain)]);
189
+ sourceFiles.push([`src/intelligence/data/${domain}.json`, generateEmptyBundle(domain)]);
190
+ }
191
+ for (const [path, content] of sourceFiles) {
192
+ writeFileSync(join(agentDir, path), content, 'utf-8');
193
+ filesCreated.push(path);
194
+ }
195
+ const totalOps = config.domains.length * 5 + 24; // 5 per domain + 24 core (activation, registration, memory, session, export, planning, brain, llm)
196
+ // Register the agent as an MCP server in ~/.claude.json
197
+ const mcpReg = registerMcpServer(config.id, agentDir);
198
+ const summaryLines = [
199
+ `Created ${config.name} agent at ${agentDir}`,
200
+ `${config.domains.length + 1} facades with ${totalOps} operations`,
201
+ `${config.domains.length} empty knowledge domains ready for capture`,
202
+ `Intelligence layer (Brain) — TF-IDF scoring, auto-tagging, duplicate detection`,
203
+ `Activation system included — say "Hello, ${config.name}!" to activate`,
204
+ `1 test suite — facades (vault, brain, planner, llm tests provided by @soleri/core)`,
205
+ ];
206
+ if (mcpReg.registered) {
207
+ summaryLines.push(`MCP server registered in ${mcpReg.path}`);
208
+ }
209
+ else {
210
+ summaryLines.push(`Warning: Failed to register MCP server in ${mcpReg.path}: ${mcpReg.error}`);
211
+ }
212
+ summaryLines.push('', 'Next steps:', ` cd ${agentDir}`, ' npm install && npm run build', ' npm test # verify all tests pass', ' Restart Claude Code', ` Say "Hello, ${config.name}!" to activate the persona`);
213
+ return {
214
+ success: true,
215
+ agentDir,
216
+ filesCreated,
217
+ domains: config.domains,
218
+ summary: summaryLines.join('\n'),
219
+ };
220
+ }
221
+ /**
222
+ * List agents in a directory.
223
+ */
224
+ export function listAgents(parentDir) {
225
+ if (!existsSync(parentDir))
226
+ return [];
227
+ const agents = [];
228
+ let entries;
229
+ try {
230
+ entries = readdirSync(parentDir, { withFileTypes: true })
231
+ .filter((e) => e.isDirectory())
232
+ .map((e) => e.name);
233
+ }
234
+ catch {
235
+ return [];
236
+ }
237
+ for (const name of entries) {
238
+ const dir = join(parentDir, name);
239
+ const pkgPath = join(dir, 'package.json');
240
+ if (!existsSync(pkgPath))
241
+ continue;
242
+ try {
243
+ const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));
244
+ if (!pkg.name?.endsWith('-mcp'))
245
+ continue;
246
+ const dataDir = join(dir, 'src', 'intelligence', 'data');
247
+ let domains = [];
248
+ try {
249
+ domains = readdirSync(dataDir)
250
+ .filter((f) => f.endsWith('.json'))
251
+ .map((f) => f.replace('.json', ''));
252
+ }
253
+ catch {
254
+ /* empty */
255
+ }
256
+ agents.push({
257
+ id: name,
258
+ name: pkg.name.replace('-mcp', ''),
259
+ role: pkg.description || '',
260
+ path: dir,
261
+ domains,
262
+ hasNodeModules: existsSync(join(dir, 'node_modules')),
263
+ hasDistDir: existsSync(join(dir, 'dist')),
264
+ });
265
+ }
266
+ catch {
267
+ /* skip non-agent directories */
268
+ }
269
+ }
270
+ return agents;
271
+ }
272
+ /**
273
+ * Register the agent as an MCP server in ~/.claude.json (User MCPs).
274
+ * Idempotent — updates existing entry if present.
275
+ */
276
+ function registerMcpServer(agentId, agentDir) {
277
+ const claudeJsonPath = join(homedir(), '.claude.json');
278
+ try {
279
+ let config = {};
280
+ if (existsSync(claudeJsonPath)) {
281
+ config = JSON.parse(readFileSync(claudeJsonPath, 'utf-8'));
282
+ }
283
+ if (!config.mcpServers || typeof config.mcpServers !== 'object') {
284
+ config.mcpServers = {};
285
+ }
286
+ const servers = config.mcpServers;
287
+ servers[agentId] = {
288
+ type: 'stdio',
289
+ command: 'node',
290
+ args: [join(agentDir, 'dist', 'index.js')],
291
+ env: {},
292
+ };
293
+ writeFileSync(claudeJsonPath, JSON.stringify(config, null, 2) + '\n', 'utf-8');
294
+ return { registered: true, path: claudeJsonPath };
295
+ }
296
+ catch (err) {
297
+ return {
298
+ registered: false,
299
+ path: claudeJsonPath,
300
+ error: err instanceof Error ? err.message : String(err),
301
+ };
302
+ }
303
+ }
304
+ function generateEmptyBundle(domain) {
305
+ return JSON.stringify({
306
+ domain,
307
+ version: '1.0.0',
308
+ entries: [],
309
+ }, null, 2);
310
+ }
311
+ function generateCopyAssetsScript() {
312
+ return [
313
+ "import { cpSync, existsSync, mkdirSync } from 'node:fs';",
314
+ "import { join, dirname } from 'node:path';",
315
+ "import { fileURLToPath } from 'node:url';",
316
+ '',
317
+ 'const __dirname = dirname(fileURLToPath(import.meta.url));',
318
+ "const root = join(__dirname, '..');",
319
+ "const dist = join(root, 'dist');",
320
+ "const dataSource = join(root, 'src', 'intelligence', 'data');",
321
+ "const dataDest = join(dist, 'intelligence', 'data');",
322
+ '',
323
+ 'if (existsSync(dataSource)) {',
324
+ ' mkdirSync(dataDest, { recursive: true });',
325
+ ' cpSync(dataSource, dataDest, { recursive: true });',
326
+ " console.log('Copied intelligence data to dist/');",
327
+ '}',
328
+ ].join('\n');
329
+ }
330
+ //# sourceMappingURL=scaffolder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolder.js","sourceRoot":"","sources":["../src/scaffolder.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { AgentConfig } from '../types.js';
2
+ /**
3
+ * Generates src/activation/activate.ts for a new agent.
4
+ * Provides the activate/deactivate system that returns full context
5
+ * to Claude — persona, guidelines, tool recommendations, setup status.
6
+ *
7
+ * Uses array-joined pattern because generated code contains template literals.
8
+ */
9
+ export declare function generateActivate(config: AgentConfig): string;
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Generates src/activation/activate.ts for a new agent.
3
+ * Provides the activate/deactivate system that returns full context
4
+ * to Claude — persona, guidelines, tool recommendations, setup status.
5
+ *
6
+ * Uses array-joined pattern because generated code contains template literals.
7
+ */
8
+ export function generateActivate(config) {
9
+ const facadeId = config.id.replace(/-/g, '_');
10
+ const _marker = `${config.id}:mode`;
11
+ // Build tool recommendations from config domains
12
+ const toolRecLines = [];
13
+ for (const d of config.domains) {
14
+ const toolName = `${facadeId}_${d.replace(/-/g, '_')}`;
15
+ toolRecLines.push(` { intent: 'search ${d}', facade: '${toolName}', op: 'search' },`);
16
+ toolRecLines.push(` { intent: '${d} patterns', facade: '${toolName}', op: 'get_patterns' },`);
17
+ toolRecLines.push(` { intent: 'capture ${d}', facade: '${toolName}', op: 'capture' },`);
18
+ }
19
+ // Build behavioral guidelines from config principles
20
+ const guidelineLines = config.principles
21
+ .map((p) => {
22
+ const escaped = p.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
23
+ return ` '${escaped}',`;
24
+ })
25
+ .join('\n');
26
+ return [
27
+ "import { join } from 'node:path';",
28
+ "import { homedir } from 'node:os';",
29
+ "import { PERSONA } from '../identity/persona.js';",
30
+ "import { hasAgentMarker } from './inject-claude-md.js';",
31
+ "import type { Vault, Planner, Plan } from '@soleri/core';",
32
+ '',
33
+ 'export interface ActivationResult {',
34
+ ' activated: boolean;',
35
+ ' persona: {',
36
+ ' name: string;',
37
+ ' role: string;',
38
+ ' description: string;',
39
+ ' greeting: string;',
40
+ ' };',
41
+ ' guidelines: string[];',
42
+ ' tool_recommendations: Array<{ intent: string; facade: string; op: string }>;',
43
+ ' session_instruction: string;',
44
+ ' setup_status: {',
45
+ ' claude_md_injected: boolean;',
46
+ ' global_claude_md_injected: boolean;',
47
+ ' vault_has_entries: boolean;',
48
+ ' vault_entry_count: number;',
49
+ ' };',
50
+ ' executing_plans: Array<{ id: string; objective: string; tasks: number; completed: number }>;',
51
+ ' next_steps: string[];',
52
+ '}',
53
+ '',
54
+ 'export interface DeactivationResult {',
55
+ ' deactivated: boolean;',
56
+ ' message: string;',
57
+ '}',
58
+ '',
59
+ '/**',
60
+ ` * Activate ${config.name} — returns full context for Claude to adopt the persona.`,
61
+ ' */',
62
+ 'export function activateAgent(vault: Vault, projectPath: string, planner?: Planner): ActivationResult {',
63
+ ' // Check CLAUDE.md injection status (project-level and global)',
64
+ " const projectClaudeMd = join(projectPath, 'CLAUDE.md');",
65
+ " const globalClaudeMd = join(homedir(), '.claude', 'CLAUDE.md');",
66
+ ' const claudeMdInjected = hasAgentMarker(projectClaudeMd);',
67
+ ' const globalClaudeMdInjected = hasAgentMarker(globalClaudeMd);',
68
+ '',
69
+ ' // Check vault status',
70
+ ' const stats = vault.stats();',
71
+ ' const vaultHasEntries = stats.totalEntries > 0;',
72
+ '',
73
+ " // Build next steps based on what's missing",
74
+ ' const nextSteps: string[] = [];',
75
+ ' if (!globalClaudeMdInjected && !claudeMdInjected) {',
76
+ ` nextSteps.push('No CLAUDE.md configured — run inject_claude_md with global: true for all projects, or without for this project only');`,
77
+ ' } else if (!globalClaudeMdInjected) {',
78
+ ` nextSteps.push('Global CLAUDE.md not configured — run inject_claude_md with global: true to enable activation in all projects');`,
79
+ ' }',
80
+ ' if (!vaultHasEntries) {',
81
+ " nextSteps.push('Vault is empty — start capturing knowledge with the domain capture ops');",
82
+ ' }',
83
+ ' if (nextSteps.length === 0) {',
84
+ ` nextSteps.push('All set! ${config.name} is fully integrated.');`,
85
+ ' }',
86
+ '',
87
+ ' // Check for executing plans',
88
+ ' const executingPlans = planner ? planner.getExecuting().map((p) => ({',
89
+ ' id: p.id,',
90
+ ' objective: p.objective,',
91
+ ' tasks: p.tasks.length,',
92
+ " completed: p.tasks.filter((t) => t.status === 'completed').length,",
93
+ ' })) : [];',
94
+ ' if (executingPlans.length > 0) {',
95
+ ' nextSteps.unshift(`${executingPlans.length} plan(s) in progress — use get_plan to review`);',
96
+ ' }',
97
+ '',
98
+ ' return {',
99
+ ' activated: true,',
100
+ ' persona: {',
101
+ ' name: PERSONA.name,',
102
+ ' role: PERSONA.role,',
103
+ ' description: PERSONA.description,',
104
+ ' greeting: PERSONA.greeting,',
105
+ ' },',
106
+ ' guidelines: [',
107
+ guidelineLines,
108
+ ' ],',
109
+ ' tool_recommendations: [',
110
+ ` { intent: 'health check', facade: '${facadeId}_core', op: 'health' },`,
111
+ ` { intent: 'search all', facade: '${facadeId}_core', op: 'search' },`,
112
+ ` { intent: 'vault stats', facade: '${facadeId}_core', op: 'vault_stats' },`,
113
+ ...toolRecLines,
114
+ ' ],',
115
+ ` session_instruction: 'You are now ' + PERSONA.name + ', a ' + PERSONA.role + '. Stay in character for the ENTIRE session. ' +`,
116
+ ` 'Reference patterns from the knowledge vault. Provide concrete examples. Flag anti-patterns with severity.',`,
117
+ ' setup_status: {',
118
+ ' claude_md_injected: claudeMdInjected,',
119
+ ' global_claude_md_injected: globalClaudeMdInjected,',
120
+ ' vault_has_entries: vaultHasEntries,',
121
+ ' vault_entry_count: stats.totalEntries,',
122
+ ' },',
123
+ ' executing_plans: executingPlans,',
124
+ ' next_steps: nextSteps,',
125
+ ' };',
126
+ '}',
127
+ '',
128
+ '/**',
129
+ ` * Deactivate ${config.name} — drops persona for the session.`,
130
+ ' */',
131
+ 'export function deactivateAgent(): DeactivationResult {',
132
+ ' return {',
133
+ ' deactivated: true,',
134
+ ` message: 'Goodbye! ' + PERSONA.name + ' persona deactivated. Reverting to default behavior.',`,
135
+ ' };',
136
+ '}',
137
+ ].join('\n');
138
+ }
139
+ //# sourceMappingURL=activate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"activate.js","sourceRoot":"","sources":["../../src/templates/activate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
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;