@typescript-agent-harness/cli 0.20.0 → 0.22.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.
@@ -0,0 +1,19 @@
1
+ import type { Interface } from "node:readline";
2
+ import type { ApprovalAnswer, ApprovalPluginOptions } from "@typescript-agent-harness/permissions";
3
+ export declare const APPROVAL_TOOLS: string[];
4
+ export type LineReader = {
5
+ next(): Promise<string | undefined>;
6
+ };
7
+ /**
8
+ * One reader shared by the chat loop and approval prompts, so answers never leak into chat.
9
+ * A read abandoned by a cancelled approval is handed to the next caller instead of losing that line.
10
+ */
11
+ export declare function lineReader(rl: Interface): LineReader;
12
+ export declare function parseAnswer(line: string | undefined): ApprovalAnswer;
13
+ export declare function formatCall(call: {
14
+ name: string;
15
+ arguments: unknown;
16
+ }): string;
17
+ /** Without a TTY reader every gated call is rejected, so piped input is never read as an answer. */
18
+ export declare function createAsk(reader: LineReader | undefined): ApprovalPluginOptions["ask"];
19
+ //# sourceMappingURL=approve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.d.ts","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,uCAAuC,CAAC;AAEnG,eAAO,MAAM,cAAc,UAAoC,CAAC;AAEhE,MAAM,MAAM,UAAU,GAAG;IAAE,IAAI,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAA;CAAE,CAAC;AAEjE;;;GAGG;AACH,wBAAgB,UAAU,CAAC,EAAE,EAAE,SAAS,GAAG,UAAU,CAYpD;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,cAAc,CAKpE;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAW7E;AAED,oGAAoG;AACpG,wBAAgB,SAAS,CAAC,MAAM,EAAE,UAAU,GAAG,SAAS,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAiBtF"}
@@ -0,0 +1,56 @@
1
+ export const APPROVAL_TOOLS = ["write_file", "execute_command"];
2
+ /**
3
+ * One reader shared by the chat loop and approval prompts, so answers never leak into chat.
4
+ * A read abandoned by a cancelled approval is handed to the next caller instead of losing that line.
5
+ */
6
+ export function lineReader(rl) {
7
+ const it = rl[Symbol.asyncIterator]();
8
+ let pending;
9
+ return {
10
+ next() {
11
+ pending ??= it.next().then((r) => {
12
+ pending = undefined;
13
+ return r.done ? undefined : r.value;
14
+ });
15
+ return pending;
16
+ },
17
+ };
18
+ }
19
+ export function parseAnswer(line) {
20
+ const s = (line ?? "").trim().toLowerCase();
21
+ if (s === "y" || s === "yes")
22
+ return "yes";
23
+ if (s === "a" || s === "always")
24
+ return "always";
25
+ return "no";
26
+ }
27
+ export function formatCall(call) {
28
+ const a = (call.arguments ?? {});
29
+ if (call.name === "execute_command") {
30
+ const args = Array.isArray(a.args) ? a.args.join(" ") : "";
31
+ return `execute_command: ${String(a.program ?? "")} ${args}`.trimEnd();
32
+ }
33
+ if (call.name === "write_file") {
34
+ const size = typeof a.content === "string" ? a.content.length : 0;
35
+ return `write_file: ${String(a.path ?? "")} (${size} chars)`;
36
+ }
37
+ return `${call.name} ${JSON.stringify(call.arguments).slice(0, 200)}`;
38
+ }
39
+ /** Without a TTY reader every gated call is rejected, so piped input is never read as an answer. */
40
+ export function createAsk(reader) {
41
+ return async (call, signal) => {
42
+ if (!reader) {
43
+ console.error(`\n[tah] ${call.name} needs approval but stdin is not a TTY — rejected (pass --yes to allow)`);
44
+ return "no";
45
+ }
46
+ process.stdout.write(`\n[approve] ${formatCall(call)}\n allow? [y]es / [n]o / [a]lways: `);
47
+ if (!signal)
48
+ return parseAnswer(await reader.next());
49
+ if (signal.aborted)
50
+ return "no";
51
+ const aborted = new Promise((resolve) => signal.addEventListener("abort", () => resolve(undefined), { once: true }));
52
+ const line = await Promise.race([reader.next(), aborted]);
53
+ return signal.aborted ? "no" : parseAnswer(line);
54
+ };
55
+ }
56
+ //# sourceMappingURL=approve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"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"}
package/dist/args.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ export declare const DEFAULT_MAX_STEPS = 32;
1
2
  export type CliFlags = {
2
3
  command: string;
3
4
  prompt: string;
@@ -6,11 +7,15 @@ export type CliFlags = {
6
7
  persist: boolean;
7
8
  quiet: boolean;
8
9
  exec: boolean;
10
+ yes: boolean;
11
+ systemFile: string;
12
+ session: string;
9
13
  mcpCommand: string;
10
14
  mcpArgs: string[];
11
15
  allow: string[];
12
16
  deny: string[];
13
17
  onceMs: number;
18
+ maxSteps: number;
14
19
  };
15
20
  export declare function parseArgv(argv: string[]): CliFlags;
16
21
  export declare function usage(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CA0ElD;AAED,wBAAgB,KAAK,IAAI,MAAM,CAoB9B"}
1
+ {"version":3,"file":"args.d.ts","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,KAAK,CAAC;AAEpC,MAAM,MAAM,QAAQ,GAAG;IACrB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,OAAO,CAAC;IACd,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,OAAO,CAAC;IACf,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;CAClB,CAAC;AAEF,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,QAAQ,CAoGlD;AAED,wBAAgB,KAAK,IAAI,MAAM,CA4B9B"}
package/dist/args.js CHANGED
@@ -1,17 +1,22 @@
1
+ export const DEFAULT_MAX_STEPS = 32;
1
2
  export function parseArgv(argv) {
2
3
  const flags = {
3
4
  command: "help",
4
5
  prompt: "",
5
6
  cwd: process.cwd(),
6
7
  mock: false,
7
- persist: false,
8
+ persist: true,
8
9
  quiet: false,
9
- exec: false,
10
+ exec: true,
11
+ yes: false,
12
+ systemFile: "",
13
+ session: "",
10
14
  mcpCommand: "",
11
15
  mcpArgs: [],
12
16
  allow: [],
13
17
  deny: [],
14
18
  onceMs: -1,
19
+ maxSteps: DEFAULT_MAX_STEPS,
15
20
  };
16
21
  const rest = [];
17
22
  let help = false;
@@ -23,10 +28,16 @@ export function parseArgv(argv) {
23
28
  flags.mock = true;
24
29
  else if (arg === "--persist")
25
30
  flags.persist = true;
31
+ else if (arg === "--no-persist")
32
+ flags.persist = false;
26
33
  else if (arg === "--quiet")
27
34
  flags.quiet = true;
28
35
  else if (arg === "--exec")
29
36
  flags.exec = true;
37
+ else if (arg === "--no-exec")
38
+ flags.exec = false;
39
+ else if (arg === "--yes" || arg === "-y")
40
+ flags.yes = true;
30
41
  else if (arg === "--mcp") {
31
42
  const next = argv[i + 1];
32
43
  if (!next)
@@ -66,6 +77,31 @@ export function parseArgv(argv) {
66
77
  flags.onceMs = ms;
67
78
  i += 1;
68
79
  }
80
+ else if (arg === "--max-steps") {
81
+ const next = argv[i + 1];
82
+ if (!next)
83
+ throw new Error("--max-steps requires a positive integer");
84
+ const n = Number(next);
85
+ if (!Number.isInteger(n) || n < 1) {
86
+ throw new Error("--max-steps requires a positive integer");
87
+ }
88
+ flags.maxSteps = n;
89
+ i += 1;
90
+ }
91
+ else if (arg === "--system-file") {
92
+ const next = argv[i + 1];
93
+ if (!next)
94
+ throw new Error("--system-file requires a path");
95
+ flags.systemFile = next;
96
+ i += 1;
97
+ }
98
+ else if (arg === "--session") {
99
+ const next = argv[i + 1];
100
+ if (!next)
101
+ throw new Error("--session requires a session id or number");
102
+ flags.session = next;
103
+ i += 1;
104
+ }
69
105
  else if (arg === "--cwd") {
70
106
  const next = argv[i + 1];
71
107
  if (!next)
@@ -97,20 +133,28 @@ export function usage() {
97
133
 
98
134
  Usage:
99
135
  tah run <prompt> one-shot session
100
- tah chat session; stdin lines until EOF or /exit (/reset new session)
136
+ tah chat continue last session if persisted
137
+ /exit /reset /sessions /resume <id|n> /fork [turns]
138
+ tah sessions list saved sessions (newest first; numbers work with --session)
101
139
  tah help
102
140
 
103
141
  Flags:
104
- --cwd <path> workspace root (default: process.cwd())
105
- --mock local fake LLM (required if no DEEPSEEK_API_KEY / OPENAI_API_KEY)
106
- --persist SQLite at <cwd>/.tah/cli.db
107
- --quiet only print assistant text
108
- --exec mount execute_command (needed to test/build/run programs; off by default)
109
- --mcp <cmd> mount stdio MCP tools from a child process (off by default)
110
- --mcp-arg <a> extra argv for --mcp (repeatable)
111
- --allow <tool> allowlist (repeatable; omit = all tools allowed)
112
- --deny <tool> denylist (repeatable; wins over --allow)
113
- --once <ms> delay then run once via scheduler (off by default; tah run only)
142
+ --cwd <path> workspace root (default: process.cwd())
143
+ --mock local fake LLM (required if no DEEPSEEK_API_KEY / OPENAI_API_KEY)
144
+ --persist SQLite at <cwd>/.tah/cli.db (on by default)
145
+ --no-persist disable SQLite; chat will not resume across exits
146
+ --quiet only print assistant text
147
+ --exec mount execute_command (on by default)
148
+ --no-exec disable execute_command
149
+ --yes, -y skip approval for write_file / execute_command (asked by default; rejected if stdin is not a TTY)
150
+ --max-steps <n> LLM round limit per turn (default: ${DEFAULT_MAX_STEPS})
151
+ --system-file <p> replace the default "workspace coding agent" role with this file's text
152
+ --session <id|n> tah chat: continue this session instead of the latest
153
+ --mcp <cmd> mount stdio MCP tools from a child process (off by default)
154
+ --mcp-arg <a> extra argv for --mcp (repeatable)
155
+ --allow <tool> allowlist (repeatable; omit = all tools allowed)
156
+ --deny <tool> denylist (repeatable; wins over --allow)
157
+ --once <ms> delay then run once via scheduler (off by default; tah run only)
114
158
  `;
115
159
  }
116
160
  //# sourceMappingURL=args.js.map
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -6,6 +6,11 @@ async function main() {
6
6
  console.log(usage());
7
7
  return;
8
8
  }
9
+ if (flags.command === "sessions") {
10
+ const { listSavedSessions } = await import("./runtime.js");
11
+ console.log(await listSavedSessions(flags.cwd));
12
+ return;
13
+ }
9
14
  const { loadCliEnv, hasLlmKey } = await import("./env.js");
10
15
  loadCliEnv(flags.cwd);
11
16
  if (!flags.mock && !hasLlmKey()) {
@@ -19,36 +24,75 @@ async function main() {
19
24
  return;
20
25
  }
21
26
  const { SESSION } = await import("@typescript-agent-harness/agent");
22
- const { bootRuntime, endTurn, runPrompt } = await import("./runtime.js");
27
+ const { bootRuntime, describeSessions, endTurn, openChatSession, openSessionByRef, runPrompt, } = await import("./runtime.js");
28
+ const { createAsk, lineReader } = await import("./approve.js");
29
+ const readline = await import("node:readline");
30
+ const tty = Boolean(process.stdin.isTTY);
23
31
  if (flags.command === "run") {
24
32
  if (!flags.prompt) {
25
33
  console.error("tah run requires a prompt");
26
34
  process.exitCode = 1;
27
35
  return;
28
36
  }
29
- const { runtime, streamed } = await bootRuntime(flags);
37
+ // terminal:false keeps the TTY in cooked mode, so Ctrl+C stays a real SIGINT that exits `run`.
38
+ const rl = tty
39
+ ? readline.createInterface({
40
+ input: process.stdin,
41
+ output: process.stdout,
42
+ terminal: false,
43
+ })
44
+ : undefined;
30
45
  try {
31
- await runPrompt(runtime, flags, streamed);
46
+ const { runtime, streamed } = await bootRuntime(flags, {
47
+ ask: createAsk(rl && lineReader(rl)),
48
+ });
49
+ try {
50
+ await runPrompt(runtime, flags, streamed);
51
+ }
52
+ finally {
53
+ await runtime.stop();
54
+ }
32
55
  }
33
56
  finally {
34
- await runtime.stop();
57
+ rl?.close();
35
58
  }
36
59
  return;
37
60
  }
38
61
  if (flags.command === "chat") {
39
- const { runtime, streamed } = await bootRuntime(flags);
40
- let session = await runtime.get(SESSION).create();
41
- const readline = await import("node:readline");
42
62
  const rl = readline.createInterface({
43
63
  input: process.stdin,
44
64
  output: process.stdout,
45
- terminal: Boolean(process.stdin.isTTY),
65
+ terminal: tty,
46
66
  });
47
- console.log("tah chat — /exit /reset");
67
+ const lines = lineReader(rl);
68
+ let booted;
69
+ try {
70
+ booted = await bootRuntime(flags, { ask: createAsk(tty ? lines : undefined) });
71
+ }
72
+ catch (err) {
73
+ rl.close();
74
+ throw err;
75
+ }
76
+ const { runtime, streamed } = booted;
48
77
  const prompt = () => process.stdout.write("you> ");
49
78
  try {
79
+ let { session, resumed } = await openChatSession(runtime, flags);
80
+ let running = false;
81
+ rl.on("SIGINT", () => {
82
+ if (running)
83
+ void session.cancel();
84
+ else
85
+ rl.close();
86
+ });
87
+ console.log("tah chat — /exit /reset /sessions /resume <id|n> /fork [turns] (Ctrl+C stops the current turn)");
88
+ if (resumed) {
89
+ console.log(`[tah] resumed session ${session.id}`);
90
+ }
91
+ else {
92
+ console.log(`[tah] session ${session.id}`);
93
+ }
50
94
  prompt();
51
- for await (const raw of rl) {
95
+ for (let raw = await lines.next(); raw !== undefined; raw = await lines.next()) {
52
96
  const line = raw.trim();
53
97
  if (!line) {
54
98
  prompt();
@@ -62,10 +106,60 @@ async function main() {
62
106
  prompt();
63
107
  continue;
64
108
  }
65
- const result = await session.run(line);
66
- endTurn(result, session, flags.quiet, streamed);
109
+ const [command, arg] = line.split(/\s+/, 2);
110
+ if (command === "/sessions" || command === "/resume" || command === "/fork") {
111
+ try {
112
+ if (command === "/sessions") {
113
+ console.log(await describeSessions(runtime, session.id));
114
+ }
115
+ else if (command === "/resume") {
116
+ if (!arg)
117
+ throw new Error("usage: /resume <id|n>");
118
+ session = await openSessionByRef(runtime, arg);
119
+ console.log(`[tah] resumed session ${session.id}`);
120
+ }
121
+ else {
122
+ if (arg !== undefined && !/^\d+$/.test(arg))
123
+ throw new Error("usage: /fork [turns]");
124
+ const from = session.id;
125
+ session = await runtime
126
+ .get(SESSION)
127
+ .fork(from, arg === undefined ? {} : { turns: Number(arg) });
128
+ const turns = session.messages.filter((m) => m.role === "user").length;
129
+ console.log(`[tah] forked ${from} → ${session.id} (${turns} turn(s) kept; original unchanged)`);
130
+ }
131
+ }
132
+ catch (err) {
133
+ console.error(`[tah] ${err instanceof Error ? err.message : String(err)}`);
134
+ }
135
+ prompt();
136
+ continue;
137
+ }
138
+ running = true;
139
+ try {
140
+ const result = await session.run(line);
141
+ endTurn(result, session, flags.quiet, streamed);
142
+ }
143
+ catch (err) {
144
+ if (streamed.on)
145
+ process.stdout.write("\n");
146
+ streamed.on = false;
147
+ streamed.midLine = false;
148
+ if (session.state === "cancelled") {
149
+ console.log("[tah] turn cancelled — history kept; keep chatting or /exit");
150
+ }
151
+ else {
152
+ console.error(`[tah] turn failed: ${err instanceof Error ? err.message : String(err)} — history kept; try again`);
153
+ }
154
+ }
155
+ finally {
156
+ running = false;
157
+ }
67
158
  prompt();
68
159
  }
160
+ if (flags.persist && !flags.quiet) {
161
+ console.log(`[tah] session ${session.id} saved — continue with: tah chat --session ${session.id}`);
162
+ }
69
163
  }
70
164
  finally {
71
165
  rl.close();
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
package/dist/prompt.d.ts CHANGED
@@ -1,5 +1,7 @@
1
+ export declare const DEFAULT_ROLE = "You are a workspace coding agent.";
1
2
  export declare function buildSystemPrompt(opts: {
2
3
  exec: boolean;
3
4
  mcp: boolean;
5
+ role?: string;
4
6
  }): string;
5
7
  //# sourceMappingURL=prompt.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;CACd,GAAG,MAAM,CAcT"}
1
+ {"version":3,"file":"prompt.d.ts","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY,sCAAsC,CAAC;AAEhE,wBAAgB,iBAAiB,CAAC,IAAI,EAAE;IACtC,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE,OAAO,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,GAAG,MAAM,CAgBT"}
package/dist/prompt.js CHANGED
@@ -1,12 +1,15 @@
1
+ export const DEFAULT_ROLE = "You are a workspace coding agent.";
1
2
  export function buildSystemPrompt(opts) {
2
- let systemPrompt = "You are a workspace coding agent. Prefer list_files, read_file, and grep before answering. Use write_file only when asked to change files.";
3
+ const rules = "Prefer list_files, read_file, and grep before answering. Use write_file only when asked to change files.";
4
+ const role = opts.role?.trim();
5
+ let systemPrompt = role ? `${role}\n\n${rules}` : `${DEFAULT_ROLE} ${rules}`;
3
6
  if (opts.exec) {
4
7
  systemPrompt +=
5
- " Use execute_command only when asked to run a program.";
8
+ " Use execute_command only when asked to run a program or tests.";
6
9
  }
7
10
  else {
8
11
  systemPrompt +=
9
- " You cannot run programs or tests (no execute_command). If the user asks to test, build, install, or run a command, tell them to restart with: tah --exec …";
12
+ " You cannot run programs or tests (execute_command is off). If the user asks to test, build, install, or run a command, tell them to restart without --no-exec.";
10
13
  }
11
14
  if (opts.mcp) {
12
15
  systemPrompt += " MCP tools from --mcp are also available.";
@@ -1 +1 @@
1
- {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,iBAAiB,CAAC,IAGjC;IACC,IAAI,YAAY,GACd,4IAA4I,CAAC;IAC/I,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,YAAY;YACV,wDAAwD,CAAC;IAC7D,CAAC;SAAM,CAAC;QACN,YAAY;YACV,6JAA6J,CAAC;IAClK,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,YAAY,IAAI,2CAA2C,CAAC;IAC9D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
1
+ {"version":3,"file":"prompt.js","sourceRoot":"","sources":["../src/prompt.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,YAAY,GAAG,mCAAmC,CAAC;AAEhE,MAAM,UAAU,iBAAiB,CAAC,IAIjC;IACC,MAAM,KAAK,GACT,0GAA0G,CAAC;IAC7G,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC;IAC/B,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,OAAO,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,YAAY,IAAI,KAAK,EAAE,CAAC;IAC7E,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;QACd,YAAY;YACV,iEAAiE,CAAC;IACtE,CAAC;SAAM,CAAC;QACN,YAAY;YACV,iKAAiK,CAAC;IACtK,CAAC;IACD,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;QACb,YAAY,IAAI,2CAA2C,CAAC;IAC9D,CAAC;IACD,OAAO,YAAY,CAAC;AACtB,CAAC"}
package/dist/runtime.d.ts CHANGED
@@ -1,13 +1,29 @@
1
1
  import { type Session } from "@typescript-agent-harness/agent";
2
2
  import { Runtime } from "@typescript-agent-harness/core";
3
+ import { type ApprovalPluginOptions } from "@typescript-agent-harness/permissions";
3
4
  import type { CliFlags } from "./args.js";
5
+ /** `midLine`: streamed text did not end with a newline, so log lines must break first. */
4
6
  export type StreamFlag = {
5
7
  on: boolean;
8
+ midLine: boolean;
6
9
  };
7
- export declare function bootRuntime(flags: CliFlags): Promise<{
10
+ /** ~25k tokens of English/code (CJK costs more); leaves room for tool schemas and the reply on 64k-context models. */
11
+ export declare const DEFAULT_CONTEXT_CHARS = 100000;
12
+ export declare function bootRuntime(flags: CliFlags, opts?: {
13
+ ask?: ApprovalPluginOptions["ask"];
14
+ }): Promise<{
8
15
  runtime: Runtime;
9
16
  streamed: StreamFlag;
10
17
  }>;
18
+ export declare function openChatSession(runtime: Runtime, flags: CliFlags): Promise<{
19
+ session: Session;
20
+ resumed: boolean;
21
+ }>;
22
+ /** `ref` is a session id or a number from `tah sessions`. */
23
+ export declare function openSessionByRef(runtime: Runtime, ref: string): Promise<Session>;
24
+ export declare function describeSessions(runtime: Runtime, currentId?: string): Promise<string>;
25
+ /** For `tah sessions`: reads `<cwd>/.tah/cli.db` without an LLM or API key. */
26
+ export declare function listSavedSessions(cwd: string): Promise<string>;
11
27
  export declare function runOnce(runtime: Runtime, prompt: string, quiet: boolean, streamed: StreamFlag): Promise<void>;
12
28
  export declare function runPrompt(runtime: Runtime, flags: CliFlags, streamed: StreamFlag): Promise<void>;
13
29
  export type TurnResult = {
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AACA,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAWzD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAG1C,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,OAAO,CAAA;CAAE,CAAC;AAEzC,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC,CA8FrD;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;AAID,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,UAAU,GACnB,IAAI,CAeN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,GACb,IAAI,CAON"}
1
+ {"version":3,"file":"runtime.d.ts","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"AAEA,OAAO,EAAwB,KAAK,OAAO,EAAE,MAAM,iCAAiC,CAAC;AACrF,OAAO,EAAE,OAAO,EAAE,MAAM,gCAAgC,CAAC;AAEzD,OAAO,EAGL,KAAK,qBAAqB,EAE3B,MAAM,uCAAuC,CAAC;AAS/C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAM1C,0FAA0F;AAC1F,MAAM,MAAM,UAAU,GAAG;IAAE,EAAE,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC;AAE3D,sHAAsH;AACtH,eAAO,MAAM,qBAAqB,SAAU,CAAC;AAE7C,wBAAsB,WAAW,CAC/B,KAAK,EAAE,QAAQ,EACf,IAAI,GAAE;IAAE,GAAG,CAAC,EAAE,qBAAqB,CAAC,KAAK,CAAC,CAAA;CAAO,GAChD,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,UAAU,CAAA;CAAE,CAAC,CA0HrD;AAED,wBAAsB,eAAe,CACnC,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,GACd,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAAC,CAejD;AAWD,6DAA6D;AAC7D,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAKtF;AAED,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAG5F;AAED,+EAA+E;AAC/E,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAYpE;AAED,wBAAsB,OAAO,CAC3B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,MAAM,EACd,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CAIf;AAID,wBAAsB,SAAS,CAC7B,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,QAAQ,EACf,QAAQ,EAAE,UAAU,GACnB,OAAO,CAAC,IAAI,CAAC,CAkBf;AAED,MAAM,MAAM,UAAU,GAAG;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,YAAY,EAAE,MAAM,CAAC;CACtB,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,MAAM,CAOR;AAED,wBAAgB,OAAO,CACrB,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,EACd,QAAQ,EAAE,UAAU,GACnB,IAAI,CAgBN;AAED,wBAAgB,cAAc,CAC5B,MAAM,EAAE,UAAU,EAClB,OAAO,EAAE,OAAO,EAChB,KAAK,EAAE,OAAO,GACb,IAAI,CAON"}
package/dist/runtime.js CHANGED
@@ -1,38 +1,63 @@
1
+ import { existsSync, readFileSync } from "node:fs";
1
2
  import path from "node:path";
2
3
  import { agentPlugin, SESSION } from "@typescript-agent-harness/agent";
3
4
  import { Runtime } from "@typescript-agent-harness/core";
4
5
  import { llmPlugin } from "@typescript-agent-harness/llm";
5
- import { permissionsPlugin } from "@typescript-agent-harness/permissions";
6
+ import { approvalPlugin, permissionsPlugin, } from "@typescript-agent-harness/permissions";
6
7
  import { listFilesTool, readFileTool, grepTool, toolsPlugin, writeFileTool, executeCommandTool, } from "@typescript-agent-harness/tools";
8
+ import { APPROVAL_TOOLS } from "./approve.js";
7
9
  import { buildSystemPrompt } from "./prompt.js";
8
- export async function bootRuntime(flags) {
10
+ import { formatSessions, resolveSessionRef, toRows } from "./sessions.js";
11
+ /** ~25k tokens of English/code (CJK costs more); leaves room for tool schemas and the reply on 64k-context models. */
12
+ export const DEFAULT_CONTEXT_CHARS = 100_000;
13
+ export async function bootRuntime(flags, opts = {}) {
14
+ const ask = flags.yes ? undefined : opts.ask;
15
+ const role = flags.systemFile
16
+ ? readFileSync(path.resolve(flags.systemFile), "utf8")
17
+ : undefined;
9
18
  const hasKey = Boolean(process.env.DEEPSEEK_API_KEY ?? process.env.OPENAI_API_KEY);
10
19
  if (!flags.mock && !hasKey) {
11
20
  throw new Error("tah: no DEEPSEEK_API_KEY or OPENAI_API_KEY. Set one in <cwd>/.env or pass --mock.");
12
21
  }
13
22
  const provider = flags.mock ? "mock" : "openai-compatible";
14
23
  const runtime = new Runtime({ id: "tah-cli" });
15
- const streamed = { on: false };
24
+ const streamed = { on: false, midLine: false };
16
25
  runtime.on("agent.assistant-stream", (e) => {
17
26
  const text = e.text ?? "";
18
27
  if (!text)
19
28
  return;
20
29
  streamed.on = true;
30
+ streamed.midLine = !text.endsWith("\n");
21
31
  process.stdout.write(text);
22
32
  });
33
+ const log = (line) => {
34
+ if (streamed.midLine) {
35
+ process.stdout.write("\n");
36
+ streamed.midLine = false;
37
+ }
38
+ console.log(line);
39
+ };
23
40
  if (!flags.quiet) {
24
- console.log(`[tah] cwd=${flags.cwd} llm=${provider}${flags.persist ? " persist=on" : ""}${flags.exec ? " exec=on" : ""}${flags.mcpCommand ? " mcp=on" : ""}${flags.allow.length || flags.deny.length ? " perms=on" : ""}${flags.onceMs >= 0 ? ` once=${flags.onceMs}ms` : ""}`);
41
+ log(`[tah] cwd=${flags.cwd} llm=${provider}${flags.persist ? " persist=on" : " persist=off"}${flags.exec ? " exec=on" : " exec=off"}${ask ? " approve=on" : " approve=off"} maxSteps=${flags.maxSteps}${flags.systemFile ? ` system=${flags.systemFile}` : ""}${flags.mcpCommand ? " mcp=on" : ""}${flags.allow.length || flags.deny.length ? " perms=on" : ""}${flags.onceMs >= 0 ? ` once=${flags.onceMs}ms` : ""}`);
25
42
  runtime.on("llm.request", (e) => {
26
43
  const p = e;
27
- console.log(`[llm] ${p.model ?? "?"} messages=${p.messageCount}`);
44
+ log(`[llm] ${p.model ?? "?"} messages=${p.messageCount}`);
45
+ });
46
+ runtime.on("llm.retry", (e) => {
47
+ const p = e;
48
+ log(`[llm] ${p.reason} — retry ${p.attempt} in ${(p.delayMs / 1000).toFixed(1)}s`);
28
49
  });
29
50
  runtime.on("tool.started", (e) => {
30
51
  const p = e;
31
- console.log(`[tool] ${p.tool} ...`);
52
+ log(`[tool] ${p.tool} ...`);
32
53
  });
33
54
  runtime.on("tool.finished", (e) => {
34
55
  const p = e;
35
- console.log(`[tool] ${p.tool} done`);
56
+ log(`[tool] ${p.tool} done`);
57
+ });
58
+ runtime.on("agent.context.trimmed", (e) => {
59
+ const p = e;
60
+ log(`[ctx] trimmed: ${p.droppedTurns} old turn(s) dropped, ${p.elidedToolResults} tool output(s) omitted, ${p.chars} chars sent (full history kept; /reset for a fresh session)`);
36
61
  });
37
62
  }
38
63
  if (flags.persist) {
@@ -57,6 +82,9 @@ export async function bootRuntime(flags) {
57
82
  perms.deny = flags.deny;
58
83
  runtime.use(permissionsPlugin(perms));
59
84
  }
85
+ if (ask) {
86
+ runtime.use(approvalPlugin({ tools: APPROVAL_TOOLS, ask }));
87
+ }
60
88
  runtime.use(llmPlugin({ provider })).use(toolsPlugin({ tools }));
61
89
  if (flags.mcpCommand) {
62
90
  const { mcpPlugin, stdioMcpBackend } = await import("@typescript-agent-harness/mcp");
@@ -69,9 +97,12 @@ export async function bootRuntime(flags) {
69
97
  }));
70
98
  }
71
99
  runtime.use(agentPlugin({
100
+ maxSteps: flags.maxSteps,
101
+ contextChars: DEFAULT_CONTEXT_CHARS,
72
102
  systemPrompt: buildSystemPrompt({
73
103
  exec: flags.exec,
74
104
  mcp: Boolean(flags.mcpCommand),
105
+ ...(role !== undefined ? { role } : {}),
75
106
  }),
76
107
  }));
77
108
  if (flags.onceMs >= 0) {
@@ -81,6 +112,59 @@ export async function bootRuntime(flags) {
81
112
  await runtime.start();
82
113
  return { runtime, streamed };
83
114
  }
115
+ export async function openChatSession(runtime, flags) {
116
+ const sessions = runtime.get(SESSION);
117
+ if (flags.session) {
118
+ return { session: await openSessionByRef(runtime, flags.session), resumed: true };
119
+ }
120
+ if (flags.persist) {
121
+ const listed = await sessions.list();
122
+ const latest = listed[0];
123
+ if (latest) {
124
+ const session = await sessions.get(latest.id);
125
+ if (session)
126
+ return { session, resumed: true };
127
+ }
128
+ }
129
+ const session = await sessions.create();
130
+ return { session, resumed: false };
131
+ }
132
+ async function storageOf(runtime) {
133
+ const { STORAGE } = await import("@typescript-agent-harness/storage");
134
+ const storage = runtime.context().tryGet(STORAGE);
135
+ if (!storage) {
136
+ throw new Error("sessions are only saved with persist on (drop --no-persist)");
137
+ }
138
+ return storage;
139
+ }
140
+ /** `ref` is a session id or a number from `tah sessions`. */
141
+ export async function openSessionByRef(runtime, ref) {
142
+ const id = await resolveSessionRef(await storageOf(runtime), ref);
143
+ const session = id ? await runtime.get(SESSION).get(id) : undefined;
144
+ if (!session)
145
+ throw new Error(`no session "${ref}" — run tah sessions to list them`);
146
+ return session;
147
+ }
148
+ export async function describeSessions(runtime, currentId) {
149
+ const rows = await (await storageOf(runtime)).listSessions();
150
+ return formatSessions(toRows(rows), currentId);
151
+ }
152
+ /** For `tah sessions`: reads `<cwd>/.tah/cli.db` without an LLM or API key. */
153
+ export async function listSavedSessions(cwd) {
154
+ const dbPath = path.join(cwd, ".tah/cli.db");
155
+ if (!existsSync(dbPath))
156
+ return `[tah] no saved sessions (${dbPath} does not exist)`;
157
+ const { storagePlugin } = await import("@typescript-agent-harness/storage");
158
+ const runtime = new Runtime({ id: "tah-sessions" });
159
+ runtime.use(storagePlugin({ driver: "sqlite", path: dbPath }));
160
+ await runtime.start();
161
+ try {
162
+ return await describeSessions(runtime);
163
+ }
164
+ finally {
165
+ await runtime.stop();
166
+ }
167
+ }
84
168
  export async function runOnce(runtime, prompt, quiet, streamed) {
85
169
  const session = await runtime.get(SESSION).create();
86
170
  const result = await session.run(prompt);
@@ -111,7 +195,7 @@ export function formatStatusLine(state, steps, finishReason) {
111
195
  let line = `[tah] state=${state} steps=${steps}`;
112
196
  if (finishReason === "max_steps") {
113
197
  line +=
114
- " finishReason=max_steps — LLM step limit hit; split the task or raise maxSteps";
198
+ " finishReason=max_steps — LLM step limit hit; split the task or pass --max-steps";
115
199
  }
116
200
  return line;
117
201
  }
@@ -119,6 +203,7 @@ export function endTurn(result, session, quiet, streamed) {
119
203
  if (streamed.on) {
120
204
  process.stdout.write("\n");
121
205
  streamed.on = false;
206
+ streamed.midLine = false;
122
207
  if (result.finishReason === "max_steps" && result.text) {
123
208
  console.log(`\n${result.text}`);
124
209
  }
@@ -1 +1 @@
1
- {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtime.js","sourceRoot":"","sources":["../src/runtime.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ import type { PersistedSession, StorageService } from "@typescript-agent-harness/storage";
2
+ export type SessionRow = {
3
+ id: string;
4
+ state: string;
5
+ turns: number;
6
+ updatedAt: number;
7
+ preview: string;
8
+ };
9
+ export declare function toRows(rows: PersistedSession[]): SessionRow[];
10
+ /** Newest first; the number is what `--session <n>` / `/resume <n>` accept. */
11
+ export declare function formatSessions(rows: SessionRow[], currentId?: string): string;
12
+ /** Accepts a full session id or a 1-based number from the newest-first list. */
13
+ export declare function resolveSessionRef(storage: StorageService, ref: string): Promise<string | undefined>;
14
+ //# sourceMappingURL=sessions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.d.ts","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAE1F,MAAM,MAAM,UAAU,GAAG;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,wBAAgB,MAAM,CAAC,IAAI,EAAE,gBAAgB,EAAE,GAAG,UAAU,EAAE,CAa7D;AAQD,+EAA+E;AAC/E,wBAAgB,cAAc,CAAC,IAAI,EAAE,UAAU,EAAE,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAQ7E;AAED,gFAAgF;AAChF,wBAAsB,iBAAiB,CACrC,OAAO,EAAE,cAAc,EACvB,GAAG,EAAE,MAAM,GACV,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAI7B"}
@@ -0,0 +1,38 @@
1
+ export function toRows(rows) {
2
+ return rows.map((row) => {
3
+ const messages = JSON.parse(row.messagesJson);
4
+ const userTexts = messages.flatMap((m) => (m.role === "user" ? [m.content] : []));
5
+ const first = (userTexts[0] ?? "").replace(/\s+/g, " ").trim();
6
+ return {
7
+ id: row.id,
8
+ state: row.status,
9
+ turns: userTexts.length,
10
+ updatedAt: row.updatedAt,
11
+ preview: first.length > 60 ? `${first.slice(0, 60)}…` : first,
12
+ };
13
+ });
14
+ }
15
+ function time(ms) {
16
+ const d = new Date(ms);
17
+ const p = (n) => String(n).padStart(2, "0");
18
+ return `${d.getFullYear()}-${p(d.getMonth() + 1)}-${p(d.getDate())} ${p(d.getHours())}:${p(d.getMinutes())}`;
19
+ }
20
+ /** Newest first; the number is what `--session <n>` / `/resume <n>` accept. */
21
+ export function formatSessions(rows, currentId) {
22
+ if (rows.length === 0)
23
+ return "[tah] no saved sessions";
24
+ return rows
25
+ .map((r, i) => {
26
+ const mark = r.id === currentId ? "*" : " ";
27
+ return `${mark}${String(i + 1).padStart(3)} ${r.id} ${r.state.padEnd(9)} ${String(r.turns).padStart(3)} turns ${time(r.updatedAt)} ${r.preview}`;
28
+ })
29
+ .join("\n");
30
+ }
31
+ /** Accepts a full session id or a 1-based number from the newest-first list. */
32
+ export async function resolveSessionRef(storage, ref) {
33
+ const rows = await storage.listSessions();
34
+ if (/^\d+$/.test(ref))
35
+ return rows[Number(ref) - 1]?.id;
36
+ return rows.find((r) => r.id === ref)?.id;
37
+ }
38
+ //# sourceMappingURL=sessions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sessions.js","sourceRoot":"","sources":["../src/sessions.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@typescript-agent-harness/cli",
3
- "version": "0.20.0",
3
+ "version": "0.22.0",
4
4
  "description": "typescript-agent-harness CLI (tah)",
5
5
  "type": "module",
6
6
  "bin": {
@@ -14,14 +14,14 @@
14
14
  "node": ">=22"
15
15
  },
16
16
  "dependencies": {
17
- "@typescript-agent-harness/core": "0.20.0",
18
- "@typescript-agent-harness/mcp": "0.20.0",
19
- "@typescript-agent-harness/llm": "0.20.0",
20
- "@typescript-agent-harness/permissions": "0.20.0",
21
- "@typescript-agent-harness/scheduler": "0.20.0",
22
- "@typescript-agent-harness/storage": "0.20.0",
23
- "@typescript-agent-harness/agent": "0.20.0",
24
- "@typescript-agent-harness/tools": "0.20.0"
17
+ "@typescript-agent-harness/agent": "0.22.0",
18
+ "@typescript-agent-harness/core": "0.22.0",
19
+ "@typescript-agent-harness/llm": "0.22.0",
20
+ "@typescript-agent-harness/mcp": "0.22.0",
21
+ "@typescript-agent-harness/permissions": "0.22.0",
22
+ "@typescript-agent-harness/scheduler": "0.22.0",
23
+ "@typescript-agent-harness/storage": "0.22.0",
24
+ "@typescript-agent-harness/tools": "0.22.0"
25
25
  },
26
26
  "devDependencies": {
27
27
  "@types/node": "^22.18.0",