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.
- package/README.md +229 -0
- package/config/default-opencode.json +21 -0
- package/dist/init.d.ts +3 -0
- package/dist/init.d.ts.map +1 -0
- package/dist/init.js +406 -0
- package/dist/init.js.map +1 -0
- package/dist/plugin/engine/artifact-graph.d.ts +38 -0
- package/dist/plugin/engine/artifact-graph.d.ts.map +1 -0
- package/dist/plugin/engine/artifact-graph.js +137 -0
- package/dist/plugin/engine/artifact-graph.js.map +1 -0
- package/dist/plugin/engine/config.d.ts +21 -0
- package/dist/plugin/engine/config.d.ts.map +1 -0
- package/dist/plugin/engine/config.js +146 -0
- package/dist/plugin/engine/config.js.map +1 -0
- package/dist/plugin/engine/delta-apply.d.ts +23 -0
- package/dist/plugin/engine/delta-apply.d.ts.map +1 -0
- package/dist/plugin/engine/delta-apply.js +153 -0
- package/dist/plugin/engine/delta-apply.js.map +1 -0
- package/dist/plugin/engine/git.d.ts +32 -0
- package/dist/plugin/engine/git.d.ts.map +1 -0
- package/dist/plugin/engine/git.js +61 -0
- package/dist/plugin/engine/git.js.map +1 -0
- package/dist/plugin/engine/integrity.d.ts +45 -0
- package/dist/plugin/engine/integrity.d.ts.map +1 -0
- package/dist/plugin/engine/integrity.js +98 -0
- package/dist/plugin/engine/integrity.js.map +1 -0
- package/dist/plugin/engine/registry.d.ts +39 -0
- package/dist/plugin/engine/registry.d.ts.map +1 -0
- package/dist/plugin/engine/registry.js +191 -0
- package/dist/plugin/engine/registry.js.map +1 -0
- package/dist/plugin/engine/state.d.ts +31 -0
- package/dist/plugin/engine/state.d.ts.map +1 -0
- package/dist/plugin/engine/state.js +116 -0
- package/dist/plugin/engine/state.js.map +1 -0
- package/dist/plugin/engine/task-tracker.d.ts +66 -0
- package/dist/plugin/engine/task-tracker.d.ts.map +1 -0
- package/dist/plugin/engine/task-tracker.js +124 -0
- package/dist/plugin/engine/task-tracker.js.map +1 -0
- package/dist/plugin/engine/types.d.ts +349 -0
- package/dist/plugin/engine/types.d.ts.map +1 -0
- package/dist/plugin/engine/types.js +3 -0
- package/dist/plugin/engine/types.js.map +1 -0
- package/dist/plugin/engine/validator.d.ts +52 -0
- package/dist/plugin/engine/validator.d.ts.map +1 -0
- package/dist/plugin/engine/validator.js +457 -0
- package/dist/plugin/engine/validator.js.map +1 -0
- package/dist/plugin/engine/verifier.d.ts +61 -0
- package/dist/plugin/engine/verifier.d.ts.map +1 -0
- package/dist/plugin/engine/verifier.js +441 -0
- package/dist/plugin/engine/verifier.js.map +1 -0
- package/dist/plugin/hooks/context-injection.d.ts +11 -0
- package/dist/plugin/hooks/context-injection.d.ts.map +1 -0
- package/dist/plugin/hooks/context-injection.js +88 -0
- package/dist/plugin/hooks/context-injection.js.map +1 -0
- package/dist/plugin/hooks/event-handlers.d.ts +9 -0
- package/dist/plugin/hooks/event-handlers.d.ts.map +1 -0
- package/dist/plugin/hooks/event-handlers.js +10 -0
- package/dist/plugin/hooks/event-handlers.js.map +1 -0
- package/dist/plugin/hooks/workflow-gate.d.ts +24 -0
- package/dist/plugin/hooks/workflow-gate.d.ts.map +1 -0
- package/dist/plugin/hooks/workflow-gate.js +78 -0
- package/dist/plugin/hooks/workflow-gate.js.map +1 -0
- package/dist/plugin/index.d.ts +423 -0
- package/dist/plugin/index.d.ts.map +1 -0
- package/dist/plugin/index.js +253 -0
- package/dist/plugin/index.js.map +1 -0
- package/dist/plugin/tools/spec-artifact-instr.d.ts +7 -0
- package/dist/plugin/tools/spec-artifact-instr.d.ts.map +1 -0
- package/dist/plugin/tools/spec-artifact-instr.js +73 -0
- package/dist/plugin/tools/spec-artifact-instr.js.map +1 -0
- package/dist/plugin/tools/spec-change-archive.d.ts +6 -0
- package/dist/plugin/tools/spec-change-archive.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-archive.js +62 -0
- package/dist/plugin/tools/spec-change-archive.js.map +1 -0
- package/dist/plugin/tools/spec-change-list.d.ts +3 -0
- package/dist/plugin/tools/spec-change-list.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-list.js +38 -0
- package/dist/plugin/tools/spec-change-list.js.map +1 -0
- package/dist/plugin/tools/spec-change-new.d.ts +7 -0
- package/dist/plugin/tools/spec-change-new.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-new.js +47 -0
- package/dist/plugin/tools/spec-change-new.js.map +1 -0
- package/dist/plugin/tools/spec-change-status.d.ts +6 -0
- package/dist/plugin/tools/spec-change-status.d.ts.map +1 -0
- package/dist/plugin/tools/spec-change-status.js +43 -0
- package/dist/plugin/tools/spec-change-status.js.map +1 -0
- package/dist/plugin/tools/spec-design-critique.d.ts +20 -0
- package/dist/plugin/tools/spec-design-critique.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-critique.js +412 -0
- package/dist/plugin/tools/spec-design-critique.js.map +1 -0
- package/dist/plugin/tools/spec-design-hifi.d.ts +119 -0
- package/dist/plugin/tools/spec-design-hifi.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-hifi.js +653 -0
- package/dist/plugin/tools/spec-design-hifi.js.map +1 -0
- package/dist/plugin/tools/spec-design-wireframe.d.ts +91 -0
- package/dist/plugin/tools/spec-design-wireframe.d.ts.map +1 -0
- package/dist/plugin/tools/spec-design-wireframe.js +357 -0
- package/dist/plugin/tools/spec-design-wireframe.js.map +1 -0
- package/dist/plugin/tools/spec-init.d.ts +9 -0
- package/dist/plugin/tools/spec-init.d.ts.map +1 -0
- package/dist/plugin/tools/spec-init.js +58 -0
- package/dist/plugin/tools/spec-init.js.map +1 -0
- package/dist/plugin/tools/spec-integrity-check.d.ts +6 -0
- package/dist/plugin/tools/spec-integrity-check.d.ts.map +1 -0
- package/dist/plugin/tools/spec-integrity-check.js +19 -0
- package/dist/plugin/tools/spec-integrity-check.js.map +1 -0
- package/dist/plugin/tools/spec-registry-update.d.ts +3 -0
- package/dist/plugin/tools/spec-registry-update.d.ts.map +1 -0
- package/dist/plugin/tools/spec-registry-update.js +34 -0
- package/dist/plugin/tools/spec-registry-update.js.map +1 -0
- package/dist/plugin/tools/spec-schema-list.d.ts +3 -0
- package/dist/plugin/tools/spec-schema-list.d.ts.map +1 -0
- package/dist/plugin/tools/spec-schema-list.js +28 -0
- package/dist/plugin/tools/spec-schema-list.js.map +1 -0
- package/dist/plugin/tools/spec-specs-apply.d.ts +7 -0
- package/dist/plugin/tools/spec-specs-apply.d.ts.map +1 -0
- package/dist/plugin/tools/spec-specs-apply.js +49 -0
- package/dist/plugin/tools/spec-specs-apply.js.map +1 -0
- package/dist/plugin/tools/spec-task-progress.d.ts +8 -0
- package/dist/plugin/tools/spec-task-progress.d.ts.map +1 -0
- package/dist/plugin/tools/spec-task-progress.js +96 -0
- package/dist/plugin/tools/spec-task-progress.js.map +1 -0
- package/dist/plugin/tools/spec-validate.d.ts +21 -0
- package/dist/plugin/tools/spec-validate.d.ts.map +1 -0
- package/dist/plugin/tools/spec-validate.js +182 -0
- package/dist/plugin/tools/spec-validate.js.map +1 -0
- package/dist/plugin/tools/spec-verify.d.ts +7 -0
- package/dist/plugin/tools/spec-verify.d.ts.map +1 -0
- package/dist/plugin/tools/spec-verify.js +50 -0
- package/dist/plugin/tools/spec-verify.js.map +1 -0
- package/dist/plugin/tools/util.d.ts +25 -0
- package/dist/plugin/tools/util.d.ts.map +1 -0
- package/dist/plugin/tools/util.js +33 -0
- package/dist/plugin/tools/util.js.map +1 -0
- package/package.json +61 -0
- package/src/agents/orchestrator.md +158 -0
- package/src/agents/spec-apply.md +114 -0
- package/src/agents/spec-archive.md +103 -0
- package/src/agents/spec-propose.md +120 -0
- package/src/agents/spec-verify.md +103 -0
- package/src/commands/spec-init.md +6 -0
- package/src/commands/spec-onboard.md +6 -0
- package/src/commands/spec-status.md +6 -0
- package/src/commands/spec-sync.md +6 -0
- package/src/schemas/hybrid.yaml +144 -0
- package/src/schemas/spec-driven.yaml +155 -0
- package/src/schemas/tdd.yaml +203 -0
- package/src/skills/playwright-cli/SKILL.md +388 -0
- package/src/skills/playwright-cli/references/element-attributes.md +23 -0
- package/src/skills/playwright-cli/references/playwright-tests.md +39 -0
- package/src/skills/playwright-cli/references/request-mocking.md +87 -0
- package/src/skills/playwright-cli/references/running-code.md +241 -0
- package/src/skills/playwright-cli/references/session-management.md +225 -0
- package/src/skills/playwright-cli/references/spec-driven-testing.md +305 -0
- package/src/skills/playwright-cli/references/storage-state.md +275 -0
- package/src/skills/playwright-cli/references/test-generation.md +134 -0
- package/src/skills/playwright-cli/references/tracing.md +139 -0
- package/src/skills/playwright-cli/references/video-recording.md +143 -0
- package/src/skills/spec-init/SKILL.md +61 -0
- package/src/skills/spec-onboard/SKILL.md +178 -0
- package/src/skills/spec-status/SKILL.md +72 -0
- package/src/skills/spec-sync/SKILL.md +63 -0
- package/src/templates/config.yaml +14 -0
- package/src/templates/design-hifi.yaml +580 -0
- package/src/templates/design-tech.yaml +42 -0
- package/src/templates/design-wireframe.yaml +114 -0
- package/src/templates/proposal.yaml +43 -0
- package/src/templates/registry.yaml +3 -0
- package/src/templates/spec.yaml +56 -0
- 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 @@
|
|
|
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"}
|