zelari-code 0.7.9 → 0.7.11

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 (108) hide show
  1. package/LICENSE +37 -37
  2. package/README.md +320 -295
  3. package/bin/zelari-code.js +62 -62
  4. package/dist/cli/app.js +33 -3
  5. package/dist/cli/app.js.map +1 -1
  6. package/dist/cli/components/LiveRegion.js +7 -3
  7. package/dist/cli/components/LiveRegion.js.map +1 -1
  8. package/dist/cli/components/SelectList.js +67 -0
  9. package/dist/cli/components/SelectList.js.map +1 -0
  10. package/dist/cli/components/Spinner.js +51 -0
  11. package/dist/cli/components/Spinner.js.map +1 -0
  12. package/dist/cli/components/SplashScreen.js +85 -85
  13. package/dist/cli/components/StatusBar.js +42 -34
  14. package/dist/cli/components/StatusBar.js.map +1 -1
  15. package/dist/cli/headless.js +10 -10
  16. package/dist/cli/hooks/useSlashDispatch.js +11 -1
  17. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  18. package/dist/cli/keyStore.js +2 -2
  19. package/dist/cli/keyStore.js.map +1 -1
  20. package/dist/cli/main.bundled.js +15146 -14919
  21. package/dist/cli/main.bundled.js.map +4 -4
  22. package/dist/cli/main.js +1 -1
  23. package/dist/cli/main.js.map +1 -1
  24. package/dist/cli/modelDiscovery.js +42 -5
  25. package/dist/cli/modelDiscovery.js.map +1 -1
  26. package/dist/cli/provider/openai-compatible.js +4 -2
  27. package/dist/cli/provider/openai-compatible.js.map +1 -1
  28. package/dist/cli/slashCommands.js +22 -5
  29. package/dist/cli/slashCommands.js.map +1 -1
  30. package/dist/cli/slashHandlers/provider.js +102 -5
  31. package/dist/cli/slashHandlers/provider.js.map +1 -1
  32. package/package.json +2 -2
  33. package/dist/agents/advancedTools.js +0 -115
  34. package/dist/agents/advancedTools.js.map +0 -1
  35. package/dist/agents/councilApi.js +0 -375
  36. package/dist/agents/councilApi.js.map +0 -1
  37. package/dist/agents/councilDirectives.js +0 -100
  38. package/dist/agents/councilDirectives.js.map +0 -1
  39. package/dist/agents/promoteMember.js +0 -210
  40. package/dist/agents/promoteMember.js.map +0 -1
  41. package/dist/agents/promptModules.js +0 -139
  42. package/dist/agents/promptModules.js.map +0 -1
  43. package/dist/agents/roles.js +0 -299
  44. package/dist/agents/roles.js.map +0 -1
  45. package/dist/agents/skills/builtin/debugging.js +0 -248
  46. package/dist/agents/skills/builtin/debugging.js.map +0 -1
  47. package/dist/agents/skills/builtin/docs.js +0 -301
  48. package/dist/agents/skills/builtin/docs.js.map +0 -1
  49. package/dist/agents/skills/builtin/git-ops.js +0 -301
  50. package/dist/agents/skills/builtin/git-ops.js.map +0 -1
  51. package/dist/agents/skills/builtin/planning.js +0 -335
  52. package/dist/agents/skills/builtin/planning.js.map +0 -1
  53. package/dist/agents/skills/builtin/refactoring.js +0 -261
  54. package/dist/agents/skills/builtin/refactoring.js.map +0 -1
  55. package/dist/agents/skills/builtin/review.js +0 -302
  56. package/dist/agents/skills/builtin/review.js.map +0 -1
  57. package/dist/agents/skills/builtin/testing.js +0 -245
  58. package/dist/agents/skills/builtin/testing.js.map +0 -1
  59. package/dist/agents/skills.js +0 -272
  60. package/dist/agents/skills.js.map +0 -1
  61. package/dist/agents/systemPromptBuilder.js +0 -151
  62. package/dist/agents/systemPromptBuilder.js.map +0 -1
  63. package/dist/agents/toolSchemas.js +0 -249
  64. package/dist/agents/toolSchemas.js.map +0 -1
  65. package/dist/agents/tools.js +0 -196
  66. package/dist/agents/tools.js.map +0 -1
  67. package/dist/agents/vaultTools.js +0 -134
  68. package/dist/agents/vaultTools.js.map +0 -1
  69. package/dist/cli/components/CollapsibleToolOutput.js +0 -43
  70. package/dist/cli/components/CollapsibleToolOutput.js.map +0 -1
  71. package/dist/cli/components/Header.js +0 -38
  72. package/dist/cli/components/Header.js.map +0 -1
  73. package/dist/main/core/AgentHarness.js +0 -467
  74. package/dist/main/core/AgentHarness.js.map +0 -1
  75. package/dist/main/core/providerStream.js +0 -99
  76. package/dist/main/core/providerStream.js.map +0 -1
  77. package/dist/main/core/sessionJsonl.js +0 -99
  78. package/dist/main/core/sessionJsonl.js.map +0 -1
  79. package/dist/main/core/tools/auditLog.js +0 -26
  80. package/dist/main/core/tools/auditLog.js.map +0 -1
  81. package/dist/main/core/tools/builtin/filesystem.js +0 -110
  82. package/dist/main/core/tools/builtin/filesystem.js.map +0 -1
  83. package/dist/main/core/tools/builtin/listFiles.js +0 -86
  84. package/dist/main/core/tools/builtin/listFiles.js.map +0 -1
  85. package/dist/main/core/tools/builtin/search.js +0 -56
  86. package/dist/main/core/tools/builtin/search.js.map +0 -1
  87. package/dist/main/core/tools/builtin/shell.js +0 -51
  88. package/dist/main/core/tools/builtin/shell.js.map +0 -1
  89. package/dist/main/core/tools/registry.js +0 -71
  90. package/dist/main/core/tools/registry.js.map +0 -1
  91. package/dist/main/core/tools/toolTypes.js +0 -8
  92. package/dist/main/core/tools/toolTypes.js.map +0 -1
  93. package/dist/main/core/tools/zodBridge.js +0 -56
  94. package/dist/main/core/tools/zodBridge.js.map +0 -1
  95. package/dist/shared/eventBus.js +0 -104
  96. package/dist/shared/eventBus.js.map +0 -1
  97. package/dist/shared/events.js +0 -73
  98. package/dist/shared/events.js.map +0 -1
  99. package/dist/shared/index.js +0 -8
  100. package/dist/shared/index.js.map +0 -1
  101. package/dist/types/context.js +0 -3
  102. package/dist/types/context.js.map +0 -1
  103. package/dist/types/index.js +0 -2
  104. package/dist/types/index.js.map +0 -1
  105. package/dist/types/knowledge.js +0 -2
  106. package/dist/types/knowledge.js.map +0 -1
  107. package/dist/types/systemTypes.js +0 -10
  108. package/dist/types/systemTypes.js.map +0 -1
@@ -1,151 +0,0 @@
1
- import { getBasePromptModules } from './promptModules';
2
- import { resolveAgentSkills, getSkillById } from './skills';
3
- /**
4
- * System Prompt Builder.
5
- *
6
- * Assembles a dynamic system prompt for an agent from:
7
- * 1. Base prompt modules (identity, behavior, safety, ...)
8
- * 2. The agent's own inline systemPrompt (from roles.ts) — kept as a role-specific block.
9
- * 3. The systemPromptFragment of each enabled skill for the agent.
10
- * 4. The documentation block for the tools available to the agent.
11
- * 5. Optional workspace context summary.
12
- * 6. User-authored custom prompt modules.
13
- */
14
- /**
15
- * Compute the effective skills for an agent, factoring in:
16
- * - the agent's declared skills (roles.ts / custom)
17
- * - the global enabledSkills list from the AI config (master switch)
18
- * - the agentSkillConfigs override
19
- */
20
- export function computeAgentSkills(agent, aiConfig, customSkills) {
21
- const declared = agent.skills ?? resolveAgentSkills(agent.id).map((s) => s.id);
22
- // Global master switch: if defined, skills must be globally enabled to apply.
23
- const globalEnabled = aiConfig?.enabledSkills;
24
- // Per-agent override
25
- const override = aiConfig?.agentSkillConfigs.find((c) => c.agentId === agent.id);
26
- let effectiveIds;
27
- if (override) {
28
- effectiveIds = override.enabledSkillIds;
29
- }
30
- else if (globalEnabled && globalEnabled.length > 0) {
31
- effectiveIds = declared.filter((id) => globalEnabled.includes(id));
32
- }
33
- else {
34
- effectiveIds = declared;
35
- }
36
- // Custom skills that auto-attach to this agent.
37
- const customs = customSkills ?? [];
38
- for (const cs of customs) {
39
- if (cs.enabled && cs.autoAttachTo?.includes(agent.id) && !effectiveIds.includes(cs.id)) {
40
- effectiveIds.push(cs.id);
41
- }
42
- }
43
- const builtin = effectiveIds
44
- .map((id) => getSkillById(id))
45
- .filter((s) => s !== undefined);
46
- // Add custom skills as synthetic SkillDefinition (fragment will be injected
47
- // in buildSystemPrompt via the `customSkillFragments` map).
48
- const customDefs = [];
49
- for (const cs of customs) {
50
- if (!cs.enabled)
51
- continue;
52
- if (effectiveIds.includes(cs.id) && !builtin.find((b) => b.id === cs.id)) {
53
- customDefs.push({
54
- id: cs.id,
55
- name: cs.name,
56
- description: cs.description,
57
- category: cs.category,
58
- color: cs.color,
59
- enabledByDefault: cs.enabled,
60
- builtin: false,
61
- requiredTools: cs.requiredTools,
62
- systemPromptFragment: cs.systemPromptFragment,
63
- });
64
- }
65
- }
66
- return [...builtin, ...customDefs];
67
- }
68
- /**
69
- * Compute the effective tools for an agent: the union of the required tools
70
- * of its enabled skills plus its declared tools, filtered by the global
71
- * enabledTools master switch when present.
72
- */
73
- export function computeAgentTools(agent, aiConfig) {
74
- const skills = computeAgentSkills(agent, aiConfig);
75
- const skillTools = skills.flatMap((s) => s.requiredTools);
76
- const declared = agent.tools ?? [];
77
- const merged = Array.from(new Set([...declared, ...skillTools]));
78
- const globalEnabled = aiConfig?.enabledTools;
79
- if (globalEnabled && globalEnabled.length > 0) {
80
- return merged.filter((t) => globalEnabled.includes(t));
81
- }
82
- return merged;
83
- }
84
- /** Generate the AVAILABLE TOOLS documentation block for the given tools. */
85
- export function getToolDescriptions(toolNames, registry) {
86
- const lines = ['AVAILABLE TOOLS (use ONLY these exact names):'];
87
- for (const name of toolNames) {
88
- const tool = registry.get(name);
89
- if (!tool)
90
- continue;
91
- // parameters may be either ToolParameter[] (builtin) or a plain JSON
92
- // Schema object (custom tools). Build the param line accordingly.
93
- let paramList;
94
- if (Array.isArray(tool.parameters)) {
95
- paramList = tool.parameters
96
- .map((p) => `${p.name}:${p.type}`)
97
- .join(', ');
98
- }
99
- else {
100
- const obj = tool.parameters;
101
- paramList = Object.entries(obj.properties ?? {})
102
- .map(([k, v]) => `${k}:${v.type ?? 'any'}`)
103
- .join(', ');
104
- }
105
- lines.push(`- ${name}: ${tool.description} — args { ${paramList} }`);
106
- }
107
- return lines.join('\n');
108
- }
109
- /**
110
- * Build the full system prompt for an agent.
111
- */
112
- export function buildSystemPrompt(agent, options) {
113
- const { tools, toolNames, aiConfig, workspaceContext, ragContext } = options;
114
- const registry = new Map(tools.map((t) => [t.name, t]));
115
- // 1. Base modules (filtered by conditional predicates against the agent's skills)
116
- const skills = computeAgentSkills(agent, aiConfig);
117
- const baseModules = getBasePromptModules().filter((m) => !m.conditional || m.conditional(skills));
118
- // 2. Custom user modules (always last, after base)
119
- const customModules = (aiConfig?.customPromptModules ?? []).map((m) => ({
120
- ...m,
121
- priority: 1000 + m.priority,
122
- }));
123
- const allModules = [...baseModules, ...customModules].sort((a, b) => a.priority - b.priority);
124
- const parts = [];
125
- for (const mod of allModules) {
126
- parts.push(mod.content);
127
- }
128
- // 3. Agent's inline role prompt (role-specific persona)
129
- if (agent.systemPrompt && agent.systemPrompt.trim()) {
130
- parts.push(`# Your Role\n\n${agent.systemPrompt}`);
131
- }
132
- // 4. Skill prompt fragments
133
- if (skills.length > 0) {
134
- parts.push(`# Active Skills\n\n` +
135
- skills.map((s) => `## ${s.name}\n${s.systemPromptFragment}`).join('\n\n'));
136
- }
137
- // 5. Tool documentation
138
- const toolBlock = getToolDescriptions(toolNames, registry);
139
- if (toolNames.length > 0) {
140
- parts.push(`# Tools\n\n${toolBlock}`);
141
- }
142
- // 6. Context
143
- if (workspaceContext && workspaceContext.trim()) {
144
- parts.push(`# Current Workspace State\n\n${workspaceContext}`);
145
- }
146
- if (ragContext && ragContext.trim()) {
147
- parts.push(`# Retrieved Knowledge (RAG)\n\n${ragContext}`);
148
- }
149
- return parts.join('\n\n---\n\n');
150
- }
151
- //# sourceMappingURL=systemPromptBuilder.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"systemPromptBuilder.js","sourceRoot":"","sources":["../../src/agents/systemPromptBuilder.ts"],"names":[],"mappings":"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"}
@@ -1,249 +0,0 @@
1
- /**
2
- * OpenAI-compatible tool schemas for native function calling.
3
- *
4
- * These describe the 13 tools to the LLM providers (GLM/Z.AI and MiniMax) so
5
- * the model can decide structurally — via `response.tool_calls` — when to
6
- * invoke a tool, rather than emitting textual markers the client must parse.
7
- *
8
- * The descriptions are kept in sync with the unified `ALL_TOOLS` registry (the
9
- * execution side) in `agents/tools.ts`. Names MUST match across the two
10
- * modules; if a tool appears in the registry but has no schema here,
11
- * `getProviderTools` will throw at build time (defensive).
12
- */
13
- import { getAllTools, registerCustomTool } from './tools';
14
- /**
15
- * JSON Schema for each BUILTIN tool's parameters. Keyed by tool name. Custom
16
- * tools (registered via `registerCustomTool`) carry their own JSON Schema
17
- * inline (via `EnhancedToolDefinition.parameters`) and do not need an entry
18
- * here.
19
- *
20
- * If a builtin tool appears here but is missing from the registry, this map
21
- * is silently ignored. If a builtin tool appears in the registry but has no
22
- * entry here, `getProviderTools` warns at runtime (defensive — registration
23
- * ordering and missing entries used to be a build-time throw).
24
- */
25
- const PARAM_SCHEMAS = {
26
- createTask: {
27
- type: 'object',
28
- properties: {
29
- title: { type: 'string', description: 'Short task title' },
30
- description: { type: 'string', description: 'Detailed task description' },
31
- priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
32
- phaseId: { type: 'string', description: 'ID of the phase this task belongs to' },
33
- parentId: { type: 'string', description: 'ID of the parent task, if nested' },
34
- tags: { type: 'array', items: { type: 'string' } },
35
- subtasks: { type: 'array', items: { type: 'string' }, description: 'Subtask titles' },
36
- },
37
- required: ['title'],
38
- },
39
- addIdea: {
40
- type: 'object',
41
- properties: {
42
- title: { type: 'string' },
43
- content: { type: 'string', description: 'Full idea description' },
44
- tags: { type: 'array', items: { type: 'string' } },
45
- category: { type: 'string', description: 'e.g. "Product", "Research", "General"' },
46
- },
47
- required: ['title'],
48
- },
49
- createPhase: {
50
- type: 'object',
51
- properties: {
52
- name: { type: 'string' },
53
- description: { type: 'string' },
54
- order: { type: 'number', description: 'Position of the phase in the plan' },
55
- color: { type: 'string', description: 'Hex color, e.g. "#3b82f6"' },
56
- },
57
- required: ['name'],
58
- },
59
- buildMindMap: {
60
- type: 'object',
61
- properties: {
62
- topic: { type: 'string', description: 'Central topic of the mind map' },
63
- nodes: {
64
- type: 'array',
65
- description: 'Nodes to populate the map with',
66
- items: {
67
- type: 'object',
68
- properties: {
69
- label: { type: 'string' },
70
- content: { type: 'string' },
71
- },
72
- required: ['label'],
73
- },
74
- },
75
- },
76
- required: ['topic'],
77
- },
78
- addNode: {
79
- type: 'object',
80
- properties: {
81
- label: { type: 'string' },
82
- content: { type: 'string' },
83
- },
84
- required: ['label'],
85
- },
86
- linkNodes: {
87
- type: 'object',
88
- properties: {
89
- source: { type: 'string', description: 'Label or id of the source node' },
90
- target: { type: 'string', description: 'Label or id of the target node' },
91
- },
92
- required: ['source', 'target'],
93
- },
94
- createDocument: {
95
- type: 'object',
96
- properties: {
97
- title: { type: 'string', description: 'Title of the document' },
98
- content: { type: 'string', description: 'Content of the document (markdown)' },
99
- path: { type: 'string', description: 'Optional stabilized path, e.g. "notes/my-topic"' },
100
- tags: { type: 'array', items: { type: 'string' } },
101
- category: { type: 'string', description: 'Document category' },
102
- },
103
- required: ['title', 'content'],
104
- },
105
- updateDocument: {
106
- type: 'object',
107
- properties: {
108
- id: { type: 'string', description: 'Document id to update' },
109
- content: { type: 'string', description: 'New markdown content' },
110
- title: { type: 'string', description: 'New title' },
111
- tags: { type: 'array', items: { type: 'string' }, description: 'New tag list (replaces existing)' },
112
- category: { type: 'string', description: 'New category' },
113
- },
114
- required: ['id'],
115
- },
116
- searchDocuments: {
117
- type: 'object',
118
- properties: {
119
- query: { type: 'string', description: 'Free-text search query' },
120
- tag: { type: 'string', description: 'Filter by tag' },
121
- category: { type: 'string', description: 'Filter by category' },
122
- limit: { type: 'number', description: 'Max results' },
123
- },
124
- required: [],
125
- },
126
- linkDocuments: {
127
- type: 'object',
128
- properties: {
129
- sourceId: { type: 'string', description: 'Source document id' },
130
- targetPathOrTitle: { type: 'string', description: 'Target document path or title' },
131
- alias: { type: 'string', description: 'Optional display alias' },
132
- },
133
- required: ['sourceId', 'targetPathOrTitle'],
134
- },
135
- getDocumentBacklinks: {
136
- type: 'object',
137
- properties: {
138
- id: { type: 'string', description: 'Target document id' },
139
- },
140
- required: ['id'],
141
- },
142
- searchRAG: {
143
- type: 'object',
144
- properties: {
145
- query: { type: 'string', description: 'Natural-language query' },
146
- topK: { type: 'number', description: 'Number of results to return' },
147
- },
148
- required: ['query'],
149
- },
150
- createMindMapNode: {
151
- type: 'object',
152
- properties: {
153
- label: { type: 'string', description: 'Node label' },
154
- content: { type: 'string', description: 'Short node content/description' },
155
- },
156
- required: ['label'],
157
- },
158
- createMilestone: {
159
- type: 'object',
160
- properties: {
161
- title: { type: 'string', description: 'Milestone title' },
162
- description: { type: 'string', description: 'Milestone description' },
163
- dueDate: { type: 'string', description: 'Due date (ISO string)' },
164
- },
165
- required: ['title'],
166
- },
167
- updateTask: {
168
- type: 'object',
169
- properties: {
170
- taskId: { type: 'string', description: 'Task id to update' },
171
- status: { type: 'string', enum: ['todo', 'in-progress', 'done', 'blocked'] },
172
- priority: { type: 'string', enum: ['low', 'medium', 'high', 'critical'] },
173
- description: { type: 'string', description: 'New description' },
174
- },
175
- required: ['taskId'],
176
- },
177
- clusterIdeas: {
178
- type: 'object',
179
- properties: {
180
- ideaIds: { type: 'array', items: { type: 'string' }, description: 'Idea ids to cluster' },
181
- clusterName: { type: 'string', description: 'Name for the new cluster' },
182
- color: { type: 'string', description: 'Cluster color (hex)' },
183
- },
184
- required: ['ideaIds', 'clusterName'],
185
- },
186
- };
187
- /** Build a JSON Schema for a custom tool from its declared parameters. */
188
- function buildCustomParameters(tool) {
189
- const properties = {};
190
- for (const [k, v] of Object.entries(tool.parameters.properties)) {
191
- const prop = { type: v.type };
192
- if (v.description)
193
- prop['description'] = v.description;
194
- if (v.enum)
195
- prop['enum'] = v.enum;
196
- properties[k] = prop;
197
- }
198
- return {
199
- type: tool.parameters.type,
200
- properties,
201
- required: tool.parameters.required,
202
- };
203
- }
204
- /**
205
- * Builds the OpenAI-style tool list from the current tool registry (read at
206
- * call time, so it always reflects the latest custom registrations).
207
- *
208
- * @param toolNames Optional allow-list. When provided, only tools whose name
209
- * appears in the list are returned — used to grant per-agent tool access.
210
- * When omitted, all registered tools are returned.
211
- */
212
- export function getProviderTools(toolNames) {
213
- const all = getAllTools();
214
- const source = toolNames && toolNames.length > 0
215
- ? all.filter((t) => toolNames.includes(t.name))
216
- : all;
217
- const result = [];
218
- for (const t of source) {
219
- const builtinSchema = PARAM_SCHEMAS[t.name];
220
- const customParams = t.parameters;
221
- const parameters = builtinSchema ||
222
- (customParams ? customParams : null) ||
223
- (Array.isArray(t.parameters)
224
- ? null
225
- : null);
226
- if (!parameters) {
227
- // Custom tool with no schema declared: skip (defensive — never reach LLM
228
- // with an undocumented function call).
229
- // eslint-disable-next-line no-console
230
- console.warn(`[toolSchemas] tool "${t.name}" has no JSON Schema; skipping.`);
231
- continue;
232
- }
233
- result.push({
234
- type: 'function',
235
- function: {
236
- name: t.name,
237
- description: t.description,
238
- parameters,
239
- },
240
- });
241
- }
242
- return result;
243
- }
244
- /** Build parameters schema from a custom tool's declared params. Exported
245
- * for callers that want to register a custom tool + its schema in one go. */
246
- export { buildCustomParameters };
247
- /** Re-export for callers that want to register custom tools at runtime. */
248
- export { registerCustomTool };
249
- //# sourceMappingURL=toolSchemas.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolSchemas.js","sourceRoot":"","sources":["../../src/agents/toolSchemas.ts"],"names":[],"mappings":"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"}
@@ -1,196 +0,0 @@
1
- import { VAULT_TOOL_DEFINITIONS } from './vaultTools';
2
- import { ADVANCED_TOOL_DEFINITIONS } from './advancedTools';
3
- export const TOOL_DEFINITIONS = [
4
- {
5
- name: 'createTask',
6
- description: 'Create a new task in the project planner',
7
- execute: (args, ctx) => {
8
- ctx.addTask({
9
- phaseId: args['phaseId'] ?? undefined,
10
- parentId: args['parentId'] ?? undefined,
11
- title: args['title'] ?? 'New Task',
12
- description: args['description'] ?? '',
13
- status: 'todo',
14
- priority: args['priority'] ?? 'medium',
15
- tags: args['tags'] ?? [],
16
- dependsOn: [],
17
- subtasks: (args['subtasks'] ?? []).map((s) => ({ id: crypto.randomUUID().slice(0, 8), title: s, done: false })),
18
- });
19
- ctx.addActivity('task', 'created', args['title'] ?? 'New Task');
20
- return `Task "${args['title']}" created successfully.`;
21
- },
22
- },
23
- {
24
- name: 'addIdea',
25
- description: 'Add a new idea to the idea generator',
26
- execute: (args, ctx) => {
27
- ctx.addIdea({
28
- title: args['title'] ?? 'New Idea',
29
- content: args['content'] ?? '',
30
- tags: args['tags'] ?? [],
31
- category: args['category'] ?? 'General',
32
- });
33
- ctx.addActivity('idea', 'created', args['title'] ?? 'New Idea');
34
- return `Idea "${args['title']}" added successfully.`;
35
- },
36
- },
37
- {
38
- name: 'createPhase',
39
- description: 'Create a new project phase',
40
- execute: (args, ctx) => {
41
- ctx.addPhase({
42
- name: args['name'] ?? 'New Phase',
43
- description: args['description'] ?? '',
44
- order: args['order'] ?? 0,
45
- color: args['color'] ?? '#3b82f6',
46
- progress: 0,
47
- });
48
- ctx.addActivity('project', 'phase created', args['name'] ?? 'New Phase');
49
- return `Phase "${args['name']}" created.`;
50
- },
51
- },
52
- {
53
- name: 'buildMindMap',
54
- description: 'Generate or update the mind map',
55
- execute: (args, ctx) => {
56
- ctx.updateMindMap('build', args);
57
- ctx.addActivity('mindmap', 'generated', 'Mind map updated');
58
- return 'Mind map structure generated. Apply it in the Mind Map view.';
59
- },
60
- },
61
- {
62
- name: 'addNode',
63
- description: 'Add a node to the mind map',
64
- execute: (args, ctx) => {
65
- ctx.updateMindMap('addNode', args);
66
- return `Node "${args['label']}" added to mind map.`;
67
- },
68
- },
69
- {
70
- name: 'linkNodes',
71
- description: 'Link two nodes in the mind map',
72
- execute: (args, ctx) => {
73
- ctx.updateMindMap('link', args);
74
- return `Nodes linked: ${args['source']} → ${args['target']}`;
75
- },
76
- },
77
- {
78
- name: 'createDocument',
79
- description: 'Create a new markdown document in the knowledge vault',
80
- execute: (args, ctx) => {
81
- if (!ctx.addDocument)
82
- return 'Knowledge vault tool not available.';
83
- const title = args['title'] || 'New Document';
84
- const path = args['path'] || `notes/${title.toLowerCase().replace(/[^a-z0-9]+/g, '-')}`;
85
- const content = args['content'] || '';
86
- const tags = args['tags'] || [];
87
- ctx.addDocument({
88
- path,
89
- title,
90
- content,
91
- format: 'markdown',
92
- tags,
93
- frontmatter: {},
94
- workspaceId: ctx.workspaceId,
95
- });
96
- ctx.addActivity('vault', 'created document', title);
97
- return `Document "${title}" created at "${path}".`;
98
- },
99
- },
100
- ];
101
- /**
102
- * Unified tool registry: core + vault + advanced tools.
103
- *
104
- * The vault version of `createDocument` (richer parameter schema) takes
105
- * precedence over the legacy core stub, so we dedupe by name. This single
106
- * registry is the source of truth for tool execution, validation and prompt
107
- * documentation.
108
- *
109
- * The registry is MUTABLE: `registerCustomTool` adds user-defined tools
110
- * (custom skills / MCP servers) at runtime. The `TOOL_BY_NAME` map is rebuilt
111
- * lazily after each registration.
112
- */
113
- /** Core planner/mindmap tools adapted for the enhanced tool registry. */
114
- const CORE_TOOL_DEFINITIONS = TOOL_DEFINITIONS.map((tool) => ({
115
- name: tool.name,
116
- description: tool.description,
117
- category: 'core',
118
- parameters: [],
119
- execute: tool.execute,
120
- }));
121
- /** Initial builtin registry (computed once). */
122
- function buildBuiltinRegistry() {
123
- const seen = new Set();
124
- const merged = [];
125
- for (const tool of [...VAULT_TOOL_DEFINITIONS, ...ADVANCED_TOOL_DEFINITIONS, ...CORE_TOOL_DEFINITIONS]) {
126
- if (seen.has(tool.name))
127
- continue;
128
- seen.add(tool.name);
129
- merged.push(tool);
130
- }
131
- return merged;
132
- }
133
- let _allTools = buildBuiltinRegistry();
134
- let _toolByName = new Map(_allTools.map((t) => [t.name, t]));
135
- let _validToolNames = new Set(_toolByName.keys());
136
- function rebuildIndex() {
137
- _toolByName = new Map(_allTools.map((t) => [t.name, t]));
138
- _validToolNames = new Set(_toolByName.keys());
139
- }
140
- /** Read-only snapshot of the current registry (always a fresh array). */
141
- export function getAllTools() {
142
- return [..._allTools];
143
- }
144
- /** Register a custom tool (user-defined or MCP-discovered). If a tool with
145
- * the same name already exists, it is replaced. */
146
- export function registerCustomTool(def) {
147
- const idx = _allTools.findIndex((t) => t.name === def.name);
148
- if (idx >= 0)
149
- _allTools[idx] = def;
150
- else
151
- _allTools.push(def);
152
- rebuildIndex();
153
- }
154
- /** Remove a custom tool by name. No-op if not present. */
155
- export function unregisterCustomTool(name) {
156
- const idx = _allTools.findIndex((t) => t.name === name);
157
- if (idx < 0)
158
- return;
159
- _allTools.splice(idx, 1);
160
- rebuildIndex();
161
- }
162
- /** Wipe ALL custom tools (used on app boot before re-registering active ones). */
163
- export function clearCustomTools() {
164
- _allTools = buildBuiltinRegistry();
165
- rebuildIndex();
166
- }
167
- /** Backwards-compat: keeps ALL_TOOLS as a live reference for legacy imports. */
168
- export const ALL_TOOLS = new Proxy([], {
169
- get: (_target, prop) => {
170
- // Support `ALL_TOOLS.length`, `.filter`, `.map`, `.find` by deferring to the live array.
171
- return Reflect.get(_allTools, prop);
172
- },
173
- });
174
- export function isValidTool(name) {
175
- return _validToolNames.has(name);
176
- }
177
- export async function executeTool(name, args, context) {
178
- const tool = _toolByName.get(name);
179
- if (!tool)
180
- return null;
181
- const safeArgs = args && typeof args === 'object' ? args : {};
182
- try {
183
- const result = tool.execute(safeArgs, context);
184
- return await Promise.resolve(result);
185
- }
186
- catch (err) {
187
- return `Tool "${name}" failed: ${err instanceof Error ? err.message : 'Unknown error'}`;
188
- }
189
- }
190
- /** Resolve a list of tool names to their definitions (skipping unknown ones). */
191
- export function getAvailableTools(toolNames) {
192
- return toolNames
193
- .map((name) => _toolByName.get(name))
194
- .filter((t) => t !== undefined);
195
- }
196
- //# sourceMappingURL=tools.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"tools.js","sourceRoot":"","sources":["../../src/agents/tools.ts"],"names":[],"mappings":"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"}