agent-composer 0.3.1 → 0.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (180) hide show
  1. package/README.md +495 -180
  2. package/composer.config.schema.json +206 -2
  3. package/dist/cli/cleanup.d.ts +24 -0
  4. package/dist/cli/cleanup.js +151 -0
  5. package/dist/cli/cleanup.js.map +1 -0
  6. package/dist/cli/doctor.d.ts +12 -0
  7. package/dist/cli/doctor.js +244 -4
  8. package/dist/cli/doctor.js.map +1 -1
  9. package/dist/cli/goal.d.ts +28 -0
  10. package/dist/cli/goal.js +251 -0
  11. package/dist/cli/goal.js.map +1 -0
  12. package/dist/cli/help.d.ts +3 -0
  13. package/dist/cli/help.js +31 -0
  14. package/dist/cli/help.js.map +1 -0
  15. package/dist/cli/init.d.ts +5 -0
  16. package/dist/cli/init.js +116 -21
  17. package/dist/cli/init.js.map +1 -1
  18. package/dist/cli/initArgs.d.ts +16 -0
  19. package/dist/cli/initArgs.js +19 -0
  20. package/dist/cli/initArgs.js.map +1 -0
  21. package/dist/cli/installGitHook.d.ts +7 -0
  22. package/dist/cli/installGitHook.js +61 -0
  23. package/dist/cli/installGitHook.js.map +1 -0
  24. package/dist/cli/mode.d.ts +6 -0
  25. package/dist/cli/mode.js +25 -0
  26. package/dist/cli/mode.js.map +1 -0
  27. package/dist/cli/status.d.ts +105 -0
  28. package/dist/cli/status.js +400 -0
  29. package/dist/cli/status.js.map +1 -0
  30. package/dist/config/env.d.ts +1 -1
  31. package/dist/config/modes.d.ts +10 -0
  32. package/dist/config/modes.js +26 -0
  33. package/dist/config/modes.js.map +1 -0
  34. package/dist/config/oracleRole.d.ts +10 -0
  35. package/dist/config/oracleRole.js +11 -0
  36. package/dist/config/oracleRole.js.map +1 -0
  37. package/dist/config/schema.d.ts +246 -0
  38. package/dist/config/schema.js +127 -2
  39. package/dist/config/schema.js.map +1 -1
  40. package/dist/evolve/reflection.d.ts +9 -0
  41. package/dist/evolve/reflection.js +14 -0
  42. package/dist/evolve/reflection.js.map +1 -1
  43. package/dist/evolve/runner.d.ts +2 -1
  44. package/dist/evolve/runner.js +2 -1
  45. package/dist/evolve/runner.js.map +1 -1
  46. package/dist/index.js +115 -6
  47. package/dist/index.js.map +1 -1
  48. package/dist/providers/AnthropicCompatibleProvider.d.ts +13 -1
  49. package/dist/providers/AnthropicCompatibleProvider.js +115 -9
  50. package/dist/providers/AnthropicCompatibleProvider.js.map +1 -1
  51. package/dist/providers/CLIProvider.d.ts +18 -0
  52. package/dist/providers/CLIProvider.js +265 -62
  53. package/dist/providers/CLIProvider.js.map +1 -1
  54. package/dist/providers/IProvider.d.ts +12 -0
  55. package/dist/providers/SpendGuardProvider.d.ts +32 -0
  56. package/dist/providers/SpendGuardProvider.js +98 -0
  57. package/dist/providers/SpendGuardProvider.js.map +1 -0
  58. package/dist/registry.d.ts +5 -2
  59. package/dist/registry.js +17 -2
  60. package/dist/registry.js.map +1 -1
  61. package/dist/server/activeRuns.d.ts +17 -0
  62. package/dist/server/activeRuns.js +114 -0
  63. package/dist/server/activeRuns.js.map +1 -0
  64. package/dist/server/codexLifecycleRunner.d.ts +29 -0
  65. package/dist/server/codexLifecycleRunner.js +188 -0
  66. package/dist/server/codexLifecycleRunner.js.map +1 -0
  67. package/dist/server/configMutation.d.ts +22 -0
  68. package/dist/server/configMutation.js +121 -0
  69. package/dist/server/configMutation.js.map +1 -0
  70. package/dist/server/handoffContext.d.ts +1 -0
  71. package/dist/server/handoffContext.js +12 -0
  72. package/dist/server/handoffContext.js.map +1 -0
  73. package/dist/server/progress.d.ts +24 -0
  74. package/dist/server/progress.js +109 -0
  75. package/dist/server/progress.js.map +1 -0
  76. package/dist/server/toolDescriptions.d.ts +60 -0
  77. package/dist/server/toolDescriptions.js +134 -0
  78. package/dist/server/toolDescriptions.js.map +1 -0
  79. package/dist/server.d.ts +19 -25
  80. package/dist/server.js +87 -377
  81. package/dist/server.js.map +1 -1
  82. package/dist/tools/audit.d.ts +2 -0
  83. package/dist/tools/audit.js +66 -0
  84. package/dist/tools/audit.js.map +1 -0
  85. package/dist/tools/code.d.ts +2 -0
  86. package/dist/tools/code.js +160 -0
  87. package/dist/tools/code.js.map +1 -0
  88. package/dist/tools/codexLifecycle.d.ts +2 -0
  89. package/dist/tools/codexLifecycle.js +206 -0
  90. package/dist/tools/codexLifecycle.js.map +1 -0
  91. package/dist/tools/config.d.ts +2 -0
  92. package/dist/tools/config.js +183 -0
  93. package/dist/tools/config.js.map +1 -0
  94. package/dist/tools/context.d.ts +31 -0
  95. package/dist/tools/context.js +2 -0
  96. package/dist/tools/context.js.map +1 -0
  97. package/dist/tools/goal.d.ts +2 -0
  98. package/dist/tools/goal.js +159 -0
  99. package/dist/tools/goal.js.map +1 -0
  100. package/dist/tools/handoff.d.ts +2 -0
  101. package/dist/tools/handoff.js +57 -0
  102. package/dist/tools/handoff.js.map +1 -0
  103. package/dist/tools/oracle.d.ts +2 -0
  104. package/dist/tools/oracle.js +248 -0
  105. package/dist/tools/oracle.js.map +1 -0
  106. package/dist/tools/research.d.ts +2 -0
  107. package/dist/tools/research.js +51 -0
  108. package/dist/tools/research.js.map +1 -0
  109. package/dist/tools/review.d.ts +2 -0
  110. package/dist/tools/review.js +233 -0
  111. package/dist/tools/review.js.map +1 -0
  112. package/dist/tools/route.d.ts +2 -0
  113. package/dist/tools/route.js +69 -0
  114. package/dist/tools/route.js.map +1 -0
  115. package/dist/tools/session.d.ts +2 -0
  116. package/dist/tools/session.js +37 -0
  117. package/dist/tools/session.js.map +1 -0
  118. package/dist/tools/status.d.ts +2 -0
  119. package/dist/tools/status.js +34 -0
  120. package/dist/tools/status.js.map +1 -0
  121. package/dist/tools/workflow.d.ts +2 -0
  122. package/dist/tools/workflow.js +27 -0
  123. package/dist/tools/workflow.js.map +1 -0
  124. package/dist/util/applyFileBlocks.d.ts +18 -0
  125. package/dist/util/applyFileBlocks.js +163 -0
  126. package/dist/util/applyFileBlocks.js.map +1 -0
  127. package/dist/util/asyncControl.d.ts +14 -0
  128. package/dist/util/asyncControl.js +106 -0
  129. package/dist/util/asyncControl.js.map +1 -0
  130. package/dist/util/auditLog.d.ts +56 -0
  131. package/dist/util/auditLog.js +232 -0
  132. package/dist/util/auditLog.js.map +1 -0
  133. package/dist/util/codexLifecycle.d.ts +55 -0
  134. package/dist/util/codexLifecycle.js +102 -0
  135. package/dist/util/codexLifecycle.js.map +1 -0
  136. package/dist/util/codexLifecycleJob.d.ts +209 -0
  137. package/dist/util/codexLifecycleJob.js +360 -0
  138. package/dist/util/codexLifecycleJob.js.map +1 -0
  139. package/dist/util/composerDisabled.d.ts +6 -0
  140. package/dist/util/composerDisabled.js +27 -0
  141. package/dist/util/composerDisabled.js.map +1 -0
  142. package/dist/util/dispatchHint.d.ts +5 -3
  143. package/dist/util/dispatchHint.js +62 -2
  144. package/dist/util/dispatchHint.js.map +1 -1
  145. package/dist/util/goal.d.ts +132 -0
  146. package/dist/util/goal.js +616 -0
  147. package/dist/util/goal.js.map +1 -0
  148. package/dist/util/goalReport.d.ts +51 -0
  149. package/dist/util/goalReport.js +164 -0
  150. package/dist/util/goalReport.js.map +1 -0
  151. package/dist/util/jobPolling.d.ts +9 -0
  152. package/dist/util/jobPolling.js +17 -0
  153. package/dist/util/jobPolling.js.map +1 -0
  154. package/dist/util/oracleJob.d.ts +66 -0
  155. package/dist/util/oracleJob.js +295 -0
  156. package/dist/util/oracleJob.js.map +1 -0
  157. package/dist/util/oracleLock.d.ts +38 -0
  158. package/dist/util/oracleLock.js +182 -0
  159. package/dist/util/oracleLock.js.map +1 -0
  160. package/dist/util/reviewDiff.d.ts +8 -0
  161. package/dist/util/reviewDiff.js +29 -0
  162. package/dist/util/reviewDiff.js.map +1 -0
  163. package/dist/util/reviewJob.d.ts +57 -0
  164. package/dist/util/reviewJob.js +207 -0
  165. package/dist/util/reviewJob.js.map +1 -0
  166. package/dist/util/workflowPlan.d.ts +24 -0
  167. package/dist/util/workflowPlan.js +49 -0
  168. package/dist/util/workflowPlan.js.map +1 -0
  169. package/package.json +8 -1
  170. package/plugin/composer-mastermind/commands/evolve.md +4 -0
  171. package/plugin/composer-mastermind/hooks/boundary_guard.sh +43 -2
  172. package/plugin/composer-mastermind/hooks/codex_warm_review.sh +161 -9
  173. package/plugin/composer-mastermind/hooks/learn.sh +172 -32
  174. package/plugin/composer-mastermind/hooks/precommit_codex_review.sh +430 -62
  175. package/plugin/composer-mastermind/skills/composer-mastermind/SKILL.md +184 -4
  176. package/scripts/composer-oracle-router-safe.sh +47 -0
  177. package/scripts/composer-statusline-segment.mjs +40 -0
  178. package/scripts/oracle-codex-handoff-safe.sh +49 -0
  179. package/scripts/oracle-plan-mcp.sh +66 -0
  180. package/scripts/oracle-pro-safe.sh +471 -0
@@ -0,0 +1,616 @@
1
+ import { randomUUID } from "node:crypto";
2
+ import { chmodSync, existsSync, linkSync, lstatSync, mkdirSync, readFileSync, readdirSync, realpathSync, renameSync, rmSync, writeFileSync, } from "node:fs";
3
+ import { resolve } from "node:path";
4
+ import { z } from "zod";
5
+ export const GOAL_DIR = ".composer/goals";
6
+ const ACTIVE_GOAL_INDEX = ".active";
7
+ const GOAL_LOCK_TTL_MS = 30 * 60 * 1000;
8
+ export const TERMINAL_GOAL_STATES = new Set(["achieved", "cancelled", "failed"]);
9
+ export function isTerminal(state) {
10
+ return TERMINAL_GOAL_STATES.has(state);
11
+ }
12
+ export const GoalCheckSchema = z.object({
13
+ name: z.string().min(1),
14
+ command: z.string().min(1),
15
+ status: z.enum(["pending", "pass", "fail"]),
16
+ lastRunAt: z.string().datetime().optional(),
17
+ }).strict();
18
+ export const NextActionToolSchema = z.enum([
19
+ "none",
20
+ "composer_code_cli",
21
+ "composer_codex_lifecycle_run",
22
+ "composer_oracle_plan",
23
+ "composer_goal_status",
24
+ "composer_goal_step",
25
+ "composer_route_decide",
26
+ ]);
27
+ export const NextActionSchema = z.object({
28
+ tool: NextActionToolSchema,
29
+ args: z.record(z.string(), z.unknown()).optional(),
30
+ manualChecks: z.array(z.string().min(1)).optional(),
31
+ reason: z.string().min(1),
32
+ }).strict();
33
+ export const GoalHistoryEntrySchema = z.object({
34
+ turn: z.number().int().nonnegative(),
35
+ action: z.string().min(1),
36
+ verdict: z.string().min(1).optional(),
37
+ reason: z.string().min(1).optional(),
38
+ }).strict();
39
+ export const GoalSchema = z.object({
40
+ goalId: z.string().min(1),
41
+ objective: z.string().min(1),
42
+ condition: z.string().min(1),
43
+ checks: z.array(GoalCheckSchema).refine(hasUniqueCheckNames, {
44
+ message: "check names must be unique",
45
+ }),
46
+ state: z.enum(["active", "blocked", "achieved", "failed", "cancelled"]),
47
+ turns: z.number().int().nonnegative(),
48
+ maxTurns: z.number().int().positive(),
49
+ maxCost: z.number().nonnegative().optional(),
50
+ spentUsd: z.number().nonnegative().optional(),
51
+ conditionMet: z.boolean().optional(),
52
+ workflow: z.string().min(1).optional(),
53
+ mode: z.string().min(1).optional(),
54
+ risk: z.string().min(1).optional(),
55
+ createdAt: z.string().datetime(),
56
+ updatedAt: z.string().datetime(),
57
+ lastAction: z.string().min(1).optional(),
58
+ lastVerdict: z.string().min(1).optional(),
59
+ lastReason: z.string().min(1).optional(),
60
+ history: z.array(GoalHistoryEntrySchema).optional(),
61
+ }).strict();
62
+ export function startGoal(root, input) {
63
+ return withGoalLock(root, () => {
64
+ const open = scanActiveGoal(root);
65
+ if (open) {
66
+ throw new Error(`open goal already exists: ${open.goalId} (${open.state})`);
67
+ }
68
+ assertUniqueCheckNames(input.checks ?? []);
69
+ const now = currentIso(input.now);
70
+ const goalId = nextGoalId(root, input.idHint ?? input.objective, now);
71
+ const record = GoalSchema.parse({
72
+ goalId,
73
+ objective: input.objective,
74
+ condition: input.condition,
75
+ checks: (input.checks ?? []).map((check) => ({
76
+ name: check.name,
77
+ command: check.command,
78
+ status: "pending",
79
+ })),
80
+ state: "active",
81
+ turns: 0,
82
+ maxTurns: input.maxTurns ?? 12,
83
+ maxCost: input.maxCost,
84
+ workflow: input.workflow,
85
+ mode: input.mode,
86
+ risk: input.risk,
87
+ createdAt: now,
88
+ updatedAt: now,
89
+ history: [],
90
+ });
91
+ writeGoal(root, record, { exclusive: true });
92
+ writeActiveGoalIndex(root, record.goalId);
93
+ return record;
94
+ });
95
+ }
96
+ export function readActiveGoal(root) {
97
+ const indexed = readIndexedActiveGoal(root);
98
+ if (indexed)
99
+ return indexed;
100
+ const scanned = scanActiveGoal(root);
101
+ refreshActiveGoalIndex(root, scanned);
102
+ return scanned;
103
+ }
104
+ function scanActiveGoal(root) {
105
+ const dir = goalDir(root);
106
+ if (!existsSync(dir))
107
+ return null;
108
+ const records = readdirSync(dir)
109
+ .filter((name) => name.endsWith(".json"))
110
+ .map((name) => readGoal(root, name.slice(0, -".json".length)))
111
+ .filter((record) => record !== null)
112
+ .filter((record) => !isTerminal(record.state))
113
+ .sort((a, b) => a.createdAt.localeCompare(b.createdAt));
114
+ return records[0] ?? null;
115
+ }
116
+ export function readLatestGoal(root) {
117
+ const dir = goalDir(root);
118
+ if (!existsSync(dir))
119
+ return null;
120
+ const records = readdirSync(dir)
121
+ .filter((name) => name.endsWith(".json"))
122
+ .map((name) => readGoal(root, name.slice(0, -".json".length)))
123
+ .filter((record) => record !== null)
124
+ .sort((a, b) => b.updatedAt.localeCompare(a.updatedAt));
125
+ return records[0] ?? null;
126
+ }
127
+ export function readGoal(root, goalId) {
128
+ const dir = goalDir(root);
129
+ if (!existsSync(dir))
130
+ return null;
131
+ const filePath = goalPath(root, goalId);
132
+ if (!existsSync(filePath))
133
+ return null;
134
+ const realGoalDir = realpathSync(dir);
135
+ const realPath = realpathSync(filePath);
136
+ if (!isInside(realGoalDir, realPath)) {
137
+ throw new Error(`goalId must resolve under ${GOAL_DIR}; got ${goalId}`);
138
+ }
139
+ try {
140
+ return parseGoalFile(goalId, readFileSync(realPath, "utf8"));
141
+ }
142
+ catch (error) {
143
+ return classifyGoalReadError(error);
144
+ }
145
+ }
146
+ export function classifyGoalReadError(error) {
147
+ if (error.code === "ENOENT")
148
+ return null;
149
+ throw error;
150
+ }
151
+ function parseGoalFile(goalId, raw) {
152
+ try {
153
+ const parsed = GoalSchema.parse(JSON.parse(raw));
154
+ if (parsed.goalId !== goalId) {
155
+ return null;
156
+ }
157
+ return GoalSchema.parse({
158
+ ...parsed,
159
+ spentUsd: parsed.spentUsd ?? 0,
160
+ });
161
+ }
162
+ catch {
163
+ return null;
164
+ }
165
+ }
166
+ export function clearGoal(root, goalId) {
167
+ return withGoalLock(root, () => {
168
+ const existing = goalId ? readGoal(root, goalId) : readActiveGoal(root);
169
+ if (!existing)
170
+ return null;
171
+ if (isTerminal(existing.state))
172
+ return existing;
173
+ const updated = GoalSchema.parse({
174
+ ...existing,
175
+ state: "cancelled",
176
+ updatedAt: new Date().toISOString(),
177
+ });
178
+ writeGoal(root, updated);
179
+ clearActiveGoalIndex(root, updated.goalId);
180
+ return updated;
181
+ });
182
+ }
183
+ export function stepGoal(root, input) {
184
+ return withGoalLock(root, () => {
185
+ const existing = input.goalId ? readGoal(root, input.goalId) : readActiveGoal(root);
186
+ if (!existing) {
187
+ throw new Error(input.goalId ? `goal not found: ${input.goalId}` : "no active goal");
188
+ }
189
+ if (isTerminal(existing.state)) {
190
+ throw new Error(`cannot step goal ${existing.goalId}: state is ${existing.state} (terminal)`);
191
+ }
192
+ const signals = input.signals ?? {};
193
+ let base = existing;
194
+ if (base.state === "blocked" && signals.budgetExtension) {
195
+ base = GoalSchema.parse({
196
+ ...base,
197
+ state: "active",
198
+ maxTurns: signals.budgetExtension.maxTurns !== undefined
199
+ ? Math.max(base.maxTurns, signals.budgetExtension.maxTurns)
200
+ : base.maxTurns,
201
+ maxCost: maxOptional(base.maxCost, signals.budgetExtension.maxCost),
202
+ updatedAt: new Date().toISOString(),
203
+ });
204
+ }
205
+ const turns = base.turns + 1;
206
+ const spentUsd = (base.spentUsd ?? 0) + (signals.spentUsd ?? 0);
207
+ const beforeChecks = base.checks;
208
+ const checks = applyCheckResults(base.checks, signals.checkResults ?? []);
209
+ let record = GoalSchema.parse({
210
+ ...base,
211
+ checks,
212
+ turns,
213
+ spentUsd,
214
+ conditionMet: signals.conditionMet !== undefined ? signals.conditionMet : base.conditionMet,
215
+ updatedAt: new Date().toISOString(),
216
+ });
217
+ const overBudget = turns > record.maxTurns || isProjectedOverBudget(record);
218
+ if (overBudget) {
219
+ const verdict = record.checks.some((check) => check.status === "fail") ? "failed" : "blocked";
220
+ const nextAction = {
221
+ tool: "composer_goal_status",
222
+ reason: verdict === "failed"
223
+ ? "condition not met within budget - goal failed"
224
+ : "budget/turn cap reached - extend budget (budgetExtension) or clear",
225
+ };
226
+ record = recordWithAction(record, verdict, nextAction);
227
+ writeGoal(root, record);
228
+ updateActiveGoalIndexForRecord(root, record);
229
+ return { record, nextAction };
230
+ }
231
+ const nextAction = decideNextAction(record, beforeChecks, signals);
232
+ const verdict = nextAction.tool === "none" ? "achieved" : "active";
233
+ record = recordWithAction(record, verdict, nextAction);
234
+ writeGoal(root, record);
235
+ updateActiveGoalIndexForRecord(root, record);
236
+ return { record, nextAction };
237
+ });
238
+ }
239
+ function applyCheckResults(checks, checkResults) {
240
+ if (checkResults.length === 0)
241
+ return checks;
242
+ const checkNames = new Set(checks.map((check) => check.name));
243
+ const resultNames = new Set();
244
+ for (const result of checkResults) {
245
+ if (resultNames.has(result.name)) {
246
+ throw new Error(`duplicate check name in checkResults: ${result.name}`);
247
+ }
248
+ resultNames.add(result.name);
249
+ if (!checkNames.has(result.name)) {
250
+ throw new Error(`unknown check name in checkResults: ${result.name}`);
251
+ }
252
+ }
253
+ const byName = new Map(checkResults.map((result) => [result.name, result.passed]));
254
+ return checks.map((check) => {
255
+ const passed = byName.get(check.name);
256
+ if (passed === undefined)
257
+ return check;
258
+ return {
259
+ ...check,
260
+ status: passed ? "pass" : "fail",
261
+ lastRunAt: new Date().toISOString(),
262
+ };
263
+ });
264
+ }
265
+ function recordWithAction(record, state, nextAction) {
266
+ return GoalSchema.parse({
267
+ ...record,
268
+ state,
269
+ lastAction: nextAction.tool,
270
+ lastVerdict: state,
271
+ lastReason: nextAction.reason,
272
+ updatedAt: new Date().toISOString(),
273
+ history: [
274
+ ...(record.history ?? []),
275
+ {
276
+ turn: record.turns,
277
+ action: nextAction.tool,
278
+ verdict: state,
279
+ reason: nextAction.reason,
280
+ },
281
+ ].slice(-100),
282
+ });
283
+ }
284
+ function decideNextAction(record, beforeChecks, signals) {
285
+ const persisted = record.conditionMet;
286
+ const callerVetoes = persisted === false;
287
+ const allPass = record.checks.length > 0
288
+ && record.checks.every((check) => check.status === "pass");
289
+ const achieved = !callerVetoes && (allPass || (record.checks.length === 0 && persisted === true));
290
+ if (achieved) {
291
+ return {
292
+ tool: "none",
293
+ reason: "condition met",
294
+ };
295
+ }
296
+ if (callerVetoes && allPass) {
297
+ return {
298
+ tool: "composer_code_cli",
299
+ reason: "condition not yet met - keep working",
300
+ };
301
+ }
302
+ const pendingChecks = record.checks.filter((check) => check.status === "pending");
303
+ if (pendingChecks.length > 0) {
304
+ const pendingNames = pendingChecks.map((check) => check.name);
305
+ return {
306
+ tool: "composer_goal_status",
307
+ manualChecks: pendingNames,
308
+ reason: "composer_goal_status shows the declared check commands; run them yourself, then call composer_goal_step with --check-result name=pass|fail for each",
309
+ };
310
+ }
311
+ const noCheckProgress = record.checks.length > 0
312
+ && !record.checks.some((check) => check.status === "pass")
313
+ && !record.checks.some((check, index) => beforeChecks[index]?.status !== check.status);
314
+ if (signals.stuck === true || (record.turns >= Math.ceil(record.maxTurns / 2) && noCheckProgress)) {
315
+ return {
316
+ tool: "composer_oracle_plan",
317
+ reason: "stuck - strategic replan",
318
+ };
319
+ }
320
+ if ((signals.failedAttempts ?? 0) >= 2) {
321
+ return {
322
+ tool: "composer_codex_lifecycle_run",
323
+ reason: "2+ failed attempts - tactical rescue",
324
+ };
325
+ }
326
+ if (record.checks.some((check) => check.status === "fail")) {
327
+ return {
328
+ tool: "composer_code_cli",
329
+ reason: "checks failing - fix",
330
+ };
331
+ }
332
+ return {
333
+ tool: "composer_code_cli",
334
+ reason: "begin work toward condition",
335
+ };
336
+ }
337
+ function assertUniqueCheckNames(checks) {
338
+ const seen = new Set();
339
+ for (const check of checks) {
340
+ if (seen.has(check.name)) {
341
+ throw new Error(`duplicate check name: ${check.name}`);
342
+ }
343
+ seen.add(check.name);
344
+ }
345
+ }
346
+ function hasUniqueCheckNames(checks) {
347
+ try {
348
+ assertUniqueCheckNames(checks);
349
+ return true;
350
+ }
351
+ catch {
352
+ return false;
353
+ }
354
+ }
355
+ function maxOptional(current, candidate) {
356
+ if (candidate === undefined)
357
+ return current;
358
+ if (current === undefined)
359
+ return candidate;
360
+ return Math.max(current, candidate);
361
+ }
362
+ function writeGoal(root, record, options = {}) {
363
+ const validated = GoalSchema.parse(record);
364
+ const dir = goalDir(root);
365
+ ensureGoalDirectory(dir);
366
+ const filePath = goalPath(root, validated.goalId);
367
+ const tmpPath = resolve(dir, `.${validated.goalId}.${process.pid}.${randomUUID()}.tmp`);
368
+ const payload = `${JSON.stringify(validated, null, 2)}\n`;
369
+ writeFileSync(tmpPath, payload, { encoding: "utf8", mode: 0o600, flag: "wx" });
370
+ try {
371
+ if (options.exclusive) {
372
+ linkSync(tmpPath, filePath);
373
+ rmSync(tmpPath, { force: true });
374
+ }
375
+ else {
376
+ renameSync(tmpPath, filePath);
377
+ }
378
+ }
379
+ catch (error) {
380
+ rmSync(tmpPath, { force: true });
381
+ throw error;
382
+ }
383
+ return filePath;
384
+ }
385
+ function activeGoalIndexPath(root) {
386
+ return resolve(goalDir(root), ACTIVE_GOAL_INDEX);
387
+ }
388
+ function readIndexedActiveGoal(root) {
389
+ const dir = goalDir(root);
390
+ if (!existsSync(dir))
391
+ return null;
392
+ const indexPath = activeGoalIndexPath(root);
393
+ try {
394
+ if (!existsSync(indexPath))
395
+ return null;
396
+ if (lstatSync(indexPath).isSymbolicLink())
397
+ return null;
398
+ const goalId = readFileSync(indexPath, "utf8").trim();
399
+ if (goalId.length === 0)
400
+ return null;
401
+ const record = readGoal(root, goalId);
402
+ if (!record)
403
+ return null;
404
+ if (record.goalId !== goalId || isTerminal(record.state))
405
+ return null;
406
+ return record;
407
+ }
408
+ catch {
409
+ return null;
410
+ }
411
+ }
412
+ function refreshActiveGoalIndex(root, record) {
413
+ try {
414
+ if (record && !isTerminal(record.state)) {
415
+ writeActiveGoalIndex(root, record.goalId);
416
+ }
417
+ else {
418
+ rmSync(activeGoalIndexPath(root), { force: true });
419
+ }
420
+ }
421
+ catch {
422
+ // The index is only a fast-path hint.
423
+ }
424
+ }
425
+ function updateActiveGoalIndexForRecord(root, record) {
426
+ if (isTerminal(record.state)) {
427
+ clearActiveGoalIndex(root, record.goalId);
428
+ }
429
+ else {
430
+ writeActiveGoalIndex(root, record.goalId);
431
+ }
432
+ }
433
+ function writeActiveGoalIndex(root, goalId) {
434
+ const dir = goalDir(root);
435
+ ensureGoalDirectory(dir);
436
+ const indexPath = activeGoalIndexPath(root);
437
+ const tmpPath = resolve(dir, `.${ACTIVE_GOAL_INDEX}.${process.pid}.${randomUUID()}.tmp`);
438
+ try {
439
+ writeFileSync(tmpPath, `${goalId}\n`, { encoding: "utf8", mode: 0o600, flag: "wx" });
440
+ renameSync(tmpPath, indexPath);
441
+ chmodSync(indexPath, 0o600);
442
+ }
443
+ catch (error) {
444
+ rmSync(tmpPath, { force: true });
445
+ throw error;
446
+ }
447
+ }
448
+ function clearActiveGoalIndex(root, goalId) {
449
+ const indexPath = activeGoalIndexPath(root);
450
+ try {
451
+ if (!existsSync(indexPath))
452
+ return;
453
+ if (lstatSync(indexPath).isSymbolicLink())
454
+ return;
455
+ const indexedGoalId = readFileSync(indexPath, "utf8").trim();
456
+ if (indexedGoalId === goalId) {
457
+ rmSync(indexPath, { force: true });
458
+ }
459
+ }
460
+ catch {
461
+ // The index is only a fast-path hint.
462
+ }
463
+ }
464
+ function withGoalLock(root, fn) {
465
+ const lock = acquireGoalLock(root);
466
+ if (!lock.acquired) {
467
+ throw new Error(`goal store is locked by pid ${lock.holder.pid}`);
468
+ }
469
+ try {
470
+ return fn();
471
+ }
472
+ finally {
473
+ lock.release();
474
+ }
475
+ }
476
+ function acquireGoalLock(root) {
477
+ const dir = goalDir(root);
478
+ ensureGoalDirectory(dir);
479
+ const lockPath = resolve(dir, ".lock");
480
+ const token = randomUUID();
481
+ const holder = {
482
+ pid: process.pid,
483
+ token,
484
+ startedAt: new Date().toISOString(),
485
+ };
486
+ try {
487
+ return writeGoalLock(lockPath, holder, token);
488
+ }
489
+ catch (error) {
490
+ if (error.code !== "EEXIST")
491
+ throw error;
492
+ }
493
+ const existing = readGoalLockHolder(lockPath);
494
+ if (!existing || !isProcessAlive(existing.pid) || isStaleLock(existing.startedAt)) {
495
+ rmSync(lockPath, { force: true });
496
+ try {
497
+ return writeGoalLock(lockPath, holder, token);
498
+ }
499
+ catch (error) {
500
+ if (error.code === "EEXIST") {
501
+ const racer = readGoalLockHolder(lockPath);
502
+ if (racer)
503
+ return { acquired: false, holder: racer };
504
+ }
505
+ throw error;
506
+ }
507
+ }
508
+ return { acquired: false, holder: existing };
509
+ }
510
+ function writeGoalLock(lockPath, holder, token) {
511
+ writeFileSync(lockPath, JSON.stringify(holder), {
512
+ encoding: "utf8",
513
+ mode: 0o600,
514
+ flag: "wx",
515
+ });
516
+ return {
517
+ acquired: true,
518
+ release: () => {
519
+ try {
520
+ const current = readGoalLockHolder(lockPath);
521
+ if (current?.pid === process.pid && current.token === token) {
522
+ rmSync(lockPath, { force: true });
523
+ }
524
+ }
525
+ catch {
526
+ // Best-effort cleanup only.
527
+ }
528
+ },
529
+ };
530
+ }
531
+ function readGoalLockHolder(lockPath) {
532
+ try {
533
+ const parsed = JSON.parse(readFileSync(lockPath, "utf8"));
534
+ if (typeof parsed.pid !== "number" ||
535
+ !Number.isInteger(parsed.pid) ||
536
+ typeof parsed.token !== "string" ||
537
+ typeof parsed.startedAt !== "string") {
538
+ return null;
539
+ }
540
+ return parsed;
541
+ }
542
+ catch {
543
+ return null;
544
+ }
545
+ }
546
+ function ensureGoalDirectory(dir) {
547
+ if (!existsSync(dir)) {
548
+ mkdirSync(dir, { recursive: true, mode: 0o700 });
549
+ }
550
+ const stat = lstatSync(dir);
551
+ if (stat.isSymbolicLink()) {
552
+ throw new Error(`Goal directory must not be a symlink: ${GOAL_DIR}`);
553
+ }
554
+ if (!stat.isDirectory()) {
555
+ throw new Error(`Goal path must be a directory: ${GOAL_DIR}`);
556
+ }
557
+ }
558
+ function goalDir(root) {
559
+ return resolve(root, GOAL_DIR);
560
+ }
561
+ function goalPath(root, goalId) {
562
+ const dir = goalDir(root);
563
+ const filePath = resolve(dir, `${goalId}.json`);
564
+ if (!isInside(dir, filePath)) {
565
+ throw new Error(`goalId must resolve under ${GOAL_DIR}; got ${goalId}`);
566
+ }
567
+ return filePath;
568
+ }
569
+ function nextGoalId(root, hint, now) {
570
+ const base = `${slugify(hint)}-${slugify(now)}`.slice(0, 96);
571
+ let candidate = base || `goal-${slugify(now)}`;
572
+ let counter = 2;
573
+ while (existsSync(goalPath(root, candidate))) {
574
+ candidate = `${base}-${counter}`;
575
+ counter += 1;
576
+ }
577
+ return candidate;
578
+ }
579
+ function slugify(value) {
580
+ return value
581
+ .toLowerCase()
582
+ .replace(/[^a-z0-9._-]+/g, "-")
583
+ .replace(/^-+|-+$/g, "")
584
+ .slice(0, 48);
585
+ }
586
+ function currentIso(now) {
587
+ if (typeof now === "function")
588
+ return now();
589
+ if (typeof now === "string")
590
+ return now;
591
+ return new Date().toISOString();
592
+ }
593
+ function isProjectedOverBudget(record) {
594
+ return record.maxCost !== undefined && (record.spentUsd ?? 0) >= record.maxCost;
595
+ }
596
+ function isProcessAlive(pid) {
597
+ try {
598
+ process.kill(pid, 0);
599
+ return true;
600
+ }
601
+ catch (error) {
602
+ return error.code === "EPERM";
603
+ }
604
+ }
605
+ function isStaleLock(startedAt) {
606
+ const t = Date.parse(startedAt);
607
+ if (Number.isNaN(t))
608
+ return true;
609
+ return Date.now() - t > GOAL_LOCK_TTL_MS;
610
+ }
611
+ function isInside(parent, child) {
612
+ const normalizedParent = parent.endsWith("/") ? parent : `${parent}/`;
613
+ const normalizedChild = child.endsWith("/") ? child : child;
614
+ return normalizedChild === parent || normalizedChild.startsWith(normalizedParent);
615
+ }
616
+ //# sourceMappingURL=goal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"goal.js","sourceRoot":"","sources":["../../src/util/goal.ts"],"names":[],"mappings":"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"}