zelari-code 0.2.2 → 0.4.3

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 (101) hide show
  1. package/README.md +55 -2
  2. package/dist/agents/councilApi.js +7 -7
  3. package/dist/agents/councilApi.js.map +1 -1
  4. package/dist/agents/councilDirectives.js +3 -3
  5. package/dist/agents/promoteMember.js +2 -2
  6. package/dist/agents/roles.js +32 -32
  7. package/dist/agents/roles.js.map +1 -1
  8. package/dist/agents/skills/builtin/debugging.js +4 -4
  9. package/dist/agents/skills/builtin/debugging.js.map +1 -1
  10. package/dist/agents/skills/builtin/docs.js +13 -23
  11. package/dist/agents/skills/builtin/docs.js.map +1 -1
  12. package/dist/agents/skills/builtin/git-ops.js +3 -3
  13. package/dist/agents/skills/builtin/git-ops.js.map +1 -1
  14. package/dist/agents/skills/builtin/planning.js +4 -4
  15. package/dist/agents/skills/builtin/planning.js.map +1 -1
  16. package/dist/agents/skills/builtin/refactoring.js +3 -3
  17. package/dist/agents/skills/builtin/refactoring.js.map +1 -1
  18. package/dist/agents/skills/builtin/review.js +9 -9
  19. package/dist/agents/skills/builtin/review.js.map +1 -1
  20. package/dist/agents/skills/builtin/testing.js +3 -3
  21. package/dist/agents/skills/builtin/testing.js.map +1 -1
  22. package/dist/agents/tools.js +9 -2
  23. package/dist/agents/tools.js.map +1 -1
  24. package/dist/cli/app.js +78 -1850
  25. package/dist/cli/app.js.map +1 -1
  26. package/dist/cli/components/ChatStream.js +25 -5
  27. package/dist/cli/components/ChatStream.js.map +1 -1
  28. package/dist/cli/components/CollapsibleToolOutput.js +21 -3
  29. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  30. package/dist/cli/components/Header.js +20 -1
  31. package/dist/cli/components/Header.js.map +1 -1
  32. package/dist/cli/components/InputBar.js +34 -2
  33. package/dist/cli/components/InputBar.js.map +1 -1
  34. package/dist/cli/components/Sidebar.js +30 -10
  35. package/dist/cli/components/Sidebar.js.map +1 -1
  36. package/dist/cli/councilDispatcher.js +9 -1
  37. package/dist/cli/councilDispatcher.js.map +1 -1
  38. package/dist/cli/hooks/chatStats.js +28 -0
  39. package/dist/cli/hooks/chatStats.js.map +1 -0
  40. package/dist/cli/hooks/eventsToMessages.js +80 -0
  41. package/dist/cli/hooks/eventsToMessages.js.map +1 -0
  42. package/dist/cli/hooks/messageHelpers.js +75 -0
  43. package/dist/cli/hooks/messageHelpers.js.map +1 -0
  44. package/dist/cli/hooks/skillCompare.js +69 -0
  45. package/dist/cli/hooks/skillCompare.js.map +1 -0
  46. package/dist/cli/hooks/steer.js +28 -0
  47. package/dist/cli/hooks/steer.js.map +1 -0
  48. package/dist/cli/hooks/useChatTurn.js +307 -0
  49. package/dist/cli/hooks/useChatTurn.js.map +1 -0
  50. package/dist/cli/hooks/useSession.js +107 -0
  51. package/dist/cli/hooks/useSession.js.map +1 -0
  52. package/dist/cli/hooks/useSlashDispatch.js +300 -0
  53. package/dist/cli/hooks/useSlashDispatch.js.map +1 -0
  54. package/dist/cli/hooks/useTerminalSize.js +60 -0
  55. package/dist/cli/hooks/useTerminalSize.js.map +1 -0
  56. package/dist/cli/main.bundled.js +24214 -21747
  57. package/dist/cli/main.bundled.js.map +4 -4
  58. package/dist/cli/main.js +1 -1
  59. package/dist/cli/sessionManager.js +46 -0
  60. package/dist/cli/sessionManager.js.map +1 -1
  61. package/dist/cli/slashCommands.js +72 -3
  62. package/dist/cli/slashCommands.js.map +1 -1
  63. package/dist/cli/slashHandlers/branch.js +48 -0
  64. package/dist/cli/slashHandlers/branch.js.map +1 -0
  65. package/dist/cli/slashHandlers/git.js +115 -0
  66. package/dist/cli/slashHandlers/git.js.map +1 -0
  67. package/dist/cli/slashHandlers/provider.js +199 -0
  68. package/dist/cli/slashHandlers/provider.js.map +1 -0
  69. package/dist/cli/slashHandlers/skills.js +82 -0
  70. package/dist/cli/slashHandlers/skills.js.map +1 -0
  71. package/dist/cli/slashHandlers/workspace.js +118 -0
  72. package/dist/cli/slashHandlers/workspace.js.map +1 -0
  73. package/dist/cli/toolRegistry.js +12 -3
  74. package/dist/cli/toolRegistry.js.map +1 -1
  75. package/dist/cli/utils/duration.js +34 -0
  76. package/dist/cli/utils/duration.js.map +1 -0
  77. package/dist/cli/workspace/agentsMd.js +314 -0
  78. package/dist/cli/workspace/agentsMd.js.map +1 -0
  79. package/dist/cli/workspace/index.js +24 -0
  80. package/dist/cli/workspace/index.js.map +1 -0
  81. package/dist/cli/workspace/paths.js +88 -0
  82. package/dist/cli/workspace/paths.js.map +1 -0
  83. package/dist/cli/workspace/postCouncilHook.js +38 -0
  84. package/dist/cli/workspace/postCouncilHook.js.map +1 -0
  85. package/dist/cli/workspace/storage.js +392 -0
  86. package/dist/cli/workspace/storage.js.map +1 -0
  87. package/dist/cli/workspace/stubs.js +528 -0
  88. package/dist/cli/workspace/stubs.js.map +1 -0
  89. package/dist/cli/workspace/toolRegistry.js +61 -0
  90. package/dist/cli/workspace/toolRegistry.js.map +1 -0
  91. package/dist/cli/workspace/types.js +10 -0
  92. package/dist/cli/workspace/types.js.map +1 -0
  93. package/dist/main/core/tools/builtin/_walk.js +129 -0
  94. package/dist/main/core/tools/builtin/_walk.js.map +1 -0
  95. package/dist/main/core/tools/builtin/diff.js +477 -0
  96. package/dist/main/core/tools/builtin/diff.js.map +1 -0
  97. package/dist/main/core/tools/builtin/listFiles.js +5 -43
  98. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  99. package/dist/main/core/tools/builtin/search.js +120 -28
  100. package/dist/main/core/tools/builtin/search.js.map +1 -1
  101. package/package.json +5 -2
@@ -0,0 +1,528 @@
1
+ /**
2
+ * workspace/stubs.ts — CLI workspace tool stubs.
3
+ *
4
+ * Implements the 9 council workspace tools (`createPhase`, `createTask`,
5
+ * `updateTask`, `addIdea`, `createMilestone`, `createDocument`,
6
+ * `searchDocuments`, `linkDocuments`, `getDocumentBacklinks`) as
7
+ * filesystem-backed stubs that persist to `.zelari/` at the project root.
8
+ *
9
+ * Replaces the AnathemaBrain Electron-only ctx (e.g. `ctx.addIdea(...)`)
10
+ * with a `WorkspaceContext` that writes Markdown + YAML frontmatter files.
11
+ *
12
+ * @see docs/plans/2026-07-01-council-workspace-cli-stubs.md
13
+ */
14
+ import { existsSync, readdirSync, readFileSync } from 'node:fs';
15
+ import { join } from 'node:path';
16
+ import { workspaceMutex } from './storage.js';
17
+ import { resolveWorkspaceRoot, workspaceFile, workspaceArtifact, projectName as deriveProjectName, } from './paths.js';
18
+ import { Storage } from './storage.js';
19
+ // ── Context factory ───────────────────────────────────────────────────
20
+ /**
21
+ * Build a WorkspaceContext rooted at the project's `.zelari/` directory.
22
+ * Use this in the CLI's `runCouncilPure` ctx slot.
23
+ */
24
+ export function createWorkspaceContext(projectRoot = process.cwd()) {
25
+ const rootDir = resolveWorkspaceRoot(projectRoot);
26
+ return {
27
+ rootDir,
28
+ projectRoot,
29
+ storage: new Storage(),
30
+ };
31
+ }
32
+ function readPlan(ctx) {
33
+ const path = workspaceFile(ctx.rootDir, 'plan');
34
+ const doc = ctx.storage.readIfExists(path);
35
+ if (!doc)
36
+ return { phases: [], tasks: [], milestones: [] };
37
+ // The plan.md body is markdown; the frontmatter is a single "summary" object.
38
+ // We treat the file as a single doc with `kind: plan` and a body listing items.
39
+ // For our needs we just persist individual items to disk separately.
40
+ // But for v1 we serialize the entire plan as one doc with a list of phases/tasks/milestones in the body.
41
+ // Simpler: we store ONE phase/task/milestone per file under `.zelari/plan/<id>.md`.
42
+ // TODO: refactor for v2 if plan gets large.
43
+ const items = [];
44
+ // For now, parse the doc.meta as the entire plan state (kind=plan, has children fields).
45
+ const meta = doc.meta;
46
+ if (meta.phases)
47
+ items.push(...meta.phases);
48
+ return { phases: meta.phases ?? [], tasks: meta.tasks ?? [], milestones: meta.milestones ?? [] };
49
+ }
50
+ /**
51
+ * Write the entire plan (phases + tasks + milestones) as one file.
52
+ * Simpler than per-item files for v1.
53
+ */
54
+ function writePlan(ctx, summary) {
55
+ const path = workspaceFile(ctx.rootDir, 'plan');
56
+ const meta = {
57
+ kind: 'phase',
58
+ id: '_plan_summary',
59
+ order: -1,
60
+ tags: ['plan-summary'],
61
+ };
62
+ // We pack phases/tasks/milestones in a synthetic frontmatter using flow-style.
63
+ // Easier: just store each item's key fields inline as comments? No — keep them
64
+ // parseable. We use a special frontmatter shape with arrays.
65
+ const summaryMeta = {
66
+ kind: 'plan-summary',
67
+ id: '_plan',
68
+ updatedAt: new Date().toISOString(),
69
+ phases: summary.phases,
70
+ tasks: summary.tasks,
71
+ milestones: summary.milestones,
72
+ };
73
+ const body = renderPlanBody(summary);
74
+ ctx.storage.write(path, summaryMeta, body);
75
+ }
76
+ /** Render the plan.md body in human-readable Markdown. */
77
+ function renderPlanBody(summary) {
78
+ const lines = [];
79
+ lines.push(`# Execution Plan`);
80
+ lines.push('');
81
+ lines.push(`> Auto-generated by Zelari Code council. Do not edit by hand.`);
82
+ lines.push('');
83
+ // Phases
84
+ lines.push(`## Phases`);
85
+ lines.push('');
86
+ if (summary.phases.length === 0) {
87
+ lines.push(`_(none yet)_`);
88
+ }
89
+ else {
90
+ for (const phase of [...summary.phases].sort((a, b) => (a.order ?? 0) - (b.order ?? 0))) {
91
+ lines.push(`### ${phase.order ?? '?'}. ${phase.id} \`${phase.color ?? ''}\``);
92
+ lines.push('');
93
+ }
94
+ }
95
+ lines.push('');
96
+ // Tasks grouped by phase
97
+ lines.push(`## Tasks`);
98
+ lines.push('');
99
+ if (summary.tasks.length === 0) {
100
+ lines.push(`_(none yet)_`);
101
+ }
102
+ else {
103
+ const byPhase = new Map();
104
+ for (const task of summary.tasks) {
105
+ const pid = task.phaseId ?? '_unassigned';
106
+ if (!byPhase.has(pid))
107
+ byPhase.set(pid, []);
108
+ byPhase.get(pid).push(task);
109
+ }
110
+ for (const [phaseId, tasks] of byPhase) {
111
+ lines.push(`### Phase: \`${phaseId}\``);
112
+ lines.push('');
113
+ for (const t of tasks) {
114
+ const status = t.status ?? 'pending';
115
+ const pri = t.priority ?? 'medium';
116
+ lines.push(`- [ ] **${t.id}** _(${status}, ${pri})_`);
117
+ }
118
+ lines.push('');
119
+ }
120
+ }
121
+ lines.push('');
122
+ // Milestones
123
+ lines.push(`## Milestones`);
124
+ lines.push('');
125
+ if (summary.milestones.length === 0) {
126
+ lines.push(`_(none yet)_`);
127
+ }
128
+ else {
129
+ for (const m of summary.milestones) {
130
+ lines.push(`- **${m.id}** → ${m.targetVersion ?? '?'}`);
131
+ }
132
+ }
133
+ lines.push('');
134
+ return lines.join('\n');
135
+ }
136
+ // ── ADR (decisions/) helpers ──────────────────────────────────────────
137
+ function nextAdrId(ctx) {
138
+ const decisionsDir = join(ctx.rootDir, 'decisions');
139
+ if (!existsSync(decisionsDir))
140
+ return '001';
141
+ const existing = readdirSync(decisionsDir)
142
+ .filter((f) => f.endsWith('.md'))
143
+ .map((f) => f.match(/^(\d+)-/))
144
+ .filter((m) => !!m)
145
+ .map((m) => parseInt(m[1], 10));
146
+ const max = existing.length === 0 ? 0 : Math.max(...existing);
147
+ return String(max + 1).padStart(3, '0');
148
+ }
149
+ function slugify(s) {
150
+ return s.toLowerCase().replace(/[^a-z0-9]+/g, '-').replace(/^-|-$/g, '').slice(0, 60);
151
+ }
152
+ // ── Stub factory ─────────────────────────────────────────────────────
153
+ /**
154
+ * Create all 9 workspace stubs bound to the given context.
155
+ * Pass the returned array into `runCouncilPure`'s `config.tools` (via a
156
+ * tool registry), or register them in the global tool registry when
157
+ * running the CLI.
158
+ */
159
+ export function createWorkspaceStubs(ctx) {
160
+ return [
161
+ createPhaseStub(ctx),
162
+ createTaskStub(ctx),
163
+ updateTaskStub(ctx),
164
+ addIdeaStub(ctx),
165
+ createMilestoneStub(ctx),
166
+ createDocumentStub(ctx),
167
+ searchDocumentsStub(ctx),
168
+ linkDocumentsStub(ctx),
169
+ getDocumentBacklinksStub(ctx),
170
+ ];
171
+ }
172
+ // ── Individual stubs ──────────────────────────────────────────────────
173
+ function createPhaseStub(ctx) {
174
+ return {
175
+ name: 'createPhase',
176
+ description: 'Create a new execution phase in the project plan. Each phase is a milestone toward shipping a feature.',
177
+ category: 'project',
178
+ parameters: [],
179
+ execute: async (args) => {
180
+ return workspaceMutex.run(`${ctx.rootDir}:plan`, () => {
181
+ const name = args['name'] ?? 'New Phase';
182
+ const description = args['description'] ?? '';
183
+ const order = args['order'] ?? 0;
184
+ const color = args['color'] ?? '#3b82f6';
185
+ const id = slugify(name) || `phase-${order}`;
186
+ const summary = readPlan(ctx);
187
+ // Check uniqueness
188
+ if (summary.phases.some((p) => p.id === id)) {
189
+ return `Phase "${id}" already exists.`;
190
+ }
191
+ summary.phases.push({
192
+ kind: 'phase',
193
+ id,
194
+ name,
195
+ description,
196
+ order,
197
+ color,
198
+ });
199
+ writePlan(ctx, summary);
200
+ return `Phase "${name}" created (id: ${id}, order: ${order}).`;
201
+ });
202
+ },
203
+ };
204
+ }
205
+ function createTaskStub(ctx) {
206
+ return {
207
+ name: 'createTask',
208
+ description: 'Create a task within an existing phase. Tasks have file references, acceptance criteria, and a QA scenario.',
209
+ category: 'project',
210
+ parameters: [],
211
+ execute: async (args) => {
212
+ return workspaceMutex.run(`${ctx.rootDir}:plan`, () => {
213
+ const phaseId = args['phaseId'] ?? args['phase'];
214
+ const title = args['title'] ?? 'New Task';
215
+ const description = args['description'] ?? '';
216
+ const fileRefs = args['fileRefs'] ?? args['files'] ?? [];
217
+ const acceptance = args['acceptance'] ?? [];
218
+ const qaScenario = args['qaScenario'] ?? args['qa'] ?? '';
219
+ const priority = args['priority'] ?? 'medium';
220
+ if (!phaseId)
221
+ return 'Task requires a phaseId.';
222
+ const summary = readPlan(ctx);
223
+ if (!summary.phases.some((p) => p.id === phaseId)) {
224
+ return `Phase "${phaseId}" not found. Create it first via /createPhase.`;
225
+ }
226
+ const id = `${phaseId}-${slugify(title)}-${summary.tasks.filter((t) => t.phaseId === phaseId).length + 1}`;
227
+ summary.tasks.push({
228
+ kind: 'task',
229
+ id,
230
+ phaseId,
231
+ status: 'pending',
232
+ priority: priority,
233
+ });
234
+ writePlan(ctx, summary);
235
+ // Also write the task body to a per-task file so it doesn't get lost
236
+ const taskPath = join(ctx.rootDir, 'plan-tasks', `${id}.md`);
237
+ const meta = {
238
+ kind: 'task',
239
+ id,
240
+ phaseId,
241
+ status: 'pending',
242
+ priority: priority,
243
+ tags: fileRefs,
244
+ };
245
+ const body = [
246
+ `# ${title}`,
247
+ '',
248
+ description,
249
+ '',
250
+ `## File references`,
251
+ ...fileRefs.map((f) => `- \`${f}\``),
252
+ '',
253
+ `## Acceptance criteria`,
254
+ ...acceptance.map((a) => `- ${a}`),
255
+ '',
256
+ `## QA scenario`,
257
+ '',
258
+ qaScenario || '_(not specified)_',
259
+ '',
260
+ ].join('\n');
261
+ ctx.storage.write(taskPath, meta, body);
262
+ return `Task "${title}" created (id: ${id}) under phase "${phaseId}".`;
263
+ });
264
+ },
265
+ };
266
+ }
267
+ function updateTaskStub(ctx) {
268
+ return {
269
+ name: 'updateTask',
270
+ description: 'Update a task\'s status (pending|in_progress|done|blocked).',
271
+ category: 'project',
272
+ parameters: [],
273
+ execute: async (args) => {
274
+ return workspaceMutex.run(`${ctx.rootDir}:plan`, () => {
275
+ const taskId = args['taskId'];
276
+ const status = args['status'];
277
+ if (!taskId || !status)
278
+ return 'updateTask requires taskId and status.';
279
+ const valid = ['pending', 'in_progress', 'done', 'blocked'];
280
+ if (!valid.includes(status))
281
+ return `Invalid status: ${status}. Must be one of: ${valid.join(', ')}.`;
282
+ const summary = readPlan(ctx);
283
+ const task = summary.tasks.find((t) => t.id === taskId);
284
+ if (!task)
285
+ return `Task "${taskId}" not found.`;
286
+ task.status = status;
287
+ writePlan(ctx, summary);
288
+ return `Task "${taskId}" updated to status="${status}".`;
289
+ });
290
+ },
291
+ };
292
+ }
293
+ function addIdeaStub(ctx) {
294
+ return {
295
+ name: 'addIdea',
296
+ description: 'Add an Architecture Decision Record (ADR) to the project. ADRs document the context, decision, and consequences of significant choices.',
297
+ category: 'project',
298
+ parameters: [],
299
+ execute: async (args) => {
300
+ return workspaceMutex.run(`${ctx.rootDir}:adr`, () => {
301
+ const title = args['title'] ?? 'New Decision';
302
+ const context = args['context'] ?? args['content'] ?? '';
303
+ const decision = args['decision'] ?? title;
304
+ const consequences = args['consequences'] ?? [];
305
+ const tags = args['tags'] ?? [];
306
+ const category = args['category'] ?? 'General';
307
+ const id = `${nextAdrId(ctx)}-${slugify(title)}`;
308
+ const path = workspaceArtifact(ctx.rootDir, 'decisions', id);
309
+ const meta = {
310
+ kind: 'adr',
311
+ status: 'proposed',
312
+ id,
313
+ date: new Date().toISOString().slice(0, 10),
314
+ tags,
315
+ };
316
+ const body = [
317
+ `# ADR ${id}: ${title}`,
318
+ '',
319
+ `> Category: ${category} · Status: **proposed** · ${meta.date}`,
320
+ '',
321
+ `## Context`,
322
+ '',
323
+ context,
324
+ '',
325
+ `## Decision`,
326
+ '',
327
+ decision,
328
+ '',
329
+ `## Consequences`,
330
+ '',
331
+ ...consequences.map((c) => `- ${c}`),
332
+ '',
333
+ ].join('\n');
334
+ ctx.storage.write(path, meta, body);
335
+ return `ADR ${id} created: "${title}". Status: proposed. Promote to accepted via /update ADR or manual edit.`;
336
+ });
337
+ },
338
+ };
339
+ }
340
+ function createMilestoneStub(ctx) {
341
+ return {
342
+ name: 'createMilestone',
343
+ description: 'Create a project milestone (a code version that ships when specific acceptance criteria are met).',
344
+ category: 'project',
345
+ parameters: [],
346
+ execute: async (args) => {
347
+ return workspaceMutex.run(`${ctx.rootDir}:plan`, () => {
348
+ const title = args['title'] ?? 'New Milestone';
349
+ const description = args['description'] ?? '';
350
+ const dueDate = args['dueDate'];
351
+ const id = `m-${slugify(title)}`;
352
+ const summary = readPlan(ctx);
353
+ if (summary.milestones.some((m) => m.id === id))
354
+ return `Milestone "${id}" already exists.`;
355
+ const version = args['targetVersion'] ?? dueDate ?? 'TBD';
356
+ summary.milestones.push({
357
+ kind: 'milestone',
358
+ id,
359
+ name: title,
360
+ description,
361
+ dueDate,
362
+ targetVersion: version,
363
+ });
364
+ writePlan(ctx, summary);
365
+ // Also write the body
366
+ const path = join(ctx.rootDir, 'milestones', `${id}.md`);
367
+ const meta = {
368
+ kind: 'milestone',
369
+ id,
370
+ name: title,
371
+ description,
372
+ dueDate,
373
+ targetVersion: version,
374
+ };
375
+ const body = [
376
+ `# Milestone: ${title}`,
377
+ '',
378
+ description,
379
+ '',
380
+ `Target version: ${version}`,
381
+ '',
382
+ ].join('\n');
383
+ ctx.storage.write(path, meta, body);
384
+ return `Milestone "${title}" created (id: ${id}, version: ${version}).`;
385
+ });
386
+ },
387
+ };
388
+ }
389
+ function createDocumentStub(ctx) {
390
+ return {
391
+ name: 'createDocument',
392
+ description: 'Create a Markdown document in the project docs (README/CHANGELOG/spec draft produced by the council).',
393
+ category: 'vault',
394
+ parameters: [],
395
+ execute: async (args) => {
396
+ return workspaceMutex.run(`${ctx.rootDir}:doc`, () => {
397
+ const title = args['title'] ?? 'New Document';
398
+ const content = args['content'] ?? '';
399
+ const tags = args['tags'] ?? [];
400
+ const id = slugify(title) || `doc-${Date.now()}`;
401
+ const path = workspaceArtifact(ctx.rootDir, 'docs', id);
402
+ const meta = {
403
+ kind: 'doc',
404
+ id,
405
+ date: new Date().toISOString().slice(0, 10),
406
+ tags,
407
+ };
408
+ ctx.storage.write(path, meta, content);
409
+ return `Document "${title}" created at docs/${id}.md.`;
410
+ });
411
+ },
412
+ };
413
+ }
414
+ function searchDocumentsStub(ctx) {
415
+ return {
416
+ name: 'searchDocuments',
417
+ description: 'Search all workspace documents (`.zelari/**`) for a keyword. Returns matching files with snippets.',
418
+ category: 'analysis',
419
+ parameters: [],
420
+ execute: async (args) => {
421
+ const query = (args['query'] ?? '').toLowerCase();
422
+ const limit = args['limit'] ?? 5;
423
+ if (!query)
424
+ return 'searchDocuments requires a query.';
425
+ const files = [
426
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'decisions')),
427
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'docs')),
428
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'reviews')),
429
+ workspaceFile(ctx.rootDir, 'plan'),
430
+ workspaceFile(ctx.rootDir, 'risks'),
431
+ ];
432
+ const results = [];
433
+ for (const file of files) {
434
+ if (!existsSync(file))
435
+ continue;
436
+ const content = readFileSync(file, 'utf8').toLowerCase();
437
+ const idx = content.indexOf(query);
438
+ if (idx < 0)
439
+ continue;
440
+ const start = Math.max(0, idx - 40);
441
+ const end = Math.min(content.length, idx + query.length + 40);
442
+ const snippet = '…' + readFileSync(file, 'utf8').slice(start, end).replace(/\n/g, ' ').trim() + '…';
443
+ results.push({ path: file, snippet });
444
+ if (results.length >= limit)
445
+ break;
446
+ }
447
+ if (results.length === 0)
448
+ return `No matches for "${query}" in workspace.`;
449
+ return results.map((r) => `[${r.path}]\n${r.snippet}`).join('\n\n');
450
+ },
451
+ };
452
+ }
453
+ function linkDocumentsStub(ctx) {
454
+ return {
455
+ name: 'linkDocuments',
456
+ description: 'Link two workspace artifacts. Adds the `related:` field to the source frontmatter so backreferences can be traced.',
457
+ category: 'vault',
458
+ parameters: [],
459
+ execute: async (args) => {
460
+ return workspaceMutex.run(`${ctx.rootDir}:link`, () => {
461
+ const fromId = args['fromId'];
462
+ const toId = args['toId'];
463
+ if (!fromId || !toId)
464
+ return 'linkDocuments requires fromId and toId.';
465
+ // Find the source file by id
466
+ const allFiles = [
467
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'decisions')),
468
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'docs')),
469
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'reviews')),
470
+ ];
471
+ const source = allFiles.find((f) => {
472
+ try {
473
+ const meta = ctx.storage.read(f).meta;
474
+ return meta.id === fromId;
475
+ }
476
+ catch {
477
+ return false;
478
+ }
479
+ });
480
+ if (!source)
481
+ return `Source "${fromId}" not found.`;
482
+ const doc = ctx.storage.read(source);
483
+ const related = doc.meta.related ?? [];
484
+ if (!related.includes(toId))
485
+ related.push(toId);
486
+ doc.meta.related = related;
487
+ ctx.storage.write(source, doc.meta, doc.body);
488
+ return `Linked ${fromId} → ${toId}.`;
489
+ });
490
+ },
491
+ };
492
+ }
493
+ function getDocumentBacklinksStub(ctx) {
494
+ return {
495
+ name: 'getDocumentBacklinks',
496
+ description: 'List all workspace artifacts that link to the given artifact via their `related:` frontmatter.',
497
+ category: 'analysis',
498
+ parameters: [],
499
+ execute: async (args) => {
500
+ const targetId = args['targetId'];
501
+ if (!targetId)
502
+ return 'getDocumentBacklinks requires targetId.';
503
+ const allFiles = [
504
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'decisions')),
505
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'docs')),
506
+ ...ctx.storage.listMarkdown(join(ctx.rootDir, 'reviews')),
507
+ ];
508
+ const backlinks = [];
509
+ for (const file of allFiles) {
510
+ try {
511
+ const doc = ctx.storage.read(file);
512
+ if (doc.meta.id === targetId)
513
+ continue;
514
+ if ((doc.meta.related ?? []).includes(targetId)) {
515
+ backlinks.push(doc.meta.id);
516
+ }
517
+ }
518
+ catch { /* skip */ }
519
+ }
520
+ if (backlinks.length === 0)
521
+ return `No backlinks to "${targetId}".`;
522
+ return backlinks.map((id) => `- ${id}`).join('\n');
523
+ },
524
+ };
525
+ }
526
+ /** Convenience: get the workspace root used by the stubs. */
527
+ export { resolveWorkspaceRoot, deriveProjectName };
528
+ //# sourceMappingURL=stubs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stubs.js","sourceRoot":"","sources":["../../../src/cli/workspace/stubs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,61 @@
1
+ /**
2
+ * workspace/toolRegistry.ts — Adapter that wraps workspace
3
+ * `EnhancedToolDefinition` stubs as `ToolDefinition`s so they can be
4
+ * registered with the standard `ToolRegistry` used by `runCouncilPure`.
5
+ *
6
+ * The ToolRegistry expects:
7
+ * - Zod-based `inputSchema`
8
+ * - `execute(input, ctx) => Promise<TypedResult<O>>` where ctx is a `ToolContext`
9
+ * - `permissions: ToolPermission[]`
10
+ *
11
+ * Our workspace stubs use `execute(args, ctx) => string` reading
12
+ * `ctx.storage` and `ctx.rootDir` (a WorkspaceContext shape). This
13
+ * adapter bridges them by combining the `WorkspaceContext` (closed-over
14
+ * at registry creation) with the runtime `ToolContext` (passed per
15
+ * invocation), so the stub sees both: filesystem operations go through
16
+ * the closed-over workspace ctx, while `audit`/`cwd`/`sessionId` come
17
+ * from the per-call ToolContext.
18
+ */
19
+ import { z } from 'zod';
20
+ import { ToolRegistry } from '../../main/core/tools/registry.js';
21
+ import { typedOk, typedErr } from '../../main/core/tools/toolTypes.js';
22
+ import { createWorkspaceStubs } from './stubs.js';
23
+ /** Build a ToolRegistry containing the workspace stubs bound to ctx. */
24
+ export function createWorkspaceToolRegistry(ctx) {
25
+ const stubs = createWorkspaceStubs(ctx);
26
+ const registry = new ToolRegistry();
27
+ for (const stub of stubs) {
28
+ const td = adaptStubToToolDefinition(stub, ctx);
29
+ registry.register(td);
30
+ }
31
+ return registry;
32
+ }
33
+ /** Adapt one EnhancedToolDefinition stub into a ToolDefinition. */
34
+ function adaptStubToToolDefinition(stub, workspaceCtx) {
35
+ return {
36
+ name: stub.name,
37
+ description: stub.description,
38
+ permissions: [],
39
+ // The LLM shapes the args via tool calling; we trust the JSON shape.
40
+ // Validating strictly here would block legitimate council output.
41
+ inputSchema: z.any(),
42
+ execute: async (input, runtimeCtx) => {
43
+ try {
44
+ const args = input ?? {};
45
+ // The harness passes a ToolContext ({ cwd, audit, sessionId, signal }).
46
+ // The workspace stubs need a WorkspaceContext ({ rootDir, projectRoot, storage }).
47
+ // We merge: closed-over workspace ctx for filesystem ops, runtime ctx
48
+ // surfaced via a `runtime` property for stubs that want to log/audit.
49
+ const mergedCtx = Object.assign(Object.create(workspaceCtx), {
50
+ runtime: runtimeCtx,
51
+ });
52
+ const result = await Promise.resolve(stub.execute(args, mergedCtx));
53
+ return typedOk(result);
54
+ }
55
+ catch (err) {
56
+ return typedErr(`[${stub.name}] ${err instanceof Error ? err.message : String(err)}`);
57
+ }
58
+ },
59
+ };
60
+ }
61
+ //# sourceMappingURL=toolRegistry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"toolRegistry.js","sourceRoot":"","sources":["../../../src/cli/workspace/toolRegistry.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mCAAmC,CAAC;AACjE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAoB,MAAM,oCAAoC,CAAC;AAGzF,OAAO,EAAE,oBAAoB,EAAE,MAAM,YAAY,CAAC;AAElD,wEAAwE;AACxE,MAAM,UAAU,2BAA2B,CAAC,GAAqB;IAC/D,MAAM,KAAK,GAAG,oBAAoB,CAAC,GAAG,CAAC,CAAC;IACxC,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE,CAAC;IACpC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,EAAE,GAAG,yBAAyB,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;QAChD,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;IACxB,CAAC;IACD,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,mEAAmE;AACnE,SAAS,yBAAyB,CAChC,IAA4B,EAC5B,YAA8B;IAE9B,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,WAAW,EAAE,EAAE;QACf,qEAAqE;QACrE,kEAAkE;QAClE,WAAW,EAAE,CAAC,CAAC,GAAG,EAAE;QACpB,OAAO,EAAE,KAAK,EAAE,KAAc,EAAE,UAAoB,EAAgC,EAAE;YACpF,IAAI,CAAC;gBACH,MAAM,IAAI,GAAI,KAAiC,IAAI,EAAE,CAAC;gBACtD,wEAAwE;gBACxE,mFAAmF;gBACnF,sEAAsE;gBACtE,sEAAsE;gBACtE,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE;oBAC3D,OAAO,EAAE,UAAU;iBACpB,CAAC,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,OAAO,CAClC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,SAA0D,CAAC,CAC/E,CAAC;gBACF,OAAO,OAAO,CAAC,MAAM,CAAC,CAAC;YACzB,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,OAAO,QAAQ,CACb,IAAI,IAAI,CAAC,IAAI,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CACrE,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,10 @@
1
+ /**
2
+ * workspace/types.ts — TypeScript types for the CLI workspace.
3
+ *
4
+ * The workspace is a `.zelari/` directory at the project root that
5
+ * persists council output (execution plan, ADRs, reviews, risks, docs)
6
+ * in a coding-flavor way. Each artifact is a Markdown file with YAML
7
+ * frontmatter for typed metadata.
8
+ */
9
+ export {};
10
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/cli/workspace/types.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG"}