@patze/code-cli 0.10.6 → 0.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/CHANGELOG.md +26 -0
  2. package/VERSION +1 -1
  3. package/bin/patze.mjs +0 -0
  4. package/dist/backend/agent-trace.d.ts +14 -0
  5. package/dist/backend/agent-trace.d.ts.map +1 -0
  6. package/dist/backend/agent-trace.js +52 -0
  7. package/dist/backend/agent-trace.js.map +1 -0
  8. package/dist/backend/execute-client.d.ts +51 -0
  9. package/dist/backend/execute-client.d.ts.map +1 -0
  10. package/dist/backend/execute-client.js +140 -0
  11. package/dist/backend/execute-client.js.map +1 -0
  12. package/dist/backend/run-record.d.ts +16 -0
  13. package/dist/backend/run-record.d.ts.map +1 -0
  14. package/dist/backend/run-record.js +43 -0
  15. package/dist/backend/run-record.js.map +1 -0
  16. package/dist/backend/run-stream-client.d.ts +36 -0
  17. package/dist/backend/run-stream-client.d.ts.map +1 -0
  18. package/dist/backend/run-stream-client.js +109 -0
  19. package/dist/backend/run-stream-client.js.map +1 -0
  20. package/dist/backend/session-client.d.ts +17 -0
  21. package/dist/backend/session-client.d.ts.map +1 -0
  22. package/dist/backend/session-client.js +54 -0
  23. package/dist/backend/session-client.js.map +1 -0
  24. package/dist/backend/sse-parse.d.ts +14 -0
  25. package/dist/backend/sse-parse.d.ts.map +1 -0
  26. package/dist/backend/sse-parse.js +63 -0
  27. package/dist/backend/sse-parse.js.map +1 -0
  28. package/dist/cli/commands/status-format.d.ts.map +1 -1
  29. package/dist/cli/commands/status-format.js +11 -0
  30. package/dist/cli/commands/status-format.js.map +1 -1
  31. package/dist/cli/interactive/agent-execute-turn.d.ts +22 -0
  32. package/dist/cli/interactive/agent-execute-turn.d.ts.map +1 -0
  33. package/dist/cli/interactive/agent-execute-turn.js +114 -0
  34. package/dist/cli/interactive/agent-execute-turn.js.map +1 -0
  35. package/dist/cli/interactive/agent-stream-format.d.ts +16 -0
  36. package/dist/cli/interactive/agent-stream-format.d.ts.map +1 -0
  37. package/dist/cli/interactive/agent-stream-format.js +87 -0
  38. package/dist/cli/interactive/agent-stream-format.js.map +1 -0
  39. package/dist/cli/interactive/agent-turn-context.d.ts +11 -0
  40. package/dist/cli/interactive/agent-turn-context.d.ts.map +1 -0
  41. package/dist/cli/interactive/agent-turn-context.js +57 -0
  42. package/dist/cli/interactive/agent-turn-context.js.map +1 -0
  43. package/dist/cli/interactive/agent-turn-format.d.ts +4 -3
  44. package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -1
  45. package/dist/cli/interactive/agent-turn-format.js +38 -39
  46. package/dist/cli/interactive/agent-turn-format.js.map +1 -1
  47. package/dist/cli/interactive/agent-turn.d.ts +4 -1
  48. package/dist/cli/interactive/agent-turn.d.ts.map +1 -1
  49. package/dist/cli/interactive/agent-turn.js +66 -6
  50. package/dist/cli/interactive/agent-turn.js.map +1 -1
  51. package/dist/cli/interactive/line-editor.d.ts.map +1 -1
  52. package/dist/cli/interactive/line-editor.js +17 -8
  53. package/dist/cli/interactive/line-editor.js.map +1 -1
  54. package/dist/cli/interactive/session.d.ts +3 -0
  55. package/dist/cli/interactive/session.d.ts.map +1 -1
  56. package/dist/cli/interactive/session.js +8 -0
  57. package/dist/cli/interactive/session.js.map +1 -1
  58. package/dist/cli/interactive/shell.d.ts.map +1 -1
  59. package/dist/cli/interactive/shell.js +13 -5
  60. package/dist/cli/interactive/shell.js.map +1 -1
  61. package/dist/cli/interactive/slash-dispatch.d.ts +4 -1
  62. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
  63. package/dist/cli/interactive/slash-dispatch.js +22 -7
  64. package/dist/cli/interactive/slash-dispatch.js.map +1 -1
  65. package/dist/cli/interactive/transcript-format.d.ts +3 -0
  66. package/dist/cli/interactive/transcript-format.d.ts.map +1 -0
  67. package/dist/cli/interactive/transcript-format.js +29 -0
  68. package/dist/cli/interactive/transcript-format.js.map +1 -0
  69. package/docs/known-limitations.md +4 -3
  70. package/package.json +1 -1
@@ -0,0 +1,14 @@
1
+ export type SseEvent = {
2
+ event: string;
3
+ data: string;
4
+ };
5
+ export type SseHandlers = {
6
+ onEvent: (event: SseEvent) => void;
7
+ };
8
+ /**
9
+ * Incrementally parse text/event-stream frames from a fetch Response body.
10
+ */
11
+ export declare function consumeSseResponse(response: Response, handlers: SseHandlers, options?: {
12
+ signal?: AbortSignal;
13
+ }): Promise<void>;
14
+ //# sourceMappingURL=sse-parse.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-parse.d.ts","sourceRoot":"","sources":["../../src/backend/sse-parse.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;CACb,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,OAAO,EAAE,CAAC,KAAK,EAAE,QAAQ,KAAK,IAAI,CAAA;CACnC,CAAA;AAED;;GAEG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,QAAQ,EAClB,QAAQ,EAAE,WAAW,EACrB,OAAO,GAAE;IAAE,MAAM,CAAC,EAAE,WAAW,CAAA;CAAO,GACrC,OAAO,CAAC,IAAI,CAAC,CA4Df"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Incrementally parse text/event-stream frames from a fetch Response body.
3
+ */
4
+ export async function consumeSseResponse(response, handlers, options = {}) {
5
+ if (!response.body) {
6
+ throw new Error("SSE response has no body");
7
+ }
8
+ const reader = response.body.getReader();
9
+ const decoder = new TextDecoder();
10
+ let buffer = "";
11
+ let eventName = "message";
12
+ let dataLines = [];
13
+ const flush = () => {
14
+ if (dataLines.length === 0) {
15
+ eventName = "message";
16
+ return;
17
+ }
18
+ handlers.onEvent({
19
+ event: eventName,
20
+ data: dataLines.join("\n"),
21
+ });
22
+ eventName = "message";
23
+ dataLines = [];
24
+ };
25
+ try {
26
+ while (true) {
27
+ if (options.signal?.aborted) {
28
+ throw new DOMException("Aborted", "AbortError");
29
+ }
30
+ const { done, value } = await reader.read();
31
+ if (done) {
32
+ break;
33
+ }
34
+ buffer += decoder.decode(value, { stream: true });
35
+ let newlineIndex = buffer.indexOf("\n");
36
+ while (newlineIndex >= 0) {
37
+ let line = buffer.slice(0, newlineIndex);
38
+ buffer = buffer.slice(newlineIndex + 1);
39
+ if (line.endsWith("\r")) {
40
+ line = line.slice(0, -1);
41
+ }
42
+ if (line === "") {
43
+ flush();
44
+ }
45
+ else if (line.startsWith(":")) {
46
+ // comment
47
+ }
48
+ else if (line.startsWith("event:")) {
49
+ eventName = line.slice(6).trim() || "message";
50
+ }
51
+ else if (line.startsWith("data:")) {
52
+ dataLines.push(line.slice(5).trimStart());
53
+ }
54
+ newlineIndex = buffer.indexOf("\n");
55
+ }
56
+ }
57
+ flush();
58
+ }
59
+ finally {
60
+ reader.releaseLock();
61
+ }
62
+ }
63
+ //# sourceMappingURL=sse-parse.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sse-parse.js","sourceRoot":"","sources":["../../src/backend/sse-parse.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CACtC,QAAkB,EAClB,QAAqB,EACrB,UAAoC,EAAE;IAEtC,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAA;IAC7C,CAAC;IAED,MAAM,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,CAAA;IACxC,MAAM,OAAO,GAAG,IAAI,WAAW,EAAE,CAAA;IACjC,IAAI,MAAM,GAAG,EAAE,CAAA;IACf,IAAI,SAAS,GAAG,SAAS,CAAA;IACzB,IAAI,SAAS,GAAa,EAAE,CAAA;IAE5B,MAAM,KAAK,GAAG,GAAS,EAAE;QACvB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3B,SAAS,GAAG,SAAS,CAAA;YACrB,OAAM;QACR,CAAC;QACD,QAAQ,CAAC,OAAO,CAAC;YACf,KAAK,EAAE,SAAS;YAChB,IAAI,EAAE,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC;SAC3B,CAAC,CAAA;QACF,SAAS,GAAG,SAAS,CAAA;QACrB,SAAS,GAAG,EAAE,CAAA;IAChB,CAAC,CAAA;IAED,IAAI,CAAC;QACH,OAAO,IAAI,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,CAAC;gBAC5B,MAAM,IAAI,YAAY,CAAC,SAAS,EAAE,YAAY,CAAC,CAAA;YACjD,CAAC;YACD,MAAM,EAAE,IAAI,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,CAAA;YAC3C,IAAI,IAAI,EAAE,CAAC;gBACT,MAAK;YACP,CAAC;YACD,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAA;YAEjD,IAAI,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACvC,OAAO,YAAY,IAAI,CAAC,EAAE,CAAC;gBACzB,IAAI,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,YAAY,CAAC,CAAA;gBACxC,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAA;gBACvC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;oBACxB,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAA;gBAC1B,CAAC;gBAED,IAAI,IAAI,KAAK,EAAE,EAAE,CAAC;oBAChB,KAAK,EAAE,CAAA;gBACT,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;oBAChC,UAAU;gBACZ,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;oBACrC,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,SAAS,CAAA;gBAC/C,CAAC;qBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;oBACpC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;gBAC3C,CAAC;gBAED,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAA;YACrC,CAAC;QACH,CAAC;QACD,KAAK,EAAE,CAAA;IACT,CAAC;YAAS,CAAC;QACT,MAAM,CAAC,WAAW,EAAE,CAAA;IACtB,CAAC;AACH,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"status-format.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"AAEA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAMpF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,cAAgC,GAAG,cAAc,CAiC9G;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,cAAc,CAAC,CAqBzB"}
1
+ {"version":3,"file":"status-format.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAMpF,MAAM,MAAM,cAAc,GAAG;IAC3B,KAAK,EAAE,MAAM,EAAE,CAAA;IACf,SAAS,EAAE,OAAO,CAAA;IAClB,QAAQ,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,GAAE,cAAgC,GAAG,cAAc,CAiC9G;AAED,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAO,GAChC,OAAO,CAAC,cAAc,CAAC,CAgCzB"}
@@ -1,4 +1,5 @@
1
1
  import { PatzeBackendClient } from "../../backend/client.js";
2
+ import { resolvePatzeCodeSessionUser } from "../../backend/session-client.js";
2
3
  import { isAuthConfigured } from "../../backend/auth.js";
3
4
  import { loadConfig, maskSecret } from "../../config/config.js";
4
5
  import { resolveApproval } from "../../runtime/approvals.js";
@@ -51,6 +52,16 @@ export async function buildStatusSnapshot(cwd, options = {}) {
51
52
  snapshot.lines.push(`${"check".padEnd(14)} ${probe.ok ? "api reachable" : `failed (${probe.message})`}`);
52
53
  if (!probe.ok) {
53
54
  snapshot.exitCode = 1;
55
+ return snapshot;
56
+ }
57
+ if (!config.userId) {
58
+ const session = await resolvePatzeCodeSessionUser({ config });
59
+ if (session.ok) {
60
+ snapshot.lines.push(`${"user".padEnd(14)} ${session.userId} (from session)`);
61
+ }
62
+ else {
63
+ snapshot.lines.push(`${"session".padEnd(14)} ${session.message}`);
64
+ }
54
65
  }
55
66
  return snapshot;
56
67
  }
@@ -1 +1 @@
1
- {"version":3,"file":"status-format.js","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"status-format.js","sourceRoot":"","sources":["../../../src/cli/commands/status-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,22 @@
1
+ import type { FetchLike } from "../../backend/preview-client.js";
2
+ import type { PatzeCodeRunRecord } from "../../backend/run-record.js";
3
+ import type { ResolvedConfig } from "../../config/config.js";
4
+ export type ExecuteTurnOptions = {
5
+ cwd: string;
6
+ config: ResolvedConfig;
7
+ objective: string;
8
+ previewArtifactDigest: string;
9
+ fetchImpl?: FetchLike;
10
+ onTranscriptLine?: (line: string) => void;
11
+ };
12
+ export type ExecuteTurnResult = {
13
+ ok: boolean;
14
+ streamed: boolean;
15
+ run: PatzeCodeRunRecord | null;
16
+ exitCode: number;
17
+ lines: string[];
18
+ };
19
+ export declare function isCliExecuteEnabled(): boolean;
20
+ export declare function isExecuteAuthReady(config: ResolvedConfig): boolean;
21
+ export declare function runExecuteTurn(options: ExecuteTurnOptions): Promise<ExecuteTurnResult>;
22
+ //# sourceMappingURL=agent-execute-turn.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-execute-turn.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-execute-turn.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iCAAiC,CAAA;AAGhE,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AACrE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAI5D,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,EAAE,MAAM,CAAA;IACjB,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC1C,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,EAAE,EAAE,OAAO,CAAA;IACX,QAAQ,EAAE,OAAO,CAAA;IACjB,GAAG,EAAE,kBAAkB,GAAG,IAAI,CAAA;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,wBAAgB,mBAAmB,IAAI,OAAO,CAM7C;AAED,wBAAgB,kBAAkB,CAAC,MAAM,EAAE,cAAc,GAAG,OAAO,CAElE;AAED,wBAAsB,cAAc,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,iBAAiB,CAAC,CA0G5F"}
@@ -0,0 +1,114 @@
1
+ import { PatzeBackendClient } from "../../backend/client.js";
2
+ import { postUserTaskExecute } from "../../backend/execute-client.js";
3
+ import { buildPreviewPayload } from "../../backend/preview-payload.js";
4
+ import { streamPatzeCodeRun } from "../../backend/run-stream-client.js";
5
+ import { AgentStreamTranscript } from "./agent-stream-format.js";
6
+ import { formatAgentReply } from "./transcript-format.js";
7
+ export function isCliExecuteEnabled() {
8
+ const raw = process.env.PATZE_CODE_CLI_EXECUTE;
9
+ if (raw === "0" || raw === "false" || raw === "off") {
10
+ return false;
11
+ }
12
+ return true;
13
+ }
14
+ export function isExecuteAuthReady(config) {
15
+ return Boolean(config.api && config.token && config.userId);
16
+ }
17
+ export async function runExecuteTurn(options) {
18
+ const sink = {
19
+ lines: [],
20
+ emit(lines) {
21
+ for (const line of lines) {
22
+ this.lines.push(line);
23
+ options.onTranscriptLine?.(line);
24
+ }
25
+ },
26
+ };
27
+ const client = new PatzeBackendClient(options.config);
28
+ const payload = buildPreviewPayload({
29
+ objective: options.objective,
30
+ cwd: options.cwd,
31
+ config: options.config,
32
+ });
33
+ const transcript = new AgentStreamTranscript(sink);
34
+ transcript.emitRunPhase("queued");
35
+ const execute = await postUserTaskExecute({
36
+ apiBase: client.baseUrl,
37
+ headers: client.buildHeaders(),
38
+ payload,
39
+ previewArtifactDigest: options.previewArtifactDigest,
40
+ fetchImpl: options.fetchImpl,
41
+ });
42
+ if (!execute.ok) {
43
+ const message = execute.kind === "auth"
44
+ ? `${execute.message} — ensure user id is set (/login or /status --check).`
45
+ : execute.message;
46
+ sink.emit(formatAgentReply(`Execute failed: ${message}`));
47
+ return { ok: false, streamed: sink.lines.length > 0, run: null, exitCode: 1, lines: sink.lines };
48
+ }
49
+ if (execute.kind === "completed") {
50
+ transcript.emitRunPhase(execute.response.phase ?? execute.response.status);
51
+ const run = {
52
+ run_id: execute.response.run_id,
53
+ status: execute.response.status,
54
+ phase: execute.response.phase ?? execute.response.status,
55
+ error_code: execute.response.error_code,
56
+ agent_output_preview: execute.response.agent_output_preview ?? "",
57
+ outcome_summary: execute.response.outcome_summary ?? "",
58
+ agent_model: execute.response.agent_model ?? "",
59
+ finding_codes: execute.response.finding_codes,
60
+ deliverable_paths: execute.response.deliverable_paths ?? [],
61
+ agent_trace: execute.response.agent_trace ?? [],
62
+ };
63
+ for (const item of run.agent_trace) {
64
+ transcript.emitTraceItem(item);
65
+ }
66
+ transcript.emitFinalRun(run);
67
+ const ok = run.phase === "completed" || run.status === "completed";
68
+ return {
69
+ ok,
70
+ streamed: sink.lines.length > 0,
71
+ run,
72
+ exitCode: ok ? 0 : 1,
73
+ lines: sink.lines,
74
+ };
75
+ }
76
+ const runId = execute.response.run_id;
77
+ transcript.emitRunPhase(execute.response.phase, execute.response.status);
78
+ const holder = { run: null };
79
+ await new Promise((resolvePromise) => {
80
+ void streamPatzeCodeRun({
81
+ apiBase: client.baseUrl,
82
+ headers: client.buildHeaders(),
83
+ runId,
84
+ fetchImpl: options.fetchImpl,
85
+ handlers: {
86
+ onStatus: (event) => {
87
+ transcript.emitRunPhase(event.phase, event.status);
88
+ },
89
+ onTrace: (event) => {
90
+ transcript.emitTraceItem(event.item);
91
+ },
92
+ onComplete: (run) => {
93
+ holder.run = run;
94
+ transcript.emitFinalRun(run);
95
+ resolvePromise();
96
+ },
97
+ onError: () => {
98
+ resolvePromise();
99
+ },
100
+ },
101
+ });
102
+ });
103
+ const finalRun = holder.run;
104
+ const ok = finalRun !== null &&
105
+ (finalRun.phase === "completed" || finalRun.status === "completed");
106
+ return {
107
+ ok,
108
+ streamed: sink.lines.length > 0,
109
+ run: finalRun,
110
+ exitCode: ok ? 0 : 1,
111
+ lines: sink.lines,
112
+ };
113
+ }
114
+ //# sourceMappingURL=agent-execute-turn.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-execute-turn.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-execute-turn.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import type { PatzeCodeRunRecord } from "../../backend/run-record.js";
2
+ import { formatTranscriptEntry } from "./transcript-format.js";
3
+ export type StreamTranscriptSink = {
4
+ emit: (lines: string[]) => void;
5
+ };
6
+ export declare class AgentStreamTranscript {
7
+ private readonly sink;
8
+ private readonly seenTraceIds;
9
+ private lastPhase;
10
+ constructor(sink: StreamTranscriptSink);
11
+ emitRunPhase(phase: string, status?: string): void;
12
+ emitTraceItem(item: unknown): void;
13
+ emitFinalRun(run: PatzeCodeRunRecord | null): void;
14
+ }
15
+ export { formatTranscriptEntry };
16
+ //# sourceMappingURL=agent-stream-format.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-stream-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-stream-format.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAA;AAErE,OAAO,EAAoB,qBAAqB,EAAE,MAAM,wBAAwB,CAAA;AAEhF,MAAM,MAAM,oBAAoB,GAAG;IACjC,IAAI,EAAE,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,IAAI,CAAA;CAChC,CAAA;AAED,qBAAa,qBAAqB;IAIpB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAHjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,SAAS,CAAK;gBAEO,IAAI,EAAE,oBAAoB;IAEvD,YAAY,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI;IASlD,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,IAAI;IAkClC,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,GAAG,IAAI;CA2BnD;AAwBD,OAAO,EAAE,qBAAqB,EAAE,CAAA"}
@@ -0,0 +1,87 @@
1
+ import { excerptTraceText, isIgnorableStatusTrace, parseAgentTraceItem, } from "../../backend/agent-trace.js";
2
+ import { isTerminalRunPhase, pickRunReplyText } from "../../backend/run-record.js";
3
+ import { formatAgentReply, formatTranscriptEntry } from "./transcript-format.js";
4
+ export class AgentStreamTranscript {
5
+ sink;
6
+ seenTraceIds = new Set();
7
+ lastPhase = "";
8
+ constructor(sink) {
9
+ this.sink = sink;
10
+ }
11
+ emitRunPhase(phase, status) {
12
+ const label = phase || status || "running";
13
+ if (label === this.lastPhase) {
14
+ return;
15
+ }
16
+ this.lastPhase = label;
17
+ this.sink.emit(formatRoleLine("run", `${label}${status && status !== label ? ` · ${status}` : ""}`));
18
+ }
19
+ emitTraceItem(item) {
20
+ const event = parseAgentTraceItem(item);
21
+ if (!event) {
22
+ return;
23
+ }
24
+ if (event.kind === "status" && isIgnorableStatusTrace(event)) {
25
+ return;
26
+ }
27
+ const shouldEmit = event.kind === "tool" ||
28
+ event.kind === "task" ||
29
+ (event.kind === "thinking" && !this.seenTraceIds.has(event.id)) ||
30
+ (event.kind === "text" && event.status === "done") ||
31
+ (event.kind === "status" && !isIgnorableStatusTrace(event));
32
+ if (!shouldEmit) {
33
+ return;
34
+ }
35
+ this.seenTraceIds.add(event.id);
36
+ const role = event.kind === "tool" ? "tool" : event.kind === "status" || event.kind === "task" ? "run" : "agent";
37
+ const text = formatTraceLine(event);
38
+ if (!text) {
39
+ return;
40
+ }
41
+ if (role === "agent") {
42
+ this.sink.emit(formatAgentReply(text));
43
+ return;
44
+ }
45
+ this.sink.emit(formatRoleLine(role, text));
46
+ }
47
+ emitFinalRun(run) {
48
+ if (!run) {
49
+ this.sink.emit(formatAgentReply("Run finished but no record was returned."));
50
+ return;
51
+ }
52
+ if (isTerminalRunPhase(run.phase) && run.phase !== "completed") {
53
+ this.sink.emit(formatAgentReply(pickRunReplyText(run)));
54
+ return;
55
+ }
56
+ const reply = pickRunReplyText(run);
57
+ if (reply) {
58
+ this.sink.emit(formatAgentReply(reply));
59
+ }
60
+ if (run.deliverable_paths.length > 0) {
61
+ this.sink.emit(formatRoleLine("run", `deliverables · ${run.deliverable_paths.slice(0, 3).join(", ")}${run.deliverable_paths.length > 3 ? "…" : ""}`));
62
+ }
63
+ this.sink.emit(formatRoleLine("run", "no auto-apply · review with /diff when a patch is ready"));
64
+ }
65
+ }
66
+ function formatRoleLine(role, text) {
67
+ const label = role.padEnd(7);
68
+ return [`${label}${text}`];
69
+ }
70
+ function formatTraceLine(event) {
71
+ const detail = event.detail?.trim() ?? "";
72
+ if (event.kind === "tool") {
73
+ return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
74
+ }
75
+ if (event.kind === "thinking") {
76
+ return detail ? excerptTraceText(detail, 160) : event.title;
77
+ }
78
+ if (event.kind === "text") {
79
+ return detail ? excerptTraceText(detail, 800) : event.title;
80
+ }
81
+ if (event.kind === "task") {
82
+ return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
83
+ }
84
+ return detail ? `${event.title} · ${excerptTraceText(detail, 120)}` : event.title;
85
+ }
86
+ export { formatTranscriptEntry };
87
+ //# sourceMappingURL=agent-stream-format.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-stream-format.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-stream-format.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,11 @@
1
+ import type { WorkspaceInspectResult } from "../../runtime/inspect.js";
2
+ export type ContextTurnInput = {
3
+ text: string;
4
+ cwd: string;
5
+ workspaceRoot: string;
6
+ inspect: WorkspaceInspectResult;
7
+ authReady: boolean;
8
+ };
9
+ /** Local, read-only answers from workspace inspect — no canned deflection. */
10
+ export declare function buildContextualReply(input: ContextTurnInput): string | null;
11
+ //# sourceMappingURL=agent-turn-context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-turn-context.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-context.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,0BAA0B,CAAA;AAGtE,MAAM,MAAM,gBAAgB,GAAG;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,GAAG,EAAE,MAAM,CAAA;IACX,aAAa,EAAE,MAAM,CAAA;IACrB,OAAO,EAAE,sBAAsB,CAAA;IAC/B,SAAS,EAAE,OAAO,CAAA;CACnB,CAAA;AAyBD,8EAA8E;AAC9E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,GAAG,IAAI,CA0C3E"}
@@ -0,0 +1,57 @@
1
+ import { inputLooksThai } from "./agent-turn-classify.js";
2
+ function thai(text) {
3
+ return inputLooksThai(text);
4
+ }
5
+ function asksWorkspaceLocation(text) {
6
+ return (/(folder|directory|cwd|pwd|working dir|current dir|where am i|which folder|what folder|current workspace)/i.test(text) ||
7
+ /(โฟลเดอ|ไดเรก|อยู่ใน|ที่ไหน|working directory)/i.test(text));
8
+ }
9
+ function asksWorkspaceContents(text) {
10
+ const hasFileCue = /(ไฟล์|files?|empty|blank|ว่าง)/i.test(text);
11
+ const hasCountCue = /(have|any|count|scan|inspect|มี|กี่|ว่าง|อะไร|บ้าง)/i.test(text);
12
+ return hasFileCue && hasCountCue;
13
+ }
14
+ function asksAuthStatus(text) {
15
+ return /(auth|login|logged in|เชื่อม|ล็อกอิน|token)/i.test(text);
16
+ }
17
+ /** Local, read-only answers from workspace inspect — no canned deflection. */
18
+ export function buildContextualReply(input) {
19
+ const { text, cwd, workspaceRoot, inspect, authReady } = input;
20
+ const isThai = thai(text);
21
+ if (asksWorkspaceContents(text)) {
22
+ const summary = isThai
23
+ ? `workspace นี้มี ${inspect.fileCount} ไฟล์ · ${inspect.directoryCount} โฟลเดอร์`
24
+ : `This workspace has ${inspect.fileCount} files and ${inspect.directoryCount} directories.`;
25
+ if (inspect.fileCount === 0 && inspect.directoryCount === 0) {
26
+ return isThai
27
+ ? `${summary} — โฟลเดอร์ว่างครับ พิมพ์งาน coding หรือ /inspect ได้`
28
+ : `${summary} — folder is empty. Describe a coding task or run /inspect.`;
29
+ }
30
+ if (inspect.samplePaths.length > 0) {
31
+ const sample = inspect.samplePaths.slice(0, 3).join(", ");
32
+ return `${summary}\n${isThai ? "ตัวอย่าง" : "sample"}: ${sample}`;
33
+ }
34
+ return summary;
35
+ }
36
+ if (asksWorkspaceLocation(text)) {
37
+ if (cwd === workspaceRoot) {
38
+ return isThai
39
+ ? `ตอนนี้อยู่ที่ ${workspaceRoot} (workspace root · cwd เดียวกัน)`
40
+ : `You are in ${workspaceRoot} (workspace root and cwd).`;
41
+ }
42
+ return isThai
43
+ ? `cwd: ${cwd}\nworkspace root: ${workspaceRoot}`
44
+ : `cwd: ${cwd}\nworkspace root: ${workspaceRoot}`;
45
+ }
46
+ if (asksAuthStatus(text)) {
47
+ return isThai
48
+ ? authReady
49
+ ? "auth พร้อมแล้ว — preview จาก server ใช้ได้ (ยัง read-only · ไม่ auto-apply)"
50
+ : "auth ยังไม่ครบ — ใช้ /login หรือ PATZE_CODE_* แล้ว /status --check"
51
+ : authReady
52
+ ? "Auth is ready — server preview works (read-only · no auto-apply)."
53
+ : "Auth incomplete — run /login or set PATZE_CODE_* then /status --check.";
54
+ }
55
+ return null;
56
+ }
57
+ //# sourceMappingURL=agent-turn-context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-turn-context.js","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-context.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AAUzD,SAAS,IAAI,CAAC,IAAY;IACxB,OAAO,cAAc,CAAC,IAAI,CAAC,CAAA;AAC7B,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,OAAO,CACL,2GAA2G,CAAC,IAAI,CAC9G,IAAI,CACL;QACD,iDAAiD,CAAC,IAAI,CAAC,IAAI,CAAC,CAC7D,CAAA;AACH,CAAC;AAED,SAAS,qBAAqB,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,iCAAiC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAC/D,MAAM,WAAW,GAAG,sDAAsD,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrF,OAAO,UAAU,IAAI,WAAW,CAAA;AAClC,CAAC;AAED,SAAS,cAAc,CAAC,IAAY;IAClC,OAAO,8CAA8C,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAClE,CAAC;AAED,8EAA8E;AAC9E,MAAM,UAAU,oBAAoB,CAAC,KAAuB;IAC1D,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,aAAa,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAC9D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAA;IAEzB,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,MAAM,OAAO,GAAG,MAAM;YACpB,CAAC,CAAC,mBAAmB,OAAO,CAAC,SAAS,WAAW,OAAO,CAAC,cAAc,WAAW;YAClF,CAAC,CAAC,sBAAsB,OAAO,CAAC,SAAS,cAAc,OAAO,CAAC,cAAc,eAAe,CAAA;QAC9F,IAAI,OAAO,CAAC,SAAS,KAAK,CAAC,IAAI,OAAO,CAAC,cAAc,KAAK,CAAC,EAAE,CAAC;YAC5D,OAAO,MAAM;gBACX,CAAC,CAAC,GAAG,OAAO,uDAAuD;gBACnE,CAAC,CAAC,GAAG,OAAO,6DAA6D,CAAA;QAC7E,CAAC;QACD,IAAI,OAAO,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACzD,OAAO,GAAG,OAAO,KAAK,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAA;QACnE,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;QAChC,IAAI,GAAG,KAAK,aAAa,EAAE,CAAC;YAC1B,OAAO,MAAM;gBACX,CAAC,CAAC,iBAAiB,aAAa,kCAAkC;gBAClE,CAAC,CAAC,cAAc,aAAa,4BAA4B,CAAA;QAC7D,CAAC;QACD,OAAO,MAAM;YACX,CAAC,CAAC,QAAQ,GAAG,qBAAqB,aAAa,EAAE;YACjD,CAAC,CAAC,QAAQ,GAAG,qBAAqB,aAAa,EAAE,CAAA;IACrD,CAAC;IAED,IAAI,cAAc,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,OAAO,MAAM;YACX,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,6EAA6E;gBAC/E,CAAC,CAAC,oEAAoE;YACxE,CAAC,CAAC,SAAS;gBACT,CAAC,CAAC,mEAAmE;gBACrE,CAAC,CAAC,wEAAwE,CAAA;IAChF,CAAC;IAED,OAAO,IAAI,CAAA;AACb,CAAC"}
@@ -16,9 +16,10 @@ export type ConversationTurnContext = {
16
16
  permissionMode: string;
17
17
  permissionLabel: string;
18
18
  };
19
- /** Short reply for meta/chat prompts — no server preview, no fake “Thinking”. */
20
- export declare function formatConversationTurnLines(objective: string, context: ConversationTurnContext): string[];
21
- /** Compact task turn one screen, no AI-slop sections. Details live in /context. */
19
+ /** Short reply for meta/chat prompts — uses local context when available. */
20
+ export declare function formatConversationTurnLines(objective: string, reply: string): string[];
21
+ export declare function resolveConversationReply(objective: string, context: ConversationTurnContext, contextualReply: string | null): string;
22
+ /** Compact task turn — agent voice, one screen. Details live in /context. */
22
23
  export declare function formatAgentTurnLines(model: AgentTurnModel): string[];
23
24
  /** Verbose formatter kept for /context and tests that need full preview fields. */
24
25
  export declare function formatAgentTurnVerboseLines(model: AgentTurnModel): string[];
@@ -1 +1 @@
1
- {"version":3,"file":"agent-turn-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAG7D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9B,aAAa,EAAE,mBAAmB,CAAA;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAoBD,iFAAiF;AACjF,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,GAC/B,MAAM,EAAE,CAQV;AA6BD,qFAAqF;AACrF,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CA8BpE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAY3E"}
1
+ {"version":3,"file":"agent-turn-format.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/agent-turn-format.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACxD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAA;AAI7D,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAA;IACjB,cAAc,EAAE,cAAc,CAAA;IAC9B,UAAU,EAAE,QAAQ,GAAG,OAAO,CAAA;IAC9B,aAAa,EAAE,mBAAmB,CAAA;IAClC,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;IACvB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,SAAS,EAAE,OAAO,CAAA;IAClB,gBAAgB,EAAE,KAAK,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,uBAAuB,GAAG;IACpC,SAAS,EAAE,OAAO,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,eAAe,EAAE,MAAM,CAAA;CACxB,CAAA;AAED,6EAA6E;AAC7E,wBAAgB,2BAA2B,CACzC,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,MAAM,GACZ,MAAM,EAAE,CAEV;AA6BD,wBAAgB,wBAAwB,CACtC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,uBAAuB,EAChC,eAAe,EAAE,MAAM,GAAG,IAAI,GAC7B,MAAM,CAKR;AAED,6EAA6E;AAC7E,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CA0CpE;AAED,mFAAmF;AACnF,wBAAgB,2BAA2B,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,EAAE,CAY3E"}
@@ -1,28 +1,10 @@
1
1
  import { formatInspectSummaryCompact } from "../commands/inspect-format.js";
2
2
  import { formatPreviewResponseLines } from "../commands/plan-format.js";
3
3
  import { inputLooksThai } from "./agent-turn-classify.js";
4
- function useColor() {
5
- return !process.env.NO_COLOR;
6
- }
7
- function dim(text) {
8
- if (!useColor()) {
9
- return text;
10
- }
11
- return `\x1b[2m${text}\x1b[0m`;
12
- }
13
- function shortDigest(value) {
14
- if (value.length <= 14) {
15
- return value;
16
- }
17
- return `${value.slice(0, 8)}…${value.slice(-4)}`;
18
- }
19
- /** Short reply for meta/chat prompts — no server preview, no fake “Thinking”. */
20
- export function formatConversationTurnLines(objective, context) {
21
- const thai = inputLooksThai(objective);
22
- const reply = pickConversationReply(objective, thai, context.authReady);
23
- const status = dim(` ${context.permissionLabel} · ${context.authReady ? "auth ready" : "auth incomplete"} · read-only · no auto-apply`);
24
- const hint = dim(thai ? " /help · /status · / — เมนูคำสั่ง" : " /help · /status · / for commands");
25
- return [reply, "", status, hint];
4
+ import { formatAgentReply } from "./transcript-format.js";
5
+ /** Short reply for meta/chat prompts — uses local context when available. */
6
+ export function formatConversationTurnLines(objective, reply) {
7
+ return formatAgentReply(reply);
26
8
  }
27
9
  function pickConversationReply(text, thai, authReady) {
28
10
  if (/(เห็น|ได้ยิน|ข้อความ|do you see|can you see|hear me)/i.test(text)) {
@@ -50,31 +32,48 @@ function pickConversationReply(text, thai, authReady) {
50
32
  ? "รับทราบครับ บอกงาน coding ที่ต้องการได้เลย"
51
33
  : "Got it. Describe a coding task, or type / for commands.";
52
34
  }
53
- /** Compact task turn — one screen, no AI-slop sections. Details live in /context. */
35
+ export function resolveConversationReply(objective, context, contextualReply) {
36
+ if (contextualReply) {
37
+ return contextualReply;
38
+ }
39
+ return pickConversationReply(objective, inputLooksThai(objective), context.authReady);
40
+ }
41
+ /** Compact task turn — agent voice, one screen. Details live in /context. */
54
42
  export function formatAgentTurnLines(model) {
55
- const planLabel = model.planSource === "server" ? "server preview" : "local dry-run";
56
43
  const ws = model.inspectSummary;
57
- const lines = [`Task · ${model.objective}`, ""];
58
- lines.push(dim(` ${model.permissionLabel} · ${planLabel} · ${model.previewResult.status} · mutations off`));
59
- lines.push(dim(` workspace · ${ws.root} · ${ws.fileCount} files · ${ws.directoryCount} dirs`));
60
- if (model.previewResult.source === "server" && model.previewResult.server) {
44
+ const thai = inputLooksThai(model.objective);
45
+ const parts = [];
46
+ if (model.planSource === "server" && model.previewResult.source === "server" && model.previewResult.server) {
61
47
  const server = model.previewResult.server;
62
- const approval = server.approval_required ? "approval required" : "no approval gate";
63
- lines.push(dim(` preview · ${server.status} · ${approval}`));
64
- if (server.artifact_digest) {
65
- lines.push(dim(` digest · ${shortDigest(server.artifact_digest)}`));
48
+ if (server.status === "ok") {
49
+ parts.push(thai
50
+ ? `รับงานแล้ว · สแกน workspace (${ws.fileCount} ไฟล์) · server preview: ok`
51
+ : `Task accepted · scanned workspace (${ws.fileCount} files) · server preview: ok`);
52
+ if (server.approval_required) {
53
+ parts.push(thai ? "ต้อง review ก่อน apply — ใช้ /diff" : "Review required before apply — run /diff");
54
+ }
55
+ else {
56
+ parts.push(thai ? "ดู patch ด้วย /diff" : "Review the patch with /diff");
57
+ }
66
58
  }
67
- if (server.finding_codes?.length) {
68
- lines.push(dim(` findings · ${server.finding_codes.join(", ")}`));
59
+ else {
60
+ parts.push(thai
61
+ ? `preview ไม่ผ่าน (${server.status}) — ดู /context`
62
+ : `Preview did not pass (${server.status}) — see /context`);
69
63
  }
70
64
  }
71
65
  else if (model.previewResult.localSteps?.length) {
72
- const preview = model.previewResult.localSteps.slice(0, 2).join("; ");
73
- lines.push(dim(` plan · ${preview}${model.previewResult.localSteps.length > 2 ? "…" : ""}`));
66
+ parts.push(thai
67
+ ? `แผน local (ยังไม่มี auth): ${model.previewResult.localSteps[0]}`
68
+ : `Local plan (no auth): ${model.previewResult.localSteps[0]}`);
74
69
  }
75
- lines.push("");
76
- lines.push(dim(" Next · /diff · /context · /permissions"));
77
- return lines;
70
+ else {
71
+ parts.push(thai ? "รับงานแล้ว ใช้ /context ดูรายละเอียด" : "Task accepted — /context for details");
72
+ }
73
+ parts.push(thai
74
+ ? `${model.permissionLabel} · ไม่ auto-apply`
75
+ : `${model.permissionLabel} · no auto-apply`);
76
+ return formatAgentReply(parts.join("\n"));
78
77
  }
79
78
  /** Verbose formatter kept for /context and tests that need full preview fields. */
80
79
  export function formatAgentTurnVerboseLines(model) {