@frankzhang2026/opencode-android-orchestrator 0.10.0 → 1.0.1
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/CHANGELOG.md +28 -0
- package/README.md +48 -51
- package/dist/cli.js +14 -1
- package/dist/cli.js.map +1 -1
- package/dist/config/android-sdk.d.ts +10 -0
- package/dist/config/android-sdk.d.ts.map +1 -0
- package/dist/config/android-sdk.js +50 -0
- package/dist/config/android-sdk.js.map +1 -0
- package/dist/config/queue-policy.d.ts +12 -0
- package/dist/config/queue-policy.d.ts.map +1 -0
- package/dist/config/queue-policy.js +18 -0
- package/dist/config/queue-policy.js.map +1 -0
- package/dist/config/verification-policy.d.ts +8 -3
- package/dist/config/verification-policy.d.ts.map +1 -1
- package/dist/config/verification-policy.js +48 -14
- package/dist/config/verification-policy.js.map +1 -1
- package/dist/doctor/index.d.ts.map +1 -1
- package/dist/doctor/index.js +3 -49
- package/dist/doctor/index.js.map +1 -1
- package/dist/doctor/installation.d.ts.map +1 -1
- package/dist/doctor/installation.js +3 -0
- package/dist/doctor/installation.js.map +1 -1
- package/dist/installer/adaptive-templates.d.ts +3 -1
- package/dist/installer/adaptive-templates.d.ts.map +1 -1
- package/dist/installer/adaptive-templates.js +2 -0
- package/dist/installer/adaptive-templates.js.map +1 -1
- package/dist/installer/install-manifest.d.ts +1 -0
- package/dist/installer/install-manifest.d.ts.map +1 -1
- package/dist/installer/install-manifest.js +6 -1
- package/dist/installer/install-manifest.js.map +1 -1
- package/dist/installer/opencode-config.d.ts +3 -3
- package/dist/installer/opencode-config.d.ts.map +1 -1
- package/dist/installer/opencode-config.js +1 -1
- package/dist/installer/opencode-config.js.map +1 -1
- package/dist/installer/uninstall.d.ts.map +1 -1
- package/dist/installer/uninstall.js +5 -0
- package/dist/installer/uninstall.js.map +1 -1
- package/dist/installer/upgrade.d.ts.map +1 -1
- package/dist/installer/upgrade.js +13 -1
- package/dist/installer/upgrade.js.map +1 -1
- package/dist/plugin/index.d.ts.map +1 -1
- package/dist/plugin/index.js +11 -5
- package/dist/plugin/index.js.map +1 -1
- package/dist/queue/approvals.d.ts +49 -0
- package/dist/queue/approvals.d.ts.map +1 -0
- package/dist/queue/approvals.js +68 -0
- package/dist/queue/approvals.js.map +1 -0
- package/dist/queue/cli.d.ts +3 -0
- package/dist/queue/cli.d.ts.map +1 -0
- package/dist/queue/cli.js +115 -0
- package/dist/queue/cli.js.map +1 -0
- package/dist/queue/executor.d.ts +24 -0
- package/dist/queue/executor.d.ts.map +1 -0
- package/dist/queue/executor.js +445 -0
- package/dist/queue/executor.js.map +1 -0
- package/dist/queue/lifecycle.d.ts +3 -0
- package/dist/queue/lifecycle.d.ts.map +1 -0
- package/dist/queue/lifecycle.js +24 -0
- package/dist/queue/lifecycle.js.map +1 -0
- package/dist/queue/queue.d.ts +171 -0
- package/dist/queue/queue.d.ts.map +1 -0
- package/dist/queue/queue.js +506 -0
- package/dist/queue/queue.js.map +1 -0
- package/dist/queue/service.d.ts +15 -0
- package/dist/queue/service.d.ts.map +1 -0
- package/dist/queue/service.js +152 -0
- package/dist/queue/service.js.map +1 -0
- package/dist/queue/storage.d.ts +32 -0
- package/dist/queue/storage.d.ts.map +1 -0
- package/dist/queue/storage.js +180 -0
- package/dist/queue/storage.js.map +1 -0
- package/dist/queue/tools.d.ts +12 -0
- package/dist/queue/tools.d.ts.map +1 -0
- package/dist/queue/tools.js +155 -0
- package/dist/queue/tools.js.map +1 -0
- package/docs/MIGRATION.md +32 -11
- package/docs/QUEUE.md +151 -0
- package/docs/SECURITY.md +38 -31
- package/docs/TROUBLESHOOTING.md +34 -11
- package/package.json +1 -1
- package/templates/.opencode/agents/scheduled-planner.md +64 -131
- package/templates/.opencode/commands/abort-task.md +6 -15
- package/templates/.opencode/commands/acceptance.md +6 -15
- package/templates/.opencode/commands/change.md +3 -1
- package/templates/.opencode/commands/resume-review.md +6 -14
- package/templates/.opencode/commands/resume-task.md +6 -23
- package/templates/.opencode/skills/scheduled-quality-orchestrator/SKILL.md +72 -248
- package/templates/AGENTS.md.fragment +8 -0
- package/templates/automation/config.json +8 -2
- package/templates/automation/config.schema.json +218 -46
- package/templates/scripts/automation/abort-task.sh +2 -1
- package/templates/scripts/automation/accept-and-integrate.sh +5 -0
- package/templates/scripts/automation/acceptance-report.sh +4 -2
- package/templates/scripts/automation/approve-and-run.sh +4 -0
- package/templates/scripts/automation/begin-review.sh +1 -0
- package/templates/scripts/automation/block-task.sh +1 -0
- package/templates/scripts/automation/claim-task.sh +1 -0
- package/templates/scripts/automation/lib.sh +94 -1
- package/templates/scripts/automation/orchestrate-task.sh +11 -0
- package/templates/scripts/automation/preflight.sh +14 -4
- package/templates/scripts/automation/prepare-contract-review.sh +4 -0
- package/templates/scripts/automation/quality-gate.sh +1 -0
- package/templates/scripts/automation/record-red.sh +1 -0
- package/templates/scripts/automation/resume-review-fix.sh +1 -0
- package/templates/scripts/automation/resume-review.sh +1 -0
- package/templates/scripts/automation/resume-task.sh +1 -0
- package/templates/scripts/automation/scope-gate.sh +10 -2
- package/templates/scripts/automation/submit-review.sh +8 -2
- package/templates/scripts/automation/verify-task.sh +13 -0
|
@@ -0,0 +1,506 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
import { spawnSync } from "node:child_process";
|
|
3
|
+
import { existsSync } from "node:fs";
|
|
4
|
+
import { join } from "node:path";
|
|
5
|
+
import { atomicJson, fileLock, git, gitBuffer, invariant, isAlive, processGroupAlive, processIdentity, readJson, sha256, QueueStorage, } from "./storage.js";
|
|
6
|
+
import { queuePolicy } from "../config/queue-policy.js";
|
|
7
|
+
const TERMINAL = new Set(["COMPLETED", "CANCELLED", "ABORTED", "SUPERSEDED"]);
|
|
8
|
+
const STOPPED = new Set(["AWAITING_HUMAN", "READY_TO_COMMIT", "BLOCKED", "TEST_FAILED", "NEEDS_HUMAN", "INTEGRATION_BLOCKED", "BASELINE_REVIEW"]);
|
|
9
|
+
const SNAPSHOT_RESPONSE_MAX_BYTES = 16 * 1024;
|
|
10
|
+
const SNAPSHOT_LIST_DEFAULT_LIMIT = 50;
|
|
11
|
+
const SNAPSHOT_LIST_MAX_LIMIT = 200;
|
|
12
|
+
const SNAPSHOT_READ_TARGET_BYTES = 8 * 1024;
|
|
13
|
+
export const TASK_ID = /^TASK-[A-Z0-9-]+$/;
|
|
14
|
+
export function now() { return new Date().toISOString(); }
|
|
15
|
+
function snapshotCursor(value) {
|
|
16
|
+
return Buffer.from(JSON.stringify(value), "utf8").toString("base64url");
|
|
17
|
+
}
|
|
18
|
+
function parseSnapshotCursor(value) {
|
|
19
|
+
try {
|
|
20
|
+
return JSON.parse(Buffer.from(value, "base64url").toString("utf8"));
|
|
21
|
+
}
|
|
22
|
+
catch {
|
|
23
|
+
throw new Error("Invalid snapshot cursor");
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
export function matchesPath(pattern, path) {
|
|
27
|
+
const expression = pattern.replace(/[.+^${}()|[\]\\]/g, "\\$&")
|
|
28
|
+
.replace(/\*\*/g, "\u0001").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]")
|
|
29
|
+
.replace(/\u0001\//g, "(?:.*/)?").replace(/\u0001/g, ".*");
|
|
30
|
+
return new RegExp(`^${expression}${pattern.endsWith("/") ? ".*" : ""}$`).test(path);
|
|
31
|
+
}
|
|
32
|
+
export function validateContract(contract, config) {
|
|
33
|
+
invariant(TASK_ID.test(String(contract.id)), "Invalid task ID");
|
|
34
|
+
invariant([1, 2, 3].includes(Number(contract.schemaVersion)), "Unsupported contract schema");
|
|
35
|
+
invariant(contract.designApproved === true && contract.ambiguityPolicy === "BLOCKED", "An approved, bounded design is required");
|
|
36
|
+
invariant(typeof contract.title === "string" && contract.title.length > 0, "Contract title is required");
|
|
37
|
+
invariant(contract.planPath === `docs/plans/${contract.id}.md`, "Plan must use the task-specific docs/plans path");
|
|
38
|
+
invariant(Number.isInteger(contract.maxChangedFiles) && Number(contract.maxChangedFiles) >= 1 && Number(contract.maxChangedFiles) <= 12, "Invalid file limit");
|
|
39
|
+
invariant(Number.isInteger(contract.maxFixLoops) && Number(contract.maxFixLoops) >= 0 && Number(contract.maxFixLoops) <= 1, "Invalid fix-loop limit");
|
|
40
|
+
for (const key of ["allowedPaths", "forbiddenPaths", "acceptanceCriteria", "nonGoals"]) {
|
|
41
|
+
invariant(Array.isArray(contract[key]) && contract[key].length > 0 && contract[key].every(value => typeof value === "string" && value.length > 0), `Invalid ${key}`);
|
|
42
|
+
}
|
|
43
|
+
const allowed = contract.allowedPaths;
|
|
44
|
+
const forbidden = contract.forbiddenPaths;
|
|
45
|
+
for (const path of [...allowed, ...forbidden])
|
|
46
|
+
invariant(/^[A-Za-z0-9._/?*-]+$/.test(path) && !path.startsWith("/") && !path.includes(".."), "Unsafe contract path");
|
|
47
|
+
for (const path of config.protectedPaths) {
|
|
48
|
+
invariant(!allowed.some(pattern => matchesPath(pattern, path)), `Allowed paths overlap protected path: ${path}`);
|
|
49
|
+
invariant(forbidden.some(pattern => matchesPath(pattern, path)), `Forbidden paths must cover: ${path}`);
|
|
50
|
+
}
|
|
51
|
+
const skills = contract.schemaVersion === 1 ? contract.allowedSuperpowers : contract.allowedWorkflowSkills;
|
|
52
|
+
const expected = ["test-driven-development", "systematic-debugging", "verification-before-completion"].map(skill => contract.schemaVersion === 1 ? skill : `android-orchestrator-${skill}`);
|
|
53
|
+
invariant(JSON.stringify(skills) === JSON.stringify(expected), "Invalid workflow skill allowlist");
|
|
54
|
+
invariant(Array.isArray(contract.targetTests) && contract.targetTests.length > 0, "Focused tests are required");
|
|
55
|
+
for (const target of contract.targetTests) {
|
|
56
|
+
invariant(target && typeof target === "object" && typeof target.gradleTask === "string" && config.gradleVerification.focusedTestTasks.includes(target.gradleTask), "Focused test task is not configured");
|
|
57
|
+
invariant(typeof target.filter === "string" && /^[A-Za-z0-9_.#$*-]+$/.test(target.filter), "Unsafe test filter");
|
|
58
|
+
}
|
|
59
|
+
invariant(typeof contract.deviceTestsRequired === "boolean", "Missing device-test policy");
|
|
60
|
+
invariant(contract.testPolicy === "required" || (contract.testPolicy === "not-required" && typeof contract.testPolicyReason === "string" && contract.testPolicyReason.length >= 20), "Missing test policy");
|
|
61
|
+
invariant(!/replace with|TASK-EXAMPLE|\btodo\b|\btbd\b|placeholder/i.test(JSON.stringify(contract)), "Contract contains placeholders");
|
|
62
|
+
}
|
|
63
|
+
function draftDigest(draft) {
|
|
64
|
+
const { digest: _digest, ...sealed } = draft;
|
|
65
|
+
return sha256(JSON.stringify(sealed));
|
|
66
|
+
}
|
|
67
|
+
export function draftFromItem(item) {
|
|
68
|
+
const { sequence: _sequence, approvedAt: _approvedAt, authorization: _authorization, state: _state, waitingReason: _waitingReason, runId: _runId, taskRoot: _taskRoot, request: _request, sealedDiff: _sealedDiff, sealedRunId: _sealedRunId, candidateId: _candidateId, completedCommit: _commit, approvedWorkspaceStrategy, queuePriority: _priority, ...draft } = item;
|
|
69
|
+
return { ...draft, workspaceStrategy: approvedWorkspaceStrategy };
|
|
70
|
+
}
|
|
71
|
+
export function assertAuthorized(item) {
|
|
72
|
+
invariant(!item.authorization.revoked, "Contract authorization was revoked");
|
|
73
|
+
invariant(item.digest === draftDigest(draftFromItem(item)) && item.digest === item.authorization.digest, "Approved contract or scheduling policy changed; fresh approval required");
|
|
74
|
+
invariant(item.authorization.commitPolicy === item.commitPolicy && item.authorization.pushAfterAcceptance === false, "Invalid sealed commit or no-push authorization");
|
|
75
|
+
invariant(sha256(item.contractText) === item.contractSha256 && sha256(item.plan) === item.planSha256, "Approved artifacts changed");
|
|
76
|
+
invariant(JSON.stringify(JSON.parse(item.contractText)) === JSON.stringify(item.contract), "Contract text and metadata disagree");
|
|
77
|
+
invariant(item.workspaceStrategy !== "isolatedWorktree" || item.commitPolicy === "humanApproval", "isolatedWorktree + autoCommit is unsupported");
|
|
78
|
+
}
|
|
79
|
+
export class TaskQueue {
|
|
80
|
+
storage;
|
|
81
|
+
constructor(directory) {
|
|
82
|
+
this.storage = new QueueStorage(directory, () => ({ schemaVersion: 1, sequence: 0, paused: false, fault: null, strategy: null, drafts: [], items: [], active: null, runs: [], notifications: [] }));
|
|
83
|
+
}
|
|
84
|
+
config() {
|
|
85
|
+
const config = readJson(join(this.storage.root, "automation/config.json"));
|
|
86
|
+
invariant(config.schemaVersion === 6, "Queue execution requires an upgraded schema V6 installation");
|
|
87
|
+
invariant(config.enabled && config.mode === "orchestrated", "Automation is not enabled in orchestrated mode");
|
|
88
|
+
invariant(config.pushAfterAcceptance === false, "Remote push is forbidden");
|
|
89
|
+
invariant(["inPlaceExclusive", "isolatedWorktree"].includes(config.workspaceStrategy), "Unsupported workspace strategy");
|
|
90
|
+
invariant(config.commitPolicy === undefined || ["humanApproval", "autoCommit"].includes(config.commitPolicy), "Unsupported commit policy");
|
|
91
|
+
queuePolicy(config);
|
|
92
|
+
return config;
|
|
93
|
+
}
|
|
94
|
+
snapshot(targetBranch) {
|
|
95
|
+
const document = this.storage.read();
|
|
96
|
+
const occupied = document.items.find(item => item.taskRoot && !TERMINAL.has(item.state));
|
|
97
|
+
const branch = targetBranch ?? occupied?.targetBranch ?? git(this.storage.root, ["symbolic-ref", "--short", "HEAD"]);
|
|
98
|
+
git(this.storage.root, ["check-ref-format", `refs/heads/${branch}`]);
|
|
99
|
+
const head = git(this.storage.root, ["rev-parse", "--verify", `refs/heads/${branch}^{commit}`]);
|
|
100
|
+
return { sourceRoot: this.storage.root, targetBranch: branch, planningHead: head };
|
|
101
|
+
}
|
|
102
|
+
sensitive(path) {
|
|
103
|
+
return /(^|\/)(\.env(?:\..*)?|local\.properties)$|\.(jks|keystore)$/.test(path);
|
|
104
|
+
}
|
|
105
|
+
readSnapshot(head, path) {
|
|
106
|
+
invariant(/^[a-f0-9]{40,64}$/.test(head), "A fixed planning commit is required");
|
|
107
|
+
invariant(!path.startsWith("/") && !path.split("/").includes("..") && !path.includes("\0") && !this.sensitive(path), "Snapshot path is not allowed");
|
|
108
|
+
const type = git(this.storage.root, ["cat-file", "-t", `${head}:${path}`]);
|
|
109
|
+
invariant(type === "blob", "Snapshot path must be a file");
|
|
110
|
+
const size = Number(git(this.storage.root, ["cat-file", "-s", `${head}:${path}`]));
|
|
111
|
+
invariant(size <= 1024 * 1024, "Snapshot file exceeds 1 MiB");
|
|
112
|
+
return git(this.storage.root, ["show", `${head}:${path}`]);
|
|
113
|
+
}
|
|
114
|
+
listSnapshot(head, prefix = "", query = "", cursor, limit = SNAPSHOT_LIST_DEFAULT_LIMIT) {
|
|
115
|
+
this.validateSnapshotHead(head);
|
|
116
|
+
this.validateSnapshotPath(prefix, true);
|
|
117
|
+
invariant(!query.includes("\0") && Buffer.byteLength(query, "utf8") <= 256, "Snapshot query is invalid or too long");
|
|
118
|
+
invariant(Number.isInteger(limit) && limit >= 1 && limit <= SNAPSHOT_LIST_MAX_LIMIT, `Snapshot list limit must be 1-${SNAPSHOT_LIST_MAX_LIMIT}`);
|
|
119
|
+
let offset = 0;
|
|
120
|
+
if (cursor) {
|
|
121
|
+
const parsed = parseSnapshotCursor(cursor);
|
|
122
|
+
invariant(parsed.version === 1 && parsed.kind === "list" && parsed.planningHead === head && parsed.prefix === prefix && parsed.query === query && Number.isInteger(parsed.offset) && Number(parsed.offset) >= 0, "Snapshot list cursor does not match this query");
|
|
123
|
+
offset = Number(parsed.offset);
|
|
124
|
+
}
|
|
125
|
+
const args = ["ls-tree", "-r", "-z", "--name-only", head];
|
|
126
|
+
if (prefix)
|
|
127
|
+
args.push("--", prefix);
|
|
128
|
+
const lowerQuery = query.toLowerCase();
|
|
129
|
+
const files = gitBuffer(this.storage.root, args).toString("utf8").split("\0")
|
|
130
|
+
.filter(path => path.length > 0 && !this.sensitive(path) && (!lowerQuery || path.toLowerCase().includes(lowerQuery)));
|
|
131
|
+
invariant(offset <= files.length, "Snapshot list cursor is past the end of the result");
|
|
132
|
+
const pageFiles = [];
|
|
133
|
+
while (offset + pageFiles.length < files.length && pageFiles.length < limit) {
|
|
134
|
+
const path = files[offset + pageFiles.length];
|
|
135
|
+
const candidate = [...pageFiles, path];
|
|
136
|
+
const nextOffset = offset + candidate.length;
|
|
137
|
+
const candidatePage = {
|
|
138
|
+
planningHead: head, prefix, query, files: candidate,
|
|
139
|
+
nextCursor: nextOffset < files.length ? snapshotCursor({ version: 1, kind: "list", planningHead: head, prefix, query, offset: nextOffset }) : null,
|
|
140
|
+
};
|
|
141
|
+
if (Buffer.byteLength(JSON.stringify(candidatePage), "utf8") > SNAPSHOT_RESPONSE_MAX_BYTES)
|
|
142
|
+
break;
|
|
143
|
+
pageFiles.push(path);
|
|
144
|
+
}
|
|
145
|
+
invariant(offset === files.length || pageFiles.length > 0, "A snapshot path exceeds the response byte limit");
|
|
146
|
+
const nextOffset = offset + pageFiles.length;
|
|
147
|
+
return {
|
|
148
|
+
planningHead: head, prefix, query, files: pageFiles,
|
|
149
|
+
nextCursor: nextOffset < files.length ? snapshotCursor({ version: 1, kind: "list", planningHead: head, prefix, query, offset: nextOffset }) : null,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
readSnapshotChunk(head, path, cursor) {
|
|
153
|
+
this.validateSnapshotHead(head);
|
|
154
|
+
this.validateSnapshotPath(path, false);
|
|
155
|
+
invariant(!this.sensitive(path), "Snapshot path is not allowed");
|
|
156
|
+
const type = git(this.storage.root, ["cat-file", "-t", `${head}:${path}`]);
|
|
157
|
+
invariant(type === "blob", "Snapshot path must be a file");
|
|
158
|
+
const content = gitBuffer(this.storage.root, ["show", `${head}:${path}`]);
|
|
159
|
+
invariant(content.length <= 1024 * 1024, "Snapshot file exceeds 1 MiB");
|
|
160
|
+
new TextDecoder("utf-8", { fatal: true }).decode(content);
|
|
161
|
+
let offset = 0;
|
|
162
|
+
if (cursor) {
|
|
163
|
+
const parsed = parseSnapshotCursor(cursor);
|
|
164
|
+
invariant(parsed.version === 1 && parsed.kind === "read" && parsed.planningHead === head && parsed.path === path && Number.isInteger(parsed.offset) && Number(parsed.offset) >= 0, "Snapshot read cursor does not match this file");
|
|
165
|
+
offset = Number(parsed.offset);
|
|
166
|
+
}
|
|
167
|
+
invariant(offset <= content.length && (offset === content.length || offset === 0 || (content[offset] & 0xc0) !== 0x80), "Snapshot read cursor is not at a UTF-8 boundary");
|
|
168
|
+
let end = Math.min(content.length, offset + SNAPSHOT_READ_TARGET_BYTES);
|
|
169
|
+
while (end < content.length && (content[end] & 0xc0) === 0x80)
|
|
170
|
+
end -= 1;
|
|
171
|
+
let chunk = content.subarray(offset, end).toString("utf8");
|
|
172
|
+
while (end > offset) {
|
|
173
|
+
const candidate = {
|
|
174
|
+
planningHead: head, path, content: chunk,
|
|
175
|
+
nextCursor: end < content.length ? snapshotCursor({ version: 1, kind: "read", planningHead: head, path, offset: end }) : null,
|
|
176
|
+
};
|
|
177
|
+
if (Buffer.byteLength(JSON.stringify(candidate), "utf8") <= SNAPSHOT_RESPONSE_MAX_BYTES)
|
|
178
|
+
return candidate;
|
|
179
|
+
end -= 1;
|
|
180
|
+
while (end > offset && (content[end] & 0xc0) === 0x80)
|
|
181
|
+
end -= 1;
|
|
182
|
+
chunk = content.subarray(offset, end).toString("utf8");
|
|
183
|
+
}
|
|
184
|
+
invariant(offset === content.length, "Snapshot content exceeds the response byte limit");
|
|
185
|
+
return { planningHead: head, path, content: "", nextCursor: null };
|
|
186
|
+
}
|
|
187
|
+
validateSnapshotHead(head) {
|
|
188
|
+
invariant(/^[a-f0-9]{40,64}$/.test(head), "A fixed planning commit is required");
|
|
189
|
+
git(this.storage.root, ["cat-file", "-e", `${head}^{commit}`]);
|
|
190
|
+
}
|
|
191
|
+
validateSnapshotPath(path, allowEmpty) {
|
|
192
|
+
invariant((allowEmpty || path.length > 0) && !path.includes("\0") && !path.startsWith("/") && Buffer.byteLength(path, "utf8") <= 4096, "Snapshot path is invalid or too long");
|
|
193
|
+
invariant(!path.split(/[\\/]/).some(part => part === ".." || part === ".git"), "Snapshot path is not allowed");
|
|
194
|
+
}
|
|
195
|
+
draft(input, proposalApproval) {
|
|
196
|
+
const config = this.config();
|
|
197
|
+
validateContract(input.contract, config);
|
|
198
|
+
invariant(input.plan.trim().length >= 20 && Buffer.byteLength(input.plan) <= 1024 * 1024, "A complete plan of at most 1 MiB is required");
|
|
199
|
+
invariant(/^[a-f0-9]{40,64}$/.test(input.planningHead), "A fixed planning commit is required");
|
|
200
|
+
git(this.storage.root, ["check-ref-format", `refs/heads/${input.targetBranch}`]);
|
|
201
|
+
git(this.storage.root, ["merge-base", "--is-ancestor", input.planningHead, `refs/heads/${input.targetBranch}`]);
|
|
202
|
+
const workspaceStrategy = input.workspaceStrategy ?? config.workspaceStrategy;
|
|
203
|
+
// Missing policy always retains human acceptance, irrespective of defaults.
|
|
204
|
+
const commitPolicy = input.commitPolicy ?? "humanApproval";
|
|
205
|
+
invariant(["inPlaceExclusive", "isolatedWorktree"].includes(workspaceStrategy), "Invalid workspace strategy");
|
|
206
|
+
invariant(["humanApproval", "autoCommit"].includes(commitPolicy), "Invalid commit policy");
|
|
207
|
+
invariant(workspaceStrategy === "inPlaceExclusive" || commitPolicy === "humanApproval", "isolatedWorktree + autoCommit is unsupported");
|
|
208
|
+
const dependencies = input.dependsOn ?? [];
|
|
209
|
+
invariant(dependencies.every(id => TASK_ID.test(id) && id !== input.contract.id) && new Set(dependencies).size === dependencies.length, "Invalid task dependencies");
|
|
210
|
+
const priority = input.priority ?? 0;
|
|
211
|
+
invariant(Number.isInteger(priority) && priority >= -100 && priority <= 100, "Priority must be an integer from -100 to 100");
|
|
212
|
+
invariant(input.notBefore === undefined || /(?:Z|[+-]\d{2}:\d{2})$/.test(input.notBefore), "notBefore must include an explicit timezone offset");
|
|
213
|
+
const notBefore = input.notBefore === undefined ? null : new Date(input.notBefore).toISOString();
|
|
214
|
+
const contractText = `${JSON.stringify(input.contract, null, 2)}\n`;
|
|
215
|
+
return this.storage.transaction(document => {
|
|
216
|
+
const taskId = String(input.contract.id);
|
|
217
|
+
const version = Math.max(0, ...document.drafts.filter(draft => draft.taskId === taskId).map(draft => draft.version)) + 1;
|
|
218
|
+
const sealed = { ...(proposalApproval ? { proposalApproval } : {}), key: `${taskId}@${version}`, taskId, version, contract: input.contract, contractText,
|
|
219
|
+
plan: input.plan, contractSha256: sha256(contractText), planSha256: sha256(input.plan),
|
|
220
|
+
planningHead: input.planningHead, targetBranch: input.targetBranch, sourceRoot: this.storage.root,
|
|
221
|
+
workspaceStrategy, commitPolicy, notBefore, dependsOn: dependencies, priority, createdAt: now() };
|
|
222
|
+
const draft = { ...sealed, digest: draftDigest(sealed) };
|
|
223
|
+
document.drafts.push(draft);
|
|
224
|
+
return draft;
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
approvalText(draft) {
|
|
228
|
+
return draft.commitPolicy === "autoCommit"
|
|
229
|
+
? `批准入队 ${draft.key}:通过构建、全量单测和独立 Review 后自动本地提交并集成,不推送远程。`
|
|
230
|
+
: `批准入队 ${draft.key}:执行后等待人工确认提交,不推送远程。`;
|
|
231
|
+
}
|
|
232
|
+
enqueue(key, digest, approval, proof) {
|
|
233
|
+
this.config();
|
|
234
|
+
return this.storage.transaction(document => {
|
|
235
|
+
const existing = document.items.find(item => item.key === key);
|
|
236
|
+
if (existing) {
|
|
237
|
+
invariant(existing.digest === digest && this.approvalText(existing) === approval, "Repeated approval does not match the sealed contract");
|
|
238
|
+
return existing;
|
|
239
|
+
}
|
|
240
|
+
const draft = document.drafts.find(candidate => candidate.key === key);
|
|
241
|
+
invariant(draft && draft.digest === digest && draftDigest(draft) === digest, "Draft changed; display a fresh contract review");
|
|
242
|
+
invariant(this.approvalText(draft) === approval, "Explicit approval for this version and commit policy is required");
|
|
243
|
+
invariant(!document.items.some(item => item.taskId === draft.taskId && item.state !== "CANCELLED" && item.state !== "SUPERSEDED"), "This task already has an approved execution; use a new task ID or cancel its unstarted version");
|
|
244
|
+
for (const dependency of draft.dependsOn)
|
|
245
|
+
invariant(document.items.some(item => item.taskId === dependency && item.state !== "CANCELLED"), `Approve dependency first: ${dependency}`);
|
|
246
|
+
const item = { ...draft, approvedWorkspaceStrategy: draft.workspaceStrategy, queuePriority: draft.priority,
|
|
247
|
+
sequence: ++document.sequence, approvedAt: now(),
|
|
248
|
+
authorization: { source: "contractApproval", digest, commitPolicy: draft.commitPolicy, pushAfterAcceptance: false, revoked: false, ...(proof ? { proof } : {}) },
|
|
249
|
+
state: "QUEUED", waitingReason: null, runId: null, taskRoot: null, request: null, sealedDiff: null, sealedRunId: null, candidateId: null, completedCommit: null };
|
|
250
|
+
document.items.push(item);
|
|
251
|
+
this.notify(document, item, "Contract approved and durably enqueued");
|
|
252
|
+
return item;
|
|
253
|
+
});
|
|
254
|
+
}
|
|
255
|
+
item(key) {
|
|
256
|
+
const item = this.findItem(this.storage.read(), key);
|
|
257
|
+
invariant(item, `Unknown queued task: ${key}`);
|
|
258
|
+
return item;
|
|
259
|
+
}
|
|
260
|
+
findItem(document, key) {
|
|
261
|
+
return document.items.find(item => item.key === key) ?? [...document.items].reverse().find(item => item.taskId === key);
|
|
262
|
+
}
|
|
263
|
+
reorder(key, priority) {
|
|
264
|
+
invariant(Number.isInteger(priority) && priority >= -100 && priority <= 100, "Priority must be an integer from -100 to 100");
|
|
265
|
+
this.storage.transaction(document => {
|
|
266
|
+
const item = this.findItem(document, key);
|
|
267
|
+
invariant(item?.state === "QUEUED", "Only unstarted queue items may be reordered");
|
|
268
|
+
item.queuePriority = priority;
|
|
269
|
+
});
|
|
270
|
+
}
|
|
271
|
+
setPolicy(workspaceStrategy, commitPolicy) {
|
|
272
|
+
const release = fileLock(join(this.storage.runtime, "locks/lifecycle.lock"));
|
|
273
|
+
try {
|
|
274
|
+
this.storage.transaction(document => {
|
|
275
|
+
invariant(document.paused && !document.active, "Pause the queue and wait for its executor before changing policy");
|
|
276
|
+
invariant(!document.items.some(item => item.taskRoot && !TERMINAL.has(item.state)), "Retained workspaces must complete or abort before a policy change");
|
|
277
|
+
invariant(!existsSync(join(this.storage.runtime, "locks/repository.workspace.lease")), "Repository still has a workspace owner");
|
|
278
|
+
const config = this.config();
|
|
279
|
+
helperFreeCleanCheck(this.storage.root);
|
|
280
|
+
const policy = queuePolicy({ ...config, workspaceStrategy, commitPolicy });
|
|
281
|
+
atomicJson(join(this.storage.root, "automation/config.json"), { ...config, ...policy });
|
|
282
|
+
document.strategy = workspaceStrategy;
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
finally {
|
|
286
|
+
release();
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
recoverExecution() {
|
|
290
|
+
this.storage.transaction(document => {
|
|
291
|
+
const run = document.active;
|
|
292
|
+
invariant(run, "No active execution to recover");
|
|
293
|
+
if (run.worker) {
|
|
294
|
+
invariant(!isAlive(run.worker) && !processGroupAlive(run.worker.pid), "Executor or its children are still alive; preserve the execution slot");
|
|
295
|
+
}
|
|
296
|
+
else {
|
|
297
|
+
invariant(run.launcher && !isAlive(run.launcher), "Execution launcher is still alive or unknown; cannot recover its reservation");
|
|
298
|
+
}
|
|
299
|
+
const item = this.findItem(document, run.key);
|
|
300
|
+
item.state = "BLOCKED";
|
|
301
|
+
item.waitingReason = "Interrupted execution preserved; inspect its workspace, then request resume, abort or commit recovery";
|
|
302
|
+
item.sealedRunId = null;
|
|
303
|
+
this.notify(document, item, item.waitingReason);
|
|
304
|
+
document.runs.push({ ...run, outcome: { state: item.state, error: item.waitingReason } });
|
|
305
|
+
// Invalidate the reservation atomically. A delayed, unregistered worker
|
|
306
|
+
// cannot acquire it after this transaction, even if it starts later.
|
|
307
|
+
document.active = null;
|
|
308
|
+
});
|
|
309
|
+
}
|
|
310
|
+
details(key) {
|
|
311
|
+
const item = this.item(key);
|
|
312
|
+
const evidence = {};
|
|
313
|
+
for (const name of ["acceptance-report", "review", "full-test-verification", "commit-transaction", "integration", "planning-baseline"]) {
|
|
314
|
+
const path = join(this.storage.runtime, "evidence", item.taskId, `${name}.json`);
|
|
315
|
+
if (existsSync(path))
|
|
316
|
+
evidence[name] = readJson(path);
|
|
317
|
+
}
|
|
318
|
+
return { ...item, currentTargetHead: git(item.sourceRoot, ["rev-parse", `refs/heads/${item.targetBranch}`]), evidence };
|
|
319
|
+
}
|
|
320
|
+
notify(document, item, message) {
|
|
321
|
+
const id = sha256(`${item.key}:${item.state}:${item.candidateId}:${item.completedCommit}:${message}`);
|
|
322
|
+
if (!document.notifications.some(notification => notification.id === id))
|
|
323
|
+
document.notifications.push({ id, key: item.key, state: item.state, at: now(), message, sealedDiff: item.sealedDiff, commit: item.completedCommit, pushed: false, acknowledged: false });
|
|
324
|
+
}
|
|
325
|
+
control(action, key) {
|
|
326
|
+
return this.storage.transaction(document => {
|
|
327
|
+
if (action === "pause")
|
|
328
|
+
document.paused = true;
|
|
329
|
+
if (action === "resume")
|
|
330
|
+
document.paused = false;
|
|
331
|
+
if (action === "clear-fault") {
|
|
332
|
+
invariant(!document.active, "Resolve the active execution before clearing a public fault");
|
|
333
|
+
document.fault = null;
|
|
334
|
+
}
|
|
335
|
+
if (action === "acknowledge") {
|
|
336
|
+
const notification = document.notifications.find(notification => notification.id === key);
|
|
337
|
+
invariant(notification, "Unknown notification");
|
|
338
|
+
notification.acknowledged = true;
|
|
339
|
+
}
|
|
340
|
+
if (action === "cancel" || action === "revoke") {
|
|
341
|
+
const item = this.findItem(document, key ?? "");
|
|
342
|
+
invariant(item && !TERMINAL.has(item.state), "No active approval for this task");
|
|
343
|
+
if (action === "cancel") {
|
|
344
|
+
invariant(item.taskRoot === null && document.active?.key !== item.key, "Running or occupied tasks require the approved abort workflow");
|
|
345
|
+
item.state = "CANCELLED";
|
|
346
|
+
}
|
|
347
|
+
item.authorization.revoked = true;
|
|
348
|
+
this.notify(document, item, action === "cancel" ? "Queued task cancelled" : "Commit authorization revoked; preserve workspace");
|
|
349
|
+
}
|
|
350
|
+
return document;
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
request(key, kind, approval, candidate, proof) {
|
|
354
|
+
const config = this.config();
|
|
355
|
+
this.storage.transaction(document => {
|
|
356
|
+
const item = this.findItem(document, key);
|
|
357
|
+
invariant(item && item.taskRoot && !TERMINAL.has(item.state), "Task has no recoverable workspace");
|
|
358
|
+
invariant(document.active?.key !== item.key || kind === "abort", "Task is still running; wait for its recorded process to exit");
|
|
359
|
+
invariant(!item.request || item.request.kind === kind, "An earlier request is already queued for this task");
|
|
360
|
+
if (kind === "integrate") {
|
|
361
|
+
invariant(item.commitPolicy === "humanApproval" && item.state === "AWAITING_HUMAN", "Task is not awaiting human acceptance");
|
|
362
|
+
invariant(candidate && candidate === item.candidateId, "Acceptance must bind to the latest sealed candidate and target baseline");
|
|
363
|
+
invariant(approval === config.approvalPhrases.acceptance, "Explicit final acceptance is required");
|
|
364
|
+
}
|
|
365
|
+
else if (kind !== "recover" && kind !== "revalidate") {
|
|
366
|
+
const phrase = kind === "abort" ? config.approvalPhrases.abort : config.approvalPhrases.resume;
|
|
367
|
+
invariant(approval === phrase, `Explicit ${kind} approval is required`);
|
|
368
|
+
}
|
|
369
|
+
if (kind === "revalidate")
|
|
370
|
+
invariant(item.workspaceStrategy === "isolatedWorktree" && item.state === "AWAITING_HUMAN", "Only a sealed isolated candidate can be revalidated");
|
|
371
|
+
item.request = { kind, approval: approval ?? null, candidate: candidate ?? null, ...(proof ? { proof } : {}) };
|
|
372
|
+
this.notify(document, item, `${kind} requested; waiting for the repository execution slot`);
|
|
373
|
+
});
|
|
374
|
+
}
|
|
375
|
+
reserve() {
|
|
376
|
+
const config = this.config();
|
|
377
|
+
// Disk traversal stays outside the intake transaction.
|
|
378
|
+
const retained = this.storage.read().items.filter(item => item.taskRoot && item.workspaceStrategy === "isolatedWorktree" && existsSync(item.taskRoot));
|
|
379
|
+
let workspaceBytes = 0;
|
|
380
|
+
for (const item of retained) {
|
|
381
|
+
const usage = spawnSync("du", ["-sk", item.taskRoot], { encoding: "utf8" });
|
|
382
|
+
invariant(usage.status === 0, "Cannot measure retained workspace disk usage");
|
|
383
|
+
workspaceBytes += Number(usage.stdout.trim().split(/\s+/)[0]) * 1024;
|
|
384
|
+
}
|
|
385
|
+
return this.storage.transaction(document => {
|
|
386
|
+
if (existsSync(join(this.storage.runtime, "locks/lifecycle.lock")))
|
|
387
|
+
return null;
|
|
388
|
+
if (document.active || document.paused || document.fault)
|
|
389
|
+
return null;
|
|
390
|
+
if (!config.unitTestsEnabled) {
|
|
391
|
+
document.fault = "Queued execution requires full unit tests; enable unitTestsEnabled";
|
|
392
|
+
return null;
|
|
393
|
+
}
|
|
394
|
+
const occupied = document.items.filter(item => item.taskRoot && !TERMINAL.has(item.state));
|
|
395
|
+
if (occupied.some(item => item.workspaceStrategy !== config.workspaceStrategy)) {
|
|
396
|
+
document.fault = "Workspace strategy changed while tasks retain a workspace; restore the recorded strategy";
|
|
397
|
+
return null;
|
|
398
|
+
}
|
|
399
|
+
const fixed = occupied.find(item => item.workspaceStrategy === "inPlaceExclusive");
|
|
400
|
+
const leaseDirectory = join(this.storage.runtime, "locks/repository.workspace.lease");
|
|
401
|
+
if (existsSync(leaseDirectory) && !existsSync(join(leaseDirectory, "lease.json"))) {
|
|
402
|
+
document.fault = "Repository workspace lease is incomplete; recover its ownership before scheduling";
|
|
403
|
+
return null;
|
|
404
|
+
}
|
|
405
|
+
const requests = document.items.filter(item => item.request).sort((a, b) => a.sequence - b.sequence);
|
|
406
|
+
const pending = document.items.filter(item => item.state === "QUEUED").sort((a, b) => b.queuePriority - a.queuePriority || a.sequence - b.sequence);
|
|
407
|
+
for (const item of [...requests, ...pending]) {
|
|
408
|
+
item.waitingReason = null;
|
|
409
|
+
if (fixed && fixed.key !== item.key) {
|
|
410
|
+
item.waitingReason = `Waiting for ${fixed.taskId}: ${fixed.state}`;
|
|
411
|
+
continue;
|
|
412
|
+
}
|
|
413
|
+
if (item.commitPolicy === "autoCommit" && config.workspaceStrategy === "isolatedWorktree") {
|
|
414
|
+
item.waitingReason = "isolatedWorktree + autoCommit is unsupported; fresh contract approval is required";
|
|
415
|
+
continue;
|
|
416
|
+
}
|
|
417
|
+
if (!item.request && item.notBefore && Date.parse(item.notBefore) > Date.now()) {
|
|
418
|
+
item.waitingReason = `Scheduled for ${item.notBefore}`;
|
|
419
|
+
continue;
|
|
420
|
+
}
|
|
421
|
+
const dependency = item.dependsOn.find(id => !document.items.some(candidate => candidate.taskId === id && candidate.state === "COMPLETED"));
|
|
422
|
+
if (dependency && !item.request) {
|
|
423
|
+
item.waitingReason = `Waiting for dependency ${dependency} to complete local integration`;
|
|
424
|
+
continue;
|
|
425
|
+
}
|
|
426
|
+
if (!item.request && config.workspaceStrategy === "isolatedWorktree" && (retained.length >= (config.queue?.maxWorkspaces ?? 3) || workspaceBytes >= (config.queue?.maxWorkspaceBytes ?? 20 * 1024 ** 3))) {
|
|
427
|
+
item.waitingReason = "Isolated workspace capacity or disk limit reached";
|
|
428
|
+
continue;
|
|
429
|
+
}
|
|
430
|
+
try {
|
|
431
|
+
if (item.request?.kind !== "abort")
|
|
432
|
+
assertAuthorized(item);
|
|
433
|
+
}
|
|
434
|
+
catch (error) {
|
|
435
|
+
item.waitingReason = String(error);
|
|
436
|
+
continue;
|
|
437
|
+
}
|
|
438
|
+
// Legacy leases and unknown workspace owners cannot be bypassed.
|
|
439
|
+
const leasePath = join(this.storage.runtime, "locks/repository.workspace.lease/lease.json");
|
|
440
|
+
if (existsSync(leasePath)) {
|
|
441
|
+
const lease = readJson(leasePath);
|
|
442
|
+
if (lease.taskId !== item.taskId) {
|
|
443
|
+
item.waitingReason = `Repository workspace is leased by ${lease.taskId}`;
|
|
444
|
+
continue;
|
|
445
|
+
}
|
|
446
|
+
}
|
|
447
|
+
const launcher = processIdentity(process.pid);
|
|
448
|
+
invariant(launcher, "Cannot establish execution launcher identity");
|
|
449
|
+
const run = { id: randomUUID(), key: item.key, kind: item.request?.kind ?? "execute", createdAt: now(), launcher, worker: null, outcome: null };
|
|
450
|
+
document.active = run;
|
|
451
|
+
document.strategy = config.workspaceStrategy;
|
|
452
|
+
item.runId = run.id;
|
|
453
|
+
item.sealedRunId = null;
|
|
454
|
+
if (run.kind === "execute") {
|
|
455
|
+
item.workspaceStrategy = config.workspaceStrategy;
|
|
456
|
+
item.state = "CLAIMED";
|
|
457
|
+
}
|
|
458
|
+
return run;
|
|
459
|
+
}
|
|
460
|
+
return null;
|
|
461
|
+
});
|
|
462
|
+
}
|
|
463
|
+
reconcile() {
|
|
464
|
+
this.storage.transaction(document => {
|
|
465
|
+
const run = document.active;
|
|
466
|
+
if (!run)
|
|
467
|
+
return;
|
|
468
|
+
const item = document.items.find(item => item.key === run.key);
|
|
469
|
+
invariant(item, "Active execution has no contract");
|
|
470
|
+
if (!run.worker) {
|
|
471
|
+
// A crash between reservation and spawn is ambiguous, never requeue it.
|
|
472
|
+
if (Date.now() - Date.parse(run.createdAt) > 30000)
|
|
473
|
+
document.fault = "Execution launch ownership is unknown; explicit recovery is required";
|
|
474
|
+
return;
|
|
475
|
+
}
|
|
476
|
+
if (isAlive(run.worker) || processGroupAlive(run.worker.pid))
|
|
477
|
+
return;
|
|
478
|
+
if (!run.outcome) {
|
|
479
|
+
item.state = "BLOCKED";
|
|
480
|
+
item.waitingReason = "Executor stopped without a durable outcome; preserve workspace and recover";
|
|
481
|
+
}
|
|
482
|
+
else {
|
|
483
|
+
item.state = run.outcome.state;
|
|
484
|
+
item.waitingReason = run.outcome.error;
|
|
485
|
+
}
|
|
486
|
+
if (run.outcome && item.sealedRunId === run.id && item.workspaceStrategy === "isolatedWorktree" && STOPPED.has(item.state) && item.sealedDiff) {
|
|
487
|
+
// Worker seals while it owns the lease. Only release after its entire
|
|
488
|
+
// process group has exited; never infer this from the shell exit alone.
|
|
489
|
+
const workspacePath = join(this.storage.runtime, "workspaces", `${item.taskId}.json`);
|
|
490
|
+
if (existsSync(workspacePath)) {
|
|
491
|
+
const workspace = readJson(workspacePath);
|
|
492
|
+
atomicJson(workspacePath, { ...workspace, repositoryLeaseRequired: false, executionExited: true });
|
|
493
|
+
}
|
|
494
|
+
}
|
|
495
|
+
if (item.request?.kind === run.kind)
|
|
496
|
+
item.request = null;
|
|
497
|
+
this.notify(document, item, item.waitingReason ?? (item.state === "COMPLETED" ? "Local integration completed; not pushed" : `Task reached ${item.state}`));
|
|
498
|
+
document.runs.push(structuredClone(run));
|
|
499
|
+
document.active = null;
|
|
500
|
+
});
|
|
501
|
+
}
|
|
502
|
+
}
|
|
503
|
+
function helperFreeCleanCheck(root) {
|
|
504
|
+
invariant(git(root, ["status", "--porcelain"]) === "", "Workspace must be clean before changing queue policy");
|
|
505
|
+
}
|
|
506
|
+
//# sourceMappingURL=queue.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"queue.js","sourceRoot":"","sources":["../../src/queue/queue.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { TaskQueue, type QueueRun } from "./queue.js";
|
|
2
|
+
import { type ProcessIdentity } from "./storage.js";
|
|
3
|
+
export declare function serviceStatus(queue: TaskQueue): {
|
|
4
|
+
running: boolean;
|
|
5
|
+
owner: ProcessIdentity | null;
|
|
6
|
+
};
|
|
7
|
+
export declare function startService(queue: TaskQueue): void;
|
|
8
|
+
export declare function wakeService(queue: TaskQueue): void;
|
|
9
|
+
export declare function stopService(queue: TaskQueue): void;
|
|
10
|
+
export declare function runWorker(queue: TaskQueue, runId: string): Promise<void>;
|
|
11
|
+
/** Reconcile persisted outcomes before consuming; a wake carries no authority. */
|
|
12
|
+
export declare function dispatchOnce(queue: TaskQueue): QueueRun | null;
|
|
13
|
+
export declare function releaseStoppedLeases(queue: TaskQueue): void;
|
|
14
|
+
export declare function serve(queue: TaskQueue): Promise<void>;
|
|
15
|
+
//# sourceMappingURL=service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../src/queue/service.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,SAAS,EAAE,KAAK,QAAQ,EAAE,MAAM,YAAY,CAAC;AACtD,OAAO,EAAoF,KAAK,eAAe,EAAE,MAAM,cAAc,CAAC;AAMtI,wBAAgB,aAAa,CAAC,KAAK,EAAE,SAAS,GAAG;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,eAAe,GAAG,IAAI,CAAA;CAAE,CAInG;AAiBD,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAYnD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAElD;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAGlD;AAED,wBAAsB,SAAS,CAAC,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAe9E;AAED,kFAAkF;AAClF,wBAAgB,YAAY,CAAC,KAAK,EAAE,SAAS,GAAG,QAAQ,GAAG,IAAI,CAM9D;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,SAAS,GAAG,IAAI,CAe3D;AAED,wBAAsB,KAAK,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CA2C3D"}
|