@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.
- package/CHANGELOG.md +92 -0
- package/NOTICE.md +17 -0
- package/README.md +177 -0
- package/VERSION +1 -0
- package/bin/patze.mjs +7 -0
- package/dist/backend/auth.d.ts +13 -0
- package/dist/backend/auth.d.ts.map +1 -0
- package/dist/backend/auth.js +12 -0
- package/dist/backend/auth.js.map +1 -0
- package/dist/backend/client.d.ts +14 -0
- package/dist/backend/client.d.ts.map +1 -0
- package/dist/backend/client.js +51 -0
- package/dist/backend/client.js.map +1 -0
- package/dist/backend/preview-client.d.ts +33 -0
- package/dist/backend/preview-client.d.ts.map +1 -0
- package/dist/backend/preview-client.js +104 -0
- package/dist/backend/preview-client.js.map +1 -0
- package/dist/backend/preview-payload.d.ts +50 -0
- package/dist/backend/preview-payload.d.ts.map +1 -0
- package/dist/backend/preview-payload.js +92 -0
- package/dist/backend/preview-payload.js.map +1 -0
- package/dist/cli/argv.d.ts +10 -0
- package/dist/cli/argv.d.ts.map +1 -0
- package/dist/cli/argv.js +67 -0
- package/dist/cli/argv.js.map +1 -0
- package/dist/cli/commands/apply-format.d.ts +12 -0
- package/dist/cli/commands/apply-format.d.ts.map +1 -0
- package/dist/cli/commands/apply-format.js +50 -0
- package/dist/cli/commands/apply-format.js.map +1 -0
- package/dist/cli/commands/apply.d.ts +14 -0
- package/dist/cli/commands/apply.d.ts.map +1 -0
- package/dist/cli/commands/apply.js +256 -0
- package/dist/cli/commands/apply.js.map +1 -0
- package/dist/cli/commands/approve-format.d.ts +4 -0
- package/dist/cli/commands/approve-format.d.ts.map +1 -0
- package/dist/cli/commands/approve-format.js +40 -0
- package/dist/cli/commands/approve-format.js.map +1 -0
- package/dist/cli/commands/approve.d.ts +19 -0
- package/dist/cli/commands/approve.d.ts.map +1 -0
- package/dist/cli/commands/approve.js +91 -0
- package/dist/cli/commands/approve.js.map +1 -0
- package/dist/cli/commands/code.d.ts +4 -0
- package/dist/cli/commands/code.d.ts.map +1 -0
- package/dist/cli/commands/code.js +57 -0
- package/dist/cli/commands/code.js.map +1 -0
- package/dist/cli/commands/diff-format.d.ts +12 -0
- package/dist/cli/commands/diff-format.d.ts.map +1 -0
- package/dist/cli/commands/diff-format.js +151 -0
- package/dist/cli/commands/diff-format.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +22 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +101 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +6 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +99 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/goal-format.d.ts +3 -0
- package/dist/cli/commands/goal-format.d.ts.map +1 -0
- package/dist/cli/commands/goal-format.js +32 -0
- package/dist/cli/commands/goal-format.js.map +1 -0
- package/dist/cli/commands/goal.d.ts +28 -0
- package/dist/cli/commands/goal.d.ts.map +1 -0
- package/dist/cli/commands/goal.js +80 -0
- package/dist/cli/commands/goal.js.map +1 -0
- package/dist/cli/commands/inspect-format.d.ts +6 -0
- package/dist/cli/commands/inspect-format.d.ts.map +1 -0
- package/dist/cli/commands/inspect-format.js +62 -0
- package/dist/cli/commands/inspect-format.js.map +1 -0
- package/dist/cli/commands/inspect.d.ts +7 -0
- package/dist/cli/commands/inspect.d.ts.map +1 -0
- package/dist/cli/commands/inspect.js +11 -0
- package/dist/cli/commands/inspect.js.map +1 -0
- package/dist/cli/commands/login.d.ts +4 -0
- package/dist/cli/commands/login.d.ts.map +1 -0
- package/dist/cli/commands/login.js +21 -0
- package/dist/cli/commands/login.js.map +1 -0
- package/dist/cli/commands/plan-format.d.ts +7 -0
- package/dist/cli/commands/plan-format.d.ts.map +1 -0
- package/dist/cli/commands/plan-format.js +48 -0
- package/dist/cli/commands/plan-format.js.map +1 -0
- package/dist/cli/commands/plan.d.ts +13 -0
- package/dist/cli/commands/plan.d.ts.map +1 -0
- package/dist/cli/commands/plan.js +64 -0
- package/dist/cli/commands/plan.js.map +1 -0
- package/dist/cli/commands/runs.d.ts +5 -0
- package/dist/cli/commands/runs.d.ts.map +1 -0
- package/dist/cli/commands/runs.js +25 -0
- package/dist/cli/commands/runs.js.map +1 -0
- package/dist/cli/commands/session-snapshot-format.d.ts +3 -0
- package/dist/cli/commands/session-snapshot-format.d.ts.map +1 -0
- package/dist/cli/commands/session-snapshot-format.js +5 -0
- package/dist/cli/commands/session-snapshot-format.js.map +1 -0
- package/dist/cli/commands/status-format.d.ts +11 -0
- package/dist/cli/commands/status-format.d.ts.map +1 -0
- package/dist/cli/commands/status-format.js +57 -0
- package/dist/cli/commands/status-format.js.map +1 -0
- package/dist/cli/commands/status.d.ts +4 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +12 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/trust-loop-snapshot.d.ts +3 -0
- package/dist/cli/commands/trust-loop-snapshot.d.ts.map +1 -0
- package/dist/cli/commands/trust-loop-snapshot.js +125 -0
- package/dist/cli/commands/trust-loop-snapshot.js.map +1 -0
- package/dist/cli/commands/verify-drift-guard.d.ts +2 -0
- package/dist/cli/commands/verify-drift-guard.d.ts.map +1 -0
- package/dist/cli/commands/verify-drift-guard.js +11 -0
- package/dist/cli/commands/verify-drift-guard.js.map +1 -0
- package/dist/cli/commands/verify.d.ts +12 -0
- package/dist/cli/commands/verify.d.ts.map +1 -0
- package/dist/cli/commands/verify.js +62 -0
- package/dist/cli/commands/verify.js.map +1 -0
- package/dist/cli/help.d.ts +3 -0
- package/dist/cli/help.d.ts.map +1 -0
- package/dist/cli/help.js +36 -0
- package/dist/cli/help.js.map +1 -0
- package/dist/cli/interactive/agent-turn-format.d.ts +15 -0
- package/dist/cli/interactive/agent-turn-format.d.ts.map +1 -0
- package/dist/cli/interactive/agent-turn-format.js +70 -0
- package/dist/cli/interactive/agent-turn-format.js.map +1 -0
- package/dist/cli/interactive/agent-turn.d.ts +9 -0
- package/dist/cli/interactive/agent-turn.d.ts.map +1 -0
- package/dist/cli/interactive/agent-turn.js +103 -0
- package/dist/cli/interactive/agent-turn.js.map +1 -0
- package/dist/cli/interactive/header.d.ts +4 -0
- package/dist/cli/interactive/header.d.ts.map +1 -0
- package/dist/cli/interactive/header.js +28 -0
- package/dist/cli/interactive/header.js.map +1 -0
- package/dist/cli/interactive/permissions-command.d.ts +15 -0
- package/dist/cli/interactive/permissions-command.d.ts.map +1 -0
- package/dist/cli/interactive/permissions-command.js +88 -0
- package/dist/cli/interactive/permissions-command.js.map +1 -0
- package/dist/cli/interactive/permissions-format.d.ts +18 -0
- package/dist/cli/interactive/permissions-format.d.ts.map +1 -0
- package/dist/cli/interactive/permissions-format.js +142 -0
- package/dist/cli/interactive/permissions-format.js.map +1 -0
- package/dist/cli/interactive/permissions-keys.d.ts +5 -0
- package/dist/cli/interactive/permissions-keys.d.ts.map +1 -0
- package/dist/cli/interactive/permissions-keys.js +58 -0
- package/dist/cli/interactive/permissions-keys.js.map +1 -0
- package/dist/cli/interactive/session-state.d.ts +68 -0
- package/dist/cli/interactive/session-state.d.ts.map +1 -0
- package/dist/cli/interactive/session-state.js +2 -0
- package/dist/cli/interactive/session-state.js.map +1 -0
- package/dist/cli/interactive/session.d.ts +71 -0
- package/dist/cli/interactive/session.d.ts.map +1 -0
- package/dist/cli/interactive/session.js +244 -0
- package/dist/cli/interactive/session.js.map +1 -0
- package/dist/cli/interactive/shell.d.ts +13 -0
- package/dist/cli/interactive/shell.d.ts.map +1 -0
- package/dist/cli/interactive/shell.js +115 -0
- package/dist/cli/interactive/shell.js.map +1 -0
- package/dist/cli/interactive/slash-dispatch.d.ts +14 -0
- package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -0
- package/dist/cli/interactive/slash-dispatch.js +276 -0
- package/dist/cli/interactive/slash-dispatch.js.map +1 -0
- package/dist/cli/interactive/slash-parse.d.ts +9 -0
- package/dist/cli/interactive/slash-parse.d.ts.map +1 -0
- package/dist/cli/interactive/slash-parse.js +78 -0
- package/dist/cli/interactive/slash-parse.js.map +1 -0
- package/dist/cli/interactive/slash-registry.d.ts +11 -0
- package/dist/cli/interactive/slash-registry.d.ts.map +1 -0
- package/dist/cli/interactive/slash-registry.js +26 -0
- package/dist/cli/interactive/slash-registry.js.map +1 -0
- package/dist/cli/interactive/slash-suggest.d.ts +4 -0
- package/dist/cli/interactive/slash-suggest.d.ts.map +1 -0
- package/dist/cli/interactive/slash-suggest.js +46 -0
- package/dist/cli/interactive/slash-suggest.js.map +1 -0
- package/dist/cli/interactive/tools-catalog.d.ts +8 -0
- package/dist/cli/interactive/tools-catalog.d.ts.map +1 -0
- package/dist/cli/interactive/tools-catalog.js +51 -0
- package/dist/cli/interactive/tools-catalog.js.map +1 -0
- package/dist/cli/main.d.ts +2 -0
- package/dist/cli/main.d.ts.map +1 -0
- package/dist/cli/main.js +69 -0
- package/dist/cli/main.js.map +1 -0
- package/dist/cli/ui/diff-view.d.ts +7 -0
- package/dist/cli/ui/diff-view.d.ts.map +1 -0
- package/dist/cli/ui/diff-view.js +18 -0
- package/dist/cli/ui/diff-view.js.map +1 -0
- package/dist/cli/ui/printer.d.ts +13 -0
- package/dist/cli/ui/printer.d.ts.map +1 -0
- package/dist/cli/ui/printer.js +24 -0
- package/dist/cli/ui/printer.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +5 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +30 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/ui/text-writer.d.ts +8 -0
- package/dist/cli/ui/text-writer.d.ts.map +1 -0
- package/dist/cli/ui/text-writer.js +17 -0
- package/dist/cli/ui/text-writer.js.map +1 -0
- package/dist/config/config.d.ts +30 -0
- package/dist/config/config.d.ts.map +1 -0
- package/dist/config/config.js +133 -0
- package/dist/config/config.js.map +1 -0
- package/dist/runtime/apply-verify.d.ts +28 -0
- package/dist/runtime/apply-verify.d.ts.map +1 -0
- package/dist/runtime/apply-verify.js +180 -0
- package/dist/runtime/apply-verify.js.map +1 -0
- package/dist/runtime/approvals.d.ts +10 -0
- package/dist/runtime/approvals.d.ts.map +1 -0
- package/dist/runtime/approvals.js +22 -0
- package/dist/runtime/approvals.js.map +1 -0
- package/dist/runtime/content-hash.d.ts +3 -0
- package/dist/runtime/content-hash.d.ts.map +1 -0
- package/dist/runtime/content-hash.js +8 -0
- package/dist/runtime/content-hash.js.map +1 -0
- package/dist/runtime/digest-mask.d.ts +2 -0
- package/dist/runtime/digest-mask.d.ts.map +1 -0
- package/dist/runtime/digest-mask.js +11 -0
- package/dist/runtime/digest-mask.js.map +1 -0
- package/dist/runtime/inspect.d.ts +20 -0
- package/dist/runtime/inspect.d.ts.map +1 -0
- package/dist/runtime/inspect.js +152 -0
- package/dist/runtime/inspect.js.map +1 -0
- package/dist/runtime/patch-apply.d.ts +32 -0
- package/dist/runtime/patch-apply.d.ts.map +1 -0
- package/dist/runtime/patch-apply.js +170 -0
- package/dist/runtime/patch-apply.js.map +1 -0
- package/dist/runtime/patch-path-guard.d.ts +17 -0
- package/dist/runtime/patch-path-guard.d.ts.map +1 -0
- package/dist/runtime/patch-path-guard.js +56 -0
- package/dist/runtime/patch-path-guard.js.map +1 -0
- package/dist/runtime/patch-proposal.d.ts +55 -0
- package/dist/runtime/patch-proposal.d.ts.map +1 -0
- package/dist/runtime/patch-proposal.js +118 -0
- package/dist/runtime/patch-proposal.js.map +1 -0
- package/dist/runtime/permissions.d.ts +18 -0
- package/dist/runtime/permissions.d.ts.map +1 -0
- package/dist/runtime/permissions.js +91 -0
- package/dist/runtime/permissions.js.map +1 -0
- package/dist/runtime/sandbox.d.ts +9 -0
- package/dist/runtime/sandbox.d.ts.map +1 -0
- package/dist/runtime/sandbox.js +17 -0
- package/dist/runtime/sandbox.js.map +1 -0
- package/dist/runtime/unified-diff.d.ts +19 -0
- package/dist/runtime/unified-diff.d.ts.map +1 -0
- package/dist/runtime/unified-diff.js +114 -0
- package/dist/runtime/unified-diff.js.map +1 -0
- package/dist/runtime/verifier.d.ts +6 -0
- package/dist/runtime/verifier.d.ts.map +1 -0
- package/dist/runtime/verifier.js +16 -0
- package/dist/runtime/verifier.js.map +1 -0
- package/dist/runtime/workspace.d.ts +10 -0
- package/dist/runtime/workspace.d.ts.map +1 -0
- package/dist/runtime/workspace.js +107 -0
- package/dist/runtime/workspace.js.map +1 -0
- package/dist/version.d.ts +3 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +10 -0
- package/dist/version.js.map +1 -0
- package/docs/beta-feedback-template.md +75 -0
- package/docs/beta-feedback-triage.md +169 -0
- package/docs/beta-release-handoff.md +182 -0
- package/docs/beta-tester-checklist.md +62 -0
- package/docs/install-beta.md +77 -0
- package/docs/internal-beta.md +84 -0
- package/docs/known-limitations.md +62 -0
- package/docs/patze-cli-architecture.md +137 -0
- package/docs/patze-cli-codex-reference-study.md +43 -0
- package/docs/release-checklist.md +83 -0
- package/docs/safety-model.md +69 -0
- package/docs/smoke-command-guide.md +61 -0
- package/docs/trust-loop.md +90 -0
- package/docs/uninstall-reset.md +44 -0
- 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"}
|