oh-my-copilot 4.13.21 → 4.13.45

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 (195) hide show
  1. package/.claude-plugin/marketplace.json +2 -2
  2. package/.claude-plugin/plugin.json +1 -1
  3. package/README.md +8 -0
  4. package/agents/code-reviewer.agent.md +24 -6
  5. package/agents/designer.agent.md +12 -0
  6. package/bridge/cli.cjs +1978 -1214
  7. package/bridge/mcp-server.cjs +678 -261
  8. package/bridge/runtime-cli.cjs +55 -8
  9. package/bridge/team.js +507 -38
  10. package/dist/__tests__/agent-registry.test.js +92 -1
  11. package/dist/__tests__/agent-registry.test.js.map +1 -1
  12. package/dist/__tests__/bedrock-model-routing.test.js +18 -17
  13. package/dist/__tests__/bedrock-model-routing.test.js.map +1 -1
  14. package/dist/__tests__/delegation-enforcer.test.js +46 -6
  15. package/dist/__tests__/delegation-enforcer.test.js.map +1 -1
  16. package/dist/__tests__/hooks/session-end-cleanup.test.d.ts +2 -0
  17. package/dist/__tests__/hooks/session-end-cleanup.test.d.ts.map +1 -0
  18. package/dist/__tests__/hooks/session-end-cleanup.test.js +93 -0
  19. package/dist/__tests__/hooks/session-end-cleanup.test.js.map +1 -0
  20. package/dist/__tests__/hud/stdin.test.d.ts +2 -0
  21. package/dist/__tests__/hud/stdin.test.d.ts.map +1 -0
  22. package/dist/__tests__/hud/stdin.test.js +556 -0
  23. package/dist/__tests__/hud/stdin.test.js.map +1 -0
  24. package/dist/__tests__/model-routing-override-three-site-sync.test.d.ts +2 -0
  25. package/dist/__tests__/model-routing-override-three-site-sync.test.d.ts.map +1 -0
  26. package/dist/__tests__/model-routing-override-three-site-sync.test.js +75 -0
  27. package/dist/__tests__/model-routing-override-three-site-sync.test.js.map +1 -0
  28. package/dist/__tests__/non-claude-provider-detection.test.js +37 -0
  29. package/dist/__tests__/non-claude-provider-detection.test.js.map +1 -1
  30. package/dist/__tests__/package-dir-resolution-regression.test.js +25 -0
  31. package/dist/__tests__/package-dir-resolution-regression.test.js.map +1 -1
  32. package/dist/__tests__/pre-tool-enforcer.test.js +51 -0
  33. package/dist/__tests__/pre-tool-enforcer.test.js.map +1 -1
  34. package/dist/__tests__/session-start-script-context.test.js +121 -0
  35. package/dist/__tests__/session-start-script-context.test.js.map +1 -1
  36. package/dist/__tests__/setup-claude-md-script.test.js +44 -1
  37. package/dist/__tests__/setup-claude-md-script.test.js.map +1 -1
  38. package/dist/agents/definitions.d.ts.map +1 -1
  39. package/dist/agents/definitions.js +2 -1
  40. package/dist/agents/definitions.js.map +1 -1
  41. package/dist/autoresearch/__tests__/decide-outcome.test.d.ts +2 -0
  42. package/dist/autoresearch/__tests__/decide-outcome.test.d.ts.map +1 -0
  43. package/dist/autoresearch/__tests__/decide-outcome.test.js +69 -0
  44. package/dist/autoresearch/__tests__/decide-outcome.test.js.map +1 -0
  45. package/dist/autoresearch/runtime.d.ts.map +1 -1
  46. package/dist/autoresearch/runtime.js +16 -2
  47. package/dist/autoresearch/runtime.js.map +1 -1
  48. package/dist/cli/__tests__/launch.test.js +23 -0
  49. package/dist/cli/__tests__/launch.test.js.map +1 -1
  50. package/dist/cli/__tests__/self-improve-paths.test.js +3 -2
  51. package/dist/cli/__tests__/self-improve-paths.test.js.map +1 -1
  52. package/dist/cli/__tests__/team.test.js +100 -0
  53. package/dist/cli/__tests__/team.test.js.map +1 -1
  54. package/dist/cli/commands/__tests__/team-role-shorthand.test.js +30 -0
  55. package/dist/cli/commands/__tests__/team-role-shorthand.test.js.map +1 -1
  56. package/dist/cli/commands/__tests__/team.test.js +48 -1
  57. package/dist/cli/commands/__tests__/team.test.js.map +1 -1
  58. package/dist/cli/commands/team.d.ts +2 -0
  59. package/dist/cli/commands/team.d.ts.map +1 -1
  60. package/dist/cli/commands/team.js +9 -2
  61. package/dist/cli/commands/team.js.map +1 -1
  62. package/dist/cli/launch.d.ts.map +1 -1
  63. package/dist/cli/launch.js +7 -0
  64. package/dist/cli/launch.js.map +1 -1
  65. package/dist/cli/team.d.ts.map +1 -1
  66. package/dist/cli/team.js +34 -3
  67. package/dist/cli/team.js.map +1 -1
  68. package/dist/config/__tests__/loader.test.js +35 -4
  69. package/dist/config/__tests__/loader.test.js.map +1 -1
  70. package/dist/config/__tests__/models.test.js +126 -3
  71. package/dist/config/__tests__/models.test.js.map +1 -1
  72. package/dist/config/models.d.ts +8 -0
  73. package/dist/config/models.d.ts.map +1 -1
  74. package/dist/config/models.js +119 -8
  75. package/dist/config/models.js.map +1 -1
  76. package/dist/features/delegation-enforcer.d.ts.map +1 -1
  77. package/dist/features/delegation-enforcer.js +10 -9
  78. package/dist/features/delegation-enforcer.js.map +1 -1
  79. package/dist/hooks/__tests__/bridge-routing.test.js +1 -0
  80. package/dist/hooks/__tests__/bridge-routing.test.js.map +1 -1
  81. package/dist/hooks/autopilot/enforcement.d.ts.map +1 -1
  82. package/dist/hooks/autopilot/enforcement.js +19 -0
  83. package/dist/hooks/autopilot/enforcement.js.map +1 -1
  84. package/dist/hooks/bridge.d.ts.map +1 -1
  85. package/dist/hooks/bridge.js +26 -4
  86. package/dist/hooks/bridge.js.map +1 -1
  87. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js +37 -1
  88. package/dist/hooks/persistent-mode/stop-hook-blocking.test.js.map +1 -1
  89. package/dist/hooks/session-end/index.d.ts +9 -2
  90. package/dist/hooks/session-end/index.d.ts.map +1 -1
  91. package/dist/hooks/session-end/index.js +90 -35
  92. package/dist/hooks/session-end/index.js.map +1 -1
  93. package/dist/hud/stdin.d.ts +12 -1
  94. package/dist/hud/stdin.d.ts.map +1 -1
  95. package/dist/hud/stdin.js +123 -18
  96. package/dist/hud/stdin.js.map +1 -1
  97. package/dist/hud/types.d.ts +1 -0
  98. package/dist/hud/types.d.ts.map +1 -1
  99. package/dist/hud/types.js.map +1 -1
  100. package/dist/installer/__tests__/session-start-template.test.d.ts +2 -0
  101. package/dist/installer/__tests__/session-start-template.test.d.ts.map +1 -0
  102. package/dist/installer/__tests__/session-start-template.test.js +174 -0
  103. package/dist/installer/__tests__/session-start-template.test.js.map +1 -0
  104. package/dist/lib/__tests__/mode-state-io.test.js +75 -12
  105. package/dist/lib/__tests__/mode-state-io.test.js.map +1 -1
  106. package/dist/lib/mode-state-io.d.ts +11 -0
  107. package/dist/lib/mode-state-io.d.ts.map +1 -1
  108. package/dist/lib/mode-state-io.js +64 -0
  109. package/dist/lib/mode-state-io.js.map +1 -1
  110. package/dist/lib/worktree-paths.d.ts +12 -0
  111. package/dist/lib/worktree-paths.d.ts.map +1 -1
  112. package/dist/lib/worktree-paths.js +75 -0
  113. package/dist/lib/worktree-paths.js.map +1 -1
  114. package/dist/planning/__tests__/artifacts.test.d.ts +2 -0
  115. package/dist/planning/__tests__/artifacts.test.d.ts.map +1 -0
  116. package/dist/planning/__tests__/artifacts.test.js +486 -0
  117. package/dist/planning/__tests__/artifacts.test.js.map +1 -0
  118. package/dist/planning/artifact-names.d.ts +13 -0
  119. package/dist/planning/artifact-names.d.ts.map +1 -0
  120. package/dist/planning/artifact-names.js +108 -0
  121. package/dist/planning/artifact-names.js.map +1 -0
  122. package/dist/planning/artifacts.d.ts +47 -0
  123. package/dist/planning/artifacts.d.ts.map +1 -0
  124. package/dist/planning/artifacts.js +221 -0
  125. package/dist/planning/artifacts.js.map +1 -0
  126. package/dist/team/__tests__/api-interop.compatibility.test.js +194 -5
  127. package/dist/team/__tests__/api-interop.compatibility.test.js.map +1 -1
  128. package/dist/team/__tests__/model-contract.test.js +92 -2
  129. package/dist/team/__tests__/model-contract.test.js.map +1 -1
  130. package/dist/team/__tests__/runtime-v2.dispatch.test.js +30 -0
  131. package/dist/team/__tests__/runtime-v2.dispatch.test.js.map +1 -1
  132. package/dist/team/__tests__/scaling.test.js +39 -1
  133. package/dist/team/__tests__/scaling.test.js.map +1 -1
  134. package/dist/team/__tests__/worker-bootstrap.test.js +6 -0
  135. package/dist/team/__tests__/worker-bootstrap.test.js.map +1 -1
  136. package/dist/team/api-interop.d.ts.map +1 -1
  137. package/dist/team/api-interop.js +89 -2
  138. package/dist/team/api-interop.js.map +1 -1
  139. package/dist/team/delegation-evidence.d.ts +5 -0
  140. package/dist/team/delegation-evidence.d.ts.map +1 -0
  141. package/dist/team/delegation-evidence.js +29 -0
  142. package/dist/team/delegation-evidence.js.map +1 -0
  143. package/dist/team/model-contract.d.ts +8 -0
  144. package/dist/team/model-contract.d.ts.map +1 -1
  145. package/dist/team/model-contract.js +13 -0
  146. package/dist/team/model-contract.js.map +1 -1
  147. package/dist/team/runtime-v2.d.ts +2 -1
  148. package/dist/team/runtime-v2.d.ts.map +1 -1
  149. package/dist/team/runtime-v2.js +3 -1
  150. package/dist/team/runtime-v2.js.map +1 -1
  151. package/dist/team/state/tasks.d.ts +4 -1
  152. package/dist/team/state/tasks.d.ts.map +1 -1
  153. package/dist/team/state/tasks.js +38 -1
  154. package/dist/team/state/tasks.js.map +1 -1
  155. package/dist/team/team-ops.d.ts +4 -1
  156. package/dist/team/team-ops.d.ts.map +1 -1
  157. package/dist/team/team-ops.js +2 -2
  158. package/dist/team/team-ops.js.map +1 -1
  159. package/dist/team/types.d.ts +22 -1
  160. package/dist/team/types.d.ts.map +1 -1
  161. package/dist/team/types.js.map +1 -1
  162. package/dist/team/worker-bootstrap.d.ts.map +1 -1
  163. package/dist/team/worker-bootstrap.js +6 -1
  164. package/dist/team/worker-bootstrap.js.map +1 -1
  165. package/dist/tools/__tests__/state-tools.test.js +322 -5
  166. package/dist/tools/__tests__/state-tools.test.js.map +1 -1
  167. package/dist/tools/__tests__/wiki-tools-working-directory.test.d.ts +2 -0
  168. package/dist/tools/__tests__/wiki-tools-working-directory.test.d.ts.map +1 -0
  169. package/dist/tools/__tests__/wiki-tools-working-directory.test.js +66 -0
  170. package/dist/tools/__tests__/wiki-tools-working-directory.test.js.map +1 -0
  171. package/dist/tools/state-tools.d.ts +3 -10
  172. package/dist/tools/state-tools.d.ts.map +1 -1
  173. package/dist/tools/state-tools.js +393 -91
  174. package/dist/tools/state-tools.js.map +1 -1
  175. package/dist/tools/wiki-tools.js +8 -8
  176. package/dist/tools/wiki-tools.js.map +1 -1
  177. package/docs/GETTING-STARTED.md +7 -0
  178. package/docs/copilot-instructions.md +1 -1
  179. package/package.json +1 -1
  180. package/scripts/lib/model-routing-override-message.mjs +21 -0
  181. package/scripts/persistent-mode.cjs +36 -0
  182. package/scripts/persistent-mode.mjs +36 -0
  183. package/scripts/post-tool-verifier.mjs +1 -0
  184. package/scripts/pre-tool-enforcer.mjs +60 -0
  185. package/scripts/session-start.mjs +63 -0
  186. package/scripts/setup-copilot-instructions.sh +12 -2
  187. package/skills/configure-notifications/SKILL.md +3 -3
  188. package/skills/mcp-setup/SKILL.md +60 -45
  189. package/skills/omc-setup/SKILL.md +3 -3
  190. package/skills/omc-setup/phases/01-install-claude-md.md +1 -1
  191. package/skills/omc-setup/phases/04-welcome.md +8 -8
  192. package/skills/project-session-manager/SKILL.md +2 -2
  193. package/skills/project-session-manager/psm.sh +1 -1
  194. package/templates/hooks/lib/model-routing-override-message.mjs +21 -0
  195. package/templates/hooks/session-start.mjs +62 -0
@@ -0,0 +1,47 @@
1
+ export interface PlanningArtifacts {
2
+ prdPaths: string[];
3
+ testSpecPaths: string[];
4
+ }
5
+ export interface ApprovedExecutionLaunchHint {
6
+ mode: "team" | "ralph";
7
+ command: string;
8
+ task: string;
9
+ workerCount?: number;
10
+ agentType?: string;
11
+ linkedRalph?: boolean;
12
+ sourcePath: string;
13
+ }
14
+ interface ApprovedExecutionLaunchHintReadOptions {
15
+ prdPath?: string;
16
+ task?: string;
17
+ command?: string;
18
+ requirePlanningComplete?: boolean;
19
+ }
20
+ export type ApprovedExecutionLaunchHintOutcome = {
21
+ status: "absent";
22
+ } | {
23
+ status: "ambiguous";
24
+ } | {
25
+ status: "incomplete";
26
+ } | {
27
+ status: "resolved";
28
+ hint: ApprovedExecutionLaunchHint;
29
+ };
30
+ /**
31
+ * Read planning artifacts from .omc/.omx plans directories.
32
+ * Returns paths to all PRD and test-spec files found.
33
+ */
34
+ export declare function readPlanningArtifacts(cwd: string): PlanningArtifacts;
35
+ /**
36
+ * Returns true when the latest PRD and latest test spec contain
37
+ * the required non-empty quality-gate sections.
38
+ */
39
+ export declare function isPlanningComplete(artifacts: PlanningArtifacts): boolean;
40
+ /**
41
+ * Read the latest PRD file and extract an embedded launch hint for the given mode.
42
+ * Returns null when no hint is found.
43
+ */
44
+ export declare function readApprovedExecutionLaunchHint(cwd: string, mode: "team" | "ralph", options?: ApprovedExecutionLaunchHintReadOptions): ApprovedExecutionLaunchHint | null;
45
+ export declare function readApprovedExecutionLaunchHintOutcome(cwd: string, mode: "team" | "ralph", options?: ApprovedExecutionLaunchHintReadOptions): ApprovedExecutionLaunchHintOutcome;
46
+ export {};
47
+ //# sourceMappingURL=artifacts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../src/planning/artifacts.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,iBAAiB;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,2BAA2B;IAC1C,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,UAAU,sCAAsC;IAC9C,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,uBAAuB,CAAC,EAAE,OAAO,CAAC;CACnC;AAED,MAAM,MAAM,kCAAkC,GAC1C;IAAE,MAAM,EAAE,QAAQ,CAAA;CAAE,GACpB;IAAE,MAAM,EAAE,WAAW,CAAA;CAAE,GACvB;IAAE,MAAM,EAAE,YAAY,CAAA;CAAE,GACxB;IAAE,MAAM,EAAE,UAAU,CAAC;IAAC,IAAI,EAAE,2BAA2B,CAAA;CAAE,CAAC;AAqE9D;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,MAAM,GAAG,iBAAiB,CA6BpE;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,iBAAiB,GAAG,OAAO,CAYxE;AAmFD;;;GAGG;AACH,wBAAgB,+BAA+B,CAC7C,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,OAAO,EACtB,OAAO,GAAE,sCAA2C,GACnD,2BAA2B,GAAG,IAAI,CAGpC;AAED,wBAAgB,sCAAsC,CACpD,GAAG,EAAE,MAAM,EACX,IAAI,EAAE,MAAM,GAAG,OAAO,EACtB,OAAO,GAAE,sCAA2C,GACnD,kCAAkC,CA2DpC"}
@@ -0,0 +1,221 @@
1
+ // src/planning/artifacts.ts
2
+ /**
3
+ * Planning artifacts reader.
4
+ *
5
+ * Reads .omc/plans/ directory for PRD and test-spec files,
6
+ * and extracts approved execution launch hints embedded in PRD markdown.
7
+ */
8
+ import { readdirSync, readFileSync, existsSync } from "fs";
9
+ import { join } from "path";
10
+ import { comparePlanningArtifactPaths, selectLatestPlanningArtifactPath, selectMatchingTestSpecsForPrd, } from "./artifact-names.js";
11
+ function readFileSafe(path) {
12
+ try {
13
+ return readFileSync(path, "utf-8");
14
+ }
15
+ catch {
16
+ return null;
17
+ }
18
+ }
19
+ function escapeRegex(value) {
20
+ return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
21
+ }
22
+ function getSectionContent(markdown, heading) {
23
+ const headingRe = new RegExp(`^##\\s+${escapeRegex(heading)}[ \\t]*$`, "im");
24
+ const headingMatch = headingRe.exec(markdown);
25
+ if (!headingMatch || headingMatch.index === undefined)
26
+ return null;
27
+ const bodyStart = headingMatch.index + headingMatch[0].length;
28
+ const rest = markdown.slice(bodyStart).replace(/^\r?\n/, "");
29
+ const nextHeadingMatch = /\r?\n##\s+/.exec(rest);
30
+ const body = (nextHeadingMatch ? rest.slice(0, nextHeadingMatch.index) : rest).trim();
31
+ return body.length > 0 ? body : null;
32
+ }
33
+ function hasRequiredSections(markdown, headings) {
34
+ return headings.every((heading) => getSectionContent(markdown, heading) !== null);
35
+ }
36
+ function getPlansDirCandidates(cwd) {
37
+ return [join(cwd, ".omc", "plans"), join(cwd, ".omx", "plans")];
38
+ }
39
+ function sortArtifactPathsDescending(paths) {
40
+ return [...paths].sort((a, b) => comparePlanningArtifactPaths(b, a));
41
+ }
42
+ function hasCompletePlanningPair(prdPath, matchingTestSpecPaths) {
43
+ if (matchingTestSpecPaths.length === 0) {
44
+ return false;
45
+ }
46
+ const prd = readFileSafe(prdPath);
47
+ const testSpec = readFileSafe(matchingTestSpecPaths[0]);
48
+ if (!prd || !testSpec) {
49
+ return false;
50
+ }
51
+ return (hasRequiredSections(prd, [
52
+ "Acceptance criteria",
53
+ "Requirement coverage map",
54
+ ]) &&
55
+ hasRequiredSections(testSpec, [
56
+ "Unit coverage",
57
+ "Verification mapping",
58
+ ]));
59
+ }
60
+ /**
61
+ * Read planning artifacts from .omc/.omx plans directories.
62
+ * Returns paths to all PRD and test-spec files found.
63
+ */
64
+ export function readPlanningArtifacts(cwd) {
65
+ let entries;
66
+ const prdPaths = [];
67
+ const testSpecPaths = [];
68
+ for (const plansDir of getPlansDirCandidates(cwd)) {
69
+ if (!existsSync(plansDir)) {
70
+ continue;
71
+ }
72
+ try {
73
+ entries = readdirSync(plansDir);
74
+ }
75
+ catch {
76
+ continue;
77
+ }
78
+ for (const entry of entries) {
79
+ if (entry.startsWith("prd-") && entry.endsWith(".md")) {
80
+ prdPaths.push(join(plansDir, entry));
81
+ }
82
+ else if (entry.startsWith("test-spec-") && entry.endsWith(".md")) {
83
+ testSpecPaths.push(join(plansDir, entry));
84
+ }
85
+ }
86
+ }
87
+ return {
88
+ prdPaths: sortArtifactPathsDescending(prdPaths),
89
+ testSpecPaths: sortArtifactPathsDescending(testSpecPaths),
90
+ };
91
+ }
92
+ /**
93
+ * Returns true when the latest PRD and latest test spec contain
94
+ * the required non-empty quality-gate sections.
95
+ */
96
+ export function isPlanningComplete(artifacts) {
97
+ const latestPrdPath = selectLatestPlanningArtifactPath(artifacts.prdPaths);
98
+ const matchingTestSpecPaths = selectMatchingTestSpecsForPrd(latestPrdPath, artifacts.testSpecPaths);
99
+ if (!latestPrdPath || matchingTestSpecPaths.length === 0) {
100
+ return false;
101
+ }
102
+ return hasCompletePlanningPair(latestPrdPath, matchingTestSpecPaths);
103
+ }
104
+ function decodeQuotedValue(raw) {
105
+ const normalized = raw.trim();
106
+ if (!normalized)
107
+ return null;
108
+ try {
109
+ return JSON.parse(normalized);
110
+ }
111
+ catch {
112
+ if ((normalized.startsWith('"') && normalized.endsWith('"')) ||
113
+ (normalized.startsWith("'") && normalized.endsWith("'"))) {
114
+ return normalized.slice(1, -1);
115
+ }
116
+ return null;
117
+ }
118
+ }
119
+ function launchHintPattern(mode) {
120
+ return mode === "team"
121
+ ? /(?<command>(?:om[cx]\s+team|\$team)(?:\s+ralph)?(?:\s+(?<count>\d+)(?::(?<role>[a-z][a-z0-9-]*))?)?\s+(?<task>"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?<flags>(?:\s+--[\w-]+)*))/gi
122
+ : /(?<command>(?:om[cx]\s+ralph|\$ralph)\s+(?<task>"(?:[^"\\]|\\.)*"|'(?:[^'\\]|\\.)*')(?<flags>(?:\s+--[\w-]+)*))/gi;
123
+ }
124
+ function collectLaunchHintMatches(content, mode) {
125
+ return [...content.matchAll(launchHintPattern(mode))];
126
+ }
127
+ function selectLaunchHintMatch(matches, normalizedTask, normalizedCommand) {
128
+ const decodedMatches = matches.flatMap((match) => {
129
+ const command = match[0]?.trim();
130
+ const task = match.groups?.task ? decodeQuotedValue(match.groups.task) : null;
131
+ if (!command || task == null)
132
+ return [];
133
+ const flags = match.groups?.flags ?? "";
134
+ const workerCount = match.groups?.count
135
+ ? Number.parseInt(match.groups.count, 10)
136
+ : undefined;
137
+ return [{
138
+ command,
139
+ task,
140
+ ...(workerCount == null ? {} : { workerCount }),
141
+ agentType: match.groups?.role || undefined,
142
+ linkedRalph: /\sralph(?:\s|$)/.test(command) || parseFlags(flags).linkedRalph,
143
+ }];
144
+ });
145
+ const matchesToConsider = normalizedCommand
146
+ ? decodedMatches.filter((match) => match.command === normalizedCommand)
147
+ : normalizedTask
148
+ ? decodedMatches.filter((match) => match.task.trim() === normalizedTask)
149
+ : decodedMatches;
150
+ if (matchesToConsider.length === 0)
151
+ return { status: "no-match" };
152
+ if (matchesToConsider.length > 1)
153
+ return { status: "ambiguous" };
154
+ return { status: "unique", ...matchesToConsider[0] };
155
+ }
156
+ function parseFlags(flagStr) {
157
+ return {
158
+ linkedRalph: /--linked-ralph/.test(flagStr),
159
+ };
160
+ }
161
+ /**
162
+ * Read the latest PRD file and extract an embedded launch hint for the given mode.
163
+ * Returns null when no hint is found.
164
+ */
165
+ export function readApprovedExecutionLaunchHint(cwd, mode, options = {}) {
166
+ const outcome = readApprovedExecutionLaunchHintOutcome(cwd, mode, options);
167
+ return outcome.status === "resolved" ? outcome.hint : null;
168
+ }
169
+ export function readApprovedExecutionLaunchHintOutcome(cwd, mode, options = {}) {
170
+ const artifacts = readPlanningArtifacts(cwd);
171
+ if (artifacts.prdPaths.length === 0)
172
+ return { status: "absent" };
173
+ const prdPath = options.prdPath
174
+ ? artifacts.prdPaths.includes(options.prdPath)
175
+ ? options.prdPath
176
+ : null
177
+ : selectLatestPlanningArtifactPath(artifacts.prdPaths);
178
+ const matchingTestSpecs = selectMatchingTestSpecsForPrd(prdPath, artifacts.testSpecPaths);
179
+ if (!prdPath)
180
+ return { status: "absent" };
181
+ if (artifacts.testSpecPaths.length > 0 && matchingTestSpecs.length === 0) {
182
+ return { status: "absent" };
183
+ }
184
+ const content = readFileSafe(prdPath);
185
+ if (!content)
186
+ return { status: "absent" };
187
+ const selected = selectLaunchHintMatch(collectLaunchHintMatches(content, mode), options.task?.trim(), options.command?.trim());
188
+ if (selected.status === "ambiguous")
189
+ return { status: "ambiguous" };
190
+ if (selected.status !== "unique")
191
+ return { status: "absent" };
192
+ if (options.requirePlanningComplete &&
193
+ !hasCompletePlanningPair(prdPath, matchingTestSpecs)) {
194
+ return { status: "incomplete" };
195
+ }
196
+ if (mode === "team") {
197
+ return {
198
+ status: "resolved",
199
+ hint: {
200
+ mode: "team",
201
+ command: selected.command,
202
+ task: selected.task,
203
+ workerCount: selected.workerCount,
204
+ agentType: selected.agentType,
205
+ linkedRalph: selected.linkedRalph,
206
+ sourcePath: prdPath,
207
+ },
208
+ };
209
+ }
210
+ return {
211
+ status: "resolved",
212
+ hint: {
213
+ mode: "ralph",
214
+ command: selected.command,
215
+ task: selected.task,
216
+ linkedRalph: selected.linkedRalph,
217
+ sourcePath: prdPath,
218
+ },
219
+ };
220
+ }
221
+ //# sourceMappingURL=artifacts.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"artifacts.js","sourceRoot":"","sources":["../../src/planning/artifacts.ts"],"names":[],"mappings":"AAAA,4BAA4B;AAE5B;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAC3D,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EACL,4BAA4B,EAC5B,gCAAgC,EAChC,6BAA6B,GAC9B,MAAM,qBAAqB,CAAC;AA8B7B,SAAS,YAAY,CAAC,IAAY;IAChC,IAAI,CAAC;QACH,OAAO,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;IACrC,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,WAAW,CAAC,KAAa;IAChC,OAAO,KAAK,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB,EAAE,OAAe;IAC1D,MAAM,SAAS,GAAG,IAAI,MAAM,CAC1B,UAAU,WAAW,CAAC,OAAO,CAAC,UAAU,EACxC,IAAI,CACL,CAAC;IACF,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9C,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,IAAI,CAAC;IAEnE,MAAM,SAAS,GAAG,YAAY,CAAC,KAAK,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IAC9D,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC;IAC7D,MAAM,gBAAgB,GAAG,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjD,MAAM,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,gBAAgB,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;IACtF,OAAO,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AACvC,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB,EAAE,QAAkB;IAC/D,OAAO,QAAQ,CAAC,KAAK,CACnB,CAAC,OAAO,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,OAAO,CAAC,KAAK,IAAI,CAC3D,CAAC;AACJ,CAAC;AAED,SAAS,qBAAqB,CAAC,GAAW;IACxC,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;AAClE,CAAC;AAED,SAAS,2BAA2B,CAAC,KAAe;IAClD,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,4BAA4B,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACvE,CAAC;AAED,SAAS,uBAAuB,CAC9B,OAAe,EACf,qBAA+B;IAE/B,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IAClC,MAAM,QAAQ,GAAG,YAAY,CAAC,qBAAqB,CAAC,CAAC,CAAC,CAAC,CAAC;IACxD,IAAI,CAAC,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QACtB,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,CACL,mBAAmB,CAAC,GAAG,EAAE;QACvB,qBAAqB;QACrB,0BAA0B;KAC3B,CAAC;QACF,mBAAmB,CAAC,QAAQ,EAAE;YAC5B,eAAe;YACf,sBAAsB;SACvB,CAAC,CACH,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,GAAW;IAC/C,IAAI,OAAiB,CAAC;IACtB,MAAM,QAAQ,GAAa,EAAE,CAAC;IAC9B,MAAM,aAAa,GAAa,EAAE,CAAC;IAEnC,KAAK,MAAM,QAAQ,IAAI,qBAAqB,CAAC,GAAG,CAAC,EAAE,CAAC;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1B,SAAS;QACX,CAAC;QAED,IAAI,CAAC;YACH,OAAO,GAAG,WAAW,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;QAED,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,IAAI,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACtD,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YACvC,CAAC;iBAAM,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBACnE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC,CAAC;YAC5C,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO;QACL,QAAQ,EAAE,2BAA2B,CAAC,QAAQ,CAAC;QAC/C,aAAa,EAAE,2BAA2B,CAAC,aAAa,CAAC;KAC1D,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,kBAAkB,CAAC,SAA4B;IAC7D,MAAM,aAAa,GAAG,gCAAgC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IAC3E,MAAM,qBAAqB,GAAG,6BAA6B,CACzD,aAAa,EACb,SAAS,CAAC,aAAa,CACxB,CAAC;IAEF,IAAI,CAAC,aAAa,IAAI,qBAAqB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,OAAO,uBAAuB,CAAC,aAAa,EAAE,qBAAqB,CAAC,CAAC;AACvE,CAAC;AAcD,SAAS,iBAAiB,CAAC,GAAW;IACpC,MAAM,UAAU,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IAC9B,IAAI,CAAC,UAAU;QAAE,OAAO,IAAI,CAAC;IAC7B,IAAI,CAAC;QACH,OAAO,IAAI,CAAC,KAAK,CAAC,UAAU,CAAW,CAAC;IAC1C,CAAC;IAAC,MAAM,CAAC;QACP,IACE,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;YACxD,CAAC,UAAU,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,UAAU,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EACxD,CAAC;YACD,OAAO,UAAU,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QACjC,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,IAAsB;IAC/C,OAAO,IAAI,KAAK,MAAM;QACpB,CAAC,CAAC,iLAAiL;QACnL,CAAC,CAAC,mHAAmH,CAAC;AAC1H,CAAC;AAED,SAAS,wBAAwB,CAC/B,OAAe,EACf,IAAsB;IAEtB,OAAO,CAAC,GAAG,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACxD,CAAC;AAED,SAAS,qBAAqB,CAC5B,OAA2B,EAC3B,cAAuB,EACvB,iBAA0B;IAE1B,MAAM,cAAc,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAC/C,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;QACjC,MAAM,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,CAAC,iBAAiB,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC9E,IAAI,CAAC,OAAO,IAAI,IAAI,IAAI,IAAI;YAAE,OAAO,EAAE,CAAC;QACxC,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK,IAAI,EAAE,CAAC;QACxC,MAAM,WAAW,GAAG,KAAK,CAAC,MAAM,EAAE,KAAK;YACrC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC;YACzC,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO,CAAC;gBACN,OAAO;gBACP,IAAI;gBACJ,GAAG,CAAC,WAAW,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,CAAC;gBAC/C,SAAS,EAAE,KAAK,CAAC,MAAM,EAAE,IAAI,IAAI,SAAS;gBAC1C,WAAW,EAAE,iBAAiB,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,CAAC,WAAW;aAC9E,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;IAEH,MAAM,iBAAiB,GAAG,iBAAiB;QACzC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,KAAK,iBAAiB,CAAC;QACvE,CAAC,CAAC,cAAc;YACd,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,cAAc,CAAC;YACxE,CAAC,CAAC,cAAc,CAAC;IAErB,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,CAAC;IAClE,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACjE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,GAAG,iBAAiB,CAAC,CAAC,CAAE,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,UAAU,CAAC,OAAe;IACjC,OAAO;QACL,WAAW,EAAE,gBAAgB,CAAC,IAAI,CAAC,OAAO,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,+BAA+B,CAC7C,GAAW,EACX,IAAsB,EACtB,UAAkD,EAAE;IAEpD,MAAM,OAAO,GAAG,sCAAsC,CAAC,GAAG,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;IAC3E,OAAO,OAAO,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC;AAC7D,CAAC;AAED,MAAM,UAAU,sCAAsC,CACpD,GAAW,EACX,IAAsB,EACtB,UAAkD,EAAE;IAEpD,MAAM,SAAS,GAAG,qBAAqB,CAAC,GAAG,CAAC,CAAC;IAC7C,IAAI,SAAS,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAEjE,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO;QAC7B,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC;YAC5C,CAAC,CAAC,OAAO,CAAC,OAAO;YACjB,CAAC,CAAC,IAAI;QACR,CAAC,CAAC,gCAAgC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC;IACzD,MAAM,iBAAiB,GAAG,6BAA6B,CACrD,OAAO,EACP,SAAS,CAAC,aAAa,CACxB,CAAC;IACF,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC1C,IAAI,SAAS,CAAC,aAAa,CAAC,MAAM,GAAG,CAAC,IAAI,iBAAiB,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9B,CAAC;IACD,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;IACtC,IAAI,CAAC,OAAO;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAE1C,MAAM,QAAQ,GAAG,qBAAqB,CACpC,wBAAwB,CAAC,OAAO,EAAE,IAAI,CAAC,EACvC,OAAO,CAAC,IAAI,EAAE,IAAI,EAAE,EACpB,OAAO,CAAC,OAAO,EAAE,IAAI,EAAE,CACxB,CAAC;IACF,IAAI,QAAQ,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;IACpE,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;IAC9D,IACE,OAAO,CAAC,uBAAuB;QAC/B,CAAC,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,CAAC,EACpD,CAAC;QACD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,CAAC;IAClC,CAAC;IAED,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;QACpB,OAAO;YACL,MAAM,EAAE,UAAU;YAClB,IAAI,EAAE;gBACJ,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,QAAQ,CAAC,OAAO;gBACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;gBACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,SAAS,EAAE,QAAQ,CAAC,SAAS;gBAC7B,WAAW,EAAE,QAAQ,CAAC,WAAW;gBACjC,UAAU,EAAE,OAAO;aACpB;SACF,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,UAAU;QAClB,IAAI,EAAE;YACJ,IAAI,EAAE,OAAO;YACb,OAAO,EAAE,QAAQ,CAAC,OAAO;YACzB,IAAI,EAAE,QAAQ,CAAC,IAAI;YACnB,WAAW,EAAE,QAAQ,CAAC,WAAW;YACjC,UAAU,EAAE,OAAO;SACpB;KACF,CAAC;AACJ,CAAC"}
@@ -9,7 +9,7 @@ describe('team api compatibility (task + mailbox legacy formats)', () => {
9
9
  const teamName = 'compat-team';
10
10
  beforeEach(async () => {
11
11
  cwd = await mkdtemp(join(tmpdir(), 'omc-team-api-compat-'));
12
- const base = join(cwd, '.omg', 'state', 'team', teamName);
12
+ const base = join(cwd, '.omcp', 'state', 'team', teamName);
13
13
  await mkdir(join(base, 'tasks'), { recursive: true });
14
14
  await mkdir(join(base, 'mailbox'), { recursive: true });
15
15
  await mkdir(join(base, 'events'), { recursive: true });
@@ -29,7 +29,7 @@ describe('team api compatibility (task + mailbox legacy formats)', () => {
29
29
  await rm(cwd, { recursive: true, force: true });
30
30
  });
31
31
  it('reads legacy tasks/1.json and writes canonical task-1.json on claim', async () => {
32
- const legacyTaskPath = join(cwd, '.omg', 'state', 'team', teamName, 'tasks', '1.json');
32
+ const legacyTaskPath = join(cwd, '.omcp', 'state', 'team', teamName, 'tasks', '1.json');
33
33
  await writeFile(legacyTaskPath, JSON.stringify({
34
34
  id: '1',
35
35
  subject: 'Compat task',
@@ -54,11 +54,11 @@ describe('team api compatibility (task + mailbox legacy formats)', () => {
54
54
  worker: 'worker-1',
55
55
  }, cwd);
56
56
  expect(claimResult.ok).toBe(true);
57
- const canonicalPath = join(cwd, '.omg', 'state', 'team', teamName, 'tasks', 'task-1.json');
57
+ const canonicalPath = join(cwd, '.omcp', 'state', 'team', teamName, 'tasks', 'task-1.json');
58
58
  expect(existsSync(canonicalPath)).toBe(true);
59
59
  });
60
60
  it('reads legacy mailbox JSONL and migrates to canonical JSON on mark-notified', async () => {
61
- const legacyMailboxPath = join(cwd, '.omg', 'state', 'team', teamName, 'mailbox', 'worker-1.jsonl');
61
+ const legacyMailboxPath = join(cwd, '.omcp', 'state', 'team', teamName, 'mailbox', 'worker-1.jsonl');
62
62
  await writeFile(legacyMailboxPath, `${JSON.stringify({
63
63
  id: 'msg-1',
64
64
  from: 'leader-fixed',
@@ -82,12 +82,201 @@ describe('team api compatibility (task + mailbox legacy formats)', () => {
82
82
  message_id: 'msg-1',
83
83
  }, cwd);
84
84
  expect(markResult.ok).toBe(true);
85
- const canonicalMailboxPath = join(cwd, '.omg', 'state', 'team', teamName, 'mailbox', 'worker-1.json');
85
+ const canonicalMailboxPath = join(cwd, '.omcp', 'state', 'team', teamName, 'mailbox', 'worker-1.json');
86
86
  expect(existsSync(canonicalMailboxPath)).toBe(true);
87
87
  const canonicalRaw = await readFile(canonicalMailboxPath, 'utf-8');
88
88
  const canonical = JSON.parse(canonicalRaw);
89
89
  expect(canonical.messages[0]?.message_id).toBe('msg-1');
90
90
  expect(typeof canonical.messages[0]?.notified_at).toBe('string');
91
91
  });
92
+ it('threads delegation plans through the real team api create-task flow and enforces completion evidence', async () => {
93
+ const created = await executeTeamApiOperation('create-task', {
94
+ team_name: teamName,
95
+ subject: 'Investigate flaky runtime behavior',
96
+ description: 'Investigate flaky runtime behavior across the team runtime',
97
+ owner: 'worker-1',
98
+ delegation: {
99
+ mode: 'auto',
100
+ required_parallel_probe: true,
101
+ skip_allowed_reason_required: true,
102
+ },
103
+ }, cwd);
104
+ expect(created.ok).toBe(true);
105
+ if (!created.ok)
106
+ return;
107
+ const createdData = created.data;
108
+ expect(createdData.task?.id).toBe('2');
109
+ expect(createdData.task?.delegation).toMatchObject({
110
+ mode: 'auto',
111
+ required_parallel_probe: true,
112
+ });
113
+ const claimResult = await executeTeamApiOperation('claim-task', {
114
+ team_name: teamName,
115
+ task_id: '2',
116
+ worker: 'worker-1',
117
+ }, cwd);
118
+ expect(claimResult.ok).toBe(true);
119
+ if (!claimResult.ok)
120
+ return;
121
+ const claimData = claimResult.data;
122
+ expect(claimData.ok).toBe(true);
123
+ const missing = await executeTeamApiOperation('transition-task-status', {
124
+ team_name: teamName,
125
+ task_id: '2',
126
+ from: 'in_progress',
127
+ to: 'completed',
128
+ claim_token: claimData.claimToken,
129
+ result: 'Summary: done\nVerification: targeted test',
130
+ }, cwd);
131
+ expect(missing.ok).toBe(true);
132
+ if (!missing.ok)
133
+ return;
134
+ const missingData = missing.data;
135
+ expect(missingData.ok).toBe(false);
136
+ expect(missingData.error).toBe('missing_delegation_compliance_evidence');
137
+ });
138
+ it('rejects broad delegated task completion without spawn evidence or skip reason', async () => {
139
+ const taskPath = join(cwd, '.omcp', 'state', 'team', teamName, 'tasks', 'task-1.json');
140
+ await writeFile(taskPath, JSON.stringify({
141
+ id: '1',
142
+ subject: 'Investigate flaky runtime behavior',
143
+ description: 'Search runtime and debug flaky assignment behavior',
144
+ status: 'pending',
145
+ owner: 'worker-1',
146
+ created_at: new Date().toISOString(),
147
+ version: 1,
148
+ delegation: {
149
+ mode: 'auto',
150
+ required_parallel_probe: true,
151
+ skip_allowed_reason_required: true,
152
+ },
153
+ }, null, 2));
154
+ const claimResult = await executeTeamApiOperation('claim-task', {
155
+ team_name: teamName,
156
+ task_id: '1',
157
+ worker: 'worker-1',
158
+ }, cwd);
159
+ expect(claimResult.ok).toBe(true);
160
+ if (!claimResult.ok)
161
+ return;
162
+ const claimData = claimResult.data;
163
+ expect(claimData.ok).toBe(true);
164
+ const missing = await executeTeamApiOperation('transition-task-status', {
165
+ team_name: teamName,
166
+ task_id: '1',
167
+ from: 'in_progress',
168
+ to: 'completed',
169
+ claim_token: claimData.claimToken,
170
+ result: 'Verification:\nPASS - focused regression',
171
+ }, cwd);
172
+ expect(missing.ok).toBe(true);
173
+ if (!missing.ok)
174
+ return;
175
+ const missingData = missing.data;
176
+ expect(missingData.ok).toBe(false);
177
+ expect(missingData.error).toBe('missing_delegation_compliance_evidence');
178
+ const reread = await executeTeamApiOperation('read-task', {
179
+ team_name: teamName,
180
+ task_id: '1',
181
+ }, cwd);
182
+ expect(reread.ok).toBe(true);
183
+ if (!reread.ok)
184
+ return;
185
+ const rereadData = reread.data;
186
+ expect(rereadData.task?.status).toBe('in_progress');
187
+ });
188
+ it('records delegation compliance when broad delegated completion includes spawn evidence', async () => {
189
+ const taskPath = join(cwd, '.omcp', 'state', 'team', teamName, 'tasks', 'task-1.json');
190
+ await writeFile(taskPath, JSON.stringify({
191
+ id: '1',
192
+ subject: 'Investigate flaky runtime behavior',
193
+ description: 'Search runtime and debug flaky assignment behavior',
194
+ status: 'pending',
195
+ owner: 'worker-1',
196
+ created_at: new Date().toISOString(),
197
+ version: 1,
198
+ delegation: {
199
+ mode: 'auto',
200
+ required_parallel_probe: true,
201
+ skip_allowed_reason_required: true,
202
+ },
203
+ }, null, 2));
204
+ const claimResult = await executeTeamApiOperation('claim-task', {
205
+ team_name: teamName,
206
+ task_id: '1',
207
+ worker: 'worker-1',
208
+ }, cwd);
209
+ expect(claimResult.ok).toBe(true);
210
+ if (!claimResult.ok)
211
+ return;
212
+ const claimData = claimResult.data;
213
+ expect(claimData.ok).toBe(true);
214
+ const completed = await executeTeamApiOperation('transition-task-status', {
215
+ team_name: teamName,
216
+ task_id: '1',
217
+ from: 'in_progress',
218
+ to: 'completed',
219
+ claim_token: claimData.claimToken,
220
+ result: [
221
+ 'Verification:',
222
+ 'PASS - focused regression',
223
+ 'Subagent spawn evidence: spawned 2 native subagents for runtime map and test probe',
224
+ ].join('\n'),
225
+ }, cwd);
226
+ expect(completed.ok).toBe(true);
227
+ if (!completed.ok)
228
+ return;
229
+ const completedData = completed.data;
230
+ expect(completedData.ok).toBe(true);
231
+ expect(completedData.task?.result).toContain('Subagent spawn evidence:');
232
+ expect(completedData.task?.delegation_compliance?.status).toBe('spawned');
233
+ expect(completedData.task?.delegation_compliance?.source).toBe('terminal_result');
234
+ expect(completedData.task?.delegation_compliance?.detail).toContain('spawned 2 native subagents');
235
+ });
236
+ it('accepts documented skip reason when broad delegated task allows skipping', async () => {
237
+ const taskPath = join(cwd, '.omcp', 'state', 'team', teamName, 'tasks', 'task-1.json');
238
+ await writeFile(taskPath, JSON.stringify({
239
+ id: '1',
240
+ subject: 'Review focused regression',
241
+ description: 'Audit one already-isolated failing test',
242
+ status: 'pending',
243
+ owner: 'worker-1',
244
+ created_at: new Date().toISOString(),
245
+ version: 1,
246
+ delegation: {
247
+ mode: 'auto',
248
+ required_parallel_probe: true,
249
+ skip_allowed_reason_required: true,
250
+ },
251
+ }, null, 2));
252
+ const claimResult = await executeTeamApiOperation('claim-task', {
253
+ team_name: teamName,
254
+ task_id: '1',
255
+ worker: 'worker-1',
256
+ }, cwd);
257
+ expect(claimResult.ok).toBe(true);
258
+ if (!claimResult.ok)
259
+ return;
260
+ const claimData = claimResult.data;
261
+ expect(claimData.ok).toBe(true);
262
+ const completed = await executeTeamApiOperation('transition-task-status', {
263
+ team_name: teamName,
264
+ task_id: '1',
265
+ from: 'in_progress',
266
+ to: 'completed',
267
+ claim_token: claimData.claimToken,
268
+ result: [
269
+ 'Verification:',
270
+ 'PASS - focused regression',
271
+ 'Subagent skip reason: task scope collapsed to one isolated assertion; spawning would duplicate serial verification',
272
+ ].join('\n'),
273
+ }, cwd);
274
+ expect(completed.ok).toBe(true);
275
+ if (!completed.ok)
276
+ return;
277
+ const completedData = completed.data;
278
+ expect(completedData.ok).toBe(true);
279
+ expect(completedData.task?.delegation_compliance?.status).toBe('skipped');
280
+ });
92
281
  });
93
282
  //# sourceMappingURL=api-interop.compatibility.test.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"api-interop.compatibility.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/api-interop.compatibility.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"api-interop.compatibility.test.js","sourceRoot":"","sources":["../../../src/team/__tests__/api-interop.compatibility.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACrE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAChC,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,CAAC;AAC5B,OAAO,EAAE,uBAAuB,EAAE,MAAM,mBAAmB,CAAC;AAE5D,QAAQ,CAAC,wDAAwD,EAAE,GAAG,EAAE;IACtE,IAAI,GAAW,CAAC;IAChB,MAAM,QAAQ,GAAG,aAAa,CAAC;IAE/B,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,GAAG,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,sBAAsB,CAAC,CAAC,CAAC;QAC5D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;QAC3D,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACtD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACxD,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACvD,MAAM,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC;YACxD,IAAI,EAAE,QAAQ;YACd,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE,UAAU;YACtB,YAAY,EAAE,CAAC;YACf,WAAW,EAAE,EAAE;YACf,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC;YAC/E,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,YAAY,EAAE,QAAQ;YACtB,YAAY,EAAE,CAAC;SAChB,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,MAAM,EAAE,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAClD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,qEAAqE,EAAE,KAAK,IAAI,EAAE;QACnF,MAAM,cAAc,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACxF,MAAM,SAAS,CAAC,cAAc,EAAE,IAAI,CAAC,SAAS,CAAC;YAC7C,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,aAAa;YACtB,WAAW,EAAE,wBAAwB;YACrC,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,CAAC;SACX,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE;YAC5D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;SACb,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO;QAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAkC,CAAC;QAC/D,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAEpC,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE;YAC9D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElC,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QAC5F,MAAM,CAAC,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,4EAA4E,EAAE,KAAK,IAAI,EAAE;QAC1F,MAAM,iBAAiB,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;QACrG,MAAM,SAAS,CAAC,iBAAiB,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC;YACnD,EAAE,EAAE,OAAO;YACX,IAAI,EAAE,cAAc;YACpB,EAAE,EAAE,UAAU;YACd,IAAI,EAAE,OAAO;YACb,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;SACpC,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEjB,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,cAAc,EAAE;YAC/D,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACjC,IAAI,CAAC,UAAU,CAAC,EAAE;YAAE,OAAO;QAC3B,MAAM,QAAQ,GAAG,UAAU,CAAC,IAAqE,CAAC;QAClG,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAC/B,MAAM,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEzD,MAAM,UAAU,GAAG,MAAM,uBAAuB,CAAC,uBAAuB,EAAE;YACxE,SAAS,EAAE,QAAQ;YACnB,MAAM,EAAE,UAAU;YAClB,UAAU,EAAE,OAAO;SACpB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEjC,MAAM,oBAAoB,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,eAAe,CAAC,CAAC;QACvG,MAAM,CAAC,UAAU,CAAC,oBAAoB,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,YAAY,GAAG,MAAM,QAAQ,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;QACnE,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAsE,CAAC;QAChH,MAAM,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QACxD,MAAM,CAAC,OAAO,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,sGAAsG,EAAE,KAAK,IAAI,EAAE;QACpH,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,aAAa,EAAE;YAC3D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,4DAA4D;YACzE,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,IAAI;gBAC7B,4BAA4B,EAAE,IAAI;aACnC;SACF,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAqG,CAAC;QAClI,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACvC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,aAAa,CAAC;YACjD,IAAI,EAAE,MAAM;YACZ,uBAAuB,EAAE,IAAI;SAC9B,CAAC,CAAC;QAEH,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE;YAC9D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAA6C,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,wBAAwB,EAAE;YACtE,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,SAAS,CAAC,UAAU;YACjC,MAAM,EAAE,4CAA4C;SACrD,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAwC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;IAC3E,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,+EAA+E,EAAE,KAAK,IAAI,EAAE;QAC7F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YACvC,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,oDAAoD;YACjE,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,IAAI;gBAC7B,4BAA4B,EAAE,IAAI;aACnC;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE;YAC9D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAA6C,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,OAAO,GAAG,MAAM,uBAAuB,CAAC,wBAAwB,EAAE;YACtE,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,SAAS,CAAC,UAAU;YACjC,MAAM,EAAE,0CAA0C;SACnD,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC9B,IAAI,CAAC,OAAO,CAAC,EAAE;YAAE,OAAO;QACxB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAwC,CAAC;QACrE,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,MAAM,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,wCAAwC,CAAC,CAAC;QAEzE,MAAM,MAAM,GAAG,MAAM,uBAAuB,CAAC,WAAW,EAAE;YACxD,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;SACb,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,MAAM,CAAC,EAAE;YAAE,OAAO;QACvB,MAAM,UAAU,GAAG,MAAM,CAAC,IAAsC,CAAC;QACjE,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;IACtD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,uFAAuF,EAAE,KAAK,IAAI,EAAE;QACrG,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YACvC,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,oCAAoC;YAC7C,WAAW,EAAE,oDAAoD;YACjE,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,IAAI;gBAC7B,4BAA4B,EAAE,IAAI;aACnC;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE;YAC9D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAA6C,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,wBAAwB,EAAE;YACxE,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,SAAS,CAAC,UAAU;YACjC,MAAM,EAAE;gBACN,eAAe;gBACf,2BAA2B;gBAC3B,oFAAoF;aACrF,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,OAAO;QAC1B,MAAM,aAAa,GAAG,SAAS,CAAC,IAM/B,CAAC;QACF,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,0BAA0B,CAAC,CAAC;QACzE,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1E,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAClF,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC,SAAS,CAAC,4BAA4B,CAAC,CAAC;IACpG,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;QACxF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,aAAa,CAAC,CAAC;QACvF,MAAM,SAAS,CAAC,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC;YACvC,EAAE,EAAE,GAAG;YACP,OAAO,EAAE,2BAA2B;YACpC,WAAW,EAAE,yCAAyC;YACtD,MAAM,EAAE,SAAS;YACjB,KAAK,EAAE,UAAU;YACjB,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACpC,OAAO,EAAE,CAAC;YACV,UAAU,EAAE;gBACV,IAAI,EAAE,MAAM;gBACZ,uBAAuB,EAAE,IAAI;gBAC7B,4BAA4B,EAAE,IAAI;aACnC;SACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;QAEb,MAAM,WAAW,GAAG,MAAM,uBAAuB,CAAC,YAAY,EAAE;YAC9D,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,MAAM,EAAE,UAAU;SACnB,EAAE,GAAG,CAAC,CAAC;QACR,MAAM,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,CAAC,WAAW,CAAC,EAAE;YAAE,OAAO;QAC5B,MAAM,SAAS,GAAG,WAAW,CAAC,IAA6C,CAAC;QAC5E,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAEhC,MAAM,SAAS,GAAG,MAAM,uBAAuB,CAAC,wBAAwB,EAAE;YACxE,SAAS,EAAE,QAAQ;YACnB,OAAO,EAAE,GAAG;YACZ,IAAI,EAAE,aAAa;YACnB,EAAE,EAAE,WAAW;YACf,WAAW,EAAE,SAAS,CAAC,UAAU;YACjC,MAAM,EAAE;gBACN,eAAe;gBACf,2BAA2B;gBAC3B,oHAAoH;aACrH,CAAC,IAAI,CAAC,IAAI,CAAC;SACb,EAAE,GAAG,CAAC,CAAC;QAER,MAAM,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,CAAC,SAAS,CAAC,EAAE;YAAE,OAAO;QAC1B,MAAM,aAAa,GAAG,SAAS,CAAC,IAAgF,CAAC;QACjH,MAAM,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpC,MAAM,CAAC,aAAa,CAAC,IAAI,EAAE,qBAAqB,EAAE,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}