@automaton-labs/aib 0.0.5 → 0.0.6
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/bin/cli.js +2 -2
- package/dist/commands/config-command.js +2 -1
- package/dist/commands/config-output.js +10 -8
- package/dist/commands/doctor.js +2 -1
- package/dist/commands/help-command.js +4 -4
- package/dist/commands/inspect-format.js +1 -1
- package/dist/commands/quick-read.js +8 -8
- package/dist/commands/result-view.js +5 -5
- package/dist/commands/session-workspace.js +7 -7
- package/dist/config/workspace-root.js +3 -3
- package/dist/help/bootstrap.md +4 -7
- package/dist/help/docs/help-format.md +4 -7
- package/dist/help/dsl/bootstrap.md +4 -7
- package/dist/help/dsl/docs/help-format.md +4 -7
- package/dist/help/dsl/full.md +4 -7
- package/dist/help/dsl/topics/help-format.md +4 -7
- package/dist/help/full.md +4 -7
- package/dist/help/help-meta.json +5 -5
- package/dist/help/json/bootstrap.md +4 -7
- package/dist/help/json/docs/help-format.md +4 -7
- package/dist/help/json/full.md +4 -7
- package/dist/help/json/topics/help-format.md +4 -7
- package/dist/help/topics/help-format.md +4 -7
- package/dist/managed-host/serve-web-autostart.js +1 -1
- package/dist/managed-host/serve-web-host.cjs +193 -79
- package/dist/observability/config.js +1 -1
- package/dist/payloads/read-stdin-json.js +1 -1
- package/dist/runtime/managed-runtime-provisioning.js +1 -1
- package/dist/runtime/run-command.js +1 -1
- package/dist/session/server.js +7 -5
- package/dist/shared/errors.js +14 -13
- package/dist/shared/stdin-examples.js +3 -0
- package/dist/tracing/trace.js +5 -3
- package/extension/vscode-refactor-bridge-extension.vsix +0 -0
- package/package.json +1 -1
- package/runtimes/launcher/linux-x64/aib +0 -0
- package/runtimes/launcher/win-x64/aib.exe +0 -0
- package/scripts/provision-runtime.cjs +25 -1
|
@@ -339,21 +339,51 @@ function startLoggedCommand(commandSpec, args, options) {
|
|
|
339
339
|
return startLoggedProcess(commandExecutable(commandSpec), commandArgs(commandSpec, args), options);
|
|
340
340
|
}
|
|
341
341
|
|
|
342
|
-
function resolvePackagedCodeServerCommand() {
|
|
343
|
-
const nodeRuntime = resolvePackagedNodeRuntime();
|
|
344
|
-
const
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
342
|
+
function resolvePackagedCodeServerCommand() {
|
|
343
|
+
const nodeRuntime = resolvePackagedNodeRuntime();
|
|
344
|
+
const candidates = [
|
|
345
|
+
{
|
|
346
|
+
packageRoot: rootDir,
|
|
347
|
+
entryPath: path.join(rootDir, "runtimes", "code-server", "node_modules", "code-server", "out", "node", "entry.js")
|
|
348
|
+
},
|
|
349
|
+
{
|
|
350
|
+
packageRoot: path.join(rootDir, "packages", "cli"),
|
|
351
|
+
entryPath: path.join(rootDir, "packages", "cli", "runtimes", "code-server", "node_modules", "code-server", "out", "node", "entry.js")
|
|
352
|
+
}
|
|
353
|
+
];
|
|
354
|
+
for (const { packageRoot, entryPath } of candidates) {
|
|
355
|
+
if (fs.existsSync(entryPath) && managedRuntimePlatformStatus(packageRoot).ok) {
|
|
356
|
+
return makeCommandSpec(nodeRuntime.command, [entryPath], nodeRuntime.source === "packaged-node"
|
|
357
|
+
? "packaged-code-server-entry-bundled-node"
|
|
358
|
+
: "packaged-code-server-entry");
|
|
353
359
|
}
|
|
354
360
|
}
|
|
355
|
-
return null;
|
|
356
|
-
}
|
|
361
|
+
return null;
|
|
362
|
+
}
|
|
363
|
+
|
|
364
|
+
function managedRuntimePlatformStatus(packageRoot) {
|
|
365
|
+
const markerPath = path.join(packageRoot, "runtimes", ".aib-runtime-platform.json");
|
|
366
|
+
const expectedPlatformKey = `${process.platform}-${process.arch}`;
|
|
367
|
+
if (!fs.existsSync(markerPath)) {
|
|
368
|
+
return { ok: true, reason: "missing", expectedPlatformKey, actualPlatformKey: null };
|
|
369
|
+
}
|
|
370
|
+
try {
|
|
371
|
+
const marker = JSON.parse(fs.readFileSync(markerPath, "utf8"));
|
|
372
|
+
const actualPlatformKey = typeof marker.platformKey === "string"
|
|
373
|
+
? marker.platformKey
|
|
374
|
+
: typeof marker.platform === "string" && typeof marker.arch === "string"
|
|
375
|
+
? `${marker.platform}-${marker.arch}`
|
|
376
|
+
: null;
|
|
377
|
+
return {
|
|
378
|
+
ok: actualPlatformKey === expectedPlatformKey,
|
|
379
|
+
reason: actualPlatformKey === expectedPlatformKey ? "ok" : "mismatch",
|
|
380
|
+
expectedPlatformKey,
|
|
381
|
+
actualPlatformKey
|
|
382
|
+
};
|
|
383
|
+
} catch {
|
|
384
|
+
return { ok: false, reason: "invalid", expectedPlatformKey, actualPlatformKey: null };
|
|
385
|
+
}
|
|
386
|
+
}
|
|
357
387
|
|
|
358
388
|
function resolveManagedHostKind(options, commandSpec) {
|
|
359
389
|
const raw = options.hostKind ?? process.env.AIB_MANAGED_HOST_KIND ?? "";
|
|
@@ -652,33 +682,108 @@ function stopProcessTree(pid) {
|
|
|
652
682
|
}
|
|
653
683
|
}
|
|
654
684
|
|
|
655
|
-
function stopProcessesByCommandLineFragment(fragment) {
|
|
656
|
-
if (
|
|
657
|
-
return {
|
|
658
|
-
attempted: false,
|
|
659
|
-
fragment
|
|
660
|
-
};
|
|
661
|
-
}
|
|
662
|
-
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
"
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
|
|
673
|
-
|
|
674
|
-
|
|
675
|
-
|
|
676
|
-
|
|
685
|
+
function stopProcessesByCommandLineFragment(fragment) {
|
|
686
|
+
if (!fragment) {
|
|
687
|
+
return {
|
|
688
|
+
attempted: false,
|
|
689
|
+
fragment
|
|
690
|
+
};
|
|
691
|
+
}
|
|
692
|
+
if (process.platform !== "win32") {
|
|
693
|
+
return stopProcessesByCommandLineFragmentUnix(fragment);
|
|
694
|
+
}
|
|
695
|
+
|
|
696
|
+
const escaped = String(fragment).replace(/'/g, "''");
|
|
697
|
+
const script = [
|
|
698
|
+
"$self = $PID",
|
|
699
|
+
"$fragment = '" + escaped + "'",
|
|
700
|
+
"Get-CimInstance Win32_Process |",
|
|
701
|
+
"Where-Object { $_.ProcessId -ne $self -and $_.CommandLine -and $_.CommandLine.Contains($fragment) } |",
|
|
702
|
+
"ForEach-Object { try { Stop-Process -Id $_.ProcessId -Force -ErrorAction Stop; $_.ProcessId } catch {} }"
|
|
703
|
+
].join("\n");
|
|
704
|
+
const result = run("powershell.exe", ["-NoProfile", "-Command", script], { timeoutMs: 10_000 });
|
|
705
|
+
const killed = result.stdout
|
|
706
|
+
.split(/\r?\n/)
|
|
707
|
+
.map((line) => line.trim())
|
|
708
|
+
.filter(Boolean).length;
|
|
709
|
+
return {
|
|
710
|
+
attempted: true,
|
|
711
|
+
fragment,
|
|
712
|
+
killed,
|
|
713
|
+
status: result.status,
|
|
714
|
+
error: result.error,
|
|
715
|
+
stdoutTail: tail(result.stdout, 1000),
|
|
677
716
|
stderrTail: tail(result.stderr, 1000)
|
|
678
|
-
};
|
|
679
|
-
}
|
|
680
|
-
|
|
681
|
-
function
|
|
717
|
+
};
|
|
718
|
+
}
|
|
719
|
+
|
|
720
|
+
function stopProcessesByCommandLineFragmentUnix(fragment) {
|
|
721
|
+
const result = run("ps", ["-eo", "pid=,args="], { timeoutMs: 10_000 });
|
|
722
|
+
if (result.status !== 0) {
|
|
723
|
+
return {
|
|
724
|
+
attempted: true,
|
|
725
|
+
fragment,
|
|
726
|
+
killed: 0,
|
|
727
|
+
status: result.status,
|
|
728
|
+
error: result.error,
|
|
729
|
+
stdoutTail: tail(result.stdout, 1000),
|
|
730
|
+
stderrTail: tail(result.stderr, 1000)
|
|
731
|
+
};
|
|
732
|
+
}
|
|
733
|
+
|
|
734
|
+
const currentPid = process.pid;
|
|
735
|
+
const parentPid = process.ppid;
|
|
736
|
+
const pids = result.stdout
|
|
737
|
+
.split(/\r?\n/)
|
|
738
|
+
.map((line) => {
|
|
739
|
+
const match = line.match(/^\s*(\d+)\s+(.*)$/);
|
|
740
|
+
if (!match) {
|
|
741
|
+
return null;
|
|
742
|
+
}
|
|
743
|
+
return {
|
|
744
|
+
pid: Number(match[1]),
|
|
745
|
+
commandLine: match[2] ?? ""
|
|
746
|
+
};
|
|
747
|
+
})
|
|
748
|
+
.filter(Boolean)
|
|
749
|
+
.filter((row) => row.pid !== currentPid && row.pid !== parentPid)
|
|
750
|
+
.filter((row) => row.commandLine.includes(fragment))
|
|
751
|
+
.map((row) => row.pid);
|
|
752
|
+
|
|
753
|
+
const uniquePids = [...new Set(pids)].filter((pid) => Number.isInteger(pid) && pid > 0);
|
|
754
|
+
let killed = 0;
|
|
755
|
+
const errors = [];
|
|
756
|
+
for (const pid of uniquePids) {
|
|
757
|
+
try {
|
|
758
|
+
process.kill(pid, "SIGTERM");
|
|
759
|
+
killed += 1;
|
|
760
|
+
} catch (error) {
|
|
761
|
+
errors.push(`${pid}: ${error instanceof Error ? error.message : String(error)}`);
|
|
762
|
+
}
|
|
763
|
+
}
|
|
764
|
+
if (killed > 0) {
|
|
765
|
+
sleepSync(250);
|
|
766
|
+
}
|
|
767
|
+
for (const pid of uniquePids) {
|
|
768
|
+
if (!isProcessAlive(pid)) {
|
|
769
|
+
continue;
|
|
770
|
+
}
|
|
771
|
+
try {
|
|
772
|
+
process.kill(pid, "SIGKILL");
|
|
773
|
+
} catch (error) {
|
|
774
|
+
errors.push(`${pid}: ${error instanceof Error ? error.message : String(error)}`);
|
|
775
|
+
}
|
|
776
|
+
}
|
|
777
|
+
return {
|
|
778
|
+
attempted: true,
|
|
779
|
+
fragment,
|
|
780
|
+
killed,
|
|
781
|
+
status: errors.length === 0 ? 0 : 1,
|
|
782
|
+
error: errors.join("; ") || null
|
|
783
|
+
};
|
|
784
|
+
}
|
|
785
|
+
|
|
786
|
+
function stopOrphanedPackagedRuntimeProcesses(activeRunDirs = []) {
|
|
682
787
|
if (process.platform !== "win32") {
|
|
683
788
|
return {
|
|
684
789
|
attempted: false,
|
|
@@ -962,13 +1067,16 @@ async function acquireLock(hostId, timeoutMs = 15_000, staleMs = 120_000) {
|
|
|
962
1067
|
fs.rmSync(lockDir, { recursive: true, force: true });
|
|
963
1068
|
}
|
|
964
1069
|
};
|
|
965
|
-
} catch (error) {
|
|
966
|
-
if (error && error.code === "EEXIST") {
|
|
967
|
-
const
|
|
968
|
-
|
|
969
|
-
|
|
970
|
-
|
|
971
|
-
|
|
1070
|
+
} catch (error) {
|
|
1071
|
+
if (error && error.code === "EEXIST") {
|
|
1072
|
+
const owner = readJsonFile(path.join(lockDir, "owner.json"));
|
|
1073
|
+
const ownerPid = Number.isInteger(owner?.pid) ? owner.pid : null;
|
|
1074
|
+
const ownerAlive = ownerPid !== null && isProcessAlive(ownerPid);
|
|
1075
|
+
const stat = fs.statSync(lockDir);
|
|
1076
|
+
if ((ownerPid !== null && !ownerAlive) || Date.now() - stat.mtimeMs > staleMs) {
|
|
1077
|
+
fs.rmSync(lockDir, { recursive: true, force: true });
|
|
1078
|
+
continue;
|
|
1079
|
+
}
|
|
972
1080
|
await sleep(250);
|
|
973
1081
|
continue;
|
|
974
1082
|
}
|
|
@@ -1130,9 +1238,10 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1130
1238
|
return record;
|
|
1131
1239
|
}
|
|
1132
1240
|
|
|
1133
|
-
const lock = await acquireLock(hostId);
|
|
1134
|
-
try {
|
|
1135
|
-
|
|
1241
|
+
const lock = await acquireLock(hostId, Math.max(90_000, waitMs + 45_000));
|
|
1242
|
+
try {
|
|
1243
|
+
const orphanCleanup = readMetadataByHostId(hostId) ? null : stopProcessesByCommandLineFragment(hostId);
|
|
1244
|
+
if (reuse) {
|
|
1136
1245
|
const existingStatus = await getManagedServeWebHostStatus({ fixture, hostId, vsix, ideCommand: options.ideCommand, hostKind });
|
|
1137
1246
|
if (existingStatus.healthy) {
|
|
1138
1247
|
const updatedMetadata = {
|
|
@@ -1156,11 +1265,12 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1156
1265
|
runDir: existingStatus.metadata.runDir ?? runDir,
|
|
1157
1266
|
logsDir: existingStatus.metadata.logsDir ?? logsDir,
|
|
1158
1267
|
stepsDir: existingStatus.metadata.stepsDir ?? stepsDir,
|
|
1159
|
-
metadata: updatedMetadata,
|
|
1160
|
-
steps,
|
|
1161
|
-
failures
|
|
1162
|
-
|
|
1163
|
-
|
|
1268
|
+
metadata: updatedMetadata,
|
|
1269
|
+
steps,
|
|
1270
|
+
failures,
|
|
1271
|
+
orphanCleanup
|
|
1272
|
+
});
|
|
1273
|
+
}
|
|
1164
1274
|
if (existingStatus.metadata) {
|
|
1165
1275
|
await stopManagedServeWebHost({ fixture, hostId, removeMetadataOnlyIfKnown: true });
|
|
1166
1276
|
}
|
|
@@ -1221,7 +1331,7 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1221
1331
|
};
|
|
1222
1332
|
});
|
|
1223
1333
|
if (failures.length > 0) {
|
|
1224
|
-
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures });
|
|
1334
|
+
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures, orphanCleanup });
|
|
1225
1335
|
}
|
|
1226
1336
|
|
|
1227
1337
|
const port = Number.isInteger(options.port) ? options.port : await allocatePort();
|
|
@@ -1317,7 +1427,7 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1317
1427
|
});
|
|
1318
1428
|
if (failures.length > 0) {
|
|
1319
1429
|
stopProcessTree(serveWebProcess?.child?.pid);
|
|
1320
|
-
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures });
|
|
1430
|
+
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures, orphanCleanup });
|
|
1321
1431
|
}
|
|
1322
1432
|
|
|
1323
1433
|
await step("open headless browser client", async () => {
|
|
@@ -1408,7 +1518,7 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1408
1518
|
if (failures.length > 0) {
|
|
1409
1519
|
stopProcessTree(browserProcess?.pid);
|
|
1410
1520
|
stopProcessTree(serveWebProcess?.child?.pid);
|
|
1411
|
-
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures });
|
|
1521
|
+
return buildStartSummary({ ok: false, reused: false, startedAt, hostId, fixture, vsix, codeCommand, hostKind, runDir, logsDir, stepsDir, metadata, steps, failures, orphanCleanup });
|
|
1412
1522
|
}
|
|
1413
1523
|
|
|
1414
1524
|
const registryEntry = steps.at(-1)?.detail?.state?.entry ?? null;
|
|
@@ -1454,10 +1564,11 @@ async function startManagedServeWebHost(options = {}) {
|
|
|
1454
1564
|
logsDir,
|
|
1455
1565
|
stepsDir,
|
|
1456
1566
|
metadata,
|
|
1457
|
-
registryEntry,
|
|
1458
|
-
steps,
|
|
1459
|
-
failures
|
|
1460
|
-
|
|
1567
|
+
registryEntry,
|
|
1568
|
+
steps,
|
|
1569
|
+
failures,
|
|
1570
|
+
orphanCleanup
|
|
1571
|
+
});
|
|
1461
1572
|
} finally {
|
|
1462
1573
|
lock.release();
|
|
1463
1574
|
}
|
|
@@ -1470,18 +1581,20 @@ async function stopManagedServeWebHost(options = {}) {
|
|
|
1470
1581
|
|
|
1471
1582
|
const fixture = path.resolve(options.fixture ?? defaultFixtureDir);
|
|
1472
1583
|
const codeCommand = resolveManagedIdeCommand(options);
|
|
1473
|
-
const hostKind = resolveManagedHostKind(options, codeCommand);
|
|
1474
|
-
const hostId = options.hostId ?? buildHostId({ fixture, hostKind });
|
|
1475
|
-
const metadata = readMetadataByHostId(hostId);
|
|
1476
|
-
if (!metadata) {
|
|
1477
|
-
|
|
1478
|
-
|
|
1479
|
-
|
|
1480
|
-
|
|
1481
|
-
|
|
1482
|
-
|
|
1483
|
-
|
|
1484
|
-
|
|
1584
|
+
const hostKind = resolveManagedHostKind(options, codeCommand);
|
|
1585
|
+
const hostId = options.hostId ?? buildHostId({ fixture, hostKind });
|
|
1586
|
+
const metadata = readMetadataByHostId(hostId);
|
|
1587
|
+
if (!metadata) {
|
|
1588
|
+
const orphanCleanup = stopProcessesByCommandLineFragment(hostId);
|
|
1589
|
+
return {
|
|
1590
|
+
ok: true,
|
|
1591
|
+
hostId,
|
|
1592
|
+
hostKind,
|
|
1593
|
+
stopped: (orphanCleanup.killed ?? 0) > 0,
|
|
1594
|
+
reason: (orphanCleanup.killed ?? 0) > 0 ? "orphan-processes-stopped" : "metadata-not-found",
|
|
1595
|
+
orphanCleanup
|
|
1596
|
+
};
|
|
1597
|
+
}
|
|
1485
1598
|
|
|
1486
1599
|
const stopResults = [];
|
|
1487
1600
|
const watchdog = readJsonFile(getWatchdogPath(hostId));
|
|
@@ -1762,12 +1875,13 @@ function buildStartSummary(input) {
|
|
|
1762
1875
|
runDir: input.runDir,
|
|
1763
1876
|
metadata: input.metadata,
|
|
1764
1877
|
registryEntry: input.registryEntry ?? null,
|
|
1765
|
-
artifacts: {
|
|
1766
|
-
logsDir: input.logsDir,
|
|
1767
|
-
stepsDir: input.stepsDir,
|
|
1768
|
-
summaryPath
|
|
1769
|
-
},
|
|
1770
|
-
|
|
1878
|
+
artifacts: {
|
|
1879
|
+
logsDir: input.logsDir,
|
|
1880
|
+
stepsDir: input.stepsDir,
|
|
1881
|
+
summaryPath
|
|
1882
|
+
},
|
|
1883
|
+
orphanCleanup: input.orphanCleanup ?? null,
|
|
1884
|
+
steps: input.steps.map((record) => ({
|
|
1771
1885
|
name: record.name,
|
|
1772
1886
|
ok: record.ok,
|
|
1773
1887
|
durationMs: record.durationMs,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var b=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_OBSERVABILITY_CONFIG=void 0,exports.resolveObservabilityConfig=l,exports.traceEnabled=
|
|
1
|
+
"use strict";var b=exports&&exports.__importDefault||function(e){return e&&e.__esModule?e:{default:e}};Object.defineProperty(exports,"__esModule",{value:!0}),exports.DEFAULT_OBSERVABILITY_CONFIG=void 0,exports.resolveObservabilityConfig=l,exports.traceEnabled=h,exports.failureSnapshotsEnabled=g,exports.defaultTraceWorkspaceDir=S,exports.feedbackFilePath=_,exports.failureSnapshotsRoot=k,exports.observabilityStatus=E;const c=b(require("node:fs")),n=b(require("node:path")),s=require("../config/env-vars"),u=require("../config/product-storage"),y=require("./context");exports.DEFAULT_OBSERVABILITY_CONFIG={metrics:"on",mutationImpactMetrics:"on",trace:"full",failureSnapshots:"on",feedback:"on",retention:{metrics:{maxAgeDays:30,maxTotalMb:512,maxPerWorkspaceMb:128},trace:{maxAgeDays:14,maxTotalMb:512,maxPerWorkspaceMb:128},failureSnapshots:{maxAgeDays:14,maxTotalMb:512,maxPerWorkspaceMb:128,maxFileMb:2,maxFilesPerFailure:5},feedback:{cleanup:"dangerOnly"}}};function l(){const e=JSON.parse(JSON.stringify(exports.DEFAULT_OBSERVABILITY_CONFIG)),t=d(process.env[s.CLI_ENV.metrics]);t&&(e.metrics=t);const r=d(process.env[s.CLI_ENV.mutationImpactMetrics]);r&&(e.mutationImpactMetrics=r);const o=R(process.env[s.CLI_ENV.trace]);o&&(e.trace=o);const a=d(process.env[s.CLI_ENV.failureSnapshots]);return a&&(e.failureSnapshots=a),e}function h(){return l().trace!=="off"}function g(){return l().failureSnapshots==="on"&&h()}function S(e){const t=(0,y.resolveWorkspaceIdentity)(e);return n.default.join((0,u.productStorageRoot)(),"trace","workspaces",t.workspaceId)}function _(){return n.default.join((0,u.productStorageRoot)(),"feedback","feedback.jsonl")}function k(e){const t=(0,y.resolveWorkspaceIdentity)(e);return n.default.join((0,u.productStorageRoot)(),"failure-snapshots","workspaces",t.workspaceId)}function E(e){const t=l(),r=(0,u.productStorageRoot)(),o=S(e),a=_(),i=process.env[s.CLI_ENV.metricsDir]?.trim()?n.default.resolve(process.env[s.CLI_ENV.metricsDir]):n.default.join(r,"metrics"),f=k(e);return{ok:!0,command:"observability",action:"status",productStorageRoot:r,config:t,effective:{metrics:t.metrics,mutationImpactMetrics:t.mutationImpactMetrics,trace:t.trace,failureSnapshots:t.failureSnapshots,feedback:t.feedback},storage:{metricsDir:i,metricsFile:n.default.join(i,"metrics.jsonl"),traceDir:o,feedbackFile:a,failureSnapshotsRoot:f},counters:{metricsRows:v(n.default.join(i,"metrics.jsonl")),metricsBytes:p(n.default.join(i,"metrics.jsonl")),traceBytes:m(n.default.dirname(n.default.dirname(o))),feedbackRows:v(a),feedbackBytes:p(a),failureSnapshotBytes:m(f),failureSnapshotCount:I(f)},cleanup:{enforced:!1,dryRunAvailable:!0,note:"Retention config is visible but automatic cleanup is not enforced yet."}}}function d(e){if(e===void 0)return null;const t=e.trim().toLowerCase();return["0","false","off","disabled","no"].includes(t)?"off":["1","true","on","enabled","yes"].includes(t)?"on":null}function R(e){if(e===void 0)return null;const t=e.trim().toLowerCase();return["0","false","off","disabled","no"].includes(t)?"off":t==="light"?"light":["1","true","on","enabled","yes","full"].includes(t)?"full":null}function p(e){try{return c.default.statSync(e).size}catch{return 0}}function v(e){try{return c.default.readFileSync(e,"utf8").split(/\r?\n/).filter(Boolean).length}catch{return 0}}function m(e){let t=0;try{for(const r of c.default.readdirSync(e,{withFileTypes:!0})){const o=n.default.join(e,r.name);r.isDirectory()?t+=m(o):r.isFile()&&(t+=p(o))}}catch{return 0}return t}function I(e){let t=0;try{for(const r of c.default.readdirSync(e,{withFileTypes:!0}))r.isDirectory()&&(t+=1+I(n.default.join(e,r.name)))}catch{return 0}return t}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readStdinJson=f,exports.readStdinPayload=p,exports.readStdinPayloadWithSource=S,exports.parseStdinPayload=
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.readStdinJson=f,exports.readStdinPayload=p,exports.readStdinPayloadWithSource=S,exports.parseStdinPayload=d,exports.parseInputPayloadWithSource=u,exports.stripStdinFormatFlags=w,exports.readRawStdinText=c;const s=require("../dsl/aib-dsl"),m=require("../config/env-vars"),a=require("../shared/errors");async function f(e){const r=await c();return d(r,e??{command:"",restArgs:[]})}async function p(e){const r=await c();return d(r,e)}async function S(e){const r=await c();return u(r,e)}function d(e,r){return u(e,r).payload}function u(e,r){const t=e.replace(/^\uFEFF/,"").trim();if(!t)throw new a.CliError("EMPTY_STDIN","Expected JSON or DSL payload on stdin.");if(y(r.format)==="dsl"){const i=l(t,r);return{payload:i.payload,source:{format:"dsl",text:t,command:i.command}}}if(D(t))return{payload:h(t),source:{format:"json",text:t}};const o=l(t,r);return{payload:o.payload,source:{format:"dsl",text:t,command:o.command}}}function w(e){const r=[];let t;for(let n=0;n<e.length;n+=1){const o=e[n];if(o==="--dsl"||o==="--force-dsl"){t="dsl";continue}if(o==="--stdin-format"){const i=e[n+1];if(i!=="auto"&&i!=="dsl")throw new a.CliError("INVALID_STDIN_FORMAT","Expected --stdin-format to be auto or dsl.");t=i,n+=1;continue}o!==void 0&&r.push(o)}return{restArgs:r,...t!==void 0?{format:t}:{}}}function y(e){return e!==void 0?e:process.env[m.CLI_ENV.forceDsl]==="1"?"dsl":"auto"}async function c(){const e=[];for await(const r of process.stdin)e.push(Buffer.isBuffer(r)?r:Buffer.from(String(r)));return Buffer.concat(e).toString("utf8")}function D(e){const r=e[0];return r==="{"||r==="["}function h(e){try{const r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new a.CliError("INVALID_STDIN_JSON","Expected a JSON object on stdin.");return r}catch(r){throw r instanceof a.CliError?r:new a.CliError("INVALID_STDIN_JSON","Failed to parse JSON from stdin.",{cause:r instanceof Error?r.message:String(r)})}}function l(e,r){const t=I(r.command,r.restArgs);if(!t)throw new a.CliError("STDIN_DSL_UNSUPPORTED",`${r.command||"This command"} does not support DSL stdin. Use JSON for this command.`);let n;try{if(t==="inspect")try{n=(0,s.compileAibDsl)(e)}catch{n=(0,s.compileAibDsl)(e,{tolerantInspect:!0})}else n=(0,s.compileAibDsl)(e)}catch(o){throw new a.CliError("INVALID_STDIN_DSL","Failed to compile DSL from stdin.",{cause:o instanceof Error?o.message:String(o)})}if(n.command!==t&&!_(t,n.command))throw new a.CliError("STDIN_DSL_COMMAND_MISMATCH",`DSL compiles to ${n.command}, but current command expects ${t}.`);return n}function _(e,r){return e==="move.toFile"&&r==="refactor.batch"}function I(e,r){switch(e){case"inspect":return"inspect";case"rename":return"rename";case"modulePlan":return"modulePlan";case"move":return r[0]==="toFile"?"move.toFile":null;case"refactor":return r[0]==="batch"?"refactor.batch":null;case"imports":return r[0]==="normalize"?"imports.normalize":null;case"view":return"view";default:return null}}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var d=exports&&exports.__createBinding||(Object.create?(function(e,n,i,r){r===void 0&&(r=i);var t=Object.getOwnPropertyDescriptor(n,i);(!t||("get"in t?!n.__esModule:t.writable||t.configurable))&&(t={enumerable:!0,get:function(){return n[i]}}),Object.defineProperty(e,r,t)}):(function(e,n,i,r){r===void 0&&(r=i),e[r]=n[i]})),p=exports&&exports.__setModuleDefault||(Object.create?(function(e,n){Object.defineProperty(e,"default",{enumerable:!0,value:n})}):function(e,n){e.default=n}),a=exports&&exports.__importStar||(function(){var e=function(n){return e=Object.getOwnPropertyNames||function(i){var r=[];for(var t in i)Object.prototype.hasOwnProperty.call(i,t)&&(r[r.length]=t);return r},e(n)};return function(n){if(n&&n.__esModule)return n;var i={};if(n!=null)for(var r=e(n),t=0;t<r.length;t++)r[t]!=="default"&&d(i,n,r[t]);return p(i,n),i}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.ensureManagedRuntimeProvisioned=h,exports.isManagedRuntimeComplete=c,exports.managedRuntimePlatformStatus=f,exports.runtimePlatformKey=l;const u=a(require("node:fs")),o=a(require("node:path")),y=require("node:child_process");function h(e){if(c(e))return;const n=o.join(e,"scripts","provision-runtime.cjs");u.existsSync(n)&&(0,y.spawnSync)(process.execPath,[n,"--quiet"],{cwd:e,env:process.env,encoding:"utf8",stdio:["ignore","pipe","pipe"],windowsHide:!0,timeout:6e5})}function c(e){return u.existsSync(o.join(e,"runtimes","code-server","node_modules","code-server","out","node","entry.js"))&&!!w(e)&&!!P(e)&&f(e).ok}function f(e){const n=o.join(e,"runtimes",".aib-runtime-platform.json"),i=l();if(!u.existsSync(n))return{ok:!0,markerPath:n,expectedPlatformKey:i,actualPlatformKey:null,reason:"missing"};try{const r=JSON.parse(u.readFileSync(n,"utf8")),t=typeof r.platformKey=="string"?r.platformKey:typeof r.platform=="string"&&typeof r.arch=="string"?`${r.platform}-${r.arch}`:null;return{ok:t===i,markerPath:n,expectedPlatformKey:i,actualPlatformKey:t,reason:t===i?"ok":"mismatch"}}catch{return{ok:!1,markerPath:n,expectedPlatformKey:i,actualPlatformKey:null,reason:"invalid"}}}function l(){return`${process.platform}-${process.arch}`}function P(e){const n=_();if(!n)return null;const i=process.platform==="win32"?o.join(e,"runtimes","node",n,"node.exe"):o.join(e,"runtimes","node",n,"bin","node");return u.existsSync(i)?i:null}function _(){const e=process.arch;return process.platform==="win32"&&e==="x64"?"win-x64":process.platform==="linux"&&e==="x64"?"linux-x64":process.platform==="linux"&&e==="arm64"?"linux-arm64":process.platform==="darwin"&&e==="x64"?"darwin-x64":process.platform==="darwin"&&e==="arm64"?"darwin-arm64":null}function w(e){const n=[o.join(e,"runtimes","browser"),o.join(e,"runtimes","chrome"),o.join(e,"runtimes","chromium")],i=process.platform==="win32"?new Set(["chrome.exe","chromium.exe","msedge.exe"]):new Set(["chrome","chromium"]);for(const r of n){const t=m(r,i,5);if(t)return t}return null}function m(e,n,i){if(!u.existsSync(e)||i<0)return null;let r;try{r=u.readdirSync(e,{withFileTypes:!0})}catch{return null}for(const t of r){const s=o.join(e,t.name);if(t.isFile()&&n.has(t.name))return s}for(const t of r){if(!t.isDirectory())continue;const s=m(o.join(e,t.name),n,i-1);if(s)return s}return null}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runCommand=z;const P=require("../commands/list-instances"),b=require("../commands/ping"),k=require("../commands/runtime-info"),S=require("../commands/print-config"),R=require("../commands/init-skill-usage"),x=require("../commands/init-workspace"),A=require("../commands/inspect"),c=require("../commands/captured-input"),E=require("../commands/module-plan-command"),D=require("../commands/rename-command"),N=require("../commands/move-command"),O=require("../commands/refactor-command"),U=require("../commands/imports-command"),W=require("../commands/execution-command"),T=require("../commands/observability-command"),M=require("../commands/help-command"),F=require("../commands/generate-docs-command"),j=require("../commands/feedback-command"),Q=require("../commands/doctor"),G=require("../commands/diagnostics-command"),H=require("../commands/session-workspace"),y=require("../commands/session-workspace"),I=require("../config/path-aliases"),J=require("../commands/runtime-command"),K=require("../commands/sync-command"),L=require("../commands/reveal-command"),p=require("../client/transport-options"),
|
|
1
|
+
"use strict";Object.defineProperty(exports,"__esModule",{value:!0}),exports.runCommand=z;const P=require("../commands/list-instances"),b=require("../commands/ping"),k=require("../commands/runtime-info"),S=require("../commands/print-config"),R=require("../commands/init-skill-usage"),x=require("../commands/init-workspace"),A=require("../commands/inspect"),c=require("../commands/captured-input"),E=require("../commands/module-plan-command"),D=require("../commands/rename-command"),N=require("../commands/move-command"),O=require("../commands/refactor-command"),U=require("../commands/imports-command"),W=require("../commands/execution-command"),T=require("../commands/observability-command"),M=require("../commands/help-command"),F=require("../commands/generate-docs-command"),j=require("../commands/feedback-command"),Q=require("../commands/doctor"),G=require("../commands/diagnostics-command"),H=require("../commands/session-workspace"),y=require("../commands/session-workspace"),I=require("../config/path-aliases"),J=require("../commands/runtime-command"),K=require("../commands/sync-command"),L=require("../commands/reveal-command"),p=require("../client/transport-options"),l=require("../shared/errors"),m=require("./input-source"),$=require("../config/workspace-state");async function z(n){return(0,y.runWithSessionOverride)(n.sessionId,()=>B(n))}async function B(n){const{command:o,restArgs:d,cwd:r,instanceId:_,metricsSpans:g}=n,u=V(o)?(0,$.ensureWorkspaceState)(r):null,C=u?(0,y.readSessionPathAliasOverrides)(r):{},f={...u?.pathAliases??{},...C},e=(0,I.expandPathAliasesInArgs)(r,d,f),a=await(0,m.resolveCommandInputSource)({command:o,cwd:r,restArgs:e,...n.stdinPayload!==void 0?{preResolvedPayload:(0,I.expandPathAliasesInJson)(r,n.stdinPayload,f)}:{},...n.stdinInputSource!==void 0?{preResolvedSource:n.stdinInputSource}:{}}),s=a.payload,t={};_!==void 0&&(t.explicitInstanceId=_),n.autoStartIde!==void 0&&(t.autoStartIde=n.autoStartIde),n.transport!==void 0&&(t.transport=n.transport),n.metricsEnabled===!0&&(t.metricsEnabled=!0),u&&(t.importRules=u.importRules,t.mutationComments=u.mutationComments);const w=(0,p.getPreferredTransport)();n.transport&&(0,p.setPreferredTransport)(n.transport);try{switch(o){case"doctor":return(0,Q.runDoctor)({cwd:r,runtime:e.includes("--runtime"),verbose:e.includes("--verbose"),json:e.includes("--json"),progress:e.includes("--progress")});case"diagnostics":return await(0,G.runDiagnosticsCommand)(e),{ok:!0,command:"diagnostics"};case"session":return(0,H.runSessionWorkspaceCommand)(r,e,s);case"init":return(0,x.runInitWorkspace)(r,d);case"help":return(0,M.runHelpCommand)(e);case"generate-docs":return(0,F.runGenerateDocsCommand)(r,d);case"sync":return(0,K.runSyncCommand)(r,e);case"reveal":return(0,L.runRevealCommand)(r,e);case"observability":return(0,T.runObservabilityCommand)(r,e);case"feedback":case"note":return(0,j.runFeedbackCommand)(r,d,o);case"runtime":return(0,J.runRuntimeCommand)(r,e);case"imports":return(0,c.attachCapturedInput)(r,"imports",s,await(0,U.runImportsCommand)(r,e,s,t,g),a.source);case"listInstances":return(0,P.runListInstances)();case"ping":return(0,b.runPing)(r,t);case"runtimeInfo":return(0,k.runRuntimeInfo)(r,t);case"printConfig":return(0,S.runPrintConfig)(r,t);case"initSkillUsage":case"init-skill-usage":{const i=e.findIndex(h=>h==="--cli-name"),q=i>=0&&e[i+1]?e[i+1]:"aib",v={cwd:r,cliName:q??"aib"};return v.resolveOptions=t,(0,R.runInitSkillUsage)(v)}case"inspect":return(0,c.attachCapturedInput)(r,e[0]==="graph"?"graph":"inspect",s,await(0,A.runInspect)(r,e,s,t),a.source);case"modulePlan":return(0,c.attachCapturedInput)(r,"modulePlan",s,await(0,E.runModulePlanCommand)(r,e,s,t,n.modulePlanExecutionId?{executionId:n.modulePlanExecutionId}:{}),a.source);case"execution":return(0,W.runExecutionCommand)(r,e);case"rename":{if(!(e[0]==="apply"&&typeof e[1]=="string"&&!e[1].startsWith("--"))&&(0,m.commandRequiresPayload)(o,e,a))throw new l.CliError("STDIN_REQUIRED","rename preview/apply/validate expects a payload on stdin or --from, except preview-id apply/help.");return(0,c.attachCapturedInput)(r,"rename",s,await(0,D.runRenameCommand)(r,e,s,t),a.source)}case"move":{if(!(e[0]==="toFile"&&e[1]==="apply"&&typeof e[2]=="string"&&!e[2].startsWith("--"))&&(0,m.commandRequiresPayload)(o,e,a))throw new l.CliError("STDIN_REQUIRED","move toFile preview/apply/validate expects a payload on stdin or --from.");return(0,c.attachCapturedInput)(r,"move",s,await(0,N.runMoveCommand)(r,e,s,t),a.source)}case"refactor":{if(!(e[0]==="batch"&&e[1]==="apply"&&typeof e[2]=="string"&&!e[2].startsWith("--"))&&(0,m.commandRequiresPayload)(o,e,a))throw new l.CliError("STDIN_REQUIRED","refactor batch preview/apply/validate expects a payload on stdin or --from, except preview-id apply/help.");return(0,c.attachCapturedInput)(r,"refactor",s,await(0,O.runRefactorCommand)(r,e,s,t),a.source)}default:throw new l.CliError("UNKNOWN_COMMAND",`Unknown command: ${o}`,{availableCommands:["doctor","diagnostics","listInstances","ping","runtimeInfo","printConfig","init-skill-usage","init","help","generate-docs","sync","reveal","inspect","imports","execution","move","rename","refactor","modulePlan","session","runtime","trace","observability","feedback","note"]})}}finally{(0,p.setPreferredTransport)(w)}}function V(n){return n!=="init"&&n!=="help"&&n!=="generate-docs"&&n!=="observability"&&n!=="feedback"&&n!=="note"&&n!=="runtime"&&n!=="diagnostics"&&n!=="doctor"&&n!=="reveal"}
|
package/dist/session/server.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
"use strict";var ee=exports&&exports.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var
|
|
1
|
+
"use strict";var ee=exports&&exports.__createBinding||(Object.create?(function(e,t,n,r){r===void 0&&(r=n);var i=Object.getOwnPropertyDescriptor(t,n);(!i||("get"in i?!t.__esModule:i.writable||i.configurable))&&(i={enumerable:!0,get:function(){return t[n]}}),Object.defineProperty(e,r,i)}):(function(e,t,n,r){r===void 0&&(r=n),e[r]=t[n]})),te=exports&&exports.__setModuleDefault||(Object.create?(function(e,t){Object.defineProperty(e,"default",{enumerable:!0,value:t})}):function(e,t){e.default=t}),H=exports&&exports.__importStar||(function(){var e=function(t){return e=Object.getOwnPropertyNames||function(n){var r=[];for(var i in n)Object.prototype.hasOwnProperty.call(n,i)&&(r[r.length]=i);return r},e(t)};return function(t){if(t&&t.__esModule)return t;var n={};if(t!=null)for(var r=e(t),i=0;i<r.length;i++)r[i]!=="default"&&ee(n,t,r[i]);return te(n,t),n}})();Object.defineProperty(exports,"__esModule",{value:!0}),exports.CliSessionServer=void 0,exports.runSessionServerCli=Ce;const x=H(require("node:fs")),ne=H(require("node:http")),re=require("../shared/agent-text"),oe=require("../shared/event-loop"),g=require("../shared/errors"),S=require("../shared/metrics"),se=require("../shared/stdout"),U=require("../shared/presentation"),ie=require("../tracing/trace"),V=require("../runtime/run-command"),ae=require("../config/resolve-command-alias"),D=require("../config/auto-start-ide"),a=require("../config/env-vars"),ue=require("../client/transport-options"),N=require("./paths"),O=require("../commands/module-plan-cache"),de=require("../commands/execution-command"),R=require("../payloads/read-stdin-json"),A=require("../commands/module-plan-timeout"),d=require("../diagnostics/module-plan-timeline"),G=require("../commands/mutation-execution-cache"),ce=!1,le=!1;function me(e){x.mkdirSync((0,N.getSessionDir)(),{recursive:!0}),x.writeFileSync((0,N.getSessionInfoPath)(),JSON.stringify(e,null,2)),x.writeFileSync((0,N.getSessionUrlPath)(),`${e.url}
|
|
2
2
|
`)}function fe(){x.rmSync((0,N.getSessionInfoPath)(),{force:!0}),x.rmSync((0,N.getSessionUrlPath)(),{force:!0})}async function k(e){const t=[];for await(const n of e)t.push(Buffer.isBuffer(n)?n:Buffer.from(String(n)));return Buffer.concat(t).toString("utf8")}function E(e,t,n){const r=JSON.stringify(n,null,2);e.writeHead(t,{"content-type":"application/json; charset=utf-8","content-length":Buffer.byteLength(r)}),e.end(r)}function C(e,t){if(e.destroyed||e.writableEnded)return;e.write(`${JSON.stringify(t)}
|
|
3
|
-
`);const n=e;typeof n.flush=="function"&&n.flush()}function pe(e,t,n,r){if(e!==null)return(0,R.parseStdinPayload)(e,{command:t,restArgs:n,...r!==void 0?{format:r}:{}})}function
|
|
4
|
-
`)}class K{server;constructor(){this.server=ne.createServer((t,n)=>{this.handleRequest(t,n)})}async handleRequest(t,n){if(t.method==="GET"&&t.url==="/health"){E(n,200,{ok:!0,pid:process.pid});return}if(t.method==="POST"&&t.url==="/run")try{const r=await k(t),s=r?JSON.parse(r):{};if(typeof s.command!="string"||!Array.isArray(s.restArgs)||typeof s.cwd!="string")throw new g.CliError("INVALID_SESSION_REQUEST","Invalid session request payload.");const i=Se(s.stdinInputSource),o={command:s.command,restArgs:s.restArgs.filter(p=>typeof p=="string"),cwd:s.cwd,stdinPayload:s.stdinPayload,metricsEnabled:s.metricsEnabled===!0};i!==void 0&&(o.stdinInputSource=i);const u=J(s.transport),f=Ie(s.env);u&&(o.transport=u),o.autoStartIde=(0,D.autoStartIdePolicyFromSession)(s.autoStartIde)??(0,D.resolveAutoStartIdePolicy)();const c=o.metricsEnabled?[]:void 0;c&&(o.metricsSpans=c),typeof s.instanceId=="string"&&(o.instanceId=s.instanceId),typeof s.sessionId=="string"&&(o.sessionId=s.sessionId),typeof s.modulePlanExecutionId=="string"&&(o.modulePlanExecutionId=s.modulePlanExecutionId),s.suppressModulePlanStreamStart===!0&&(o.suppressModulePlanStreamStart=!0);const I=(0,P.metricsNow)(),y=F(f,()=>(0,V.runCommand)(o)).then(p=>((0,P.recordSpan)(c,"session.runCommand",I),p),p=>{throw(0,P.recordSpan)(c,"session.runCommand",I),p}),l=j(o);if(l>0){const p=await W(o,y,l);if(p.status==="deadline"){y.catch(()=>{}),(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.deadline.output.start",{deadlineMs:l});const v=await B(o,l);(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.start",{mode:"deadline"}),E(n,200,v),(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.end",{mode:"deadline"});return}const S=p.result;(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.start",{mode:"result"}),E(n,200,c?(0,P.appendMetrics)(S,c):S),(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.end",{mode:"result"});return}const m=await y;(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.start",{mode:"no-deadline"}),E(n,200,c?(0,P.appendMetrics)(m,c):m),(0,d.recordModulePlanTimeline)(o.cwd,o.modulePlanExecutionId,"session.run.response.write.end",{mode:"no-deadline"});return}catch(r){E(n,500,(0,g.errorPayload)(r));return}if(t.method==="POST"&&t.url==="/cli"){let r=null,s=0,i=null;try{i=await X(t),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.request.parsed",{command:i.input.command,args:i.input.restArgs}),s=Date.now(),r=Y(i,s);const o=i.env,u=(0,P.metricsNow)();(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.runCommand.start");const f=F(o,()=>(0,V.runCommand)(i.input)).then(l=>((0,P.recordSpan)(i.spans,"session.runCommand",u),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.runCommand.resolved"),l),l=>{throw(0,P.recordSpan)(i.spans,"session.runCommand",u),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.runCommand.rejected",{error:l instanceof Error?l.message:String(l)}),l}),c=j(i.input);if(c>0){const l=await W(i.input,f,c);if(l.status==="deadline"){f.catch(()=>{}),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.deadline.output.start",{deadlineMs:c});const S=h(await B(i.input,c));M(r,i,S,0,s),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.response.write.start",{mode:"deadline"}),E(n,200,S),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.response.write.end",{mode:"deadline"});return}const m=l.result,p=h(i.spans?(0,P.appendMetrics)(m,i.spans):m);M(r,i,p,0,s),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.response.write.start",{mode:"result"}),E(n,200,p),(0,d.recordModulePlanTimeline)(i.input.cwd,i.input.modulePlanExecutionId,"session.cli.response.write.end",{mode:"result"});return}const I=await f,y=h(i.spans?(0,P.appendMetrics)(I,i.spans):I);M(r,i,y,0,s),E(n,200,y);return}catch(o){const u=h((0,g.errorPayload)(o));M(r,i,u,1,s),E(n,500,u);return}}if(t.method==="POST"&&t.url==="/cli/stream"){let r=null,s=null,i=0,o=null;try{if(o=await X(t,{streamGate:!0}),!Q(o.input)){n.writeHead(204),n.end();return}z(n),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.request.parsed",{command:o.input.command,args:o.input.restArgs}),i=Date.now(),s=Y(o,i),r=we(n,o.input);const u=o.env,f=(0,P.metricsNow)();(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.runCommand.start");const c=F(u,()=>(0,V.runCommand)(o.input)).then(m=>((0,P.recordSpan)(o.spans,"session.runCommand",f),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.runCommand.resolved"),m),m=>{throw(0,P.recordSpan)(o.spans,"session.runCommand",f),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.runCommand.rejected",{error:m instanceof Error?m.message:String(m)}),m}),I=j(o.input);if(I>0){const m=await W(o.input,c,I);if(m.status==="deadline"){c.catch(()=>{}),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.deadline.output.start",{deadlineMs:I});const v=h(await B(o.input,I));M(s,o,v,0,i),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.response.write.start",{mode:"deadline"}),C(n,{type:"result",payload:v}),n.end(),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cliStream.response.write.end",{mode:"deadline"});return}const p=m.result,S=h(o.spans?(0,P.appendMetrics)(p,o.spans):p);M(s,o,S,0,i),C(n,{type:"result",payload:S}),n.end();return}const y=await c,l=h(o.spans?(0,P.appendMetrics)(y,o.spans):y);M(s,o,l,0,i),C(n,{type:"result",payload:l}),n.end();return}catch(u){n.headersSent||z(n);const f=h((0,g.errorPayload)(u));M(s,o,f,1,i),C(n,{type:"error",payload:f}),n.end();return}finally{r&&clearInterval(r)}}E(n,404,{ok:!1,error:"Not found"})}async serve(){await new Promise((s,i)=>{this.server.once("error",i),this.server.listen(0,"127.0.0.1",()=>s())});const t=this.server.address();if(!t||typeof t=="string")throw new Error("Failed to determine aib session address.");me({pid:process.pid,host:"127.0.0.1",port:t.port,url:`http://127.0.0.1:${t.port}`,startedAt:new Date().toISOString()});let n=!1;const r=()=>{n||(n=!0,fe(),this.server.close(()=>{process.exit(0)}),setTimeout(()=>{process.exit(0)},1e3).unref())};process.on("SIGTERM",r),process.on("SIGINT",r),await new Promise(()=>{})}}exports.CliSessionServer=K;function Q(e){return e.command==="diagnostics"&&e.restArgs[0]==="timeout-stream"}function z(e){e.writeHead(200,{"content-type":"application/x-ndjson; charset=utf-8","cache-control":"no-cache","x-accel-buffering":"no"}),e.flushHeaders()}async function X(e,t={}){const n=await k(e),r=new URLSearchParams(n),s=r.get("command")??r.get("method")??"",i=r.get("cwd")??"",o=r.get("instanceId")??void 0,u=r.get("sessionId")??void 0,f=r.get("modulePlanExecutionId")??void 0,c=r.get("suppressModulePlanStreamStart")==="true",I=r.get("metricsEnabled")==="true",y=J(r.get("transport")),l=(0,D.autoStartIdePolicyFromSession)(r.get("autoStartIde"))??(0,D.resolveAutoStartIdePolicy)(),m=Ee(r.get("traceDir")),p=ge(r);if(!s.trim())throw new g.CliError("MISSING_COMMAND","Missing command.");if(!i.trim())throw new g.CliError("MISSING_CWD","Missing cwd.");const S=I?[]:void 0,v=(0,P.metricsNow)(),T=await(0,ae.resolveCanonicalCommandAlias)(s.trim(),i,o,l);(0,P.recordSpan)(S,"session.aliasResolution",v);const b=(0,R.stripStdinFormatFlags)(r.getAll("arg")),L=b.restArgs,w={command:T,restArgs:L,cwd:i,metricsEnabled:I,autoStartIde:l};if(y&&(w.transport=y),o&&(w.instanceId=o),u&&(w.sessionId=u),f&&(w.modulePlanExecutionId=f),c&&(w.suppressModulePlanStreamStart=!0),S&&(w.metricsSpans=S),t.streamGate===!0&&!Q(w))return{input:w,spans:S,...m!==void 0?{traceDir:m}:{},env:p};const q=Pe(r.get("stdin"),T,L,b.format),_={command:T,restArgs:L,cwd:i,stdinPayload:pe(r.get("stdin"),T,L,b.format),metricsEnabled:I,autoStartIde:l};return q!==void 0&&(_.stdinInputSource=q),y&&(_.transport=y),o&&(_.instanceId=o),u&&(_.sessionId=u),f&&(_.modulePlanExecutionId=f),c&&(_.suppressModulePlanStreamStart=!0),S&&(_.metricsSpans=S),{input:_,spans:S,...m!==void 0?{traceDir:m}:{},env:p}}function ge(e){const t={},n=[[a.CLI_ENV.metrics,e.get("metrics")??""],[a.CLI_ENV.metricsDir,e.get("metricsDir")??""],[a.CLI_ENV.metricsTag,e.get("metricsTag")??""],[a.CLI_ENV.mutationImpactMetrics,e.get("mutationImpactMetrics")??""],[a.CLI_ENV.mutationImpactStream,e.get("mutationImpactStream")??""],[a.CLI_ENV.testMoveToFileFailEntity,e.get("testMoveToFileFailEntity")??""],[a.CLI_ENV.testPostMutationCyclesDelayMs,e.get("testPostMutationCyclesDelayMs")??""],[a.CLI_ENV.testRefactorBatchDelayMs,e.get("testRefactorBatchDelayMs")??""],[a.CLI_ENV.testRenameDelayMs,e.get("testRenameDelayMs")??""],[a.CLI_ENV.modulePlanSyncWaitMs,e.get("modulePlanSyncWaitMs")??""],[a.CLI_ENV.refactorBatchSyncWaitMs,e.get("refactorBatchSyncWaitMs")??""],[a.CLI_ENV.renameSyncWaitMs,e.get("renameSyncWaitMs")??""],[a.CLI_ENV.modulePlanDebugTimeline,e.get("modulePlanDebugTimeline")??""],[a.CLI_ENV.trace,e.get("trace")??""],[a.CLI_ENV.failureSnapshots,e.get("failureSnapshots")??""],[a.CLI_ENV.productStorageDir,e.get("productStorageDir")??""]];for(const[r,s]of n){const i=s.trim();i&&(t[r]=i)}return t}function Ee(e){if(e===null)return;const t=e.trim();return t||void 0}function Y(e,t){return e.traceDir?(0,ie.startTrace)({cwd:e.input.cwd,argv:[e.input.command,...e.input.restArgs],command:e.input.command,restArgs:e.input.restArgs,...e.input.stdinPayload!==void 0?{stdinPayload:e.input.stdinPayload}:{},traceDir:e.traceDir,startedAtMs:t}):null}function M(e,t,n,r,s){if(!e?.enabled||!t)return;const i=(0,U.createCliPresentationEnvelope)(n);e.complete({output:i.tracePayload,exitCode:n.ok===!1?1:r,durationMs:Date.now()-s,...t.input.transport?{transport:t.input.transport}:{}})}function h(e){return(0,U.createCliPresentationEnvelope)(e).payload}function we(e,t){if(!Me(t))return null;const n=t.modulePlanExecutionId??(0,O.buildModulePlanExecutionId)();t.modulePlanExecutionId=n;const r=Date.now(),s=Z(t),i=s?`
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
`);const n=e;typeof n.flush=="function"&&n.flush()}function pe(e,t,n,r){if(e!==null)return(0,R.parseStdinPayload)(e,{command:t,restArgs:n,...r!==void 0?{format:r}:{}})}function Se(e,t,n,r){if(e!==null)return(0,R.parseInputPayloadWithSource)(e,{command:t,restArgs:n,...r!==void 0?{format:r}:{}}).source}function Pe(e){if(e==null)return;if(!e||typeof e!="object"||Array.isArray(e))throw new g.CliError("INVALID_SESSION_REQUEST","Invalid stdin input source.");const t=e;if(t.format!=="json"&&t.format!=="dsl"||typeof t.text!="string")throw new g.CliError("INVALID_SESSION_REQUEST","Invalid stdin input source.");return{format:t.format,text:t.text}}function J(e){if(e==null||e==="")return;const t=(0,ue.parseExtensionTransport)(e);if(!t)throw new g.CliError("INVALID_TRANSPORT","Expected transport to be either http or websocket.");return t}function Ie(e){if(!e||typeof e!="object"||Array.isArray(e))return{};const t=new Set([a.CLI_ENV.managedHostScript,a.CLI_ENV.managedHostKind,a.CLI_ENV.managedHostRunDir,a.CLI_ENV.codeServerPath,a.CLI_ENV.extensionVsix,a.CLI_ENV.ideCommand,a.CLI_ENV.chromePath,a.CLI_ENV.managedHostWaitMs,a.CLI_ENV.workspaceRoot,a.CLI_ENV.disableWatchers,a.CLI_ENV.trace,a.CLI_ENV.traceDir,a.CLI_ENV.failureSnapshots,a.CLI_ENV.productStorageDir,a.CLI_ENV.metrics,a.CLI_ENV.metricsDir,a.CLI_ENV.metricsTag,a.CLI_ENV.mutationImpactMetrics,a.CLI_ENV.mutationImpactStream,a.CLI_ENV.testMoveToFileFailEntity,a.CLI_ENV.testPostMutationCyclesDelayMs,a.CLI_ENV.testRefactorBatchDelayMs,a.CLI_ENV.testRenameDelayMs,a.CLI_ENV.modulePlanSyncWaitMs,a.CLI_ENV.refactorBatchSyncWaitMs,a.CLI_ENV.renameSyncWaitMs,a.CLI_ENV.modulePlanDebugTimeline]),n={};for(const[r,i]of Object.entries(e))t.has(r)&&typeof i=="string"&&(n[r]=i);return n}async function F(e,t){const n=Object.entries(e);if(n.length===0)return t();const r=new Map;for(const[i,o]of n)r.set(i,process.env[i]),process.env[i]=o;try{return await t()}finally{for(const[i,o]of r)o===void 0?delete process.env[i]:process.env[i]=o}}async function W(e,t,n){return(0,d.recordModulePlanTimeline)(e.cwd,e.modulePlanExecutionId,"session.deadline.wait.start",{deadlineMs:n}),(0,G.waitForMutationDeadline)(t.then(r=>((0,d.recordModulePlanTimeline)(e.cwd,e.modulePlanExecutionId,"session.deadline.runPromise.resolved"),r)),n,()=>(0,d.recordModulePlanTimeline)(e.cwd,e.modulePlanExecutionId,"session.deadline.timer.fired",{deadlineMs:n}))}function $(e){if(e.command!=="modulePlan")return 0;const t=e.restArgs[0]??"";return t!=="execute"&&t!=="apply"?0:(0,G.readMutationSyncWaitMs)(process.env[a.CLI_ENV.modulePlanSyncWaitMs],12e4)}async function j(e,t){const n=e.modulePlanExecutionId??"last";await(0,oe.yieldToEventLoop)();let r;try{(0,d.recordModulePlanTimeline)(e.cwd,n,"session.inProgress.status.read.start",{elapsedMs:t}),r=(0,de.runExecutionCommand)(e.cwd,["status",n]),(0,d.recordModulePlanTimeline)(e.cwd,n,"session.inProgress.status.read.end",{status:typeof r.status=="string"?r.status:null,phase:typeof r.phase=="string"?r.phase:null,summary:typeof r.summary=="string"?r.summary:null})}catch{(0,d.recordModulePlanTimeline)(e.cwd,n,"session.inProgress.status.read.failed",{elapsedMs:t}),r={operation:"execution.status",executionId:n,status:"running",summary:"in progress"}}const i=Z(e),o=i?i.estimatedDurationMs-t:null,s=ye(r,e,o);return(0,re.attachAgentText)({...r,operation:r.operation??"execution.status",executionId:n,status:r.status??"running",...o!==null?{estimatedRemainingMs:Math.max(0,o)}:{}},s)}function ye(e,t,n){const r=typeof e.executionId=="string"?e.executionId:t.modulePlanExecutionId??"last",o=[`modulePlan.${t.restArgs[0]??"execute"} ${r}`];return typeof e.summary=="string"&&e.summary.length>0&&o.push(e.summary),e.phase==="preview"&&o.push("previewing plan"),e.phase==="mutation"&&o.push("applying mutation"),e.phase==="postMutation.cycles"&&(o.push("mutation completed"),o.push("checking cycles")),o.push(`status: aib execution status ${r}`),n!==null&&o.push(n>0?`estimated remaining: ${(0,A.formatModulePlanTimeoutEstimate)(Math.max(n,5e3))}`:"estimated remaining: check status again soon"),o.join(`
|
|
4
|
+
`)}class K{server;constructor(){this.server=ne.createServer((t,n)=>{this.handleRequest(t,n)})}async handleRequest(t,n){if(t.method==="GET"&&t.url==="/health"){E(n,200,{ok:!0,pid:process.pid});return}if(t.method==="POST"&&t.url==="/run")try{const r=await k(t),i=r?JSON.parse(r):{};if(typeof i.command!="string"||!Array.isArray(i.restArgs)||typeof i.cwd!="string")throw new g.CliError("INVALID_SESSION_REQUEST","Invalid session request payload.");const o=Pe(i.stdinInputSource),s={command:i.command,restArgs:i.restArgs.filter(p=>typeof p=="string"),cwd:i.cwd,stdinPayload:i.stdinPayload,metricsEnabled:i.metricsEnabled===!0};o!==void 0&&(s.stdinInputSource=o);const u=J(i.transport),f=Ie(i.env);u&&(s.transport=u),s.autoStartIde=(0,D.autoStartIdePolicyFromSession)(i.autoStartIde)??(0,D.resolveAutoStartIdePolicy)();const c=s.metricsEnabled?[]:void 0;c&&(s.metricsSpans=c),typeof i.instanceId=="string"&&(s.instanceId=i.instanceId),typeof i.sessionId=="string"&&(s.sessionId=i.sessionId),typeof i.modulePlanExecutionId=="string"&&(s.modulePlanExecutionId=i.modulePlanExecutionId),i.suppressModulePlanStreamStart===!0&&(s.suppressModulePlanStreamStart=!0);const I=(0,S.metricsNow)(),y=F(f,()=>(0,V.runCommand)(s)).then(p=>((0,S.recordSpan)(c,"session.runCommand",I),p),p=>{throw(0,S.recordSpan)(c,"session.runCommand",I),p}),l=$(s);if(l>0){const p=await W(s,y,l);if(p.status==="deadline"){y.catch(()=>{}),(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.deadline.output.start",{deadlineMs:l});const v=await j(s,l);(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.start",{mode:"deadline"}),E(n,200,v),(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.end",{mode:"deadline"});return}const P=p.result;(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.start",{mode:"result"}),E(n,200,c?(0,S.appendMetrics)(P,c):P),(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.end",{mode:"result"});return}const m=await y;(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.start",{mode:"no-deadline"}),E(n,200,c?(0,S.appendMetrics)(m,c):m),(0,d.recordModulePlanTimeline)(s.cwd,s.modulePlanExecutionId,"session.run.response.write.end",{mode:"no-deadline"});return}catch(r){E(n,500,(0,g.errorPayload)(r));return}if(t.method==="POST"&&t.url==="/cli"){let r=null,i=0,o=null;try{o=await X(t),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.request.parsed",{command:o.input.command,args:o.input.restArgs}),i=Date.now(),r=Y(o,i);const s=o.env,u=(0,S.metricsNow)();(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.runCommand.start");const f=F(s,()=>(0,V.runCommand)(o.input)).then(l=>((0,S.recordSpan)(o.spans,"session.runCommand",u),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.runCommand.resolved"),l),l=>{throw(0,S.recordSpan)(o.spans,"session.runCommand",u),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.runCommand.rejected",{error:l instanceof Error?l.message:String(l)}),l}),c=$(o.input);if(c>0){const l=await W(o.input,f,c);if(l.status==="deadline"){f.catch(()=>{}),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.deadline.output.start",{deadlineMs:c});const P=h(await j(o.input,c));M(r,o,P,0,i),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.response.write.start",{mode:"deadline"}),E(n,200,P),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.response.write.end",{mode:"deadline"});return}const m=l.result,p=h(o.spans?(0,S.appendMetrics)(m,o.spans):m);M(r,o,p,0,i),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.response.write.start",{mode:"result"}),E(n,200,p),(0,d.recordModulePlanTimeline)(o.input.cwd,o.input.modulePlanExecutionId,"session.cli.response.write.end",{mode:"result"});return}const I=await f,y=h(o.spans?(0,S.appendMetrics)(I,o.spans):I);M(r,o,y,0,i),E(n,200,y);return}catch(s){const u=h((0,g.errorPayload)(s));M(r,o,u,1,i),E(n,500,u);return}}if(t.method==="POST"&&t.url==="/cli/stream"){let r=null,i=null,o=0,s=null;try{if(s=await X(t,{streamGate:!0}),!Q(s.input)){n.writeHead(204),n.end();return}z(n),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.request.parsed",{command:s.input.command,args:s.input.restArgs}),o=Date.now(),i=Y(s,o),r=we(n,s.input);const u=s.env,f=(0,S.metricsNow)();(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.runCommand.start");const c=F(u,()=>(0,V.runCommand)(s.input)).then(m=>((0,S.recordSpan)(s.spans,"session.runCommand",f),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.runCommand.resolved"),m),m=>{throw(0,S.recordSpan)(s.spans,"session.runCommand",f),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.runCommand.rejected",{error:m instanceof Error?m.message:String(m)}),m}),I=$(s.input);if(I>0){const m=await W(s.input,c,I);if(m.status==="deadline"){c.catch(()=>{}),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.deadline.output.start",{deadlineMs:I});const v=h(await j(s.input,I));M(i,s,v,0,o),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.response.write.start",{mode:"deadline"}),C(n,{type:"result",payload:v}),n.end(),(0,d.recordModulePlanTimeline)(s.input.cwd,s.input.modulePlanExecutionId,"session.cliStream.response.write.end",{mode:"deadline"});return}const p=m.result,P=h(s.spans?(0,S.appendMetrics)(p,s.spans):p);M(i,s,P,0,o),C(n,{type:"result",payload:P}),n.end();return}const y=await c,l=h(s.spans?(0,S.appendMetrics)(y,s.spans):y);M(i,s,l,0,o),C(n,{type:"result",payload:l}),n.end();return}catch(u){n.headersSent||z(n);const f=h((0,g.errorPayload)(u));M(i,s,f,1,o),C(n,{type:"error",payload:f}),n.end();return}finally{r&&clearInterval(r)}}E(n,404,{ok:!1,error:"Not found"})}async serve(){await new Promise((i,o)=>{this.server.once("error",o),this.server.listen(0,"127.0.0.1",()=>i())});const t=this.server.address();if(!t||typeof t=="string")throw new Error("Failed to determine aib session address.");me({pid:process.pid,host:"127.0.0.1",port:t.port,url:`http://127.0.0.1:${t.port}`,startedAt:new Date().toISOString()});let n=!1;const r=()=>{n||(n=!0,fe(),this.server.close(()=>{process.exit(0)}),setTimeout(()=>{process.exit(0)},1e3).unref())};process.on("SIGTERM",r),process.on("SIGINT",r),await new Promise(()=>{})}}exports.CliSessionServer=K;function Q(e){return e.command==="diagnostics"&&e.restArgs[0]==="timeout-stream"}function z(e){e.writeHead(200,{"content-type":"application/x-ndjson; charset=utf-8","cache-control":"no-cache","x-accel-buffering":"no"}),e.flushHeaders()}async function X(e,t={}){const n=await k(e),r=new URLSearchParams(n),i=r.get("command")??r.get("method")??"",o=r.get("cwd")??"",s=r.get("instanceId")??void 0,u=r.get("sessionId")??void 0,f=r.get("modulePlanExecutionId")??void 0,c=r.get("suppressModulePlanStreamStart")==="true",I=r.get("metricsEnabled")==="true",y=J(r.get("transport")),l=(0,D.autoStartIdePolicyFromSession)(r.get("autoStartIde"))??(0,D.resolveAutoStartIdePolicy)(),m=Ee(r.get("traceDir")),p=ge(r);if(!i.trim())throw new g.CliError("MISSING_COMMAND","Missing command.");if(!o.trim())throw new g.CliError("MISSING_CWD","Missing cwd.");const P=I?[]:void 0,v=(0,S.metricsNow)(),T=await(0,ae.resolveCanonicalCommandAlias)(i.trim(),o,s,l);(0,S.recordSpan)(P,"session.aliasResolution",v);const b=(0,R.stripStdinFormatFlags)(r.getAll("arg")),L=b.restArgs,w={command:T,restArgs:L,cwd:o,metricsEnabled:I,autoStartIde:l};if(y&&(w.transport=y),s&&(w.instanceId=s),u&&(w.sessionId=u),f&&(w.modulePlanExecutionId=f),c&&(w.suppressModulePlanStreamStart=!0),P&&(w.metricsSpans=P),t.streamGate===!0&&!Q(w))return{input:w,spans:P,...m!==void 0?{traceDir:m}:{},env:p};const q=Se(r.get("stdin"),T,L,b.format),_={command:T,restArgs:L,cwd:o,stdinPayload:pe(r.get("stdin"),T,L,b.format),metricsEnabled:I,autoStartIde:l};return q!==void 0&&(_.stdinInputSource=q),y&&(_.transport=y),s&&(_.instanceId=s),u&&(_.sessionId=u),f&&(_.modulePlanExecutionId=f),c&&(_.suppressModulePlanStreamStart=!0),P&&(_.metricsSpans=P),{input:_,spans:P,...m!==void 0?{traceDir:m}:{},env:p}}function ge(e){const t={},n=[[a.CLI_ENV.metrics,e.get("metrics")??""],[a.CLI_ENV.metricsDir,e.get("metricsDir")??""],[a.CLI_ENV.metricsTag,e.get("metricsTag")??""],[a.CLI_ENV.mutationImpactMetrics,e.get("mutationImpactMetrics")??""],[a.CLI_ENV.mutationImpactStream,e.get("mutationImpactStream")??""],[a.CLI_ENV.testMoveToFileFailEntity,e.get("testMoveToFileFailEntity")??""],[a.CLI_ENV.testPostMutationCyclesDelayMs,e.get("testPostMutationCyclesDelayMs")??""],[a.CLI_ENV.testRefactorBatchDelayMs,e.get("testRefactorBatchDelayMs")??""],[a.CLI_ENV.testRenameDelayMs,e.get("testRenameDelayMs")??""],[a.CLI_ENV.modulePlanSyncWaitMs,e.get("modulePlanSyncWaitMs")??""],[a.CLI_ENV.refactorBatchSyncWaitMs,e.get("refactorBatchSyncWaitMs")??""],[a.CLI_ENV.renameSyncWaitMs,e.get("renameSyncWaitMs")??""],[a.CLI_ENV.modulePlanDebugTimeline,e.get("modulePlanDebugTimeline")??""],[a.CLI_ENV.trace,e.get("trace")??""],[a.CLI_ENV.failureSnapshots,e.get("failureSnapshots")??""],[a.CLI_ENV.productStorageDir,e.get("productStorageDir")??""]];for(const[r,i]of n){const o=i.trim();o&&(t[r]=o)}return t}function Ee(e){if(e===null)return;const t=e.trim();return t||void 0}function Y(e,t){return e.traceDir?(0,ie.startTrace)({cwd:e.input.cwd,argv:[e.input.command,...e.input.restArgs],command:e.input.command,restArgs:e.input.restArgs,...e.input.stdinPayload!==void 0?{stdinPayload:e.input.stdinPayload}:{},...e.input.stdinInputSource!==void 0?{stdinSource:e.input.stdinInputSource}:{},traceDir:e.traceDir,startedAtMs:t}):null}function M(e,t,n,r,i){if(!e?.enabled||!t)return;const o=(0,U.createCliPresentationEnvelope)(n);e.complete({output:o.tracePayload,stdoutText:o.text?`${o.text.trimEnd()}
|
|
5
|
+
`:`${JSON.stringify(o.tracePayload,null,2)}
|
|
6
|
+
`,exitCode:n.ok===!1?1:r,durationMs:Date.now()-i,...t.input.transport?{transport:t.input.transport}:{}})}function h(e){return(0,U.createCliPresentationEnvelope)(e).payload}function we(e,t){if(!Me(t))return null;const n=t.modulePlanExecutionId??(0,O.buildModulePlanExecutionId)();t.modulePlanExecutionId=n;const r=Date.now(),i=Z(t),o=i?`
|
|
7
|
+
estimated: ${(0,A.formatModulePlanTimeoutEstimate)(i.estimatedDurationMs)}`:"";if(t.suppressModulePlanStreamStart||C(e,{type:"start",text:`modulePlan.${t.restArgs[0]??"execute"} ${n}
|
|
8
|
+
status: aib execution status ${n}${o}`,data:{operation:`modulePlan.${t.restArgs[0]??"execute"}`,executionId:n,...i?{estimatedTimeoutMs:i.recommendedTimeoutMs,estimatedDurationMs:i.estimatedDurationMs,suggestedFirstCheckMs:i.suggestedFirstCheckMs,rowCount:i.rowCount,symbolCount:i.symbolCount}:{}}}),!le)return null;let s=r;return setInterval(()=>{try{const u=(0,O.readModulePlanExecutionStatus)(t.cwd,n),f=Date.parse(u.startedAt);if(Number.isFinite(f)&&f+1e3<r){s=B(e,s);return}if(!(u.completedRows>0||u.failedRows>0||u.filesWritten.length>0)){s=B(e,s);return}C(e,{type:"progress",text:`progress: ${u.completedRows}/${u.rowCount} rows${_e(u.completedEntities,u.entityCount)}, ${u.filesWritten.length} files`,data:{operation:u.operation,executionId:u.executionId,status:u.status,completedRows:u.completedRows,failedRows:u.failedRows,rowCount:u.rowCount,completedEntities:u.completedEntities,entityCount:u.entityCount,filesWritten:u.filesWritten.length}})}catch{s=B(e,s)}},5e3)}function B(e,t){if(!ce)return t;const n=Date.now();return n-t<3e4?t:(C(e,{type:"progress",text:"modulePlan still running",data:{operation:"modulePlan",status:"running"}}),n)}function _e(e,t){return!t||t<=0?"":`, ${Math.floor((e??0)/t*100)}% entities`}function Me(e){if(e.command!=="modulePlan")return!1;const t=e.restArgs[0]??"";return t==="execute"||t==="apply"}function Z(e){const t=e.restArgs[0]??"";if(t==="execute")return(0,A.estimateModulePlanTimeoutFromRequest)(e.stdinPayload);if(t!=="apply")return null;const n=he(e.restArgs);if(!n)return null;try{return(0,A.estimateModulePlanTimeoutFromRequest)((0,O.readModulePlanRecord)(e.cwd,n).normalizedRequest)}catch{return null}}function he(e){const t=e.indexOf("--plan");if(t>=0){const r=e[t+1];return r&&!r.startsWith("--")?r:null}return e.slice(1).find(r=>!r.startsWith("--"))??null}async function Ce(){const e=process.argv[3]||"status";if(e!=="serve"){(0,se.printJson)((0,g.errorPayload)(new g.CliError("UNKNOWN_SESSION_COMMAND",`Unknown aib session command: ${e}`))),process.exitCode=1;return}await new K().serve()}
|