@patze/code-cli 0.10.2 → 0.10.3
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 +29 -0
- package/README.md +29 -4
- package/VERSION +1 -1
- package/dist/cli/help.d.ts.map +1 -1
- package/dist/cli/help.js +2 -1
- package/dist/cli/help.js.map +1 -1
- package/dist/cli/interactive/completer.d.ts +8 -0
- package/dist/cli/interactive/completer.d.ts.map +1 -0
- package/dist/cli/interactive/completer.js +20 -0
- package/dist/cli/interactive/completer.js.map +1 -0
- package/dist/cli/interactive/header.d.ts +5 -1
- package/dist/cli/interactive/header.d.ts.map +1 -1
- package/dist/cli/interactive/header.js +47 -14
- package/dist/cli/interactive/header.js.map +1 -1
- package/dist/cli/interactive/shell.d.ts.map +1 -1
- package/dist/cli/interactive/shell.js +2 -0
- package/dist/cli/interactive/shell.js.map +1 -1
- package/dist/cli/interactive/slash-suggest.d.ts.map +1 -1
- package/dist/cli/interactive/slash-suggest.js +5 -1
- package/dist/cli/interactive/slash-suggest.js.map +1 -1
- package/dist/cli/ui/box.d.ts +18 -0
- package/dist/cli/ui/box.d.ts.map +1 -0
- package/dist/cli/ui/box.js +59 -0
- package/dist/cli/ui/box.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,34 @@ 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.3] - 2026-05-29
|
|
8
|
+
|
|
9
|
+
### Changed (interactive UI polish — no behavior change)
|
|
10
|
+
|
|
11
|
+
- Professional bordered startup card for `patze`: title `Patze Code · v<version>`, aligned workspace / auth / permission / safety rows
|
|
12
|
+
- Auth-incomplete warning line with remediation hint (`patze login` / `PATZE_CODE_*`)
|
|
13
|
+
- Command hint + Patze-native tips (inspect → plan → diff → typed apply)
|
|
14
|
+
- Permission row shows readable mode label (no redundant `(read-only)` suffix)
|
|
15
|
+
- `patze --help` header now shows version
|
|
16
|
+
- Width-aware card: truncates long values and degrades to plain rows on narrow terminals; deterministic + ANSI-free under `NO_COLOR`/non-TTY
|
|
17
|
+
|
|
18
|
+
### Changed (composer UX — no behavior change)
|
|
19
|
+
|
|
20
|
+
- Tab autocompletes `/commands` in the interactive composer (TTY only; piped/scripted mode untouched)
|
|
21
|
+
- Startup shortcuts hint: `Tab completes /commands · ↑/↓ recalls history · Ctrl+C cancels`
|
|
22
|
+
- `Did you mean` for unknown commands now lists each suggestion with its description
|
|
23
|
+
|
|
24
|
+
### Added
|
|
25
|
+
|
|
26
|
+
- `src/cli/ui/box.ts` — reusable bordered card renderer
|
|
27
|
+
- `src/cli/interactive/completer.ts` — slash-only readline completer
|
|
28
|
+
- `tests/header.test.mjs` — startup snapshot, auth warning, permission label, narrow fallback
|
|
29
|
+
- `tests/completer.test.mjs` — Tab completion (prefix, bare slash, free-text, args, unknown)
|
|
30
|
+
|
|
31
|
+
### Unchanged
|
|
32
|
+
|
|
33
|
+
- Trust loop, apply/verify gating, permission enforcement, network/backend contracts — identical to 0.10.2
|
|
34
|
+
|
|
7
35
|
## [0.10.2] - 2026-05-27
|
|
8
36
|
|
|
9
37
|
### Added (internal beta rollout)
|
|
@@ -87,6 +115,7 @@ Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
|
|
|
87
115
|
|
|
88
116
|
- `patze code inspect`, `patze code plan --preview`, local workspace boundaries
|
|
89
117
|
|
|
118
|
+
[0.10.3]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.2...patze-code-cli-v0.10.3
|
|
90
119
|
[0.10.2]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.1...patze-code-cli-v0.10.2
|
|
91
120
|
[0.10.1]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/compare/patze-code-cli-v0.10.0...patze-code-cli-v0.10.1
|
|
92
121
|
[0.10.0]: https://github.com/patzeagent/patzelife-plugin-agentdiscord/releases/tag/patze-code-cli-v0.10.0
|
package/README.md
CHANGED
|
@@ -20,15 +20,15 @@ cd packages/patze-code-cli
|
|
|
20
20
|
|
|
21
21
|
# Or manual tarball
|
|
22
22
|
npm run build && npm pack
|
|
23
|
-
npm install -g ./patze-code-cli-0.10.
|
|
23
|
+
npm install -g ./patze-code-cli-0.10.3.tgz
|
|
24
24
|
patze --version
|
|
25
25
|
```
|
|
26
26
|
|
|
27
|
-
Registry
|
|
27
|
+
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.3
|
|
32
32
|
patze --version
|
|
33
33
|
```
|
|
34
34
|
|
|
@@ -56,6 +56,31 @@ patze goal "Review README" --dry-run
|
|
|
56
56
|
patze
|
|
57
57
|
```
|
|
58
58
|
|
|
59
|
+
Running `patze` shows a status card and tips:
|
|
60
|
+
|
|
61
|
+
```text
|
|
62
|
+
╭─ Patze Code · v0.10.3 ────────────────────────────────────╮
|
|
63
|
+
│ workspace /mnt/d/pat-test │
|
|
64
|
+
│ auth incomplete │
|
|
65
|
+
│ permission Read-only │
|
|
66
|
+
│ safety preview-first · read-only │
|
|
67
|
+
╰───────────────────────────────────────────────────────────╯
|
|
68
|
+
|
|
69
|
+
! auth incomplete — run `patze login` or set PATZE_CODE_* env
|
|
70
|
+
|
|
71
|
+
Type a task, or /help for commands.
|
|
72
|
+
Tips
|
|
73
|
+
• /inspect scans the workspace (read-only)
|
|
74
|
+
• /plan then /diff previews changes before any write
|
|
75
|
+
• /apply needs typed approval — it never auto-applies
|
|
76
|
+
Tab completes /commands · ↑/↓ recalls history · Ctrl+C cancels
|
|
77
|
+
|
|
78
|
+
›
|
|
79
|
+
```
|
|
80
|
+
|
|
81
|
+
The composer supports Tab autocompletion for `/commands` (TTY only) and
|
|
82
|
+
arrow-key history. Piped/scripted input is unaffected and stays deterministic.
|
|
83
|
+
|
|
59
84
|
Inside `patze`:
|
|
60
85
|
|
|
61
86
|
```text
|
|
@@ -79,7 +104,7 @@ prompt → inspect → plan → diff → permissions → approve → apply → v
|
|
|
79
104
|
|
|
80
105
|
Docs: [`docs/trust-loop.md`](docs/trust-loop.md) · [`docs/safety-model.md`](docs/safety-model.md)
|
|
81
106
|
|
|
82
|
-
## Command status (0.10.
|
|
107
|
+
## Command status (0.10.3)
|
|
83
108
|
|
|
84
109
|
### Interactive (`patze` shell)
|
|
85
110
|
|
package/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.10.
|
|
1
|
+
0.10.3
|
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;
|
|
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,CAkChD"}
|
package/dist/cli/help.js
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { CLI_VERSION } from "../version.js";
|
|
1
2
|
export function printHelp(printer) {
|
|
2
|
-
printer.line(
|
|
3
|
+
printer.line(`Patze Code · v${CLI_VERSION} — local terminal coding agent (internal beta)`);
|
|
3
4
|
printer.line("");
|
|
4
5
|
printer.line("Usage:");
|
|
5
6
|
printer.line(" patze Interactive shell (trust loop)");
|
package/dist/cli/help.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"help.js","sourceRoot":"","sources":["../../src/cli/help.ts"],"names":[],"mappings":"
|
|
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,gDAAgD,CAAC,CAAA;IAC1F,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,mEAAmE,CAAC,CAAA;IACjF,OAAO,CAAC,IAAI,CAAC,6DAA6D,CAAC,CAAA;IAC3E,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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
export type CompleterResult = [string[], string];
|
|
2
|
+
/**
|
|
3
|
+
* readline completer for the interactive composer. Completes `/command`
|
|
4
|
+
* tokens only; never touches free-text prompts or argument values, so it
|
|
5
|
+
* cannot change parsing or trust-loop behavior. Active on TTY only.
|
|
6
|
+
*/
|
|
7
|
+
export declare function completeSlashInput(line: string): CompleterResult;
|
|
8
|
+
//# sourceMappingURL=completer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completer.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/completer.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,eAAe,GAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAAA;AAEhD;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,eAAe,CAehE"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { listDiscoverableSlashCommands } from "./slash-registry.js";
|
|
2
|
+
/**
|
|
3
|
+
* readline completer for the interactive composer. Completes `/command`
|
|
4
|
+
* tokens only; never touches free-text prompts or argument values, so it
|
|
5
|
+
* cannot change parsing or trust-loop behavior. Active on TTY only.
|
|
6
|
+
*/
|
|
7
|
+
export function completeSlashInput(line) {
|
|
8
|
+
// Not a slash command, or already past the command token → no completion.
|
|
9
|
+
if (!line.startsWith("/") || line.includes(" ")) {
|
|
10
|
+
return [[], line];
|
|
11
|
+
}
|
|
12
|
+
const needle = line.slice(1).toLowerCase();
|
|
13
|
+
const names = listDiscoverableSlashCommands().map((command) => `/${command.name}`);
|
|
14
|
+
if (!needle) {
|
|
15
|
+
return [names, line];
|
|
16
|
+
}
|
|
17
|
+
const hits = names.filter((name) => name.slice(1).startsWith(needle));
|
|
18
|
+
return [hits, line];
|
|
19
|
+
}
|
|
20
|
+
//# sourceMappingURL=completer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completer.js","sourceRoot":"","sources":["../../../src/cli/interactive/completer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAA;AAInE;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY;IAC7C,0EAA0E;IAC1E,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,EAAE,EAAE,IAAI,CAAC,CAAA;IACnB,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAA;IAC1C,MAAM,KAAK,GAAG,6BAA6B,EAAE,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IAElF,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAA;IACtB,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAA;IACrE,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAA;AACrB,CAAC"}
|
|
@@ -1,4 +1,8 @@
|
|
|
1
1
|
import type { PermissionMode } from "../../runtime/permissions.js";
|
|
2
|
-
export
|
|
2
|
+
export type HeaderOptions = {
|
|
3
|
+
width?: number;
|
|
4
|
+
color?: boolean;
|
|
5
|
+
};
|
|
6
|
+
export declare function renderInteractiveHeader(cwd: string, permissionMode?: PermissionMode, options?: HeaderOptions): string[];
|
|
3
7
|
export declare const INTERACTIVE_PROMPT = "\u203A ";
|
|
4
8
|
//# sourceMappingURL=header.d.ts.map
|
|
@@ -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;
|
|
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,CA0CV;AAQD,eAAO,MAAM,kBAAkB,YAAO,CAAA"}
|
|
@@ -4,25 +4,58 @@ import { isAuthConfigured } from "../../backend/auth.js";
|
|
|
4
4
|
import { resolveApproval } from "../../runtime/approvals.js";
|
|
5
5
|
import { resolveSandbox } from "../../runtime/sandbox.js";
|
|
6
6
|
import { guessWorkspaceRoot } from "../../runtime/workspace.js";
|
|
7
|
-
import {
|
|
8
|
-
import {
|
|
9
|
-
|
|
7
|
+
import { CLI_VERSION } from "../../version.js";
|
|
8
|
+
import { renderCard } from "../ui/box.js";
|
|
9
|
+
const YELLOW = "\x1b[33m";
|
|
10
|
+
const DIM = "\x1b[2m";
|
|
11
|
+
const RESET = "\x1b[0m";
|
|
12
|
+
function detectColor() {
|
|
13
|
+
return Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
|
|
14
|
+
}
|
|
15
|
+
function detectWidth() {
|
|
16
|
+
return typeof process.stdout.columns === "number" ? process.stdout.columns : 0;
|
|
17
|
+
}
|
|
18
|
+
export function renderInteractiveHeader(cwd, permissionMode, options = {}) {
|
|
19
|
+
const color = options.color ?? detectColor();
|
|
20
|
+
const width = options.width ?? detectWidth();
|
|
10
21
|
const config = loadConfig(cwd);
|
|
11
22
|
const authReady = isAuthConfigured(config);
|
|
12
23
|
const approval = resolveApproval(config.approvalMode);
|
|
13
24
|
const sandbox = resolveSandbox(config.sandboxMode);
|
|
14
25
|
const workspace = guessWorkspaceRoot(cwd);
|
|
15
|
-
const
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
+
const mode = permissionMode ?? "read-only";
|
|
27
|
+
const permission = getPermissionModeDef(mode).label;
|
|
28
|
+
const card = renderCard({
|
|
29
|
+
title: `Patze Code · v${CLI_VERSION}`,
|
|
30
|
+
rows: [
|
|
31
|
+
{ label: "workspace", value: workspace },
|
|
32
|
+
{ label: "auth", value: authReady ? "ready" : "incomplete" },
|
|
33
|
+
{ label: "permission", value: permission },
|
|
34
|
+
{ label: "safety", value: `${approval.mode} · ${sandbox.mode}` },
|
|
35
|
+
],
|
|
36
|
+
width,
|
|
37
|
+
color,
|
|
38
|
+
minInnerWidth: 40,
|
|
39
|
+
});
|
|
40
|
+
const lines = [...card, ""];
|
|
41
|
+
if (!authReady) {
|
|
42
|
+
const warn = "! auth incomplete — run `patze login` or set PATZE_CODE_* env";
|
|
43
|
+
lines.push(color ? `${YELLOW}${warn}${RESET}` : warn);
|
|
44
|
+
lines.push("");
|
|
45
|
+
}
|
|
46
|
+
lines.push("Type a task, or /help for commands.");
|
|
47
|
+
lines.push(color ? `${DIM}Tips${RESET}` : "Tips");
|
|
48
|
+
for (const tip of HEADER_TIPS) {
|
|
49
|
+
lines.push(` • ${tip}`);
|
|
50
|
+
}
|
|
51
|
+
const shortcuts = "Tab completes /commands · ↑/↓ recalls history · Ctrl+C cancels";
|
|
52
|
+
lines.push(color ? `${DIM}${shortcuts}${RESET}` : shortcuts);
|
|
53
|
+
return lines;
|
|
26
54
|
}
|
|
55
|
+
const HEADER_TIPS = [
|
|
56
|
+
"/inspect scans the workspace (read-only)",
|
|
57
|
+
"/plan then /diff previews changes before any write",
|
|
58
|
+
"/apply needs typed approval — it never auto-applies",
|
|
59
|
+
];
|
|
27
60
|
export const INTERACTIVE_PROMPT = "› ";
|
|
28
61
|
//# sourceMappingURL=header.js.map
|
|
@@ -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,
|
|
1
|
+
{"version":3,"file":"header.js","sourceRoot":"","sources":["../../../src/cli/interactive/header.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;
|
|
1
|
+
{"version":3,"file":"shell.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAA;AAYtD,MAAM,MAAM,uBAAuB,GAAG;IACpC,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,SAAS,MAAM,EAAE,CAAA;IACzB,MAAM,CAAC,EAAE,UAAU,CAAA;IACnB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB,CAAA;AAED,MAAM,MAAM,sBAAsB,GAAG;IACnC,QAAQ,EAAE,MAAM,CAAA;IAChB,KAAK,EAAE,MAAM,EAAE,CAAA;CAChB,CAAA;AAED,wBAAsB,mBAAmB,CACvC,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,sBAAsB,CAAC,CAyHjC"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { createInterface } from "node:readline";
|
|
2
2
|
import { createBufferWriter, createStdoutWriter } from "../ui/text-writer.js";
|
|
3
3
|
import { INTERACTIVE_PROMPT, renderInteractiveHeader } from "./header.js";
|
|
4
|
+
import { completeSlashInput } from "./completer.js";
|
|
4
5
|
import { InteractiveSession } from "./session.js";
|
|
5
6
|
import { parseSlashInput } from "./slash-parse.js";
|
|
6
7
|
import { dispatchAgentPrompt, dispatchSlashCommand, } from "./slash-dispatch.js";
|
|
@@ -92,6 +93,7 @@ export async function runInteractiveShell(options = {}) {
|
|
|
92
93
|
output: process.stdout,
|
|
93
94
|
terminal: true,
|
|
94
95
|
prompt,
|
|
96
|
+
completer: (line) => completeSlashInput(line),
|
|
95
97
|
});
|
|
96
98
|
rl.prompt();
|
|
97
99
|
await new Promise((resolvePromise) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"shell.js","sourceRoot":"","sources":["../../../src/cli/interactive/shell.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAA;AAG/C,OAAO,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAA;AAC7E,OAAO,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAA;AACzE,OAAO,EAAE,kBAAkB,EAAE,MAAM,gBAAgB,CAAA;AACnD,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAA;AACjD,OAAO,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAA;AAClD,OAAO,EACL,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAA;AAc/D,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,UAAmC,EAAE;IAErC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,CAAA;IACxC,MAAM,MAAM,GAAG,kBAAkB,EAAE,CAAA;IACnC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,EAAE,CAAA;IACnD,MAAM,MAAM,GAAe;QACzB,IAAI,CAAC,IAAI,GAAG,EAAE;YACZ,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;YACf,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACnB,CAAC;KACF,CAAA;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,kBAAkB,CAAA;IACnD,MAAM,OAAO,GAAG,IAAI,kBAAkB,CAAC,GAAG,CAAC,CAAA;IAE3C,KAAK,MAAM,IAAI,IAAI,uBAAuB,CAAC,GAAG,EAAE,OAAO,CAAC,iBAAiB,EAAE,CAAC,EAAE,CAAC;QAC7E,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACnB,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAEf,IAAI,QAAQ,GAAG,CAAC,CAAA;IAEhB,MAAM,WAAW,GAAG,KAAK,EAAE,OAAe,EAAoB,EAAE;QAC9D,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;QAC3B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,KAAK,CAAA;QACd,CAAC;QAED,MAAM,MAAM,GAAG,eAAe,CAAC,IAAI,CAAC,CAAA;QACpC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,IAAI,OAAO,CAAC,2BAA2B,EAAE,EAAE,CAAC;gBAC1C,MAAM,MAAM,GAAG,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;gBACtD,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;gBACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;oBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;gBACpB,CAAC;gBACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;gBACf,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;gBAC1B,OAAO,KAAK,CAAA;YACd,CAAC;YAED,MAAM,MAAM,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,CAAA;YACvD,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;YACpB,CAAC;YACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;YACf,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;YAC1B,OAAO,MAAM,CAAC,SAAS,CAAA;QACzB,CAAC;QAED,MAAM,MAAM,GAAG,MAAM,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE;YACzD,sBAAsB,EAAE,OAAO,CAC7B,CAAC,OAAO,CAAC,KAAK,IAAI,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,OAAO,CAAC,MAAM,CAAC,KAAK,CAC9D;SACF,CAAC,CAAA;QACF,OAAO,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QACpD,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YACjC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QACpB,CAAC;QACD,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACf,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC1B,OAAO,MAAM,CAAC,SAAS,CAAA;IACzB,CAAC,CAAA;IAED,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;QAClB,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,eAAe,CAAC,CAAA;QACrC,KAAK,MAAM,OAAO,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YACpC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAA;YAClC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;YAC7C,IAAI,UAAU,EAAE,CAAC;gBACf,MAAK;YACP,CAAC;QACH,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC1C,CAAC;IAED,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;QAClD,MAAM,EAAE,GAAG,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAA;QACzE,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC,CAAA;QAC/B,IAAI,CAAC;YACH,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,EAAE,EAAE,CAAC;gBAC/B,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,GAAG,OAAO,EAAE,CAAC,CAAA;gBAClC,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;gBAC7C,IAAI,UAAU,EAAE,CAAC;oBACf,MAAK;gBACP,CAAC;YACH,CAAC;QACH,CAAC;gBAAS,CAAC;YACT,EAAE,CAAC,KAAK,EAAE,CAAA;QACZ,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;IAC1C,CAAC;IAED,MAAM,EAAE,GAAG,eAAe,CAAC;QACzB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,MAAM,EAAE,OAAO,CAAC,MAAM;QACtB,QAAQ,EAAE,IAAI;QACd,MAAM;QACN,SAAS,EAAE,CAAC,IAAY,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC;KACtD,CAAC,CAAA;IAEF,EAAE,CAAC,MAAM,EAAE,CAAA;IAEX,MAAM,IAAI,OAAO,CAAO,CAAC,cAAc,EAAE,EAAE;QACzC,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,OAAO,EAAE,EAAE;YACxB,KAAK,CAAC,KAAK,IAAI,EAAE;gBACf,MAAM,UAAU,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,CAAA;gBAC7C,IAAI,UAAU,EAAE,CAAC;oBACf,EAAE,CAAC,KAAK,EAAE,CAAA;oBACV,cAAc,EAAE,CAAA;oBAChB,OAAM;gBACR,CAAC;gBACD,EAAE,CAAC,MAAM,EAAE,CAAA;YACb,CAAC,CAAC,EAAE,CAAA;QACN,CAAC,CAAC,CAAA;QAEF,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;YAClB,cAAc,EAAE,CAAA;QAClB,CAAC,CAAC,CAAA;IACJ,CAAC,CAAC,CAAA;IAEF,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,KAAK,EAAE,CAAA;AAC1C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/slash-suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,eAAe,EAAE,CAcpF;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"slash-suggest.d.ts","sourceRoot":"","sources":["../../../src/cli/interactive/slash-suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAkB,KAAK,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAE1E,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,SAAI,GAAG,eAAe,EAAE,CAcpF;AAED,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,EAAE,CAcrE"}
|
|
@@ -16,7 +16,11 @@ export function formatUnknownSlashMessage(inputName) {
|
|
|
16
16
|
const suggestions = suggestSlashCommands(inputName, 3);
|
|
17
17
|
const lines = [`Unknown command: /${inputName.replace(/^\//, "")}`];
|
|
18
18
|
if (suggestions.length) {
|
|
19
|
-
lines.push(
|
|
19
|
+
lines.push("Did you mean:");
|
|
20
|
+
const width = Math.max(...suggestions.map((item) => item.name.length));
|
|
21
|
+
for (const item of suggestions) {
|
|
22
|
+
lines.push(` /${item.name.padEnd(width)} ${item.description}`);
|
|
23
|
+
}
|
|
20
24
|
}
|
|
21
25
|
lines.push(`Type /help to list commands.`);
|
|
22
26
|
return lines;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"slash-suggest.js","sourceRoot":"","sources":["../../../src/cli/interactive/slash-suggest.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAwB,MAAM,qBAAqB,CAAA;AAE1E,MAAM,UAAU,oBAAoB,CAAC,SAAiB,EAAE,KAAK,GAAG,CAAC;IAC/D,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAA;IAChE,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAA;IACvC,CAAC;IAED,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;QAC9C,OAAO;QACP,KAAK,EAAE,UAAU,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,CAAC;KACxC,CAAC,CAAC;SACA,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC;SAClC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,CAAA;IAElD,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,CAAA;AAC7D,CAAC;AAED,MAAM,UAAU,yBAAyB,CAAC,SAAiB;IACzD,MAAM,WAAW,GAAG,oBAAoB,CAAC,SAAS,EAAE,CAAC,CAAC,CAAA;IACtD,MAAM,KAAK,GAAG,CAAC,qBAAqB,SAAS,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,EAAE,CAAC,CAAA;IAEnE,IAAI,WAAW,CAAC,MAAM,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,
|
|
1
|
+
{"version":3,"file":"slash-suggest.js","sourceRoot":"","sources":["../../../src/cli/interactive/slash-suggest.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export type CardRow = {
|
|
2
|
+
label: string;
|
|
3
|
+
value: string;
|
|
4
|
+
};
|
|
5
|
+
export type CardOptions = {
|
|
6
|
+
title: string;
|
|
7
|
+
rows: CardRow[];
|
|
8
|
+
/** Terminal columns. 0 or undefined sizes the card to its content. */
|
|
9
|
+
width?: number;
|
|
10
|
+
color?: boolean;
|
|
11
|
+
minInnerWidth?: number;
|
|
12
|
+
};
|
|
13
|
+
/**
|
|
14
|
+
* Render an aligned, bordered status card. Falls back to plain key/value
|
|
15
|
+
* lines when the terminal is too narrow to draw a readable box.
|
|
16
|
+
*/
|
|
17
|
+
export declare function renderCard(options: CardOptions): string[];
|
|
18
|
+
//# sourceMappingURL=box.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/box.ts"],"names":[],"mappings":"AAeA,MAAM,MAAM,OAAO,GAAG;IACpB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,MAAM,MAAM,WAAW,GAAG;IACxB,KAAK,EAAE,MAAM,CAAA;IACb,IAAI,EAAE,OAAO,EAAE,CAAA;IACf,sEAAsE;IACtE,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAA;CACvB,CAAA;AAmBD;;;GAGG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,WAAW,GAAG,MAAM,EAAE,CA4CzD"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
// Lightweight bordered status card. Deterministic with color disabled
|
|
2
|
+
// (NO_COLOR / non-TTY): pure box-drawing characters, no ANSI escapes.
|
|
3
|
+
const BORDER = {
|
|
4
|
+
topLeft: "╭",
|
|
5
|
+
topRight: "╮",
|
|
6
|
+
bottomLeft: "╰",
|
|
7
|
+
bottomRight: "╯",
|
|
8
|
+
horizontal: "─",
|
|
9
|
+
vertical: "│",
|
|
10
|
+
};
|
|
11
|
+
const DIM = "\x1b[2m";
|
|
12
|
+
const RESET = "\x1b[0m";
|
|
13
|
+
function truncate(text, max) {
|
|
14
|
+
if (max <= 0) {
|
|
15
|
+
return "";
|
|
16
|
+
}
|
|
17
|
+
if (text.length <= max) {
|
|
18
|
+
return text;
|
|
19
|
+
}
|
|
20
|
+
if (max === 1) {
|
|
21
|
+
return "…";
|
|
22
|
+
}
|
|
23
|
+
return `${text.slice(0, max - 1)}…`;
|
|
24
|
+
}
|
|
25
|
+
function dim(text, color) {
|
|
26
|
+
return color ? `${DIM}${text}${RESET}` : text;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Render an aligned, bordered status card. Falls back to plain key/value
|
|
30
|
+
* lines when the terminal is too narrow to draw a readable box.
|
|
31
|
+
*/
|
|
32
|
+
export function renderCard(options) {
|
|
33
|
+
const color = options.color ?? false;
|
|
34
|
+
const labelWidth = Math.max(0, ...options.rows.map((row) => row.label.length));
|
|
35
|
+
const rowTexts = options.rows.map((row) => `${row.label.padEnd(labelWidth)} ${row.value}`);
|
|
36
|
+
const naturalInner = Math.max(options.minInnerWidth ?? 0, options.title.length + 2, ...rowTexts.map((text) => text.length));
|
|
37
|
+
const cap = options.width && options.width > 0 ? options.width - 4 : naturalInner;
|
|
38
|
+
const inner = Math.max(1, Math.min(naturalInner, cap));
|
|
39
|
+
// Too narrow for a useful box: degrade to plain aligned rows.
|
|
40
|
+
if (inner < 12) {
|
|
41
|
+
return [options.title, ...rowTexts];
|
|
42
|
+
}
|
|
43
|
+
const title = truncate(options.title, inner - 2);
|
|
44
|
+
const dashCount = inner - title.length - 1;
|
|
45
|
+
const top = dim(`${BORDER.topLeft}${BORDER.horizontal} ${title} ${BORDER.horizontal.repeat(Math.max(1, dashCount))}${BORDER.topRight}`, color);
|
|
46
|
+
const bottom = dim(`${BORDER.bottomLeft}${BORDER.horizontal.repeat(inner + 2)}${BORDER.bottomRight}`, color);
|
|
47
|
+
const body = options.rows.map((row, index) => {
|
|
48
|
+
const cell = truncate(rowTexts[index], inner).padEnd(inner);
|
|
49
|
+
const label = row.label.padEnd(labelWidth);
|
|
50
|
+
const rendered = color
|
|
51
|
+
? `${dim(label, color)}${cell.slice(label.length)}`
|
|
52
|
+
: cell;
|
|
53
|
+
const left = dim(`${BORDER.vertical} `, color);
|
|
54
|
+
const right = dim(` ${BORDER.vertical}`, color);
|
|
55
|
+
return `${left}${rendered}${right}`;
|
|
56
|
+
});
|
|
57
|
+
return [top, ...body, bottom];
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=box.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"box.js","sourceRoot":"","sources":["../../../src/cli/ui/box.ts"],"names":[],"mappings":"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"}
|