@h-rig/cli 0.0.6-alpha.100 → 0.0.6-alpha.101

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 (112) 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 -17875
  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/_config-env.d.ts +0 -18
  16. package/dist/src/commands/_config-env.js +0 -22
  17. package/dist/src/commands/_connection-state.d.ts +0 -54
  18. package/dist/src/commands/_connection-state.js +0 -187
  19. package/dist/src/commands/_doctor-checks.d.ts +0 -46
  20. package/dist/src/commands/_doctor-checks.js +0 -352
  21. package/dist/src/commands/_help-catalog.d.ts +0 -29
  22. package/dist/src/commands/_help-catalog.js +0 -146
  23. package/dist/src/commands/_inprocess-services.d.ts +0 -33
  24. package/dist/src/commands/_inprocess-services.js +0 -102
  25. package/dist/src/commands/_json-output.d.ts +0 -11
  26. package/dist/src/commands/_json-output.js +0 -60
  27. package/dist/src/commands/_lazy-reconcile.d.ts +0 -34
  28. package/dist/src/commands/_lazy-reconcile.js +0 -102
  29. package/dist/src/commands/_parsers.d.ts +0 -15
  30. package/dist/src/commands/_parsers.js +0 -114
  31. package/dist/src/commands/_paths.d.ts +0 -11
  32. package/dist/src/commands/_paths.js +0 -50
  33. package/dist/src/commands/_pi-frontend.d.ts +0 -35
  34. package/dist/src/commands/_pi-frontend.js +0 -64
  35. package/dist/src/commands/_pi-install.d.ts +0 -42
  36. package/dist/src/commands/_pi-install.js +0 -167
  37. package/dist/src/commands/_policy.d.ts +0 -8
  38. package/dist/src/commands/_policy.js +0 -127
  39. package/dist/src/commands/_probes.d.ts +0 -1
  40. package/dist/src/commands/_probes.js +0 -13
  41. package/dist/src/commands/_run-bridge.d.ts +0 -114
  42. package/dist/src/commands/_run-bridge.js +0 -387
  43. package/dist/src/commands/_run-diagnostics.d.ts +0 -9
  44. package/dist/src/commands/_run-diagnostics.js +0 -51
  45. package/dist/src/commands/_run-driver-helpers.d.ts +0 -26
  46. package/dist/src/commands/_run-driver-helpers.js +0 -138
  47. package/dist/src/commands/_run-projection.d.ts +0 -50
  48. package/dist/src/commands/_run-projection.js +0 -349
  49. package/dist/src/commands/_run-subcommands.d.ts +0 -3
  50. package/dist/src/commands/_run-subcommands.js +0 -31
  51. package/dist/src/commands/_spinner.d.ts +0 -25
  52. package/dist/src/commands/_spinner.js +0 -65
  53. package/dist/src/commands/agent.d.ts +0 -3
  54. package/dist/src/commands/agent.js +0 -8952
  55. package/dist/src/commands/config.d.ts +0 -3
  56. package/dist/src/commands/config.js +0 -181
  57. package/dist/src/commands/dist.d.ts +0 -28
  58. package/dist/src/commands/dist.js +0 -417
  59. package/dist/src/commands/doctor.d.ts +0 -3
  60. package/dist/src/commands/doctor.js +0 -480
  61. package/dist/src/commands/github.d.ts +0 -3
  62. package/dist/src/commands/github.js +0 -342
  63. package/dist/src/commands/inbox.d.ts +0 -28
  64. package/dist/src/commands/inbox.js +0 -579
  65. package/dist/src/commands/init.d.ts +0 -64
  66. package/dist/src/commands/init.js +0 -1541
  67. package/dist/src/commands/inspect.d.ts +0 -20
  68. package/dist/src/commands/inspect.js +0 -764
  69. package/dist/src/commands/pi.d.ts +0 -3
  70. package/dist/src/commands/pi.js +0 -177
  71. package/dist/src/commands/plugin.d.ts +0 -16
  72. package/dist/src/commands/plugin.js +0 -714
  73. package/dist/src/commands/profile-and-review.d.ts +0 -4
  74. package/dist/src/commands/profile-and-review.js +0 -223
  75. package/dist/src/commands/queue.d.ts +0 -3
  76. package/dist/src/commands/queue.js +0 -197
  77. package/dist/src/commands/remote.d.ts +0 -3
  78. package/dist/src/commands/remote.js +0 -1340
  79. package/dist/src/commands/repo-git-harness.d.ts +0 -5
  80. package/dist/src/commands/repo-git-harness.js +0 -271
  81. package/dist/src/commands/run.d.ts +0 -21
  82. package/dist/src/commands/run.js +0 -17867
  83. package/dist/src/commands/server.d.ts +0 -3
  84. package/dist/src/commands/server.js +0 -249
  85. package/dist/src/commands/setup.d.ts +0 -16
  86. package/dist/src/commands/setup.js +0 -644
  87. package/dist/src/commands/stats.d.ts +0 -15
  88. package/dist/src/commands/stats.js +0 -632
  89. package/dist/src/commands/task-run-driver.d.ts +0 -94
  90. package/dist/src/commands/task-run-driver.js +0 -203
  91. package/dist/src/commands/task.d.ts +0 -35
  92. package/dist/src/commands/task.js +0 -818
  93. package/dist/src/commands/test.d.ts +0 -3
  94. package/dist/src/commands/test.js +0 -46
  95. package/dist/src/commands/triage.d.ts +0 -11
  96. package/dist/src/commands/triage.js +0 -227
  97. package/dist/src/commands/workspace.d.ts +0 -3
  98. package/dist/src/commands/workspace.js +0 -130
  99. package/dist/src/commands.d.ts +0 -13
  100. package/dist/src/commands.js +0 -17999
  101. package/dist/src/index.d.ts +0 -4
  102. package/dist/src/index.js +0 -18011
  103. package/dist/src/launcher.d.ts +0 -61
  104. package/dist/src/launcher.js +0 -199
  105. package/dist/src/operator-cli.d.ts +0 -2
  106. package/dist/src/operator-cli.js +0 -17867
  107. package/dist/src/operator-entry.d.ts +0 -1
  108. package/dist/src/operator-entry.js +0 -3
  109. package/dist/src/runner.d.ts +0 -47
  110. package/dist/src/runner.js +0 -267
  111. package/dist/src/withMutedConsole.d.ts +0 -2
  112. package/dist/src/withMutedConsole.js +0 -42
@@ -1,11 +0,0 @@
1
- import { type RigCliOutputEnvelope } from "@rig/contracts";
2
- /**
3
- * Build the versioned `{ v: 1, command, data }` envelope for a command
4
- * outcome, or null when the command has no output schema (legacy payload)
5
- * or the details fail validation (warned on stderr, legacy payload).
6
- */
7
- export declare function buildCliJsonEnvelope(outcome: unknown, options?: {
8
- warn?: (message: string) => void;
9
- }): RigCliOutputEnvelope | null;
10
- /** Commands with a versioned --json envelope (for help/docs/tests). */
11
- export declare function listSchematizedCliCommands(): string[];
@@ -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[]>;