@vextlabs/theron-cli 0.1.1 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -11,7 +11,7 @@ theron onboard
11
11
 
12
12
  Most coding CLIs end a turn the moment the model stops talking. Theron CLI adds a grading step after each turn and a switchable domain council on top of the agent loop:
13
13
 
14
- - **Output verification after every turn.** A suite of up to 8 verifier kernels is available; each profile runs its own subset (the default `code` profile runs 3: `typecheck`, `lint`, `test_smoke`), in parallel (each with a 5s timeout), scoped to the files the model just touched. The full kernel set: `typecheck` (real `npx tsc --noEmit` on touched `.ts`, parses `TSxxxx` errors and blocks), `lint` (flags `console.log`/`debugger`/`.only`/`eslint-disable`), `test_smoke` (runs your `test:smoke` / `test:fast` or `pytest` on touched files), `style_lint`, `em_dash_check` (blocks every em-dash), `ai_ism_check` (flags filler like "delve"/"tapestry"/"leverage"), `citation_presence` (warns when long legal/research/medical output ships no citation), and `arithmetic_recheck` (re-evaluates asserted `X op Y = Z` equations and blocks mismatches). These checks run after the turn; blocking issues are auto-prepended to the next turn so the model fixes them on the following response.
14
+ - **Output verification after every turn.** A suite of up to 8 verifier kernels is available; each profile runs its own subset (the default `code` profile runs 3: `typecheck`, `lint`, `test_smoke`), in parallel (each with a 5s timeout). The file kernels (`typecheck`/`lint`/`test_smoke`) run over the files the model just touched; the text kernels (em-dash, AI-isms, citations, arithmetic) run over the response text itself. The full kernel set: `typecheck` (real `npx tsc --noEmit` on touched `.ts`, parses `TSxxxx` errors and blocks), `lint` (flags `console.log`/`debugger`/`.only`/`eslint-disable`), `test_smoke` (runs your `test:smoke` / `test:fast` or `pytest` on touched files), `style_lint`, `em_dash_check` (blocks every em-dash), `ai_ism_check` (flags filler like "delve"/"tapestry"/"leverage"), `citation_presence` (warns when long legal/research/medical output ships no citation), and `arithmetic_recheck` (re-evaluates asserted `X op Y = Z` equations and blocks mismatches). These checks run after the turn; blocking issues are auto-prepended to the next turn so the model fixes them on the following response.
15
15
  - **A 33-profile domain council.** Switch the active persona mid-session with `/mode` — 6 hand-tuned profiles (code, legal, finance, design, research, writing) plus 27 template-generated baselines, each carrying its own verifier set and tool policy. Read-only profiles (e.g. medical, therapy) drop Write/Edit/Bash entirely.
16
16
  - **Stoa signed-receipt cap tool.** The built-in `Stoa` tool reaches any Stoa-registered SaaS capability (send a Slack message, open a GitHub issue, charge via Stripe) and returns the server's signed, cost-stamped receipt — an auditable record of every external action, not a generic bridge. The CLI displays whatever signature algorithm and value the server returns.
17
17
  - **One-command import from Claude.** `theron import-claude <export.zip>` reads a Claude data export locally, extracts your voice preferences, recurring proper-nouns, and first-person facts (user messages only — raw conversations never leave your machine), confirms, then uploads just those to Theron memory.
@@ -20,9 +20,20 @@ Most coding CLIs end a turn the moment the model stops talking. Theron CLI adds
20
20
 
21
21
  - Streams from `theron.tryvext.com` and runs an agentic tool loop: each turn the model can call tools, the CLI runs them locally, feeds results back, and loops (up to 20 inner iterations) until the turn ends.
22
22
  - **8 local tools** execute in your working directory: `Read`, `Write`, `Edit`, `Bash`, `Glob`, `Grep`, `LS`, and `Stoa`. `Read` caps large files, `Bash` has a 120s default / 600s max timeout with a byte cap, `Edit` does exact-unique-substring replacement.
23
- - **Confirmation gating.** `Write`, `Edit`, `Bash`, and `Stoa` prompt `(y/N)` before running; `Read`, `Glob`, `Grep`, `LS` never prompt. Pass `--yes` (or `/yolo` in-session) to auto-approve.
23
+ - **Confirmation gating.** `Write`, `Edit`, `Bash`, and `Stoa` prompt `(y/N)` before running; `Read`, `Glob`, `Grep`, `LS` never prompt. Pass `--yes` (or `/yolo` in-session) to auto-approve. In **plan mode** (`--plan` / `/plan`) those four tools are hard-denied at the executor regardless of `--yes`, so the run stays strictly read-only.
24
24
  - **Onboarding wizard** (`theron onboard`): logs you in, picks your top-3 specialists, installs a `cl` shell alias, opens Microsoft 365 + Google Workspace OAuth, links the Office add-in sideload, and optionally imports a Claude export — in one flow.
25
25
 
26
+ ## Workflow features
27
+
28
+ These mirror the day-to-day ergonomics most terminal coding assistants expose. Every one is client-side and works with the existing chat endpoint.
29
+
30
+ - **Custom slash commands.** Drop a markdown file at `./.theron/commands/<name>.md` (project) or `~/.theron/commands/<name>.md` (global) and typing `/<name>` sends that file's body as the turn's prompt. The body supports `$ARGUMENTS` (the full argument string) and `$1`, `$2`, … (whitespace-split positionals); a placeholder with no matching argument expands to empty, and a literal `$word` is left untouched. An optional `--- description: … ---` frontmatter line sets the `/help` blurb and is stripped from the prompt. Project commands override global ones on a name collision; a command whose name collides with a built-in (`/clear`, `/help`, …) is rejected at load so it can never shadow the built-in. `/commands` lists them; `/commands reload` re-scans without restarting. The substituted text is sent to the model as a prompt — it is never passed to a shell.
31
+ - **Plan mode.** Start with `--plan`, or toggle `/plan` mid-session. In plan mode the model is sent only the read-only tool subset (`Read`, `Glob`, `Grep`, `LS`) and any `Write` / `Edit` / `Bash` / `Stoa` call is hard-denied at the executor **before** the confirmation/`--yes` check — so no write can run even under `--yes`/`/yolo`. A plan-mode instruction is prepended to the turn asking the model to investigate read-only and produce a numbered plan. Type `approve` (or `/plan` again) to leave plan mode and restore the normal tool policy.
32
+ - **Session resume.** Every interactive session is saved under `~/.theron/sessions/<id>.json`, where `<id>` is a stable hash of the working directory, after every turn (written atomically; capped at 5 MB with oldest-message eviction). `theron --continue` resumes the most-recent session for the current directory; `theron --resume [id]` resumes a specific session, or shows a numbered picker when no id is given. `/sessions` lists saved sessions. `/clear` resets the on-disk session too. A missing or corrupt session file fails open — the CLI starts fresh rather than crashing.
33
+ - **Headless mode (`-p` / `--print`).** Run one full agentic turn non-interactively and exit — the prompt comes from the positional argument or, if omitted, from stdin. `--output-format text` (default) prints just the answer; `--output-format json` prints a single JSON object `{answer, tools_used, verifier, cost, session_id}`. No banner, spinner, or chips reach stdout, so the output pipes cleanly. The exit code is `0` on a completed turn and `1` on a stream/tool error. `cost` is always `null`: the streaming wire format carries no usage/cost frame, and the CLI never fabricates a number.
34
+ - **`@`-file references.** Write `@path/to/file` in a prompt and, when the token resolves to an existing readable file **inside** the working directory, its contents are read and inlined as a fenced block labeled with the path (capped at 32 KB, head kept). Path traversal is refused (`@../../../etc/passwd` is rejected), absolute paths are not auto-inlined (use the `Read` tool, which prompts), and likely-secret files (`.env*`, `*credentials*`, `*.pem`, `id_rsa`, …) and binaries are skipped. A token that doesn't resolve to a file — including a bare `@specialist` name — is left untouched for the council's `@`-mention router.
35
+ - **Markdown rendering.** `--render` pretty-prints the assistant's reply once the turn ends (`--no-render` to disable, `/render` to toggle). It is **on by default for an interactive TTY** and **forced off** when piped, headless, or `NO_COLOR` is set, so plain text always pipes cleanly. When rendering is on the raw token stream is buffered and the rendered block is emitted exactly once, so the answer is never printed twice.
36
+
26
37
  ## Project memory (`THERON.md`)
27
38
 
28
39
  The CLI auto-loads a per-project instructions file and injects it into every turn as authoritative repo context — so the model knows your build command, code style, and house rules without you re-typing them each session.
@@ -39,6 +50,12 @@ theron "fix the bug in foo.ts" # one-shot prompt, exits on end-turn (pipeable
39
50
  theron --mode legal # start in the Legal profile
40
51
  theron --mode list # see all 33 profiles
41
52
  theron --yes # auto-approve every tool call (yolo mode)
53
+ theron --plan # plan mode — read-only tools, propose a plan
54
+ theron --continue # resume the most-recent session for this dir
55
+ theron --resume # pick a saved session from a list
56
+ theron -p "summarize this repo" # headless: one turn, print the answer, exit
57
+ theron -p "list the bugs" --output-format json # headless, single JSON object
58
+ echo "what changed?" | theron -p --output-format json # prompt from stdin
42
59
  ```
43
60
 
44
61
  ## Top-level commands
@@ -58,9 +75,13 @@ theron --yes # auto-approve every tool call (yolo mode)
58
75
  ## In-REPL slash commands
59
76
 
60
77
  ```
61
- /help Show the menu
62
- /clear Reset the current conversation
78
+ /help Show the menu (also lists your custom commands)
79
+ /clear Reset the current conversation (and its saved session)
63
80
  /yolo Toggle auto-approve for tool calls
81
+ /plan Toggle plan mode (read-only tools); 'approve' exits plan mode
82
+ /render Toggle pretty markdown rendering of the reply at end of turn
83
+ /commands List custom slash commands; /commands reload re-scans them
84
+ /sessions List saved sessions (resume with `theron --resume <id>` / `--continue`)
64
85
  /cwd Show current working directory
65
86
  /cd <path> Change working directory
66
87
  /tools List available tools
@@ -70,14 +91,17 @@ theron --yes # auto-approve every tool call (yolo mode)
70
91
  /pin <spec> Pin a council specialist for the next turn (@legal, @code, …)
71
92
  /unpin Clear pinned specialists
72
93
  /cap list Show registered Stoa caps you can invoke as tools
73
- /status Show cwd / mode / api / auth / yolo state
94
+ /status Show cwd / mode / api / auth / yolo / plan / render / session state
74
95
  /login Tells you to exit and run `theron login`
75
96
  /logout Clear stored credentials
76
97
  /connections List connected SaaS accounts (alias: /integrations)
77
98
  /bug Print where to send CLI feedback
78
99
  /quit Exit (or Ctrl-C)
100
+ /<custom> Run a command from ./.theron/commands or ~/.theron/commands
79
101
  ```
80
102
 
103
+ In a prompt, `@path/to/file` inlines a readable file from the working directory (see Workflow features above); `@specialist` still pins a council member.
104
+
81
105
  ## Authentication
82
106
 
83
107
  `theron login` saves your API key to `~/.theron/credentials` (file mode 0600, directory mode 0700). The key is resolved in this priority order (first wins):
package/dist/banner.d.ts CHANGED
@@ -26,4 +26,11 @@ export declare const SLASH_COMMANDS: Array<{
26
26
  trigger: string;
27
27
  desc: string;
28
28
  }>;
29
- export declare function renderSlashHelp(): string;
29
+ /** A custom user command to list under /help. */
30
+ export interface CustomCommandHelp {
31
+ /** Command name with leading slash, e.g. "/review". */
32
+ trigger: string;
33
+ /** One-line description (from the command's frontmatter, or a default). */
34
+ desc: string;
35
+ }
36
+ export declare function renderSlashHelp(customCommands?: CustomCommandHelp[]): string;
package/dist/banner.js CHANGED
@@ -164,6 +164,10 @@ export const SLASH_COMMANDS = [
164
164
  { trigger: "/unpin", desc: "Clear pinned specialists" },
165
165
  { trigger: "/mode <slug>", desc: "Switch domain profile (code, legal, finance, design, research, writing, +27)" },
166
166
  { trigger: "/mode list", desc: "Show all 33 profiles + descriptions" },
167
+ { trigger: "/plan", desc: "Toggle plan mode — read-only tools; the model proposes a plan and stops. 'approve' exits" },
168
+ { trigger: "/render", desc: "Toggle pretty markdown rendering of the assistant's reply at end of turn" },
169
+ { trigger: "/commands", desc: "List custom slash commands; /commands reload re-scans the commands dirs" },
170
+ { trigger: "/sessions", desc: "List saved sessions (resume with `theron --resume <id>` or `--continue`)" },
167
171
  { trigger: "/cap list", desc: "Show registered Stoa caps + per-cap policy (~/.theron/caps.json overlaid by ./.theron/caps.json)" },
168
172
  { trigger: "/memory", desc: "Show loaded project memory (THERON.md / CLAUDE.md / AGENTS.md); /memory reload re-reads it" },
169
173
  { trigger: "/readiness", desc: "Probe prod substrate health (council, db, Stoa, RAG, OAuth, driver loop)" },
@@ -177,7 +181,7 @@ export const SLASH_COMMANDS = [
177
181
  { trigger: "/bug", desc: "File an issue against the CLI (opens the issue tracker)" },
178
182
  { trigger: "/quit", desc: "Exit (or Ctrl-C)" },
179
183
  ];
180
- export function renderSlashHelp() {
184
+ export function renderSlashHelp(customCommands = []) {
181
185
  const out = [];
182
186
  out.push(chalk.bold.hex(AMBER)("theron") + chalk.dim(" — slash commands:"));
183
187
  out.push("");
@@ -185,8 +189,16 @@ export function renderSlashHelp() {
185
189
  const pad = c.trigger.padEnd(16, " ");
186
190
  out.push(" " + chalk.hex(AMBER)(pad) + " " + chalk.dim(c.desc));
187
191
  }
192
+ if (customCommands.length > 0) {
193
+ out.push("");
194
+ out.push(chalk.dim(" custom commands (from ~/.theron/commands + ./.theron/commands):"));
195
+ for (const c of customCommands) {
196
+ const pad = c.trigger.padEnd(16, " ");
197
+ out.push(" " + chalk.hex(AMBER)(pad) + " " + chalk.dim(c.desc));
198
+ }
199
+ }
188
200
  out.push("");
189
- out.push(chalk.dim("type any message to chat · ") + chalk.dim("@") + chalk.dim("specialist to pin · ") + chalk.dim("Shift+Enter for newline"));
201
+ out.push(chalk.dim("type any message to chat · ") + chalk.dim("@") + chalk.dim("specialist or @path/to/file · ") + chalk.dim("Shift+Enter for newline"));
190
202
  return out.join("\n");
191
203
  }
192
204
  //# sourceMappingURL=banner.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"banner.js","sourceRoot":"","sources":["../src/banner.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export interface FileAttachment {
2
+ /** The @-token path as the user typed it. */
3
+ token: string;
4
+ /** Resolved absolute path that was read. */
5
+ resolved: string;
6
+ /** File contents (possibly truncated). */
7
+ content: string;
8
+ truncated: boolean;
9
+ }
10
+ export interface ResolvedRefs {
11
+ /** Prompt text with the resolved @-tokens removed (so they aren't
12
+ * re-interpreted as specialists) and the inlined blocks appended. */
13
+ text: string;
14
+ /** Files that were inlined. Empty when no @-ref resolved to a file. */
15
+ attachments: FileAttachment[];
16
+ /** Tokens that looked path-like but were refused (traversal / secret /
17
+ * binary / missing). Surfaced so the user knows why nothing inlined. */
18
+ skipped: Array<{
19
+ token: string;
20
+ reason: string;
21
+ }>;
22
+ }
23
+ /**
24
+ * Resolve @<path> file references in a prompt.
25
+ *
26
+ * For each @-token:
27
+ * 1. Skip absolute tokens (left for explicit Read; not auto-inlined).
28
+ * 2. Resolve relative/`~` tokens under cwd.
29
+ * 3. Require the real path to stay inside cwd (traversal guard).
30
+ * 4. Require an existing regular file, not a secret, not binary.
31
+ * 5. Inline its (byte-capped) contents as a fenced block.
32
+ *
33
+ * Tokens that don't resolve to a safe file are left in the text untouched
34
+ * so the existing @<specialist> router still sees them.
35
+ *
36
+ * Never throws — any fs error on a token just skips that token.
37
+ */
38
+ export declare function resolveFileRefs(text: string, cwd: string): ResolvedRefs;
@@ -0,0 +1,219 @@
1
+ // file_refs — inline @<path> file references in a prompt.
2
+ //
3
+ // Theron's analogue to Claude Code's `@file` mentions. When a prompt
4
+ // contains `@src/foo.ts` (or `@./a.md`, `@~/notes.txt`, `@/abs/path`)
5
+ // and that token resolves to an existing readable regular file, the
6
+ // CLI reads the file and inlines its contents as a fenced block labeled
7
+ // with the path. The model then sees the file without an extra Read
8
+ // round-trip.
9
+ //
10
+ // DISAMBIGUATION with @<specialist>:
11
+ // The council's @-mention router matches /@([a-z]+)\b/ — a lowercase
12
+ // word with no slash/dot/tilde. Real paths (@src/foo.ts, @./a.md,
13
+ // @~/x) never match that pattern, so they can't be mistaken for a
14
+ // specialist. The only ambiguous case is a bare @word that is also a
15
+ // filename in cwd; we resolve file-FIRST but ONLY when statSync
16
+ // confirms a regular file under cwd — otherwise the token is left
17
+ // untouched for the specialist router.
18
+ //
19
+ // SECURITY (path traversal): an @-ref inlines a file with NO confirmation
20
+ // prompt (unlike the Read tool), so the policy here is STRICTER than the
21
+ // Read tool:
22
+ // - Relative tokens resolve under cwd; the resolved real path MUST stay
23
+ // inside cwd. `@../../../etc/passwd` is refused.
24
+ // - Absolute tokens (`@/etc/shadow`) are NOT auto-inlined — they're
25
+ // left for the model to Read explicitly (which prompts). This keeps
26
+ // a silent inline from ever reaching outside the repo.
27
+ // - `~`-prefixed tokens expand to HOME but are then subject to the same
28
+ // "must be inside cwd" check, so they only inline when cwd is under
29
+ // HOME and the file is within cwd.
30
+ // - Dotfiles that commonly hold secrets (.env*, *credentials*, *.pem,
31
+ // id_rsa, etc.) are skipped.
32
+ // - Binary files are skipped (NUL-byte sniff).
33
+ // - Contents are byte-capped (32KB, head kept) like project_memory.
34
+ import fs from "node:fs";
35
+ import path from "node:path";
36
+ import process from "node:process";
37
+ /** Max bytes inlined per file (head kept, truncation marked). Mirrors
38
+ * project_memory's cap. */
39
+ const MAX_FILE_BYTES = 32 * 1024;
40
+ /** Filenames/patterns we refuse to auto-inline even when they resolve —
41
+ * secrets must never silently enter the prompt. */
42
+ const SECRET_PATTERNS = [
43
+ /(^|\/)\.env(\..*)?$/i,
44
+ /credential/i,
45
+ /\.pem$/i,
46
+ /\.key$/i,
47
+ /(^|\/)id_rsa/i,
48
+ /(^|\/)id_ed25519/i,
49
+ /\.p12$/i,
50
+ /\.pfx$/i,
51
+ /secrets?\.(json|ya?ml|toml)$/i,
52
+ ];
53
+ /** True when a token looks like a path rather than a bare specialist
54
+ * word. Anything with a slash, a dot, or a leading ~ is path-like; a
55
+ * bare lowercase word is left for the specialist router and only treated
56
+ * as a file if it actually statSyncs as one (handled in resolve). */
57
+ function looksPathLike(token) {
58
+ return /[\/.~]/.test(token);
59
+ }
60
+ /** NUL-byte sniff for binary content. */
61
+ function looksBinary(buf) {
62
+ const n = Math.min(buf.length, 8000);
63
+ for (let i = 0; i < n; i++)
64
+ if (buf[i] === 0)
65
+ return true;
66
+ return false;
67
+ }
68
+ function isSecretPath(p) {
69
+ return SECRET_PATTERNS.some((re) => re.test(p));
70
+ }
71
+ /**
72
+ * Resolve @<path> file references in a prompt.
73
+ *
74
+ * For each @-token:
75
+ * 1. Skip absolute tokens (left for explicit Read; not auto-inlined).
76
+ * 2. Resolve relative/`~` tokens under cwd.
77
+ * 3. Require the real path to stay inside cwd (traversal guard).
78
+ * 4. Require an existing regular file, not a secret, not binary.
79
+ * 5. Inline its (byte-capped) contents as a fenced block.
80
+ *
81
+ * Tokens that don't resolve to a safe file are left in the text untouched
82
+ * so the existing @<specialist> router still sees them.
83
+ *
84
+ * Never throws — any fs error on a token just skips that token.
85
+ */
86
+ export function resolveFileRefs(text, cwd) {
87
+ const attachments = [];
88
+ const skipped = [];
89
+ const cwdResolved = path.resolve(cwd);
90
+ // Track the exact @<token> spans we consumed so we can strip them.
91
+ const consumed = [];
92
+ // Match @ followed by a path-ish run. Allow letters, digits, /._-~ and
93
+ // path separators. Stop at whitespace. We post-filter with looksPathLike
94
+ // so bare specialist words fall through unless they resolve to a file.
95
+ const tokenRe = /@([A-Za-z0-9_./~-][A-Za-z0-9_./~-]*)/g;
96
+ const home = process.env.HOME ?? process.env.USERPROFILE ?? "";
97
+ let m;
98
+ while ((m = tokenRe.exec(text)) !== null) {
99
+ const full = m[0]; // "@src/foo.ts"
100
+ const token = m[1]; // "src/foo.ts"
101
+ // Expand ~ for resolution but keep the original token for labeling.
102
+ let candidate = token;
103
+ if (candidate === "~" || candidate.startsWith("~/")) {
104
+ if (!home) {
105
+ continue;
106
+ }
107
+ candidate = path.join(home, candidate.slice(1));
108
+ }
109
+ const isAbs = path.isAbsolute(candidate);
110
+ // Bare-word (no slash/dot/tilde) tokens: only treat as a file if they
111
+ // actually resolve to a regular file under cwd; otherwise leave for
112
+ // the specialist router (don't even probe absolute).
113
+ const pathLike = looksPathLike(token);
114
+ // SECURITY: never auto-inline an absolute path — leave it for an
115
+ // explicit Read (which prompts). Absolute tokens fall through.
116
+ if (isAbs) {
117
+ if (pathLike)
118
+ skipped.push({ token, reason: "absolute path not auto-inlined (use Read)" });
119
+ continue;
120
+ }
121
+ const resolved = path.resolve(cwdResolved, candidate);
122
+ // Traversal guard: resolved must be inside cwd.
123
+ const rel = path.relative(cwdResolved, resolved);
124
+ const insideCwd = rel === "" || (!rel.startsWith("..") && !path.isAbsolute(rel));
125
+ if (!insideCwd) {
126
+ if (pathLike)
127
+ skipped.push({ token, reason: "outside the working directory" });
128
+ continue;
129
+ }
130
+ // Stat — must be an existing regular file.
131
+ let st;
132
+ try {
133
+ st = fs.statSync(resolved);
134
+ }
135
+ catch {
136
+ if (pathLike)
137
+ skipped.push({ token, reason: "no such file" });
138
+ continue; // bare words silently fall through to the specialist router
139
+ }
140
+ if (!st.isFile()) {
141
+ if (pathLike)
142
+ skipped.push({ token, reason: "not a regular file" });
143
+ continue;
144
+ }
145
+ // SECURITY: the lexical guard above is defeatable by a symlink planted
146
+ // INSIDE cwd that points OUTSIDE it (statSync/readFileSync follow links).
147
+ // Resolve the REAL paths and re-check containment; refuse any symlink
148
+ // escape. (realpath both sides so a symlinked cwd — e.g. /tmp on macOS —
149
+ // doesn't trip a false escape.)
150
+ try {
151
+ const realCwd = fs.realpathSync(cwdResolved);
152
+ const realResolved = fs.realpathSync(resolved);
153
+ const realRel = path.relative(realCwd, realResolved);
154
+ if (realRel !== "" && (realRel.startsWith("..") || path.isAbsolute(realRel))) {
155
+ skipped.push({ token, reason: "symlink points outside the working directory" });
156
+ continue;
157
+ }
158
+ }
159
+ catch {
160
+ if (pathLike)
161
+ skipped.push({ token, reason: "unreadable" });
162
+ continue;
163
+ }
164
+ if (isSecretPath(resolved)) {
165
+ skipped.push({ token, reason: "looks like a secret file; not inlined" });
166
+ continue;
167
+ }
168
+ if (st.size > 5_000_000) {
169
+ skipped.push({ token, reason: "file too large to inline" });
170
+ continue;
171
+ }
172
+ // Read + binary sniff + byte cap.
173
+ let buf;
174
+ try {
175
+ buf = fs.readFileSync(resolved);
176
+ }
177
+ catch {
178
+ if (pathLike)
179
+ skipped.push({ token, reason: "unreadable" });
180
+ continue;
181
+ }
182
+ if (looksBinary(buf)) {
183
+ skipped.push({ token, reason: "binary file; not inlined" });
184
+ continue;
185
+ }
186
+ let truncated = false;
187
+ let body = buf.toString("utf8");
188
+ if (Buffer.byteLength(body, "utf8") > MAX_FILE_BYTES) {
189
+ body = Buffer.from(body, "utf8").subarray(0, MAX_FILE_BYTES).toString("utf8");
190
+ truncated = true;
191
+ }
192
+ attachments.push({ token, resolved, content: body, truncated });
193
+ consumed.push(full);
194
+ }
195
+ if (attachments.length === 0) {
196
+ return { text, attachments, skipped };
197
+ }
198
+ // Strip the consumed @<token> occurrences from the prompt text so they
199
+ // are NOT re-read by the specialist router, then append the fenced
200
+ // file blocks after the user's prose.
201
+ let stripped = text;
202
+ for (const full of consumed) {
203
+ // Replace each occurrence of the exact token span. Use split/join to
204
+ // avoid regex-escaping the (path) token.
205
+ stripped = stripped.split(full).join("");
206
+ }
207
+ stripped = stripped.replace(/[ \t]{2,}/g, " ").trim();
208
+ const blocks = attachments
209
+ .map((a) => {
210
+ const ext = path.extname(a.resolved).replace(/^\./, "");
211
+ const fence = "```" + (ext || "");
212
+ const head = `File: ${a.token}${a.truncated ? " (truncated to 32KB)" : ""}`;
213
+ return `${head}\n${fence}\n${a.content}\n\`\`\``;
214
+ })
215
+ .join("\n\n");
216
+ const text2 = stripped.length > 0 ? `${stripped}\n\n${blocks}` : blocks;
217
+ return { text: text2, attachments, skipped };
218
+ }
219
+ //# sourceMappingURL=file_refs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"file_refs.js","sourceRoot":"","sources":["../src/file_refs.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -34,6 +34,22 @@ USAGE
34
34
 
35
35
  OPTIONS
36
36
  --yes, -y auto-approve every tool call (yolo mode)
37
+ --plan start in PLAN MODE — read-only tools only
38
+ (Write / Edit / Bash / Stoa are blocked even
39
+ with --yes); the model proposes a plan and stops.
40
+ Toggle mid-session with /plan; type "approve" to exit.
41
+ -p, --print [prompt] headless mode: run one turn non-interactively and
42
+ exit. Prompt from [prompt] or, if omitted, stdin.
43
+ No banner/spinner on stdout.
44
+ --output-format <text|json> with -p: "text" (default) prints the answer;
45
+ "json" prints one object
46
+ {answer, tools_used, verifier, cost, session_id}.
47
+ --continue resume the most-recent session for this directory.
48
+ --resume [id] resume a saved session; with no id, pick from a list.
49
+ --render / --no-render pretty-render the assistant's markdown at end of
50
+ turn (default: on for an interactive TTY, off when
51
+ piped / headless so plain text pipes cleanly).
52
+ Toggle mid-session with /render.
37
53
  --cwd <dir> use <dir> as the working directory (default: $PWD)
38
54
  --mode, --profile <slug> start in a domain profile (code | legal | finance |
39
55
  design | research | writing | …33 total). Default: code.
@@ -81,6 +97,41 @@ function parseArgs(argv) {
81
97
  if (a === "--yes" || a === "-y") {
82
98
  out.yolo = true;
83
99
  }
100
+ else if (a === "--plan") {
101
+ out.planMode = true;
102
+ }
103
+ else if (a === "-p" || a === "--print") {
104
+ out.print = true;
105
+ }
106
+ else if (a === "--output-format") {
107
+ const v = readFlagValue(out, a, argv, i);
108
+ if (v == null)
109
+ return out;
110
+ if (v !== "text" && v !== "json") {
111
+ out.parseError = { code: 2, message: `--output-format must be 'text' or 'json' (got '${v}'). Run \`theron --help\`.` };
112
+ return out;
113
+ }
114
+ out.outputFormat = v;
115
+ i++;
116
+ }
117
+ else if (a === "--continue") {
118
+ out.continueSession = true;
119
+ }
120
+ else if (a === "--resume") {
121
+ out.resumeSession = true;
122
+ // Optional id arg — only consume it when it doesn't look like a flag.
123
+ const v = argv[i + 1];
124
+ if (v !== undefined && !v.startsWith("-")) {
125
+ out.resumeId = v;
126
+ i++;
127
+ }
128
+ }
129
+ else if (a === "--render") {
130
+ out.render = true;
131
+ }
132
+ else if (a === "--no-render") {
133
+ out.render = false;
134
+ }
84
135
  else if (a === "--cwd") {
85
136
  const v = readFlagValue(out, a, argv, i);
86
137
  if (v == null)
@@ -219,7 +270,43 @@ export async function main(argv) {
219
270
  return 2;
220
271
  }
221
272
  }
222
- if (!apiKey && !process.env.THERON_API_KEY && !args.prompt) {
273
+ // Headless print mode (-p / --print). The prompt comes from the
274
+ // positional arg, or — when none was given — from stdin (read to EOF).
275
+ // This is the only place we read stdin eagerly; the parser can't.
276
+ let oneShotPrompt = args.prompt;
277
+ let headless = false;
278
+ let outputFormat = "text";
279
+ if (args.print) {
280
+ headless = true;
281
+ outputFormat = args.outputFormat ?? "text";
282
+ if (!oneShotPrompt) {
283
+ const piped = await readStdinToEof();
284
+ oneShotPrompt = piped.trim();
285
+ }
286
+ if (!oneShotPrompt) {
287
+ process.stderr.write("-p / --print needs a prompt — pass one as an argument or pipe it on stdin.\n");
288
+ return 2;
289
+ }
290
+ }
291
+ else if (args.outputFormat) {
292
+ // --output-format only means something with -p.
293
+ process.stderr.write("--output-format only applies with -p / --print.\n");
294
+ return 2;
295
+ }
296
+ // Render mode: tri-state. Forced off in headless (so pipes get clean
297
+ // text / valid JSON); otherwise the flag wins; otherwise auto (on for
298
+ // an interactive TTY, off when piped or NO_COLOR).
299
+ let renderMode;
300
+ if (headless) {
301
+ renderMode = false;
302
+ }
303
+ else if (typeof args.render === "boolean") {
304
+ renderMode = args.render;
305
+ }
306
+ else {
307
+ renderMode = !!process.stdout.isTTY && !process.env.NO_COLOR && !oneShotPrompt;
308
+ }
309
+ if (!apiKey && !process.env.THERON_API_KEY && !oneShotPrompt) {
223
310
  // Anonymous calls work — auth just unlocks higher rate limits +
224
311
  // saved history. Quiet info line on interactive launch only;
225
312
  // one-shot mode keeps stdout clean for piping.
@@ -230,8 +317,31 @@ export async function main(argv) {
230
317
  apiKey,
231
318
  cwd,
232
319
  yolo: args.yolo,
233
- oneShot: args.prompt,
320
+ oneShot: oneShotPrompt,
234
321
  profile: args.profile,
322
+ planMode: args.planMode,
323
+ headless,
324
+ outputFormat,
325
+ continueSession: args.continueSession,
326
+ resumeSession: args.resumeSession,
327
+ resumeId: args.resumeId,
328
+ renderMode,
329
+ });
330
+ }
331
+ /** Read all of stdin to EOF as a UTF-8 string. Resolves "" when stdin is
332
+ * a TTY (no piped input) so headless mode fails the empty-prompt check
333
+ * rather than hanging on a terminal that never EOFs. */
334
+ function readStdinToEof() {
335
+ return new Promise((resolve) => {
336
+ if (process.stdin.isTTY) {
337
+ resolve("");
338
+ return;
339
+ }
340
+ let buf = "";
341
+ process.stdin.setEncoding("utf8");
342
+ process.stdin.on("data", (chunk) => { buf += chunk; });
343
+ process.stdin.on("end", () => resolve(buf));
344
+ process.stdin.on("error", () => resolve(buf));
235
345
  });
236
346
  }
237
347
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}