@agentic-coding-framework/orchestrator-core 0.2.0 → 0.3.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.
@@ -0,0 +1,161 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ const vitest_1 = require("vitest");
4
+ const fs_1 = require("fs");
5
+ const path_1 = require("path");
6
+ const os_1 = require("os");
7
+ const state_1 = require("../state");
8
+ (0, vitest_1.describe)("state", () => {
9
+ let tempDir;
10
+ (0, vitest_1.beforeEach)(() => {
11
+ tempDir = (0, fs_1.mkdtempSync)((0, path_1.join)((0, os_1.tmpdir)(), "state-test-"));
12
+ });
13
+ (0, vitest_1.afterEach)(() => {
14
+ (0, fs_1.rmSync)(tempDir, { recursive: true, force: true });
15
+ });
16
+ (0, vitest_1.describe)("createInitialState", () => {
17
+ (0, vitest_1.it)("creates state with correct defaults", () => {
18
+ const state = (0, state_1.createInitialState)("my-app");
19
+ (0, vitest_1.expect)(state.project).toBe("my-app");
20
+ (0, vitest_1.expect)(state.step).toBe("bootstrap");
21
+ (0, vitest_1.expect)(state.attempt).toBe(1);
22
+ (0, vitest_1.expect)(state.status).toBe("pending");
23
+ (0, vitest_1.expect)(state.reason).toBeNull();
24
+ (0, vitest_1.expect)(state.story).toBeNull();
25
+ });
26
+ });
27
+ (0, vitest_1.describe)("validate", () => {
28
+ (0, vitest_1.it)("accepts valid state", () => {
29
+ const state = (0, state_1.createInitialState)("app");
30
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).not.toThrow();
31
+ });
32
+ (0, vitest_1.it)("rejects empty project", () => {
33
+ const state = (0, state_1.createInitialState)("");
34
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).toThrow("project is required");
35
+ });
36
+ (0, vitest_1.it)("rejects invalid step", () => {
37
+ const state = (0, state_1.createInitialState)("app");
38
+ state.step = "invalid";
39
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).toThrow("Invalid step");
40
+ });
41
+ (0, vitest_1.it)("rejects invalid status", () => {
42
+ const state = (0, state_1.createInitialState)("app");
43
+ state.status = "banana";
44
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).toThrow("Invalid status");
45
+ });
46
+ (0, vitest_1.it)("rejects invalid reason (non-null)", () => {
47
+ const state = (0, state_1.createInitialState)("app");
48
+ state.reason = "bad_reason";
49
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).toThrow("Invalid reason");
50
+ });
51
+ (0, vitest_1.it)("accepts null reason", () => {
52
+ const state = (0, state_1.createInitialState)("app");
53
+ state.reason = null;
54
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).not.toThrow();
55
+ });
56
+ (0, vitest_1.it)("accepts valid reason", () => {
57
+ const state = (0, state_1.createInitialState)("app");
58
+ state.reason = "needs_clarification";
59
+ (0, vitest_1.expect)(() => (0, state_1.validate)(state)).not.toThrow();
60
+ });
61
+ });
62
+ (0, vitest_1.describe)("read/write round-trip", () => {
63
+ (0, vitest_1.it)("writes and reads back identical state", () => {
64
+ const original = (0, state_1.createInitialState)("round-trip-app");
65
+ original.story = "US-001";
66
+ original.step = "impl";
67
+ original.attempt = 3;
68
+ original.status = "failing";
69
+ original.reason = "constitution_violation";
70
+ (0, state_1.writeState)(tempDir, original);
71
+ const loaded = (0, state_1.readState)(tempDir);
72
+ (0, vitest_1.expect)(loaded).toEqual(original);
73
+ });
74
+ (0, vitest_1.it)("creates .ai/ directory if missing", () => {
75
+ const state = (0, state_1.createInitialState)("new-project");
76
+ (0, state_1.writeState)(tempDir, state);
77
+ const loaded = (0, state_1.readState)(tempDir);
78
+ (0, vitest_1.expect)(loaded.project).toBe("new-project");
79
+ });
80
+ (0, vitest_1.it)("throws when reading non-existent STATE.json", () => {
81
+ (0, vitest_1.expect)(() => (0, state_1.readState)(tempDir)).toThrow("STATE.json not found");
82
+ });
83
+ });
84
+ (0, vitest_1.describe)("initState", () => {
85
+ (0, vitest_1.it)("creates new state file", () => {
86
+ const { created, state } = (0, state_1.initState)(tempDir, "init-app");
87
+ (0, vitest_1.expect)(created).toBe(true);
88
+ (0, vitest_1.expect)(state.project).toBe("init-app");
89
+ });
90
+ (0, vitest_1.it)("skips if already exists", () => {
91
+ (0, state_1.initState)(tempDir, "init-app");
92
+ const { created, state } = (0, state_1.initState)(tempDir, "different-name");
93
+ (0, vitest_1.expect)(created).toBe(false);
94
+ (0, vitest_1.expect)(state.project).toBe("init-app"); // original preserved
95
+ });
96
+ });
97
+ (0, vitest_1.describe)("isTimedOut", () => {
98
+ (0, vitest_1.it)("returns false when not running", () => {
99
+ const state = (0, state_1.createInitialState)("app");
100
+ (0, vitest_1.expect)((0, state_1.isTimedOut)(state)).toBe(false);
101
+ });
102
+ (0, vitest_1.it)("returns false when within timeout", () => {
103
+ const state = (0, state_1.createInitialState)("app");
104
+ state.status = "running";
105
+ state.dispatched_at = new Date().toISOString();
106
+ state.timeout_min = 10;
107
+ (0, vitest_1.expect)((0, state_1.isTimedOut)(state)).toBe(false);
108
+ });
109
+ (0, vitest_1.it)("returns true when past timeout", () => {
110
+ const state = (0, state_1.createInitialState)("app");
111
+ state.status = "running";
112
+ state.dispatched_at = new Date(Date.now() - 15 * 60_000).toISOString();
113
+ state.timeout_min = 10;
114
+ (0, vitest_1.expect)((0, state_1.isTimedOut)(state)).toBe(true);
115
+ });
116
+ });
117
+ (0, vitest_1.describe)("isMaxedOut", () => {
118
+ (0, vitest_1.it)("returns true at max", () => {
119
+ const state = (0, state_1.createInitialState)("app");
120
+ state.attempt = 5;
121
+ state.max_attempts = 5;
122
+ (0, vitest_1.expect)((0, state_1.isMaxedOut)(state)).toBe(true);
123
+ });
124
+ (0, vitest_1.it)("returns false below max", () => {
125
+ const state = (0, state_1.createInitialState)("app");
126
+ state.attempt = 2;
127
+ state.max_attempts = 5;
128
+ (0, vitest_1.expect)((0, state_1.isMaxedOut)(state)).toBe(false);
129
+ });
130
+ });
131
+ (0, vitest_1.describe)("markRunning", () => {
132
+ (0, vitest_1.it)("sets status and timestamp", () => {
133
+ const state = (0, state_1.createInitialState)("app");
134
+ const running = (0, state_1.markRunning)(state);
135
+ (0, vitest_1.expect)(running.status).toBe("running");
136
+ (0, vitest_1.expect)(running.dispatched_at).toBeTruthy();
137
+ (0, vitest_1.expect)(running.completed_at).toBeNull();
138
+ (0, vitest_1.expect)(running.reason).toBeNull();
139
+ });
140
+ (0, vitest_1.it)("does not mutate original", () => {
141
+ const state = (0, state_1.createInitialState)("app");
142
+ (0, state_1.markRunning)(state);
143
+ (0, vitest_1.expect)(state.status).toBe("pending");
144
+ });
145
+ });
146
+ (0, vitest_1.describe)("markCompleted", () => {
147
+ (0, vitest_1.it)("sets status and timestamp", () => {
148
+ const state = (0, state_1.markRunning)((0, state_1.createInitialState)("app"));
149
+ const done = (0, state_1.markCompleted)(state, "pass");
150
+ (0, vitest_1.expect)(done.status).toBe("pass");
151
+ (0, vitest_1.expect)(done.completed_at).toBeTruthy();
152
+ });
153
+ (0, vitest_1.it)("sets reason on failure", () => {
154
+ const state = (0, state_1.markRunning)((0, state_1.createInitialState)("app"));
155
+ const failed = (0, state_1.markCompleted)(state, "failing", "needs_clarification");
156
+ (0, vitest_1.expect)(failed.status).toBe("failing");
157
+ (0, vitest_1.expect)(failed.reason).toBe("needs_clarification");
158
+ });
159
+ });
160
+ });
161
+ //# sourceMappingURL=state.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.test.js","sourceRoot":"","sources":["../../src/__tests__/state.test.ts"],"names":[],"mappings":"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"}
package/dist/auto.d.ts CHANGED
@@ -10,56 +10,6 @@
10
10
  *
11
11
  * and gets back a JSON result with an `action` field telling it what happened.
12
12
  */
13
- import type { Reason } from "./state";
14
- import { type ProjectStatus, type FrameworkDetection, type ProjectEntry } from "./dispatch";
15
- export type AutoResult = {
16
- action: "query";
17
- data: ProjectStatus;
18
- memory?: string;
19
- handoff?: string;
20
- } | {
21
- action: "dispatched";
22
- step: string;
23
- attempt: number;
24
- prompt: string;
25
- fw_lv: number;
26
- } | {
27
- action: "done";
28
- story: string;
29
- summary: string;
30
- } | {
31
- action: "needs_human";
32
- step: string;
33
- message: string;
34
- } | {
35
- action: "blocked";
36
- step: string;
37
- reason: string;
38
- } | {
39
- action: "already_running";
40
- step: string;
41
- elapsed_min: number;
42
- } | {
43
- action: "timeout";
44
- step: string;
45
- elapsed_min: number;
46
- } | {
47
- action: "approved";
48
- note?: string;
49
- } | {
50
- action: "rejected";
51
- reason: string;
52
- note?: string;
53
- } | {
54
- action: "detected";
55
- framework: FrameworkDetection;
56
- } | {
57
- action: "listed";
58
- projects: ProjectEntry[];
59
- } | {
60
- action: "error";
61
- message: string;
62
- };
63
13
  type Intent = {
64
14
  type: "query";
65
15
  } | {
@@ -67,7 +17,7 @@ type Intent = {
67
17
  note?: string;
68
18
  } | {
69
19
  type: "reject";
70
- reason: Reason;
20
+ reason: string;
71
21
  note?: string;
72
22
  } | {
73
23
  type: "start_story";
@@ -94,12 +44,7 @@ export declare function classify(message: string): Intent;
94
44
  *
95
45
  * Takes a project root and a raw user message, classifies the intent,
96
46
  * and routes to the appropriate function. Returns a JSON-serializable result.
97
- *
98
- * Usage:
99
- * orchestrator auto ./project "目前狀態如何"
100
- * orchestrator auto ./project "繼續"
101
- * orchestrator auto ./project "幫我 refactor auth module"
102
- * orchestrator auto ./project "approve"
103
47
  */
104
- export declare function auto(projectRoot: string, message: string): AutoResult;
48
+ export declare function auto(projectRoot: string, message: string): Record<string, unknown>;
105
49
  export {};
50
+ //# sourceMappingURL=auto.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.d.ts","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAiBH,KAAK,MAAM,GACP;IAAE,IAAI,EAAE,OAAO,CAAA;CAAE,GACjB;IAAE,IAAI,EAAE,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GAClC;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,GACjD;IAAE,IAAI,EAAE,aAAa,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,GACxC;IAAE,IAAI,EAAE,UAAU,CAAA;CAAE,GACpB;IAAE,IAAI,EAAE,QAAQ,CAAA;CAAE,GAClB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,QAAQ,CAAC;IAAC,WAAW,EAAE,MAAM,CAAA;CAAE,CAAC;AAI5C;;;;;GAKG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAsDhD;AA6ED;;;;;GAKG;AACH,wBAAgB,IAAI,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,GACd,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAkCzB"}
package/dist/auto.js CHANGED
@@ -17,6 +17,7 @@ exports.auto = auto;
17
17
  const fs_1 = require("fs");
18
18
  const path_1 = require("path");
19
19
  const dispatch_1 = require("./dispatch");
20
+ // ─── Classifier ──────────────────────────────────────────────────────────────
20
21
  /**
21
22
  * Classify a raw user message into an intent.
22
23
  * Pure keyword/regex matching — zero LLM tokens.
@@ -28,18 +29,20 @@ function classify(message) {
28
29
  const lower = msg.toLowerCase();
29
30
  // ── Approve ──
30
31
  if (/^(approve|核准|lgtm|通過|approved|ok\s*$)/i.test(msg)) {
31
- const note = msg.replace(/^(approve|核准|lgtm|通過|approved|ok)\s*/i, "").trim() || undefined;
32
+ const note = msg.replace(/^(approve|核准|lgtm|通過|approved|ok)\s*/i, "").trim() ||
33
+ undefined;
32
34
  return { type: "approve", note };
33
35
  }
34
36
  // ── Reject ──
35
37
  if (/^(reject|退回|不行|rejected)/i.test(msg)) {
36
- const rest = msg.replace(/^(reject|退回|不行|rejected)\s*/i, "").trim();
38
+ const rest = msg
39
+ .replace(/^(reject|退回|不行|rejected)\s*/i, "")
40
+ .trim();
37
41
  const { reason, note } = extractRejectReason(rest);
38
42
  return { type: "reject", reason, note };
39
43
  }
40
44
  // ── Start Story (must be before query — "start US-007" is not a query) ──
41
- const storyMatch = msg.match(/(?:start\s*story|開始\s*story|開新\s*story|start)\s+(US-\d+)/i)
42
- || msg.match(/^(US-\d+)/i);
45
+ const storyMatch = msg.match(/(?:start\s*story|開始\s*story|開新\s*story|start)\s+(US-\d+)/i) || msg.match(/^(US-\d+)/i);
43
46
  if (storyMatch) {
44
47
  return { type: "start_story", storyId: storyMatch[1] };
45
48
  }
@@ -65,15 +68,42 @@ function classify(message) {
65
68
  /** Check if the message is a read-only query */
66
69
  function isQuery(lower) {
67
70
  const queryPatterns = [
68
- /狀態/, /status/, /什麼步驟/, /what\s*step/, /which\s*step/,
69
- /測試/, /tests?/, /進度/, /progress/,
70
- /還有什麼/, /what's\s*next/, /what\s*next/, /what's\s*left/,
71
- /history/, /歷史/, /上次/, /last\s*(session|time)/,
72
- /怎麼樣/, /how.*project/, /how.*going/,
73
- /目前/, /current/, /看一下/, /看看/, /查一下/, /check\s*status/,
74
- /哪個步驟/, /卡住/, /blocked/, /why.*block/,
75
- /summary/, /摘要/, /report/, /報告/,
76
- /打開/, /open\s*project/,
71
+ /狀態/,
72
+ /status/,
73
+ /什麼步驟/,
74
+ /what\s*step/,
75
+ /which\s*step/,
76
+ /測試/,
77
+ /tests?/,
78
+ /進度/,
79
+ /progress/,
80
+ /還有什麼/,
81
+ /what's\s*next/,
82
+ /what\s*next/,
83
+ /what's\s*left/,
84
+ /history/,
85
+ /歷史/,
86
+ /上次/,
87
+ /last\s*(session|time)/,
88
+ /怎麼樣/,
89
+ /how.*project/,
90
+ /how.*going/,
91
+ /目前/,
92
+ /current/,
93
+ /看一下/,
94
+ /看看/,
95
+ /查一下/,
96
+ /check\s*status/,
97
+ /哪個步驟/,
98
+ /卡住/,
99
+ /blocked/,
100
+ /why.*block/,
101
+ /summary/,
102
+ /摘要/,
103
+ /report/,
104
+ /報告/,
105
+ /打開/,
106
+ /open\s*project/,
77
107
  ];
78
108
  return queryPatterns.some((p) => p.test(lower));
79
109
  }
@@ -81,15 +111,15 @@ function isQuery(lower) {
81
111
  function extractRejectReason(rest) {
82
112
  const reasonMap = {
83
113
  clarification: "needs_clarification",
84
- 需要說明: "needs_clarification",
85
- 不清楚: "needs_clarification",
114
+ "需要說明": "needs_clarification",
115
+ "不清楚": "needs_clarification",
86
116
  constitution: "constitution_violation",
87
- 架構違反: "constitution_violation",
117
+ "架構違反": "constitution_violation",
88
118
  scope: "scope_warning",
89
- 範圍: "scope_warning",
119
+ "範圍": "scope_warning",
90
120
  nfr: "nfr_missing",
91
121
  timeout: "test_timeout",
92
- 超時: "test_timeout",
122
+ "超時": "test_timeout",
93
123
  };
94
124
  for (const [keyword, reason] of Object.entries(reasonMap)) {
95
125
  if (rest.toLowerCase().includes(keyword)) {
@@ -106,12 +136,6 @@ function extractRejectReason(rest) {
106
136
  *
107
137
  * Takes a project root and a raw user message, classifies the intent,
108
138
  * and routes to the appropriate function. Returns a JSON-serializable result.
109
- *
110
- * Usage:
111
- * orchestrator auto ./project "目前狀態如何"
112
- * orchestrator auto ./project "繼續"
113
- * orchestrator auto ./project "幫我 refactor auth module"
114
- * orchestrator auto ./project "approve"
115
139
  */
116
140
  function auto(projectRoot, message) {
117
141
  const intent = classify(message);
@@ -128,22 +152,29 @@ function auto(projectRoot, message) {
128
152
  case "continue":
129
153
  return handleDispatch(projectRoot);
130
154
  case "detect":
131
- return { action: "detected", framework: (0, dispatch_1.detectFramework)(projectRoot) };
155
+ return {
156
+ action: "detected",
157
+ framework: (0, dispatch_1.detectFramework)(projectRoot),
158
+ };
132
159
  case "list":
133
- // Use projectRoot as workspace root for listing
134
- return { action: "listed", projects: (0, dispatch_1.listProjects)(projectRoot) };
160
+ return {
161
+ action: "listed",
162
+ projects: (0, dispatch_1.listProjects)(projectRoot),
163
+ };
135
164
  case "custom":
136
165
  return handleCustom(projectRoot, intent.instruction);
137
166
  }
138
167
  }
139
168
  catch (err) {
140
- return { action: "error", message: err.message ?? String(err) };
169
+ return {
170
+ action: "error",
171
+ message: err.message ?? String(err),
172
+ };
141
173
  }
142
174
  }
143
175
  // ─── Intent Handlers ────────────────────────────────────────────────────────
144
176
  function handleQuery(projectRoot) {
145
177
  const data = (0, dispatch_1.queryProjectStatus)(projectRoot);
146
- // Attach memory and handoff content if available
147
178
  let memory;
148
179
  let handoff;
149
180
  const memoryPath = (0, path_1.join)(projectRoot, "PROJECT_MEMORY.md");
@@ -182,7 +213,6 @@ function handleDispatch(projectRoot) {
182
213
  return wrapDispatchResult((0, dispatch_1.dispatch)(projectRoot));
183
214
  }
184
215
  function handleCustom(projectRoot, instruction) {
185
- // Check if there's an agent-teams keyword
186
216
  const agentTeams = /agent.?teams?|平行|多\s*agent|agents/i.test(instruction);
187
217
  (0, dispatch_1.startCustom)(projectRoot, instruction, { agentTeams });
188
218
  return wrapDispatchResult((0, dispatch_1.dispatch)(projectRoot));
@@ -199,14 +229,35 @@ function wrapDispatchResult(result) {
199
229
  fw_lv: result.fw_lv,
200
230
  };
201
231
  case "done":
202
- return { action: "done", story: result.story, summary: result.summary };
232
+ return {
233
+ action: "done",
234
+ story: result.story,
235
+ summary: result.summary,
236
+ };
203
237
  case "needs_human":
204
- return { action: "needs_human", step: result.step, message: result.message };
238
+ return {
239
+ action: "needs_human",
240
+ step: result.step,
241
+ message: result.message,
242
+ };
205
243
  case "blocked":
206
- return { action: "blocked", step: result.step, reason: result.reason };
244
+ return {
245
+ action: "blocked",
246
+ step: result.step,
247
+ reason: result.reason,
248
+ };
207
249
  case "already_running":
208
- return { action: "already_running", step: result.step, elapsed_min: result.elapsed_min };
250
+ return {
251
+ action: "already_running",
252
+ step: result.step,
253
+ elapsed_min: result.elapsed_min,
254
+ };
209
255
  case "timeout":
210
- return { action: "timeout", step: result.step, elapsed_min: result.elapsed_min };
256
+ return {
257
+ action: "timeout",
258
+ step: result.step,
259
+ elapsed_min: result.elapsed_min,
260
+ };
211
261
  }
212
262
  }
263
+ //# sourceMappingURL=auto.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"auto.js","sourceRoot":"","sources":["../src/auto.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts CHANGED
@@ -7,9 +7,11 @@
7
7
  * start-story <project-root> <story-id> Begin a new User Story (micro-waterfall)
8
8
  * start-custom <project-root> <instruction> Begin a custom ad-hoc task
9
9
  * dispatch <project-root> Dispatch next step (prints prompt)
10
+ * peek <project-root> [FIX P1] Read-only dispatch preview
10
11
  * apply-handoff <project-root> Parse HANDOFF.md → update STATE
11
12
  * approve <project-root> [note] Approve review step
12
13
  * reject <project-root> <reason> [note] Reject review step
13
14
  * status <project-root> Print current STATE.json
14
15
  */
15
16
  export {};
17
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;GAaG"}
package/dist/cli.js CHANGED
@@ -8,6 +8,7 @@
8
8
  * start-story <project-root> <story-id> Begin a new User Story (micro-waterfall)
9
9
  * start-custom <project-root> <instruction> Begin a custom ad-hoc task
10
10
  * dispatch <project-root> Dispatch next step (prints prompt)
11
+ * peek <project-root> [FIX P1] Read-only dispatch preview
11
12
  * apply-handoff <project-root> Parse HANDOFF.md → update STATE
12
13
  * approve <project-root> [note] Approve review step
13
14
  * reject <project-root> <reason> [note] Reject review step
@@ -24,11 +25,12 @@ function usage() {
24
25
  console.error(`Usage: orchestrator <command> [args]
25
26
 
26
27
  Commands:
27
- auto <project-root> <message...> Unified entry — classify message & route automatically
28
+ auto <project-root> <message...> Unified entry — classify message & route automatically
28
29
  init <project-root> <project-name> Initialize .ai/STATE.json
29
30
  start-story <project-root> <story-id> Begin a new User Story (micro-waterfall)
30
31
  start-custom <project-root> <instruction> Begin a custom ad-hoc task
31
32
  dispatch <project-root> Dispatch next step (prints prompt to stdout)
33
+ peek <project-root> [NEW] Read-only dispatch preview (no state mutation)
32
34
  apply-handoff <project-root> Parse HANDOFF.md → update STATE.json
33
35
  post-check <project-root> Run step's post_check command
34
36
  approve <project-root> [note] Approve review step
@@ -138,7 +140,10 @@ try {
138
140
  }
139
141
  const label = args[2] || undefined; // optional label
140
142
  const agentTeams = args[3] === "--agent-teams";
141
- const state = (0, dispatch_1.startCustom)(projectRoot, instruction, { label, agentTeams });
143
+ const state = (0, dispatch_1.startCustom)(projectRoot, instruction, {
144
+ label,
145
+ agentTeams,
146
+ });
142
147
  console.log(`Started custom task: "${instruction}"`);
143
148
  console.log(` label: ${state.story}, step: ${state.step}, task_type: ${state.task_type}`);
144
149
  break;
@@ -162,14 +167,46 @@ try {
162
167
  break;
163
168
  case "blocked":
164
169
  console.error(`[dispatch] BLOCKED: ${result.reason}`);
165
- process.exit(1);
170
+ // [FIX P1] Use exit(0) — blocked is an expected orchestrator state,
171
+ // not an error. exit(1) breaks dispatch-claude-code.sh (set -e).
172
+ process.exit(0);
166
173
  break;
167
174
  case "already_running":
168
175
  console.error(`[dispatch] Already running (${result.elapsed_min} min)`);
169
176
  break;
170
177
  case "timeout":
171
178
  console.error(`[dispatch] TIMEOUT at ${result.step} (${result.elapsed_min} min)`);
172
- process.exit(1);
179
+ // [FIX P1] Use exit(0) — timeout is an expected orchestrator state.
180
+ // exit(1) would abort dispatch-claude-code.sh before it can retry.
181
+ process.exit(0);
182
+ break;
183
+ }
184
+ break;
185
+ }
186
+ // [FIX P1] New command: read-only dispatch preview
187
+ case "peek": {
188
+ const projectRoot = resolveRoot(args[0]);
189
+ const result = (0, dispatch_1.peek)(projectRoot);
190
+ switch (result.type) {
191
+ case "dispatched":
192
+ console.log(result.prompt);
193
+ console.error(`[peek] Would dispatch: step=${result.step} attempt=${result.attempt}`);
194
+ break;
195
+ case "done":
196
+ console.error(`[peek] DONE: ${result.summary}`);
197
+ break;
198
+ case "needs_human":
199
+ console.error(`[peek] NEEDS HUMAN REVIEW`);
200
+ console.error(result.message);
201
+ break;
202
+ case "blocked":
203
+ console.error(`[peek] BLOCKED: ${result.reason}`);
204
+ break;
205
+ case "already_running":
206
+ console.error(`[peek] Already running (${result.elapsed_min} min)`);
207
+ break;
208
+ case "timeout":
209
+ console.error(`[peek] TIMEOUT at ${result.step} (${result.elapsed_min} min)`);
173
210
  break;
174
211
  }
175
212
  break;
@@ -226,7 +263,11 @@ try {
226
263
  const projectRoot = resolveRoot(args[0]);
227
264
  const result = (0, dispatch_1.detectFramework)(projectRoot);
228
265
  console.log(JSON.stringify(result, null, 2));
229
- const levelNames = ["Not adopted", "Partial adoption", "Full adoption"];
266
+ const levelNames = [
267
+ "Not adopted",
268
+ "Partial adoption",
269
+ "Full adoption",
270
+ ];
230
271
  console.error(`Framework adoption: Level ${result.level} — ${levelNames[result.level]}`);
231
272
  break;
232
273
  }
@@ -252,3 +293,4 @@ catch (err) {
252
293
  console.error(`Error: ${err.message}`);
253
294
  process.exit(1);
254
295
  }
296
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";;AACA;;;;;;;;;;;;;GAaG;;AAEH,+BAA+B;AAC/B,iDAAyC;AACzC,mCAA8D;AAC9D,yCAYoB;AACpB,iCAA8B;AAE9B,MAAM,CAAC,EAAE,AAAD,EAAG,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;AAE5C,SAAS,KAAK;IACZ,OAAO,CAAC,KAAK,CAAC;;;;;;;;;;;;;;;;;CAiBf,CAAC,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,SAAS,WAAW,CAAC,GAAuB;IAC1C,IAAI,CAAC,GAAG,EAAE,CAAC;QACT,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IACD,OAAO,IAAA,cAAO,EAAC,GAAG,CAAC,CAAC;AACtB,CAAC;AAED,IAAI,CAAC;IACH,QAAQ,OAAO,EAAE,CAAC;QAChB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACxC,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,8BAA8B,CAAC,CAAC;gBAC9C,OAAO,CAAC,KAAK,CAAC,+CAA+C,CAAC,CAAC;gBAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YAED,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC1C,oCAAoC;YACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAE7C,mCAAmC;YACnC,QAAS,MAAkC,CAAC,MAAM,EAAE,CAAC;gBACnD,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,CACX,iBAAkB,MAAc,CAAC,IAAI,CAAC,OAAO,WAAY,MAAc,CAAC,IAAI,CAAC,IAAI,YAAa,MAAc,CAAC,IAAI,CAAC,MAAM,EAAE,CAC3H,CAAC;oBACF,MAAM;gBACR,KAAK,YAAY;oBACf,OAAO,CAAC,KAAK,CACX,2BAA4B,MAAc,CAAC,IAAI,aAAc,MAAc,CAAC,OAAO,WAAY,MAAc,CAAC,KAAK,EAAE,CACtH,CAAC;oBACF,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,KAAK,CAAC,gBAAiB,MAAc,CAAC,OAAO,EAAE,CAAC,CAAC;oBACzD,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,KAAK,CAAC,uBAAwB,MAAc,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChE,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,KAAK,CAAC,mBAAoB,MAAc,CAAC,MAAM,EAAE,CAAC,CAAC;oBAC3D,MAAM;gBACR,KAAK,UAAU;oBACb,OAAO,CAAC,KAAK,CACX,kBAAmB,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC,WAAY,MAAc,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACnF,CAAC;oBACF,MAAM;gBACR,KAAK,UAAU;oBACb,OAAO,CAAC,KAAK,CACX,oBAAqB,MAAc,CAAC,MAAM,GAAI,MAAc,CAAC,IAAI,CAAC,CAAC,CAAC,MAAO,MAAc,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACxG,CAAC;oBACF,MAAM;gBACR,KAAK,UAAU;oBACb,OAAO,CAAC,KAAK,CACX,2BAA4B,MAAc,CAAC,SAAS,CAAC,KAAK,EAAE,CAC7D,CAAC;oBACF,MAAM;gBACR,KAAK,QAAQ;oBACX,OAAO,CAAC,KAAK,CACX,gBAAiB,MAAc,CAAC,QAAQ,CAAC,MAAM,aAAa,CAC7D,CAAC;oBACF,MAAM;gBACR,KAAK,OAAO;oBACV,OAAO,CAAC,KAAK,CAAC,iBAAkB,MAAc,CAAC,OAAO,EAAE,CAAC,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,MAAM;YACV,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;gBACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,IAAA,iBAAS,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAC/D,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,GAAG,CAAC,mCAAmC,WAAW,GAAG,CAAC,CAAC;YACjE,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CACT,oCAAoC,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,MAAM,GAAG,CAC3E,CAAC;YACJ,CAAC;YACD,+DAA+D;YAC/D,MAAM,aAAa,GAAG,IAAA,qBAAa,EAAC,WAAW,EAAE,WAAW,CAAC,CAAC;YAC9D,IAAI,aAAa,EAAE,CAAC;gBAClB,OAAO,CAAC,GAAG,CACT,8DAA8D,CAC/D,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,aAAa,CAAC,CAAC,CAAC;YACnB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACxB,IAAI,CAAC,OAAO,EAAE,CAAC;gBACb,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;gBAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,IAAA,qBAAU,EAAC,WAAW,EAAE,OAAO,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CACT,iBAAiB,OAAO,WAAW,KAAK,CAAC,IAAI,cAAc,KAAK,CAAC,OAAO,GAAG,CAC5E,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,WAAW,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YAC5B,IAAI,CAAC,WAAW,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;gBAClD,OAAO,CAAC,KAAK,CACX,2FAA2F,CAC5F,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,iBAAiB;YACrD,MAAM,UAAU,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,eAAe,CAAC;YAC/C,MAAM,KAAK,GAAG,IAAA,sBAAW,EAAC,WAAW,EAAE,WAAW,EAAE;gBAClD,KAAK;gBACL,UAAU;aACX,CAAC,CAAC;YACH,OAAO,CAAC,GAAG,CAAC,yBAAyB,WAAW,GAAG,CAAC,CAAC;YACrD,OAAO,CAAC,GAAG,CACT,YAAY,KAAK,CAAC,KAAK,WAAW,KAAK,CAAC,IAAI,gBAAgB,KAAK,CAAC,SAAS,EAAE,CAC9E,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAA,mBAAQ,EAAC,WAAW,CAAC,CAAC;YAErC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,YAAY;oBACf,qDAAqD;oBACrD,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3B,wDAAwD;oBACxD,OAAO,CAAC,KAAK,CACX,mBAAmB,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE,CAC3D,CAAC;oBACF,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,KAAK,CAAC,oBAAoB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBACpD,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,KAAK,CAAC,+BAA+B,CAAC,CAAC;oBAC/C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC9B,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,KAAK,CAAC,uBAAuB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBACtD,oEAAoE;oBACpE,iEAAiE;oBACjE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,MAAM;gBACR,KAAK,iBAAiB;oBACpB,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,WAAW,OAAO,CACzD,CAAC;oBACF,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,KAAK,CACX,yBAAyB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,OAAO,CACnE,CAAC;oBACF,oEAAoE;oBACpE,mEAAmE;oBACnE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;oBAChB,MAAM;YACV,CAAC;YACD,MAAM;QACR,CAAC;QAED,mDAAmD;QACnD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAA,eAAI,EAAC,WAAW,CAAC,CAAC;YAEjC,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;gBACpB,KAAK,YAAY;oBACf,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBAC3B,OAAO,CAAC,KAAK,CACX,+BAA+B,MAAM,CAAC,IAAI,YAAY,MAAM,CAAC,OAAO,EAAE,CACvE,CAAC;oBACF,MAAM;gBACR,KAAK,MAAM;oBACT,OAAO,CAAC,KAAK,CAAC,gBAAgB,MAAM,CAAC,OAAO,EAAE,CAAC,CAAC;oBAChD,MAAM;gBACR,KAAK,aAAa;oBAChB,OAAO,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;oBAC3C,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;oBAC9B,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,KAAK,CAAC,mBAAmB,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC;oBAClD,MAAM;gBACR,KAAK,iBAAiB;oBACpB,OAAO,CAAC,KAAK,CACX,2BAA2B,MAAM,CAAC,WAAW,OAAO,CACrD,CAAC;oBACF,MAAM;gBACR,KAAK,SAAS;oBACZ,OAAO,CAAC,KAAK,CACX,qBAAqB,MAAM,CAAC,IAAI,KAAK,MAAM,CAAC,WAAW,OAAO,CAC/D,CAAC;oBACF,MAAM;YACV,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAA,uBAAY,EAAC,WAAW,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CACT,2BAA2B,KAAK,CAAC,IAAI,aAAa,KAAK,CAAC,MAAM,aAAa,KAAK,CAAC,MAAM,IAAI,QAAQ,EAAE,CACtG,CAAC;YACF,IAAI,KAAK,CAAC,KAAK,EAAE,CAAC;gBAChB,OAAO,CAAC,GAAG,CACT,iBAAiB,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,SAAS,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,CACtF,CAAC;YACJ,CAAC;YACD,MAAM;QACR,CAAC;QAED,KAAK,YAAY,CAAC,CAAC,CAAC;YAClB,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAA,uBAAY,EAAC,WAAW,EAAE,wBAAe,CAAC,CAAC;YAC1D,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC;YAClE,IAAI,CAAC,MAAM;gBAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAC7B,MAAM;QACR,CAAC;QAED,KAAK,SAAS,CAAC,CAAC,CAAC;YACf,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAClC,IAAA,wBAAa,EAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YACjC,OAAO,CAAC,GAAG,CACT,kBAAkB,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;YACvB,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CACX,qHAAqH,CACtH,CAAC;gBACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAClB,CAAC;YACD,MAAM,IAAI,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC;YAClC,IAAA,uBAAY,EAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,CAAC;YACxC,OAAO,CAAC,GAAG,CACT,4BAA4B,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC,YAAY,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CACxE,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,KAAK,GAAG,IAAA,iBAAS,EAAC,WAAW,CAAC,CAAC;YACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC5C,MAAM;QACR,CAAC;QAED,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAA,6BAAkB,EAAC,WAAW,CAAC,CAAC;YAC/C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM;QACR,CAAC;QAED,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,WAAW,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YACzC,MAAM,MAAM,GAAG,IAAA,0BAAe,EAAC,WAAW,CAAC,CAAC;YAC5C,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,UAAU,GAAG;gBACjB,aAAa;gBACb,kBAAkB;gBAClB,eAAe;aAChB,CAAC;YACF,OAAO,CAAC,KAAK,CACX,6BAA6B,MAAM,CAAC,KAAK,MAAM,UAAU,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC1E,CAAC;YACF,MAAM;QACR,CAAC;QAED,KAAK,eAAe,CAAC,CAAC,CAAC;YACrB,MAAM,aAAa,GAAG,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3C,MAAM,QAAQ,GAAG,IAAA,uBAAY,EAAC,aAAa,CAAC,CAAC;YAC7C,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC1B,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC,CAAC;YACvD,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YACjD,CAAC;YACD,MAAM;QACR,CAAC;QAED;YACE,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,KAAK,CAAC,oBAAoB,OAAO,EAAE,CAAC,CAAC;YAC/C,CAAC;YACD,KAAK,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAAC,OAAO,GAAY,EAAE,CAAC;IACtB,OAAO,CAAC,KAAK,CAAC,UAAW,GAAa,CAAC,OAAO,EAAE,CAAC,CAAC;IAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC"}