@plurnk/plurnk 0.71.4 → 0.71.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/README.md +2 -2
- package/dist/agui.d.ts +13 -0
- package/dist/agui.d.ts.map +1 -1
- package/dist/agui.js +54 -9
- package/dist/agui.js.map +1 -1
- package/dist/agui_cli.d.ts +9 -11
- package/dist/agui_cli.d.ts.map +1 -1
- package/dist/agui_cli.js +63 -32
- package/dist/agui_cli.js.map +1 -1
- package/dist/build-info.json +1 -1
- package/dist/cli.d.ts +6 -5
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +9 -7
- package/dist/cli.js.map +1 -1
- package/dist/completion.js +1 -1
- package/dist/completion.js.map +1 -1
- package/dist/diagnostics.d.ts +65 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +228 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/dispatcher.d.ts +2 -3
- package/dist/dispatcher.d.ts.map +1 -1
- package/dist/dispatcher.js +80 -74
- package/dist/dispatcher.js.map +1 -1
- package/dist/render.d.ts +1 -3
- package/dist/render.d.ts.map +1 -1
- package/dist/render.js +3 -10
- package/dist/render.js.map +1 -1
- package/dist/subcommands.d.ts.map +1 -1
- package/dist/subcommands.js +14 -22
- package/dist/subcommands.js.map +1 -1
- package/dist/transport.d.ts +18 -6
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +72 -30
- package/dist/transport.js.map +1 -1
- package/dist/tui.d.ts +2 -1
- package/dist/tui.d.ts.map +1 -1
- package/dist/tui.js +76 -39
- package/dist/tui.js.map +1 -1
- package/package.json +6 -4
- package/dist/telemetry.d.ts +0 -48
- package/dist/telemetry.d.ts.map +0 -1
- package/dist/telemetry.js +0 -246
- package/dist/telemetry.js.map +0 -1
package/dist/telemetry.js
DELETED
|
@@ -1,246 +0,0 @@
|
|
|
1
|
-
// Unified error/telemetry shape across the plurnk stack.
|
|
2
|
-
//
|
|
3
|
-
// The grammar 0.17.0 TelemetryEvent schema (`source / kind / message? /
|
|
4
|
-
// position? / additional kind-specific fields`) is the vocabulary every
|
|
5
|
-
// producer in the ecosystem emits into — `grammar`, `engine:rail`,
|
|
6
|
-
// `scheme:*`, `provider:*` from the daemon side; `client:*` from us.
|
|
7
|
-
// This module owns the shape, the renderer, and the client-side emission
|
|
8
|
-
// helpers; everything user-facing routes through `report(event)`.
|
|
9
|
-
//
|
|
10
|
-
// Per SPEC.md §8.
|
|
11
|
-
import process from "node:process";
|
|
12
|
-
// Thrown across boundaries to carry a structured event through normal
|
|
13
|
-
// async error propagation. The global catch in main() unwraps these and
|
|
14
|
-
// renders the carried event verbatim; non-TelemetryError throws collapse
|
|
15
|
-
// to a generic `client:runtime:error` event.
|
|
16
|
-
//
|
|
17
|
-
// `exitCode` is the process exit code the global catch should propagate.
|
|
18
|
-
// Defaults to 64 (usage error) since most TelemetryError throws are flag/
|
|
19
|
-
// argument / subcommand validation. Runtime failures pass 1 explicitly.
|
|
20
|
-
export class TelemetryError extends Error {
|
|
21
|
-
event;
|
|
22
|
-
exitCode;
|
|
23
|
-
constructor(event, exitCode = 64) {
|
|
24
|
-
super(event.message ?? `${event.source}:${event.kind}`);
|
|
25
|
-
this.event = event;
|
|
26
|
-
this.exitCode = exitCode;
|
|
27
|
-
this.name = "TelemetryError";
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
// ─── Rendering ────────────────────────────────────────────────────────
|
|
31
|
-
const useColor = process.env.NO_COLOR !== "1" && process.env.NO_COLOR !== "true";
|
|
32
|
-
const code = (n) => useColor ? `\x1b[${n}m` : "";
|
|
33
|
-
const RESET = code("0");
|
|
34
|
-
const DIM = code("2");
|
|
35
|
-
const RED = code("31");
|
|
36
|
-
const YELLOW = code("33");
|
|
37
|
-
const TELEMETRY_GLYPH = "📡";
|
|
38
|
-
// Format a Position inline as a compact suffix on the headline. ContentOffset
|
|
39
|
-
// becomes `L<line> col<column>`; LogCoordinate becomes `<coordinate>` (with op
|
|
40
|
-
// in parens when present).
|
|
41
|
-
const formatPosition = (pos) => {
|
|
42
|
-
if (pos === null || pos === undefined)
|
|
43
|
-
return "";
|
|
44
|
-
if (pos.type === "content-offset")
|
|
45
|
-
return `L${pos.line} col${pos.column}`;
|
|
46
|
-
if (pos.type === "log-coordinate")
|
|
47
|
-
return pos.op !== undefined ? `${pos.coordinate} (${pos.op})` : pos.coordinate;
|
|
48
|
-
return "";
|
|
49
|
-
};
|
|
50
|
-
// Severity straight off the producer-set `level` (grammar 0.74.29+, svc#276 /
|
|
51
|
-
// client#110): error → RED headline, warn → YELLOW, everything else neutral
|
|
52
|
-
// (plain discriminator, dim message). No kind-string heuristic — severity is
|
|
53
|
-
// meaning the producer owns, not something we re-derive by pattern-matching.
|
|
54
|
-
const severityColor = (event) => event.level === "error" ? RED : event.level === "warn" ? YELLOW : "";
|
|
55
|
-
// Format the headline: `<glyph> <source>:<kind> <position?> <message?>`. The
|
|
56
|
-
// caller is responsible for trailing newlines. Error/warning headlines render
|
|
57
|
-
// in their severity color (so an error reads as an error); neutral ones keep
|
|
58
|
-
// the plain discriminator + dim message.
|
|
59
|
-
const renderHeadline = (event) => {
|
|
60
|
-
const discriminator = `${event.source}:${event.kind}`;
|
|
61
|
-
const position = formatPosition(event.position);
|
|
62
|
-
const message = typeof event.message === "string" && event.message.length > 0
|
|
63
|
-
? `"${event.message}"`
|
|
64
|
-
: "";
|
|
65
|
-
const parts = [TELEMETRY_GLYPH, discriminator];
|
|
66
|
-
if (position.length > 0)
|
|
67
|
-
parts.push(position);
|
|
68
|
-
const color = severityColor(event);
|
|
69
|
-
if (color.length > 0) {
|
|
70
|
-
if (message.length > 0)
|
|
71
|
-
parts.push(message);
|
|
72
|
-
return ` ${color}${parts.join(" ")}${RESET}`;
|
|
73
|
-
}
|
|
74
|
-
if (message.length > 0)
|
|
75
|
-
parts.push(`${DIM}${message}${RESET}`);
|
|
76
|
-
return ` ${parts.join(" ")}`;
|
|
77
|
-
};
|
|
78
|
-
// Some kinds carry a rendered snippet (grammar:parse_error has `snippet`
|
|
79
|
-
// with `N:\t`-prefixed offending content). Render it as an indented block.
|
|
80
|
-
const renderSnippet = (event) => {
|
|
81
|
-
const snippet = typeof event.snippet === "string" ? event.snippet : "";
|
|
82
|
-
if (snippet.length === 0)
|
|
83
|
-
return "";
|
|
84
|
-
return snippet.split("\n").map((line) => ` ${line}`).join("\n");
|
|
85
|
-
};
|
|
86
|
-
// Render hints as indented continuation lines after the headline.
|
|
87
|
-
const renderHints = (event) => {
|
|
88
|
-
if (!Array.isArray(event.hints) || event.hints.length === 0)
|
|
89
|
-
return "";
|
|
90
|
-
return event.hints.map((hint) => ` ${DIM}${hint}${RESET}`).join("\n");
|
|
91
|
-
};
|
|
92
|
-
// Full rendering: headline + optional snippet block + optional hints block.
|
|
93
|
-
// Used by `report` and by any other surface (TUI waterfall) that wants the
|
|
94
|
-
// same vocabulary.
|
|
95
|
-
export const renderTelemetryEvent = (event) => {
|
|
96
|
-
const parts = [renderHeadline(event)];
|
|
97
|
-
const snippet = renderSnippet(event);
|
|
98
|
-
if (snippet.length > 0)
|
|
99
|
-
parts.push(snippet);
|
|
100
|
-
const hints = renderHints(event);
|
|
101
|
-
if (hints.length > 0)
|
|
102
|
-
parts.push(hints);
|
|
103
|
-
return parts.join("\n");
|
|
104
|
-
};
|
|
105
|
-
// Write a rendered event to stderr. Single point of egress so the channel
|
|
106
|
-
// posture (stderr in CLI mode; same in TUI to keep the waterfall on stdout
|
|
107
|
-
// stream) stays consistent across emission sites.
|
|
108
|
-
export const report = (event) => {
|
|
109
|
-
process.stderr.write(`${renderTelemetryEvent(event)}\n`);
|
|
110
|
-
};
|
|
111
|
-
// ─── Client-side emitters ────────────────────────────────────────────
|
|
112
|
-
// `client:connection:daemon_stale` — discover is missing wire markers this
|
|
113
|
-
// client depends on; the daemon predates the client (clients track HEAD per
|
|
114
|
-
// the daemon compatibility manifest).
|
|
115
|
-
export const clientDaemonStale = (missing) => ({
|
|
116
|
-
source: "client:connection",
|
|
117
|
-
kind: "daemon_stale",
|
|
118
|
-
level: "warn",
|
|
119
|
-
message: `daemon is older than this client (missing: ${missing.join(", ")})`,
|
|
120
|
-
missing,
|
|
121
|
-
hints: ["Restart plurnk-service from a current checkout."],
|
|
122
|
-
});
|
|
123
|
-
// `client:connection:refused` — WebSocket connection couldn't be established.
|
|
124
|
-
export const clientConnectionRefused = (url, cause) => ({
|
|
125
|
-
source: "client:connection",
|
|
126
|
-
kind: "refused",
|
|
127
|
-
level: "error",
|
|
128
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
129
|
-
url,
|
|
130
|
-
hints: [
|
|
131
|
-
"No daemon is running — the plurnk client connects to one.",
|
|
132
|
-
" Set your key: export PLURNK_API_KEY=\"your-key\"",
|
|
133
|
-
" Quick start (no install): npx @plurnk/plurnk-service start",
|
|
134
|
-
" Or install it: npm i -g @plurnk/plurnk-service && plurnk-service",
|
|
135
|
-
],
|
|
136
|
-
});
|
|
137
|
-
// The connection-level failure classes: nothing is LISTENING (vs a bridge that
|
|
138
|
-
// answered with an error, which must surface its real cause). undici wraps them
|
|
139
|
-
// all in a TypeError("fetch failed") with the syscall error as `cause`.
|
|
140
|
-
const UNREACHABLE = /ECONNREFUSED|ENOTFOUND|EHOSTUNREACH|ENETUNREACH|ECONNRESET|EAI_AGAIN/;
|
|
141
|
-
export const isUnreachable = (cause) => {
|
|
142
|
-
if (!(cause instanceof Error))
|
|
143
|
-
return false;
|
|
144
|
-
if (UNREACHABLE.test(String(cause.cause?.code ?? "")))
|
|
145
|
-
return true;
|
|
146
|
-
return /fetch failed/i.test(cause.message);
|
|
147
|
-
};
|
|
148
|
-
// `client:runtime:error` — generic catch-all for thrown errors we don't have
|
|
149
|
-
// a more specific shape for. Used as a fallback in the global catch.
|
|
150
|
-
export const clientRuntimeError = (cause) => ({
|
|
151
|
-
source: "client:runtime",
|
|
152
|
-
kind: "error",
|
|
153
|
-
level: "error",
|
|
154
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
155
|
-
});
|
|
156
|
-
// `client:connection:closed` — connection dropped while a call was in flight.
|
|
157
|
-
export const clientConnectionClosed = (cause) => ({
|
|
158
|
-
source: "client:connection",
|
|
159
|
-
kind: "closed",
|
|
160
|
-
level: "error",
|
|
161
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
162
|
-
});
|
|
163
|
-
// `client:flag:invalid` — flag value didn't parse or violated a contract.
|
|
164
|
-
export const clientFlagInvalid = (flag, value, reason) => ({
|
|
165
|
-
source: "client:flag",
|
|
166
|
-
kind: "invalid",
|
|
167
|
-
level: "error",
|
|
168
|
-
message: reason,
|
|
169
|
-
flag,
|
|
170
|
-
value,
|
|
171
|
-
});
|
|
172
|
-
// `client:flag:missing_dependency` — flag X requires flag Y also be set.
|
|
173
|
-
export const clientFlagMissingDependency = (flag, requires) => ({
|
|
174
|
-
source: "client:flag",
|
|
175
|
-
kind: "missing_dependency",
|
|
176
|
-
level: "error",
|
|
177
|
-
message: `${flag} requires ${requires}`,
|
|
178
|
-
flag,
|
|
179
|
-
requires,
|
|
180
|
-
});
|
|
181
|
-
// `client:subcommand:workspace_not_found` — name resolution failed.
|
|
182
|
-
export const clientSubcommandWorkspaceNotFound = (name) => ({
|
|
183
|
-
source: "client:subcommand",
|
|
184
|
-
kind: "workspace_not_found",
|
|
185
|
-
level: "error",
|
|
186
|
-
message: `no workspace named ${JSON.stringify(name)}`,
|
|
187
|
-
name,
|
|
188
|
-
});
|
|
189
|
-
// `client:subcommand:workspace_ambiguous` — multiple workspaces match.
|
|
190
|
-
export const clientSubcommandWorkspaceAmbiguous = (name, count) => ({
|
|
191
|
-
source: "client:subcommand",
|
|
192
|
-
kind: "workspace_ambiguous",
|
|
193
|
-
level: "error",
|
|
194
|
-
message: `${count} workspaces named ${JSON.stringify(name)}; pick a unique name`,
|
|
195
|
-
name,
|
|
196
|
-
count,
|
|
197
|
-
});
|
|
198
|
-
// `client:subcommand:unknown_verb` — unrecognized subcommand verb.
|
|
199
|
-
export const clientSubcommandUnknownVerb = (path, available) => ({
|
|
200
|
-
source: "client:subcommand",
|
|
201
|
-
kind: "unknown_verb",
|
|
202
|
-
level: "error",
|
|
203
|
-
message: available !== undefined && available.length > 0
|
|
204
|
-
? `unknown subcommand '${path}'. Available: ${available.join(", ")}`
|
|
205
|
-
: `unknown subcommand '${path}'`,
|
|
206
|
-
path,
|
|
207
|
-
available,
|
|
208
|
-
});
|
|
209
|
-
// `client:subcommand:missing_argument` — required positional or flag absent.
|
|
210
|
-
export const clientSubcommandMissingArgument = (path, argument) => ({
|
|
211
|
-
source: "client:subcommand",
|
|
212
|
-
kind: "missing_argument",
|
|
213
|
-
level: "error",
|
|
214
|
-
message: `${path}: missing ${argument}`,
|
|
215
|
-
path,
|
|
216
|
-
argument,
|
|
217
|
-
});
|
|
218
|
-
// `client:proposal:no_tty_review` — fail-closed in CLI without --yolo.
|
|
219
|
-
// `client:proposal:edits_blocked` — no review channel (non-TTY, no --yolo),
|
|
220
|
-
// so the loop runs with flags.noProposals: the server auto-rejects
|
|
221
|
-
// side-effecting ops (the model sees a plain 400, mode-blind). Only the
|
|
222
|
-
// client can say WHY, because the server is silent by design (plurnk #24 /
|
|
223
|
-
// #169 client half). Emitted once at loop start, not per proposal.
|
|
224
|
-
export const clientProposalEditsBlocked = () => ({
|
|
225
|
-
source: "client:proposal",
|
|
226
|
-
kind: "edits_blocked",
|
|
227
|
-
level: "warn",
|
|
228
|
-
message: "edits and exec blocked: no review channel to approve them (run on a TTY, or pass --yolo)",
|
|
229
|
-
});
|
|
230
|
-
// #120 — a 501 loop.run ack means no model is configured anywhere. The daemon
|
|
231
|
-
// says so at ITS boot stderr (easily lost under a supervisor); repeat the
|
|
232
|
-
// pointer where the user is actually looking. One clause, appended to the
|
|
233
|
-
// daemon's own error at both ack sites (TUI + CLI, so --json carries it too).
|
|
234
|
-
export const NO_MODEL_HINT = " — configure a model: edit ~/.plurnk/.env and uncomment one option";
|
|
235
|
-
// `client:rpc:error` — RPC call rejected with a daemon-supplied error.
|
|
236
|
-
export const clientRpcError = (method, cause) => ({
|
|
237
|
-
source: "client:rpc",
|
|
238
|
-
kind: "error",
|
|
239
|
-
level: "error",
|
|
240
|
-
message: cause instanceof Error ? cause.message : String(cause),
|
|
241
|
-
method,
|
|
242
|
-
});
|
|
243
|
-
// Color helpers exported for callers that want a colored marker without
|
|
244
|
-
// reimplementing the NO_COLOR check (e.g. the TUI's existing waterfall).
|
|
245
|
-
export const colors = { RESET, DIM, RED, YELLOW };
|
|
246
|
-
//# sourceMappingURL=telemetry.js.map
|
package/dist/telemetry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
|