maestro-flow 0.3.46 → 0.3.48

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 (241) hide show
  1. package/.claude/agents/ui-design-agent.md +1 -0
  2. package/.claude/agents/workflow-executor.md +3 -0
  3. package/.claude/commands/learn-decompose.md +91 -146
  4. package/.claude/commands/learn-follow.md +102 -137
  5. package/.claude/commands/learn-investigate.md +102 -167
  6. package/.claude/commands/learn-retro.md +100 -243
  7. package/.claude/commands/learn-second-opinion.md +95 -135
  8. package/.claude/commands/maestro-amend.md +95 -232
  9. package/.claude/commands/maestro-analyze.md +1 -6
  10. package/.claude/commands/maestro-collab.md +104 -265
  11. package/.claude/commands/maestro-composer.md +113 -293
  12. package/.claude/commands/maestro-execute.md +10 -17
  13. package/.claude/commands/maestro-impeccable.md +89 -0
  14. package/.claude/commands/maestro-plan.md +1 -6
  15. package/.claude/commands/maestro-player.md +111 -340
  16. package/.claude/commands/maestro-quick.md +9 -0
  17. package/.claude/commands/maestro-ralph-execute.md +167 -210
  18. package/.claude/commands/maestro-ralph.md +245 -426
  19. package/.claude/commands/maestro-ui-codify.md +13 -0
  20. package/.claude/commands/maestro-ui-craft.md +364 -0
  21. package/.claude/commands/maestro-ui-design.md +12 -1
  22. package/.claude/commands/maestro-verify.md +12 -13
  23. package/.claude/commands/maestro.md +142 -72
  24. package/.claude/commands/manage-knowhow-capture.md +45 -170
  25. package/.claude/commands/quality-auto-test.md +9 -0
  26. package/.claude/commands/quality-debug.md +11 -25
  27. package/.claude/commands/quality-refactor.md +9 -0
  28. package/.claude/commands/quality-review.md +5 -14
  29. package/.claude/commands/spec-add.md +1 -1
  30. package/.claude/commands/spec-load.md +3 -2
  31. package/.claude/skills/maestro-impeccable/SKILL.md +169 -0
  32. package/.codex/skills/learn-decompose/SKILL.md +1 -1
  33. package/.codex/skills/learn-investigate/SKILL.md +2 -1
  34. package/.codex/skills/maestro/SKILL.md +420 -313
  35. package/.codex/skills/maestro-analyze/SKILL.md +126 -417
  36. package/.codex/skills/maestro-brainstorm/SKILL.md +129 -451
  37. package/.codex/skills/maestro-collab/SKILL.md +134 -547
  38. package/.codex/skills/maestro-execute/SKILL.md +3 -1
  39. package/.codex/skills/maestro-impeccable/SKILL.md +112 -0
  40. package/.codex/skills/maestro-plan/SKILL.md +88 -437
  41. package/.codex/skills/maestro-player/SKILL.md +191 -333
  42. package/.codex/skills/maestro-quick/SKILL.md +2 -0
  43. package/.codex/skills/maestro-ralph/SKILL.md +327 -710
  44. package/.codex/skills/maestro-roadmap/SKILL.md +201 -518
  45. package/.codex/skills/maestro-ui-codify/SKILL.md +1 -0
  46. package/.codex/skills/maestro-ui-craft/SKILL.md +341 -0
  47. package/.codex/skills/maestro-ui-design/SKILL.md +10 -0
  48. package/.codex/skills/maestro-verify/SKILL.md +116 -409
  49. package/.codex/skills/quality-auto-test/SKILL.md +145 -443
  50. package/.codex/skills/quality-refactor/SKILL.md +1 -1
  51. package/.codex/skills/quality-test/SKILL.md +229 -517
  52. package/.codex/skills/spec-add/SKILL.md +1 -1
  53. package/README.md +4 -1
  54. package/README.zh-CN.md +3 -1
  55. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js +3 -0
  56. package/dashboard/dist-server/dashboard/src/server/agents/codex-cli-adapter.js.map +1 -1
  57. package/dashboard/dist-server/dashboard/src/server/routes/install.js +110 -1
  58. package/dashboard/dist-server/dashboard/src/server/routes/install.js.map +1 -1
  59. package/dashboard/dist-server/dashboard/src/server/routes/settings.js +56 -0
  60. package/dashboard/dist-server/dashboard/src/server/routes/settings.js.map +1 -1
  61. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js +2 -0
  62. package/dashboard/dist-server/dashboard/src/server/routes/wiki.js.map +1 -1
  63. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js +2 -2
  64. package/dashboard/dist-server/dashboard/src/server/wiki/spec-entry-parser.js.map +1 -1
  65. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js +2 -0
  66. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-indexer.js.map +1 -1
  67. package/dashboard/dist-server/dashboard/src/server/wiki/wiki-types.d.ts +3 -1
  68. package/dashboard/dist-server/dashboard/src/shared/constants.d.ts +2 -0
  69. package/dashboard/dist-server/dashboard/src/shared/constants.js +2 -0
  70. package/dashboard/dist-server/dashboard/src/shared/constants.js.map +1 -1
  71. package/dist/src/agents/cli-agent-runner.d.ts.map +1 -1
  72. package/dist/src/agents/cli-agent-runner.js +1 -3
  73. package/dist/src/agents/cli-agent-runner.js.map +1 -1
  74. package/dist/src/agents/cli-history-store.d.ts +5 -0
  75. package/dist/src/agents/cli-history-store.d.ts.map +1 -1
  76. package/dist/src/agents/cli-history-store.js +65 -13
  77. package/dist/src/agents/cli-history-store.js.map +1 -1
  78. package/dist/src/cli.js +13 -0
  79. package/dist/src/cli.js.map +1 -1
  80. package/dist/src/commands/command-help.d.ts +3 -0
  81. package/dist/src/commands/command-help.d.ts.map +1 -0
  82. package/dist/src/commands/command-help.js +60 -0
  83. package/dist/src/commands/command-help.js.map +1 -0
  84. package/dist/src/commands/config.d.ts.map +1 -1
  85. package/dist/src/commands/config.js +17 -0
  86. package/dist/src/commands/config.js.map +1 -1
  87. package/dist/src/commands/delegate.d.ts.map +1 -1
  88. package/dist/src/commands/delegate.js +12 -2
  89. package/dist/src/commands/delegate.js.map +1 -1
  90. package/dist/src/commands/impeccable.d.ts +10 -0
  91. package/dist/src/commands/impeccable.d.ts.map +1 -0
  92. package/dist/src/commands/impeccable.js +181 -0
  93. package/dist/src/commands/impeccable.js.map +1 -0
  94. package/dist/src/commands/spec.js +1 -1
  95. package/dist/src/commands/spec.js.map +1 -1
  96. package/dist/src/commands/wiki.d.ts.map +1 -1
  97. package/dist/src/commands/wiki.js +5 -1
  98. package/dist/src/commands/wiki.js.map +1 -1
  99. package/dist/src/config/cli-tools-config.d.ts.map +1 -1
  100. package/dist/src/config/cli-tools-config.js +10 -7
  101. package/dist/src/config/cli-tools-config.js.map +1 -1
  102. package/dist/src/core/addon-registry.d.ts +31 -0
  103. package/dist/src/core/addon-registry.d.ts.map +1 -0
  104. package/dist/src/core/addon-registry.js +28 -0
  105. package/dist/src/core/addon-registry.js.map +1 -0
  106. package/dist/src/hooks/plugins/spec-injection-plugin.js +2 -0
  107. package/dist/src/hooks/plugins/spec-injection-plugin.js.map +1 -1
  108. package/dist/src/hooks/spec-injector.js +2 -2
  109. package/dist/src/hooks/spec-injector.js.map +1 -1
  110. package/dist/src/index.d.ts +2 -0
  111. package/dist/src/index.d.ts.map +1 -1
  112. package/dist/src/index.js +1 -0
  113. package/dist/src/index.js.map +1 -1
  114. package/dist/src/tools/impeccable/critique-storage.d.ts +28 -0
  115. package/dist/src/tools/impeccable/critique-storage.d.ts.map +1 -0
  116. package/dist/src/tools/impeccable/critique-storage.js +120 -0
  117. package/dist/src/tools/impeccable/critique-storage.js.map +1 -0
  118. package/dist/src/tools/impeccable/design-parser.d.ts +90 -0
  119. package/dist/src/tools/impeccable/design-parser.d.ts.map +1 -0
  120. package/dist/src/tools/impeccable/design-parser.js +696 -0
  121. package/dist/src/tools/impeccable/design-parser.js.map +1 -0
  122. package/dist/src/tools/impeccable/detect-csp.d.ts +6 -0
  123. package/dist/src/tools/impeccable/detect-csp.d.ts.map +1 -0
  124. package/dist/src/tools/impeccable/detect-csp.js +130 -0
  125. package/dist/src/tools/impeccable/detect-csp.js.map +1 -0
  126. package/dist/src/tools/impeccable/is-generated.d.ts +4 -0
  127. package/dist/src/tools/impeccable/is-generated.d.ts.map +1 -0
  128. package/dist/src/tools/impeccable/is-generated.js +56 -0
  129. package/dist/src/tools/impeccable/is-generated.js.map +1 -0
  130. package/dist/src/tools/impeccable/live/accept.d.ts +50 -0
  131. package/dist/src/tools/impeccable/live/accept.d.ts.map +1 -0
  132. package/dist/src/tools/impeccable/live/accept.js +556 -0
  133. package/dist/src/tools/impeccable/live/accept.js.map +1 -0
  134. package/dist/src/tools/impeccable/live/bootstrap.d.ts +2 -0
  135. package/dist/src/tools/impeccable/live/bootstrap.d.ts.map +1 -0
  136. package/dist/src/tools/impeccable/live/bootstrap.js +244 -0
  137. package/dist/src/tools/impeccable/live/bootstrap.js.map +1 -0
  138. package/dist/src/tools/impeccable/live/complete.d.ts +7 -0
  139. package/dist/src/tools/impeccable/live/complete.d.ts.map +1 -0
  140. package/dist/src/tools/impeccable/live/complete.js +67 -0
  141. package/dist/src/tools/impeccable/live/complete.js.map +1 -0
  142. package/dist/src/tools/impeccable/live/completion.d.ts +24 -0
  143. package/dist/src/tools/impeccable/live/completion.d.ts.map +1 -0
  144. package/dist/src/tools/impeccable/live/completion.js +26 -0
  145. package/dist/src/tools/impeccable/live/completion.js.map +1 -0
  146. package/dist/src/tools/impeccable/live/inject.d.ts +41 -0
  147. package/dist/src/tools/impeccable/live/inject.d.ts.map +1 -0
  148. package/dist/src/tools/impeccable/live/inject.js +394 -0
  149. package/dist/src/tools/impeccable/live/inject.js.map +1 -0
  150. package/dist/src/tools/impeccable/live/poll.d.ts +24 -0
  151. package/dist/src/tools/impeccable/live/poll.d.ts.map +1 -0
  152. package/dist/src/tools/impeccable/live/poll.js +180 -0
  153. package/dist/src/tools/impeccable/live/poll.js.map +1 -0
  154. package/dist/src/tools/impeccable/live/resume.d.ts +5 -0
  155. package/dist/src/tools/impeccable/live/resume.d.ts.map +1 -0
  156. package/dist/src/tools/impeccable/live/resume.js +30 -0
  157. package/dist/src/tools/impeccable/live/resume.js.map +1 -0
  158. package/dist/src/tools/impeccable/live/server.d.ts +6 -0
  159. package/dist/src/tools/impeccable/live/server.d.ts.map +1 -0
  160. package/dist/src/tools/impeccable/live/server.js +867 -0
  161. package/dist/src/tools/impeccable/live/server.js.map +1 -0
  162. package/dist/src/tools/impeccable/live/session-store.d.ts +72 -0
  163. package/dist/src/tools/impeccable/live/session-store.d.ts.map +1 -0
  164. package/dist/src/tools/impeccable/live/session-store.js +281 -0
  165. package/dist/src/tools/impeccable/live/session-store.js.map +1 -0
  166. package/dist/src/tools/impeccable/live/static/live-browser-session.js +123 -0
  167. package/dist/src/tools/impeccable/live/static/live-browser.js +4860 -0
  168. package/dist/src/tools/impeccable/live/static/modern-screenshot.umd.js +14 -0
  169. package/dist/src/tools/impeccable/live/status.d.ts +2 -0
  170. package/dist/src/tools/impeccable/live/status.d.ts.map +1 -0
  171. package/dist/src/tools/impeccable/live/status.js +52 -0
  172. package/dist/src/tools/impeccable/live/status.js.map +1 -0
  173. package/dist/src/tools/impeccable/live/wrap.d.ts +33 -0
  174. package/dist/src/tools/impeccable/live/wrap.d.ts.map +1 -0
  175. package/dist/src/tools/impeccable/live/wrap.js +572 -0
  176. package/dist/src/tools/impeccable/live/wrap.js.map +1 -0
  177. package/dist/src/tools/impeccable/load-context.d.ts +13 -0
  178. package/dist/src/tools/impeccable/load-context.d.ts.map +1 -0
  179. package/dist/src/tools/impeccable/load-context.js +79 -0
  180. package/dist/src/tools/impeccable/load-context.js.map +1 -0
  181. package/dist/src/tools/impeccable/paths.d.ts +34 -0
  182. package/dist/src/tools/impeccable/paths.d.ts.map +1 -0
  183. package/dist/src/tools/impeccable/paths.js +102 -0
  184. package/dist/src/tools/impeccable/paths.js.map +1 -0
  185. package/dist/src/tools/spec-entry-parser.d.ts +1 -1
  186. package/dist/src/tools/spec-entry-parser.d.ts.map +1 -1
  187. package/dist/src/tools/spec-entry-parser.js +1 -1
  188. package/dist/src/tools/spec-entry-parser.js.map +1 -1
  189. package/dist/src/tools/spec-init.d.ts.map +1 -1
  190. package/dist/src/tools/spec-init.js +26 -1
  191. package/dist/src/tools/spec-init.js.map +1 -1
  192. package/dist/src/tools/spec-loader.d.ts +1 -1
  193. package/dist/src/tools/spec-loader.d.ts.map +1 -1
  194. package/dist/src/tools/spec-loader.js +2 -0
  195. package/dist/src/tools/spec-loader.js.map +1 -1
  196. package/package.json +2 -2
  197. package/workflows/claude-instructions.md +17 -5
  198. package/workflows/cli-tools-usage.md +10 -3
  199. package/workflows/delegate-usage.md +3 -2
  200. package/workflows/impeccable/adapt.md +190 -0
  201. package/workflows/impeccable/animate.md +175 -0
  202. package/workflows/impeccable/audit.md +133 -0
  203. package/workflows/impeccable/bolder.md +113 -0
  204. package/workflows/impeccable/brand.md +118 -0
  205. package/workflows/impeccable/clarify.md +174 -0
  206. package/workflows/impeccable/codex.md +105 -0
  207. package/workflows/impeccable/cognitive-load.md +106 -0
  208. package/workflows/impeccable/color-and-contrast.md +105 -0
  209. package/workflows/impeccable/colorize.md +154 -0
  210. package/workflows/impeccable/craft.md +123 -0
  211. package/workflows/impeccable/critique.md +261 -0
  212. package/workflows/impeccable/delight.md +302 -0
  213. package/workflows/impeccable/distill.md +111 -0
  214. package/workflows/impeccable/document.md +439 -0
  215. package/workflows/impeccable/extract.md +69 -0
  216. package/workflows/impeccable/harden.md +347 -0
  217. package/workflows/impeccable/heuristics-scoring.md +234 -0
  218. package/workflows/impeccable/interaction-design.md +195 -0
  219. package/workflows/impeccable/layout.md +141 -0
  220. package/workflows/impeccable/live.md +622 -0
  221. package/workflows/impeccable/motion-design.md +109 -0
  222. package/workflows/impeccable/onboard.md +234 -0
  223. package/workflows/impeccable/optimize.md +258 -0
  224. package/workflows/impeccable/overdrive.md +130 -0
  225. package/workflows/impeccable/personas.md +179 -0
  226. package/workflows/impeccable/polish.md +242 -0
  227. package/workflows/impeccable/product.md +62 -0
  228. package/workflows/impeccable/quieter.md +99 -0
  229. package/workflows/impeccable/responsive-design.md +114 -0
  230. package/workflows/impeccable/shape.md +165 -0
  231. package/workflows/impeccable/spatial-design.md +100 -0
  232. package/workflows/impeccable/teach.md +168 -0
  233. package/workflows/impeccable/typeset.md +124 -0
  234. package/workflows/impeccable/typography.md +159 -0
  235. package/workflows/impeccable/ux-writing.md +107 -0
  236. package/workflows/impeccable.md +164 -0
  237. package/workflows/maestro.md +7 -3
  238. package/workflows/skill-authoring.md +265 -0
  239. package/workflows/specs-add.md +3 -2
  240. package/workflows/specs-load.md +2 -1
  241. package/workflows/specs-setup.md +21 -1
@@ -0,0 +1,244 @@
1
+ // Copyright 2024 Paul Bakaus (https://github.com/pbakaus/impeccable)
2
+ // Licensed under the Apache License, Version 2.0
3
+ // Modifications: Converted to TypeScript, adapted for maestro CLI architecture.
4
+ /**
5
+ * CLI entry point: prepare everything needed to enter the live variant poll loop.
6
+ *
7
+ * Does (all in one command):
8
+ * 1. Check .workflow/impeccable/live/config.json (returns config_missing if first-ever run)
9
+ * 2. Start the live server in the background (or reuse a running one)
10
+ * 3. Inject the browser script tag into the project's entry file
11
+ * 4. Read PRODUCT.md / DESIGN.md for project context
12
+ * 5. Print a single JSON blob with everything the agent needs
13
+ *
14
+ * After this, the agent's only remaining steps are:
15
+ * - Open the project's live dev/preview URL in the browser (optional)
16
+ * - Enter the poll loop: maestro impeccable live-poll
17
+ *
18
+ * Converted from live.mjs to TypeScript.
19
+ */
20
+ import fs from 'node:fs';
21
+ import path from 'node:path';
22
+ import { loadContext } from '../load-context.js';
23
+ import { readLiveServerInfo } from '../paths.js';
24
+ import { injectCli, resolveFiles } from './inject.js';
25
+ // ---------------------------------------------------------------------------
26
+ // Drift-heal scan
27
+ // ---------------------------------------------------------------------------
28
+ const SCAN_ROOTS = ['public', 'src', 'app', 'pages'];
29
+ const IGNORE_DIRS = new Set([
30
+ 'node_modules', '.git', '.next', '.nuxt', '.svelte-kit', '.astro',
31
+ '.turbo', '.vercel', '.cache', 'coverage', 'dist', 'build',
32
+ ]);
33
+ function scanForDrift(rootDir, resolvedFiles, config) {
34
+ const resolvedSet = new Set(resolvedFiles.map((f) => f.split(path.sep).join('/')));
35
+ // Files matching the user's `exclude` globs are intentional omissions,
36
+ // not drift. Compile them to regexes so the orphan list stays signal.
37
+ const userExcludeRegexes = (Array.isArray(config.exclude) ? config.exclude : [])
38
+ .map((p) => globToRegex(p));
39
+ const isUserExcluded = (rel) => userExcludeRegexes.some((re) => re.test(rel));
40
+ const orphans = [];
41
+ const walk = (dir, relBase) => {
42
+ let entries;
43
+ try {
44
+ entries = fs.readdirSync(dir, { withFileTypes: true });
45
+ }
46
+ catch {
47
+ return;
48
+ }
49
+ for (const e of entries) {
50
+ const rel = relBase ? `${relBase}/${e.name}` : e.name;
51
+ if (e.isDirectory()) {
52
+ if (IGNORE_DIRS.has(e.name) || e.name.startsWith('.'))
53
+ continue;
54
+ walk(path.join(dir, e.name), rel);
55
+ }
56
+ else if (e.isFile() && e.name.endsWith('.html')) {
57
+ if (resolvedSet.has(rel))
58
+ continue;
59
+ if (isUserExcluded(rel))
60
+ continue;
61
+ orphans.push(rel);
62
+ }
63
+ }
64
+ };
65
+ for (const root of SCAN_ROOTS) {
66
+ const abs = path.join(rootDir, root);
67
+ if (fs.existsSync(abs) && fs.statSync(abs).isDirectory()) {
68
+ walk(abs, root);
69
+ }
70
+ }
71
+ if (orphans.length === 0)
72
+ return null;
73
+ const capped = orphans.slice(0, 20);
74
+ return {
75
+ orphans: capped,
76
+ orphanCount: orphans.length,
77
+ hint: `${orphans.length} HTML file(s) exist but aren't in config.files. Consider adding them, or use a glob pattern like "public/**/*.html".`,
78
+ };
79
+ }
80
+ /**
81
+ * Same glob-to-regex mapping used by inject.ts. Kept inline here
82
+ * to avoid circular imports. The two must stay in sync.
83
+ */
84
+ function globToRegex(pattern) {
85
+ let re = '';
86
+ let i = 0;
87
+ while (i < pattern.length) {
88
+ const c = pattern[i];
89
+ if (c === '*') {
90
+ if (pattern[i + 1] === '*') {
91
+ if (pattern[i + 2] === '/') {
92
+ re += '(?:.*/)?';
93
+ i += 3;
94
+ }
95
+ else {
96
+ re += '.*';
97
+ i += 2;
98
+ }
99
+ }
100
+ else {
101
+ re += '[^/]*';
102
+ i += 1;
103
+ }
104
+ }
105
+ else if (c === '?') {
106
+ re += '[^/]';
107
+ i += 1;
108
+ }
109
+ else if (/[.+^${}()|[\]\\]/.test(c)) {
110
+ re += '\\' + c;
111
+ i += 1;
112
+ }
113
+ else {
114
+ re += c;
115
+ i += 1;
116
+ }
117
+ }
118
+ return new RegExp('^' + re + '$');
119
+ }
120
+ // ---------------------------------------------------------------------------
121
+ // Helpers
122
+ // ---------------------------------------------------------------------------
123
+ function safeParse(out) {
124
+ try {
125
+ return JSON.parse(String(out).trim());
126
+ }
127
+ catch {
128
+ return null;
129
+ }
130
+ }
131
+ /**
132
+ * Return server info for the running live server, starting one if needed.
133
+ */
134
+ async function ensureServerRunning() {
135
+ // Try to reuse an existing server
136
+ try {
137
+ const record = readLiveServerInfo(process.cwd());
138
+ const existing = record?.info;
139
+ if (existing && existing.pid) {
140
+ try {
141
+ process.kill(existing.pid, 0); // throws if dead
142
+ return existing;
143
+ }
144
+ catch { /* stale PID file — the server script will clean it up */ }
145
+ }
146
+ }
147
+ catch { /* no PID file */ }
148
+ // Start a new server via serverCli in background mode
149
+ try {
150
+ const { serverCli } = await import('./server.js');
151
+ // Capture output by temporarily replacing console.log
152
+ let captured = '';
153
+ const origLog = console.log;
154
+ console.log = (...args) => { captured += args.map(String).join(' ') + '\n'; };
155
+ try {
156
+ await serverCli(undefined, { background: true });
157
+ }
158
+ catch {
159
+ // background mode spawns a child and exits; errors are printed to stderr
160
+ }
161
+ console.log = origLog;
162
+ const parsed = safeParse(captured.trim());
163
+ if (parsed && parsed.port && parsed.token) {
164
+ return parsed;
165
+ }
166
+ return null;
167
+ }
168
+ catch {
169
+ return null;
170
+ }
171
+ }
172
+ // ---------------------------------------------------------------------------
173
+ // Main
174
+ // ---------------------------------------------------------------------------
175
+ export async function bootstrapCli() {
176
+ // 1. Check config (fail fast if missing — no point starting anything else)
177
+ let checkResult = null;
178
+ // Capture injectCli --check output
179
+ let checkCaptured = '';
180
+ const origLog = console.log;
181
+ console.log = (...args) => { checkCaptured += args.map(String).join(' '); };
182
+ try {
183
+ await injectCli({ check: true });
184
+ }
185
+ catch {
186
+ // injectCli may exit(1) for missing config — that's expected
187
+ }
188
+ console.log = origLog;
189
+ checkResult = safeParse(checkCaptured);
190
+ if (!checkResult || !checkResult.ok) {
191
+ console.log(JSON.stringify(checkResult || { ok: false, error: 'check_failed', raw: checkCaptured }));
192
+ process.exit(0);
193
+ }
194
+ // 2. Start server (or reuse existing)
195
+ const serverInfo = await ensureServerRunning();
196
+ if (!serverInfo) {
197
+ console.log(JSON.stringify({ ok: false, error: 'server_start_failed' }));
198
+ process.exit(1);
199
+ }
200
+ // 3. Inject the script tag at the current port
201
+ let injectCaptured = '';
202
+ console.log = (...args) => { injectCaptured += args.map(String).join(' '); };
203
+ try {
204
+ await injectCli({ port: String(serverInfo.port) });
205
+ }
206
+ catch {
207
+ // injectCli exits(1) on failure
208
+ }
209
+ console.log = origLog;
210
+ const injectResult = safeParse(injectCaptured);
211
+ if (!injectResult || !injectResult.ok) {
212
+ console.log(JSON.stringify({
213
+ ok: false,
214
+ error: 'inject_failed',
215
+ detail: injectResult || injectCaptured,
216
+ serverPort: serverInfo.port,
217
+ }));
218
+ process.exit(1);
219
+ }
220
+ // 4. Load PRODUCT.md + DESIGN.md context (auto-migrates legacy .impeccable.md)
221
+ const ctx = loadContext(process.cwd());
222
+ // 5. Compute drift-heal: compare resolved inject targets against the
223
+ // project's HTML files. Orphans are HTML files not covered by config.
224
+ // Warning only — the agent decides whether to act.
225
+ const config = checkResult.config;
226
+ const resolvedFiles = resolveFiles(process.cwd(), config);
227
+ const drift = scanForDrift(process.cwd(), resolvedFiles, config);
228
+ // 6. Emit everything the agent needs
229
+ console.log(JSON.stringify({
230
+ ok: true,
231
+ serverPort: serverInfo.port,
232
+ serverToken: serverInfo.token,
233
+ pageFiles: resolvedFiles,
234
+ configDrift: drift,
235
+ hasProduct: ctx.hasProduct,
236
+ product: ctx.product,
237
+ productPath: ctx.productPath,
238
+ hasDesign: ctx.hasDesign,
239
+ design: ctx.design,
240
+ designPath: ctx.designPath,
241
+ migrated: ctx.migrated,
242
+ }, null, 2));
243
+ }
244
+ //# sourceMappingURL=bootstrap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/bootstrap.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iDAAiD;AACjD,gFAAgF;AAEhF;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAGtD,8EAA8E;AAC9E,kBAAkB;AAClB,8EAA8E;AAE9E,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;AACrD,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;IAC1B,cAAc,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,QAAQ;IACjE,QAAQ,EAAE,SAAS,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO;CAC3D,CAAC,CAAC;AAQH,SAAS,YAAY,CAAC,OAAe,EAAE,aAAuB,EAAE,MAAkB;IAChF,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IAEnF,uEAAuE;IACvE,sEAAsE;IACtE,MAAM,kBAAkB,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC;SAC7E,GAAG,CAAC,CAAC,CAAS,EAAE,EAAE,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,MAAM,cAAc,GAAG,CAAC,GAAW,EAAE,EAAE,CAAC,kBAAkB,CAAC,IAAI,CAAC,CAAC,EAAU,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IAE9F,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,MAAM,IAAI,GAAG,CAAC,GAAW,EAAE,OAAe,EAAQ,EAAE;QAClD,IAAI,OAAoB,CAAC;QACzB,IAAI,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;QAAC,CAAC;QAC/D,MAAM,CAAC;YAAC,OAAO;QAAC,CAAC;QACjB,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;YACtD,IAAI,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;gBACpB,IAAI,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAChE,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;YACpC,CAAC;iBAAM,IAAI,CAAC,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBAClD,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC;oBAAE,SAAS;gBACnC,IAAI,cAAc,CAAC,GAAG,CAAC;oBAAE,SAAS;gBAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;YACpB,CAAC;QACH,CAAC;IACH,CAAC,CAAC;IAEF,KAAK,MAAM,IAAI,IAAI,UAAU,EAAE,CAAC;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;QACrC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YACzD,IAAI,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAClB,CAAC;IACH,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO;QACL,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,OAAO,CAAC,MAAM;QAC3B,IAAI,EAAE,GAAG,OAAO,CAAC,MAAM,sHAAsH;KAC9I,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,EAAE,GAAG,EAAE,CAAC;IACZ,IAAI,CAAC,GAAG,CAAC,CAAC;IACV,OAAO,CAAC,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1B,MAAM,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACd,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;gBAC3B,IAAI,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,GAAG,EAAE,CAAC;oBAAC,EAAE,IAAI,UAAU,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;qBACpD,CAAC;oBAAC,EAAE,IAAI,IAAI,CAAC;oBAAC,CAAC,IAAI,CAAC,CAAC;gBAAC,CAAC;YAC9B,CAAC;iBAAM,CAAC;gBACN,EAAE,IAAI,OAAO,CAAC;gBACd,CAAC,IAAI,CAAC,CAAC;YACT,CAAC;QACH,CAAC;aAAM,IAAI,CAAC,KAAK,GAAG,EAAE,CAAC;YACrB,EAAE,IAAI,MAAM,CAAC;YACb,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,IAAI,kBAAkB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;YACtC,EAAE,IAAI,IAAI,GAAG,CAAC,CAAC;YACf,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;aAAM,CAAC;YACN,EAAE,IAAI,CAAC,CAAC;YACR,CAAC,IAAI,CAAC,CAAC;QACT,CAAC;IACH,CAAC;IACD,OAAO,IAAI,MAAM,CAAC,GAAG,GAAG,EAAE,GAAG,GAAG,CAAC,CAAC;AACpC,CAAC;AAED,8EAA8E;AAC9E,UAAU;AACV,8EAA8E;AAE9E,SAAS,SAAS,CAAC,GAAW;IAC5B,IAAI,CAAC;QAAC,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC;IAAC,CAAC;IAAC,MAAM,CAAC;QAAC,OAAO,IAAI,CAAC;IAAC,CAAC;AACvE,CAAC;AAQD;;GAEG;AACH,KAAK,UAAU,mBAAmB;IAChC,kCAAkC;IAClC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,kBAAkB,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,MAAM,EAAE,IAAI,CAAC;QAC9B,IAAI,QAAQ,IAAI,QAAQ,CAAC,GAAG,EAAE,CAAC;YAC7B,IAAI,CAAC;gBACH,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,iBAAiB;gBAChD,OAAO,QAAQ,CAAC;YAClB,CAAC;YAAC,MAAM,CAAC,CAAC,yDAAyD,CAAC,CAAC;QACvE,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAE7B,sDAAsD;IACtD,IAAI,CAAC;QACH,MAAM,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,aAAa,CAAC,CAAC;QAElD,sDAAsD;QACtD,IAAI,QAAQ,GAAG,EAAE,CAAC;QAClB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;QAC5B,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,GAAG,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;QAEzF,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,SAAS,EAAE,EAAE,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,yEAAyE;QAC3E,CAAC;QAED,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;QAEtB,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC1C,IAAI,MAAM,IAAI,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;YAC1C,OAAO,MAA+B,CAAC;QACzC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,8EAA8E;AAC9E,OAAO;AACP,8EAA8E;AAE9E,MAAM,CAAC,KAAK,UAAU,YAAY;IAChC,2EAA2E;IAC3E,IAAI,WAAW,GAAmC,IAAI,CAAC;IAEvD,mCAAmC;IACnC,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC;IAC5B,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,GAAG,aAAa,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACvF,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,CAAC;IAAC,MAAM,CAAC;QACP,6DAA6D;IAC/D,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IACtB,WAAW,GAAG,SAAS,CAAC,aAAa,CAAC,CAAC;IAEvC,IAAI,CAAC,WAAW,IAAI,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC;QACpC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,WAAW,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,cAAc,EAAE,GAAG,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC;QACrG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,sCAAsC;IACtC,MAAM,UAAU,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC/C,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,qBAAqB,EAAE,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+CAA+C;IAC/C,IAAI,cAAc,GAAG,EAAE,CAAC;IACxB,OAAO,CAAC,GAAG,GAAG,CAAC,GAAG,IAAe,EAAE,EAAE,GAAG,cAAc,IAAI,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;IACxF,IAAI,CAAC;QACH,MAAM,SAAS,CAAC,EAAE,IAAI,EAAE,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACrD,CAAC;IAAC,MAAM,CAAC;QACP,gCAAgC;IAClC,CAAC;IACD,OAAO,CAAC,GAAG,GAAG,OAAO,CAAC;IAEtB,MAAM,YAAY,GAAG,SAAS,CAAC,cAAc,CAAC,CAAC;IAC/C,IAAI,CAAC,YAAY,IAAI,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC;QACtC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;YACzB,EAAE,EAAE,KAAK;YACT,KAAK,EAAE,eAAe;YACtB,MAAM,EAAE,YAAY,IAAI,cAAc;YACtC,UAAU,EAAE,UAAU,CAAC,IAAI;SAC5B,CAAC,CAAC,CAAC;QACJ,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,+EAA+E;IAC/E,MAAM,GAAG,GAAG,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IAEvC,qEAAqE;IACrE,yEAAyE;IACzE,sDAAsD;IACtD,MAAM,MAAM,GAAG,WAAW,CAAC,MAAoB,CAAC;IAChD,MAAM,aAAa,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;IAC1D,MAAM,KAAK,GAAG,YAAY,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,MAAM,CAAC,CAAC;IAEjE,qCAAqC;IACrC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC;QACzB,EAAE,EAAE,IAAI;QACR,UAAU,EAAE,UAAU,CAAC,IAAI;QAC3B,WAAW,EAAE,UAAU,CAAC,KAAK;QAC7B,SAAS,EAAE,aAAa;QACxB,WAAW,EAAE,KAAK;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,SAAS,EAAE,GAAG,CAAC,SAAS;QACxB,MAAM,EAAE,GAAG,CAAC,MAAM;QAClB,UAAU,EAAE,GAAG,CAAC,UAAU;QAC1B,QAAQ,EAAE,GAAG,CAAC,QAAQ;KACvB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC"}
@@ -0,0 +1,7 @@
1
+ export interface CompleteOpts {
2
+ id: string;
3
+ discarded?: boolean;
4
+ error?: string | boolean;
5
+ }
6
+ export declare function completeCli(opts: CompleteOpts): Promise<void>;
7
+ //# sourceMappingURL=complete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.d.ts","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/complete.ts"],"names":[],"mappings":"AAgBA,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CAC1B;AAMD,wBAAsB,WAAW,CAAC,IAAI,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CnE"}
@@ -0,0 +1,67 @@
1
+ // Copyright 2024 Paul Bakaus (https://github.com/pbakaus/impeccable)
2
+ // Licensed under the Apache License, Version 2.0
3
+ // Modifications: Converted to TypeScript, adapted for maestro CLI architecture.
4
+ /**
5
+ * Canonical durable completion acknowledgement for Impeccable live sessions.
6
+ */
7
+ import { createLiveSessionStore } from './session-store.js';
8
+ import { readLiveServerInfo } from '../paths.js';
9
+ // ---------------------------------------------------------------------------
10
+ // CLI entry point
11
+ // ---------------------------------------------------------------------------
12
+ export async function completeCli(opts) {
13
+ const store = createLiveSessionStore({ cwd: process.cwd(), sessionId: opts.id });
14
+ const status = opts.discarded === true
15
+ ? 'discarded'
16
+ : opts.error
17
+ ? 'agent_error'
18
+ : 'complete';
19
+ const message = typeof opts.error === 'string' ? opts.error : 'unknown error';
20
+ const serverInfo = readServerInfo();
21
+ const serverResult = serverInfo
22
+ ? await completeThroughServer(serverInfo, {
23
+ id: opts.id,
24
+ status,
25
+ message,
26
+ })
27
+ : null;
28
+ if (serverResult?.ok) {
29
+ const snapshot = store.getSnapshot(opts.id, { includeCompleted: true });
30
+ console.log(JSON.stringify({ ok: true, id: opts.id, phase: snapshot?.phase || status, snapshot }, null, 2));
31
+ return;
32
+ }
33
+ const event = status === 'discarded'
34
+ ? { type: 'discarded', id: opts.id }
35
+ : status === 'agent_error'
36
+ ? { type: 'agent_error', id: opts.id, message }
37
+ : { type: 'complete', id: opts.id };
38
+ const snapshot = store.appendEvent(event);
39
+ console.log(JSON.stringify({ ok: true, id: opts.id, phase: snapshot.phase, snapshot }, null, 2));
40
+ }
41
+ // ---------------------------------------------------------------------------
42
+ // Server helpers
43
+ // ---------------------------------------------------------------------------
44
+ function readServerInfo() {
45
+ return readLiveServerInfo(process.cwd())?.info || null;
46
+ }
47
+ async function completeThroughServer(info, args) {
48
+ const type = args.status === 'discarded'
49
+ ? 'discarded'
50
+ : args.status === 'agent_error'
51
+ ? 'error'
52
+ : 'complete';
53
+ try {
54
+ const res = await fetch(`http://localhost:${info.port}/poll`, {
55
+ method: 'POST',
56
+ headers: { 'Content-Type': 'application/json' },
57
+ body: JSON.stringify({ token: info.token, id: args.id, type, message: args.message }),
58
+ });
59
+ if (!res.ok)
60
+ return null;
61
+ return (await res.json());
62
+ }
63
+ catch {
64
+ return null;
65
+ }
66
+ }
67
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/complete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,24 @@
1
+ /**
2
+ * Completion type mapping for Impeccable live-session accept results.
3
+ */
4
+ export type EventType = string;
5
+ export interface AcceptResult {
6
+ handled?: boolean;
7
+ carbonize?: boolean;
8
+ mode?: string;
9
+ error?: string;
10
+ file?: string;
11
+ }
12
+ export type CompletionType = 'discarded' | 'error' | 'agent_done' | 'complete';
13
+ export interface CompletionAck {
14
+ ok: boolean;
15
+ type: CompletionType;
16
+ final?: boolean;
17
+ requiresComplete?: boolean;
18
+ nextCommand?: string;
19
+ message?: string;
20
+ error?: string;
21
+ }
22
+ export declare function completionTypeForAcceptResult(eventType: EventType, acceptResult: AcceptResult | undefined): CompletionType;
23
+ export declare function completionAckForAcceptResult(eventId: string, completionType: CompletionType, acceptResult: AcceptResult | undefined): CompletionAck;
24
+ //# sourceMappingURL=completion.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/completion.ts"],"names":[],"mappings":"AAIA;;GAEG;AAEH,MAAM,MAAM,SAAS,GAAG,MAAM,CAAC;AAE/B,MAAM,WAAW,YAAY;IAC3B,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,OAAO,GAAG,YAAY,GAAG,UAAU,CAAC;AAE/E,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,OAAO,CAAC;IACZ,IAAI,EAAE,cAAc,CAAC;IACrB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,6BAA6B,CAC3C,SAAS,EAAE,SAAS,EACpB,YAAY,EAAE,YAAY,GAAG,SAAS,GACrC,cAAc,CAMhB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,cAAc,EAAE,cAAc,EAC9B,YAAY,EAAE,YAAY,GAAG,SAAS,GACrC,aAAa,CAUf"}
@@ -0,0 +1,26 @@
1
+ // Copyright 2024 Paul Bakaus (https://github.com/pbakaus/impeccable)
2
+ // Licensed under the Apache License, Version 2.0
3
+ // Modifications: Converted to TypeScript, adapted for maestro CLI architecture.
4
+ export function completionTypeForAcceptResult(eventType, acceptResult) {
5
+ if (eventType === 'discard')
6
+ return acceptResult?.handled === true ? 'discarded' : 'error';
7
+ if (acceptResult?.handled === true && acceptResult?.carbonize === true)
8
+ return 'agent_done';
9
+ if (acceptResult?.handled === true)
10
+ return 'complete';
11
+ if (acceptResult?.mode === 'error')
12
+ return 'error';
13
+ return 'agent_done';
14
+ }
15
+ export function completionAckForAcceptResult(eventId, completionType, acceptResult) {
16
+ const ack = { ok: true, type: completionType };
17
+ if (acceptResult?.handled === true && acceptResult?.carbonize === true) {
18
+ ack.final = false;
19
+ ack.requiresComplete = true;
20
+ ack.nextCommand = `live-complete --id ${eventId}`;
21
+ ack.message =
22
+ 'Carbonize cleanup must be verified, then the session must be completed explicitly before polling again.';
23
+ }
24
+ return ack;
25
+ }
26
+ //# sourceMappingURL=completion.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/completion.ts"],"names":[],"mappings":"AAAA,qEAAqE;AACrE,iDAAiD;AACjD,gFAAgF;AA4BhF,MAAM,UAAU,6BAA6B,CAC3C,SAAoB,EACpB,YAAsC;IAEtC,IAAI,SAAS,KAAK,SAAS;QAAE,OAAO,YAAY,EAAE,OAAO,KAAK,IAAI,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC;IAC3F,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI,IAAI,YAAY,EAAE,SAAS,KAAK,IAAI;QAAE,OAAO,YAAY,CAAC;IAC5F,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IACtD,IAAI,YAAY,EAAE,IAAI,KAAK,OAAO;QAAE,OAAO,OAAO,CAAC;IACnD,OAAO,YAAY,CAAC;AACtB,CAAC;AAED,MAAM,UAAU,4BAA4B,CAC1C,OAAe,EACf,cAA8B,EAC9B,YAAsC;IAEtC,MAAM,GAAG,GAAkB,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,cAAc,EAAE,CAAC;IAC9D,IAAI,YAAY,EAAE,OAAO,KAAK,IAAI,IAAI,YAAY,EAAE,SAAS,KAAK,IAAI,EAAE,CAAC;QACvE,GAAG,CAAC,KAAK,GAAG,KAAK,CAAC;QAClB,GAAG,CAAC,gBAAgB,GAAG,IAAI,CAAC;QAC5B,GAAG,CAAC,WAAW,GAAG,sBAAsB,OAAO,EAAE,CAAC;QAClD,GAAG,CAAC,OAAO;YACT,yGAAyG,CAAC;IAC9G,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,41 @@
1
+ interface InjectOpts {
2
+ port?: string;
3
+ remove?: boolean;
4
+ check?: boolean;
5
+ }
6
+ export interface LiveConfig {
7
+ files: string[];
8
+ exclude?: string[];
9
+ insertBefore?: string;
10
+ insertAfter?: string;
11
+ commentSyntax: 'html' | 'jsx';
12
+ cspChecked?: boolean;
13
+ }
14
+ export declare function injectCli(opts?: InjectOpts): Promise<void>;
15
+ /**
16
+ * Expand config.files (which may contain glob patterns) into a literal list
17
+ * of existing file paths relative to rootDir. Literal entries pass through;
18
+ * glob patterns are expanded via fs.globSync. HARD_EXCLUDES and config.exclude
19
+ * are applied as filters. Duplicates are removed. Order is preserved by
20
+ * first appearance.
21
+ */
22
+ export declare function resolveFiles(rootDir: string, config: LiveConfig): string[];
23
+ declare function validateConfig(cfg: LiveConfig): void;
24
+ export declare function buildTagBlock(syntax: string, port: number): string;
25
+ export declare function insertTag(content: string, config: LiveConfig, port: number): string;
26
+ /**
27
+ * Remove the live script block. Matches either HTML or JSX comment markers
28
+ * regardless of config (so stale tags from a wrong config can still be cleaned).
29
+ *
30
+ * Indent-preserving: captures any whitespace immediately preceding the opener
31
+ * marker and re-emits it in place of the removed block. `insertTag` inserted
32
+ * the block *after* the original line's indent and *before* the anchor (e.g.
33
+ * `</body>`), which moved the indent onto the opener line and left the anchor
34
+ * unindented. Replacing the whole block (plus its trailing newline) with just
35
+ * the captured indent hands the indent back to the anchor that follows.
36
+ */
37
+ export declare function removeTag(content: string, _syntax: string): string;
38
+ export declare function patchCspMeta(content: string, port: number): string;
39
+ export declare function revertCspMeta(content: string): string;
40
+ export { validateConfig };
41
+ //# sourceMappingURL=inject.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inject.d.ts","sourceRoot":"","sources":["../../../../../src/tools/impeccable/live/inject.ts"],"names":[],"mappings":"AAiCA,UAAU,UAAU;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,UAAU;IACzB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,aAAa,EAAE,MAAM,GAAG,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAeD,wBAAsB,SAAS,CAAC,IAAI,GAAE,UAAe,GAAG,OAAO,CAAC,IAAI,CAAC,CAmFpE;AAED;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,GAAG,MAAM,EAAE,CAuC1E;AA+CD,iBAAS,cAAc,CAAC,GAAG,EAAE,UAAU,GAAG,IAAI,CAyB7C;AAKD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQlE;AAED,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAkBnF;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CAUlE;AAmED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAyClE;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAyBrD;AAED,OAAO,EAAE,cAAc,EAAE,CAAC"}