@on-par/factory-core 0.9.26 → 0.9.27-next.2

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 (87) hide show
  1. package/dist/config/index.d.ts +0 -1
  2. package/dist/config/index.d.ts.map +1 -1
  3. package/dist/config/index.js +1 -3
  4. package/dist/config/index.js.map +1 -1
  5. package/dist/config/run-section.d.ts +1 -1
  6. package/dist/config/run-section.js +1 -1
  7. package/dist/index.d.ts +6 -29
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +3 -17
  10. package/dist/index.js.map +1 -1
  11. package/package.json +5 -5
  12. package/dist/config/v2-models.d.ts +0 -75
  13. package/dist/config/v2-models.d.ts.map +0 -1
  14. package/dist/config/v2-models.js +0 -119
  15. package/dist/config/v2-models.js.map +0 -1
  16. package/dist/config/v2.d.ts +0 -252
  17. package/dist/config/v2.d.ts.map +0 -1
  18. package/dist/config/v2.js +0 -369
  19. package/dist/config/v2.js.map +0 -1
  20. package/dist/hosted/control-plane.d.ts +0 -40
  21. package/dist/hosted/control-plane.d.ts.map +0 -1
  22. package/dist/hosted/control-plane.js +0 -198
  23. package/dist/hosted/control-plane.js.map +0 -1
  24. package/dist/hosted/queue-client.d.ts +0 -51
  25. package/dist/hosted/queue-client.d.ts.map +0 -1
  26. package/dist/hosted/queue-client.js +0 -92
  27. package/dist/hosted/queue-client.js.map +0 -1
  28. package/dist/hosted/runner-client.d.ts +0 -78
  29. package/dist/hosted/runner-client.d.ts.map +0 -1
  30. package/dist/hosted/runner-client.js +0 -82
  31. package/dist/hosted/runner-client.js.map +0 -1
  32. package/dist/hosted/runner.d.ts +0 -74
  33. package/dist/hosted/runner.d.ts.map +0 -1
  34. package/dist/hosted/runner.js +0 -174
  35. package/dist/hosted/runner.js.map +0 -1
  36. package/dist/hosted/smoke.d.ts +0 -46
  37. package/dist/hosted/smoke.d.ts.map +0 -1
  38. package/dist/hosted/smoke.js +0 -56
  39. package/dist/hosted/smoke.js.map +0 -1
  40. package/dist/hosted/store-resolve.d.ts +0 -16
  41. package/dist/hosted/store-resolve.d.ts.map +0 -1
  42. package/dist/hosted/store-resolve.js +0 -13
  43. package/dist/hosted/store-resolve.js.map +0 -1
  44. package/dist/hosted/store-sqlite.d.ts +0 -10
  45. package/dist/hosted/store-sqlite.d.ts.map +0 -1
  46. package/dist/hosted/store-sqlite.js +0 -67
  47. package/dist/hosted/store-sqlite.js.map +0 -1
  48. package/dist/hosted/summary.d.ts +0 -26
  49. package/dist/hosted/summary.d.ts.map +0 -1
  50. package/dist/hosted/summary.js +0 -27
  51. package/dist/hosted/summary.js.map +0 -1
  52. package/dist/hosted/watchdog.d.ts +0 -38
  53. package/dist/hosted/watchdog.d.ts.map +0 -1
  54. package/dist/hosted/watchdog.js +0 -56
  55. package/dist/hosted/watchdog.js.map +0 -1
  56. package/dist/phases/board-queue-dispatch.d.ts +0 -21
  57. package/dist/phases/board-queue-dispatch.d.ts.map +0 -1
  58. package/dist/phases/board-queue-dispatch.js +0 -57
  59. package/dist/phases/board-queue-dispatch.js.map +0 -1
  60. package/dist/phases/board-queue-scheduler.d.ts +0 -19
  61. package/dist/phases/board-queue-scheduler.d.ts.map +0 -1
  62. package/dist/phases/board-queue-scheduler.js +0 -56
  63. package/dist/phases/board-queue-scheduler.js.map +0 -1
  64. package/dist/projects/project-queue-poller.d.ts +0 -25
  65. package/dist/projects/project-queue-poller.d.ts.map +0 -1
  66. package/dist/projects/project-queue-poller.js +0 -92
  67. package/dist/projects/project-queue-poller.js.map +0 -1
  68. package/dist/projects/project-queue-reader.d.ts +0 -40
  69. package/dist/projects/project-queue-reader.d.ts.map +0 -1
  70. package/dist/projects/project-queue-reader.js +0 -185
  71. package/dist/projects/project-queue-reader.js.map +0 -1
  72. package/dist/projects/project-status-writer.d.ts +0 -12
  73. package/dist/projects/project-status-writer.d.ts.map +0 -1
  74. package/dist/projects/project-status-writer.js +0 -42
  75. package/dist/projects/project-status-writer.js.map +0 -1
  76. package/dist/queue/project-board-poller.d.ts +0 -15
  77. package/dist/queue/project-board-poller.d.ts.map +0 -1
  78. package/dist/queue/project-board-poller.js +0 -3
  79. package/dist/queue/project-board-poller.js.map +0 -1
  80. package/dist/queue/project-board-status-writer.d.ts +0 -42
  81. package/dist/queue/project-board-status-writer.d.ts.map +0 -1
  82. package/dist/queue/project-board-status-writer.js +0 -83
  83. package/dist/queue/project-board-status-writer.js.map +0 -1
  84. package/dist/queue/reprioritization-audit.d.ts +0 -19
  85. package/dist/queue/reprioritization-audit.d.ts.map +0 -1
  86. package/dist/queue/reprioritization-audit.js +0 -77
  87. package/dist/queue/reprioritization-audit.js.map +0 -1
@@ -1,74 +0,0 @@
1
- import type { HostedJobOutcome, HostedJobResult } from '@on-par/contracts';
2
- import type { ContainerCleanupProof, ContainerEngine } from './container.js';
3
- import { type GitHubAuthorityBrokerOptions } from './github-authority.js';
4
- import type { HostedJobStore, StoredRunner } from './store.js';
5
- export interface FakeRunnerConfig {
6
- runnerId: string;
7
- capabilities: string[];
8
- leaseId: string;
9
- ttlMs: number;
10
- heartbeatIntervalMs: number;
11
- /** Number of heartbeats to emit during fake no-op work (default 1). */
12
- heartbeats?: number;
13
- /** Force a failure result instead of completion (default false). */
14
- fail?: boolean;
15
- }
16
- export interface FakeRunnerOutcome {
17
- runner: StoredRunner;
18
- leased: boolean;
19
- jobId?: string;
20
- result?: HostedJobResult;
21
- trace: string;
22
- }
23
- export declare function runFakeRunner(store: HostedJobStore, config: FakeRunnerConfig): FakeRunnerOutcome;
24
- export interface DockerRunnerConfig {
25
- runnerId: string;
26
- capabilities: string[];
27
- leaseId: string;
28
- ttlMs: number;
29
- heartbeatIntervalMs: number;
30
- image: string;
31
- command: string[];
32
- /** default '/workspace' */
33
- mountPath?: string;
34
- timeoutMs: number;
35
- /** When set, brokers a per-job GitHub credential (#901) gated by FACTORY_HOSTED_EXEC. */
36
- authority?: GitHubAuthorityBrokerOptions;
37
- /** Injectable for tests; defaults to process.env. */
38
- env?: NodeJS.ProcessEnv;
39
- }
40
- export interface DockerRunnerOutcome {
41
- runner: StoredRunner;
42
- leased: boolean;
43
- jobId?: string;
44
- /** Number of running-state heartbeats posted to the control plane. */
45
- heartbeats: number;
46
- /** True when the store accepted the terminal complete/fail update. */
47
- terminalReported: boolean;
48
- outcome?: HostedJobOutcome;
49
- result?: HostedJobResult;
50
- cleanup?: ContainerCleanupProof;
51
- cleanupError?: string;
52
- finalizeRejected?: string;
53
- /** False when the job was never leased, or the workspace clone failed before the container ran. */
54
- ranContainer: boolean;
55
- containerName?: string;
56
- /** Docker process exit code. */
57
- exitCode?: number;
58
- /** Bounded tail of combined stdout+stderr, secret-redacted. */
59
- logsTail?: string;
60
- timedOut?: boolean;
61
- /** Redacted clone failure reason, when the workspace could not be prepared. */
62
- cloneError?: string;
63
- workspaceHostPath?: string;
64
- workspaceCommit?: string;
65
- trace: string;
66
- }
67
- /** Runs a leased job through the existing Docker ContainerEngine path (#899)
68
- * while posting periodic running-state heartbeats for the control plane to
69
- * observe. Reports the terminal result, records cleanup proof, and returns the
70
- * terminal outcome. No clock of its own: heartbeat cadence comes from a real
71
- * interval timer, and the container run itself comes from the injected engine,
72
- * so tests drive both deterministically (fake timers + a fake engine). */
73
- export declare function runDockerRunner(store: HostedJobStore, engine: ContainerEngine, config: DockerRunnerConfig): Promise<DockerRunnerOutcome>;
74
- //# sourceMappingURL=runner.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/hosted/runner.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAE3E,OAAO,KAAK,EAAE,qBAAqB,EAAE,eAAe,EAAsB,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAGL,KAAK,4BAA4B,EAClC,MAAM,uBAAuB,CAAC;AAC/B,OAAO,KAAK,EAAE,cAAc,EAAmB,YAAY,EAAE,MAAM,YAAY,CAAC;AAMhF,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,uEAAuE;IACvE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,oEAAoE;IACpE,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,MAAM,WAAW,iBAAiB;IAChC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,gBAAgB,GAAG,iBAAiB,CA0ChG;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,mBAAmB,EAAE,MAAM,CAAC;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,yFAAyF;IACzF,SAAS,CAAC,EAAE,4BAA4B,CAAC;IACzC,qDAAqD;IACrD,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,YAAY,CAAC;IACrB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,gBAAgB,EAAE,OAAO,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;IAC3B,MAAM,CAAC,EAAE,eAAe,CAAC;IACzB,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,mGAAmG;IACnG,YAAY,EAAE,OAAO,CAAC;IACtB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,gCAAgC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,+EAA+E;IAC/E,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;CACf;AAED;;;;;0EAK0E;AAC1E,wBAAsB,eAAe,CACnC,KAAK,EAAE,cAAc,EACrB,MAAM,EAAE,eAAe,EACvB,MAAM,EAAE,kBAAkB,GACzB,OAAO,CAAC,mBAAmB,CAAC,CA4I9B"}
@@ -1,174 +0,0 @@
1
- import { redactGitHubCredential, resolveHostedAuthority, } from './github-authority.js';
2
- /** Bound on the retained log tail — enough for diagnosis without unbounded growth. */
3
- const LOG_TAIL_LIMIT = 2000;
4
- const logTail = (logs) => logs.slice(-LOG_TAIL_LIMIT);
5
- export function runFakeRunner(store, config) {
6
- store.registerRunner({ runnerId: config.runnerId, capabilities: config.capabilities });
7
- const poll = store.pollForLease({
8
- runnerId: config.runnerId,
9
- capabilities: config.capabilities,
10
- leaseId: config.leaseId,
11
- ttlMs: config.ttlMs,
12
- heartbeatIntervalMs: config.heartbeatIntervalMs,
13
- });
14
- if (!poll.ok) {
15
- const runner = store.getRunner(config.runnerId);
16
- if (!runner) {
17
- throw new Error(`hosted runner disappeared after registration: ${config.runnerId}`);
18
- }
19
- return { runner, leased: false, trace: 'no compatible job to lease' };
20
- }
21
- const jobId = poll.job.request.jobId;
22
- const heartbeats = config.heartbeats ?? 1;
23
- for (let i = 0; i < heartbeats; i += 1) {
24
- store.heartbeat(jobId, config.leaseId);
25
- }
26
- const finalized = config.fail
27
- ? store.fail(jobId, config.leaseId, 'fake runner reported failure')
28
- : store.complete(jobId, config.leaseId, 'fake runner completed no-op work');
29
- const result = finalized.ok ? (finalized.job.result ?? undefined) : undefined;
30
- const runner = store.getRunner(config.runnerId);
31
- if (!runner) {
32
- throw new Error(`hosted runner disappeared after registration: ${config.runnerId}`);
33
- }
34
- return {
35
- runner,
36
- leased: true,
37
- jobId,
38
- result,
39
- trace: `registered -> leased ${jobId} -> ${heartbeats} heartbeats -> ${config.fail ? 'failed' : 'completed'}`,
40
- };
41
- }
42
- /** Runs a leased job through the existing Docker ContainerEngine path (#899)
43
- * while posting periodic running-state heartbeats for the control plane to
44
- * observe. Reports the terminal result, records cleanup proof, and returns the
45
- * terminal outcome. No clock of its own: heartbeat cadence comes from a real
46
- * interval timer, and the container run itself comes from the injected engine,
47
- * so tests drive both deterministically (fake timers + a fake engine). */
48
- export async function runDockerRunner(store, engine, config) {
49
- store.registerRunner({ runnerId: config.runnerId, capabilities: config.capabilities });
50
- const poll = store.pollForLease({
51
- runnerId: config.runnerId,
52
- capabilities: config.capabilities,
53
- leaseId: config.leaseId,
54
- ttlMs: config.ttlMs,
55
- heartbeatIntervalMs: config.heartbeatIntervalMs,
56
- });
57
- const getRunnerOrThrow = () => {
58
- const runner = store.getRunner(config.runnerId);
59
- if (!runner) {
60
- throw new Error(`hosted runner disappeared after registration: ${config.runnerId}`);
61
- }
62
- return runner;
63
- };
64
- if (!poll.ok) {
65
- return {
66
- runner: getRunnerOrThrow(),
67
- leased: false,
68
- heartbeats: 0,
69
- terminalReported: false,
70
- ranContainer: false,
71
- trace: 'no compatible job to lease',
72
- };
73
- }
74
- const jobId = poll.job.request.jobId;
75
- const credential = config.authority
76
- ? await resolveHostedAuthority(config.env ?? process.env, poll.job, config.authority)
77
- : null;
78
- const redact = (text) => (credential ? redactGitHubCredential(text, credential) : text);
79
- const workspace = await engine.prepareWorkspace(jobId, poll.job.request.taskPayload, poll.job.request.repoSlug, credential ?? undefined);
80
- let heartbeats = 0;
81
- const beat = () => {
82
- store.heartbeat(jobId, config.leaseId);
83
- heartbeats += 1;
84
- };
85
- beat();
86
- let run;
87
- let cleanup;
88
- let cleanupError;
89
- let finalizeResult;
90
- try {
91
- if (!workspace.clone.ok) {
92
- finalizeResult = store.fail(jobId, config.leaseId, redact(`repo clone failed: ${workspace.clone.error ?? 'unknown error'}`), { failurePhase: 'clone' });
93
- }
94
- else {
95
- const timer = setInterval(beat, config.heartbeatIntervalMs);
96
- try {
97
- run = await engine.run({
98
- jobId,
99
- image: config.image,
100
- command: config.command,
101
- workspaceHostPath: workspace.hostPath,
102
- mountPath: config.mountPath ?? '/workspace',
103
- timeoutMs: config.timeoutMs,
104
- });
105
- }
106
- finally {
107
- clearInterval(timer);
108
- }
109
- const redactedLogs = redact(logTail(run.logs));
110
- const success = run.exitCode === 0 && !run.timedOut;
111
- if (success) {
112
- finalizeResult = store.complete(jobId, config.leaseId, `container exited 0 (${run.containerName})`, {
113
- exitCode: run.exitCode,
114
- logsTail: redactedLogs,
115
- artifacts: run.artifacts,
116
- });
117
- }
118
- else {
119
- const why = run.timedOut ? `timed out after ${config.timeoutMs}ms` : `exit ${run.exitCode}`;
120
- finalizeResult = store.fail(jobId, config.leaseId, redact(`container ${why}`), {
121
- failurePhase: 'run',
122
- exitCode: run.exitCode,
123
- logsTail: redactedLogs,
124
- });
125
- }
126
- }
127
- }
128
- catch (err) {
129
- const message = err instanceof Error ? err.message : String(err);
130
- finalizeResult = store.fail(jobId, config.leaseId, redact(`container run error: ${message}`), {
131
- failurePhase: 'run',
132
- });
133
- }
134
- finally {
135
- try {
136
- cleanup = await engine.remove(jobId, workspace.hostPath);
137
- store.recordCleanup(jobId, redact(cleanup.evidence));
138
- }
139
- catch (err) {
140
- cleanupError = redact(err instanceof Error ? err.message : String(err));
141
- }
142
- }
143
- const finalJob = store.get(jobId);
144
- const outcome = finalJob?.result?.outcome;
145
- const finalizeRejected = finalizeResult && !finalizeResult.ok ? finalizeResult.reason : undefined;
146
- const runNote = run
147
- ? `container ${run.containerName} exit ${run.exitCode}${run.timedOut ? ' (timed out)' : ''}`
148
- : workspace.clone.ok
149
- ? 'run error'
150
- : 'clone failed';
151
- const cleanupNote = cleanupError ? `cleanup failed: ${cleanupError}` : 'cleaned';
152
- return {
153
- runner: getRunnerOrThrow(),
154
- leased: true,
155
- jobId,
156
- heartbeats,
157
- terminalReported: finalizeResult?.ok ?? false,
158
- outcome,
159
- result: finalJob?.result ?? undefined,
160
- cleanup,
161
- cleanupError,
162
- finalizeRejected,
163
- ranContainer: run !== undefined,
164
- containerName: run?.containerName,
165
- exitCode: run?.exitCode,
166
- logsTail: run ? redact(logTail(run.logs)) : undefined,
167
- timedOut: run?.timedOut,
168
- cloneError: !workspace.clone.ok ? redact(workspace.clone.error ?? 'unknown clone error') : undefined,
169
- workspaceHostPath: workspace.hostPath,
170
- workspaceCommit: workspace.clone.commit,
171
- trace: redact(`registered -> leased ${jobId} -> ${heartbeats} heartbeats -> ${runNote} -> ${outcome ?? 'unknown'}${finalizeRejected ? ` (finalize rejected: ${finalizeRejected})` : ''} -> ${cleanupNote}`),
172
- };
173
- }
174
- //# sourceMappingURL=runner.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"runner.js","sourceRoot":"","sources":["../../src/hosted/runner.ts"],"names":[],"mappings":"AAWA,OAAO,EACL,sBAAsB,EACtB,sBAAsB,GAEvB,MAAM,uBAAuB,CAAC;AAG/B,sFAAsF;AACtF,MAAM,cAAc,GAAG,IAAI,CAAC;AAC5B,MAAM,OAAO,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,cAAc,CAAC,CAAC;AAsBtE,MAAM,UAAU,aAAa,CAAC,KAAqB,EAAE,MAAwB;IAC3E,KAAK,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAEvF,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;KAChD,CAAC,CAAC;IAEH,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,4BAA4B,EAAE,CAAC;IACxE,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,UAAU,IAAI,CAAC,CAAC;IAC1C,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI;QAC3B,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,8BAA8B,CAAC;QACnE,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,kCAAkC,CAAC,CAAC;IAE9E,MAAM,MAAM,GAAG,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC9E,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;IACtF,CAAC;IAED,OAAO;QACL,MAAM;QACN,MAAM,EAAE,IAAI;QACZ,KAAK;QACL,MAAM;QACN,KAAK,EAAE,wBAAwB,KAAK,OAAO,UAAU,kBAAkB,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,WAAW,EAAE;KAC9G,CAAC;AACJ,CAAC;AA+CD;;;;;0EAK0E;AAC1E,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAqB,EACrB,MAAuB,EACvB,MAA0B;IAE1B,KAAK,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IAEvF,MAAM,IAAI,GAAG,KAAK,CAAC,YAAY,CAAC;QAC9B,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,YAAY,EAAE,MAAM,CAAC,YAAY;QACjC,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,mBAAmB,EAAE,MAAM,CAAC,mBAAmB;KAChD,CAAC,CAAC;IAEH,MAAM,gBAAgB,GAAG,GAAiB,EAAE;QAC1C,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,iDAAiD,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC,CAAC;IAEF,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QACb,OAAO;YACL,MAAM,EAAE,gBAAgB,EAAE;YAC1B,MAAM,EAAE,KAAK;YACb,UAAU,EAAE,CAAC;YACb,gBAAgB,EAAE,KAAK;YACvB,YAAY,EAAE,KAAK;YACnB,KAAK,EAAE,4BAA4B;SACpC,CAAC;IACJ,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC;IACrC,MAAM,UAAU,GAAG,MAAM,CAAC,SAAS;QACjC,CAAC,CAAC,MAAM,sBAAsB,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC,SAAS,CAAC;QACrF,CAAC,CAAC,IAAI,CAAC;IACT,MAAM,MAAM,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,sBAAsB,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;IAExG,MAAM,SAAS,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAC7C,KAAK,EACL,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,WAAW,EAC5B,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,QAAQ,EACzB,UAAU,IAAI,SAAS,CACxB,CAAC;IAEF,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,MAAM,IAAI,GAAG,GAAS,EAAE;QACtB,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC;QACvC,UAAU,IAAI,CAAC,CAAC;IAClB,CAAC,CAAC;IACF,IAAI,EAAE,CAAC;IAEP,IAAI,GAAmC,CAAC;IACxC,IAAI,OAA0C,CAAC;IAC/C,IAAI,YAAgC,CAAC;IACrC,IAAI,cAA2C,CAAC;IAChD,IAAI,CAAC;QACH,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;YACxB,cAAc,GAAG,KAAK,CAAC,IAAI,CACzB,KAAK,EACL,MAAM,CAAC,OAAO,EACd,MAAM,CAAC,sBAAsB,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,eAAe,EAAE,CAAC,EACxE,EAAE,YAAY,EAAE,OAAO,EAAE,CAC1B,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,MAAM,KAAK,GAAG,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;YAC5D,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC;oBACrB,KAAK;oBACL,KAAK,EAAE,MAAM,CAAC,KAAK;oBACnB,OAAO,EAAE,MAAM,CAAC,OAAO;oBACvB,iBAAiB,EAAE,SAAS,CAAC,QAAQ;oBACrC,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,YAAY;oBAC3C,SAAS,EAAE,MAAM,CAAC,SAAS;iBAC5B,CAAC,CAAC;YACL,CAAC;oBAAS,CAAC;gBACT,aAAa,CAAC,KAAK,CAAC,CAAC;YACvB,CAAC;YAED,MAAM,YAAY,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;YAC/C,MAAM,OAAO,GAAG,GAAG,CAAC,QAAQ,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC;YACpD,IAAI,OAAO,EAAE,CAAC;gBACZ,cAAc,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,uBAAuB,GAAG,CAAC,aAAa,GAAG,EAAE;oBAClG,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,QAAQ,EAAE,YAAY;oBACtB,SAAS,EAAE,GAAG,CAAC,SAAS;iBACzB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,MAAM,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,mBAAmB,MAAM,CAAC,SAAS,IAAI,CAAC,CAAC,CAAC,QAAQ,GAAG,CAAC,QAAQ,EAAE,CAAC;gBAC5F,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,aAAa,GAAG,EAAE,CAAC,EAAE;oBAC7E,YAAY,EAAE,KAAK;oBACnB,QAAQ,EAAE,GAAG,CAAC,QAAQ;oBACtB,QAAQ,EAAE,YAAY;iBACvB,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,MAAM,OAAO,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACjE,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,wBAAwB,OAAO,EAAE,CAAC,EAAE;YAC5F,YAAY,EAAE,KAAK;SACpB,CAAC,CAAC;IACL,CAAC;YAAS,CAAC;QACT,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,SAAS,CAAC,QAAQ,CAAC,CAAC;YACzD,KAAK,CAAC,aAAa,CAAC,KAAK,EAAE,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;QACvD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,GAAG,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC;IAC1C,MAAM,gBAAgB,GAAG,cAAc,IAAI,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC;IAClG,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,aAAa,GAAG,CAAC,aAAa,SAAS,GAAG,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,EAAE;QAC5F,CAAC,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE;YAClB,CAAC,CAAC,WAAW;YACb,CAAC,CAAC,cAAc,CAAC;IACrB,MAAM,WAAW,GAAG,YAAY,CAAC,CAAC,CAAC,mBAAmB,YAAY,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,OAAO;QACL,MAAM,EAAE,gBAAgB,EAAE;QAC1B,MAAM,EAAE,IAAI;QACZ,KAAK;QACL,UAAU;QACV,gBAAgB,EAAE,cAAc,EAAE,EAAE,IAAI,KAAK;QAC7C,OAAO;QACP,MAAM,EAAE,QAAQ,EAAE,MAAM,IAAI,SAAS;QACrC,OAAO;QACP,YAAY;QACZ,gBAAgB;QAChB,YAAY,EAAE,GAAG,KAAK,SAAS;QAC/B,aAAa,EAAE,GAAG,EAAE,aAAa;QACjC,QAAQ,EAAE,GAAG,EAAE,QAAQ;QACvB,QAAQ,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS;QACrD,QAAQ,EAAE,GAAG,EAAE,QAAQ;QACvB,UAAU,EAAE,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,KAAK,IAAI,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAS;QACpG,iBAAiB,EAAE,SAAS,CAAC,QAAQ;QACrC,eAAe,EAAE,SAAS,CAAC,KAAK,CAAC,MAAM;QACvC,KAAK,EAAE,MAAM,CACX,wBAAwB,KAAK,OAAO,UAAU,kBAAkB,OAAO,OAAO,OAAO,IAAI,SAAS,GAAG,gBAAgB,CAAC,CAAC,CAAC,wBAAwB,gBAAgB,GAAG,CAAC,CAAC,CAAC,EAAE,OAAO,WAAW,EAAE,CAC7L;KACF,CAAC;AACJ,CAAC"}
@@ -1,46 +0,0 @@
1
- import { type ContainerEngine, type ContainerJobOutcome } from './container.js';
2
- import { type HostedJobSummary } from './summary.js';
3
- import { type HostedClock } from './store.js';
4
- export interface HostedSmokeConfig {
5
- repoSlug: string;
6
- image: string;
7
- command: string[];
8
- now: HostedClock;
9
- /** default 'smoke-job-1' */
10
- jobId?: string;
11
- /** default 'smoke-runner-1' */
12
- runnerId?: string;
13
- /** default 'smoke-lease-1' */
14
- leaseId?: string;
15
- /** default ['git', 'node'] */
16
- capabilities?: string[];
17
- /** default 'repo:read' */
18
- requiredAuthority?: string;
19
- /** default 'hosted-exec smoke: run a minimal factory-safe command' */
20
- taskPayload?: string;
21
- /** default 300_000 */
22
- ttlMs?: number;
23
- /** default 30_000 */
24
- heartbeatIntervalMs?: number;
25
- /** default 120_000 */
26
- timeoutMs?: number;
27
- /** default '/workspace' */
28
- mountPath?: string;
29
- /** Injectable for tests; defaults to process.env for the gate. */
30
- env?: NodeJS.ProcessEnv;
31
- }
32
- export interface HostedSmokeOutcome {
33
- enabled: boolean;
34
- trace: string;
35
- jobId?: string;
36
- leaseId?: string;
37
- job?: ContainerJobOutcome;
38
- summary?: HostedJobSummary;
39
- }
40
- /** Runs the optimistic hosted-exec path against a real (injected) container
41
- * engine: creates a job, registers a runner, leases it, drives a disposable
42
- * container run against a fresh clone, then summarizes the terminal result.
43
- * Brokers no real credential — authority minting is out of scope for the
44
- * smoke run (#923). */
45
- export declare function runHostedSmoke(engine: ContainerEngine, config: HostedSmokeConfig): Promise<HostedSmokeOutcome>;
46
- //# sourceMappingURL=smoke.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke.d.ts","sourceRoot":"","sources":["../../src/hosted/smoke.ts"],"names":[],"mappings":"AASA,OAAO,EAAmB,KAAK,eAAe,EAAE,KAAK,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,cAAc,CAAC;AACzE,OAAO,EAAwB,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAEpE,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,EAAE,WAAW,CAAC;IACjB,4BAA4B;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,+BAA+B;IAC/B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,8BAA8B;IAC9B,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,0BAA0B;IAC1B,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,sEAAsE;IACtE,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,sBAAsB;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,qBAAqB;IACrB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,sBAAsB;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,2BAA2B;IAC3B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,kEAAkE;IAClE,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;CACzB;AAED,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,GAAG,CAAC,EAAE,mBAAmB,CAAC;IAC1B,OAAO,CAAC,EAAE,gBAAgB,CAAC;CAC5B;AAED;;;;uBAIuB;AACvB,wBAAsB,cAAc,CAAC,MAAM,EAAE,eAAe,EAAE,MAAM,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,CAAC,CA4CpH"}
@@ -1,56 +0,0 @@
1
- // src/hosted/smoke.ts — Local end-to-end hosted-exec smoke orchestrator (#923,
2
- // parent #895). Composes the already-proven building blocks (store, container
3
- // runner, summary) into one optimistic-path run: create -> lease -> disposable
4
- // Docker run against a fresh clone -> terminal result -> cleanup proof. Gated
5
- // by FACTORY_HOSTED_EXEC so the default-off local factory path is untouched.
6
- // No clock, fs, network, or Docker are touched directly — determinism comes
7
- // from the injected engine and the injected clock.
8
- import { hostedExecEnabled } from '@on-par/contracts';
9
- import { runContainerJob } from './container.js';
10
- import { summarizeHostedJob } from './summary.js';
11
- import { createHostedJobStore } from './store.js';
12
- /** Runs the optimistic hosted-exec path against a real (injected) container
13
- * engine: creates a job, registers a runner, leases it, drives a disposable
14
- * container run against a fresh clone, then summarizes the terminal result.
15
- * Brokers no real credential — authority minting is out of scope for the
16
- * smoke run (#923). */
17
- export async function runHostedSmoke(engine, config) {
18
- if (!hostedExecEnabled(config.env ?? process.env)) {
19
- return { enabled: false, trace: 'hosted execution disabled — local factory path unchanged' };
20
- }
21
- const jobId = config.jobId ?? 'smoke-job-1';
22
- const runnerId = config.runnerId ?? 'smoke-runner-1';
23
- const leaseId = config.leaseId ?? 'smoke-lease-1';
24
- const capabilities = config.capabilities ?? ['git', 'node'];
25
- const requiredAuthority = config.requiredAuthority ?? 'repo:read';
26
- const taskPayload = config.taskPayload ?? 'hosted-exec smoke: run a minimal factory-safe command';
27
- const ttlMs = config.ttlMs ?? 300_000;
28
- const heartbeatIntervalMs = config.heartbeatIntervalMs ?? 30_000;
29
- const timeoutMs = config.timeoutMs ?? 120_000;
30
- const mountPath = config.mountPath ?? '/workspace';
31
- const store = createHostedJobStore({ now: config.now });
32
- store.create({
33
- jobId,
34
- repoSlug: config.repoSlug,
35
- taskPayload,
36
- requiredCapabilities: capabilities,
37
- requiredAuthority,
38
- });
39
- store.registerRunner({ runnerId, capabilities });
40
- const lease = store.acquireLease({ jobId, runnerId, leaseId, ttlMs, heartbeatIntervalMs });
41
- if (!lease.ok) {
42
- return { enabled: true, jobId, trace: `lease failed: ${lease.reason}` };
43
- }
44
- const job = await runContainerJob(store, engine, {
45
- jobId,
46
- leaseId,
47
- image: config.image,
48
- command: config.command,
49
- mountPath,
50
- timeoutMs,
51
- });
52
- const finalJob = store.get(jobId);
53
- const summary = finalJob ? summarizeHostedJob(finalJob) : undefined;
54
- return { enabled: true, jobId, leaseId, job, summary, trace: `smoke: ${job.trace}` };
55
- }
56
- //# sourceMappingURL=smoke.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"smoke.js","sourceRoot":"","sources":["../../src/hosted/smoke.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,8EAA8E;AAC9E,+EAA+E;AAC/E,8EAA8E;AAC9E,6EAA6E;AAC7E,4EAA4E;AAC5E,mDAAmD;AACnD,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAEtD,OAAO,EAAE,eAAe,EAAkD,MAAM,gBAAgB,CAAC;AACjG,OAAO,EAAE,kBAAkB,EAAyB,MAAM,cAAc,CAAC;AACzE,OAAO,EAAE,oBAAoB,EAAoB,MAAM,YAAY,CAAC;AAwCpE;;;;uBAIuB;AACvB,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,MAAuB,EAAE,MAAyB;IACrF,IAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0DAA0D,EAAE,CAAC;IAC/F,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,aAAa,CAAC;IAC5C,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,gBAAgB,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,IAAI,eAAe,CAAC;IAClD,MAAM,YAAY,GAAG,MAAM,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;IAC5D,MAAM,iBAAiB,GAAG,MAAM,CAAC,iBAAiB,IAAI,WAAW,CAAC;IAClE,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,IAAI,uDAAuD,CAAC;IAClG,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,IAAI,OAAO,CAAC;IACtC,MAAM,mBAAmB,GAAG,MAAM,CAAC,mBAAmB,IAAI,MAAM,CAAC;IACjE,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,OAAO,CAAC;IAC9C,MAAM,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,YAAY,CAAC;IAEnD,MAAM,KAAK,GAAG,oBAAoB,CAAC,EAAE,GAAG,EAAE,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;IACxD,KAAK,CAAC,MAAM,CAAC;QACX,KAAK;QACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;QACzB,WAAW;QACX,oBAAoB,EAAE,YAAY;QAClC,iBAAiB;KAClB,CAAC,CAAC;IACH,KAAK,CAAC,cAAc,CAAC,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;IAEjD,MAAM,KAAK,GAAG,KAAK,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,KAAK,EAAE,mBAAmB,EAAE,CAAC,CAAC;IAC3F,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,CAAC;QACd,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE,MAAM,EAAE;QAC/C,KAAK;QACL,OAAO;QACP,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,SAAS;QACT,SAAS;KACV,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAClC,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,kBAAkB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,KAAK,EAAE,EAAE,CAAC;AACvF,CAAC"}
@@ -1,16 +0,0 @@
1
- import { type HostedJobStore, type HostedJobStoreOptions } from './store.js';
2
- import { type SqliteHostedJobStore } from './store-sqlite.js';
3
- export type HostedJobStoreBackend = 'memory' | 'sqlite';
4
- export interface ResolveHostedJobStoreOptions extends HostedJobStoreOptions {
5
- /** Storage backend to use. Defaults to 'memory'. */
6
- backend?: HostedJobStoreBackend;
7
- /** SQLite only. Defaults to ':memory:'. */
8
- databasePath?: string;
9
- }
10
- export interface ResolveSqliteHostedJobStoreOptions extends ResolveHostedJobStoreOptions {
11
- backend: 'sqlite';
12
- }
13
- /** Defaults to the in-memory store. */
14
- export declare function resolveHostedJobStore(options: ResolveSqliteHostedJobStoreOptions): SqliteHostedJobStore;
15
- export declare function resolveHostedJobStore(options: ResolveHostedJobStoreOptions): HostedJobStore;
16
- //# sourceMappingURL=store-resolve.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-resolve.d.ts","sourceRoot":"","sources":["../../src/hosted/store-resolve.ts"],"names":[],"mappings":"AAGA,OAAO,EAAwB,KAAK,cAAc,EAAE,KAAK,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnG,OAAO,EAA8B,KAAK,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAE1F,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AAExD,MAAM,WAAW,4BAA6B,SAAQ,qBAAqB;IACzE,oDAAoD;IACpD,OAAO,CAAC,EAAE,qBAAqB,CAAC;IAChC,2CAA2C;IAC3C,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kCAAmC,SAAQ,4BAA4B;IACtF,OAAO,EAAE,QAAQ,CAAC;CACnB;AAED,uCAAuC;AACvC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,kCAAkC,GAAG,oBAAoB,CAAC;AACzG,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,4BAA4B,GAAG,cAAc,CAAC"}
@@ -1,13 +0,0 @@
1
- // src/hosted/store-resolve.ts — config-driven adapter selection (#939).
2
- // Depends on both store.ts (memory) and store-sqlite.ts (sqlite) so neither
3
- // backend module needs to know about the other.
4
- import { createHostedJobStore } from './store.js';
5
- import { createSqliteHostedJobStore } from './store-sqlite.js';
6
- export function resolveHostedJobStore(options) {
7
- const { backend, databasePath, ...storeOptions } = options;
8
- if (backend === 'sqlite') {
9
- return createSqliteHostedJobStore({ ...storeOptions, databasePath: databasePath ?? ':memory:' });
10
- }
11
- return createHostedJobStore(storeOptions);
12
- }
13
- //# sourceMappingURL=store-resolve.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-resolve.js","sourceRoot":"","sources":["../../src/hosted/store-resolve.ts"],"names":[],"mappings":"AAAA,wEAAwE;AACxE,4EAA4E;AAC5E,gDAAgD;AAChD,OAAO,EAAE,oBAAoB,EAAmD,MAAM,YAAY,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAA6B,MAAM,mBAAmB,CAAC;AAkB1F,MAAM,UAAU,qBAAqB,CAAC,OAAqC;IACzE,MAAM,EAAE,OAAO,EAAE,YAAY,EAAE,GAAG,YAAY,EAAE,GAAG,OAAO,CAAC;IAC3D,IAAI,OAAO,KAAK,QAAQ,EAAE,CAAC;QACzB,OAAO,0BAA0B,CAAC,EAAE,GAAG,YAAY,EAAE,YAAY,EAAE,YAAY,IAAI,UAAU,EAAE,CAAC,CAAC;IACnG,CAAC;IACD,OAAO,oBAAoB,CAAC,YAAY,CAAC,CAAC;AAC5C,CAAC"}
@@ -1,10 +0,0 @@
1
- import { type HostedJobStore, type HostedJobStoreOptions } from './store.js';
2
- export interface SqliteHostedJobStoreOptions extends HostedJobStoreOptions {
3
- /** Path to the SQLite database file. Defaults to ':memory:'. */
4
- databasePath?: string;
5
- }
6
- export type SqliteHostedJobStore = HostedJobStore & {
7
- close(): void;
8
- };
9
- export declare function createSqliteHostedJobStore(options: SqliteHostedJobStoreOptions): SqliteHostedJobStore;
10
- //# sourceMappingURL=store-sqlite.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-sqlite.d.ts","sourceRoot":"","sources":["../../src/hosted/store-sqlite.ts"],"names":[],"mappings":"AAQA,OAAO,EAEL,KAAK,cAAc,EACnB,KAAK,qBAAqB,EAI3B,MAAM,YAAY,CAAC;AAEpB,MAAM,WAAW,2BAA4B,SAAQ,qBAAqB;IACxE,gEAAgE;IAChE,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,MAAM,oBAAoB,GAAG,cAAc,GAAG;IAAE,KAAK,IAAI,IAAI,CAAA;CAAE,CAAC;AAyDtE,wBAAgB,0BAA0B,CAAC,OAAO,EAAE,2BAA2B,GAAG,oBAAoB,CAUrG"}
@@ -1,67 +0,0 @@
1
- // src/hosted/store-sqlite.ts — node:sqlite-backed persistence for the hosted
2
- // job store (#939). Durability across process restarts, no new dependency:
3
- // node:sqlite (DatabaseSync) ships built into Node >=22.5 / core's >=24
4
- // engines requirement. All idempotency/lease invariant logic lives in
5
- // createHostedJobStoreOverPersistence (store.ts); this file only implements
6
- // the HostedStorePersistence port over two JSON-blob tables.
7
- import { DatabaseSync } from 'node:sqlite';
8
- import { createHostedJobStoreOverPersistence, } from './store.js';
9
- function bootstrapSchema(db) {
10
- const row = db.prepare('PRAGMA user_version').get();
11
- const version = row?.user_version ?? 0;
12
- if (version === 0) {
13
- db.exec(`
14
- CREATE TABLE IF NOT EXISTS jobs (id TEXT PRIMARY KEY, data TEXT NOT NULL);
15
- CREATE TABLE IF NOT EXISTS runners (id TEXT PRIMARY KEY, data TEXT NOT NULL);
16
- PRAGMA user_version = 1;
17
- `);
18
- }
19
- }
20
- function createSqlitePersistence(db) {
21
- const hasJobStmt = db.prepare('SELECT 1 FROM jobs WHERE id = ?');
22
- const getJobStmt = db.prepare('SELECT data FROM jobs WHERE id = ?');
23
- const putJobStmt = db.prepare('INSERT INTO jobs (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data');
24
- const allJobsStmt = db.prepare('SELECT data FROM jobs');
25
- const getRunnerStmt = db.prepare('SELECT data FROM runners WHERE id = ?');
26
- const putRunnerStmt = db.prepare('INSERT INTO runners (id, data) VALUES (?, ?) ON CONFLICT(id) DO UPDATE SET data = excluded.data');
27
- const allRunnersStmt = db.prepare('SELECT data FROM runners');
28
- return {
29
- hasJob(jobId) {
30
- return hasJobStmt.get(jobId) !== undefined;
31
- },
32
- getJob(jobId) {
33
- const row = getJobStmt.get(jobId);
34
- return row ? JSON.parse(row.data) : undefined;
35
- },
36
- putJob(job) {
37
- putJobStmt.run(job.request.jobId, JSON.stringify(job));
38
- },
39
- jobs() {
40
- const rows = allJobsStmt.all();
41
- return rows.map((row) => JSON.parse(row.data));
42
- },
43
- getRunner(runnerId) {
44
- const row = getRunnerStmt.get(runnerId);
45
- return row ? JSON.parse(row.data) : undefined;
46
- },
47
- putRunner(runner) {
48
- putRunnerStmt.run(runner.runnerId, JSON.stringify(runner));
49
- },
50
- runners() {
51
- const rows = allRunnersStmt.all();
52
- return rows.map((row) => JSON.parse(row.data));
53
- },
54
- };
55
- }
56
- export function createSqliteHostedJobStore(options) {
57
- const { databasePath, ...storeOptions } = options;
58
- const db = new DatabaseSync(databasePath ?? ':memory:');
59
- bootstrapSchema(db);
60
- const persistence = createSqlitePersistence(db);
61
- const store = createHostedJobStoreOverPersistence(persistence, storeOptions);
62
- return {
63
- ...store,
64
- close: () => db.close(),
65
- };
66
- }
67
- //# sourceMappingURL=store-sqlite.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"store-sqlite.js","sourceRoot":"","sources":["../../src/hosted/store-sqlite.ts"],"names":[],"mappings":"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"}
@@ -1,26 +0,0 @@
1
- import type { HostedArtifactRef, HostedJobEvent, HostedJobOutcome, HostedJobPhase, HostedJobStatus } from '@on-par/contracts';
2
- import type { StoredHostedJob } from './store.js';
3
- export interface HostedJobSummary {
4
- jobId: string;
5
- repoSlug: string;
6
- status: HostedJobStatus;
7
- /** runnerId currently holding the active lease, else null. */
8
- leasedBy: string | null;
9
- outcome: HostedJobOutcome | null;
10
- summary: string | null;
11
- exitCode: number | null;
12
- failurePhase: HostedJobPhase | null;
13
- eventCount: number;
14
- lastEvent: HostedJobEvent | null;
15
- artifacts: HostedArtifactRef[];
16
- artifactCount: number;
17
- logsTail: string | null;
18
- /** Message of the last 'cleaned' event, else null. */
19
- cleanupProof: string | null;
20
- updatedAt: string;
21
- }
22
- /** Maps a stored job to an operator-facing summary. Exposes no secrets: only
23
- * metadata already present on the retained record (result/events). */
24
- export declare function summarizeHostedJob(job: StoredHostedJob): HostedJobSummary;
25
- export declare function summarizeHostedJobs(jobs: StoredHostedJob[]): HostedJobSummary[];
26
- //# sourceMappingURL=summary.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary.d.ts","sourceRoot":"","sources":["../../src/hosted/summary.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EACV,iBAAiB,EACjB,cAAc,EACd,gBAAgB,EAChB,cAAc,EACd,eAAe,EAChB,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,eAAe,CAAC;IACxB,8DAA8D;IAC9D,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,OAAO,EAAE,gBAAgB,GAAG,IAAI,CAAC;IACjC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,YAAY,EAAE,cAAc,GAAG,IAAI,CAAC;IACpC,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,cAAc,GAAG,IAAI,CAAC;IACjC,SAAS,EAAE,iBAAiB,EAAE,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;IACxB,sDAAsD;IACtD,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;sEACsE;AACtE,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,eAAe,GAAG,gBAAgB,CAoBzE;AAED,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,eAAe,EAAE,GAAG,gBAAgB,EAAE,CAE/E"}
@@ -1,27 +0,0 @@
1
- /** Maps a stored job to an operator-facing summary. Exposes no secrets: only
2
- * metadata already present on the retained record (result/events). */
3
- export function summarizeHostedJob(job) {
4
- const artifacts = job.result?.artifacts ?? [];
5
- const cleaned = [...job.events].reverse().find((event) => event.type === 'cleaned');
6
- return {
7
- jobId: job.request.jobId,
8
- repoSlug: job.request.repoSlug,
9
- status: job.request.status,
10
- leasedBy: job.lease?.runnerId ?? null,
11
- outcome: job.result?.outcome ?? null,
12
- summary: job.result?.summary ?? null,
13
- exitCode: job.result?.exitCode ?? null,
14
- failurePhase: job.result?.failurePhase ?? null,
15
- eventCount: job.events.length,
16
- lastEvent: job.events.at(-1) ?? null,
17
- artifacts,
18
- artifactCount: artifacts.length,
19
- logsTail: job.result?.logsTail ?? null,
20
- cleanupProof: cleaned?.message ?? null,
21
- updatedAt: job.updatedAt,
22
- };
23
- }
24
- export function summarizeHostedJobs(jobs) {
25
- return jobs.map(summarizeHostedJob);
26
- }
27
- //# sourceMappingURL=summary.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/hosted/summary.ts"],"names":[],"mappings":"AAkCA;sEACsE;AACtE,MAAM,UAAU,kBAAkB,CAAC,GAAoB;IACrD,MAAM,SAAS,GAAG,GAAG,CAAC,MAAM,EAAE,SAAS,IAAI,EAAE,CAAC;IAC9C,MAAM,OAAO,GAAG,CAAC,GAAG,GAAG,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC;IACpF,OAAO;QACL,KAAK,EAAE,GAAG,CAAC,OAAO,CAAC,KAAK;QACxB,QAAQ,EAAE,GAAG,CAAC,OAAO,CAAC,QAAQ;QAC9B,MAAM,EAAE,GAAG,CAAC,OAAO,CAAC,MAAM;QAC1B,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,QAAQ,IAAI,IAAI;QACrC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;QACpC,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI;QACpC,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI;QACtC,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,IAAI,IAAI;QAC9C,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,MAAM;QAC7B,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI;QACpC,SAAS;QACT,aAAa,EAAE,SAAS,CAAC,MAAM;QAC/B,QAAQ,EAAE,GAAG,CAAC,MAAM,EAAE,QAAQ,IAAI,IAAI;QACtC,YAAY,EAAE,OAAO,EAAE,OAAO,IAAI,IAAI;QACtC,SAAS,EAAE,GAAG,CAAC,SAAS;KACzB,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,IAAuB;IACzD,OAAO,IAAI,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACtC,CAAC"}
@@ -1,38 +0,0 @@
1
- import type { HostedJobEvent, HostedJobStatus } from '@on-par/contracts';
2
- import type { HostedJobStore } from './store.js';
3
- export interface WatchdogPolicy {
4
- /** ms clock, injected for determinism. */
5
- now: () => number;
6
- /** A lease-holding runner is "dead" if its lastHeartbeatAt is older than this. */
7
- runnerHeartbeatTimeoutMs: number;
8
- /** Hard cap on a single lease's runtime. */
9
- maxJobRuntimeMs: number;
10
- /** Max 'leased' events before a dead-runner job escalates instead of relaunching. */
11
- maxRelaunches: number;
12
- /** Events included in an escalation's recentEvents tail. Default 5. */
13
- recentEventLimit?: number;
14
- }
15
- export interface WatchdogEscalation {
16
- jobId: string;
17
- status: HostedJobStatus;
18
- reason: string;
19
- recentEvents: HostedJobEvent[];
20
- manualIntervention: string;
21
- }
22
- export interface WatchdogReport {
23
- /** ISO-8601 of policy.now(). */
24
- sweptAt: string;
25
- /** jobIds returned to retryable via lease expiry. */
26
- reclaimedExpired: string[];
27
- /** jobIds force-reclaimed due to a dead runner. */
28
- relaunchedDeadRunners: string[];
29
- /** jobIds failed for exceeding maxJobRuntimeMs. */
30
- timedOut: string[];
31
- /** Stuck runs the watchdog cannot safely fix. */
32
- escalations: WatchdogEscalation[];
33
- }
34
- /** Runs one reliability sweep over every non-terminal job in the store,
35
- * classifying each into reclaimed-expired / relaunched-dead-runner /
36
- * timed-out / escalation. */
37
- export declare function runWatchdogSweep(store: HostedJobStore, policy: WatchdogPolicy): WatchdogReport;
38
- //# sourceMappingURL=watchdog.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"watchdog.d.ts","sourceRoot":"","sources":["../../src/hosted/watchdog.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAEzE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAEjD,MAAM,WAAW,cAAc;IAC7B,0CAA0C;IAC1C,GAAG,EAAE,MAAM,MAAM,CAAC;IAClB,kFAAkF;IAClF,wBAAwB,EAAE,MAAM,CAAC;IACjC,4CAA4C;IAC5C,eAAe,EAAE,MAAM,CAAC;IACxB,qFAAqF;IACrF,aAAa,EAAE,MAAM,CAAC;IACtB,uEAAuE;IACvE,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,kBAAkB;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,EAAE,cAAc,EAAE,CAAC;IAC/B,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,cAAc;IAC7B,gCAAgC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,qDAAqD;IACrD,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,mDAAmD;IACnD,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,mDAAmD;IACnD,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iDAAiD;IACjD,WAAW,EAAE,kBAAkB,EAAE,CAAC;CACnC;AAWD;;6BAE6B;AAC7B,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,EAAE,cAAc,GAAG,cAAc,CAgD9F"}