@h-rig/cli 0.0.6-alpha.94 → 0.0.6-alpha.95

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 (108) hide show
  1. package/README.md +6 -27
  2. package/bin/rig.js +16 -0
  3. package/package.json +14 -40
  4. package/dist/bin/build-rig-binaries.d.ts +0 -2
  5. package/dist/bin/build-rig-binaries.js +0 -119
  6. package/dist/bin/rig.d.ts +0 -72
  7. package/dist/bin/rig.js +0 -17855
  8. package/dist/config/rig-default-config.yml +0 -5
  9. package/dist/src/app/drone-ui.d.ts +0 -34
  10. package/dist/src/app/drone-ui.js +0 -278
  11. package/dist/src/commands/_async-ui.d.ts +0 -10
  12. package/dist/src/commands/_async-ui.js +0 -121
  13. package/dist/src/commands/_cli-format.d.ts +0 -56
  14. package/dist/src/commands/_cli-format.js +0 -319
  15. package/dist/src/commands/_connection-state.d.ts +0 -54
  16. package/dist/src/commands/_connection-state.js +0 -187
  17. package/dist/src/commands/_doctor-checks.d.ts +0 -46
  18. package/dist/src/commands/_doctor-checks.js +0 -352
  19. package/dist/src/commands/_help-catalog.d.ts +0 -51
  20. package/dist/src/commands/_help-catalog.js +0 -502
  21. package/dist/src/commands/_inprocess-services.d.ts +0 -33
  22. package/dist/src/commands/_inprocess-services.js +0 -102
  23. package/dist/src/commands/_json-output.d.ts +0 -11
  24. package/dist/src/commands/_json-output.js +0 -60
  25. package/dist/src/commands/_lazy-reconcile.d.ts +0 -34
  26. package/dist/src/commands/_lazy-reconcile.js +0 -102
  27. package/dist/src/commands/_parsers.d.ts +0 -15
  28. package/dist/src/commands/_parsers.js +0 -114
  29. package/dist/src/commands/_paths.d.ts +0 -11
  30. package/dist/src/commands/_paths.js +0 -50
  31. package/dist/src/commands/_pi-frontend.d.ts +0 -35
  32. package/dist/src/commands/_pi-frontend.js +0 -64
  33. package/dist/src/commands/_pi-install.d.ts +0 -42
  34. package/dist/src/commands/_pi-install.js +0 -167
  35. package/dist/src/commands/_policy.d.ts +0 -8
  36. package/dist/src/commands/_policy.js +0 -127
  37. package/dist/src/commands/_probes.d.ts +0 -1
  38. package/dist/src/commands/_probes.js +0 -13
  39. package/dist/src/commands/_run-bridge.d.ts +0 -114
  40. package/dist/src/commands/_run-bridge.js +0 -387
  41. package/dist/src/commands/_run-diagnostics.d.ts +0 -9
  42. package/dist/src/commands/_run-diagnostics.js +0 -51
  43. package/dist/src/commands/_run-driver-helpers.d.ts +0 -26
  44. package/dist/src/commands/_run-driver-helpers.js +0 -138
  45. package/dist/src/commands/_run-projection.d.ts +0 -50
  46. package/dist/src/commands/_run-projection.js +0 -349
  47. package/dist/src/commands/_run-subcommands.d.ts +0 -3
  48. package/dist/src/commands/_run-subcommands.js +0 -31
  49. package/dist/src/commands/_spinner.d.ts +0 -25
  50. package/dist/src/commands/_spinner.js +0 -65
  51. package/dist/src/commands/agent.d.ts +0 -3
  52. package/dist/src/commands/agent.js +0 -8837
  53. package/dist/src/commands/dist.d.ts +0 -28
  54. package/dist/src/commands/dist.js +0 -417
  55. package/dist/src/commands/doctor.d.ts +0 -3
  56. package/dist/src/commands/doctor.js +0 -480
  57. package/dist/src/commands/github.d.ts +0 -3
  58. package/dist/src/commands/github.js +0 -342
  59. package/dist/src/commands/inbox.d.ts +0 -28
  60. package/dist/src/commands/inbox.js +0 -579
  61. package/dist/src/commands/init.d.ts +0 -64
  62. package/dist/src/commands/init.js +0 -1541
  63. package/dist/src/commands/inspect.d.ts +0 -20
  64. package/dist/src/commands/inspect.js +0 -764
  65. package/dist/src/commands/pi.d.ts +0 -3
  66. package/dist/src/commands/pi.js +0 -177
  67. package/dist/src/commands/plugin.d.ts +0 -16
  68. package/dist/src/commands/plugin.js +0 -714
  69. package/dist/src/commands/profile-and-review.d.ts +0 -4
  70. package/dist/src/commands/profile-and-review.js +0 -223
  71. package/dist/src/commands/queue.d.ts +0 -3
  72. package/dist/src/commands/queue.js +0 -197
  73. package/dist/src/commands/remote.d.ts +0 -3
  74. package/dist/src/commands/remote.js +0 -1337
  75. package/dist/src/commands/repo-git-harness.d.ts +0 -5
  76. package/dist/src/commands/repo-git-harness.js +0 -271
  77. package/dist/src/commands/run.d.ts +0 -21
  78. package/dist/src/commands/run.js +0 -17847
  79. package/dist/src/commands/server.d.ts +0 -3
  80. package/dist/src/commands/server.js +0 -249
  81. package/dist/src/commands/setup.d.ts +0 -16
  82. package/dist/src/commands/setup.js +0 -644
  83. package/dist/src/commands/stats.d.ts +0 -15
  84. package/dist/src/commands/stats.js +0 -979
  85. package/dist/src/commands/task-run-driver.d.ts +0 -94
  86. package/dist/src/commands/task-run-driver.js +0 -203
  87. package/dist/src/commands/task.d.ts +0 -35
  88. package/dist/src/commands/task.js +0 -818
  89. package/dist/src/commands/test.d.ts +0 -3
  90. package/dist/src/commands/test.js +0 -46
  91. package/dist/src/commands/triage.d.ts +0 -11
  92. package/dist/src/commands/triage.js +0 -227
  93. package/dist/src/commands/workspace.d.ts +0 -3
  94. package/dist/src/commands/workspace.js +0 -130
  95. package/dist/src/commands.d.ts +0 -13
  96. package/dist/src/commands.js +0 -17979
  97. package/dist/src/index.d.ts +0 -4
  98. package/dist/src/index.js +0 -17991
  99. package/dist/src/launcher.d.ts +0 -61
  100. package/dist/src/launcher.js +0 -199
  101. package/dist/src/operator-cli.d.ts +0 -2
  102. package/dist/src/operator-cli.js +0 -17847
  103. package/dist/src/operator-entry.d.ts +0 -1
  104. package/dist/src/operator-entry.js +0 -3
  105. package/dist/src/runner.d.ts +0 -47
  106. package/dist/src/runner.js +0 -267
  107. package/dist/src/withMutedConsole.d.ts +0 -2
  108. package/dist/src/withMutedConsole.js +0 -42
@@ -1,60 +0,0 @@
1
- // @bun
2
- // packages/cli/src/commands/_json-output.ts
3
- import { Schema } from "effect";
4
- import {
5
- RigDoctorCheckOutput,
6
- RigInboxApprovalsOutput,
7
- RigInboxInputsOutput,
8
- RigRunListOutput,
9
- RigRunShowOutput,
10
- RigServerRepairLinkOutput,
11
- RigServerStatusOutput,
12
- RigServerUseOutput,
13
- RigStatsOutput,
14
- RigTaskListOutput,
15
- RigTaskShowOutput
16
- } from "@rig/contracts";
17
- var CLI_OUTPUT_SCHEMAS = {
18
- "task list": RigTaskListOutput,
19
- "task show": RigTaskShowOutput,
20
- "run list": RigRunListOutput,
21
- "run show": RigRunShowOutput,
22
- "server use": RigServerUseOutput,
23
- "server status": RigServerStatusOutput,
24
- "server repair-link": RigServerRepairLinkOutput,
25
- "inbox approvals": RigInboxApprovalsOutput,
26
- "inbox inputs": RigInboxInputsOutput,
27
- "doctor check": RigDoctorCheckOutput,
28
- "stats show": RigStatsOutput
29
- };
30
- function isCommandOutcomeLike(value) {
31
- if (!value || typeof value !== "object" || Array.isArray(value))
32
- return false;
33
- const record = value;
34
- return typeof record.group === "string" && typeof record.command === "string";
35
- }
36
- function buildCliJsonEnvelope(outcome, options = {}) {
37
- if (!isCommandOutcomeLike(outcome))
38
- return null;
39
- const commandKey = `${outcome.group} ${outcome.command}`;
40
- const schema = CLI_OUTPUT_SCHEMAS[commandKey];
41
- if (!schema)
42
- return null;
43
- const warn = options.warn ?? ((message) => console.error(message));
44
- const envelope = { v: 1, command: commandKey, data: outcome.details ?? {} };
45
- try {
46
- Schema.decodeUnknownSync(schema)(JSON.parse(JSON.stringify(envelope)));
47
- return envelope;
48
- } catch (error) {
49
- warn(`[rig] --json output for "${commandKey}" failed schema validation; printing legacy payload. ` + `(${error instanceof Error ? error.message.split(`
50
- `)[0] : String(error)})`);
51
- return null;
52
- }
53
- }
54
- function listSchematizedCliCommands() {
55
- return Object.keys(CLI_OUTPUT_SCHEMAS).sort();
56
- }
57
- export {
58
- listSchematizedCliCommands,
59
- buildCliJsonEnvelope
60
- };
@@ -1,34 +0,0 @@
1
- import { SessionManager } from "@oh-my-pi/pi-coding-agent";
2
- import { type CollabRegistryFilter, type CollabSessionProjection } from "@oh-my-pi/pi-coding-agent/collab/api";
3
- import { type RunJournalProjection, type RunSessionCustomEntry } from "@rig/contracts";
4
- type SessionWriter = {
5
- appendCustomEntry(customType: string, data: unknown): void;
6
- };
7
- export type CollabSessionProjectionLike = Pick<CollabSessionProjection, "collab" | "customEntries" | "source"> & {
8
- readonly runId?: string;
9
- readonly session: Pick<CollabSessionProjection["session"], "path" | "id">;
10
- };
11
- export type ProjectRunProjection = Pick<RunJournalProjection, "status">;
12
- export type ProjectRunFromSession = (source: Pick<SessionManager, "getEntries"> | ReadonlyArray<RunSessionCustomEntry> | readonly unknown[], runId: string) => ProjectRunProjection;
13
- export type LazyReconcileFlippedRun = {
14
- readonly runId: string;
15
- readonly sessionPath: string;
16
- readonly reason: "lazy-reconcile:dead-pid";
17
- };
18
- export type LazyReconcileResult = {
19
- readonly flipped: readonly LazyReconcileFlippedRun[];
20
- readonly resumable: readonly LazyReconcileFlippedRun[];
21
- };
22
- type LazyReconcileDeps = {
23
- readonly listCollabSessionProjections?: (filter: CollabRegistryFilter) => Promise<readonly CollabSessionProjectionLike[]>;
24
- readonly projectRunFromSession?: ProjectRunFromSession;
25
- readonly processExists?: (pid: number) => boolean;
26
- readonly openSession?: (sessionPath: string) => Promise<SessionWriter>;
27
- readonly nowIso?: () => string;
28
- };
29
- export type LazyReconcileInput = {
30
- readonly workspaceRoot: string;
31
- readonly identityFilter: CollabRegistryFilter;
32
- };
33
- export declare function runLazyReconcile(input: LazyReconcileInput, deps?: LazyReconcileDeps): Promise<LazyReconcileResult>;
34
- export {};
@@ -1,102 +0,0 @@
1
- // @bun
2
- var __require = import.meta.require;
3
-
4
- // packages/cli/src/commands/_lazy-reconcile.ts
5
- import { SessionManager } from "@oh-my-pi/pi-coding-agent";
6
- import {
7
- listCollabSessionProjections as ompListCollabSessionProjections
8
- } from "@oh-my-pi/pi-coding-agent/collab/api";
9
- import {
10
- CUSTOM_TYPE_FOR,
11
- isTerminalRunStatus
12
- } from "@rig/contracts";
13
- var ACTIVE_LOCAL_RUN_STATUSES = new Set([
14
- "created",
15
- "preparing",
16
- "running",
17
- "validating",
18
- "reviewing",
19
- "closing-out"
20
- ]);
21
- function processExists(pid) {
22
- if (!Number.isInteger(pid) || pid <= 0)
23
- return false;
24
- try {
25
- process.kill(pid, 0);
26
- return true;
27
- } catch {
28
- return false;
29
- }
30
- }
31
- async function defaultProjectRunFromSession(source, runId) {
32
- const mod = await import("@rig/runtime/control-plane/run-session-projection");
33
- const candidate = Reflect.get(mod, "projectRunFromSession");
34
- if (typeof candidate !== "function") {
35
- throw new Error("@rig/runtime/control-plane/run-session-projection does not export projectRunFromSession yet; inject projectRunFromSession until RunState lands it.");
36
- }
37
- return candidate(source, runId);
38
- }
39
- async function defaultOpenSession(sessionPath) {
40
- return await SessionManager.open(sessionPath, undefined, undefined, { suppressBreadcrumb: true });
41
- }
42
- function projectionRunId(item) {
43
- if (item.runId?.trim())
44
- return item.runId.trim();
45
- if (item.collab?.sessionId?.trim())
46
- return item.collab.sessionId.trim();
47
- if (item.session.id?.trim())
48
- return item.session.id.trim();
49
- return null;
50
- }
51
- function isLocallyDiscovered(item) {
52
- return item.source === "session-list";
53
- }
54
- function isActiveStatus(status) {
55
- if (status === null)
56
- return false;
57
- return !isTerminalRunStatus(status);
58
- }
59
- function shouldFlip(item, status, exists) {
60
- if (!isActiveStatus(status))
61
- return false;
62
- if (item.collab?.stale === true)
63
- return true;
64
- const pid = item.collab?.pid;
65
- return isLocallyDiscovered(item) && pid !== undefined && ACTIVE_LOCAL_RUN_STATUSES.has(status) && !exists(pid);
66
- }
67
- function failedStatusData(status, at) {
68
- return {
69
- type: "status-changed",
70
- from: status,
71
- to: "failed",
72
- reason: "lazy-reconcile:dead-pid",
73
- actor: { kind: "agent" },
74
- at
75
- };
76
- }
77
- async function runLazyReconcile(input, deps = {}) {
78
- const listProjections = deps.listCollabSessionProjections ?? ompListCollabSessionProjections;
79
- const projectRun = deps.projectRunFromSession ?? defaultProjectRunFromSession;
80
- const exists = deps.processExists ?? processExists;
81
- const openSession = deps.openSession ?? defaultOpenSession;
82
- const nowIso = deps.nowIso ?? (() => new Date().toISOString());
83
- const projections = await listProjections(input.identityFilter);
84
- const flipped = [];
85
- for (const item of projections) {
86
- const runId = projectionRunId(item);
87
- const sessionPath = item.session.path || item.collab?.sessionPath || "";
88
- if (!runId || !sessionPath)
89
- continue;
90
- const projection = await projectRun(item.customEntries, runId);
91
- const status = projection.status;
92
- if (status === null || !shouldFlip(item, status, exists))
93
- continue;
94
- const session = await openSession(sessionPath);
95
- session.appendCustomEntry(CUSTOM_TYPE_FOR["status-changed"], failedStatusData(status, nowIso()));
96
- flipped.push({ runId, sessionPath, reason: "lazy-reconcile:dead-pid" });
97
- }
98
- return { flipped, resumable: flipped };
99
- }
100
- export {
101
- runLazyReconcile
102
- };
@@ -1,15 +0,0 @@
1
- import type { TaskSourceConfig } from "@rig/contracts";
2
- import type { RigPluginWithRuntime } from "@rig/core";
3
- export declare function parsePositiveInt(value: string | undefined, option: string, fallback: number): number;
4
- export declare function parseOptionalPositiveInt(value: string | undefined, option: string): number | undefined;
5
- export declare function parseRequiredPositiveInt(value: string | undefined, option: string): number;
6
- export declare function parseAction(value: string | undefined): "validate" | "verify" | "pipeline";
7
- export declare function parseIsolationMode(value: string | undefined, allowOff: true): "off" | "worktree";
8
- export declare function parseIsolationMode(value: string | undefined, allowOff: false): "worktree";
9
- export declare function parseInstallScope(value: string | undefined): "user" | "system";
10
- export declare function resolveInstallDir(scope: "user" | "system", explicitPath: string | undefined): string;
11
- export type CliRigConfig = {
12
- plugins?: readonly RigPluginWithRuntime[];
13
- taskSource?: TaskSourceConfig;
14
- };
15
- export declare function loadRigConfigOrNull(projectRoot: string): Promise<CliRigConfig | null>;
@@ -1,114 +0,0 @@
1
- // @bun
2
- var __require = import.meta.require;
3
-
4
- // packages/cli/src/commands/_parsers.ts
5
- import { homedir } from "os";
6
- import { resolve } from "path";
7
-
8
- // packages/cli/src/runner.ts
9
- import { EventBus } from "@rig/runtime/control-plane/runtime/events";
10
- import { CliError as RuntimeCliError } from "@rig/runtime/control-plane/errors";
11
- import { evaluate, loadPolicy, resolveAction } from "@rig/runtime/control-plane/runtime/guard";
12
- import { buildBinary } from "@rig/runtime/control-plane/runtime/isolation";
13
-
14
- class CliError extends RuntimeCliError {
15
- hint;
16
- constructor(message, exitCode = 1, options = {}) {
17
- super(message, exitCode);
18
- if (options.hint?.trim()) {
19
- this.hint = options.hint.trim();
20
- }
21
- }
22
- }
23
-
24
- // packages/cli/src/commands/_parsers.ts
25
- function parsePositiveInt(value, option, fallback) {
26
- if (!value) {
27
- return fallback;
28
- }
29
- const parsed = Number.parseInt(value, 10);
30
- if (!Number.isFinite(parsed) || parsed <= 0) {
31
- throw new CliError(`Invalid ${option} value: ${value}`, 1, { hint: `Pass a positive integer, e.g. \`${option} 10\`.` });
32
- }
33
- return parsed;
34
- }
35
- function parseOptionalPositiveInt(value, option) {
36
- if (!value) {
37
- return;
38
- }
39
- const parsed = Number.parseInt(value, 10);
40
- if (!Number.isFinite(parsed) || parsed <= 0) {
41
- throw new CliError(`Invalid ${option} value: ${value}`, 1, { hint: `Pass a positive integer, e.g. \`${option} 10\`.` });
42
- }
43
- return parsed;
44
- }
45
- function parseRequiredPositiveInt(value, option) {
46
- if (!value) {
47
- throw new CliError(`Missing value for ${option}.`, 1, { hint: `Provide a value after ${option}, e.g. \`${option} 10\`.` });
48
- }
49
- const parsed = Number.parseInt(value, 10);
50
- if (!Number.isFinite(parsed) || parsed <= 0) {
51
- throw new CliError(`Invalid ${option} value: ${value}`, 1, { hint: `Pass a positive integer, e.g. \`${option} 10\`.` });
52
- }
53
- return parsed;
54
- }
55
- function parseAction(value) {
56
- if (!value || value === "validate") {
57
- return "validate";
58
- }
59
- if (value === "verify") {
60
- return "verify";
61
- }
62
- if (value === "pipeline") {
63
- return "pipeline";
64
- }
65
- throw new CliError(`Invalid --action value: ${value}. Use validate, verify, or pipeline.`);
66
- }
67
- function parseIsolationMode(value, allowOff) {
68
- if (!value) {
69
- return "worktree";
70
- }
71
- if (value === "worktree") {
72
- return value;
73
- }
74
- if (allowOff && value === "off") {
75
- return value;
76
- }
77
- throw new CliError(`Invalid isolation mode: ${value}. Use ${allowOff ? "off|" : ""}worktree.`);
78
- }
79
- function parseInstallScope(value) {
80
- if (!value || value === "user") {
81
- return "user";
82
- }
83
- if (value === "system") {
84
- return "system";
85
- }
86
- throw new CliError(`Invalid --scope value: ${value}. Use user|system.`);
87
- }
88
- function resolveInstallDir(scope, explicitPath) {
89
- if (explicitPath) {
90
- return resolve(explicitPath);
91
- }
92
- if (scope === "system") {
93
- return "/usr/local/bin";
94
- }
95
- return resolve(homedir(), ".local/bin");
96
- }
97
- async function loadRigConfigOrNull(projectRoot) {
98
- try {
99
- const { loadConfig } = await import("@rig/core/load-config");
100
- return await loadConfig(projectRoot);
101
- } catch {
102
- return null;
103
- }
104
- }
105
- export {
106
- resolveInstallDir,
107
- parseRequiredPositiveInt,
108
- parsePositiveInt,
109
- parseOptionalPositiveInt,
110
- parseIsolationMode,
111
- parseInstallScope,
112
- parseAction,
113
- loadRigConfigOrNull
114
- };
@@ -1,11 +0,0 @@
1
- export declare function resolveControlPlaneMonorepoRoot(projectRoot: string): string;
2
- export declare function resolveControlPlaneTaskConfigPath(projectRoot: string): string;
3
- export declare function resolveControlPlaneHostStateRoot(projectRoot: string): string;
4
- export declare function resolveControlPlaneHostStateDir(projectRoot: string): string;
5
- export declare function resolveControlPlaneHostLogsDir(projectRoot: string): string;
6
- export declare function resolveControlPlaneHostBinDir(projectRoot: string): string;
7
- export declare function resolveControlPlaneHostDistDir(projectRoot: string): string;
8
- export declare function resolveControlPlaneMonorepoStateRoot(projectRoot: string): string;
9
- export declare function resolveControlPlaneMonorepoRuntimeDir(projectRoot: string): string;
10
- export declare function resolveControlPlaneArtifactsDir(projectRoot: string): string;
11
- export declare function resolveControlPlaneDefinitionRoot(projectRoot: string): string;
@@ -1,50 +0,0 @@
1
- // @bun
2
- // packages/cli/src/commands/_paths.ts
3
- import { resolve } from "path";
4
- import { resolveMonorepoRoot } from "@rig/runtime/layout";
5
- function resolveControlPlaneMonorepoRoot(projectRoot) {
6
- return resolveMonorepoRoot(projectRoot);
7
- }
8
- function resolveControlPlaneTaskConfigPath(projectRoot) {
9
- return resolve(resolveControlPlaneMonorepoRoot(projectRoot), ".rig", "task-config.json");
10
- }
11
- function resolveControlPlaneHostStateRoot(projectRoot) {
12
- return resolve(projectRoot, ".rig");
13
- }
14
- function resolveControlPlaneHostStateDir(projectRoot) {
15
- return resolve(resolveControlPlaneHostStateRoot(projectRoot), "state");
16
- }
17
- function resolveControlPlaneHostLogsDir(projectRoot) {
18
- return resolve(resolveControlPlaneHostStateRoot(projectRoot), "logs");
19
- }
20
- function resolveControlPlaneHostBinDir(projectRoot) {
21
- return resolve(resolveControlPlaneHostStateRoot(projectRoot), "bin");
22
- }
23
- function resolveControlPlaneHostDistDir(projectRoot) {
24
- return resolve(resolveControlPlaneHostStateRoot(projectRoot), "dist");
25
- }
26
- function resolveControlPlaneMonorepoStateRoot(projectRoot) {
27
- return resolve(resolveControlPlaneMonorepoRoot(projectRoot), ".rig");
28
- }
29
- function resolveControlPlaneMonorepoRuntimeDir(projectRoot) {
30
- return resolve(resolveControlPlaneMonorepoStateRoot(projectRoot), "runtime");
31
- }
32
- function resolveControlPlaneArtifactsDir(projectRoot) {
33
- return resolve(resolveControlPlaneMonorepoRoot(projectRoot), "artifacts");
34
- }
35
- function resolveControlPlaneDefinitionRoot(projectRoot) {
36
- return resolve(projectRoot, "rig");
37
- }
38
- export {
39
- resolveControlPlaneTaskConfigPath,
40
- resolveControlPlaneMonorepoStateRoot,
41
- resolveControlPlaneMonorepoRuntimeDir,
42
- resolveControlPlaneMonorepoRoot,
43
- resolveControlPlaneHostStateRoot,
44
- resolveControlPlaneHostStateDir,
45
- resolveControlPlaneHostLogsDir,
46
- resolveControlPlaneHostDistDir,
47
- resolveControlPlaneHostBinDir,
48
- resolveControlPlaneDefinitionRoot,
49
- resolveControlPlaneArtifactsDir
50
- };
@@ -1,35 +0,0 @@
1
- import type { RunnerContext } from "../runner";
2
- type AttachResult = {
3
- readonly run: Record<string, unknown>;
4
- readonly logs: Record<string, unknown>[];
5
- readonly timeline: Record<string, unknown>[];
6
- readonly timelineCursor: string | null;
7
- readonly steered: boolean;
8
- readonly rendered: string;
9
- readonly detached?: boolean;
10
- };
11
- export declare function resolveOperatorDroneCwd(runId: string, homeDir?: string): string;
12
- /**
13
- * Compose the operator-session environment used by the legacy interactive
14
- * attach shim. Exported for tests that pin the env contract.
15
- */
16
- export declare function buildOperatorPiEnv(input: {
17
- readonly runId: string;
18
- readonly serverUrl: string;
19
- readonly authToken?: string | null;
20
- readonly serverProjectRoot?: string | null;
21
- readonly sessionDir: string;
22
- }): Record<string, string>;
23
- export declare function shouldRequireOperatorTranscript(status: unknown): boolean;
24
- export declare function missingOperatorTranscriptMessage(runId: string, status: unknown): string;
25
- /**
26
- * Run `body` in-process while RETURNING (instead of terminating) when it calls
27
- * `process.exit`. Exported for unit tests that pin the guard semantics.
28
- */
29
- export declare function runWithProcessExitGuard(body: () => Promise<unknown>): Promise<number>;
30
- export declare function attachRunBundledPiFrontend(context: Pick<RunnerContext, "projectRoot" | "outputMode">, input: {
31
- readonly runId: string;
32
- readonly steered?: boolean;
33
- readonly returnOnQuit?: boolean;
34
- }): Promise<AttachResult>;
35
- export {};
@@ -1,64 +0,0 @@
1
- // @bun
2
- // packages/cli/src/commands/_pi-frontend.ts
3
- import { homedir } from "os";
4
- import { join } from "path";
5
- import { assertPathInsideRoot, assertSafeRunId, safePathSegment } from "@rig/shared/safe-identifiers";
6
- var TERMINAL_RUN_STATUSES = { completed: true, failed: true, stopped: true, cancelled: true, canceled: true, closed: true, merged: true, needs_attention: true, "needs-attention": true };
7
- function resolveOperatorDroneCwd(runId, homeDir = homedir()) {
8
- const safeRunId = assertSafeRunId(runId);
9
- const dronesRoot = join(homeDir, ".rig", "drones");
10
- return assertPathInsideRoot(dronesRoot, join(dronesRoot, safePathSegment(String(safeRunId).slice(0, 8), { fallback: "run", maxLength: 32 })), "operator drone cwd");
11
- }
12
- function buildOperatorPiEnv(input) {
13
- return {
14
- PI_CODING_AGENT_SESSION_DIR: input.sessionDir,
15
- PI_SKIP_VERSION_CHECK: "1",
16
- PI_HIDDEN_COMMANDS: "import,fork,clone,tree,new,resume,trust",
17
- RIG_PI_OPERATOR_SESSION: "1",
18
- RIG_RUN_ID: input.runId,
19
- RIG_SERVER_URL: input.serverUrl,
20
- ...input.authToken ? { RIG_AUTH_TOKEN: input.authToken } : {},
21
- ...input.serverProjectRoot ? { RIG_PROJECT_ROOT: input.serverProjectRoot } : {}
22
- };
23
- }
24
- function shouldRequireOperatorTranscript(status) {
25
- return typeof status === "string" && TERMINAL_RUN_STATUSES[status.trim().toLowerCase()] === true;
26
- }
27
- function missingOperatorTranscriptMessage(runId, status) {
28
- const shortRun = runId.trim().slice(0, 8) || "unknown";
29
- const statusText = typeof status === "string" && status.trim() ? status.trim() : "terminal";
30
- return `Run ${shortRun} is ${statusText}, but no worker Pi session transcript is recorded for this run. It likely failed before Pi started or predates full-session capture. Use \`rig run show ${runId}\` and \`rig run logs ${runId}\` for the lifecycle details.`;
31
- }
32
- async function runWithProcessExitGuard(body) {
33
- const realExit = process.exit;
34
- let exitCode = 0;
35
- let signalQuit = () => {};
36
- const quit = new Promise((resolve) => {
37
- signalQuit = resolve;
38
- });
39
- const guardedExit = (code) => {
40
- exitCode = typeof code === "number" ? code : 0;
41
- signalQuit();
42
- return;
43
- };
44
- process.exit = guardedExit;
45
- try {
46
- await Promise.race([Promise.resolve().then(body), quit]);
47
- } finally {
48
- process.exit = realExit;
49
- }
50
- return exitCode;
51
- }
52
- async function attachRunBundledPiFrontend(context, input) {
53
- input.steered;
54
- input.returnOnQuit;
55
- throw new Error(`Interactive Pi attach for run ${input.runId} was removed in the OMP-collab cutover. Run bare \`rig\` and use the OMP cockpit run detail for the live session; legacy automation can request a non-interactive text snapshot with --once or --json.`);
56
- }
57
- export {
58
- shouldRequireOperatorTranscript,
59
- runWithProcessExitGuard,
60
- resolveOperatorDroneCwd,
61
- missingOperatorTranscriptMessage,
62
- buildOperatorPiEnv,
63
- attachRunBundledPiFrontend
64
- };
@@ -1,42 +0,0 @@
1
- export type PiInstallCheck = {
2
- readonly ok: boolean;
3
- readonly label: string;
4
- readonly detail?: string;
5
- readonly hint?: string;
6
- };
7
- export type CommandRunner = (command: string[], options?: {
8
- cwd?: string;
9
- }) => Promise<{
10
- exitCode: number;
11
- stdout: string;
12
- stderr: string;
13
- }>;
14
- export type PiRigInstallStatus = {
15
- readonly pi: PiInstallCheck;
16
- readonly piRig: PiInstallCheck;
17
- readonly extensionPath: string;
18
- };
19
- export declare function resolvePiRigExtensionPath(homeDir: string): string;
20
- export declare function resolvePiRigPackageSource(projectRoot: string, exists?: (path: string) => boolean): string;
21
- export declare function checkPiRigInstall(input?: {
22
- readonly homeDir?: string;
23
- readonly commandRunner?: CommandRunner;
24
- readonly exists?: (path: string) => boolean;
25
- }): Promise<PiRigInstallStatus>;
26
- export declare function ensurePiRigInstalled(input: {
27
- readonly projectRoot: string;
28
- readonly homeDir?: string;
29
- readonly commandRunner?: CommandRunner;
30
- }): Promise<PiRigInstallStatus & {
31
- installedPath: string;
32
- }>;
33
- export declare function ensureRemotePiRigInstalled(input: {
34
- readonly requestJson: (pathname: string, init?: RequestInit) => Promise<unknown>;
35
- }): Promise<PiRigInstallStatus & {
36
- readonly remote: true;
37
- }>;
38
- export declare function buildPiSetupChecks(input?: {
39
- readonly homeDir?: string;
40
- readonly commandRunner?: CommandRunner;
41
- readonly exists?: (path: string) => boolean;
42
- }): Promise<PiInstallCheck[]>;