codex-orchestrator 0.1.48 → 0.1.50

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (92) hide show
  1. package/CHANGELOG.md +41 -0
  2. package/README.md +22 -2
  3. package/bridge-runtime.json +2719 -0
  4. package/dist/src/bridge-runtime.d.ts +17 -0
  5. package/dist/src/bridge-runtime.d.ts.map +1 -0
  6. package/dist/src/bridge-runtime.js +168 -0
  7. package/dist/src/bridge-runtime.js.map +1 -0
  8. package/dist/src/cli.js +6 -1
  9. package/dist/src/cli.js.map +1 -1
  10. package/dist/src/fs/durable-atomic-file.d.ts +2 -0
  11. package/dist/src/fs/durable-atomic-file.d.ts.map +1 -0
  12. package/dist/src/fs/durable-atomic-file.js +33 -0
  13. package/dist/src/fs/durable-atomic-file.js.map +1 -0
  14. package/dist/src/github/gh-issue-adapter.d.ts +3 -1
  15. package/dist/src/github/gh-issue-adapter.d.ts.map +1 -1
  16. package/dist/src/github/gh-issue-adapter.js +44 -6
  17. package/dist/src/github/gh-issue-adapter.js.map +1 -1
  18. package/dist/src/github/gh-pull-request-adapter.d.ts +3 -1
  19. package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -1
  20. package/dist/src/github/gh-pull-request-adapter.js +74 -0
  21. package/dist/src/github/gh-pull-request-adapter.js.map +1 -1
  22. package/dist/src/github/issues.d.ts +4 -0
  23. package/dist/src/github/issues.d.ts.map +1 -1
  24. package/dist/src/github/issues.js +6 -0
  25. package/dist/src/github/issues.js.map +1 -1
  26. package/dist/src/github/pull-requests.d.ts +9 -0
  27. package/dist/src/github/pull-requests.d.ts.map +1 -1
  28. package/dist/src/github/pull-requests.js +13 -0
  29. package/dist/src/github/pull-requests.js.map +1 -1
  30. package/dist/src/index.d.ts +3 -1
  31. package/dist/src/index.d.ts.map +1 -1
  32. package/dist/src/index.js +1 -0
  33. package/dist/src/index.js.map +1 -1
  34. package/dist/src/runner/command-utils.d.ts +1 -0
  35. package/dist/src/runner/command-utils.d.ts.map +1 -1
  36. package/dist/src/runner/command-utils.js +7 -0
  37. package/dist/src/runner/command-utils.js.map +1 -1
  38. package/dist/src/runner/daemon-command.d.ts.map +1 -1
  39. package/dist/src/runner/daemon-command.js +17 -1
  40. package/dist/src/runner/daemon-command.js.map +1 -1
  41. package/dist/src/runner/hygiene-cleanup.js +1 -1
  42. package/dist/src/runner/hygiene-cleanup.js.map +1 -1
  43. package/dist/src/runner/local-state.d.ts +7 -1
  44. package/dist/src/runner/local-state.d.ts.map +1 -1
  45. package/dist/src/runner/local-state.js +14 -5
  46. package/dist/src/runner/local-state.js.map +1 -1
  47. package/dist/src/runner/mission-coordinator-lock.d.ts +3 -0
  48. package/dist/src/runner/mission-coordinator-lock.d.ts.map +1 -1
  49. package/dist/src/runner/mission-coordinator-lock.js +32 -21
  50. package/dist/src/runner/mission-coordinator-lock.js.map +1 -1
  51. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +3 -3
  52. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +1 -1
  53. package/dist/src/runner/mission-plan-parent-coordinator.js +44 -15
  54. package/dist/src/runner/mission-plan-parent-coordinator.js.map +1 -1
  55. package/dist/src/runner/mission-plan-parent.d.ts +3 -1
  56. package/dist/src/runner/mission-plan-parent.d.ts.map +1 -1
  57. package/dist/src/runner/mission-plan-parent.js +7 -1
  58. package/dist/src/runner/mission-plan-parent.js.map +1 -1
  59. package/dist/src/runner/mission-publication-git.d.ts +21 -0
  60. package/dist/src/runner/mission-publication-git.d.ts.map +1 -0
  61. package/dist/src/runner/mission-publication-git.js +61 -0
  62. package/dist/src/runner/mission-publication-git.js.map +1 -0
  63. package/dist/src/runner/mission-publication.d.ts +192 -0
  64. package/dist/src/runner/mission-publication.d.ts.map +1 -0
  65. package/dist/src/runner/mission-publication.js +1001 -0
  66. package/dist/src/runner/mission-publication.js.map +1 -0
  67. package/dist/src/runner/mission-state-store.d.ts.map +1 -1
  68. package/dist/src/runner/mission-state-store.js +66 -6
  69. package/dist/src/runner/mission-state-store.js.map +1 -1
  70. package/dist/src/runner/plan-auto-command.d.ts.map +1 -1
  71. package/dist/src/runner/plan-auto-command.js +19 -1
  72. package/dist/src/runner/plan-auto-command.js.map +1 -1
  73. package/dist/src/runner/scoped-auto-command.d.ts.map +1 -1
  74. package/dist/src/runner/scoped-auto-command.js +21 -3
  75. package/dist/src/runner/scoped-auto-command.js.map +1 -1
  76. package/dist/src/runner/scoped-recovery.d.ts.map +1 -1
  77. package/dist/src/runner/scoped-recovery.js +19 -2
  78. package/dist/src/runner/scoped-recovery.js.map +1 -1
  79. package/dist/src/runner/target-activity-fence.d.ts +23 -0
  80. package/dist/src/runner/target-activity-fence.d.ts.map +1 -0
  81. package/dist/src/runner/target-activity-fence.js +249 -0
  82. package/dist/src/runner/target-activity-fence.js.map +1 -0
  83. package/dist/src/setup/setup-command.d.ts +3 -0
  84. package/dist/src/setup/setup-command.d.ts.map +1 -1
  85. package/dist/src/setup/setup-command.js +47 -1
  86. package/dist/src/setup/setup-command.js.map +1 -1
  87. package/dist/src/setup/skill-runtime-v2-preparation.d.ts +56 -0
  88. package/dist/src/setup/skill-runtime-v2-preparation.d.ts.map +1 -0
  89. package/dist/src/setup/skill-runtime-v2-preparation.js +304 -0
  90. package/dist/src/setup/skill-runtime-v2-preparation.js.map +1 -0
  91. package/docs/deep-dive.md +27 -0
  92. package/package.json +4 -2
@@ -0,0 +1,304 @@
1
+ import { execFile } from 'node:child_process';
2
+ import { createHash } from 'node:crypto';
3
+ import { readFile, readdir, readlink, realpath, } from 'node:fs/promises';
4
+ import { hostname } from 'node:os';
5
+ import { dirname, isAbsolute, join, resolve } from 'node:path';
6
+ import { fileURLToPath } from 'node:url';
7
+ import { promisify } from 'node:util';
8
+ import { verifyBridgeRuntimeManifest, } from '../bridge-runtime.js';
9
+ import { writeDurableAtomicFile } from '../fs/durable-atomic-file.js';
10
+ import { GhCliIssueAdapter } from '../github/gh-issue-adapter.js';
11
+ import { readRunnerConfig, rereadRunnerConfigUnderFence } from '../runner/command-utils.js';
12
+ import { RunnerStateStore } from '../runner/local-state.js';
13
+ import { acquireTargetActivityFence, readCurrentBootNonce, } from '../runner/target-activity-fence.js';
14
+ const execFileAsync = promisify(execFile);
15
+ export async function prepareSkillRuntimeV2(input, dependencies = {}) {
16
+ const targetRoot = await realpath(resolve(input.targetRoot));
17
+ const packageRoot = resolve(dependencies.packageRoot ?? defaultPackageRoot());
18
+ const config = await readRunnerConfig(targetRoot);
19
+ const bridge = await verifyBridgeRuntimeManifest(packageRoot);
20
+ const hostId = requireText(dependencies.hostId ?? hostname(), 'hostId');
21
+ const platform = dependencies.platform ?? process.platform;
22
+ const bootNonce = requireText(dependencies.bootNonce ?? await readCurrentBootNonce(platform), 'bootNonce');
23
+ const inspect = dependencies.inspectProcesses ?? (() => inspectBridgeProcesses({ platform }));
24
+ const lease = await acquireTargetActivityFence({
25
+ targetRoot,
26
+ stateDir: config.runner.stateDir,
27
+ mode: 'exclusive',
28
+ purpose: 'preparation',
29
+ hostId,
30
+ bootNonce,
31
+ pid: dependencies.pid,
32
+ isProcessAlive: dependencies.isProcessAlive,
33
+ now: dependencies.now,
34
+ });
35
+ try {
36
+ const fencedConfig = await rereadRunnerConfigUnderFence(targetRoot, config.runner.stateDir);
37
+ const issueAdapter = dependencies.issueAdapter
38
+ ?? new GhCliIssueAdapter(fencedConfig.github.owner, fencedConfig.github.repo);
39
+ const matchingProcesses = await findMatchingDaemonProcesses(await inspect(), targetRoot, bridge);
40
+ if (matchingProcesses.length > 0) {
41
+ throw new Error(`bridge-v1-daemon-active: matching daemon pid ${matchingProcesses[0]?.pid} is still running.`);
42
+ }
43
+ const store = new RunnerStateStore(targetRoot, fencedConfig);
44
+ const state = await store.load();
45
+ const runIds = state.runs.map((run) => run.sessionId).sort();
46
+ if (runIds.length > 0) {
47
+ throw new Error(`bridge-v1-local-state-active: nonterminal v1 runs ${runIds.join(', ')}.`);
48
+ }
49
+ await store.save(state);
50
+ const stateBytes = await readFile(store.statePath());
51
+ const queriedAt = (dependencies.now ?? new Date()).toISOString();
52
+ let runningIssues;
53
+ try {
54
+ runningIssues = await issueAdapter.listOpenIssuesWithAnyLabel([fencedConfig.github.labels.running.name]);
55
+ }
56
+ catch (error) {
57
+ throw new Error(`bridge-github-drain-unavailable: ${error instanceof Error ? error.message : 'GitHub read failed'}`);
58
+ }
59
+ const issueNumbers = runningIssues.map((issue) => issue.number).sort((left, right) => left - right);
60
+ if (issueNumbers.length > 0) {
61
+ throw new Error(`bridge-v1-github-claim-active: open running issues ${issueNumbers.join(', ')}.`);
62
+ }
63
+ const generation = {
64
+ version: 1,
65
+ canonicalTargetRoot: targetRoot,
66
+ preparedAt: (dependencies.now ?? new Date()).toISOString(),
67
+ hostId,
68
+ bootNonce,
69
+ bridgePackageVersion: bridge.packageVersion,
70
+ bridgePackageHash: bridge.packageHash,
71
+ activityFenceGeneration: lease.generation,
72
+ inspectedProcesses: matchingProcesses,
73
+ runnerState: {
74
+ path: store.statePath(),
75
+ sha256: createHash('sha256').update(stateBytes).digest('hex'),
76
+ nonterminalV1RunIds: [],
77
+ },
78
+ githubDrain: { queriedAt, runningIssueNumbers: [] },
79
+ };
80
+ const path = join(targetRoot, fencedConfig.runner.stateDir, 'skill-runtime-v2', 'prepared-generation.json');
81
+ await writeDurableAtomicFile(path, `${JSON.stringify(generation, null, 2)}\n`);
82
+ return { path, generation };
83
+ }
84
+ finally {
85
+ await lease.release();
86
+ }
87
+ }
88
+ export async function inspectBridgeProcesses(input = {}) {
89
+ const platform = input.platform ?? process.platform;
90
+ if (platform === 'linux')
91
+ return inspectLinuxProcesses(input);
92
+ if (platform === 'darwin')
93
+ return inspectDarwinProcesses(input);
94
+ throw new Error(`bridge-process-introspection-unsupported: platform ${platform} is not supported.`);
95
+ }
96
+ async function inspectLinuxProcesses(input) {
97
+ const procRoot = input.procRoot ?? '/proc';
98
+ let names;
99
+ try {
100
+ names = await readdir(procRoot);
101
+ }
102
+ catch (error) {
103
+ throw unsupported(`Linux procfs is unavailable: ${errorMessage(error)}`);
104
+ }
105
+ const processes = [];
106
+ for (const name of names.filter((entry) => /^\d+$/u.test(entry)).sort((left, right) => Number(left) - Number(right))) {
107
+ const pid = Number(name);
108
+ try {
109
+ const [status, statContent, cmdline, executable] = await Promise.all([
110
+ readFile(join(procRoot, name, 'status'), 'utf8'),
111
+ readFile(join(procRoot, name, 'stat'), 'utf8'),
112
+ readFile(join(procRoot, name, 'cmdline')),
113
+ input.readExecutable ? input.readExecutable(pid) : readlink(join(procRoot, name, 'exe')),
114
+ ]);
115
+ const uidMatch = status.match(/^Uid:\s+(\d+)/mu);
116
+ const close = statContent.lastIndexOf(')');
117
+ const fields = close >= 0 ? statContent.slice(close + 1).trim().split(/\s+/u) : [];
118
+ const startTime = fields[19];
119
+ const argv = cmdline.toString('utf8').split('\0').filter((part) => part.length > 0);
120
+ if (!uidMatch?.[1] || !startTime || argv.length === 0 || !executable.trim()) {
121
+ throw unsupported(`Linux process ${pid} identity is ambiguous.`);
122
+ }
123
+ processes.push({ pid, uid: Number(uidMatch[1]), startTime, executable: executable.trim(), argv });
124
+ }
125
+ catch (error) {
126
+ if (isCode(error, 'ENOENT'))
127
+ continue;
128
+ if (error instanceof Error && error.message.startsWith('bridge-process-introspection-unsupported:'))
129
+ throw error;
130
+ throw unsupported(`Linux process ${pid} cannot be inspected: ${errorMessage(error)}`);
131
+ }
132
+ }
133
+ return processes;
134
+ }
135
+ async function inspectDarwinProcesses(input) {
136
+ const run = input.runCommand ?? defaultRunCommand;
137
+ let pidOutput;
138
+ try {
139
+ pidOutput = await run('ps', ['-axo', 'pid=']);
140
+ }
141
+ catch (error) {
142
+ throw unsupported(`Darwin ps is unavailable: ${errorMessage(error)}`);
143
+ }
144
+ const pids = pidOutput.split(/\s+/u).filter(Boolean).map(Number).filter((pid) => Number.isSafeInteger(pid) && pid > 0);
145
+ const processes = [];
146
+ for (const pid of pids.sort((left, right) => left - right)) {
147
+ let identity;
148
+ try {
149
+ identity = await run('ps', ['-p', String(pid), '-o', 'uid=,lstart=,command=']);
150
+ }
151
+ catch {
152
+ continue;
153
+ }
154
+ try {
155
+ const match = identity.trim().match(/^(\d+)\s+(.{24})\s+(.+)$/u);
156
+ if (!match?.[1] || !match[2] || !match[3]) {
157
+ throw unsupported(`Darwin process ${pid} identity is ambiguous.`);
158
+ }
159
+ const rawCommand = match[3];
160
+ if (!mayBeOrchestratorDaemonCommand(rawCommand)) {
161
+ parseDarwinCommand(rawCommand);
162
+ continue;
163
+ }
164
+ const lsof = await run('lsof', ['-a', '-p', String(pid), '-d', 'txt', '-Fn']);
165
+ const executable = lsof.split(/\r?\n/u).find((line) => line.startsWith('n'))?.slice(1);
166
+ if (!executable)
167
+ throw unsupported(`Darwin process ${pid} executable identity is ambiguous.`);
168
+ throw unsupported(`Darwin process ${pid} is an orchestrator daemon, but ps does not preserve exact argv boundaries.`);
169
+ }
170
+ catch (error) {
171
+ if (error instanceof Error && error.message.startsWith('bridge-process-introspection-unsupported:'))
172
+ throw error;
173
+ throw unsupported(`Darwin process ${pid} cannot be inspected: ${errorMessage(error)}`);
174
+ }
175
+ }
176
+ return processes;
177
+ }
178
+ async function findMatchingDaemonProcesses(processes, canonicalTargetRoot, currentBridge) {
179
+ const matches = [];
180
+ for (const candidate of processes) {
181
+ if (!isOrchestratorDaemonArgv(candidate.argv))
182
+ continue;
183
+ const daemonIndex = candidate.argv.indexOf('daemon');
184
+ const targetIndexes = candidate.argv.flatMap((arg, index) => arg === '--target' ? [index] : []);
185
+ if (targetIndexes.length !== 1) {
186
+ throw new Error(`bridge-process-argv-ambiguous: daemon pid ${candidate.pid} has ambiguous --target arguments.`);
187
+ }
188
+ const targetArg = candidate.argv[targetIndexes[0] + 1];
189
+ if (!targetArg || !isAbsolute(targetArg)) {
190
+ throw new Error(`bridge-process-argv-ambiguous: daemon pid ${candidate.pid} target is not absolute.`);
191
+ }
192
+ let target;
193
+ try {
194
+ target = await realpath(targetArg);
195
+ }
196
+ catch {
197
+ throw new Error(`bridge-process-argv-ambiguous: daemon pid ${candidate.pid} target cannot be canonicalized.`);
198
+ }
199
+ if (target !== canonicalTargetRoot)
200
+ continue;
201
+ if (typeof process.getuid === 'function' && candidate.uid !== process.getuid()) {
202
+ throw new Error(`bridge-process-owner-mismatch: daemon pid ${candidate.pid} belongs to uid ${candidate.uid}.`);
203
+ }
204
+ const executable = await realpath(candidate.executable).catch(() => undefined);
205
+ const argvExecutable = candidate.argv[0] && isAbsolute(candidate.argv[0])
206
+ ? await realpath(candidate.argv[0]).catch(() => undefined)
207
+ : undefined;
208
+ if (!executable || !argvExecutable || executable !== argvExecutable) {
209
+ throw new Error(`bridge-process-executable-mismatch: daemon pid ${candidate.pid} executable identity is ambiguous.`);
210
+ }
211
+ const cliArg = candidate.argv.slice(0, daemonIndex).reverse().find((arg) => /(?:^|\/)cli\.js$/u.test(arg));
212
+ if (!cliArg || !isAbsolute(cliArg)) {
213
+ throw new Error(`bridge-process-argv-ambiguous: daemon pid ${candidate.pid} package CLI path is ambiguous.`);
214
+ }
215
+ const cliPath = await realpath(cliArg).catch(() => undefined);
216
+ if (!cliPath)
217
+ throw new Error(`bridge-process-argv-ambiguous: daemon pid ${candidate.pid} CLI path is unavailable.`);
218
+ const candidateRoot = resolve(dirname(cliPath), '../..');
219
+ let candidateBridge;
220
+ try {
221
+ candidateBridge = await verifyBridgeRuntimeManifest(candidateRoot);
222
+ }
223
+ catch (error) {
224
+ throw new Error(`bridge-package-generation-mismatch: daemon pid ${candidate.pid}: ${errorMessage(error)}`);
225
+ }
226
+ if (candidateBridge.packageVersion !== currentBridge.packageVersion
227
+ || candidateBridge.packageHash !== currentBridge.packageHash) {
228
+ throw new Error(`bridge-package-generation-mismatch: daemon pid ${candidate.pid} uses ${candidateBridge.packageHash}.`);
229
+ }
230
+ matches.push(candidate);
231
+ }
232
+ return matches.sort((left, right) => left.pid - right.pid);
233
+ }
234
+ function parseDarwinCommand(command) {
235
+ const args = [];
236
+ let current = '';
237
+ let quote;
238
+ let escaped = false;
239
+ for (const character of command) {
240
+ if (escaped) {
241
+ current += character;
242
+ escaped = false;
243
+ }
244
+ else if (character === '\\' && quote !== "'") {
245
+ escaped = true;
246
+ }
247
+ else if (quote) {
248
+ if (character === quote)
249
+ quote = undefined;
250
+ else
251
+ current += character;
252
+ }
253
+ else if (character === '"' || character === "'") {
254
+ quote = character;
255
+ }
256
+ else if (/\s/u.test(character)) {
257
+ if (current) {
258
+ args.push(current);
259
+ current = '';
260
+ }
261
+ }
262
+ else {
263
+ current += character;
264
+ }
265
+ }
266
+ if (escaped || quote)
267
+ throw unsupported('Darwin command argv quoting is ambiguous.');
268
+ if (current)
269
+ args.push(current);
270
+ if (args.length === 0)
271
+ throw unsupported('Darwin command argv is empty.');
272
+ return args;
273
+ }
274
+ function mayBeOrchestratorDaemonCommand(command) {
275
+ const cli = command.match(/codex-orchestrator|cli\.js/u);
276
+ if (!cli || cli.index === undefined)
277
+ return false;
278
+ return /(?:^|[^A-Za-z0-9_-])daemon(?:$|[^A-Za-z0-9_-])/u.test(command.slice(cli.index + cli[0].length));
279
+ }
280
+ function isOrchestratorDaemonArgv(argv) {
281
+ const cliIndex = argv.findIndex((arg) => /(?:^|\/)(?:codex-orchestrator|cli\.js)$/u.test(arg));
282
+ return cliIndex >= 0 && cliIndex <= 1 && argv[cliIndex + 1] === 'daemon';
283
+ }
284
+ async function defaultRunCommand(command, args) {
285
+ return (await execFileAsync(command, args)).stdout;
286
+ }
287
+ function defaultPackageRoot() {
288
+ return fileURLToPath(new URL('../../../', import.meta.url));
289
+ }
290
+ function unsupported(message) {
291
+ return new Error(`bridge-process-introspection-unsupported: ${message}`);
292
+ }
293
+ function requireText(value, field) {
294
+ if (value.trim().length === 0)
295
+ throw new Error(`Bridge preparation ${field} must be non-empty.`);
296
+ return value;
297
+ }
298
+ function errorMessage(error) {
299
+ return error instanceof Error ? error.message : 'unknown error';
300
+ }
301
+ function isCode(error, code) {
302
+ return error instanceof Error && 'code' in error && error.code === code;
303
+ }
304
+ //# sourceMappingURL=skill-runtime-v2-preparation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"skill-runtime-v2-preparation.js","sourceRoot":"","sources":["../../../src/setup/skill-runtime-v2-preparation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,QAAQ,EACR,OAAO,EACP,QAAQ,EACR,QAAQ,GACT,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AACnC,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC/D,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAEtC,OAAO,EACL,2BAA2B,GAE5B,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,iBAAiB,EAAE,MAAM,+BAA+B,CAAC;AAElE,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,4BAA4B,CAAC;AAC5F,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EACL,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,oCAAoC,CAAC;AAE5C,MAAM,aAAa,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;AAoD1C,MAAM,CAAC,KAAK,UAAU,qBAAqB,CACzC,KAAiC,EACjC,eAAkD,EAAE;IAEpD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;IAC7D,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,WAAW,IAAI,kBAAkB,EAAE,CAAC,CAAC;IAC9E,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,UAAU,CAAC,CAAC;IAClD,MAAM,MAAM,GAAG,MAAM,2BAA2B,CAAC,WAAW,CAAC,CAAC;IAC9D,MAAM,MAAM,GAAG,WAAW,CAAC,YAAY,CAAC,MAAM,IAAI,QAAQ,EAAE,EAAE,QAAQ,CAAC,CAAC;IACxE,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IAC3D,MAAM,SAAS,GAAG,WAAW,CAAC,YAAY,CAAC,SAAS,IAAI,MAAM,oBAAoB,CAAC,QAAQ,CAAC,EAAE,WAAW,CAAC,CAAC;IAC3G,MAAM,OAAO,GAAG,YAAY,CAAC,gBAAgB,IAAI,CAAC,GAAG,EAAE,CAAC,sBAAsB,CAAC,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC;IAE9F,MAAM,KAAK,GAAG,MAAM,0BAA0B,CAAC;QAC7C,UAAU;QACV,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ;QAChC,IAAI,EAAE,WAAW;QACjB,OAAO,EAAE,aAAa;QACtB,MAAM;QACN,SAAS;QACT,GAAG,EAAE,YAAY,CAAC,GAAG;QACrB,cAAc,EAAE,YAAY,CAAC,cAAc;QAC3C,GAAG,EAAE,YAAY,CAAC,GAAG;KACtB,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,YAAY,GAAG,MAAM,4BAA4B,CAAC,UAAU,EAAE,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC5F,MAAM,YAAY,GAAG,YAAY,CAAC,YAAY;eACzC,IAAI,iBAAiB,CAAC,YAAY,CAAC,MAAM,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAChF,MAAM,iBAAiB,GAAG,MAAM,2BAA2B,CAAC,MAAM,OAAO,EAAE,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;QACjG,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,gDAAgD,iBAAiB,CAAC,CAAC,CAAC,EAAE,GAAG,oBAAoB,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,KAAK,GAAG,IAAI,gBAAgB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAC7D,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,EAAE,CAAC;QACjC,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC,IAAI,EAAE,CAAC;QAC7D,IAAI,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtB,MAAM,IAAI,KAAK,CAAC,qDAAqD,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC7F,CAAC;QACD,MAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,KAAK,CAAC,SAAS,EAAE,CAAC,CAAC;QAErD,MAAM,SAAS,GAAG,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;QACjE,IAAI,aAAoF,CAAC;QACzF,IAAI,CAAC;YACH,aAAa,GAAG,MAAM,YAAY,CAAC,0BAA0B,CAAC,CAAC,YAAY,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QAC3G,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,oCAAoC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,EAAE,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,YAAY,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC;QACpG,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC5B,MAAM,IAAI,KAAK,CAAC,sDAAsD,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACpG,CAAC;QAED,MAAM,UAAU,GAAqC;YACnD,OAAO,EAAE,CAAC;YACV,mBAAmB,EAAE,UAAU;YAC/B,UAAU,EAAE,CAAC,YAAY,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE;YAC1D,MAAM;YACN,SAAS;YACT,oBAAoB,EAAE,MAAM,CAAC,cAAc;YAC3C,iBAAiB,EAAE,MAAM,CAAC,WAAW;YACrC,uBAAuB,EAAE,KAAK,CAAC,UAAU;YACzC,kBAAkB,EAAE,iBAAiB;YACrC,WAAW,EAAE;gBACX,IAAI,EAAE,KAAK,CAAC,SAAS,EAAE;gBACvB,MAAM,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;gBAC7D,mBAAmB,EAAE,EAAE;aACxB;YACD,WAAW,EAAE,EAAE,SAAS,EAAE,mBAAmB,EAAE,EAAE,EAAE;SACpD,CAAC;QACF,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,EAAE,YAAY,CAAC,MAAM,CAAC,QAAQ,EAAE,kBAAkB,EAAE,0BAA0B,CAAC,CAAC;QAC5G,MAAM,sBAAsB,CAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;QAC/E,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC;IAC9B,CAAC;YAAS,CAAC;QACT,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC;IACxB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,QAAsC,EAAE;IAExC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC,QAAQ,CAAC;IACpD,IAAI,QAAQ,KAAK,OAAO;QAAE,OAAO,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC9D,IAAI,QAAQ,KAAK,QAAQ;QAAE,OAAO,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAChE,MAAM,IAAI,KAAK,CAAC,sDAAsD,QAAQ,oBAAoB,CAAC,CAAC;AACtG,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAmC;IACtE,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,OAAO,CAAC;IAC3C,IAAI,KAAe,CAAC;IACpB,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,gCAAgC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IAC3E,CAAC;IACD,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACrH,MAAM,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;gBACnE,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;gBAChD,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC;gBAC9C,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC;gBACzC,KAAK,CAAC,cAAc,CAAC,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,KAAK,CAAC,CAAC;aACzF,CAAC,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACjD,MAAM,KAAK,GAAG,WAAW,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YACnF,MAAM,SAAS,GAAG,MAAM,CAAC,EAAE,CAAC,CAAC;YAC7B,MAAM,IAAI,GAAG,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YACpF,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5E,MAAM,WAAW,CAAC,iBAAiB,GAAG,yBAAyB,CAAC,CAAC;YACnE,CAAC;YACD,SAAS,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,UAAU,EAAE,UAAU,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC;QACpG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC;gBAAE,SAAS;YACtC,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,2CAA2C,CAAC;gBAAE,MAAM,KAAK,CAAC;YACjH,MAAM,WAAW,CAAC,iBAAiB,GAAG,yBAAyB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACxF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,sBAAsB,CAAC,KAAmC;IACvE,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,IAAI,iBAAiB,CAAC;IAClD,IAAI,SAAiB,CAAC;IACtB,IAAI,CAAC;QACH,SAAS,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;IAChD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,WAAW,CAAC,6BAA6B,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACxE,CAAC;IACD,MAAM,IAAI,GAAG,SAAS,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,MAAM,CAAC,aAAa,CAAC,GAAG,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC;IACvH,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,GAAG,KAAK,CAAC,EAAE,CAAC;QAC3D,IAAI,QAAgB,CAAC;QACrB,IAAI,CAAC;YACH,QAAQ,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,uBAAuB,CAAC,CAAC,CAAC;QACjF,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACjE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1C,MAAM,WAAW,CAAC,kBAAkB,GAAG,yBAAyB,CAAC,CAAC;YACpE,CAAC;YACD,MAAM,UAAU,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,8BAA8B,CAAC,UAAU,CAAC,EAAE,CAAC;gBAChD,kBAAkB,CAAC,UAAU,CAAC,CAAC;gBAC/B,SAAS;YACX,CAAC;YACD,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC,CAAC;YAC9E,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACvF,IAAI,CAAC,UAAU;gBAAE,MAAM,WAAW,CAAC,kBAAkB,GAAG,oCAAoC,CAAC,CAAC;YAC9F,MAAM,WAAW,CACf,kBAAkB,GAAG,6EAA6E,CACnG,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,2CAA2C,CAAC;gBAAE,MAAM,KAAK,CAAC;YACjH,MAAM,WAAW,CAAC,kBAAkB,GAAG,yBAAyB,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,2BAA2B,CACxC,SAAkC,EAClC,mBAA2B,EAC3B,aAAsC;IAEtC,MAAM,OAAO,GAA4B,EAAE,CAAC;IAC5C,KAAK,MAAM,SAAS,IAAI,SAAS,EAAE,CAAC;QAClC,IAAI,CAAC,wBAAwB,CAAC,SAAS,CAAC,IAAI,CAAC;YAAE,SAAS;QACxD,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACrD,MAAM,aAAa,GAAG,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,KAAK,EAAE,EAAE,CAAC,GAAG,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;QAChG,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,oCAAoC,CAAC,CAAC;QAClH,CAAC;QACD,MAAM,SAAS,GAAG,SAAS,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAE,GAAG,CAAC,CAAC,CAAC;QACxD,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACzC,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,0BAA0B,CAAC,CAAC;QACxG,CAAC;QACD,IAAI,MAAc,CAAC;QACnB,IAAI,CAAC;YACH,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,kCAAkC,CAAC,CAAC;QAChH,CAAC;QACD,IAAI,MAAM,KAAK,mBAAmB;YAAE,SAAS;QAC7C,IAAI,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,IAAI,SAAS,CAAC,GAAG,KAAK,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;YAC/E,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,mBAAmB,SAAS,CAAC,GAAG,GAAG,CAAC,CAAC;QACjH,CAAC;QACD,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC/E,MAAM,cAAc,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACvE,CAAC,CAAC,MAAM,QAAQ,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC;YAC1D,CAAC,CAAC,SAAS,CAAC;QACd,IAAI,CAAC,UAAU,IAAI,CAAC,cAAc,IAAI,UAAU,KAAK,cAAc,EAAE,CAAC;YACpE,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,CAAC,GAAG,oCAAoC,CAAC,CAAC;QACvH,CAAC;QACD,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;QAC3G,IAAI,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;YACnC,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,iCAAiC,CAAC,CAAC;QAC/G,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,MAAM,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;QAC9D,IAAI,CAAC,OAAO;YAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,SAAS,CAAC,GAAG,2BAA2B,CAAC,CAAC;QACrH,MAAM,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC,CAAC;QACzD,IAAI,eAAwC,CAAC;QAC7C,IAAI,CAAC;YACH,eAAe,GAAG,MAAM,2BAA2B,CAAC,aAAa,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,CAAC,GAAG,KAAK,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC7G,CAAC;QACD,IAAI,eAAe,CAAC,cAAc,KAAK,aAAa,CAAC,cAAc;eAC9D,eAAe,CAAC,WAAW,KAAK,aAAa,CAAC,WAAW,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,kDAAkD,SAAS,CAAC,GAAG,SAAS,eAAe,CAAC,WAAW,GAAG,CAAC,CAAC;QAC1H,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1B,CAAC;IACD,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;AAC7D,CAAC;AAED,SAAS,kBAAkB,CAAC,OAAe;IACzC,MAAM,IAAI,GAAa,EAAE,CAAC;IAC1B,IAAI,OAAO,GAAG,EAAE,CAAC;IACjB,IAAI,KAA4B,CAAC;IACjC,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,KAAK,MAAM,SAAS,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,IAAI,SAAS,CAAC;YACrB,OAAO,GAAG,KAAK,CAAC;QAClB,CAAC;aAAM,IAAI,SAAS,KAAK,IAAI,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAC/C,OAAO,GAAG,IAAI,CAAC;QACjB,CAAC;aAAM,IAAI,KAAK,EAAE,CAAC;YACjB,IAAI,SAAS,KAAK,KAAK;gBAAE,KAAK,GAAG,SAAS,CAAC;;gBACtC,OAAO,IAAI,SAAS,CAAC;QAC5B,CAAC;aAAM,IAAI,SAAS,KAAK,GAAG,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;YAClD,KAAK,GAAG,SAAS,CAAC;QACpB,CAAC;aAAM,IAAI,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,IAAI,OAAO,EAAE,CAAC;gBACZ,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;gBACnB,OAAO,GAAG,EAAE,CAAC;YACf,CAAC;QACH,CAAC;aAAM,CAAC;YACN,OAAO,IAAI,SAAS,CAAC;QACvB,CAAC;IACH,CAAC;IACD,IAAI,OAAO,IAAI,KAAK;QAAE,MAAM,WAAW,CAAC,2CAA2C,CAAC,CAAC;IACrF,IAAI,OAAO;QAAE,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAChC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,WAAW,CAAC,+BAA+B,CAAC,CAAC;IAC1E,OAAO,IAAI,CAAC;AACd,CAAC;AAED,SAAS,8BAA8B,CAAC,OAAe;IACrD,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IACzD,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClD,OAAO,iDAAiD,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC1G,CAAC;AAED,SAAS,wBAAwB,CAAC,IAAc;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,0CAA0C,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAC/F,OAAO,QAAQ,IAAI,CAAC,IAAI,QAAQ,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,QAAQ,CAAC;AAC3E,CAAC;AAED,KAAK,UAAU,iBAAiB,CAAC,OAAe,EAAE,IAAc;IAC9D,OAAO,CAAC,MAAM,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC,MAAM,CAAC;AACrD,CAAC;AAED,SAAS,kBAAkB;IACzB,OAAO,aAAa,CAAC,IAAI,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAC9D,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,IAAI,KAAK,CAAC,6CAA6C,OAAO,EAAE,CAAC,CAAC;AAC3E,CAAC;AAED,SAAS,WAAW,CAAC,KAAa,EAAE,KAAa;IAC/C,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC;QAAE,MAAM,IAAI,KAAK,CAAC,sBAAsB,KAAK,qBAAqB,CAAC,CAAC;IACjG,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,YAAY,CAAC,KAAc;IAClC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC;AAClE,CAAC;AAED,SAAS,MAAM,CAAC,KAAc,EAAE,IAAY;IAC1C,OAAO,KAAK,YAAY,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AAC1E,CAAC"}
package/docs/deep-dive.md CHANGED
@@ -771,6 +771,33 @@ Each workflow points to either a package-owned fallback prompt or a compatible
771
771
  local skill/prompt copied during setup. This lets the package work out of the
772
772
  box while still allowing repositories to customize agent behavior.
773
773
 
774
+ ## Skill Runtime V2 Bridge Fence
775
+
776
+ The bridge generation keeps the current prompt and `codex exec` behavior but
777
+ adds a target-scoped activity fence around daemon lifetime, targeted run/claim,
778
+ and setup. Shared daemon/run holders may coexist; preparation and setup require
779
+ exclusive ownership. Ownership metadata uses canonical target identity plus
780
+ host, boot nonce, PID, and release token, and its generation increases whenever
781
+ new runner activity is admitted. A stale same-host holder is reclaimed only
782
+ when PID/boot evidence proves that owner is gone; foreign or ambiguous owners
783
+ block.
784
+
785
+ `setup --prepare-skill-runtime-v2` verifies the installed
786
+ `bridge-runtime.json`, inspects supported Darwin or Linux processes, requires
787
+ an empty legacy runner-state union, and queries GitHub for every open issue with
788
+ the configured running label while holding the exclusive fence. It then writes
789
+ one fsynced canonical `prepared-generation.json` beneath the configured state
790
+ directory. GitHub read failure, relative daemon targets, process identity
791
+ ambiguity, active local state, or a package hash mismatch fail closed without
792
+ publishing generation evidence.
793
+
794
+ The bridge can read and preserve an empty state-v2 envelope while config remains
795
+ v1, but it stores only legacy run records in that envelope. It does not perform
796
+ the structural migration, change transport, or disable target workflow prompts.
797
+ The structural phase must start later from an actually released bridge commit
798
+ and must verify the canonical prepared generation and exact package hash before
799
+ any config-v2 write.
800
+
774
801
  ## Config Surface
775
802
 
776
803
  The top-level config areas are:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codex-orchestrator",
3
- "version": "0.1.48",
3
+ "version": "0.1.50",
4
4
  "description": "Reusable GitHub Issues runner for Codex.",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -21,6 +21,7 @@
21
21
  },
22
22
  "files": [
23
23
  "dist/src",
24
+ "bridge-runtime.json",
24
25
  "prompts",
25
26
  "docs/deep-dive.md",
26
27
  "CHANGELOG.md",
@@ -46,7 +47,8 @@
46
47
  "test": "npm run build && node --test dist/test/*.test.js",
47
48
  "typecheck": "tsc -p tsconfig.json --noEmit",
48
49
  "smoke:live": "node scripts/live-smoke.mjs",
49
- "prepack": "npm run build"
50
+ "bridge:manifest": "npm run build --silent && node scripts/generate-bridge-runtime.mjs",
51
+ "prepack": "npm run bridge:manifest"
50
52
  },
51
53
  "devDependencies": {
52
54
  "@types/node": "^24.0.0",