@patze/code-cli 0.10.2

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 (268) hide show
  1. package/CHANGELOG.md +92 -0
  2. package/NOTICE.md +17 -0
  3. package/README.md +177 -0
  4. package/VERSION +1 -0
  5. package/bin/patze.mjs +7 -0
  6. package/dist/backend/auth.d.ts +13 -0
  7. package/dist/backend/auth.d.ts.map +1 -0
  8. package/dist/backend/auth.js +12 -0
  9. package/dist/backend/auth.js.map +1 -0
  10. package/dist/backend/client.d.ts +14 -0
  11. package/dist/backend/client.d.ts.map +1 -0
  12. package/dist/backend/client.js +51 -0
  13. package/dist/backend/client.js.map +1 -0
  14. package/dist/backend/preview-client.d.ts +33 -0
  15. package/dist/backend/preview-client.d.ts.map +1 -0
  16. package/dist/backend/preview-client.js +104 -0
  17. package/dist/backend/preview-client.js.map +1 -0
  18. package/dist/backend/preview-payload.d.ts +50 -0
  19. package/dist/backend/preview-payload.d.ts.map +1 -0
  20. package/dist/backend/preview-payload.js +92 -0
  21. package/dist/backend/preview-payload.js.map +1 -0
  22. package/dist/cli/argv.d.ts +10 -0
  23. package/dist/cli/argv.d.ts.map +1 -0
  24. package/dist/cli/argv.js +67 -0
  25. package/dist/cli/argv.js.map +1 -0
  26. package/dist/cli/commands/apply-format.d.ts +12 -0
  27. package/dist/cli/commands/apply-format.d.ts.map +1 -0
  28. package/dist/cli/commands/apply-format.js +50 -0
  29. package/dist/cli/commands/apply-format.js.map +1 -0
  30. package/dist/cli/commands/apply.d.ts +14 -0
  31. package/dist/cli/commands/apply.d.ts.map +1 -0
  32. package/dist/cli/commands/apply.js +256 -0
  33. package/dist/cli/commands/apply.js.map +1 -0
  34. package/dist/cli/commands/approve-format.d.ts +4 -0
  35. package/dist/cli/commands/approve-format.d.ts.map +1 -0
  36. package/dist/cli/commands/approve-format.js +40 -0
  37. package/dist/cli/commands/approve-format.js.map +1 -0
  38. package/dist/cli/commands/approve.d.ts +19 -0
  39. package/dist/cli/commands/approve.d.ts.map +1 -0
  40. package/dist/cli/commands/approve.js +91 -0
  41. package/dist/cli/commands/approve.js.map +1 -0
  42. package/dist/cli/commands/code.d.ts +4 -0
  43. package/dist/cli/commands/code.d.ts.map +1 -0
  44. package/dist/cli/commands/code.js +57 -0
  45. package/dist/cli/commands/code.js.map +1 -0
  46. package/dist/cli/commands/diff-format.d.ts +12 -0
  47. package/dist/cli/commands/diff-format.d.ts.map +1 -0
  48. package/dist/cli/commands/diff-format.js +151 -0
  49. package/dist/cli/commands/diff-format.js.map +1 -0
  50. package/dist/cli/commands/diff.d.ts +22 -0
  51. package/dist/cli/commands/diff.d.ts.map +1 -0
  52. package/dist/cli/commands/diff.js +101 -0
  53. package/dist/cli/commands/diff.js.map +1 -0
  54. package/dist/cli/commands/doctor.d.ts +6 -0
  55. package/dist/cli/commands/doctor.d.ts.map +1 -0
  56. package/dist/cli/commands/doctor.js +99 -0
  57. package/dist/cli/commands/doctor.js.map +1 -0
  58. package/dist/cli/commands/goal-format.d.ts +3 -0
  59. package/dist/cli/commands/goal-format.d.ts.map +1 -0
  60. package/dist/cli/commands/goal-format.js +32 -0
  61. package/dist/cli/commands/goal-format.js.map +1 -0
  62. package/dist/cli/commands/goal.d.ts +28 -0
  63. package/dist/cli/commands/goal.d.ts.map +1 -0
  64. package/dist/cli/commands/goal.js +80 -0
  65. package/dist/cli/commands/goal.js.map +1 -0
  66. package/dist/cli/commands/inspect-format.d.ts +6 -0
  67. package/dist/cli/commands/inspect-format.d.ts.map +1 -0
  68. package/dist/cli/commands/inspect-format.js +62 -0
  69. package/dist/cli/commands/inspect-format.js.map +1 -0
  70. package/dist/cli/commands/inspect.d.ts +7 -0
  71. package/dist/cli/commands/inspect.d.ts.map +1 -0
  72. package/dist/cli/commands/inspect.js +11 -0
  73. package/dist/cli/commands/inspect.js.map +1 -0
  74. package/dist/cli/commands/login.d.ts +4 -0
  75. package/dist/cli/commands/login.d.ts.map +1 -0
  76. package/dist/cli/commands/login.js +21 -0
  77. package/dist/cli/commands/login.js.map +1 -0
  78. package/dist/cli/commands/plan-format.d.ts +7 -0
  79. package/dist/cli/commands/plan-format.d.ts.map +1 -0
  80. package/dist/cli/commands/plan-format.js +48 -0
  81. package/dist/cli/commands/plan-format.js.map +1 -0
  82. package/dist/cli/commands/plan.d.ts +13 -0
  83. package/dist/cli/commands/plan.d.ts.map +1 -0
  84. package/dist/cli/commands/plan.js +64 -0
  85. package/dist/cli/commands/plan.js.map +1 -0
  86. package/dist/cli/commands/runs.d.ts +5 -0
  87. package/dist/cli/commands/runs.d.ts.map +1 -0
  88. package/dist/cli/commands/runs.js +25 -0
  89. package/dist/cli/commands/runs.js.map +1 -0
  90. package/dist/cli/commands/session-snapshot-format.d.ts +3 -0
  91. package/dist/cli/commands/session-snapshot-format.d.ts.map +1 -0
  92. package/dist/cli/commands/session-snapshot-format.js +5 -0
  93. package/dist/cli/commands/session-snapshot-format.js.map +1 -0
  94. package/dist/cli/commands/status-format.d.ts +11 -0
  95. package/dist/cli/commands/status-format.d.ts.map +1 -0
  96. package/dist/cli/commands/status-format.js +57 -0
  97. package/dist/cli/commands/status-format.js.map +1 -0
  98. package/dist/cli/commands/status.d.ts +4 -0
  99. package/dist/cli/commands/status.d.ts.map +1 -0
  100. package/dist/cli/commands/status.js +12 -0
  101. package/dist/cli/commands/status.js.map +1 -0
  102. package/dist/cli/commands/trust-loop-snapshot.d.ts +3 -0
  103. package/dist/cli/commands/trust-loop-snapshot.d.ts.map +1 -0
  104. package/dist/cli/commands/trust-loop-snapshot.js +125 -0
  105. package/dist/cli/commands/trust-loop-snapshot.js.map +1 -0
  106. package/dist/cli/commands/verify-drift-guard.d.ts +2 -0
  107. package/dist/cli/commands/verify-drift-guard.d.ts.map +1 -0
  108. package/dist/cli/commands/verify-drift-guard.js +11 -0
  109. package/dist/cli/commands/verify-drift-guard.js.map +1 -0
  110. package/dist/cli/commands/verify.d.ts +12 -0
  111. package/dist/cli/commands/verify.d.ts.map +1 -0
  112. package/dist/cli/commands/verify.js +62 -0
  113. package/dist/cli/commands/verify.js.map +1 -0
  114. package/dist/cli/help.d.ts +3 -0
  115. package/dist/cli/help.d.ts.map +1 -0
  116. package/dist/cli/help.js +36 -0
  117. package/dist/cli/help.js.map +1 -0
  118. package/dist/cli/interactive/agent-turn-format.d.ts +15 -0
  119. package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -0
  120. package/dist/cli/interactive/agent-turn-format.js +70 -0
  121. package/dist/cli/interactive/agent-turn-format.js.map +1 -0
  122. package/dist/cli/interactive/agent-turn.d.ts +9 -0
  123. package/dist/cli/interactive/agent-turn.d.ts.map +1 -0
  124. package/dist/cli/interactive/agent-turn.js +103 -0
  125. package/dist/cli/interactive/agent-turn.js.map +1 -0
  126. package/dist/cli/interactive/header.d.ts +4 -0
  127. package/dist/cli/interactive/header.d.ts.map +1 -0
  128. package/dist/cli/interactive/header.js +28 -0
  129. package/dist/cli/interactive/header.js.map +1 -0
  130. package/dist/cli/interactive/permissions-command.d.ts +15 -0
  131. package/dist/cli/interactive/permissions-command.d.ts.map +1 -0
  132. package/dist/cli/interactive/permissions-command.js +88 -0
  133. package/dist/cli/interactive/permissions-command.js.map +1 -0
  134. package/dist/cli/interactive/permissions-format.d.ts +18 -0
  135. package/dist/cli/interactive/permissions-format.d.ts.map +1 -0
  136. package/dist/cli/interactive/permissions-format.js +142 -0
  137. package/dist/cli/interactive/permissions-format.js.map +1 -0
  138. package/dist/cli/interactive/permissions-keys.d.ts +5 -0
  139. package/dist/cli/interactive/permissions-keys.d.ts.map +1 -0
  140. package/dist/cli/interactive/permissions-keys.js +58 -0
  141. package/dist/cli/interactive/permissions-keys.js.map +1 -0
  142. package/dist/cli/interactive/session-state.d.ts +68 -0
  143. package/dist/cli/interactive/session-state.d.ts.map +1 -0
  144. package/dist/cli/interactive/session-state.js +2 -0
  145. package/dist/cli/interactive/session-state.js.map +1 -0
  146. package/dist/cli/interactive/session.d.ts +71 -0
  147. package/dist/cli/interactive/session.d.ts.map +1 -0
  148. package/dist/cli/interactive/session.js +244 -0
  149. package/dist/cli/interactive/session.js.map +1 -0
  150. package/dist/cli/interactive/shell.d.ts +13 -0
  151. package/dist/cli/interactive/shell.d.ts.map +1 -0
  152. package/dist/cli/interactive/shell.js +115 -0
  153. package/dist/cli/interactive/shell.js.map +1 -0
  154. package/dist/cli/interactive/slash-dispatch.d.ts +14 -0
  155. package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -0
  156. package/dist/cli/interactive/slash-dispatch.js +276 -0
  157. package/dist/cli/interactive/slash-dispatch.js.map +1 -0
  158. package/dist/cli/interactive/slash-parse.d.ts +9 -0
  159. package/dist/cli/interactive/slash-parse.d.ts.map +1 -0
  160. package/dist/cli/interactive/slash-parse.js +78 -0
  161. package/dist/cli/interactive/slash-parse.js.map +1 -0
  162. package/dist/cli/interactive/slash-registry.d.ts +11 -0
  163. package/dist/cli/interactive/slash-registry.d.ts.map +1 -0
  164. package/dist/cli/interactive/slash-registry.js +26 -0
  165. package/dist/cli/interactive/slash-registry.js.map +1 -0
  166. package/dist/cli/interactive/slash-suggest.d.ts +4 -0
  167. package/dist/cli/interactive/slash-suggest.d.ts.map +1 -0
  168. package/dist/cli/interactive/slash-suggest.js +46 -0
  169. package/dist/cli/interactive/slash-suggest.js.map +1 -0
  170. package/dist/cli/interactive/tools-catalog.d.ts +8 -0
  171. package/dist/cli/interactive/tools-catalog.d.ts.map +1 -0
  172. package/dist/cli/interactive/tools-catalog.js +51 -0
  173. package/dist/cli/interactive/tools-catalog.js.map +1 -0
  174. package/dist/cli/main.d.ts +2 -0
  175. package/dist/cli/main.d.ts.map +1 -0
  176. package/dist/cli/main.js +69 -0
  177. package/dist/cli/main.js.map +1 -0
  178. package/dist/cli/ui/diff-view.d.ts +7 -0
  179. package/dist/cli/ui/diff-view.d.ts.map +1 -0
  180. package/dist/cli/ui/diff-view.js +18 -0
  181. package/dist/cli/ui/diff-view.js.map +1 -0
  182. package/dist/cli/ui/printer.d.ts +13 -0
  183. package/dist/cli/ui/printer.d.ts.map +1 -0
  184. package/dist/cli/ui/printer.js +24 -0
  185. package/dist/cli/ui/printer.js.map +1 -0
  186. package/dist/cli/ui/spinner.d.ts +5 -0
  187. package/dist/cli/ui/spinner.d.ts.map +1 -0
  188. package/dist/cli/ui/spinner.js +30 -0
  189. package/dist/cli/ui/spinner.js.map +1 -0
  190. package/dist/cli/ui/text-writer.d.ts +8 -0
  191. package/dist/cli/ui/text-writer.d.ts.map +1 -0
  192. package/dist/cli/ui/text-writer.js +17 -0
  193. package/dist/cli/ui/text-writer.js.map +1 -0
  194. package/dist/config/config.d.ts +30 -0
  195. package/dist/config/config.d.ts.map +1 -0
  196. package/dist/config/config.js +133 -0
  197. package/dist/config/config.js.map +1 -0
  198. package/dist/runtime/apply-verify.d.ts +28 -0
  199. package/dist/runtime/apply-verify.d.ts.map +1 -0
  200. package/dist/runtime/apply-verify.js +180 -0
  201. package/dist/runtime/apply-verify.js.map +1 -0
  202. package/dist/runtime/approvals.d.ts +10 -0
  203. package/dist/runtime/approvals.d.ts.map +1 -0
  204. package/dist/runtime/approvals.js +22 -0
  205. package/dist/runtime/approvals.js.map +1 -0
  206. package/dist/runtime/content-hash.d.ts +3 -0
  207. package/dist/runtime/content-hash.d.ts.map +1 -0
  208. package/dist/runtime/content-hash.js +8 -0
  209. package/dist/runtime/content-hash.js.map +1 -0
  210. package/dist/runtime/digest-mask.d.ts +2 -0
  211. package/dist/runtime/digest-mask.d.ts.map +1 -0
  212. package/dist/runtime/digest-mask.js +11 -0
  213. package/dist/runtime/digest-mask.js.map +1 -0
  214. package/dist/runtime/inspect.d.ts +20 -0
  215. package/dist/runtime/inspect.d.ts.map +1 -0
  216. package/dist/runtime/inspect.js +152 -0
  217. package/dist/runtime/inspect.js.map +1 -0
  218. package/dist/runtime/patch-apply.d.ts +32 -0
  219. package/dist/runtime/patch-apply.d.ts.map +1 -0
  220. package/dist/runtime/patch-apply.js +170 -0
  221. package/dist/runtime/patch-apply.js.map +1 -0
  222. package/dist/runtime/patch-path-guard.d.ts +17 -0
  223. package/dist/runtime/patch-path-guard.d.ts.map +1 -0
  224. package/dist/runtime/patch-path-guard.js +56 -0
  225. package/dist/runtime/patch-path-guard.js.map +1 -0
  226. package/dist/runtime/patch-proposal.d.ts +55 -0
  227. package/dist/runtime/patch-proposal.d.ts.map +1 -0
  228. package/dist/runtime/patch-proposal.js +118 -0
  229. package/dist/runtime/patch-proposal.js.map +1 -0
  230. package/dist/runtime/permissions.d.ts +18 -0
  231. package/dist/runtime/permissions.d.ts.map +1 -0
  232. package/dist/runtime/permissions.js +91 -0
  233. package/dist/runtime/permissions.js.map +1 -0
  234. package/dist/runtime/sandbox.d.ts +9 -0
  235. package/dist/runtime/sandbox.d.ts.map +1 -0
  236. package/dist/runtime/sandbox.js +17 -0
  237. package/dist/runtime/sandbox.js.map +1 -0
  238. package/dist/runtime/unified-diff.d.ts +19 -0
  239. package/dist/runtime/unified-diff.d.ts.map +1 -0
  240. package/dist/runtime/unified-diff.js +114 -0
  241. package/dist/runtime/unified-diff.js.map +1 -0
  242. package/dist/runtime/verifier.d.ts +6 -0
  243. package/dist/runtime/verifier.d.ts.map +1 -0
  244. package/dist/runtime/verifier.js +16 -0
  245. package/dist/runtime/verifier.js.map +1 -0
  246. package/dist/runtime/workspace.d.ts +10 -0
  247. package/dist/runtime/workspace.d.ts.map +1 -0
  248. package/dist/runtime/workspace.js +107 -0
  249. package/dist/runtime/workspace.js.map +1 -0
  250. package/dist/version.d.ts +3 -0
  251. package/dist/version.d.ts.map +1 -0
  252. package/dist/version.js +10 -0
  253. package/dist/version.js.map +1 -0
  254. package/docs/beta-feedback-template.md +75 -0
  255. package/docs/beta-feedback-triage.md +169 -0
  256. package/docs/beta-release-handoff.md +182 -0
  257. package/docs/beta-tester-checklist.md +62 -0
  258. package/docs/install-beta.md +77 -0
  259. package/docs/internal-beta.md +84 -0
  260. package/docs/known-limitations.md +62 -0
  261. package/docs/patze-cli-architecture.md +137 -0
  262. package/docs/patze-cli-codex-reference-study.md +43 -0
  263. package/docs/release-checklist.md +83 -0
  264. package/docs/safety-model.md +69 -0
  265. package/docs/smoke-command-guide.md +61 -0
  266. package/docs/trust-loop.md +90 -0
  267. package/docs/uninstall-reset.md +44 -0
  268. package/package.json +39 -0
package/CHANGELOG.md ADDED
@@ -0,0 +1,92 @@
1
+ # Changelog
2
+
3
+ All notable changes to `@patze/code-cli` are documented here.
4
+
5
+ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6
+
7
+ ## [0.10.2] - 2026-05-27
8
+
9
+ ### Added (internal beta rollout)
10
+
11
+ - `scripts/install-beta.sh` — npm `@beta` or local tarball install + verify
12
+ - `patze doctor [--check]` — read-only diagnostics (version, node, redacted config, package health, trust-loop posture); network only with `--check`
13
+ - Rollout docs: `install-beta`, `uninstall-reset`, `beta-tester-checklist`, `beta-feedback-template`, `release-checklist`, `known-limitations`, `smoke-command-guide`
14
+ - `tests/doctor.test.mjs`, `tests/docs-secrets.test.mjs` — redaction and docs hygiene
15
+
16
+ ### Changed
17
+
18
+ - `verify-pack` required paths include rollout docs
19
+ - `smoke-beta` asserts `patze doctor` read-only output
20
+ - README internal beta section and command table updated
21
+
22
+ ## [0.10.1] - 2026-05-27
23
+
24
+ ### Added (internal beta hardening)
25
+
26
+ - `scripts/verify-pack.mjs` — publish tarball audit (blocked paths, required files, secret-like content scan)
27
+ - `scripts/smoke-beta.mjs` — clean temp workspace smoke + local `npm pack` install check
28
+ - `docs/safety-model.md` — fail-closed safety boundaries for beta testers
29
+ - `docs/trust-loop.md` — operator guide for the interactive trust loop
30
+ - `docs/internal-beta.md` — internal beta install, verification, and known limits
31
+ - README internal beta quickstart and expanded implemented vs planned command tables
32
+
33
+ ### Changed
34
+
35
+ - `npm run verify` now includes smoke test after unit tests
36
+ - `help` output aligned with Phase 4 trust-loop commands
37
+
38
+ ## [0.10.0] - 2026-05-27
39
+
40
+ ### Added
41
+
42
+ - **Phase 4E:** Session apply history (process-local), trust-loop snapshot on `/status` and `/context`, drift recovery UX
43
+ - Verify failure blocks stale `/approve` and `/apply` until `/reject` or passing `/verify`
44
+ - `/reject` clears drift recovery without modifying files
45
+
46
+ ### Changed
47
+
48
+ - Richer `/status` and `/context` with masked digests, last apply/verify summaries
49
+
50
+ ## [0.9.0] - 2026-05-27
51
+
52
+ ### Added
53
+
54
+ - **Phase 4D:** Interactive `/verify` — local read-only hash verification after gated apply
55
+ - Per-file `beforeHash` / `afterHash` on apply; gate consumed tracking; repeated apply refused
56
+ - `patze code verify` — help-only local summary (no shell, no network)
57
+
58
+ ## [0.8.0] - 2026-05-27
59
+
60
+ ### Added
61
+
62
+ - **Phase 4C:** Gated interactive `/apply` with typed `APPLY <masked-digest>` confirmation
63
+ - `edit-with-approval` permission mode; unified diff apply with workspace guards
64
+ - `patze code apply` remains disabled (interactive only)
65
+
66
+ ## [0.6.0] - 2026-05-27
67
+
68
+ ### Added
69
+
70
+ - **Phase 4B:** Approval gate after `/diff` → `/approve` (no file writes)
71
+
72
+ ## [0.5.0] - 2026-05-27
73
+
74
+ ### Added
75
+
76
+ - **Phase 4A:** Read-only `/diff` and `patze code diff` for server patch proposals
77
+
78
+ ## [0.4.0] - 2026-05-27
79
+
80
+ ### Added
81
+
82
+ - Interactive agent loop, slash commands, free-text prompts
83
+
84
+ ## [0.3.0] - 2026-05-27
85
+
86
+ ### Added
87
+
88
+ - `patze code inspect`, `patze code plan --preview`, local workspace boundaries
89
+
90
+ [0.10.2]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.1...patze-code-cli-v0.10.2
91
+ [0.10.1]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.0...patze-code-cli-v0.10.1
92
+ [0.10.0]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/releases/tag/patze-code-cli-v0.10.0
package/NOTICE.md ADDED
@@ -0,0 +1,17 @@
1
+ # NOTICE
2
+
3
+ ## Patze Code CLI
4
+
5
+ Copyright (c) Patze. All rights reserved.
6
+
7
+ This package is **proprietary** unless and until a public license is explicitly declared.
8
+
9
+ ## Third-party references
10
+
11
+ Patze Code CLI is designed with reference to publicly documented terminal-agent patterns. We do **not** copy OpenAI Codex source code or branding into this product.
12
+
13
+ Internal development may consult the Cursor cookbook `coding-agent-cli` sample under `.cookbook-vendor/` (not published to npm). Any future adaptation of Apache-2.0 licensed code will preserve LICENSE/NOTICE attribution in this file.
14
+
15
+ ## Trademarks
16
+
17
+ "Codex" and "OpenAI" are trademarks of their respective owners. Patze Code is an independent product.
package/README.md ADDED
@@ -0,0 +1,177 @@
1
+ # Patze Code CLI
2
+
3
+ Professional local terminal client for Patze Code / PatzeAgents.
4
+
5
+ Patze Code runs coding tasks against your workspace while keeping **PatzeAgents server** as the authority for auth, entitlements, run records, artifacts, verification, and policy.
6
+
7
+ > **Internal beta (0.10.x):** Trust loop complete through verify + drift recovery. See [`docs/internal-beta.md`](docs/internal-beta.md) and [`docs/install-beta.md`](docs/install-beta.md). Not yet `npm latest` / 1.0.
8
+
9
+ ## Requirements
10
+
11
+ - **Node.js** 20+
12
+ - Patze API reachable from your machine (optional — for server-backed preview)
13
+
14
+ ## Install (internal beta)
15
+
16
+ ```bash
17
+ # Helper script (monorepo)
18
+ cd packages/patze-code-cli
19
+ ./scripts/install-beta.sh local
20
+
21
+ # Or manual tarball
22
+ npm run build && npm pack
23
+ npm install -g ./patze-code-cli-0.10.2.tgz
24
+ patze --version
25
+ ```
26
+
27
+ Registry (when published):
28
+
29
+ ```bash
30
+ npm install -g @patze/code-cli@beta
31
+ # or pinned: @patze/code-cli@0.10.2
32
+ patze --version
33
+ ```
34
+
35
+ Full guide: [`docs/install-beta.md`](docs/install-beta.md) · Checklist: [`docs/beta-tester-checklist.md`](docs/beta-tester-checklist.md)
36
+
37
+ ## Quick start (beta tester)
38
+
39
+ ```bash
40
+ # 1. Clean fixture workspace
41
+ mkdir -p /tmp/patze-beta && cd /tmp/patze-beta
42
+ git init
43
+
44
+ # 2. Optional — server preview auth (use env, never commit secrets)
45
+ export PATZE_CODE_API=https://api.example.com
46
+ export PATZE_CODE_TOKEN=<internal-api-key>
47
+ export PATZE_CODE_USER_ID=<user-uuid>
48
+
49
+ # 3. Read-only checks
50
+ patze status
51
+ patze doctor
52
+ patze code inspect
53
+ patze goal "Review README" --dry-run
54
+
55
+ # 4. Interactive trust loop
56
+ patze
57
+ ```
58
+
59
+ Inside `patze`:
60
+
61
+ ```text
62
+ /goal Update README quickstart
63
+ /plan
64
+ /diff
65
+ /permissions suggest
66
+ /approve
67
+ /permissions edit-with-approval
68
+ /apply
69
+ APPLY artifa…90ab
70
+ /verify
71
+ /status
72
+ ```
73
+
74
+ ## Trust loop
75
+
76
+ ```
77
+ prompt → inspect → plan → diff → permissions → approve → apply → verify
78
+ ```
79
+
80
+ Docs: [`docs/trust-loop.md`](docs/trust-loop.md) · [`docs/safety-model.md`](docs/safety-model.md)
81
+
82
+ ## Command status (0.10.2)
83
+
84
+ ### Interactive (`patze` shell)
85
+
86
+ | Command | Status | Notes |
87
+ |---------|--------|-------|
88
+ | free-text prompt | ✅ | Agent loop (inspect → plan) |
89
+ | `/help` | ✅ | |
90
+ | `/status [--check]` | ✅ | Trust-loop snapshot + auth posture |
91
+ | `/context` | ✅ | Session state (digests masked) |
92
+ | `/goal <task>` | ✅ | Local dry-run plan |
93
+ | `/inspect` | ✅ | Read-only workspace scan |
94
+ | `/plan [task]` | ✅ | Server preview when auth ready |
95
+ | `/permissions [mode]` | ✅ | Selector + direct set |
96
+ | `/tools` | ✅ | Tool availability catalog |
97
+ | `/diff` | ✅ | Read-only patch preview |
98
+ | `/approve` | ✅ | Approval gate (no writes) |
99
+ | `/apply` | ✅ | Gated apply + typed confirmation |
100
+ | `/verify` | ✅ | Local read-only hash verify |
101
+ | `/reject` | ✅ | Clear gate / drift recovery |
102
+ | `/reset` | ✅ | Clear agent session state |
103
+ | `/clear` | ✅ | Clear transcript |
104
+ | `/exit` | ✅ | |
105
+
106
+ ### Top-level CLI
107
+
108
+ | Command | Status | Notes |
109
+ |---------|--------|-------|
110
+ | `patze` | ✅ | Interactive shell (default) |
111
+ | `patze --version` | ✅ | |
112
+ | `patze status [--check]` | ✅ | |
113
+ | `patze doctor [--check]` | ✅ | Read-only; network only with `--check` |
114
+ | `patze login <api> <token> <id>` | ✅ | Writes local config |
115
+ | `patze goal "<task>" --dry-run` | ✅ | Non-interactive plan |
116
+ | `patze code inspect` | ✅ | |
117
+ | `patze code plan --preview` | ✅ | Needs auth |
118
+ | `patze code diff` | ✅ | Read-only |
119
+ | `patze code apply` | 🚫 disabled | Interactive `/apply` only |
120
+ | `patze code verify` | ℹ️ help-only | No session apply → summary only |
121
+ | `patze runs …` | 📋 planned | No runs sync in beta |
122
+ | `patze config` | 📋 planned | |
123
+
124
+ ### Permission modes
125
+
126
+ | Mode | Status | Capabilities |
127
+ |------|--------|--------------|
128
+ | `read-only` | ✅ | inspect, plan, diff |
129
+ | `suggest` | ✅ | + approval gate |
130
+ | `edit-with-approval` | ✅ | + gated `/apply` |
131
+ | `full-auto` | 🚫 forbidden | Never enabled |
132
+
133
+ Legend: ✅ implemented · 🚫 explicitly disabled · 📋 planned · ℹ️ informational only
134
+
135
+ ## Safety model (summary)
136
+
137
+ - No auto-apply, no `--yes`, no shell execution from verify
138
+ - Apply is interactive-only with explicit `APPLY <masked-digest>` confirmation
139
+ - All session digests masked; tokens never printed in full
140
+ - Verify fail-closed; drift recovery blocks stale approve/apply
141
+ - **`full-auto` forbidden permanently**
142
+
143
+ Full detail: [`docs/safety-model.md`](docs/safety-model.md)
144
+
145
+ ## Development & release verify
146
+
147
+ ```bash
148
+ cd packages/patze-code-cli
149
+ npm run verify # version + pack audit + typecheck + tests + smoke
150
+ npm run verify:pack # tarball audit (--verbose for JSON summary)
151
+ npm run smoke # temp workspace + local npm pack install
152
+ ```
153
+
154
+ ## Release blockers (before npm `latest` / 1.0)
155
+
156
+ - [ ] Public npm publish policy + scoped access review
157
+ - [ ] Shell-based verify (npm test/lint) as optional gated capability
158
+ - [ ] `patze runs` read-only sync (no mutation path)
159
+ - [ ] Server apply receipt correlation (read-only)
160
+ - [ ] Cross-restart session persistence decision
161
+ - [ ] OAuth / dashboard login flow (replace dev `login` token paste)
162
+ - [ ] Production error telemetry without leaking secrets
163
+
164
+ ## Documentation
165
+
166
+ - Architecture: [`docs/patze-cli-architecture.md`](docs/patze-cli-architecture.md)
167
+ - Internal beta: [`docs/internal-beta.md`](docs/internal-beta.md)
168
+ - Install: [`docs/install-beta.md`](docs/install-beta.md)
169
+ - Beta checklist: [`docs/beta-tester-checklist.md`](docs/beta-tester-checklist.md)
170
+ - Feedback template: [`docs/beta-feedback-template.md`](docs/beta-feedback-template.md)
171
+ - Known limits: [`docs/known-limitations.md`](docs/known-limitations.md)
172
+ - Release checklist: [`docs/release-checklist.md`](docs/release-checklist.md)
173
+ - Changelog: [`CHANGELOG.md`](CHANGELOG.md)
174
+
175
+ ## License
176
+
177
+ Proprietary — see [`NOTICE.md`](NOTICE.md).
package/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.10.2
package/bin/patze.mjs ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env node
2
+ import { pathToFileURL } from "node:url"
3
+ import { dirname, resolve } from "node:path"
4
+ import { fileURLToPath } from "node:url"
5
+
6
+ const root = resolve(dirname(fileURLToPath(import.meta.url)), "..")
7
+ await import(pathToFileURL(resolve(root, "dist/cli/main.js")).href)
@@ -0,0 +1,13 @@
1
+ export type AuthState = {
2
+ configured: boolean;
3
+ api: string | null;
4
+ userId: string | null;
5
+ tokenPresent: boolean;
6
+ };
7
+ export declare function describeAuth(state: AuthState): string[];
8
+ export declare function isAuthConfigured(input: {
9
+ api: string | null;
10
+ token: string | null;
11
+ userId: string | null;
12
+ }): boolean;
13
+ //# sourceMappingURL=auth.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.d.ts","sourceRoot":"","sources":["../../src/backend/auth.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,SAAS,GAAG;IACtB,UAAU,EAAE,OAAO,CAAA;IACnB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,YAAY,EAAE,OAAO,CAAA;CACtB,CAAA;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,MAAM,EAAE,CAOvD;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE;IACtC,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAA;IACpB,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;CACtB,GAAG,OAAO,CAEV"}
@@ -0,0 +1,12 @@
1
+ export function describeAuth(state) {
2
+ const lines = [];
3
+ lines.push(`api: ${state.api ?? "not set"}`);
4
+ lines.push(`user: ${state.userId ?? "not set"}`);
5
+ lines.push(`token: ${state.tokenPresent ? "configured" : "missing"}`);
6
+ lines.push(`ready: ${state.configured ? "yes" : "no"}`);
7
+ return lines;
8
+ }
9
+ export function isAuthConfigured(input) {
10
+ return Boolean(input.api && input.token && input.userId);
11
+ }
12
+ //# sourceMappingURL=auth.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auth.js","sourceRoot":"","sources":["../../src/backend/auth.ts"],"names":[],"mappings":"AAOA,MAAM,UAAU,YAAY,CAAC,KAAgB;IAC3C,MAAM,KAAK,GAAa,EAAE,CAAA;IAC1B,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,CAAC,GAAG,IAAI,SAAS,EAAE,CAAC,CAAA;IAC5C,KAAK,CAAC,IAAI,CAAC,SAAS,KAAK,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC,CAAA;IAChD,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;IACrE,KAAK,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;IACvD,OAAO,KAAK,CAAA;AACd,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,KAIhC;IACC,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,CAAC,CAAA;AAC1D,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { ResolvedConfig } from "../config/config.js";
2
+ export type HealthProbe = {
3
+ ok: boolean;
4
+ status: number | null;
5
+ message: string;
6
+ };
7
+ export declare class PatzeBackendClient {
8
+ private readonly config;
9
+ constructor(config: ResolvedConfig);
10
+ get baseUrl(): string | null;
11
+ buildHeaders(): Record<string, string>;
12
+ probeHealth(timeoutMs?: number): Promise<HealthProbe>;
13
+ }
14
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAEzD,MAAM,MAAM,WAAW,GAAG;IACxB,EAAE,EAAE,OAAO,CAAA;IACX,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;IACrB,OAAO,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,qBAAa,kBAAkB;IACjB,OAAO,CAAC,QAAQ,CAAC,MAAM;gBAAN,MAAM,EAAE,cAAc;IAEnD,IAAI,OAAO,IAAI,MAAM,GAAG,IAAI,CAE3B;IAED,YAAY,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;IAchC,WAAW,CAAC,SAAS,SAAQ,GAAG,OAAO,CAAC,WAAW,CAAC;CA4B3D"}
@@ -0,0 +1,51 @@
1
+ export class PatzeBackendClient {
2
+ config;
3
+ constructor(config) {
4
+ this.config = config;
5
+ }
6
+ get baseUrl() {
7
+ return this.config.api;
8
+ }
9
+ buildHeaders() {
10
+ const headers = {
11
+ Accept: "application/json",
12
+ "Content-Type": "application/json",
13
+ };
14
+ if (this.config.token) {
15
+ headers["X-Internal-API-Key"] = this.config.token;
16
+ }
17
+ if (this.config.userId) {
18
+ headers["X-Internal-User-Id"] = this.config.userId;
19
+ }
20
+ return headers;
21
+ }
22
+ async probeHealth(timeoutMs = 5_000) {
23
+ if (!this.config.api) {
24
+ return { ok: false, status: null, message: "API URL not configured" };
25
+ }
26
+ const controller = new AbortController();
27
+ const timer = setTimeout(() => controller.abort(), timeoutMs);
28
+ try {
29
+ const response = await fetch(new URL("/health", this.config.api), {
30
+ method: "GET",
31
+ signal: controller.signal,
32
+ });
33
+ if (!response.ok) {
34
+ return {
35
+ ok: false,
36
+ status: response.status,
37
+ message: `health returned ${response.status}`,
38
+ };
39
+ }
40
+ return { ok: true, status: response.status, message: "reachable" };
41
+ }
42
+ catch (error) {
43
+ const message = error instanceof Error ? error.message : "health probe failed";
44
+ return { ok: false, status: null, message };
45
+ }
46
+ finally {
47
+ clearTimeout(timer);
48
+ }
49
+ }
50
+ }
51
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/backend/client.ts"],"names":[],"mappings":"AAQA,MAAM,OAAO,kBAAkB;IACA;IAA7B,YAA6B,MAAsB;QAAtB,WAAM,GAAN,MAAM,CAAgB;IAAG,CAAC;IAEvD,IAAI,OAAO;QACT,OAAO,IAAI,CAAC,MAAM,CAAC,GAAG,CAAA;IACxB,CAAC;IAED,YAAY;QACV,MAAM,OAAO,GAA2B;YACtC,MAAM,EAAE,kBAAkB;YAC1B,cAAc,EAAE,kBAAkB;SACnC,CAAA;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACtB,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAA;QACnD,CAAC;QACD,IAAI,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YACvB,OAAO,CAAC,oBAAoB,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,CAAA;QACpD,CAAC;QACD,OAAO,OAAO,CAAA;IAChB,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,SAAS,GAAG,KAAK;QACjC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC;YACrB,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,wBAAwB,EAAE,CAAA;QACvE,CAAC;QAED,MAAM,UAAU,GAAG,IAAI,eAAe,EAAE,CAAA;QACxC,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,UAAU,CAAC,KAAK,EAAE,EAAE,SAAS,CAAC,CAAA;QAE7D,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,IAAI,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE;gBAChE,MAAM,EAAE,KAAK;gBACb,MAAM,EAAE,UAAU,CAAC,MAAM;aAC1B,CAAC,CAAA;YACF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;gBACjB,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,MAAM,EAAE,QAAQ,CAAC,MAAM;oBACvB,OAAO,EAAE,mBAAmB,QAAQ,CAAC,MAAM,EAAE;iBAC9C,CAAA;YACH,CAAC;YACD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,CAAA;QACpE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,qBAAqB,CAAA;YAC9E,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,CAAA;QAC7C,CAAC;gBAAS,CAAC;YACT,YAAY,CAAC,KAAK,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;CACF"}
@@ -0,0 +1,33 @@
1
+ import type { PatchProposalRaw } from "../runtime/patch-proposal.js";
2
+ export type PreviewRouteResponse = {
3
+ status: string;
4
+ error_code: string;
5
+ artifact_digest: string;
6
+ preview_digest: string;
7
+ finding_codes: string[];
8
+ approval_required: boolean;
9
+ canary_eligible: boolean;
10
+ no_auto_apply: boolean;
11
+ digest: string;
12
+ patch_proposal?: PatchProposalRaw | null;
13
+ };
14
+ export type PreviewClientResult = {
15
+ ok: true;
16
+ response: PreviewRouteResponse;
17
+ httpStatus: number;
18
+ } | {
19
+ ok: false;
20
+ kind: "auth" | "network" | "server";
21
+ message: string;
22
+ httpStatus: number | null;
23
+ };
24
+ export type FetchLike = typeof fetch;
25
+ export declare function postUserTaskPreview(input: {
26
+ apiBase: string;
27
+ headers: Record<string, string>;
28
+ payload: unknown;
29
+ fetchImpl?: FetchLike;
30
+ timeoutMs?: number;
31
+ }): Promise<PreviewClientResult>;
32
+ export declare function normalizePreviewResponse(body: unknown): PreviewRouteResponse | null;
33
+ //# sourceMappingURL=preview-client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-client.d.ts","sourceRoot":"","sources":["../../src/backend/preview-client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAA;AAEpE,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAA;IACd,UAAU,EAAE,MAAM,CAAA;IAClB,eAAe,EAAE,MAAM,CAAA;IACvB,cAAc,EAAE,MAAM,CAAA;IACtB,aAAa,EAAE,MAAM,EAAE,CAAA;IACvB,iBAAiB,EAAE,OAAO,CAAA;IAC1B,eAAe,EAAE,OAAO,CAAA;IACxB,aAAa,EAAE,OAAO,CAAA;IACtB,MAAM,EAAE,MAAM,CAAA;IACd,cAAc,CAAC,EAAE,gBAAgB,GAAG,IAAI,CAAA;CACzC,CAAA;AAED,MAAM,MAAM,mBAAmB,GAC3B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,QAAQ,EAAE,oBAAoB,CAAC;IAAC,UAAU,EAAE,MAAM,CAAA;CAAE,GAChE;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,MAAM,MAAM,SAAS,GAAG,OAAO,KAAK,CAAA;AAEpC,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,OAAO,CAAA;IAChB,SAAS,CAAC,EAAE,SAAS,CAAA;IACrB,SAAS,CAAC,EAAE,MAAM,CAAA;CACnB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6D/B;AAiBD,wBAAgB,wBAAwB,CAAC,IAAI,EAAE,OAAO,GAAG,oBAAoB,GAAG,IAAI,CAyBnF"}
@@ -0,0 +1,104 @@
1
+ export async function postUserTaskPreview(input) {
2
+ const fetchImpl = input.fetchImpl ?? fetch;
3
+ const url = new URL("/internal/patze-code/user-task-preview", input.apiBase);
4
+ const controller = new AbortController();
5
+ const timer = setTimeout(() => controller.abort(), input.timeoutMs ?? 60_000);
6
+ try {
7
+ const response = await fetchImpl(url, {
8
+ method: "POST",
9
+ headers: input.headers,
10
+ body: JSON.stringify(input.payload),
11
+ signal: controller.signal,
12
+ });
13
+ let body;
14
+ try {
15
+ body = await response.json();
16
+ }
17
+ catch {
18
+ return {
19
+ ok: false,
20
+ kind: "server",
21
+ message: `preview returned non-JSON (${response.status})`,
22
+ httpStatus: response.status,
23
+ };
24
+ }
25
+ if (response.status === 401 || response.status === 403) {
26
+ return {
27
+ ok: false,
28
+ kind: "auth",
29
+ message: extractDetail(body) ?? `preview auth failed (${response.status})`,
30
+ httpStatus: response.status,
31
+ };
32
+ }
33
+ if (!response.ok) {
34
+ return {
35
+ ok: false,
36
+ kind: "server",
37
+ message: extractDetail(body) ?? `preview failed (${response.status})`,
38
+ httpStatus: response.status,
39
+ };
40
+ }
41
+ const normalized = normalizePreviewResponse(body);
42
+ if (!normalized) {
43
+ return {
44
+ ok: false,
45
+ kind: "server",
46
+ message: "preview returned unexpected shape",
47
+ httpStatus: response.status,
48
+ };
49
+ }
50
+ return { ok: true, response: normalized, httpStatus: response.status };
51
+ }
52
+ catch (error) {
53
+ const message = error instanceof Error ? error.message : "preview request failed";
54
+ return { ok: false, kind: "network", message, httpStatus: null };
55
+ }
56
+ finally {
57
+ clearTimeout(timer);
58
+ }
59
+ }
60
+ function extractDetail(body) {
61
+ if (!body || typeof body !== "object") {
62
+ return null;
63
+ }
64
+ const detail = body.detail;
65
+ if (typeof detail === "string" && detail.trim()) {
66
+ return detail.trim();
67
+ }
68
+ const errorCode = body.error_code;
69
+ if (typeof errorCode === "string" && errorCode.trim()) {
70
+ return errorCode.trim();
71
+ }
72
+ return null;
73
+ }
74
+ export function normalizePreviewResponse(body) {
75
+ if (!body || typeof body !== "object") {
76
+ return null;
77
+ }
78
+ const record = body;
79
+ const findingCodes = Array.isArray(record.finding_codes)
80
+ ? record.finding_codes.filter((item) => typeof item === "string")
81
+ : [];
82
+ if (typeof record.status !== "string") {
83
+ return null;
84
+ }
85
+ return {
86
+ status: record.status,
87
+ error_code: typeof record.error_code === "string" ? record.error_code : "",
88
+ artifact_digest: typeof record.artifact_digest === "string" ? record.artifact_digest : "",
89
+ preview_digest: typeof record.preview_digest === "string" ? record.preview_digest : "",
90
+ finding_codes: findingCodes,
91
+ approval_required: record.approval_required === true,
92
+ canary_eligible: record.canary_eligible === true,
93
+ no_auto_apply: record.no_auto_apply !== false,
94
+ digest: typeof record.digest === "string" ? record.digest : "",
95
+ patch_proposal: parseOptionalPatchProposal(record.patch_proposal),
96
+ };
97
+ }
98
+ function parseOptionalPatchProposal(value) {
99
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
100
+ return null;
101
+ }
102
+ return value;
103
+ }
104
+ //# sourceMappingURL=preview-client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-client.js","sourceRoot":"","sources":["../../src/backend/preview-client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { ResolvedConfig } from "../config/config.js";
2
+ export type PreviewTaskPayload = {
3
+ owner_user_id: string;
4
+ task_input: {
5
+ objective: string;
6
+ workflow_mode: string;
7
+ repo_id: string;
8
+ workspace_scope: string;
9
+ allowed_paths: string[];
10
+ denied_paths: string[];
11
+ consent: {
12
+ status: "granted";
13
+ consent_digest: string;
14
+ granted_by_digest: string;
15
+ };
16
+ approval_requirement: {
17
+ required: true;
18
+ reason: string;
19
+ review_artifact_digest: string;
20
+ };
21
+ expected_artifacts: string[];
22
+ rollback_notes: string[];
23
+ canary_requested: false;
24
+ metadata: {
25
+ source: string;
26
+ };
27
+ repo_metadata: {
28
+ repo: string;
29
+ };
30
+ };
31
+ policy: {
32
+ repo_id: string;
33
+ repo_allowlist: string[];
34
+ no_auto_apply: true;
35
+ auto_apply_requested: false;
36
+ cloud_requested: false;
37
+ pr_requested: false;
38
+ public_route_requested: false;
39
+ ui_requested: false;
40
+ cursor_canary_requested: false;
41
+ frontend_api_key_exposure_marker: false;
42
+ require_review_artifact_for_canary: true;
43
+ };
44
+ };
45
+ export declare function buildPreviewPayload(input: {
46
+ objective: string;
47
+ cwd: string;
48
+ config: ResolvedConfig;
49
+ }): PreviewTaskPayload;
50
+ //# sourceMappingURL=preview-payload.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-payload.d.ts","sourceRoot":"","sources":["../../src/backend/preview-payload.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAA;AAGzD,MAAM,MAAM,kBAAkB,GAAG;IAC/B,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE;QACV,SAAS,EAAE,MAAM,CAAA;QACjB,aAAa,EAAE,MAAM,CAAA;QACrB,OAAO,EAAE,MAAM,CAAA;QACf,eAAe,EAAE,MAAM,CAAA;QACvB,aAAa,EAAE,MAAM,EAAE,CAAA;QACvB,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,OAAO,EAAE;YACP,MAAM,EAAE,SAAS,CAAA;YACjB,cAAc,EAAE,MAAM,CAAA;YACtB,iBAAiB,EAAE,MAAM,CAAA;SAC1B,CAAA;QACD,oBAAoB,EAAE;YACpB,QAAQ,EAAE,IAAI,CAAA;YACd,MAAM,EAAE,MAAM,CAAA;YACd,sBAAsB,EAAE,MAAM,CAAA;SAC/B,CAAA;QACD,kBAAkB,EAAE,MAAM,EAAE,CAAA;QAC5B,cAAc,EAAE,MAAM,EAAE,CAAA;QACxB,gBAAgB,EAAE,KAAK,CAAA;QACvB,QAAQ,EAAE;YAAE,MAAM,EAAE,MAAM,CAAA;SAAE,CAAA;QAC5B,aAAa,EAAE;YAAE,IAAI,EAAE,MAAM,CAAA;SAAE,CAAA;KAChC,CAAA;IACD,MAAM,EAAE;QACN,OAAO,EAAE,MAAM,CAAA;QACf,cAAc,EAAE,MAAM,EAAE,CAAA;QACxB,aAAa,EAAE,IAAI,CAAA;QACnB,oBAAoB,EAAE,KAAK,CAAA;QAC3B,eAAe,EAAE,KAAK,CAAA;QACtB,YAAY,EAAE,KAAK,CAAA;QACnB,sBAAsB,EAAE,KAAK,CAAA;QAC7B,YAAY,EAAE,KAAK,CAAA;QACnB,uBAAuB,EAAE,KAAK,CAAA;QAC9B,gCAAgC,EAAE,KAAK,CAAA;QACvC,kCAAkC,EAAE,IAAI,CAAA;KACzC,CAAA;CACF,CAAA;AA6CD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE;IACzC,SAAS,EAAE,MAAM,CAAA;IACjB,GAAG,EAAE,MAAM,CAAA;IACX,MAAM,EAAE,cAAc,CAAA;CACvB,GAAG,kBAAkB,CAmDrB"}