wotann 0.5.90 → 0.5.92
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/cli/npx-self-update-hint.d.ts +60 -0
- package/dist/cli/npx-self-update-hint.js +145 -0
- package/dist/daemon/kairos-rpc.js +140 -3
- package/dist/daemon/rpc-protocol.d.ts +2 -2
- package/dist/daemon/rpc-protocol.js +2 -1
- package/dist/design/a2ui.js +290 -17
- package/dist/design/component-importer.d.ts +1 -1
- package/dist/design/component-importer.js +5 -5
- package/dist/index.js +18 -2
- package/dist/intelligence/eval-frameworks/redteam-plugin-catalog.js +8 -1
- package/dist/memory/context-builder.d.ts +19 -1
- package/dist/memory/context-builder.js +2 -1
- package/dist/plugins/manifest-loader.d.ts +56 -0
- package/dist/plugins/manifest-loader.js +225 -0
- package/dist/ui/mount-interactive-ink.d.ts +9 -0
- package/dist/ui/mount-interactive-ink.js +19 -2
- package/dist/ui/raw-mode-guard.d.ts +37 -0
- package/dist/ui/raw-mode-guard.js +93 -0
- package/install.sh +48 -3
- package/package.json +3 -2
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* npx-self-update-hint — one-line nudge at startup when a wotann
|
|
3
|
+
* binary is running from the `~/.npm/_npx/<hash>/` cache AND a newer
|
|
4
|
+
* version is published on the npm registry.
|
|
5
|
+
*
|
|
6
|
+
* Background: `npx wotann` caches packages by name-hash for ~7 days.
|
|
7
|
+
* When wotann ships a new version, users on the cached older copy
|
|
8
|
+
* silently miss the fix until either (a) the cache expires, (b) they
|
|
9
|
+
* `npx --yes -p wotann@latest wotann`, or (c) they install globally.
|
|
10
|
+
* This module surfaces the upgrade path BEFORE the TUI mounts so the
|
|
11
|
+
* stale-cache failure mode is self-explanatory.
|
|
12
|
+
*
|
|
13
|
+
* Design: pure functions where possible, dependency-injected network +
|
|
14
|
+
* stderr for tests, short timeout (~1.5 s) so a slow registry never
|
|
15
|
+
* blocks startup, swallow all errors (a hint is best-effort, never a
|
|
16
|
+
* gate). Skip in CI/non-interactive contexts.
|
|
17
|
+
*/
|
|
18
|
+
export interface NpxUpdateHintOptions {
|
|
19
|
+
readonly currentVersion: string;
|
|
20
|
+
/** `__dirname` of the wotann install — used to detect npx cache path. */
|
|
21
|
+
readonly currentDirname: string;
|
|
22
|
+
/** Override the registry fetch (tests). */
|
|
23
|
+
readonly fetchLatest?: (timeoutMs: number) => Promise<string | null>;
|
|
24
|
+
/** Override the output sink (tests). */
|
|
25
|
+
readonly stderr?: {
|
|
26
|
+
write(s: string): unknown;
|
|
27
|
+
};
|
|
28
|
+
/** Maximum time to wait for the registry call. */
|
|
29
|
+
readonly timeoutMs?: number;
|
|
30
|
+
/** Skip the hint entirely when CI=true (default: true). */
|
|
31
|
+
readonly skipInCI?: boolean;
|
|
32
|
+
/** Skip when env signals non-interactive (default: true). */
|
|
33
|
+
readonly skipNonInteractive?: boolean;
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* True iff the given directory path is inside an npm npx cache slot
|
|
37
|
+
* (`~/.npm/_npx/<hash>/` on POSIX, `npm-cache\_npx\<hash>` on Windows).
|
|
38
|
+
*/
|
|
39
|
+
export declare function isRunningFromNpxCache(dirname: string): boolean;
|
|
40
|
+
/**
|
|
41
|
+
* Returns `1` if `a > b`, `-1` if `a < b`, `0` if equal. Stable for
|
|
42
|
+
* unequal-length segments (treats missing trailers as 0).
|
|
43
|
+
*/
|
|
44
|
+
export declare function compareVersions(a: string, b: string): number;
|
|
45
|
+
/**
|
|
46
|
+
* GET https://registry.npmjs.org/wotann/latest with a hard timeout.
|
|
47
|
+
* Returns the published version string, or `null` on any failure
|
|
48
|
+
* (network error, non-JSON response, timeout, missing version field).
|
|
49
|
+
* Never throws.
|
|
50
|
+
*/
|
|
51
|
+
export declare function fetchLatestWotannVersion(timeoutMs: number): Promise<string | null>;
|
|
52
|
+
/**
|
|
53
|
+
* Run the full hint sequence: detect cache path → fetch latest →
|
|
54
|
+
* compare → optionally print. Never blocks longer than `timeoutMs`,
|
|
55
|
+
* never throws, never gates the rest of the startup.
|
|
56
|
+
*
|
|
57
|
+
* Returns the printed hint string (for tests) or `null` if no hint
|
|
58
|
+
* was printed.
|
|
59
|
+
*/
|
|
60
|
+
export declare function printNpxUpgradeHint(opts: NpxUpdateHintOptions): Promise<string | null>;
|
|
@@ -0,0 +1,145 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* npx-self-update-hint — one-line nudge at startup when a wotann
|
|
3
|
+
* binary is running from the `~/.npm/_npx/<hash>/` cache AND a newer
|
|
4
|
+
* version is published on the npm registry.
|
|
5
|
+
*
|
|
6
|
+
* Background: `npx wotann` caches packages by name-hash for ~7 days.
|
|
7
|
+
* When wotann ships a new version, users on the cached older copy
|
|
8
|
+
* silently miss the fix until either (a) the cache expires, (b) they
|
|
9
|
+
* `npx --yes -p wotann@latest wotann`, or (c) they install globally.
|
|
10
|
+
* This module surfaces the upgrade path BEFORE the TUI mounts so the
|
|
11
|
+
* stale-cache failure mode is self-explanatory.
|
|
12
|
+
*
|
|
13
|
+
* Design: pure functions where possible, dependency-injected network +
|
|
14
|
+
* stderr for tests, short timeout (~1.5 s) so a slow registry never
|
|
15
|
+
* blocks startup, swallow all errors (a hint is best-effort, never a
|
|
16
|
+
* gate). Skip in CI/non-interactive contexts.
|
|
17
|
+
*/
|
|
18
|
+
import { request as httpsRequest } from "node:https";
|
|
19
|
+
/**
|
|
20
|
+
* True iff the given directory path is inside an npm npx cache slot
|
|
21
|
+
* (`~/.npm/_npx/<hash>/` on POSIX, `npm-cache\_npx\<hash>` on Windows).
|
|
22
|
+
*/
|
|
23
|
+
export function isRunningFromNpxCache(dirname) {
|
|
24
|
+
const normalized = dirname.replace(/\\/g, "/");
|
|
25
|
+
return normalized.includes("/.npm/_npx/") || normalized.includes("/npm-cache/_npx/");
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Parse a dot-separated semver-ish version into numeric segments.
|
|
29
|
+
* Non-numeric trailers (e.g. "-rc.1") are dropped — npm registry
|
|
30
|
+
* "latest" tag points at stable releases so leading numeric segments
|
|
31
|
+
* are enough for the "is current older than latest?" decision.
|
|
32
|
+
*/
|
|
33
|
+
function parseNumericVersionPrefix(v) {
|
|
34
|
+
const trimmed = v.trim();
|
|
35
|
+
const head = trimmed.split(/[-+]/)[0] ?? trimmed;
|
|
36
|
+
return head.split(".").map((s) => {
|
|
37
|
+
const n = Number.parseInt(s, 10);
|
|
38
|
+
return Number.isFinite(n) ? n : 0;
|
|
39
|
+
});
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Returns `1` if `a > b`, `-1` if `a < b`, `0` if equal. Stable for
|
|
43
|
+
* unequal-length segments (treats missing trailers as 0).
|
|
44
|
+
*/
|
|
45
|
+
export function compareVersions(a, b) {
|
|
46
|
+
const A = parseNumericVersionPrefix(a);
|
|
47
|
+
const B = parseNumericVersionPrefix(b);
|
|
48
|
+
const len = Math.max(A.length, B.length);
|
|
49
|
+
for (let i = 0; i < len; i++) {
|
|
50
|
+
const x = A[i] ?? 0;
|
|
51
|
+
const y = B[i] ?? 0;
|
|
52
|
+
if (x > y)
|
|
53
|
+
return 1;
|
|
54
|
+
if (x < y)
|
|
55
|
+
return -1;
|
|
56
|
+
}
|
|
57
|
+
return 0;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* GET https://registry.npmjs.org/wotann/latest with a hard timeout.
|
|
61
|
+
* Returns the published version string, or `null` on any failure
|
|
62
|
+
* (network error, non-JSON response, timeout, missing version field).
|
|
63
|
+
* Never throws.
|
|
64
|
+
*/
|
|
65
|
+
export function fetchLatestWotannVersion(timeoutMs) {
|
|
66
|
+
return new Promise((resolve) => {
|
|
67
|
+
let settled = false;
|
|
68
|
+
const finish = (v) => {
|
|
69
|
+
if (settled)
|
|
70
|
+
return;
|
|
71
|
+
settled = true;
|
|
72
|
+
resolve(v);
|
|
73
|
+
};
|
|
74
|
+
const req = httpsRequest({
|
|
75
|
+
host: "registry.npmjs.org",
|
|
76
|
+
path: "/wotann/latest",
|
|
77
|
+
method: "GET",
|
|
78
|
+
headers: { "user-agent": "wotann-startup-check", accept: "application/json" },
|
|
79
|
+
}, (res) => {
|
|
80
|
+
if (res.statusCode !== 200) {
|
|
81
|
+
res.resume();
|
|
82
|
+
finish(null);
|
|
83
|
+
return;
|
|
84
|
+
}
|
|
85
|
+
const chunks = [];
|
|
86
|
+
res.on("data", (c) => chunks.push(c));
|
|
87
|
+
res.on("end", () => {
|
|
88
|
+
try {
|
|
89
|
+
const body = Buffer.concat(chunks).toString("utf-8");
|
|
90
|
+
const parsed = JSON.parse(body);
|
|
91
|
+
finish(typeof parsed.version === "string" ? parsed.version : null);
|
|
92
|
+
}
|
|
93
|
+
catch {
|
|
94
|
+
finish(null);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
res.on("error", () => finish(null));
|
|
98
|
+
});
|
|
99
|
+
req.on("error", () => finish(null));
|
|
100
|
+
req.setTimeout(timeoutMs, () => {
|
|
101
|
+
req.destroy();
|
|
102
|
+
finish(null);
|
|
103
|
+
});
|
|
104
|
+
req.end();
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
const HINT_LINE = (current, latest) => `[wotann] You're running v${current} from the npx cache; v${latest} is available. ` +
|
|
108
|
+
`Refresh with: npx --yes -p wotann@latest wotann\n`;
|
|
109
|
+
/**
|
|
110
|
+
* Run the full hint sequence: detect cache path → fetch latest →
|
|
111
|
+
* compare → optionally print. Never blocks longer than `timeoutMs`,
|
|
112
|
+
* never throws, never gates the rest of the startup.
|
|
113
|
+
*
|
|
114
|
+
* Returns the printed hint string (for tests) or `null` if no hint
|
|
115
|
+
* was printed.
|
|
116
|
+
*/
|
|
117
|
+
export async function printNpxUpgradeHint(opts) {
|
|
118
|
+
if ((opts.skipInCI ?? true) && process.env["CI"] === "true")
|
|
119
|
+
return null;
|
|
120
|
+
if ((opts.skipNonInteractive ?? true) && !process.stdout.isTTY)
|
|
121
|
+
return null;
|
|
122
|
+
if (!isRunningFromNpxCache(opts.currentDirname))
|
|
123
|
+
return null;
|
|
124
|
+
const fetcher = opts.fetchLatest ?? fetchLatestWotannVersion;
|
|
125
|
+
let latest;
|
|
126
|
+
try {
|
|
127
|
+
latest = await fetcher(opts.timeoutMs ?? 1500);
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
130
|
+
return null;
|
|
131
|
+
}
|
|
132
|
+
if (latest === null)
|
|
133
|
+
return null;
|
|
134
|
+
if (compareVersions(opts.currentVersion, latest) >= 0)
|
|
135
|
+
return null;
|
|
136
|
+
const sink = opts.stderr ?? process.stderr;
|
|
137
|
+
const line = HINT_LINE(opts.currentVersion, latest);
|
|
138
|
+
try {
|
|
139
|
+
sink.write(line);
|
|
140
|
+
}
|
|
141
|
+
catch {
|
|
142
|
+
return null;
|
|
143
|
+
}
|
|
144
|
+
return line;
|
|
145
|
+
}
|
|
@@ -732,6 +732,12 @@ function assertCompanionVoiceStreamCaller(context, streamId, stream) {
|
|
|
732
732
|
}
|
|
733
733
|
}
|
|
734
734
|
const COMPANION_LOCAL_ONLY_METHODS = new Set([
|
|
735
|
+
// Hermes Gap 6 — `agent.run` is local-only because it executes
|
|
736
|
+
// tools (Bash, Write, Edit, Read) against the runtime workspace
|
|
737
|
+
// and is intended for scriptable pipelines on the same host as
|
|
738
|
+
// the daemon. Paired companion devices use `chat.send` instead,
|
|
739
|
+
// which already has per-session auth + streaming.
|
|
740
|
+
"agent.run",
|
|
735
741
|
"agents.cancel",
|
|
736
742
|
"agents.kill",
|
|
737
743
|
"agents.status",
|
|
@@ -5531,8 +5537,14 @@ export class KairosRPCHandler {
|
|
|
5531
5537
|
this.handlers.set("voice.stream.start", async (params, context) => {
|
|
5532
5538
|
const p = (params ?? {});
|
|
5533
5539
|
const audioPath = typeof p["audioPath"] === "string" ? p["audioPath"] : null;
|
|
5534
|
-
const source = typeof p["source"] === "string"
|
|
5535
|
-
|
|
5540
|
+
const source = typeof p["source"] === "string"
|
|
5541
|
+
? p["source"]
|
|
5542
|
+
: audioPath
|
|
5543
|
+
? "audioPath"
|
|
5544
|
+
: "daemonMic";
|
|
5545
|
+
const isClientTranscriptSource = source === "ios-duplex" ||
|
|
5546
|
+
source === "ios-local-transcript" ||
|
|
5547
|
+
source === "clientTranscript";
|
|
5536
5548
|
pruneStaleVoiceStreams();
|
|
5537
5549
|
const streamId = `vstream-${Date.now().toString(36)}-${Math.random().toString(36).slice(2, 8)}`;
|
|
5538
5550
|
const now = Date.now();
|
|
@@ -8585,7 +8597,9 @@ export class KairosRPCHandler {
|
|
|
8585
8597
|
assertCompanionSessionIdParticipant(context, this.computerSessionStore, sessionId);
|
|
8586
8598
|
}
|
|
8587
8599
|
if (getCompanionDeviceId(context) && typeof params["id"] === "string") {
|
|
8588
|
-
throw Object.assign(new Error("id is daemon-owned for paired companion memory.add calls"), {
|
|
8600
|
+
throw Object.assign(new Error("id is daemon-owned for paired companion memory.add calls"), {
|
|
8601
|
+
code: RPC_APP_ERROR_BASE - 1,
|
|
8602
|
+
});
|
|
8589
8603
|
}
|
|
8590
8604
|
const id = typeof params["id"] === "string" && params["id"].trim().length > 0
|
|
8591
8605
|
? params["id"].trim()
|
|
@@ -10633,6 +10647,129 @@ export class KairosRPCHandler {
|
|
|
10633
10647
|
ok: false,
|
|
10634
10648
|
error: "agentless does not support mid-run cancel; orchestrator is fire-and-forget. Wait for current run to finish.",
|
|
10635
10649
|
}));
|
|
10650
|
+
// ── agent.run — Hermes Gap 6: Scriptable Subagent RPC ─────────
|
|
10651
|
+
//
|
|
10652
|
+
// One-shot agent invocation for scriptable pipelines. Lets users
|
|
10653
|
+
// collapse multi-step bash/python pipelines into a single RPC
|
|
10654
|
+
// call: prompt in → final result out. The handler runs the full
|
|
10655
|
+
// runAgent loop (tools, iterations, guardrails) but collects the
|
|
10656
|
+
// entire text output into a single response — no streaming, no
|
|
10657
|
+
// partial events. Pairs with `wotann daemon` running locally so a
|
|
10658
|
+
// script can ask "what's wrong with this code?" / "summarize this
|
|
10659
|
+
// log" / "draft a commit message" without any agent state of its
|
|
10660
|
+
// own.
|
|
10661
|
+
//
|
|
10662
|
+
// SECURITY: `agent.run` is local-only (see COMPANION_LOCAL_ONLY_*
|
|
10663
|
+
// below) because it can execute arbitrary tool calls (Bash, Write,
|
|
10664
|
+
// Edit) against the runtime's workspace. Paired companion devices
|
|
10665
|
+
// (phone, watch) MUST NOT be able to drive this surface; iOS
|
|
10666
|
+
// chat.send already covers their use case with proper streaming
|
|
10667
|
+
// and per-session bookkeeping.
|
|
10668
|
+
//
|
|
10669
|
+
// FAILURE MODE: on any failure (no runtime, runAgent throws, error
|
|
10670
|
+
// chunk, empty prompt) the handler returns
|
|
10671
|
+
// `{ ok: false, error: <message> }` — never throws, never returns
|
|
10672
|
+
// a partial `{ ok: true, ... }` with empty output (QB#4 honest
|
|
10673
|
+
// failure).
|
|
10674
|
+
this.handlers.set("agent.run", async (params) => {
|
|
10675
|
+
const startedAt = Date.now();
|
|
10676
|
+
const promptRaw = typeof params["prompt"] === "string"
|
|
10677
|
+
? params["prompt"]
|
|
10678
|
+
: typeof params["content"] === "string"
|
|
10679
|
+
? params["content"]
|
|
10680
|
+
: "";
|
|
10681
|
+
const prompt = promptRaw.trim();
|
|
10682
|
+
if (prompt.length === 0) {
|
|
10683
|
+
return {
|
|
10684
|
+
ok: false,
|
|
10685
|
+
error: "prompt is required and must be a non-empty string",
|
|
10686
|
+
};
|
|
10687
|
+
}
|
|
10688
|
+
if (!this.runtime) {
|
|
10689
|
+
return { ok: false, error: "Runtime not initialized" };
|
|
10690
|
+
}
|
|
10691
|
+
if (this.runtimeReady) {
|
|
10692
|
+
try {
|
|
10693
|
+
await this.runtimeReady;
|
|
10694
|
+
}
|
|
10695
|
+
catch (err) {
|
|
10696
|
+
return {
|
|
10697
|
+
ok: false,
|
|
10698
|
+
error: `Runtime initialization failed: ${err instanceof Error ? err.message : String(err)}`,
|
|
10699
|
+
};
|
|
10700
|
+
}
|
|
10701
|
+
}
|
|
10702
|
+
const options = (params["options"] ?? {});
|
|
10703
|
+
const model = typeof options["model"] === "string" && options["model"]
|
|
10704
|
+
? options["model"]
|
|
10705
|
+
: typeof params["model"] === "string"
|
|
10706
|
+
? params["model"]
|
|
10707
|
+
: undefined;
|
|
10708
|
+
const providerRaw = typeof options["provider"] === "string" && options["provider"]
|
|
10709
|
+
? options["provider"]
|
|
10710
|
+
: typeof params["provider"] === "string"
|
|
10711
|
+
? params["provider"]
|
|
10712
|
+
: undefined;
|
|
10713
|
+
const maxIterationsRaw = typeof options["maxIterations"] === "number"
|
|
10714
|
+
? options["maxIterations"]
|
|
10715
|
+
: typeof params["maxIterations"] === "number"
|
|
10716
|
+
? params["maxIterations"]
|
|
10717
|
+
: undefined;
|
|
10718
|
+
const maxIterations = typeof maxIterationsRaw === "number" &&
|
|
10719
|
+
Number.isFinite(maxIterationsRaw) &&
|
|
10720
|
+
maxIterationsRaw >= 1
|
|
10721
|
+
? Math.min(32, Math.floor(maxIterationsRaw))
|
|
10722
|
+
: undefined;
|
|
10723
|
+
const rt = this.runtime;
|
|
10724
|
+
let output = "";
|
|
10725
|
+
let tokensUsed = 0;
|
|
10726
|
+
try {
|
|
10727
|
+
for await (const ev of runAgent({
|
|
10728
|
+
prompt,
|
|
10729
|
+
context: [],
|
|
10730
|
+
...(model !== undefined ? { model } : {}),
|
|
10731
|
+
...(providerRaw !== undefined ? { provider: providerRaw } : {}),
|
|
10732
|
+
...(maxIterations !== undefined ? { maxIterations } : {}),
|
|
10733
|
+
tools: AGENT_TOOL_DEFINITIONS,
|
|
10734
|
+
query: (o) => rt.query(o),
|
|
10735
|
+
executeTool: (name, input) => executeAgentTool(name, input, buildAgentToolContext(rt, {
|
|
10736
|
+
workingDir: rt.getWorkingDir(),
|
|
10737
|
+
permissionMode: rt.getPermissionMode(),
|
|
10738
|
+
})),
|
|
10739
|
+
})) {
|
|
10740
|
+
if ("kind" in ev)
|
|
10741
|
+
continue; // loop-control events: no RPC payload
|
|
10742
|
+
if (ev.type === "text") {
|
|
10743
|
+
output += ev.content ?? "";
|
|
10744
|
+
}
|
|
10745
|
+
if (typeof ev.tokensUsed === "number" && Number.isFinite(ev.tokensUsed)) {
|
|
10746
|
+
tokensUsed += ev.tokensUsed;
|
|
10747
|
+
}
|
|
10748
|
+
if (ev.type === "error") {
|
|
10749
|
+
return {
|
|
10750
|
+
ok: false,
|
|
10751
|
+
error: ev.content || "Query error",
|
|
10752
|
+
durationMs: Date.now() - startedAt,
|
|
10753
|
+
tokensUsed,
|
|
10754
|
+
};
|
|
10755
|
+
}
|
|
10756
|
+
}
|
|
10757
|
+
}
|
|
10758
|
+
catch (err) {
|
|
10759
|
+
return {
|
|
10760
|
+
ok: false,
|
|
10761
|
+
error: err instanceof Error ? err.message : String(err),
|
|
10762
|
+
durationMs: Date.now() - startedAt,
|
|
10763
|
+
tokensUsed,
|
|
10764
|
+
};
|
|
10765
|
+
}
|
|
10766
|
+
return {
|
|
10767
|
+
ok: true,
|
|
10768
|
+
output,
|
|
10769
|
+
tokensUsed,
|
|
10770
|
+
durationMs: Date.now() - startedAt,
|
|
10771
|
+
};
|
|
10772
|
+
});
|
|
10636
10773
|
// ── build ─────────────────────────────────────────────────
|
|
10637
10774
|
this.handlers.set("build.run", async (params) => {
|
|
10638
10775
|
const prompt = typeof params["prompt"] === "string" ? params["prompt"].trim() : "";
|
|
@@ -7,11 +7,11 @@ export declare const RPC_COMPANION_STREAM_EVENTS: readonly ["stream.text", "stre
|
|
|
7
7
|
export type RpcCompanionStreamEvent = (typeof RPC_COMPANION_STREAM_EVENTS)[number];
|
|
8
8
|
export declare const RPC_COMPANION_METHODS: readonly ["auth.handshake", "auth.rotate", "pair.local", "security.keyExchange"];
|
|
9
9
|
export type RpcCompanionMethod = (typeof RPC_COMPANION_METHODS)[number];
|
|
10
|
-
export declare const RPC_DAEMON_METHODS: readonly ["agentless.cancel", "agentless.run", "agents.cancel", "agents.hierarchy", "agents.kill", "agents.list", "agents.spawn", "agents.status", "agents.submit", "ambient.status", "amplifier.config.recommend", "approvals.decide", "approvals.pending", "approvals.subscribe", "architect", "arena.run", "attest.genkey", "attest.sign", "attest.verify", "audit.query", "auth.anthropic-login", "auth.codex-login", "auth.detect-existing", "auth.handshake", "auth.import-codex", "automations.create", "automations.delete", "automations.list", "automations.update", "autonomous.cancel", "autonomous.run", "benchmark.best", "benchmark.history", "blocks.append", "blocks.clear", "blocks.get", "blocks.kinds", "blocks.list", "blocks.render", "blocks.set", "briefing.daily", "build.annotate", "build.cancel", "build.run", "build.status", "canary.captureBaseline", "carplay.dispatch", "carplay.parseVoice", "carplay.templates", "carplay.voice.subscribe", "channels.policy.add", "channels.policy.list", "channels.policy.remove", "channels.start", "channels.status", "channels.stop", "chat.send", "clipboard.consume", "clipboard.history", "clipboard.inject", "clipboard.read", "clipboard.share", "companion.devices", "companion.pairing", "companion.remote.clear", "companion.remote.configure", "companion.remote.status", "companion.session.end", "companion.sessions", "companion.unpair", "composer.apply", "computer.driver.execute", "computer.session.acceptHandoff", "computer.session.approve", "computer.session.claim", "computer.session.close", "computer.session.create", "computer.session.expireHandoff", "computer.session.handoff", "computer.session.list", "computer.session.release", "computer.session.requestApproval", "computer.session.safeStep", "computer.session.step", "computer.session.stream", "config.get", "config.set", "config.sync", "connectors.list", "connectors.save_config", "connectors.test", "connectors.webhook.start", "connectors.webhook.stats", "connectors.webhook.stop", "context.info", "context.pressure", "continuity.frame", "continuity.photo", "conversations.list", "cost.arbitrage", "cost.current", "cost.details", "cost.snapshot", "council", "creations.delete", "creations.get", "creations.list", "creations.save", "creations.watch", "crew.assemble", "cron.add", "cron.list", "cron.remove", "cron.setEnabled", "crossdevice.context", "cursor.emit", "cursor.stream", "cursor.subscribe", "dag.runDag", "decisions.list", "decisions.record", "delivery.acknowledge", "delivery.notify", "delivery.pending", "delivery.subscribe", "deploy.run", "deploy.targets", "device.registerAPNsToken", "doc.parseDocx", "doc.parseXlsx", "doctor", "dream", "effort.classify", "enhance", "episodes.complete", "episodes.get", "episodes.list", "episodes.patterns", "episodes.recall", "episodes.recordEvent", "episodes.start", "execute", "exploit.run.start", "exploit.runs.list", "file.get", "file.list", "file.receive", "file.send", "file.write", "files.hotspots", "files.search", "fleet.list", "fleet.summary", "fleet.watch", "flow.insights", "flow.runLoop", "flow.runParallel", "flow.runSequential", "gdpr.delete", "gdpr.export", "git.branches", "git.diff", "git.log", "git.status", "handoffs.execute", "health.report", "hooks.list", "hooks.setProfile", "idle.status", "ingest.capabilities", "inspect.path", "intelligence.devSearch", "intelligence.extractActionItems", "intelligence.followUpChips", "intelligence.ingestNotes", "intelligence.multimodalExtract", "intelligence.outlineCode", "live.activity.subscribe", "liveActivity.pending", "liveActivity.step", "liveActivity.subscribe", "lsp.completion", "lsp.definition", "lsp.hover", "lsp.symbols", "manifest.render", "mcp.add", "mcp.list", "mcp.toggle", "meet.summarize", "mem0.extract", "mem0.facts.list", "mem0.retrieve", "memory.add", "memory.delete", "memory.fence", "memory.mine", "memory.multiTierQuery", "memory.quality", "memory.search", "memory.update", "memory.verify", "memory.webHistoryAdd", "memory.webHistorySearch", "mode.set", "model.size.classify", "models.checkForUpdates", "models.recommended", "node.error", "node.register", "node.result", "notifications.configure", "offload.cancel", "offload.providers", "offload.run", "paused.transition", "persistence.nextStrategy", "ping", "plugins.list", "policy.eval", "precommit", "prompts.adaptive", "providers.deleteCredential", "providers.list", "providers.refresh", "providers.saveCredential", "providers.snapshot", "providers.switch", "providers.test", "pwr.advance", "pwr.status", "quickAction", "recipe.cancel", "recipe.list", "recipe.run", "remote.access.clear", "remote.access.configure", "remote.access.status", "replan.maybe", "repo.map", "research", "research.run", "route.classify", "sandbox.exec", "sandbox.list", "sandbox.session.destroy", "sandbox.session.exec", "sandbox.session.list", "schedule.create", "schedule.delete", "schedule.fire", "schedule.list", "screen.capture", "screen.input", "screen.keyboard", "screen.stream", "security.keyExchange", "session.create", "session.list", "shell.precheck", "skill.optimize_description", "skill.telemetry_corpus", "skill.telemetry_mark_outcome", "skill.telemetry_record", "skills.install", "skills.list", "skills.search", "snippet.delete", "snippet.get", "snippet.import", "snippet.list", "snippet.save", "snippet.use", "sop.cancel", "sop.list", "sop.run", "spec.computeDeltas", "spec.divergence", "spec.parse", "status", "task.approve", "task.cancel", "task.cost.check_cap", "task.cost.end", "task.cost.get", "task.cost.list", "task.cost.record", "task.cost.set_cap", "task.cost.start", "task.dispatch", "task.reject", "teams.board", "teams.listTemplates", "teams.receive", "teams.send", "teams.showTemplate", "terminal.lastError", "train.extract", "train.status", "triggers.list", "verifier.enabled", "verifier.history", "verifier.lastVerdict", "voice.status", "wakeup.payload", "watch.dispatch", "watch.templates", "workflow.list", "workflow.save", "workflow.start", "workflow.status", "workspace.trust", "workspace.trust.list", "workspace.untrust", "workspaces.list"];
|
|
10
|
+
export declare const RPC_DAEMON_METHODS: readonly ["agent.run", "agentless.cancel", "agentless.run", "agents.cancel", "agents.hierarchy", "agents.kill", "agents.list", "agents.spawn", "agents.status", "agents.submit", "ambient.status", "amplifier.config.recommend", "approvals.decide", "approvals.pending", "approvals.subscribe", "architect", "arena.run", "attest.genkey", "attest.sign", "attest.verify", "audit.query", "auth.anthropic-login", "auth.codex-login", "auth.detect-existing", "auth.handshake", "auth.import-codex", "automations.create", "automations.delete", "automations.list", "automations.update", "autonomous.cancel", "autonomous.run", "benchmark.best", "benchmark.history", "blocks.append", "blocks.clear", "blocks.get", "blocks.kinds", "blocks.list", "blocks.render", "blocks.set", "briefing.daily", "build.annotate", "build.cancel", "build.run", "build.status", "canary.captureBaseline", "carplay.dispatch", "carplay.parseVoice", "carplay.templates", "carplay.voice.subscribe", "channels.policy.add", "channels.policy.list", "channels.policy.remove", "channels.start", "channels.status", "channels.stop", "chat.send", "clipboard.consume", "clipboard.history", "clipboard.inject", "clipboard.read", "clipboard.share", "companion.devices", "companion.pairing", "companion.remote.clear", "companion.remote.configure", "companion.remote.status", "companion.session.end", "companion.sessions", "companion.unpair", "composer.apply", "computer.driver.execute", "computer.session.acceptHandoff", "computer.session.approve", "computer.session.claim", "computer.session.close", "computer.session.create", "computer.session.expireHandoff", "computer.session.handoff", "computer.session.list", "computer.session.release", "computer.session.requestApproval", "computer.session.safeStep", "computer.session.step", "computer.session.stream", "config.get", "config.set", "config.sync", "connectors.list", "connectors.save_config", "connectors.test", "connectors.webhook.start", "connectors.webhook.stats", "connectors.webhook.stop", "context.info", "context.pressure", "continuity.frame", "continuity.photo", "conversations.list", "cost.arbitrage", "cost.current", "cost.details", "cost.snapshot", "council", "creations.delete", "creations.get", "creations.list", "creations.save", "creations.watch", "crew.assemble", "cron.add", "cron.list", "cron.remove", "cron.setEnabled", "crossdevice.context", "cursor.emit", "cursor.stream", "cursor.subscribe", "dag.runDag", "decisions.list", "decisions.record", "delivery.acknowledge", "delivery.notify", "delivery.pending", "delivery.subscribe", "deploy.run", "deploy.targets", "device.registerAPNsToken", "doc.parseDocx", "doc.parseXlsx", "doctor", "dream", "effort.classify", "enhance", "episodes.complete", "episodes.get", "episodes.list", "episodes.patterns", "episodes.recall", "episodes.recordEvent", "episodes.start", "execute", "exploit.run.start", "exploit.runs.list", "file.get", "file.list", "file.receive", "file.send", "file.write", "files.hotspots", "files.search", "fleet.list", "fleet.summary", "fleet.watch", "flow.insights", "flow.runLoop", "flow.runParallel", "flow.runSequential", "gdpr.delete", "gdpr.export", "git.branches", "git.diff", "git.log", "git.status", "handoffs.execute", "health.report", "hooks.list", "hooks.setProfile", "idle.status", "ingest.capabilities", "inspect.path", "intelligence.devSearch", "intelligence.extractActionItems", "intelligence.followUpChips", "intelligence.ingestNotes", "intelligence.multimodalExtract", "intelligence.outlineCode", "live.activity.subscribe", "liveActivity.pending", "liveActivity.step", "liveActivity.subscribe", "lsp.completion", "lsp.definition", "lsp.hover", "lsp.symbols", "manifest.render", "mcp.add", "mcp.list", "mcp.toggle", "meet.summarize", "mem0.extract", "mem0.facts.list", "mem0.retrieve", "memory.add", "memory.delete", "memory.fence", "memory.mine", "memory.multiTierQuery", "memory.quality", "memory.search", "memory.update", "memory.verify", "memory.webHistoryAdd", "memory.webHistorySearch", "mode.set", "model.size.classify", "models.checkForUpdates", "models.recommended", "node.error", "node.register", "node.result", "notifications.configure", "offload.cancel", "offload.providers", "offload.run", "paused.transition", "persistence.nextStrategy", "ping", "plugins.list", "policy.eval", "precommit", "prompts.adaptive", "providers.deleteCredential", "providers.list", "providers.refresh", "providers.saveCredential", "providers.snapshot", "providers.switch", "providers.test", "pwr.advance", "pwr.status", "quickAction", "recipe.cancel", "recipe.list", "recipe.run", "remote.access.clear", "remote.access.configure", "remote.access.status", "replan.maybe", "repo.map", "research", "research.run", "route.classify", "sandbox.exec", "sandbox.list", "sandbox.session.destroy", "sandbox.session.exec", "sandbox.session.list", "schedule.create", "schedule.delete", "schedule.fire", "schedule.list", "screen.capture", "screen.input", "screen.keyboard", "screen.stream", "security.keyExchange", "session.create", "session.list", "shell.precheck", "skill.optimize_description", "skill.telemetry_corpus", "skill.telemetry_mark_outcome", "skill.telemetry_record", "skills.install", "skills.list", "skills.search", "snippet.delete", "snippet.get", "snippet.import", "snippet.list", "snippet.save", "snippet.use", "sop.cancel", "sop.list", "sop.run", "spec.computeDeltas", "spec.divergence", "spec.parse", "status", "task.approve", "task.cancel", "task.cost.check_cap", "task.cost.end", "task.cost.get", "task.cost.list", "task.cost.record", "task.cost.set_cap", "task.cost.start", "task.dispatch", "task.reject", "teams.board", "teams.listTemplates", "teams.receive", "teams.send", "teams.showTemplate", "terminal.lastError", "train.extract", "train.status", "triggers.list", "verifier.enabled", "verifier.history", "verifier.lastVerdict", "voice.status", "wakeup.payload", "watch.dispatch", "watch.templates", "workflow.list", "workflow.save", "workflow.start", "workflow.status", "workspace.trust", "workspace.trust.list", "workspace.untrust", "workspaces.list"];
|
|
11
11
|
export type RpcDaemonMethod = (typeof RPC_DAEMON_METHODS)[number];
|
|
12
12
|
export declare const RPC_HKDF_SALT: "wotann-v1";
|
|
13
13
|
export declare const RPC_HKDF_KEY_BYTE_COUNT: 32;
|
|
14
|
-
export declare const RPC_DAEMON_METHOD_SET_HASH: "
|
|
14
|
+
export declare const RPC_DAEMON_METHOD_SET_HASH: "71bc2276167e87ef233f69f7f22198425d941a2e0b588477445b360d158bb891";
|
|
15
15
|
export declare const RPC_PROTOCOL: {
|
|
16
16
|
readonly $schema: "https://json-schema.org/draft/2020-12/schema";
|
|
17
17
|
readonly protocolVersion: 2;
|
|
@@ -24,6 +24,7 @@ export const RPC_COMPANION_METHODS = [
|
|
|
24
24
|
"security.keyExchange"
|
|
25
25
|
];
|
|
26
26
|
export const RPC_DAEMON_METHODS = [
|
|
27
|
+
"agent.run",
|
|
27
28
|
"agentless.cancel",
|
|
28
29
|
"agentless.run",
|
|
29
30
|
"agents.cancel",
|
|
@@ -342,7 +343,7 @@ export const RPC_DAEMON_METHODS = [
|
|
|
342
343
|
];
|
|
343
344
|
export const RPC_HKDF_SALT = "wotann-v1";
|
|
344
345
|
export const RPC_HKDF_KEY_BYTE_COUNT = 32;
|
|
345
|
-
export const RPC_DAEMON_METHOD_SET_HASH = "
|
|
346
|
+
export const RPC_DAEMON_METHOD_SET_HASH = "71bc2276167e87ef233f69f7f22198425d941a2e0b588477445b360d158bb891";
|
|
346
347
|
export const RPC_PROTOCOL = {
|
|
347
348
|
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
|
348
349
|
"protocolVersion": 2,
|