@patze/code-cli 0.10.3 → 0.10.5
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 +46 -4
- package/README.md +27 -8
- package/VERSION +1 -1
- package/dist/backend/auth.d.ts.map +1 -1
- package/dist/backend/auth.js +3 -1
- package/dist/backend/auth.js.map +1 -1
- package/dist/cli/commands/login.d.ts +21 -0
- package/dist/cli/commands/login.d.ts.map +1 -1
- package/dist/cli/commands/login.js +54 -7
- package/dist/cli/commands/login.js.map +1 -1
- package/dist/cli/commands/plan.d.ts.map +1 -1
- package/dist/cli/commands/plan.js +0 -2
- package/dist/cli/commands/plan.js.map +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +5 -4
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/header.d.ts.map +1 -1
- package/dist/cli/interactive/header.js +5 -2
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/line-editor.d.ts +46 -0
- package/dist/cli/interactive/line-editor.d.ts.map +1 -0
- package/dist/cli/interactive/line-editor.js +288 -0
- package/dist/cli/interactive/line-editor.js.map +1 -0
- package/dist/cli/interactive/redact-input.d.ts +10 -0
- package/dist/cli/interactive/redact-input.d.ts.map +1 -0
- package/dist/cli/interactive/redact-input.js +18 -0
- package/dist/cli/interactive/redact-input.js.map +1 -0
- package/dist/cli/interactive/shell.d.ts.map +1 -1
- package/dist/cli/interactive/shell.js +15 -24
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/slash-dispatch.d.ts.map +1 -1
- package/dist/cli/interactive/slash-dispatch.js +74 -2
- package/dist/cli/interactive/slash-dispatch.js.map +1 -1
- package/dist/cli/interactive/slash-menu.d.ts +31 -0
- package/dist/cli/interactive/slash-menu.d.ts.map +1 -0
- package/dist/cli/interactive/slash-menu.js +117 -0
- package/dist/cli/interactive/slash-menu.js.map +1 -0
- package/dist/cli/interactive/slash-registry.d.ts.map +1 -1
- package/dist/cli/interactive/slash-registry.js +2 -0
- package/dist/cli/interactive/slash-registry.js.map +1 -1
- package/dist/config/config.d.ts.map +1 -1
- package/dist/config/config.js +3 -3
- package/dist/config/config.js.map +1 -1
- package/package.json +1 -1
- package/dist/cli/interactive/completer.d.ts +0 -8
- package/dist/cli/interactive/completer.d.ts.map +0 -1
- package/dist/cli/interactive/completer.js +0 -20
- package/dist/cli/interactive/completer.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,41 @@ 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.10.5] - 2026-05-29
|
|
8
|
+
|
|
9
|
+
### Added
|
|
10
|
+
|
|
11
|
+
- `/login` and `/logout` slash commands in the interactive shell
|
|
12
|
+
- `/login` with no args shows auth status + setup guidance
|
|
13
|
+
- `/login <api-url> <token> [user-id]` saves credentials locally (token masked in output)
|
|
14
|
+
- `/logout` clears saved credentials (env vars untouched; other settings kept)
|
|
15
|
+
- Secret-bearing `/login` input is redacted from transcript and excluded from ↑↓ recall history
|
|
16
|
+
- Empty-composer placeholder: `Type / for commands, or describe a task` (color TTY only)
|
|
17
|
+
- Stage notice under startup card and in `patze --help`: `Beta · Dev demo — for internal testing only`
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- Auth is **ready** with `api + token` only — `user-id` is optional everywhere (`isAuthConfigured`, `patze login`, `/login`, plan preview)
|
|
22
|
+
- `globalConfigPath()` resolves `homedir()` at call time (test isolation; no behavior change in normal use)
|
|
23
|
+
|
|
24
|
+
### Unchanged
|
|
25
|
+
|
|
26
|
+
- Trust loop, apply/verify gating, permission enforcement, network/backend contracts
|
|
27
|
+
|
|
28
|
+
## [0.10.4] - 2026-05-29
|
|
29
|
+
|
|
30
|
+
### Changed (live command palette — no behavior change)
|
|
31
|
+
|
|
32
|
+
- Interactive composer uses a raw-mode line editor with a live `/` command palette (filter as you type, ↑↓ navigate, Tab/Enter complete)
|
|
33
|
+
- Commands with required args (e.g. `/goal <task>`) complete to `/name ` and wait for input
|
|
34
|
+
- In-session history via ↑↓ when palette is closed; cursor editing and Ctrl+C clear/exit
|
|
35
|
+
- Removed legacy readline Tab completer (superseded by live menu)
|
|
36
|
+
- Startup hint: `Type / for commands · ↑↓ to navigate · Tab/Enter to select`
|
|
37
|
+
|
|
38
|
+
### Unchanged
|
|
39
|
+
|
|
40
|
+
- Trust loop, apply/verify gating, permission enforcement, network/backend contracts — identical to 0.10.3
|
|
41
|
+
|
|
7
42
|
## [0.10.3] - 2026-05-29
|
|
8
43
|
|
|
9
44
|
### Changed (interactive UI polish — no behavior change)
|
|
@@ -17,16 +52,21 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
17
52
|
|
|
18
53
|
### Changed (composer UX — no behavior change)
|
|
19
54
|
|
|
20
|
-
-
|
|
21
|
-
-
|
|
55
|
+
- Live `/command` palette in the interactive composer: type `/` to see a filtered, scrollable menu (prefix-first), navigate with ↑↓, complete with Tab, run with Enter
|
|
56
|
+
- Commands needing an argument (e.g. `/goal <task>`) complete to `/name ` and wait for input instead of submitting
|
|
57
|
+
- In-session history with ↑↓ when the menu is closed; left/right/Home/End cursor editing; Ctrl+C clears (or exits when empty)
|
|
22
58
|
- `Did you mean` for unknown commands now lists each suggestion with its description
|
|
59
|
+
- Startup hint: `Type / for commands · ↑↓ to navigate · Tab/Enter to select`
|
|
60
|
+
- Composer is TTY-only; piped / scripted input still uses readline and stays deterministic
|
|
23
61
|
|
|
24
62
|
### Added
|
|
25
63
|
|
|
26
64
|
- `src/cli/ui/box.ts` — reusable bordered card renderer
|
|
27
|
-
- `src/cli/interactive/
|
|
65
|
+
- `src/cli/interactive/slash-menu.ts` — pure live-menu state (filter, selection, render)
|
|
66
|
+
- `src/cli/interactive/line-editor.ts` — raw-mode composer with the live `/` palette
|
|
28
67
|
- `tests/header.test.mjs` — startup snapshot, auth warning, permission label, narrow fallback
|
|
29
|
-
- `tests/
|
|
68
|
+
- `tests/slash-menu.test.mjs` — menu filtering, selection wrap, arg detection, render
|
|
69
|
+
- `tests/line-editor.test.mjs` — keypress-driven submit / complete / history / editing
|
|
30
70
|
|
|
31
71
|
### Unchanged
|
|
32
72
|
|
|
@@ -115,6 +155,8 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
115
155
|
|
|
116
156
|
- `patze code inspect`, `patze code plan --preview`, local workspace boundaries
|
|
117
157
|
|
|
158
|
+
[0.10.5]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.4...patze-code-cli-v0.10.5
|
|
159
|
+
[0.10.4]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.3...patze-code-cli-v0.10.4
|
|
118
160
|
[0.10.3]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.2...patze-code-cli-v0.10.3
|
|
119
161
|
[0.10.2]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.1...patze-code-cli-v0.10.2
|
|
120
162
|
[0.10.1]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.0...patze-code-cli-v0.10.1
|
package/README.md
CHANGED
|
@@ -28,7 +28,7 @@ Registry:
|
|
|
28
28
|
|
|
29
29
|
```bash
|
|
30
30
|
npm install -g @patze/code-cli@beta
|
|
31
|
-
# or pinned: @patze/code-cli@0.10.
|
|
31
|
+
# or pinned: @patze/code-cli@0.10.5
|
|
32
32
|
patze --version
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -44,7 +44,7 @@ git init
|
|
|
44
44
|
# 2. Optional — server preview auth (use env, never commit secrets)
|
|
45
45
|
export PATZE_CODE_API=https://api.example.com
|
|
46
46
|
export PATZE_CODE_TOKEN=<internal-api-key>
|
|
47
|
-
export PATZE_CODE_USER_ID=<user-uuid>
|
|
47
|
+
export PATZE_CODE_USER_ID=<user-uuid> # optional
|
|
48
48
|
|
|
49
49
|
# 3. Read-only checks
|
|
50
50
|
patze status
|
|
@@ -59,12 +59,13 @@ patze
|
|
|
59
59
|
Running `patze` shows a status card and tips:
|
|
60
60
|
|
|
61
61
|
```text
|
|
62
|
-
╭─ Patze Code · v0.10.
|
|
62
|
+
╭─ Patze Code · v0.10.5 ────────────────────────────────────╮
|
|
63
63
|
│ workspace /mnt/d/pat-test │
|
|
64
64
|
│ auth incomplete │
|
|
65
65
|
│ permission Read-only │
|
|
66
66
|
│ safety preview-first · read-only │
|
|
67
67
|
╰───────────────────────────────────────────────────────────╯
|
|
68
|
+
Beta · Dev demo — for internal testing only
|
|
68
69
|
|
|
69
70
|
! auth incomplete — run `patze login` or set PATZE_CODE_* env
|
|
70
71
|
|
|
@@ -73,13 +74,31 @@ Tips
|
|
|
73
74
|
• /inspect scans the workspace (read-only)
|
|
74
75
|
• /plan then /diff previews changes before any write
|
|
75
76
|
• /apply needs typed approval — it never auto-applies
|
|
76
|
-
|
|
77
|
+
Type / for commands · ↑↓ to navigate · Tab/Enter to select
|
|
77
78
|
|
|
78
79
|
›
|
|
79
80
|
```
|
|
80
81
|
|
|
81
|
-
|
|
82
|
-
|
|
82
|
+
Type `/` to open a live command palette that filters as you type:
|
|
83
|
+
|
|
84
|
+
```text
|
|
85
|
+
› /p
|
|
86
|
+
/plan Server preview only (no apply)
|
|
87
|
+
❯ /permissions Open permission mode selector
|
|
88
|
+
/help Show slash commands
|
|
89
|
+
…
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
Navigate with ↑↓, complete with Tab, run with Enter. Commands that need an
|
|
93
|
+
argument (e.g. `/goal <task>`) complete to `/goal ` and wait for your input.
|
|
94
|
+
When the palette is closed, ↑↓ recalls in-session history. The composer is
|
|
95
|
+
TTY-only; piped / scripted input stays on readline and remains deterministic.
|
|
96
|
+
|
|
97
|
+
Authenticate from inside the shell with `/login` (or `/login <api-url> <token>`
|
|
98
|
+
to save directly — `user-id` is optional; the token is masked in output and
|
|
99
|
+
never kept in transcript or recall history). `/logout` clears saved credentials.
|
|
100
|
+
Environment variables `PATZE_CODE_API` / `PATZE_CODE_TOKEN` also work
|
|
101
|
+
(`PATZE_CODE_USER_ID` is optional).
|
|
83
102
|
|
|
84
103
|
Inside `patze`:
|
|
85
104
|
|
|
@@ -104,7 +123,7 @@ prompt → inspect → plan → diff → permissions → approve → apply → v
|
|
|
104
123
|
|
|
105
124
|
Docs: [`docs/trust-loop.md`](docs/trust-loop.md) · [`docs/safety-model.md`](docs/safety-model.md)
|
|
106
125
|
|
|
107
|
-
## Command status (0.10.
|
|
126
|
+
## Command status (0.10.5)
|
|
108
127
|
|
|
109
128
|
### Interactive (`patze` shell)
|
|
110
129
|
|
|
@@ -136,7 +155,7 @@ Docs: [`docs/trust-loop.md`](docs/trust-loop.md) · [`docs/safety-model.md`](doc
|
|
|
136
155
|
| `patze --version` | ✅ | |
|
|
137
156
|
| `patze status [--check]` | ✅ | |
|
|
138
157
|
| `patze doctor [--check]` | ✅ | Read-only; network only with `--check` |
|
|
139
|
-
| `patze login <api> <token>
|
|
158
|
+
| `patze login <api> <token> [id]` | ✅ | Writes local config (user-id optional) |
|
|
140
159
|
| `patze goal "<task>" --dry-run` | ✅ | Non-interactive plan |
|
|
141
160
|
| `patze code inspect` | ✅ | |
|
|
142
161
|
| `patze code plan --preview` | ✅ | Needs auth |
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.10.
|
|
1
|
+
0.10.5
|
|
@@ -1 +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,
|
|
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,CAIV"}
|
package/dist/backend/auth.js
CHANGED
|
@@ -7,6 +7,8 @@ export function describeAuth(state) {
|
|
|
7
7
|
return lines;
|
|
8
8
|
}
|
|
9
9
|
export function isAuthConfigured(input) {
|
|
10
|
-
|
|
10
|
+
// user id is optional: the backend authenticates with the token
|
|
11
|
+
// (X-Internal-API-Key); X-Internal-User-Id is sent only when present.
|
|
12
|
+
return Boolean(input.api && input.token);
|
|
11
13
|
}
|
|
12
14
|
//# sourceMappingURL=auth.js.map
|
package/dist/backend/auth.js.map
CHANGED
|
@@ -1 +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,
|
|
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,gEAAgE;IAChE,sEAAsE;IACtE,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,CAAA;AAC1C,CAAC"}
|
|
@@ -1,4 +1,25 @@
|
|
|
1
1
|
import type { Printer } from "../ui/printer.js";
|
|
2
2
|
import type { ParsedArgv } from "../argv.js";
|
|
3
|
+
export type LoginCredentials = {
|
|
4
|
+
api: string;
|
|
5
|
+
token: string;
|
|
6
|
+
userId?: string;
|
|
7
|
+
};
|
|
8
|
+
export type LogoutResult = {
|
|
9
|
+
path: string;
|
|
10
|
+
existed: boolean;
|
|
11
|
+
removedFile: boolean;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Persist credentials to the global config file, preserving any other
|
|
15
|
+
* settings (approval/sandbox/allow/deny) already present. Returns the
|
|
16
|
+
* path written. File mode 0o600 keeps the token owner-only.
|
|
17
|
+
*/
|
|
18
|
+
export declare function saveCredentials(creds: LoginCredentials): string;
|
|
19
|
+
/**
|
|
20
|
+
* Remove credential fields from the global config. Other settings are
|
|
21
|
+
* kept; if nothing else remains, the file is deleted.
|
|
22
|
+
*/
|
|
23
|
+
export declare function clearCredentials(): LogoutResult;
|
|
3
24
|
export declare function runLogin(argv: ParsedArgv, printer: Printer): Promise<number>;
|
|
4
25
|
//# sourceMappingURL=login.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,
|
|
1
|
+
{"version":3,"file":"login.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAA;AAC/C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAG5C,MAAM,MAAM,gBAAgB,GAAG;IAC7B,GAAG,EAAE,MAAM,CAAA;IACX,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,OAAO,EAAE,OAAO,CAAA;IAChB,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAcD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,gBAAgB,GAAG,MAAM,CAW/D;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,IAAI,YAAY,CAe/C;AAED,wBAAsB,QAAQ,CAAC,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBlF"}
|
|
@@ -1,19 +1,66 @@
|
|
|
1
|
-
import { writeFileSync, mkdirSync } from "node:fs";
|
|
1
|
+
import { writeFileSync, mkdirSync, readFileSync, existsSync, rmSync } from "node:fs";
|
|
2
2
|
import { dirname } from "node:path";
|
|
3
3
|
import { globalConfigPath } from "../../config/config.js";
|
|
4
4
|
import { flagString } from "../argv.js";
|
|
5
|
+
function readGlobalConfigRaw(path) {
|
|
6
|
+
try {
|
|
7
|
+
const parsed = JSON.parse(readFileSync(path, "utf8"));
|
|
8
|
+
if (parsed && typeof parsed === "object" && !Array.isArray(parsed)) {
|
|
9
|
+
return parsed;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
catch {
|
|
13
|
+
// ignore malformed/missing file
|
|
14
|
+
}
|
|
15
|
+
return {};
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Persist credentials to the global config file, preserving any other
|
|
19
|
+
* settings (approval/sandbox/allow/deny) already present. Returns the
|
|
20
|
+
* path written. File mode 0o600 keeps the token owner-only.
|
|
21
|
+
*/
|
|
22
|
+
export function saveCredentials(creds) {
|
|
23
|
+
const path = globalConfigPath();
|
|
24
|
+
mkdirSync(dirname(path), { recursive: true });
|
|
25
|
+
const existing = readGlobalConfigRaw(path);
|
|
26
|
+
const next = { ...existing, api: creds.api, token: creds.token };
|
|
27
|
+
// user id is optional; keep any previously saved value when omitted.
|
|
28
|
+
if (creds.userId) {
|
|
29
|
+
next.userId = creds.userId;
|
|
30
|
+
}
|
|
31
|
+
writeFileSync(path, `${JSON.stringify(next, null, 2)}\n`, { mode: 0o600 });
|
|
32
|
+
return path;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Remove credential fields from the global config. Other settings are
|
|
36
|
+
* kept; if nothing else remains, the file is deleted.
|
|
37
|
+
*/
|
|
38
|
+
export function clearCredentials() {
|
|
39
|
+
const path = globalConfigPath();
|
|
40
|
+
if (!existsSync(path)) {
|
|
41
|
+
return { path, existed: false, removedFile: false };
|
|
42
|
+
}
|
|
43
|
+
const next = { ...readGlobalConfigRaw(path) };
|
|
44
|
+
delete next.api;
|
|
45
|
+
delete next.token;
|
|
46
|
+
delete next.userId;
|
|
47
|
+
if (Object.keys(next).length === 0) {
|
|
48
|
+
rmSync(path, { force: true });
|
|
49
|
+
return { path, existed: true, removedFile: true };
|
|
50
|
+
}
|
|
51
|
+
writeFileSync(path, `${JSON.stringify(next, null, 2)}\n`, { mode: 0o600 });
|
|
52
|
+
return { path, existed: true, removedFile: false };
|
|
53
|
+
}
|
|
5
54
|
export async function runLogin(argv, printer) {
|
|
6
55
|
const api = flagString(argv.flags, "api") ?? argv.positional[0] ?? null;
|
|
7
56
|
const token = flagString(argv.flags, "token") ?? argv.positional[1] ?? null;
|
|
8
57
|
const userId = flagString(argv.flags, "user-id") ?? flagString(argv.flags, "user") ?? argv.positional[2] ?? null;
|
|
9
|
-
if (!api || !token
|
|
10
|
-
printer.error("Usage: patze login <api-url> <token>
|
|
11
|
-
printer.error(" patze login --api <url> --token <token> --user-id <uuid>");
|
|
58
|
+
if (!api || !token) {
|
|
59
|
+
printer.error("Usage: patze login <api-url> <token> [user-id]");
|
|
60
|
+
printer.error(" patze login --api <url> --token <token> [--user-id <uuid>]");
|
|
12
61
|
return 2;
|
|
13
62
|
}
|
|
14
|
-
const path =
|
|
15
|
-
mkdirSync(dirname(path), { recursive: true });
|
|
16
|
-
writeFileSync(path, `${JSON.stringify({ api, token, userId }, null, 2)}\n`, { mode: 0o600 });
|
|
63
|
+
const path = saveCredentials({ api, token, userId: userId ?? undefined });
|
|
17
64
|
printer.info(`Saved credentials to ${path}`);
|
|
18
65
|
printer.line("Run `patze status` to verify connectivity.");
|
|
19
66
|
return 0;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;
|
|
1
|
+
{"version":3,"file":"login.js","sourceRoot":"","sources":["../../../src/cli/commands/login.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AAKxC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACnC,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;
|
|
1
|
+
{"version":3,"file":"plan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AAEA,OAAO,EAEL,KAAK,SAAS,EACd,KAAK,mBAAmB,EACzB,MAAM,iCAAiC,CAAA;AAKxC,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,EAAE,MAAM,CAAA;IAChB,MAAM,EAAE,MAAM,CAAA;IACd,OAAO,EAAE,mBAAmB,GAAG,IAAI,CAAA;IACnC,WAAW,EAAE,OAAO,CAAA;CACrB,CAAA;AAED,MAAM,MAAM,kBAAkB,GAAG;IAC/B,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,SAAS,CAAC,EAAE,SAAS,CAAA;CACtB,CAAA;AASD,wBAAsB,cAAc,CAClC,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,iBAAiB,CAAC,CAsD5B"}
|
|
@@ -10,8 +10,6 @@ function missingAuthMessage(config) {
|
|
|
10
10
|
missing.push("api");
|
|
11
11
|
if (!config.token)
|
|
12
12
|
missing.push("token");
|
|
13
|
-
if (!config.userId)
|
|
14
|
-
missing.push("userId");
|
|
15
13
|
return `Auth incomplete (missing: ${missing.join(", ")}). Run \`patze login\` or set PATZE_CODE_* env vars.`;
|
|
16
14
|
}
|
|
17
15
|
export async function runPlanPreview(objective, options = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EACL,mBAAmB,GAGpB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAuB,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAc1D,SAAS,kBAAkB,CAAC,MAAsB;IAChD,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,
|
|
1
|
+
{"version":3,"file":"plan.js","sourceRoot":"","sources":["../../../src/cli/commands/plan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAA;AACtE,OAAO,EACL,mBAAmB,GAGpB,MAAM,iCAAiC,CAAA;AACxC,OAAO,EAAE,kBAAkB,EAAE,MAAM,yBAAyB,CAAA;AAC5D,OAAO,EAAE,UAAU,EAAuB,MAAM,wBAAwB,CAAA;AACxE,OAAO,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAA;AAc1D,SAAS,kBAAkB,CAAC,MAAsB;IAChD,MAAM,OAAO,GAAa,EAAE,CAAA;IAC5B,IAAI,CAAC,MAAM,CAAC,GAAG;QAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IACpC,IAAI,CAAC,MAAM,CAAC,KAAK;QAAE,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IACxC,OAAO,6BAA6B,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,sDAAsD,CAAA;AAC9G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAClC,SAAiB,EACjB,UAA8B,EAAE;IAEhC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAE9B,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC;QACtB,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE;gBACN,6CAA6C;gBAC7C,qBAAqB;gBACrB,qDAAqD;aACtD,CAAC,IAAI,CAAC,IAAI,CAAC;YACZ,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK;SACnB,CAAA;IACH,CAAC;IAED,IAAI,CAAC,gBAAgB,CAAC,MAAM,CAAC,EAAE,CAAC;QAC9B,OAAO;YACL,QAAQ,EAAE,CAAC;YACX,MAAM,EAAE,kBAAkB,CAAC,MAAM,CAAC;YAClC,OAAO,EAAE,IAAI;YACb,WAAW,EAAE,KAAK;SACnB,CAAA;IACH,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,kBAAkB,CAAC,MAAM,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,mBAAmB,CAAC;QAClC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE;QAC3B,GAAG;QACH,MAAM;KACP,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC;QACvC,OAAO,EAAE,MAAM,CAAC,OAAQ;QACxB,OAAO,EAAE,MAAM,CAAC,YAAY,EAAE;QAC9B,OAAO;QACP,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAA;IAEF,MAAM,MAAM,GAAG,uBAAuB,CAAC;QACrC,SAAS,EAAE,SAAS,CAAC,IAAI,EAAE;QAC3B,MAAM;KACP,CAAC,CAAA;IAEF,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;QACf,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACpE,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QACzC,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;IACpE,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;AACpE,CAAC"}
|
package/dist/cli/help.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"help.d.ts","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,iBAAiB,CAAA;AAG9C,wBAAgB,SAAS,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAmChD"}
|
package/dist/cli/help.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { CLI_VERSION } from "../version.js";
|
|
2
2
|
export function printHelp(printer) {
|
|
3
|
-
printer.line(`Patze Code · v${CLI_VERSION} — local terminal coding agent
|
|
3
|
+
printer.line(`Patze Code · v${CLI_VERSION} — local terminal coding agent`);
|
|
4
|
+
printer.line("Beta · Dev demo — for internal testing only");
|
|
4
5
|
printer.line("");
|
|
5
6
|
printer.line("Usage:");
|
|
6
7
|
printer.line(" patze Interactive shell (trust loop)");
|
|
@@ -8,7 +9,7 @@ export function printHelp(printer) {
|
|
|
8
9
|
printer.line(" patze --version Show version");
|
|
9
10
|
printer.line(" patze status [--check] Local posture + trust-loop snapshot");
|
|
10
11
|
printer.line(" patze doctor [--check] Read-only diagnostics (no network by default)");
|
|
11
|
-
printer.line(" patze login <api> <token>
|
|
12
|
+
printer.line(" patze login <api> <token> [id] Save credentials locally");
|
|
12
13
|
printer.line(' patze goal "<task>" --dry-run Plan without mutation');
|
|
13
14
|
printer.line(" patze code inspect|plan|diff Read-only / preview commands");
|
|
14
15
|
printer.line(" patze code apply|verify Disabled or help-only — use /apply /verify in shell");
|
|
@@ -19,8 +20,8 @@ export function printHelp(printer) {
|
|
|
19
20
|
printer.line(" prompt → inspect → plan → diff → permissions → approve → apply → verify");
|
|
20
21
|
printer.line("");
|
|
21
22
|
printer.line("Slash commands (inside patze):");
|
|
22
|
-
printer.line(" /help /status /context /goal /inspect /plan
|
|
23
|
-
printer.line(" /diff /approve /apply /verify /reject /reset /clear /exit");
|
|
23
|
+
printer.line(" /help /status /login /logout /context /goal /inspect /plan");
|
|
24
|
+
printer.line(" /permissions /tools /diff /approve /apply /verify /reject /reset /clear /exit");
|
|
24
25
|
printer.line("");
|
|
25
26
|
printer.line("Safety:");
|
|
26
27
|
printer.line(" • No auto-apply · no --yes · no shell verify");
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,IAAI,CAAC,iBAAiB,WAAW,
|
|
1
|
+
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAE3C,MAAM,UAAU,SAAS,CAAC,OAAgB;IACxC,OAAO,CAAC,IAAI,CAAC,iBAAiB,WAAW,gCAAgC,CAAC,CAAA;IAC1E,OAAO,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAA;IAC3D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACtB,OAAO,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAA;IAC/E,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC1D,OAAO,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAA;IAC7D,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;IACpF,OAAO,CAAC,IAAI,CAAC,gFAAgF,CAAC,CAAA;IAC9F,OAAO,CAAC,IAAI,CAAC,2DAA2D,CAAC,CAAA;IACzE,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACtE,OAAO,CAAC,IAAI,CAAC,+DAA+D,CAAC,CAAA;IAC7E,OAAO,CAAC,IAAI,CAAC,sFAAsF,CAAC,CAAA;IACpG,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC1D,OAAO,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAA;IAC1D,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAA;IACvC,OAAO,CAAC,IAAI,CAAC,2EAA2E,CAAC,CAAA;IACzF,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,gCAAgC,CAAC,CAAA;IAC9C,OAAO,CAAC,IAAI,CAAC,8DAA8D,CAAC,CAAA;IAC5E,OAAO,CAAC,IAAI,CAAC,iFAAiF,CAAC,CAAA;IAC/F,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACvB,OAAO,CAAC,IAAI,CAAC,gDAAgD,CAAC,CAAA;IAC9D,OAAO,CAAC,IAAI,CAAC,uDAAuD,CAAC,CAAA;IACrE,OAAO,CAAC,IAAI,CAAC,uCAAuC,CAAC,CAAA;IACrD,OAAO,CAAC,IAAI,CAAC,0CAA0C,CAAC,CAAA;IACxD,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC5B,OAAO,CAAC,IAAI,CAAC,wDAAwD,CAAC,CAAA;IACtE,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAChB,OAAO,CAAC,IAAI,CAAC,yEAAyE,CAAC,CAAA;IACvF,OAAO,CAAC,IAAI,CAAC,sEAAsE,CAAC,CAAA;AACtF,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAclE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,GAAE,aAAkB,GAC1B,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"header.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,8BAA8B,CAAA;AAclE,MAAM,MAAM,aAAa,GAAG;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;CAChB,CAAA;AAUD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,MAAM,EACX,cAAc,CAAC,EAAE,cAAc,EAC/B,OAAO,GAAE,aAAkB,GAC1B,MAAM,EAAE,CA4CV;AAUD,eAAO,MAAM,kBAAkB,YAAO,CAAA"}
|
|
@@ -37,7 +37,9 @@ export function renderInteractiveHeader(cwd, permissionMode, options = {}) {
|
|
|
37
37
|
color,
|
|
38
38
|
minInnerWidth: 40,
|
|
39
39
|
});
|
|
40
|
-
const lines = [...card
|
|
40
|
+
const lines = [...card];
|
|
41
|
+
lines.push(color ? `${DIM}${STAGE_NOTICE}${RESET}` : STAGE_NOTICE);
|
|
42
|
+
lines.push("");
|
|
41
43
|
if (!authReady) {
|
|
42
44
|
const warn = "! auth incomplete — run `patze login` or set PATZE_CODE_* env";
|
|
43
45
|
lines.push(color ? `${YELLOW}${warn}${RESET}` : warn);
|
|
@@ -48,10 +50,11 @@ export function renderInteractiveHeader(cwd, permissionMode, options = {}) {
|
|
|
48
50
|
for (const tip of HEADER_TIPS) {
|
|
49
51
|
lines.push(` • ${tip}`);
|
|
50
52
|
}
|
|
51
|
-
const shortcuts = "
|
|
53
|
+
const shortcuts = "Type / for commands · ↑↓ to navigate · Tab/Enter to select";
|
|
52
54
|
lines.push(color ? `${DIM}${shortcuts}${RESET}` : shortcuts);
|
|
53
55
|
return lines;
|
|
54
56
|
}
|
|
57
|
+
const STAGE_NOTICE = "Beta · Dev demo — for internal testing only";
|
|
55
58
|
const HEADER_TIPS = [
|
|
56
59
|
"/inspect scans the workspace (read-only)",
|
|
57
60
|
"/plan then /diff previews changes before any write",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,8BAA8B,CAAA;AACnE,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAA;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAA;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAA;AACzD,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAA;AAC/D,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAA;AAEzC,MAAM,MAAM,GAAG,UAAU,CAAA;AACzB,MAAM,GAAG,GAAG,SAAS,CAAA;AACrB,MAAM,KAAK,GAAG,SAAS,CAAA;AAOvB,SAAS,WAAW;IAClB,OAAO,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAA;AAC/D,CAAC;AAED,SAAS,WAAW;IAClB,OAAO,OAAO,OAAO,CAAC,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAA;AAChF,CAAC;AAED,MAAM,UAAU,uBAAuB,CACrC,GAAW,EACX,cAA+B,EAC/B,UAAyB,EAAE;IAE3B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAC5C,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,WAAW,EAAE,CAAA;IAE5C,MAAM,MAAM,GAAG,UAAU,CAAC,GAAG,CAAC,CAAA;IAC9B,MAAM,SAAS,GAAG,gBAAgB,CAAC,MAAM,CAAC,CAAA;IAC1C,MAAM,QAAQ,GAAG,eAAe,CAAC,MAAM,CAAC,YAAY,CAAC,CAAA;IACrD,MAAM,OAAO,GAAG,cAAc,CAAC,MAAM,CAAC,WAAW,CAAC,CAAA;IAClD,MAAM,SAAS,GAAG,kBAAkB,CAAC,GAAG,CAAC,CAAA;IACzC,MAAM,IAAI,GAAG,cAAc,IAAI,WAAW,CAAA;IAC1C,MAAM,UAAU,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC,KAAK,CAAA;IAEnD,MAAM,IAAI,GAAG,UAAU,CAAC;QACtB,KAAK,EAAE,iBAAiB,WAAW,EAAE;QACrC,IAAI,EAAE;YACJ,EAAE,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,SAAS,EAAE;YACxC,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,YAAY,EAAE;YAC5D,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,UAAU,EAAE;YAC1C,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,QAAQ,CAAC,IAAI,MAAM,OAAO,CAAC,IAAI,EAAE,EAAE;SACjE;QACD,KAAK;QACL,KAAK;QACL,aAAa,EAAE,EAAE;KAClB,CAAC,CAAA;IAEF,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,EAAE,CAAC,CAAA;
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export type LineEditorOptions = {
|
|
2
|
+
prompt: string;
|
|
3
|
+
color: boolean;
|
|
4
|
+
input?: NodeJS.ReadStream;
|
|
5
|
+
output?: NodeJS.WriteStream;
|
|
6
|
+
};
|
|
7
|
+
export type SubmitResult = {
|
|
8
|
+
type: "line";
|
|
9
|
+
value: string;
|
|
10
|
+
} | {
|
|
11
|
+
type: "eof";
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* A minimal raw-mode line editor with a live slash-command menu.
|
|
15
|
+
* TTY-only; the piped / scripted path keeps using readline elsewhere,
|
|
16
|
+
* so deterministic test output is unaffected. The editor only edits the
|
|
17
|
+
* input buffer and offers command completion — it never executes
|
|
18
|
+
* anything or changes trust-loop behavior.
|
|
19
|
+
*/
|
|
20
|
+
export declare class SlashLineEditor {
|
|
21
|
+
private readonly input;
|
|
22
|
+
private readonly output;
|
|
23
|
+
private readonly prompt;
|
|
24
|
+
private readonly color;
|
|
25
|
+
private readonly history;
|
|
26
|
+
private buffer;
|
|
27
|
+
private cursor;
|
|
28
|
+
private selectedIndex;
|
|
29
|
+
private menuDismissed;
|
|
30
|
+
private historyIndex;
|
|
31
|
+
private stashedBuffer;
|
|
32
|
+
private renderedMenuRows;
|
|
33
|
+
constructor(options: LineEditorOptions);
|
|
34
|
+
readLine(): Promise<SubmitResult>;
|
|
35
|
+
private handleKey;
|
|
36
|
+
private currentMenu;
|
|
37
|
+
private afterEdit;
|
|
38
|
+
private resetBuffer;
|
|
39
|
+
private setBuffer;
|
|
40
|
+
private historyPrev;
|
|
41
|
+
private historyNext;
|
|
42
|
+
private pushHistory;
|
|
43
|
+
private render;
|
|
44
|
+
private commitLine;
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=line-editor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"line-editor.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/line-editor.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,iBAAiB,GAAG;IAC9B,MAAM,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACzB,MAAM,CAAC,EAAE,MAAM,CAAC,WAAW,CAAA;CAC5B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,KAAK,CAAA;CAAE,CAAA;AAU5E;;;;;;GAMG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmB;IACzC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAoB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAQ;IAC/B,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAS;IAC/B,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAe;IAEvC,OAAO,CAAC,MAAM,CAAK;IACnB,OAAO,CAAC,MAAM,CAAI;IAClB,OAAO,CAAC,aAAa,CAAI;IACzB,OAAO,CAAC,aAAa,CAAQ;IAC7B,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,aAAa,CAAK;IAC1B,OAAO,CAAC,gBAAgB,CAAI;gBAEhB,OAAO,EAAE,iBAAiB;IAOhC,QAAQ,IAAI,OAAO,CAAC,YAAY,CAAC;IAkDvC,OAAO,CAAC,SAAS;IA2GjB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,SAAS;IAMjB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,SAAS;IAOjB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IAcnB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,MAAM;IAmCd,OAAO,CAAC,UAAU;CAKnB"}
|