@sechroom/cli 2026.6.236-rc.dd8d67e0 → 2026.6.238-rc.10da7380
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/dist/index.js +99 -0
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -5218,6 +5218,104 @@ Examples:
|
|
|
5218
5218
|
});
|
|
5219
5219
|
}
|
|
5220
5220
|
|
|
5221
|
+
// src/commands/telemetry.ts
|
|
5222
|
+
function registerTelemetry(program2) {
|
|
5223
|
+
const telemetry = program2.command("telemetry").description(
|
|
5224
|
+
"Emit WLP run telemetry (an executor leg's progress events) into a decomposition run"
|
|
5225
|
+
);
|
|
5226
|
+
telemetry.command("emit").description(
|
|
5227
|
+
"POST one progress event to /decompositions/{id}/run/telemetry (the 5a ingest)"
|
|
5228
|
+
).requiredOption(
|
|
5229
|
+
"--decomposition <id>",
|
|
5230
|
+
"Decomposition id whose run this event belongs to"
|
|
5231
|
+
).requiredOption("--task <id>", "Task id this event belongs to").requiredOption(
|
|
5232
|
+
"--kind <kind>",
|
|
5233
|
+
"Event kind: raw | parsed | approval | terminal"
|
|
5234
|
+
).option(
|
|
5235
|
+
"--tokens-in <n>",
|
|
5236
|
+
"Cumulative input tokens (spend meter)",
|
|
5237
|
+
parseIntOpt
|
|
5238
|
+
).option(
|
|
5239
|
+
"--tokens-out <n>",
|
|
5240
|
+
"Cumulative output tokens (spend meter)",
|
|
5241
|
+
parseIntOpt
|
|
5242
|
+
).option(
|
|
5243
|
+
"--context-used <n>",
|
|
5244
|
+
"Context tokens currently used (occupancy meter)",
|
|
5245
|
+
parseIntOpt
|
|
5246
|
+
).option(
|
|
5247
|
+
"--context-window <n>",
|
|
5248
|
+
"Context window size (occupancy meter)",
|
|
5249
|
+
parseIntOpt
|
|
5250
|
+
).option("--text <s>", "Raw/parsed payload text").option("--approval <state>", "Approval gate state (approval events)").option(
|
|
5251
|
+
"--verdict <v>",
|
|
5252
|
+
"Typed verdict (terminal events): pass | soft-fail | plan-invalid | blocked"
|
|
5253
|
+
).action(async (opts, cmd) => {
|
|
5254
|
+
const json = Boolean(cmd.optsWithGlobals().json);
|
|
5255
|
+
const cfg = resolveConfig(cmd.optsWithGlobals());
|
|
5256
|
+
const kind = normalizeKind(opts.kind);
|
|
5257
|
+
const event = {
|
|
5258
|
+
taskId: opts.task,
|
|
5259
|
+
kind,
|
|
5260
|
+
tokensIn: opts.tokensIn ?? null,
|
|
5261
|
+
tokensOut: opts.tokensOut ?? null,
|
|
5262
|
+
contextUsed: opts.contextUsed ?? null,
|
|
5263
|
+
contextWindow: opts.contextWindow ?? null,
|
|
5264
|
+
text: opts.text ?? null,
|
|
5265
|
+
approvalState: opts.approval ?? null,
|
|
5266
|
+
verdict: opts.verdict ?? null
|
|
5267
|
+
};
|
|
5268
|
+
const token = await requireToken(cfg);
|
|
5269
|
+
const resp = await fetch(
|
|
5270
|
+
`${cfg.baseUrl}/decompositions/${encodeURIComponent(opts.decomposition)}/run/telemetry`,
|
|
5271
|
+
{
|
|
5272
|
+
method: "POST",
|
|
5273
|
+
headers: {
|
|
5274
|
+
authorization: `Bearer ${token}`,
|
|
5275
|
+
tenant: cfg.tenant,
|
|
5276
|
+
"content-type": "application/json",
|
|
5277
|
+
"x-sechroom-surface": "cli"
|
|
5278
|
+
},
|
|
5279
|
+
body: JSON.stringify({ events: [event] })
|
|
5280
|
+
}
|
|
5281
|
+
);
|
|
5282
|
+
if (!resp.ok)
|
|
5283
|
+
fail(
|
|
5284
|
+
`Telemetry emit failed (HTTP ${resp.status}): ${await resp.text()}`
|
|
5285
|
+
);
|
|
5286
|
+
const body = await resp.json();
|
|
5287
|
+
if (json) {
|
|
5288
|
+
emit(body, true);
|
|
5289
|
+
} else {
|
|
5290
|
+
process.stderr.write(
|
|
5291
|
+
style.green("telemetry emitted") + style.dim(
|
|
5292
|
+
` \u2014 ${kind} for task ${opts.task}; run now carries ${body.eventCount} event${body.eventCount === 1 ? "" : "s"}
|
|
5293
|
+
`
|
|
5294
|
+
)
|
|
5295
|
+
);
|
|
5296
|
+
}
|
|
5297
|
+
});
|
|
5298
|
+
}
|
|
5299
|
+
var KINDS = {
|
|
5300
|
+
raw: "Raw",
|
|
5301
|
+
parsed: "Parsed",
|
|
5302
|
+
approval: "Approval",
|
|
5303
|
+
terminal: "Terminal"
|
|
5304
|
+
};
|
|
5305
|
+
function normalizeKind(k) {
|
|
5306
|
+
const v = KINDS[k.toLowerCase()];
|
|
5307
|
+
if (!v)
|
|
5308
|
+
fail(
|
|
5309
|
+
`Unknown --kind '${k}'. Expected one of: raw, parsed, approval, terminal.`
|
|
5310
|
+
);
|
|
5311
|
+
return v;
|
|
5312
|
+
}
|
|
5313
|
+
function parseIntOpt(v) {
|
|
5314
|
+
const n = Number.parseInt(v, 10);
|
|
5315
|
+
if (Number.isNaN(n)) fail(`Expected an integer, got '${v}'.`);
|
|
5316
|
+
return n;
|
|
5317
|
+
}
|
|
5318
|
+
|
|
5221
5319
|
// src/commands/worklog.ts
|
|
5222
5320
|
function registerWorklog(program2) {
|
|
5223
5321
|
const worklog = program2.command("worklog").description("Append to the daily work log");
|
|
@@ -5592,6 +5690,7 @@ registerSkills(program);
|
|
|
5592
5690
|
registerAgents(program);
|
|
5593
5691
|
registerLane(program);
|
|
5594
5692
|
registerChannel(program);
|
|
5693
|
+
registerTelemetry(program);
|
|
5595
5694
|
registerReset(program);
|
|
5596
5695
|
program.parseAsync().catch((err2) => {
|
|
5597
5696
|
process.stderr.write(
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sechroom/cli",
|
|
3
|
-
"version": "2026.6.
|
|
3
|
+
"version": "2026.6.238-rc.10da7380",
|
|
4
4
|
"description": "Sechroom CLI — a thin, generated client over the Sechroom HTTP API. An agent/human surface alongside MCP.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "UNLICENSED",
|
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
"registry": "https://registry.npmjs.org/"
|
|
25
25
|
},
|
|
26
26
|
"dependencies": {
|
|
27
|
-
"@microsoft/signalr": "^
|
|
27
|
+
"@microsoft/signalr": "^10.0.0",
|
|
28
28
|
"commander": "^12.1.0",
|
|
29
29
|
"open": "^10.1.0",
|
|
30
30
|
"openapi-fetch": "^0.13.0",
|