@h-rig/contracts 0.0.6-alpha.18 → 0.0.6-alpha.181

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 (205) hide show
  1. package/dist/index.cjs +3442 -0
  2. package/dist/index.mjs +3401 -0
  3. package/dist/src/agent-roles.d.ts +8 -0
  4. package/dist/src/artifact.d.ts +13 -0
  5. package/dist/src/artifact.js +3 -0
  6. package/dist/src/baseSchemas.d.ts +63 -0
  7. package/dist/src/baseSchemas.js +6 -0
  8. package/dist/src/blocker-classifier.d.ts +21 -0
  9. package/dist/src/blocker-classifier.js +13 -0
  10. package/dist/src/browser.d.ts +80 -0
  11. package/dist/src/browser.js +13 -0
  12. package/dist/src/capability-id.d.ts +22 -0
  13. package/dist/src/capability-id.js +8 -0
  14. package/dist/src/cli-output.d.ts +348 -0
  15. package/dist/src/cli-output.js +190 -0
  16. package/dist/src/cli-runner.d.ts +43 -0
  17. package/dist/src/cli-runner.js +13 -0
  18. package/dist/src/cockpit.d.ts +58 -0
  19. package/dist/src/cockpit.js +13 -0
  20. package/dist/src/collab-session-viewer.d.ts +36 -0
  21. package/dist/src/collab-session-viewer.js +13 -0
  22. package/dist/src/config.d.ts +553 -0
  23. package/dist/src/config.js +767 -162
  24. package/dist/src/control-plane-types.d.ts +323 -0
  25. package/dist/src/control-plane-types.js +13 -0
  26. package/dist/src/conversation.d.ts +50 -0
  27. package/dist/src/conversation.js +3 -0
  28. package/dist/src/dependency-preflight.d.ts +43 -0
  29. package/dist/src/dependency-preflight.js +13 -0
  30. package/dist/src/docs-drift.d.ts +10 -0
  31. package/dist/src/docs-drift.js +12 -0
  32. package/dist/src/doctor.d.ts +90 -0
  33. package/dist/src/doctor.js +13 -0
  34. package/dist/src/drift.d.ts +28 -0
  35. package/dist/src/drift.js +69 -0
  36. package/dist/src/editor.d.ts +25 -0
  37. package/dist/src/editor.js +3 -0
  38. package/dist/src/errors.d.ts +13 -0
  39. package/dist/src/errors.js +17 -0
  40. package/dist/src/git.d.ts +152 -0
  41. package/dist/src/git.js +3 -0
  42. package/dist/src/github.d.ts +295 -0
  43. package/dist/src/github.js +17 -0
  44. package/dist/src/graph.d.ts +360 -0
  45. package/dist/src/graph.js +137 -1
  46. package/dist/src/guard.d.ts +118 -0
  47. package/dist/src/guard.js +15 -0
  48. package/dist/src/harness-events.d.ts +8 -0
  49. package/dist/src/harness-events.js +1 -0
  50. package/dist/src/harness-profile-state.d.ts +10 -0
  51. package/dist/src/harness-profile-state.js +13 -0
  52. package/dist/src/help-catalog.d.ts +41 -0
  53. package/dist/src/help-catalog.js +13 -0
  54. package/dist/src/host.d.ts +41 -0
  55. package/dist/src/host.js +13 -0
  56. package/dist/src/identity.d.ts +44 -0
  57. package/dist/src/identity.js +1 -0
  58. package/dist/src/index.d.ts +98 -0
  59. package/dist/src/index.js +2605 -3752
  60. package/dist/src/isolation.d.ts +213 -0
  61. package/dist/src/isolation.js +13 -0
  62. package/dist/src/kernel.d.ts +200 -0
  63. package/dist/src/kernel.js +261 -0
  64. package/dist/src/keybindings.d.ts +71 -0
  65. package/dist/src/keybindings.js +3 -0
  66. package/dist/src/layout.d.ts +44 -0
  67. package/dist/src/layout.js +8 -0
  68. package/dist/src/lifecycle-capabilities.d.ts +224 -0
  69. package/dist/src/lifecycle-capabilities.js +45 -0
  70. package/dist/src/managed-repos.d.ts +339 -0
  71. package/dist/src/managed-repos.js +37 -0
  72. package/dist/src/memory.d.ts +199 -0
  73. package/dist/src/memory.js +15 -0
  74. package/dist/src/model.d.ts +13 -0
  75. package/dist/src/model.js +3 -58
  76. package/dist/src/native-toolchain.d.ts +46 -0
  77. package/dist/src/native-toolchain.js +13 -0
  78. package/dist/src/notify.d.ts +46 -0
  79. package/dist/src/notify.js +13 -0
  80. package/dist/src/orchestration.d.ts +43 -0
  81. package/dist/src/orchestration.js +28 -961
  82. package/dist/src/panel-protocol.d.ts +17 -0
  83. package/dist/src/panel-protocol.js +10 -0
  84. package/dist/src/pi-session.d.ts +113 -0
  85. package/dist/src/pi-session.js +1 -0
  86. package/dist/src/placement.d.ts +47 -0
  87. package/dist/src/placement.js +13 -0
  88. package/dist/src/planning.d.ts +64 -0
  89. package/dist/src/planning.js +90 -0
  90. package/dist/src/plugin-hooks.d.ts +51 -0
  91. package/dist/src/plugin-hooks.js +386 -0
  92. package/dist/src/plugin.d.ts +476 -0
  93. package/dist/src/plugin.js +346 -64
  94. package/dist/src/policy.d.ts +16 -0
  95. package/dist/src/policy.js +3 -0
  96. package/dist/src/product-entrypoint.d.ts +22 -0
  97. package/dist/src/product-entrypoint.js +13 -0
  98. package/dist/src/project.d.ts +71 -0
  99. package/dist/src/project.js +3 -0
  100. package/dist/src/prompt.d.ts +29 -0
  101. package/dist/src/prompt.js +13 -0
  102. package/dist/src/protocol-version.d.ts +21 -0
  103. package/dist/src/protocol-version.js +6 -0
  104. package/dist/src/provider-instructions.d.ts +41 -0
  105. package/dist/src/provider-instructions.js +13 -0
  106. package/dist/src/provider.d.ts +105 -0
  107. package/dist/src/provider.js +16 -835
  108. package/dist/src/remote-control.d.ts +93 -0
  109. package/dist/src/remote-control.js +26 -0
  110. package/dist/src/remote.d.ts +318 -0
  111. package/dist/src/remote.js +238 -1078
  112. package/dist/src/review.d.ts +18 -0
  113. package/dist/src/review.js +3 -0
  114. package/dist/src/rollups.d.ts +41 -0
  115. package/dist/src/rollups.js +70 -0
  116. package/dist/src/run-control.d.ts +164 -0
  117. package/dist/src/run-control.js +13 -0
  118. package/dist/src/run-discovery.d.ts +83 -0
  119. package/dist/src/run-discovery.js +13 -0
  120. package/dist/src/run-dispatch.d.ts +34 -0
  121. package/dist/src/run-dispatch.js +13 -0
  122. package/dist/src/run-identity.d.ts +47 -0
  123. package/dist/src/run-identity.js +13 -0
  124. package/dist/src/run-journal.d.ts +694 -0
  125. package/dist/src/run-journal.js +569 -0
  126. package/dist/src/run-queue.d.ts +36 -0
  127. package/dist/src/run-queue.js +13 -0
  128. package/dist/src/run-read-model.d.ts +200 -0
  129. package/dist/src/run-read-model.js +13 -0
  130. package/dist/src/run-record.d.ts +45 -0
  131. package/dist/src/run-record.js +1 -0
  132. package/dist/src/run-registry-backbone.d.ts +56 -0
  133. package/dist/src/run-registry-backbone.js +13 -0
  134. package/dist/src/run-session-journal.d.ts +154 -0
  135. package/dist/src/run-session-journal.js +87 -0
  136. package/dist/src/run-status.d.ts +10 -0
  137. package/dist/src/run-status.js +27 -0
  138. package/dist/src/run-timeline.d.ts +7 -0
  139. package/dist/src/run-timeline.js +1 -0
  140. package/dist/src/runtime-secrets.d.ts +10 -0
  141. package/dist/src/runtime-secrets.js +13 -0
  142. package/dist/src/runtime-task-context.d.ts +82 -0
  143. package/dist/src/runtime-task-context.js +1 -0
  144. package/dist/src/runtime.d.ts +103 -0
  145. package/dist/src/runtime.js +73 -906
  146. package/dist/src/session-asset-materializer.d.ts +35 -0
  147. package/dist/src/session-asset-materializer.js +13 -0
  148. package/dist/src/session-hook-materializer.d.ts +41 -0
  149. package/dist/src/session-hook-materializer.js +13 -0
  150. package/dist/src/setup.d.ts +154 -0
  151. package/dist/src/setup.js +13 -0
  152. package/dist/src/stage.d.ts +245 -0
  153. package/dist/src/stage.js +169 -0
  154. package/dist/src/supervisor-journal.d.ts +204 -0
  155. package/dist/src/supervisor-journal.js +336 -0
  156. package/dist/src/supervisor-loop.d.ts +40 -0
  157. package/dist/src/supervisor-loop.js +13 -0
  158. package/dist/src/task-artifacts.d.ts +53 -0
  159. package/dist/src/task-artifacts.js +13 -0
  160. package/dist/src/task-config.d.ts +22 -0
  161. package/dist/src/task-config.js +1 -0
  162. package/dist/src/task-context-renderer.d.ts +29 -0
  163. package/dist/src/task-context-renderer.js +13 -0
  164. package/dist/src/task-data.d.ts +196 -0
  165. package/dist/src/task-data.js +13 -0
  166. package/dist/src/task-graph-primitives.d.ts +47 -0
  167. package/dist/src/task-graph-primitives.js +1 -0
  168. package/dist/src/task-source.d.ts +167 -0
  169. package/dist/src/task-source.js +24 -0
  170. package/dist/src/task-state-metadata.d.ts +21 -0
  171. package/dist/src/task-state-metadata.js +1 -0
  172. package/dist/src/task-state-paths.d.ts +14 -0
  173. package/dist/src/task-state-paths.js +13 -0
  174. package/dist/src/task-state-store.d.ts +36 -0
  175. package/dist/src/task-state-store.js +17 -0
  176. package/dist/src/task-tracker-state.d.ts +101 -0
  177. package/dist/src/task-tracker-state.js +39 -0
  178. package/dist/src/terminal.d.ts +130 -0
  179. package/dist/src/terminal.js +3 -0
  180. package/dist/src/tool-materializer.d.ts +36 -0
  181. package/dist/src/tool-materializer.js +13 -0
  182. package/dist/src/tool-registry.d.ts +3 -0
  183. package/dist/src/tool-registry.js +58 -0
  184. package/dist/src/toolchain-sources.d.ts +54 -0
  185. package/dist/src/toolchain-sources.js +17 -0
  186. package/dist/src/transport-config.d.ts +161 -0
  187. package/dist/src/transport-config.js +15 -0
  188. package/dist/src/validation.d.ts +14 -0
  189. package/dist/src/validation.js +3 -0
  190. package/dist/src/workflow-journal.d.ts +125 -0
  191. package/dist/src/workflow-journal.js +27 -0
  192. package/dist/src/workspace-config.d.ts +18 -0
  193. package/dist/src/workspace-config.js +13 -0
  194. package/dist/src/workspace-service.d.ts +16 -0
  195. package/dist/src/workspace-service.js +13 -0
  196. package/dist/src/workspace.d.ts +204 -0
  197. package/dist/src/workspace.js +76 -911
  198. package/package.json +55 -4
  199. package/dist/src/engine.js +0 -2278
  200. package/dist/src/providerRuntime.js +0 -1630
  201. package/dist/src/rig.js +0 -2374
  202. package/dist/src/server.js +0 -1053
  203. package/dist/src/serviceFabric.js +0 -1066
  204. package/dist/src/ws.js +0 -2968
  205. /package/dist/src/{ipc.js → agent-roles.js} +0 -0
@@ -0,0 +1,18 @@
1
+ import { Schema } from "effect";
2
+ export declare const ReviewMode: Schema.Literals<readonly ["off", "advisory", "required"]>;
3
+ export type ReviewMode = typeof ReviewMode.Type;
4
+ export declare const ReviewStatus: Schema.Literals<readonly ["pending", "running", "approved", "rejected", "error"]>;
5
+ export type ReviewStatus = typeof ReviewStatus.Type;
6
+ export declare const ReviewSummary: Schema.Struct<{
7
+ readonly id: Schema.brand<Schema.Trim, "ReviewResultId">;
8
+ readonly runId: Schema.brand<Schema.Trim, "RunId">;
9
+ readonly taskId: Schema.NullOr<Schema.brand<Schema.Trim, "TaskId">>;
10
+ readonly provider: Schema.Trim;
11
+ readonly mode: Schema.Literals<readonly ["off", "advisory", "required"]>;
12
+ readonly status: Schema.Literals<readonly ["pending", "running", "approved", "rejected", "error"]>;
13
+ readonly summary: Schema.NullOr<Schema.String>;
14
+ readonly output: Schema.Unknown;
15
+ readonly createdAt: Schema.String;
16
+ readonly completedAt: Schema.NullOr<Schema.String>;
17
+ }>;
18
+ export type ReviewSummary = typeof ReviewSummary.Type;
@@ -16,6 +16,9 @@ var WorkspaceId = makeEntityId("WorkspaceId");
16
16
  var GraphId = makeEntityId("GraphId");
17
17
  var TaskId = makeEntityId("TaskId");
18
18
  var RunId = makeEntityId("RunId");
19
+ var SafePathSegment = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/)).pipe(Schema.brand("SafePathSegment"));
20
+ var SafeRunId = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/)).pipe(Schema.brand("SafeRunId"));
21
+ var SafeGitRefComponent = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/)).pipe(Schema.brand("SafeGitRefComponent"));
19
22
  var EngineRuntimeId = makeEntityId("EngineRuntimeId");
20
23
  var ConversationId = makeEntityId("ConversationId");
21
24
  var ActionId = makeEntityId("ActionId");
@@ -0,0 +1,41 @@
1
+ import { Schema } from "effect";
2
+ export declare const PercentComplete: Schema.Int;
3
+ export type PercentComplete = typeof PercentComplete.Type;
4
+ export declare const EpicRollup: Schema.Struct<{
5
+ readonly epicKey: Schema.Trim;
6
+ readonly total: Schema.Int;
7
+ readonly percentComplete: Schema.Int;
8
+ readonly blockedCount: Schema.Int;
9
+ readonly humanBlockedCount: Schema.Int;
10
+ readonly inFlightCount: Schema.Int;
11
+ readonly byStatus: Schema.$Record<Schema.String, Schema.Int>;
12
+ }>;
13
+ export type EpicRollup = typeof EpicRollup.Type;
14
+ export declare const AssigneeRollup: Schema.Struct<{
15
+ readonly assignee: Schema.Trim;
16
+ readonly openTaskCount: Schema.Int;
17
+ readonly inFlightRunCount: Schema.Int;
18
+ readonly prsAwaitingReview: Schema.Int;
19
+ readonly blockers: Schema.$Array<Schema.brand<Schema.Trim, "TaskId">>;
20
+ }>;
21
+ export type AssigneeRollup = typeof AssigneeRollup.Type;
22
+ export declare const WorkspaceRollups: Schema.Struct<{
23
+ readonly epics: Schema.$Array<Schema.Struct<{
24
+ readonly epicKey: Schema.Trim;
25
+ readonly total: Schema.Int;
26
+ readonly percentComplete: Schema.Int;
27
+ readonly blockedCount: Schema.Int;
28
+ readonly humanBlockedCount: Schema.Int;
29
+ readonly inFlightCount: Schema.Int;
30
+ readonly byStatus: Schema.$Record<Schema.String, Schema.Int>;
31
+ }>>;
32
+ readonly assignees: Schema.$Array<Schema.Struct<{
33
+ readonly assignee: Schema.Trim;
34
+ readonly openTaskCount: Schema.Int;
35
+ readonly inFlightRunCount: Schema.Int;
36
+ readonly prsAwaitingReview: Schema.Int;
37
+ readonly blockers: Schema.$Array<Schema.brand<Schema.Trim, "TaskId">>;
38
+ }>>;
39
+ readonly generatedAt: Schema.String;
40
+ }>;
41
+ export type WorkspaceRollups = typeof WorkspaceRollups.Type;
@@ -0,0 +1,70 @@
1
+ // @bun
2
+ // packages/contracts/src/rollups.ts
3
+ import { Schema as Schema2 } from "effect";
4
+
5
+ // packages/contracts/src/baseSchemas.ts
6
+ import { Schema } from "effect";
7
+ var TrimmedString = Schema.Trim;
8
+ var TrimmedNonEmptyString = TrimmedString.check(Schema.isNonEmpty());
9
+ var NonNegativeInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(0));
10
+ var PositiveInt = Schema.Int.check(Schema.isGreaterThanOrEqualTo(1));
11
+ var IsoDateTime = Schema.String;
12
+ var makeEntityId = (brand) => TrimmedNonEmptyString.pipe(Schema.brand(brand));
13
+ var ThreadId = makeEntityId("ThreadId");
14
+ var ProjectId = makeEntityId("ProjectId");
15
+ var WorkspaceId = makeEntityId("WorkspaceId");
16
+ var GraphId = makeEntityId("GraphId");
17
+ var TaskId = makeEntityId("TaskId");
18
+ var RunId = makeEntityId("RunId");
19
+ var SafePathSegment = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/)).pipe(Schema.brand("SafePathSegment"));
20
+ var SafeRunId = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/)).pipe(Schema.brand("SafeRunId"));
21
+ var SafeGitRefComponent = TrimmedNonEmptyString.check(Schema.isPattern(/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/)).pipe(Schema.brand("SafeGitRefComponent"));
22
+ var EngineRuntimeId = makeEntityId("EngineRuntimeId");
23
+ var ConversationId = makeEntityId("ConversationId");
24
+ var ActionId = makeEntityId("ActionId");
25
+ var ArtifactId = makeEntityId("ArtifactId");
26
+ var WorktreeId = makeEntityId("WorktreeId");
27
+ var ValidationResultId = makeEntityId("ValidationResultId");
28
+ var ReviewResultId = makeEntityId("ReviewResultId");
29
+ var CommandId = makeEntityId("CommandId");
30
+ var EventId = makeEntityId("EventId");
31
+ var MessageId = makeEntityId("MessageId");
32
+ var TurnId = makeEntityId("TurnId");
33
+ var ProviderItemId = makeEntityId("ProviderItemId");
34
+ var RuntimeSessionId = makeEntityId("RuntimeSessionId");
35
+ var RuntimeItemId = makeEntityId("RuntimeItemId");
36
+ var RuntimeRequestId = makeEntityId("RuntimeRequestId");
37
+ var RuntimeTaskId = makeEntityId("RuntimeTaskId");
38
+ var ApprovalRequestId = makeEntityId("ApprovalRequestId");
39
+ var CheckpointRef = makeEntityId("CheckpointRef");
40
+ var RemoteEndpointId = makeEntityId("RemoteEndpointId");
41
+
42
+ // packages/contracts/src/rollups.ts
43
+ var PercentComplete = NonNegativeInt.check(Schema2.isLessThanOrEqualTo(100));
44
+ var EpicRollup = Schema2.Struct({
45
+ epicKey: TrimmedNonEmptyString,
46
+ total: NonNegativeInt,
47
+ percentComplete: PercentComplete,
48
+ blockedCount: NonNegativeInt,
49
+ humanBlockedCount: NonNegativeInt,
50
+ inFlightCount: NonNegativeInt,
51
+ byStatus: Schema2.Record(Schema2.String, NonNegativeInt)
52
+ });
53
+ var AssigneeRollup = Schema2.Struct({
54
+ assignee: TrimmedNonEmptyString,
55
+ openTaskCount: NonNegativeInt,
56
+ inFlightRunCount: NonNegativeInt,
57
+ prsAwaitingReview: NonNegativeInt,
58
+ blockers: Schema2.Array(TaskId)
59
+ });
60
+ var WorkspaceRollups = Schema2.Struct({
61
+ epics: Schema2.Array(EpicRollup),
62
+ assignees: Schema2.Array(AssigneeRollup),
63
+ generatedAt: IsoDateTime
64
+ });
65
+ export {
66
+ WorkspaceRollups,
67
+ PercentComplete,
68
+ EpicRollup,
69
+ AssigneeRollup
70
+ };
@@ -0,0 +1,164 @@
1
+ /**
2
+ * run-control.ts - typed run control capability vocabulary.
3
+ *
4
+ * RUN_READ_MODEL is projection-oriented. Operators that plan launches, deliver
5
+ * control frames, resolve inbox requests, compute resume actions, or remove
6
+ * registry entries use this control seam instead of mutating through read-model
7
+ * consumers.
8
+ */
9
+ import type { CapabilityId } from "./capability-id";
10
+ import type { RunDiscoveryFilter } from "./run-discovery";
11
+ import type { RunRecord } from "./run-record";
12
+ import type { RunInboxResolutionInit } from "./run-session-journal";
13
+ export type RunControl = {
14
+ readonly kind: "steer";
15
+ readonly message: string;
16
+ } | {
17
+ readonly kind: "stop";
18
+ readonly reason: string;
19
+ } | {
20
+ readonly kind: "pause";
21
+ } | {
22
+ readonly kind: "resume";
23
+ };
24
+ export interface RunControlTargetInput {
25
+ readonly projectRoot: string;
26
+ /** Canonical run id/session id. */
27
+ readonly runId: string;
28
+ readonly taskId?: string | null;
29
+ readonly purpose?: "attach" | "steer" | "stop" | "pause" | "resume" | "restart" | "delete" | "prune" | "resolve-inbox";
30
+ readonly discoveryFilter?: RunDiscoveryFilter;
31
+ }
32
+ export interface RunControlTarget {
33
+ /** Canonical run id/session id. */
34
+ readonly runId: string;
35
+ readonly taskId: string | null;
36
+ readonly sessionId: string | null;
37
+ readonly sessionPath: string | null;
38
+ readonly joinLink: string | null;
39
+ readonly webLink: string | null;
40
+ readonly relayUrl: string | null;
41
+ readonly collabCwd: string | null;
42
+ readonly live: boolean;
43
+ readonly stale: boolean;
44
+ readonly canDeliver: boolean;
45
+ readonly reason?: string | null;
46
+ }
47
+ export interface RunControlInput {
48
+ readonly projectRoot: string;
49
+ /** Canonical run id/session id. */
50
+ readonly runId: string;
51
+ readonly control: RunControl;
52
+ readonly requestedBy?: string | null;
53
+ readonly discoveryFilter?: RunDiscoveryFilter;
54
+ }
55
+ export interface RunControlResult {
56
+ readonly runId: string;
57
+ readonly kind: RunControl["kind"];
58
+ readonly status: "delivered" | "not-found" | "not-live" | "unsupported";
59
+ readonly delivered: boolean;
60
+ readonly detail?: string | null;
61
+ }
62
+ export interface RunInboxResolutionInput {
63
+ readonly projectRoot: string;
64
+ /** Canonical run id/session id. */
65
+ readonly runId: string;
66
+ readonly resolution: RunInboxResolutionInit;
67
+ readonly requestedBy?: string | null;
68
+ readonly discoveryFilter?: RunDiscoveryFilter;
69
+ }
70
+ export interface RunInboxResolutionResult {
71
+ readonly runId: string;
72
+ readonly requestId: string;
73
+ readonly kind: "approval" | "input";
74
+ readonly status: "resolved" | "not-found" | "not-live" | "unsupported";
75
+ readonly delivered: boolean;
76
+ readonly detail?: string | null;
77
+ }
78
+ export interface RunResumePlanInput {
79
+ readonly projectRoot: string;
80
+ /** Canonical run id/session id. */
81
+ readonly runId: string;
82
+ readonly discoveryFilter?: RunDiscoveryFilter;
83
+ }
84
+ export interface RunLaunchCandidate {
85
+ readonly taskId: string;
86
+ readonly title?: string | null;
87
+ }
88
+ export interface RunLaunchPlanInput {
89
+ readonly projectRoot: string;
90
+ readonly candidates: readonly RunLaunchCandidate[];
91
+ /** Force means all candidates remain launchable; owners may still annotate results. */
92
+ readonly force?: boolean;
93
+ readonly discoveryFilter?: RunDiscoveryFilter;
94
+ }
95
+ export type RunLaunchPlanEntry = {
96
+ readonly kind: "launch";
97
+ readonly taskId: string;
98
+ readonly title: string | null;
99
+ } | {
100
+ readonly kind: "skipped";
101
+ readonly taskId: string;
102
+ readonly title: string | null;
103
+ readonly reason: string;
104
+ readonly activeRunId?: string | null;
105
+ };
106
+ export interface RunLaunchPlan {
107
+ readonly entries: readonly RunLaunchPlanEntry[];
108
+ readonly launch: readonly Extract<RunLaunchPlanEntry, {
109
+ readonly kind: "launch";
110
+ }>[];
111
+ readonly skipped: readonly Extract<RunLaunchPlanEntry, {
112
+ readonly kind: "skipped";
113
+ }>[];
114
+ readonly force: boolean;
115
+ }
116
+ export type RunResumePlan = {
117
+ readonly kind: "deliver-control";
118
+ readonly runId: string;
119
+ readonly run: RunRecord;
120
+ } | {
121
+ readonly kind: "redispatch-task";
122
+ readonly runId: string;
123
+ readonly taskId: string;
124
+ readonly title: string;
125
+ } | {
126
+ readonly kind: "unavailable";
127
+ readonly runId: string;
128
+ readonly reason: string;
129
+ };
130
+ export interface RunRegistryRemovalInput {
131
+ readonly projectRoot: string;
132
+ /** Canonical run id/session id. */
133
+ readonly runId: string;
134
+ }
135
+ export interface RunRegistryRemovalResult {
136
+ /** Canonical run id/session id. */
137
+ readonly runId: string;
138
+ readonly removed: boolean;
139
+ }
140
+ export interface RunDeadPidReconciliationInput {
141
+ readonly projectRoot: string;
142
+ /** Canonical run id/session id. */
143
+ readonly runId: string;
144
+ readonly sessionPath: string;
145
+ readonly reason?: "lazy-reconcile:dead-pid";
146
+ }
147
+ export interface RunDeadPidReconciliationResult {
148
+ /** Canonical run id/session id. */
149
+ readonly runId: string;
150
+ readonly updated: boolean;
151
+ readonly status: "reconciled" | "not-found" | "unavailable";
152
+ readonly detail?: string | null;
153
+ }
154
+ export interface RunControlService {
155
+ readonly resolveControlTarget: (input: RunControlTargetInput) => Promise<RunControlTarget | null>;
156
+ readonly deliverControl: (input: RunControlInput) => Promise<RunControlResult>;
157
+ readonly resolveInboxRequest: (input: RunInboxResolutionInput) => Promise<RunInboxResolutionResult>;
158
+ readonly planLaunches: (input: RunLaunchPlanInput) => Promise<RunLaunchPlan>;
159
+ readonly resolveResumePlan: (input: RunResumePlanInput) => Promise<RunResumePlan | null>;
160
+ readonly removeRunRegistryEntry: (input: RunRegistryRemovalInput) => Promise<RunRegistryRemovalResult>;
161
+ readonly reconcileDeadPid: (input: RunDeadPidReconciliationInput) => Promise<RunDeadPidReconciliationResult>;
162
+ }
163
+ export declare const RUN_CONTROL_CAPABILITY_ID = "rig.runs.control";
164
+ export declare const RUN_CONTROL: CapabilityId<RunControlService>;
@@ -0,0 +1,13 @@
1
+ // @bun
2
+ // packages/contracts/src/capability-id.ts
3
+ function makeCapabilityId(id) {
4
+ return id;
5
+ }
6
+
7
+ // packages/contracts/src/run-control.ts
8
+ var RUN_CONTROL_CAPABILITY_ID = "rig.runs.control";
9
+ var RUN_CONTROL = makeCapabilityId(RUN_CONTROL_CAPABILITY_ID);
10
+ export {
11
+ RUN_CONTROL_CAPABILITY_ID,
12
+ RUN_CONTROL
13
+ };
@@ -0,0 +1,83 @@
1
+ /**
2
+ * Run-discovery capability seam.
3
+ *
4
+ * Contracts-native types for the RUN_DISCOVERY service: inline structural
5
+ * equivalents of the @oh-my-pi and @rig/relay-registry types. We define
6
+ * them here rather than importing from those packages to keep @rig/contracts
7
+ * floor-neutral (@rig/relay-registry depends on @rig/contracts — importing
8
+ * relay-registry here would be circular; @oh-my-pi is a vendor package that
9
+ * doesn't belong on the floor).
10
+ *
11
+ * TypeScript's structural type system makes these compatible with the
12
+ * corresponding @oh-my-pi / relay-registry types at the impl site.
13
+ *
14
+ * Pure: types + one branded id, no behaviour.
15
+ */
16
+ import type { CapabilityId } from "./capability-id";
17
+ import type { Stream } from "effect";
18
+ /** Structural equivalent of @oh-my-pi CollabRegistryFilter. */
19
+ export interface RunDiscoveryFilter {
20
+ githubUserId?: string;
21
+ namespaceKey?: string;
22
+ selectedRepo?: string;
23
+ cwd?: string;
24
+ }
25
+ export type RunRuntimeActivePredicate = (status: unknown) => boolean;
26
+ export interface RunDiscoveryStaleOptions {
27
+ readonly isRuntimeActiveStatus?: RunRuntimeActivePredicate;
28
+ }
29
+ /** Structural equivalent of @oh-my-pi LiveCollabOwner. */
30
+ export interface RunDiscoveryOwner {
31
+ githubUserId?: string;
32
+ login?: string;
33
+ namespaceKey?: string;
34
+ }
35
+ /** Structural equivalent of @oh-my-pi LiveCollabProjection. */
36
+ export interface LiveRunCollabProjection {
37
+ sessionId: string;
38
+ sessionPath: string;
39
+ cwd: string;
40
+ title: string;
41
+ joinLink: string;
42
+ webLink: string;
43
+ relayUrl?: string;
44
+ owner?: RunDiscoveryOwner;
45
+ selectedRepo?: string;
46
+ startedAt: string;
47
+ updatedAt: string;
48
+ pid?: number;
49
+ stale: boolean;
50
+ }
51
+ /** Input for attaching to a run via the relay (structural equiv of AttachViaRelayInput). */
52
+ export interface RigRunAttachInput {
53
+ readonly runId: string;
54
+ readonly taskId?: string | null;
55
+ readonly identityFilter: RunDiscoveryFilter;
56
+ readonly timeoutMs?: number;
57
+ readonly projectRoot?: string;
58
+ }
59
+ /** Result of a relay attach (structural equiv of RigExtensionAttachResult). */
60
+ export interface RigRunAttachResult {
61
+ readonly sessionPath: string | null;
62
+ readonly joinLink: string | null;
63
+ readonly collabSessionId: string | null;
64
+ }
65
+ /**
66
+ * The run-discovery service surface: the unified active-run list (local FS +
67
+ * remote registry) and relay attach. registrySnapshotStream is intentionally
68
+ * omitted — its entry type (`RegistrySnapshotFrame` from @rig/relay-registry)
69
+ * cannot be referenced here without creating a circular dep; consumers that
70
+ * need snapshot frames must cast through the transport-plugin's richer type.
71
+ */
72
+ export interface RunDiscoveryService {
73
+ readonly listActiveRunCollab: (projectRoot: string, filter: RunDiscoveryFilter, options?: RunDiscoveryStaleOptions) => Promise<readonly LiveRunCollabProjection[]>;
74
+ readonly runDiscoveryStream: (projectRoot: string) => Stream.Stream<void>;
75
+ readonly attachViaRelay: (input: RigRunAttachInput) => Promise<RigRunAttachResult | null>;
76
+ }
77
+ /** Stable id string for the run-discovery service capability. */
78
+ export declare const RUN_DISCOVERY_CAPABILITY_ID = "rig.runs.discovery";
79
+ /**
80
+ * The branded run-discovery capability id. `defineCapability(RUN_DISCOVERY)`
81
+ * (provider and consumers independently) resolves to a `RunDiscoveryService`.
82
+ */
83
+ export declare const RUN_DISCOVERY: CapabilityId<RunDiscoveryService>;
@@ -0,0 +1,13 @@
1
+ // @bun
2
+ // packages/contracts/src/capability-id.ts
3
+ function makeCapabilityId(id) {
4
+ return id;
5
+ }
6
+
7
+ // packages/contracts/src/run-discovery.ts
8
+ var RUN_DISCOVERY_CAPABILITY_ID = "rig.runs.discovery";
9
+ var RUN_DISCOVERY = makeCapabilityId(RUN_DISCOVERY_CAPABILITY_ID);
10
+ export {
11
+ RUN_DISCOVERY_CAPABILITY_ID,
12
+ RUN_DISCOVERY
13
+ };
@@ -0,0 +1,34 @@
1
+ /**
2
+ * run-dispatch.ts — pure capability vocabulary for placement-aware run dispatch.
3
+ *
4
+ * The dispatch IMPL (local + remote placement, run-process spawn, session-id
5
+ * wait) lives in @rig/transport-plugin (`./dispatch`, the `transport` backbone).
6
+ * Programmatic consumers (rig-extension, supervisor) resolve it off a project's
7
+ * plugin host under {@link RUN_DISPATCH_CAPABILITY_ID} — WITHOUT importing the
8
+ * transport plugin's impl. This file holds ONLY the pure id + interface shared
9
+ * by the provider and its consumers (no IO, no plugin imports).
10
+ */
11
+ import type { CapabilityId } from "./capability-id";
12
+ /** The placement-aware run dispatch input (plain, OMP-type-free). */
13
+ export interface RunDispatchInput {
14
+ readonly projectRoot: string;
15
+ readonly taskId: string;
16
+ readonly title?: string | null;
17
+ readonly model?: string | null;
18
+ readonly prompt?: string | null;
19
+ readonly force?: boolean;
20
+ }
21
+ /**
22
+ * The host-resolved run-dispatch surface: dispatch a run (resolving local vs
23
+ * remote/fleet placement at dispatch time) and resolve once an OMP session id
24
+ * has appeared. Mirrors `dispatchRun` in @rig/transport-plugin.
25
+ */
26
+ export interface RunDispatchService {
27
+ readonly dispatchRun: (input: RunDispatchInput) => Promise<{
28
+ readonly runId: string;
29
+ }>;
30
+ }
31
+ /** The capability id the transport plugin registers its run dispatcher under. */
32
+ export declare const RUN_DISPATCH_CAPABILITY_ID = "rig.runs.dispatch";
33
+ /** Phantom-typed id; string value is {@link RUN_DISPATCH_CAPABILITY_ID}. */
34
+ export declare const RUN_DISPATCH: CapabilityId<RunDispatchService>;
@@ -0,0 +1,13 @@
1
+ // @bun
2
+ // packages/contracts/src/capability-id.ts
3
+ function makeCapabilityId(id) {
4
+ return id;
5
+ }
6
+
7
+ // packages/contracts/src/run-dispatch.ts
8
+ var RUN_DISPATCH_CAPABILITY_ID = "rig.runs.dispatch";
9
+ var RUN_DISPATCH = makeCapabilityId(RUN_DISPATCH_CAPABILITY_ID);
10
+ export {
11
+ RUN_DISPATCH_CAPABILITY_ID,
12
+ RUN_DISPATCH
13
+ };
@@ -0,0 +1,47 @@
1
+ /**
2
+ * cap:run-identity-env — GitHub/Rig run identity capability seam.
3
+ *
4
+ * The CLI seed and sibling plugins must not implement GitHub identity policy or
5
+ * import a provider implementation directly. The identity owner
6
+ * (`@rig/github-provider-plugin`) registers this capability with public
7
+ * identity-env hydration, run-child credential stripping, and runtime identity
8
+ * resolution. This file holds ONLY pure seam vocabulary — no IO.
9
+ */
10
+ import type { CapabilityId } from "./capability-id";
11
+ import type { RigIdentityContext, RigResolvedIdentity } from "./identity";
12
+ /** Structural mirror of `@rig/relay-registry`'s `CollabRegistryFilter` (no transport dep). */
13
+ export type IdentityRegistryFilter = {
14
+ readonly cwd?: string;
15
+ readonly selectedRepo?: string;
16
+ readonly githubUserId?: string;
17
+ readonly namespaceKey?: string;
18
+ };
19
+ /** Capability id the identity owner registers its run identity policy under. */
20
+ export declare const RUN_IDENTITY_ENV_CAPABILITY_ID = "cap:run-identity-env";
21
+ /** GitHub/Rig identity operations consumers resolve through the provider capability. */
22
+ export interface RunIdentityEnvService {
23
+ /**
24
+ * Resolve public identity env vars for `workspaceRoot` without mutating
25
+ * process.env.
26
+ */
27
+ resolveIdentityEnv(workspaceRoot: string): Partial<Record<"RIG_SELECTED_REPO" | "RIG_GITHUB_USER_ID" | "RIG_GITHUB_LOGIN" | "RIG_GITHUB_NAMESPACE_KEY", string>>;
28
+ /**
29
+ * Hydrate the public-identity env vars for `workspaceRoot` into process.env
30
+ * (RIG_SELECTED_REPO / RIG_GITHUB_USER_ID / RIG_GITHUB_LOGIN / namespace key /
31
+ * auth-state-file pointer). Returns a restore closure that reverts the change.
32
+ */
33
+ applyIdentityEnv(workspaceRoot: string): () => void;
34
+ /** Build a registry discovery filter from the current public identity env. */
35
+ identityFilterFromEnv(): IdentityRegistryFilter;
36
+ /**
37
+ * Return a copy of `env` (default process.env) with the run-scoped credential
38
+ * tokens removed, for use as a spawned run-host child's environment.
39
+ */
40
+ stripRunChildCredentialEnv(env?: Record<string, string | undefined>): Record<string, string | undefined>;
41
+ /** Resolve the current Rig run identity from the OMP session/auth context. */
42
+ resolveRigIdentity(ctx: RigIdentityContext): RigResolvedIdentity | null;
43
+ /** Resolve the registry filter corresponding to the current Rig run identity. */
44
+ resolveRigIdentityFilter(ctx: RigIdentityContext): IdentityRegistryFilter | null;
45
+ }
46
+ /** Typed capability id; string value is {@link RUN_IDENTITY_ENV_CAPABILITY_ID}. */
47
+ export declare const RUN_IDENTITY_ENV: CapabilityId<RunIdentityEnvService>;
@@ -0,0 +1,13 @@
1
+ // @bun
2
+ // packages/contracts/src/capability-id.ts
3
+ function makeCapabilityId(id) {
4
+ return id;
5
+ }
6
+
7
+ // packages/contracts/src/run-identity.ts
8
+ var RUN_IDENTITY_ENV_CAPABILITY_ID = "cap:run-identity-env";
9
+ var RUN_IDENTITY_ENV = makeCapabilityId(RUN_IDENTITY_ENV_CAPABILITY_ID);
10
+ export {
11
+ RUN_IDENTITY_ENV_CAPABILITY_ID,
12
+ RUN_IDENTITY_ENV
13
+ };