@sift-wiki/conductor 0.1.0 → 0.2.0-beta.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 (132) hide show
  1. package/README.md +28 -58
  2. package/dist/adapters/claudeAgent.js +1 -0
  3. package/dist/adapters/claudeAgent.js.map +1 -1
  4. package/dist/adapters/codexAgent.js +1 -0
  5. package/dist/adapters/codexAgent.js.map +1 -1
  6. package/dist/adapters/fakeAgent.js +1 -0
  7. package/dist/adapters/fakeAgent.js.map +1 -1
  8. package/dist/adapters/httpAgent.js +1 -0
  9. package/dist/adapters/httpAgent.js.map +1 -1
  10. package/dist/adapters/processAgent.js +4 -0
  11. package/dist/adapters/processAgent.js.map +1 -1
  12. package/dist/adapters/provider/runProvider.js +4 -0
  13. package/dist/adapters/provider/runProvider.js.map +1 -1
  14. package/dist/adapters/provider/store.js +3 -4
  15. package/dist/adapters/provider/store.js.map +1 -1
  16. package/dist/adapters/types.d.ts +9 -0
  17. package/dist/cli.d.ts +12 -0
  18. package/dist/cli.js +44 -3
  19. package/dist/cli.js.map +1 -1
  20. package/dist/conductorClient.d.ts +245 -17
  21. package/dist/conductorClient.js +147 -38
  22. package/dist/conductorClient.js.map +1 -1
  23. package/dist/config.js +4 -5
  24. package/dist/config.js.map +1 -1
  25. package/dist/daemon.d.ts +23 -6
  26. package/dist/daemon.js +173 -95
  27. package/dist/daemon.js.map +1 -1
  28. package/dist/desktop/app/contracts.d.ts +71 -0
  29. package/dist/desktop/app/contracts.js +19 -0
  30. package/dist/desktop/app/contracts.js.map +1 -0
  31. package/dist/desktop/app/controller.d.ts +58 -0
  32. package/dist/desktop/app/controller.js +161 -0
  33. package/dist/desktop/app/controller.js.map +1 -0
  34. package/dist/desktop/app/runtimeController.d.ts +29 -0
  35. package/dist/desktop/app/runtimeController.js +55 -0
  36. package/dist/desktop/app/runtimeController.js.map +1 -0
  37. package/dist/localApi/authorizedPairing.d.ts +12 -0
  38. package/dist/localApi/authorizedPairing.js +18 -0
  39. package/dist/localApi/authorizedPairing.js.map +1 -0
  40. package/dist/localApi/contracts.d.ts +264 -0
  41. package/dist/localApi/contracts.js +191 -0
  42. package/dist/localApi/contracts.js.map +1 -0
  43. package/dist/localApi/recovery.d.ts +66 -0
  44. package/dist/localApi/recovery.js +115 -0
  45. package/dist/localApi/recovery.js.map +1 -0
  46. package/dist/localApi/server.d.ts +20 -0
  47. package/dist/localApi/server.js +414 -0
  48. package/dist/localApi/server.js.map +1 -0
  49. package/dist/localApi/workConsole.d.ts +74 -0
  50. package/dist/localApi/workConsole.js +342 -0
  51. package/dist/localApi/workConsole.js.map +1 -0
  52. package/dist/localApi/workContracts.d.ts +213 -0
  53. package/dist/localApi/workContracts.js +130 -0
  54. package/dist/localApi/workContracts.js.map +1 -0
  55. package/dist/localApp/platform.d.ts +2 -0
  56. package/dist/localApp/platform.js +57 -0
  57. package/dist/localApp/platform.js.map +1 -0
  58. package/dist/localApp/service.d.ts +25 -0
  59. package/dist/localApp/service.js +126 -0
  60. package/dist/localApp/service.js.map +1 -0
  61. package/dist/protocol/fenced.d.ts +135 -0
  62. package/dist/protocol/fenced.js +142 -0
  63. package/dist/protocol/fenced.js.map +1 -0
  64. package/dist/redaction.js +2 -0
  65. package/dist/redaction.js.map +1 -1
  66. package/dist/runtime/atomicFile.d.ts +6 -0
  67. package/dist/runtime/atomicFile.js +78 -0
  68. package/dist/runtime/atomicFile.js.map +1 -0
  69. package/dist/runtime/daemonCapabilities.d.ts +7 -0
  70. package/dist/runtime/daemonCapabilities.js +24 -0
  71. package/dist/runtime/daemonCapabilities.js.map +1 -0
  72. package/dist/runtime/eventOutbox.d.ts +100 -0
  73. package/dist/runtime/eventOutbox.js +206 -0
  74. package/dist/runtime/eventOutbox.js.map +1 -0
  75. package/dist/runtime/executionJournal.d.ts +102 -0
  76. package/dist/runtime/executionJournal.js +209 -0
  77. package/dist/runtime/executionJournal.js.map +1 -0
  78. package/dist/runtime/executionSafety.d.ts +76 -0
  79. package/dist/runtime/executionSafety.js +207 -0
  80. package/dist/runtime/executionSafety.js.map +1 -0
  81. package/dist/runtime/fencedExecutionState.d.ts +43 -0
  82. package/dist/runtime/fencedExecutionState.js +158 -0
  83. package/dist/runtime/fencedExecutionState.js.map +1 -0
  84. package/dist/runtime/leaseManager.d.ts +38 -0
  85. package/dist/runtime/leaseManager.js +102 -0
  86. package/dist/runtime/leaseManager.js.map +1 -0
  87. package/dist/runtime/localLogSpool.d.ts +1 -0
  88. package/dist/runtime/localLogSpool.js +4 -0
  89. package/dist/runtime/localLogSpool.js.map +1 -1
  90. package/dist/runtime/localRunQueue.d.ts +1 -1
  91. package/dist/runtime/localRunQueue.js +8 -0
  92. package/dist/runtime/localRunQueue.js.map +1 -1
  93. package/dist/runtime/localSessionCache.d.ts +1 -1
  94. package/dist/runtime/localSessionCache.js.map +1 -1
  95. package/dist/runtime/process.d.ts +13 -1
  96. package/dist/runtime/process.js +39 -9
  97. package/dist/runtime/process.js.map +1 -1
  98. package/dist/runtime/recoveryCoordinator.d.ts +19 -0
  99. package/dist/runtime/recoveryCoordinator.js +183 -0
  100. package/dist/runtime/recoveryCoordinator.js.map +1 -0
  101. package/dist/runtime/runtimeLock.d.ts +33 -0
  102. package/dist/runtime/runtimeLock.js +140 -0
  103. package/dist/runtime/runtimeLock.js.map +1 -0
  104. package/dist/runtime/runtimeService.d.ts +6 -1
  105. package/dist/runtime/runtimeService.js +54 -20
  106. package/dist/runtime/runtimeService.js.map +1 -1
  107. package/dist/runtime/taskExecution.d.ts +2 -0
  108. package/dist/runtime/taskExecution.js +18 -12
  109. package/dist/runtime/taskExecution.js.map +1 -1
  110. package/dist/types.d.ts +28 -13
  111. package/dist/userAuth/service.d.ts +26 -0
  112. package/dist/userAuth/service.js +170 -0
  113. package/dist/userAuth/service.js.map +1 -0
  114. package/dist/userAuth/store.d.ts +42 -0
  115. package/dist/userAuth/store.js +160 -0
  116. package/dist/userAuth/store.js.map +1 -0
  117. package/dist/userAuth/types.d.ts +63 -0
  118. package/dist/userAuth/types.js +29 -0
  119. package/dist/userAuth/types.js.map +1 -0
  120. package/dist/version.d.ts +1 -1
  121. package/dist/version.js +1 -1
  122. package/dist/version.js.map +1 -1
  123. package/dist/workTypes.d.ts +162 -31
  124. package/dist/workTypes.js +31 -0
  125. package/dist/workTypes.js.map +1 -1
  126. package/dist-web/assets/index-CWAdDb9V.js +72 -0
  127. package/dist-web/assets/index-CWfnzdLn.css +1 -0
  128. package/dist-web/index.html +15 -0
  129. package/docs/provider-setup.md +81 -0
  130. package/docs/quickstart.md +62 -0
  131. package/docs/troubleshooting.md +63 -0
  132. package/package.json +13 -3
@@ -0,0 +1,191 @@
1
+ import { z } from "zod";
2
+ import { CONDUCTOR_VERSION, PROTOCOL_VERSION } from "../version.js";
3
+ import { userAuthorizationStatusSchema } from "../userAuth/types.js";
4
+ import { localRecoveryActionSchema, localRecoveryProjectionSchema, } from "./recovery.js";
5
+ export const localPairingStatusSchema = z.discriminatedUnion("paired", [
6
+ z.object({ paired: z.literal(false) }).strict(),
7
+ z.object({
8
+ paired: z.literal(true),
9
+ apiBaseUrl: z.url(),
10
+ conductorId: z.string().min(1).optional(),
11
+ displayName: z.string().min(1),
12
+ protocolVersion: z.string().min(1),
13
+ }).strict(),
14
+ ]);
15
+ export const localHealthSchema = z.object({
16
+ ok: z.literal(true),
17
+ version: z.string().min(1),
18
+ protocolVersion: z.string().min(1),
19
+ }).strict();
20
+ export const runtimeServiceStatusSchema = z.object({
21
+ state: z.enum(["stopped", "starting", "running", "stopping", "failed"]),
22
+ startedAt: z.string().optional(),
23
+ stoppedAt: z.string().optional(),
24
+ lastResult: z.discriminatedUnion("status", [
25
+ z.object({ status: z.literal("idle") }).strict(),
26
+ z.object({ status: z.literal("completed"), runId: z.string() }).strict(),
27
+ z.object({ status: z.literal("cancelled"), runId: z.string() }).strict(),
28
+ z.object({ status: z.literal("interrupted"), runId: z.string() }).strict(),
29
+ z.object({ status: z.literal("failed"), runId: z.string() }).strict(),
30
+ ]).optional(),
31
+ lastErrorMessage: z.string().optional(),
32
+ }).strict();
33
+ export const providerAgentViewSchema = z.object({
34
+ localKey: z.string().min(1),
35
+ displayName: z.string().min(1),
36
+ provider: z.enum(["codex", "claude-code"]),
37
+ workspaceName: z.string().min(1),
38
+ accessProfile: z.enum(["inspect", "workspace"]),
39
+ enabled: z.boolean(),
40
+ status: z.enum(["ready", "error"]),
41
+ message: z.string(),
42
+ hint: z.string().optional(),
43
+ remediation: z.enum(["install", "login", "upgrade", "select-folder", "resume", "retry"]).optional(),
44
+ providerVersion: z.string().optional(),
45
+ }).strict();
46
+ export const selectedFolderSchema = z.object({
47
+ token: z.string().min(1),
48
+ name: z.string().min(1),
49
+ }).strict();
50
+ export const providerDraftStatusSchema = z.object({
51
+ status: z.enum(["ready", "error"]),
52
+ message: z.string(),
53
+ hint: z.string().optional(),
54
+ remediation: z.enum(["install", "login", "upgrade", "select-folder", "resume", "retry"]).optional(),
55
+ providerVersion: z.string().optional(),
56
+ }).strict();
57
+ export const providerInstallPlanSchema = z.object({
58
+ provider: z.enum(["codex", "claude-code"]),
59
+ title: z.string(),
60
+ source: z.string(),
61
+ command: z.string().optional(),
62
+ officialUrl: z.url(),
63
+ }).strict();
64
+ export const providerLoginResultSchema = z.object({
65
+ ok: z.boolean(),
66
+ message: z.string(),
67
+ }).strict();
68
+ export const localSessionStatusSchema = z.object({
69
+ authenticated: z.literal(true),
70
+ csrfToken: z.string().min(1),
71
+ expiresAt: z.iso.datetime(),
72
+ }).strict();
73
+ export const localPairRequestSchema = z.object({
74
+ apiBaseUrl: z.url(),
75
+ code: z.string().min(1).max(500),
76
+ displayName: z.string().trim().min(1).max(100),
77
+ }).strict();
78
+ export const localAuthorizedPairRequestSchema = z.object({
79
+ displayName: z.string().trim().min(1).max(100),
80
+ }).strict();
81
+ export const localUserAuthorizationBeginSchema = z.object({
82
+ apiBaseUrl: z.url().optional(),
83
+ deviceLabel: z.string().trim().min(1).max(100).optional(),
84
+ }).strict();
85
+ export const localProviderDraftSchema = z.object({
86
+ provider: z.enum(["codex", "claude-code"]),
87
+ displayName: z.string().trim().min(1).max(100),
88
+ folderToken: z.string().min(1).max(500),
89
+ accessProfile: z.enum(["inspect", "workspace"]),
90
+ model: z.string().trim().min(1).max(200).optional(),
91
+ }).strict();
92
+ export const localAgentUpdateSchema = z.object({
93
+ localKey: z.string().min(1).max(500),
94
+ displayName: z.string().trim().min(1).max(100),
95
+ accessProfile: z.enum(["inspect", "workspace"]),
96
+ folderToken: z.string().min(1).max(500).optional(),
97
+ }).strict();
98
+ export const localAgentPauseSchema = z.object({
99
+ localKey: z.string().min(1).max(500),
100
+ paused: z.boolean(),
101
+ }).strict();
102
+ export const localAgentKeySchema = z.object({
103
+ localKey: z.string().min(1).max(500),
104
+ }).strict();
105
+ export const localProviderSchema = z.object({
106
+ provider: z.enum(["codex", "claude-code"]),
107
+ }).strict();
108
+ export function localHealth() {
109
+ return { ok: true, version: CONDUCTOR_VERSION, protocolVersion: PROTOCOL_VERSION };
110
+ }
111
+ export function createLocalControllerApi(controller, userAuthorization = unavailableUserAuthorization, work = unavailableWorkConsole, authorizedPairing = unavailableAuthorizedPairing, localDiagnostics = unavailableLocalDiagnostics, recovery = unavailableLocalRecovery) {
112
+ return {
113
+ health: () => Promise.resolve(localHealth()),
114
+ pairedStatus: async () => localStatusFromDesktop(await controller.pairedStatus()),
115
+ pair: async (input) => localStatusFromDesktop(await controller.pair(input)),
116
+ pairAuthorized: async (displayName) => localStatusFromDesktop(await authorizedPairing.pair(displayName)),
117
+ logout: async () => localStatusFromDesktop(await controller.logout()),
118
+ listAgents: () => controller.listAgents(),
119
+ selectFolder: () => controller.selectFolder(),
120
+ inspectDraft: (input) => controller.inspectDraft(input),
121
+ login: (input) => controller.login(input),
122
+ verifyAndAdd: (input) => controller.verifyAndAdd(input),
123
+ updateAgent: (input) => controller.updateAgent(input),
124
+ pauseAgent: (localKey, paused) => controller.pauseAgent(localKey, paused),
125
+ removeAgent: (localKey) => controller.removeAgent(localKey),
126
+ installPlan: (provider) => controller.installPlan(provider),
127
+ openOfficialProviderPage: (provider) => controller.openOfficialProviderPage(provider),
128
+ runtimeStatus: () => controller.runtimeStatus(),
129
+ startRuntime: () => controller.startRuntime(),
130
+ stopRuntime: () => controller.stopRuntime(),
131
+ recoveryStatus: () => recovery.status(),
132
+ performRecoveryAction: (action) => recovery.perform(localRecoveryActionSchema.parse(action)),
133
+ clearLocalDiagnostics: async () => { await localDiagnostics.clear(); },
134
+ userAuthorizationStatus: async () => userAuthorizationStatusSchema.parse(await userAuthorization.status()),
135
+ beginUserAuthorization: async (input) => userAuthorizationStatusSchema.parse(await userAuthorization.begin(input)),
136
+ signOutUser: async () => userAuthorizationStatusSchema.parse(await userAuthorization.signOut()),
137
+ workSnapshot: (input) => work.snapshot(input),
138
+ createTask: (input) => work.createTask(input),
139
+ updateTask: (input) => work.updateTask(input),
140
+ commentTask: (input) => work.comment(input),
141
+ dispatchTask: (input) => work.dispatch(input),
142
+ decideApproval: (input) => work.decideApproval(input),
143
+ cancelRun: (runId) => work.cancelRun(runId),
144
+ };
145
+ }
146
+ const unavailableUserAuthorization = {
147
+ status: () => Promise.resolve({ state: "signed_out", storageKind: "memory" }),
148
+ begin: () => Promise.reject(new Error("Sift user authorization is unavailable.")),
149
+ signOut: () => Promise.resolve({ state: "signed_out", storageKind: "memory" }),
150
+ };
151
+ const unavailableWorkConsole = {
152
+ snapshot: () => Promise.resolve({ state: "unauthorized", message: "Sign in to Sift to manage shared work.", refreshedAt: new Date().toISOString(), projects: [], agents: [], queue: [], activity: [] }),
153
+ createTask: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
154
+ updateTask: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
155
+ comment: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
156
+ dispatch: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
157
+ decideApproval: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
158
+ cancelRun: () => Promise.reject(new Error("Sign in to Sift to manage shared work.")),
159
+ };
160
+ const unavailableAuthorizedPairing = {
161
+ pair: () => Promise.reject(new Error("Sign in to Sift before connecting this computer automatically.")),
162
+ };
163
+ const unavailableLocalDiagnostics = {
164
+ clear: () => undefined,
165
+ };
166
+ const unavailableLocalRecovery = {
167
+ status: () => Promise.resolve(localRecoveryProjectionSchema.parse({
168
+ localOnly: true,
169
+ state: "disconnected",
170
+ persistenceHealth: "healthy",
171
+ outboxDepth: 0,
172
+ lastAcknowledgedClientSequence: 0,
173
+ leaseHealth: "unknown",
174
+ providerResumeSupport: "unknown",
175
+ actions: [],
176
+ })),
177
+ perform: () => Promise.reject(new Error("Local recovery controls are unavailable.")),
178
+ };
179
+ export { localRecoveryActionSchema, localRecoveryProjectionSchema };
180
+ function localStatusFromDesktop(status) {
181
+ if (!status.paired)
182
+ return { paired: false };
183
+ return localPairingStatusSchema.parse({
184
+ paired: true,
185
+ apiBaseUrl: status.apiBaseUrl,
186
+ ...(status.conductorId === undefined ? {} : { conductorId: status.conductorId }),
187
+ displayName: status.displayName,
188
+ protocolVersion: status.protocolVersion,
189
+ });
190
+ }
191
+ //# sourceMappingURL=contracts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contracts.js","sourceRoot":"","sources":["../../src/localApi/contracts.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ import { z } from "zod";
2
+ import type { DurableEventOutbox } from "../runtime/eventOutbox.js";
3
+ import type { ExecutionJournalStore } from "../runtime/executionJournal.js";
4
+ import type { RuntimeServiceStatus } from "../runtime/runtimeService.js";
5
+ export declare const localRecoveryActionSchema: z.ZodEnum<{
6
+ stop: "stop";
7
+ retry: "retry";
8
+ reviewLateResult: "reviewLateResult";
9
+ }>;
10
+ export declare const localRecoveryProjectionSchema: z.ZodObject<{
11
+ localOnly: z.ZodLiteral<true>;
12
+ state: z.ZodEnum<{
13
+ superseded: "superseded";
14
+ recovering: "recovering";
15
+ interrupted: "interrupted";
16
+ overtime: "overtime";
17
+ online: "online";
18
+ degraded: "degraded";
19
+ disconnected: "disconnected";
20
+ }>;
21
+ persistenceHealth: z.ZodEnum<{
22
+ error: "error";
23
+ healthy: "healthy";
24
+ }>;
25
+ outboxDepth: z.ZodNumber;
26
+ lastAcknowledgedClientSequence: z.ZodNumber;
27
+ leaseHealth: z.ZodEnum<{
28
+ unknown: "unknown";
29
+ healthy: "healthy";
30
+ retrying: "retrying";
31
+ "authority-uncertain": "authority-uncertain";
32
+ lost: "lost";
33
+ }>;
34
+ providerResumeSupport: z.ZodEnum<{
35
+ unknown: "unknown";
36
+ none: "none";
37
+ session: "session";
38
+ }>;
39
+ interruptionReason: z.ZodOptional<z.ZodString>;
40
+ lastProgressAt: z.ZodOptional<z.ZodISODateTime>;
41
+ noProgressObservedAt: z.ZodOptional<z.ZodISODateTime>;
42
+ lateResultSummary: z.ZodOptional<z.ZodString>;
43
+ runId: z.ZodOptional<z.ZodString>;
44
+ actions: z.ZodArray<z.ZodEnum<{
45
+ stop: "stop";
46
+ retry: "retry";
47
+ reviewLateResult: "reviewLateResult";
48
+ }>>;
49
+ }, z.core.$strict>;
50
+ export type LocalRecoveryAction = z.infer<typeof localRecoveryActionSchema>;
51
+ export type LocalRecoveryProjection = z.infer<typeof localRecoveryProjectionSchema>;
52
+ export type RuntimeRecoveryControls = {
53
+ status(): RuntimeServiceStatus;
54
+ restart(): Promise<unknown>;
55
+ stop(): Promise<unknown>;
56
+ };
57
+ export declare class LocalRecoveryService {
58
+ private readonly deps;
59
+ constructor(deps: {
60
+ journals: ExecutionJournalStore;
61
+ outbox: DurableEventOutbox;
62
+ runtime: RuntimeRecoveryControls;
63
+ });
64
+ status(): Promise<LocalRecoveryProjection>;
65
+ perform(action: LocalRecoveryAction): Promise<LocalRecoveryProjection>;
66
+ }
@@ -0,0 +1,115 @@
1
+ import { z } from "zod";
2
+ export const localRecoveryActionSchema = z.enum(["retry", "stop", "reviewLateResult"]);
3
+ export const localRecoveryProjectionSchema = z.object({
4
+ localOnly: z.literal(true),
5
+ state: z.enum([
6
+ "online",
7
+ "degraded",
8
+ "disconnected",
9
+ "recovering",
10
+ "interrupted",
11
+ "overtime",
12
+ "superseded",
13
+ ]),
14
+ persistenceHealth: z.enum(["healthy", "error"]),
15
+ outboxDepth: z.number().int().nonnegative(),
16
+ lastAcknowledgedClientSequence: z.number().int().nonnegative(),
17
+ leaseHealth: z.enum(["healthy", "retrying", "authority-uncertain", "lost", "unknown"]),
18
+ providerResumeSupport: z.enum(["none", "session", "unknown"]),
19
+ interruptionReason: z.string().optional(),
20
+ lastProgressAt: z.iso.datetime().optional(),
21
+ noProgressObservedAt: z.iso.datetime().optional(),
22
+ lateResultSummary: z.string().optional(),
23
+ runId: z.string().optional(),
24
+ actions: z.array(localRecoveryActionSchema),
25
+ }).strict();
26
+ export class LocalRecoveryService {
27
+ deps;
28
+ constructor(deps) {
29
+ this.deps = deps;
30
+ }
31
+ async status() {
32
+ try {
33
+ const [journals, outbox] = await Promise.all([
34
+ this.deps.journals.list(),
35
+ this.deps.outbox.stats(),
36
+ ]);
37
+ const latest = journals
38
+ .map((entry) => entry.journal)
39
+ .sort((left, right) => right.updatedAt.localeCompare(left.updatedAt))[0];
40
+ return localRecoveryProjectionSchema.parse(projection(this.deps.runtime.status(), latest, outbox.retainedEntries));
41
+ }
42
+ catch {
43
+ return {
44
+ localOnly: true,
45
+ state: "interrupted",
46
+ persistenceHealth: "error",
47
+ outboxDepth: 0,
48
+ lastAcknowledgedClientSequence: 0,
49
+ leaseHealth: "unknown",
50
+ providerResumeSupport: "unknown",
51
+ interruptionReason: "Local recovery state could not be read safely.",
52
+ actions: ["stop"],
53
+ };
54
+ }
55
+ }
56
+ async perform(action) {
57
+ switch (action) {
58
+ case "retry":
59
+ await this.deps.runtime.restart();
60
+ break;
61
+ case "stop":
62
+ await this.deps.runtime.stop();
63
+ break;
64
+ case "reviewLateResult":
65
+ break;
66
+ }
67
+ return this.status();
68
+ }
69
+ }
70
+ function projection(runtime, journal, outboxDepth) {
71
+ const state = recoveryState(runtime, journal);
72
+ const actions = [];
73
+ if (state === "online" || state === "degraded" || state === "recovering")
74
+ actions.push("stop");
75
+ if (state === "degraded" || state === "disconnected" || state === "recovering" || state === "interrupted") {
76
+ actions.push("retry");
77
+ }
78
+ if (journal?.terminalResult !== undefined && state !== "online")
79
+ actions.push("reviewLateResult");
80
+ return {
81
+ localOnly: true,
82
+ state,
83
+ persistenceHealth: "healthy",
84
+ outboxDepth,
85
+ lastAcknowledgedClientSequence: journal?.lastAcknowledgedClientSequence ?? 0,
86
+ leaseHealth: journal?.leaseHealth ?? "unknown",
87
+ providerResumeSupport: journal === undefined
88
+ ? "unknown"
89
+ : journal.provider.resumeSupported ? "session" : "none",
90
+ ...(journal?.interruptionReason === undefined ? {} : { interruptionReason: journal.interruptionReason }),
91
+ ...(journal?.lastProgressAt === undefined ? {} : { lastProgressAt: journal.lastProgressAt }),
92
+ ...(journal?.noProgressObservedAt === undefined ? {} : { noProgressObservedAt: journal.noProgressObservedAt }),
93
+ ...(journal?.terminalResult === undefined ? {} : { lateResultSummary: journal.terminalResult.summary }),
94
+ ...(journal === undefined ? {} : { runId: journal.runId }),
95
+ actions,
96
+ };
97
+ }
98
+ function recoveryState(runtime, journal) {
99
+ if (journal?.phase === "superseded")
100
+ return "superseded";
101
+ if (journal?.phase === "overtime")
102
+ return "overtime";
103
+ if (journal?.phase === "interrupted")
104
+ return "interrupted";
105
+ if (journal?.phase === "recovering")
106
+ return "recovering";
107
+ if (journal?.phase === "authority_uncertain" || journal?.leaseHealth === "lost")
108
+ return "disconnected";
109
+ if (journal?.leaseHealth === "retrying")
110
+ return "degraded";
111
+ if (runtime.state === "failed")
112
+ return "interrupted";
113
+ return runtime.state === "running" ? "online" : "disconnected";
114
+ }
115
+ //# sourceMappingURL=recovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/localApi/recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ import type { ConductorLocalApi } from "./contracts.js";
2
+ export type LocalWebServerOptions = {
3
+ api: ConductorLocalApi;
4
+ staticDirectory: string;
5
+ host?: "127.0.0.1" | "::1" | undefined;
6
+ preferredPort?: number | undefined;
7
+ bootstrapToken?: string | undefined;
8
+ now?: (() => number) | undefined;
9
+ sessionTtlMs?: number | undefined;
10
+ bootstrapTtlMs?: number | undefined;
11
+ maxBodyBytes?: number | undefined;
12
+ };
13
+ export type LocalWebServer = {
14
+ origin: string;
15
+ browserUrl: string;
16
+ port: number;
17
+ close(): Promise<void>;
18
+ };
19
+ export declare function startLocalWebServer(options: LocalWebServerOptions): Promise<LocalWebServer>;
20
+ export declare function assertStaticAssets(staticDirectory: string): Promise<void>;