@codetreker/daynight 0.22.1 → 0.24.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/README.md +307 -334
- package/config.example.yml +8 -4
- package/dist/api/client.d.ts +2 -2
- package/dist/api/client.js +10 -7
- package/dist/api/client.js.map +1 -1
- package/dist/api/types.d.ts +1 -8
- package/dist/cli/prompts.d.ts +1 -0
- package/dist/commands/auth/credentials.js +1 -1
- package/dist/commands/auth/credentials.js.map +1 -1
- package/dist/commands/review/config.js +0 -9
- package/dist/commands/review/config.js.map +1 -1
- package/dist/commands/review/configuration-guide.js +3 -2
- package/dist/commands/review/configuration-guide.js.map +1 -1
- package/dist/commands/review/repositories.js +11 -4
- package/dist/commands/review/repositories.js.map +1 -1
- package/dist/commands/skill/skills/using-daynight/references/execute-task-in-managed.md +6 -5
- package/dist/commands/skill/skills/using-daynight/references/handbook.md +1 -1
- package/dist/commands/skill/skills/using-daynight/references/handoff.md +1 -1
- package/dist/commands/worker/cleanup.d.ts +8 -2
- package/dist/commands/worker/cleanup.js +44 -160
- package/dist/commands/worker/cleanup.js.map +1 -1
- package/dist/commands/worker/config.d.ts +3 -3
- package/dist/commands/worker/config.js +0 -6
- package/dist/commands/worker/config.js.map +1 -1
- package/dist/commands/worker/control.d.ts +11 -18
- package/dist/commands/worker/control.js +75 -132
- package/dist/commands/worker/control.js.map +1 -1
- package/dist/commands/worker/coordinator.d.ts +10 -8
- package/dist/commands/worker/coordinator.js +311 -473
- package/dist/commands/worker/coordinator.js.map +1 -1
- package/dist/commands/worker/definition.js +9 -17
- package/dist/commands/worker/definition.js.map +1 -1
- package/dist/commands/worker/diagnostics.js +2 -3
- package/dist/commands/worker/diagnostics.js.map +1 -1
- package/dist/commands/worker/execution.d.ts +35 -10
- package/dist/commands/worker/execution.js +92 -283
- package/dist/commands/worker/execution.js.map +1 -1
- package/dist/commands/worker/herdr/agents.d.ts +12 -91
- package/dist/commands/worker/herdr/agents.js +111 -358
- package/dist/commands/worker/herdr/agents.js.map +1 -1
- package/dist/commands/worker/herdr/preflight.d.ts +21 -9
- package/dist/commands/worker/herdr/preflight.js +118 -124
- package/dist/commands/worker/herdr/preflight.js.map +1 -1
- package/dist/commands/worker/herdr.d.ts +7 -63
- package/dist/commands/worker/herdr.js.map +1 -1
- package/dist/commands/worker/identity.js +2 -2
- package/dist/commands/worker/identity.js.map +1 -1
- package/dist/commands/worker/index.d.ts +1 -0
- package/dist/commands/worker/index.js +6 -13
- package/dist/commands/worker/index.js.map +1 -1
- package/dist/commands/worker/prompts.d.ts +10 -3
- package/dist/commands/worker/prompts.js +21 -32
- package/dist/commands/worker/prompts.js.map +1 -1
- package/dist/commands/worker/remote.d.ts +2 -3
- package/dist/commands/worker/remote.js +1 -6
- package/dist/commands/worker/remote.js.map +1 -1
- package/dist/commands/worker/repositories.d.ts +20 -3
- package/dist/commands/worker/repositories.js +100 -21
- package/dist/commands/worker/repositories.js.map +1 -1
- package/dist/commands/worker/runtime.js +112 -217
- package/dist/commands/worker/runtime.js.map +1 -1
- package/dist/commands/worker/setup-environment.d.ts +31 -0
- package/dist/commands/worker/setup-environment.js +146 -0
- package/dist/commands/worker/setup-environment.js.map +1 -0
- package/dist/commands/worker/setup.d.ts +11 -0
- package/dist/commands/worker/setup.js +113 -0
- package/dist/commands/worker/setup.js.map +1 -0
- package/dist/commands/worker/store.d.ts +12 -114
- package/dist/commands/worker/store.js +92 -817
- package/dist/commands/worker/store.js.map +1 -1
- package/dist/commands/worker/types.d.ts +10 -114
- package/dist/commands/worker/worktrees.d.ts +9 -9
- package/dist/commands/worker/worktrees.js +77 -37
- package/dist/commands/worker/worktrees.js.map +1 -1
- package/dist/config/document.d.ts +0 -1
- package/dist/config/document.js +1 -14
- package/dist/config/document.js.map +1 -1
- package/dist/config/files.d.ts +7 -1
- package/dist/config/files.js +4 -1
- package/dist/config/files.js.map +1 -1
- package/dist/config/ownership.d.ts +12 -0
- package/dist/config/ownership.js +39 -0
- package/dist/config/ownership.js.map +1 -0
- package/package.json +2 -2
|
@@ -1,151 +1,94 @@
|
|
|
1
1
|
import { randomUUID } from "node:crypto";
|
|
2
2
|
import { ApiError } from "../../api/client.js";
|
|
3
|
-
const
|
|
4
|
-
const
|
|
5
|
-
const
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
let task = options.store.getTask(input);
|
|
12
|
-
if (task === null)
|
|
13
|
-
throw new Error("The source control execution disappeared.");
|
|
14
|
-
if (task.status === "done" || task.control === null || !cleaned(task))
|
|
15
|
-
return task;
|
|
16
|
-
if (task.serverOrigin !== options.serverOrigin)
|
|
17
|
-
return task;
|
|
18
|
-
if (task.userId === null)
|
|
19
|
-
throw new Error("Source control requires the original authenticated claim owner.");
|
|
20
|
-
if (task.control.submission === "confirmed")
|
|
21
|
-
return task.control.outcome === "applied"
|
|
22
|
-
? options.store.completeAppliedControl(task, task.control.intent, BigInt(task.control.resultVersion), options.now())
|
|
23
|
-
: options.store.completeEndedControl(task, task.control.intent, { observedClaimId: null, observedState: null }, options.now());
|
|
24
|
-
const intent = task.control.intent;
|
|
25
|
-
const observed = await options.remote.readTask(task.projectId, task.taskId, signal);
|
|
26
|
-
await options.remote.authorizeControl(task.projectId, task.userId, undefined, signal);
|
|
27
|
-
const latest = options.store.getTask(task);
|
|
28
|
-
if (latest === null)
|
|
29
|
-
throw new Error("The source control execution disappeared.");
|
|
30
|
-
if (latest.status === "done")
|
|
31
|
-
return latest;
|
|
32
|
-
if (latest.control === null || JSON.stringify(latest.control.intent) !== JSON.stringify(intent))
|
|
33
|
-
throw new Error("The concrete source management decision changed during remote observation.");
|
|
34
|
-
task = latest;
|
|
35
|
-
if (!sourceActive(observed, task.claimId)) {
|
|
36
|
-
if (applied(observed, intent) && task.control.submission === "unknown")
|
|
37
|
-
return options.store.completeAppliedControl(task, intent, observed.version, options.now());
|
|
38
|
-
return options.store.completeEndedControl(task, intent, { observedClaimId: observed.properties.worker?.claimId ?? null, observedState: observed.properties.worker?.state ?? null }, options.now());
|
|
39
|
-
}
|
|
40
|
-
if (!mode.submit || task.control.submission !== "not-submitted")
|
|
41
|
-
return task;
|
|
42
|
-
try {
|
|
43
|
-
task = options.store.markControlSubmitting(task, BigInt(intent.version), options.now());
|
|
44
|
-
}
|
|
45
|
-
catch (error) {
|
|
46
|
-
const winner = options.store.getTask(task);
|
|
47
|
-
if (winner?.control !== null && winner?.control !== undefined && JSON.stringify(winner.control.intent) === JSON.stringify(intent) && (winner.control.submission === "unknown" || winner.control.submission === "confirmed"))
|
|
48
|
-
return winner;
|
|
49
|
-
throw error;
|
|
50
|
-
}
|
|
51
|
-
try {
|
|
52
|
-
const result = intent.kind === "release"
|
|
53
|
-
? await options.remote.release(task.projectId, task.taskId, { claimId: task.claimId, version: BigInt(intent.version), stoppedConfirmed: true }, signal)
|
|
54
|
-
: await options.remote.transfer(task.projectId, task.taskId, { claimId: task.claimId, version: BigInt(intent.version), newClaimId: intent.targetClaimId, target: { userId: intent.target.userId, workerId: intent.target.workerId, machine: intent.target.machine, platform: intent.target.platform, agent: intent.target.agent }, worktreeId: intent.target.worktreeId, stoppedConfirmed: true }, signal);
|
|
55
|
-
return options.store.completeAppliedControl(task, intent, result.version, options.now());
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
const current = options.store.getTask(task);
|
|
59
|
-
if (current?.status === "done" && current.control?.submission === "confirmed")
|
|
60
|
-
return current;
|
|
61
|
-
if (error instanceof ApiError && !error.outcomeUnconfirmed)
|
|
62
|
-
options.store.rejectControlSubmission(task, message(error), options.now());
|
|
63
|
-
throw error;
|
|
64
|
-
}
|
|
65
|
-
},
|
|
66
|
-
});
|
|
3
|
+
const matchesTask = (task, identity) => task.projectId === identity.projectId && task.id === identity.taskId;
|
|
4
|
+
const matchesGrant = (task, identity, descriptor, userId) => {
|
|
5
|
+
const worker = task.properties.worker;
|
|
6
|
+
return matchesTask(task, identity) && task.status === "in_progress" && worker !== null && worker.state === "active"
|
|
7
|
+
&& worker.claimId === descriptor.claimId && worker.workerId === descriptor.workerId && worker.worktreeId === descriptor.worktreeId
|
|
8
|
+
&& worker.userId === userId && worker.agent === descriptor.agent && worker.platform === descriptor.platform
|
|
9
|
+
&& worker.machine.id === descriptor.machine.id && worker.machine.name === descriptor.machine.name;
|
|
10
|
+
};
|
|
67
11
|
export const submitWorkerControl = async (options) => {
|
|
68
|
-
const
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
const matches = local.filter((task) => task.serverOrigin === options.serverOrigin);
|
|
12
|
+
const { store, remote, request, signal, coordinator } = options;
|
|
13
|
+
signal.throwIfAborted();
|
|
14
|
+
if (remote.serverOrigin !== options.serverOrigin)
|
|
15
|
+
throw new Error("Worker management must use the configured service origin.");
|
|
16
|
+
const matches = store.listTasks().filter((task) => task.taskId === request.taskId && task.claimId === request.claimId && (request.projectId === undefined || task.projectId === request.projectId));
|
|
74
17
|
if (matches.length > 1)
|
|
75
18
|
throw new Error("The source claim is ambiguous; supply --project.");
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
19
|
+
const source = matches[0];
|
|
20
|
+
let projectId = source?.projectId ?? request.projectId;
|
|
21
|
+
if (projectId === undefined && options.repositories.length === 1)
|
|
22
|
+
projectId = options.repositories[0].project.projectId;
|
|
80
23
|
if (projectId === undefined)
|
|
81
24
|
throw new Error("This claim has no local execution; supply --project to resume it explicitly.");
|
|
82
|
-
const
|
|
83
|
-
const
|
|
25
|
+
const identity = { projectId, taskId: request.taskId, claimId: request.claimId };
|
|
26
|
+
const principal = await remote.currentUserId(signal);
|
|
27
|
+
const observed = await remote.readTask(projectId, request.taskId, signal);
|
|
28
|
+
if (!matchesTask(observed, identity))
|
|
29
|
+
throw new Error("The observed task does not match the requested project and task.");
|
|
84
30
|
const worker = observed.properties.worker;
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
const repository = options.repositories.find((entry) => entry.project.serverOrigin === options.serverOrigin && entry.project.projectId === projectId);
|
|
88
|
-
if (project === null || repository === undefined)
|
|
89
|
-
throw new Error("Resume requires a configured repository and its current agent settings.");
|
|
90
|
-
const pending = options.store.getClaimAttempt(project);
|
|
91
|
-
if (pending !== null) {
|
|
92
|
-
if (pending.taskId !== request.taskId || pending.expectedVersion !== request.version.toString() || pending.userId !== principal)
|
|
93
|
-
throw new Error("An unresolved original claim request cannot be replaced.");
|
|
94
|
-
if (worker?.state === "active" && worker.claimId === pending.claimId && worker.userId === pending.userId && worker.workerId === pending.workerId && worker.worktreeId === pending.worktreeId && worker.agent === pending.configuration.agent) {
|
|
95
|
-
const task = options.store.registerPending({ ...project, taskId: observed.id, claimId: pending.claimId, workerId: pending.workerId, worktreeId: pending.worktreeId }, { kind: "new", configuration: pending.configuration }, now(), principal);
|
|
96
|
-
return { task, message: `Resume grant ${pending.claimId} recovered and committed as pending.` };
|
|
97
|
-
}
|
|
98
|
-
throw new Error(`Resume claim ${pending.claimId} has an unknown outcome; its original request will not be replayed.`);
|
|
99
|
-
}
|
|
100
|
-
if (observed.version !== request.version)
|
|
31
|
+
const exactVersion = () => {
|
|
32
|
+
if (request.kind !== "retry" && observed.version !== request.version)
|
|
101
33
|
throw new Error("The explicit task version no longer matches; make a new decision with the observed version.");
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
const descriptor = { claimId: randomUUID(), workerId: options.workerId, worktreeId: randomUUID(), machine: options.machine, platform: options.platform, agent: repository.configuration.agent };
|
|
106
|
-
options.store.beginClaimAttempt(project, { taskId: request.taskId, claimId: descriptor.claimId, worktreeId: descriptor.worktreeId, workerId: options.workerId, userId: principal, expectedVersion: request.version.toString(), configuration: repository.configuration });
|
|
107
|
-
let grant;
|
|
34
|
+
};
|
|
35
|
+
const confirmMutation = async (submit, applied, description) => {
|
|
36
|
+
signal.throwIfAborted();
|
|
108
37
|
try {
|
|
109
|
-
|
|
38
|
+
const result = await submit();
|
|
39
|
+
if (!applied(result))
|
|
40
|
+
throw new Error(`The ${description} response does not confirm the requested result.`);
|
|
41
|
+
return result;
|
|
110
42
|
}
|
|
111
43
|
catch (error) {
|
|
112
44
|
if (error instanceof ApiError && !error.outcomeUnconfirmed)
|
|
113
|
-
|
|
114
|
-
|
|
45
|
+
throw error;
|
|
46
|
+
let actual;
|
|
47
|
+
try {
|
|
48
|
+
actual = await remote.readTask(projectId, request.taskId, signal);
|
|
49
|
+
}
|
|
50
|
+
catch (readError) {
|
|
51
|
+
throw new AggregateError([error, readError], `The ${description} result is unknown. Reconcile the remote claim before restarting worker run; the request was not replayed.`);
|
|
52
|
+
}
|
|
53
|
+
if (applied(actual))
|
|
54
|
+
return actual;
|
|
55
|
+
throw new Error(`The ${description} result is unknown. Reconcile the remote claim before restarting worker run; the request was not replayed.`, { cause: error });
|
|
115
56
|
}
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
const
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
return { task
|
|
57
|
+
};
|
|
58
|
+
if (request.kind === "resume") {
|
|
59
|
+
exactVersion();
|
|
60
|
+
if (worker === null || worker.state !== "released" || worker.claimId !== request.claimId)
|
|
61
|
+
throw new Error("Resume requires the exact released previous claim.");
|
|
62
|
+
const project = store.getProject(identity);
|
|
63
|
+
const repository = options.repositories.find((entry) => entry.project.projectId === projectId);
|
|
64
|
+
if (project === null || repository === undefined)
|
|
65
|
+
throw new Error("Resume requires a configured repository and its current agent settings.");
|
|
66
|
+
await remote.authorizeControl(projectId, worker.userId, signal);
|
|
67
|
+
const descriptor = { claimId: randomUUID(), workerId: options.workerId, worktreeId: randomUUID(), machine: options.machine, platform: options.platform, agent: repository.configuration.agent };
|
|
68
|
+
options.emit({ kind: "management-request", message: `Resume ${projectId}/${request.taskId}: previousClaimId=${request.claimId}, claimId=${descriptor.claimId}, worktreeId=${descriptor.worktreeId}.` });
|
|
69
|
+
const granted = await confirmMutation(() => remote.resume(projectId, request.taskId, { ...descriptor, version: request.version, previousClaimId: request.claimId }, signal), (task) => matchesGrant(task, identity, descriptor, principal), "resume");
|
|
70
|
+
const task = store.registerPending({ projectId, taskId: granted.id, claimId: descriptor.claimId, agent: descriptor.agent });
|
|
71
|
+
return { task, message: `New resume claim ${task.claimId} committed as pending; worker run will start its new execution.` };
|
|
131
72
|
}
|
|
132
|
-
if (source.status === "done")
|
|
133
|
-
throw new Error("
|
|
134
|
-
if (
|
|
135
|
-
throw new Error("The source claim is no longer the exact active execution
|
|
73
|
+
if (source === undefined || source.status === "done")
|
|
74
|
+
throw new Error("Management requires the original unfinished local execution.");
|
|
75
|
+
if (worker === null || observed.status !== "in_progress" || worker.state !== "active" || worker.claimId !== request.claimId || worker.workerId !== options.workerId || worker.agent !== source.agent)
|
|
76
|
+
throw new Error("The source claim is no longer the exact active execution on this worker.");
|
|
77
|
+
await remote.authorizeControl(projectId, worker.userId, signal);
|
|
136
78
|
if (request.kind === "retry") {
|
|
137
|
-
if (principal !==
|
|
138
|
-
throw new Error("Retry
|
|
139
|
-
|
|
140
|
-
|
|
79
|
+
if (principal !== worker.userId)
|
|
80
|
+
throw new Error("Retry requires the original authenticated execution owner.");
|
|
81
|
+
if (source.status !== "active")
|
|
82
|
+
throw new Error("Only an active original claim may be retried; pending work is started by worker run.");
|
|
83
|
+
signal.throwIfAborted();
|
|
84
|
+
await coordinator.advanceRetry(identity);
|
|
85
|
+
return { task: store.getTask(identity), message: `One recovery attempt completed for claim ${request.claimId}; worker run will connect its actual resources.` };
|
|
141
86
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
source = existing?.submission === "rejected" ? options.store.replaceRejectedControlIntent(source, intent, { observedVersion: observed.version }, now()) : options.store.recordControlIntent(source, intent, now());
|
|
149
|
-
return { task: source, message: `${intent.kind} intent persisted for claim ${source.claimId}; source cleanup must finish before the remote write.` };
|
|
87
|
+
exactVersion();
|
|
88
|
+
signal.throwIfAborted();
|
|
89
|
+
const owner = await coordinator.cleanupSource(identity, { deleteWorktree: false });
|
|
90
|
+
await confirmMutation(() => remote.release(projectId, request.taskId, { claimId: request.claimId, version: request.version, stoppedConfirmed: true }, signal), (task) => matchesTask(task, identity) && task.status === "todo" && task.properties.worker?.claimId === request.claimId && task.properties.worker.state === "released", "release");
|
|
91
|
+
await coordinator.completeSource(owner);
|
|
92
|
+
return { task: store.getTask(identity), message: `${request.kind} completed for claim ${request.claimId}; its local resources were removed.` };
|
|
150
93
|
};
|
|
151
94
|
//# sourceMappingURL=control.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../src/commands/worker/control.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AAa/C,MAAM,OAAO,GAAG,CAAC,IAAe,EAAW,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,YAAY,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,IAAI,IAAI,CAAC,OAAO,CAAC,eAAe,CAAC;AAC7M,MAAM,OAAO,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACnG,MAAM,YAAY,GAAG,CAAC,IAAU,EAAE,OAAe,EAAW,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,OAAO,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC;AACxJ,MAAM,OAAO,GAAG,CAAC,IAAU,EAAE,MAAqB,EAAW,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,SAAS;IACvF,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,UAAU;IACzG,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,KAAK,MAAM,CAAC,aAAa,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,CAAC,MAAM,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,QAAQ,KAAK,MAAM,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,UAAU,KAAK,MAAM,CAAC,MAAM,CAAC,UAAU,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC;AAE5V,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,OAA8F,EAAE,EAAE,CAAC,CAAC;IAC5I,OAAO,EAAE,KAAK,EAAE,KAAgB,EAAE,MAAmB,EAAE,IAAI,GAAwB,EAAE,MAAM,EAAE,IAAI,EAAE,EAAsB,EAAE;QACzH,IAAI,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;QACxC,IAAI,IAAI,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAChF,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,IAAI,CAAC;QACnF,IAAI,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY;YAAE,OAAO,IAAI,CAAC;QAC5D,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,iEAAiE,CAAC,CAAC;QAC7G,IAAI,IAAI,CAAC,OAAO,CAAC,UAAU,KAAK,WAAW;YAAE,OAAO,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS;gBACpF,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,aAAc,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC;gBACrH,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,eAAe,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjI,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;QACnC,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QACpF,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;QACtF,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,MAAM,KAAK,IAAI;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAClF,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;YAAE,OAAO,MAAM,CAAC;QAC5C,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;YAAE,MAAM,IAAI,KAAK,CAAC,4EAA4E,CAAC,CAAC;QAC/L,IAAI,GAAG,MAAM,CAAC;QACd,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAC1C,IAAI,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC,OAAQ,CAAC,UAAU,KAAK,SAAS;gBAAE,OAAO,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACpK,OAAO,OAAO,CAAC,KAAK,CAAC,oBAAoB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,OAAO,IAAI,IAAI,EAAE,aAAa,EAAE,QAAQ,CAAC,UAAU,CAAC,MAAM,EAAE,KAAK,IAAI,IAAI,EAAE,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACrM,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,MAAM,IAAI,IAAI,CAAC,OAAQ,CAAC,UAAU,KAAK,eAAe;YAAE,OAAO,IAAI,CAAC;QAC9E,IAAI,CAAC;YAAC,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAAC,CAAC;QAChG,OAAO,KAAK,EAAE,CAAC;YACb,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,SAAS,IAAI,MAAM,CAAC,OAAO,CAAC,UAAU,KAAK,WAAW,CAAC;gBAAE,OAAO,MAAM,CAAC;YAC3O,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,KAAK,SAAS;gBACtC,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC;gBACvJ,CAAC,CAAC,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,aAAa,EAAE,MAAM,EAAE,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;YAC7Y,OAAO,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QAC3F,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;YAC5C,IAAI,OAAO,EAAE,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,OAAO,EAAE,UAAU,KAAK,WAAW;gBAAE,OAAO,OAAO,CAAC;YAC9F,IAAI,KAAK,YAAY,QAAQ,IAAI,CAAC,KAAK,CAAC,kBAAkB;gBAAE,OAAO,CAAC,KAAK,CAAC,uBAAuB,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;YACvI,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,mBAAmB,GAAG,KAAK,EAAE,OAGzC,EAAwD,EAAE;IACzD,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC;IAChC,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,IAAI,IAAI,CAAC,SAAS,KAAK,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC;IAC1M,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,+GAA+G,CAAC,CAAC;IACvM,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,CAAC,CAAC;IACnF,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,kDAAkD,CAAC,CAAC;IAC5F,IAAI,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;IACxB,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ;QAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;IAC9I,MAAM,SAAS,GAAG,MAAM,EAAE,SAAS,IAAI,OAAO,CAAC,SAAS,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAE,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;IACzJ,IAAI,SAAS,KAAK,SAAS;QAAE,MAAM,IAAI,KAAK,CAAC,8EAA8E,CAAC,CAAC;IAC7H,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IACrE,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC1F,MAAM,MAAM,GAAG,QAAQ,CAAC,UAAU,CAAC,MAAM,CAAC;IAC1C,IAAI,OAAO,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,EAAE,YAAY,EAAE,OAAO,CAAC,YAAY,EAAE,SAAS,EAAE,CAAC,CAAC;QAC5F,MAAM,UAAU,GAAG,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,KAAK,OAAO,CAAC,YAAY,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC;QACtJ,IAAI,OAAO,KAAK,IAAI,IAAI,UAAU,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,yEAAyE,CAAC,CAAC;QAC7I,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;QACvD,IAAI,OAAO,KAAK,IAAI,EAAE,CAAC;YACrB,IAAI,OAAO,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,eAAe,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,OAAO,CAAC,MAAM,KAAK,SAAS;gBAAE,MAAM,IAAI,KAAK,CAAC,0DAA0D,CAAC,CAAC;YAC7M,IAAI,MAAM,EAAE,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,IAAI,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,QAAQ,IAAI,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;gBAC7O,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,OAAO,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;gBAC/O,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,gBAAgB,OAAO,CAAC,OAAO,sCAAsC,EAAE,CAAC;YAClG,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,gBAAgB,OAAO,CAAC,OAAO,qEAAqE,CAAC,CAAC;QACxH,CAAC;QACD,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;QACzJ,IAAI,MAAM,EAAE,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QAC9I,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAC3F,MAAM,UAAU,GAAG,EAAE,OAAO,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,KAAK,EAAE,UAAU,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAChM,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,OAAO,EAAE,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,eAAe,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,CAAC,CAAC;QAC1Q,IAAI,KAAW,CAAC;QAChB,IAAI,CAAC;YAAC,KAAK,GAAG,MAAM,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,MAAM,EAAE,EAAE,GAAG,UAAU,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,eAAe,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;QAAC,CAAC;QACtK,OAAO,KAAK,EAAE,CAAC;YACb,IAAI,KAAK,YAAY,QAAQ,IAAI,CAAC,KAAK,CAAC,kBAAkB;gBAAE,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC,EAAE,iBAAiB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;YACzM,MAAM,KAAK,CAAC;QACd,CAAC;QACD,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS;YAAE,MAAM,IAAI,KAAK,CAAC,sGAAsG,CAAC,CAAC;QAC3K,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,eAAe,CAAC,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,EAAE,QAAQ,EAAE,UAAU,CAAC,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,UAAU,EAAE,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,aAAa,EAAE,UAAU,CAAC,aAAa,EAAE,EAAE,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;QAC9P,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,oBAAoB,IAAI,CAAC,OAAO,mEAAmE,EAAE,CAAC;IAChI,CAAC;IACD,IAAI,MAAM,KAAK,SAAS,IAAI,MAAM,CAAC,MAAM,KAAK,IAAI;QAAE,MAAM,IAAI,KAAK,CAAC,+EAA+E,CAAC,CAAC;IACrJ,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3F,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC;IAChC,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,IAAI,QAAQ,KAAK,IAAI,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU,EAAE,CAAC;QACxF,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC;QAC/B,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,IAAI,KAAK,UAAU,IAAI,CAAC,MAAM,CAAC,IAAI,KAAK,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,KAAK,KAAK,OAAO,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,QAAQ,KAAK,OAAO,CAAC,MAAM,CAAC,QAAQ,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;QACtc,IAAI,CAAC,YAAY;YAAE,MAAM,IAAI,KAAK,CAAC,mGAAmG,CAAC,CAAC;QACxI,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,MAAM,CAAC,IAAI,8BAA8B,MAAM,CAAC,OAAO,gBAAgB,QAAQ,CAAC,UAAU,GAAG,EAAE,CAAC;IAC9I,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM;QAAE,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;IACnG,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,MAAO,CAAC,MAAM,KAAK,MAAM,CAAC,MAAM,IAAI,MAAO,CAAC,QAAQ,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAO,CAAC,UAAU,KAAK,MAAM,CAAC,UAAU;QAAE,MAAM,IAAI,KAAK,CAAC,4GAA4G,CAAC,CAAC;IACpS,IAAI,OAAO,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAI,SAAS,KAAK,MAAM,CAAC,MAAM;YAAE,MAAM,IAAI,KAAK,CAAC,+DAA+D,CAAC,CAAC;QAClH,MAAM,IAAI,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,MAAM,EAAE,MAAM,CAAC,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;QAC/F,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,wDAAwD,IAAI,CAAC,OAAO,qBAAqB,IAAI,CAAC,QAAQ,CAAC,KAAK,GAAG,EAAE,CAAC;IAC5I,CAAC;IACD,IAAI,QAAQ,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6FAA6F,CAAC,CAAC;IACzJ,IAAI,OAAO,CAAC,IAAI,KAAK,UAAU;QAAE,MAAM,OAAO,CAAC,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IACxI,MAAM,MAAM,GAAkB,OAAO,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE;QAChJ,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,aAAa,EAAE,UAAU,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,OAAO,CAAC,MAAM,EAAE,UAAU,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;IACnL,MAAM,GAAG,QAAQ,EAAE,UAAU,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,MAAM,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,QAAQ,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC,CAAC;IACnN,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,CAAC,IAAI,+BAA+B,MAAM,CAAC,OAAO,uDAAuD,EAAE,CAAC;AACvJ,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"control.js","sourceRoot":"","sources":["../../../src/commands/worker/control.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import type { TaskPlatform, WorkerMachine } from "../../api/types.js";
|
|
2
2
|
import type { WorkerEvent, WorkerGitManager } from "./execution.js";
|
|
3
3
|
import type { WorkerHerdrAdapter } from "./herdr.js";
|
|
4
|
+
import type { ManagedAssignment } from "./prompts.js";
|
|
4
5
|
import type { WorkerRemote } from "./remote.js";
|
|
5
6
|
import type { WorkerStore } from "./store.js";
|
|
6
|
-
import type { ClaimIdentity,
|
|
7
|
+
import type { ClaimIdentity, ExecutionConfiguration, ResourceOwner, WorkerProject } from "./types.js";
|
|
7
8
|
export type WorkerRepositoryAssignment = {
|
|
8
9
|
project: WorkerProject;
|
|
9
|
-
configuration:
|
|
10
|
+
configuration: ExecutionConfiguration;
|
|
10
11
|
};
|
|
11
12
|
export type WorkerCoordinatorOptions = {
|
|
12
13
|
store: WorkerStore;
|
|
@@ -18,18 +19,19 @@ export type WorkerCoordinatorOptions = {
|
|
|
18
19
|
platform: TaskPlatform;
|
|
19
20
|
machine: WorkerMachine;
|
|
20
21
|
repositories: readonly WorkerRepositoryAssignment[];
|
|
22
|
+
globalConfiguration: ExecutionConfiguration;
|
|
21
23
|
maxConcurrent: number;
|
|
22
|
-
buildPrompt: (
|
|
24
|
+
buildPrompt: (assignment: ManagedAssignment, platform: TaskPlatform) => string;
|
|
23
25
|
emit: (event: WorkerEvent) => void;
|
|
24
26
|
signal?: AbortSignal;
|
|
25
27
|
now?: () => number;
|
|
26
28
|
};
|
|
27
29
|
export declare const createWorkerCoordinator: (options: WorkerCoordinatorOptions) => {
|
|
28
|
-
serializeTask: <T>(identity: Pick<ClaimIdentity, "serverOrigin" | "projectId" | "taskId">, action: () => Promise<T>) => Promise<T>;
|
|
29
|
-
advanceCommittedCleanups: (identity?: ClaimIdentity) => Promise<void>;
|
|
30
|
-
cleanupTask: (identity: ClaimIdentity, kind?: CleanupState["kind"]) => Promise<LocalTask>;
|
|
31
|
-
advanceRetry: (identity: ClaimIdentity) => Promise<LocalTask>;
|
|
32
30
|
tick: () => Promise<void>;
|
|
31
|
+
advanceRetry: (identity: ClaimIdentity) => Promise<void>;
|
|
32
|
+
cleanupSource: (identity: ClaimIdentity, settings?: {
|
|
33
|
+
deleteWorktree?: boolean;
|
|
34
|
+
}) => Promise<ResourceOwner>;
|
|
35
|
+
completeSource: (owner: ResourceOwner) => Promise<void>;
|
|
33
36
|
shutdown: () => Promise<boolean>;
|
|
34
37
|
};
|
|
35
|
-
export type WorkerCoordinator = ReturnType<typeof createWorkerCoordinator>;
|