oh-my-copilot 5.6.2 → 5.7.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.
Files changed (127) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +1 -0
  4. package/bridge/__pycache__/gyoshu_bridge.cpython-312.pyc +0 -0
  5. package/bridge/claude-md-coordinator.cjs +2 -2
  6. package/bridge/cli.cjs +78578 -75769
  7. package/bridge/mcp-server.cjs +36510 -32259
  8. package/bridge/runtime-cli.cjs +95 -34
  9. package/bridge/team-mcp.cjs +95 -34
  10. package/bridge/team.js +131 -70
  11. package/dist/__tests__/run-cjs-fail-closed-timeout.test.d.ts +2 -0
  12. package/dist/__tests__/run-cjs-fail-closed-timeout.test.d.ts.map +1 -0
  13. package/dist/__tests__/run-cjs-fail-closed-timeout.test.js +68 -0
  14. package/dist/__tests__/run-cjs-fail-closed-timeout.test.js.map +1 -0
  15. package/dist/__tests__/session-end-process-exit.test.js +70 -2
  16. package/dist/__tests__/session-end-process-exit.test.js.map +1 -1
  17. package/dist/cli/commands/__tests__/smoke-tier2.test.d.ts +2 -0
  18. package/dist/cli/commands/__tests__/smoke-tier2.test.d.ts.map +1 -0
  19. package/dist/cli/commands/__tests__/smoke-tier2.test.js +72 -0
  20. package/dist/cli/commands/__tests__/smoke-tier2.test.js.map +1 -0
  21. package/dist/cli/commands/smoke.d.ts +36 -0
  22. package/dist/cli/commands/smoke.d.ts.map +1 -0
  23. package/dist/cli/commands/smoke.js +169 -0
  24. package/dist/cli/commands/smoke.js.map +1 -0
  25. package/dist/cli/index.d.ts.map +1 -1
  26. package/dist/cli/index.js +39 -0
  27. package/dist/cli/index.js.map +1 -1
  28. package/dist/constants/names.d.ts +1 -0
  29. package/dist/constants/names.d.ts.map +1 -1
  30. package/dist/constants/names.js +1 -0
  31. package/dist/constants/names.js.map +1 -1
  32. package/dist/hooks/session-end/index.d.ts +2 -3
  33. package/dist/hooks/session-end/index.d.ts.map +1 -1
  34. package/dist/hooks/session-end/index.js +3 -10
  35. package/dist/hooks/session-end/index.js.map +1 -1
  36. package/dist/hooks/session-end/wiki-foreground-bootstrap.d.ts +17 -0
  37. package/dist/hooks/session-end/wiki-foreground-bootstrap.d.ts.map +1 -0
  38. package/dist/hooks/session-end/wiki-foreground-bootstrap.js +20 -0
  39. package/dist/hooks/session-end/wiki-foreground-bootstrap.js.map +1 -0
  40. package/dist/lib/__tests__/atomic-write.test.js +32 -1
  41. package/dist/lib/__tests__/atomic-write.test.js.map +1 -1
  42. package/dist/lib/__tests__/mode-state-lock.test.js +121 -12
  43. package/dist/lib/__tests__/mode-state-lock.test.js.map +1 -1
  44. package/dist/lib/atomic-write.d.ts +13 -3
  45. package/dist/lib/atomic-write.d.ts.map +1 -1
  46. package/dist/lib/atomic-write.js +29 -15
  47. package/dist/lib/atomic-write.js.map +1 -1
  48. package/dist/lib/mode-state-io.d.ts +2 -2
  49. package/dist/lib/mode-state-io.d.ts.map +1 -1
  50. package/dist/lib/mode-state-io.js +16 -10
  51. package/dist/lib/mode-state-io.js.map +1 -1
  52. package/dist/mcp/__tests__/host-smoke-tool.test.d.ts +2 -0
  53. package/dist/mcp/__tests__/host-smoke-tool.test.d.ts.map +1 -0
  54. package/dist/mcp/__tests__/host-smoke-tool.test.js +174 -0
  55. package/dist/mcp/__tests__/host-smoke-tool.test.js.map +1 -0
  56. package/dist/mcp/disable-tools.d.ts.map +1 -1
  57. package/dist/mcp/disable-tools.js +1 -0
  58. package/dist/mcp/disable-tools.js.map +1 -1
  59. package/dist/mcp/tool-registry.d.ts.map +1 -1
  60. package/dist/mcp/tool-registry.js +2 -0
  61. package/dist/mcp/tool-registry.js.map +1 -1
  62. package/dist/smoke/__tests__/copilot-sdk-driver.test.d.ts +2 -0
  63. package/dist/smoke/__tests__/copilot-sdk-driver.test.d.ts.map +1 -0
  64. package/dist/smoke/__tests__/copilot-sdk-driver.test.js +561 -0
  65. package/dist/smoke/__tests__/copilot-sdk-driver.test.js.map +1 -0
  66. package/dist/smoke/__tests__/copilot-sdk-scenarios.test.d.ts +2 -0
  67. package/dist/smoke/__tests__/copilot-sdk-scenarios.test.d.ts.map +1 -0
  68. package/dist/smoke/__tests__/copilot-sdk-scenarios.test.js +311 -0
  69. package/dist/smoke/__tests__/copilot-sdk-scenarios.test.js.map +1 -0
  70. package/dist/smoke/__tests__/copilot-session-eval.test.d.ts +2 -0
  71. package/dist/smoke/__tests__/copilot-session-eval.test.d.ts.map +1 -0
  72. package/dist/smoke/__tests__/copilot-session-eval.test.js +264 -0
  73. package/dist/smoke/__tests__/copilot-session-eval.test.js.map +1 -0
  74. package/dist/smoke/__tests__/copilot-smoke.test.d.ts +2 -0
  75. package/dist/smoke/__tests__/copilot-smoke.test.d.ts.map +1 -0
  76. package/dist/smoke/__tests__/copilot-smoke.test.js +482 -0
  77. package/dist/smoke/__tests__/copilot-smoke.test.js.map +1 -0
  78. package/dist/smoke/copilot-binary.d.ts +21 -0
  79. package/dist/smoke/copilot-binary.d.ts.map +1 -0
  80. package/dist/smoke/copilot-binary.js +46 -0
  81. package/dist/smoke/copilot-binary.js.map +1 -0
  82. package/dist/smoke/copilot-sdk-driver.d.ts +186 -0
  83. package/dist/smoke/copilot-sdk-driver.d.ts.map +1 -0
  84. package/dist/smoke/copilot-sdk-driver.js +622 -0
  85. package/dist/smoke/copilot-sdk-driver.js.map +1 -0
  86. package/dist/smoke/copilot-sdk-scenarios.d.ts +159 -0
  87. package/dist/smoke/copilot-sdk-scenarios.d.ts.map +1 -0
  88. package/dist/smoke/copilot-sdk-scenarios.js +510 -0
  89. package/dist/smoke/copilot-sdk-scenarios.js.map +1 -0
  90. package/dist/smoke/copilot-session-eval.d.ts +90 -0
  91. package/dist/smoke/copilot-session-eval.d.ts.map +1 -0
  92. package/dist/smoke/copilot-session-eval.js +323 -0
  93. package/dist/smoke/copilot-session-eval.js.map +1 -0
  94. package/dist/smoke/copilot-smoke.d.ts +228 -0
  95. package/dist/smoke/copilot-smoke.d.ts.map +1 -0
  96. package/dist/smoke/copilot-smoke.js +818 -0
  97. package/dist/smoke/copilot-smoke.js.map +1 -0
  98. package/dist/smoke/process-utils.d.ts +47 -0
  99. package/dist/smoke/process-utils.d.ts.map +1 -0
  100. package/dist/smoke/process-utils.js +99 -0
  101. package/dist/smoke/process-utils.js.map +1 -0
  102. package/dist/team/__tests__/tmux-session.pane-env.test.d.ts +2 -0
  103. package/dist/team/__tests__/tmux-session.pane-env.test.d.ts.map +1 -0
  104. package/dist/team/__tests__/tmux-session.pane-env.test.js +52 -0
  105. package/dist/team/__tests__/tmux-session.pane-env.test.js.map +1 -0
  106. package/dist/team/tmux-session.d.ts +7 -0
  107. package/dist/team/tmux-session.d.ts.map +1 -1
  108. package/dist/team/tmux-session.js +80 -18
  109. package/dist/team/tmux-session.js.map +1 -1
  110. package/dist/tools/host-smoke-tool.d.ts +34 -0
  111. package/dist/tools/host-smoke-tool.d.ts.map +1 -0
  112. package/dist/tools/host-smoke-tool.js +133 -0
  113. package/dist/tools/host-smoke-tool.js.map +1 -0
  114. package/docs/CLAUDE.md +1 -1
  115. package/docs/DEVELOPERS.md +101 -0
  116. package/docs/HOOKS.md +1 -1
  117. package/docs/MIGRATION.md +71 -0
  118. package/docs/REFERENCE.md +42 -1
  119. package/docs/TOOLS.md +32 -1
  120. package/package.json +11 -2
  121. package/plugin.json +1 -1
  122. package/scripts/dev/repro-state-lock.mjs +1 -1
  123. package/scripts/lib/atomic-write.mjs +4 -2
  124. package/scripts/lib/state-lock.mjs +21 -12
  125. package/scripts/run.cjs +13 -3
  126. package/scripts/wiki-session-end.mjs +2 -1
  127. package/templates/hooks/lib/atomic-write.mjs +4 -2
@@ -0,0 +1,622 @@
1
+ /**
2
+ * Tier 2 of `omg smoke copilot`: drive the installed Copilot CLI through
3
+ * `@github/copilot-sdk` (an optional peer dependency, never bundled).
4
+ *
5
+ * SDK resolution ({@link loadCopilotSdk}), first hit wins:
6
+ * 1. `import('@github/copilot-sdk')` from this module: a local or project
7
+ * install, or a global install next to a global oh-my-copilot (parent
8
+ * `node_modules` lookup);
9
+ * 2. a global install: `%APPDATA%/npm/node_modules` (win32), then
10
+ * `npm root -g`. This covers a repo checkout (`npx tsx`, `node dist/...`)
11
+ * with the SDK installed by
12
+ * `npm i -g @github/copilot-sdk --omit=optional --ignore-scripts`.
13
+ * A global hit must be named {@link SDK_PACKAGE}, satisfy
14
+ * `^`{@link SDK_MIN_VERSION}, and have its entry files inside its own dir.
15
+ * Not found: every sdk.* and scn.* check fails with {@link SDK_MISSING_DETAIL}
16
+ * and the report is `skipped`.
17
+ *
18
+ * The runtime is always the installed exe the earlier tiers resolved
19
+ * (`RuntimeConnection.forStdio({ path })`), never the SDK's bundled runtime.
20
+ */
21
+ import { spawnSync as nodeSpawnSync } from 'child_process';
22
+ import { existsSync, mkdirSync, readdirSync, readFileSync, realpathSync, writeFileSync } from 'fs';
23
+ import { createRequire } from 'module';
24
+ import { dirname, isAbsolute, join, relative, resolve } from 'path';
25
+ import { pathToFileURL } from 'url';
26
+ import { excerpt } from './copilot-session-eval.js';
27
+ import { chooseModel, CREDIT_CAP_SKIP_DETAIL, evaluateScenario, evaluateSdkAgents, evaluateSdkMcp, evaluateSdkPlugins, evaluateSdkRuntime, evaluateSdkSkills, evaluateSdkToolsExcluded, failedTier2Checks, hostSmokeToolName, RUNTIME_MIN_MAX_CREDITS, SCENARIOS, scenarioCost, scenarioExcludedTools, SDK_MISSING_DETAIL, SDK_PACKAGE, skippedScenarioChecks, sliceLogByTime, usageCredits, } from './copilot-sdk-scenarios.js';
28
+ import { killProcessTree } from './process-utils.js';
29
+ // ---------------------------------------------------------------------------
30
+ // Loading
31
+ // ---------------------------------------------------------------------------
32
+ function isSdkModule(mod) {
33
+ const m = mod;
34
+ return !!m && typeof m.CopilotClient === 'function' && typeof m.RuntimeConnection?.forStdio === 'function';
35
+ }
36
+ function readPkg(dir) {
37
+ try {
38
+ return JSON.parse(readFileSync(join(dir, 'package.json'), 'utf-8'));
39
+ }
40
+ catch {
41
+ return null;
42
+ }
43
+ }
44
+ /** Walk up from a resolved entry file to the SDK's package.json version. */
45
+ function versionAbove(file) {
46
+ let dir = dirname(file);
47
+ for (let i = 0; i < 6; i++) {
48
+ const pkg = readPkg(dir);
49
+ if (pkg?.name === SDK_PACKAGE)
50
+ return pkg.version ?? null;
51
+ const parent = dirname(dir);
52
+ if (parent === dir)
53
+ break;
54
+ dir = parent;
55
+ }
56
+ return null;
57
+ }
58
+ function nodeResolvedVersion() {
59
+ const bases = [];
60
+ try {
61
+ bases.push(import.meta.url);
62
+ }
63
+ catch { /* CJS bundle */ }
64
+ if (typeof __filename !== 'undefined')
65
+ bases.push(__filename);
66
+ for (const base of bases) {
67
+ try {
68
+ return versionAbove(createRequire(base).resolve(SDK_PACKAGE));
69
+ }
70
+ catch { /* next */ }
71
+ }
72
+ return null;
73
+ }
74
+ /**
75
+ * Candidate global `node_modules` dirs before `npm root -g`: only the npm
76
+ * default on win32. Env-steerable prefixes (`npm_config_prefix`) and the
77
+ * running node's dir are not probed: they could load an arbitrary package.
78
+ */
79
+ export function globalModuleRoots(env, platform = process.platform) {
80
+ return platform === 'win32' && env.APPDATA ? [join(env.APPDATA, 'npm', 'node_modules')] : [];
81
+ }
82
+ /** Lowest SDK release the driver is written against (protocol 3). */
83
+ export const SDK_MIN_VERSION = '1.0.16';
84
+ /** `^1.0.16` without a semver dependency: same major 1, >= 1.0.16, no prerelease. */
85
+ export function satisfiesSdkRange(version) {
86
+ const m = /^(\d+)\.(\d+)\.(\d+)$/.exec(String(version ?? '').trim());
87
+ const min = SDK_MIN_VERSION.split('.').map(Number);
88
+ if (!m)
89
+ return false;
90
+ const [major, minor, patch] = [Number(m[1]), Number(m[2]), Number(m[3])];
91
+ if (major !== min[0])
92
+ return false;
93
+ return minor > min[1] || (minor === min[1] && patch >= min[2]);
94
+ }
95
+ /** True when `file` (resolved through symlinks) lies inside `dir`. */
96
+ function insideDir(dir, file) {
97
+ const real = (p) => { try {
98
+ return realpathSync.native(p);
99
+ }
100
+ catch {
101
+ return resolve(p);
102
+ } };
103
+ const rel = relative(real(dir), real(resolve(dir, file)));
104
+ return rel !== '' && !rel.startsWith('..') && !isAbsolute(rel);
105
+ }
106
+ function exportPath(target, condition) {
107
+ if (typeof target === 'string')
108
+ return target;
109
+ const cond = target?.[condition];
110
+ if (typeof cond === 'string')
111
+ return cond;
112
+ return typeof cond?.default === 'string' ? cond.default : undefined;
113
+ }
114
+ function npmRootG(env, spawnSync) {
115
+ // A fixed command line: npm is a .cmd shim on win32 and needs a shell (no args array, see DEP0190).
116
+ const res = process.platform === 'win32'
117
+ ? spawnSync('npm root -g', { env, encoding: 'utf8', timeout: 15_000, windowsHide: true, shell: true })
118
+ : spawnSync('npm', ['root', '-g'], { env, encoding: 'utf8', timeout: 15_000 });
119
+ const out = String(res.stdout ?? '').trim();
120
+ return res.status === 0 && out ? out : null;
121
+ }
122
+ /**
123
+ * Import the SDK from a package dir found under a global root. Refuses a
124
+ * package with another name, a version outside `^`{@link SDK_MIN_VERSION},
125
+ * or an `exports`/`main` entry that resolves outside the package dir.
126
+ */
127
+ export async function importFromDir(dir) {
128
+ const pkg = readPkg(dir);
129
+ if (pkg?.name !== SDK_PACKAGE || !satisfiesSdkRange(pkg.version))
130
+ return null;
131
+ const exp = (pkg.exports && typeof pkg.exports === 'object' ? pkg.exports['.'] : pkg.exports);
132
+ const esmEntry = exportPath(exp, 'import') ?? pkg.main ?? 'dist/index.js';
133
+ const cjsEntry = exportPath(exp, 'require') ?? pkg.main ?? 'index.js';
134
+ if (!insideDir(dir, esmEntry) || !insideDir(dir, cjsEntry))
135
+ return null;
136
+ let mod;
137
+ try {
138
+ mod = await import(pathToFileURL(resolve(dir, esmEntry)).href);
139
+ }
140
+ catch {
141
+ // CJS-transpiled callers (e.g. `tsx -e`) rewrite import() into a require
142
+ // that cannot take a file URL; the SDK also ships a CJS build.
143
+ mod = createRequire(join(dir, 'package.json'))(resolve(dir, cjsEntry));
144
+ }
145
+ return isSdkModule(mod) ? { module: mod, version: pkg.version ?? null, from: dir } : null;
146
+ }
147
+ /**
148
+ * Resolve a Windows npm shim (`copilot.cmd` / `.ps1`) to the `.js` or `.exe`
149
+ * it launches, so the SDK (which spawns `path` without a shell) can drive it.
150
+ * Null when the shim cannot be read or names no existing target.
151
+ */
152
+ export function resolveShimTarget(shim, read = (p) => readFileSync(p, 'utf-8'), exists = existsSync) {
153
+ let text;
154
+ try {
155
+ text = read(shim);
156
+ }
157
+ catch {
158
+ return null;
159
+ }
160
+ const patterns = [
161
+ /"%~?dp0%\\?([^"%*]+?\.(?:js|exe))"/i, // cmd-shim: "%dp0%\node_modules\...\loader.js"
162
+ /\$basedir[\\/]([^"$*]+?\.(?:js|exe))"/i, // ps1 shim: "$basedir/node_modules/.../loader.js"
163
+ ];
164
+ for (const re of patterns) {
165
+ const m = re.exec(text);
166
+ if (!m)
167
+ continue;
168
+ const target = resolve(dirname(shim), m[1].replace(/\\/g, '/'));
169
+ if (exists(target))
170
+ return target;
171
+ }
172
+ return null;
173
+ }
174
+ /** See the module comment for the resolution order. */
175
+ export async function loadCopilotSdk(env = process.env, spawnSync = nodeSpawnSync) {
176
+ const spec = SDK_PACKAGE; // a variable keeps tsc from resolving the optional peer at build time
177
+ try {
178
+ const mod = await import(spec);
179
+ if (isSdkModule(mod))
180
+ return { module: mod, version: nodeResolvedVersion(), from: 'node resolution' };
181
+ }
182
+ catch { /* not resolvable from here */ }
183
+ const tried = new Set();
184
+ const tryRoot = async (root) => {
185
+ if (!root || tried.has(root))
186
+ return null;
187
+ tried.add(root);
188
+ const dir = join(root, ...SDK_PACKAGE.split('/'));
189
+ if (!existsSync(join(dir, 'package.json')))
190
+ return null;
191
+ try {
192
+ return await importFromDir(dir);
193
+ }
194
+ catch {
195
+ return null;
196
+ }
197
+ };
198
+ for (const root of globalModuleRoots(env)) {
199
+ const hit = await tryRoot(root);
200
+ if (hit)
201
+ return hit;
202
+ }
203
+ return tryRoot(npmRootG(env, spawnSync));
204
+ }
205
+ // ---------------------------------------------------------------------------
206
+ // Helpers
207
+ // ---------------------------------------------------------------------------
208
+ export const DEFAULT_SCENARIO_TIMEOUT_MS = 120_000;
209
+ const START_TIMEOUT_MS = 60_000;
210
+ const RPC_TIMEOUT_MS = 30_000;
211
+ const MCP_CONNECT_WAIT_MS = 20_000;
212
+ const ABORT_GRACE_MS = 10_000;
213
+ const SHUTDOWN_GRACE_MS = 2_000;
214
+ const STOP_TIMEOUT_MS = 15_000;
215
+ class TimeoutError extends Error {
216
+ }
217
+ function withTimeout(promise, ms, label) {
218
+ let timer;
219
+ return Promise.race([
220
+ promise,
221
+ new Promise((_, reject) => { timer = setTimeout(() => reject(new TimeoutError(`${label} timed out after ${ms} ms`)), ms); }),
222
+ ]).finally(() => clearTimeout(timer));
223
+ }
224
+ const sleep = (ms) => new Promise((r) => { setTimeout(r, ms); });
225
+ function errText(err) {
226
+ return err instanceof Error ? err.message : String(err);
227
+ }
228
+ async function rpc(fn, label) {
229
+ try {
230
+ return { ok: true, value: await withTimeout(fn(), RPC_TIMEOUT_MS, label) };
231
+ }
232
+ catch (err) {
233
+ return { ok: false, error: errText(err) };
234
+ }
235
+ }
236
+ /** Every runtime process log, joined (null: no log dir or no `.log` file). */
237
+ function readAllLogs(logDir) {
238
+ let files;
239
+ try {
240
+ files = readdirSync(logDir).filter((f) => f.endsWith('.log'));
241
+ }
242
+ catch {
243
+ return null;
244
+ }
245
+ if (files.length === 0)
246
+ return null;
247
+ return files.map((f) => { try {
248
+ return readFileSync(join(logDir, f), 'utf-8');
249
+ }
250
+ catch {
251
+ return '';
252
+ } }).join('\n');
253
+ }
254
+ /** The runtime child's pid: the SDK keeps it on the private `cliProcess` (SDK 1.0.16). */
255
+ export function runtimePid(client) {
256
+ const pid = client.cliProcess?.pid;
257
+ return typeof pid === 'number' && pid > 0 ? pid : undefined;
258
+ }
259
+ function pidAlive(pid) {
260
+ try {
261
+ process.kill(pid, 0);
262
+ return true;
263
+ }
264
+ catch (err) {
265
+ return err.code === 'EPERM';
266
+ }
267
+ }
268
+ const reject = (feedback) => ({ kind: 'reject', feedback });
269
+ // ---------------------------------------------------------------------------
270
+ // Sandbox project: a git repo on `main` with one commit and a local bare remote
271
+ // ---------------------------------------------------------------------------
272
+ export function prepareSdkProject(spawnSync, projectDir, remoteDir, env) {
273
+ const git = (args, cwd) => spawnSync('git', args, { cwd, env, encoding: 'utf8', timeout: 30_000, windowsHide: true });
274
+ mkdirSync(projectDir, { recursive: true });
275
+ writeFileSync(join(projectDir, 'hello.txt'), 'omg smoke fixture\n');
276
+ const steps = [
277
+ [['-c', 'init.defaultBranch=main', 'init', '-q'], projectDir],
278
+ [['checkout', '-q', '-B', 'main'], projectDir],
279
+ [['add', 'hello.txt'], projectDir],
280
+ [['-c', 'user.name=omg-smoke', '-c', 'user.email=omg-smoke@example.invalid', '-c', 'commit.gpgsign=false', 'commit', '-q', '-m', 'init'], projectDir],
281
+ [['init', '-q', '--bare', remoteDir], dirname(remoteDir)],
282
+ [['remote', 'add', 'origin', remoteDir], projectDir],
283
+ ];
284
+ for (const [args, cwd] of steps) {
285
+ const res = git(args, cwd);
286
+ if (res.status !== 0)
287
+ return `git ${args.join(' ')}: ${excerpt(`${res.stderr ?? ''}${res.error?.message ?? ''}`, 200) || `exit ${res.status}`}`;
288
+ }
289
+ return null;
290
+ }
291
+ function remoteRefs(spawnSync, remoteDir, env) {
292
+ const res = spawnSync('git', ['--git-dir', remoteDir, 'for-each-ref'], { env, encoding: 'utf8', timeout: 30_000, windowsHide: true });
293
+ return res.status === 0 ? String(res.stdout ?? '') : null;
294
+ }
295
+ /** `--max-ai-credits` for the runtime: the run cap, raised to the CLI minimum. */
296
+ export function runtimeCreditCap(maxCredits) {
297
+ return Math.max(RUNTIME_MIN_MAX_CREDITS, Math.ceil(maxCredits));
298
+ }
299
+ export const RUNTIME_WEDGED_DETAIL = 'skipped: runtime unresponsive after a scenario timeout';
300
+ export async function runSdkTier(input) {
301
+ const events = {};
302
+ let loaded;
303
+ try {
304
+ loaded = await input.loadSdk();
305
+ }
306
+ catch {
307
+ loaded = null; // a broken install counts as missing
308
+ }
309
+ if (!loaded) {
310
+ return { checks: failedTier2Checks(input.scenarios, SDK_MISSING_DETAIL), events, skipped: SDK_MISSING_DETAIL };
311
+ }
312
+ const checks = [{
313
+ id: 'sdk.available',
314
+ ok: true,
315
+ detail: `${SDK_PACKAGE}@${loaded.version ?? '?'} (${loaded.from})`,
316
+ }];
317
+ // The SDK spawns `path` without a shell: drive the .js/.exe a Windows npm shim launches.
318
+ let bin = input.bin;
319
+ if ((input.platform ?? process.platform) === 'win32' && /\.(cmd|bat|ps1)$/i.test(bin)) {
320
+ const target = resolveShimTarget(bin);
321
+ if (!target) {
322
+ checks.push(...failedTier2Checks(input.scenarios, `${bin} is a shell shim whose .js/.exe target could not be resolved; pass --copilot-bin <copilot.exe or the package's .js entry>`, 'after-available'));
323
+ return { checks, events };
324
+ }
325
+ bin = target;
326
+ }
327
+ const projectError = prepareSdkProject(input.spawnSync, input.projectDir, input.remoteDir, input.env);
328
+ const { CopilotClient, RuntimeConnection } = loaded.module;
329
+ const client = new CopilotClient({
330
+ // Debug level for the runtime (hook stderr is only logged there) via args,
331
+ // not the client's logLevel, which would also echo SDK timing lines to our stderr.
332
+ connection: RuntimeConnection.forStdio({
333
+ path: bin,
334
+ args: ['--log-level', 'debug', '--max-ai-credits', String(runtimeCreditCap(input.maxCredits))],
335
+ env: input.env,
336
+ }),
337
+ baseDirectory: input.home,
338
+ workingDirectory: input.projectDir,
339
+ });
340
+ const logDir = join(input.home, 'logs');
341
+ const sdkInfo = { version: loaded.version, runtimeVersion: null, protocolVersion: null, model: 'auto' };
342
+ const total = { premiumRequests: 0, credits: 0 };
343
+ const entries = [];
344
+ const isAlive = input.isAlive ?? pidAlive;
345
+ const killTree = input.killTree ?? ((pid) => killProcessTree(pid, input.spawnSync));
346
+ let pid;
347
+ let wedged = false;
348
+ try {
349
+ try {
350
+ await withTimeout(client.start(), START_TIMEOUT_MS, 'client.start()');
351
+ }
352
+ catch (err) {
353
+ checks.push(...failedTier2Checks(input.scenarios, `runtime did not start (${bin}): ${excerpt(errText(err), 200)}`, 'after-available'));
354
+ return { checks, sdk: sdkInfo, events };
355
+ }
356
+ pid = runtimePid(client);
357
+ const status = await rpc(() => client.getStatus(), 'getStatus()');
358
+ if (status.ok) {
359
+ sdkInfo.runtimeVersion = typeof status.value.version === 'string' ? status.value.version : null;
360
+ sdkInfo.protocolVersion = typeof status.value.protocolVersion === 'number' ? status.value.protocolVersion : null;
361
+ }
362
+ const models = await rpc(() => client.listModels(), 'listModels()');
363
+ const choice = chooseModel(models.ok ? models.value.map((m) => String(m.id)) : [], input.model);
364
+ sdkInfo.model = choice.label;
365
+ const modelLabel = `${choice.label} (${choice.note})`;
366
+ checks.push(evaluateSdkRuntime(status, input.binVersion, modelLabel));
367
+ checks.push(...await staticChecks(client, input));
368
+ let stopReason;
369
+ for (const name of input.scenarios) {
370
+ if (projectError) {
371
+ entries.push({ name, skip: `sandbox project setup failed: ${projectError}` });
372
+ continue;
373
+ }
374
+ if (stopReason) {
375
+ entries.push({ name, skip: stopReason });
376
+ continue;
377
+ }
378
+ const path = join(input.home, `events-${name}.jsonl`);
379
+ events[name] = path;
380
+ // Log lines are attributed to scenarios by millisecond timestamp
381
+ // (sliceLogByTime), so a scenario must start strictly after the previous
382
+ // one's last activity; a fast fake can otherwise finish within the same
383
+ // millisecond. Negligible against real runs, which take seconds.
384
+ if (entries.length > 0)
385
+ await new Promise((resolve) => setTimeout(resolve, 2));
386
+ const start = Date.now();
387
+ const { wedged: stuck, ...run } = await runScenario(client, input, name, choice.model, modelLabel, path, input.maxCredits - total.credits);
388
+ entries.push({ name, run, start });
389
+ const cost = scenarioCost(run.events);
390
+ total.premiumRequests += cost.premiumRequests;
391
+ total.credits += cost.credits;
392
+ if (run.capped || total.credits > input.maxCredits)
393
+ stopReason = CREDIT_CAP_SKIP_DETAIL;
394
+ if (stuck) {
395
+ wedged = true;
396
+ stopReason ??= RUNTIME_WEDGED_DETAIL;
397
+ }
398
+ }
399
+ }
400
+ finally {
401
+ pid ??= runtimePid(client);
402
+ // A wedged runtime would only lose its direct process to stop(): take the
403
+ // tree (hook and MCP children) while the parent still lives.
404
+ if (wedged && pid && isAlive(pid))
405
+ killTree(pid);
406
+ let stopped = false;
407
+ try {
408
+ await withTimeout(client.stop(), STOP_TIMEOUT_MS, 'client.stop()');
409
+ stopped = true;
410
+ }
411
+ catch { /* fall through to the tree kill and forceStop */ }
412
+ if (!stopped) {
413
+ if (pid && isAlive(pid))
414
+ killTree(pid);
415
+ try {
416
+ await withTimeout(client.forceStop?.() ?? Promise.resolve(), STOP_TIMEOUT_MS, 'client.forceStop()');
417
+ }
418
+ catch { /* already gone */ }
419
+ }
420
+ if (pid && isAlive(pid))
421
+ killTree(pid);
422
+ }
423
+ // Attribute runtime log lines to scenarios by their timestamps, after the
424
+ // runtime stopped: a late SessionEnd line still lands in its own scenario.
425
+ const logText = readAllLogs(logDir);
426
+ const ran = entries.filter((e) => 'run' in e);
427
+ const slices = logText === null ? [] : sliceLogByTime(logText, ran.map((e) => e.start));
428
+ for (const entry of entries) {
429
+ if ('skip' in entry) {
430
+ checks.push(...skippedScenarioChecks(entry.name, entry.skip));
431
+ continue;
432
+ }
433
+ const logSlice = logText === null ? null : slices[ran.indexOf(entry)];
434
+ checks.push(...evaluateScenario({ ...entry.run, logText: logSlice }).checks);
435
+ }
436
+ return { checks, sdk: sdkInfo, cost: total, events };
437
+ }
438
+ async function staticChecks(client, input) {
439
+ let session;
440
+ const failAll = (detail) => ['sdk.plugins', 'sdk.skills', 'sdk.agents', 'sdk.mcp', 'sdk.tools_excluded'].map((id) => ({ id, ok: false, detail }));
441
+ try {
442
+ try {
443
+ session = await withTimeout(client.createSession({
444
+ onPermissionRequest: () => reject('omg smoke: static checks grant nothing'),
445
+ pluginDirectories: [input.root],
446
+ workingDirectory: input.projectDir,
447
+ disabledMcpServers: ['github-mcp-server'],
448
+ excludedTools: [hostSmokeToolName(input.mcpServer)],
449
+ }), RPC_TIMEOUT_MS, 'createSession()');
450
+ }
451
+ catch (err) {
452
+ return failAll(`static session not created: ${excerpt(errText(err), 200)}`);
453
+ }
454
+ const s = session;
455
+ // The plugin MCP server connects asynchronously after createSession.
456
+ let mcp = await rpc(() => s.rpc.mcp.list(), 'mcp.list');
457
+ const deadline = Date.now() + MCP_CONNECT_WAIT_MS;
458
+ const status = () => (mcp.ok ? mcp.value.servers?.find((x) => x.name === input.mcpServer)?.status : undefined);
459
+ while (mcp.ok && status() !== 'connected' && status() !== 'failed' && Date.now() < deadline) {
460
+ await sleep(500);
461
+ mcp = await rpc(() => s.rpc.mcp.list(), 'mcp.list');
462
+ }
463
+ const [plugins, skills, agents, tools, toolMeta] = [
464
+ await rpc(() => s.rpc.plugins.list(), 'plugins.list'),
465
+ await rpc(() => s.rpc.skills.list(), 'skills.list'),
466
+ await rpc(() => s.rpc.agent.list(), 'agent.list'),
467
+ await rpc(() => s.rpc.mcp.listTools({ serverName: input.mcpServer }), 'mcp.listTools'),
468
+ await rpc(() => currentToolMetadata(s), 'tools.getCurrentMetadata'),
469
+ ];
470
+ let expected;
471
+ try {
472
+ expected = await input.loadExpectedToolCount();
473
+ }
474
+ catch (err) {
475
+ expected = errText(err);
476
+ }
477
+ return [
478
+ evaluateSdkPlugins(plugins, input.packageVersion),
479
+ evaluateSdkSkills(skills, input.root, input.skillDirs),
480
+ evaluateSdkAgents(agents, input.agentFiles),
481
+ evaluateSdkMcp(mcp, tools, input.mcpServer, expected),
482
+ evaluateSdkToolsExcluded(toolMeta, input.mcpServer),
483
+ ];
484
+ }
485
+ finally {
486
+ if (session)
487
+ await closeSession(client, session, input.keepHome);
488
+ }
489
+ }
490
+ /** The session's offered tools (no model call); initializes the tool set first when it is not built yet. */
491
+ async function currentToolMetadata(session) {
492
+ const tools = session.rpc.tools;
493
+ if (!tools?.getCurrentMetadata)
494
+ throw new Error('session.rpc.tools.getCurrentMetadata is not available in this SDK');
495
+ let meta = await tools.getCurrentMetadata();
496
+ const list = meta?.tools;
497
+ // Before the first turn the runtime reports `tools: []` (CLI 1.0.91), not null.
498
+ if ((!Array.isArray(list) || list.length === 0) && tools.initializeAndValidate) {
499
+ await tools.initializeAndValidate();
500
+ meta = await tools.getCurrentMetadata();
501
+ }
502
+ return meta;
503
+ }
504
+ async function closeSession(client, session, keepHome) {
505
+ try {
506
+ await withTimeout(session.disconnect(), RPC_TIMEOUT_MS, 'disconnect()');
507
+ }
508
+ catch { /* runtime gone */ }
509
+ // deleteSession is an RPC, so it runs before client.stop(); with keepHome the on-disk session state stays for debugging.
510
+ if (!keepHome) {
511
+ try {
512
+ await withTimeout(client.deleteSession(session.sessionId), RPC_TIMEOUT_MS, 'deleteSession()');
513
+ }
514
+ catch { /* best effort */ }
515
+ }
516
+ }
517
+ /**
518
+ * One scenario session. Ends at session.idle, at the timeout, or when its
519
+ * `assistant.usage` credits pass `budget` (the run cap minus what earlier
520
+ * scenarios spent); the last two abort the turn. `wedged`: no idle even after
521
+ * the abort grace, so the caller stops driving this runtime.
522
+ */
523
+ async function runScenario(client, input, name, model, modelLabel, eventsPath, budget) {
524
+ const spec = SCENARIOS[name];
525
+ const permitCtx = { projectDir: input.projectDir, pluginRoot: input.root, ...(input.platform ? { platform: input.platform } : {}) };
526
+ const recorded = [];
527
+ let sent = false;
528
+ let onIdle = () => { };
529
+ let onShutdown = () => { };
530
+ let onCap = () => { };
531
+ const idle = new Promise((r) => { onIdle = r; });
532
+ const shutdown = new Promise((r) => { onShutdown = r; });
533
+ const capHit = new Promise((r) => { onCap = r; });
534
+ let session;
535
+ let idleSeen = false;
536
+ let timedOut = false;
537
+ let capped = false;
538
+ let wedged = false;
539
+ let spent = 0;
540
+ let error;
541
+ try {
542
+ session = await withTimeout(client.createSession({
543
+ onPermissionRequest: (req) => (spec.permit(req, permitCtx) ? { kind: 'approve-once' } : reject(`omg smoke ${name}: ${req.kind ?? 'request'} not permitted`)),
544
+ onEvent: (event) => {
545
+ recorded.push(event);
546
+ if (event.type === 'session.idle' && sent)
547
+ onIdle();
548
+ if (event.type === 'session.shutdown')
549
+ onShutdown();
550
+ spent += usageCredits(event);
551
+ if (!capped && spent > budget) {
552
+ capped = true;
553
+ onCap();
554
+ }
555
+ },
556
+ pluginDirectories: [input.root],
557
+ workingDirectory: input.projectDir,
558
+ disabledMcpServers: ['github-mcp-server'],
559
+ excludedTools: scenarioExcludedTools(name, input.mcpServer),
560
+ ...(model ? { model } : {}),
561
+ }), RPC_TIMEOUT_MS, 'createSession()');
562
+ sent = true;
563
+ await withTimeout(session.send({ prompt: spec.prompt }), RPC_TIMEOUT_MS, 'send()');
564
+ const winner = await Promise.race([
565
+ idle.then(() => 'idle'),
566
+ capHit.then(() => 'cap'),
567
+ sleep(input.timeoutMs).then(() => 'timeout'),
568
+ ]);
569
+ if (winner === 'idle') {
570
+ idleSeen = true;
571
+ }
572
+ else {
573
+ if (winner === 'timeout')
574
+ timedOut = true;
575
+ const s = session;
576
+ try {
577
+ await withTimeout(s.abort(), RPC_TIMEOUT_MS, 'abort()');
578
+ }
579
+ catch { /* best effort */ }
580
+ const settled = await Promise.race([idle.then(() => true), sleep(ABORT_GRACE_MS).then(() => false)]);
581
+ wedged = !settled;
582
+ }
583
+ }
584
+ catch (err) {
585
+ error = errText(err);
586
+ }
587
+ finally {
588
+ if (session) {
589
+ try {
590
+ await withTimeout(session.disconnect(), RPC_TIMEOUT_MS, 'disconnect()');
591
+ }
592
+ catch { /* runtime gone */ }
593
+ // session.shutdown (the billing totals) is emitted while the session closes.
594
+ await Promise.race([shutdown, sleep(SHUTDOWN_GRACE_MS)]);
595
+ if (!input.keepHome) {
596
+ try {
597
+ await withTimeout(client.deleteSession(session.sessionId), RPC_TIMEOUT_MS, 'deleteSession()');
598
+ }
599
+ catch { /* best effort */ }
600
+ }
601
+ }
602
+ try {
603
+ writeFileSync(eventsPath, recorded.map((e) => JSON.stringify(e)).join('\n') + (recorded.length ? '\n' : ''));
604
+ }
605
+ catch { /* best effort */ }
606
+ }
607
+ return {
608
+ name,
609
+ events: recorded,
610
+ idle: idleSeen,
611
+ timedOut,
612
+ timeoutMs: input.timeoutMs,
613
+ ...(error ? { error } : {}),
614
+ ...(name === 'guardrail' ? { remoteRefs: remoteRefs(input.spawnSync, input.remoteDir, input.env) } : {}),
615
+ model: modelLabel,
616
+ maxCredits: input.maxCredits,
617
+ budget,
618
+ capped,
619
+ wedged,
620
+ };
621
+ }
622
+ //# sourceMappingURL=copilot-sdk-driver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"copilot-sdk-driver.js","sourceRoot":"","sources":["../../src/smoke/copilot-sdk-driver.ts"],"names":[],"mappings":"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"}