@damian87/omp 0.10.0 → 0.13.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/.github/copilot-instructions.md +16 -0
- package/.github/skills/jira-ticket/SKILL.md +4 -4
- package/.github/skills/omp-autopilot/SKILL.md +4 -0
- package/.github/skills/research-codebase/SKILL.md +4 -0
- package/.github/skills/schedule/SKILL.md +4 -0
- package/.github/skills/team/SKILL.md +4 -0
- package/.github/skills/ultrawork/SKILL.md +4 -0
- package/.github/skills/weighted-consensus/SKILL.md +4 -0
- package/README.md +4 -1
- package/dist/src/cli.js +134 -4
- package/dist/src/cli.js.map +1 -1
- package/dist/src/commands/comms.d.ts +2 -0
- package/dist/src/commands/comms.js +110 -0
- package/dist/src/commands/comms.js.map +1 -0
- package/dist/src/commands/council.d.ts +2 -0
- package/dist/src/commands/council.js +77 -0
- package/dist/src/commands/council.js.map +1 -0
- package/dist/src/commands/env.d.ts +2 -0
- package/dist/src/commands/env.js +95 -0
- package/dist/src/commands/env.js.map +1 -0
- package/dist/src/commands/gateway.d.ts +3 -0
- package/dist/src/commands/gateway.js +129 -0
- package/dist/src/commands/gateway.js.map +1 -0
- package/dist/src/commands/memory.d.ts +7 -0
- package/dist/src/commands/memory.js +202 -0
- package/dist/src/commands/memory.js.map +1 -0
- package/dist/src/commands/mode.d.ts +4 -0
- package/dist/src/commands/mode.js +119 -0
- package/dist/src/commands/mode.js.map +1 -0
- package/dist/src/commands/schedule.d.ts +2 -0
- package/dist/src/commands/schedule.js +91 -0
- package/dist/src/commands/schedule.js.map +1 -0
- package/dist/src/commands/team.d.ts +2 -0
- package/dist/src/commands/team.js +146 -0
- package/dist/src/commands/team.js.map +1 -0
- package/dist/src/commands/utils.d.ts +13 -0
- package/dist/src/commands/utils.js +68 -0
- package/dist/src/commands/utils.js.map +1 -0
- package/dist/src/copilot/doctor.d.ts +1 -0
- package/dist/src/copilot/doctor.js +226 -27
- package/dist/src/copilot/doctor.js.map +1 -1
- package/dist/src/copilot/launch.js +13 -5
- package/dist/src/copilot/launch.js.map +1 -1
- package/dist/src/copilot/setup.js +13 -0
- package/dist/src/copilot/setup.js.map +1 -1
- package/dist/src/cost/index.d.ts +3 -0
- package/dist/src/cost/index.js +4 -0
- package/dist/src/cost/index.js.map +1 -0
- package/dist/src/cost/ledger.d.ts +21 -0
- package/dist/src/cost/ledger.js +72 -0
- package/dist/src/cost/ledger.js.map +1 -0
- package/dist/src/cost/summary.d.ts +22 -0
- package/dist/src/cost/summary.js +68 -0
- package/dist/src/cost/summary.js.map +1 -0
- package/dist/src/cost/tokenize.d.ts +7 -0
- package/dist/src/cost/tokenize.js +24 -0
- package/dist/src/cost/tokenize.js.map +1 -0
- package/dist/src/goal.js +6 -8
- package/dist/src/goal.js.map +1 -1
- package/dist/src/instructions-memory.js +26 -3
- package/dist/src/instructions-memory.js.map +1 -1
- package/dist/src/memory-review/apply.d.ts +7 -0
- package/dist/src/memory-review/apply.js +75 -0
- package/dist/src/memory-review/apply.js.map +1 -0
- package/dist/src/memory-review/config.d.ts +22 -0
- package/dist/src/memory-review/config.js +54 -0
- package/dist/src/memory-review/config.js.map +1 -0
- package/dist/src/memory-review/guard.d.ts +5 -0
- package/dist/src/memory-review/guard.js +37 -0
- package/dist/src/memory-review/guard.js.map +1 -0
- package/dist/src/memory-review/index.d.ts +17 -0
- package/dist/src/memory-review/index.js +87 -0
- package/dist/src/memory-review/index.js.map +1 -0
- package/dist/src/memory-review/prompt.d.ts +18 -0
- package/dist/src/memory-review/prompt.js +89 -0
- package/dist/src/memory-review/prompt.js.map +1 -0
- package/dist/src/memory-review/spawn.d.ts +2 -0
- package/dist/src/memory-review/spawn.js +51 -0
- package/dist/src/memory-review/spawn.js.map +1 -0
- package/dist/src/memory-review/transcript.d.ts +24 -0
- package/dist/src/memory-review/transcript.js +212 -0
- package/dist/src/memory-review/transcript.js.map +1 -0
- package/dist/src/memory-review/trigger.d.ts +21 -0
- package/dist/src/memory-review/trigger.js +27 -0
- package/dist/src/memory-review/trigger.js.map +1 -0
- package/dist/src/project-memory.d.ts +9 -0
- package/dist/src/project-memory.js +72 -1
- package/dist/src/project-memory.js.map +1 -1
- package/dist/src/state.js +25 -37
- package/dist/src/state.js.map +1 -1
- package/dist/src/utils/fs.d.ts +14 -0
- package/dist/src/utils/fs.js +32 -0
- package/dist/src/utils/fs.js.map +1 -0
- package/dist/src/utils/paths.d.ts +14 -0
- package/dist/src/utils/paths.js +21 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/docs/general-skills.md +1 -0
- package/docs/memory-mode.md +94 -0
- package/hooks/hooks.json +9 -2
- package/package.json +1 -1
- package/plugin.json +1 -1
- package/scripts/error.mjs +9 -7
- package/scripts/lib/cost-ledger.mjs +91 -0
- package/scripts/lib/hook-input.mjs +51 -0
- package/scripts/lib/hook-output.mjs +53 -11
- package/scripts/lib/memory-review-trigger.mjs +59 -0
- package/scripts/lib/minify.mjs +80 -0
- package/scripts/lib/pending-directives.mjs +36 -0
- package/scripts/post-tool-use-failure.mjs +21 -0
- package/scripts/post-tool-use.mjs +71 -8
- package/scripts/pre-tool-use.mjs +8 -6
- package/scripts/prompt-submit.mjs +12 -5
- package/scripts/session-end.mjs +15 -5
- package/scripts/session-start.mjs +9 -4
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
import { flagValue, hasFlag, parsePositiveIntFlag } from "./utils.js";
|
|
2
|
+
const TEAM_SPEC_RE = /^(\d+):([\w-]+)$/;
|
|
3
|
+
export async function handleTeam(argv) {
|
|
4
|
+
const [, command, value, extra] = argv;
|
|
5
|
+
const json = hasFlag(argv, "--json");
|
|
6
|
+
const cwd = flagValue(argv, "--root") ?? process.cwd();
|
|
7
|
+
if (command && TEAM_SPEC_RE.test(command)) {
|
|
8
|
+
const match = command.match(TEAM_SPEC_RE);
|
|
9
|
+
const workerCount = Number(match[1]);
|
|
10
|
+
const role = match[2];
|
|
11
|
+
if (!value) {
|
|
12
|
+
return { ok: false, exitCode: 1, message: "team <N:role> requires a task description" };
|
|
13
|
+
}
|
|
14
|
+
const name = flagValue(argv, "--name") ?? `${role}-${Date.now().toString(36)}`;
|
|
15
|
+
const { startTeam } = await import("../team/runtime.js");
|
|
16
|
+
try {
|
|
17
|
+
const result = await startTeam({ cwd, name, role, workerCount, task: value });
|
|
18
|
+
return json
|
|
19
|
+
? { ok: true, output: result }
|
|
20
|
+
: {
|
|
21
|
+
ok: true,
|
|
22
|
+
message: `started team ${name} session=${result.tmuxSession} workers=${result.config.workers
|
|
23
|
+
.map((w) => `${w.name}(${w.paneId ?? "?"})`)
|
|
24
|
+
.join(",")}`,
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
catch (error) {
|
|
28
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
29
|
+
return { ok: false, exitCode: 1, output: json ? { ok: false, error: message } : undefined, message };
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (command === "status" && value) {
|
|
33
|
+
const { statusTeam, formatStatus } = await import("../team/runtime.js");
|
|
34
|
+
const report = statusTeam({ cwd, name: value });
|
|
35
|
+
return json
|
|
36
|
+
? { ok: report.ok, output: report }
|
|
37
|
+
: { ok: report.ok, message: formatStatus(report) };
|
|
38
|
+
}
|
|
39
|
+
if (command === "shutdown" && value) {
|
|
40
|
+
const { shutdownTeam } = await import("../team/runtime.js");
|
|
41
|
+
const result = await shutdownTeam({ cwd, name: value });
|
|
42
|
+
return json
|
|
43
|
+
? { ok: result.ok, output: result }
|
|
44
|
+
: {
|
|
45
|
+
ok: result.ok,
|
|
46
|
+
message: `shutdown team ${value} killedPanes=${result.killedPanes} killedSession=${result.killedSession}`,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
if (command === "monitor-panes") {
|
|
50
|
+
const leaderPaneId = flagValue(argv, "--leader-pane");
|
|
51
|
+
const workerPaneIds = argv
|
|
52
|
+
.flatMap((arg, index) => (arg === "--worker-pane" ? [argv[index + 1]] : []))
|
|
53
|
+
.filter((value) => Boolean(value));
|
|
54
|
+
if (!leaderPaneId || workerPaneIds.length === 0) {
|
|
55
|
+
return { ok: false, exitCode: 1, message: "team monitor-panes requires --leader-pane and at least one --worker-pane" };
|
|
56
|
+
}
|
|
57
|
+
let pollIntervalMs;
|
|
58
|
+
let readySamples;
|
|
59
|
+
let minObservationMs;
|
|
60
|
+
let timeoutMs;
|
|
61
|
+
let captureLines;
|
|
62
|
+
try {
|
|
63
|
+
pollIntervalMs = parsePositiveIntFlag(flagValue(argv, "--poll-interval-ms"), "--poll-interval-ms");
|
|
64
|
+
readySamples = parsePositiveIntFlag(flagValue(argv, "--ready-samples"), "--ready-samples");
|
|
65
|
+
minObservationMs = parsePositiveIntFlag(flagValue(argv, "--min-observation-ms"), "--min-observation-ms");
|
|
66
|
+
timeoutMs = parsePositiveIntFlag(flagValue(argv, "--timeout-ms"), "--timeout-ms");
|
|
67
|
+
captureLines = parsePositiveIntFlag(flagValue(argv, "--capture-lines"), "--capture-lines");
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
return { ok: false, exitCode: 1, message: String(err instanceof Error ? err.message : err) };
|
|
71
|
+
}
|
|
72
|
+
const { monitorPanes } = await import("../team/pane-monitor.js");
|
|
73
|
+
const result = await monitorPanes({
|
|
74
|
+
leaderPaneId,
|
|
75
|
+
workerPaneIds,
|
|
76
|
+
sessionLabel: flagValue(argv, "--session-label"),
|
|
77
|
+
config: {
|
|
78
|
+
pollIntervalMs,
|
|
79
|
+
readySamples,
|
|
80
|
+
minObservationMs,
|
|
81
|
+
timeoutMs,
|
|
82
|
+
captureLines,
|
|
83
|
+
},
|
|
84
|
+
});
|
|
85
|
+
return json
|
|
86
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
87
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: `team monitor-panes ${result.reason} events=${result.events.length}` };
|
|
88
|
+
}
|
|
89
|
+
if (command === "api") {
|
|
90
|
+
const sub = value;
|
|
91
|
+
const inputRaw = flagValue(argv, "--input");
|
|
92
|
+
if (!sub || !inputRaw) {
|
|
93
|
+
return { ok: false, exitCode: 1, message: "team api <sub> --input '<json>' required" };
|
|
94
|
+
}
|
|
95
|
+
let input;
|
|
96
|
+
try {
|
|
97
|
+
input = JSON.parse(inputRaw);
|
|
98
|
+
}
|
|
99
|
+
catch (error) {
|
|
100
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
101
|
+
return { ok: false, exitCode: 1, message: `invalid --input JSON: ${message}` };
|
|
102
|
+
}
|
|
103
|
+
const api = await import("../team/api.js");
|
|
104
|
+
if (sub === "claim-task") {
|
|
105
|
+
const result = api.apiClaimTask(input);
|
|
106
|
+
return json
|
|
107
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
108
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
109
|
+
}
|
|
110
|
+
if (sub === "transition-task-status") {
|
|
111
|
+
const result = api.apiTransitionTaskStatus(input);
|
|
112
|
+
return json
|
|
113
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
114
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
115
|
+
}
|
|
116
|
+
if (sub === "send-message") {
|
|
117
|
+
const result = await api.apiSendMessage(input);
|
|
118
|
+
return json
|
|
119
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
120
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
121
|
+
}
|
|
122
|
+
if (sub === "broadcast") {
|
|
123
|
+
const result = await api.apiBroadcast(input);
|
|
124
|
+
return json
|
|
125
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
126
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
127
|
+
}
|
|
128
|
+
if (sub === "mailbox-list") {
|
|
129
|
+
const result = api.apiMailboxList(input);
|
|
130
|
+
return json
|
|
131
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
132
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
133
|
+
}
|
|
134
|
+
if (sub === "mailbox-mark-delivered") {
|
|
135
|
+
const result = api.apiMailboxMarkDelivered(input);
|
|
136
|
+
return json
|
|
137
|
+
? { ok: result.ok, exitCode: result.ok ? 0 : 1, output: result }
|
|
138
|
+
: { ok: result.ok, exitCode: result.ok ? 0 : 1, message: JSON.stringify(result) };
|
|
139
|
+
}
|
|
140
|
+
return { ok: false, exitCode: 1, message: `Unknown team api command: ${sub}` };
|
|
141
|
+
}
|
|
142
|
+
// tolerate trailing extras (e.g., '--json')
|
|
143
|
+
void extra;
|
|
144
|
+
return { ok: false, exitCode: 1, message: `Unknown team command. Try: omp team <N:role> "<task>" | status <name> | shutdown <name> | api <sub>` };
|
|
145
|
+
}
|
|
146
|
+
//# sourceMappingURL=team.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"team.js","sourceRoot":"","sources":["../../../src/commands/team.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare function hasFlag(args: string[], flag: string): boolean;
|
|
2
|
+
export declare function flagValue(args: string[], flag: string): string | undefined;
|
|
3
|
+
export declare function resolveExistingInputPath(value: string): Promise<string>;
|
|
4
|
+
export declare const DEFAULT_COUNCIL_ROLES: string[];
|
|
5
|
+
/** Parse a --models value: comma-separated `model` or `model:role:weight` tokens. */
|
|
6
|
+
export declare function parseModelsFlag(value: string): {
|
|
7
|
+
model: string;
|
|
8
|
+
role: string;
|
|
9
|
+
weight: number;
|
|
10
|
+
}[];
|
|
11
|
+
/** Parse a numeric flag as a finite positive integer; throw on malformed input. */
|
|
12
|
+
export declare function parsePositiveIntFlag(value: string | undefined, flag: string): number | undefined;
|
|
13
|
+
export declare function readFlagOrFile(value: string | undefined): Promise<string | undefined>;
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
export function hasFlag(args, flag) {
|
|
2
|
+
return args.includes(flag);
|
|
3
|
+
}
|
|
4
|
+
export function flagValue(args, flag) {
|
|
5
|
+
const index = args.indexOf(flag);
|
|
6
|
+
if (index === -1)
|
|
7
|
+
return undefined;
|
|
8
|
+
return args[index + 1];
|
|
9
|
+
}
|
|
10
|
+
export async function resolveExistingInputPath(value) {
|
|
11
|
+
const { existsSync } = await import("node:fs");
|
|
12
|
+
const { isAbsolute, resolve } = await import("node:path");
|
|
13
|
+
const direct = isAbsolute(value) ? value : resolve(process.cwd(), value);
|
|
14
|
+
if (existsSync(direct))
|
|
15
|
+
return direct;
|
|
16
|
+
const parentRelative = isAbsolute(value) ? value : resolve(process.cwd(), "..", value);
|
|
17
|
+
if (existsSync(parentRelative))
|
|
18
|
+
return parentRelative;
|
|
19
|
+
return direct;
|
|
20
|
+
}
|
|
21
|
+
export const DEFAULT_COUNCIL_ROLES = ["critic", "architect", "pragmatist"];
|
|
22
|
+
/** Parse a --models value: comma-separated `model` or `model:role:weight` tokens. */
|
|
23
|
+
export function parseModelsFlag(value) {
|
|
24
|
+
const tokens = value
|
|
25
|
+
.split(",")
|
|
26
|
+
.map((t) => t.trim())
|
|
27
|
+
.filter((t) => t.length > 0);
|
|
28
|
+
if (tokens.length === 0) {
|
|
29
|
+
throw new Error("--models was empty");
|
|
30
|
+
}
|
|
31
|
+
return tokens.map((token, i) => {
|
|
32
|
+
const parts = token.split(":");
|
|
33
|
+
const model = parts[0].trim();
|
|
34
|
+
if (!model)
|
|
35
|
+
throw new Error(`--models token "${token}" has no model`);
|
|
36
|
+
const role = parts[1]?.trim() || DEFAULT_COUNCIL_ROLES[i % DEFAULT_COUNCIL_ROLES.length];
|
|
37
|
+
let weight = 1;
|
|
38
|
+
if (parts[2] !== undefined) {
|
|
39
|
+
const w = Number(parts[2]);
|
|
40
|
+
if (!Number.isFinite(w) || w <= 0) {
|
|
41
|
+
throw new Error(`--models token "${token}" has invalid weight`);
|
|
42
|
+
}
|
|
43
|
+
weight = w;
|
|
44
|
+
}
|
|
45
|
+
return { model, role, weight };
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
/** Parse a numeric flag as a finite positive integer; throw on malformed input. */
|
|
49
|
+
export function parsePositiveIntFlag(value, flag) {
|
|
50
|
+
if (value === undefined)
|
|
51
|
+
return undefined;
|
|
52
|
+
const n = Number(value);
|
|
53
|
+
if (!Number.isFinite(n) || n <= 0 || !Number.isInteger(n)) {
|
|
54
|
+
throw new Error(`Invalid ${flag}: expected a positive integer, got "${value}"`);
|
|
55
|
+
}
|
|
56
|
+
return n;
|
|
57
|
+
}
|
|
58
|
+
export async function readFlagOrFile(value) {
|
|
59
|
+
if (value === undefined)
|
|
60
|
+
return undefined;
|
|
61
|
+
if (value.startsWith("@")) {
|
|
62
|
+
const { readFileSync } = await import("node:fs");
|
|
63
|
+
const path = await resolveExistingInputPath(value.slice(1));
|
|
64
|
+
return readFileSync(path, "utf8");
|
|
65
|
+
}
|
|
66
|
+
return value;
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/commands/utils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,OAAO,CAAC,IAAc,EAAE,IAAY;IAClD,OAAO,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAC7B,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAc,EAAE,IAAY;IACpD,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,IAAI,KAAK,KAAK,CAAC,CAAC;QAAE,OAAO,SAAS,CAAC;IACnC,OAAO,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;AACzB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAAC,KAAa;IAC1D,MAAM,EAAE,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;IAC/C,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;IAC1D,MAAM,MAAM,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,KAAK,CAAC,CAAC;IACzE,IAAI,UAAU,CAAC,MAAM,CAAC;QAAE,OAAO,MAAM,CAAC;IACtC,MAAM,cAAc,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;IACvF,IAAI,UAAU,CAAC,cAAc,CAAC;QAAE,OAAO,cAAc,CAAC;IACtD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,YAAY,CAAC,CAAC;AAE3E,qFAAqF;AACrF,MAAM,UAAU,eAAe,CAC7B,KAAa;IAEb,MAAM,MAAM,GAAG,KAAK;SACjB,KAAK,CAAC,GAAG,CAAC;SACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;SACpB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAC/B,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;IACxC,CAAC;IACD,OAAO,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,CAAC,EAAE,EAAE;QAC7B,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC/B,MAAM,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC9B,IAAI,CAAC,KAAK;YAAE,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,gBAAgB,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,qBAAqB,CAAC,CAAC,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC;QACzF,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3B,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,KAAK,CAAC,mBAAmB,KAAK,sBAAsB,CAAC,CAAC;YAClE,CAAC;YACD,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;QACD,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;IACjC,CAAC,CAAC,CAAC;AACL,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,oBAAoB,CAClC,KAAyB,EACzB,IAAY;IAEZ,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;IACxB,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1D,MAAM,IAAI,KAAK,CAAC,WAAW,IAAI,uCAAuC,KAAK,GAAG,CAAC,CAAC;IAClF,CAAC;IACD,OAAO,CAAC,CAAC;AACX,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAyB;IAC5D,IAAI,KAAK,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC1C,IAAI,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,EAAE,YAAY,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAC;QACjD,MAAM,IAAI,GAAG,MAAM,wBAAwB,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC5D,OAAO,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC"}
|
|
@@ -13,6 +13,7 @@ export interface DoctorReport {
|
|
|
13
13
|
export interface DoctorOptions extends ResolveCopilotPathsOptions {
|
|
14
14
|
skipCopilot?: boolean;
|
|
15
15
|
copilotBin?: string;
|
|
16
|
+
checkHooks?: boolean;
|
|
16
17
|
}
|
|
17
18
|
export declare function runDoctor(options?: DoctorOptions): DoctorReport;
|
|
18
19
|
export declare function formatDoctor(report: DoctorReport): string;
|
|
@@ -1,6 +1,7 @@
|
|
|
1
|
-
import { existsSync, readFileSync } from "node:fs";
|
|
1
|
+
import { existsSync, mkdtempSync, readFileSync } from "node:fs";
|
|
2
2
|
import { join } from "node:path";
|
|
3
3
|
import { spawnSync } from "node:child_process";
|
|
4
|
+
import { tmpdir } from "node:os";
|
|
4
5
|
import { resolveCopilotPaths } from "./paths.js";
|
|
5
6
|
function checkNodeVersion() {
|
|
6
7
|
const major = Number(process.version.replace(/^v/, "").split(".")[0]);
|
|
@@ -36,50 +37,245 @@ function checkSkillsDiscovery(paths) {
|
|
|
36
37
|
detail: `no skills directory: ${paths.projectScopeSkills}`,
|
|
37
38
|
};
|
|
38
39
|
}
|
|
39
|
-
// Recognized Copilot CLI hook events
|
|
40
|
-
|
|
40
|
+
// Recognized Copilot CLI hook events (camelCase native + VS Code-compatible
|
|
41
|
+
// PascalCase aliases). `agentStop` powers the omp loop driver.
|
|
42
|
+
const SUPPORTED_HOOK_EVENTS = new Set([
|
|
41
43
|
"sessionStart",
|
|
42
|
-
"sessionEnd",
|
|
43
44
|
"userPromptSubmitted",
|
|
44
45
|
"preToolUse",
|
|
45
46
|
"postToolUse",
|
|
46
|
-
"
|
|
47
|
+
"postToolUseFailure",
|
|
47
48
|
"agentStop",
|
|
48
|
-
|
|
49
|
-
|
|
49
|
+
"subagentStart",
|
|
50
|
+
"subagentStop",
|
|
51
|
+
"preCompact",
|
|
52
|
+
"sessionEnd",
|
|
53
|
+
"errorOccurred",
|
|
54
|
+
"permissionRequest",
|
|
55
|
+
"notification",
|
|
56
|
+
// VS Code-compatible event names accepted by Copilot CLI.
|
|
57
|
+
"SessionStart",
|
|
58
|
+
"UserPromptSubmit",
|
|
59
|
+
"PreToolUse",
|
|
60
|
+
"PostToolUse",
|
|
61
|
+
"PostToolUseFailure",
|
|
62
|
+
"Stop",
|
|
63
|
+
"SubagentStart",
|
|
64
|
+
"SubagentStop",
|
|
65
|
+
"PreCompact",
|
|
66
|
+
"SessionEnd",
|
|
67
|
+
"ErrorOccurred",
|
|
68
|
+
"PermissionRequest",
|
|
69
|
+
"Notification",
|
|
70
|
+
]);
|
|
71
|
+
function describeUnsupportedEvent(eventName) {
|
|
72
|
+
if (eventName === "Error")
|
|
73
|
+
return 'unsupported hook event "Error" (use errorOccurred or ErrorOccurred)';
|
|
74
|
+
return `unsupported hook event "${eventName}"`;
|
|
75
|
+
}
|
|
76
|
+
function validateHookEntry(eventName, entry, index) {
|
|
77
|
+
const issues = [];
|
|
78
|
+
if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
|
|
79
|
+
return [`${eventName}[${index}] must be an object`];
|
|
80
|
+
}
|
|
81
|
+
const record = entry;
|
|
82
|
+
const type = record.type ?? "command";
|
|
83
|
+
if (type === "command") {
|
|
84
|
+
if (typeof record.bash !== "string" &&
|
|
85
|
+
typeof record.powershell !== "string" &&
|
|
86
|
+
typeof record.command !== "string") {
|
|
87
|
+
issues.push(`${eventName}[${index}] command hook needs bash, powershell, or command`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
else if (type === "http") {
|
|
91
|
+
if (typeof record.url !== "string")
|
|
92
|
+
issues.push(`${eventName}[${index}] http hook needs url`);
|
|
93
|
+
}
|
|
94
|
+
else if (type === "prompt") {
|
|
95
|
+
if (eventName !== "sessionStart" && eventName !== "SessionStart") {
|
|
96
|
+
issues.push(`${eventName}[${index}] prompt hooks are only supported on sessionStart`);
|
|
97
|
+
}
|
|
98
|
+
if (typeof record.prompt !== "string")
|
|
99
|
+
issues.push(`${eventName}[${index}] prompt hook needs prompt`);
|
|
100
|
+
}
|
|
101
|
+
else {
|
|
102
|
+
issues.push(`${eventName}[${index}] has unsupported hook type "${String(type)}"`);
|
|
103
|
+
}
|
|
104
|
+
return issues;
|
|
105
|
+
}
|
|
106
|
+
function validateHooksManifestShape(manifest) {
|
|
107
|
+
const issues = [];
|
|
108
|
+
if (!manifest || typeof manifest !== "object" || Array.isArray(manifest)) {
|
|
109
|
+
return ["manifest must be a JSON object with version: 1 and hooks"];
|
|
110
|
+
}
|
|
111
|
+
const record = manifest;
|
|
112
|
+
if (record.version !== 1)
|
|
113
|
+
issues.push("manifest must declare version: 1");
|
|
114
|
+
if (!record.hooks || typeof record.hooks !== "object" || Array.isArray(record.hooks)) {
|
|
115
|
+
issues.push("manifest must declare a hooks object");
|
|
116
|
+
return issues;
|
|
117
|
+
}
|
|
118
|
+
for (const [eventName, entries] of Object.entries(record.hooks)) {
|
|
119
|
+
if (!SUPPORTED_HOOK_EVENTS.has(eventName))
|
|
120
|
+
issues.push(describeUnsupportedEvent(eventName));
|
|
121
|
+
if (!Array.isArray(entries)) {
|
|
122
|
+
issues.push(`${eventName} must be an array of hook entries`);
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
entries.forEach((entry, index) => issues.push(...validateHookEntry(eventName, entry, index)));
|
|
126
|
+
}
|
|
127
|
+
return issues;
|
|
128
|
+
}
|
|
129
|
+
function sampleHookPayload(eventName, cwd) {
|
|
130
|
+
switch (eventName) {
|
|
131
|
+
case "UserPromptSubmit":
|
|
132
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, prompt: "doctor smoke" };
|
|
133
|
+
case "PreToolUse":
|
|
134
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, tool_name: "view", tool_input: { path: "README.md" } };
|
|
135
|
+
case "PostToolUse":
|
|
136
|
+
return {
|
|
137
|
+
hook_event_name: eventName,
|
|
138
|
+
session_id: "doctor-smoke",
|
|
139
|
+
timestamp: new Date().toISOString(),
|
|
140
|
+
cwd,
|
|
141
|
+
tool_name: "view",
|
|
142
|
+
tool_input: { path: "README.md" },
|
|
143
|
+
tool_result: { result_type: "success", text_result_for_llm: "doctor smoke" },
|
|
144
|
+
};
|
|
145
|
+
case "PostToolUseFailure":
|
|
146
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, tool_name: "edit", tool_input: {}, error: "doctor smoke" };
|
|
147
|
+
case "Stop":
|
|
148
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, transcript_path: "", stop_reason: "end_turn" };
|
|
149
|
+
case "SubagentStart":
|
|
150
|
+
case "SubagentStop":
|
|
151
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, transcript_path: "", agent_name: "doctor" };
|
|
152
|
+
case "PreCompact":
|
|
153
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, transcript_path: "", trigger: "manual", custom_instructions: "" };
|
|
154
|
+
case "SessionStart":
|
|
155
|
+
case "SessionEnd":
|
|
156
|
+
case "ErrorOccurred":
|
|
157
|
+
case "PermissionRequest":
|
|
158
|
+
case "Notification":
|
|
159
|
+
return { hook_event_name: eventName, session_id: "doctor-smoke", timestamp: new Date().toISOString(), cwd, error: "doctor smoke", message: "doctor smoke" };
|
|
160
|
+
default:
|
|
161
|
+
return {
|
|
162
|
+
sessionId: "doctor-smoke",
|
|
163
|
+
timestamp: Date.now(),
|
|
164
|
+
cwd,
|
|
165
|
+
prompt: "doctor smoke",
|
|
166
|
+
toolName: "view",
|
|
167
|
+
toolArgs: { path: "README.md" },
|
|
168
|
+
toolResult: { resultType: "success", textResultForLlm: "doctor smoke" },
|
|
169
|
+
error: "doctor smoke",
|
|
170
|
+
transcriptPath: "",
|
|
171
|
+
stopReason: "end_turn",
|
|
172
|
+
trigger: "manual",
|
|
173
|
+
customInstructions: "",
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function commandForSmoke(entry) {
|
|
178
|
+
const platformPreference = process.platform === "win32"
|
|
179
|
+
? [entry.powershell, entry.command, entry.bash]
|
|
180
|
+
: [entry.bash, entry.command, entry.powershell];
|
|
181
|
+
const command = platformPreference.find((value) => typeof value === "string" && value.trim().length > 0);
|
|
182
|
+
return command;
|
|
183
|
+
}
|
|
184
|
+
function timeoutMsForSmoke(entry) {
|
|
185
|
+
const timeout = typeof entry.timeoutSec === "number" ? entry.timeoutSec : typeof entry.timeout === "number" ? entry.timeout : 10;
|
|
186
|
+
return Math.max(1, timeout) * 1000;
|
|
187
|
+
}
|
|
188
|
+
function checkHooksSmoke(paths) {
|
|
50
189
|
if (!existsSync(paths.hooksManifest)) {
|
|
51
|
-
return { name: "hooks-
|
|
190
|
+
return { name: "hooks-smoke", status: "warn", detail: `skipped; no hooks manifest: ${paths.hooksManifest}` };
|
|
52
191
|
}
|
|
53
|
-
let
|
|
192
|
+
let manifest;
|
|
54
193
|
try {
|
|
55
|
-
|
|
194
|
+
manifest = JSON.parse(readFileSync(paths.hooksManifest, "utf8"));
|
|
56
195
|
}
|
|
57
|
-
catch {
|
|
58
|
-
return { name: "hooks-
|
|
196
|
+
catch (error) {
|
|
197
|
+
return { name: "hooks-smoke", status: "fail", detail: `skipped; invalid hooks JSON (${error instanceof Error ? error.message : String(error)})` };
|
|
198
|
+
}
|
|
199
|
+
const schemaIssues = validateHooksManifestShape(manifest);
|
|
200
|
+
if (schemaIssues.length > 0) {
|
|
201
|
+
return { name: "hooks-smoke", status: "fail", detail: `skipped; hooks schema invalid: ${schemaIssues.join("; ")}` };
|
|
59
202
|
}
|
|
60
|
-
const
|
|
61
|
-
|
|
203
|
+
const hooks = manifest.hooks;
|
|
204
|
+
const smokeCwd = mkdtempSync(join(tmpdir(), "omp-hooks-smoke-"));
|
|
205
|
+
const issues = [];
|
|
206
|
+
let ran = 0;
|
|
207
|
+
for (const [eventName, entries] of Object.entries(hooks)) {
|
|
208
|
+
for (const [index, entry] of entries.entries()) {
|
|
209
|
+
const record = entry;
|
|
210
|
+
const type = record.type ?? "command";
|
|
211
|
+
if (type !== "command")
|
|
212
|
+
continue;
|
|
213
|
+
const command = commandForSmoke(record);
|
|
214
|
+
if (!command) {
|
|
215
|
+
issues.push(`${eventName}[${index}] has no runnable command`);
|
|
216
|
+
continue;
|
|
217
|
+
}
|
|
218
|
+
ran += 1;
|
|
219
|
+
const result = spawnSync(command, {
|
|
220
|
+
cwd: smokeCwd,
|
|
221
|
+
env: { ...process.env, OMP_PLUGIN_ROOT: paths.pluginRoot, OMC_PLUGIN_ROOT: paths.pluginRoot },
|
|
222
|
+
input: JSON.stringify(sampleHookPayload(eventName, smokeCwd)),
|
|
223
|
+
encoding: "utf8",
|
|
224
|
+
shell: true,
|
|
225
|
+
timeout: timeoutMsForSmoke(record),
|
|
226
|
+
});
|
|
227
|
+
if (result.error) {
|
|
228
|
+
issues.push(`${eventName}[${index}] failed: ${result.error.message}`);
|
|
229
|
+
continue;
|
|
230
|
+
}
|
|
231
|
+
if (result.status !== 0) {
|
|
232
|
+
issues.push(`${eventName}[${index}] exited ${result.status ?? "?"}: ${(result.stderr || result.stdout).trim()}`);
|
|
233
|
+
continue;
|
|
234
|
+
}
|
|
235
|
+
const stdout = (result.stdout ?? "").trim();
|
|
236
|
+
if (!stdout)
|
|
237
|
+
continue;
|
|
238
|
+
try {
|
|
239
|
+
const parsed = JSON.parse(stdout);
|
|
240
|
+
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) {
|
|
241
|
+
issues.push(`${eventName}[${index}] stdout JSON must be an object`);
|
|
242
|
+
continue;
|
|
243
|
+
}
|
|
244
|
+
// Hooks dual-emit Copilot v1 keys AND Claude Code keys (continue /
|
|
245
|
+
// hookSpecificOutput); both vocabularies are valid here.
|
|
246
|
+
}
|
|
247
|
+
catch {
|
|
248
|
+
issues.push(`${eventName}[${index}] invalid stdout JSON: ${stdout.slice(0, 120)}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
if (issues.length > 0)
|
|
253
|
+
return { name: "hooks-smoke", status: "fail", detail: issues.join("; ") };
|
|
254
|
+
return { name: "hooks-smoke", status: "pass", detail: `ran ${ran} command hook${ran === 1 ? "" : "s"} with documented sample payloads` };
|
|
255
|
+
}
|
|
256
|
+
function checkHooksManifest(paths) {
|
|
257
|
+
if (!existsSync(paths.hooksManifest)) {
|
|
62
258
|
return {
|
|
63
259
|
name: "hooks-manifest",
|
|
64
|
-
status: "
|
|
65
|
-
detail: `not
|
|
260
|
+
status: "warn",
|
|
261
|
+
detail: `not present: ${paths.hooksManifest}`,
|
|
66
262
|
};
|
|
67
263
|
}
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
264
|
+
try {
|
|
265
|
+
const manifest = JSON.parse(readFileSync(paths.hooksManifest, "utf8"));
|
|
266
|
+
const issues = validateHooksManifestShape(manifest);
|
|
267
|
+
if (issues.length > 0) {
|
|
268
|
+
return { name: "hooks-manifest", status: "fail", detail: `${paths.hooksManifest}: ${issues.join("; ")}` };
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
catch (error) {
|
|
71
272
|
return {
|
|
72
273
|
name: "hooks-manifest",
|
|
73
|
-
status: "
|
|
74
|
-
detail:
|
|
274
|
+
status: "fail",
|
|
275
|
+
detail: `${paths.hooksManifest}: invalid JSON (${error instanceof Error ? error.message : String(error)})`,
|
|
75
276
|
};
|
|
76
277
|
}
|
|
77
|
-
|
|
78
|
-
return {
|
|
79
|
-
name: "hooks-manifest",
|
|
80
|
-
status: "pass",
|
|
81
|
-
detail: `Copilot v1, ${events.length} events${hasLoop ? " (agentStop loop driver present)" : ""}`,
|
|
82
|
-
};
|
|
278
|
+
return { name: "hooks-manifest", status: "pass", detail: paths.hooksManifest };
|
|
83
279
|
}
|
|
84
280
|
function checkCopilotCli(bin) {
|
|
85
281
|
try {
|
|
@@ -103,6 +299,9 @@ export function runDoctor(options = {}) {
|
|
|
103
299
|
checkSkillsDiscovery(paths),
|
|
104
300
|
checkHooksManifest(paths),
|
|
105
301
|
];
|
|
302
|
+
if (options.checkHooks) {
|
|
303
|
+
checks.push(checkHooksSmoke(paths));
|
|
304
|
+
}
|
|
106
305
|
if (!options.skipCopilot) {
|
|
107
306
|
checks.push(checkCopilotCli(options.copilotBin ?? "copilot"));
|
|
108
307
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/copilot/doctor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../../src/copilot/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -38,22 +38,30 @@ export function resolveCopilotBin(override) {
|
|
|
38
38
|
return fromEnv;
|
|
39
39
|
return "copilot";
|
|
40
40
|
}
|
|
41
|
-
function isInsideTmux() {
|
|
42
|
-
return !!
|
|
41
|
+
function isInsideTmux(env) {
|
|
42
|
+
return !!env.TMUX;
|
|
43
43
|
}
|
|
44
44
|
function tmuxAvailable() {
|
|
45
45
|
const r = spawnSync("tmux", ["-V"], { encoding: "utf8", timeout: 3000 });
|
|
46
46
|
return r.status === 0;
|
|
47
47
|
}
|
|
48
|
+
function shouldAutoWrapInTmux(env) {
|
|
49
|
+
if (env.OMP_FORCE_TMUX_WRAP === "1")
|
|
50
|
+
return true;
|
|
51
|
+
if (env.OMP_DISABLE_TMUX_WRAP === "1")
|
|
52
|
+
return false;
|
|
53
|
+
return Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
54
|
+
}
|
|
48
55
|
export async function launchCopilot(options) {
|
|
49
56
|
const bin = resolveCopilotBin(options.bin);
|
|
50
57
|
const args = normalizeCopilotLaunchArgs(options.args);
|
|
51
58
|
const cwd = options.cwd ?? process.cwd();
|
|
59
|
+
const env = options.env ?? process.env;
|
|
52
60
|
// Pre-trust the launch folder so neither this session nor team workers block on
|
|
53
61
|
// Copilot's folder-trust dialog (which --yolo/--allow-all-paths do NOT skip).
|
|
54
62
|
ensureFolderTrusted(cwd);
|
|
55
63
|
// If not already inside tmux and tmux is available, wrap in a tmux session
|
|
56
|
-
if (!isInsideTmux() && tmuxAvailable()) {
|
|
64
|
+
if (!isInsideTmux(env) && shouldAutoWrapInTmux(env) && tmuxAvailable()) {
|
|
57
65
|
const sessionName = `omp-${Date.now()}`;
|
|
58
66
|
const copilotCmd = [bin, ...args].map(shellEscape).join(" ");
|
|
59
67
|
// Forward COPILOT_* (BYOK) vars into the new pane: a running tmux server
|
|
@@ -64,7 +72,7 @@ export async function launchCopilot(options) {
|
|
|
64
72
|
const child = spawn("tmux", ["new-session", "-s", sessionName, "-c", cwd, ...envArgs, copilotCmd], {
|
|
65
73
|
stdio: "inherit",
|
|
66
74
|
cwd,
|
|
67
|
-
env
|
|
75
|
+
env,
|
|
68
76
|
});
|
|
69
77
|
child.on("error", () => {
|
|
70
78
|
if (settled)
|
|
@@ -87,7 +95,7 @@ export async function launchCopilot(options) {
|
|
|
87
95
|
const child = spawn(bin, args, {
|
|
88
96
|
stdio: "inherit",
|
|
89
97
|
cwd,
|
|
90
|
-
env
|
|
98
|
+
env,
|
|
91
99
|
});
|
|
92
100
|
child.on("error", () => {
|
|
93
101
|
if (settled)
|