arggon-harness 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (170) hide show
  1. package/README.md +229 -0
  2. package/config/default-opencode.json +21 -0
  3. package/dist/init.d.ts +3 -0
  4. package/dist/init.d.ts.map +1 -0
  5. package/dist/init.js +406 -0
  6. package/dist/init.js.map +1 -0
  7. package/dist/plugin/engine/artifact-graph.d.ts +38 -0
  8. package/dist/plugin/engine/artifact-graph.d.ts.map +1 -0
  9. package/dist/plugin/engine/artifact-graph.js +137 -0
  10. package/dist/plugin/engine/artifact-graph.js.map +1 -0
  11. package/dist/plugin/engine/config.d.ts +21 -0
  12. package/dist/plugin/engine/config.d.ts.map +1 -0
  13. package/dist/plugin/engine/config.js +146 -0
  14. package/dist/plugin/engine/config.js.map +1 -0
  15. package/dist/plugin/engine/delta-apply.d.ts +23 -0
  16. package/dist/plugin/engine/delta-apply.d.ts.map +1 -0
  17. package/dist/plugin/engine/delta-apply.js +153 -0
  18. package/dist/plugin/engine/delta-apply.js.map +1 -0
  19. package/dist/plugin/engine/git.d.ts +32 -0
  20. package/dist/plugin/engine/git.d.ts.map +1 -0
  21. package/dist/plugin/engine/git.js +61 -0
  22. package/dist/plugin/engine/git.js.map +1 -0
  23. package/dist/plugin/engine/integrity.d.ts +45 -0
  24. package/dist/plugin/engine/integrity.d.ts.map +1 -0
  25. package/dist/plugin/engine/integrity.js +98 -0
  26. package/dist/plugin/engine/integrity.js.map +1 -0
  27. package/dist/plugin/engine/registry.d.ts +39 -0
  28. package/dist/plugin/engine/registry.d.ts.map +1 -0
  29. package/dist/plugin/engine/registry.js +191 -0
  30. package/dist/plugin/engine/registry.js.map +1 -0
  31. package/dist/plugin/engine/state.d.ts +31 -0
  32. package/dist/plugin/engine/state.d.ts.map +1 -0
  33. package/dist/plugin/engine/state.js +116 -0
  34. package/dist/plugin/engine/state.js.map +1 -0
  35. package/dist/plugin/engine/task-tracker.d.ts +66 -0
  36. package/dist/plugin/engine/task-tracker.d.ts.map +1 -0
  37. package/dist/plugin/engine/task-tracker.js +124 -0
  38. package/dist/plugin/engine/task-tracker.js.map +1 -0
  39. package/dist/plugin/engine/types.d.ts +349 -0
  40. package/dist/plugin/engine/types.d.ts.map +1 -0
  41. package/dist/plugin/engine/types.js +3 -0
  42. package/dist/plugin/engine/types.js.map +1 -0
  43. package/dist/plugin/engine/validator.d.ts +52 -0
  44. package/dist/plugin/engine/validator.d.ts.map +1 -0
  45. package/dist/plugin/engine/validator.js +457 -0
  46. package/dist/plugin/engine/validator.js.map +1 -0
  47. package/dist/plugin/engine/verifier.d.ts +61 -0
  48. package/dist/plugin/engine/verifier.d.ts.map +1 -0
  49. package/dist/plugin/engine/verifier.js +441 -0
  50. package/dist/plugin/engine/verifier.js.map +1 -0
  51. package/dist/plugin/hooks/context-injection.d.ts +11 -0
  52. package/dist/plugin/hooks/context-injection.d.ts.map +1 -0
  53. package/dist/plugin/hooks/context-injection.js +88 -0
  54. package/dist/plugin/hooks/context-injection.js.map +1 -0
  55. package/dist/plugin/hooks/event-handlers.d.ts +9 -0
  56. package/dist/plugin/hooks/event-handlers.d.ts.map +1 -0
  57. package/dist/plugin/hooks/event-handlers.js +10 -0
  58. package/dist/plugin/hooks/event-handlers.js.map +1 -0
  59. package/dist/plugin/hooks/workflow-gate.d.ts +24 -0
  60. package/dist/plugin/hooks/workflow-gate.d.ts.map +1 -0
  61. package/dist/plugin/hooks/workflow-gate.js +78 -0
  62. package/dist/plugin/hooks/workflow-gate.js.map +1 -0
  63. package/dist/plugin/index.d.ts +423 -0
  64. package/dist/plugin/index.d.ts.map +1 -0
  65. package/dist/plugin/index.js +253 -0
  66. package/dist/plugin/index.js.map +1 -0
  67. package/dist/plugin/tools/spec-artifact-instr.d.ts +7 -0
  68. package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -0
  69. package/dist/plugin/tools/spec-artifact-instr.js +73 -0
  70. package/dist/plugin/tools/spec-artifact-instr.js.map +1 -0
  71. package/dist/plugin/tools/spec-change-archive.d.ts +6 -0
  72. package/dist/plugin/tools/spec-change-archive.d.ts.map +1 -0
  73. package/dist/plugin/tools/spec-change-archive.js +62 -0
  74. package/dist/plugin/tools/spec-change-archive.js.map +1 -0
  75. package/dist/plugin/tools/spec-change-list.d.ts +3 -0
  76. package/dist/plugin/tools/spec-change-list.d.ts.map +1 -0
  77. package/dist/plugin/tools/spec-change-list.js +38 -0
  78. package/dist/plugin/tools/spec-change-list.js.map +1 -0
  79. package/dist/plugin/tools/spec-change-new.d.ts +7 -0
  80. package/dist/plugin/tools/spec-change-new.d.ts.map +1 -0
  81. package/dist/plugin/tools/spec-change-new.js +47 -0
  82. package/dist/plugin/tools/spec-change-new.js.map +1 -0
  83. package/dist/plugin/tools/spec-change-status.d.ts +6 -0
  84. package/dist/plugin/tools/spec-change-status.d.ts.map +1 -0
  85. package/dist/plugin/tools/spec-change-status.js +43 -0
  86. package/dist/plugin/tools/spec-change-status.js.map +1 -0
  87. package/dist/plugin/tools/spec-design-critique.d.ts +20 -0
  88. package/dist/plugin/tools/spec-design-critique.d.ts.map +1 -0
  89. package/dist/plugin/tools/spec-design-critique.js +412 -0
  90. package/dist/plugin/tools/spec-design-critique.js.map +1 -0
  91. package/dist/plugin/tools/spec-design-hifi.d.ts +119 -0
  92. package/dist/plugin/tools/spec-design-hifi.d.ts.map +1 -0
  93. package/dist/plugin/tools/spec-design-hifi.js +653 -0
  94. package/dist/plugin/tools/spec-design-hifi.js.map +1 -0
  95. package/dist/plugin/tools/spec-design-wireframe.d.ts +91 -0
  96. package/dist/plugin/tools/spec-design-wireframe.d.ts.map +1 -0
  97. package/dist/plugin/tools/spec-design-wireframe.js +357 -0
  98. package/dist/plugin/tools/spec-design-wireframe.js.map +1 -0
  99. package/dist/plugin/tools/spec-init.d.ts +9 -0
  100. package/dist/plugin/tools/spec-init.d.ts.map +1 -0
  101. package/dist/plugin/tools/spec-init.js +58 -0
  102. package/dist/plugin/tools/spec-init.js.map +1 -0
  103. package/dist/plugin/tools/spec-integrity-check.d.ts +6 -0
  104. package/dist/plugin/tools/spec-integrity-check.d.ts.map +1 -0
  105. package/dist/plugin/tools/spec-integrity-check.js +19 -0
  106. package/dist/plugin/tools/spec-integrity-check.js.map +1 -0
  107. package/dist/plugin/tools/spec-registry-update.d.ts +3 -0
  108. package/dist/plugin/tools/spec-registry-update.d.ts.map +1 -0
  109. package/dist/plugin/tools/spec-registry-update.js +34 -0
  110. package/dist/plugin/tools/spec-registry-update.js.map +1 -0
  111. package/dist/plugin/tools/spec-schema-list.d.ts +3 -0
  112. package/dist/plugin/tools/spec-schema-list.d.ts.map +1 -0
  113. package/dist/plugin/tools/spec-schema-list.js +28 -0
  114. package/dist/plugin/tools/spec-schema-list.js.map +1 -0
  115. package/dist/plugin/tools/spec-specs-apply.d.ts +7 -0
  116. package/dist/plugin/tools/spec-specs-apply.d.ts.map +1 -0
  117. package/dist/plugin/tools/spec-specs-apply.js +49 -0
  118. package/dist/plugin/tools/spec-specs-apply.js.map +1 -0
  119. package/dist/plugin/tools/spec-task-progress.d.ts +8 -0
  120. package/dist/plugin/tools/spec-task-progress.d.ts.map +1 -0
  121. package/dist/plugin/tools/spec-task-progress.js +96 -0
  122. package/dist/plugin/tools/spec-task-progress.js.map +1 -0
  123. package/dist/plugin/tools/spec-validate.d.ts +21 -0
  124. package/dist/plugin/tools/spec-validate.d.ts.map +1 -0
  125. package/dist/plugin/tools/spec-validate.js +182 -0
  126. package/dist/plugin/tools/spec-validate.js.map +1 -0
  127. package/dist/plugin/tools/spec-verify.d.ts +7 -0
  128. package/dist/plugin/tools/spec-verify.d.ts.map +1 -0
  129. package/dist/plugin/tools/spec-verify.js +50 -0
  130. package/dist/plugin/tools/spec-verify.js.map +1 -0
  131. package/dist/plugin/tools/util.d.ts +25 -0
  132. package/dist/plugin/tools/util.d.ts.map +1 -0
  133. package/dist/plugin/tools/util.js +33 -0
  134. package/dist/plugin/tools/util.js.map +1 -0
  135. package/package.json +61 -0
  136. package/src/agents/orchestrator.md +158 -0
  137. package/src/agents/spec-apply.md +114 -0
  138. package/src/agents/spec-archive.md +103 -0
  139. package/src/agents/spec-propose.md +120 -0
  140. package/src/agents/spec-verify.md +103 -0
  141. package/src/commands/spec-init.md +6 -0
  142. package/src/commands/spec-onboard.md +6 -0
  143. package/src/commands/spec-status.md +6 -0
  144. package/src/commands/spec-sync.md +6 -0
  145. package/src/schemas/hybrid.yaml +144 -0
  146. package/src/schemas/spec-driven.yaml +155 -0
  147. package/src/schemas/tdd.yaml +203 -0
  148. package/src/skills/playwright-cli/SKILL.md +388 -0
  149. package/src/skills/playwright-cli/references/element-attributes.md +23 -0
  150. package/src/skills/playwright-cli/references/playwright-tests.md +39 -0
  151. package/src/skills/playwright-cli/references/request-mocking.md +87 -0
  152. package/src/skills/playwright-cli/references/running-code.md +241 -0
  153. package/src/skills/playwright-cli/references/session-management.md +225 -0
  154. package/src/skills/playwright-cli/references/spec-driven-testing.md +305 -0
  155. package/src/skills/playwright-cli/references/storage-state.md +275 -0
  156. package/src/skills/playwright-cli/references/test-generation.md +134 -0
  157. package/src/skills/playwright-cli/references/tracing.md +139 -0
  158. package/src/skills/playwright-cli/references/video-recording.md +143 -0
  159. package/src/skills/spec-init/SKILL.md +61 -0
  160. package/src/skills/spec-onboard/SKILL.md +178 -0
  161. package/src/skills/spec-status/SKILL.md +72 -0
  162. package/src/skills/spec-sync/SKILL.md +63 -0
  163. package/src/templates/config.yaml +14 -0
  164. package/src/templates/design-hifi.yaml +580 -0
  165. package/src/templates/design-tech.yaml +42 -0
  166. package/src/templates/design-wireframe.yaml +114 -0
  167. package/src/templates/proposal.yaml +43 -0
  168. package/src/templates/registry.yaml +3 -0
  169. package/src/templates/spec.yaml +56 -0
  170. package/src/templates/tasks.yaml +58 -0
@@ -0,0 +1,253 @@
1
+ import { tool } from "@opencode-ai/plugin";
2
+ import { z } from "zod";
3
+ import { specInit } from "./tools/spec-init.js";
4
+ import { specChangeNew } from "./tools/spec-change-new.js";
5
+ import { specChangeStatus } from "./tools/spec-change-status.js";
6
+ import { specChangeList } from "./tools/spec-change-list.js";
7
+ import { specArtifactInstr } from "./tools/spec-artifact-instr.js";
8
+ import { specValidate } from "./tools/spec-validate.js";
9
+ import { specSpecsApply } from "./tools/spec-specs-apply.js";
10
+ import { specChangeArchive } from "./tools/spec-change-archive.js";
11
+ import { specSchemaList } from "./tools/spec-schema-list.js";
12
+ import { specVerify } from "./tools/spec-verify.js";
13
+ import { specTaskProgress } from "./tools/spec-task-progress.js";
14
+ import { specIntegrityCheck } from "./tools/spec-integrity-check.js";
15
+ import { specRegistryUpdate } from "./tools/spec-registry-update.js";
16
+ import { specDesignWireframe } from "./tools/spec-design-wireframe.js";
17
+ import { specDesignHiFi } from "./tools/spec-design-hifi.js";
18
+ import { specDesignCritique } from "./tools/spec-design-critique.js";
19
+ import { contextInjectionTransform, buildSubagentContextBlock, buildOrchestratorDelegationBlock } from "./hooks/context-injection.js";
20
+ import { handleFileSaveEvent } from "./hooks/event-handlers.js";
21
+ import { workflowGatePermission, workflowGateToolDefinition } from "./hooks/workflow-gate.js";
22
+ import * as Registry from "./engine/registry.js";
23
+ export { buildSubagentContextBlock, buildOrchestratorDelegationBlock };
24
+ export default {
25
+ id: "harness",
26
+ server: async (input) => {
27
+ const { directory } = input;
28
+ const projectRoot = directory;
29
+ const pluginDir = import.meta.dirname;
30
+ const ctx = { projectRoot, pluginDir };
31
+ return {
32
+ tool: {
33
+ spec_change_new: tool({
34
+ description: "Create a new spec change with the given name and schema",
35
+ args: {
36
+ name: z.string().describe("Change name in kebab-case"),
37
+ schema: z.string().optional().describe("Schema name (default: spec-driven)")
38
+ },
39
+ execute: async (args) => specChangeNew(args, ctx)
40
+ }),
41
+ spec_change_status: tool({
42
+ description: "Get the status of a spec change including artifact completion and progress",
43
+ args: {
44
+ changeName: z.string().describe("Change name")
45
+ },
46
+ execute: async (args) => specChangeStatus(args, ctx)
47
+ }),
48
+ spec_change_list: tool({
49
+ description: "List all active spec changes",
50
+ args: {},
51
+ execute: async () => specChangeList({}, ctx)
52
+ }),
53
+ spec_artifact_instr: tool({
54
+ description: "Get instructions for creating the next artifact in a change",
55
+ args: {
56
+ changeName: z.string().describe("Change name"),
57
+ artifactId: z.string().optional().describe("Specific artifact (optional, defaults to next ready)")
58
+ },
59
+ execute: async (args) => specArtifactInstr(args, ctx)
60
+ }),
61
+ spec_validate: tool({
62
+ description: "Validate a spec change or specific artifact",
63
+ args: {
64
+ changeName: z.string().describe("Change name"),
65
+ artifactId: z.string().optional().describe("Specific artifact (optional)")
66
+ },
67
+ execute: async (args) => specValidate(args, ctx)
68
+ }),
69
+ spec_specs_apply: tool({
70
+ description: "Apply delta specs from a change to main specs",
71
+ args: {
72
+ changeName: z.string().describe("Change name"),
73
+ dryRun: z.boolean().optional().describe("Preview without applying (default: false)")
74
+ },
75
+ execute: async (args) => specSpecsApply(args, ctx)
76
+ }),
77
+ spec_change_archive: tool({
78
+ description: "Archive a completed spec change",
79
+ args: {
80
+ changeName: z.string().describe("Change name")
81
+ },
82
+ execute: async (args) => specChangeArchive(args, ctx)
83
+ }),
84
+ spec_schema_list: tool({
85
+ description: "List available workflow schemas",
86
+ args: {},
87
+ execute: async () => specSchemaList({}, ctx)
88
+ }),
89
+ spec_verify: tool({
90
+ description: "Run 5-dimension verification on a spec change",
91
+ args: {
92
+ changeName: z.string().describe("Change name"),
93
+ dimensions: z.array(z.string()).optional().describe("Specific dimensions (default: all)")
94
+ },
95
+ execute: async (args) => specVerify(args, ctx)
96
+ }),
97
+ spec_task_progress: tool({
98
+ description: "Get or update task progress in a change",
99
+ args: {
100
+ changeName: z.string().describe("Change name"),
101
+ taskId: z.string().optional().describe("Task ID to update (optional)"),
102
+ status: z.string().optional().describe("New status (optional)")
103
+ },
104
+ execute: async (args) => specTaskProgress(args, ctx)
105
+ }),
106
+ spec_integrity_check: tool({
107
+ description: "Verify hash integrity of all artifacts in a change",
108
+ args: {
109
+ changeName: z.string().describe("Change name")
110
+ },
111
+ execute: async (args) => specIntegrityCheck(args, ctx)
112
+ }),
113
+ spec_registry_update: tool({
114
+ description: "Update the spec change registry",
115
+ args: {},
116
+ execute: async () => specRegistryUpdate({}, ctx)
117
+ }),
118
+ spec_design_wireframe: tool({
119
+ description: "Generate wireframe design artifact for a spec change. Creates design-wireframe.yaml with page layouts, component placements, user flows, and annotations. Optionally generates an HTML preview.",
120
+ args: {
121
+ changeName: z.string().describe("Change name"),
122
+ pages: z.array(z.object({
123
+ id: z.string().describe("Page identifier (kebab-case)"),
124
+ name: z.string().describe("Page display name"),
125
+ description: z.string().optional().describe("Page description"),
126
+ layout: z.array(z.object({
127
+ region: z.string().describe("Region type (header, sidebar, main, footer, hero, section)"),
128
+ order: z.number().describe("Display order"),
129
+ style: z.string().optional().describe("CSS style hints")
130
+ })).describe("Layout regions for the page"),
131
+ components: z.array(z.object({
132
+ id: z.string().describe("Component identifier"),
133
+ type: z.string().describe("Component type (button, card, input, table, etc.)"),
134
+ region: z.string().describe("Parent region"),
135
+ position: z.object({
136
+ x: z.number().describe("Grid column start (0-11)"),
137
+ y: z.number().describe("Grid row")
138
+ }).describe("Grid position"),
139
+ size: z.object({
140
+ width: z.number().describe("Column span (1-12)"),
141
+ height: z.number().describe("Row span")
142
+ }).describe("Component size"),
143
+ properties: z.record(z.string(), z.any()).optional().describe("Component properties")
144
+ })).optional().describe("Components in the page")
145
+ })).describe("Pages to include in the wireframe"),
146
+ flows: z.object({
147
+ user_flows: z.array(z.object({
148
+ id: z.string().describe("Flow identifier"),
149
+ name: z.string().describe("Flow name"),
150
+ description: z.string().optional().describe("Flow description"),
151
+ steps: z.array(z.object({
152
+ id: z.string().describe("Step identifier"),
153
+ from_page: z.string().describe("Source page ID"),
154
+ to_page: z.string().describe("Destination page ID"),
155
+ trigger: z.string().describe("Trigger action (click, submit, hover, etc.)"),
156
+ description: z.string().optional().describe("Step description")
157
+ })).describe("Flow steps")
158
+ })).optional().describe("User flow definitions")
159
+ }).optional().describe("User flow specifications"),
160
+ annotations: z.array(z.object({
161
+ id: z.string().describe("Annotation identifier"),
162
+ page_id: z.string().optional().describe("Reference page ID"),
163
+ note: z.string().describe("Annotation text"),
164
+ category: z.string().optional().describe("Category (constraint, edge_case, decision)")
165
+ })).optional().describe("Design annotations"),
166
+ html_preview: z.boolean().optional().default(true).describe("Generate HTML wireframe preview")
167
+ },
168
+ execute: async (args) => specDesignWireframe(args, ctx)
169
+ }),
170
+ spec_design_hifi: tool({
171
+ description: "Generate high-fidelity design system artifact. Creates design-hifi.yaml with color palette, typography, spacing, component library, and breakpoints. Optionally generates an HTML style guide preview.",
172
+ args: {
173
+ changeName: z.string().describe("Change name"),
174
+ color_palette: z.object({
175
+ primary: z.object({ base: z.string(), hover: z.string().optional(), active: z.string().optional(), disabled: z.string().optional(), contrast: z.string().optional() }),
176
+ secondary: z.object({ base: z.string(), hover: z.string().optional(), active: z.string().optional(), disabled: z.string().optional(), contrast: z.string().optional() }),
177
+ accent: z.object({ base: z.string(), hover: z.string().optional(), active: z.string().optional(), disabled: z.string().optional(), contrast: z.string().optional() }),
178
+ neutral: z.object({ base: z.string(), hover: z.string().optional(), active: z.string().optional(), disabled: z.string().optional(), contrast: z.string().optional() }),
179
+ semantic: z.object({ success: z.string(), warning: z.string(), error: z.string(), info: z.string() }).optional(),
180
+ surfaces: z.object({ background: z.string(), foreground: z.string(), card: z.string(), border: z.string(), muted: z.string() }).optional()
181
+ }).describe("Color palette with hex values"),
182
+ typography: z.object({
183
+ families: z.array(z.object({
184
+ name: z.string(), stack: z.string(), role: z.string()
185
+ })).describe("Font families"),
186
+ scale: z.array(z.object({
187
+ name: z.string(), size: z.string(), weight: z.number(), line_height: z.number(),
188
+ letter_spacing: z.string().optional(), role: z.string()
189
+ })).describe("Type scale")
190
+ }).describe("Typography specification"),
191
+ spacing: z.object({
192
+ base_unit: z.number().describe("Base spacing unit in px"),
193
+ scale: z.array(z.number()).describe("Spacing scale multipliers")
194
+ }).describe("Spacing system"),
195
+ component_library: z.object({
196
+ button: z.array(z.any()).optional(),
197
+ card: z.array(z.any()).optional(),
198
+ input: z.array(z.any()).optional(),
199
+ navigation: z.array(z.any()).optional()
200
+ }).optional().describe("Component variants and states"),
201
+ breakpoints: z.array(z.object({
202
+ name: z.string(), min_width: z.number(), columns: z.number(),
203
+ rules: z.array(z.string()).optional()
204
+ })).optional().describe("Responsive breakpoints"),
205
+ html_preview: z.boolean().optional().default(true).describe("Generate HTML style guide preview")
206
+ },
207
+ execute: async (args) => specDesignHiFi(args, ctx)
208
+ }),
209
+ spec_design_critique: tool({
210
+ description: "Critique a design artifact (wireframe or hi-fi) across 5 dimensions: philosophy, hierarchy, detail, functionality, and innovation. Scores each 0-100 with rationale and enforces a configurable quality gate.",
211
+ args: {
212
+ changeName: z.string().describe("Change name"),
213
+ artifactType: z.enum(["wireframe", "hifi"]).optional().describe("Artifact type (auto-detected if not specified)"),
214
+ threshold: z.number().min(0).max(100).optional().default(70).describe("Pass threshold (0-100, default 70)"),
215
+ focusDimensions: z.array(z.enum(["philosophy", "hierarchy", "detail", "functionality", "innovation"])).optional().describe("Focus on specific dimensions only")
216
+ },
217
+ execute: async (args) => specDesignCritique(args, ctx)
218
+ }),
219
+ spec_init: tool({
220
+ description: "Initialize the spec/ directory structure with config.yaml and registry.yaml",
221
+ args: {
222
+ context: z.string().describe("Project context as markdown"),
223
+ schema: z.string().optional().describe("Schema name (default: spec-driven)"),
224
+ rules: z.record(z.string(), z.array(z.string())).optional().describe("Per-artifact rules"),
225
+ force: z.boolean().optional().describe("Overwrite existing config.yaml (default: false)")
226
+ },
227
+ execute: async (args) => specInit(args, ctx)
228
+ })
229
+ },
230
+ "experimental.chat.system.transform": async (input, output) => {
231
+ try {
232
+ const registry = await Registry.readRegistry(projectRoot);
233
+ const activeChanges = registry.changes.filter(c => c.status === "active");
234
+ const blocks = contextInjectionTransform(input, activeChanges);
235
+ for (const block of blocks) {
236
+ output.system.push(block);
237
+ }
238
+ }
239
+ catch { }
240
+ },
241
+ event: async (event) => {
242
+ await handleFileSaveEvent(event, ctx);
243
+ },
244
+ "permission.ask": async (input, output) => {
245
+ await workflowGatePermission(input, output, ctx);
246
+ },
247
+ "tool.definition": async (input, output) => {
248
+ await workflowGateToolDefinition(input, output, ctx);
249
+ }
250
+ };
251
+ }
252
+ };
253
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/plugin/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import type { ToolContext, ToolResult } from "./util.js";
2
+ export interface SpecArtifactInstrArgs {
3
+ changeName: string;
4
+ artifactId?: string;
5
+ }
6
+ export declare function specArtifactInstr(args: SpecArtifactInstrArgs, ctx: ToolContext): Promise<ToolResult>;
7
+ //# sourceMappingURL=spec-artifact-instr.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-artifact-instr.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAOxD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,CAAC,EAAE,MAAM,CAAA;CACpB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA6E1G"}
@@ -0,0 +1,73 @@
1
+ import * as fs from "fs/promises";
2
+ import { parseYaml, loadSchema, assetRoot } from "./util.js";
3
+ import * as State from "../engine/state.js";
4
+ import * as ArtifactGraph from "../engine/artifact-graph.js";
5
+ import { readProjectConfig } from "../engine/config.js";
6
+ export async function specArtifactInstr(args, ctx) {
7
+ try {
8
+ const changeDir = `${ctx.projectRoot}/spec/changes/${args.changeName}`;
9
+ const metaContent = await fs.readFile(`${changeDir}/meta.yaml`, "utf-8");
10
+ const meta = parseYaml(metaContent);
11
+ const schema = await loadSchema(ctx.pluginDir, meta.schema);
12
+ const completed = await State.detectCompleted(changeDir, schema);
13
+ // Optional artifacts that aren't completed can be skipped
14
+ const skipped = new Set();
15
+ for (const artifact of schema.artifacts) {
16
+ if (artifact.optional && !completed.has(artifact.id)) {
17
+ skipped.add(artifact.id);
18
+ }
19
+ }
20
+ const graph = ArtifactGraph.buildGraph(schema);
21
+ const nextArtifacts = ArtifactGraph.getNextArtifacts(graph, completed, skipped);
22
+ const artifactId = args.artifactId || nextArtifacts[0];
23
+ if (!artifactId) {
24
+ return { output: "All artifacts complete", metadata: { complete: true } };
25
+ }
26
+ const artifactDef = schema.artifacts.find(a => a.id === artifactId);
27
+ if (!artifactDef) {
28
+ return { output: `Artifact not found: ${artifactId}`, metadata: { error: true } };
29
+ }
30
+ const templatePath = `${assetRoot(ctx.pluginDir)}/templates/${artifactDef.template}`;
31
+ const template = await fs.readFile(templatePath, "utf-8");
32
+ const dependencies = artifactDef.requires.map(depId => {
33
+ const dep = schema.artifacts.find(a => a.id === depId);
34
+ return { id: depId, path: dep?.generates };
35
+ });
36
+ const instructions = {
37
+ artifactId,
38
+ description: artifactDef.description,
39
+ instruction: artifactDef.instruction,
40
+ template,
41
+ outputPath: artifactDef.generates,
42
+ dependencies,
43
+ unlocks: schema.artifacts.filter(a => a.requires.includes(artifactId)).map(a => a.id)
44
+ };
45
+ // Inject config.yaml context and rules into instruction text
46
+ try {
47
+ const config = await readProjectConfig(ctx.projectRoot);
48
+ const enrichedInstruction = [instructions.instruction];
49
+ if (config.context) {
50
+ enrichedInstruction.push("\n## Project Context\n");
51
+ enrichedInstruction.push(config.context);
52
+ }
53
+ if (config.rules && config.rules[artifactId] && config.rules[artifactId].length > 0) {
54
+ enrichedInstruction.push("\n## Rules\n");
55
+ for (const rule of config.rules[artifactId]) {
56
+ enrichedInstruction.push(`- ${rule}`);
57
+ }
58
+ }
59
+ instructions.instruction = enrichedInstruction.join("\n");
60
+ }
61
+ catch {
62
+ // config.yaml missing or malformed — use schema instructions as-is
63
+ }
64
+ return {
65
+ output: JSON.stringify(instructions, null, 2),
66
+ metadata: instructions
67
+ };
68
+ }
69
+ catch (error) {
70
+ return { output: `Error: ${error.message}`, metadata: { error: true } };
71
+ }
72
+ }
73
+ //# sourceMappingURL=spec-artifact-instr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-artifact-instr.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-artifact-instr.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ import type { ToolContext, ToolResult } from "./util.js";
2
+ export interface SpecChangeArchiveArgs {
3
+ changeName: string;
4
+ }
5
+ export declare function specChangeArchive(args: SpecChangeArchiveArgs, ctx: ToolContext): Promise<ToolResult>;
6
+ //# sourceMappingURL=spec-change-archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-archive.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-archive.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAKxD,MAAM,WAAW,qBAAqB;IACpC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,qBAAqB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAsD1G"}
@@ -0,0 +1,62 @@
1
+ import * as fs from "fs/promises";
2
+ import * as Registry from "../engine/registry.js";
3
+ import * as Git from "../engine/git.js";
4
+ import { readProjectConfig } from "../engine/config.js";
5
+ export async function specChangeArchive(args, ctx) {
6
+ try {
7
+ const changeDir = `${ctx.projectRoot}/spec/changes/${args.changeName}`;
8
+ try {
9
+ await fs.access(`${changeDir}/.verify/passed`);
10
+ }
11
+ catch {
12
+ return {
13
+ output: `Error: Change "${args.changeName}" has not passed verification. Run /spec-verify first and address any issues before archiving.`,
14
+ metadata: { error: true, phase: "pre-archive" }
15
+ };
16
+ }
17
+ const archiveDir = `${ctx.projectRoot}/spec/archive/${new Date().toISOString().split("T")[0]}-${args.changeName}`;
18
+ await fs.rename(changeDir, archiveDir);
19
+ await Registry.unregisterChange(ctx.projectRoot, args.changeName);
20
+ // Archive-phase auto-commit
21
+ const commitMetadata = {};
22
+ try {
23
+ const config = await readProjectConfig(ctx.projectRoot);
24
+ if (config.auto_commit === false) {
25
+ commitMetadata.commit_skipped = true;
26
+ }
27
+ else {
28
+ const repoCheck = await Git.isGitRepo(ctx.projectRoot);
29
+ if (!repoCheck.isRepo) {
30
+ commitMetadata.commit_skipped = true;
31
+ }
32
+ else {
33
+ const changesCheck = await Git.hasChanges(ctx.projectRoot);
34
+ if (!changesCheck.hasChanges) {
35
+ commitMetadata.commit_skipped = true;
36
+ }
37
+ else {
38
+ const result = await Git.gitCommit(ctx.projectRoot, `spec(archive): archive ${args.changeName}`);
39
+ if (result.success && result.hash) {
40
+ commitMetadata.commit_hash = result.hash;
41
+ }
42
+ else if (!result.success) {
43
+ commitMetadata.commit_warning = result.error ?? "git commit failed";
44
+ }
45
+ }
46
+ }
47
+ }
48
+ }
49
+ catch {
50
+ // Config read or any other failure — graceful degradation, skip commit silently
51
+ commitMetadata.commit_skipped = true;
52
+ }
53
+ return {
54
+ output: `Archived: ${args.changeName}\nPath: ${archiveDir}`,
55
+ metadata: { archived: true, archivePath: archiveDir, ...commitMetadata }
56
+ };
57
+ }
58
+ catch (error) {
59
+ return { output: `Error: ${error.message}`, metadata: { error: true } };
60
+ }
61
+ }
62
+ //# sourceMappingURL=spec-change-archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-archive.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-archive.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { ToolContext, ToolResult } from "./util.js";
2
+ export declare function specChangeList(_args: {}, ctx: ToolContext): Promise<ToolResult>;
3
+ //# sourceMappingURL=spec-change-list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-list.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAMxD,wBAAsB,cAAc,CAAC,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CAmCrF"}
@@ -0,0 +1,38 @@
1
+ import * as fs from "fs/promises";
2
+ import { loadSchema } from "./util.js";
3
+ import * as Registry from "../engine/registry.js";
4
+ import * as State from "../engine/state.js";
5
+ export async function specChangeList(_args, ctx) {
6
+ try {
7
+ const registry = await Registry.readRegistry(ctx.projectRoot);
8
+ // Enrich each change with live artifact data from filesystem
9
+ const enriched = await Promise.all(registry.changes.map(async (change) => {
10
+ const changeDir = `${ctx.projectRoot}/spec/changes/${change.name}`;
11
+ try {
12
+ // Read meta.yaml to get schema name, then detect completed artifacts
13
+ const metaPath = `${changeDir}/meta.yaml`;
14
+ const metaContent = await fs.readFile(metaPath, "utf-8");
15
+ const meta = JSON.parse(metaContent);
16
+ const schema = await loadSchema(ctx.pluginDir, meta.schema);
17
+ const completed = await State.detectCompleted(changeDir, schema);
18
+ const artifacts = {};
19
+ for (const artifact of schema.artifacts) {
20
+ artifacts[artifact.id] = completed.has(artifact.id);
21
+ }
22
+ return { ...change, artifacts };
23
+ }
24
+ catch {
25
+ // If we can't read the change directory, return it as-is
26
+ return change;
27
+ }
28
+ }));
29
+ return {
30
+ output: JSON.stringify(enriched, null, 2),
31
+ metadata: { changes: enriched }
32
+ };
33
+ }
34
+ catch (error) {
35
+ return { output: `Error: ${error.message}`, metadata: { error: true } };
36
+ }
37
+ }
38
+ //# sourceMappingURL=spec-change-list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-list.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-list.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AACjD,OAAO,KAAK,KAAK,MAAM,oBAAoB,CAAA;AAG3C,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,KAAS,EAAE,GAAgB;IAC9D,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;QAE7D,6DAA6D;QAC7D,MAAM,QAAQ,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE;YACvE,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,WAAW,iBAAiB,MAAM,CAAC,IAAI,EAAE,CAAA;YAElE,IAAI,CAAC;gBACH,qEAAqE;gBACrE,MAAM,QAAQ,GAAG,GAAG,SAAS,YAAY,CAAA;gBACzC,MAAM,WAAW,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;gBACxD,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAuB,CAAA;gBAC1D,MAAM,MAAM,GAAW,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;gBACnE,MAAM,SAAS,GAAG,MAAM,KAAK,CAAC,eAAe,CAAC,SAAS,EAAE,MAAM,CAAC,CAAA;gBAEhE,MAAM,SAAS,GAA4B,EAAE,CAAA;gBAC7C,KAAK,MAAM,QAAQ,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxC,SAAS,CAAC,QAAQ,CAAC,EAAE,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;gBACrD,CAAC;gBAED,OAAO,EAAE,GAAG,MAAM,EAAE,SAAS,EAAE,CAAA;YACjC,CAAC;YAAC,MAAM,CAAC;gBACP,yDAAyD;gBACzD,OAAO,MAAM,CAAA;YACf,CAAC;QACH,CAAC,CAAC,CAAC,CAAA;QAEH,OAAO;YACL,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YACzC,QAAQ,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SAChC,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAA;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { ToolContext, ToolResult } from "./util.js";
2
+ export interface SpecChangeNewArgs {
3
+ name: string;
4
+ schema?: string;
5
+ }
6
+ export declare function specChangeNew(args: SpecChangeNewArgs, ctx: ToolContext): Promise<ToolResult>;
7
+ //# sourceMappingURL=spec-change-new.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-new.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-new.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAMxD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAED,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2ClG"}
@@ -0,0 +1,47 @@
1
+ import * as fs from "fs/promises";
2
+ import { loadSchema } from "./util.js";
3
+ import * as Registry from "../engine/registry.js";
4
+ import { readProjectConfig } from "../engine/config.js";
5
+ export async function specChangeNew(args, ctx) {
6
+ try {
7
+ let configSchema;
8
+ try {
9
+ const config = await readProjectConfig(ctx.projectRoot);
10
+ configSchema = config.schema;
11
+ }
12
+ catch {
13
+ // config.yaml missing or malformed — use defaults
14
+ }
15
+ const schemaName = args.schema || configSchema || "spec-driven";
16
+ const schema = await loadSchema(ctx.pluginDir, schemaName);
17
+ const changeDir = `${ctx.projectRoot}/spec/changes/${args.name}`;
18
+ await fs.mkdir(changeDir, { recursive: true });
19
+ await fs.mkdir(`${changeDir}/specs`, { recursive: true });
20
+ await fs.mkdir(`${changeDir}/.verify`, { recursive: true });
21
+ const meta = {
22
+ id: args.name,
23
+ schema: schemaName,
24
+ created: new Date().toISOString(),
25
+ status: "active",
26
+ progress: { total_tasks: 0, completed_tasks: 0, percentage: 0 }
27
+ };
28
+ await fs.writeFile(`${changeDir}/meta.yaml`, JSON.stringify(meta, null, 2));
29
+ const changeInfo = {
30
+ name: args.name,
31
+ schema: schemaName,
32
+ status: "active",
33
+ created: new Date().toISOString(),
34
+ progress: 0,
35
+ artifacts: {}
36
+ };
37
+ await Registry.registerChange(ctx.projectRoot, changeInfo);
38
+ return {
39
+ output: `Created change: ${args.name}\nSchema: ${schemaName}\nPath: ${changeDir}`,
40
+ metadata: { changeName: args.name, changeRoot: changeDir, schema: schemaName }
41
+ };
42
+ }
43
+ catch (error) {
44
+ return { output: `Error: ${error.message}`, metadata: { error: true } };
45
+ }
46
+ }
47
+ //# sourceMappingURL=spec-change-new.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-new.js","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-new.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,aAAa,CAAA;AAEjC,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,KAAK,QAAQ,MAAM,uBAAuB,CAAA;AAEjD,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAA;AAOvD,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,IAAuB,EAAE,GAAgB;IAC3E,IAAI,CAAC;QACH,IAAI,YAAgC,CAAA;QACpC,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,iBAAiB,CAAC,GAAG,CAAC,WAAW,CAAC,CAAA;YACvD,YAAY,GAAG,MAAM,CAAC,MAAM,CAAA;QAC9B,CAAC;QAAC,MAAM,CAAC;YACP,kDAAkD;QACpD,CAAC;QACD,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,IAAI,YAAY,IAAI,aAAa,CAAA;QAC/D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAA;QAC1D,MAAM,SAAS,GAAG,GAAG,GAAG,CAAC,WAAW,iBAAiB,IAAI,CAAC,IAAI,EAAE,CAAA;QAEhE,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,QAAQ,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QACzD,MAAM,EAAE,CAAC,KAAK,CAAC,GAAG,SAAS,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;QAE3D,MAAM,IAAI,GAAS;YACjB,EAAE,EAAE,IAAI,CAAC,IAAI;YACb,MAAM,EAAE,UAAU;YAClB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjC,MAAM,EAAE,QAAQ;YAChB,QAAQ,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,eAAe,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE;SAChE,CAAA;QACD,MAAM,EAAE,CAAC,SAAS,CAAC,GAAG,SAAS,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAA;QAE3E,MAAM,UAAU,GAAe;YAC7B,IAAI,EAAE,IAAI,CAAC,IAAI;YACf,MAAM,EAAE,UAAU;YAClB,MAAM,EAAE,QAAQ;YAChB,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACjC,QAAQ,EAAE,CAAC;YACX,SAAS,EAAE,EAAE;SACd,CAAA;QACD,MAAM,QAAQ,CAAC,cAAc,CAAC,GAAG,CAAC,WAAW,EAAE,UAAU,CAAC,CAAA;QAE1D,OAAO;YACL,MAAM,EAAE,mBAAmB,IAAI,CAAC,IAAI,aAAa,UAAU,WAAW,SAAS,EAAE;YACjF,QAAQ,EAAE,EAAE,UAAU,EAAE,IAAI,CAAC,IAAI,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,EAAE,UAAU,EAAE;SAC/E,CAAA;IACH,CAAC;IAAC,OAAO,KAAU,EAAE,CAAC;QACpB,OAAO,EAAE,MAAM,EAAE,UAAU,KAAK,CAAC,OAAO,EAAE,EAAE,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,EAAE,CAAA;IACzE,CAAC;AACH,CAAC"}
@@ -0,0 +1,6 @@
1
+ import type { ToolContext, ToolResult } from "./util.js";
2
+ export interface SpecChangeStatusArgs {
3
+ changeName: string;
4
+ }
5
+ export declare function specChangeStatus(args: SpecChangeStatusArgs, ctx: ToolContext): Promise<ToolResult>;
6
+ //# sourceMappingURL=spec-change-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"spec-change-status.d.ts","sourceRoot":"","sources":["../../../src/plugin/tools/spec-change-status.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AAMxD,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAA;CACnB;AAED,wBAAsB,gBAAgB,CAAC,IAAI,EAAE,oBAAoB,EAAE,GAAG,EAAE,WAAW,GAAG,OAAO,CAAC,UAAU,CAAC,CA2CxG"}