@h-rig/contracts 0.0.6-alpha.154 → 0.0.6-alpha.156
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/index.cjs +407 -91
- package/dist/index.mjs +407 -91
- package/dist/src/browser.d.ts +50 -0
- package/dist/src/browser.js +6 -0
- package/dist/src/config.d.ts +4 -0
- package/dist/src/config.js +6 -14
- package/dist/src/control-plane-types.d.ts +283 -0
- package/dist/src/control-plane-types.js +29 -0
- package/dist/src/doctor.d.ts +27 -0
- package/dist/src/doctor.js +14 -0
- package/dist/src/github.d.ts +103 -0
- package/dist/src/github.js +6 -0
- package/dist/src/help-catalog.js +1 -1
- package/dist/src/index.d.ts +11 -0
- package/dist/src/index.js +407 -91
- package/dist/src/isolation.d.ts +21 -0
- package/dist/src/isolation.js +6 -0
- package/dist/src/kernel.d.ts +3 -35
- package/dist/src/kernel.js +0 -15
- package/dist/src/lifecycle-capabilities.d.ts +29 -0
- package/dist/src/lifecycle-capabilities.js +8 -0
- package/dist/src/managed-repos.d.ts +73 -0
- package/dist/src/managed-repos.js +6 -0
- package/dist/src/memory.d.ts +151 -0
- package/dist/src/memory.js +8 -0
- package/dist/src/panel-protocol.d.ts +17 -0
- package/dist/src/panel-protocol.js +10 -0
- package/dist/src/plugin-hooks.js +6 -14
- package/dist/src/plugin.d.ts +13 -0
- package/dist/src/plugin.js +7 -14
- package/dist/src/provider-instructions.d.ts +19 -0
- package/dist/src/provider-instructions.js +6 -0
- package/dist/src/run-journal.d.ts +1 -1
- package/dist/src/run-record.d.ts +11 -0
- package/dist/src/run-record.js +16 -0
- package/dist/src/supervisor-journal.d.ts +0 -1
- package/dist/src/supervisor-journal.js +0 -74
- package/dist/src/task-graph-primitives.d.ts +68 -0
- package/dist/src/task-graph-primitives.js +319 -0
- package/package.json +1 -1
package/dist/index.cjs
CHANGED
|
@@ -40,10 +40,18 @@ var __export = (target, all) => {
|
|
|
40
40
|
// packages/contracts/src/index.ts
|
|
41
41
|
var exports_src = {};
|
|
42
42
|
__export(exports_src, {
|
|
43
|
+
toTaskSummary: () => toTaskSummary,
|
|
44
|
+
toTaskDependencyProjection: () => toTaskDependencyProjection,
|
|
43
45
|
timelineEntriesFromCustomEntries: () => timelineEntriesFromCustomEntries,
|
|
46
|
+
strictMergeHeadShaFromGate: () => strictMergeHeadShaFromGate,
|
|
44
47
|
sessionIdFromSessionFile: () => sessionIdFromSessionFile,
|
|
45
|
-
|
|
48
|
+
resolveTaskReference: () => resolveTaskReference,
|
|
46
49
|
reduceRunJournal: () => reduceRunJournal,
|
|
50
|
+
readTaskSourceIssueId: () => readTaskSourceIssueId,
|
|
51
|
+
readTaskScope: () => readTaskScope,
|
|
52
|
+
readTaskMetadataStringList: () => readTaskMetadataStringList,
|
|
53
|
+
readTaskDependencyRefs: () => readTaskDependencyRefs,
|
|
54
|
+
readTaskBlockingDependencyRefs: () => readTaskBlockingDependencyRefs,
|
|
47
55
|
projectWorkflowEntries: () => projectWorkflowEntries,
|
|
48
56
|
projectCollabWorkflowMarker: () => projectCollabWorkflowMarker,
|
|
49
57
|
parseWorkflowTaskSelected: () => parseWorkflowTaskSelected,
|
|
@@ -57,14 +65,19 @@ __export(exports_src, {
|
|
|
57
65
|
parseResumeSentinel: () => parseResumeSentinel,
|
|
58
66
|
parsePauseSentinel: () => parsePauseSentinel,
|
|
59
67
|
parseInboxResolutionSentinel: () => parseInboxResolutionSentinel,
|
|
68
|
+
normalizeTaskStatus: () => normalizeTaskStatus,
|
|
60
69
|
normalizeRunStatusToken: () => normalizeRunStatusToken,
|
|
61
70
|
latestTimelineEntriesFromCustomEntries: () => latestTimelineEntriesFromCustomEntries,
|
|
71
|
+
latestRunByTaskId: () => latestRunByTaskId,
|
|
62
72
|
isTerminalRunStatus: () => isTerminalRunStatus,
|
|
73
|
+
isTaskTerminalStatus: () => isTaskTerminalStatus,
|
|
63
74
|
isRunSessionCustomType: () => isRunSessionCustomType,
|
|
64
75
|
isOperatorActiveRunStatus: () => isOperatorActiveRunStatus,
|
|
65
76
|
isActiveRunStatus: () => isActiveRunStatus,
|
|
66
77
|
helpCatalog: () => helpCatalog,
|
|
67
78
|
foldRunSessionEntries: () => foldRunSessionEntries,
|
|
79
|
+
doctorLevelToStatus: () => doctorLevelToStatus,
|
|
80
|
+
disjointScope: () => disjointScope,
|
|
68
81
|
decodeRunJournalEvent: () => decodeRunJournalEvent,
|
|
69
82
|
createWorkflowTaskSelected: () => createWorkflowTaskSelected,
|
|
70
83
|
createWorkflowTargetSelected: () => createWorkflowTargetSelected,
|
|
@@ -73,9 +86,13 @@ __export(exports_src, {
|
|
|
73
86
|
createWorkflowOperatorNote: () => createWorkflowOperatorNote,
|
|
74
87
|
createWorkflowInboxResolved: () => createWorkflowInboxResolved,
|
|
75
88
|
createWorkflowInboxRequested: () => createWorkflowInboxRequested,
|
|
89
|
+
countDoctorFailures: () => countDoctorFailures,
|
|
90
|
+
computeTaskDependencyBadges: () => computeTaskDependencyBadges,
|
|
91
|
+
computeTaskBlockingDepths: () => computeTaskBlockingDepths,
|
|
76
92
|
collectResolvedInboxRequests: () => collectResolvedInboxRequests,
|
|
77
93
|
collectPendingInboxRequests: () => collectPendingInboxRequests,
|
|
78
94
|
canTransitionRunStatus: () => canTransitionRunStatus,
|
|
95
|
+
buildTaskReferenceIndex: () => buildTaskReferenceIndex,
|
|
79
96
|
buildStopSentinel: () => buildStopSentinel,
|
|
80
97
|
buildResumeSentinel: () => buildResumeSentinel,
|
|
81
98
|
buildPauseSentinel: () => buildPauseSentinel,
|
|
@@ -175,6 +192,7 @@ __export(exports_src, {
|
|
|
175
192
|
TYPE_FOR_CUSTOM: () => TYPE_FOR_CUSTOM,
|
|
176
193
|
TOP_LEVEL_SECTIONS: () => TOP_LEVEL_SECTIONS,
|
|
177
194
|
TERMINAL_RUN_STATUSES: () => TERMINAL_RUN_STATUSES,
|
|
195
|
+
TASK_VERIFY_CAPABILITY_ID: () => TASK_VERIFY_CAPABILITY_ID,
|
|
178
196
|
SupervisorStoppedEvent: () => SupervisorStoppedEvent,
|
|
179
197
|
SupervisorStopReason: () => SupervisorStopReason,
|
|
180
198
|
SupervisorStatus: () => SupervisorStatus,
|
|
@@ -204,6 +222,7 @@ __export(exports_src, {
|
|
|
204
222
|
StageAllowResult: () => StageAllowResult,
|
|
205
223
|
Stage: () => Stage,
|
|
206
224
|
SkillRegistration: () => SkillRegistration,
|
|
225
|
+
SessionExtensionRegistration: () => SessionExtensionRegistration,
|
|
207
226
|
ServiceFabricWorkspaceInput: () => ServiceFabricWorkspaceInput,
|
|
208
227
|
ServiceFabricUpResult: () => ServiceFabricUpResult,
|
|
209
228
|
ServiceFabricUpInput: () => ServiceFabricUpInput,
|
|
@@ -404,6 +423,7 @@ __export(exports_src, {
|
|
|
404
423
|
RemoteConnectCommand: () => RemoteConnectCommand,
|
|
405
424
|
RemoteAddIterationsCommand: () => RemoteAddIterationsCommand,
|
|
406
425
|
RUN_STATUS_TRANSITIONS: () => RUN_STATUS_TRANSITIONS,
|
|
426
|
+
RUNTIME_INSTRUCTION_SERVICE_CAPABILITY_ID: () => RUNTIME_INSTRUCTION_SERVICE_CAPABILITY_ID,
|
|
407
427
|
RIG_WS_METHODS: () => RIG_WS_METHODS,
|
|
408
428
|
RIG_WS_CHANNELS: () => RIG_WS_CHANNELS,
|
|
409
429
|
RIG_WORKFLOW_TASK_SELECTED: () => RIG_WORKFLOW_TASK_SELECTED,
|
|
@@ -413,9 +433,11 @@ __export(exports_src, {
|
|
|
413
433
|
RIG_WORKFLOW_OPERATOR_NOTE: () => RIG_WORKFLOW_OPERATOR_NOTE,
|
|
414
434
|
RIG_WORKFLOW_INBOX_RESOLVED: () => RIG_WORKFLOW_INBOX_RESOLVED,
|
|
415
435
|
RIG_WORKFLOW_INBOX_REQUESTED: () => RIG_WORKFLOW_INBOX_REQUESTED,
|
|
436
|
+
RIG_SUPERVISOR_PANEL_ID: () => RIG_SUPERVISOR_PANEL_ID,
|
|
416
437
|
RIG_STOP_SENTINEL_END: () => RIG_STOP_SENTINEL_END,
|
|
417
438
|
RIG_STOP_SENTINEL: () => RIG_STOP_SENTINEL,
|
|
418
439
|
RIG_RUN_TIMELINE_ENTRY: () => RIG_RUN_TIMELINE_ENTRY,
|
|
440
|
+
RIG_RUN_STOP_PANEL_ACTION: () => RIG_RUN_STOP_PANEL_ACTION,
|
|
419
441
|
RIG_RUN_STEERING: () => RIG_RUN_STEERING,
|
|
420
442
|
RIG_RUN_STATUS_CHANGED: () => RIG_RUN_STATUS_CHANGED,
|
|
421
443
|
RIG_RUN_STALL_DETECTED: () => RIG_RUN_STALL_DETECTED,
|
|
@@ -434,6 +456,7 @@ __export(exports_src, {
|
|
|
434
456
|
RIG_PAUSE_SENTINEL: () => RIG_PAUSE_SENTINEL,
|
|
435
457
|
RIG_INBOX_RESOLUTION_SENTINEL: () => RIG_INBOX_RESOLUTION_SENTINEL,
|
|
436
458
|
RIG_CONTROL_SENTINEL_END: () => RIG_CONTROL_SENTINEL_END,
|
|
459
|
+
RIG_CAPABILITY_PANEL_SLOT: () => RIG_CAPABILITY_PANEL_SLOT,
|
|
437
460
|
REASONING_EFFORT_OPTIONS_BY_PROVIDER: () => REASONING_EFFORT_OPTIONS_BY_PROVIDER,
|
|
438
461
|
QueueEntry: () => QueueEntry,
|
|
439
462
|
PullRequestConfig: () => PullRequestConfig,
|
|
@@ -485,7 +508,6 @@ __export(exports_src, {
|
|
|
485
508
|
PolicyMode: () => PolicyMode,
|
|
486
509
|
PolicyDecisionSummary: () => PolicyDecisionSummary,
|
|
487
510
|
PolicyDecision: () => PolicyDecision,
|
|
488
|
-
PluginMeta: () => PluginMeta,
|
|
489
511
|
PluginContributes: () => PluginContributes,
|
|
490
512
|
PlanningConfig: () => PlanningConfig,
|
|
491
513
|
PlanTask: () => PlanTask,
|
|
@@ -535,16 +557,18 @@ __export(exports_src, {
|
|
|
535
557
|
ORCHESTRATION_WS_CHANNELS: () => ORCHESTRATION_WS_CHANNELS,
|
|
536
558
|
OPERATOR_INACTIVE_RUN_STATUSES: () => OPERATOR_INACTIVE_RUN_STATUSES,
|
|
537
559
|
NonNegativeInt: () => NonNegativeInt,
|
|
560
|
+
NO_MATCH_RETRIEVAL_CANONICAL_KEY: () => NO_MATCH_RETRIEVAL_CANONICAL_KEY,
|
|
538
561
|
MissingCapability: () => MissingCapability,
|
|
539
562
|
MessageId: () => MessageId,
|
|
540
563
|
MergeConfig: () => MergeConfig,
|
|
541
564
|
MODEL_SLUG_ALIASES_BY_PROVIDER: () => MODEL_SLUG_ALIASES_BY_PROVIDER,
|
|
542
565
|
MODEL_OPTIONS_BY_PROVIDER: () => MODEL_OPTIONS_BY_PROVIDER,
|
|
566
|
+
MEMORY_SERVICE_CAPABILITY_ID: () => MEMORY_SERVICE_CAPABILITY_ID,
|
|
543
567
|
MAX_WHEN_EXPRESSION_DEPTH: () => MAX_WHEN_EXPRESSION_DEPTH,
|
|
544
568
|
MAX_SCRIPT_ID_LENGTH: () => MAX_SCRIPT_ID_LENGTH,
|
|
545
569
|
MAX_KEYBINDING_VALUE_LENGTH: () => MAX_KEYBINDING_VALUE_LENGTH,
|
|
546
570
|
MAX_KEYBINDINGS_COUNT: () => MAX_KEYBINDINGS_COUNT,
|
|
547
|
-
|
|
571
|
+
MANAGED_REPO_SERVICE_CAPABILITY_ID: () => MANAGED_REPO_SERVICE_CAPABILITY_ID,
|
|
548
572
|
KeybindingsConfig: () => KeybindingsConfig,
|
|
549
573
|
KeybindingWhenNode: () => KeybindingWhenNode,
|
|
550
574
|
KeybindingShortcut: () => KeybindingShortcut,
|
|
@@ -561,6 +585,7 @@ __export(exports_src, {
|
|
|
561
585
|
IsolationMode: () => IsolationMode,
|
|
562
586
|
IsoDateTime: () => IsoDateTime,
|
|
563
587
|
InsertStageMutation: () => InsertStageMutation,
|
|
588
|
+
ISOLATION_BACKEND_CAPABILITY_ID: () => ISOLATION_BACKEND_CAPABILITY_ID,
|
|
564
589
|
HookToolInput: () => HookToolInput,
|
|
565
590
|
HookResult: () => HookResult,
|
|
566
591
|
HookRegistration: () => HookRegistration,
|
|
@@ -591,6 +616,7 @@ __export(exports_src, {
|
|
|
591
616
|
GitCreateBranchInput: () => GitCreateBranchInput,
|
|
592
617
|
GitCheckoutInput: () => GitCheckoutInput,
|
|
593
618
|
GitBranch: () => GitBranch,
|
|
619
|
+
GITHUB_PROVIDER_CAPABILITY_ID: () => GITHUB_PROVIDER_CAPABILITY_ID,
|
|
594
620
|
FunctionalRequirement: () => FunctionalRequirement,
|
|
595
621
|
EventId: () => EventId,
|
|
596
622
|
EpicRollup: () => EpicRollup,
|
|
@@ -627,6 +653,7 @@ __export(exports_src, {
|
|
|
627
653
|
DependencyGraphModel: () => DependencyGraphModel,
|
|
628
654
|
DependencyEdgeType: () => DependencyEdgeType,
|
|
629
655
|
DependencyEdge: () => DependencyEdge,
|
|
656
|
+
DOCTOR_RUNNER_CAPABILITY_ID: () => DOCTOR_RUNNER_CAPABILITY_ID,
|
|
630
657
|
DEFAULT_TERMINAL_ID: () => DEFAULT_TERMINAL_ID,
|
|
631
658
|
DEFAULT_RUNTIME_MODE: () => DEFAULT_RUNTIME_MODE,
|
|
632
659
|
DEFAULT_REASONING_EFFORT_BY_PROVIDER: () => DEFAULT_REASONING_EFFORT_BY_PROVIDER,
|
|
@@ -663,6 +690,7 @@ __export(exports_src, {
|
|
|
663
690
|
CanonicalRequestType: () => CanonicalRequestType,
|
|
664
691
|
CanonicalItemType: () => CanonicalItemType,
|
|
665
692
|
CUSTOM_TYPE_FOR: () => CUSTOM_TYPE_FOR,
|
|
693
|
+
COMPLETION_VERIFICATION_CAPABILITY_ID: () => COMPLETION_VERIFICATION_CAPABILITY_ID,
|
|
666
694
|
CODEX_REASONING_EFFORT_OPTIONS: () => CODEX_REASONING_EFFORT_OPTIONS,
|
|
667
695
|
CLI_OUTPUT_VERSION: () => CLI_OUTPUT_VERSION,
|
|
668
696
|
BootResultDescriptor: () => BootResultDescriptor,
|
|
@@ -670,6 +698,7 @@ __export(exports_src, {
|
|
|
670
698
|
BlockerClassifierRegistration: () => BlockerClassifierRegistration,
|
|
671
699
|
BlockerClassification: () => BlockerClassification,
|
|
672
700
|
BlockerClass: () => BlockerClass,
|
|
701
|
+
BROWSER_CONTRACT_SERVICE_CAPABILITY_ID: () => BROWSER_CONTRACT_SERVICE_CAPABILITY_ID,
|
|
673
702
|
AutomationConfig: () => AutomationConfig,
|
|
674
703
|
AssistantDeliveryMode: () => AssistantDeliveryMode,
|
|
675
704
|
AssigneeRollup: () => AssigneeRollup,
|
|
@@ -3207,6 +3236,19 @@ function latestTimelineEntriesFromCustomEntries(entries, limit) {
|
|
|
3207
3236
|
timeline.reverse();
|
|
3208
3237
|
return timeline;
|
|
3209
3238
|
}
|
|
3239
|
+
// packages/contracts/src/run-record.ts
|
|
3240
|
+
function latestRunByTaskId(runs) {
|
|
3241
|
+
const byTask = new Map;
|
|
3242
|
+
const stamp = (run) => Date.parse(run.updatedAt ?? run.startedAt ?? "") || 0;
|
|
3243
|
+
for (const run of runs) {
|
|
3244
|
+
if (!run.taskId)
|
|
3245
|
+
continue;
|
|
3246
|
+
const current = byTask.get(run.taskId);
|
|
3247
|
+
if (!current || stamp(run) >= stamp(current))
|
|
3248
|
+
byTask.set(run.taskId, run);
|
|
3249
|
+
}
|
|
3250
|
+
return byTask;
|
|
3251
|
+
}
|
|
3210
3252
|
// packages/contracts/src/run-status.ts
|
|
3211
3253
|
var OPERATOR_INACTIVE_RUN_STATUSES = new Set([
|
|
3212
3254
|
"completed",
|
|
@@ -3312,19 +3354,6 @@ var CapabilityReplacementSpec = import_effect10.Schema.Union([
|
|
|
3312
3354
|
CapabilityReplacement,
|
|
3313
3355
|
TrimmedNonEmptyString
|
|
3314
3356
|
]);
|
|
3315
|
-
var PluginMeta = import_effect10.Schema.Struct({
|
|
3316
|
-
id: TrimmedNonEmptyString,
|
|
3317
|
-
version: TrimmedNonEmptyString,
|
|
3318
|
-
provides: import_effect10.Schema.Array(CapabilityTag),
|
|
3319
|
-
requires: import_effect10.Schema.optional(import_effect10.Schema.Array(CapabilityTag)),
|
|
3320
|
-
replaces: import_effect10.Schema.optional(import_effect10.Schema.Array(CapabilityReplacementSpec))
|
|
3321
|
-
});
|
|
3322
|
-
var LoadedPluginDescriptor = import_effect10.Schema.Struct({
|
|
3323
|
-
meta: PluginMeta,
|
|
3324
|
-
provides: import_effect10.Schema.Array(CapabilityTag),
|
|
3325
|
-
contributes: import_effect10.Schema.Unknown,
|
|
3326
|
-
runtime: import_effect10.Schema.Unknown
|
|
3327
|
-
});
|
|
3328
3357
|
var KernelReplacementGrant = import_effect10.Schema.Struct({
|
|
3329
3358
|
pluginId: TrimmedNonEmptyString,
|
|
3330
3359
|
grantedBy: import_effect10.Schema.optional(TrimmedNonEmptyString),
|
|
@@ -3490,6 +3519,10 @@ var BlockerClassifierRegistration = import_effect11.Schema.Struct({
|
|
|
3490
3519
|
description: import_effect11.Schema.optional(import_effect11.Schema.String),
|
|
3491
3520
|
priority: import_effect11.Schema.optional(import_effect11.Schema.Number)
|
|
3492
3521
|
});
|
|
3522
|
+
var SessionExtensionRegistration = import_effect11.Schema.Struct({
|
|
3523
|
+
id: import_effect11.Schema.String,
|
|
3524
|
+
description: import_effect11.Schema.optional(import_effect11.Schema.String)
|
|
3525
|
+
});
|
|
3493
3526
|
var PluginContributes = import_effect11.Schema.Struct({
|
|
3494
3527
|
validators: import_effect11.Schema.optional(import_effect11.Schema.Array(ValidatorRegistration)),
|
|
3495
3528
|
hooks: import_effect11.Schema.optional(import_effect11.Schema.Array(HookRegistration)),
|
|
@@ -3503,7 +3536,8 @@ var PluginContributes = import_effect11.Schema.Struct({
|
|
|
3503
3536
|
stageMutations: import_effect11.Schema.optional(import_effect11.Schema.Array(StageMutation)),
|
|
3504
3537
|
capabilities: import_effect11.Schema.optional(import_effect11.Schema.Array(ProductCapabilityRegistration)),
|
|
3505
3538
|
panels: import_effect11.Schema.optional(import_effect11.Schema.Array(PanelRegistration)),
|
|
3506
|
-
blockerClassifiers: import_effect11.Schema.optional(import_effect11.Schema.Array(BlockerClassifierRegistration))
|
|
3539
|
+
blockerClassifiers: import_effect11.Schema.optional(import_effect11.Schema.Array(BlockerClassifierRegistration)),
|
|
3540
|
+
sessionExtensions: import_effect11.Schema.optional(import_effect11.Schema.Array(SessionExtensionRegistration))
|
|
3507
3541
|
});
|
|
3508
3542
|
var RigPlugin = import_effect11.Schema.Struct({
|
|
3509
3543
|
name: import_effect11.Schema.String,
|
|
@@ -3651,79 +3685,6 @@ var SupervisorProjection = import_effect13.Schema.Struct({
|
|
|
3651
3685
|
closures: import_effect13.Schema.Array(TaskClosureSummary),
|
|
3652
3686
|
anomalies: import_effect13.Schema.Array(import_effect13.Schema.String)
|
|
3653
3687
|
});
|
|
3654
|
-
function reduceSupervisorJournal(events) {
|
|
3655
|
-
let processed = 0;
|
|
3656
|
-
let succeeded = 0;
|
|
3657
|
-
let failed = 0;
|
|
3658
|
-
let skipped = 0;
|
|
3659
|
-
let current = null;
|
|
3660
|
-
let idleReason = null;
|
|
3661
|
-
let stopReason = null;
|
|
3662
|
-
let status = "running";
|
|
3663
|
-
let plannedOrder = [];
|
|
3664
|
-
let selectionPolicy = null;
|
|
3665
|
-
const concurrency = null;
|
|
3666
|
-
const closures = [];
|
|
3667
|
-
const anomalies = [];
|
|
3668
|
-
for (const event of events) {
|
|
3669
|
-
switch (event.kind) {
|
|
3670
|
-
case "supervisor.started":
|
|
3671
|
-
status = "running";
|
|
3672
|
-
break;
|
|
3673
|
-
case "supervisor.selection-planned":
|
|
3674
|
-
plannedOrder = [...event.taskIds];
|
|
3675
|
-
selectionPolicy = event.policy;
|
|
3676
|
-
break;
|
|
3677
|
-
case "supervisor.dispatch-started":
|
|
3678
|
-
break;
|
|
3679
|
-
case "supervisor.dispatch-confirmed":
|
|
3680
|
-
current = { taskId: event.taskId, runId: event.runId };
|
|
3681
|
-
break;
|
|
3682
|
-
case "supervisor.dispatch":
|
|
3683
|
-
current = { taskId: event.taskId, runId: event.runId };
|
|
3684
|
-
break;
|
|
3685
|
-
case "supervisor.outcome":
|
|
3686
|
-
processed += 1;
|
|
3687
|
-
if (event.failed) {
|
|
3688
|
-
failed += 1;
|
|
3689
|
-
} else {
|
|
3690
|
-
succeeded += 1;
|
|
3691
|
-
}
|
|
3692
|
-
if (event.closure) {
|
|
3693
|
-
closures.push(event.closure);
|
|
3694
|
-
}
|
|
3695
|
-
if (current?.runId === event.runId) {
|
|
3696
|
-
current = null;
|
|
3697
|
-
} else if (current !== null) {
|
|
3698
|
-
anomalies.push(`outcome for ${event.runId} did not match current ${current.runId}`);
|
|
3699
|
-
}
|
|
3700
|
-
break;
|
|
3701
|
-
case "supervisor.skipped":
|
|
3702
|
-
processed += 1;
|
|
3703
|
-
skipped += 1;
|
|
3704
|
-
break;
|
|
3705
|
-
case "supervisor.idle":
|
|
3706
|
-
status = "idle";
|
|
3707
|
-
idleReason = event.reason;
|
|
3708
|
-
break;
|
|
3709
|
-
case "supervisor.stopped":
|
|
3710
|
-
status = "stopped";
|
|
3711
|
-
stopReason = event.reason;
|
|
3712
|
-
current = null;
|
|
3713
|
-
break;
|
|
3714
|
-
case "supervisor.finished":
|
|
3715
|
-
status = "finished";
|
|
3716
|
-
processed = event.processed;
|
|
3717
|
-
succeeded = event.succeeded;
|
|
3718
|
-
failed = event.failed;
|
|
3719
|
-
skipped = event.skipped ?? skipped;
|
|
3720
|
-
idleReason = event.idleReason;
|
|
3721
|
-
current = null;
|
|
3722
|
-
break;
|
|
3723
|
-
}
|
|
3724
|
-
}
|
|
3725
|
-
return { status, processed, succeeded, failed, skipped, current, plannedOrder, selectionPolicy, concurrency, idleReason, stopReason, closures, anomalies };
|
|
3726
|
-
}
|
|
3727
3688
|
|
|
3728
3689
|
// packages/contracts/src/config.ts
|
|
3729
3690
|
var WorkspaceIsolation = import_effect14.Schema.Literals([
|
|
@@ -7032,7 +6993,7 @@ var PRIMARY_GROUPS = [
|
|
|
7032
6993
|
name: "graph",
|
|
7033
6994
|
summary: "Workspace dependency graph.",
|
|
7034
6995
|
usage: ["rig graph [--json|--dot]"],
|
|
7035
|
-
commands: [{ command: "[--json|--dot]", description: "Build the dependency graph
|
|
6996
|
+
commands: [{ command: "[--json|--dot]", description: "Build the workspace dependency graph and print summary, JSON, or DOT.", primary: true }],
|
|
7036
6997
|
examples: ["rig graph", "rig graph --json", "rig graph --dot"]
|
|
7037
6998
|
},
|
|
7038
6999
|
{
|
|
@@ -7453,4 +7414,359 @@ var WorkspaceRollups = import_effect35.Schema.Struct({
|
|
|
7453
7414
|
assignees: import_effect35.Schema.Array(AssigneeRollup),
|
|
7454
7415
|
generatedAt: IsoDateTime
|
|
7455
7416
|
});
|
|
7417
|
+
// packages/contracts/src/panel-protocol.ts
|
|
7418
|
+
var RIG_RUN_STOP_PANEL_ACTION = "rig-run:stop";
|
|
7419
|
+
var RIG_CAPABILITY_PANEL_SLOT = "capability";
|
|
7420
|
+
var RIG_SUPERVISOR_PANEL_ID = "supervisor";
|
|
7421
|
+
// packages/contracts/src/control-plane-types.ts
|
|
7422
|
+
function strictMergeHeadShaFromGate(result, prUrl, requireGreptile = true) {
|
|
7423
|
+
if (!result.approved) {
|
|
7424
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate is not approved.`);
|
|
7425
|
+
}
|
|
7426
|
+
if (result.evidence.prUrl !== prUrl) {
|
|
7427
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate evidence belongs to ${result.evidence.prUrl}.`);
|
|
7428
|
+
}
|
|
7429
|
+
const headSha = result.evidence.headSha?.trim();
|
|
7430
|
+
if (!headSha) {
|
|
7431
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate did not provide a current head SHA.`);
|
|
7432
|
+
}
|
|
7433
|
+
if (!/^[0-9a-f]{40}$/i.test(headSha)) {
|
|
7434
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate head is not a raw 40-character commit SHA.`);
|
|
7435
|
+
}
|
|
7436
|
+
if (requireGreptile) {
|
|
7437
|
+
if (!result.evidence.greptile.fresh || result.evidence.greptile.currentHeadSha !== headSha) {
|
|
7438
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate approval is not tied to head ${headSha}.`);
|
|
7439
|
+
}
|
|
7440
|
+
if (result.evidence.greptile.mapping !== "score-5-of-5" && result.evidence.greptile.mapping !== "explicit-approved") {
|
|
7441
|
+
throw new Error(`Refusing to merge ${prUrl}: strict merge gate mapping is ${result.evidence.greptile.mapping}.`);
|
|
7442
|
+
}
|
|
7443
|
+
}
|
|
7444
|
+
return headSha;
|
|
7445
|
+
}
|
|
7446
|
+
// packages/contracts/src/lifecycle-capabilities.ts
|
|
7447
|
+
var TASK_VERIFY_CAPABILITY_ID = "default-lifecycle.task-verify";
|
|
7448
|
+
var COMPLETION_VERIFICATION_CAPABILITY_ID = "default-lifecycle.completion-verification";
|
|
7449
|
+
// packages/contracts/src/browser.ts
|
|
7450
|
+
var BROWSER_CONTRACT_SERVICE_CAPABILITY_ID = "browser.contract";
|
|
7451
|
+
// packages/contracts/src/memory.ts
|
|
7452
|
+
var MEMORY_SERVICE_CAPABILITY_ID = "memory.service";
|
|
7453
|
+
var NO_MATCH_RETRIEVAL_CANONICAL_KEY = "__memory_recall__:none";
|
|
7454
|
+
// packages/contracts/src/provider-instructions.ts
|
|
7455
|
+
var RUNTIME_INSTRUCTION_SERVICE_CAPABILITY_ID = "provider.runtime-instructions";
|
|
7456
|
+
// packages/contracts/src/isolation.ts
|
|
7457
|
+
var ISOLATION_BACKEND_CAPABILITY_ID = "isolation.backend";
|
|
7458
|
+
// packages/contracts/src/managed-repos.ts
|
|
7459
|
+
var MANAGED_REPO_SERVICE_CAPABILITY_ID = "managed-repos.service";
|
|
7460
|
+
// packages/contracts/src/task-graph-primitives.ts
|
|
7461
|
+
function isObjectRecord(value) {
|
|
7462
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
7463
|
+
}
|
|
7464
|
+
function readStringList(value) {
|
|
7465
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string" && entry.length > 0) : [];
|
|
7466
|
+
}
|
|
7467
|
+
function unique(values) {
|
|
7468
|
+
return Array.from(new Set(values));
|
|
7469
|
+
}
|
|
7470
|
+
function readTaskMetadataStringList(task, key) {
|
|
7471
|
+
const taskRecord = task;
|
|
7472
|
+
const topLevel = readStringList(taskRecord[key]);
|
|
7473
|
+
if (topLevel.length > 0)
|
|
7474
|
+
return topLevel;
|
|
7475
|
+
const metadata = isObjectRecord(task.metadata) ? task.metadata : null;
|
|
7476
|
+
const metadataList = readStringList(metadata?.[key]);
|
|
7477
|
+
if (metadataList.length > 0)
|
|
7478
|
+
return metadataList;
|
|
7479
|
+
if (key === "dependencies") {
|
|
7480
|
+
return readStringList(metadata?.deps);
|
|
7481
|
+
}
|
|
7482
|
+
return [];
|
|
7483
|
+
}
|
|
7484
|
+
function readTaskBlockingDependencyRefs(task) {
|
|
7485
|
+
return readTaskMetadataStringList(task, "dependencies");
|
|
7486
|
+
}
|
|
7487
|
+
function readTaskDependencyRefs(task) {
|
|
7488
|
+
return unique([
|
|
7489
|
+
...readTaskMetadataStringList(task, "dependencies"),
|
|
7490
|
+
...readTaskMetadataStringList(task, "parentChildDeps")
|
|
7491
|
+
]);
|
|
7492
|
+
}
|
|
7493
|
+
function readTaskSourceIssueId(task) {
|
|
7494
|
+
if (typeof task.sourceIssueId === "string" && task.sourceIssueId.length > 0) {
|
|
7495
|
+
return task.sourceIssueId;
|
|
7496
|
+
}
|
|
7497
|
+
const metadata = isObjectRecord(task.metadata) ? task.metadata : null;
|
|
7498
|
+
if (typeof metadata?.sourceIssueId === "string" && metadata.sourceIssueId.length > 0) {
|
|
7499
|
+
return metadata.sourceIssueId;
|
|
7500
|
+
}
|
|
7501
|
+
const rigMetadata = isObjectRecord(metadata?._rig) ? metadata._rig : null;
|
|
7502
|
+
return typeof rigMetadata?.sourceIssueId === "string" && rigMetadata.sourceIssueId.length > 0 ? rigMetadata.sourceIssueId : null;
|
|
7503
|
+
}
|
|
7504
|
+
function readTaskScope(task) {
|
|
7505
|
+
const taskRecord = task;
|
|
7506
|
+
const topLevel = readStringList(taskRecord.scope);
|
|
7507
|
+
if (topLevel.length > 0)
|
|
7508
|
+
return unique(topLevel.map((entry) => entry.trim()).filter((entry) => entry.length > 0));
|
|
7509
|
+
const metadata = isObjectRecord(task.metadata) ? task.metadata : null;
|
|
7510
|
+
const metadataScope = readStringList(metadata?.scope);
|
|
7511
|
+
if (metadataScope.length > 0)
|
|
7512
|
+
return unique(metadataScope.map((entry) => entry.trim()).filter((entry) => entry.length > 0));
|
|
7513
|
+
return unique([
|
|
7514
|
+
...readStringList(metadata?.files),
|
|
7515
|
+
...readStringList(metadata?.paths)
|
|
7516
|
+
].map((entry) => entry.trim()).filter((entry) => entry.length > 0));
|
|
7517
|
+
}
|
|
7518
|
+
function isScopeList(input) {
|
|
7519
|
+
return Array.isArray(input);
|
|
7520
|
+
}
|
|
7521
|
+
function normalizeScopeInput(input) {
|
|
7522
|
+
return isScopeList(input) ? unique(input.map((entry) => entry.trim()).filter((entry) => entry.length > 0)) : readTaskScope(input);
|
|
7523
|
+
}
|
|
7524
|
+
function disjointScope(left, right) {
|
|
7525
|
+
const leftScope = new Set(normalizeScopeInput(left));
|
|
7526
|
+
if (leftScope.size === 0)
|
|
7527
|
+
return true;
|
|
7528
|
+
return normalizeScopeInput(right).every((entry) => !leftScope.has(entry));
|
|
7529
|
+
}
|
|
7530
|
+
function resolveTaskReference(ref, tasksById, taskIdByExternalRef, taskIdBySourceIssueId) {
|
|
7531
|
+
if (tasksById.has(ref))
|
|
7532
|
+
return ref;
|
|
7533
|
+
return taskIdBySourceIssueId.get(ref) ?? taskIdByExternalRef.get(ref) ?? null;
|
|
7534
|
+
}
|
|
7535
|
+
function buildTaskReferenceIndex(tasks) {
|
|
7536
|
+
return {
|
|
7537
|
+
tasksById: new Map(tasks.map((task) => [task.id, task])),
|
|
7538
|
+
taskIdByExternalRef: new Map(tasks.flatMap((task) => task.externalId ? [[task.externalId, task.id]] : [])),
|
|
7539
|
+
taskIdBySourceIssueId: new Map(tasks.flatMap((task) => {
|
|
7540
|
+
const sourceIssueId = readTaskSourceIssueId(task);
|
|
7541
|
+
return sourceIssueId ? [[sourceIssueId, task.id]] : [];
|
|
7542
|
+
}))
|
|
7543
|
+
};
|
|
7544
|
+
}
|
|
7545
|
+
function computeTaskBlockingDepths(tasks) {
|
|
7546
|
+
const { tasksById, taskIdByExternalRef, taskIdBySourceIssueId } = buildTaskReferenceIndex(tasks);
|
|
7547
|
+
const memo = new Map;
|
|
7548
|
+
const visit = (taskId, stack) => {
|
|
7549
|
+
const cached = memo.get(taskId);
|
|
7550
|
+
if (cached !== undefined)
|
|
7551
|
+
return cached;
|
|
7552
|
+
if (stack.has(taskId))
|
|
7553
|
+
return 0;
|
|
7554
|
+
const task = tasksById.get(taskId);
|
|
7555
|
+
if (!task)
|
|
7556
|
+
return 0;
|
|
7557
|
+
stack.add(taskId);
|
|
7558
|
+
const blockers = readTaskBlockingDependencyRefs(task).map((ref) => resolveTaskReference(ref, tasksById, taskIdByExternalRef, taskIdBySourceIssueId)).filter((ref) => ref !== null && ref !== taskId);
|
|
7559
|
+
const depth = blockers.length === 0 ? 0 : Math.max(...blockers.map((blockerId) => visit(blockerId, stack) + 1));
|
|
7560
|
+
stack.delete(taskId);
|
|
7561
|
+
memo.set(taskId, depth);
|
|
7562
|
+
return depth;
|
|
7563
|
+
};
|
|
7564
|
+
for (const task of tasks) {
|
|
7565
|
+
visit(task.id, new Set);
|
|
7566
|
+
}
|
|
7567
|
+
return memo;
|
|
7568
|
+
}
|
|
7569
|
+
function isTaskTerminalStatus(status) {
|
|
7570
|
+
switch (status) {
|
|
7571
|
+
case "closed":
|
|
7572
|
+
case "completed":
|
|
7573
|
+
case "done":
|
|
7574
|
+
case "cancelled":
|
|
7575
|
+
case "canceled":
|
|
7576
|
+
return true;
|
|
7577
|
+
default:
|
|
7578
|
+
return false;
|
|
7579
|
+
}
|
|
7580
|
+
}
|
|
7581
|
+
function isTaskBlockedStatus(status) {
|
|
7582
|
+
return status === "blocked";
|
|
7583
|
+
}
|
|
7584
|
+
function isTaskRunnableStatus(status) {
|
|
7585
|
+
if (status === null || status === undefined || status === "")
|
|
7586
|
+
return true;
|
|
7587
|
+
if (isTaskTerminalStatus(status) || isTaskBlockedStatus(status))
|
|
7588
|
+
return false;
|
|
7589
|
+
switch (status) {
|
|
7590
|
+
case "ready":
|
|
7591
|
+
case "open":
|
|
7592
|
+
case "failed":
|
|
7593
|
+
return true;
|
|
7594
|
+
default:
|
|
7595
|
+
return false;
|
|
7596
|
+
}
|
|
7597
|
+
}
|
|
7598
|
+
function computeTaskDependencyBadges(tasks) {
|
|
7599
|
+
const index = buildTaskReferenceIndex(tasks);
|
|
7600
|
+
const blockingDepths = computeTaskBlockingDepths(tasks);
|
|
7601
|
+
const dependencyIdsByTask = new Map;
|
|
7602
|
+
const unresolvedRefsByTask = new Map;
|
|
7603
|
+
const blocksByTask = new Map;
|
|
7604
|
+
for (const task of tasks) {
|
|
7605
|
+
const dependencyIds = [];
|
|
7606
|
+
const unresolvedRefs = [];
|
|
7607
|
+
for (const ref of readTaskBlockingDependencyRefs(task)) {
|
|
7608
|
+
const dependencyId = resolveTaskReference(ref, index.tasksById, index.taskIdByExternalRef, index.taskIdBySourceIssueId);
|
|
7609
|
+
if (dependencyId && dependencyId !== task.id) {
|
|
7610
|
+
dependencyIds.push(dependencyId);
|
|
7611
|
+
const blocks = blocksByTask.get(dependencyId);
|
|
7612
|
+
if (blocks) {
|
|
7613
|
+
blocks.push(task.id);
|
|
7614
|
+
} else {
|
|
7615
|
+
blocksByTask.set(dependencyId, [task.id]);
|
|
7616
|
+
}
|
|
7617
|
+
} else {
|
|
7618
|
+
unresolvedRefs.push(ref);
|
|
7619
|
+
}
|
|
7620
|
+
}
|
|
7621
|
+
dependencyIdsByTask.set(task.id, unique(dependencyIds));
|
|
7622
|
+
unresolvedRefsByTask.set(task.id, unique(unresolvedRefs));
|
|
7623
|
+
}
|
|
7624
|
+
const summaries = new Map;
|
|
7625
|
+
for (const task of tasks) {
|
|
7626
|
+
const dependencyIds = dependencyIdsByTask.get(task.id) ?? [];
|
|
7627
|
+
const unresolvedDependencyRefs = unresolvedRefsByTask.get(task.id) ?? [];
|
|
7628
|
+
const blockedBy = dependencyIds.filter((dependencyId) => {
|
|
7629
|
+
const dependency = index.tasksById.get(dependencyId);
|
|
7630
|
+
return dependency ? !isTaskTerminalStatus(dependency.status) : false;
|
|
7631
|
+
});
|
|
7632
|
+
const blocks = unique(blocksByTask.get(task.id) ?? []);
|
|
7633
|
+
const blocked = isTaskBlockedStatus(task.status) || blockedBy.length > 0;
|
|
7634
|
+
const ready = isTaskRunnableStatus(task.status) && !blocked;
|
|
7635
|
+
const badges = [];
|
|
7636
|
+
if (blocked) {
|
|
7637
|
+
badges.push({
|
|
7638
|
+
kind: "blocked",
|
|
7639
|
+
label: blockedBy.length > 0 ? `blocked \xD7${blockedBy.length}` : "blocked",
|
|
7640
|
+
description: blockedBy.length > 0 ? `Waiting on ${blockedBy.join(", ")}.` : "Task source marks this task blocked.",
|
|
7641
|
+
...blockedBy.length > 0 ? { count: blockedBy.length } : {},
|
|
7642
|
+
taskIds: blockedBy
|
|
7643
|
+
});
|
|
7644
|
+
} else if (ready) {
|
|
7645
|
+
badges.push({
|
|
7646
|
+
kind: "ready",
|
|
7647
|
+
label: "ready",
|
|
7648
|
+
description: "No open dependencies block this task."
|
|
7649
|
+
});
|
|
7650
|
+
}
|
|
7651
|
+
if (dependencyIds.length > 0 || blocks.length > 0 || unresolvedDependencyRefs.length > 0) {
|
|
7652
|
+
badges.push({
|
|
7653
|
+
kind: "dependency",
|
|
7654
|
+
label: `deps ${dependencyIds.length}/${blocks.length}`,
|
|
7655
|
+
description: [
|
|
7656
|
+
dependencyIds.length > 0 ? `Depends on ${dependencyIds.join(", ")}.` : null,
|
|
7657
|
+
blocks.length > 0 ? `Blocks ${blocks.join(", ")}.` : null,
|
|
7658
|
+
unresolvedDependencyRefs.length > 0 ? `Unresolved refs: ${unresolvedDependencyRefs.join(", ")}.` : null
|
|
7659
|
+
].filter((part) => part !== null).join(" "),
|
|
7660
|
+
count: dependencyIds.length + blocks.length,
|
|
7661
|
+
taskIds: unique([...dependencyIds, ...blocks])
|
|
7662
|
+
});
|
|
7663
|
+
}
|
|
7664
|
+
summaries.set(task.id, {
|
|
7665
|
+
taskId: task.id,
|
|
7666
|
+
blockingDepth: blockingDepths.get(task.id) ?? 0,
|
|
7667
|
+
dependencyIds,
|
|
7668
|
+
unresolvedDependencyRefs,
|
|
7669
|
+
blockedBy,
|
|
7670
|
+
blocks,
|
|
7671
|
+
blocked,
|
|
7672
|
+
ready,
|
|
7673
|
+
dependencyCount: dependencyIds.length,
|
|
7674
|
+
dependentCount: blocks.length,
|
|
7675
|
+
badges
|
|
7676
|
+
});
|
|
7677
|
+
}
|
|
7678
|
+
return summaries;
|
|
7679
|
+
}
|
|
7680
|
+
var TASK_STATUSES = new Set([
|
|
7681
|
+
"draft",
|
|
7682
|
+
"open",
|
|
7683
|
+
"ready",
|
|
7684
|
+
"queued",
|
|
7685
|
+
"running",
|
|
7686
|
+
"in_progress",
|
|
7687
|
+
"under_review",
|
|
7688
|
+
"blocked",
|
|
7689
|
+
"unknown",
|
|
7690
|
+
"completed",
|
|
7691
|
+
"failed",
|
|
7692
|
+
"cancelled",
|
|
7693
|
+
"closed"
|
|
7694
|
+
]);
|
|
7695
|
+
function stringValue(value) {
|
|
7696
|
+
return typeof value === "string" && value.trim().length > 0 ? value.trim() : null;
|
|
7697
|
+
}
|
|
7698
|
+
function stringArray(value) {
|
|
7699
|
+
return Array.isArray(value) ? value.filter((entry) => typeof entry === "string" && entry.trim().length > 0).map((entry) => entry.trim()) : [];
|
|
7700
|
+
}
|
|
7701
|
+
function numberOrNull(value) {
|
|
7702
|
+
return typeof value === "number" && Number.isFinite(value) && value > 0 ? value : null;
|
|
7703
|
+
}
|
|
7704
|
+
function metadataOf(task) {
|
|
7705
|
+
return isObjectRecord(task.metadata) ? task.metadata : {};
|
|
7706
|
+
}
|
|
7707
|
+
function normalizeTaskStatus(status) {
|
|
7708
|
+
const token = typeof status === "string" ? status.trim().toLowerCase() : "";
|
|
7709
|
+
if (token === "done")
|
|
7710
|
+
return "completed";
|
|
7711
|
+
if (token === "canceled")
|
|
7712
|
+
return "cancelled";
|
|
7713
|
+
return TASK_STATUSES.has(token) ? token : "unknown";
|
|
7714
|
+
}
|
|
7715
|
+
function toTaskDependencyProjection(task) {
|
|
7716
|
+
const metadata = metadataOf(task);
|
|
7717
|
+
return {
|
|
7718
|
+
id: String(task.id),
|
|
7719
|
+
title: stringValue(task.title),
|
|
7720
|
+
status: normalizeTaskStatus(task.status),
|
|
7721
|
+
priority: numberOrNull(task.priority),
|
|
7722
|
+
metadata,
|
|
7723
|
+
externalId: stringValue(task.externalId),
|
|
7724
|
+
sourceIssueId: stringValue(task.sourceIssueId),
|
|
7725
|
+
dependencies: stringArray(task.dependencies),
|
|
7726
|
+
parentChildDeps: stringArray(task.parentChildDeps),
|
|
7727
|
+
createdAt: stringValue(task.createdAt) ?? "",
|
|
7728
|
+
updatedAt: stringValue(task.updatedAt) ?? "",
|
|
7729
|
+
role: stringValue(task.role),
|
|
7730
|
+
scope: stringArray(task.scope),
|
|
7731
|
+
validationKeys: stringArray(task.validationKeys),
|
|
7732
|
+
labels: stringArray(task.labels),
|
|
7733
|
+
assignees: task.assignees,
|
|
7734
|
+
assignedTo: task.assignedTo
|
|
7735
|
+
};
|
|
7736
|
+
}
|
|
7737
|
+
function toTaskSummary(task, defaults = {}) {
|
|
7738
|
+
const projection = toTaskDependencyProjection(task);
|
|
7739
|
+
const metadata = metadataOf(task);
|
|
7740
|
+
const createdAt = stringValue(task.createdAt) ?? "1970-01-01T00:00:00.000Z";
|
|
7741
|
+
const updatedAt = stringValue(task.updatedAt) ?? createdAt;
|
|
7742
|
+
return {
|
|
7743
|
+
id: projection.id,
|
|
7744
|
+
workspaceId: stringValue(task.workspaceId) ?? defaults.workspaceId ?? "workspace",
|
|
7745
|
+
graphId: stringValue(task.graphId) ?? defaults.graphId ?? null,
|
|
7746
|
+
externalId: projection.externalId,
|
|
7747
|
+
title: projection.title ?? projection.id,
|
|
7748
|
+
description: stringValue(task.description) ?? stringValue(task.body) ?? "",
|
|
7749
|
+
status: projection.status,
|
|
7750
|
+
priority: numberOrNull(task.priority),
|
|
7751
|
+
role: projection.role,
|
|
7752
|
+
scope: [...projection.scope ?? []],
|
|
7753
|
+
validationKeys: [...projection.validationKeys ?? []],
|
|
7754
|
+
...projection.sourceIssueId ? { sourceIssueId: projection.sourceIssueId } : {},
|
|
7755
|
+
dependencies: [...projection.dependencies ?? []],
|
|
7756
|
+
parentChildDeps: [...projection.parentChildDeps ?? []],
|
|
7757
|
+
metadata,
|
|
7758
|
+
createdAt,
|
|
7759
|
+
updatedAt
|
|
7760
|
+
};
|
|
7761
|
+
}
|
|
7762
|
+
// packages/contracts/src/github.ts
|
|
7763
|
+
var GITHUB_PROVIDER_CAPABILITY_ID = "github.provider";
|
|
7764
|
+
// packages/contracts/src/doctor.ts
|
|
7765
|
+
var DOCTOR_RUNNER_CAPABILITY_ID = "doctor.runner";
|
|
7766
|
+
function doctorLevelToStatus(level) {
|
|
7767
|
+
return level === "ok" ? "pass" : level;
|
|
7768
|
+
}
|
|
7769
|
+
function countDoctorFailures(checks) {
|
|
7770
|
+
return checks.filter((entry) => (entry.status ?? doctorLevelToStatus(entry.level ?? "warn")) === "fail").length;
|
|
7771
|
+
}
|
|
7456
7772
|
})
|