@sift-wiki/conductor 0.2.0-beta.1 → 0.2.0

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 (95) hide show
  1. package/dist/adapters/claudeAgent.js +1 -0
  2. package/dist/adapters/claudeAgent.js.map +1 -1
  3. package/dist/adapters/codexAgent.js +1 -0
  4. package/dist/adapters/codexAgent.js.map +1 -1
  5. package/dist/adapters/fakeAgent.js +1 -0
  6. package/dist/adapters/fakeAgent.js.map +1 -1
  7. package/dist/adapters/httpAgent.js +1 -0
  8. package/dist/adapters/httpAgent.js.map +1 -1
  9. package/dist/adapters/processAgent.js +4 -0
  10. package/dist/adapters/processAgent.js.map +1 -1
  11. package/dist/adapters/provider/runProvider.js +4 -0
  12. package/dist/adapters/provider/runProvider.js.map +1 -1
  13. package/dist/adapters/provider/store.js +3 -4
  14. package/dist/adapters/provider/store.js.map +1 -1
  15. package/dist/adapters/types.d.ts +9 -0
  16. package/dist/cli.d.ts +6 -0
  17. package/dist/cli.js +16 -4
  18. package/dist/cli.js.map +1 -1
  19. package/dist/conductorClient.d.ts +56 -19
  20. package/dist/conductorClient.js +91 -40
  21. package/dist/conductorClient.js.map +1 -1
  22. package/dist/config.js +4 -5
  23. package/dist/config.js.map +1 -1
  24. package/dist/daemon.d.ts +19 -6
  25. package/dist/daemon.js +199 -121
  26. package/dist/daemon.js.map +1 -1
  27. package/dist/desktop/app/controller.d.ts +1 -1
  28. package/dist/desktop/app/runtimeController.d.ts +7 -0
  29. package/dist/desktop/app/runtimeController.js +12 -1
  30. package/dist/desktop/app/runtimeController.js.map +1 -1
  31. package/dist/localApi/contracts.d.ts +15 -4
  32. package/dist/localApi/contracts.js +19 -1
  33. package/dist/localApi/contracts.js.map +1 -1
  34. package/dist/localApi/recovery.d.ts +66 -0
  35. package/dist/localApi/recovery.js +118 -0
  36. package/dist/localApi/recovery.js.map +1 -0
  37. package/dist/localApi/server.js +3 -1
  38. package/dist/localApi/server.js.map +1 -1
  39. package/dist/localApp/service.js +16 -4
  40. package/dist/localApp/service.js.map +1 -1
  41. package/dist/protocol/fenced.d.ts +135 -0
  42. package/dist/protocol/fenced.js +142 -0
  43. package/dist/protocol/fenced.js.map +1 -0
  44. package/dist/redaction.js +2 -0
  45. package/dist/redaction.js.map +1 -1
  46. package/dist/runtime/atomicFile.d.ts +6 -0
  47. package/dist/runtime/atomicFile.js +78 -0
  48. package/dist/runtime/atomicFile.js.map +1 -0
  49. package/dist/runtime/daemonCapabilities.d.ts +7 -0
  50. package/dist/runtime/daemonCapabilities.js +24 -0
  51. package/dist/runtime/daemonCapabilities.js.map +1 -0
  52. package/dist/runtime/eventOutbox.d.ts +100 -0
  53. package/dist/runtime/eventOutbox.js +206 -0
  54. package/dist/runtime/eventOutbox.js.map +1 -0
  55. package/dist/runtime/executionJournal.d.ts +102 -0
  56. package/dist/runtime/executionJournal.js +209 -0
  57. package/dist/runtime/executionJournal.js.map +1 -0
  58. package/dist/runtime/executionSafety.d.ts +76 -0
  59. package/dist/runtime/executionSafety.js +207 -0
  60. package/dist/runtime/executionSafety.js.map +1 -0
  61. package/dist/runtime/fencedExecutionState.d.ts +43 -0
  62. package/dist/runtime/fencedExecutionState.js +158 -0
  63. package/dist/runtime/fencedExecutionState.js.map +1 -0
  64. package/dist/runtime/leaseManager.d.ts +38 -0
  65. package/dist/runtime/leaseManager.js +102 -0
  66. package/dist/runtime/leaseManager.js.map +1 -0
  67. package/dist/runtime/localRunQueue.d.ts +1 -1
  68. package/dist/runtime/localRunQueue.js +8 -0
  69. package/dist/runtime/localRunQueue.js.map +1 -1
  70. package/dist/runtime/localSessionCache.d.ts +1 -1
  71. package/dist/runtime/localSessionCache.js.map +1 -1
  72. package/dist/runtime/process.d.ts +13 -1
  73. package/dist/runtime/process.js +39 -9
  74. package/dist/runtime/process.js.map +1 -1
  75. package/dist/runtime/recoveryCoordinator.d.ts +19 -0
  76. package/dist/runtime/recoveryCoordinator.js +183 -0
  77. package/dist/runtime/recoveryCoordinator.js.map +1 -0
  78. package/dist/runtime/runtimeLock.d.ts +33 -0
  79. package/dist/runtime/runtimeLock.js +140 -0
  80. package/dist/runtime/runtimeLock.js.map +1 -0
  81. package/dist/runtime/runtimeService.d.ts +6 -1
  82. package/dist/runtime/runtimeService.js +54 -20
  83. package/dist/runtime/runtimeService.js.map +1 -1
  84. package/dist/runtime/taskExecution.d.ts +4 -0
  85. package/dist/runtime/taskExecution.js +32 -12
  86. package/dist/runtime/taskExecution.js.map +1 -1
  87. package/dist/types.d.ts +28 -13
  88. package/dist/version.d.ts +1 -1
  89. package/dist/version.js +1 -1
  90. package/dist/version.js.map +1 -1
  91. package/dist/workTypes.d.ts +5 -5
  92. package/dist-web/assets/index-SwT063kc.js +72 -0
  93. package/dist-web/index.html +2 -2
  94. package/package.json +1 -1
  95. package/dist-web/assets/index-D5X9InfE.js +0 -72
@@ -1,7 +1,9 @@
1
+ import { createHash } from "node:crypto";
1
2
  import { runDaemon, runDaemonOnce } from "../daemon.js";
2
3
  import { redactSecrets } from "../redaction.js";
3
4
  export class HeadlessRuntimeService {
4
5
  input;
6
+ runtimeLock;
5
7
  state = "stopped";
6
8
  startedAt;
7
9
  stoppedAt;
@@ -9,8 +11,10 @@ export class HeadlessRuntimeService {
9
11
  lastErrorMessage;
10
12
  controller;
11
13
  runPromise;
12
- constructor(input) {
14
+ lockHandle;
15
+ constructor(input, runtimeLock) {
13
16
  this.input = input;
17
+ this.runtimeLock = runtimeLock;
14
18
  }
15
19
  status() {
16
20
  return {
@@ -30,6 +34,7 @@ export class HeadlessRuntimeService {
30
34
  this.stoppedAt = undefined;
31
35
  this.lastErrorMessage = undefined;
32
36
  try {
37
+ await this.acquireOwnership();
33
38
  this.state = "running";
34
39
  const result = await runDaemonOnce(this.input);
35
40
  this.lastResult = result;
@@ -43,6 +48,9 @@ export class HeadlessRuntimeService {
43
48
  this.lastErrorMessage = safeRuntimeErrorMessage(error);
44
49
  throw error;
45
50
  }
51
+ finally {
52
+ await this.releaseOwnership();
53
+ }
46
54
  }
47
55
  async start() {
48
56
  await Promise.resolve();
@@ -58,6 +66,15 @@ export class HeadlessRuntimeService {
58
66
  this.startedAt = new Date().toISOString();
59
67
  this.stoppedAt = undefined;
60
68
  this.lastErrorMessage = undefined;
69
+ try {
70
+ await this.acquireOwnership();
71
+ }
72
+ catch (error) {
73
+ this.state = "failed";
74
+ this.stoppedAt = new Date().toISOString();
75
+ this.lastErrorMessage = safeRuntimeErrorMessage(error);
76
+ throw error;
77
+ }
61
78
  this.runPromise = this.runUntilStopped(controller);
62
79
  this.state = "running";
63
80
  return this.status();
@@ -80,27 +97,44 @@ export class HeadlessRuntimeService {
80
97
  await this.runPromise;
81
98
  return this.status();
82
99
  }
83
- runUntilStopped(controller) {
84
- return runDaemon({ ...this.input, signal: controller.signal })
85
- .then(() => {
86
- if (this.controller !== controller) {
87
- return;
100
+ async runUntilStopped(controller) {
101
+ try {
102
+ await runDaemon({ ...this.input, signal: controller.signal });
103
+ if (this.controller === controller) {
104
+ this.state = "stopped";
105
+ this.stoppedAt = new Date().toISOString();
88
106
  }
89
- this.state = "stopped";
90
- this.stoppedAt = new Date().toISOString();
91
- this.controller = undefined;
92
- this.runPromise = undefined;
93
- })
94
- .catch((error) => {
95
- if (this.controller !== controller) {
96
- return;
107
+ }
108
+ catch (error) {
109
+ if (this.controller === controller) {
110
+ this.state = "failed";
111
+ this.stoppedAt = new Date().toISOString();
112
+ this.lastErrorMessage = safeRuntimeErrorMessage(error);
97
113
  }
98
- this.state = "failed";
99
- this.stoppedAt = new Date().toISOString();
100
- this.lastErrorMessage = safeRuntimeErrorMessage(error);
101
- this.controller = undefined;
102
- this.runPromise = undefined;
103
- });
114
+ }
115
+ finally {
116
+ if (this.controller === controller) {
117
+ this.controller = undefined;
118
+ this.runPromise = undefined;
119
+ }
120
+ await this.releaseOwnership();
121
+ }
122
+ }
123
+ async acquireOwnership() {
124
+ if (this.runtimeLock === undefined)
125
+ return;
126
+ const config = await this.input.store.read();
127
+ if (config === undefined)
128
+ throw new Error("No paired Conductor config found. Run pair first.");
129
+ const identityKey = config.conductorId ?? createHash("sha256")
130
+ .update(`${config.apiBaseUrl}\0${config.displayName}`)
131
+ .digest("hex");
132
+ this.lockHandle = await this.runtimeLock.acquire(identityKey);
133
+ }
134
+ async releaseOwnership() {
135
+ const handle = this.lockHandle;
136
+ this.lockHandle = undefined;
137
+ await handle?.release();
104
138
  }
105
139
  }
106
140
  function safeRuntimeErrorMessage(error) {
@@ -1 +1 @@
1
- {"version":3,"file":"runtimeService.js","sourceRoot":"","sources":["../../src/runtime/runtimeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"runtimeService.js","sourceRoot":"","sources":["../../src/runtime/runtimeService.ts"],"names":[],"mappings":"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"}
@@ -1,9 +1,12 @@
1
1
  import type { ConductorClient, ConductorWorkClient, ClaimedJob } from "../types.js";
2
+ import type { AttemptAuthority } from "../protocol/fenced.js";
2
3
  export type TaskExecutionClient = Pick<ConductorWorkClient, "readWorkContext" | "checkoutTask" | "createChildTasks" | "addTaskComment" | "registerArtifact" | "requestApproval" | "reportUsage" | "setTaskDisposition">;
3
4
  export type OpenTaskExecution = {
4
5
  taskId: string;
5
6
  bridgeBaseUrl: string;
6
7
  bridgeToken: string;
8
+ hasAddedComment(): boolean;
9
+ hasRequestedApproval(): boolean;
7
10
  close(): Promise<void>;
8
11
  };
9
12
  export declare function openTaskExecution(input: {
@@ -11,6 +14,7 @@ export declare function openTaskExecution(input: {
11
14
  workClient: TaskExecutionClient;
12
15
  credential: string;
13
16
  job: ClaimedJob;
17
+ authority?: AttemptAuthority | undefined;
14
18
  onHardStop?: (() => void) | undefined;
15
19
  }): Promise<OpenTaskExecution>;
16
20
  export declare function taskIdFromJob(job: ClaimedJob): string;
@@ -3,8 +3,9 @@ import { startLocalBridgeServer } from "../bridge/server.js";
3
3
  import { LocalBridgeSessionRegistry } from "../bridge/sessionRegistry.js";
4
4
  export async function openTaskExecution(input) {
5
5
  const taskId = taskIdFromJob(input.job);
6
- await input.workClient.checkoutTask(input.credential, input.job.runId, taskId);
6
+ await input.workClient.checkoutTask(input.credential, input.job.runId, taskId, mutationOptions(input.authority));
7
7
  const sessions = new LocalBridgeSessionRegistry();
8
+ const bridgeEvidence = { commentAdded: false, approvalRequested: false };
8
9
  const session = sessions.create({
9
10
  runId: input.job.runId,
10
11
  taskId,
@@ -13,7 +14,7 @@ export async function openTaskExecution(input) {
13
14
  });
14
15
  const handler = createLocalBridgeHandler({
15
16
  sessions,
16
- client: bridgeClient(input.coreClient, input.workClient),
17
+ client: bridgeClient(input.coreClient, input.workClient, input.authority, bridgeEvidence),
17
18
  machineCredential: input.credential,
18
19
  onHardStop: input.onHardStop,
19
20
  });
@@ -22,6 +23,8 @@ export async function openTaskExecution(input) {
22
23
  taskId,
23
24
  bridgeBaseUrl: server.baseUrl,
24
25
  bridgeToken: session.runToken,
26
+ hasAddedComment: () => bridgeEvidence.commentAdded,
27
+ hasRequestedApproval: () => bridgeEvidence.approvalRequested,
25
28
  async close() {
26
29
  sessions.revoke(input.job.runId);
27
30
  await server.close();
@@ -41,19 +44,36 @@ export function taskIdFromJob(job) {
41
44
  }
42
45
  return taskId;
43
46
  }
44
- function bridgeClient(core, work) {
47
+ function bridgeClient(core, work, authority, evidence = {
48
+ commentAdded: false,
49
+ approvalRequested: false,
50
+ }) {
45
51
  return {
46
- readWorkContext: (...args) => work.readWorkContext(...args),
47
- checkoutTask: (...args) => work.checkoutTask(...args),
48
- createChildTasks: (...args) => work.createChildTasks(...args),
49
- addTaskComment: (...args) => work.addTaskComment(...args),
50
- registerArtifact: (...args) => work.registerArtifact(...args),
51
- requestApproval: (...args) => work.requestApproval(...args),
52
- reportUsage: (...args) => work.reportUsage(...args),
53
- setTaskDisposition: (...args) => work.setTaskDisposition(...args),
54
- appendRunEvent: (...args) => core.appendRunEvent(...args),
52
+ readWorkContext: (credential, runId, taskId) => work.readWorkContext(credential, runId, taskId, mutationOptions(authority)),
53
+ checkoutTask: (credential, runId, taskId) => work.checkoutTask(credential, runId, taskId, mutationOptions(authority)),
54
+ createChildTasks: (credential, runId, taskId, children) => work.createChildTasks(credential, runId, taskId, children, mutationOptions(authority)),
55
+ addTaskComment: (credential, runId, taskId, bodyMarkdown) => work.addTaskComment(credential, runId, taskId, bodyMarkdown, mutationOptions(authority))
56
+ .then((comment) => {
57
+ evidence.commentAdded = true;
58
+ return comment;
59
+ }),
60
+ registerArtifact: (credential, runId, taskId, artifact) => work.registerArtifact(credential, runId, taskId, artifact, mutationOptions(authority)),
61
+ requestApproval: (credential, runId, taskId, request) => work.requestApproval(credential, runId, taskId, request, mutationOptions(authority))
62
+ .then((approval) => {
63
+ evidence.approvalRequested = true;
64
+ return approval;
65
+ }),
66
+ reportUsage: (credential, runId, taskId, usage) => work.reportUsage(credential, runId, taskId, usage, mutationOptions(authority)),
67
+ setTaskDisposition: (credential, runId, taskId, disposition, resultSummary) => work.setTaskDisposition(credential, runId, taskId, disposition, resultSummary, mutationOptions(authority)),
68
+ appendRunEvent: (credential, runId, event) => core.appendRunEvent(credential, runId, {
69
+ ...event,
70
+ ...(authority === undefined ? {} : { authority }),
71
+ }),
55
72
  };
56
73
  }
74
+ function mutationOptions(authority) {
75
+ return authority === undefined ? undefined : { authority };
76
+ }
57
77
  function bridgeSessionTtlMs(job) {
58
78
  const maxRunMinutes = job.wakeEnvelope?.limits.maxRunMinutes;
59
79
  return (maxRunMinutes ?? 60) * 60_000 + 60_000;
@@ -1 +1 @@
1
- {"version":3,"file":"taskExecution.js","sourceRoot":"","sources":["../../src/runtime/taskExecution.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"taskExecution.js","sourceRoot":"","sources":["../../src/runtime/taskExecution.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import type { SiftWakeEnvelope } from "./runtime/wakeEnvelope.js";
2
+ import type { AttemptAuthority, AttemptAuthorityFence, AttemptMutationOptions, ClientEventIdentity, EventAcknowledgement, LateResultRequest, LateResultResponse, ReconcileAttemptRequest, ReconcileAttemptResponse } from "./protocol/fenced.js";
2
3
  import type { WorkApproval, WorkArtifact, WorkArtifactInput, WorkChildTaskInput, WorkDisposition, WorkDispositionResponse, WorkTask, WorkTaskComment, WorkUsageDecision } from "./workTypes.js";
3
4
  export type JsonObject = Record<string, unknown>;
4
5
  export type ConductorConfig = {
@@ -59,8 +60,11 @@ export type ClaimedJob = {
59
60
  limits: JsonObject;
60
61
  status: string;
61
62
  attempts: number;
63
+ maxAttempts?: number | undefined;
62
64
  leaseExpiresAt?: string | undefined;
63
65
  wakeEnvelope?: SiftWakeEnvelope | undefined;
66
+ authorityMode?: "legacy-v1" | "fenced-attempts-v1" | undefined;
67
+ authority?: AttemptAuthority | undefined;
64
68
  };
65
69
  export type LeaseRefresh = {
66
70
  job: {
@@ -70,6 +74,7 @@ export type LeaseRefresh = {
70
74
  leaseExpiresAt?: string | undefined;
71
75
  };
72
76
  cancelRequested: boolean;
77
+ authority?: AttemptAuthority | undefined;
73
78
  };
74
79
  export type RunEventType = "health" | "progress" | "log" | "artifact" | "approval_requested" | "completed" | "failed" | "cancelled";
75
80
  export type RunEventInput = {
@@ -77,6 +82,9 @@ export type RunEventInput = {
77
82
  payload?: JsonObject;
78
83
  occurredAt?: string;
79
84
  };
85
+ export type RunEventDeliveryInput = RunEventInput & Partial<ClientEventIdentity> & {
86
+ authority?: AttemptAuthorityFence | undefined;
87
+ };
80
88
  export type RunEvent = {
81
89
  id: string;
82
90
  runId: string;
@@ -84,7 +92,12 @@ export type RunEvent = {
84
92
  eventType: RunEventType;
85
93
  payload: JsonObject;
86
94
  occurredAt: string;
95
+ attemptId?: string | undefined;
96
+ clientEventId?: string | undefined;
97
+ clientSequence?: number | undefined;
98
+ acknowledgedClientSequence?: number | undefined;
87
99
  };
100
+ export type RunEventAppendResult = RunEvent | EventAcknowledgement;
88
101
  export type ConductorClient = PairConductorClient & {
89
102
  heartbeat(credential: string, request: {
90
103
  version?: string;
@@ -93,29 +106,31 @@ export type ConductorClient = PairConductorClient & {
93
106
  }): Promise<unknown>;
94
107
  advertiseAgents(credential: string, agents: ConductorAgentAdvertisement[]): Promise<ConductorAgent[]>;
95
108
  claimJob(credential: string): Promise<ClaimedJob | undefined>;
96
- refreshLease(credential: string, jobId: string): Promise<LeaseRefresh>;
97
- appendRunEvent(credential: string, runId: string, event: RunEventInput): Promise<RunEvent>;
98
- completeRun(credential: string, runId: string, resultSummary: JsonObject): Promise<unknown>;
99
- failRun(credential: string, runId: string, errorSummary: JsonObject): Promise<unknown>;
100
- acknowledgeCancellation(credential: string, runId: string, resultSummary: JsonObject): Promise<unknown>;
109
+ refreshLease(credential: string, jobId: string, authority?: AttemptAuthorityFence): Promise<LeaseRefresh>;
110
+ appendRunEvent(credential: string, runId: string, event: RunEventDeliveryInput): Promise<RunEventAppendResult>;
111
+ completeRun(credential: string, runId: string, resultSummary: JsonObject, options?: AttemptMutationOptions): Promise<unknown>;
112
+ failRun(credential: string, runId: string, errorSummary: JsonObject, options?: AttemptMutationOptions): Promise<unknown>;
113
+ acknowledgeCancellation(credential: string, runId: string, resultSummary: JsonObject, options?: AttemptMutationOptions): Promise<unknown>;
114
+ reconcileAttempt?(credential: string, request: ReconcileAttemptRequest): Promise<ReconcileAttemptResponse>;
115
+ registerLateResult?(credential: string, attemptId: string, request: LateResultRequest): Promise<LateResultResponse>;
101
116
  };
102
117
  export type ConductorWorkClient = {
103
- readWorkContext(credential: string, runId: string, taskId: string): Promise<SiftWakeEnvelope>;
104
- checkoutTask(credential: string, runId: string, taskId: string): Promise<WorkTask>;
105
- createChildTasks(credential: string, runId: string, taskId: string, children: WorkChildTaskInput[]): Promise<WorkTask[]>;
106
- addTaskComment(credential: string, runId: string, taskId: string, bodyMarkdown: string): Promise<WorkTaskComment>;
107
- registerArtifact(credential: string, runId: string, taskId: string, artifact: WorkArtifactInput): Promise<WorkArtifact>;
118
+ readWorkContext(credential: string, runId: string, taskId: string, options?: AttemptMutationOptions): Promise<SiftWakeEnvelope>;
119
+ checkoutTask(credential: string, runId: string, taskId: string, options?: AttemptMutationOptions): Promise<WorkTask>;
120
+ createChildTasks(credential: string, runId: string, taskId: string, children: WorkChildTaskInput[], options?: AttemptMutationOptions): Promise<WorkTask[]>;
121
+ addTaskComment(credential: string, runId: string, taskId: string, bodyMarkdown: string, options?: AttemptMutationOptions): Promise<WorkTaskComment>;
122
+ registerArtifact(credential: string, runId: string, taskId: string, artifact: WorkArtifactInput, options?: AttemptMutationOptions): Promise<WorkArtifact>;
108
123
  requestApproval(credential: string, runId: string, taskId: string, request: {
109
124
  type: string;
110
125
  payload?: JsonObject;
111
126
  idempotencyKey?: string;
112
- }): Promise<WorkApproval>;
127
+ }, options?: AttemptMutationOptions): Promise<WorkApproval>;
113
128
  reportUsage(credential: string, runId: string, taskId: string, usage: {
114
129
  eventKey: string;
115
130
  costMicros: number;
116
131
  durationMs: number;
117
- }): Promise<WorkUsageDecision>;
118
- setTaskDisposition(credential: string, runId: string, taskId: string, disposition: WorkDisposition, resultSummary?: JsonObject): Promise<WorkDispositionResponse>;
132
+ }, options?: AttemptMutationOptions): Promise<WorkUsageDecision>;
133
+ setTaskDisposition(credential: string, runId: string, taskId: string, disposition: WorkDisposition, resultSummary?: JsonObject, options?: AttemptMutationOptions): Promise<WorkDispositionResponse>;
119
134
  listTasks(userCredential: string, projectId?: string): Promise<WorkTask[]>;
120
135
  listRuns(userCredential: string, taskId?: string): Promise<ClaimedJob[]>;
121
136
  };
package/dist/version.d.ts CHANGED
@@ -1,2 +1,2 @@
1
- export declare const CONDUCTOR_VERSION = "0.2.0-beta.1";
1
+ export declare const CONDUCTOR_VERSION = "0.2.0";
2
2
  export declare const PROTOCOL_VERSION = "v1";
package/dist/version.js CHANGED
@@ -1,3 +1,3 @@
1
- export const CONDUCTOR_VERSION = "0.2.0-beta.1";
1
+ export const CONDUCTOR_VERSION = "0.2.0";
2
2
  export const PROTOCOL_VERSION = "v1";
3
3
  //# sourceMappingURL=version.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,cAAc,CAAC;AAChD,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,OAAO,CAAC;AACzC,MAAM,CAAC,MAAM,gBAAgB,GAAG,IAAI,CAAC"}
@@ -56,10 +56,10 @@ export declare const workArtifactSchema: z.ZodObject<{
56
56
  url: z.ZodOptional<z.ZodString>;
57
57
  brainRecordId: z.ZodOptional<z.ZodString>;
58
58
  status: z.ZodEnum<{
59
+ superseded: "superseded";
60
+ failed: "failed";
59
61
  pending: "pending";
60
62
  ready: "ready";
61
- failed: "failed";
62
- superseded: "superseded";
63
63
  }>;
64
64
  reviewState: z.ZodEnum<{
65
65
  pending: "pending";
@@ -106,9 +106,9 @@ export declare const workProjectSchema: z.ZodObject<{
106
106
  description: z.ZodOptional<z.ZodString>;
107
107
  status: z.ZodEnum<{
108
108
  cancelled: "cancelled";
109
+ completed: "completed";
109
110
  planned: "planned";
110
111
  active: "active";
111
- completed: "completed";
112
112
  }>;
113
113
  leadPrincipalId: z.ZodOptional<z.ZodString>;
114
114
  contextRefs: z.ZodDefault<z.ZodArray<z.ZodString>>;
@@ -181,10 +181,10 @@ export declare const workTaskDetailSchema: z.ZodObject<{
181
181
  url: z.ZodOptional<z.ZodString>;
182
182
  brainRecordId: z.ZodOptional<z.ZodString>;
183
183
  status: z.ZodEnum<{
184
+ superseded: "superseded";
185
+ failed: "failed";
184
186
  pending: "pending";
185
187
  ready: "ready";
186
- failed: "failed";
187
- superseded: "superseded";
188
188
  }>;
189
189
  reviewState: z.ZodEnum<{
190
190
  pending: "pending";