@a5c-ai/tula 5.0.1-staging.3edc9d7b8d6f

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 (56) hide show
  1. package/README.md +34 -0
  2. package/dist/cli/amuxEventsFormatter.d.ts +26 -0
  3. package/dist/cli/amuxEventsFormatter.d.ts.map +1 -0
  4. package/dist/cli/amuxEventsFormatter.js +86 -0
  5. package/dist/cli/args/argFlags.d.ts +6 -0
  6. package/dist/cli/args/argFlags.d.ts.map +1 -0
  7. package/dist/cli/args/argFlags.js +72 -0
  8. package/dist/cli/args/argPositionals.d.ts +3 -0
  9. package/dist/cli/args/argPositionals.d.ts.map +1 -0
  10. package/dist/cli/args/argPositionals.js +18 -0
  11. package/dist/cli/args/index.d.ts +4 -0
  12. package/dist/cli/args/index.d.ts.map +1 -0
  13. package/dist/cli/args/index.js +75 -0
  14. package/dist/cli/args/types.d.ts +13 -0
  15. package/dist/cli/args/types.d.ts.map +1 -0
  16. package/dist/cli/args/types.js +2 -0
  17. package/dist/cli/commands/daemon.d.ts +31 -0
  18. package/dist/cli/commands/daemon.d.ts.map +1 -0
  19. package/dist/cli/commands/daemon.js +156 -0
  20. package/dist/cli/commands/harness/createRun.d.ts +3 -0
  21. package/dist/cli/commands/harness/createRun.d.ts.map +1 -0
  22. package/dist/cli/commands/harness/createRun.js +8 -0
  23. package/dist/cli/commands/harness/resumeRun.d.ts +20 -0
  24. package/dist/cli/commands/harness/resumeRun.d.ts.map +1 -0
  25. package/dist/cli/commands/harness/resumeRun.js +341 -0
  26. package/dist/cli/commands/jsonlInteractive.d.ts +35 -0
  27. package/dist/cli/commands/jsonlInteractive.d.ts.map +1 -0
  28. package/dist/cli/commands/jsonlInteractive.js +302 -0
  29. package/dist/cli/commands/mcpServe.d.ts +18 -0
  30. package/dist/cli/commands/mcpServe.d.ts.map +1 -0
  31. package/dist/cli/commands/mcpServe.js +59 -0
  32. package/dist/cli/commands/session/history.d.ts +14 -0
  33. package/dist/cli/commands/session/history.d.ts.map +1 -0
  34. package/dist/cli/commands/session/history.js +100 -0
  35. package/dist/cli/commands/tui.d.ts +23 -0
  36. package/dist/cli/commands/tui.d.ts.map +1 -0
  37. package/dist/cli/commands/tui.js +183 -0
  38. package/dist/cli/dispatch.d.ts +4 -0
  39. package/dist/cli/dispatch.d.ts.map +1 -0
  40. package/dist/cli/dispatch.js +348 -0
  41. package/dist/cli/main.d.ts +7 -0
  42. package/dist/cli/main.d.ts.map +1 -0
  43. package/dist/cli/main.js +41 -0
  44. package/dist/cli/program.d.ts +7 -0
  45. package/dist/cli/program.d.ts.map +1 -0
  46. package/dist/cli/program.js +8 -0
  47. package/dist/cli/ui.d.ts +9 -0
  48. package/dist/cli/ui.d.ts.map +1 -0
  49. package/dist/cli/ui.js +125 -0
  50. package/dist/index.d.ts +18 -0
  51. package/dist/index.d.ts.map +1 -0
  52. package/dist/index.js +59 -0
  53. package/dist/prompts/commandTemplates.d.ts +3 -0
  54. package/dist/prompts/commandTemplates.d.ts.map +1 -0
  55. package/dist/prompts/commandTemplates.js +238 -0
  56. package/package.json +76 -0
@@ -0,0 +1,348 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.formatAgentHelp = formatAgentHelp;
37
+ exports.executeAgentCliCommand = executeAgentCliCommand;
38
+ const commandTemplates_1 = require("../prompts/commandTemplates");
39
+ const program_1 = require("./program");
40
+ const ui_1 = require("./ui");
41
+ const createRun_1 = require("./commands/harness/createRun");
42
+ const resumeRun_1 = require("./commands/harness/resumeRun");
43
+ const jsonlInteractive_1 = require("./commands/jsonlInteractive");
44
+ const tui_1 = require("./commands/tui");
45
+ const harness_1 = require("@a5c-ai/agent-platform/harness");
46
+ const daemon_1 = require("./commands/daemon");
47
+ const mcpServe_1 = require("./commands/mcpServe");
48
+ const history_1 = require("./commands/session/history");
49
+ const amuxEventsFormatter_1 = require("./amuxEventsFormatter");
50
+ function formatAgentHelp(_surface) {
51
+ const commandName = program_1.AGENT_PROGRAM.commandName;
52
+ return ` ${commandName} create-run [--prompt <text>] [--harness <name>] [--process <path>] [--workspace <dir>] [--model <model>] [--max-iterations <n>] [--interactive|--no-interactive|--non-interactive] [--json] [--verbose]
53
+ ${commandName} call [...] (alias for create-run)
54
+ ${commandName} yolo [...] (alias for create-run --non-interactive)
55
+ ${commandName} plan [...] (alias for create-run, stops after PhasePlanProcess)
56
+ ${commandName} forever [...] (alias for create-run, infinite loop process)
57
+ ${commandName} resume-run [--run-id <id>] [--harness <name>] [--workspace <dir>] [--model <model>] [--max-iterations <n>] [--interactive|--no-interactive] [--json] [--verbose]
58
+ ${commandName} resume [...] (alias for resume-run)
59
+ ${commandName} retrospect [--run-id <id>...] [--all] [--prompt <text>] [--harness <name>] [--workspace <dir>] [--model <model>] [--max-iterations <n>] [--json] [--verbose]
60
+ ${commandName} cleanup [--dry-run] [--keep-days <n>] [--prompt <text>] [--harness <name>] [--workspace <dir>] [--model <model>] [--json] [--verbose]
61
+ ${commandName} assimilate [--prompt <text>] [--harness <name>] [--workspace <dir>] [--model <model>] [--max-iterations <n>] [--json] [--verbose]
62
+ ${commandName} doctor [--run-id <id>] [--json] [--verbose]
63
+ ${commandName} contrib [--prompt <text>] [--harness <name>] [--workspace <dir>] [--model <model>] [--max-iterations <n>] [--json] [--verbose]
64
+ ${commandName} anycli --service <name> [--scope <scopes>] [--mcp] [--auth-file <path>] [--transport <type>] [--prompt <text>] [--workspace <dir>] [--json] [--verbose]
65
+ ${commandName} session-history --session-id <id> --state-dir <dir> [--run-id <id>] [--json]
66
+ ${commandName} jsonl:interactive
67
+ ${commandName} daemon:start [--workspace <dir>] [--daemon-dir <dir>] [--config-path <path>] [--foreground] [--json]
68
+ ${commandName} daemon:stop [--daemon-dir <dir>] [--grace-period-ms <n>] [--json]
69
+ ${commandName} daemon:status [--daemon-dir <dir>] [--json]
70
+ ${commandName} start-server [--transport <stdio|websocket>] [--port <n>] [--host <host>] [--json]
71
+ ${commandName} help [<topic>]
72
+ ${commandName} observe [--workspace <dir>] [--tui]
73
+ ${commandName} user-install [--harness <name>] [--workspace <dir>] [--model <model>] [--json] [--verbose]
74
+ ${commandName} project-install [--harness <name>] [--workspace <dir>] [--model <model>] [--json] [--verbose]
75
+ ${commandName} discover [--json]
76
+ ${commandName} list [--json]
77
+ ${commandName} invoke <name> --prompt <text> [--workspace <dir>] [--model <model>] [--timeout <ms>] [--json]
78
+ ${commandName} tui [--run-id <id>] [--verbosity minimal|normal|verbose] [--workspace <dir>] [--json]
79
+ ${commandName} version
80
+
81
+ Install or update harness CLIs and plugins with the main babysitter CLI:
82
+ babysitter harness:install <name>
83
+ babysitter harness:install-plugin <name>`;
84
+ }
85
+ async function executeAgentCliCommand(parsed) {
86
+ if (parsed.command === "version") {
87
+ const { readCliVersion } = await Promise.resolve().then(() => __importStar(require("./ui")));
88
+ console.log(await readCliVersion());
89
+ return 0;
90
+ }
91
+ if (!parsed.command || parsed.helpRequested) {
92
+ console.log(formatAgentHelp(parsed.helpSurface));
93
+ return 0;
94
+ }
95
+ const runtimeResult = await executeRuntimeUtilityCommand(parsed);
96
+ if (runtimeResult !== undefined) {
97
+ return runtimeResult;
98
+ }
99
+ switch (parsed.command) {
100
+ case "discover":
101
+ case "list":
102
+ return await handleHarnessDiscover(parsed);
103
+ case "invoke":
104
+ return await handleHarnessInvoke(parsed);
105
+ case "create-run":
106
+ case "call":
107
+ return await runHarnessCreateRun(parsed);
108
+ case "yolo":
109
+ return await runHarnessCreateRun(parsed, { interactive: false });
110
+ case "plan":
111
+ return await runHarnessCreateRun(parsed, { planOnly: true });
112
+ case "forever":
113
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("forever", parsed) });
114
+ case "resume-run":
115
+ case "resume":
116
+ return await (0, resumeRun_1.handleHarnessResumeRun)({
117
+ runId: parsed.runIdOverride,
118
+ harness: parsed.harness ? (0, harness_1.normalizeBuiltInHarnessName)(parsed.harness) : parsed.harness,
119
+ workspace: parsed.workspace,
120
+ model: parsed.model,
121
+ maxIterations: parsed.maxIterations,
122
+ runsDir: parsed.runsDir,
123
+ json: parsed.json,
124
+ verbose: parsed.verbose,
125
+ interactive: parsed.interactive,
126
+ });
127
+ case "retrospect":
128
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("retrospect", parsed) });
129
+ case "cleanup":
130
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("cleanup", parsed) });
131
+ case "assimilate":
132
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("assimilate", parsed) });
133
+ case "doctor":
134
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("doctor", parsed) });
135
+ case "contrib":
136
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("contrib", parsed) });
137
+ case "anycli":
138
+ if (!parsed.anycliService) {
139
+ console.error("--service is required for anycli");
140
+ return 1;
141
+ }
142
+ if (parsed.anycliTransport === "websocket") {
143
+ console.error("Error: WebSocket transport is not yet supported.\nUse --transport stdio (default) or --transport http-sse instead.");
144
+ return 1;
145
+ }
146
+ return await runHarnessCreateRun(parsed, {
147
+ prompt: (0, commandTemplates_1.renderCommandTemplate)("anycli", {
148
+ serviceName: parsed.anycliService,
149
+ scope: parsed.anycliScope ?? "*",
150
+ mcpMode: parsed.anycliMcp ? "true" : "",
151
+ authFile: parsed.anycliAuthFile ?? "",
152
+ transport: parsed.anycliTransport ?? "stdio",
153
+ userPrompt: parsed.prompt ?? "",
154
+ }),
155
+ });
156
+ case "session-history":
157
+ return await (0, history_1.handleSessionHistory)({
158
+ sessionId: parsed.sessionId ?? "",
159
+ stateDir: parsed.stateDir ?? "",
160
+ json: parsed.json,
161
+ runId: parsed.runIdOverride,
162
+ });
163
+ case "jsonl:interactive":
164
+ return await (0, jsonlInteractive_1.handleJsonlInteractive)({ runsDir: parsed.runsDir });
165
+ case "help":
166
+ console.log(formatAgentHelp("human"));
167
+ return 0;
168
+ case "observe":
169
+ if (parsed.tuiFlag) {
170
+ return await (0, tui_1.handleTui)({
171
+ runsDir: parsed.runsDir,
172
+ json: false,
173
+ verbose: parsed.verbose,
174
+ workspace: parsed.workspace,
175
+ harness: parsed.harness ? (0, harness_1.normalizeBuiltInHarnessName)(parsed.harness) : parsed.harness,
176
+ runId: parsed.runIdOverride,
177
+ verbosity: parsed.verbosity,
178
+ });
179
+ }
180
+ return (await Promise.resolve().then(() => __importStar(require("./ui")))).launchObserver(parsed.workspace);
181
+ case "user-install":
182
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("user-install", parsed) });
183
+ case "project-install":
184
+ return await runHarnessCreateRun(parsed, { prompt: renderPrompt("project-install", parsed) });
185
+ case "tui":
186
+ return await (0, tui_1.handleTui)({
187
+ runsDir: parsed.runsDir,
188
+ json: parsed.json,
189
+ verbose: parsed.verbose,
190
+ positional: parsed.positional,
191
+ harness: parsed.harness ? (0, harness_1.normalizeBuiltInHarnessName)(parsed.harness) : parsed.harness,
192
+ workspace: parsed.workspace,
193
+ prompt: parsed.prompt,
194
+ runId: parsed.runIdOverride,
195
+ verbosity: parsed.verbosity,
196
+ });
197
+ default:
198
+ return (0, ui_1.handleUnknownCommand)(parsed.command, parsed.json);
199
+ }
200
+ }
201
+ async function executeRuntimeUtilityCommand(parsed) {
202
+ switch (parsed.command) {
203
+ case "daemon:start":
204
+ return await (0, daemon_1.handleDaemonStart)({
205
+ daemonDir: parsed.daemonDir,
206
+ workspace: parsed.workspace,
207
+ configPath: parsed.configPath,
208
+ foreground: parsed.foreground,
209
+ json: parsed.json,
210
+ });
211
+ case "daemon:stop":
212
+ return await (0, daemon_1.handleDaemonStop)({
213
+ daemonDir: parsed.daemonDir,
214
+ gracePeriodMs: parsed.gracePeriodMs,
215
+ json: parsed.json,
216
+ });
217
+ case "daemon:status":
218
+ return await (0, daemon_1.handleDaemonStatus)({ daemonDir: parsed.daemonDir, json: parsed.json });
219
+ case "daemon:run":
220
+ return await (0, daemon_1.handleDaemonRun)({ daemonDir: parsed.daemonDir });
221
+ case "start-server":
222
+ return await (0, mcpServe_1.handleMcpServe)({
223
+ json: parsed.json,
224
+ transport: parsed.transport,
225
+ port: parsed.port,
226
+ host: parsed.host,
227
+ authToken: parsed.authToken,
228
+ wsOptions: {
229
+ pingIntervalMs: parsed.wsPingInterval,
230
+ maxMessagesPerSecond: parsed.wsMaxMps,
231
+ sessionGracePeriodMs: parsed.wsGracePeriod,
232
+ },
233
+ });
234
+ default:
235
+ return undefined;
236
+ }
237
+ }
238
+ async function handleHarnessDiscover(parsed) {
239
+ const results = await (0, harness_1.discoverHarnesses)();
240
+ const caller = (0, harness_1.detectCallerHarness)();
241
+ if (parsed.json) {
242
+ console.log(JSON.stringify({ installed: results, caller }, null, 2));
243
+ return 0;
244
+ }
245
+ console.log(formatAgentHelp("human"));
246
+ return 0;
247
+ }
248
+ async function handleHarnessInvoke(parsed) {
249
+ const harnessName = parsed.positional?.[0];
250
+ if (!harnessName || !parsed.prompt) {
251
+ console.error(`Usage: ${program_1.AGENT_PROGRAM.commandName} invoke <name> --prompt "<text>"`);
252
+ return 1;
253
+ }
254
+ const normalizedHarnessName = (0, harness_1.normalizeBuiltInHarnessName)(harnessName);
255
+ if (normalizedHarnessName === "agent-core") {
256
+ return await (0, createRun_1.handleHarnessCreateRun)({
257
+ invocationCommand: parsed.command,
258
+ prompt: parsed.prompt,
259
+ harness: "agent-core",
260
+ workspace: parsed.workspace,
261
+ model: parsed.model,
262
+ maxIterations: parsed.maxIterations,
263
+ runsDir: parsed.runsDir,
264
+ json: parsed.json,
265
+ verbose: parsed.verbose,
266
+ interactive: false,
267
+ outputMode: parsed.outputFormat === "amux-events" ? "amux-events" : undefined,
268
+ });
269
+ }
270
+ const result = await (0, harness_1.invokeHarness)(normalizedHarnessName, {
271
+ prompt: parsed.prompt,
272
+ workspace: parsed.workspace,
273
+ model: parsed.model,
274
+ timeout: parsed.timeout ? Number(parsed.timeout) : undefined,
275
+ });
276
+ // amux-events output format: JSONL compatible with agent-mux event stream
277
+ if (parsed.outputFormat === "amux-events") {
278
+ const lines = (0, amuxEventsFormatter_1.formatResultAsAmuxEvents)(normalizedHarnessName, result);
279
+ for (const line of lines) {
280
+ console.log(line);
281
+ }
282
+ return result.success ? 0 : 1;
283
+ }
284
+ if (parsed.json || parsed.outputFormat === "json") {
285
+ console.log(JSON.stringify(result, null, 2));
286
+ }
287
+ else if (result.success) {
288
+ console.log(result.output);
289
+ }
290
+ else {
291
+ console.error(result.output);
292
+ }
293
+ return result.success ? 0 : 1;
294
+ }
295
+ function renderPrompt(kind, parsed) {
296
+ switch (kind) {
297
+ case "forever":
298
+ return (0, commandTemplates_1.renderCommandTemplate)("forever", { additionalInstructions: parsed.prompt ?? "" });
299
+ case "retrospect": {
300
+ const targetRunText = parsed.retrospectAll
301
+ ? "Target: ALL completed/failed runs in the resolved runs root"
302
+ : parsed.runIds && parsed.runIds.length > 1
303
+ ? `Target run IDs: ${parsed.runIds.join(", ")}`
304
+ : parsed.runIdOverride
305
+ ? `Target run ID: ${parsed.runIdOverride}`
306
+ : "Target: most recent run";
307
+ return (0, commandTemplates_1.renderCommandTemplate)("retrospect", { targetRunText, additionalInstructions: parsed.prompt ?? "" });
308
+ }
309
+ case "cleanup":
310
+ return (0, commandTemplates_1.renderCommandTemplate)("cleanup", {
311
+ keepDays: String(parsed.keepDays ?? 7),
312
+ dryRunLine: parsed.dryRun ? "- DRY RUN: show what would be removed without deleting anything" : "",
313
+ additionalInstructions: parsed.prompt ?? "",
314
+ });
315
+ case "assimilate":
316
+ return (0, commandTemplates_1.renderCommandTemplate)("assimilate", { targetToAssimilate: parsed.prompt ?? "" });
317
+ case "doctor":
318
+ return (0, commandTemplates_1.renderCommandTemplate)("doctor", {
319
+ targetRunText: parsed.runIdOverride ? `Target run ID: ${parsed.runIdOverride}` : "Target: most recent run",
320
+ });
321
+ case "contrib":
322
+ return (0, commandTemplates_1.renderCommandTemplate)("contrib", { contributionDetails: parsed.prompt ?? "" });
323
+ case "user-install":
324
+ return (0, commandTemplates_1.renderCommandTemplate)("user-install", { additionalInstructions: parsed.prompt ?? "" });
325
+ case "project-install":
326
+ return (0, commandTemplates_1.renderCommandTemplate)("project-install", { additionalInstructions: parsed.prompt ?? "" });
327
+ }
328
+ }
329
+ async function runHarnessCreateRun(parsed, overrides = {}) {
330
+ if (parsed.harness && (0, harness_1.normalizeBuiltInHarnessName)(parsed.harness) !== "agent-core") {
331
+ process.stderr.write(`[tula] --harness ${parsed.harness} ignored — tula always uses agent-core\n`);
332
+ }
333
+ return await (0, createRun_1.handleHarnessCreateRun)({
334
+ invocationCommand: parsed.command,
335
+ prompt: overrides.prompt ?? parsed.prompt,
336
+ harness: "agent-core",
337
+ processPath: parsed.processPath,
338
+ workspace: parsed.workspace,
339
+ model: parsed.model,
340
+ maxIterations: parsed.maxIterations,
341
+ runsDir: parsed.runsDir,
342
+ json: parsed.json,
343
+ verbose: parsed.verbose,
344
+ interactive: overrides.interactive ?? parsed.interactive,
345
+ planOnly: overrides.planOnly,
346
+ outputMode: parsed.outputFormat === "amux-events" ? "amux-events" : undefined,
347
+ });
348
+ }
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ export declare function createBabysitterAgentCli(): {
3
+ run(argv?: string[]): Promise<number>;
4
+ formatHelp(): string;
5
+ formatHumanHelp(): string;
6
+ };
7
+ //# sourceMappingURL=main.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"main.d.ts","sourceRoot":"","sources":["../../src/cli/main.ts"],"names":[],"mappings":";AAKA,wBAAgB,wBAAwB;eAEpB,MAAM,EAAE,GAA2B,OAAO,CAAC,MAAM,CAAC;kBAgBpD,MAAM;uBAGD,MAAM;EAI5B"}
@@ -0,0 +1,41 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ Object.defineProperty(exports, "__esModule", { value: true });
4
+ exports.createBabysitterAgentCli = createBabysitterAgentCli;
5
+ const dispatch_1 = require("./dispatch");
6
+ const args_1 = require("./args");
7
+ const ui_1 = require("./ui");
8
+ function createBabysitterAgentCli() {
9
+ return {
10
+ async run(argv = process.argv.slice(2)) {
11
+ let parsedJson = false;
12
+ let parsedVerbose = false;
13
+ try {
14
+ const parsed = (0, args_1.parseHarnessArgs)(argv);
15
+ parsedJson = parsed.json;
16
+ parsedVerbose = parsed.verbose;
17
+ return await (0, dispatch_1.executeAgentCliCommand)(parsed);
18
+ }
19
+ catch (error) {
20
+ (0, ui_1.outputError)(error instanceof Error ? error : new Error(String(error)), {
21
+ json: parsedJson,
22
+ verbose: parsedVerbose,
23
+ });
24
+ return 1;
25
+ }
26
+ },
27
+ formatHelp() {
28
+ return (0, dispatch_1.formatAgentHelp)("agent");
29
+ },
30
+ formatHumanHelp() {
31
+ return (0, dispatch_1.formatAgentHelp)("human");
32
+ },
33
+ };
34
+ }
35
+ if (require.main === module) {
36
+ void createBabysitterAgentCli()
37
+ .run()
38
+ .then((code) => {
39
+ process.exitCode = code;
40
+ });
41
+ }
@@ -0,0 +1,7 @@
1
+ export interface AgentCliProgram {
2
+ readonly variant: "agent";
3
+ readonly commandName: "tula";
4
+ readonly packageName: "@a5c-ai/tula";
5
+ }
6
+ export declare const AGENT_PROGRAM: AgentCliProgram;
7
+ //# sourceMappingURL=program.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"program.d.ts","sourceRoot":"","sources":["../../src/cli/program.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;CACtC;AAED,eAAO,MAAM,aAAa,EAAE,eAI3B,CAAC"}
@@ -0,0 +1,8 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.AGENT_PROGRAM = void 0;
4
+ exports.AGENT_PROGRAM = {
5
+ variant: "agent",
6
+ commandName: "tula",
7
+ packageName: "@a5c-ai/tula",
8
+ };
@@ -0,0 +1,9 @@
1
+ export declare function supportsColors(): boolean;
2
+ export declare function handleUnknownCommand(command: string, json: boolean): number;
3
+ export declare function outputError(error: Error, options: {
4
+ json: boolean;
5
+ verbose?: boolean;
6
+ }): void;
7
+ export declare function readCliVersion(): Promise<string>;
8
+ export declare function launchObserver(workspace?: string): Promise<number>;
9
+ //# sourceMappingURL=ui.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ui.d.ts","sourceRoot":"","sources":["../../src/cli/ui.ts"],"names":[],"mappings":"AAaA,wBAAgB,cAAc,IAAI,OAAO,CAIxC;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,GAAG,MAAM,CAgB3E;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,IAAI,CAgB7F;AAED,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,CAAC,CAgBtD;AAED,wBAAsB,cAAc,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAqBxE"}
package/dist/cli/ui.js ADDED
@@ -0,0 +1,125 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.supportsColors = supportsColors;
37
+ exports.handleUnknownCommand = handleUnknownCommand;
38
+ exports.outputError = outputError;
39
+ exports.readCliVersion = readCliVersion;
40
+ exports.launchObserver = launchObserver;
41
+ const path = __importStar(require("node:path"));
42
+ const node_fs_1 = require("node:fs");
43
+ const node_child_process_1 = require("node:child_process");
44
+ const babysitter_sdk_1 = require("@a5c-ai/babysitter-sdk");
45
+ const program_1 = require("./program");
46
+ function supportsColors() {
47
+ if (process.env.NO_COLOR !== undefined)
48
+ return false;
49
+ if (process.env.FORCE_COLOR !== undefined)
50
+ return true;
51
+ return Boolean(process.stderr?.isTTY);
52
+ }
53
+ function handleUnknownCommand(command, json) {
54
+ const error = new babysitter_sdk_1.BabysitterRuntimeError("UnknownCommandError", `Unknown command: ${command}`, {
55
+ category: babysitter_sdk_1.ErrorCategory.Validation,
56
+ suggestions: (0, babysitter_sdk_1.suggestCommand)(command) ? [`Did you mean: ${(0, babysitter_sdk_1.suggestCommand)(command)}?`] : [],
57
+ nextSteps: [
58
+ `Run ${program_1.AGENT_PROGRAM.commandName} --help to see available agent runtime commands.`,
59
+ 'Use "babysitter harness:install" or "babysitter harness:install-plugin" for installation commands.',
60
+ ],
61
+ details: { command, program: program_1.AGENT_PROGRAM.commandName },
62
+ });
63
+ if (json) {
64
+ console.error(JSON.stringify((0, babysitter_sdk_1.toStructuredError)(error), null, 2));
65
+ }
66
+ else {
67
+ console.error((0, babysitter_sdk_1.formatErrorWithContext)(error, { colors: supportsColors() }));
68
+ }
69
+ return 1;
70
+ }
71
+ function outputError(error, options) {
72
+ const { json, verbose = false } = options;
73
+ if (json) {
74
+ console.error(JSON.stringify((0, babysitter_sdk_1.toStructuredError)(error, verbose)));
75
+ return;
76
+ }
77
+ const colors = supportsColors();
78
+ if ((0, babysitter_sdk_1.isBabysitterError)(error)) {
79
+ console.error((0, babysitter_sdk_1.formatErrorWithContext)(error, { colors, includeStack: verbose }));
80
+ return;
81
+ }
82
+ const wrappedError = new babysitter_sdk_1.BabysitterRuntimeError(error.name || "Error", error.message, {
83
+ category: babysitter_sdk_1.ErrorCategory.Internal,
84
+ nextSteps: ["If this error persists, please report it as a bug."],
85
+ });
86
+ console.error((0, babysitter_sdk_1.formatErrorWithContext)(wrappedError, { colors, includeStack: verbose }));
87
+ }
88
+ async function readCliVersion() {
89
+ const candidatePaths = [
90
+ path.join(process.cwd(), "package.json"),
91
+ path.join(process.cwd(), "packages", "tula", "package.json"),
92
+ path.join(__dirname, "..", "..", "package.json"),
93
+ path.join(__dirname, "..", "..", "..", "package.json"),
94
+ ];
95
+ for (const packagePath of candidatePaths) {
96
+ try {
97
+ const raw = await node_fs_1.promises.readFile(packagePath, "utf8");
98
+ return JSON.parse(raw).version ?? "unknown";
99
+ }
100
+ catch {
101
+ // try the next candidate
102
+ }
103
+ }
104
+ return "unknown";
105
+ }
106
+ async function launchObserver(workspace) {
107
+ const watchDir = workspace ?? path.resolve(process.cwd(), "..");
108
+ const colors = supportsColors();
109
+ const bold = colors ? "\x1b[1m" : "";
110
+ const dim = colors ? "\x1b[2m" : "";
111
+ const reset = colors ? "\x1b[0m" : "";
112
+ process.stderr.write(`${bold}Launching babysitter observer dashboard...${reset}\n`);
113
+ process.stderr.write(`${dim}Watching: ${watchDir}${reset}\n\n`);
114
+ const child = (0, node_child_process_1.spawn)("npx", ["-y", "@a5c-ai/babysitter-observer-dashboard@latest", "--watch-dir", watchDir], {
115
+ stdio: "inherit",
116
+ shell: true,
117
+ });
118
+ return await new Promise((resolve) => {
119
+ child.on("close", (code) => resolve(code ?? 0));
120
+ child.on("error", (err) => {
121
+ process.stderr.write(`Failed to launch observer: ${err.message}\n`);
122
+ resolve(1);
123
+ });
124
+ });
125
+ }
@@ -0,0 +1,18 @@
1
+ /**
2
+ * @a5c-ai/tula — Unified agent product
3
+ *
4
+ * Re-exports the full public API surface from every layer:
5
+ * L4 agent-core — loop, subagent, context, synthesis
6
+ * L5 agent-runtime — daemon, session, cost, observability, telemetry
7
+ * L6 agent-platform — harness, governance, CLI, interaction, storage
8
+ *
9
+ * agent-platform sits at the top of the dependency chain and already
10
+ * re-exports key symbols from core and runtime, so it is the primary
11
+ * barrel. The lower layers are additionally available under namespaces
12
+ * (`core`, `runtime`) for consumers that need unambiguous access.
13
+ */
14
+ export * from "@a5c-ai/agent-platform";
15
+ import * as core from "@a5c-ai/tula-core";
16
+ import * as runtime from "@a5c-ai/agent-runtime";
17
+ export { core, runtime };
18
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,cAAc,wBAAwB,CAAC;AAGvC,OAAO,KAAK,IAAI,MAAM,mBAAmB,CAAC;AAC1C,OAAO,KAAK,OAAO,MAAM,uBAAuB,CAAC;AACjD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ /**
3
+ * @a5c-ai/tula — Unified agent product
4
+ *
5
+ * Re-exports the full public API surface from every layer:
6
+ * L4 agent-core — loop, subagent, context, synthesis
7
+ * L5 agent-runtime — daemon, session, cost, observability, telemetry
8
+ * L6 agent-platform — harness, governance, CLI, interaction, storage
9
+ *
10
+ * agent-platform sits at the top of the dependency chain and already
11
+ * re-exports key symbols from core and runtime, so it is the primary
12
+ * barrel. The lower layers are additionally available under namespaces
13
+ * (`core`, `runtime`) for consumers that need unambiguous access.
14
+ */
15
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
16
+ if (k2 === undefined) k2 = k;
17
+ var desc = Object.getOwnPropertyDescriptor(m, k);
18
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
19
+ desc = { enumerable: true, get: function() { return m[k]; } };
20
+ }
21
+ Object.defineProperty(o, k2, desc);
22
+ }) : (function(o, m, k, k2) {
23
+ if (k2 === undefined) k2 = k;
24
+ o[k2] = m[k];
25
+ }));
26
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
27
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
28
+ }) : function(o, v) {
29
+ o["default"] = v;
30
+ });
31
+ var __exportStar = (this && this.__exportStar) || function(m, exports) {
32
+ for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
33
+ };
34
+ var __importStar = (this && this.__importStar) || (function () {
35
+ var ownKeys = function(o) {
36
+ ownKeys = Object.getOwnPropertyNames || function (o) {
37
+ var ar = [];
38
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
39
+ return ar;
40
+ };
41
+ return ownKeys(o);
42
+ };
43
+ return function (mod) {
44
+ if (mod && mod.__esModule) return mod;
45
+ var result = {};
46
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
47
+ __setModuleDefault(result, mod);
48
+ return result;
49
+ };
50
+ })();
51
+ Object.defineProperty(exports, "__esModule", { value: true });
52
+ exports.runtime = exports.core = void 0;
53
+ // L6 — primary barrel (re-exports overlapping symbols from L4/L5)
54
+ __exportStar(require("@a5c-ai/agent-platform"), exports);
55
+ // L4 and L5 — namespaced for unambiguous access
56
+ const core = __importStar(require("@a5c-ai/tula-core"));
57
+ exports.core = core;
58
+ const runtime = __importStar(require("@a5c-ai/agent-runtime"));
59
+ exports.runtime = runtime;
@@ -0,0 +1,3 @@
1
+ export type HarnessCommandTemplateName = "anycli" | "assimilate" | "cleanup" | "contrib" | "doctor" | "forever" | "project-install" | "retrospect" | "user-install";
2
+ export declare function renderCommandTemplate(templateName: HarnessCommandTemplateName, extras?: Record<string, string>): string;
3
+ //# sourceMappingURL=commandTemplates.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"commandTemplates.d.ts","sourceRoot":"","sources":["../../src/prompts/commandTemplates.ts"],"names":[],"mappings":"AAMA,MAAM,MAAM,0BAA0B,GAClC,QAAQ,GACR,YAAY,GACZ,SAAS,GACT,SAAS,GACT,QAAQ,GACR,SAAS,GACT,iBAAiB,GACjB,YAAY,GACZ,cAAc,CAAC;AAyOnB,wBAAgB,qBAAqB,CACnC,YAAY,EAAE,0BAA0B,EACxC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAC9B,MAAM,CAKR"}