@specship/specship 0.11.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/.claude-plugin/plugin.json +6 -0
- package/LICENSE +21 -0
- package/README.md +583 -0
- package/agents/specship-explorer.md +29 -0
- package/commands/ss-behaviour.md +116 -0
- package/commands/ss-check.md +43 -0
- package/commands/ss-design-implement.md +84 -0
- package/commands/ss-design-loop.md +125 -0
- package/commands/ss-explore.md +43 -0
- package/commands/ss-spec.md +118 -0
- package/dist/activation/starter-prompt.d.ts +57 -0
- package/dist/activation/starter-prompt.d.ts.map +1 -0
- package/dist/activation/starter-prompt.js +164 -0
- package/dist/activation/starter-prompt.js.map +1 -0
- package/dist/analytics/specship-impact.d.ts +72 -0
- package/dist/analytics/specship-impact.d.ts.map +1 -0
- package/dist/analytics/specship-impact.js +216 -0
- package/dist/analytics/specship-impact.js.map +1 -0
- package/dist/behaviour/behaviour-surface.d.ts +59 -0
- package/dist/behaviour/behaviour-surface.d.ts.map +1 -0
- package/dist/behaviour/behaviour-surface.js +112 -0
- package/dist/behaviour/behaviour-surface.js.map +1 -0
- package/dist/bin/node-version-check.d.ts +37 -0
- package/dist/bin/node-version-check.d.ts.map +1 -0
- package/dist/bin/node-version-check.js +79 -0
- package/dist/bin/node-version-check.js.map +1 -0
- package/dist/bin/specship.d.ts +25 -0
- package/dist/bin/specship.d.ts.map +1 -0
- package/dist/bin/specship.js +2823 -0
- package/dist/bin/specship.js.map +1 -0
- package/dist/bin/uninstall.d.ts +13 -0
- package/dist/bin/uninstall.d.ts.map +1 -0
- package/dist/bin/uninstall.js +35 -0
- package/dist/bin/uninstall.js.map +1 -0
- package/dist/context/formatter.d.ts +30 -0
- package/dist/context/formatter.d.ts.map +1 -0
- package/dist/context/formatter.js +263 -0
- package/dist/context/formatter.js.map +1 -0
- package/dist/context/index.d.ts +119 -0
- package/dist/context/index.d.ts.map +1 -0
- package/dist/context/index.js +1289 -0
- package/dist/context/index.js.map +1 -0
- package/dist/context/markers.d.ts +19 -0
- package/dist/context/markers.d.ts.map +1 -0
- package/dist/context/markers.js +22 -0
- package/dist/context/markers.js.map +1 -0
- package/dist/db/index.d.ts +103 -0
- package/dist/db/index.d.ts.map +1 -0
- package/dist/db/index.js +279 -0
- package/dist/db/index.js.map +1 -0
- package/dist/db/migrations.d.ts +44 -0
- package/dist/db/migrations.d.ts.map +1 -0
- package/dist/db/migrations.js +503 -0
- package/dist/db/migrations.js.map +1 -0
- package/dist/db/queries.d.ts +357 -0
- package/dist/db/queries.d.ts.map +1 -0
- package/dist/db/queries.js +1504 -0
- package/dist/db/queries.js.map +1 -0
- package/dist/db/schema.sql +451 -0
- package/dist/db/spec-queries.d.ts +130 -0
- package/dist/db/spec-queries.d.ts.map +1 -0
- package/dist/db/spec-queries.js +738 -0
- package/dist/db/spec-queries.js.map +1 -0
- package/dist/db/sqlite-adapter.d.ts +65 -0
- package/dist/db/sqlite-adapter.d.ts.map +1 -0
- package/dist/db/sqlite-adapter.js +214 -0
- package/dist/db/sqlite-adapter.js.map +1 -0
- package/dist/designer/artifact-store.js +54 -0
- package/dist/designer/browser.js +141 -0
- package/dist/designer/cdp-ensure.js +60 -0
- package/dist/designer/cdp-env.js +18 -0
- package/dist/designer/cdp-trace.js +599 -0
- package/dist/designer/cross-platform.js +74 -0
- package/dist/designer/designer-controller.js +1413 -0
- package/dist/designer/file-panel.js +39 -0
- package/dist/designer/interstitials.js +97 -0
- package/dist/designer/oopif-reader.js +176 -0
- package/dist/designer/package-meta.js +18 -0
- package/dist/designer/preview-host.js +50 -0
- package/dist/designer/repo-root.js +31 -0
- package/dist/designer/run-state.js +353 -0
- package/dist/designer/session-store.js +59 -0
- package/dist/designer/ui-anchors.js +651 -0
- package/dist/directory.d.ts +67 -0
- package/dist/directory.d.ts.map +1 -0
- package/dist/directory.js +267 -0
- package/dist/directory.js.map +1 -0
- package/dist/enforce/enforce.d.ts +70 -0
- package/dist/enforce/enforce.d.ts.map +1 -0
- package/dist/enforce/enforce.js +125 -0
- package/dist/enforce/enforce.js.map +1 -0
- package/dist/errors.d.ts +136 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +219 -0
- package/dist/errors.js.map +1 -0
- package/dist/extraction/dfm-extractor.d.ts +31 -0
- package/dist/extraction/dfm-extractor.d.ts.map +1 -0
- package/dist/extraction/dfm-extractor.js +151 -0
- package/dist/extraction/dfm-extractor.js.map +1 -0
- package/dist/extraction/generated-detection.d.ts +30 -0
- package/dist/extraction/generated-detection.d.ts.map +1 -0
- package/dist/extraction/generated-detection.js +80 -0
- package/dist/extraction/generated-detection.js.map +1 -0
- package/dist/extraction/grammars.d.ts +100 -0
- package/dist/extraction/grammars.d.ts.map +1 -0
- package/dist/extraction/grammars.js +426 -0
- package/dist/extraction/grammars.js.map +1 -0
- package/dist/extraction/index.d.ts +138 -0
- package/dist/extraction/index.d.ts.map +1 -0
- package/dist/extraction/index.js +1394 -0
- package/dist/extraction/index.js.map +1 -0
- package/dist/extraction/languages/c-cpp.d.ts +4 -0
- package/dist/extraction/languages/c-cpp.d.ts.map +1 -0
- package/dist/extraction/languages/c-cpp.js +171 -0
- package/dist/extraction/languages/c-cpp.js.map +1 -0
- package/dist/extraction/languages/csharp.d.ts +3 -0
- package/dist/extraction/languages/csharp.d.ts.map +1 -0
- package/dist/extraction/languages/csharp.js +73 -0
- package/dist/extraction/languages/csharp.js.map +1 -0
- package/dist/extraction/languages/dart.d.ts +3 -0
- package/dist/extraction/languages/dart.d.ts.map +1 -0
- package/dist/extraction/languages/dart.js +192 -0
- package/dist/extraction/languages/dart.js.map +1 -0
- package/dist/extraction/languages/go.d.ts +3 -0
- package/dist/extraction/languages/go.d.ts.map +1 -0
- package/dist/extraction/languages/go.js +74 -0
- package/dist/extraction/languages/go.js.map +1 -0
- package/dist/extraction/languages/index.d.ts +10 -0
- package/dist/extraction/languages/index.d.ts.map +1 -0
- package/dist/extraction/languages/index.js +51 -0
- package/dist/extraction/languages/index.js.map +1 -0
- package/dist/extraction/languages/java.d.ts +3 -0
- package/dist/extraction/languages/java.d.ts.map +1 -0
- package/dist/extraction/languages/java.js +70 -0
- package/dist/extraction/languages/java.js.map +1 -0
- package/dist/extraction/languages/javascript.d.ts +3 -0
- package/dist/extraction/languages/javascript.d.ts.map +1 -0
- package/dist/extraction/languages/javascript.js +90 -0
- package/dist/extraction/languages/javascript.js.map +1 -0
- package/dist/extraction/languages/kotlin.d.ts +3 -0
- package/dist/extraction/languages/kotlin.d.ts.map +1 -0
- package/dist/extraction/languages/kotlin.js +259 -0
- package/dist/extraction/languages/kotlin.js.map +1 -0
- package/dist/extraction/languages/lua.d.ts +3 -0
- package/dist/extraction/languages/lua.d.ts.map +1 -0
- package/dist/extraction/languages/lua.js +150 -0
- package/dist/extraction/languages/lua.js.map +1 -0
- package/dist/extraction/languages/luau.d.ts +3 -0
- package/dist/extraction/languages/luau.d.ts.map +1 -0
- package/dist/extraction/languages/luau.js +37 -0
- package/dist/extraction/languages/luau.js.map +1 -0
- package/dist/extraction/languages/objc.d.ts +3 -0
- package/dist/extraction/languages/objc.d.ts.map +1 -0
- package/dist/extraction/languages/objc.js +133 -0
- package/dist/extraction/languages/objc.js.map +1 -0
- package/dist/extraction/languages/pascal.d.ts +3 -0
- package/dist/extraction/languages/pascal.d.ts.map +1 -0
- package/dist/extraction/languages/pascal.js +66 -0
- package/dist/extraction/languages/pascal.js.map +1 -0
- package/dist/extraction/languages/php.d.ts +3 -0
- package/dist/extraction/languages/php.d.ts.map +1 -0
- package/dist/extraction/languages/php.js +107 -0
- package/dist/extraction/languages/php.js.map +1 -0
- package/dist/extraction/languages/python.d.ts +3 -0
- package/dist/extraction/languages/python.d.ts.map +1 -0
- package/dist/extraction/languages/python.js +56 -0
- package/dist/extraction/languages/python.js.map +1 -0
- package/dist/extraction/languages/ruby.d.ts +3 -0
- package/dist/extraction/languages/ruby.d.ts.map +1 -0
- package/dist/extraction/languages/ruby.js +114 -0
- package/dist/extraction/languages/ruby.js.map +1 -0
- package/dist/extraction/languages/rust.d.ts +3 -0
- package/dist/extraction/languages/rust.d.ts.map +1 -0
- package/dist/extraction/languages/rust.js +109 -0
- package/dist/extraction/languages/rust.js.map +1 -0
- package/dist/extraction/languages/scala.d.ts +3 -0
- package/dist/extraction/languages/scala.d.ts.map +1 -0
- package/dist/extraction/languages/scala.js +139 -0
- package/dist/extraction/languages/scala.js.map +1 -0
- package/dist/extraction/languages/swift.d.ts +3 -0
- package/dist/extraction/languages/swift.d.ts.map +1 -0
- package/dist/extraction/languages/swift.js +91 -0
- package/dist/extraction/languages/swift.js.map +1 -0
- package/dist/extraction/languages/typescript.d.ts +3 -0
- package/dist/extraction/languages/typescript.d.ts.map +1 -0
- package/dist/extraction/languages/typescript.js +129 -0
- package/dist/extraction/languages/typescript.js.map +1 -0
- package/dist/extraction/liquid-extractor.d.ts +52 -0
- package/dist/extraction/liquid-extractor.d.ts.map +1 -0
- package/dist/extraction/liquid-extractor.js +313 -0
- package/dist/extraction/liquid-extractor.js.map +1 -0
- package/dist/extraction/mybatis-extractor.d.ts +48 -0
- package/dist/extraction/mybatis-extractor.d.ts.map +1 -0
- package/dist/extraction/mybatis-extractor.js +198 -0
- package/dist/extraction/mybatis-extractor.js.map +1 -0
- package/dist/extraction/parse-worker.d.ts +8 -0
- package/dist/extraction/parse-worker.d.ts.map +1 -0
- package/dist/extraction/parse-worker.js +94 -0
- package/dist/extraction/parse-worker.js.map +1 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts +114 -0
- package/dist/extraction/specs/markdown-spec-extractor.d.ts.map +1 -0
- package/dist/extraction/specs/markdown-spec-extractor.js +699 -0
- package/dist/extraction/specs/markdown-spec-extractor.js.map +1 -0
- package/dist/extraction/specs/types.d.ts +39 -0
- package/dist/extraction/specs/types.d.ts.map +1 -0
- package/dist/extraction/specs/types.js +8 -0
- package/dist/extraction/specs/types.js.map +1 -0
- package/dist/extraction/svelte-extractor.d.ts +56 -0
- package/dist/extraction/svelte-extractor.d.ts.map +1 -0
- package/dist/extraction/svelte-extractor.js +272 -0
- package/dist/extraction/svelte-extractor.js.map +1 -0
- package/dist/extraction/tree-sitter-helpers.d.ts +28 -0
- package/dist/extraction/tree-sitter-helpers.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-helpers.js +103 -0
- package/dist/extraction/tree-sitter-helpers.js.map +1 -0
- package/dist/extraction/tree-sitter-types.d.ts +193 -0
- package/dist/extraction/tree-sitter-types.d.ts.map +1 -0
- package/dist/extraction/tree-sitter-types.js +10 -0
- package/dist/extraction/tree-sitter-types.js.map +1 -0
- package/dist/extraction/tree-sitter.d.ts +317 -0
- package/dist/extraction/tree-sitter.d.ts.map +1 -0
- package/dist/extraction/tree-sitter.js +3092 -0
- package/dist/extraction/tree-sitter.js.map +1 -0
- package/dist/extraction/vue-extractor.d.ts +51 -0
- package/dist/extraction/vue-extractor.d.ts.map +1 -0
- package/dist/extraction/vue-extractor.js +251 -0
- package/dist/extraction/vue-extractor.js.map +1 -0
- package/dist/extraction/wasm/tree-sitter-lua.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-luau.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-pascal.wasm +0 -0
- package/dist/extraction/wasm/tree-sitter-scala.wasm +0 -0
- package/dist/extraction/wasm-runtime-flags.d.ts +38 -0
- package/dist/extraction/wasm-runtime-flags.d.ts.map +1 -0
- package/dist/extraction/wasm-runtime-flags.js +106 -0
- package/dist/extraction/wasm-runtime-flags.js.map +1 -0
- package/dist/fitness/fitness.d.ts +75 -0
- package/dist/fitness/fitness.d.ts.map +1 -0
- package/dist/fitness/fitness.js +204 -0
- package/dist/fitness/fitness.js.map +1 -0
- package/dist/graph/index.d.ts +8 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +13 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/maintainability.d.ts +115 -0
- package/dist/graph/maintainability.d.ts.map +1 -0
- package/dist/graph/maintainability.js +299 -0
- package/dist/graph/maintainability.js.map +1 -0
- package/dist/graph/queries.d.ts +106 -0
- package/dist/graph/queries.d.ts.map +1 -0
- package/dist/graph/queries.js +366 -0
- package/dist/graph/queries.js.map +1 -0
- package/dist/graph/traversal.d.ts +127 -0
- package/dist/graph/traversal.d.ts.map +1 -0
- package/dist/graph/traversal.js +531 -0
- package/dist/graph/traversal.js.map +1 -0
- package/dist/health/smoke-check.d.ts +85 -0
- package/dist/health/smoke-check.d.ts.map +1 -0
- package/dist/health/smoke-check.js +246 -0
- package/dist/health/smoke-check.js.map +1 -0
- package/dist/index.d.ts +674 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1473 -0
- package/dist/index.js.map +1 -0
- package/dist/installer/config-writer.d.ts +28 -0
- package/dist/installer/config-writer.d.ts.map +1 -0
- package/dist/installer/config-writer.js +91 -0
- package/dist/installer/config-writer.js.map +1 -0
- package/dist/installer/index.d.ts +100 -0
- package/dist/installer/index.d.ts.map +1 -0
- package/dist/installer/index.js +442 -0
- package/dist/installer/index.js.map +1 -0
- package/dist/installer/init-offer.d.ts +31 -0
- package/dist/installer/init-offer.d.ts.map +1 -0
- package/dist/installer/init-offer.js +30 -0
- package/dist/installer/init-offer.js.map +1 -0
- package/dist/installer/instructions-template.d.ts +36 -0
- package/dist/installer/instructions-template.d.ts.map +1 -0
- package/dist/installer/instructions-template.js +57 -0
- package/dist/installer/instructions-template.js.map +1 -0
- package/dist/installer/targets/claude.d.ts +146 -0
- package/dist/installer/targets/claude.d.ts.map +1 -0
- package/dist/installer/targets/claude.js +864 -0
- package/dist/installer/targets/claude.js.map +1 -0
- package/dist/installer/targets/registry.d.ts +19 -0
- package/dist/installer/targets/registry.d.ts.map +1 -0
- package/dist/installer/targets/registry.js +31 -0
- package/dist/installer/targets/registry.js.map +1 -0
- package/dist/installer/targets/shared.d.ts +76 -0
- package/dist/installer/targets/shared.d.ts.map +1 -0
- package/dist/installer/targets/shared.js +260 -0
- package/dist/installer/targets/shared.js.map +1 -0
- package/dist/installer/targets/types.d.ts +95 -0
- package/dist/installer/targets/types.d.ts.map +1 -0
- package/dist/installer/targets/types.js +12 -0
- package/dist/installer/targets/types.js.map +1 -0
- package/dist/isolation/worktree.d.ts +65 -0
- package/dist/isolation/worktree.d.ts.map +1 -0
- package/dist/isolation/worktree.js +231 -0
- package/dist/isolation/worktree.js.map +1 -0
- package/dist/mcp/daemon-paths.d.ts +46 -0
- package/dist/mcp/daemon-paths.d.ts.map +1 -0
- package/dist/mcp/daemon-paths.js +125 -0
- package/dist/mcp/daemon-paths.js.map +1 -0
- package/dist/mcp/daemon.d.ts +161 -0
- package/dist/mcp/daemon.d.ts.map +1 -0
- package/dist/mcp/daemon.js +403 -0
- package/dist/mcp/daemon.js.map +1 -0
- package/dist/mcp/designer-tools.d.ts +33 -0
- package/dist/mcp/designer-tools.d.ts.map +1 -0
- package/dist/mcp/designer-tools.js +313 -0
- package/dist/mcp/designer-tools.js.map +1 -0
- package/dist/mcp/engine.d.ts +105 -0
- package/dist/mcp/engine.d.ts.map +1 -0
- package/dist/mcp/engine.js +270 -0
- package/dist/mcp/engine.js.map +1 -0
- package/dist/mcp/fitness-tool.d.ts +12 -0
- package/dist/mcp/fitness-tool.d.ts.map +1 -0
- package/dist/mcp/fitness-tool.js +46 -0
- package/dist/mcp/fitness-tool.js.map +1 -0
- package/dist/mcp/index.d.ts +112 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +477 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/maintainability-tool.d.ts +13 -0
- package/dist/mcp/maintainability-tool.d.ts.map +1 -0
- package/dist/mcp/maintainability-tool.js +64 -0
- package/dist/mcp/maintainability-tool.js.map +1 -0
- package/dist/mcp/proxy.d.ts +81 -0
- package/dist/mcp/proxy.d.ts.map +1 -0
- package/dist/mcp/proxy.js +510 -0
- package/dist/mcp/proxy.js.map +1 -0
- package/dist/mcp/server-instructions.d.ts +18 -0
- package/dist/mcp/server-instructions.d.ts.map +1 -0
- package/dist/mcp/server-instructions.js +79 -0
- package/dist/mcp/server-instructions.js.map +1 -0
- package/dist/mcp/session.d.ts +77 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +294 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/spec-tools.d.ts +39 -0
- package/dist/mcp/spec-tools.d.ts.map +1 -0
- package/dist/mcp/spec-tools.js +534 -0
- package/dist/mcp/spec-tools.js.map +1 -0
- package/dist/mcp/tools.d.ts +417 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +3179 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/mcp/transport.d.ts +188 -0
- package/dist/mcp/transport.d.ts.map +1 -0
- package/dist/mcp/transport.js +343 -0
- package/dist/mcp/transport.js.map +1 -0
- package/dist/mcp/version.d.ts +19 -0
- package/dist/mcp/version.d.ts.map +1 -0
- package/dist/mcp/version.js +71 -0
- package/dist/mcp/version.js.map +1 -0
- package/dist/reflect/apply.d.ts +31 -0
- package/dist/reflect/apply.d.ts.map +1 -0
- package/dist/reflect/apply.js +286 -0
- package/dist/reflect/apply.js.map +1 -0
- package/dist/reflect/hash.d.ts +20 -0
- package/dist/reflect/hash.d.ts.map +1 -0
- package/dist/reflect/hash.js +36 -0
- package/dist/reflect/hash.js.map +1 -0
- package/dist/reflect/index.d.ts +16 -0
- package/dist/reflect/index.d.ts.map +1 -0
- package/dist/reflect/index.js +43 -0
- package/dist/reflect/index.js.map +1 -0
- package/dist/reflect/miner.d.ts +21 -0
- package/dist/reflect/miner.d.ts.map +1 -0
- package/dist/reflect/miner.js +463 -0
- package/dist/reflect/miner.js.map +1 -0
- package/dist/reflect/store.d.ts +31 -0
- package/dist/reflect/store.d.ts.map +1 -0
- package/dist/reflect/store.js +101 -0
- package/dist/reflect/store.js.map +1 -0
- package/dist/reflect/sweep.d.ts +26 -0
- package/dist/reflect/sweep.d.ts.map +1 -0
- package/dist/reflect/sweep.js +42 -0
- package/dist/reflect/sweep.js.map +1 -0
- package/dist/reflect/targets.d.ts +52 -0
- package/dist/reflect/targets.d.ts.map +1 -0
- package/dist/reflect/targets.js +192 -0
- package/dist/reflect/targets.js.map +1 -0
- package/dist/reflect/types.d.ts +96 -0
- package/dist/reflect/types.d.ts.map +1 -0
- package/dist/reflect/types.js +13 -0
- package/dist/reflect/types.js.map +1 -0
- package/dist/resolution/brief-link-resolver.d.ts +114 -0
- package/dist/resolution/brief-link-resolver.d.ts.map +1 -0
- package/dist/resolution/brief-link-resolver.js +261 -0
- package/dist/resolution/brief-link-resolver.js.map +1 -0
- package/dist/resolution/callback-synthesizer.d.ts +10 -0
- package/dist/resolution/callback-synthesizer.d.ts.map +1 -0
- package/dist/resolution/callback-synthesizer.js +1300 -0
- package/dist/resolution/callback-synthesizer.js.map +1 -0
- package/dist/resolution/domain-gap-seed.d.ts +60 -0
- package/dist/resolution/domain-gap-seed.d.ts.map +1 -0
- package/dist/resolution/domain-gap-seed.js +87 -0
- package/dist/resolution/domain-gap-seed.js.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts +18 -0
- package/dist/resolution/frameworks/cargo-workspace.d.ts.map +1 -0
- package/dist/resolution/frameworks/cargo-workspace.js +225 -0
- package/dist/resolution/frameworks/cargo-workspace.js.map +1 -0
- package/dist/resolution/frameworks/csharp.d.ts +8 -0
- package/dist/resolution/frameworks/csharp.d.ts.map +1 -0
- package/dist/resolution/frameworks/csharp.js +241 -0
- package/dist/resolution/frameworks/csharp.js.map +1 -0
- package/dist/resolution/frameworks/drupal.d.ts +51 -0
- package/dist/resolution/frameworks/drupal.d.ts.map +1 -0
- package/dist/resolution/frameworks/drupal.js +367 -0
- package/dist/resolution/frameworks/drupal.js.map +1 -0
- package/dist/resolution/frameworks/expo-modules.d.ts +3 -0
- package/dist/resolution/frameworks/expo-modules.d.ts.map +1 -0
- package/dist/resolution/frameworks/expo-modules.js +143 -0
- package/dist/resolution/frameworks/expo-modules.js.map +1 -0
- package/dist/resolution/frameworks/express.d.ts +8 -0
- package/dist/resolution/frameworks/express.d.ts.map +1 -0
- package/dist/resolution/frameworks/express.js +308 -0
- package/dist/resolution/frameworks/express.js.map +1 -0
- package/dist/resolution/frameworks/fabric.d.ts +3 -0
- package/dist/resolution/frameworks/fabric.d.ts.map +1 -0
- package/dist/resolution/frameworks/fabric.js +354 -0
- package/dist/resolution/frameworks/fabric.js.map +1 -0
- package/dist/resolution/frameworks/go.d.ts +8 -0
- package/dist/resolution/frameworks/go.d.ts.map +1 -0
- package/dist/resolution/frameworks/go.js +161 -0
- package/dist/resolution/frameworks/go.js.map +1 -0
- package/dist/resolution/frameworks/index.d.ts +48 -0
- package/dist/resolution/frameworks/index.d.ts.map +1 -0
- package/dist/resolution/frameworks/index.js +161 -0
- package/dist/resolution/frameworks/index.js.map +1 -0
- package/dist/resolution/frameworks/java.d.ts +8 -0
- package/dist/resolution/frameworks/java.d.ts.map +1 -0
- package/dist/resolution/frameworks/java.js +504 -0
- package/dist/resolution/frameworks/java.js.map +1 -0
- package/dist/resolution/frameworks/laravel.d.ts +13 -0
- package/dist/resolution/frameworks/laravel.d.ts.map +1 -0
- package/dist/resolution/frameworks/laravel.js +257 -0
- package/dist/resolution/frameworks/laravel.js.map +1 -0
- package/dist/resolution/frameworks/nestjs.d.ts +26 -0
- package/dist/resolution/frameworks/nestjs.d.ts.map +1 -0
- package/dist/resolution/frameworks/nestjs.js +698 -0
- package/dist/resolution/frameworks/nestjs.js.map +1 -0
- package/dist/resolution/frameworks/play.d.ts +19 -0
- package/dist/resolution/frameworks/play.d.ts.map +1 -0
- package/dist/resolution/frameworks/play.js +111 -0
- package/dist/resolution/frameworks/play.js.map +1 -0
- package/dist/resolution/frameworks/python.d.ts +10 -0
- package/dist/resolution/frameworks/python.d.ts.map +1 -0
- package/dist/resolution/frameworks/python.js +396 -0
- package/dist/resolution/frameworks/python.js.map +1 -0
- package/dist/resolution/frameworks/react-native.d.ts +3 -0
- package/dist/resolution/frameworks/react-native.d.ts.map +1 -0
- package/dist/resolution/frameworks/react-native.js +360 -0
- package/dist/resolution/frameworks/react-native.js.map +1 -0
- package/dist/resolution/frameworks/react.d.ts +8 -0
- package/dist/resolution/frameworks/react.d.ts.map +1 -0
- package/dist/resolution/frameworks/react.js +365 -0
- package/dist/resolution/frameworks/react.js.map +1 -0
- package/dist/resolution/frameworks/ruby.d.ts +8 -0
- package/dist/resolution/frameworks/ruby.d.ts.map +1 -0
- package/dist/resolution/frameworks/ruby.js +302 -0
- package/dist/resolution/frameworks/ruby.js.map +1 -0
- package/dist/resolution/frameworks/rust.d.ts +8 -0
- package/dist/resolution/frameworks/rust.d.ts.map +1 -0
- package/dist/resolution/frameworks/rust.js +304 -0
- package/dist/resolution/frameworks/rust.js.map +1 -0
- package/dist/resolution/frameworks/svelte.d.ts +9 -0
- package/dist/resolution/frameworks/svelte.d.ts.map +1 -0
- package/dist/resolution/frameworks/svelte.js +249 -0
- package/dist/resolution/frameworks/svelte.js.map +1 -0
- package/dist/resolution/frameworks/swift-objc.d.ts +37 -0
- package/dist/resolution/frameworks/swift-objc.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift-objc.js +252 -0
- package/dist/resolution/frameworks/swift-objc.js.map +1 -0
- package/dist/resolution/frameworks/swift.d.ts +10 -0
- package/dist/resolution/frameworks/swift.d.ts.map +1 -0
- package/dist/resolution/frameworks/swift.js +400 -0
- package/dist/resolution/frameworks/swift.js.map +1 -0
- package/dist/resolution/frameworks/vue.d.ts +9 -0
- package/dist/resolution/frameworks/vue.d.ts.map +1 -0
- package/dist/resolution/frameworks/vue.js +306 -0
- package/dist/resolution/frameworks/vue.js.map +1 -0
- package/dist/resolution/go-module.d.ts +26 -0
- package/dist/resolution/go-module.d.ts.map +1 -0
- package/dist/resolution/go-module.js +78 -0
- package/dist/resolution/go-module.js.map +1 -0
- package/dist/resolution/import-resolver.d.ts +68 -0
- package/dist/resolution/import-resolver.d.ts.map +1 -0
- package/dist/resolution/import-resolver.js +1275 -0
- package/dist/resolution/import-resolver.js.map +1 -0
- package/dist/resolution/index.d.ts +117 -0
- package/dist/resolution/index.d.ts.map +1 -0
- package/dist/resolution/index.js +895 -0
- package/dist/resolution/index.js.map +1 -0
- package/dist/resolution/lru-cache.d.ts +24 -0
- package/dist/resolution/lru-cache.d.ts.map +1 -0
- package/dist/resolution/lru-cache.js +62 -0
- package/dist/resolution/lru-cache.js.map +1 -0
- package/dist/resolution/name-matcher.d.ts +32 -0
- package/dist/resolution/name-matcher.d.ts.map +1 -0
- package/dist/resolution/name-matcher.js +596 -0
- package/dist/resolution/name-matcher.js.map +1 -0
- package/dist/resolution/path-aliases.d.ts +68 -0
- package/dist/resolution/path-aliases.d.ts.map +1 -0
- package/dist/resolution/path-aliases.js +238 -0
- package/dist/resolution/path-aliases.js.map +1 -0
- package/dist/resolution/spec-link-resolver.d.ts +148 -0
- package/dist/resolution/spec-link-resolver.d.ts.map +1 -0
- package/dist/resolution/spec-link-resolver.js +337 -0
- package/dist/resolution/spec-link-resolver.js.map +1 -0
- package/dist/resolution/strip-comments.d.ts +27 -0
- package/dist/resolution/strip-comments.d.ts.map +1 -0
- package/dist/resolution/strip-comments.js +441 -0
- package/dist/resolution/strip-comments.js.map +1 -0
- package/dist/resolution/swift-objc-bridge.d.ts +134 -0
- package/dist/resolution/swift-objc-bridge.d.ts.map +1 -0
- package/dist/resolution/swift-objc-bridge.js +256 -0
- package/dist/resolution/swift-objc-bridge.js.map +1 -0
- package/dist/resolution/types.d.ts +216 -0
- package/dist/resolution/types.d.ts.map +1 -0
- package/dist/resolution/types.js +8 -0
- package/dist/resolution/types.js.map +1 -0
- package/dist/resolution/workspace-packages.d.ts +48 -0
- package/dist/resolution/workspace-packages.d.ts.map +1 -0
- package/dist/resolution/workspace-packages.js +208 -0
- package/dist/resolution/workspace-packages.js.map +1 -0
- package/dist/search/query-parser.d.ts +57 -0
- package/dist/search/query-parser.d.ts.map +1 -0
- package/dist/search/query-parser.js +177 -0
- package/dist/search/query-parser.js.map +1 -0
- package/dist/search/query-utils.d.ts +71 -0
- package/dist/search/query-utils.d.ts.map +1 -0
- package/dist/search/query-utils.js +380 -0
- package/dist/search/query-utils.js.map +1 -0
- package/dist/server/cli.js +152 -0
- package/dist/server/index.js +12 -0
- package/dist/server/ingest/impact-backfill.js +69 -0
- package/dist/server/ingest/impact-query.js +343 -0
- package/dist/server/ingest/index.js +19 -0
- package/dist/server/ingest/ingestor.js +541 -0
- package/dist/server/ingest/parser.js +104 -0
- package/dist/server/ingest/pricing.js +78 -0
- package/dist/server/ingest/specship-classify.js +153 -0
- package/dist/server/ingest/types.js +9 -0
- package/dist/server/ingest/watcher.js +77 -0
- package/dist/server/package.json +3 -0
- package/dist/server/project-registry.js +101 -0
- package/dist/server/routes/claude.js +907 -0
- package/dist/server/routes/domain.js +0 -0
- package/dist/server/routes/events.js +134 -0
- package/dist/server/routes/graph.js +248 -0
- package/dist/server/routes/maintainability.js +18 -0
- package/dist/server/routes/memory.js +272 -0
- package/dist/server/routes/projects.js +197 -0
- package/dist/server/routes/reflect.js +93 -0
- package/dist/server/routes/spec.js +373 -0
- package/dist/server/routes/status.js +112 -0
- package/dist/server/routes/workflow.js +253 -0
- package/dist/server/server.js +238 -0
- package/dist/server/static-handler.js +87 -0
- package/dist/statusline/active-run.d.ts +16 -0
- package/dist/statusline/active-run.d.ts.map +1 -0
- package/dist/statusline/active-run.js +73 -0
- package/dist/statusline/active-run.js.map +1 -0
- package/dist/statusline/cache.d.ts +21 -0
- package/dist/statusline/cache.d.ts.map +1 -0
- package/dist/statusline/cache.js +34 -0
- package/dist/statusline/cache.js.map +1 -0
- package/dist/statusline/index.d.ts +24 -0
- package/dist/statusline/index.d.ts.map +1 -0
- package/dist/statusline/index.js +128 -0
- package/dist/statusline/index.js.map +1 -0
- package/dist/statusline/paths.d.ts +27 -0
- package/dist/statusline/paths.d.ts.map +1 -0
- package/dist/statusline/paths.js +101 -0
- package/dist/statusline/paths.js.map +1 -0
- package/dist/statusline/render.d.ts +25 -0
- package/dist/statusline/render.d.ts.map +1 -0
- package/dist/statusline/render.js +72 -0
- package/dist/statusline/render.js.map +1 -0
- package/dist/statusline/session-marker.d.ts +30 -0
- package/dist/statusline/session-marker.d.ts.map +1 -0
- package/dist/statusline/session-marker.js +71 -0
- package/dist/statusline/session-marker.js.map +1 -0
- package/dist/statusline/types.d.ts +67 -0
- package/dist/statusline/types.d.ts.map +1 -0
- package/dist/statusline/types.js +16 -0
- package/dist/statusline/types.js.map +1 -0
- package/dist/sync/git-hooks.d.ts +45 -0
- package/dist/sync/git-hooks.d.ts.map +1 -0
- package/dist/sync/git-hooks.js +225 -0
- package/dist/sync/git-hooks.js.map +1 -0
- package/dist/sync/index.d.ts +19 -0
- package/dist/sync/index.d.ts.map +1 -0
- package/dist/sync/index.js +35 -0
- package/dist/sync/index.js.map +1 -0
- package/dist/sync/watch-policy.d.ts +48 -0
- package/dist/sync/watch-policy.d.ts.map +1 -0
- package/dist/sync/watch-policy.js +124 -0
- package/dist/sync/watch-policy.js.map +1 -0
- package/dist/sync/watcher.d.ts +283 -0
- package/dist/sync/watcher.d.ts.map +1 -0
- package/dist/sync/watcher.js +606 -0
- package/dist/sync/watcher.js.map +1 -0
- package/dist/sync/worktree.d.ts +54 -0
- package/dist/sync/worktree.d.ts.map +1 -0
- package/dist/sync/worktree.js +137 -0
- package/dist/sync/worktree.js.map +1 -0
- package/dist/types.d.ts +625 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +118 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/glyphs.d.ts +42 -0
- package/dist/ui/glyphs.d.ts.map +1 -0
- package/dist/ui/glyphs.js +78 -0
- package/dist/ui/glyphs.js.map +1 -0
- package/dist/ui/shimmer-progress.d.ts +11 -0
- package/dist/ui/shimmer-progress.d.ts.map +1 -0
- package/dist/ui/shimmer-progress.js +90 -0
- package/dist/ui/shimmer-progress.js.map +1 -0
- package/dist/ui/shimmer-worker.d.ts +2 -0
- package/dist/ui/shimmer-worker.d.ts.map +1 -0
- package/dist/ui/shimmer-worker.js +118 -0
- package/dist/ui/shimmer-worker.js.map +1 -0
- package/dist/ui/types.d.ts +17 -0
- package/dist/ui/types.d.ts.map +1 -0
- package/dist/ui/types.js +3 -0
- package/dist/ui/types.js.map +1 -0
- package/dist/utils.d.ts +205 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/utils.js +549 -0
- package/dist/utils.js.map +1 -0
- package/dist/web/chunk-2AJCHB7P.js +1 -0
- package/dist/web/chunk-2CPLUFCH.js +2 -0
- package/dist/web/chunk-2I7L37NS.js +1 -0
- package/dist/web/chunk-2NAWAJB5.js +1 -0
- package/dist/web/chunk-2OJBIPE4.js +1 -0
- package/dist/web/chunk-372AYXK6.js +17 -0
- package/dist/web/chunk-3E2WB6D5.js +1 -0
- package/dist/web/chunk-3EBFYSCH.js +2 -0
- package/dist/web/chunk-3QCQ4BXS.js +1 -0
- package/dist/web/chunk-42XVAQ6I.js +1 -0
- package/dist/web/chunk-4IMMPEYM.js +1 -0
- package/dist/web/chunk-4JYHAP7B.js +1 -0
- package/dist/web/chunk-4TJQJPCZ.js +1 -0
- package/dist/web/chunk-4WZIHTPC.js +1 -0
- package/dist/web/chunk-4YVSYOSD.js +1 -0
- package/dist/web/chunk-52PO6IMB.js +2 -0
- package/dist/web/chunk-54D6RFSW.js +1 -0
- package/dist/web/chunk-5BQIOYKW.js +1 -0
- package/dist/web/chunk-5HGWHUJA.js +1 -0
- package/dist/web/chunk-5XRUOPZE.js +1 -0
- package/dist/web/chunk-5Y244R4G.js +1 -0
- package/dist/web/chunk-6O7Z3P2M.js +1 -0
- package/dist/web/chunk-6QXULGLG.js +1 -0
- package/dist/web/chunk-6RRDPT5Z.js +1 -0
- package/dist/web/chunk-6VKB2ZWM.js +1 -0
- package/dist/web/chunk-7DMFVTU4.js +1 -0
- package/dist/web/chunk-7P5CVBJZ.js +1 -0
- package/dist/web/chunk-7SMPKVEP.js +1 -0
- package/dist/web/chunk-AHLX543M.js +1 -0
- package/dist/web/chunk-AMGJBO7D.js +3 -0
- package/dist/web/chunk-AZJVTPLU.js +1 -0
- package/dist/web/chunk-B3CWIVBW.js +1 -0
- package/dist/web/chunk-BLBRMCN2.js +1 -0
- package/dist/web/chunk-BMIAXD2V.js +2 -0
- package/dist/web/chunk-BPCJLNBS.js +47 -0
- package/dist/web/chunk-BRHEUDLY.js +6 -0
- package/dist/web/chunk-BUXWEHIY.js +1 -0
- package/dist/web/chunk-CD5IZM7Y.js +1 -0
- package/dist/web/chunk-DLQPZWSI.css +1 -0
- package/dist/web/chunk-DSGNOCKQ.js +1 -0
- package/dist/web/chunk-DT5LJYFX.js +1 -0
- package/dist/web/chunk-DYRFLPJA.js +1 -0
- package/dist/web/chunk-E3J3CXR5.js +1 -0
- package/dist/web/chunk-E73OX2P7.js +1 -0
- package/dist/web/chunk-EAXRKDLV.js +1 -0
- package/dist/web/chunk-EBKKDHYI.js +1 -0
- package/dist/web/chunk-EE7V7Q5P.js +1 -0
- package/dist/web/chunk-EKY2FUHU.js +1 -0
- package/dist/web/chunk-EP6XOPXH.js +1 -0
- package/dist/web/chunk-ESGDLJOJ.js +1 -0
- package/dist/web/chunk-ETJG7NCY.js +1 -0
- package/dist/web/chunk-EUUEFEDI.js +1 -0
- package/dist/web/chunk-EX4ZHR4F.js +1 -0
- package/dist/web/chunk-F5UNCSXP.js +1 -0
- package/dist/web/chunk-FFGJXUHI.js +1 -0
- package/dist/web/chunk-FGNZDHTL.js +11 -0
- package/dist/web/chunk-FIJW2UNJ.js +1 -0
- package/dist/web/chunk-FMV5PXRC.js +5 -0
- package/dist/web/chunk-G7VZT5KB.js +3 -0
- package/dist/web/chunk-GCOM4JPR.js +2 -0
- package/dist/web/chunk-GEIIDO6C.js +1 -0
- package/dist/web/chunk-GRZYXPSO.js +7 -0
- package/dist/web/chunk-GWBABPZ5.js +1 -0
- package/dist/web/chunk-GYGPS3AN.js +1 -0
- package/dist/web/chunk-H4GLRD3Q.js +1 -0
- package/dist/web/chunk-H5TWEFYX.js +1 -0
- package/dist/web/chunk-H7AF7YS4.js +1 -0
- package/dist/web/chunk-HCB2N2KH.js +1 -0
- package/dist/web/chunk-HDZDQILN.js +1 -0
- package/dist/web/chunk-HMK6UO6N.js +1 -0
- package/dist/web/chunk-HVVXPI4D.js +1 -0
- package/dist/web/chunk-IHEE5NYJ.js +1 -0
- package/dist/web/chunk-IPB746BT.js +1 -0
- package/dist/web/chunk-ISNEBICW.js +1 -0
- package/dist/web/chunk-J2GZVLHH.js +1 -0
- package/dist/web/chunk-JTFXTIPE.js +903 -0
- package/dist/web/chunk-KHU5M2AL.js +1 -0
- package/dist/web/chunk-KW3DHCFV.js +1 -0
- package/dist/web/chunk-LB6JPLX2.js +1 -0
- package/dist/web/chunk-LBXLFPVN.js +1 -0
- package/dist/web/chunk-LGNSHRCE.js +1 -0
- package/dist/web/chunk-LNSVDHCI.js +1 -0
- package/dist/web/chunk-LVGIY3SO.js +1 -0
- package/dist/web/chunk-LXLHIHEN.js +1 -0
- package/dist/web/chunk-MFHO2F2U.js +4 -0
- package/dist/web/chunk-N5OSSQFZ.js +1 -0
- package/dist/web/chunk-N6SS4G6S.js +1 -0
- package/dist/web/chunk-NAJYJNHS.js +1 -0
- package/dist/web/chunk-NHD66NOI.js +1 -0
- package/dist/web/chunk-NNLJ55MY.js +1 -0
- package/dist/web/chunk-NTBJG6SJ.js +1 -0
- package/dist/web/chunk-NUDB3Q2Y.js +3 -0
- package/dist/web/chunk-OM7JVWQQ.js +1 -0
- package/dist/web/chunk-OXEF5E3E.js +1 -0
- package/dist/web/chunk-PGGJPDJG.js +1 -0
- package/dist/web/chunk-PUYSJNJR.js +1 -0
- package/dist/web/chunk-Q2RVFS45.js +1 -0
- package/dist/web/chunk-Q7L6LLAK.js +1 -0
- package/dist/web/chunk-QCMKJIWY.js +1 -0
- package/dist/web/chunk-QEQRY4QQ.js +1 -0
- package/dist/web/chunk-QH6CF3M3.js +1 -0
- package/dist/web/chunk-QQ5LD7PI.js +1 -0
- package/dist/web/chunk-QR6L3KAC.js +1 -0
- package/dist/web/chunk-QXJS6F3U.js +1 -0
- package/dist/web/chunk-R2DLK4HO.js +1 -0
- package/dist/web/chunk-RD6TVPOT.js +1 -0
- package/dist/web/chunk-RKY4EJYJ.js +1 -0
- package/dist/web/chunk-RONYWVY7.js +1 -0
- package/dist/web/chunk-RSZZWGGC.js +1 -0
- package/dist/web/chunk-RXKXYF2C.js +1 -0
- package/dist/web/chunk-SCNDZRN2.js +1 -0
- package/dist/web/chunk-SH6UVHQC.js +1 -0
- package/dist/web/chunk-SWKJRNYY.js +1 -0
- package/dist/web/chunk-T7AZ65JP.js +1 -0
- package/dist/web/chunk-TCZDVOHD.js +1 -0
- package/dist/web/chunk-TF5TF6IP.js +1 -0
- package/dist/web/chunk-TPTITA3V.js +1 -0
- package/dist/web/chunk-TR335633.js +1 -0
- package/dist/web/chunk-UR5KDXPX.js +1 -0
- package/dist/web/chunk-UR6O2GEH.js +1 -0
- package/dist/web/chunk-UTNMGWTP.js +1 -0
- package/dist/web/chunk-VECWMHJP.js +1 -0
- package/dist/web/chunk-VUACT35R.js +3 -0
- package/dist/web/chunk-VZI7H4SZ.js +1 -0
- package/dist/web/chunk-W22AVG3N.js +1 -0
- package/dist/web/chunk-W6NGHRHX.js +1 -0
- package/dist/web/chunk-WB6YHOD4.js +1 -0
- package/dist/web/chunk-WBT64AWV.js +1 -0
- package/dist/web/chunk-WFXJIXZE.js +4 -0
- package/dist/web/chunk-WTGYRH3Z.js +298 -0
- package/dist/web/chunk-WXTCVDTP.js +1 -0
- package/dist/web/chunk-XCDHWLVH.js +1 -0
- package/dist/web/chunk-Y3H6FFUZ.js +1 -0
- package/dist/web/chunk-Y4F5ULGJ.js +1 -0
- package/dist/web/chunk-YEGKAAEE.js +1 -0
- package/dist/web/chunk-YM2KU57F.js +1 -0
- package/dist/web/chunk-YRERBP6T.js +1 -0
- package/dist/web/chunk-ZLV4VCDG.js +3 -0
- package/dist/web/chunk-ZQUJMA5K.js +4 -0
- package/dist/web/chunk-ZTVI5KFF.js +1 -0
- package/dist/web/favicon-16.png +0 -0
- package/dist/web/favicon-180.png +0 -0
- package/dist/web/favicon-32.png +0 -0
- package/dist/web/favicon-512.png +0 -0
- package/dist/web/favicon-small.svg +15 -0
- package/dist/web/favicon.ico +0 -0
- package/dist/web/favicon.svg +20 -0
- package/dist/web/icon-192.png +0 -0
- package/dist/web/icon-512.png +0 -0
- package/dist/web/index.html +146 -0
- package/dist/web/main-ESADRXN2.css +1 -0
- package/dist/web/main-SQFUMVQA.js +1 -0
- package/dist/web/manifest.webmanifest +15 -0
- package/dist/web/media/codicon-LN6W7LCM.ttf +0 -0
- package/dist/web/styles-KSOPUVDA.css +1 -0
- package/dist/web/sw.js +69 -0
- package/dist/workflows/condition-evaluator.d.ts +75 -0
- package/dist/workflows/condition-evaluator.d.ts.map +1 -0
- package/dist/workflows/condition-evaluator.js +282 -0
- package/dist/workflows/condition-evaluator.js.map +1 -0
- package/dist/workflows/defaults/claude-design-implement.yaml +336 -0
- package/dist/workflows/defaults/index.d.ts +26 -0
- package/dist/workflows/defaults/index.d.ts.map +1 -0
- package/dist/workflows/defaults/index.js +94 -0
- package/dist/workflows/defaults/index.js.map +1 -0
- package/dist/workflows/defaults/spec-author.yaml +214 -0
- package/dist/workflows/defaults/spec-fix.yaml +110 -0
- package/dist/workflows/defaults/spec-implement.yaml +150 -0
- package/dist/workflows/defaults/spec-relink.yaml +81 -0
- package/dist/workflows/defaults/spec-verify.yaml +51 -0
- package/dist/workflows/discovery.d.ts +46 -0
- package/dist/workflows/discovery.d.ts.map +1 -0
- package/dist/workflows/discovery.js +193 -0
- package/dist/workflows/discovery.js.map +1 -0
- package/dist/workflows/executor.d.ts +98 -0
- package/dist/workflows/executor.d.ts.map +1 -0
- package/dist/workflows/executor.js +664 -0
- package/dist/workflows/executor.js.map +1 -0
- package/dist/workflows/runners/approval.d.ts +18 -0
- package/dist/workflows/runners/approval.d.ts.map +1 -0
- package/dist/workflows/runners/approval.js +34 -0
- package/dist/workflows/runners/approval.js.map +1 -0
- package/dist/workflows/runners/bash.d.ts +13 -0
- package/dist/workflows/runners/bash.d.ts.map +1 -0
- package/dist/workflows/runners/bash.js +143 -0
- package/dist/workflows/runners/bash.js.map +1 -0
- package/dist/workflows/runners/cancel.d.ts +10 -0
- package/dist/workflows/runners/cancel.d.ts.map +1 -0
- package/dist/workflows/runners/cancel.js +19 -0
- package/dist/workflows/runners/cancel.js.map +1 -0
- package/dist/workflows/runners/prompt.d.ts +51 -0
- package/dist/workflows/runners/prompt.d.ts.map +1 -0
- package/dist/workflows/runners/prompt.js +306 -0
- package/dist/workflows/runners/prompt.js.map +1 -0
- package/dist/workflows/runners/script.d.ts +17 -0
- package/dist/workflows/runners/script.d.ts.map +1 -0
- package/dist/workflows/runners/script.js +155 -0
- package/dist/workflows/runners/script.js.map +1 -0
- package/dist/workflows/runners/types.d.ts +57 -0
- package/dist/workflows/runners/types.d.ts.map +1 -0
- package/dist/workflows/runners/types.js +13 -0
- package/dist/workflows/runners/types.js.map +1 -0
- package/dist/workflows/schemas/workflow.d.ts +166 -0
- package/dist/workflows/schemas/workflow.d.ts.map +1 -0
- package/dist/workflows/schemas/workflow.js +437 -0
- package/dist/workflows/schemas/workflow.js.map +1 -0
- package/hooks/hooks.json +38 -0
- package/package.json +78 -0
- package/scripts/add-lang/bench.sh +60 -0
- package/scripts/add-lang/check-grammar.mjs +75 -0
- package/scripts/add-lang/dump-ast.mjs +103 -0
- package/scripts/add-lang/verify-extraction.mjs +70 -0
- package/scripts/agent-eval/arms-F.sh +21 -0
- package/scripts/agent-eval/arms-matrix.sh +37 -0
- package/scripts/agent-eval/audit.sh +68 -0
- package/scripts/agent-eval/bench-readme.sh +28 -0
- package/scripts/agent-eval/bench-why-repo.sh +22 -0
- package/scripts/agent-eval/block-read-hook.sh +19 -0
- package/scripts/agent-eval/hook-settings.json +15 -0
- package/scripts/agent-eval/itrun.sh +120 -0
- package/scripts/agent-eval/parse-arms.mjs +116 -0
- package/scripts/agent-eval/parse-bench-readme.mjs +84 -0
- package/scripts/agent-eval/parse-run.mjs +45 -0
- package/scripts/agent-eval/parse-session.mjs +93 -0
- package/scripts/agent-eval/probe-context.mjs +21 -0
- package/scripts/agent-eval/probe-explore.mjs +40 -0
- package/scripts/agent-eval/probe-node.mjs +20 -0
- package/scripts/agent-eval/probe-sweep.mjs +119 -0
- package/scripts/agent-eval/probe-trace.mjs +20 -0
- package/scripts/agent-eval/run-agent.sh +34 -0
- package/scripts/agent-eval/run-all.sh +67 -0
- package/scripts/agent-eval/run-arms.sh +56 -0
- package/scripts/agent-eval/seq-matrix.mjs +137 -0
- package/scripts/build-bundle.sh +118 -0
- package/scripts/build-server-bundle.mjs +80 -0
- package/scripts/build-web-bundle.mjs +66 -0
- package/scripts/extract-release-notes.mjs +130 -0
- package/scripts/local-install.sh +41 -0
- package/scripts/npm-sdk.js +75 -0
- package/scripts/npm-shim.js +246 -0
- package/scripts/offline-install.ps1 +148 -0
- package/scripts/offline-install.sh +149 -0
- package/scripts/pack-npm.sh +119 -0
- package/scripts/prepare-release.mjs +270 -0
- package/scripts/sync-shim-version.mjs +64 -0
- package/selectors.json +41 -0
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Author end-to-end tests for a requirement from its acceptance criteria — a Playwright UI test and/or a backend/batch API test per criterion — preview and confirm before writing, link each test to its .A<N> criterion, then run them and record pass/fail into the spec→test→verify chain.
|
|
3
|
+
argument-hint: <REQ-ID>
|
|
4
|
+
allowed-tools: Read, Edit, Write, Bash, mcp__specship__specship_spec, mcp__specship__specship_explore, mcp__specship__specship_search, mcp__specship__specship_node, mcp__specship__specship_link_assert, mcp__specship__specship_link_verify
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Behaviour: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
Turn a requirement's **acceptance criteria** into runnable **end-to-end tests** —
|
|
10
|
+
a Playwright UI journey and/or a backend/batch API test for each criterion — and
|
|
11
|
+
feed the results into the spec→test→verify chain that `specship check` gates on.
|
|
12
|
+
|
|
13
|
+
You author and run the tests; SpecShip supplies the flow map and records the
|
|
14
|
+
verification state; **the human gates the write**. This is distinct from
|
|
15
|
+
`/ss-implement` (which writes the *feature* code) — `/ss-behaviour` writes the
|
|
16
|
+
*tests* that prove the requirement behaves.
|
|
17
|
+
|
|
18
|
+
**Governing principle — propose, never auto-apply.** Test files reach disk ONLY
|
|
19
|
+
after explicit human confirmation (step 4). Running them afterwards is
|
|
20
|
+
non-destructive and proceeds automatically. If the human does not confirm, you
|
|
21
|
+
write **nothing**.
|
|
22
|
+
|
|
23
|
+
If `$ARGUMENTS` is empty, ask which requirement to test (or use `specship_spec`
|
|
24
|
+
with a `query` to find it).
|
|
25
|
+
|
|
26
|
+
## 1. Load the requirement + its criteria
|
|
27
|
+
|
|
28
|
+
Call `mcp__specship__specship_spec` with the `spec_id`. Read the requirement and
|
|
29
|
+
its **acceptance criteria** (the `.A<N>` children) — each criterion is one
|
|
30
|
+
behaviour to test (REQ-BEHAVIOUR-002.A1).
|
|
31
|
+
|
|
32
|
+
## 2. Get the behaviour surface
|
|
33
|
+
|
|
34
|
+
Call `mcp__specship__specship_spec` with the `spec_id` **and
|
|
35
|
+
`behaviour_surface: true`**. It returns the requirement's linked code plus the
|
|
36
|
+
surrounding routes / components / handlers, grouped into:
|
|
37
|
+
|
|
38
|
+
- a **UI tier** — Playwright targets, and
|
|
39
|
+
- a **backend / batch tier** — API / job test targets.
|
|
40
|
+
|
|
41
|
+
An empty UI tier means the project (or this requirement) has no UI surface — you
|
|
42
|
+
will author backend/batch tests only (REQ-BEHAVIOUR-002.A4). Use
|
|
43
|
+
`specship_explore` / `specship_node` on any surface element whose flow you need
|
|
44
|
+
to understand before writing the test.
|
|
45
|
+
|
|
46
|
+
## 3. Detect the project's test conventions
|
|
47
|
+
|
|
48
|
+
Before writing anything, ground in how this repo already tests, and **mirror it**
|
|
49
|
+
(REQ-BEHAVIOUR-002.A3) — never impose a stack:
|
|
50
|
+
|
|
51
|
+
- UI: look for a Playwright config / an `e2e/` dir and its file naming.
|
|
52
|
+
- Backend: find the runner in use (vitest / jest / pytest / go test / …) and the
|
|
53
|
+
test file layout.
|
|
54
|
+
|
|
55
|
+
Use `specship_explore` on existing test files (e.g. `*.spec.ts`, `*.test.*`,
|
|
56
|
+
`e2e/`) and read a couple to match their style, fixtures, and import paths.
|
|
57
|
+
|
|
58
|
+
## 4. Plan, preview, confirm — then write + link
|
|
59
|
+
|
|
60
|
+
For **each acceptance criterion**, plan the end-to-end test(s)
|
|
61
|
+
(REQ-BEHAVIOUR-002.A1 / A2):
|
|
62
|
+
|
|
63
|
+
- If the criterion touches a **UI flow** → a Playwright test exercising it.
|
|
64
|
+
- If it touches a **backend/batch path** → an API/batch test.
|
|
65
|
+
- If it touches **both** → one of each.
|
|
66
|
+
|
|
67
|
+
Each test's title and file must name the `.A<N>` criterion it covers, so a
|
|
68
|
+
failure is traceable to a criterion.
|
|
69
|
+
|
|
70
|
+
**Preview the exact test files** (path + full contents) you will create and ask
|
|
71
|
+
for explicit confirmation, offering `confirm` / `edit` / `cancel`
|
|
72
|
+
(REQ-BEHAVIOUR-003.A1). **Write nothing until confirmed.**
|
|
73
|
+
|
|
74
|
+
On confirmation:
|
|
75
|
+
1. Write the test files (mirroring the detected conventions). A re-run of
|
|
76
|
+
`/ss-behaviour` on the same requirement **refreshes** existing tests rather
|
|
77
|
+
than duplicating them (REQ-BEHAVIOUR-003.A3).
|
|
78
|
+
2. For each test, call `mcp__specship__specship_link_assert` with
|
|
79
|
+
`kind: "tests"`, targeting the **`.A<N>` criterion** it covers
|
|
80
|
+
(REQ-BEHAVIOUR-003.A2). Keep the returned `link_id` for step 5.
|
|
81
|
+
3. Run `specship sync` and confirm the criteria + links index cleanly
|
|
82
|
+
(REQ-BEHAVIOUR-003.A4).
|
|
83
|
+
|
|
84
|
+
## 5. Run the tests, record the outcome
|
|
85
|
+
|
|
86
|
+
Run the relevant suite(s) with the project's runner (via `Bash`), then record
|
|
87
|
+
each result through `mcp__specship__specship_link_verify` (REQ-BEHAVIOUR-004):
|
|
88
|
+
|
|
89
|
+
- a test that **runs and passes** → `result: "pass"` (link → `verified`),
|
|
90
|
+
- a test that **runs and fails** → `result: "fail"` with the failure in `reason`
|
|
91
|
+
(link → `broken`),
|
|
92
|
+
- a suite that **could not be executed** (missing dependency, no dev server,
|
|
93
|
+
wrong environment) → **report it as unrun and do NOT call link_verify** for
|
|
94
|
+
those tests — leaving the link state unchanged. A test that didn't run is never
|
|
95
|
+
recorded as `broken` (REQ-BEHAVIOUR-004.A2).
|
|
96
|
+
|
|
97
|
+
## 6. Hand off
|
|
98
|
+
|
|
99
|
+
Summarize: which criteria now have `verified` / `broken` / unrun tests, and the
|
|
100
|
+
behaviour-gate status. The links now feed `specship check`'s behaviour gate
|
|
101
|
+
unchanged (REQ-BEHAVIOUR-004.A3): a `broken` link fails the gate when behaviour
|
|
102
|
+
gating is on; a requirement with no `verified` test is reported as unverified.
|
|
103
|
+
For a failing behaviour, fix the feature with `/ss-implement`, then re-run
|
|
104
|
+
`/ss-behaviour` (or just re-run the test and `specship_link_verify`).
|
|
105
|
+
|
|
106
|
+
## Anti-patterns
|
|
107
|
+
|
|
108
|
+
- **Writing test files before confirmation** — the one hard rule (step 4).
|
|
109
|
+
- **Marking a test `broken` when it never ran** — that false-fails the CI gate
|
|
110
|
+
(step 5).
|
|
111
|
+
- **Imposing a test stack** the repo doesn't use — mirror the existing
|
|
112
|
+
conventions (step 3).
|
|
113
|
+
- **Writing feature code** — that's `/ss-implement`. `/ss-behaviour` writes
|
|
114
|
+
tests, runs them, and records the result.
|
|
115
|
+
- **Generating Playwright tests when there's no UI** — the UI tier will be empty;
|
|
116
|
+
author backend/batch tests only.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Gate & health door — run the enforcement gate, review the drift queue, repair a drifted/broken/orphaned link, or see code-health. No arg = the gate; `drifted`/`fix`/`relink`/`health` run the matching flow.
|
|
3
|
+
argument-hint: "(no arg = gate) | drifted | fix <SPEC_ID> | relink <SPEC_ID> | health"
|
|
4
|
+
allowed-tools: Bash, mcp__specship__specship_drifted, mcp__specship__specship_spec, mcp__specship__specship_link_verify
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Check: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
The **gate & health door** — verify intent against code and keep the spec↔code
|
|
10
|
+
links honest. Route on the first token of `$ARGUMENTS`.
|
|
11
|
+
|
|
12
|
+
## Dispatch
|
|
13
|
+
|
|
14
|
+
- **(no argument)** → run the enforcement gate:
|
|
15
|
+
```bash
|
|
16
|
+
specship check
|
|
17
|
+
```
|
|
18
|
+
Composes spec↔code drift, architecture fitness, maintainability, and the
|
|
19
|
+
spec→test→verify behaviour chain. Strictly opt-in gating — with no `enforce`
|
|
20
|
+
config it only advises and exits 0. Summarize the gated failures, if any.
|
|
21
|
+
- **`drifted`** → the review queue: call `mcp__specship__specship_drifted`
|
|
22
|
+
(optional `state` filter) for links that are drifted (spec or code changed),
|
|
23
|
+
broken (verification failed), or orphaned (target symbol gone).
|
|
24
|
+
- **`fix <SPEC_ID>`** → repair a drifted/broken link via the bundled workflow:
|
|
25
|
+
```bash
|
|
26
|
+
specship workflow run spec-fix --input SPEC_ID=<ID>
|
|
27
|
+
```
|
|
28
|
+
Diagnoses (spec hash vs code signature vs failing test) → approve → apply →
|
|
29
|
+
`specship_link_verify` back to `verified`.
|
|
30
|
+
- **`relink <SPEC_ID>`** → for an **orphaned** link (the target symbol no longer
|
|
31
|
+
exists): re-point it at the symbol's new location/name, then re-assert.
|
|
32
|
+
- **`health`** → graph-derived code health:
|
|
33
|
+
```bash
|
|
34
|
+
specship maintainability
|
|
35
|
+
```
|
|
36
|
+
Shows the high-precision findings (oversized symbols, god files, dependency
|
|
37
|
+
cycles), ranked and capped. Add `--deep` for the lower-confidence dead-code and
|
|
38
|
+
coupling findings; `--json` for the full tagged set (CI).
|
|
39
|
+
|
|
40
|
+
## After running tests against a spec link
|
|
41
|
+
|
|
42
|
+
Report the outcome with `mcp__specship__specship_link_verify`
|
|
43
|
+
(`result: "pass" | "fail"`) so the link moves to `verified` (or `broken`).
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Import a Claude Design (or Figma) file, snapshot it for zero-loss reference, draft a SpecShip spec, and hand off to /ss-spec implement.
|
|
3
|
+
argument-hint: <Claude-Design-URL> [SLUG]
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, mcp__specship__specship_explore, mcp__specship__specship_search, mcp__specship__specship_node, mcp__specship__specship_spec, mcp__specship__specship_files
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Design → Spec → Implement: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
> **Already settled on a design?** This command imports it by URL. If you instead want to *run
|
|
10
|
+
> the taste loop first* — iterate variants with the human via the `designer` MCP and only then
|
|
11
|
+
> spec the chosen one — use **`/ss-design-loop`**, which drives the loop and hands the resulting
|
|
12
|
+
> bundle to this same workflow via its `HANDOFF_DIR` input.
|
|
13
|
+
|
|
14
|
+
Run the bundled `claude-design-implement` workflow against the Claude Design URL in `$ARGUMENTS`. The workflow:
|
|
15
|
+
|
|
16
|
+
1. **Snapshots** the design source byte-for-byte into `specs/<slug>/snapshot.html` (zero-loss fidelity layer).
|
|
17
|
+
2. **Records the import** in `specs/<slug>/source.md` (audit trail — URL, project ID, date, original prompt verbatim).
|
|
18
|
+
3. **Extracts design tokens** into `specs/<slug>/tokens.css`, mapped onto your project's existing token system where possible.
|
|
19
|
+
4. **Drafts a spec** at `specs/<slug>.md` covering behavioural contract, accessibility, responsive, interaction states, and data shape — **without** pixel values or hex colors (those stay in the snapshot + tokens).
|
|
20
|
+
5. **Pauses at an approval gate** for you to walk the `[needs review]` markers and gap-fill questions.
|
|
21
|
+
6. **Writes the spec** and `specship sync`s it into the graph.
|
|
22
|
+
7. **Hands off** with the next command: `/ss-spec implement <first REQ ID>`.
|
|
23
|
+
|
|
24
|
+
## How to invoke
|
|
25
|
+
|
|
26
|
+
Parse `$ARGUMENTS`. The first token must be a Claude Design URL of the form:
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
https://claude.ai/design/p/<project-id>/?file=<File+Name>.html
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
Optional second token is the slug (kebab-case directory name). If omitted, derive from the `file=` query param (e.g. `Data+Flow.html` → `data-flow`).
|
|
33
|
+
|
|
34
|
+
Then run:
|
|
35
|
+
|
|
36
|
+
```bash
|
|
37
|
+
specship workflow run claude-design-implement \
|
|
38
|
+
--input CONNECTOR_URL="<URL>" \
|
|
39
|
+
--input FILE_LABEL="<File Name>" \
|
|
40
|
+
--input SLUG="<slug>"
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
(Add `--input OWNER="<team>"` and `--input PRIORITY="high|medium|low"` if you want them populated in the spec frontmatter; otherwise they're marked `[needs review]` and surfaced in the gap-fill step.)
|
|
44
|
+
|
|
45
|
+
## Why the four-file pattern
|
|
46
|
+
|
|
47
|
+
The workflow produces four files in `specs/<slug>/` rather than a single spec. This is deliberate:
|
|
48
|
+
|
|
49
|
+
| File | Role | Drift-tracked? |
|
|
50
|
+
|---|---|---|
|
|
51
|
+
| `snapshot.html` | Byte-for-byte design capture | No (frozen reference) |
|
|
52
|
+
| `source.md` | Import audit record | No (metadata) |
|
|
53
|
+
| `tokens.css` | Design tokens — CSS variables | No (reference data) |
|
|
54
|
+
| `specs/<slug>.md` | Contract: REQs, acceptance criteria | **Yes — drift gate on this** |
|
|
55
|
+
|
|
56
|
+
Specs that name pixel values flag drift on every theme tweak; specs that name token symbols (`MUST use --error`) survive token-value changes silently. The split keeps the drift queue meaningful.
|
|
57
|
+
|
|
58
|
+
## After the workflow finishes
|
|
59
|
+
|
|
60
|
+
You get a hand-off message listing the REQs. Run:
|
|
61
|
+
|
|
62
|
+
```
|
|
63
|
+
/ss-spec implement <REQ-XXX-001>
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
The implementation phase reads:
|
|
67
|
+
- `specs/<slug>.md` for what to build
|
|
68
|
+
- `specs/<slug>/snapshot.html` for how it should look
|
|
69
|
+
- `specs/<slug>/tokens.css` for which design tokens to wire up
|
|
70
|
+
|
|
71
|
+
This is what preserves visual fidelity — the snapshot is on disk and the implementer reads it directly. The spec layer enforces contract; the snapshot layer guarantees fidelity.
|
|
72
|
+
|
|
73
|
+
## When the designer iterates
|
|
74
|
+
|
|
75
|
+
Re-run `/ss-design-implement` with the same URL. The workflow re-snapshots, re-drafts, re-prompts for approval — keeping existing REQ IDs stable so any in-flight implementation work survives the iteration. `git diff` on the snapshot tells you exactly what changed visually; `git diff` on `specs/<slug>.md` tells you what changed contractually.
|
|
76
|
+
|
|
77
|
+
## Anti-patterns
|
|
78
|
+
|
|
79
|
+
- **Don't put hex codes in the spec.** Reference tokens by name. The values live in `tokens.css`.
|
|
80
|
+
- **Don't delete the snapshot after implementation.** It's the durable reference if the Claude Design URL ever goes 404.
|
|
81
|
+
- **Don't paraphrase the snapshot.** Save byte-for-byte. Summarising loses detail that the implementation step would otherwise have used.
|
|
82
|
+
- **Don't skip the approval gate.** The workflow's value is the gap-fill questions surfaced there — answering them is what closes the "no details lost" gap on the things a static design can't show (failure modes, real-time updates, keyboard order).
|
|
83
|
+
|
|
84
|
+
If `$ARGUMENTS` is empty or doesn't look like a Claude Design URL, ask the user for the URL before running the workflow.
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run the full design→code loop — taste a claude.ai/design with the human via the designer MCP, then snapshot → spec → review → hand off to /ss-spec implement. Two human gates.
|
|
3
|
+
argument-hint: [intent — what you want to design]
|
|
4
|
+
allowed-tools: Read, Write, Edit, Bash, mcp__specship__designer_session, mcp__specship__designer_prompt, mcp__specship__designer_ask, mcp__specship__designer_list, mcp__specship__designer_snapshot, mcp__specship__designer_handoff, mcp__specship__specship_explore, mcp__specship__specship_search, mcp__specship__specship_node, mcp__specship__specship_spec, mcp__specship__specship_files
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Design Loop: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
One continuous pipeline: **intent → taste → design → handoff → spec → `/ss-spec implement`**.
|
|
10
|
+
You (the orchestrator) drive `claude.ai/design` through the `designer` MCP while the
|
|
11
|
+
**human tastes** the variants, then promote the chosen design into a SpecShip spec via the
|
|
12
|
+
bundled `claude-design-implement` workflow. Two human gates:
|
|
13
|
+
|
|
14
|
+
- **Gate 1 (aesthetic):** the human says *"that's it"* in the taste loop. Driven here, conversationally.
|
|
15
|
+
- **Gate 2 (contract):** the human walks the spec's `[needs review]` markers at the workflow's approval gate.
|
|
16
|
+
|
|
17
|
+
This is the deeper companion to `/ss-design-implement` — that command imports a design you've
|
|
18
|
+
*already* settled on (by URL); this one runs the taste loop first, then hands the resulting
|
|
19
|
+
bundle to the same workflow. `$ARGUMENTS` is the human's opening intent (optional).
|
|
20
|
+
|
|
21
|
+
## Preflight
|
|
22
|
+
|
|
23
|
+
1. **Designer runtime ready?** The designer tools are part of SpecShip's MCP now
|
|
24
|
+
(`mcp__specship__designer_*`), so they're always present. Probe the *runtime* with
|
|
25
|
+
`designer_session({ action: "status" })`: a clean status means you're ready. If it errors
|
|
26
|
+
with "CDP not up" or "Not signed in", the one-time Chrome setup hasn't run — tell the human to
|
|
27
|
+
run `designer setup` (creates the debug-Chrome profile + login) and stop. Do NOT fall back to a
|
|
28
|
+
blind fetch; the taste loop needs the live browser.
|
|
29
|
+
2. **SpecShip initialized?** `specship status` should succeed. If not, `specship init -i` first.
|
|
30
|
+
|
|
31
|
+
## Phase A — Taste loop (Gate 1)
|
|
32
|
+
|
|
33
|
+
Follow the **`designer-loop` skill** (`~/.claude/skills/designer-loop/SKILL.md`) — it is the
|
|
34
|
+
authority on this loop. The condensed version, if the skill isn't installed:
|
|
35
|
+
|
|
36
|
+
> The human is the designer; Claude Design has taste; you are translation + plumbing. Don't
|
|
37
|
+
> propose your own variants, don't interview about aesthetics — scope questions only.
|
|
38
|
+
|
|
39
|
+
1. **Read the room — capabilities drive the design.** Before relaying any intent, survey the
|
|
40
|
+
target repo for what it actually *does* and feed that into the prompt verbatim. Use
|
|
41
|
+
`specship_explore` / `specship_search` to pull: entities + their fields, operations /
|
|
42
|
+
endpoints, states (loading / empty / error / success), failure modes, hard constraints
|
|
43
|
+
(auth, rate limits), and existing design tokens. The human's intent tells Claude *how*; the
|
|
44
|
+
codebase tells it *what*. Transfer capability facts unabridged — summarizing is filtering.
|
|
45
|
+
2. **Create / resume the session.** `designer_session({ key: "<slug>", action: "create",
|
|
46
|
+
name: "<seed intent>", fidelity: "highfi" })`. Reuse a stable `key` derived from the intent
|
|
47
|
+
so parallel loops don't collide.
|
|
48
|
+
3. **Relay a minimal, faithful prompt.** `designer_prompt({ key, prompt })` — intent +
|
|
49
|
+
capability facts; let Claude's taste make the aesthetic calls. Ask for the variant shape you
|
|
50
|
+
want ("3 full-page files", "states as toggles") and lock any hard brand tokens explicitly.
|
|
51
|
+
4. **Hand the human the URL** returned in `url`. That live surface has working tweak sliders and
|
|
52
|
+
the variant switcher — it is the default taste path. Ask *"what do you think?"*, not
|
|
53
|
+
"accept or reject?".
|
|
54
|
+
5. **Interpret + iterate.** Translate each reaction into the next `designer_prompt` (or a cheap
|
|
55
|
+
`designer_ask` to consult Claude on a small adjustment). Repeat 3–4 until the human says
|
|
56
|
+
**"that's it."** Capture their final reaction verbatim — it goes in the record.
|
|
57
|
+
|
|
58
|
+
Stay in the loop until Gate 1 is explicitly passed. "Almost" is not "yes."
|
|
59
|
+
|
|
60
|
+
## Bridge — promote the chosen design
|
|
61
|
+
|
|
62
|
+
1. `designer_handoff({ key, openFile: "<chosen variant>.html" })`. This fetches the project
|
|
63
|
+
export zip into `./artifacts/<key>/handoff-<ts>/` — `project/*` (all variants + assets) plus
|
|
64
|
+
`decision-record.md` (the verbatim transcript + the human's final reaction). Note the
|
|
65
|
+
**absolute path** of that `handoff-<ts>/` directory and the **chosen variant filename**.
|
|
66
|
+
2. Derive `FILE_LABEL` (human label) and `SLUG` (kebab-case) from the chosen file / intent. If
|
|
67
|
+
the slug is ambiguous, ask the human — one scope question, not an interview.
|
|
68
|
+
|
|
69
|
+
## Phase B — Spec pipeline (Gate 2)
|
|
70
|
+
|
|
71
|
+
Run the bundled workflow against the bundle on disk (no re-fetch, no CDP):
|
|
72
|
+
|
|
73
|
+
```bash
|
|
74
|
+
specship workflow run claude-design-implement \
|
|
75
|
+
--input HANDOFF_DIR="<absolute path to handoff-<ts>/>" \
|
|
76
|
+
--input CHOSEN_FILE="<chosen variant>.html" \
|
|
77
|
+
--input FILE_LABEL="<File Label>" \
|
|
78
|
+
--input SLUG="<slug>" \
|
|
79
|
+
--json
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
(Add `--input OWNER="<team>"` / `--input PRIORITY="high|medium|low"` to populate frontmatter;
|
|
83
|
+
otherwise they default to empty and surface as `[needs review]`.)
|
|
84
|
+
|
|
85
|
+
The workflow runs headless to its approval gate, then **pauses** (status `paused`). It:
|
|
86
|
+
snapshots `project/<chosen>.html` byte-for-byte into `specs/<slug>/snapshot.html`, folds
|
|
87
|
+
`decision-record.md` into `specs/<slug>/source.md`, extracts `specs/<slug>/tokens.css`, and
|
|
88
|
+
drafts the spec.
|
|
89
|
+
|
|
90
|
+
**At the pause (Gate 2):** read the run's approval message / the drafted spec artifact, present
|
|
91
|
+
it to the human, and walk the `[needs review]` markers + gap-fill questions together. Then:
|
|
92
|
+
|
|
93
|
+
- **Approve:** `specship workflow approve <runId> --comment "<gap-fill answers>"` then
|
|
94
|
+
`specship workflow resume <runId>`. The answers are captured into the spec.
|
|
95
|
+
- **Needs changes:** collect the feedback and re-run the workflow (a reject cancels the run;
|
|
96
|
+
existing REQ IDs are preserved across re-imports, so in-flight work survives).
|
|
97
|
+
|
|
98
|
+
## Phase C — Hand off to implementation
|
|
99
|
+
|
|
100
|
+
When the workflow completes it prints the bridge message. Relay it to the human:
|
|
101
|
+
- the spec path `specs/<slug>.md` and its REQ IDs,
|
|
102
|
+
- the reference files (`snapshot.html`, `tokens.css`, `source.md`),
|
|
103
|
+
- the exact next step: **`/ss-spec implement <first REQ ID>`**.
|
|
104
|
+
|
|
105
|
+
Remind them: the implementer reads `snapshot.html` for visual fidelity — the spec is
|
|
106
|
+
contract-only.
|
|
107
|
+
|
|
108
|
+
## Anti-patterns
|
|
109
|
+
|
|
110
|
+
- **Skipping the capability survey.** Designing before reading what the repo *does* produces
|
|
111
|
+
designs that look good and don't fit. Phase A step 1 is load-bearing.
|
|
112
|
+
- **Proposing your own variants / interviewing about taste.** Claude Design proposes; you relay.
|
|
113
|
+
Scope questions only.
|
|
114
|
+
- **Auto-promoting.** Don't `designer_handoff` on every iteration — only once Gate 1 passes.
|
|
115
|
+
- **Re-fetching in the workflow.** Always pass `HANDOFF_DIR` (the bundle you just fetched), never
|
|
116
|
+
`CONNECTOR_URL` — that re-drives Chrome from a headless subprocess and is fragile. The URL path
|
|
117
|
+
is what `/ss-design-implement` is for.
|
|
118
|
+
- **Putting hex/pixels in the spec.** Reference tokens by name; values live in `tokens.css`.
|
|
119
|
+
- **Skipping Gate 2.** The gap-fill questions are where the static design's blind spots (failure
|
|
120
|
+
modes, real-time updates, keyboard order) get closed.
|
|
121
|
+
|
|
122
|
+
If `designer_session` errors with a CDP / sign-in problem, stop and route the human to
|
|
123
|
+
`designer setup` (debug-Chrome profile + login) — this command cannot run the taste loop without
|
|
124
|
+
the live browser. To import a design you've already settled on by URL, use
|
|
125
|
+
`/ss-design-implement <url>` instead.
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Reads door — explore a codebase region, trace a flow, or get a change's blast radius. Name the symbols you care about; for a flow name both ends; for impact ask "what breaks if I change X".
|
|
3
|
+
argument-hint: <symbols | flow from→to | "impact of X">
|
|
4
|
+
allowed-tools: mcp__specship__specship_explore, mcp__specship__specship_node, mcp__specship__specship_search, mcp__specship__specship_callers, mcp__specship__specship_callees, mcp__specship__specship_impact
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Explore: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
The **reads door** — one entry for every "understand the code" question. Pick the
|
|
10
|
+
behaviour from what `$ARGUMENTS` describes; you do not need a separate command.
|
|
11
|
+
|
|
12
|
+
## With no arguments — a flow worth trying first
|
|
13
|
+
|
|
14
|
+
When `$ARGUMENTS` is empty, first run `specship starter-prompt`. If it prints a
|
|
15
|
+
line, surface it to the user as **"A flow worth trying in this repo: `<line>`"** —
|
|
16
|
+
a concrete starter question they can ask to see retrieval in action — then show
|
|
17
|
+
the guidance below. If it prints nothing, just show the guidance below. (It
|
|
18
|
+
deliberately prints nothing once you've already used retrieval this session.)
|
|
19
|
+
|
|
20
|
+
## Explore an area / "how does X work" (default)
|
|
21
|
+
|
|
22
|
+
Call `mcp__specship__specship_explore` with `$ARGUMENTS` as a bag of symbol names
|
|
23
|
+
(include `Class.method` qualified forms when given). It returns the relevant
|
|
24
|
+
symbols' source grouped by file, plus any flow it can synthesize between them.
|
|
25
|
+
Treat the returned source as already Read — do NOT re-Read files. If a god-file
|
|
26
|
+
truncates, run `specship_explore` again with a tighter symbol bag rather than
|
|
27
|
+
reaching for Read. For one symbol's full body (or an overloaded name), call
|
|
28
|
+
`mcp__specship__specship_node` — it returns every overload in one call.
|
|
29
|
+
|
|
30
|
+
## Trace a flow — "how does X reach Y / the path from X to Y"
|
|
31
|
+
|
|
32
|
+
Call `specship_explore` naming the symbols that span the flow (e.g.
|
|
33
|
+
`mutateElement renderScene`). It surfaces the call path among them, riding
|
|
34
|
+
dynamic-dispatch hops (callbacks, React re-render, JSX children) that grep can't
|
|
35
|
+
follow. Use `specship_search` first if you only have a partial name.
|
|
36
|
+
|
|
37
|
+
## Blast radius — "what breaks if I change X"
|
|
38
|
+
|
|
39
|
+
`mcp__specship__specship_impact` on the symbol for the transitive dependents;
|
|
40
|
+
`specship_callers` / `specship_callees` for one hop in either direction.
|
|
41
|
+
|
|
42
|
+
The index is kept fresh automatically; force a re-index with the `specship sync`
|
|
43
|
+
CLI if a recent edit isn't reflected yet.
|
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Intent door — view, author, fast-path, implement, review, or extend a spec. No arg = the spec funnel; a SPEC_ID = that spec's detail; `new`/`fast`/`implement`/`review`/`triage`/`behaviour`/`domain` run the matching flow.
|
|
3
|
+
argument-hint: "<SPEC_ID> | new <desc> | fast <desc> | implement <ID> | review <ID> | triage <prompt> | behaviour <ID> | domain"
|
|
4
|
+
allowed-tools: Read, Edit, Write, Bash, mcp__specship__specship_spec, mcp__specship__specship_node, mcp__specship__specship_explore, mcp__specship__specship_search, mcp__specship__specship_link_assert, mcp__specship__specship_link_verify
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# SpecShip Spec: `$ARGUMENTS`
|
|
8
|
+
|
|
9
|
+
The **intent door** — one entry for the whole spec lifecycle. Route on the first
|
|
10
|
+
token of `$ARGUMENTS`; everything the old `ss-spec*` / `ss-implement` / `ss-triage`
|
|
11
|
+
/ `ss-behaviour` / `ss-domain` commands did is reachable here, with no capability
|
|
12
|
+
lost.
|
|
13
|
+
|
|
14
|
+
## Dispatch
|
|
15
|
+
|
|
16
|
+
- **(no argument)** → call `mcp__specship__specship_spec` with no `spec_id`: the
|
|
17
|
+
project's spec lifecycle funnel (brainstormed ideas → specs → implemented).
|
|
18
|
+
- **a bare `SPEC_ID`** (e.g. `REQ-AUTH-005`) → call `specship_spec` with that
|
|
19
|
+
`spec_id`: the body, parent/siblings, and linked code with state. Use this
|
|
20
|
+
before Read-ing the spec file. Jump into linked code via `specship_node`; if
|
|
21
|
+
nothing is linked yet, `specship_explore` on terms from the spec's title.
|
|
22
|
+
- **`new <description>`** → the full, gated authoring loop (see *Author* below).
|
|
23
|
+
Use when the design isn't settled.
|
|
24
|
+
- **`fast <description>`** → the **fast-path** (see below).
|
|
25
|
+
- **`implement <SPEC_ID>`** → run the bundled workflow:
|
|
26
|
+
`specship workflow run spec-implement --input SPEC_ID=<ID>` (plan → approve →
|
|
27
|
+
implement → verify → link, in an isolated worktree).
|
|
28
|
+
- **`review <SPEC_ID>`** → a read-only rubric pass (see *Review* below); no edits.
|
|
29
|
+
- **`triage <prompt>`** → the triage flow (route a bug / error / one-line
|
|
30
|
+
enhancement to the existing spec it belongs to and append to it): see below.
|
|
31
|
+
- **`behaviour <SPEC_ID>`** → author + run E2E tests from the requirement's
|
|
32
|
+
acceptance criteria; see below.
|
|
33
|
+
- **`domain`** → capture a human-confirmed domain fact; see below.
|
|
34
|
+
|
|
35
|
+
## Author (`new <description>`)
|
|
36
|
+
|
|
37
|
+
The gated authoring loop, run conversationally — diverge, then formalize. Write
|
|
38
|
+
NOTHING to disk until the human explicitly confirms.
|
|
39
|
+
|
|
40
|
+
1. **Scope + ground.** Confirm it's one feature area (refuse "spec the whole
|
|
41
|
+
app"). Call `specship_explore` on terms from the description to find where
|
|
42
|
+
similar features live and which files the work will touch.
|
|
43
|
+
2. **Diverge.** Propose 2–3 distinct approaches with trade-offs, lead with a
|
|
44
|
+
recommendation, and clarify the things the graph can't tell you (UX, edge
|
|
45
|
+
cases, non-goals) **one question at a time**. Iterate until the direction is
|
|
46
|
+
settled.
|
|
47
|
+
3. **Draft + write.** On confirmation, `Write` `specs/<slug>.md` in the
|
|
48
|
+
`spec-author` format: frontmatter (id/title/owner/priority), `<!-- id: -->`
|
|
49
|
+
markers above every heading, an RFC-2119 keyword per requirement title, one
|
|
50
|
+
concern per requirement, `## Acceptance` with `.A<N>` bullets (happy +
|
|
51
|
+
failure). Mark genuinely-unknowable points `[needs review]`.
|
|
52
|
+
4. **Hand off:** `specship sync`, then `/ss-spec review <ID>` and
|
|
53
|
+
`/ss-spec implement <ID>`.
|
|
54
|
+
|
|
55
|
+
(If a richer authoring skill — e.g. `spec-author` — is available in this
|
|
56
|
+
environment, prefer it; this inline flow is the always-present fallback.)
|
|
57
|
+
|
|
58
|
+
## Review (`review <SPEC_ID>`)
|
|
59
|
+
|
|
60
|
+
Read-only — do NOT modify the file. Fetch the spec (`specship_spec`), verify each
|
|
61
|
+
`implementations:` path exists (`specship_node`), then walk the rubric and output
|
|
62
|
+
a numbered findings list grouped **STRUCTURAL** (embedded id markers, no stranded
|
|
63
|
+
ids, unique ids, valid frontmatter, valid `implementations:`), **QUALITY**
|
|
64
|
+
(RFC-2119 keywords, no weasel words, no implementation leak, testable acceptance,
|
|
65
|
+
one concern per REQ, failure-path coverage), **HYGIENE** (owner/priority set, no
|
|
66
|
+
stale `[needs review]`/TODO). End with a one-line verdict.
|
|
67
|
+
|
|
68
|
+
## Fast-path (`fast <description>`)
|
|
69
|
+
|
|
70
|
+
For a solo dev who wants to record intent and move, **without** the brainstorm /
|
|
71
|
+
gap-question interview (REQ-DOORS-002):
|
|
72
|
+
|
|
73
|
+
1. Ground briefly with `specship_explore` on terms from the description (one call).
|
|
74
|
+
2. Draft a complete spec in memory following the `spec-author` format — frontmatter
|
|
75
|
+
(id/title/owner/priority), `<!-- id: -->` markers above every heading, an
|
|
76
|
+
RFC-2119 keyword per requirement, `## Acceptance` with `.A<N>` bullets (happy +
|
|
77
|
+
failure). Pick sensible defaults instead of asking; mark only genuinely
|
|
78
|
+
unknowable points `[needs review]`.
|
|
79
|
+
3. `Write` it to `specs/<slug>.md` and tell the user the path.
|
|
80
|
+
4. Hand off: `specship sync`, then `/ss-spec implement <ID>` when ready.
|
|
81
|
+
|
|
82
|
+
The fast-path still produces a well-formed spec that indexes cleanly and is ready
|
|
83
|
+
for implementation + linking — it trades the interview for speed, not correctness.
|
|
84
|
+
|
|
85
|
+
## Triage (`triage <prompt>`)
|
|
86
|
+
|
|
87
|
+
Classify the input (bug / error log / enhancement). Retrieve candidates: prose →
|
|
88
|
+
`specship_spec` with a `query`; an error log → parse the `file:line`/symbol →
|
|
89
|
+
`specship_explore`/`specship_node` → the owning requirement. Present the ranked
|
|
90
|
+
match + recommended target. **Preview the exact diff → confirm** (offer edit /
|
|
91
|
+
new-spec / cancel), then append a new requirement (new concern) or a new `.A<N>`
|
|
92
|
+
acceptance criterion (a regression an existing requirement should have covered),
|
|
93
|
+
auto-deriving the next collision-checked id, and `specship_link_assert` it. When
|
|
94
|
+
nothing clears the match floor, say so and offer `/ss-spec new` instead — never
|
|
95
|
+
auto-create. Write nothing until confirmed.
|
|
96
|
+
|
|
97
|
+
## Behaviour tests (`behaviour <SPEC_ID>`)
|
|
98
|
+
|
|
99
|
+
Pull the requirement's acceptance criteria and its behaviour surface
|
|
100
|
+
(`specship_spec` with `spec_id` + `behaviour_surface: true` → UI tier / backend
|
|
101
|
+
tier). For **each** acceptance criterion, author a Playwright test when a UI
|
|
102
|
+
exists and/or a backend test, mirroring the repo's existing test conventions.
|
|
103
|
+
**Preview the files → confirm → write**, then `specship_link_assert … kind:tests`
|
|
104
|
+
at the `.A<N>`, run the suite, and `specship_link_verify` each (pass→verified,
|
|
105
|
+
fail→broken; a suite that can't run is reported unrun, never marked broken).
|
|
106
|
+
|
|
107
|
+
## Domain fact (`domain`)
|
|
108
|
+
|
|
109
|
+
Run `specship domain-gaps --json` for the real undocumented entities/specs, ask
|
|
110
|
+
targeted per-type questions, and **only on explicit confirmation** `Write` a
|
|
111
|
+
`domain`-kind fact under `specs/domain/` (frontmatter `id: DOM-<AREA>-NNN`,
|
|
112
|
+
`type:` one of term/rule/decision/constraint, linked via `depends_on`/`parent_id`).
|
|
113
|
+
Then `specship sync`.
|
|
114
|
+
|
|
115
|
+
## After editing code for a spec
|
|
116
|
+
|
|
117
|
+
Call `mcp__specship__specship_link_assert` before reporting done — idempotent, and
|
|
118
|
+
it supersedes the `// @implements REQ-X` comment backstop.
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* First-run starter-prompt generation (ACTIVATION-DOC).
|
|
3
|
+
*
|
|
4
|
+
* Manufactures one perceivable retrieval moment: a concrete flow/impact question
|
|
5
|
+
* naming real symbols from THIS repo, derived from a flow verified to connect in
|
|
6
|
+
* the graph. A botched first impression is worse than none, so generation never
|
|
7
|
+
* emits a flow whose endpoints don't connect and never sources a flow from a
|
|
8
|
+
* god-file's fan-out; when no good flow exists it falls back to an impact
|
|
9
|
+
* question (which needs only one real symbol and can't fail to connect).
|
|
10
|
+
*
|
|
11
|
+
* Graph access is behind `GraphProbe` so the selection policy is unit-testable;
|
|
12
|
+
* `generateStarterPrompt` wires the real probe over a live `SpecShip` graph.
|
|
13
|
+
*/
|
|
14
|
+
import type { SpecShip } from '../index';
|
|
15
|
+
export interface StarterPrompt {
|
|
16
|
+
kind: 'flow' | 'impact';
|
|
17
|
+
/** The ready-to-ask prompt naming real symbols. */
|
|
18
|
+
prompt: string;
|
|
19
|
+
from: string;
|
|
20
|
+
to?: string;
|
|
21
|
+
}
|
|
22
|
+
export interface GraphProbe {
|
|
23
|
+
/** Entry points worth tracing from (routes / high-fan-in), god-files excluded. */
|
|
24
|
+
entryCandidates(): Array<{
|
|
25
|
+
name: string;
|
|
26
|
+
file: string;
|
|
27
|
+
}>;
|
|
28
|
+
/** Trace an entry to a reachable leaf; null if it reaches nothing useful. */
|
|
29
|
+
traceFlow(entry: {
|
|
30
|
+
name: string;
|
|
31
|
+
file: string;
|
|
32
|
+
}): {
|
|
33
|
+
to: string;
|
|
34
|
+
hops: number;
|
|
35
|
+
files: string[];
|
|
36
|
+
synthesized: boolean;
|
|
37
|
+
} | null;
|
|
38
|
+
/** Highest-fan-in non-god-file symbol, for the impact fallback. */
|
|
39
|
+
topFanInSymbol(): {
|
|
40
|
+
name: string;
|
|
41
|
+
file: string;
|
|
42
|
+
} | null;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Choose the starter prompt. Pure: a flow across ≥2 files over a multi-hop path
|
|
46
|
+
* wins; otherwise an impact question on the busiest symbol; otherwise null.
|
|
47
|
+
*/
|
|
48
|
+
export declare function selectStarterPrompt(probe: GraphProbe): StarterPrompt | null;
|
|
49
|
+
/** A short or generic name that would make an unconvincing starter prompt. */
|
|
50
|
+
export declare function isNoiseName(name: string): boolean;
|
|
51
|
+
/** Test/fixture/build files — never the source or sink of the manufactured moment. */
|
|
52
|
+
export declare function isUninterestingFile(file: string): boolean;
|
|
53
|
+
/** Build a `GraphProbe` over a live SpecShip graph. */
|
|
54
|
+
export declare function realProbe(cg: SpecShip): GraphProbe;
|
|
55
|
+
/** Generate the starter prompt for a live project, or null if none fits. */
|
|
56
|
+
export declare function generateStarterPrompt(cg: SpecShip): StarterPrompt | null;
|
|
57
|
+
//# sourceMappingURL=starter-prompt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"starter-prompt.d.ts","sourceRoot":"","sources":["../../src/activation/starter-prompt.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,UAAU,CAAC;AAGzC,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,GAAG,QAAQ,CAAC;IACxB,mDAAmD;IACnD,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,CAAC,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,UAAU;IACzB,kFAAkF;IAClF,eAAe,IAAI,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACzD,6EAA6E;IAC7E,SAAS,CAAC,KAAK,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG;QAChD,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,MAAM,EAAE,CAAC;QAChB,WAAW,EAAE,OAAO,CAAC;KACtB,GAAG,IAAI,CAAC;IACT,mEAAmE;IACnE,cAAc,IAAI;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;CACzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,UAAU,GAAG,aAAa,GAAG,IAAI,CAiB3E;AAiBD,8EAA8E;AAC9E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEjD;AAED,sFAAsF;AACtF,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAKzD;AAcD,uDAAuD;AACvD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,UAAU,CAqFlD;AAED,4EAA4E;AAC5E,wBAAgB,qBAAqB,CAAC,EAAE,EAAE,QAAQ,GAAG,aAAa,GAAG,IAAI,CAExE"}
|