zelari-code 0.2.2 → 0.6.2

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 (126) hide show
  1. package/README.md +97 -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 +94 -1861
  25. package/dist/cli/app.js.map +1 -1
  26. package/dist/cli/compaction.js.map +1 -1
  27. package/dist/cli/components/ChatStream.js +81 -14
  28. package/dist/cli/components/ChatStream.js.map +1 -1
  29. package/dist/cli/components/CollapsibleToolOutput.js +26 -3
  30. package/dist/cli/components/CollapsibleToolOutput.js.map +1 -1
  31. package/dist/cli/components/Header.js +20 -1
  32. package/dist/cli/components/Header.js.map +1 -1
  33. package/dist/cli/components/InputBar.js +34 -2
  34. package/dist/cli/components/InputBar.js.map +1 -1
  35. package/dist/cli/components/Sidebar.js +30 -10
  36. package/dist/cli/components/Sidebar.js.map +1 -1
  37. package/dist/cli/councilDispatcher.js +10 -2
  38. package/dist/cli/councilDispatcher.js.map +1 -1
  39. package/dist/cli/headless.js +137 -0
  40. package/dist/cli/headless.js.map +1 -0
  41. package/dist/cli/hooks/chatStats.js +28 -0
  42. package/dist/cli/hooks/chatStats.js.map +1 -0
  43. package/dist/cli/hooks/eventsToMessages.js +111 -0
  44. package/dist/cli/hooks/eventsToMessages.js.map +1 -0
  45. package/dist/cli/hooks/messageHelpers.js +125 -0
  46. package/dist/cli/hooks/messageHelpers.js.map +1 -0
  47. package/dist/cli/hooks/skillCompare.js +69 -0
  48. package/dist/cli/hooks/skillCompare.js.map +1 -0
  49. package/dist/cli/hooks/steer.js +28 -0
  50. package/dist/cli/hooks/steer.js.map +1 -0
  51. package/dist/cli/hooks/useBatchedMessages.js +67 -0
  52. package/dist/cli/hooks/useBatchedMessages.js.map +1 -0
  53. package/dist/cli/hooks/useChatTurn.js +363 -0
  54. package/dist/cli/hooks/useChatTurn.js.map +1 -0
  55. package/dist/cli/hooks/useSession.js +116 -0
  56. package/dist/cli/hooks/useSession.js.map +1 -0
  57. package/dist/cli/hooks/useSlashDispatch.js +303 -0
  58. package/dist/cli/hooks/useSlashDispatch.js.map +1 -0
  59. package/dist/cli/hooks/useTerminalSize.js +60 -0
  60. package/dist/cli/hooks/useTerminalSize.js.map +1 -0
  61. package/dist/cli/main.bundled.js +25212 -21722
  62. package/dist/cli/main.bundled.js.map +4 -4
  63. package/dist/cli/main.js +86 -2
  64. package/dist/cli/main.js.map +1 -1
  65. package/dist/cli/provider/openai-compatible.js +9 -2
  66. package/dist/cli/provider/openai-compatible.js.map +1 -1
  67. package/dist/cli/runHeadless.js +160 -0
  68. package/dist/cli/runHeadless.js.map +1 -0
  69. package/dist/cli/sessionManager.js +47 -1
  70. package/dist/cli/sessionManager.js.map +1 -1
  71. package/dist/cli/skillSuggest.js +1 -1
  72. package/dist/cli/slashCommands.js +72 -3
  73. package/dist/cli/slashCommands.js.map +1 -1
  74. package/dist/cli/slashHandlers/branch.js +57 -0
  75. package/dist/cli/slashHandlers/branch.js.map +1 -0
  76. package/dist/cli/slashHandlers/git.js +40 -0
  77. package/dist/cli/slashHandlers/git.js.map +1 -0
  78. package/dist/cli/slashHandlers/promoteMember.js +25 -0
  79. package/dist/cli/slashHandlers/promoteMember.js.map +1 -0
  80. package/dist/cli/slashHandlers/provider.js +199 -0
  81. package/dist/cli/slashHandlers/provider.js.map +1 -0
  82. package/dist/cli/slashHandlers/skills.js +82 -0
  83. package/dist/cli/slashHandlers/skills.js.map +1 -0
  84. package/dist/cli/slashHandlers/transcript.js +13 -0
  85. package/dist/cli/slashHandlers/transcript.js.map +1 -0
  86. package/dist/cli/slashHandlers/updater.js +40 -0
  87. package/dist/cli/slashHandlers/updater.js.map +1 -0
  88. package/dist/cli/slashHandlers/workspace.js +118 -0
  89. package/dist/cli/slashHandlers/workspace.js.map +1 -0
  90. package/dist/cli/toolRegistry.js +17 -8
  91. package/dist/cli/toolRegistry.js.map +1 -1
  92. package/dist/cli/utils/duration.js +34 -0
  93. package/dist/cli/utils/duration.js.map +1 -0
  94. package/dist/cli/wizard/firstRun.js +63 -0
  95. package/dist/cli/wizard/firstRun.js.map +1 -0
  96. package/dist/cli/wizard/index.js +150 -0
  97. package/dist/cli/wizard/index.js.map +1 -0
  98. package/dist/cli/wizard/runWizard.js +137 -0
  99. package/dist/cli/wizard/runWizard.js.map +1 -0
  100. package/dist/cli/wizard/useWizardState.js +151 -0
  101. package/dist/cli/wizard/useWizardState.js.map +1 -0
  102. package/dist/cli/workspace/agentsMd.js +314 -0
  103. package/dist/cli/workspace/agentsMd.js.map +1 -0
  104. package/dist/cli/workspace/index.js +24 -0
  105. package/dist/cli/workspace/index.js.map +1 -0
  106. package/dist/cli/workspace/paths.js +88 -0
  107. package/dist/cli/workspace/paths.js.map +1 -0
  108. package/dist/cli/workspace/postCouncilHook.js +38 -0
  109. package/dist/cli/workspace/postCouncilHook.js.map +1 -0
  110. package/dist/cli/workspace/storage.js +392 -0
  111. package/dist/cli/workspace/storage.js.map +1 -0
  112. package/dist/cli/workspace/stubs.js +528 -0
  113. package/dist/cli/workspace/stubs.js.map +1 -0
  114. package/dist/cli/workspace/toolRegistry.js +61 -0
  115. package/dist/cli/workspace/toolRegistry.js.map +1 -0
  116. package/dist/cli/workspace/types.js +10 -0
  117. package/dist/cli/workspace/types.js.map +1 -0
  118. package/dist/main/core/tools/builtin/_walk.js +129 -0
  119. package/dist/main/core/tools/builtin/_walk.js.map +1 -0
  120. package/dist/main/core/tools/builtin/diff.js +477 -0
  121. package/dist/main/core/tools/builtin/diff.js.map +1 -0
  122. package/dist/main/core/tools/builtin/listFiles.js +5 -43
  123. package/dist/main/core/tools/builtin/listFiles.js.map +1 -1
  124. package/dist/main/core/tools/builtin/search.js +120 -28
  125. package/dist/main/core/tools/builtin/search.js.map +1 -1
  126. package/package.json +10 -2
@@ -1,55 +1,15 @@
1
1
  import { z } from 'zod';
2
- import { promises as fs } from 'node:fs';
3
2
  import path from 'node:path';
4
3
  import { typedOk, typedErr } from '../toolTypes.js';
4
+ import { walk, DEFAULT_EXCLUDES, } from './_walk.js';
5
5
  const ListFilesArgsSchema = z.object({
6
6
  /** Directory to list (relative to cwd or absolute). Defaults to cwd. */
7
7
  path: z.string().optional(),
8
8
  /** Max traversal depth. 1 = immediate children only (default). */
9
9
  maxDepth: z.number().int().positive().max(10).default(1),
10
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
- ]),
11
+ exclude: z.array(z.string()).default(DEFAULT_EXCLUDES),
14
12
  });
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
13
  export const listFilesTool = {
54
14
  name: 'list_files',
55
15
  description: 'List files and directories in the given path (defaults to the working directory). ' +
@@ -65,7 +25,9 @@ export const listFilesTool = {
65
25
  ? (path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path))
66
26
  : ctx.cwd;
67
27
  const entries = [];
68
- await walk(target, '', 1, args.maxDepth, args.exclude, entries, ctx.signal);
28
+ // API: maxDepth=1 means "root only". Internally: depth=0 at root,
29
+ // so we subtract 1 from the user-facing maxDepth.
30
+ await walk(target, '', 0, args.maxDepth - 1, args.exclude, entries, ctx.signal);
69
31
  // Sort: directories first, then files, alphabetically.
70
32
  entries.sort((a, b) => {
71
33
  if (a.type === 'directory' && b.type !== 'directory')
@@ -1 +1 @@
1
- {"version":3,"file":"listFiles.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/listFiles.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"listFiles.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/listFiles.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAuB,MAAM,iBAAiB,CAAC;AACzE,OAAO,EACL,IAAI,EACJ,gBAAgB,GAEjB,MAAM,YAAY,CAAC;AAEpB,MAAM,mBAAmB,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,wEAAwE;IACxE,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAC3B,kEAAkE;IAClE,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACxD,wEAAwE;IACxE,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,OAAO,CAAC,gBAAgB,CAAC;CACvD,CAAC,CAAC;AAWH,MAAM,CAAC,MAAM,aAAa,GAAmD;IAC3E,IAAI,EAAE,YAAY;IAClB,WAAW,EACT,oFAAoF;QACpF,wFAAwF;QACxF,wFAAwF;QACxF,iDAAiD;IACnD,WAAW,EAAE,CAAC,MAAM,CAAC;IACrB,SAAS,EAAE,KAAK;IAChB,WAAW,EAAE,mBAAmB;IAChC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI;gBACtB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC1E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;YACZ,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,kEAAkE;YAClE,kDAAkD;YAClD,MAAM,IAAI,CAAC,MAAM,EAAE,EAAE,EAAE,CAAC,EAAE,IAAI,CAAC,QAAQ,GAAG,CAAC,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;YAChF,uDAAuD;YACvD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;gBACpB,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO,CAAC,CAAC,CAAC;gBAChE,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,IAAI,KAAK,WAAW;oBAAE,OAAO,CAAC,CAAC;gBAC/D,OAAO,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YACtC,CAAC,CAAC,CAAC;YACH,MAAM,WAAW,GAAG,GAAG,CAAC;YACxB,MAAM,SAAS,GAAG,OAAO,CAAC,MAAM,GAAG,WAAW,CAAC;YAC/C,OAAO,OAAO,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAC3G,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,QAAQ,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;CACF,CAAC"}
@@ -2,51 +2,143 @@ import { z } from 'zod';
2
2
  import { promises as fs } from 'node:fs';
3
3
  import path from 'node:path';
4
4
  import { typedOk, typedErr } from '../toolTypes.js';
5
+ import { walk, filterByInclude, DEFAULT_EXCLUDES, } from './_walk.js';
6
+ /**
7
+ * grep_content — Regex search across one file OR a directory tree.
8
+ *
9
+ * Two modes:
10
+ * 1. Single-file: `path` is a regular file → search it.
11
+ * 2. Recursive: `path` is a directory → walk it (respecting `include` /
12
+ * `exclude` globs and `maxDepth`) and search each matched file.
13
+ *
14
+ * Backward-compatible: existing callers passing a single-file `path`
15
+ * keep the v0.3.x behavior unchanged.
16
+ *
17
+ * Glob syntax: `*`, `?`, `[abc]`, `**` (recursive). See _walk.ts.
18
+ */
5
19
  const GrepContentArgsSchema = z.object({
20
+ /** File OR directory to search (relative to cwd or absolute). */
6
21
  path: z.string().min(1),
22
+ /** Regex pattern (no flags — gm is hardcoded). */
7
23
  pattern: z.string().min(1),
24
+ /** Context lines before/after each match. */
8
25
  contextLines: z.number().int().nonnegative().default(2),
26
+ /** Max matches returned (total matches still counted). */
9
27
  maxMatches: z.number().int().positive().max(1000).default(50),
28
+ /**
29
+ * Glob patterns to INCLUDE when path is a directory (e.g. ['*.ts', '*.tsx']).
30
+ * Default ['*'] = all files. Ignored when path is a file.
31
+ */
32
+ include: z.array(z.string()).default(['*']),
33
+ /**
34
+ * Glob patterns to EXCLUDE when path is a directory (e.g. ['*.test.ts']).
35
+ * Defaults to common noise dirs. Ignored when path is a file.
36
+ */
37
+ exclude: z.array(z.string()).default(DEFAULT_EXCLUDES),
38
+ /** Max recursion depth when path is a directory (default 8). */
39
+ maxDepth: z.number().int().positive().max(15).default(8),
10
40
  });
41
+ export { GrepContentArgsSchema };
42
+ async function searchFile(absPath, relPath, regex, contextLines, remainingSlots) {
43
+ let buf;
44
+ try {
45
+ buf = await fs.readFile(absPath, 'utf-8');
46
+ }
47
+ catch {
48
+ return { matches: [], total: 0, truncated: false }; // unreadable file → skip
49
+ }
50
+ const lines = buf.split('\n');
51
+ const matches = [];
52
+ let total = 0;
53
+ let truncated = false;
54
+ for (let i = 0; i < lines.length; i++) {
55
+ regex.lastIndex = 0;
56
+ if (regex.test(lines[i])) {
57
+ total++;
58
+ if (matches.length < remainingSlots) {
59
+ const startBefore = Math.max(0, i - contextLines);
60
+ const endAfter = Math.min(lines.length - 1, i + contextLines);
61
+ matches.push({
62
+ file: absPath,
63
+ relPath,
64
+ line: i + 1,
65
+ text: lines[i],
66
+ context: {
67
+ before: lines.slice(startBefore, i),
68
+ after: lines.slice(i + 1, endAfter + 1),
69
+ },
70
+ });
71
+ }
72
+ else {
73
+ truncated = true;
74
+ }
75
+ }
76
+ }
77
+ return { matches, total, truncated };
78
+ }
79
+ async function isDirectory(p) {
80
+ try {
81
+ const stat = await fs.stat(p);
82
+ return stat.isDirectory();
83
+ }
84
+ catch {
85
+ return false;
86
+ }
87
+ }
11
88
  export const grepContentTool = {
12
89
  name: 'grep_content',
13
- description: 'Regex search for content in a file. Returns matches with line numbers and context.',
90
+ description: 'Regex search for content in a file OR recursively in a directory. ' +
91
+ 'When path is a directory, include/exclude globs filter which files are searched ' +
92
+ '(default: all files, excluding node_modules/dist/.git/etc.). Returns matches with ' +
93
+ 'line numbers and surrounding context. Single-file mode preserves v0.3.x behavior.',
14
94
  permissions: ['read'],
15
- timeoutMs: 10000,
95
+ timeoutMs: 30000,
16
96
  inputSchema: GrepContentArgsSchema,
17
97
  execute: async (args, ctx) => {
18
98
  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');
99
+ const absRoot = path.isAbsolute(args.path) ? args.path : path.join(ctx.cwd, args.path);
23
100
  const regex = new RegExp(args.pattern, 'gm');
24
- const matches = [];
101
+ // ── Single-file mode ────────────────────────────────────────
102
+ if (!(await isDirectory(absRoot))) {
103
+ const single = await searchFile(absRoot, args.path, regex, args.contextLines, args.maxMatches);
104
+ return typedOk({
105
+ matches: single.matches,
106
+ totalMatches: single.total,
107
+ truncated: single.truncated,
108
+ filesSearched: 1,
109
+ filesInTree: 1,
110
+ });
111
+ }
112
+ // ── Recursive (directory) mode ──────────────────────────────
113
+ const allEntries = [];
114
+ await walk(absRoot, '', 0, args.maxDepth, args.exclude, allEntries, ctx.signal);
115
+ const matchedFiles = filterByInclude(allEntries, args.include);
116
+ const allMatches = [];
25
117
  let totalMatches = 0;
26
118
  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
- }
119
+ let filesSearched = 0;
120
+ for (const entry of matchedFiles) {
121
+ if (ctx.signal?.aborted)
122
+ break;
123
+ if (allMatches.length >= args.maxMatches) {
124
+ truncated = true;
125
+ break;
47
126
  }
127
+ const absFile = path.join(absRoot, entry.name);
128
+ const result = await searchFile(absFile, entry.name, regex, args.contextLines, args.maxMatches - allMatches.length);
129
+ filesSearched++;
130
+ totalMatches += result.total;
131
+ if (result.truncated)
132
+ truncated = true;
133
+ allMatches.push(...result.matches);
48
134
  }
49
- return typedOk({ matches, totalMatches, truncated });
135
+ return typedOk({
136
+ matches: allMatches,
137
+ totalMatches,
138
+ truncated,
139
+ filesSearched,
140
+ filesInTree: matchedFiles.length,
141
+ });
50
142
  }
51
143
  catch (err) {
52
144
  return typedErr(err instanceof Error ? err.message : String(err));
@@ -1 +1 @@
1
- {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/search.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../../../../src/main/core/tools/builtin/search.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,10 +1,13 @@
1
1
  {
2
2
  "name": "zelari-code",
3
- "version": "0.2.2",
4
- "description": "Zelari Code — AI Council coding agent CLI. Multi-agent orchestration (Sisyphus, Prometheus, Hephaestus, Atlas, Oracle, Chairman) with slash commands, provider-agnostic LLM streaming, and self-update.",
3
+ "version": "0.6.2",
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
5
  "author": "N-THEM Studio",
6
6
  "license": "SEE LICENSE IN LICENSE",
7
7
  "type": "module",
8
+ "workspaces": [
9
+ "packages/*"
10
+ ],
8
11
  "main": "dist/cli/main.js",
9
12
  "bin": {
10
13
  "zelari-code": "./bin/zelari-code.js"
@@ -24,21 +27,26 @@
24
27
  "build": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
25
28
  "build:cli": "tsc -p tsconfig.json && node scripts/bundle-cli.mjs",
26
29
  "typecheck": "tsc --noEmit -p tsconfig.json",
30
+ "pretest": "npm run build --workspace=@zelari/core",
27
31
  "test": "vitest run",
28
32
  "test:watch": "vitest",
29
33
  "smoke": "node bin/zelari-code.js --version",
30
34
  "prepublishOnly": "node scripts/prepublish.mjs"
31
35
  },
32
36
  "dependencies": {
37
+ "@zelari/core": "0.6.2",
33
38
  "ink": "^6.8.0",
34
39
  "ink-text-input": "^6.0.0",
35
40
  "react": "^19.2.7",
36
41
  "zod": "^4.4.3"
37
42
  },
38
43
  "devDependencies": {
44
+ "@testing-library/react": "^16.3.2",
39
45
  "@types/node": "^25.3.0",
40
46
  "@types/react": "^19.0.10",
41
47
  "esbuild": "^0.24.0",
48
+ "jsdom": "^29.1.1",
49
+ "react-dom": "^19.2.7",
42
50
  "typescript": "~5.7.2",
43
51
  "vitest": "^2.1.9"
44
52
  },