@wrongstack/cli 1.1.2 → 1.1.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/dist/{acp-HCGUTFNE.js → acp-NKUEYJDZ.js} +14 -5
- package/dist/acp-leader/acp-leader-confirm.d.ts +20 -0
- package/dist/acp-leader/acp-leader-context.d.ts +29 -0
- package/dist/acp-leader/acp-leader-fleet.d.ts +26 -0
- package/dist/acp-leader/acp-leader-host-binding.d.ts +17 -0
- package/dist/acp-leader/acp-leader-host.d.ts +82 -0
- package/dist/acp-leader/acp-leader-picker.d.ts +24 -0
- package/dist/acp-leader/acp-leader-provider.d.ts +85 -0
- package/dist/acp-leader/acp-leader-resume.d.ts +10 -0
- package/dist/acp-leader/acp-leader-stream.d.ts +83 -0
- package/dist/{auth-ANOVZVHE.js → auth-2ZG5DBHS.js} +62 -66
- package/dist/auth-menu/index.d.ts +1 -2
- package/dist/boot/dispatch-webui.d.ts +16 -0
- package/dist/boot/launch-menu-arrow.d.ts +20 -0
- package/dist/boot/launch-menu-types.d.ts +36 -0
- package/dist/boot/launch-menu.d.ts +1 -57
- package/dist/boot/tui-session-resume-rollback.d.ts +31 -0
- package/dist/{boot-auto-thin-7D4OVEWA.js → boot-auto-thin-N2CIGTXE.js} +3 -3
- package/dist/{chunk-TZPKOS5G.js → chunk-2XQ6SRKG.js} +2 -2
- package/dist/chunk-3LEIFO5D.js +65 -0
- package/dist/chunk-5SGMUDP5.js +752 -0
- package/dist/{chunk-3EXRPTAU.js → chunk-5TQ65PXQ.js} +17 -17
- package/dist/{chunk-GRAGMA4B.js → chunk-7BM4LGKQ.js} +18 -18
- package/dist/{chunk-VAQXOZKP.js → chunk-AJM4EFCM.js} +139 -136
- package/dist/{chunk-C2BBH4S4.js → chunk-E3MJFAFR.js} +2 -2
- package/dist/{chunk-5TRZZHMN.js → chunk-JCZ2D3VV.js} +4 -65
- package/dist/{chunk-AWRZWPJ3.js → chunk-JFYQGMMM.js} +99 -75
- package/dist/{chunk-BIGSVBPI.js → chunk-KNYIEQAY.js} +64 -61
- package/dist/chunk-LUEO5HLZ.js +50 -0
- package/dist/chunk-LYWOV4OX.js +252 -0
- package/dist/chunk-M7FNHCE3.js +2070 -0
- package/dist/{chunk-75OLD563.js → chunk-M7PSENGF.js} +3 -1
- package/dist/{chunk-NMXQFQ26.js → chunk-MEBXWI7U.js} +5 -5
- package/dist/{chunk-RAWHRRUJ.js → chunk-MKMM5RIW.js} +209 -201
- package/dist/{chunk-3R3OADC5.js → chunk-P7MEEUGT.js} +281 -252
- package/dist/chunk-QLYPIJ7X.js +258 -0
- package/dist/chunk-RN5CFAVQ.js +292 -0
- package/dist/{chunk-WDXNBYGD.js → chunk-TDP7CZGE.js} +6 -1
- package/dist/{chunk-6VPWQ4TG.js → chunk-UROB7MK5.js} +2 -1
- package/dist/chunk-VEESMPTX.js +254 -0
- package/dist/{chunk-IJLIAPCW.js → chunk-VPSAKGLK.js} +47 -47
- package/dist/{cli-context-YIT4FEDM.js → cli-context-CQYGIWOU.js} +254 -237
- package/dist/{cli-main-JIADJ5OL.js → cli-main-VRUJNUBX.js} +2081 -1594
- package/dist/cli-main-boot.d.ts +1 -1
- package/dist/config-doctor-known-keys.d.ts +33 -0
- package/dist/config-doctor.d.ts +2 -47
- package/dist/config-history-support.d.ts +36 -0
- package/dist/config-history.d.ts +1 -1
- package/dist/{config-transfer-Y7XJMJRN.js → config-transfer-B4GOZTFC.js} +2 -2
- package/dist/{execution-BAP566QC.js → execution-IV72RUSM.js} +5354 -5258
- package/dist/execution-tui.d.ts +30 -0
- package/dist/fleet/acp-live-steer.d.ts +28 -0
- package/dist/fleet/acp-permission-bridge.d.ts +49 -0
- package/dist/fleet/acp-quota-hold.d.ts +3 -0
- package/dist/fleet/acp-quota-reading.d.ts +3 -0
- package/dist/fleet/acp-turn-reminders.d.ts +15 -0
- package/dist/fleet/acp-wrongstack-bridge.d.ts +50 -0
- package/dist/fleet/host-acp.d.ts +23 -2
- package/dist/fleet/wrongforge-client.d.ts +116 -0
- package/dist/fleet/wrongforge-gateway.d.ts +20 -0
- package/dist/fleet/wrongforge-info.d.ts +32 -0
- package/dist/fleet/wrongforge-quota.d.ts +10 -0
- package/dist/fleet/wrongforge-runner.d.ts +37 -0
- package/dist/fleet/wrongforge-runtime.d.ts +10 -0
- package/dist/{hq-JD5AZVMG.js → hq-54PQYR5O.js} +311 -307
- package/dist/hq-server/sweeps.d.ts +28 -0
- package/dist/{hq-server-BI23EPM7.js → hq-server-YK7FBLL6.js} +3 -3
- package/dist/index.js +8 -5
- package/dist/mcp-22CFBX4H.js +236 -0
- package/dist/mcp-serve-project.d.ts +18 -0
- package/dist/mcp-serve.d.ts +0 -63
- package/dist/{modeldiag-HDIKG37X.js → modeldiag-5PBB777J.js} +4 -4
- package/dist/{per-subcommand-help-D6J4ZXW2.js → per-subcommand-help-MQGERD4E.js} +2 -2
- package/dist/plugin-llm-command.d.ts +9 -0
- package/dist/{plugin-usage-TYF5HY4K.js → plugin-usage-UWKYMNQU.js} +3 -3
- package/dist/{plugins-XGAXDLPT.js → plugins-VP7JQH47.js} +4 -4
- package/dist/{sdd-runtime-6MFUXWJK.js → sdd-runtime-HIJ4Z5TF.js} +2 -2
- package/dist/services/sdd/state.d.ts +2 -0
- package/dist/session-event-wiring-types.d.ts +62 -0
- package/dist/session-event-wiring.d.ts +2 -52
- package/dist/{sessions-config-SJVQXCIE.js → sessions-config-7MK742OW.js} +2 -2
- package/dist/short-circuit-flags-AGHURHMQ.js +11 -0
- package/dist/slash-commands/command-context-fleet.d.ts +187 -0
- package/dist/slash-commands/command-context-sdd-goal.d.ts +102 -0
- package/dist/slash-commands/command-context.d.ts +3 -282
- package/dist/slash-commands/project-switch-interactive.d.ts +11 -0
- package/dist/slash-commands/setmodel-helpers.d.ts +36 -0
- package/dist/subcommands/handlers/hq-token.d.ts +3 -0
- package/dist/subcommands/handlers/hq.d.ts +0 -21
- package/dist/subcommands/handlers/per-subcommand-help-operations.d.ts +8 -0
- package/dist/subcommands/handlers/tools-cli-args.d.ts +57 -0
- package/dist/subcommands/handlers/tools-cli.d.ts +5 -0
- package/dist/subcommands/handlers/tools-serve.d.ts +4 -0
- package/dist/{subcommands-VTMIZQBP.js → subcommands-OCJNO57E.js} +2 -2
- package/dist/tool-gateway-http.d.ts +30 -0
- package/dist/tool-gateway.d.ts +185 -0
- package/dist/tools-cli-44MLIUQO.js +509 -0
- package/dist/tools-serve-TRCET2M7.js +102 -0
- package/dist/{tools-skills-55QVTMSK.js → tools-skills-WDTMCE46.js} +7 -2
- package/dist/tuneup-runtime-checks.d.ts +7 -0
- package/dist/tuneup-types.d.ts +118 -0
- package/dist/tuneup.d.ts +3 -122
- package/dist/{typesafe-YBEADNAH.js → typesafe-QLSMFU7J.js} +1 -1
- package/dist/{version-help-RBZC5GZZ.js → version-help-X6CC4CFY.js} +2 -2
- package/dist/{webui-server-HIUY3RHD.js → webui-server-V2R5WQUK.js} +79 -3
- package/dist/wiring/provider-runtime-setup.d.ts +3 -1
- package/dist/wiring/session-runtime.d.ts +1 -1
- package/dist/wrongforge-gateway-UOFBK56J.js +92 -0
- package/dist/wrongforge-leader/wrongforge-leader-gateway.d.ts +9 -0
- package/dist/wrongforge-leader/wrongforge-leader-picker.d.ts +12 -0
- package/dist/wrongforge-leader/wrongforge-leader-provider.d.ts +49 -0
- package/package.json +34 -30
- package/dist/auth-menu/anthropic-oauth.d.ts +0 -43
- package/dist/chunk-XT3NAHRX.js +0 -337
- package/dist/chunk-ZNNFEKDZ.js +0 -319
- package/dist/mcp-2XWBJEQN.js +0 -464
- package/dist/short-circuit-flags-CPCT5MWB.js +0 -11
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@wrongstack/cli",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.5",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "WrongStack CLI — terminal AI coding agent with provider catalog from models.dev. Provides `wrongstack` and `wstack` binaries.",
|
|
6
6
|
"keywords": [
|
|
@@ -48,42 +48,46 @@
|
|
|
48
48
|
"clean": "bun -e \"require('node:fs').rmSync('dist',{recursive:true,force:true})\""
|
|
49
49
|
},
|
|
50
50
|
"dependencies": {
|
|
51
|
-
"@wrongstack/acp": "1.1.
|
|
52
|
-
"@wrongstack/bench": "1.1.
|
|
53
|
-
"@wrongstack/
|
|
54
|
-
"@wrongstack/
|
|
55
|
-
"@wrongstack/
|
|
56
|
-
"@wrongstack/
|
|
57
|
-
"@wrongstack/
|
|
58
|
-
"@wrongstack/
|
|
59
|
-
"@wrongstack/
|
|
60
|
-
"@wrongstack/
|
|
61
|
-
"@wrongstack/
|
|
62
|
-
"@wrongstack/
|
|
63
|
-
"@wrongstack/
|
|
64
|
-
"@wrongstack/
|
|
65
|
-
"@wrongstack/
|
|
66
|
-
"@wrongstack/
|
|
67
|
-
"@wrongstack/
|
|
68
|
-
"@wrongstack/
|
|
69
|
-
"@wrongstack/
|
|
70
|
-
"@wrongstack/
|
|
71
|
-
"@wrongstack/
|
|
72
|
-
"@wrongstack/
|
|
73
|
-
"@wrongstack/
|
|
74
|
-
"@wrongstack/
|
|
75
|
-
"@wrongstack/
|
|
76
|
-
"@wrongstack/
|
|
77
|
-
"@wrongstack/
|
|
51
|
+
"@wrongstack/acp": "1.1.2",
|
|
52
|
+
"@wrongstack/bench": "1.1.2",
|
|
53
|
+
"@wrongstack/codebase-index-mcp": "1.1.2",
|
|
54
|
+
"@wrongstack/core": "1.1.2",
|
|
55
|
+
"@wrongstack/kanban": "1.1.2",
|
|
56
|
+
"@wrongstack/kanban-mcp": "1.1.2",
|
|
57
|
+
"@wrongstack/mailbox-mcp": "1.1.2",
|
|
58
|
+
"@wrongstack/mcp": "1.1.2",
|
|
59
|
+
"@wrongstack/persistence": "1.1.2",
|
|
60
|
+
"@wrongstack/plug-lsp": "1.1.2",
|
|
61
|
+
"@wrongstack/plugins": "1.1.2",
|
|
62
|
+
"@wrongstack/primitives": "1.1.2",
|
|
63
|
+
"@wrongstack/providers": "1.1.2",
|
|
64
|
+
"@wrongstack/requirement-intake": "1.1.2",
|
|
65
|
+
"@wrongstack/requirement-intake-mcp": "1.1.2",
|
|
66
|
+
"@wrongstack/runtime": "1.1.2",
|
|
67
|
+
"@wrongstack/sage": "1.1.2",
|
|
68
|
+
"@wrongstack/sage-mcp": "1.1.2",
|
|
69
|
+
"@wrongstack/sdd": "1.1.2",
|
|
70
|
+
"@wrongstack/security-scanner": "1.1.2",
|
|
71
|
+
"@wrongstack/simpleui": "1.1.2",
|
|
72
|
+
"@wrongstack/techstack": "1.1.2",
|
|
73
|
+
"@wrongstack/telegram": "1.1.2",
|
|
74
|
+
"@wrongstack/tools": "1.1.2",
|
|
75
|
+
"@wrongstack/tui": "1.1.2",
|
|
76
|
+
"@wrongstack/vector-memory": "1.1.2",
|
|
77
|
+
"@wrongstack/webui": "1.1.2",
|
|
78
|
+
"@wrongstack/webui-hq": "1.1.2",
|
|
79
|
+
"@wrongstack/webui-protocol": "1.1.2",
|
|
80
|
+
"@wrongstack/webui-server": "1.1.2",
|
|
81
|
+
"@wrongstack/wrongtrace": "1.1.2",
|
|
78
82
|
"ws": "^8.22.0"
|
|
79
83
|
},
|
|
80
84
|
"optionalDependencies": {
|
|
81
|
-
"@wrongstack/desktop": "1.1.
|
|
85
|
+
"@wrongstack/desktop": "1.1.2"
|
|
82
86
|
},
|
|
83
87
|
"devDependencies": {
|
|
84
88
|
"@types/node": "^26.5.1",
|
|
85
89
|
"@types/ws": "^8.18.1",
|
|
86
|
-
"@wrongstack/governance": "1.1.
|
|
90
|
+
"@wrongstack/governance": "1.1.2",
|
|
87
91
|
"jsdom": "^30.0.1",
|
|
88
92
|
"typescript": "^7.0.2"
|
|
89
93
|
},
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Anthropic "Sign in with Claude" OAuth (Authorization Code + PKCE) — Claude
|
|
3
|
-
* Pro/Max subscription login. Parallel to the Codex flow but with Anthropic's
|
|
4
|
-
* endpoints and quirks:
|
|
5
|
-
* - authorize at claude.ai/oauth/authorize (params include `code=true`),
|
|
6
|
-
* - the OAuth `state` is the PKCE verifier (Anthropic's convention),
|
|
7
|
-
* - JSON (not form) token exchange at platform.claude.com/v1/oauth/token,
|
|
8
|
-
* - loopback callback on http://localhost:53692/callback.
|
|
9
|
-
*
|
|
10
|
-
* Stored under the canonical `anthropic-oauth` provider (family `anthropic-oauth`)
|
|
11
|
-
* so it never clobbers an API-key `anthropic` provider. The provider adapter
|
|
12
|
-
* adds the Bearer + beta headers and the required Claude Code system block.
|
|
13
|
-
*/
|
|
14
|
-
import type { AuthMenuDeps } from './types.js';
|
|
15
|
-
export declare const CLAUDE_PROVIDER_ID = "anthropic-oauth";
|
|
16
|
-
export interface ClaudeTokens {
|
|
17
|
-
access: string;
|
|
18
|
-
refresh: string;
|
|
19
|
-
expires: number;
|
|
20
|
-
}
|
|
21
|
-
export declare function generatePkce(): {
|
|
22
|
-
verifier: string;
|
|
23
|
-
challenge: string;
|
|
24
|
-
};
|
|
25
|
-
/** Build the Claude authorize URL. Anthropic uses the PKCE verifier as `state`. */
|
|
26
|
-
export declare function buildAuthorizeUrl(challenge: string, verifier: string): string;
|
|
27
|
-
export declare function parseAuthorizationInput(input: string): {
|
|
28
|
-
code?: string | undefined;
|
|
29
|
-
state?: string | undefined;
|
|
30
|
-
};
|
|
31
|
-
/** Exchange an authorization code (+ verifier, reused as state) for tokens. */
|
|
32
|
-
export declare function exchangeAuthorizationCode(code: string, state: string, verifier: string, signal?: AbortSignal): Promise<ClaudeTokens>;
|
|
33
|
-
export interface ClaudeLoginOptions {
|
|
34
|
-
providerId?: string;
|
|
35
|
-
/**
|
|
36
|
-
* External cancellation signal (e.g. the TUI auth panel's Esc). When
|
|
37
|
-
* provided, the flow does NOT install its own SIGINT handler — the
|
|
38
|
-
* caller owns cancellation.
|
|
39
|
-
*/
|
|
40
|
-
signal?: AbortSignal | undefined;
|
|
41
|
-
}
|
|
42
|
-
export declare function runClaudeOAuthLogin(deps: AuthMenuDeps, opts?: ClaudeLoginOptions): Promise<number>;
|
|
43
|
-
//# sourceMappingURL=anthropic-oauth.d.ts.map
|
package/dist/chunk-XT3NAHRX.js
DELETED
|
@@ -1,337 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
// src/hq-command-controller.ts
|
|
3
|
-
function createProjectKanbanTransitionHandler(projectRoot) {
|
|
4
|
-
return async (input) => {
|
|
5
|
-
const { transitionTask } = await import("@wrongstack/kanban");
|
|
6
|
-
const result = await transitionTask(projectRoot, input.boardId, input.taskId, {
|
|
7
|
-
to: input.to,
|
|
8
|
-
actor: "hq-operator",
|
|
9
|
-
comment: input.comment,
|
|
10
|
-
sessionId: input.sessionId ?? "hq-mobile"
|
|
11
|
-
});
|
|
12
|
-
if (result === null) throw new Error(`kanban task not found: ${input.taskId}`);
|
|
13
|
-
return `task ${input.taskId} transitioned to ${input.to}`;
|
|
14
|
-
};
|
|
15
|
-
}
|
|
16
|
-
function createProjectKanbanAssignHandler(projectRoot) {
|
|
17
|
-
return async (input) => {
|
|
18
|
-
const { assignTask } = await import("@wrongstack/kanban");
|
|
19
|
-
const result = await assignTask(
|
|
20
|
-
projectRoot,
|
|
21
|
-
input.boardId,
|
|
22
|
-
input.taskId,
|
|
23
|
-
{
|
|
24
|
-
agentId: input.agentId,
|
|
25
|
-
name: input.assignee,
|
|
26
|
-
assignee: input.assignee,
|
|
27
|
-
status: "assigned",
|
|
28
|
-
protectActiveAssignment: true
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
actor: "hq-operator",
|
|
32
|
-
note: input.comment,
|
|
33
|
-
sessionId: input.sessionId ?? "hq-mobile"
|
|
34
|
-
}
|
|
35
|
-
);
|
|
36
|
-
if (result === null) throw new Error(`kanban task not found: ${input.taskId}`);
|
|
37
|
-
return `task ${input.taskId} assigned to ${input.assignee}`;
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
|
-
function createHqCommandDispatcher(controller) {
|
|
41
|
-
return async (command) => {
|
|
42
|
-
const cmd = command;
|
|
43
|
-
try {
|
|
44
|
-
const result = await dispatch(
|
|
45
|
-
controller,
|
|
46
|
-
cmd.commandId,
|
|
47
|
-
cmd.type,
|
|
48
|
-
cmd.payload
|
|
49
|
-
);
|
|
50
|
-
return result;
|
|
51
|
-
} catch (err) {
|
|
52
|
-
return {
|
|
53
|
-
commandId: command.commandId,
|
|
54
|
-
status: "failed",
|
|
55
|
-
message: err instanceof Error ? err.message : String(err)
|
|
56
|
-
};
|
|
57
|
-
}
|
|
58
|
-
};
|
|
59
|
-
}
|
|
60
|
-
function resolveCommandSessionId(controller, payload) {
|
|
61
|
-
const named = payload["sessionId"];
|
|
62
|
-
if (typeof named === "string" && named.length > 0) return named;
|
|
63
|
-
return controller.sessionId?.();
|
|
64
|
-
}
|
|
65
|
-
function rejectUnknownSession(controller, commandId, sessionId) {
|
|
66
|
-
const named = sessionId;
|
|
67
|
-
if (named === void 0) return null;
|
|
68
|
-
const owns = controller.ownsSession?.(named) ?? (controller.sessionId === void 0 ? true : controller.sessionId() === named);
|
|
69
|
-
if (owns) return null;
|
|
70
|
-
return {
|
|
71
|
-
commandId,
|
|
72
|
-
status: "rejected",
|
|
73
|
-
message: `session ${named} is not active on this client`
|
|
74
|
-
};
|
|
75
|
-
}
|
|
76
|
-
function leaderSessionAffinity(to, sessionId) {
|
|
77
|
-
if (to.trim().toLowerCase() !== "leader") return {};
|
|
78
|
-
if (typeof sessionId !== "string" || sessionId.length === 0) return {};
|
|
79
|
-
return { sessionAffinity: { sessionId } };
|
|
80
|
-
}
|
|
81
|
-
async function dispatch(controller, commandId, type, payload) {
|
|
82
|
-
const sessionId = resolveCommandSessionId(controller, payload);
|
|
83
|
-
const namedSession = typeof payload["sessionId"] === "string" ? payload["sessionId"] : void 0;
|
|
84
|
-
if (type !== "broadcast") {
|
|
85
|
-
const rejected = rejectUnknownSession(controller, commandId, namedSession);
|
|
86
|
-
if (rejected !== null) return rejected;
|
|
87
|
-
}
|
|
88
|
-
switch (type) {
|
|
89
|
-
case "steer": {
|
|
90
|
-
const mailbox = controller.steerMailbox;
|
|
91
|
-
if (mailbox === void 0) {
|
|
92
|
-
return { commandId, status: "rejected", message: "no mailbox available" };
|
|
93
|
-
}
|
|
94
|
-
const to = typeof payload["to"] === "string" ? payload["to"] : "leader";
|
|
95
|
-
const subject = typeof payload["subject"] === "string" ? payload["subject"] : "HQ steer";
|
|
96
|
-
const body = typeof payload["body"] === "string" ? payload["body"] : "";
|
|
97
|
-
const priority = payload["priority"] === "high" ? "high" : payload["priority"] === "low" ? "low" : "normal";
|
|
98
|
-
const from = `hq@${controller.sessionTag()}`;
|
|
99
|
-
await mailbox.send({
|
|
100
|
-
from,
|
|
101
|
-
to,
|
|
102
|
-
type: "steer",
|
|
103
|
-
subject,
|
|
104
|
-
body,
|
|
105
|
-
priority,
|
|
106
|
-
...leaderSessionAffinity(to, sessionId)
|
|
107
|
-
});
|
|
108
|
-
return { commandId, status: "accepted", message: `steered ${to}` };
|
|
109
|
-
}
|
|
110
|
-
case "btw": {
|
|
111
|
-
const mailbox = controller.steerMailbox;
|
|
112
|
-
if (mailbox === void 0) {
|
|
113
|
-
return { commandId, status: "rejected", message: "no mailbox available" };
|
|
114
|
-
}
|
|
115
|
-
const to = typeof payload["to"] === "string" ? payload["to"] : "leader";
|
|
116
|
-
const subject = typeof payload["subject"] === "string" ? payload["subject"] : "HQ note";
|
|
117
|
-
const body = typeof payload["body"] === "string" ? payload["body"] : "";
|
|
118
|
-
const priority = payload["priority"] === "high" ? "high" : payload["priority"] === "low" ? "low" : "normal";
|
|
119
|
-
const from = `hq@${controller.sessionTag()}`;
|
|
120
|
-
await mailbox.send({
|
|
121
|
-
from,
|
|
122
|
-
to,
|
|
123
|
-
type: "btw",
|
|
124
|
-
subject,
|
|
125
|
-
body,
|
|
126
|
-
priority,
|
|
127
|
-
...leaderSessionAffinity(to, sessionId)
|
|
128
|
-
});
|
|
129
|
-
return { commandId, status: "accepted", message: `noted ${to}` };
|
|
130
|
-
}
|
|
131
|
-
case "queue": {
|
|
132
|
-
const mailbox = controller.steerMailbox;
|
|
133
|
-
if (mailbox === void 0) {
|
|
134
|
-
return { commandId, status: "rejected", message: "no mailbox available" };
|
|
135
|
-
}
|
|
136
|
-
const to = typeof payload["to"] === "string" ? payload["to"] : "leader";
|
|
137
|
-
const subject = typeof payload["subject"] === "string" ? payload["subject"] : "HQ prompt";
|
|
138
|
-
const body = typeof payload["body"] === "string" ? payload["body"] : "";
|
|
139
|
-
const priority = payload["priority"] === "high" ? "high" : payload["priority"] === "low" ? "low" : "normal";
|
|
140
|
-
const from = `hq@${controller.sessionTag()}`;
|
|
141
|
-
await mailbox.send({
|
|
142
|
-
from,
|
|
143
|
-
to,
|
|
144
|
-
type: "note",
|
|
145
|
-
subject,
|
|
146
|
-
body,
|
|
147
|
-
priority,
|
|
148
|
-
...leaderSessionAffinity(to, sessionId)
|
|
149
|
-
});
|
|
150
|
-
return { commandId, status: "accepted", message: `queued for ${to}` };
|
|
151
|
-
}
|
|
152
|
-
case "broadcast": {
|
|
153
|
-
const mailbox = controller.steerMailbox;
|
|
154
|
-
if (mailbox === void 0) {
|
|
155
|
-
return { commandId, status: "rejected", message: "no mailbox available" };
|
|
156
|
-
}
|
|
157
|
-
const subject = typeof payload["subject"] === "string" ? payload["subject"] : "HQ broadcast";
|
|
158
|
-
const body = typeof payload["body"] === "string" ? payload["body"] : "";
|
|
159
|
-
const priority = payload["priority"] === "high" ? "high" : payload["priority"] === "low" ? "low" : "normal";
|
|
160
|
-
const from = `hq@${controller.sessionTag()}`;
|
|
161
|
-
await mailbox.send({ from, to: "all", type: "broadcast", subject, body, priority });
|
|
162
|
-
return { commandId, status: "accepted", message: "broadcast sent" };
|
|
163
|
-
}
|
|
164
|
-
case "abort": {
|
|
165
|
-
const target = typeof payload["target"] === "string" ? payload["target"] : "leader";
|
|
166
|
-
if (target === "leader") {
|
|
167
|
-
const aborted = controller.interruptLeader(sessionId);
|
|
168
|
-
return {
|
|
169
|
-
commandId,
|
|
170
|
-
status: aborted ? "completed" : "accepted",
|
|
171
|
-
message: aborted ? "leader aborted" : "no active leader run"
|
|
172
|
-
};
|
|
173
|
-
}
|
|
174
|
-
if (target === "fleet") {
|
|
175
|
-
if (controller.killFleet === void 0) {
|
|
176
|
-
return {
|
|
177
|
-
commandId,
|
|
178
|
-
status: "rejected",
|
|
179
|
-
message: "this client does not manage a fleet"
|
|
180
|
-
};
|
|
181
|
-
}
|
|
182
|
-
const killed = await controller.killFleet(sessionId);
|
|
183
|
-
return {
|
|
184
|
-
commandId,
|
|
185
|
-
status: "completed",
|
|
186
|
-
message: `fleet stopped (${killed} agents)`
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
if (controller.terminateAgent === void 0) {
|
|
190
|
-
return {
|
|
191
|
-
commandId,
|
|
192
|
-
status: "rejected",
|
|
193
|
-
message: "this client does not manage subagents"
|
|
194
|
-
};
|
|
195
|
-
}
|
|
196
|
-
const terminated = await controller.terminateAgent(target, sessionId);
|
|
197
|
-
return {
|
|
198
|
-
commandId,
|
|
199
|
-
status: terminated ? "completed" : "rejected",
|
|
200
|
-
message: terminated ? `agent ${target} terminated` : `agent ${target} not found`
|
|
201
|
-
};
|
|
202
|
-
}
|
|
203
|
-
case "spawn": {
|
|
204
|
-
const role = typeof payload["role"] === "string" ? payload["role"] : "";
|
|
205
|
-
const task = typeof payload["task"] === "string" ? payload["task"] : void 0;
|
|
206
|
-
const maxIterations = typeof payload["maxIterations"] === "number" ? payload["maxIterations"] : void 0;
|
|
207
|
-
if (controller.spawnAgent === void 0) {
|
|
208
|
-
return { commandId, status: "rejected", message: "no director active" };
|
|
209
|
-
}
|
|
210
|
-
const subagentId = await controller.spawnAgent(role, task, maxIterations, sessionId);
|
|
211
|
-
return { commandId, status: "completed", message: `spawned ${subagentId}` };
|
|
212
|
-
}
|
|
213
|
-
case "kanban-transition": {
|
|
214
|
-
if (controller.kanbanTransition === void 0) {
|
|
215
|
-
return { commandId, status: "rejected", message: "kanban control is unavailable" };
|
|
216
|
-
}
|
|
217
|
-
const message = await controller.kanbanTransition({
|
|
218
|
-
boardId: payload["boardId"],
|
|
219
|
-
taskId: payload["taskId"],
|
|
220
|
-
to: payload["to"],
|
|
221
|
-
comment: payload["comment"],
|
|
222
|
-
...sessionId !== void 0 ? { sessionId } : {}
|
|
223
|
-
});
|
|
224
|
-
return { commandId, status: "completed", message };
|
|
225
|
-
}
|
|
226
|
-
case "kanban-assign": {
|
|
227
|
-
if (controller.kanbanAssign === void 0) {
|
|
228
|
-
return { commandId, status: "rejected", message: "kanban assignment is unavailable" };
|
|
229
|
-
}
|
|
230
|
-
const message = await controller.kanbanAssign({
|
|
231
|
-
boardId: payload["boardId"],
|
|
232
|
-
taskId: payload["taskId"],
|
|
233
|
-
agentId: payload["agentId"],
|
|
234
|
-
assignee: payload["assignee"],
|
|
235
|
-
comment: payload["comment"],
|
|
236
|
-
...sessionId !== void 0 ? { sessionId } : {}
|
|
237
|
-
});
|
|
238
|
-
return { commandId, status: "completed", message };
|
|
239
|
-
}
|
|
240
|
-
case "kanban-dispatch": {
|
|
241
|
-
if (controller.kanbanDispatch === void 0) {
|
|
242
|
-
return { commandId, status: "rejected", message: "kanban dispatch is unavailable" };
|
|
243
|
-
}
|
|
244
|
-
const message = await controller.kanbanDispatch({
|
|
245
|
-
boardId: payload["boardId"],
|
|
246
|
-
taskId: payload["taskId"],
|
|
247
|
-
comment: payload["comment"],
|
|
248
|
-
...sessionId !== void 0 ? { sessionId } : {}
|
|
249
|
-
});
|
|
250
|
-
return { commandId, status: "completed", message };
|
|
251
|
-
}
|
|
252
|
-
case "approve": {
|
|
253
|
-
const resolveApproval = controller.resolveApproval;
|
|
254
|
-
if (resolveApproval === void 0) {
|
|
255
|
-
return {
|
|
256
|
-
commandId,
|
|
257
|
-
status: "rejected",
|
|
258
|
-
message: "this client does not mirror approvals"
|
|
259
|
-
};
|
|
260
|
-
}
|
|
261
|
-
const toolUseId = typeof payload["toolUseId"] === "string" ? payload["toolUseId"] : "";
|
|
262
|
-
const decision = payload["decision"];
|
|
263
|
-
if (toolUseId.length === 0 || decision !== "yes" && decision !== "no" && decision !== "always" && decision !== "always-exact" && decision !== "always-command" && decision !== "always-tool" && decision !== "deny") {
|
|
264
|
-
return { commandId, status: "rejected", message: "malformed approve command" };
|
|
265
|
-
}
|
|
266
|
-
const applied = resolveApproval(toolUseId, decision, sessionId);
|
|
267
|
-
if (!applied) {
|
|
268
|
-
return {
|
|
269
|
-
commandId,
|
|
270
|
-
status: "rejected",
|
|
271
|
-
// Says WHY, because "rejected" alone reads as a failure the operator
|
|
272
|
-
// should retry — and retrying a settled prompt does nothing.
|
|
273
|
-
message: `approval ${toolUseId} is no longer pending (already answered, aborted or timed out)`
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
return { commandId, status: "completed", message: `approval ${decision}` };
|
|
277
|
-
}
|
|
278
|
-
case "answer-input": {
|
|
279
|
-
const resolver = controller.resolveUserInput;
|
|
280
|
-
if (!resolver)
|
|
281
|
-
return {
|
|
282
|
-
commandId,
|
|
283
|
-
status: "rejected",
|
|
284
|
-
message: "this client does not mirror user input forms"
|
|
285
|
-
};
|
|
286
|
-
const requestId = typeof payload["requestId"] === "string" ? payload["requestId"] : "";
|
|
287
|
-
const response = payload["response"];
|
|
288
|
-
if (!requestId || !response || !Array.isArray(response.answers))
|
|
289
|
-
return { commandId, status: "rejected", message: "malformed answer-input command" };
|
|
290
|
-
if (!resolver(requestId, response, sessionId))
|
|
291
|
-
return {
|
|
292
|
-
commandId,
|
|
293
|
-
status: "rejected",
|
|
294
|
-
message: `user input ${requestId} is no longer pending`
|
|
295
|
-
};
|
|
296
|
-
return { commandId, status: "completed", message: "user input submitted" };
|
|
297
|
-
}
|
|
298
|
-
case "run-command": {
|
|
299
|
-
if (!controller.allowRunCommand()) {
|
|
300
|
-
return {
|
|
301
|
-
commandId,
|
|
302
|
-
status: "rejected",
|
|
303
|
-
message: "run-command requires operator opt-in (--hq-allow-exec)"
|
|
304
|
-
};
|
|
305
|
-
}
|
|
306
|
-
const mailbox = controller.steerMailbox;
|
|
307
|
-
const command = typeof payload["command"] === "string" ? payload["command"] : "";
|
|
308
|
-
if (mailbox !== void 0 && command.length > 0) {
|
|
309
|
-
const from = `hq@${controller.sessionTag()}`;
|
|
310
|
-
await mailbox.send({
|
|
311
|
-
from,
|
|
312
|
-
to: "leader",
|
|
313
|
-
type: "steer",
|
|
314
|
-
subject: "Run command (HQ)",
|
|
315
|
-
body: `Run the following shell command:
|
|
316
|
-
|
|
317
|
-
\`\`\`
|
|
318
|
-
${command}
|
|
319
|
-
\`\`\``,
|
|
320
|
-
priority: "high",
|
|
321
|
-
...leaderSessionAffinity("leader", sessionId)
|
|
322
|
-
});
|
|
323
|
-
return { commandId, status: "accepted", message: "run-command routed to leader as steer" };
|
|
324
|
-
}
|
|
325
|
-
return { commandId, status: "rejected", message: "cannot route run-command (no mailbox)" };
|
|
326
|
-
}
|
|
327
|
-
default:
|
|
328
|
-
return { commandId, status: "rejected", message: `unknown command type: ${type}` };
|
|
329
|
-
}
|
|
330
|
-
}
|
|
331
|
-
|
|
332
|
-
export {
|
|
333
|
-
createProjectKanbanTransitionHandler,
|
|
334
|
-
createProjectKanbanAssignHandler,
|
|
335
|
-
createHqCommandDispatcher
|
|
336
|
-
};
|
|
337
|
-
//# sourceMappingURL=chunk-XT3NAHRX.js.map
|