@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
package/CHANGELOG.md CHANGED
@@ -4,6 +4,32 @@ All notable changes to `@patze/code-cli` are documented here.
4
4
 
5
5
  Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
6
 
7
+ ## [0.11.0] - 2026-05-29
8
+
9
+ ### Added
10
+
11
+ - **Real agent execute + SSE stream** for coding tasks when auth + preview succeed: `POST /internal/patze-code/user-task-execute` → `GET .../user-task-runs/{id}/stream`
12
+ - Live transcript rows during runs: `run` / `tool` / `agent` (trace + final output)
13
+ - Opt-out: `PATZE_CODE_CLI_EXECUTE=0` keeps preview-only behavior
14
+
15
+ ### Unchanged
16
+
17
+ - Trust loop: **no auto-apply**; `/diff` → `/approve` → `/apply` still required for workspace writes
18
+
19
+ ## [0.10.7] - 2026-05-29
20
+
21
+ ### Changed
22
+
23
+ - **Contextual replies** — workspace/folder/auth questions answered from local inspect (real cwd/root paths, file counts) instead of generic deflection
24
+ - **Transcript layout** — cookbook-style `you` / `agent` rows; no repeated status footer on every turn
25
+ - **Bordered composer** — TTY input uses a framed prompt (closer to [Cursor coding-agent-cli](https://github.com/cursor/cookbook/tree/main/sdk/coding-agent-cli))
26
+ - **`/login`** — auto-resolves `user_id` from `GET /internal/patze-code/session` when omitted
27
+ - **`/status --check`** — reports session user mapping when `userId` is not in config
28
+
29
+ ### Unchanged
30
+
31
+ - Trust loop: preview-first, no auto-apply, no SSE execute from CLI
32
+
7
33
  ## [0.10.6] - 2026-05-29
8
34
 
9
35
  ### Changed (composer + turn UX — no trust-loop behavior change)
package/VERSION CHANGED
@@ -1 +1 @@
1
- 0.10.6
1
+ 0.11.0
package/bin/patze.mjs CHANGED
File without changes
@@ -0,0 +1,14 @@
1
+ export type AgentTraceKind = "thinking" | "tool" | "text" | "status" | "task";
2
+ export type AgentTraceStatus = "running" | "done" | "error";
3
+ export type AgentTraceEvent = {
4
+ id: string;
5
+ kind: AgentTraceKind;
6
+ title: string;
7
+ detail?: string;
8
+ status?: AgentTraceStatus;
9
+ toolName?: string;
10
+ };
11
+ export declare function parseAgentTraceItem(raw: unknown): AgentTraceEvent | null;
12
+ export declare function isIgnorableStatusTrace(event: AgentTraceEvent): boolean;
13
+ export declare function excerptTraceText(text: string, max?: number): string;
14
+ //# sourceMappingURL=agent-trace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-trace.d.ts","sourceRoot":"","sources":["../../src/backend/agent-trace.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,GAAG,MAAM,CAAA;AAC7E,MAAM,MAAM,gBAAgB,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAA;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,cAAc,CAAA;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,MAAM,CAAC,EAAE,gBAAgB,CAAA;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB,CAAA;AAED,wBAAgB,mBAAmB,CAAC,GAAG,EAAE,OAAO,GAAG,eAAe,GAAG,IAAI,CAyBxE;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,eAAe,GAAG,OAAO,CAkBtE;AAED,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,SAAM,GAAG,MAAM,CAShE"}
@@ -0,0 +1,52 @@
1
+ export function parseAgentTraceItem(raw) {
2
+ if (!raw || typeof raw !== "object") {
3
+ return null;
4
+ }
5
+ const record = raw;
6
+ const kind = String(record.kind ?? "").trim();
7
+ if (!["thinking", "tool", "text", "status", "task"].includes(kind)) {
8
+ return null;
9
+ }
10
+ const title = String(record.title ?? "").trim();
11
+ if (!title) {
12
+ return null;
13
+ }
14
+ const statusRaw = String(record.status ?? "done").trim();
15
+ const status = statusRaw === "running" || statusRaw === "error" ? statusRaw : "done";
16
+ return {
17
+ id: String(record.id ?? `trace-${Date.now()}`),
18
+ kind,
19
+ title,
20
+ detail: typeof record.detail === "string" ? record.detail : undefined,
21
+ status,
22
+ toolName: typeof record.toolName === "string" ? record.toolName : undefined,
23
+ };
24
+ }
25
+ export function isIgnorableStatusTrace(event) {
26
+ if (event.kind !== "status") {
27
+ return false;
28
+ }
29
+ const title = event.title.trim().toUpperCase();
30
+ const detail = (event.detail ?? "").trim().toUpperCase();
31
+ if (!title && !detail) {
32
+ return true;
33
+ }
34
+ return (title === "RUNNING" ||
35
+ title === "STATUS" ||
36
+ title === "PENDING" ||
37
+ title === "QUEUED" ||
38
+ title.includes("RUNNING") ||
39
+ detail === "RUNNING" ||
40
+ detail === "PENDING");
41
+ }
42
+ export function excerptTraceText(text, max = 240) {
43
+ const normalized = text.replace(/\r\n/g, "\n").replace(/\s+/g, " ").trim();
44
+ if (!normalized) {
45
+ return "";
46
+ }
47
+ if (normalized.length <= max) {
48
+ return normalized;
49
+ }
50
+ return `${normalized.slice(0, max - 1)}…`;
51
+ }
52
+ //# sourceMappingURL=agent-trace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-trace.js","sourceRoot":"","sources":["../../src/backend/agent-trace.ts"],"names":[],"mappings":"AAYA,MAAM,UAAU,mBAAmB,CAAC,GAAY;IAC9C,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,MAAM,GAAG,GAA8B,CAAA;IAC7C,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC,IAAI,EAAoB,CAAA;IAC/D,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACnE,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,KAAK,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,CAAC,IAAI,EAAE,CAAA;IACxD,MAAM,MAAM,GACV,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAA;IAEvE,OAAO;QACL,EAAE,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,SAAS,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;QAC9C,IAAI;QACJ,KAAK;QACL,MAAM,EAAE,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;QACrE,MAAM;QACN,QAAQ,EAAE,OAAO,MAAM,CAAC,QAAQ,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS;KAC5E,CAAA;AACH,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,KAAsB;IAC3D,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAA;IACd,CAAC;IACD,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAC9C,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IACxD,IAAI,CAAC,KAAK,IAAI,CAAC,MAAM,EAAE,CAAC;QACtB,OAAO,IAAI,CAAA;IACb,CAAC;IACD,OAAO,CACL,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,QAAQ;QAClB,KAAK,KAAK,SAAS;QACnB,KAAK,KAAK,QAAQ;QAClB,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC;QACzB,MAAM,KAAK,SAAS;QACpB,MAAM,KAAK,SAAS,CACrB,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAY,EAAE,GAAG,GAAG,GAAG;IACtD,MAAM,UAAU,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAA;IAC1E,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,EAAE,CAAA;IACX,CAAC;IACD,IAAI,UAAU,CAAC,MAAM,IAAI,GAAG,EAAE,CAAC;QAC7B,OAAO,UAAU,CAAA;IACnB,CAAC;IACD,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC,GAAG,CAAA;AAC3C,CAAC"}
@@ -0,0 +1,51 @@
1
+ import type { PreviewTaskPayload } from "./preview-payload.js";
2
+ import type { FetchLike } from "./preview-client.js";
3
+ export type ExecuteAcceptedResponse = {
4
+ status: string;
5
+ run_id: string;
6
+ phase: string;
7
+ };
8
+ export type ExecuteCompletedResponse = {
9
+ status: string;
10
+ error_code: string;
11
+ preview_artifact_digest: string;
12
+ pipeline_digest: string;
13
+ review_digest: string;
14
+ agent_output_digest: string;
15
+ agent_output_length: number;
16
+ agent_output_preview?: string;
17
+ outcome_summary?: string;
18
+ finding_codes: string[];
19
+ run_id: string;
20
+ digest: string;
21
+ phase?: string;
22
+ agent_model?: string;
23
+ progress_steps?: string[];
24
+ deliverable_paths?: string[];
25
+ agent_trace?: unknown[];
26
+ };
27
+ export type ExecuteClientResult = {
28
+ ok: true;
29
+ kind: "accepted";
30
+ response: ExecuteAcceptedResponse;
31
+ httpStatus: number;
32
+ } | {
33
+ ok: true;
34
+ kind: "completed";
35
+ response: ExecuteCompletedResponse;
36
+ httpStatus: number;
37
+ } | {
38
+ ok: false;
39
+ kind: "auth" | "network" | "server";
40
+ message: string;
41
+ httpStatus: number | null;
42
+ };
43
+ export declare function postUserTaskExecute(input: {
44
+ apiBase: string;
45
+ headers: Record<string, string>;
46
+ payload: PreviewTaskPayload;
47
+ previewArtifactDigest: string;
48
+ fetchImpl?: FetchLike;
49
+ timeoutMs?: number;
50
+ }): Promise<ExecuteClientResult>;
51
+ //# sourceMappingURL=execute-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-client.d.ts","sourceRoot":"","sources":["../../src/backend/execute-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC9D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,MAAM,uBAAuB,GAAG;IACpC,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,wBAAwB,GAAG;IACrC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,uBAAuB,EAAE,MAAM,CAAA;IAC/B,eAAe,EAAE,MAAM,CAAA;IACvB,aAAa,EAAE,MAAM,CAAA;IACrB,mBAAmB,EAAE,MAAM,CAAA;IAC3B,mBAAmB,EAAE,MAAM,CAAA;IAC3B,oBAAoB,CAAC,EAAE,MAAM,CAAA;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAA;IACzB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAA;IAC5B,WAAW,CAAC,EAAE,OAAO,EAAE,CAAA;CACxB,CAAA;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,uBAAuB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACrF;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,EAAE,wBAAwB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GACvF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAElG,wBAAsB,mBAAmB,CAAC,KAAK,EAAE;IAC/C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,OAAO,EAAE,kBAAkB,CAAA;IAC3B,qBAAqB,EAAE,MAAM,CAAA;IAC7B,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA4E/B"}
@@ -0,0 +1,140 @@
1
+ export async function postUserTaskExecute(input) {
2
+ const fetchImpl = input.fetchImpl ?? fetch;
3
+ const url = new URL("/internal/patze-code/user-task-execute", input.apiBase);
4
+ const controller = new AbortController();
5
+ const timer = setTimeout(() => controller.abort(), input.timeoutMs ?? 180_000);
6
+ try {
7
+ const response = await fetchImpl(url, {
8
+ method: "POST",
9
+ headers: input.headers,
10
+ body: JSON.stringify({
11
+ ...input.payload,
12
+ preview_artifact_digest: input.previewArtifactDigest,
13
+ }),
14
+ signal: controller.signal,
15
+ });
16
+ let body;
17
+ try {
18
+ body = await response.json();
19
+ }
20
+ catch {
21
+ return {
22
+ ok: false,
23
+ kind: "server",
24
+ message: `execute returned non-JSON (${response.status})`,
25
+ httpStatus: response.status,
26
+ };
27
+ }
28
+ if (response.status === 401 || response.status === 403) {
29
+ return {
30
+ ok: false,
31
+ kind: "auth",
32
+ message: extractDetail(body) ?? `execute auth failed (${response.status})`,
33
+ httpStatus: response.status,
34
+ };
35
+ }
36
+ if (response.status === 202) {
37
+ const normalized = normalizeAccepted(body);
38
+ if (!normalized) {
39
+ return {
40
+ ok: false,
41
+ kind: "server",
42
+ message: "execute accepted with unexpected shape",
43
+ httpStatus: response.status,
44
+ };
45
+ }
46
+ return { ok: true, kind: "accepted", response: normalized, httpStatus: response.status };
47
+ }
48
+ if (response.status === 200 || response.status === 409) {
49
+ const normalized = normalizeCompleted(body);
50
+ if (!normalized) {
51
+ return {
52
+ ok: false,
53
+ kind: "server",
54
+ message: "execute returned unexpected shape",
55
+ httpStatus: response.status,
56
+ };
57
+ }
58
+ return { ok: true, kind: "completed", response: normalized, httpStatus: response.status };
59
+ }
60
+ return {
61
+ ok: false,
62
+ kind: "server",
63
+ message: extractDetail(body) ?? `execute failed (${response.status})`,
64
+ httpStatus: response.status,
65
+ };
66
+ }
67
+ catch (error) {
68
+ const message = error instanceof Error ? error.message : "execute request failed";
69
+ return { ok: false, kind: "network", message, httpStatus: null };
70
+ }
71
+ finally {
72
+ clearTimeout(timer);
73
+ }
74
+ }
75
+ function extractDetail(body) {
76
+ if (!body || typeof body !== "object") {
77
+ return null;
78
+ }
79
+ const detail = body.detail;
80
+ if (typeof detail === "string" && detail.trim()) {
81
+ return detail.trim();
82
+ }
83
+ const errorCode = body.error_code;
84
+ if (typeof errorCode === "string" && errorCode.trim()) {
85
+ return errorCode.trim();
86
+ }
87
+ return null;
88
+ }
89
+ function normalizeAccepted(body) {
90
+ if (!body || typeof body !== "object") {
91
+ return null;
92
+ }
93
+ const record = body;
94
+ const runId = String(record.run_id ?? "").trim();
95
+ if (!runId) {
96
+ return null;
97
+ }
98
+ return {
99
+ status: String(record.status ?? "accepted"),
100
+ run_id: runId,
101
+ phase: String(record.phase ?? "queued"),
102
+ };
103
+ }
104
+ function normalizeCompleted(body) {
105
+ if (!body || typeof body !== "object") {
106
+ return null;
107
+ }
108
+ const record = body;
109
+ const runId = String(record.run_id ?? "").trim();
110
+ if (!runId) {
111
+ return null;
112
+ }
113
+ const findingCodes = Array.isArray(record.finding_codes)
114
+ ? record.finding_codes.filter((item) => typeof item === "string")
115
+ : [];
116
+ return {
117
+ status: String(record.status ?? ""),
118
+ error_code: String(record.error_code ?? ""),
119
+ preview_artifact_digest: String(record.preview_artifact_digest ?? ""),
120
+ pipeline_digest: String(record.pipeline_digest ?? ""),
121
+ review_digest: String(record.review_digest ?? ""),
122
+ agent_output_digest: String(record.agent_output_digest ?? ""),
123
+ agent_output_length: Number(record.agent_output_length ?? 0),
124
+ agent_output_preview: typeof record.agent_output_preview === "string" ? record.agent_output_preview : undefined,
125
+ outcome_summary: typeof record.outcome_summary === "string" ? record.outcome_summary : undefined,
126
+ finding_codes: findingCodes,
127
+ run_id: runId,
128
+ digest: String(record.digest ?? ""),
129
+ phase: typeof record.phase === "string" ? record.phase : undefined,
130
+ agent_model: typeof record.agent_model === "string" ? record.agent_model : undefined,
131
+ progress_steps: Array.isArray(record.progress_steps)
132
+ ? record.progress_steps.filter((item) => typeof item === "string")
133
+ : undefined,
134
+ deliverable_paths: Array.isArray(record.deliverable_paths)
135
+ ? record.deliverable_paths.filter((item) => typeof item === "string")
136
+ : undefined,
137
+ agent_trace: Array.isArray(record.agent_trace) ? record.agent_trace : undefined,
138
+ };
139
+ }
140
+ //# sourceMappingURL=execute-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"execute-client.js","sourceRoot":"","sources":["../../src/backend/execute-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export type PatzeCodeRunRecord = {
2
+ run_id: string;
3
+ status: string;
4
+ phase: string;
5
+ error_code: string;
6
+ agent_output_preview: string;
7
+ outcome_summary: string;
8
+ agent_model: string;
9
+ finding_codes: string[];
10
+ deliverable_paths: string[];
11
+ agent_trace: unknown[];
12
+ };
13
+ export declare function normalizePatzeCodeRunRecord(raw: unknown): PatzeCodeRunRecord | null;
14
+ export declare function isTerminalRunPhase(phase: string): boolean;
15
+ export declare function pickRunReplyText(run: PatzeCodeRunRecord): string;
16
+ //# sourceMappingURL=run-record.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-record.d.ts","sourceRoot":"","sources":["../../src/backend/run-record.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,MAAM,CAAA;IACd,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,UAAU,EAAE,MAAM,CAAA;IAClB,oBAAoB,EAAE,MAAM,CAAA;IAC5B,eAAe,EAAE,MAAM,CAAA;IACvB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB,EAAE,MAAM,EAAE,CAAA;IAC3B,WAAW,EAAE,OAAO,EAAE,CAAA;CACvB,CAAA;AAED,wBAAgB,2BAA2B,CAAC,GAAG,EAAE,OAAO,GAAG,kBAAkB,GAAG,IAAI,CAwBnF;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAEzD;AAED,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAahE"}
@@ -0,0 +1,43 @@
1
+ export function normalizePatzeCodeRunRecord(raw) {
2
+ if (!raw || typeof raw !== "object") {
3
+ return null;
4
+ }
5
+ const row = raw;
6
+ const runId = String(row.run_id ?? "").trim();
7
+ if (!runId) {
8
+ return null;
9
+ }
10
+ const findings = row.finding_codes;
11
+ return {
12
+ run_id: runId,
13
+ status: String(row.status ?? ""),
14
+ phase: String(row.phase ?? ""),
15
+ error_code: String(row.error_code ?? ""),
16
+ agent_output_preview: String(row.agent_output_preview ?? ""),
17
+ outcome_summary: String(row.outcome_summary ?? ""),
18
+ agent_model: String(row.agent_model ?? ""),
19
+ finding_codes: Array.isArray(findings) ? findings.map((item) => String(item)) : [],
20
+ deliverable_paths: Array.isArray(row.deliverable_paths)
21
+ ? row.deliverable_paths.map((item) => String(item))
22
+ : [],
23
+ agent_trace: Array.isArray(row.agent_trace) ? row.agent_trace : [],
24
+ };
25
+ }
26
+ export function isTerminalRunPhase(phase) {
27
+ return phase === "completed" || phase === "blocked" || phase === "failed";
28
+ }
29
+ export function pickRunReplyText(run) {
30
+ const preview = run.agent_output_preview.trim();
31
+ if (preview) {
32
+ return preview;
33
+ }
34
+ const summary = run.outcome_summary.trim();
35
+ if (summary) {
36
+ return summary;
37
+ }
38
+ if (run.error_code) {
39
+ return `Run ${run.phase}: ${run.error_code}`;
40
+ }
41
+ return `Run ${run.phase || run.status || "finished"}.`;
42
+ }
43
+ //# sourceMappingURL=run-record.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-record.js","sourceRoot":"","sources":["../../src/backend/run-record.ts"],"names":[],"mappings":"AAaA,MAAM,UAAU,2BAA2B,CAAC,GAAY;IACtD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QACpC,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,GAAG,GAAG,GAA8B,CAAA;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;IAC7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,OAAO,IAAI,CAAA;IACb,CAAC;IACD,MAAM,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAA;IAClC,OAAO;QACL,MAAM,EAAE,KAAK;QACb,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC;QAChC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,KAAK,IAAI,EAAE,CAAC;QAC9B,UAAU,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC;QACxC,oBAAoB,EAAE,MAAM,CAAC,GAAG,CAAC,oBAAoB,IAAI,EAAE,CAAC;QAC5D,eAAe,EAAE,MAAM,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC;QAClD,WAAW,EAAE,MAAM,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC1C,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;QAClF,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC;YACrD,CAAC,CAAC,GAAG,CAAC,iBAAiB,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YACnD,CAAC,CAAC,EAAE;QACN,WAAW,EAAE,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE;KACnE,CAAA;AACH,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,OAAO,KAAK,KAAK,WAAW,IAAI,KAAK,KAAK,SAAS,IAAI,KAAK,KAAK,QAAQ,CAAA;AAC3E,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,GAAuB;IACtD,MAAM,OAAO,GAAG,GAAG,CAAC,oBAAoB,CAAC,IAAI,EAAE,CAAA;IAC/C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,MAAM,OAAO,GAAG,GAAG,CAAC,eAAe,CAAC,IAAI,EAAE,CAAA;IAC1C,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,OAAO,CAAA;IAChB,CAAC;IACD,IAAI,GAAG,CAAC,UAAU,EAAE,CAAC;QACnB,OAAO,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,UAAU,EAAE,CAAA;IAC9C,CAAC;IACD,OAAO,OAAO,GAAG,CAAC,KAAK,IAAI,GAAG,CAAC,MAAM,IAAI,UAAU,GAAG,CAAA;AACxD,CAAC"}
@@ -0,0 +1,36 @@
1
+ import type { FetchLike } from "./preview-client.js";
2
+ import { isTerminalRunPhase, type PatzeCodeRunRecord } from "./run-record.js";
3
+ export type RunStatusEvent = {
4
+ run_id: string;
5
+ phase: string;
6
+ status: string;
7
+ error_code: string;
8
+ terminal: boolean;
9
+ };
10
+ export type RunTraceEvent = {
11
+ run_id: string;
12
+ item: unknown;
13
+ };
14
+ export type RunStreamHandlers = {
15
+ onStatus: (event: RunStatusEvent) => void;
16
+ onTrace?: (event: RunTraceEvent) => void;
17
+ onComplete: (run: PatzeCodeRunRecord | null) => void;
18
+ onError?: (message: string) => void;
19
+ };
20
+ export declare function streamPatzeCodeRun(input: {
21
+ apiBase: string;
22
+ headers: Record<string, string>;
23
+ runId: string;
24
+ fetchImpl?: FetchLike;
25
+ handlers: RunStreamHandlers;
26
+ timeoutMs?: number;
27
+ }): Promise<void>;
28
+ export declare function fetchPatzeCodeRun(input: {
29
+ apiBase: string;
30
+ headers: Record<string, string>;
31
+ runId: string;
32
+ fetchImpl?: FetchLike;
33
+ }): Promise<PatzeCodeRunRecord | null>;
34
+ export declare function parseTraceItem(raw: unknown): import("./agent-trace.js").AgentTraceEvent | null;
35
+ export { isTerminalRunPhase };
36
+ //# sourceMappingURL=run-stream-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-stream-client.d.ts","sourceRoot":"","sources":["../../src/backend/run-stream-client.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,OAAO,EACL,kBAAkB,EAElB,KAAK,kBAAkB,EACxB,MAAM,iBAAiB,CAAA;AAExB,MAAM,MAAM,cAAc,GAAG;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,QAAQ,EAAE,OAAO,CAAA;CAClB,CAAA;AAED,MAAM,MAAM,aAAa,GAAG;IAC1B,MAAM,EAAE,MAAM,CAAA;IACd,IAAI,EAAE,OAAO,CAAA;CACd,CAAA;AAED,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,CAAC,KAAK,EAAE,cAAc,KAAK,IAAI,CAAA;IACzC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,aAAa,KAAK,IAAI,CAAA;IACxC,UAAU,EAAE,CAAC,GAAG,EAAE,kBAAkB,GAAG,IAAI,KAAK,IAAI,CAAA;IACpD,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;CACpC,CAAA;AAED,wBAAsB,kBAAkB,CAAC,KAAK,EAAE;IAC9C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,QAAQ,EAAE,iBAAiB,CAAA;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwFhB;AAED,wBAAsB,iBAAiB,CAAC,KAAK,EAAE;IAC7C,OAAO,EAAE,MAAM,CAAA;IACf,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IAC/B,KAAK,EAAE,MAAM,CAAA;IACb,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,GAAG,OAAO,CAAC,kBAAkB,GAAG,IAAI,CAAC,CAmBrC;AAED,wBAAgB,cAAc,CAAC,GAAG,EAAE,OAAO,qDAE1C;AAED,OAAO,EAAE,kBAAkB,EAAE,CAAA"}
@@ -0,0 +1,109 @@
1
+ import { parseAgentTraceItem } from "./agent-trace.js";
2
+ import { consumeSseResponse } from "./sse-parse.js";
3
+ import { isTerminalRunPhase, normalizePatzeCodeRunRecord, } from "./run-record.js";
4
+ export async function streamPatzeCodeRun(input) {
5
+ const fetchImpl = input.fetchImpl ?? fetch;
6
+ const url = new URL(`/internal/patze-code/user-task-runs/${encodeURIComponent(input.runId)}/stream`, input.apiBase);
7
+ const controller = new AbortController();
8
+ const timer = setTimeout(() => controller.abort(), input.timeoutMs ?? 180_000);
9
+ try {
10
+ const response = await fetchImpl(url, {
11
+ method: "GET",
12
+ headers: {
13
+ ...input.headers,
14
+ Accept: "text/event-stream",
15
+ },
16
+ signal: controller.signal,
17
+ });
18
+ if (!response.ok) {
19
+ input.handlers.onError?.(`run stream failed (${response.status})`);
20
+ const run = await fetchPatzeCodeRun({
21
+ apiBase: input.apiBase,
22
+ headers: input.headers,
23
+ runId: input.runId,
24
+ fetchImpl,
25
+ });
26
+ input.handlers.onComplete(run);
27
+ return;
28
+ }
29
+ let completed = false;
30
+ await consumeSseResponse(response, {
31
+ onEvent: (event) => {
32
+ if (completed) {
33
+ return;
34
+ }
35
+ try {
36
+ const payload = JSON.parse(event.data);
37
+ if (event.event === "status") {
38
+ input.handlers.onStatus({
39
+ run_id: String(payload.run_id ?? input.runId),
40
+ phase: String(payload.phase ?? ""),
41
+ status: String(payload.status ?? ""),
42
+ error_code: String(payload.error_code ?? ""),
43
+ terminal: payload.terminal === true,
44
+ });
45
+ }
46
+ else if (event.event === "trace") {
47
+ input.handlers.onTrace?.({
48
+ run_id: String(payload.run_id ?? input.runId),
49
+ item: payload.item,
50
+ });
51
+ }
52
+ else if (event.event === "complete") {
53
+ completed = true;
54
+ input.handlers.onComplete(normalizePatzeCodeRunRecord(payload.run));
55
+ }
56
+ }
57
+ catch {
58
+ input.handlers.onError?.("invalid stream event");
59
+ }
60
+ },
61
+ }, { signal: controller.signal });
62
+ if (!completed) {
63
+ const run = await fetchPatzeCodeRun({
64
+ apiBase: input.apiBase,
65
+ headers: input.headers,
66
+ runId: input.runId,
67
+ fetchImpl,
68
+ });
69
+ input.handlers.onComplete(run);
70
+ }
71
+ }
72
+ catch (error) {
73
+ const message = error instanceof Error ? error.message : "run stream failed";
74
+ input.handlers.onError?.(message);
75
+ const run = await fetchPatzeCodeRun({
76
+ apiBase: input.apiBase,
77
+ headers: input.headers,
78
+ runId: input.runId,
79
+ fetchImpl,
80
+ });
81
+ input.handlers.onComplete(run);
82
+ }
83
+ finally {
84
+ clearTimeout(timer);
85
+ }
86
+ }
87
+ export async function fetchPatzeCodeRun(input) {
88
+ const fetchImpl = input.fetchImpl ?? fetch;
89
+ const url = new URL(`/internal/patze-code/user-task-runs/${encodeURIComponent(input.runId)}`, input.apiBase);
90
+ try {
91
+ const response = await fetchImpl(url, {
92
+ method: "GET",
93
+ headers: { ...input.headers, Accept: "application/json" },
94
+ });
95
+ if (!response.ok) {
96
+ return null;
97
+ }
98
+ const body = (await response.json());
99
+ return normalizePatzeCodeRunRecord(body.run);
100
+ }
101
+ catch {
102
+ return null;
103
+ }
104
+ }
105
+ export function parseTraceItem(raw) {
106
+ return parseAgentTraceItem(raw);
107
+ }
108
+ export { isTerminalRunPhase };
109
+ //# sourceMappingURL=run-stream-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"run-stream-client.js","sourceRoot":"","sources":["../../src/backend/run-stream-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,17 @@
1
+ import type { ResolvedConfig } from "../config/config.js";
2
+ import type { FetchLike } from "./preview-client.js";
3
+ export type SessionResolveResult = {
4
+ ok: true;
5
+ userId: string;
6
+ keyLabel?: string;
7
+ } | {
8
+ ok: false;
9
+ message: string;
10
+ httpStatus: number | null;
11
+ };
12
+ export declare function resolvePatzeCodeSessionUser(input: {
13
+ config: ResolvedConfig;
14
+ fetchImpl?: FetchLike;
15
+ timeoutMs?: number;
16
+ }): Promise<SessionResolveResult>;
17
+ //# sourceMappingURL=session-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client.d.ts","sourceRoot":"","sources":["../../src/backend/session-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AACzD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAA;AAEpD,MAAM,MAAM,oBAAoB,GAC5B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC/C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAAA;CAAE,CAAA;AAE7D,wBAAsB,2BAA2B,CAAC,KAAK,EAAE;IACvD,MAAM,EAAE,cAAc,CAAA;IACtB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,oBAAoB,CAAC,CA2DhC"}
@@ -0,0 +1,54 @@
1
+ export async function resolvePatzeCodeSessionUser(input) {
2
+ if (!input.config.api || !input.config.token) {
3
+ return { ok: false, message: "api or token missing", httpStatus: null };
4
+ }
5
+ const fetchImpl = input.fetchImpl ?? fetch;
6
+ const url = new URL("/internal/patze-code/session", input.config.api);
7
+ const controller = new AbortController();
8
+ const timer = setTimeout(() => controller.abort(), input.timeoutMs ?? 8_000);
9
+ try {
10
+ const response = await fetchImpl(url, {
11
+ method: "GET",
12
+ headers: {
13
+ Accept: "application/json",
14
+ "X-Internal-API-Key": input.config.token,
15
+ },
16
+ signal: controller.signal,
17
+ });
18
+ let body;
19
+ try {
20
+ body = await response.json();
21
+ }
22
+ catch {
23
+ return {
24
+ ok: false,
25
+ message: `session returned non-JSON (${response.status})`,
26
+ httpStatus: response.status,
27
+ };
28
+ }
29
+ if (!response.ok) {
30
+ const detail = body && typeof body === "object" && typeof body.detail === "string"
31
+ ? String(body.detail)
32
+ : `session failed (${response.status})`;
33
+ return { ok: false, message: detail, httpStatus: response.status };
34
+ }
35
+ const userId = body && typeof body === "object" && typeof body.user_id === "string"
36
+ ? body.user_id.trim()
37
+ : "";
38
+ if (!userId) {
39
+ return { ok: false, message: "session response missing user_id", httpStatus: response.status };
40
+ }
41
+ const keyLabel = body && typeof body === "object" && typeof body.key_label === "string"
42
+ ? body.key_label
43
+ : undefined;
44
+ return { ok: true, userId, keyLabel };
45
+ }
46
+ catch (error) {
47
+ const message = error instanceof Error ? error.message : "session request failed";
48
+ return { ok: false, message, httpStatus: null };
49
+ }
50
+ finally {
51
+ clearTimeout(timer);
52
+ }
53
+ }
54
+ //# sourceMappingURL=session-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"session-client.js","sourceRoot":"","sources":["../../src/backend/session-client.ts"],"names":[],"mappings":"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"}