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,99 +0,0 @@
1
- /**
2
- * sessionJsonl — append-only JSONL sidecar writer for a single agent session.
3
- *
4
- * Every {@link BrainEvent} is appended as one JSON object per line so the raw
5
- * session transcript can be inspected with `cat`, `jq`, or any text editor.
6
- * Each session gets its own file under `<baseDir>/<sessionId>.jsonl`.
7
- *
8
- * Pure `node:fs` — zero Electron deps, so this module is browser-importable
9
- * for jsdom tests. The main-process caller passes `<userData>/sessions` as
10
- * `baseDir`; tests pass a temp dir.
11
- *
12
- * @see docs/plans/2026-06-28-zelari-code.md (Task 12.3)
13
- */
14
- import { promises as fs } from 'node:fs';
15
- import path from 'node:path';
16
- import os from 'node:os';
17
- /**
18
- * Append-only JSONL writer for a single session.
19
- *
20
- * One JSON object per line, shape:
21
- * {"ts": <epoch-ms>, "sessionId": "<uuid>", "event": { ...BrainEvent }}
22
- *
23
- * The writer is line-buffered: every `append()` flushes synchronously
24
- * to ensure no events are lost on crash. Uses O_APPEND for atomicity.
25
- *
26
- * Malformed lines on read are skipped (with a warning) so the file is
27
- * always recoverable via `readSession()`.
28
- */
29
- export class SessionJsonlWriter {
30
- filePath;
31
- onError;
32
- constructor(sessionId, options = {}) {
33
- const baseDir = options.baseDir ?? defaultBaseDir();
34
- this.filePath = path.join(baseDir, `${sessionId}.jsonl`);
35
- this.onError = options.onError ?? console.error;
36
- }
37
- /** Absolute path to the session JSONL file. */
38
- get path() {
39
- return this.filePath;
40
- }
41
- /** Append a BrainEvent as one JSON line. Creates the file + parent dirs if missing. */
42
- async append(event) {
43
- try {
44
- await fs.mkdir(path.dirname(this.filePath), { recursive: true });
45
- const line = JSON.stringify({
46
- ts: event.ts,
47
- sessionId: event.sessionId,
48
- event,
49
- }) + '\n';
50
- await fs.appendFile(this.filePath, line, { encoding: 'utf-8', mode: 0o644 });
51
- }
52
- catch (err) {
53
- this.onError(`[sessionJsonl] failed to append event to ${this.filePath}: ${err instanceof Error ? err.message : String(err)}`);
54
- }
55
- }
56
- /** Close the writer (no-op currently, but reserved for future buffered mode). */
57
- async close() {
58
- // No buffered state to flush yet.
59
- }
60
- }
61
- /**
62
- * Read all events from a session JSONL file. Malformed lines are skipped.
63
- * Returns an empty array if the file does not exist.
64
- */
65
- export async function readSession(filePath) {
66
- try {
67
- const content = await fs.readFile(filePath, 'utf-8');
68
- const events = [];
69
- for (const line of content.split('\n')) {
70
- const trimmed = line.trim();
71
- if (!trimmed)
72
- continue;
73
- try {
74
- const parsed = JSON.parse(trimmed);
75
- if (parsed && typeof parsed === 'object' && 'event' in parsed) {
76
- events.push(parsed.event);
77
- }
78
- }
79
- catch {
80
- // Skip malformed lines silently.
81
- }
82
- }
83
- return events;
84
- }
85
- catch (err) {
86
- if (err.code === 'ENOENT')
87
- return [];
88
- throw err;
89
- }
90
- }
91
- /** Default base directory: `<userData>/sessions/` (resolved at runtime via electron.app).
92
- * In test environments, override via `new SessionJsonlWriter(id, { baseDir: '/tmp/test' })`. */
93
- function defaultBaseDir() {
94
- // We can't import 'electron' here (this module is browser-importable for tests).
95
- // The caller must pass baseDir explicitly OR we use a sensible fallback.
96
- // In main process, the AgentHarness caller will pass `<userData>/sessions`.
97
- return path.join(os.tmpdir(), 'zelari-code', 'sessions');
98
- }
99
- //# sourceMappingURL=sessionJsonl.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"sessionJsonl.js","sourceRoot":"","sources":["../../../src/main/core/sessionJsonl.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- /** In-memory audit log (last N entries). Persisting to disk is a follow-up. */
2
- export class AuditLog {
3
- entries = [];
4
- maxEntries;
5
- constructor(maxEntries = 1000) {
6
- this.maxEntries = maxEntries;
7
- }
8
- record(entry) {
9
- this.entries.push(entry);
10
- if (this.entries.length > this.maxEntries) {
11
- this.entries.shift();
12
- }
13
- }
14
- /** Return the last N entries (most recent last). */
15
- recent(n = 50) {
16
- return this.entries.slice(-n);
17
- }
18
- /** Filter by sessionId. */
19
- bySession(sessionId) {
20
- return this.entries.filter((e) => e.sessionId === sessionId);
21
- }
22
- clear() {
23
- this.entries = [];
24
- }
25
- }
26
- //# sourceMappingURL=auditLog.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"auditLog.js","sourceRoot":"","sources":["../../../../src/main/core/tools/auditLog.ts"],"names":[],"mappings":"AAEA,+EAA+E;AAC/E,MAAM,OAAO,QAAQ;IACX,OAAO,GAAiB,EAAE,CAAC;IAC3B,UAAU,CAAS;IAE3B,YAAY,UAAU,GAAG,IAAI;QAC3B,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,MAAM,CAAC,KAAiB;QACtB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;YAC1C,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;IACH,CAAC;IAED,oDAAoD;IACpD,MAAM,CAAC,CAAC,GAAG,EAAE;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAChC,CAAC;IAED,2BAA2B;IAC3B,SAAS,CAAC,SAAiB;QACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;IAC/D,CAAC;IAED,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;CACF"}
@@ -1,110 +0,0 @@
1
- import { z } from 'zod';
2
- import { promises as fs } from 'node:fs';
3
- import path from 'node:path';
4
- import { typedOk, typedErr } from '../toolTypes.js';
5
- const ReadFileArgsSchema = z.object({
6
- path: z.string().min(1),
7
- startLine: z.number().int().nonnegative().optional(),
8
- endLine: z.number().int().positive().optional(),
9
- maxBytes: z.number().int().positive().max(10_000_000).default(1_000_000),
10
- });
11
- export const readFileTool = {
12
- name: 'read_file',
13
- description: 'Read a file with optional line range. Returns content + metadata. Use before edit_file.',
14
- permissions: ['read'],
15
- timeoutMs: 5000,
16
- inputSchema: ReadFileArgsSchema,
17
- execute: async (args, ctx) => {
18
- try {
19
- const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
20
- const buf = await fs.readFile(absPath, { encoding: 'utf-8', signal: ctx.signal });
21
- const content = typeof buf === 'string' ? buf : buf.toString('utf-8');
22
- const truncated = content.length > args.maxBytes ? content.slice(0, args.maxBytes) : content;
23
- const lines = truncated.split('\n');
24
- const totalLines = content.split('\n').length;
25
- const start = args.startLine ?? 0;
26
- const end = Math.min(args.endLine ?? lines.length, lines.length);
27
- return typedOk({
28
- path: absPath,
29
- content: lines.slice(start, end).join('\n'),
30
- totalLines,
31
- readLines: { start, end: end - 1 },
32
- sizeBytes: content.length,
33
- });
34
- }
35
- catch (err) {
36
- return typedErr(err instanceof Error ? err.message : String(err));
37
- }
38
- },
39
- };
40
- const WriteFileArgsSchema = z.object({
41
- path: z.string().min(1),
42
- content: z.string(),
43
- createDirs: z.boolean().default(false),
44
- });
45
- export const writeFileTool = {
46
- name: 'write_file',
47
- description: 'Write or create a file. Use createDirs=true to auto-create parent directories.',
48
- permissions: ['write'],
49
- timeoutMs: 10000,
50
- inputSchema: WriteFileArgsSchema,
51
- execute: async (args, ctx) => {
52
- try {
53
- const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
54
- if (args.createDirs) {
55
- await fs.mkdir(path.dirname(absPath), { recursive: true });
56
- }
57
- await fs.writeFile(absPath, args.content, { encoding: 'utf-8', signal: ctx.signal });
58
- return typedOk({ path: absPath, bytesWritten: args.content.length });
59
- }
60
- catch (err) {
61
- return typedErr(err instanceof Error ? err.message : String(err));
62
- }
63
- },
64
- };
65
- const EditFileArgsSchema = z.object({
66
- path: z.string().min(1),
67
- oldString: z.string().min(1),
68
- newString: z.string(),
69
- replaceAll: z.boolean().default(false),
70
- });
71
- export const editFileTool = {
72
- name: 'edit_file',
73
- description: 'Replace exact string match in a file. Idempotent: returns 0 occurrences if no match.',
74
- permissions: ['write'],
75
- timeoutMs: 10000,
76
- inputSchema: EditFileArgsSchema,
77
- execute: async (args, ctx) => {
78
- try {
79
- const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
80
- const content = await fs.readFile(absPath, { encoding: 'utf-8', signal: ctx.signal });
81
- const text = typeof content === 'string' ? content : content.toString('utf-8');
82
- let occurrences = 0;
83
- let newContent;
84
- if (args.replaceAll) {
85
- const parts = text.split(args.oldString);
86
- occurrences = parts.length - 1;
87
- newContent = parts.join(args.newString);
88
- }
89
- else {
90
- const idx = text.indexOf(args.oldString);
91
- if (idx === -1) {
92
- occurrences = 0;
93
- newContent = text;
94
- }
95
- else {
96
- occurrences = 1;
97
- newContent = text.slice(0, idx) + args.newString + text.slice(idx + args.oldString.length);
98
- }
99
- }
100
- if (occurrences > 0) {
101
- await fs.writeFile(absPath, newContent, { encoding: 'utf-8', signal: ctx.signal });
102
- }
103
- return typedOk({ path: absPath, occurrencesReplaced: occurrences });
104
- }
105
- catch (err) {
106
- return typedErr(err instanceof Error ? err.message : String(err));
107
- }
108
- },
109
- };
110
- //# sourceMappingURL=filesystem.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"filesystem.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/filesystem.ts"],"names":[],"mappings":"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"}
@@ -1,86 +0,0 @@
1
- import { z } from 'zod';
2
- import { promises as fs } from 'node:fs';
3
- import path from 'node:path';
4
- import { typedOk, typedErr } from '../toolTypes.js';
5
- const ListFilesArgsSchema = z.object({
6
- /** Directory to list (relative to cwd or absolute). Defaults to cwd. */
7
- path: z.string().optional(),
8
- /** Max traversal depth. 1 = immediate children only (default). */
9
- maxDepth: z.number().int().positive().max(10).default(1),
10
- /** Glob-style patterns to exclude (matched against each entry name). */
11
- exclude: z.array(z.string()).default([
12
- 'node_modules', '.git', 'dist', 'build', '.next', '__pycache__', '.cache',
13
- ]),
14
- });
15
- function matchesAny(name, patterns) {
16
- return patterns.some((p) => {
17
- // Simple glob: '*' wildcard.
18
- if (p.includes('*')) {
19
- const regex = new RegExp('^' + p.replace(/[.+^${}()|[\]\\]/g, '\\$&').replace(/\*/g, '.*') + '$');
20
- return regex.test(name);
21
- }
22
- return name === p;
23
- });
24
- }
25
- async function walk(dir, baseRel, depth, maxDepth, exclude, entries, signal) {
26
- if (depth > maxDepth)
27
- return;
28
- let dirents;
29
- try {
30
- dirents = await fs.readdir(dir, { withFileTypes: true });
31
- }
32
- catch {
33
- return; // unreadable subdirectory — skip silently
34
- }
35
- // Honor the abort signal between reads (fs.readdir options.signal typing
36
- // varies across Node versions, so we check manually here).
37
- if (signal?.aborted)
38
- return;
39
- for (const dirent of dirents) {
40
- if (matchesAny(dirent.name, exclude))
41
- continue;
42
- const rel = baseRel ? `${baseRel}/${dirent.name}` : dirent.name;
43
- const isDir = dirent.isDirectory();
44
- entries.push({
45
- name: rel,
46
- type: isDir ? 'directory' : dirent.isFile() ? 'file' : 'other',
47
- });
48
- if (isDir && depth < maxDepth) {
49
- await walk(path.join(dir, dirent.name), rel, depth + 1, maxDepth, exclude, entries, signal);
50
- }
51
- }
52
- }
53
- export const listFilesTool = {
54
- name: 'list_files',
55
- description: 'List files and directories in the given path (defaults to the working directory). ' +
56
- 'Returns names with types (file/directory). Use this to discover the project structure ' +
57
- 'before reading specific files. Supports a maxDepth for recursive listing and excludes ' +
58
- 'common dependency/build directories by default.',
59
- permissions: ['read'],
60
- timeoutMs: 15000,
61
- inputSchema: ListFilesArgsSchema,
62
- execute: async (args, ctx) => {
63
- try {
64
- const target = args.path
65
- ? (path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path))
66
- : ctx.cwd;
67
- const entries = [];
68
- await walk(target, '', 1, args.maxDepth, args.exclude, entries, ctx.signal);
69
- // Sort: directories first, then files, alphabetically.
70
- entries.sort((a, b) => {
71
- if (a.type === 'directory' && b.type !== 'directory')
72
- return -1;
73
- if (a.type !== 'directory' && b.type === 'directory')
74
- return 1;
75
- return a.name.localeCompare(b.name);
76
- });
77
- const MAX_ENTRIES = 500;
78
- const truncated = entries.length > MAX_ENTRIES;
79
- return typedOk({ dir: target, entries: truncated ? entries.slice(0, MAX_ENTRIES) : entries, truncated });
80
- }
81
- catch (err) {
82
- return typedErr(err instanceof Error ? err.message : String(err));
83
- }
84
- },
85
- };
86
- //# sourceMappingURL=listFiles.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"listFiles.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/listFiles.ts"],"names":[],"mappings":"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"}
@@ -1,56 +0,0 @@
1
- import { z } from 'zod';
2
- import { promises as fs } from 'node:fs';
3
- import path from 'node:path';
4
- import { typedOk, typedErr } from '../toolTypes.js';
5
- const GrepContentArgsSchema = z.object({
6
- path: z.string().min(1),
7
- pattern: z.string().min(1),
8
- contextLines: z.number().int().nonnegative().default(2),
9
- maxMatches: z.number().int().positive().max(1000).default(50),
10
- });
11
- export const grepContentTool = {
12
- name: 'grep_content',
13
- description: 'Regex search for content in a file. Returns matches with line numbers and context.',
14
- permissions: ['read'],
15
- timeoutMs: 10000,
16
- inputSchema: GrepContentArgsSchema,
17
- execute: async (args, ctx) => {
18
- try {
19
- const absPath = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
20
- const content = await fs.readFile(absPath, { encoding: 'utf-8', signal: ctx.signal });
21
- const text = typeof content === 'string' ? content : content.toString('utf-8');
22
- const lines = text.split('\n');
23
- const regex = new RegExp(args.pattern, 'gm');
24
- const matches = [];
25
- let totalMatches = 0;
26
- let truncated = false;
27
- for (let i = 0; i < lines.length; i++) {
28
- if (regex.test(lines[i])) {
29
- regex.lastIndex = 0; // Reset global regex state
30
- totalMatches++;
31
- if (matches.length < args.maxMatches) {
32
- const startBefore = Math.max(0, i - args.contextLines);
33
- const endAfter = Math.min(lines.length - 1, i + args.contextLines);
34
- matches.push({
35
- file: absPath,
36
- line: i + 1,
37
- text: lines[i],
38
- context: {
39
- before: lines.slice(startBefore, i),
40
- after: lines.slice(i + 1, endAfter + 1),
41
- },
42
- });
43
- }
44
- else {
45
- truncated = true;
46
- }
47
- }
48
- }
49
- return typedOk({ matches, totalMatches, truncated });
50
- }
51
- catch (err) {
52
- return typedErr(err instanceof Error ? err.message : String(err));
53
- }
54
- },
55
- };
56
- //# sourceMappingURL=search.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/search.ts"],"names":[],"mappings":"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"}
@@ -1,51 +0,0 @@
1
- import { z } from 'zod';
2
- import { spawn } from 'node:child_process';
3
- import { typedOk, typedErr } from '../toolTypes.js';
4
- const BashArgsSchema = z.object({
5
- command: z.string().min(1),
6
- cwd: z.string().optional(),
7
- timeoutMs: z.number().int().positive().max(600_000).default(30_000),
8
- });
9
- export const bashTool = {
10
- name: 'bash',
11
- description: 'Run a shell command. Streams stdout/stderr. Respects timeout and cancellation. Returns exit code.',
12
- permissions: ['execute'],
13
- timeoutMs: 60000,
14
- inputSchema: BashArgsSchema,
15
- execute: async (args, ctx) => {
16
- return new Promise((resolve) => {
17
- const start = Date.now();
18
- const cwd = args.cwd ?? ctx.cwd;
19
- const child = spawn(args.command, { shell: true, cwd, signal: ctx.signal });
20
- let stdout = '';
21
- let stderr = '';
22
- const maxBuffer = 1024 * 1024; // 1MB cap on each stream
23
- child.stdout?.on('data', (data) => {
24
- if (stdout.length < maxBuffer)
25
- stdout += data.toString('utf-8');
26
- });
27
- child.stderr?.on('data', (data) => {
28
- if (stderr.length < maxBuffer)
29
- stderr += data.toString('utf-8');
30
- });
31
- const timer = setTimeout(() => {
32
- child.kill('SIGTERM');
33
- resolve(typedErr(`Bash command timed out after ${args.timeoutMs}ms`));
34
- }, args.timeoutMs);
35
- child.on('close', (code) => {
36
- clearTimeout(timer);
37
- resolve(typedOk({
38
- stdout: stdout.slice(0, maxBuffer),
39
- stderr: stderr.slice(0, maxBuffer),
40
- exitCode: code ?? -1,
41
- durationMs: Date.now() - start,
42
- }));
43
- });
44
- child.on('error', (err) => {
45
- clearTimeout(timer);
46
- resolve(typedErr(err.message));
47
- });
48
- });
49
- },
50
- };
51
- //# sourceMappingURL=shell.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/shell.ts"],"names":[],"mappings":"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"}
@@ -1,71 +0,0 @@
1
- import { zodToJsonSchema } from './zodBridge.js';
2
- import { typedErr } from './toolTypes.js';
3
- export class ToolRegistry {
4
- tools = new Map();
5
- register(def) {
6
- this.tools.set(def.name, def);
7
- }
8
- get(name) {
9
- return this.tools.get(name);
10
- }
11
- list() {
12
- return Array.from(this.tools.keys());
13
- }
14
- /** Invoke a tool with validated input + timeout + audit + permissions check. */
15
- async invoke(name, rawInput, options = {}) {
16
- const tool = this.tools.get(name);
17
- if (!tool) {
18
- return typedErr(`Tool "${name}" not found. Available: ${this.list().join(', ')}`);
19
- }
20
- // Zod validation
21
- const parsed = tool.inputSchema.safeParse(rawInput);
22
- if (!parsed.success) {
23
- return typedErr(`Invalid input: ${parsed.error.message}`);
24
- }
25
- // Timeout + cancellation
26
- const timeoutMs = options.timeoutMs ?? tool.timeoutMs ?? 30000;
27
- const signal = options.signal;
28
- const ctx = {
29
- signal: signal ?? new AbortController().signal,
30
- cwd: options.cwd ?? process.cwd(),
31
- audit: () => { },
32
- sessionId: options.sessionId ?? 'default',
33
- };
34
- try {
35
- const result = await Promise.race([
36
- tool.execute(parsed.data, ctx),
37
- new Promise((_, reject) => {
38
- const timer = setTimeout(() => reject(new Error(`Tool "${name}" timed out after ${timeoutMs}ms`)), timeoutMs);
39
- signal?.addEventListener('abort', () => {
40
- clearTimeout(timer);
41
- reject(new Error(`Tool "${name}" aborted`));
42
- });
43
- }),
44
- ]);
45
- return result;
46
- }
47
- catch (err) {
48
- const error = err instanceof Error ? err.message : String(err);
49
- return typedErr(error);
50
- }
51
- }
52
- /** Return all tool definitions in OpenAI function-calling format. */
53
- toOpenAITools() {
54
- return Array.from(this.tools.values()).map((t) => ({
55
- type: 'function',
56
- function: {
57
- name: t.name,
58
- description: t.description,
59
- parameters: zodToJsonSchema(t.inputSchema),
60
- },
61
- }));
62
- }
63
- }
64
- /** Singleton instance (caller can override via setInstance). */
65
- let _instance = null;
66
- export function getToolRegistry() {
67
- if (!_instance)
68
- _instance = new ToolRegistry();
69
- return _instance;
70
- }
71
- //# sourceMappingURL=registry.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../../../src/main/core/tools/registry.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- /** Helper: wrap a thrown error into TypedResult. */
2
- export function typedOk(value) {
3
- return { ok: true, value };
4
- }
5
- export function typedErr(error) {
6
- return { ok: false, error };
7
- }
8
- //# sourceMappingURL=toolTypes.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"toolTypes.js","sourceRoot":"","sources":["../../../../src/main/core/tools/toolTypes.ts"],"names":[],"mappings":"AAgDA,oDAAoD;AACpD,MAAM,UAAU,OAAO,CAAI,KAAQ;IACjC,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,QAAQ,CAAY,KAAa;IAC/C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC9B,CAAC"}
@@ -1,56 +0,0 @@
1
- /** Convert a Zod schema into a JSON Schema-like object suitable for LLM
2
- * function-calling definitions. Best-effort: handles primitives, objects,
3
- * arrays, unions, optionals. Does not handle refinements beyond type. */
4
- export function zodToJsonSchema(schema) {
5
- if (typeof schema.toJSONSchema === 'function') {
6
- const res = schema.toJSONSchema();
7
- if (res && typeof res === 'object') {
8
- const copy = { ...res };
9
- delete copy['$schema'];
10
- return copy;
11
- }
12
- }
13
- return _convert(schema);
14
- }
15
- function _convert(schema) {
16
- const def = schema._def;
17
- if (!def)
18
- return {};
19
- switch (def.typeName) {
20
- case 'ZodString': return { type: 'string' };
21
- case 'ZodNumber': return { type: 'number' };
22
- case 'ZodBoolean': return { type: 'boolean' };
23
- case 'ZodObject': {
24
- const shape = schema.shape;
25
- const properties = {};
26
- const required = [];
27
- for (const [key, value] of Object.entries(shape)) {
28
- properties[key] = _convert(value);
29
- // If inner type is not ZodOptional, mark required
30
- const vDef = value._def;
31
- if (vDef?.typeName !== 'ZodOptional') {
32
- required.push(key);
33
- }
34
- }
35
- return { type: 'object', properties, required };
36
- }
37
- case 'ZodArray': {
38
- const inner = def.innerType;
39
- return { type: 'array', items: _convert(inner) };
40
- }
41
- case 'ZodOptional': {
42
- const inner = def.innerType;
43
- return _convert(inner);
44
- }
45
- case 'ZodUnion': {
46
- const options = def.options ?? [];
47
- return { anyOf: options.map(_convert) };
48
- }
49
- case 'ZodEnum': {
50
- const values = schema.options;
51
- return { type: 'string', enum: values };
52
- }
53
- default: return {};
54
- }
55
- }
56
- //# sourceMappingURL=zodBridge.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"zodBridge.js","sourceRoot":"","sources":["../../../../src/main/core/tools/zodBridge.ts"],"names":[],"mappings":"AAEA;;0EAE0E;AAC1E,MAAM,UAAU,eAAe,CAAC,MAAiB;IAC/C,IAAI,OAAQ,MAAc,CAAC,YAAY,KAAK,UAAU,EAAE,CAAC;QACvD,MAAM,GAAG,GAAI,MAAc,CAAC,YAAY,EAAE,CAAC;QAC3C,IAAI,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YACnC,MAAM,IAAI,GAAG,EAAE,GAAG,GAAG,EAAE,CAAC;YACxB,OAAO,IAAI,CAAC,SAAS,CAAC,CAAC;YACvB,OAAO,IAAI,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,QAAQ,CAAC,MAAoB,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,QAAQ,CAAC,MAAkB;IAClC,MAAM,GAAG,GAAI,MAAgH,CAAC,IAAI,CAAC;IACnI,IAAI,CAAC,GAAG;QAAE,OAAO,EAAE,CAAC;IACpB,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;QACrB,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC;QAC5C,KAAK,YAAY,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;QAC9C,KAAK,WAAW,CAAC,CAAC,CAAC;YACjB,MAAM,KAAK,GAAI,MAA2D,CAAC,KAAK,CAAC;YACjF,MAAM,UAAU,GAA4B,EAAE,CAAC;YAC/C,MAAM,QAAQ,GAAa,EAAE,CAAC;YAC9B,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACjD,UAAU,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;gBAClC,kDAAkD;gBAClD,MAAM,IAAI,GAAI,KAAkE,CAAC,IAAI,CAAC;gBACtF,IAAI,IAAI,EAAE,QAAQ,KAAK,aAAa,EAAE,CAAC;oBACrC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrB,CAAC;YACH,CAAC;YACD,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC;QAClD,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAuB,CAAC;YAC1C,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,CAAC;QACD,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,KAAK,GAAG,GAAG,CAAC,SAAuB,CAAC;YAC1C,OAAO,QAAQ,CAAC,KAAK,CAAC,CAAC;QACzB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,OAAO,GAAI,GAAG,CAAC,OAAwB,IAAI,EAAE,CAAC;YACpD,OAAO,EAAE,KAAK,EAAE,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;QAC1C,CAAC;QACD,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,MAAM,GAAI,MAAoD,CAAC,OAAO,CAAC;YAC7E,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QAC1C,CAAC;QACD,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;IACrB,CAAC;AACH,CAAC"}