steroids-cli 0.15.3 → 0.15.5

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 (144) hide show
  1. package/dist/commands/ai-proxy.d.ts +6 -0
  2. package/dist/commands/ai-proxy.d.ts.map +1 -0
  3. package/dist/commands/ai-proxy.js +79 -0
  4. package/dist/commands/ai-proxy.js.map +1 -0
  5. package/dist/commands/ai-run.d.ts.map +1 -1
  6. package/dist/commands/ai-run.js +10 -7
  7. package/dist/commands/ai-run.js.map +1 -1
  8. package/dist/commands/ai.d.ts.map +1 -1
  9. package/dist/commands/ai.js +5 -0
  10. package/dist/commands/ai.js.map +1 -1
  11. package/dist/commands/completion.js +2 -1
  12. package/dist/commands/completion.js.map +1 -1
  13. package/dist/commands/features.d.ts +5 -0
  14. package/dist/commands/features.d.ts.map +1 -0
  15. package/dist/commands/features.js +255 -0
  16. package/dist/commands/features.js.map +1 -0
  17. package/dist/commands/llm-content.d.ts +1 -1
  18. package/dist/commands/llm-content.d.ts.map +1 -1
  19. package/dist/commands/llm-content.js +36 -6
  20. package/dist/commands/llm-content.js.map +1 -1
  21. package/dist/commands/llm.d.ts.map +1 -1
  22. package/dist/commands/llm.js +1 -0
  23. package/dist/commands/llm.js.map +1 -1
  24. package/dist/commands/web.d.ts.map +1 -1
  25. package/dist/commands/web.js +22 -3
  26. package/dist/commands/web.js.map +1 -1
  27. package/dist/database/queries.d.ts.map +1 -1
  28. package/dist/database/queries.js +13 -6
  29. package/dist/database/queries.js.map +1 -1
  30. package/dist/index.js +64 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/providers/api-models.d.ts +5 -1
  33. package/dist/providers/api-models.d.ts.map +1 -1
  34. package/dist/providers/api-models.js +10 -107
  35. package/dist/providers/api-models.js.map +1 -1
  36. package/dist/providers/claude.d.ts.map +1 -1
  37. package/dist/providers/claude.js +16 -1
  38. package/dist/providers/claude.js.map +1 -1
  39. package/dist/providers/codex.d.ts.map +1 -1
  40. package/dist/providers/codex.js +16 -1
  41. package/dist/providers/codex.js.map +1 -1
  42. package/dist/providers/interface.d.ts.map +1 -1
  43. package/dist/providers/interface.js +11 -1
  44. package/dist/providers/interface.js.map +1 -1
  45. package/dist/providers/mistral-models.d.ts +18 -0
  46. package/dist/providers/mistral-models.d.ts.map +1 -0
  47. package/dist/providers/mistral-models.js +145 -0
  48. package/dist/providers/mistral-models.js.map +1 -0
  49. package/dist/providers/mistral.d.ts +6 -0
  50. package/dist/providers/mistral.d.ts.map +1 -1
  51. package/dist/providers/mistral.js +31 -54
  52. package/dist/providers/mistral.js.map +1 -1
  53. package/dist/providers/opencode.d.ts.map +1 -1
  54. package/dist/providers/opencode.js +5 -1
  55. package/dist/providers/opencode.js.map +1 -1
  56. package/dist/proxy/daemon-entry.d.ts +9 -0
  57. package/dist/proxy/daemon-entry.d.ts.map +1 -0
  58. package/dist/proxy/daemon-entry.js +29 -0
  59. package/dist/proxy/daemon-entry.js.map +1 -0
  60. package/dist/proxy/hf-proxy.d.ts +16 -0
  61. package/dist/proxy/hf-proxy.d.ts.map +1 -0
  62. package/dist/proxy/hf-proxy.js +200 -0
  63. package/dist/proxy/hf-proxy.js.map +1 -0
  64. package/dist/proxy/hf-token.d.ts +18 -0
  65. package/dist/proxy/hf-token.d.ts.map +1 -0
  66. package/dist/proxy/hf-token.js +57 -0
  67. package/dist/proxy/hf-token.js.map +1 -0
  68. package/dist/proxy/lifecycle.d.ts +26 -0
  69. package/dist/proxy/lifecycle.d.ts.map +1 -0
  70. package/dist/proxy/lifecycle.js +129 -0
  71. package/dist/proxy/lifecycle.js.map +1 -0
  72. package/package.json +1 -1
  73. package/dist/commands/merge.d.ts +0 -3
  74. package/dist/commands/merge.d.ts.map +0 -1
  75. package/dist/commands/merge.js +0 -246
  76. package/dist/commands/merge.js.map +0 -1
  77. package/dist/parallel/merge-commit-checks.d.ts +0 -6
  78. package/dist/parallel/merge-commit-checks.d.ts.map +0 -1
  79. package/dist/parallel/merge-commit-checks.js +0 -28
  80. package/dist/parallel/merge-commit-checks.js.map +0 -1
  81. package/dist/parallel/merge-conflict-attempts.d.ts +0 -8
  82. package/dist/parallel/merge-conflict-attempts.d.ts.map +0 -1
  83. package/dist/parallel/merge-conflict-attempts.js +0 -60
  84. package/dist/parallel/merge-conflict-attempts.js.map +0 -1
  85. package/dist/parallel/merge-conflict-invoke.d.ts +0 -2
  86. package/dist/parallel/merge-conflict-invoke.d.ts.map +0 -1
  87. package/dist/parallel/merge-conflict-invoke.js +0 -41
  88. package/dist/parallel/merge-conflict-invoke.js.map +0 -1
  89. package/dist/parallel/merge-conflict-prompts.d.ts +0 -23
  90. package/dist/parallel/merge-conflict-prompts.d.ts.map +0 -1
  91. package/dist/parallel/merge-conflict-prompts.js +0 -40
  92. package/dist/parallel/merge-conflict-prompts.js.map +0 -1
  93. package/dist/parallel/merge-conflict-task.d.ts +0 -3
  94. package/dist/parallel/merge-conflict-task.d.ts.map +0 -1
  95. package/dist/parallel/merge-conflict-task.js +0 -59
  96. package/dist/parallel/merge-conflict-task.js.map +0 -1
  97. package/dist/parallel/merge-conflict.d.ts +0 -22
  98. package/dist/parallel/merge-conflict.d.ts.map +0 -1
  99. package/dist/parallel/merge-conflict.js +0 -176
  100. package/dist/parallel/merge-conflict.js.map +0 -1
  101. package/dist/parallel/merge-errors.d.ts +0 -12
  102. package/dist/parallel/merge-errors.d.ts.map +0 -1
  103. package/dist/parallel/merge-errors.js +0 -18
  104. package/dist/parallel/merge-errors.js.map +0 -1
  105. package/dist/parallel/merge-git.d.ts +0 -25
  106. package/dist/parallel/merge-git.d.ts.map +0 -1
  107. package/dist/parallel/merge-git.js +0 -141
  108. package/dist/parallel/merge-git.js.map +0 -1
  109. package/dist/parallel/merge-lock.d.ts +0 -28
  110. package/dist/parallel/merge-lock.d.ts.map +0 -1
  111. package/dist/parallel/merge-lock.js +0 -91
  112. package/dist/parallel/merge-lock.js.map +0 -1
  113. package/dist/parallel/merge-process.d.ts +0 -21
  114. package/dist/parallel/merge-process.d.ts.map +0 -1
  115. package/dist/parallel/merge-process.js +0 -104
  116. package/dist/parallel/merge-process.js.map +0 -1
  117. package/dist/parallel/merge-progress.d.ts +0 -22
  118. package/dist/parallel/merge-progress.d.ts.map +0 -1
  119. package/dist/parallel/merge-progress.js +0 -41
  120. package/dist/parallel/merge-progress.js.map +0 -1
  121. package/dist/parallel/merge-sealing.d.ts +0 -8
  122. package/dist/parallel/merge-sealing.d.ts.map +0 -1
  123. package/dist/parallel/merge-sealing.js +0 -60
  124. package/dist/parallel/merge-sealing.js.map +0 -1
  125. package/dist/parallel/merge-validation.d.ts +0 -6
  126. package/dist/parallel/merge-validation.d.ts.map +0 -1
  127. package/dist/parallel/merge-validation.js +0 -57
  128. package/dist/parallel/merge-validation.js.map +0 -1
  129. package/dist/parallel/merge-workspace.d.ts +0 -8
  130. package/dist/parallel/merge-workspace.d.ts.map +0 -1
  131. package/dist/parallel/merge-workspace.js +0 -37
  132. package/dist/parallel/merge-workspace.js.map +0 -1
  133. package/dist/parallel/merge.d.ts +0 -48
  134. package/dist/parallel/merge.d.ts.map +0 -1
  135. package/dist/parallel/merge.js +0 -228
  136. package/dist/parallel/merge.js.map +0 -1
  137. package/dist/workspace/git-lifecycle-merge.d.ts +0 -23
  138. package/dist/workspace/git-lifecycle-merge.d.ts.map +0 -1
  139. package/dist/workspace/git-lifecycle-merge.js +0 -159
  140. package/dist/workspace/git-lifecycle-merge.js.map +0 -1
  141. package/dist/workspace/merge-pipeline.d.ts +0 -21
  142. package/dist/workspace/merge-pipeline.d.ts.map +0 -1
  143. package/dist/workspace/merge-pipeline.js +0 -74
  144. package/dist/workspace/merge-pipeline.js.map +0 -1
@@ -1,176 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.parseReviewDecision = void 0;
4
- exports.runConflictResolutionCycle = runConflictResolutionCycle;
5
- const global_db_js_1 = require("../runners/global-db.js");
6
- const queries_js_1 = require("../database/queries.js");
7
- const merge_git_js_1 = require("./merge-git.js");
8
- const merge_errors_js_1 = require("./merge-errors.js");
9
- const merge_progress_js_1 = require("./merge-progress.js");
10
- const merge_conflict_attempts_js_1 = require("./merge-conflict-attempts.js");
11
- const merge_conflict_invoke_js_1 = require("./merge-conflict-invoke.js");
12
- const merge_conflict_prompts_js_1 = require("./merge-conflict-prompts.js");
13
- const merge_conflict_task_js_1 = require("./merge-conflict-task.js");
14
- const merge_lock_js_1 = require("./merge-lock.js");
15
- var merge_conflict_prompts_js_2 = require("./merge-conflict-prompts.js");
16
- Object.defineProperty(exports, "parseReviewDecision", { enumerable: true, get: function () { return merge_conflict_prompts_js_2.parseReviewDecision; } });
17
- function refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId) {
18
- (0, global_db_js_1.withGlobalDatabase)((db) => {
19
- const row = db
20
- .prepare(`SELECT id, claim_generation, runner_id
21
- FROM workstreams
22
- WHERE session_id = ?
23
- AND id = ?
24
- AND clone_path = ?
25
- AND status IN ('running', 'completed')
26
- LIMIT 1`)
27
- .get(sessionId, workstreamId, projectPath);
28
- if (!row) {
29
- throw new merge_errors_js_1.ParallelMergeError('Parallel workstream lease row not found during conflict resolution', 'LEASE_ROW_MISSING');
30
- }
31
- if (row.runner_id !== null && row.runner_id !== runnerId) {
32
- throw new merge_errors_js_1.ParallelMergeError(`Parallel workstream lease owned by ${row.runner_id}, not ${runnerId}`, 'LEASE_FENCE_FAILED');
33
- }
34
- const update = db
35
- .prepare(`UPDATE workstreams
36
- SET runner_id = ?,
37
- lease_expires_at = datetime('now', '+120 seconds')
38
- WHERE id = ?
39
- AND status IN ('running', 'completed')
40
- AND claim_generation = ?
41
- AND (runner_id IS NULL OR runner_id = ?)`)
42
- .run(runnerId, row.id, row.claim_generation, runnerId);
43
- if (update.changes !== 1) {
44
- throw new merge_errors_js_1.ParallelMergeError('Parallel workstream lease fence check failed during conflict resolution', 'LEASE_FENCE_FAILED');
45
- }
46
- });
47
- }
48
- function delay(ms) {
49
- return new Promise((resolve) => {
50
- setTimeout(resolve, ms);
51
- });
52
- }
53
- async function waitForConflictRetryWindow(db, sessionId, workstreamId, projectPath, runnerId, backoffMinutes, mergeLockHeartbeat) {
54
- if (backoffMinutes <= 0) {
55
- return;
56
- }
57
- let remainingMs = backoffMinutes * 60_000;
58
- const heartbeatSliceMs = 30_000;
59
- while (remainingMs > 0) {
60
- const waitMs = Math.min(heartbeatSliceMs, remainingMs);
61
- await delay(waitMs);
62
- remainingMs -= waitMs;
63
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
64
- if (mergeLockHeartbeat) {
65
- (0, merge_lock_js_1.refreshMergeLock)(db, sessionId, runnerId, mergeLockHeartbeat.timeoutMinutes, mergeLockHeartbeat.lockEpoch);
66
- }
67
- }
68
- }
69
- async function runConflictResolutionCycle(options) {
70
- const { db, projectPath, sessionId, workstreamId, runnerId, mergeLockHeartbeat, branchName, position, commitSha, existingTaskId, } = options;
71
- const shortSha = commitSha.slice(0, 7);
72
- const conflictedFiles = (0, merge_git_js_1.getConflictedFiles)(projectPath);
73
- const conflictPatch = (0, merge_git_js_1.getCommitPatch)(projectPath, commitSha);
74
- const commitMessage = (0, merge_git_js_1.getCommitMessage)(projectPath, commitSha);
75
- const taskId = (0, merge_conflict_task_js_1.ensureMergeConflictTask)(db, workstreamId, shortSha, branchName, commitMessage, conflictedFiles, conflictPatch, !existingTaskId);
76
- let conflictTaskId = existingTaskId ?? taskId;
77
- if (conflictTaskId !== taskId) {
78
- conflictTaskId = taskId;
79
- }
80
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'conflict', conflictTaskId);
81
- const currentConflictTask = (0, queries_js_1.getTask)(db, conflictTaskId);
82
- if (!currentConflictTask) {
83
- throw new merge_errors_js_1.ParallelMergeError('Created merge-conflict task not found', 'TASK_MISSING');
84
- }
85
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
86
- if (currentConflictTask.status === 'completed') {
87
- const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD'], { allowFailure: true }).trim();
88
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'applied', conflictTaskId, appliedCommitSha || null);
89
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
90
- return 'continued';
91
- }
92
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator');
93
- while (true) {
94
- const conflictAttempt = (0, merge_conflict_attempts_js_1.recordConflictAttempt)(sessionId, workstreamId);
95
- if (conflictAttempt.blocked) {
96
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', `Conflict resolution attempt limit reached (${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS}). Session moved to blocked_conflict.`);
97
- throw new merge_errors_js_1.ParallelMergeError(`Conflict resolution exceeded ${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS} attempts for ${shortSha}`, 'CONFLICT_ATTEMPT_LIMIT');
98
- }
99
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
100
- if (conflictAttempt.attempts > 1 && (conflictAttempt.backoffMinutes ?? 0) > 0) {
101
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', `Waiting ${conflictAttempt.backoffMinutes} minute(s) before retry ${conflictAttempt.attempts}.`);
102
- await waitForConflictRetryWindow(db, sessionId, workstreamId, projectPath, runnerId, conflictAttempt.backoffMinutes ?? 0, mergeLockHeartbeat);
103
- }
104
- const existingTask = (0, queries_js_1.getTask)(db, currentConflictTask.id);
105
- const noteParts = [`Attempt ${conflictAttempt.attempts}/${merge_conflict_attempts_js_1.MAX_CONFLICT_ATTEMPTS}.`];
106
- if (existingTask?.rejection_count) {
107
- noteParts.push(`After ${existingTask.rejection_count} rejection(s).`);
108
- }
109
- const lastNotes = noteParts.join(' ');
110
- const coderPrompt = (0, merge_conflict_prompts_js_1.createPromptForConflictCoder)({
111
- workstreamId,
112
- shortSha,
113
- branchName,
114
- commitMessage,
115
- conflictedFiles,
116
- conflictPatch,
117
- rejectionNotes: lastNotes,
118
- });
119
- await (0, merge_conflict_invoke_js_1.invokeMergeConflictModel)('coder', projectPath, currentConflictTask.id, coderPrompt);
120
- const remaining = (0, merge_git_js_1.getConflictedFiles)(projectPath);
121
- if (remaining.length > 0) {
122
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', `Conflict markers still present: ${remaining.join(', ')}`);
123
- continue;
124
- }
125
- const stagedFiles = (0, merge_git_js_1.getCachedFiles)(projectPath);
126
- const stagedDiff = (0, merge_git_js_1.getCachedDiff)(projectPath);
127
- if (stagedFiles.length === 0 || stagedDiff.trim().length === 0) {
128
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'in_progress', 'merge-conflict-orchestrator', 'No staged diff found. Stage resolved files before requesting review.');
129
- continue;
130
- }
131
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'review', 'merge-conflict-orchestrator');
132
- const reviewerPrompt = (0, merge_conflict_prompts_js_1.createPromptForConflictReviewer)({
133
- workstreamId,
134
- shortSha,
135
- branchName,
136
- commitMessage,
137
- stagedDiff,
138
- stagedFiles,
139
- });
140
- const decisionText = await (0, merge_conflict_invoke_js_1.invokeMergeConflictModel)('reviewer', projectPath, currentConflictTask.id, reviewerPrompt);
141
- const decision = (0, merge_conflict_prompts_js_1.parseReviewDecision)(decisionText);
142
- if (decision.decision === 'reject') {
143
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', decision.notes);
144
- continue;
145
- }
146
- if ((0, merge_git_js_1.hasUnmergedFiles)(projectPath)) {
147
- (0, queries_js_1.rejectTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', 'Conflict markers still present. Please fix.');
148
- continue;
149
- }
150
- if (!(0, merge_git_js_1.hasCherryPickInProgress)(projectPath)) {
151
- throw new merge_errors_js_1.ParallelMergeError('Cherry-pick no longer in progress while resolving conflict', 'CHERRY_PICK_CONTEXT_LOST');
152
- }
153
- try {
154
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
155
- (0, merge_git_js_1.runGitCommand)(projectPath, ['-c', 'core.editor=true', 'cherry-pick', '--continue']);
156
- (0, queries_js_1.approveTask)(db, currentConflictTask.id, 'merge-conflict-reviewer', decision.notes);
157
- const appliedCommitSha = (0, merge_git_js_1.runGitCommand)(projectPath, ['rev-parse', 'HEAD'], { allowFailure: true }).trim();
158
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'applied', currentConflictTask.id, appliedCommitSha || null);
159
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
160
- return 'continued';
161
- }
162
- catch (error) {
163
- const message = error instanceof Error ? error.message : String(error);
164
- if (/nothing to commit|previous cherry-pick is empty/i.test(message)) {
165
- refreshMergeConflictLease(sessionId, workstreamId, projectPath, runnerId);
166
- (0, merge_git_js_1.runGitCommand)(projectPath, ['cherry-pick', '--skip']);
167
- (0, merge_progress_js_1.upsertProgressEntry)(db, sessionId, workstreamId, position, commitSha, 'skipped', currentConflictTask.id);
168
- (0, queries_js_1.updateTaskStatus)(db, currentConflictTask.id, 'completed', 'merge-conflict-reviewer', 'Cherry-pick is now empty after resolution; skipped this commit.');
169
- (0, merge_conflict_attempts_js_1.clearConflictAttemptState)(sessionId, workstreamId);
170
- return 'skipped';
171
- }
172
- throw error;
173
- }
174
- }
175
- }
176
- //# sourceMappingURL=merge-conflict.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-conflict.js","sourceRoot":"","sources":["../../src/parallel/merge-conflict.ts"],"names":[],"mappings":"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"}
@@ -1,12 +0,0 @@
1
- /**
2
- * Merge orchestration error type.
3
- */
4
- export declare class ParallelMergeError extends Error {
5
- readonly code: string;
6
- readonly details?: Record<string, string | number | boolean | null>;
7
- constructor(message: string, code?: string, options?: {
8
- cause?: unknown;
9
- details?: Record<string, string | number | boolean | null>;
10
- });
11
- }
12
- //# sourceMappingURL=merge-errors.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-errors.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,qBAAa,kBAAmB,SAAQ,KAAK;IAC3C,SAAgB,IAAI,EAAE,MAAM,CAAC;IAC7B,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAC;gBAGzE,OAAO,EAAE,MAAM,EACf,IAAI,SAAyB,EAC7B,OAAO,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,OAAO,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,CAAA;KAAE;CAO5F"}
@@ -1,18 +0,0 @@
1
- "use strict";
2
- /**
3
- * Merge orchestration error type.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.ParallelMergeError = void 0;
7
- class ParallelMergeError extends Error {
8
- code;
9
- details;
10
- constructor(message, code = 'PARALLEL_MERGE_ERROR', options) {
11
- super(message, options);
12
- this.name = 'ParallelMergeError';
13
- this.code = code;
14
- this.details = options?.details;
15
- }
16
- }
17
- exports.ParallelMergeError = ParallelMergeError;
18
- //# sourceMappingURL=merge-errors.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-errors.js","sourceRoot":"","sources":["../../src/parallel/merge-errors.ts"],"names":[],"mappings":";AAAA;;GAEG;;;AAEH,MAAa,kBAAmB,SAAQ,KAAK;IAC3B,IAAI,CAAS;IACb,OAAO,CAAoD;IAE3E,YACE,OAAe,EACf,IAAI,GAAG,sBAAsB,EAC7B,OAAyF;QAEzF,KAAK,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;QACxB,IAAI,CAAC,IAAI,GAAG,oBAAoB,CAAC;QACjC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,OAAO,GAAG,OAAO,EAAE,OAAO,CAAC;IAClC,CAAC;CACF;AAdD,gDAcC"}
@@ -1,25 +0,0 @@
1
- /**
2
- * Git helper operations used by parallel merge orchestration.
3
- */
4
- export interface GitCommandOptions {
5
- allowFailure?: boolean;
6
- maxBuffer?: number;
7
- timeoutMs?: number;
8
- }
9
- export declare function runGitCommand(cwd: string, args: string[], options?: GitCommandOptions): string;
10
- export declare function cleanTreeHasConflicts(projectPath: string): boolean;
11
- export declare function hasUnmergedFiles(projectPath: string): boolean;
12
- export declare function gitStatusLines(projectPath: string): string[];
13
- export declare function hasCherryPickInProgress(projectPath: string): boolean;
14
- export declare function getWorkstreamCommitList(projectPath: string, remote: string, workstreamBranch: string, mainBranch: string): string[];
15
- export declare function getCommitPatch(projectPath: string, commitSha: string): string;
16
- export declare function getCommitMessage(projectPath: string, commitSha: string): string;
17
- export declare function getCommitShortSha(commitSha: string): string;
18
- export declare function getConflictedFiles(projectPath: string): string[];
19
- export declare function getCachedDiff(projectPath: string): string;
20
- export declare function getCachedFiles(projectPath: string): string[];
21
- export declare function isNonFatalFetchResult(output: string): boolean;
22
- export declare function isMissingRemoteBranchFailure(output: string): boolean;
23
- export declare function safeRunMergeCommand(projectPath: string, remote: string, branchName: string): void;
24
- export declare function isNoPushError(output: string): boolean;
25
- //# sourceMappingURL=merge-git.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-git.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-git.ts"],"names":[],"mappings":"AAAA;;GAEG;AAOH,MAAM,WAAW,iBAAiB;IAChC,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,aAAa,CAC3B,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,EAAE,EACd,OAAO,GAAE,iBAAsB,GAC9B,MAAM,CA+BR;AAED,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAGlE;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAG7D;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAM5D;AAED,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAEpE;AAED,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EACd,gBAAgB,EAAE,MAAM,EACxB,UAAU,EAAE,MAAM,GACjB,MAAM,EAAE,CA0BV;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE7E;AAED,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED,wBAAgB,iBAAiB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAGhE;AAED,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,EAAE,CAG5D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAO7D;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CASpE;AAED,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,IAAI,CAoBjG;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAGrD"}
@@ -1,141 +0,0 @@
1
- "use strict";
2
- /**
3
- * Git helper operations used by parallel merge orchestration.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.runGitCommand = runGitCommand;
7
- exports.cleanTreeHasConflicts = cleanTreeHasConflicts;
8
- exports.hasUnmergedFiles = hasUnmergedFiles;
9
- exports.gitStatusLines = gitStatusLines;
10
- exports.hasCherryPickInProgress = hasCherryPickInProgress;
11
- exports.getWorkstreamCommitList = getWorkstreamCommitList;
12
- exports.getCommitPatch = getCommitPatch;
13
- exports.getCommitMessage = getCommitMessage;
14
- exports.getCommitShortSha = getCommitShortSha;
15
- exports.getConflictedFiles = getConflictedFiles;
16
- exports.getCachedDiff = getCachedDiff;
17
- exports.getCachedFiles = getCachedFiles;
18
- exports.isNonFatalFetchResult = isNonFatalFetchResult;
19
- exports.isMissingRemoteBranchFailure = isMissingRemoteBranchFailure;
20
- exports.safeRunMergeCommand = safeRunMergeCommand;
21
- exports.isNoPushError = isNoPushError;
22
- const node_child_process_1 = require("node:child_process");
23
- const node_fs_1 = require("node:fs");
24
- const node_path_1 = require("node:path");
25
- const merge_errors_js_1 = require("./merge-errors.js");
26
- function runGitCommand(cwd, args, options = {}) {
27
- const { allowFailure = false, timeoutMs = 120_000 } = options;
28
- try {
29
- return (0, node_child_process_1.execFileSync)('git', args, {
30
- cwd,
31
- encoding: 'utf-8',
32
- stdio: ['pipe', 'pipe', 'pipe'],
33
- timeout: timeoutMs,
34
- maxBuffer: options.maxBuffer,
35
- env: { ...process.env, GIT_TERMINAL_PROMPT: '0' },
36
- }).trim();
37
- }
38
- catch (error) {
39
- if (allowFailure) {
40
- if (error instanceof Error) {
41
- const err = error;
42
- return [err.stdout, err.stderr]
43
- .map((value) => (typeof value === 'string' ? value : value?.toString()))
44
- .filter(Boolean)
45
- .join('\n')
46
- .trim();
47
- }
48
- return '';
49
- }
50
- const err = error;
51
- const stderr = err.stderr ? err.stderr.toString() : '';
52
- const stdout = err.stdout ? err.stdout.toString() : '';
53
- const details = [stderr, stdout].filter(Boolean).join('\n') || err.message || 'Unknown git error';
54
- throw new merge_errors_js_1.ParallelMergeError(`Git command failed: git ${args.join(' ')}\n${details}`, 'GIT_ERROR');
55
- }
56
- }
57
- function cleanTreeHasConflicts(projectPath) {
58
- const status = runGitCommand(projectPath, ['status', '--porcelain']);
59
- return status.split('\n').some((line) => line.startsWith('UU') || line.includes('U'));
60
- }
61
- function hasUnmergedFiles(projectPath) {
62
- const unmerged = runGitCommand(projectPath, ['diff', '--name-only', '--diff-filter=U']);
63
- return unmerged.trim().length > 0;
64
- }
65
- function gitStatusLines(projectPath) {
66
- // Merge preflight only needs to block on tracked changes/conflicts.
67
- // Untracked files (for example runtime metadata folders) should not block
68
- // cherry-pick merge execution in integration workspaces.
69
- const status = runGitCommand(projectPath, ['status', '--porcelain', '--untracked-files=no']);
70
- return status.split('\n').filter(Boolean);
71
- }
72
- function hasCherryPickInProgress(projectPath) {
73
- return (0, node_fs_1.existsSync)((0, node_path_1.resolve)(projectPath, '.git', 'CHERRY_PICK_HEAD'));
74
- }
75
- function getWorkstreamCommitList(projectPath, remote, workstreamBranch, mainBranch) {
76
- const arg = `${mainBranch}..${remote}/${workstreamBranch}`;
77
- const output = runGitCommand(projectPath, ['log', arg, '--format=%H', '--reverse'], { allowFailure: true });
78
- if (/error:|fatal:|error /.test(output.toLowerCase()) && !isMissingRemoteBranchFailure(output)) {
79
- throw new merge_errors_js_1.ParallelMergeError(`Failed to list commits from ${remote}/${workstreamBranch}: ${output}`, 'COMMIT_LIST_FAILED');
80
- }
81
- if (isMissingRemoteBranchFailure(output)) {
82
- throw new merge_errors_js_1.ParallelMergeError(`Remote branch is missing: ${remote}/${workstreamBranch}`, 'REMOTE_BRANCH_MISSING');
83
- }
84
- return output
85
- .split('\n')
86
- .map((line) => line.trim())
87
- .filter(Boolean);
88
- }
89
- function getCommitPatch(projectPath, commitSha) {
90
- return runGitCommand(projectPath, ['show', commitSha, '--']);
91
- }
92
- function getCommitMessage(projectPath, commitSha) {
93
- return runGitCommand(projectPath, ['log', '-1', '--format=%s%n%b', commitSha]);
94
- }
95
- function getCommitShortSha(commitSha) {
96
- return commitSha.length > 7 ? commitSha.slice(0, 7) : commitSha;
97
- }
98
- function getConflictedFiles(projectPath) {
99
- const output = runGitCommand(projectPath, ['diff', '--name-only', '--diff-filter=U']);
100
- return output.split('\n').filter(Boolean);
101
- }
102
- function getCachedDiff(projectPath) {
103
- return runGitCommand(projectPath, ['diff', '--cached']);
104
- }
105
- function getCachedFiles(projectPath) {
106
- const output = runGitCommand(projectPath, ['diff', '--cached', '--name-only']);
107
- return output.split('\n').filter(Boolean);
108
- }
109
- function isNonFatalFetchResult(output) {
110
- const lower = output.toLowerCase();
111
- return (lower.includes('couldn\'t find remote ref') ||
112
- lower.includes('does not exist') ||
113
- lower.includes('fatal: remote ref does not exist'));
114
- }
115
- function isMissingRemoteBranchFailure(output) {
116
- const lower = output.toLowerCase();
117
- return (lower.includes('couldn\'t find remote ref') ||
118
- (lower.includes('remote branch') && lower.includes('not found')) ||
119
- lower.includes('unknown revision or path not in the working tree') ||
120
- lower.includes('does not exist') ||
121
- lower.includes('fatal: remote ref does not exist'));
122
- }
123
- function safeRunMergeCommand(projectPath, remote, branchName) {
124
- const output = runGitCommand(projectPath, ['fetch', '--prune', remote, branchName], { allowFailure: true });
125
- const lower = output.toLowerCase();
126
- if (!/error:|fatal:/.test(lower)) {
127
- return;
128
- }
129
- if (isMissingRemoteBranchFailure(lower)) {
130
- throw new merge_errors_js_1.ParallelMergeError(`Remote branch is missing: ${remote}/${branchName}. Refusing to continue merge.`, 'REMOTE_BRANCH_MISSING');
131
- }
132
- if (isNonFatalFetchResult(lower)) {
133
- return;
134
- }
135
- throw new merge_errors_js_1.ParallelMergeError(`Failed to fetch ${branchName} from ${remote}: ${output}`, 'FETCH_FAILED');
136
- }
137
- function isNoPushError(output) {
138
- const lower = output.toLowerCase();
139
- return lower.includes('error:') || lower.includes('fatal:');
140
- }
141
- //# sourceMappingURL=merge-git.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-git.js","sourceRoot":"","sources":["../../src/parallel/merge-git.ts"],"names":[],"mappings":"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"}
@@ -1,28 +0,0 @@
1
- /**
2
- * Merge lock management for concurrent merge workers.
3
- */
4
- import type Database from 'better-sqlite3';
5
- export interface MergeLockRecord {
6
- id: number;
7
- session_id: string;
8
- runner_id: string;
9
- lock_epoch: number;
10
- acquired_at: string;
11
- expires_at: string;
12
- heartbeat_at: string;
13
- }
14
- export interface MergeLockOptions {
15
- sessionId: string;
16
- runnerId: string;
17
- timeoutMinutes: number;
18
- }
19
- export declare function isLockExpired(lock: MergeLockRecord): boolean;
20
- export declare function getLatestMergeLock(db: Database.Database, sessionId: string): MergeLockRecord | null;
21
- export declare function acquireMergeLock(db: Database.Database, options: MergeLockOptions): {
22
- acquired: boolean;
23
- lock?: MergeLockRecord;
24
- };
25
- export declare function refreshMergeLock(db: Database.Database, sessionId: string, runnerId: string, timeoutMinutes: number, lockEpoch: number): MergeLockRecord;
26
- export declare function assertMergeLockEpoch(db: Database.Database, sessionId: string, runnerId: string, lockEpoch: number): void;
27
- export declare function releaseMergeLock(db: Database.Database, sessionId: string, runnerId: string, lockEpoch: number): void;
28
- //# sourceMappingURL=merge-lock.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-lock.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-lock.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAG3C,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,EAAE,MAAM,CAAC;CACxB;AAUD,wBAAgB,aAAa,CAAC,IAAI,EAAE,eAAe,GAAG,OAAO,CAE5D;AAUD,wBAAgB,kBAAkB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CASnG;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,OAAO,EAAE,gBAAgB,GACxB;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,IAAI,CAAC,EAAE,eAAe,CAAA;CAAE,CAyC/C;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,MAAM,EACtB,SAAS,EAAE,MAAM,GAChB,eAAe,CAqBjB;AAED,wBAAgB,oBAAoB,CAClC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EACrB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,GAChB,IAAI,CAmBN;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAIpH"}
@@ -1,91 +0,0 @@
1
- "use strict";
2
- /**
3
- * Merge lock management for concurrent merge workers.
4
- */
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.isLockExpired = isLockExpired;
7
- exports.getLatestMergeLock = getLatestMergeLock;
8
- exports.acquireMergeLock = acquireMergeLock;
9
- exports.refreshMergeLock = refreshMergeLock;
10
- exports.assertMergeLockEpoch = assertMergeLockEpoch;
11
- exports.releaseMergeLock = releaseMergeLock;
12
- const merge_errors_js_1 = require("./merge-errors.js");
13
- function getNowISOString() {
14
- return new Date().toISOString();
15
- }
16
- function utcExpiresAt(timeoutMinutes) {
17
- return new Date(Date.now() + timeoutMinutes * 60_000).toISOString();
18
- }
19
- function isLockExpired(lock) {
20
- return new Date(lock.expires_at).getTime() < Date.now();
21
- }
22
- function getNextLockEpoch(db, sessionId) {
23
- const row = db
24
- .prepare('SELECT COALESCE(MAX(lock_epoch), 0) AS max_epoch FROM merge_locks WHERE session_id = ?')
25
- .get(sessionId);
26
- return (row?.max_epoch ?? 0) + 1;
27
- }
28
- function getLatestMergeLock(db, sessionId) {
29
- return db
30
- .prepare(`SELECT * FROM merge_locks
31
- WHERE session_id = ?
32
- ORDER BY acquired_at DESC
33
- LIMIT 1`)
34
- .get(sessionId);
35
- }
36
- function acquireMergeLock(db, options) {
37
- const acquireTx = db.transaction(() => {
38
- const lock = getLatestMergeLock(db, options.sessionId);
39
- if (lock && !isLockExpired(lock)) {
40
- if (lock.runner_id === options.runnerId) {
41
- const refreshed = refreshMergeLock(db, lock.session_id, options.runnerId, options.timeoutMinutes, lock.lock_epoch);
42
- return { acquired: true, lock: refreshed };
43
- }
44
- return { acquired: false, lock };
45
- }
46
- const lockEpoch = getNextLockEpoch(db, options.sessionId);
47
- db.prepare('DELETE FROM merge_locks WHERE session_id = ?').run(options.sessionId);
48
- const inserted = db.prepare('INSERT INTO merge_locks (session_id, runner_id, lock_epoch, acquired_at, expires_at, heartbeat_at) VALUES (?, ?, ?, ?, ?, ?)').run(options.sessionId, options.runnerId, lockEpoch, getNowISOString(), utcExpiresAt(options.timeoutMinutes), getNowISOString());
49
- if (inserted.changes !== 1) {
50
- return { acquired: false };
51
- }
52
- return { acquired: true, lock: getLatestMergeLock(db, options.sessionId) ?? undefined };
53
- });
54
- return acquireTx();
55
- }
56
- function refreshMergeLock(db, sessionId, runnerId, timeoutMinutes, lockEpoch) {
57
- const result = db.prepare(`UPDATE merge_locks
58
- SET heartbeat_at = ?, expires_at = ?
59
- WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?`).run(getNowISOString(), utcExpiresAt(timeoutMinutes), sessionId, runnerId, lockEpoch);
60
- if (result.changes !== 1) {
61
- throw new merge_errors_js_1.ParallelMergeError('Lost merge lock fence while refreshing heartbeat', 'MERGE_LOCK_FENCE_LOST');
62
- }
63
- const lock = getLatestMergeLock(db, sessionId);
64
- if (!lock) {
65
- throw new merge_errors_js_1.ParallelMergeError('Lost merge lock unexpectedly', 'MERGE_LOCK_NOT_FOUND');
66
- }
67
- if (lock.lock_epoch !== lockEpoch || lock.runner_id !== runnerId) {
68
- throw new merge_errors_js_1.ParallelMergeError('Merge lock epoch mismatch detected', 'MERGE_LOCK_EPOCH_MISMATCH');
69
- }
70
- return lock;
71
- }
72
- function assertMergeLockEpoch(db, sessionId, runnerId, lockEpoch) {
73
- const row = db
74
- .prepare(`SELECT session_id, runner_id, lock_epoch, expires_at
75
- FROM merge_locks
76
- WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?
77
- LIMIT 1`)
78
- .get(sessionId, runnerId, lockEpoch);
79
- if (!row) {
80
- throw new merge_errors_js_1.ParallelMergeError('Merge lock fence no longer owned by current runner', 'MERGE_LOCK_FENCE_LOST');
81
- }
82
- if (new Date(row.expires_at).getTime() < Date.now()) {
83
- throw new merge_errors_js_1.ParallelMergeError('Merge lock expired', 'MERGE_LOCK_EXPIRED');
84
- }
85
- }
86
- function releaseMergeLock(db, sessionId, runnerId, lockEpoch) {
87
- db
88
- .prepare('DELETE FROM merge_locks WHERE session_id = ? AND runner_id = ? AND lock_epoch = ?')
89
- .run(sessionId, runnerId, lockEpoch);
90
- }
91
- //# sourceMappingURL=merge-lock.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-lock.js","sourceRoot":"","sources":["../../src/parallel/merge-lock.ts"],"names":[],"mappings":"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"}
@@ -1,21 +0,0 @@
1
- /**
2
- * Per-workstream commit processing
3
- */
4
- import { MergeProgressRow } from './merge-progress.js';
5
- import { openDatabase } from '../database/connection.js';
6
- interface MergeWorkstreamSpec {
7
- id: string;
8
- branchName: string;
9
- }
10
- export declare function processWorkstream(db: ReturnType<typeof openDatabase>['db'], projectPath: string, sessionId: string, workstream: MergeWorkstreamSpec, mainBranch: string, remote: string, progressRows: MergeProgressRow[], heartbeat: {
11
- sessionId: string;
12
- runnerId: string;
13
- timeoutMinutes: number;
14
- lockEpoch: number;
15
- }): Promise<{
16
- applied: number;
17
- skipped: number;
18
- conflicts: number;
19
- }>;
20
- export {};
21
- //# sourceMappingURL=merge-process.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"merge-process.d.ts","sourceRoot":"","sources":["../../src/parallel/merge-process.ts"],"names":[],"mappings":"AAAA;;GAEG;AAQH,OAAO,EAIL,gBAAgB,EACjB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAEzD,UAAU,mBAAmB;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,iBAAiB,CACrC,EAAE,EAAE,UAAU,CAAC,OAAO,YAAY,CAAC,CAAC,IAAI,CAAC,EACzC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,mBAAmB,EAC/B,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,EACd,YAAY,EAAE,gBAAgB,EAAE,EAChC,SAAS,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,GAC5F,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CAsHlE"}