zelari-code 0.7.8 → 0.7.9

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 (78) hide show
  1. package/README.md +27 -1
  2. package/bin/zelari-code.js +1 -1
  3. package/dist/agents/councilApi.js +7 -7
  4. package/dist/agents/councilApi.js.map +1 -1
  5. package/dist/agents/councilDirectives.js +3 -3
  6. package/dist/agents/promoteMember.js +2 -2
  7. package/dist/agents/roles.js +50 -32
  8. package/dist/agents/roles.js.map +1 -1
  9. package/dist/agents/skills/builtin/debugging.js +4 -4
  10. package/dist/agents/skills/builtin/debugging.js.map +1 -1
  11. package/dist/agents/skills/builtin/docs.js +23 -13
  12. package/dist/agents/skills/builtin/docs.js.map +1 -1
  13. package/dist/agents/skills/builtin/git-ops.js +3 -3
  14. package/dist/agents/skills/builtin/git-ops.js.map +1 -1
  15. package/dist/agents/skills/builtin/planning.js +4 -4
  16. package/dist/agents/skills/builtin/planning.js.map +1 -1
  17. package/dist/agents/skills/builtin/refactoring.js +3 -3
  18. package/dist/agents/skills/builtin/refactoring.js.map +1 -1
  19. package/dist/agents/skills/builtin/review.js +9 -9
  20. package/dist/agents/skills/builtin/review.js.map +1 -1
  21. package/dist/agents/skills/builtin/testing.js +3 -3
  22. package/dist/agents/skills/builtin/testing.js.map +1 -1
  23. package/dist/agents/tools.js +2 -9
  24. package/dist/agents/tools.js.map +1 -1
  25. package/dist/cli/app.js +48 -17
  26. package/dist/cli/app.js.map +1 -1
  27. package/dist/cli/components/CollapsibleToolOutput.js +8 -26
  28. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  29. package/dist/cli/components/Header.js +6 -18
  30. package/dist/cli/components/Header.js.map +1 -1
  31. package/dist/cli/components/Sidebar.js +86 -37
  32. package/dist/cli/components/Sidebar.js.map +1 -1
  33. package/dist/cli/components/SplashScreen.js +117 -71
  34. package/dist/cli/components/SplashScreen.js.map +1 -1
  35. package/dist/cli/components/StatusBar.js +22 -18
  36. package/dist/cli/components/StatusBar.js.map +1 -1
  37. package/dist/cli/councilConfig.js +38 -0
  38. package/dist/cli/councilConfig.js.map +1 -0
  39. package/dist/cli/councilDispatcher.js +35 -49
  40. package/dist/cli/councilDispatcher.js.map +1 -1
  41. package/dist/cli/hooks/useChatTurn.js +80 -61
  42. package/dist/cli/hooks/useChatTurn.js.map +1 -1
  43. package/dist/cli/hooks/useExecutionTimer.js +25 -0
  44. package/dist/cli/hooks/useExecutionTimer.js.map +1 -0
  45. package/dist/cli/hooks/useGitChanges.js +142 -0
  46. package/dist/cli/hooks/useGitChanges.js.map +1 -0
  47. package/dist/cli/hooks/useSlashDispatch.js +9 -2
  48. package/dist/cli/hooks/useSlashDispatch.js.map +1 -1
  49. package/dist/cli/main.bundled.js +1668 -1151
  50. package/dist/cli/main.bundled.js.map +4 -4
  51. package/dist/cli/main.js +1 -1
  52. package/dist/cli/mcp/mcpClient.js +14 -6
  53. package/dist/cli/mcp/mcpClient.js.map +1 -1
  54. package/dist/cli/updater.js +8 -5
  55. package/dist/cli/updater.js.map +1 -1
  56. package/dist/cli/utils/cmdline.js +26 -0
  57. package/dist/cli/utils/cmdline.js.map +1 -0
  58. package/dist/cli/utils/paths.js +20 -0
  59. package/dist/cli/utils/paths.js.map +1 -0
  60. package/dist/cli/workspace/planDetect.js +17 -0
  61. package/dist/cli/workspace/planDetect.js.map +1 -0
  62. package/dist/cli/workspace/postCouncilHook.js +39 -28
  63. package/dist/cli/workspace/postCouncilHook.js.map +1 -1
  64. package/dist/cli/workspace/stubs.js +241 -196
  65. package/dist/cli/workspace/stubs.js.map +1 -1
  66. package/dist/main/core/AgentHarness.js +36 -7
  67. package/dist/main/core/AgentHarness.js.map +1 -1
  68. package/dist/main/core/tools/builtin/listFiles.js +43 -5
  69. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  70. package/dist/main/core/tools/builtin/search.js +28 -120
  71. package/dist/main/core/tools/builtin/search.js.map +1 -1
  72. package/package.json +71 -71
  73. package/dist/cli/oauthCallbackServer.js +0 -207
  74. package/dist/cli/oauthCallbackServer.js.map +0 -1
  75. package/dist/main/core/tools/builtin/_walk.js +0 -129
  76. package/dist/main/core/tools/builtin/_walk.js.map +0 -1
  77. package/dist/main/core/tools/builtin/diff.js +0 -477
  78. package/dist/main/core/tools/builtin/diff.js.map +0 -1
package/package.json CHANGED
@@ -1,71 +1,71 @@
1
- {
2
- "name": "zelari-code",
3
- "version": "0.7.8",
4
- "description": "Zelari Code — AI Council coding agent CLI. Multi-agent orchestration (Caronte, Nettuno, Gerione, Plutone, Minosse, Lucifero) with slash commands, provider-agnostic LLM streaming, and self-update.",
5
- "author": "N-THEM Studio",
6
- "license": "SEE LICENSE IN LICENSE",
7
- "type": "module",
8
- "workspaces": [
9
- "packages/*"
10
- ],
11
- "main": "dist/cli/main.js",
12
- "bin": {
13
- "zelari-code": "./bin/zelari-code.js"
14
- },
15
- "files": [
16
- "bin",
17
- "dist",
18
- "LICENSE",
19
- "README.md",
20
- "package.json"
21
- ],
22
- "preferGlobal": true,
23
- "engines": {
24
- "node": ">=20.0.0"
25
- },
26
- "scripts": {
27
- "build": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
28
- "build:cli": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
29
- "typecheck": "tsc --noEmit -p tsconfig.json",
30
- "pretest": "npm run build --workspace=@zelari/core",
31
- "test": "vitest run",
32
- "test:watch": "vitest",
33
- "smoke": "node bin/zelari-code.js --version",
34
- "prepublishOnly": "node scripts/prepublish.mjs"
35
- },
36
- "dependencies": {
37
- "ink": "^6.8.0",
38
- "ink-text-input": "^6.0.0",
39
- "react": "^19.2.7",
40
- "zod": "^4.4.3"
41
- },
42
- "devDependencies": {
43
- "@testing-library/react": "^16.3.2",
44
- "@zelari/core": "0.7.8",
45
- "@types/node": "^25.3.0",
46
- "@types/react": "^19.0.10",
47
- "esbuild": "^0.24.0",
48
- "jsdom": "^29.1.1",
49
- "react-dom": "^19.2.7",
50
- "typescript": "~5.7.2",
51
- "vitest": "^2.1.9"
52
- },
53
- "keywords": [
54
- "cli",
55
- "ai",
56
- "agent",
57
- "council",
58
- "coding",
59
- "llm",
60
- "zelari",
61
- "anathema"
62
- ],
63
- "repository": {
64
- "type": "git",
65
- "url": "git+https://github.com/N-THEM-Studio/zelari-code.git"
66
- },
67
- "bugs": {
68
- "url": "https://github.com/N-THEM-Studio/zelari-code/issues"
69
- },
70
- "homepage": "https://github.com/N-THEM-Studio/zelari-code#readme"
71
- }
1
+ {
2
+ "name": "zelari-code",
3
+ "version": "0.7.9",
4
+ "description": "Zelari Code — AI Council coding agent CLI. Multi-agent orchestration (Caronte, Nettuno, Gerione, Plutone, Minosse, Lucifero) with slash commands, provider-agnostic LLM streaming, and self-update.",
5
+ "author": "N-THEM Studio",
6
+ "license": "SEE LICENSE IN LICENSE",
7
+ "type": "module",
8
+ "workspaces": [
9
+ "packages/*"
10
+ ],
11
+ "main": "dist/cli/main.js",
12
+ "bin": {
13
+ "zelari-code": "./bin/zelari-code.js"
14
+ },
15
+ "files": [
16
+ "bin",
17
+ "dist",
18
+ "LICENSE",
19
+ "README.md",
20
+ "package.json"
21
+ ],
22
+ "preferGlobal": true,
23
+ "engines": {
24
+ "node": ">=20.0.0"
25
+ },
26
+ "scripts": {
27
+ "build": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
28
+ "build:cli": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
29
+ "typecheck": "tsc --noEmit -p tsconfig.json",
30
+ "pretest": "npm run build --workspace=@zelari/core",
31
+ "test": "vitest run",
32
+ "test:watch": "vitest",
33
+ "smoke": "node bin/zelari-code.js --version",
34
+ "prepublishOnly": "node scripts/prepublish.mjs"
35
+ },
36
+ "dependencies": {
37
+ "ink": "^6.8.0",
38
+ "ink-text-input": "^6.0.0",
39
+ "react": "^19.2.7",
40
+ "zod": "^4.4.3"
41
+ },
42
+ "devDependencies": {
43
+ "@testing-library/react": "^16.3.2",
44
+ "@zelari/core": "0.7.9",
45
+ "@types/node": "^25.3.0",
46
+ "@types/react": "^19.0.10",
47
+ "esbuild": "^0.24.0",
48
+ "jsdom": "^29.1.1",
49
+ "react-dom": "^19.2.7",
50
+ "typescript": "~5.7.2",
51
+ "vitest": "^2.1.9"
52
+ },
53
+ "keywords": [
54
+ "cli",
55
+ "ai",
56
+ "agent",
57
+ "council",
58
+ "coding",
59
+ "llm",
60
+ "zelari",
61
+ "anathema"
62
+ ],
63
+ "repository": {
64
+ "type": "git",
65
+ "url": "git+https://github.com/N-THEM-Studio/zelari-code.git"
66
+ },
67
+ "bugs": {
68
+ "url": "https://github.com/N-THEM-Studio/zelari-code/issues"
69
+ },
70
+ "homepage": "https://github.com/N-THEM-Studio/zelari-code#readme"
71
+ }
@@ -1,207 +0,0 @@
1
- /**
2
- * oauthCallbackServer — minimal HTTP server for OAuth browser-flow callbacks.
3
- *
4
- * The CLI uses this to receive the redirect from the OAuth provider after
5
- * the user authenticates in their browser. The server:
6
- * - listens on a local port (default 14523) on 127.0.0.1
7
- * - captures `?code=XXX` from the first request to `expectedPath`
8
- * - returns a friendly 200 HTML response so the user can close the tab
9
- * - resolves a single `waitForCode()` Promise with the code, or rejects on timeout
10
- * - shuts itself down after capture (or via explicit close())
11
- *
12
- * No deps — pure node:http. Browser-importable for jsdom tests.
13
- *
14
- * @see docs/plans/2026-06-29-anathema-coder-v2.md (Task 16.1)
15
- */
16
- import { createServer } from 'node:http';
17
- const DEFAULT_SUCCESS_HTML = `
18
- <!DOCTYPE html>
19
- <html lang="en">
20
- <head>
21
- <meta charset="UTF-8">
22
- <title>zelari-code OAuth</title>
23
- </head>
24
- <body style="font-family: -apple-system, BlinkMacSystemFont, sans-serif; padding: 40px; text-align: center; color: #1a1a1a;">
25
- <h1 style="color: #00aa33;">✓ Authentication complete</h1>
26
- <p>You can close this tab and return to zelari-code.</p>
27
- </body>
28
- </html>
29
- `.trim();
30
- export class OAuthCallbackTimeoutError extends Error {
31
- constructor(timeoutMs) {
32
- super(`OAuth callback not received within ${timeoutMs}ms`);
33
- this.name = 'OAuthCallbackTimeoutError';
34
- }
35
- }
36
- export class OAuthCallbackClosedError extends Error {
37
- constructor() {
38
- super('OAuth callback server closed before receiving a callback');
39
- this.name = 'OAuthCallbackClosedError';
40
- }
41
- }
42
- export class OAuthCallbackError extends Error {
43
- constructor(message) {
44
- super(message);
45
- this.name = 'OAuthCallbackError';
46
- }
47
- }
48
- /**
49
- * Start the OAuth callback server. Returns a handle with port + waitForCode + close.
50
- *
51
- * The first request to `expectedPath` resolves waitForCode with the `code`
52
- * query parameter. Any other path returns a 404.
53
- */
54
- export function startOAuthCallbackServer(options = {}) {
55
- const host = options.host ?? '127.0.0.1';
56
- const preferredPort = options.port ?? 14523;
57
- const timeoutMs = options.timeoutMs ?? 60_000;
58
- const expectedPath = options.expectedPath ?? '/oauth/callback';
59
- const successHtml = options.successHtml ?? DEFAULT_SUCCESS_HTML;
60
- return new Promise((resolveStart, rejectStart) => {
61
- let resolved = false;
62
- let resolveCode = null;
63
- let rejectCode = null;
64
- let timeoutHandle = null;
65
- const server = createServer((req, res) => {
66
- try {
67
- if (!req.url) {
68
- res.writeHead(400, { 'Content-Type': 'text/plain' });
69
- res.end('Bad request');
70
- return;
71
- }
72
- // Parse path + query.
73
- const url = new URL(req.url, `http://${host}:${preferredPort}`);
74
- if (url.pathname !== expectedPath) {
75
- res.writeHead(404, { 'Content-Type': 'text/plain' });
76
- res.end('Not found');
77
- return;
78
- }
79
- const code = url.searchParams.get('code');
80
- const state = url.searchParams.get('state');
81
- const errorParam = url.searchParams.get('error');
82
- const errorDescription = url.searchParams.get('error_description');
83
- // Capture any extra params for diagnostics / future use.
84
- const extras = {};
85
- for (const [key, value] of url.searchParams.entries()) {
86
- if (key !== 'code' && key !== 'state' && key !== 'error' && key !== 'error_description') {
87
- extras[key] = value;
88
- }
89
- }
90
- const params = {
91
- ...(code ? { code } : {}),
92
- ...(state ? { state } : {}),
93
- ...(errorParam ? { error: errorParam } : {}),
94
- ...(errorDescription ? { errorDescription } : {}),
95
- extras,
96
- };
97
- if (errorParam) {
98
- // OAuth provider returned an error (e.g. user denied).
99
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
100
- res.end(`<h1>OAuth error: ${errorParam}</h1>`);
101
- if (rejectCode && !resolved) {
102
- resolved = true;
103
- if (timeoutHandle)
104
- clearTimeout(timeoutHandle);
105
- rejectCode(new OAuthCallbackError(`OAuth provider returned error: ${errorParam}`));
106
- }
107
- return;
108
- }
109
- if (!code) {
110
- res.writeHead(400, { 'Content-Type': 'text/html; charset=utf-8' });
111
- res.end('<h1>Missing <code>code</code> query parameter</h1>');
112
- return;
113
- }
114
- // Success.
115
- res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' });
116
- res.end(successHtml);
117
- if (resolveCode && !resolved) {
118
- resolved = true;
119
- if (timeoutHandle)
120
- clearTimeout(timeoutHandle);
121
- resolveCode(params);
122
- }
123
- // Give the response a moment to flush before closing.
124
- setTimeout(() => {
125
- try {
126
- server.close();
127
- }
128
- catch {
129
- // already closed
130
- }
131
- }, 100);
132
- }
133
- catch (err) {
134
- // Defensive: never crash the server on a single bad request.
135
- try {
136
- res.writeHead(500, { 'Content-Type': 'text/plain' });
137
- res.end('Internal error');
138
- }
139
- catch {
140
- // ignore
141
- }
142
- if (!resolved && rejectCode) {
143
- resolved = true;
144
- if (timeoutHandle)
145
- clearTimeout(timeoutHandle);
146
- rejectCode(err instanceof Error ? err : new Error(String(err)));
147
- }
148
- }
149
- });
150
- const onError = (err) => {
151
- if (!resolved) {
152
- resolved = true;
153
- if (timeoutHandle)
154
- clearTimeout(timeoutHandle);
155
- rejectStart(err);
156
- }
157
- };
158
- server.once('error', onError);
159
- server.listen(preferredPort, host, () => {
160
- // Resolve with the actual bound port (important when port=0).
161
- const addr = server.address();
162
- const actualPort = addr ? addr.port : preferredPort;
163
- const waitForCode = () => {
164
- return new Promise((res, rej) => {
165
- if (resolved) {
166
- // Server already resolved (timeout fired, etc.) — reject.
167
- rej(new OAuthCallbackClosedError());
168
- return;
169
- }
170
- resolveCode = res;
171
- rejectCode = rej;
172
- timeoutHandle = setTimeout(() => {
173
- if (!resolved) {
174
- resolved = true;
175
- try {
176
- server.close();
177
- }
178
- catch {
179
- // ignore
180
- }
181
- rej(new OAuthCallbackTimeoutError(timeoutMs));
182
- }
183
- }, timeoutMs);
184
- // Don't keep the process alive just for this timer.
185
- if (typeof timeoutHandle?.unref === 'function')
186
- timeoutHandle.unref();
187
- });
188
- };
189
- const close = () => {
190
- if (timeoutHandle)
191
- clearTimeout(timeoutHandle);
192
- try {
193
- server.close();
194
- }
195
- catch {
196
- // ignore
197
- }
198
- if (!resolved && rejectCode) {
199
- resolved = true;
200
- rejectCode(new OAuthCallbackClosedError());
201
- }
202
- };
203
- resolveStart({ port: actualPort, waitForCode, close });
204
- });
205
- });
206
- }
207
- //# sourceMappingURL=oauthCallbackServer.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"oauthCallbackServer.js","sourceRoot":"","sources":["../../src/cli/oauthCallbackServer.ts"],"names":[],"mappings":"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"}
@@ -1,129 +0,0 @@
1
- import { promises as fs } from 'node:fs';
2
- import path from 'node:path';
3
- const REGEX_ESCAPE = /[.+^${}()|[\]\\]/g;
4
- function escapeRegex(p) {
5
- return p.replace(REGEX_ESCAPE, '\\$&');
6
- }
7
- function globToRegex(glob) {
8
- // Convert glob pattern to anchored RegExp.
9
- // Semantics:
10
- // - `*` → any chars except `/` (one segment)
11
- // - `**` → any chars including `/` (zero or more segments)
12
- // - `**/` → zero or more dirs (must be followed by something or end)
13
- // - `?` → any single char except `/`
14
- // - `[abc]` → char class
15
- // - everything else is literal (regex special chars auto-escaped)
16
- let re = '';
17
- for (let i = 0; i < glob.length; i++) {
18
- const c = glob[i];
19
- if (c === '*') {
20
- if (glob[i + 1] === '*') {
21
- if (glob[i + 2] === '/') {
22
- // **/ → zero or more dirs. Skip both stars AND the slash.
23
- re += '(?:.*/)?';
24
- i += 2; // skip second * AND trailing /
25
- }
26
- else {
27
- // ** at end (or **<not-slash>) → match anything
28
- re += '.*';
29
- i++; // skip second *
30
- }
31
- }
32
- else {
33
- // single * → match within one segment
34
- re += '[^/]*';
35
- }
36
- }
37
- else if (c === '?') {
38
- re += '[^/]';
39
- }
40
- else if (c === '[') {
41
- const end = glob.indexOf(']', i);
42
- if (end === -1) {
43
- re += escapeRegex(c);
44
- }
45
- else {
46
- re += glob.slice(i, end + 1);
47
- i = end;
48
- }
49
- }
50
- else {
51
- re += escapeRegex(c);
52
- }
53
- }
54
- return new RegExp('^' + re + '$');
55
- }
56
- export function matchesAny(name, patterns) {
57
- for (const p of patterns) {
58
- const re = globToRegex(p);
59
- if (re.test(name))
60
- return true;
61
- }
62
- return false;
63
- }
64
- export const DEFAULT_EXCLUDES = [
65
- 'node_modules',
66
- '.git',
67
- 'dist',
68
- 'build',
69
- '.next',
70
- '__pycache__',
71
- '.cache',
72
- '.zelari', // v3-W workspace storage (never inspect)
73
- '.venv',
74
- 'coverage',
75
- '.nyc_output',
76
- ];
77
- /**
78
- * Walk a directory tree, collecting file/dir entries.
79
- * Mutates {@link entries} in place (avoids large array allocations on deep trees).
80
- *
81
- * Depth semantics: depth=0 means "do NOT descend into subdirectories" (root
82
- * entries only). depth=N means "descend at most N levels below root".
83
- *
84
- * The root directory itself is NOT added as an entry.
85
- */
86
- export async function walk(dir, baseRel, depth, maxDepth, exclude, entries, signal) {
87
- if (depth > maxDepth)
88
- return;
89
- if (signal?.aborted)
90
- return;
91
- let dirents;
92
- try {
93
- dirents = await fs.readdir(dir, { withFileTypes: true });
94
- }
95
- catch {
96
- return; // unreadable subdirectory — skip silently
97
- }
98
- if (signal?.aborted)
99
- return;
100
- for (const dirent of dirents) {
101
- if (matchesAny(dirent.name, exclude))
102
- continue;
103
- const rel = baseRel ? `${baseRel}/${dirent.name}` : dirent.name;
104
- const isDir = dirent.isDirectory();
105
- entries.push({
106
- name: rel,
107
- type: isDir ? 'directory' : dirent.isFile() ? 'file' : 'other',
108
- });
109
- if (isDir && depth < maxDepth) {
110
- await walk(path.join(dir, dirent.name), rel, depth + 1, maxDepth, exclude, entries, signal);
111
- }
112
- }
113
- }
114
- /**
115
- * Filter a flat list of FileEntry to those whose relative path matches at
116
- * least one of {@link include} globs (matched against forward-slash paths).
117
- */
118
- export function filterByInclude(entries, include) {
119
- if (include.length === 0 || (include.length === 1 && include[0] === '*')) {
120
- return entries.filter(e => e.type === 'file');
121
- }
122
- const regexes = include.map(globToRegex);
123
- return entries.filter(e => {
124
- if (e.type !== 'file')
125
- return false;
126
- return regexes.some(re => re.test(e.name));
127
- });
128
- }
129
- //# sourceMappingURL=_walk.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"_walk.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/_walk.ts"],"names":[],"mappings":"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"}