@typescript-agent-harness/cli 0.21.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
@@ -7,6 +7,9 @@ export type CliFlags = {
7
7
  persist: boolean;
8
8
  quiet: boolean;
9
9
  exec: boolean;
10
+ yes: boolean;
11
+ systemFile: string;
12
+ session: string;
10
13
  mcpCommand: string;
11
14
  mcpArgs: string[];
12
15
  allow: string[];
@@ -1 +1 @@
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,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,CAsFlD;AAED,wBAAgB,KAAK,IAAI,MAAM,CAuB9B"}
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
@@ -8,6 +8,9 @@ export function parseArgv(argv) {
8
8
  persist: true,
9
9
  quiet: false,
10
10
  exec: true,
11
+ yes: false,
12
+ systemFile: "",
13
+ session: "",
11
14
  mcpCommand: "",
12
15
  mcpArgs: [],
13
16
  allow: [],
@@ -33,6 +36,8 @@ export function parseArgv(argv) {
33
36
  flags.exec = true;
34
37
  else if (arg === "--no-exec")
35
38
  flags.exec = false;
39
+ else if (arg === "--yes" || arg === "-y")
40
+ flags.yes = true;
36
41
  else if (arg === "--mcp") {
37
42
  const next = argv[i + 1];
38
43
  if (!next)
@@ -83,6 +88,20 @@ export function parseArgv(argv) {
83
88
  flags.maxSteps = n;
84
89
  i += 1;
85
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
+ }
86
105
  else if (arg === "--cwd") {
87
106
  const next = argv[i + 1];
88
107
  if (!next)
@@ -114,7 +133,9 @@ export function usage() {
114
133
 
115
134
  Usage:
116
135
  tah run <prompt> one-shot session
117
- tah chat continue last session if persisted; /exit /reset
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)
118
139
  tah help
119
140
 
120
141
  Flags:
@@ -125,7 +146,10 @@ Flags:
125
146
  --quiet only print assistant text
126
147
  --exec mount execute_command (on by default)
127
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)
128
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
129
153
  --mcp <cmd> mount stdio MCP tools from a child process (off by default)
130
154
  --mcp-arg <a> extra argv for --mcp (repeatable)
131
155
  --allow <tool> allowlist (repeatable; omit = all tools allowed)
package/dist/args.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"args.js","sourceRoot":"","sources":["../src/args.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,EAAE,CAAC;AAkBpC,MAAM,UAAU,SAAS,CAAC,IAAc;IACtC,MAAM,KAAK,GAAa;QACtB,OAAO,EAAE,MAAM;QACf,MAAM,EAAE,EAAE;QACV,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE;QAClB,IAAI,EAAE,KAAK;QACX,OAAO,EAAE,IAAI;QACb,KAAK,EAAE,KAAK;QACZ,IAAI,EAAE,IAAI;QACV,UAAU,EAAE,EAAE;QACd,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,EAAE;QACT,IAAI,EAAE,EAAE;QACR,MAAM,EAAE,CAAC,CAAC;QACV,QAAQ,EAAE,iBAAiB;KAC5B,CAAC;IACF,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACxC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QACpB,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS;YAAE,SAAS;QAChD,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;aACnC,IAAI,GAAG,KAAK,WAAW;YAAE,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC;aAC9C,IAAI,GAAG,KAAK,cAAc;YAAE,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC;aAClD,IAAI,GAAG,KAAK,SAAS;YAAE,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC;aAC1C,IAAI,GAAG,KAAK,QAAQ;YAAE,KAAK,CAAC,IAAI,GAAG,IAAI,CAAC;aACxC,IAAI,GAAG,KAAK,WAAW;YAAE,KAAK,CAAC,IAAI,GAAG,KAAK,CAAC;aAC5C,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;YACvD,KAAK,CAAC,UAAU,GAAG,IAAI,CAAC;YACxB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,WAAW,EAAE,CAAC;YAC/B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACzD,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;YAC3D,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1D,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YAC1E,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,CAAC;gBACpC,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;YACjE,CAAC;YACD,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;YAClB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YACjC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YACtE,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC;YACnB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;YAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;YACzB,IAAI,CAAC,IAAI;gBAAE,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;YACpD,KAAK,CAAC,GAAG,GAAG,IAAI,CAAC;YACjB,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YAC5C,IAAI,GAAG,IAAI,CAAC;QACd,CAAC;aAAM,IAAI,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACjB,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,iBAAiB,GAAG,EAAE,CAAC,CAAC;QAC1C,CAAC;IACH,CAAC;IACD,IAAI,IAAI,EAAE,CAAC;QACT,KAAK,CAAC,OAAO,GAAG,MAAM,CAAC;QACvB,KAAK,CAAC,MAAM,GAAG,EAAE,CAAC;QAClB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,KAAK,CAAC,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC;IAClC,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACvC,OAAO,KAAK,CAAC;AACf,CAAC;AAED,MAAM,UAAU,KAAK;IACnB,OAAO;;;;;;;;;;;;;;;2DAekD,iBAAiB;;;;;;CAM3E,CAAC;AACF,CAAC"}
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,42 +24,75 @@ async function main() {
19
24
  return;
20
25
  }
21
26
  const { SESSION } = await import("@typescript-agent-harness/agent");
22
- const { bootRuntime, endTurn, openChatSession, 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, resumed } = await openChatSession(runtime, flags);
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");
48
- if (resumed) {
49
- console.log(`[tah] resumed session ${session.id}`);
67
+ const lines = lineReader(rl);
68
+ let booted;
69
+ try {
70
+ booted = await bootRuntime(flags, { ask: createAsk(tty ? lines : undefined) });
50
71
  }
51
- else {
52
- console.log(`[tah] session ${session.id}`);
72
+ catch (err) {
73
+ rl.close();
74
+ throw err;
53
75
  }
76
+ const { runtime, streamed } = booted;
54
77
  const prompt = () => process.stdout.write("you> ");
55
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
+ }
56
94
  prompt();
57
- for await (const raw of rl) {
95
+ for (let raw = await lines.next(); raw !== undefined; raw = await lines.next()) {
58
96
  const line = raw.trim();
59
97
  if (!line) {
60
98
  prompt();
@@ -68,12 +106,59 @@ async function main() {
68
106
  prompt();
69
107
  continue;
70
108
  }
71
- const result = await session.run(line);
72
- 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
+ }
73
158
  prompt();
74
159
  }
75
160
  if (flags.persist && !flags.quiet) {
76
- console.log(`[tah] session ${session.id} saved — run tah chat again to continue`);
161
+ console.log(`[tah] session ${session.id} saved — continue with: tah chat --session ${session.id}`);
77
162
  }
78
163
  }
79
164
  finally {
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,5 +1,8 @@
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
8
  " Use execute_command only when asked to run a program or tests.";
@@ -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,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"}
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,10 +1,17 @@
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
  }>;
@@ -12,6 +19,11 @@ export declare function openChatSession(runtime: Runtime, flags: CliFlags): Prom
12
19
  session: Session;
13
20
  resumed: boolean;
14
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>;
15
27
  export declare function runOnce(runtime: Runtime, prompt: string, quiet: boolean, streamed: StreamFlag): Promise<void>;
16
28
  export declare function runPrompt(runtime: Runtime, flags: CliFlags, streamed: StreamFlag): Promise<void>;
17
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,CA+FrD;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,CAYjD;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" : " persist=off"}${flags.exec ? " exec=on" : " exec=off"} maxSteps=${flags.maxSteps}${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");
@@ -70,9 +98,11 @@ export async function bootRuntime(flags) {
70
98
  }
71
99
  runtime.use(agentPlugin({
72
100
  maxSteps: flags.maxSteps,
101
+ contextChars: DEFAULT_CONTEXT_CHARS,
73
102
  systemPrompt: buildSystemPrompt({
74
103
  exec: flags.exec,
75
104
  mcp: Boolean(flags.mcpCommand),
105
+ ...(role !== undefined ? { role } : {}),
76
106
  }),
77
107
  }));
78
108
  if (flags.onceMs >= 0) {
@@ -84,6 +114,9 @@ export async function bootRuntime(flags) {
84
114
  }
85
115
  export async function openChatSession(runtime, flags) {
86
116
  const sessions = runtime.get(SESSION);
117
+ if (flags.session) {
118
+ return { session: await openSessionByRef(runtime, flags.session), resumed: true };
119
+ }
87
120
  if (flags.persist) {
88
121
  const listed = await sessions.list();
89
122
  const latest = listed[0];
@@ -96,6 +129,42 @@ export async function openChatSession(runtime, flags) {
96
129
  const session = await sessions.create();
97
130
  return { session, resumed: false };
98
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
+ }
99
168
  export async function runOnce(runtime, prompt, quiet, streamed) {
100
169
  const session = await runtime.get(SESSION).create();
101
170
  const result = await session.run(prompt);
@@ -134,6 +203,7 @@ export function endTurn(result, session, quiet, streamed) {
134
203
  if (streamed.on) {
135
204
  process.stdout.write("\n");
136
205
  streamed.on = false;
206
+ streamed.midLine = false;
137
207
  if (result.finishReason === "max_steps" && result.text) {
138
208
  console.log(`\n${result.text}`);
139
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.21.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/agent": "0.21.0",
18
- "@typescript-agent-harness/llm": "0.21.0",
19
- "@typescript-agent-harness/scheduler": "0.21.0",
20
- "@typescript-agent-harness/storage": "0.21.0",
21
- "@typescript-agent-harness/tools": "0.21.0",
22
- "@typescript-agent-harness/core": "0.21.0",
23
- "@typescript-agent-harness/mcp": "0.21.0",
24
- "@typescript-agent-harness/permissions": "0.21.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",