@vextlabs/theron-cli 0.2.1 → 0.4.0

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 (191) hide show
  1. package/dist/api.d.ts +8 -0
  2. package/dist/api.js +3 -0
  3. package/dist/api.js.map +1 -1
  4. package/dist/auth.js +51 -1
  5. package/dist/auth.js.map +1 -1
  6. package/dist/banner.js +3 -2
  7. package/dist/banner.js.map +1 -1
  8. package/dist/checkpoints.d.ts +32 -0
  9. package/dist/checkpoints.js +61 -0
  10. package/dist/checkpoints.js.map +1 -0
  11. package/dist/index.js +61 -5
  12. package/dist/index.js.map +1 -1
  13. package/dist/input.d.ts +61 -0
  14. package/dist/input.js +574 -0
  15. package/dist/input.js.map +1 -0
  16. package/dist/profiles/index.js +5 -0
  17. package/dist/profiles/index.js.map +1 -1
  18. package/dist/profiles/methodologies/build_domains.d.ts +6 -0
  19. package/dist/profiles/methodologies/build_domains.js +170 -0
  20. package/dist/profiles/methodologies/build_domains.js.map +1 -0
  21. package/dist/profiles/methodologies/operate_domains.d.ts +8 -0
  22. package/dist/profiles/methodologies/operate_domains.js +1239 -0
  23. package/dist/profiles/methodologies/operate_domains.js.map +1 -0
  24. package/dist/profiles/methodologies/regulated_domains.d.ts +6 -0
  25. package/dist/profiles/methodologies/regulated_domains.js +153 -0
  26. package/dist/profiles/methodologies/regulated_domains.js.map +1 -0
  27. package/dist/profiles/methodologies/research_domains.d.ts +8 -0
  28. package/dist/profiles/methodologies/research_domains.js +179 -0
  29. package/dist/profiles/methodologies/research_domains.js.map +1 -0
  30. package/dist/profiles/methodologies/strategy_domains.d.ts +15 -0
  31. package/dist/profiles/methodologies/strategy_domains.js +193 -0
  32. package/dist/profiles/methodologies/strategy_domains.js.map +1 -0
  33. package/dist/profiles/seeds.js +241 -95
  34. package/dist/profiles/seeds.js.map +1 -1
  35. package/dist/receipt.d.ts +17 -0
  36. package/dist/receipt.js +46 -0
  37. package/dist/receipt.js.map +1 -0
  38. package/dist/render.d.ts +4 -1
  39. package/dist/render.js +95 -28
  40. package/dist/render.js.map +1 -1
  41. package/dist/repl.d.ts +8 -1
  42. package/dist/repl.js +420 -62
  43. package/dist/repl.js.map +1 -1
  44. package/dist/sessions.d.ts +14 -0
  45. package/dist/sessions.js +100 -0
  46. package/dist/sessions.js.map +1 -1
  47. package/dist/ship.d.ts +2 -0
  48. package/dist/ship.js +62 -0
  49. package/dist/ship.js.map +1 -0
  50. package/dist/skills/catalog.d.ts +13 -0
  51. package/dist/skills/catalog.js +86 -0
  52. package/dist/skills/catalog.js.map +1 -0
  53. package/dist/tools/bash.js +81 -14
  54. package/dist/tools/bash.js.map +1 -1
  55. package/dist/tools/edit.js +21 -1
  56. package/dist/tools/edit.js.map +1 -1
  57. package/dist/tools/glob.js +4 -1
  58. package/dist/tools/glob.js.map +1 -1
  59. package/dist/tools/grep.d.ts +5 -0
  60. package/dist/tools/grep.js +101 -2
  61. package/dist/tools/grep.js.map +1 -1
  62. package/dist/tools/index.d.ts +22 -0
  63. package/dist/tools/index.js +177 -41
  64. package/dist/tools/index.js.map +1 -1
  65. package/dist/tools/ls.d.ts +3 -0
  66. package/dist/tools/ls.js +23 -12
  67. package/dist/tools/ls.js.map +1 -1
  68. package/dist/tools/multiedit.d.ts +12 -0
  69. package/dist/tools/multiedit.js +79 -0
  70. package/dist/tools/multiedit.js.map +1 -0
  71. package/dist/tools/stoa.d.ts +1 -1
  72. package/dist/tools/stoa.js +7 -3
  73. package/dist/tools/stoa.js.map +1 -1
  74. package/dist/tools/task.d.ts +9 -0
  75. package/dist/tools/task.js +166 -0
  76. package/dist/tools/task.js.map +1 -0
  77. package/dist/tools/todowrite.d.ts +12 -0
  78. package/dist/tools/todowrite.js +38 -0
  79. package/dist/tools/todowrite.js.map +1 -0
  80. package/dist/tools/webfetch.d.ts +6 -0
  81. package/dist/tools/webfetch.js +98 -0
  82. package/dist/tools/webfetch.js.map +1 -0
  83. package/dist/tools/websearch.d.ts +7 -0
  84. package/dist/tools/websearch.js +83 -0
  85. package/dist/tools/websearch.js.map +1 -0
  86. package/dist/tools/write.js +17 -1
  87. package/dist/tools/write.js.map +1 -1
  88. package/dist/verifiers/calc_gate.d.ts +2 -0
  89. package/dist/verifiers/calc_gate.js +112 -0
  90. package/dist/verifiers/calc_gate.js.map +1 -0
  91. package/dist/verifiers/citation_gate.d.ts +2 -0
  92. package/dist/verifiers/citation_gate.js +130 -0
  93. package/dist/verifiers/citation_gate.js.map +1 -0
  94. package/dist/verifiers/confidence_marked.d.ts +2 -0
  95. package/dist/verifiers/confidence_marked.js +49 -0
  96. package/dist/verifiers/confidence_marked.js.map +1 -0
  97. package/dist/verifiers/disclaimer_gate.d.ts +2 -0
  98. package/dist/verifiers/disclaimer_gate.js +57 -0
  99. package/dist/verifiers/disclaimer_gate.js.map +1 -0
  100. package/dist/verifiers/evidence_gate.d.ts +2 -0
  101. package/dist/verifiers/evidence_gate.js +108 -0
  102. package/dist/verifiers/evidence_gate.js.map +1 -0
  103. package/dist/verifiers/index.d.ts +5 -0
  104. package/dist/verifiers/index.js +28 -7
  105. package/dist/verifiers/index.js.map +1 -1
  106. package/dist/verifiers/lint.js +4 -3
  107. package/dist/verifiers/lint.js.map +1 -1
  108. package/dist/verifiers/promoted_kernels.d.ts +8 -0
  109. package/dist/verifiers/promoted_kernels.js +190 -0
  110. package/dist/verifiers/promoted_kernels.js.map +1 -0
  111. package/dist/verifiers/source_gate.d.ts +2 -0
  112. package/dist/verifiers/source_gate.js +125 -0
  113. package/dist/verifiers/source_gate.js.map +1 -0
  114. package/dist/verifiers/test_smoke.js +30 -0
  115. package/dist/verifiers/test_smoke.js.map +1 -1
  116. package/dist/verifiers/types.d.ts +3 -0
  117. package/package.json +4 -2
  118. package/skills/README.md +123 -0
  119. package/skills/ab-test.md +89 -0
  120. package/skills/api-design.md +175 -0
  121. package/skills/architecture-design.md +185 -0
  122. package/skills/business-case.md +77 -0
  123. package/skills/causal-inference.md +77 -0
  124. package/skills/clinical-guideline.md +98 -0
  125. package/skills/code-review.md +98 -0
  126. package/skills/cold-outreach.md +268 -0
  127. package/skills/competitive-teardown.md +223 -0
  128. package/skills/component-spec.md +121 -0
  129. package/skills/content-calendar.md +280 -0
  130. package/skills/contract-review.md +155 -0
  131. package/skills/data-analysis.md +187 -0
  132. package/skills/debug.md +91 -0
  133. package/skills/design-audit.md +121 -0
  134. package/skills/differential-diagnosis.md +79 -0
  135. package/skills/discovery-call.md +206 -0
  136. package/skills/edit-pass.md +80 -0
  137. package/skills/engineering-calc.md +101 -0
  138. package/skills/estimate.md +70 -0
  139. package/skills/experiment-design.md +105 -0
  140. package/skills/fact-check.md +82 -0
  141. package/skills/financial-model.md +104 -0
  142. package/skills/grant-proposal.md +93 -0
  143. package/skills/harmony-analysis.md +93 -0
  144. package/skills/hypothesis-generation.md +99 -0
  145. package/skills/incident-response.md +134 -0
  146. package/skills/interview-loop.md +62 -0
  147. package/skills/job-scorecard.md +92 -0
  148. package/skills/kb-article.md +174 -0
  149. package/skills/launch-plan.md +85 -0
  150. package/skills/lease-review.md +93 -0
  151. package/skills/lesson-plan.md +198 -0
  152. package/skills/literature-review.md +69 -0
  153. package/skills/market-entry.md +137 -0
  154. package/skills/market-sizing.md +159 -0
  155. package/skills/meta-analysis.md +140 -0
  156. package/skills/migrate.md +117 -0
  157. package/skills/optimize.md +88 -0
  158. package/skills/options-strategy.md +166 -0
  159. package/skills/peer-review.md +96 -0
  160. package/skills/pentest-plan.md +193 -0
  161. package/skills/pitch-review.md +132 -0
  162. package/skills/plan.md +88 -0
  163. package/skills/policy-brief.md +124 -0
  164. package/skills/positioning.md +192 -0
  165. package/skills/postmortem.md +168 -0
  166. package/skills/prd.md +105 -0
  167. package/skills/prioritize.md +162 -0
  168. package/skills/proof.md +91 -0
  169. package/skills/property-underwrite.md +159 -0
  170. package/skills/recipe-develop.md +109 -0
  171. package/skills/red-team.md +142 -0
  172. package/skills/refactor.md +58 -0
  173. package/skills/reflection-session.md +115 -0
  174. package/skills/regulatory-compliance.md +136 -0
  175. package/skills/reproduce.md +87 -0
  176. package/skills/runbook.md +344 -0
  177. package/skills/security-audit.md +154 -0
  178. package/skills/seo-brief.md +201 -0
  179. package/skills/sql-query.md +161 -0
  180. package/skills/story-craft.md +163 -0
  181. package/skills/tdd.md +59 -0
  182. package/skills/term-sheet.md +298 -0
  183. package/skills/theory-of-change.md +88 -0
  184. package/skills/threat-model.md +104 -0
  185. package/skills/ticket-triage.md +200 -0
  186. package/skills/tolerance-analysis.md +149 -0
  187. package/skills/training-program.md +151 -0
  188. package/skills/translate.md +64 -0
  189. package/skills/unit-economics.md +238 -0
  190. package/skills/valuation.md +112 -0
  191. package/skills/write-tests.md +77 -0
@@ -11,7 +11,18 @@ import { execBash } from "./bash.js";
11
11
  import { execGlob } from "./glob.js";
12
12
  import { execGrep } from "./grep.js";
13
13
  import { execLs } from "./ls.js";
14
+ import { execMultiEdit } from "./multiedit.js";
15
+ import { execWebFetch } from "./webfetch.js";
16
+ import { execWebSearch } from "./websearch.js";
17
+ import { execTask } from "./task.js";
18
+ import { execTodoWrite } from "./todowrite.js";
14
19
  import { execStoa, STOA_TOOL_DESCRIBE, STOA_TOOL_SCHEMA } from "./stoa.js";
20
+ import { buildLocalToolSchemas, MUTATING_LOCAL_TOOLS } from "@vextlabs/theron-agent-sdk";
21
+ let _loadedSkills = [];
22
+ /** Called by repl.ts after loadAllMarkdownSkills() resolves. */
23
+ export function setLoadedSkills(skills) {
24
+ _loadedSkills = skills;
25
+ }
15
26
  export const TOOL_REGISTRY = {
16
27
  Read: {
17
28
  name: "Read",
@@ -64,125 +75,250 @@ export const TOOL_REGISTRY = {
64
75
  execute: (args, ctx) => execStoa(args, ctx),
65
76
  describe: STOA_TOOL_DESCRIBE,
66
77
  },
78
+ MultiEdit: {
79
+ name: "MultiEdit",
80
+ confirmPolicy: "always",
81
+ execute: (args, ctx) => execMultiEdit(args, ctx),
82
+ describe: (args) => `MultiEdit ${args.file_path}`,
83
+ },
84
+ WebFetch: {
85
+ name: "WebFetch",
86
+ confirmPolicy: "never",
87
+ execute: (args, ctx) => execWebFetch(args, ctx),
88
+ describe: (args) => `Fetching ${args.url}`,
89
+ },
90
+ WebSearch: {
91
+ name: "WebSearch",
92
+ confirmPolicy: "never",
93
+ execute: (args, ctx) => execWebSearch(args, ctx),
94
+ describe: (args) => `Searching: ${args.query}`,
95
+ },
96
+ Task: {
97
+ name: "Task",
98
+ confirmPolicy: "always",
99
+ execute: (args, ctx) => execTask(args, ctx),
100
+ describe: (args) => `Task: ${args.description || args.prompt?.slice(0, 60)}`,
101
+ },
102
+ TodoWrite: {
103
+ name: "TodoWrite",
104
+ confirmPolicy: "never",
105
+ execute: (args, ctx) => execTodoWrite(args, ctx),
106
+ describe: () => `Updating todo list`,
107
+ },
108
+ ToolSearch: {
109
+ name: "ToolSearch",
110
+ confirmPolicy: "never",
111
+ execute: async (args, ctx) => {
112
+ const query = typeof args.query === "string" ? args.query.trim() : "";
113
+ if (!query)
114
+ return "[error] query is required.";
115
+ if (!ctx.apiUrl)
116
+ return "[error] apiUrl not configured.";
117
+ try {
118
+ const res = await fetch(`${ctx.apiUrl.replace(/\/$/, "")}/api/tools/search?q=${encodeURIComponent(query)}&surface=cli`, {
119
+ headers: ctx.apiKey ? { authorization: `Bearer ${ctx.apiKey}` } : {},
120
+ signal: AbortSignal.timeout(10_000),
121
+ });
122
+ if (!res.ok)
123
+ return `[error] /api/tools/search returned ${res.status}.`;
124
+ const data = (await res.json());
125
+ if (!data.tools || data.tools.length === 0) {
126
+ return `No tools found matching "${query}".`;
127
+ }
128
+ const lines = data.tools.map((t) => `- ${t.name}: ${t.description}`);
129
+ return `Found ${data.tools.length} tool(s) matching "${query}":\n${lines.join("\n")}\n\nCall the tool by name in your next turn.`;
130
+ }
131
+ catch (err) {
132
+ return `[error] ToolSearch failed: ${err instanceof Error ? err.message : String(err)}`;
133
+ }
134
+ },
135
+ describe: (args) => `Searching tools: ${args.query}`,
136
+ },
137
+ /** Skill — look up an installed CLI skill by name and return its body so the
138
+ * model can see the instruction pack and use it in-context. Skills are
139
+ * user-defined packs stored in ~/.theron/skills/ or .theron/skills/. */
140
+ Skill: {
141
+ name: "Skill",
142
+ confirmPolicy: "never",
143
+ execute: async (args) => {
144
+ const name = typeof args.name === "string" ? args.name.toLowerCase().trim() : "";
145
+ if (!name) {
146
+ if (_loadedSkills.length === 0)
147
+ return "No skills are currently loaded. Add SKILL.md files to ~/.theron/skills/ or .theron/skills/.";
148
+ const list = _loadedSkills.map((s) => `- ${s.name}: ${s.description}`).join("\n");
149
+ return `Loaded skills:\n${list}`;
150
+ }
151
+ const skill = _loadedSkills.find((s) => s.name === name);
152
+ if (!skill) {
153
+ const available = _loadedSkills.length > 0
154
+ ? _loadedSkills.map((s) => s.name).join(", ")
155
+ : "(none)";
156
+ return `[error] Skill '${name}' not found. Available: ${available}`;
157
+ }
158
+ const toolNote = skill.allowedTools && skill.allowedTools.length > 0
159
+ ? `\n\nPrefer these tools for this skill: ${skill.allowedTools.join(", ")}`
160
+ : "";
161
+ const extra = typeof args.args === "string" && args.args.trim() ? `\n\nArgs: ${args.args.trim()}` : "";
162
+ return `Skill: ${skill.name}\nSource: ${skill.source}\n\n${skill.body}${toolNote}${extra}`;
163
+ },
164
+ describe: (args) => `Skill: ${args.name ?? "(list)"}`,
165
+ },
67
166
  };
167
+ // The 7 shared local-tool schemas come from the canonical contract in
168
+ // @vextlabs/theron-agent-sdk (single source of truth, shared with theron-vscode).
169
+ // The CLI supplies its own surface-specific descriptions; Stoa is CLI-only.
68
170
  export const TOOL_SCHEMAS = [
171
+ ...buildLocalToolSchemas({
172
+ Read: "Read a file from the user's local working directory. Returns the file contents as text. Use offset/limit to page through large files (1-indexed lines). Errors if the path is outside the repo or doesn't exist.",
173
+ Write: "Write a file to the user's local working directory. Creates or overwrites. Asks the user for confirmation before each write unless --yes is passed.",
174
+ Edit: "Replace an exact substring in a file. old_string must appear EXACTLY ONCE (or set replace_all=true). The CLI shows a diff and asks for confirmation unless --yes.",
175
+ Bash: "Run a shell command in the user's working directory. Returns stdout + stderr + exit code. Asks for confirmation unless --yes. Has a default 120s timeout.",
176
+ Glob: "Find files by glob pattern. Returns paths sorted by mtime descending. Use to locate files when you don't know exact names.",
177
+ Grep: "Search file contents with a regex. Returns matching lines with file:line prefixes. Use for 'where is this defined' / 'who calls X' questions.",
178
+ LS: "List files and directories in a path (single level, not recursive).",
179
+ }),
180
+ STOA_TOOL_SCHEMA,
69
181
  {
70
182
  type: "function",
71
183
  function: {
72
- name: "Read",
73
- description: "Read a file from the user's local working directory. Returns the file contents as text. Use offset/limit to page through large files (1-indexed lines). Errors if the path is outside the repo or doesn't exist.",
184
+ name: "MultiEdit",
185
+ description: "Apply multiple exact-substring replacements to a single file in one atomic operation. All edits are validated before any write occurs a missing or ambiguous old_string fails the entire batch early. Use when you need to make several related edits to one file.",
74
186
  parameters: {
75
187
  type: "object",
76
188
  properties: {
77
- file_path: { type: "string", description: "Absolute or repo-relative path." },
78
- offset: { type: "number", description: "Optional 1-indexed line to start reading from." },
79
- limit: { type: "number", description: "Optional max lines to read." },
189
+ file_path: { type: "string", description: "Absolute or cwd-relative path to the file." },
190
+ edits: {
191
+ type: "array",
192
+ description: "Ordered list of edits. Applied in sequence; each edit sees the result of the previous ones.",
193
+ items: {
194
+ type: "object",
195
+ properties: {
196
+ old_string: { type: "string", description: "Exact substring to replace. Must be unique (or set replace_all=true)." },
197
+ new_string: { type: "string", description: "Replacement text." },
198
+ replace_all: { type: "boolean", description: "Replace all occurrences (default false)." },
199
+ },
200
+ required: ["old_string", "new_string"],
201
+ },
202
+ },
80
203
  },
81
- required: ["file_path"],
204
+ required: ["file_path", "edits"],
82
205
  },
83
206
  },
84
207
  },
85
208
  {
86
209
  type: "function",
87
210
  function: {
88
- name: "Write",
89
- description: "Write a file to the user's local working directory. Creates or overwrites. Asks the user for confirmation before each write unless --yes is passed.",
211
+ name: "WebFetch",
212
+ description: "Fetch a URL and return its text content (HTML stripped to prose). 15s timeout. Content is truncated to maxBytes. file://, localhost, and private IP ranges are rejected.",
90
213
  parameters: {
91
214
  type: "object",
92
215
  properties: {
93
- file_path: { type: "string" },
94
- content: { type: "string", description: "Full file contents — overwrites whatever was there." },
216
+ url: { type: "string", description: "The URL to fetch (http: or https: only)." },
95
217
  },
96
- required: ["file_path", "content"],
218
+ required: ["url"],
97
219
  },
98
220
  },
99
221
  },
100
222
  {
101
223
  type: "function",
102
224
  function: {
103
- name: "Edit",
104
- description: "Replace an exact substring in a file. old_string must appear EXACTLY ONCE (or set replace_all=true). The CLI shows a diff and asks for confirmation unless --yes.",
225
+ name: "WebSearch",
226
+ description: "Search the web via DuckDuckGo and return the top results as title + URL pairs. No API key required.",
105
227
  parameters: {
106
228
  type: "object",
107
229
  properties: {
108
- file_path: { type: "string" },
109
- old_string: { type: "string" },
110
- new_string: { type: "string" },
111
- replace_all: { type: "boolean", default: false },
230
+ query: { type: "string", description: "The search query." },
231
+ max_results: { type: "number", description: "Maximum results to return (default 10, max 20)." },
112
232
  },
113
- required: ["file_path", "old_string", "new_string"],
233
+ required: ["query"],
114
234
  },
115
235
  },
116
236
  },
117
237
  {
118
238
  type: "function",
119
239
  function: {
120
- name: "Bash",
121
- description: "Run a shell command in the user's working directory. Returns stdout + stderr + exit code. Asks for confirmation unless --yes. Has a default 120s timeout.",
240
+ name: "Task",
241
+ description: "Spawn a bounded read-only research subagent. The subagent can only use Read/Grep/Glob/LS no writes, no shell, no web. Times out after timeout_seconds (default 300). Use for parallel investigation or complex read-only research.",
122
242
  parameters: {
123
243
  type: "object",
124
244
  properties: {
125
- command: { type: "string" },
126
- timeout: { type: "number", description: "Timeout in ms (default 120000, max 600000)." },
127
- description: { type: "string", description: "Short label for what the command does, shown to the user." },
245
+ description: { type: "string", description: "Short label for the task (shown in terminal)." },
246
+ prompt: { type: "string", description: "The full prompt to send the subagent." },
247
+ timeout_seconds: { type: "number", description: "Aggregate wall-clock timeout (default 300)." },
128
248
  },
129
- required: ["command"],
249
+ required: ["description", "prompt"],
130
250
  },
131
251
  },
132
252
  },
133
253
  {
134
254
  type: "function",
135
255
  function: {
136
- name: "Glob",
137
- description: "Find files by glob pattern. Returns paths sorted by mtime descending. Use to locate files when you don't know exact names.",
256
+ name: "TodoWrite",
257
+ description: "Maintain a structured task list for the current session. Replaces the full list with the provided array. Each item has content (string), status (pending/in_progress/completed), and optional activeForm.",
138
258
  parameters: {
139
259
  type: "object",
140
260
  properties: {
141
- pattern: { type: "string", description: "Glob like 'src/**/*.ts'." },
142
- path: { type: "string", description: "Root to search from (default cwd)." },
261
+ todos: {
262
+ type: "array",
263
+ items: {
264
+ type: "object",
265
+ properties: {
266
+ content: { type: "string" },
267
+ status: { type: "string", enum: ["pending", "in_progress", "completed"] },
268
+ activeForm: { type: "string" },
269
+ },
270
+ required: ["content", "status"],
271
+ },
272
+ },
143
273
  },
144
- required: ["pattern"],
274
+ required: ["todos"],
145
275
  },
146
276
  },
147
277
  },
148
278
  {
149
279
  type: "function",
150
280
  function: {
151
- name: "Grep",
152
- description: "Search file contents with a regex. Returns matching lines with file:line prefixes. Use for 'where is this defined' / 'who calls X' questions.",
281
+ name: "ToolSearch",
282
+ description: "Search for available tools by keyword. Returns matching tool names and descriptions. Use this when you need a tool that isn't in the base set (Read, Write, Edit, Bash, Glob, Grep, LS, Stoa). The returned tools can be called by name in the next turn.",
153
283
  parameters: {
154
284
  type: "object",
155
285
  properties: {
156
- pattern: { type: "string", description: "Regex pattern." },
157
- path: { type: "string", description: "Optional file or directory to limit the search." },
158
- glob: { type: "string", description: "Optional glob filter, e.g. '*.ts'." },
159
- case_insensitive: { type: "boolean", default: false },
286
+ query: {
287
+ type: "string",
288
+ description: "Search query a keyword or phrase describing what you want to do (e.g. 'send email', 'create calendar event', 'search trademark').",
289
+ },
160
290
  },
161
- required: ["pattern"],
291
+ required: ["query"],
162
292
  },
163
293
  },
164
294
  },
165
295
  {
166
296
  type: "function",
167
297
  function: {
168
- name: "LS",
169
- description: "List files and directories in a path (single level, not recursive).",
298
+ name: "Skill",
299
+ description: "Look up an installed CLI skill by name and return its instruction body. Skills are user-defined instruction packs stored in ~/.theron/skills/ or .theron/skills/. Omit 'name' to list all loaded skills.",
170
300
  parameters: {
171
301
  type: "object",
172
302
  properties: {
173
- path: { type: "string", description: "Default cwd." },
303
+ name: {
304
+ type: "string",
305
+ description: "Skill slug (e.g. 'deep-research'). Omit to list all.",
306
+ },
307
+ args: {
308
+ type: "string",
309
+ description: "Optional arguments appended to the skill body.",
310
+ },
174
311
  },
175
312
  },
176
313
  },
177
314
  },
178
- STOA_TOOL_SCHEMA,
179
315
  ];
180
316
  /** Tool names that can MUTATE the user's machine or hit a real SaaS.
181
317
  * Plan mode hard-denies these at the executor (see repl.ts) so no write
182
318
  * can run even with --yes. Stoa is included because its caps cause real
183
319
  * side effects; Bash because a shell can write/delete. */
184
320
  export const MUTATING_TOOLS = new Set([
185
- "Write", "Edit", "Bash", "Stoa",
321
+ ...MUTATING_LOCAL_TOOLS, "Stoa", "MultiEdit", "Task",
186
322
  ]);
187
323
  /** The read-only subset of TOOL_SCHEMAS sent to the model in plan mode.
188
324
  * Filtering the schema makes the model LESS likely to even attempt a
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,9 @@
1
1
  import type { ToolContext } from "./index.js";
2
2
  interface LsArgs {
3
3
  path?: string;
4
+ show_hidden?: boolean;
5
+ recursive?: boolean;
6
+ depth?: number;
4
7
  }
5
8
  export declare function execLs(args: LsArgs, ctx: ToolContext): Promise<string>;
6
9
  export {};
package/dist/tools/ls.js CHANGED
@@ -1,23 +1,34 @@
1
- // LS tool — single-level directory listing.
1
+ // LS tool — directory listing with optional dotfile and recursive support.
2
2
  import { promises as fs } from "node:fs";
3
3
  import path from "node:path";
4
4
  export async function execLs(args, ctx) {
5
5
  const target = args.path
6
6
  ? (path.isAbsolute(args.path) ? args.path : path.resolve(ctx.cwd, args.path))
7
7
  : ctx.cwd;
8
- let entries;
9
- try {
10
- entries = await fs.readdir(target, { withFileTypes: true });
11
- }
12
- catch (err) {
13
- return `[error] Cannot list ${target}: ${err instanceof Error ? err.message : String(err)}`;
14
- }
8
+ const showHidden = args.show_hidden === true;
9
+ const recursive = args.recursive === true;
10
+ const maxDepth = (args.depth != null && args.depth >= 0) ? args.depth : (recursive ? 3 : 1);
15
11
  const lines = [];
16
- for (const e of entries) {
17
- if (e.name.startsWith("."))
18
- continue;
19
- lines.push(`${e.isDirectory() ? "d" : "-"} ${e.name}${e.isDirectory() ? "/" : ""}`);
12
+ async function walk(dir, depth, prefix) {
13
+ let entries;
14
+ try {
15
+ entries = await fs.readdir(dir, { withFileTypes: true });
16
+ }
17
+ catch (err) {
18
+ lines.push(`${prefix}[error] Cannot list ${dir}: ${err instanceof Error ? err.message : String(err)}`);
19
+ return;
20
+ }
21
+ for (const e of entries) {
22
+ if (!showHidden && e.name.startsWith("."))
23
+ continue;
24
+ const isDir = e.isDirectory();
25
+ lines.push(`${prefix}${isDir ? "d" : "-"} ${e.name}${isDir ? "/" : ""}`);
26
+ if (isDir && recursive && depth < maxDepth) {
27
+ await walk(path.join(dir, e.name), depth + 1, prefix + " ");
28
+ }
29
+ }
20
30
  }
31
+ await walk(target, 1, "");
21
32
  if (lines.length === 0)
22
33
  return `${target} is empty.`;
23
34
  return `${target}\n${lines.join("\n")}`;
@@ -1 +1 @@
1
- {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/tools/ls.ts"],"names":[],"mappings":"AAAA,4CAA4C;AAE5C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAO7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,GAAgB;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI;QACtB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACZ,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9D,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,uBAAuB,MAAM,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9F,CAAC;IACD,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACrC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACtF,CAAC;IACD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,MAAM,YAAY,CAAC;IACrD,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC"}
1
+ {"version":3,"file":"ls.js","sourceRoot":"","sources":["../../src/tools/ls.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAE3E,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,IAAI,MAAM,WAAW,CAAC;AAU7B,MAAM,CAAC,KAAK,UAAU,MAAM,CAAC,IAAY,EAAE,GAAgB;IACzD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI;QACtB,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7E,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC;IACZ,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,KAAK,IAAI,CAAC;IAC7C,MAAM,SAAS,GAAG,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;IAC1C,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,IAAI,IAAI,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE5F,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,UAAU,IAAI,CAAC,GAAW,EAAE,KAAa,EAAE,MAAc;QAC5D,IAAI,OAAO,CAAC;QACZ,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAC3D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,uBAAuB,GAAG,KAAK,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QACD,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YACpD,MAAM,KAAK,GAAG,CAAC,CAAC,WAAW,EAAE,CAAC;YAC9B,KAAK,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzE,IAAI,KAAK,IAAI,SAAS,IAAI,KAAK,GAAG,QAAQ,EAAE,CAAC;gBAC3C,MAAM,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC,CAAC;YAC/D,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC;IAC1B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,GAAG,MAAM,YAAY,CAAC;IACrD,OAAO,GAAG,MAAM,KAAK,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;AAC1C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { ToolContext } from "./index.js";
2
+ interface SingleEdit {
3
+ old_string: string;
4
+ new_string: string;
5
+ replace_all?: boolean;
6
+ }
7
+ interface MultiEditArgs {
8
+ file_path: string;
9
+ edits: SingleEdit[];
10
+ }
11
+ export declare function execMultiEdit(args: MultiEditArgs, ctx: ToolContext): Promise<string>;
12
+ export {};
@@ -0,0 +1,79 @@
1
+ // MultiEdit tool — applies a sequence of exact-substring replacements to a
2
+ // single file in one operation, reading once and writing once. Mirrors the
3
+ // semantics of edit.ts but batches multiple edits. Fails early on the first
4
+ // missing/ambiguous old_string so no partial writes occur.
5
+ import { promises as fs } from "node:fs";
6
+ import path from "node:path";
7
+ import { sha256Hex, receiptLocalAction } from "../receipt.js";
8
+ import { pushCheckpoint } from "../checkpoints.js";
9
+ function countOccurrences(haystack, needle) {
10
+ if (!needle)
11
+ return 0;
12
+ let count = 0;
13
+ let from = 0;
14
+ while (true) {
15
+ const idx = haystack.indexOf(needle, from);
16
+ if (idx < 0)
17
+ return count;
18
+ count += 1;
19
+ from = idx + needle.length;
20
+ }
21
+ }
22
+ export async function execMultiEdit(args, ctx) {
23
+ if (!Array.isArray(args.edits) || args.edits.length === 0) {
24
+ return "[error] edits must be a non-empty array.";
25
+ }
26
+ const target = path.isAbsolute(args.file_path)
27
+ ? args.file_path
28
+ : path.resolve(ctx.cwd, args.file_path);
29
+ let original;
30
+ try {
31
+ original = await fs.readFile(target, "utf-8");
32
+ }
33
+ catch (err) {
34
+ return `[error] Cannot read ${target}: ${err instanceof Error ? err.message : String(err)}`;
35
+ }
36
+ // Snapshot pre-edit content for /rewind.
37
+ try {
38
+ pushCheckpoint(target, original);
39
+ }
40
+ catch { /* never throws */ }
41
+ // Validate ALL edits before touching the file (fail-early).
42
+ let text = original;
43
+ for (let i = 0; i < args.edits.length; i++) {
44
+ const ed = args.edits[i];
45
+ if (ed.old_string === ed.new_string) {
46
+ return `[error] Edit ${i + 1}: old_string === new_string — nothing to change.`;
47
+ }
48
+ const count = countOccurrences(text, ed.old_string);
49
+ if (count === 0) {
50
+ return `[error] Edit ${i + 1}: old_string not found in ${target}.`;
51
+ }
52
+ if (count > 1 && !ed.replace_all) {
53
+ return `[error] Edit ${i + 1}: old_string appears ${count} times. Make it unique or set replace_all=true.`;
54
+ }
55
+ // Apply edit in sequence so subsequent edits see earlier changes.
56
+ if (ed.replace_all) {
57
+ text = text.split(ed.old_string).join(ed.new_string);
58
+ }
59
+ else {
60
+ const idx = text.indexOf(ed.old_string);
61
+ text = text.slice(0, idx) + ed.new_string + text.slice(idx + ed.old_string.length);
62
+ }
63
+ }
64
+ // Write once.
65
+ const preSha256 = sha256Hex(original);
66
+ await fs.writeFile(target, text, "utf-8");
67
+ const postSha256 = sha256Hex(text);
68
+ const totalReplacements = args.edits.length;
69
+ const baseResult = `MultiEdit applied ${totalReplacements} edit${totalReplacements === 1 ? "" : "s"} to ${target}.`;
70
+ // Mint a STOA receipt for this multi-edit.
71
+ const verifyUrl = await receiptLocalAction(ctx.apiUrl, ctx.apiKey, "local_multiedit", {
72
+ path: target,
73
+ edit_count: totalReplacements,
74
+ pre_sha256: preSha256,
75
+ post_sha256: postSha256,
76
+ }).catch(() => null);
77
+ return verifyUrl ? baseResult + "\nsigned -- verify: " + verifyUrl : baseResult;
78
+ }
79
+ //# sourceMappingURL=multiedit.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"multiedit.js","sourceRoot":"","sources":["../../src/tools/multiedit.ts"],"names":[],"mappings":"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"}
@@ -7,7 +7,7 @@ interface StoaArgs {
7
7
  * spec in the Stoa registry. */
8
8
  input: Record<string, unknown>;
9
9
  }
10
- export declare function execStoa(args: StoaArgs, _ctx: ToolContext): Promise<string>;
10
+ export declare function execStoa(args: StoaArgs, ctx: ToolContext): Promise<string>;
11
11
  export declare const STOA_TOOL_DESCRIBE: (args: Record<string, unknown>) => string;
12
12
  /** OpenAI-compatible function tool def for the Stoa cap proxy. */
13
13
  export declare const STOA_TOOL_SCHEMA: {
@@ -15,24 +15,28 @@
15
15
  // (the CLI displays whatever signature the server provides), so a
16
16
  // caller has an auditable record of "Theron did this, here's the proof."
17
17
  const DEFAULT_BASE = process.env.THERON_STOA_BASE ?? "https://theron.tryvext.com";
18
- export async function execStoa(args, _ctx) {
18
+ export async function execStoa(args, ctx) {
19
19
  if (typeof args.cap !== "string" || !args.cap.startsWith("urn:stoa:cap:")) {
20
20
  throw new Error(`invalid cap URN: ${args.cap}`);
21
21
  }
22
22
  if (typeof args.input !== "object" || args.input === null) {
23
23
  throw new Error("input must be an object");
24
24
  }
25
- const url = `${DEFAULT_BASE}/v1/cap`;
25
+ const base = ctx.apiUrl || DEFAULT_BASE;
26
+ const url = `${base.replace(/\/$/, "")}/v1/cap`;
26
27
  const envelope = {
27
28
  stoa: "1",
28
29
  cap: args.cap,
29
30
  input: args.input,
30
31
  };
32
+ const headers = { "content-type": "application/json" };
33
+ if (ctx.apiKey)
34
+ headers["authorization"] = `Bearer ${ctx.apiKey}`;
31
35
  let response;
32
36
  try {
33
37
  response = await fetch(url, {
34
38
  method: "POST",
35
- headers: { "content-type": "application/json" },
39
+ headers,
36
40
  body: JSON.stringify(envelope),
37
41
  });
38
42
  }
@@ -1 +1 @@
1
- {"version":3,"file":"stoa.js","sourceRoot":"","sources":["../../src/tools/stoa.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"stoa.js","sourceRoot":"","sources":["../../src/tools/stoa.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { ToolContext } from "./index.js";
2
+ interface TaskArgs {
3
+ description: string;
4
+ prompt: string;
5
+ /** Aggregate timeout in seconds across all turns (default 300). */
6
+ timeout_seconds?: number;
7
+ }
8
+ export declare function execTask(args: TaskArgs, ctx: ToolContext): Promise<string>;
9
+ export {};