@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.
- package/dist/adapters/claudeAgent.js +1 -0
- package/dist/adapters/claudeAgent.js.map +1 -1
- package/dist/adapters/codexAgent.js +1 -0
- package/dist/adapters/codexAgent.js.map +1 -1
- package/dist/adapters/fakeAgent.js +1 -0
- package/dist/adapters/fakeAgent.js.map +1 -1
- package/dist/adapters/httpAgent.js +1 -0
- package/dist/adapters/httpAgent.js.map +1 -1
- package/dist/adapters/processAgent.js +4 -0
- package/dist/adapters/processAgent.js.map +1 -1
- package/dist/adapters/provider/runProvider.js +4 -0
- package/dist/adapters/provider/runProvider.js.map +1 -1
- package/dist/adapters/provider/store.js +3 -4
- package/dist/adapters/provider/store.js.map +1 -1
- package/dist/adapters/types.d.ts +9 -0
- package/dist/cli.d.ts +6 -0
- package/dist/cli.js +16 -4
- package/dist/cli.js.map +1 -1
- package/dist/conductorClient.d.ts +56 -19
- package/dist/conductorClient.js +91 -40
- package/dist/conductorClient.js.map +1 -1
- package/dist/config.js +4 -5
- package/dist/config.js.map +1 -1
- package/dist/daemon.d.ts +19 -6
- package/dist/daemon.js +199 -121
- package/dist/daemon.js.map +1 -1
- package/dist/desktop/app/controller.d.ts +1 -1
- package/dist/desktop/app/runtimeController.d.ts +7 -0
- package/dist/desktop/app/runtimeController.js +12 -1
- package/dist/desktop/app/runtimeController.js.map +1 -1
- package/dist/localApi/contracts.d.ts +15 -4
- package/dist/localApi/contracts.js +19 -1
- package/dist/localApi/contracts.js.map +1 -1
- package/dist/localApi/recovery.d.ts +66 -0
- package/dist/localApi/recovery.js +118 -0
- package/dist/localApi/recovery.js.map +1 -0
- package/dist/localApi/server.js +3 -1
- package/dist/localApi/server.js.map +1 -1
- package/dist/localApp/service.js +16 -4
- package/dist/localApp/service.js.map +1 -1
- package/dist/protocol/fenced.d.ts +135 -0
- package/dist/protocol/fenced.js +142 -0
- package/dist/protocol/fenced.js.map +1 -0
- package/dist/redaction.js +2 -0
- package/dist/redaction.js.map +1 -1
- package/dist/runtime/atomicFile.d.ts +6 -0
- package/dist/runtime/atomicFile.js +78 -0
- package/dist/runtime/atomicFile.js.map +1 -0
- package/dist/runtime/daemonCapabilities.d.ts +7 -0
- package/dist/runtime/daemonCapabilities.js +24 -0
- package/dist/runtime/daemonCapabilities.js.map +1 -0
- package/dist/runtime/eventOutbox.d.ts +100 -0
- package/dist/runtime/eventOutbox.js +206 -0
- package/dist/runtime/eventOutbox.js.map +1 -0
- package/dist/runtime/executionJournal.d.ts +102 -0
- package/dist/runtime/executionJournal.js +209 -0
- package/dist/runtime/executionJournal.js.map +1 -0
- package/dist/runtime/executionSafety.d.ts +76 -0
- package/dist/runtime/executionSafety.js +207 -0
- package/dist/runtime/executionSafety.js.map +1 -0
- package/dist/runtime/fencedExecutionState.d.ts +43 -0
- package/dist/runtime/fencedExecutionState.js +158 -0
- package/dist/runtime/fencedExecutionState.js.map +1 -0
- package/dist/runtime/leaseManager.d.ts +38 -0
- package/dist/runtime/leaseManager.js +102 -0
- package/dist/runtime/leaseManager.js.map +1 -0
- package/dist/runtime/localRunQueue.d.ts +1 -1
- package/dist/runtime/localRunQueue.js +8 -0
- package/dist/runtime/localRunQueue.js.map +1 -1
- package/dist/runtime/localSessionCache.d.ts +1 -1
- package/dist/runtime/localSessionCache.js.map +1 -1
- package/dist/runtime/process.d.ts +13 -1
- package/dist/runtime/process.js +39 -9
- package/dist/runtime/process.js.map +1 -1
- package/dist/runtime/recoveryCoordinator.d.ts +19 -0
- package/dist/runtime/recoveryCoordinator.js +183 -0
- package/dist/runtime/recoveryCoordinator.js.map +1 -0
- package/dist/runtime/runtimeLock.d.ts +33 -0
- package/dist/runtime/runtimeLock.js +140 -0
- package/dist/runtime/runtimeLock.js.map +1 -0
- package/dist/runtime/runtimeService.d.ts +6 -1
- package/dist/runtime/runtimeService.js +54 -20
- package/dist/runtime/runtimeService.js.map +1 -1
- package/dist/runtime/taskExecution.d.ts +4 -0
- package/dist/runtime/taskExecution.js +32 -12
- package/dist/runtime/taskExecution.js.map +1 -1
- package/dist/types.d.ts +28 -13
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/version.js.map +1 -1
- package/dist/workTypes.d.ts +5 -5
- package/dist-web/assets/index-SwT063kc.js +72 -0
- package/dist-web/index.html +2 -2
- package/package.json +1 -1
- 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
|
-
|
|
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
|
-
|
|
85
|
-
|
|
86
|
-
if (this.controller
|
|
87
|
-
|
|
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
|
-
|
|
90
|
-
|
|
91
|
-
this.controller
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
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
|
-
|
|
99
|
-
|
|
100
|
-
this.
|
|
101
|
-
|
|
102
|
-
|
|
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":"
|
|
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: (
|
|
47
|
-
checkoutTask: (
|
|
48
|
-
createChildTasks: (
|
|
49
|
-
addTaskComment: (
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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":"AAAA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sBAAsB,CAAC;AAEhE,OAAO,EAAE,sBAAsB,EAAE,MAAM,qBAAqB,CAAC;AAC7D,OAAO,EAAE,0BAA0B,EAAE,MAAM,8BAA8B,CAAC;
|
|
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:
|
|
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
|
|
1
|
+
export declare const CONDUCTOR_VERSION = "0.2.0";
|
|
2
2
|
export declare const PROTOCOL_VERSION = "v1";
|
package/dist/version.js
CHANGED
package/dist/version.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,iBAAiB,GAAG,
|
|
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"}
|
package/dist/workTypes.d.ts
CHANGED
|
@@ -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";
|