@h-rig/run-plugin 0.0.6-alpha.186

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 (70) hide show
  1. package/README.md +1 -0
  2. package/dist/src/plugin.d.ts +4 -0
  3. package/dist/src/plugin.js +4319 -0
  4. package/dist/src/read-model/inspect-command.d.ts +19 -0
  5. package/dist/src/read-model/inspect-command.js +341 -0
  6. package/dist/src/read-model/plugin.d.ts +4 -0
  7. package/dist/src/read-model/plugin.js +2550 -0
  8. package/dist/src/read-model/read-model-backend/diagnostics.d.ts +9 -0
  9. package/dist/src/read-model/read-model-backend/diagnostics.js +51 -0
  10. package/dist/src/read-model/read-model-backend/guard.d.ts +4 -0
  11. package/dist/src/read-model/read-model-backend/guard.js +25 -0
  12. package/dist/src/read-model/read-model-backend/inbox.d.ts +23 -0
  13. package/dist/src/read-model/read-model-backend/inbox.js +669 -0
  14. package/dist/src/read-model/read-model-backend/index.d.ts +8 -0
  15. package/dist/src/read-model/read-model-backend/index.js +1163 -0
  16. package/dist/src/read-model/read-model-backend/inspect.d.ts +26 -0
  17. package/dist/src/read-model/read-model-backend/inspect.js +770 -0
  18. package/dist/src/read-model/read-model-backend/projection.d.ts +39 -0
  19. package/dist/src/read-model/read-model-backend/projection.js +669 -0
  20. package/dist/src/read-model/read-model-backend/run-status.d.ts +27 -0
  21. package/dist/src/read-model/read-model-backend/run-status.js +237 -0
  22. package/dist/src/read-model/read-model-backend/stats.d.ts +12 -0
  23. package/dist/src/read-model/read-model-backend/stats.js +800 -0
  24. package/dist/src/read-model/read-model-service.d.ts +2 -0
  25. package/dist/src/read-model/read-model-service.js +1725 -0
  26. package/dist/src/read-model/reconcile.d.ts +23 -0
  27. package/dist/src/read-model/reconcile.js +306 -0
  28. package/dist/src/read-model/run-format.d.ts +23 -0
  29. package/dist/src/read-model/run-format.js +202 -0
  30. package/dist/src/read-model/runs-screen.d.ts +14 -0
  31. package/dist/src/read-model/runs-screen.js +217 -0
  32. package/dist/src/read-model/session-journal.d.ts +26 -0
  33. package/dist/src/read-model/session-journal.js +355 -0
  34. package/dist/src/read-model/stats-command.d.ts +16 -0
  35. package/dist/src/read-model/stats-command.js +88 -0
  36. package/dist/src/read-model/stats-format.d.ts +1 -0
  37. package/dist/src/read-model/stats-format.js +8 -0
  38. package/dist/src/worker/autohost.d.ts +11 -0
  39. package/dist/src/worker/autohost.js +858 -0
  40. package/dist/src/worker/constants.d.ts +3 -0
  41. package/dist/src/worker/constants.js +10 -0
  42. package/dist/src/worker/extension.d.ts +14 -0
  43. package/dist/src/worker/extension.js +881 -0
  44. package/dist/src/worker/host.d.ts +1 -0
  45. package/dist/src/worker/host.js +1 -0
  46. package/dist/src/worker/inbox-command.d.ts +23 -0
  47. package/dist/src/worker/inbox-command.js +163 -0
  48. package/dist/src/worker/index.d.ts +2 -0
  49. package/dist/src/worker/index.js +1767 -0
  50. package/dist/src/worker/local-run-changes.d.ts +3 -0
  51. package/dist/src/worker/local-run-changes.js +65 -0
  52. package/dist/src/worker/notifications.d.ts +1 -0
  53. package/dist/src/worker/notifications.js +27 -0
  54. package/dist/src/worker/notify-cap.d.ts +11 -0
  55. package/dist/src/worker/notify-cap.js +13 -0
  56. package/dist/src/worker/panel-plugin.d.ts +11 -0
  57. package/dist/src/worker/panel-plugin.js +37 -0
  58. package/dist/src/worker/plugin.d.ts +3 -0
  59. package/dist/src/worker/plugin.js +1761 -0
  60. package/dist/src/worker/run-control-service.d.ts +2 -0
  61. package/dist/src/worker/run-control-service.js +210 -0
  62. package/dist/src/worker/session-journal-writer.d.ts +4 -0
  63. package/dist/src/worker/session-journal-writer.js +184 -0
  64. package/dist/src/worker/stall.d.ts +21 -0
  65. package/dist/src/worker/stall.js +55 -0
  66. package/dist/src/worker/utils.d.ts +21 -0
  67. package/dist/src/worker/utils.js +29 -0
  68. package/dist/src/worker/workflow-journal-writer.d.ts +7 -0
  69. package/dist/src/worker/workflow-journal-writer.js +76 -0
  70. package/package.json +47 -0
@@ -0,0 +1,237 @@
1
+ // @bun
2
+ // packages/run-plugin/src/read-model/read-model-backend/run-status.ts
3
+ var OPERATOR_INACTIVE_RUN_STATUSES = new Set([
4
+ "completed",
5
+ "complete",
6
+ "done",
7
+ "success",
8
+ "succeeded",
9
+ "passed",
10
+ "failed",
11
+ "failure",
12
+ "error",
13
+ "errored",
14
+ "stopped",
15
+ "cancelled",
16
+ "canceled",
17
+ "aborted",
18
+ "abort",
19
+ "merged",
20
+ "closed",
21
+ "skipped",
22
+ "needs-attention",
23
+ "needs_attention"
24
+ ]);
25
+ var TERMINAL_RUN_STATUSES = ["completed", "failed", "stopped"];
26
+ var RUNTIME_ACTIVE_STATUSES = new Set([
27
+ "created",
28
+ "preparing",
29
+ "running",
30
+ "validating",
31
+ "reviewing",
32
+ "closing-out"
33
+ ]);
34
+ var ACTIVE_RUN_STATUSES = [
35
+ "created",
36
+ "queued",
37
+ "preparing",
38
+ "running",
39
+ "waiting-approval",
40
+ "waiting-user-input",
41
+ "paused",
42
+ "validating",
43
+ "reviewing",
44
+ "closing-out",
45
+ "needs-attention"
46
+ ];
47
+ var KNOWN_RUN_STATUS = Object.fromEntries([...ACTIVE_RUN_STATUSES, ...TERMINAL_RUN_STATUSES].map((status) => [status, true]));
48
+ function isTerminalRunStatus(status) {
49
+ return TERMINAL_RUN_STATUSES.includes(status);
50
+ }
51
+ function isActiveRunStatus(status) {
52
+ return !isTerminalRunStatus(status);
53
+ }
54
+ function isRuntimeActiveStatus(status) {
55
+ return RUNTIME_ACTIVE_STATUSES.has(normalizeRunStatusToken(status));
56
+ }
57
+ function normalizeRunStatusToken(status) {
58
+ return String(status ?? "").trim().toLowerCase().replace(/[\s_]+/g, "-");
59
+ }
60
+ function isOperatorActiveRunStatus(status) {
61
+ const normalized = normalizeRunStatusToken(status);
62
+ if (!normalized)
63
+ return false;
64
+ return !OPERATOR_INACTIVE_RUN_STATUSES.has(normalized);
65
+ }
66
+ function canonicalStatusToken(status) {
67
+ const normalized = normalizeRunStatusToken(status);
68
+ if (normalized === "waiting-input")
69
+ return "waiting-user-input";
70
+ return normalized;
71
+ }
72
+ function asRunStatus(status) {
73
+ return KNOWN_RUN_STATUS[status] ? status : null;
74
+ }
75
+ function statusColorRole(status) {
76
+ switch (canonicalStatusToken(status)) {
77
+ case "done":
78
+ case "completed":
79
+ case "ready":
80
+ case "healthy":
81
+ case "approved":
82
+ case "merged":
83
+ return "success";
84
+ case "needs-attention":
85
+ case "waiting-approval":
86
+ case "waiting-user-input":
87
+ case "blocked":
88
+ case "paused":
89
+ return "action-yellow";
90
+ case "running":
91
+ case "adopted":
92
+ case "preparing":
93
+ case "created":
94
+ case "queued":
95
+ case "starting":
96
+ case "pending":
97
+ case "in-progress":
98
+ case "active":
99
+ case "booting":
100
+ case "validating":
101
+ case "reviewing":
102
+ case "closing-out":
103
+ return "active-cyan";
104
+ case "failed":
105
+ case "error":
106
+ case "rejected":
107
+ return "failure";
108
+ case "stopped":
109
+ case "cancelled":
110
+ case "canceled":
111
+ case "stale":
112
+ return "muted";
113
+ default:
114
+ return "neutral";
115
+ }
116
+ }
117
+ function isNeedsAttention(run) {
118
+ return canonicalStatusToken(run.status) === "needs-attention" || run.pendingApprovals + run.pendingInputs > 0 || run.stallCount > 0;
119
+ }
120
+ function phaseForStatus(status, runStatus, needsAttention) {
121
+ if (runStatus && isTerminalRunStatus(runStatus))
122
+ return runStatus === "completed" || runStatus === "failed" || runStatus === "stopped" ? runStatus : "stopped";
123
+ if (needsAttention)
124
+ return "needs-attention";
125
+ switch (status) {
126
+ case "created":
127
+ case "queued":
128
+ case "preparing":
129
+ case "starting":
130
+ case "booting":
131
+ return "starting";
132
+ case "waiting-approval":
133
+ case "waiting-user-input":
134
+ return "waiting";
135
+ case "paused":
136
+ return "paused";
137
+ case "running":
138
+ case "validating":
139
+ case "reviewing":
140
+ case "closing-out":
141
+ return "active";
142
+ default:
143
+ return runStatus && isActiveRunStatus(runStatus) ? "active" : "unknown";
144
+ }
145
+ }
146
+ function classifyRun(run) {
147
+ const status = canonicalStatusToken(run.status) || (run.live && !run.stale ? "starting" : "unknown");
148
+ const runStatus = asRunStatus(status);
149
+ const isTerminal = runStatus ? isTerminalRunStatus(runStatus) : false;
150
+ const isNeedsAttentionValue = isNeedsAttention(run);
151
+ const phase = phaseForStatus(status, runStatus, isNeedsAttentionValue);
152
+ return {
153
+ status,
154
+ runStatus: runStatus ?? "needs-attention",
155
+ phase,
156
+ isActive: runStatus ? isActiveRunStatus(runStatus) : !isTerminal && status !== "unknown",
157
+ isTerminal,
158
+ isNeedsAttention: isNeedsAttentionValue,
159
+ offersRecovery: phase === "failed"
160
+ };
161
+ }
162
+ function runStatusText(run) {
163
+ return classifyRun(run).status;
164
+ }
165
+ function runStatusColorRole(run) {
166
+ const classification = classifyRun(run);
167
+ return classification.isNeedsAttention && !classification.isTerminal ? "action-yellow" : statusColorRole(classification.status);
168
+ }
169
+ function statusRank(run) {
170
+ const classification = classifyRun(run);
171
+ if (classification.isNeedsAttention)
172
+ return 0;
173
+ switch (classification.phase) {
174
+ case "needs-attention":
175
+ return 0;
176
+ case "active":
177
+ case "waiting":
178
+ case "paused":
179
+ return 1;
180
+ case "starting":
181
+ return 2;
182
+ case "completed":
183
+ return 3;
184
+ case "failed":
185
+ return 4;
186
+ case "stopped":
187
+ return 5;
188
+ case "unknown":
189
+ return 6;
190
+ }
191
+ }
192
+ function isSteerableStatus(status) {
193
+ switch (status) {
194
+ case "needs-attention":
195
+ case "waiting-approval":
196
+ case "waiting-user-input":
197
+ case "paused":
198
+ return false;
199
+ default: {
200
+ const runStatus = asRunStatus(status);
201
+ return runStatus ? isActiveRunStatus(runStatus) : false;
202
+ }
203
+ }
204
+ }
205
+ function canSteer(run) {
206
+ const classification = classifyRun(run);
207
+ if (classification.phase === "active" || classification.phase === "starting")
208
+ return true;
209
+ return classification.isNeedsAttention && isSteerableStatus(classification.status);
210
+ }
211
+ function canStop(run) {
212
+ const classification = classifyRun(run);
213
+ return classification.isActive && !classification.isTerminal;
214
+ }
215
+ function canPause(run) {
216
+ const phase = classifyRun(run).phase;
217
+ return phase === "active" || phase === "starting";
218
+ }
219
+ function canResume(run) {
220
+ return classifyRun(run).phase === "paused";
221
+ }
222
+ export {
223
+ statusRank,
224
+ statusColorRole,
225
+ runStatusText,
226
+ runStatusColorRole,
227
+ normalizeRunStatusToken,
228
+ isRuntimeActiveStatus,
229
+ isOperatorActiveRunStatus,
230
+ isNeedsAttention,
231
+ classifyRun,
232
+ canStop,
233
+ canSteer,
234
+ canResume,
235
+ canPause,
236
+ asRunStatus
237
+ };
@@ -0,0 +1,12 @@
1
+ import type { RigStatsData } from "@rig/contracts";
2
+ import type { RunRecord } from "./projection";
3
+ export { isNeedsAttention } from "./run-status";
4
+ type ListRunsFn = (projectRoot: string) => Promise<readonly RunRecord[]>;
5
+ export declare function parseTimestamp(value: string | null | undefined): number | null;
6
+ export declare function median(values: readonly number[]): number | null;
7
+ export declare function rate(part: number, total: number): number | null;
8
+ export declare function completedDuration(run: RunRecord): number | null;
9
+ export declare function computeStats(projectRootOrRuns: string | readonly RunRecord[], options?: {
10
+ since?: Date | null;
11
+ listRuns?: ListRunsFn;
12
+ }): Promise<RigStatsData>;