@plurnk/plurnk 0.6.0 → 0.22.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
@@ -1,58 +1,57 @@
1
1
  # plurnk
2
2
 
3
- Client app for [plurnk-service](https://github.com/plurnk/plurnk-service). Type a prompt at the terminal, drive a real model loop through the plurnk DSL.
3
+ Terminal client for [plurnk-service](https://github.com/plurnk/plurnk-service) type a prompt, drive a real model loop through the plurnk DSL. CLI one-shot, interactive TUI, and read-only subcommands over one WebSocket.
4
4
 
5
5
  ## install
6
6
 
7
7
  ```
8
- npm install -g @plurnk/plurnk
8
+ npm install -g @plurnk/plurnk # bundles the daemon (optional dep)
9
+ export OPENAI_API_KEY="…" # your provider keys (read by the daemon)
10
+ plurnk-service # start the background daemon
9
11
  ```
10
12
 
11
- Requires Node 25.
13
+ The client only needs the daemon reachable at `PLURNK_URL` (default `ws://127.0.0.1:3044`). All engine config — models, turns, providers — lives in the daemon's environment.
12
14
 
13
15
  ## use
14
16
 
15
- Set up env (copy `.env.example` to `.env`, or export the vars in your shell):
16
-
17
17
  ```
18
- PLURNK_DB_PATH=./plurnk.db
19
- PLURNK_MAX_TURNS=50
20
- OPENAI_BASE_URL=http://localhost:11435 # or your provider endpoint
21
- OPENAI_API_KEY=
22
- OPENAI_MODEL=macher.gguf
23
- OPENAI_CONTEXT_SIZE=262144
24
- OPENAI_FETCH_TIMEOUT_MS=600000
25
- OPENAI_THINK=0
18
+ plurnk "what is the capital of France?" # one-shot
19
+ cat notes.md | plurnk "summarize this" # piped stdin (appended)
20
+ plurnk # interactive TUI (no args, a TTY)
21
+ plurnk models | session list | log read … # read-only subcommands
22
+ plurnk --help # full flag list
26
23
  ```
27
24
 
28
- Run:
25
+ **Line language** (converged across the TUI, the CLI prefixes, and plurnk.nvim's `:AI`):
29
26
 
30
- ```
31
- plurnk "What is the capital of France? Store at known://france/capital and reply SEND[200]."
32
- ```
27
+ | | |
28
+ |---|---|
29
+ | `text` | a prompt (`?`=ask / `:`=act prefix) |
30
+ | `/verb` | `/models /sessions /runs /log /model /yolo /new /stop /quit`, membership `/pick /hide /view /drop /members`, `/import <path>` |
31
+ | `<<…>>` | raw plurnk DSL (`op.parse`) |
32
+ | `! cmd` | exec via the daemon |
33
+ | `... text` | inject into the running loop (or just type — a mid-loop prompt steers) |
33
34
 
34
- You get a per-turn trace of the model's plurnk DSL emissions, the final loop status, and a list of entries written.
35
+ Tab completes verbs, model aliases, file paths (`/pick`, `@file`), and DSL ops (`<<RE`→`<<READ`). Multi-line paste folds to one prompt.
35
36
 
36
- ## what plurnk does
37
+ **Key flags:** `--model <alias>` · `--yolo` · `--json` · `--session/--run <name>` · `--project-root <p>` · `--max-turns <n>` · `--timeout <s>` · membership `--pick/--hide/--view <glob>` · `--manifest-items <n>` · `--md NAME=path`.
37
38
 
38
- Plurnk is the agent's command grammar. The model emits operations like:
39
+ **Env:** `PLURNK_URL` (daemon) · `PLURNK_SESSION` / `PLURNK_RUN` (resume) · `PLURNK_MODEL` · `PLURNK_YOLO` · `PLURNK_PROJECT_ROOT`. Cascade: shell > `./.env` > `$XDG_CONFIG_HOME/plurnk/env`.
40
+
41
+ ## what plurnk is
42
+
43
+ The model emits operations in a compact grammar; the daemon executes them, persists state, and the client renders the trace:
39
44
 
40
45
  ```
41
46
  <<EDIT[france,europe](known://countries/france/capital):Paris:EDIT
42
47
  <<SEND[200]:Paris:SEND
43
48
  ```
44
49
 
45
- The CLI parses these, dispatches each to its scheme handler, persists state, and surfaces what happened. Multi-turn loops emerge naturally the model emits `SEND[102]` to continue, `SEND[200]` to terminate.
46
-
47
- The protocol's pitch: fancy multi-turn agent behavior on weak models, via the structure rather than the model's raw capability. See [plurnk-service](https://github.com/plurnk/plurnk-service)'s AGENTS.md for the full architecture.
50
+ Multi-turn loops emerge from the structure `SEND[102]` continues, `SEND[200]` terminates — fancy agent behavior on weak models via grammar rather than raw capability. See [plurnk-service](https://github.com/plurnk/plurnk-service).
48
51
 
49
- ## exit codes
52
+ ## exit codes (CLI mode)
50
53
 
51
- - `0` loop terminated successfully (`SEND[200]`)
52
- - `1` — runtime error
53
- - `2` — loop hit maxTurns safety cap
54
- - `3` — loop terminated with cancellation (`SEND[499]`)
55
- - `64` — usage error (missing prompt or env)
54
+ `0` success (`SEND[200]`) · `1` runtime error · `2` maxTurns cap · `3` cancelled (`SEND[499]` / `--timeout`) · `4` loop failed (4xx/5xx final) · `64` usage error.
56
55
 
57
56
  ## license
58
57
 
package/dist/cli.d.ts CHANGED
@@ -1,17 +1,30 @@
1
1
  import type Rpc from "./rpc.ts";
2
- import type { LogEntryWire } from "./render.ts";
2
+ import type { LogEntryWire, LoopUsage } from "./render.ts";
3
3
  interface SessionResult {
4
4
  id: number;
5
5
  name: string;
6
6
  }
7
+ export declare const exitCodeForLoop: (finalStatus: number, hitMaxTurns: boolean) => number;
8
+ export declare const formatResultLine: (r: {
9
+ loopId: number;
10
+ finalStatus: number;
11
+ turns: number;
12
+ wallMs: number;
13
+ hitMaxTurns: boolean;
14
+ timedOut: boolean;
15
+ reason?: string;
16
+ usage?: LoopUsage;
17
+ }) => string;
7
18
  export declare const formatPlain: (entry: LogEntryWire) => string;
8
19
  export declare const isTerminalBroadcast: (entry: LogEntryWire) => boolean;
9
20
  export declare const formatJsonReply: (txUnknown: unknown) => string;
10
21
  export declare const runCli: (rpc: Rpc, prompt: string, session: SessionResult, opts: {
11
22
  json: boolean;
12
23
  modelAlias?: string;
13
- persona?: string;
14
24
  yolo: boolean;
25
+ loopFlags?: Record<string, unknown>;
26
+ maxTurns?: number;
27
+ timeoutSec?: number;
15
28
  }) => Promise<number>;
16
29
  export {};
17
30
  //# sourceMappingURL=cli.d.ts.map
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAgBhD,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEpD,eAAO,MAAM,WAAW,GAAI,OAAO,YAAY,KAAG,MAWjD,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,OAAO,YAAY,KAAG,OAKL,CAAC;AAEtD,eAAO,MAAM,eAAe,GAAI,WAAW,OAAO,KAAG,MAOpD,CAAC;AAEF,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE,SAAS,aAAa,EAAE,MAAM;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,KAAG,OAAO,CAAC,MAAM,CA6F5K,CAAC"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,GAAG,MAAM,UAAU,CAAC;AAChC,OAAO,KAAK,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAkB3D,UAAU,aAAa;IAAG,EAAE,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAIpD,eAAO,MAAM,eAAe,GAAI,aAAa,MAAM,EAAE,aAAa,OAAO,KAAG,MAK3E,CAAC;AAIF,eAAO,MAAM,gBAAgB,GAAI,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IACnE,WAAW,EAAE,OAAO,CAAC;IAAC,QAAQ,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,SAAS,CAAC;CAC/E,KAAG,MAaH,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,OAAO,YAAY,KAAG,MAWjD,CAAC;AAMF,eAAO,MAAM,mBAAmB,GAAI,OAAO,YAAY,KAAG,OAKL,CAAC;AAEtD,eAAO,MAAM,eAAe,GAAI,WAAW,OAAO,KAAG,MAOpD,CAAC;AA0BF,eAAO,MAAM,MAAM,GAAU,KAAK,GAAG,EAAE,QAAQ,MAAM,EAAE,SAAS,aAAa,EAAE,MAAM;IACjF,IAAI,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAC;IAClD,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAC;CAC/E,KAAG,OAAO,CAAC,MAAM,CAsJjB,CAAC"}
package/dist/cli.js CHANGED
@@ -4,8 +4,36 @@
4
4
  // body lands on stdout (§5.4). Suitable for piping to grep / awk / head / jq.
5
5
  import { extractSendBody } from "./render.js";
6
6
  import { reviewProposal, isServerResolved } from "./proposal.js";
7
- import { report, clientProposalNoTtyReview } from "./telemetry.js";
8
- import { renderStreamEvent, renderStreamConcluded, reportStream } from "./stream.js";
7
+ import { report, clientProposalEditsBlocked } from "./telemetry.js";
8
+ import StreamTrace, { inlineable, renderInline, reportStream } from "./stream.js";
9
+ // Exit-code honesty (SPEC §4): a 4xx/5xx loop death is a FAILURE (4), not a
10
+ // user cancellation (3) — benchmark stats must distinguish them.
11
+ export const exitCodeForLoop = (finalStatus, hitMaxTurns) => {
12
+ if (finalStatus === 200)
13
+ return 0;
14
+ if (hitMaxTurns)
15
+ return 2;
16
+ if (finalStatus >= 400 && finalStatus !== 499)
17
+ return 4;
18
+ return 3;
19
+ };
20
+ // Machine-readable result envelope: one `result: {json}` line on stderr —
21
+ // stdout stays the pure answer; harnesses grep `^result: `.
22
+ export const formatResultLine = (r) => {
23
+ const payload = {
24
+ loopId: r.loopId, finalStatus: r.finalStatus, turns: r.turns,
25
+ wallMs: r.wallMs, hitMaxTurns: r.hitMaxTurns, timedOut: r.timedOut,
26
+ };
27
+ if (r.reason !== undefined)
28
+ payload.reason = r.reason;
29
+ // Real provider usage (plurnk-service #197); absent only for non-model ops.
30
+ if (r.usage !== undefined) {
31
+ payload.promptTokens = r.usage.promptTokens;
32
+ payload.completionTokens = r.usage.completionTokens;
33
+ payload.costPico = r.usage.costPico;
34
+ }
35
+ return `result: ${JSON.stringify(payload)}`;
36
+ };
9
37
  export const formatPlain = (entry) => {
10
38
  // Render what the wire says — no synthesis. Bare pathname when scheme
11
39
  // is null; full URI when scheme is present.
@@ -38,6 +66,29 @@ export const formatJsonReply = (txUnknown) => {
38
66
  return "";
39
67
  return JSON.stringify(raw);
40
68
  };
69
+ // One-shot exec: `plurnk "! make test"` — op.exec via the daemon, stream to
70
+ // conclusion, exec stdout→stdout / stderr→stderr, exit by closeStatus.
71
+ const runCliExec = async (rpc, command) => {
72
+ const concluded = new Promise((res) => {
73
+ rpc.onNotification("stream/concluded", (p) => res(p));
74
+ });
75
+ const result = await rpc.call("op.exec", { command });
76
+ if (result.status >= 400) {
77
+ process.stderr.write(`exec rejected: ${result.status}\n`);
78
+ return 4;
79
+ }
80
+ const fin = await concluded;
81
+ const read = await rpc.call("entry.read", { target: fin.target });
82
+ const channels = read.entry?.channels ?? {};
83
+ const out = channels.stdout?.content;
84
+ const err = channels.stderr?.content;
85
+ if (typeof out === "string" && out.length > 0)
86
+ process.stdout.write(out);
87
+ if (typeof err === "string" && err.length > 0)
88
+ process.stderr.write(err);
89
+ process.stderr.write(`exec: ${fin.closeStatus}\n`);
90
+ return fin.closeStatus === 200 ? 0 : fin.closeStatus === 499 ? 3 : 4;
91
+ };
41
92
  export const runCli = async (rpc, prompt, session, opts) => {
42
93
  // stdout is the program's product (the terminal answer); stderr is its narration.
43
94
  // Per SPEC.md §2: `plurnk "X" > answer.txt` captures just the terminal broadcast body.
@@ -58,23 +109,18 @@ export const runCli = async (rpc, prompt, session, opts) => {
58
109
  const p = params;
59
110
  report(p.event);
60
111
  });
61
- // stream/event + stream/concluded — daemon-pushed channel-growth and
62
- // closure metadata per plurnk-service SPEC §13.6. Rendered as a one-
63
- // line trace on stderr; content fetching is not done here (CLI is a
64
- // trace viewer; plurnk.nvim does in-buffer content rendering).
65
- rpc.onNotification("stream/event", (params) => {
66
- reportStream(renderStreamEvent(params));
67
- });
68
- rpc.onNotification("stream/concluded", (params) => {
69
- reportStream(renderStreamConcluded(params));
70
- });
112
+ // No review channel (non-TTY, no --yolo): the loop runs with
113
+ // flags.noProposals (set below), so the SERVER auto-rejects
114
+ // side-effecting ops in-process fail-closed without a per-proposal
115
+ // client roundtrip, no 5-minute hang. The proposal still broadcasts;
116
+ // isServerResolved suppresses the handler. plurnk #24 (#169 client half).
117
+ const noReviewChannel = !opts.yolo && process.stdin.isTTY !== true;
71
118
  // Proposal lifecycle (plurnk-service #42): pause-and-review for side-effecting
72
- // ops. Four paths:
119
+ // ops. Three paths:
73
120
  // - server-resolved (flags.yolo / flags.noProposals): the daemon settles the
74
121
  // entry in-process; a client loop.resolve would race it. Skip entirely.
75
122
  // - --yolo: auto-accept locally without prompting (server still sends the notification).
76
123
  // - TTY: interactive review.
77
- // - no TTY, no yolo: fail closed (reject) so the daemon doesn't hang for 5 minutes.
78
124
  rpc.onNotification("loop/proposal", (params) => {
79
125
  const p = params;
80
126
  void (async () => {
@@ -84,25 +130,62 @@ export const runCli = async (rpc, prompt, session, opts) => {
84
130
  await rpc.call("loop.resolve", { logEntryId: p.logEntryId, decision: "accept", outcome: "client_yolo" });
85
131
  return;
86
132
  }
87
- if (process.stdin.isTTY !== true) {
88
- report(clientProposalNoTtyReview(p.logEntryId));
89
- await rpc.call("loop.resolve", {
90
- logEntryId: p.logEntryId,
91
- decision: "reject",
92
- outcome: "no_tty_review",
93
- });
94
- return;
95
- }
96
133
  const resolution = await reviewProposal(p);
97
134
  await rpc.call("loop.resolve", { logEntryId: p.logEntryId, ...resolution });
98
135
  })();
99
136
  });
137
+ // Prompt prefixes — the same habits as nvim and the TUI: `! cmd` execs,
138
+ // `? text` asks (read-only loop), `: text` acts. Prefix wins over a
139
+ // --flags mode.
140
+ if (prompt.startsWith("!")) {
141
+ const command = prompt.replace(/^!+\s*/, "");
142
+ if (command.length === 0) {
143
+ process.stderr.write("usage: plurnk \"! <command>\"\n");
144
+ return 64;
145
+ }
146
+ return await runCliExec(rpc, command);
147
+ }
148
+ // Streams, coalesced (loop mode only — exec one-shot prints its own
149
+ // output above): one start line, one conclusion line, tiny concluded
150
+ // outputs inlined via the single bounded content fetch (SPEC §5.3).
151
+ const streams = new StreamTrace();
152
+ rpc.onNotification("stream/event", (params) => {
153
+ const line = streams.event(params);
154
+ if (line !== null)
155
+ reportStream(line);
156
+ });
157
+ rpc.onNotification("stream/concluded", (params) => {
158
+ const p = params;
159
+ reportStream(streams.concluded(p));
160
+ void rpc.call("entry.read", { target: p.target }).then((r) => {
161
+ const channels = r.entry?.channels ?? {};
162
+ for (const name of ["stdout", "stderr"]) {
163
+ const content = channels[name]?.content;
164
+ if (typeof content === "string" && inlineable(content)) {
165
+ reportStream(renderInline(name, content));
166
+ }
167
+ }
168
+ }).catch(() => { });
169
+ });
170
+ let effectiveFlags = opts.loopFlags;
171
+ const p0 = prompt[0];
172
+ if (p0 === "?" || p0 === ":") {
173
+ effectiveFlags = { ...(opts.loopFlags ?? {}), mode: p0 === "?" ? "ask" : "act" };
174
+ prompt = prompt.replace(/^[?:]+\s*/, "");
175
+ }
176
+ // No review channel → run with noProposals and own the explanation.
177
+ if (noReviewChannel) {
178
+ effectiveFlags = { ...(effectiveFlags ?? {}), noProposals: true };
179
+ report(clientProposalEditsBlocked());
180
+ }
100
181
  const start = Date.now();
101
182
  const loopParams = { prompt };
102
183
  if (opts.modelAlias !== undefined)
103
184
  loopParams.alias = opts.modelAlias;
104
- if (opts.persona !== undefined)
105
- loopParams.persona = opts.persona;
185
+ if (effectiveFlags !== undefined && Object.keys(effectiveFlags).length > 0)
186
+ loopParams.flags = effectiveFlags;
187
+ if (opts.maxTurns !== undefined)
188
+ loopParams.maxTurns = opts.maxTurns;
106
189
  // First Ctrl-C cancels the run's active drain via loop.cancel
107
190
  // (plurnk-service §13.5) — the pending loop.run resolves with
108
191
  // finalStatus 499 and the normal exit-code path (3) applies. A second
@@ -116,20 +199,42 @@ export const runCli = async (rpc, prompt, session, opts) => {
116
199
  void rpc.call("loop.cancel", { reason: "user_sigint" });
117
200
  };
118
201
  process.on("SIGINT", onSigint);
202
+ // --timeout: wall-clock cap. A wedged loop must not wedge the harness;
203
+ // cancel via the wire and let the normal 499 path resolve.
204
+ let timedOut = false;
205
+ let timer;
206
+ if (opts.timeoutSec !== undefined && opts.timeoutSec > 0) {
207
+ timer = setTimeout(() => {
208
+ timedOut = true;
209
+ process.stderr.write(`timeout: ${opts.timeoutSec}s — cancelling\n`);
210
+ void rpc.call("loop.cancel", { reason: "client_timeout" });
211
+ }, opts.timeoutSec * 1000);
212
+ }
119
213
  let result;
120
214
  try {
121
215
  result = await rpc.call("loop.run", loopParams);
122
216
  }
123
217
  finally {
124
218
  process.removeListener("SIGINT", onSigint);
219
+ if (timer !== undefined)
220
+ clearTimeout(timer);
125
221
  }
126
222
  const wallMs = Date.now() - start;
127
223
  process.stderr.write(`\nfinal status: ${result.finalStatus}${result.hitMaxTurns ? " (maxTurns reached)" : ""}\n`);
128
- process.stderr.write(`turns: ${result.turnIds.length}, wall: ${(wallMs / 1000).toFixed(2)}s\n`);
129
- if (result.finalStatus === 200)
130
- return 0;
131
- if (result.hitMaxTurns)
132
- return 2;
133
- return 3;
224
+ // Real provider usage (plurnk-service #197) — a model loop always carries it.
225
+ let tokenPart = "";
226
+ if (result.usage !== undefined) {
227
+ tokenPart = `, tokens: ↑${result.usage.promptTokens} ↓${result.usage.completionTokens}`;
228
+ if (result.usage.costPico > 0)
229
+ tokenPart += `, cost: $${(result.usage.costPico / 1e12).toFixed(4)}`;
230
+ }
231
+ process.stderr.write(`turns: ${result.turnIds.length}, wall: ${(wallMs / 1000).toFixed(2)}s${tokenPart}\n`);
232
+ process.stderr.write(`${formatResultLine({
233
+ loopId: result.loopId, finalStatus: result.finalStatus,
234
+ turns: result.turnIds.length, wallMs,
235
+ hitMaxTurns: result.hitMaxTurns, timedOut, reason: result.reason,
236
+ usage: result.usage,
237
+ })}\n`);
238
+ return exitCodeForLoop(result.finalStatus, result.hitMaxTurns);
134
239
  };
135
240
  //# sourceMappingURL=cli.js.map
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,5 @@
1
+ export declare const pathPartial: (line: string) => string | null;
2
+ export declare const dslOpPartial: (line: string) => string | null;
3
+ export declare const completeOps: (typed: string) => [string[], string];
4
+ export declare const completePath: (partial: string, cwd: string) => Promise<[string[], string]>;
5
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"AAYA,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAanD,CAAC;AAOF,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,KAAG,MAAM,GAAG,IAGpD,CAAC;AAGF,eAAO,MAAM,WAAW,GAAI,OAAO,MAAM,KAAG,CAAC,MAAM,EAAE,EAAE,MAAM,CAG5D,CAAC;AAMF,eAAO,MAAM,YAAY,GAAU,SAAS,MAAM,EAAE,KAAK,MAAM,KAAG,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,MAAM,CAAC,CAgB3F,CAAC"}
@@ -0,0 +1,63 @@
1
+ // Client-local file-path completion for the readline TUI.
2
+ //
3
+ // Co-location law: the client and daemon share one filesystem, so "what files
4
+ // exist" is the CLIENT's question — completion reads the local fs directly, no
5
+ // daemon round-trip. Feeds readline's native completer; no cursor math, no deps.
6
+ import { readdir } from "node:fs/promises";
7
+ import { isAbsolute, resolve } from "node:path";
8
+ // Detect a path-seeking partial in the line up to the cursor; null if the
9
+ // cursor isn't in a path position. One case per call site — membership-verb
10
+ // globs today; `@file` / `/import` / `/md` paths slot in here as they land.
11
+ export const pathPartial = (line) => {
12
+ const verb = line.match(/^\/(?:pick|hide|view|drop|import)\s+(\S*)$/);
13
+ if (verb)
14
+ return verb[1];
15
+ // @file: a path reference anywhere in a prompt (word-boundary @ to dodge
16
+ // emails). The leading @ stays; only the path part completes.
17
+ const at = line.match(/(?:^|\s)@(\S*)$/);
18
+ if (at)
19
+ return at[1];
20
+ // DSL target path inside an unclosed `<<OP(...`: strip a leading scheme://
21
+ // and complete the path part. Bare/file:// resolve against the fs; other
22
+ // schemes (known://, log://, …) simply find nothing — harmless.
23
+ const target = line.match(/^<<\w+(?:\[[^\]]*\])?\(([^)]*)$/);
24
+ if (target)
25
+ return target[1].replace(/^[a-z][a-z0-9+.-]*:\/\//, "");
26
+ return null;
27
+ };
28
+ // The plurnk DSL operations (plurnk-grammar plurnk.md §Operations).
29
+ const OPS = ["PLAN", "FIND", "READ", "EDIT", "COPY", "MOVE", "OPEN", "FOLD", "KILL", "EXEC", "SEND"];
30
+ // DSL op-name completion: a raw `<<` line with the op being typed; null
31
+ // otherwise. (Target-path completion inside `<<OP(...)` is future work.)
32
+ export const dslOpPartial = (line) => {
33
+ const m = line.match(/^<<(\w*)$/);
34
+ return m ? m[1] : null;
35
+ };
36
+ // Complete a partially-typed op into `<<OP` tokens (case-insensitive input).
37
+ export const completeOps = (typed) => {
38
+ const up = typed.toUpperCase();
39
+ return [OPS.filter((o) => o.startsWith(up)).map((o) => `<<${o}`), `<<${typed}`];
40
+ };
41
+ // Complete a filesystem path partial against the local fs. Returns
42
+ // [completions, partial] for readline: full-path tokens (directories suffixed
43
+ // with `/`), and the partial they replace. Unreadable directory → no hits.
44
+ // Dotfiles are hidden unless the prefix itself starts with `.` (shell habit).
45
+ export const completePath = async (partial, cwd) => {
46
+ const slash = partial.lastIndexOf("/");
47
+ const dirPart = slash >= 0 ? partial.slice(0, slash + 1) : "";
48
+ const prefix = slash >= 0 ? partial.slice(slash + 1) : partial;
49
+ const dirAbs = isAbsolute(dirPart || ".") ? (dirPart || "/") : resolve(cwd, dirPart || ".");
50
+ let entries;
51
+ try {
52
+ entries = await readdir(dirAbs, { withFileTypes: true });
53
+ }
54
+ catch {
55
+ return [[], partial];
56
+ }
57
+ const hits = entries
58
+ .filter((e) => e.name.startsWith(prefix) && (prefix.startsWith(".") || !e.name.startsWith(".")))
59
+ .map((e) => `${dirPart}${e.name}${e.isDirectory() ? "/" : ""}`)
60
+ .sort();
61
+ return [hits, partial];
62
+ };
63
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../src/completion.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,40 @@
1
- export declare const resolvePersona: (raw: string | undefined) => Promise<string | undefined>;
1
+ export declare const resolveLoopFlags: (rawJson: string | undefined) => Record<string, unknown> | undefined;
2
2
  export declare const resolveProjectRoot: (raw: string | undefined) => string | null;
3
+ export interface Constraint {
4
+ effect: "pick" | "hide" | "view";
5
+ glob: string;
6
+ }
7
+ export declare const buildConstraints: (values: {
8
+ pick?: string[];
9
+ hide?: string[];
10
+ view?: string[];
11
+ }) => Constraint[];
12
+ export interface Settings {
13
+ manifestItems?: number;
14
+ mdDocs?: Array<{
15
+ alias: string;
16
+ content: string;
17
+ }>;
18
+ maxCommands?: number;
19
+ git?: boolean;
20
+ }
21
+ export declare const buildSettings: (values: {
22
+ "manifest-items"?: string;
23
+ md?: string[];
24
+ "max-commands"?: string;
25
+ "no-git"?: boolean;
26
+ }, cwd: string) => Promise<Settings>;
27
+ export declare const CLIENT_VERSION: string;
28
+ interface DiscoverVersions {
29
+ service?: {
30
+ installed?: string;
31
+ latest?: string;
32
+ };
33
+ client?: {
34
+ latest?: string;
35
+ };
36
+ }
37
+ export declare const buildVersionNotice: (versions: DiscoverVersions | undefined, clientInstalled: string) => string | undefined;
3
38
  export declare const main: (argv: string[]) => Promise<void>;
39
+ export {};
4
40
  //# sourceMappingURL=dispatcher.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AAsCA,eAAO,MAAM,cAAc,GAAU,KAAK,MAAM,GAAG,SAAS,KAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAIxF,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAKrE,CAAC;AAiLF,eAAO,MAAM,IAAI,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CAoHvD,CAAC"}
1
+ {"version":3,"file":"dispatcher.d.ts","sourceRoot":"","sources":["../src/dispatcher.ts"],"names":[],"mappings":"AA0CA,eAAO,MAAM,gBAAgB,GAAI,SAAS,MAAM,GAAG,SAAS,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAUxF,CAAC;AAIF,eAAO,MAAM,kBAAkB,GAAI,KAAK,MAAM,GAAG,SAAS,KAAG,MAAM,GAAG,IAKrE,CAAC;AA6FF,MAAM,WAAW,UAAU;IAAG,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAG9E,eAAO,MAAM,gBAAgB,GAAI,QAAQ;IACrC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACrD,KAAG,UAAU,EAIb,CAAC;AAOF,MAAM,WAAW,QAAQ;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACnD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,eAAO,MAAM,aAAa,GACtB,QAAQ;IAAE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,EACjG,KAAK,MAAM,KACZ,OAAO,CAAC,QAAQ,CAqClB,CAAC;AAMF,eAAO,MAAM,cAAc,QAAqF,CAAC;AAEjH,UAAU,gBAAgB;IAAG,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAAC,MAAM,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CAAE;AAa9G,eAAO,MAAM,kBAAkB,GAAI,UAAU,gBAAgB,GAAG,SAAS,EAAE,iBAAiB,MAAM,KAAG,MAAM,GAAG,SAQ7G,CAAC;AAsHF,eAAO,MAAM,IAAI,GAAU,MAAM,MAAM,EAAE,KAAG,OAAO,CAAC,IAAI,CA+JvD,CAAC"}