@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,148 @@
|
|
|
1
|
+
<#
|
|
2
|
+
.SYNOPSIS
|
|
3
|
+
Offline / air-gapped install of SpecShip from this source folder (Windows).
|
|
4
|
+
|
|
5
|
+
.DESCRIPTION
|
|
6
|
+
Assumes the client workstation has:
|
|
7
|
+
- Node.js (>=18 <25) and npm on PATH
|
|
8
|
+
- npm configured against a registry it CAN reach (e.g. a private mirror)
|
|
9
|
+
- No git, no public GitHub access required
|
|
10
|
+
|
|
11
|
+
Does NOT call git, does NOT download anything from github.com. Dependencies
|
|
12
|
+
are pulled from whatever registry npm is already pointed at.
|
|
13
|
+
|
|
14
|
+
.PARAMETER SkipClaude
|
|
15
|
+
Skip wiring Claude Code at the end.
|
|
16
|
+
|
|
17
|
+
.PARAMETER Undo
|
|
18
|
+
Unlink the global `specship` symlink and exit.
|
|
19
|
+
|
|
20
|
+
.EXAMPLE
|
|
21
|
+
.\scripts\offline-install.ps1
|
|
22
|
+
.\scripts\offline-install.ps1 -SkipClaude
|
|
23
|
+
.\scripts\offline-install.ps1 -Undo
|
|
24
|
+
#>
|
|
25
|
+
[CmdletBinding()]
|
|
26
|
+
param(
|
|
27
|
+
[switch]$SkipClaude,
|
|
28
|
+
[switch]$Undo
|
|
29
|
+
)
|
|
30
|
+
|
|
31
|
+
$ErrorActionPreference = 'Stop'
|
|
32
|
+
|
|
33
|
+
# Resolve repo root from this script's location (no git).
|
|
34
|
+
$Repo = (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
|
|
35
|
+
Set-Location $Repo
|
|
36
|
+
|
|
37
|
+
$Pkg = node -p "require('./package.json').name"
|
|
38
|
+
$Version = node -p "require('./package.json').version"
|
|
39
|
+
|
|
40
|
+
if ($Undo) {
|
|
41
|
+
Write-Host "[offline-install] unlinking $Pkg"
|
|
42
|
+
& npm unlink -g $Pkg 2>$null
|
|
43
|
+
Write-Host "[offline-install] done"
|
|
44
|
+
exit 0
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
# --- Node version gate ---------------------------------------------------
|
|
48
|
+
# Tighter than package.json engines (>=18 <25): the runtime needs node:sqlite
|
|
49
|
+
# (Node 22.5+) AND that SQLite must have FTS5 compiled in. SpecShip's own
|
|
50
|
+
# release bundle pins v24.16.0 for that reason; older Node builds either lack
|
|
51
|
+
# node:sqlite entirely or ship SQLite without FTS5.
|
|
52
|
+
$NodeMajor = [int](node -p "process.versions.node.split('.')[0]")
|
|
53
|
+
$NodeMinor = [int](node -p "process.versions.node.split('.')[1]")
|
|
54
|
+
if ($NodeMajor -lt 22 -or
|
|
55
|
+
($NodeMajor -eq 22 -and $NodeMinor -lt 5) -or
|
|
56
|
+
$NodeMajor -ge 25) {
|
|
57
|
+
$nv = node --version
|
|
58
|
+
Write-Error "[offline-install] Node $nv is unsupported. Requires >=22.5 <25 (Node 24.x recommended)."
|
|
59
|
+
exit 1
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
# --- FTS5 capability probe ---------------------------------------------
|
|
63
|
+
# Fail fast with a clear remediation message instead of letting `specship init`
|
|
64
|
+
# die with a cryptic "no such module: fts5" deep inside indexing. node:sqlite
|
|
65
|
+
# is present from 22.5+, but FTS5 is only enabled in newer Node builds —
|
|
66
|
+
# Node 22.x typically ships SQLite without it.
|
|
67
|
+
$probeScript = @'
|
|
68
|
+
try {
|
|
69
|
+
const { DatabaseSync } = require('node:sqlite');
|
|
70
|
+
const db = new DatabaseSync(':memory:');
|
|
71
|
+
db.exec("CREATE VIRTUAL TABLE t USING fts5(x)");
|
|
72
|
+
console.log('OK');
|
|
73
|
+
} catch (e) {
|
|
74
|
+
console.log('FAIL:' + e.message);
|
|
75
|
+
}
|
|
76
|
+
'@
|
|
77
|
+
$probe = (node -e $probeScript 2>$null)
|
|
78
|
+
if ($probe -eq 'OK') {
|
|
79
|
+
# FTS5 ok
|
|
80
|
+
} elseif ($probe -like 'FAIL:*') {
|
|
81
|
+
$msg = $probe.Substring(5)
|
|
82
|
+
$nv = node --version
|
|
83
|
+
Write-Error @"
|
|
84
|
+
[offline-install] SQLite probe failed: $msg
|
|
85
|
+
|
|
86
|
+
SpecShip requires Node.js whose bundled SQLite has FTS5 enabled. Your Node
|
|
87
|
+
($nv) does not. Install Node 24.x and re-run this script. SpecShip's
|
|
88
|
+
release bundle pins v24.16.0 as the known-good version.
|
|
89
|
+
"@
|
|
90
|
+
exit 1
|
|
91
|
+
} else {
|
|
92
|
+
Write-Error "[offline-install] unable to probe node:sqlite. Need Node >=22.5 (24.x recommended)."
|
|
93
|
+
exit 1
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
$Registry = npm config get registry
|
|
97
|
+
Write-Host "[offline-install] repo: $Repo"
|
|
98
|
+
Write-Host "[offline-install] package: $Pkg@$Version"
|
|
99
|
+
Write-Host "[offline-install] node: $(node --version)"
|
|
100
|
+
Write-Host "[offline-install] registry: $Registry"
|
|
101
|
+
|
|
102
|
+
# --- install deps --------------------------------------------------------
|
|
103
|
+
if (Test-Path 'package-lock.json') {
|
|
104
|
+
Write-Host "[offline-install] npm ci"
|
|
105
|
+
& npm ci
|
|
106
|
+
} else {
|
|
107
|
+
Write-Host "[offline-install] npm install"
|
|
108
|
+
& npm install
|
|
109
|
+
}
|
|
110
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
111
|
+
|
|
112
|
+
# --- build ---------------------------------------------------------------
|
|
113
|
+
Write-Host "[offline-install] npm run build"
|
|
114
|
+
& npm run build
|
|
115
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
116
|
+
|
|
117
|
+
# --- link as global specship -------------------------------------------
|
|
118
|
+
Write-Host "[offline-install] npm link"
|
|
119
|
+
& npm link
|
|
120
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
121
|
+
|
|
122
|
+
# Avoid PS 7+ null-conditional (?.) — locked-down Windows clients often ship
|
|
123
|
+
# only Windows PowerShell 5.1, where ?. fails to parse.
|
|
124
|
+
$cmd = Get-Command specship -ErrorAction SilentlyContinue
|
|
125
|
+
$Linked = if ($cmd) { $cmd.Source } else { '(not on PATH)' }
|
|
126
|
+
Write-Host "[offline-install] specship -> $Linked"
|
|
127
|
+
|
|
128
|
+
# --- wire Claude Code (non-interactive) ---------------------------------
|
|
129
|
+
# Invoke the just-built binary directly instead of relying on `specship` being
|
|
130
|
+
# visible on PATH in this PowerShell session — `npm link`'s shim may not be
|
|
131
|
+
# picked up until the user opens a new shell.
|
|
132
|
+
if (-not $SkipClaude) {
|
|
133
|
+
Write-Host "[offline-install] wiring Claude Code"
|
|
134
|
+
& node (Join-Path $Repo 'dist/bin/specship.js') install --target claude -y
|
|
135
|
+
if ($LASTEXITCODE -ne 0) { exit $LASTEXITCODE }
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
Write-Host ""
|
|
139
|
+
Write-Host "[OK] SpecShip $Version installed offline from source."
|
|
140
|
+
Write-Host " binary: $Linked"
|
|
141
|
+
Write-Host " source: $Repo"
|
|
142
|
+
Write-Host ""
|
|
143
|
+
Write-Host "Next:"
|
|
144
|
+
Write-Host " specship --version"
|
|
145
|
+
Write-Host " cd <your-project>; specship init; specship index"
|
|
146
|
+
Write-Host ""
|
|
147
|
+
Write-Host "To uninstall:"
|
|
148
|
+
Write-Host " .\scripts\offline-install.ps1 -Undo"
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Offline / air-gapped install of SpecShip from this source folder.
|
|
4
|
+
#
|
|
5
|
+
# Assumes the client workstation has:
|
|
6
|
+
# - Node.js (>=18 <25) and npm on PATH
|
|
7
|
+
# - npm configured against a registry it CAN reach (e.g. a private mirror)
|
|
8
|
+
# - No git, no public GitHub access required
|
|
9
|
+
#
|
|
10
|
+
# Does NOT call git, does NOT download anything from github.com. Dependencies
|
|
11
|
+
# are pulled from whatever registry npm is already pointed at.
|
|
12
|
+
#
|
|
13
|
+
# Usage:
|
|
14
|
+
# ./scripts/offline-install.sh # build, link, wire Claude Code
|
|
15
|
+
# ./scripts/offline-install.sh --skip-claude # build + link only
|
|
16
|
+
# ./scripts/offline-install.sh --undo # unlink the global symlink
|
|
17
|
+
#
|
|
18
|
+
# After install: `specship --version` should print the package.json version.
|
|
19
|
+
|
|
20
|
+
set -euo pipefail
|
|
21
|
+
|
|
22
|
+
cd "$(dirname "$0")/.."
|
|
23
|
+
REPO="$(pwd)"
|
|
24
|
+
|
|
25
|
+
PKG=$(node -p "require('./package.json').name")
|
|
26
|
+
VERSION=$(node -p "require('./package.json').version")
|
|
27
|
+
|
|
28
|
+
# --- undo path ---------------------------------------------------------------
|
|
29
|
+
if [ "${1:-}" = "--undo" ]; then
|
|
30
|
+
echo "[offline-install] unlinking ${PKG}"
|
|
31
|
+
npm unlink -g "${PKG}" >/dev/null 2>&1 || true
|
|
32
|
+
echo "[offline-install] done"
|
|
33
|
+
exit 0
|
|
34
|
+
fi
|
|
35
|
+
|
|
36
|
+
SKIP_CLAUDE=0
|
|
37
|
+
[ "${1:-}" = "--skip-claude" ] && SKIP_CLAUDE=1
|
|
38
|
+
|
|
39
|
+
# --- Node version gate -------------------------------------------------------
|
|
40
|
+
# Tighter than package.json engines (>=18 <25): the runtime needs node:sqlite
|
|
41
|
+
# (Node 22.5+) AND that SQLite must have FTS5 compiled in. SpecShip's own
|
|
42
|
+
# release bundle pins v24.16.0 for that reason; older Node builds either lack
|
|
43
|
+
# node:sqlite entirely or ship SQLite without FTS5.
|
|
44
|
+
NODE_MAJOR=$(node -p "process.versions.node.split('.')[0]")
|
|
45
|
+
NODE_MINOR=$(node -p "process.versions.node.split('.')[1]")
|
|
46
|
+
if [ "$NODE_MAJOR" -lt 22 ] \
|
|
47
|
+
|| { [ "$NODE_MAJOR" -eq 22 ] && [ "$NODE_MINOR" -lt 5 ]; } \
|
|
48
|
+
|| [ "$NODE_MAJOR" -ge 25 ]; then
|
|
49
|
+
echo "[offline-install] error: Node $(node --version) is unsupported. Requires >=22.5 <25 (Node 24.x recommended)." >&2
|
|
50
|
+
exit 1
|
|
51
|
+
fi
|
|
52
|
+
|
|
53
|
+
# --- FTS5 capability probe ---------------------------------------------------
|
|
54
|
+
# Fail fast with a clear remediation message instead of letting `specship init`
|
|
55
|
+
# die with a cryptic "no such module: fts5" deep inside indexing. node:sqlite
|
|
56
|
+
# is present from 22.5+, but FTS5 is only enabled in newer Node builds —
|
|
57
|
+
# Node 22.x typically ships SQLite without it.
|
|
58
|
+
PROBE=$(node -e "
|
|
59
|
+
try {
|
|
60
|
+
const { DatabaseSync } = require('node:sqlite');
|
|
61
|
+
const db = new DatabaseSync(':memory:');
|
|
62
|
+
db.exec('CREATE VIRTUAL TABLE t USING fts5(x)');
|
|
63
|
+
console.log('OK');
|
|
64
|
+
} catch (e) {
|
|
65
|
+
console.log('FAIL:' + e.message);
|
|
66
|
+
}
|
|
67
|
+
" 2>/dev/null)
|
|
68
|
+
case "$PROBE" in
|
|
69
|
+
OK) ;;
|
|
70
|
+
FAIL:*)
|
|
71
|
+
cat >&2 <<EOF
|
|
72
|
+
[offline-install] error: SQLite probe failed: ${PROBE#FAIL:}
|
|
73
|
+
|
|
74
|
+
SpecShip requires Node.js whose bundled SQLite has FTS5 enabled. Your Node
|
|
75
|
+
($(node --version)) does not. Install Node 24.x and re-run:
|
|
76
|
+
|
|
77
|
+
nvm install 24 && nvm use 24
|
|
78
|
+
./scripts/offline-install.sh
|
|
79
|
+
|
|
80
|
+
(SpecShip's release bundle pins v24.16.0 as the known-good version.)
|
|
81
|
+
EOF
|
|
82
|
+
exit 1
|
|
83
|
+
;;
|
|
84
|
+
*)
|
|
85
|
+
echo "[offline-install] error: unable to probe node:sqlite. Need Node >=22.5 (24.x recommended)." >&2
|
|
86
|
+
exit 1
|
|
87
|
+
;;
|
|
88
|
+
esac
|
|
89
|
+
|
|
90
|
+
echo "[offline-install] repo: ${REPO}"
|
|
91
|
+
echo "[offline-install] package: ${PKG}@${VERSION}"
|
|
92
|
+
echo "[offline-install] node: $(node --version)"
|
|
93
|
+
echo "[offline-install] registry: $(npm config get registry)"
|
|
94
|
+
|
|
95
|
+
# --- install deps (offline-friendly: respects whatever registry npm is on) ---
|
|
96
|
+
#
|
|
97
|
+
# --ignore-scripts skips native-module postinstalls (notably better-sqlite3,
|
|
98
|
+
# whose node-gyp rebuild needs a C toolchain that an air-gapped workstation
|
|
99
|
+
# usually doesn't have). SpecShip treats better-sqlite3 as optional anyway —
|
|
100
|
+
# without it the wasm SQLite path takes over, which is what the offline-
|
|
101
|
+
# install flow expects.
|
|
102
|
+
if [ -f package-lock.json ]; then
|
|
103
|
+
echo "[offline-install] npm ci --ignore-scripts"
|
|
104
|
+
npm ci --ignore-scripts
|
|
105
|
+
else
|
|
106
|
+
echo "[offline-install] npm install --ignore-scripts"
|
|
107
|
+
npm install --ignore-scripts
|
|
108
|
+
fi
|
|
109
|
+
|
|
110
|
+
# --- build -------------------------------------------------------------------
|
|
111
|
+
# Skip the build when this is a pre-compiled drop (no tsconfig.json + a
|
|
112
|
+
# populated dist/ already on disk). The release tarball is shipped pre-built;
|
|
113
|
+
# only a source checkout has tsconfig.json and needs `npm run build`.
|
|
114
|
+
if [ -f tsconfig.json ]; then
|
|
115
|
+
echo "[offline-install] npm run build"
|
|
116
|
+
npm run build
|
|
117
|
+
else
|
|
118
|
+
echo "[offline-install] skipping build (pre-compiled dist/ found)"
|
|
119
|
+
fi
|
|
120
|
+
|
|
121
|
+
# --- link as global specship ------------------------------------------------
|
|
122
|
+
echo "[offline-install] npm link"
|
|
123
|
+
npm link
|
|
124
|
+
|
|
125
|
+
LINKED=$(command -v specship || echo "(not on PATH)")
|
|
126
|
+
echo "[offline-install] specship -> ${LINKED}"
|
|
127
|
+
|
|
128
|
+
# --- wire Claude Code (non-interactive) --------------------------------------
|
|
129
|
+
# Invoke the just-built binary directly instead of relying on `specship` being
|
|
130
|
+
# visible on PATH in this shell session — `npm link`'s shim may not be picked
|
|
131
|
+
# up until the user opens a new shell.
|
|
132
|
+
if [ "$SKIP_CLAUDE" -eq 0 ]; then
|
|
133
|
+
echo "[offline-install] wiring Claude Code"
|
|
134
|
+
node "$REPO/dist/bin/specship.js" install --target claude -y
|
|
135
|
+
fi
|
|
136
|
+
|
|
137
|
+
cat <<EOF
|
|
138
|
+
|
|
139
|
+
✓ SpecShip ${VERSION} installed offline from source.
|
|
140
|
+
binary: ${LINKED}
|
|
141
|
+
source: ${REPO}
|
|
142
|
+
|
|
143
|
+
Next:
|
|
144
|
+
specship --version
|
|
145
|
+
cd <your-project> && specship init && specship index
|
|
146
|
+
|
|
147
|
+
To uninstall:
|
|
148
|
+
./scripts/offline-install.sh --undo
|
|
149
|
+
EOF
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
#!/usr/bin/env bash
|
|
2
|
+
#
|
|
3
|
+
# Assemble the npm thin-installer packages from built bundles (esbuild pattern).
|
|
4
|
+
#
|
|
5
|
+
# Produces, under release/npm/:
|
|
6
|
+
# specship-<target>/ one per built bundle — the vendored Node + app, tagged
|
|
7
|
+
# with os/cpu so npm installs only the matching one.
|
|
8
|
+
# main/ the @specship/specship shim package: a tiny bin
|
|
9
|
+
# that execs the matching platform bundle, with every
|
|
10
|
+
# platform package in optionalDependencies.
|
|
11
|
+
#
|
|
12
|
+
# The release pipeline then `npm publish`es each dir. This does NOT touch the
|
|
13
|
+
# repo's package.json — the dev/from-source path keeps working; the *published*
|
|
14
|
+
# main package's shape is generated here.
|
|
15
|
+
#
|
|
16
|
+
# Prereq: run build-bundle.sh for each target first (release/specship-*.tar.gz).
|
|
17
|
+
# Usage: scripts/pack-npm.sh [version] (default: version from package.json)
|
|
18
|
+
set -euo pipefail
|
|
19
|
+
|
|
20
|
+
ROOT="$(cd "$(dirname "$0")/.." && pwd)"
|
|
21
|
+
VERSION="${1:-$(node -p "require('$ROOT/package.json').version")}"
|
|
22
|
+
SCOPE="@specship"
|
|
23
|
+
REL="$ROOT/release"
|
|
24
|
+
NPM="$REL/npm"
|
|
25
|
+
|
|
26
|
+
rm -rf "$NPM"
|
|
27
|
+
mkdir -p "$NPM/main"
|
|
28
|
+
|
|
29
|
+
shopt -s nullglob
|
|
30
|
+
archives=("$REL"/specship-*.tar.gz "$REL"/specship-*.zip)
|
|
31
|
+
[ ${#archives[@]} -gt 0 ] || { echo "[pack-npm] no bundles in $REL — run build-bundle.sh first" >&2; exit 1; }
|
|
32
|
+
|
|
33
|
+
targets=()
|
|
34
|
+
for archive in "${archives[@]}"; do
|
|
35
|
+
fname="$(basename "$archive")"
|
|
36
|
+
case "$fname" in
|
|
37
|
+
*.tar.gz) base="${fname%.tar.gz}" ;; # specship-<target>
|
|
38
|
+
*.zip) base="${fname%.zip}" ;;
|
|
39
|
+
esac
|
|
40
|
+
target="${base#specship-}" # <target>, e.g. darwin-arm64 / win32-x64
|
|
41
|
+
os="${target%-*}" # darwin | linux | win32
|
|
42
|
+
arch="${target##*-}" # arm64 | x64
|
|
43
|
+
pkgdir="$NPM/$base"
|
|
44
|
+
mkdir -p "$pkgdir"
|
|
45
|
+
case "$fname" in
|
|
46
|
+
*.zip)
|
|
47
|
+
tmpx="$(mktemp -d)"
|
|
48
|
+
unzip -q "$archive" -d "$tmpx"
|
|
49
|
+
mv "$tmpx/specship-${target}"/* "$pkgdir"/
|
|
50
|
+
rm -rf "$tmpx"
|
|
51
|
+
nodefile="node.exe"
|
|
52
|
+
;;
|
|
53
|
+
*)
|
|
54
|
+
tar -xzf "$archive" -C "$pkgdir" --strip-components=1
|
|
55
|
+
nodefile="node"
|
|
56
|
+
;;
|
|
57
|
+
esac
|
|
58
|
+
VERSION="$VERSION" SCOPE="$SCOPE" TARGET="$target" OSV="$os" ARCHV="$arch" NODEFILE="$nodefile" \
|
|
59
|
+
node -e '
|
|
60
|
+
const fs=require("fs");
|
|
61
|
+
fs.writeFileSync(process.argv[1], JSON.stringify({
|
|
62
|
+
name: `${process.env.SCOPE}/specship-${process.env.TARGET}`,
|
|
63
|
+
version: process.env.VERSION,
|
|
64
|
+
description: `SpecShip self-contained bundle for ${process.env.TARGET}`,
|
|
65
|
+
os: [process.env.OSV], cpu: [process.env.ARCHV],
|
|
66
|
+
files: [process.env.NODEFILE, "lib", "bin"],
|
|
67
|
+
license: "MIT"
|
|
68
|
+
}, null, 2) + "\n");
|
|
69
|
+
' "$pkgdir/package.json"
|
|
70
|
+
targets+=("$target")
|
|
71
|
+
echo "[pack-npm] ${SCOPE}/specship-${target}@${VERSION}"
|
|
72
|
+
done
|
|
73
|
+
|
|
74
|
+
# Main shim package.
|
|
75
|
+
# npm-shim.js CLI/MCP launcher (execs the bundled Node) — the `bin`.
|
|
76
|
+
# npm-sdk.js programmatic/embedded entry (#354): re-exports the installed
|
|
77
|
+
# platform bundle's compiled library — the `main`.
|
|
78
|
+
# dist/ the .d.ts tree only (types). The runtime .js stays in the
|
|
79
|
+
# per-platform bundle so its deps aren't duplicated here.
|
|
80
|
+
cp "$ROOT/scripts/npm-shim.js" "$NPM/main/npm-shim.js"
|
|
81
|
+
cp "$ROOT/scripts/npm-sdk.js" "$NPM/main/npm-sdk.js"
|
|
82
|
+
[ -f "$ROOT/README.md" ] && cp "$ROOT/README.md" "$NPM/main/README.md"
|
|
83
|
+
|
|
84
|
+
# Ship the type declarations so `types`/`exports.types` resolve. Built from this
|
|
85
|
+
# same release, so they can't skew from the runtime npm-sdk.js re-exports.
|
|
86
|
+
[ -f "$ROOT/dist/index.d.ts" ] || ( echo "[pack-npm] building dist for .d.ts" >&2 && cd "$ROOT" && npm run build >/dev/null )
|
|
87
|
+
ROOT="$ROOT" DEST="$NPM/main" node -e '
|
|
88
|
+
const fs=require("fs"), path=require("path");
|
|
89
|
+
const src=path.join(process.env.ROOT,"dist"), dest=path.join(process.env.DEST,"dist");
|
|
90
|
+
fs.cpSync(src, dest, { recursive:true, filter(s){
|
|
91
|
+
try { return fs.statSync(s).isDirectory() || s.endsWith(".d.ts"); } catch (e) { return false; }
|
|
92
|
+
}});
|
|
93
|
+
'
|
|
94
|
+
|
|
95
|
+
VERSION="$VERSION" SCOPE="$SCOPE" TARGETS="${targets[*]}" \
|
|
96
|
+
node -e '
|
|
97
|
+
const fs=require("fs");
|
|
98
|
+
const opt={};
|
|
99
|
+
for (const t of process.env.TARGETS.split(/\s+/).filter(Boolean))
|
|
100
|
+
opt[`${process.env.SCOPE}/specship-${t}`]=process.env.VERSION;
|
|
101
|
+
fs.writeFileSync(process.argv[1], JSON.stringify({
|
|
102
|
+
name: `${process.env.SCOPE}/specship`,
|
|
103
|
+
version: process.env.VERSION,
|
|
104
|
+
description: "Local-first code intelligence for AI agents (MCP). Self-contained — bundles its own runtime.",
|
|
105
|
+
bin: { specship: "npm-shim.js" },
|
|
106
|
+
main: "npm-sdk.js",
|
|
107
|
+
types: "dist/index.d.ts",
|
|
108
|
+
exports: {
|
|
109
|
+
".": { types: "./dist/index.d.ts", default: "./npm-sdk.js" },
|
|
110
|
+
"./package.json": "./package.json"
|
|
111
|
+
},
|
|
112
|
+
optionalDependencies: opt,
|
|
113
|
+
files: ["npm-shim.js","npm-sdk.js","dist","README.md"],
|
|
114
|
+
license: "MIT"
|
|
115
|
+
}, null, 2) + "\n");
|
|
116
|
+
' "$NPM/main/package.json"
|
|
117
|
+
|
|
118
|
+
echo "[pack-npm] ${SCOPE}/specship@${VERSION} (${#targets[@]} platform packages in optionalDependencies)"
|
|
119
|
+
echo "[pack-npm] output: $NPM"
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Promote `## [Unreleased]` content into `## [<version>]` in CHANGELOG.md
|
|
4
|
+
* so the release.yml workflow's `extract-release-notes.mjs <version>` call
|
|
5
|
+
* picks up everything that landed since the last release.
|
|
6
|
+
*
|
|
7
|
+
* **Why this exists:** the release workflow used to do a literal
|
|
8
|
+
* `extract-release-notes.mjs <version>` lookup with an `[Unreleased]`
|
|
9
|
+
* fallback. The fallback only triggers if the `[<version>]` block
|
|
10
|
+
* doesn't exist at all — and in practice maintainers sometimes had a
|
|
11
|
+
* sparse `[<version>]` block pre-populated (e.g. one early fix
|
|
12
|
+
* documented before the rest of the work landed). The workflow then
|
|
13
|
+
* extracted that sparse block, ignoring the much larger `[Unreleased]`
|
|
14
|
+
* section above it — so the published release notes were missing most
|
|
15
|
+
* of what shipped. See v0.9.5 for the canonical post-mortem.
|
|
16
|
+
*
|
|
17
|
+
* **What it does**, idempotently:
|
|
18
|
+
*
|
|
19
|
+
* Case A — `[<version>]` does not exist yet:
|
|
20
|
+
* Rename the `[Unreleased]` header to `[<version>] - <YYYY-MM-DD>`
|
|
21
|
+
* and add a fresh empty `## [Unreleased]` block above it. This is
|
|
22
|
+
* the common case.
|
|
23
|
+
*
|
|
24
|
+
* Case B — `[<version>]` exists AND `[Unreleased]` has content:
|
|
25
|
+
* Merge `[Unreleased]`'s sub-sections (### Added / ### Fixed /
|
|
26
|
+
* ### Changed / ### Removed / ### Deprecated / ### Security) into
|
|
27
|
+
* the corresponding sub-sections of `[<version>]`. Unmatched
|
|
28
|
+
* sub-sections are appended to `[<version>]`. The `[Unreleased]`
|
|
29
|
+
* block is then emptied.
|
|
30
|
+
*
|
|
31
|
+
* Case C — `[Unreleased]` has no content:
|
|
32
|
+
* No-op. Exit 0. Re-runs of the workflow are safe.
|
|
33
|
+
*
|
|
34
|
+
* **Where the date comes from:** for Case A, `<YYYY-MM-DD>` is the
|
|
35
|
+
* UTC date at run time. Matches the existing CHANGELOG convention.
|
|
36
|
+
*
|
|
37
|
+
* **Usage:**
|
|
38
|
+
*
|
|
39
|
+
* node scripts/prepare-release.mjs # reads version from package.json
|
|
40
|
+
* node scripts/prepare-release.mjs 1.2.3 # explicit version
|
|
41
|
+
*
|
|
42
|
+
* **Output:**
|
|
43
|
+
*
|
|
44
|
+
* Writes CHANGELOG.md in place. Prints a summary line to stdout
|
|
45
|
+
* like `prepare-release: 0.9.5 — promoted 6 Unreleased entries`.
|
|
46
|
+
* Exits non-zero on parse failures.
|
|
47
|
+
*/
|
|
48
|
+
|
|
49
|
+
import { readFileSync, writeFileSync } from 'node:fs';
|
|
50
|
+
import { resolve } from 'node:path';
|
|
51
|
+
|
|
52
|
+
const CHANGELOG_PATH = resolve(process.cwd(), 'CHANGELOG.md');
|
|
53
|
+
|
|
54
|
+
function readPackageVersion() {
|
|
55
|
+
const pkg = JSON.parse(readFileSync(resolve(process.cwd(), 'package.json'), 'utf8'));
|
|
56
|
+
if (!pkg.version) throw new Error('package.json has no "version" field');
|
|
57
|
+
return pkg.version;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
function todayUtcIsoDate() {
|
|
61
|
+
// YYYY-MM-DD in UTC. Matches the CHANGELOG's existing convention
|
|
62
|
+
// (the existing dated entries don't disclose a timezone, but UTC is
|
|
63
|
+
// stable across runners and is what the workflow's runner produces
|
|
64
|
+
// by default anyway).
|
|
65
|
+
return new Date().toISOString().slice(0, 10);
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
/**
|
|
69
|
+
* Split the CHANGELOG into a header preface + an ordered list of
|
|
70
|
+
* version blocks `{ header, body[] }`, preserving line content
|
|
71
|
+
* verbatim so we can re-join without surprises.
|
|
72
|
+
*/
|
|
73
|
+
function parseChangelog(text) {
|
|
74
|
+
const lines = text.split('\n');
|
|
75
|
+
const versionHeaderRe = /^## \[([^\]]+)\](?:\s+-\s+(.+))?\s*$/;
|
|
76
|
+
const preface = [];
|
|
77
|
+
const blocks = []; // { header: string, name: string, body: string[] }
|
|
78
|
+
let cur = null;
|
|
79
|
+
for (const line of lines) {
|
|
80
|
+
const m = line.match(versionHeaderRe);
|
|
81
|
+
if (m) {
|
|
82
|
+
if (cur) blocks.push(cur);
|
|
83
|
+
cur = { header: line, name: m[1], date: m[2] ?? null, body: [] };
|
|
84
|
+
} else if (cur) {
|
|
85
|
+
cur.body.push(line);
|
|
86
|
+
} else {
|
|
87
|
+
preface.push(line);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (cur) blocks.push(cur);
|
|
91
|
+
return { preface, blocks };
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
function joinChangelog({ preface, blocks }) {
|
|
95
|
+
const parts = [preface.join('\n')];
|
|
96
|
+
for (const b of blocks) {
|
|
97
|
+
// Reconstruct: header + body. The block body INCLUDES the blank
|
|
98
|
+
// line after the header (it was captured verbatim).
|
|
99
|
+
parts.push([b.header, ...b.body].join('\n'));
|
|
100
|
+
}
|
|
101
|
+
return parts.join('\n');
|
|
102
|
+
}
|
|
103
|
+
|
|
104
|
+
/**
|
|
105
|
+
* Split a block body into ordered sub-sections keyed by their
|
|
106
|
+
* `### Heading`. Lines before the first `### Heading` go in
|
|
107
|
+
* `leading`. Preserves the original (line-array) body inside each
|
|
108
|
+
* sub-section so we can splice cleanly when merging.
|
|
109
|
+
*/
|
|
110
|
+
function splitSubsections(body) {
|
|
111
|
+
const subsectionRe = /^### (\w+)\s*$/;
|
|
112
|
+
const leading = [];
|
|
113
|
+
const subs = []; // { heading: 'Added' | 'Fixed' | …, headerLine: string, body: string[] }
|
|
114
|
+
let cur = null;
|
|
115
|
+
for (const line of body) {
|
|
116
|
+
const m = line.match(subsectionRe);
|
|
117
|
+
if (m) {
|
|
118
|
+
if (cur) subs.push(cur);
|
|
119
|
+
cur = { heading: m[1], headerLine: line, body: [] };
|
|
120
|
+
} else if (cur) {
|
|
121
|
+
cur.body.push(line);
|
|
122
|
+
} else {
|
|
123
|
+
leading.push(line);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
if (cur) subs.push(cur);
|
|
127
|
+
return { leading, subs };
|
|
128
|
+
}
|
|
129
|
+
|
|
130
|
+
function rebuildBody({ leading, subs }) {
|
|
131
|
+
const parts = [];
|
|
132
|
+
if (leading.length) parts.push(leading.join('\n'));
|
|
133
|
+
for (const s of subs) {
|
|
134
|
+
parts.push([s.headerLine, ...s.body].join('\n'));
|
|
135
|
+
}
|
|
136
|
+
return parts.join('\n').split('\n');
|
|
137
|
+
}
|
|
138
|
+
|
|
139
|
+
/**
|
|
140
|
+
* Return true when the block has any meaningful entries (a bullet line
|
|
141
|
+
* starting with `-`, `*`, or a digit) — vs. being empty / just
|
|
142
|
+
* whitespace / just sub-section headers with nothing under them.
|
|
143
|
+
*/
|
|
144
|
+
function blockHasContent(body) {
|
|
145
|
+
for (const line of body) {
|
|
146
|
+
if (/^\s*([-*]|\d+\.)\s+/.test(line)) return true;
|
|
147
|
+
}
|
|
148
|
+
return false;
|
|
149
|
+
}
|
|
150
|
+
|
|
151
|
+
/**
|
|
152
|
+
* Trim trailing blank lines from an array of lines, then return.
|
|
153
|
+
* Keeps the output tidy when merging.
|
|
154
|
+
*/
|
|
155
|
+
function trimTrailingBlank(arr) {
|
|
156
|
+
let i = arr.length;
|
|
157
|
+
while (i > 0 && /^\s*$/.test(arr[i - 1])) i--;
|
|
158
|
+
return arr.slice(0, i);
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function main() {
|
|
162
|
+
const versionArg = process.argv[2];
|
|
163
|
+
const version = versionArg || readPackageVersion();
|
|
164
|
+
|
|
165
|
+
const text = readFileSync(CHANGELOG_PATH, 'utf8');
|
|
166
|
+
const parsed = parseChangelog(text);
|
|
167
|
+
|
|
168
|
+
const unrelIdx = parsed.blocks.findIndex((b) => b.name === 'Unreleased');
|
|
169
|
+
const verIdx = parsed.blocks.findIndex((b) => b.name === version);
|
|
170
|
+
|
|
171
|
+
if (unrelIdx === -1) {
|
|
172
|
+
console.log(`prepare-release: no [Unreleased] block — nothing to do`);
|
|
173
|
+
return;
|
|
174
|
+
}
|
|
175
|
+
|
|
176
|
+
const unrel = parsed.blocks[unrelIdx];
|
|
177
|
+
if (!blockHasContent(unrel.body)) {
|
|
178
|
+
console.log(`prepare-release: [Unreleased] is empty — nothing to do`);
|
|
179
|
+
return;
|
|
180
|
+
}
|
|
181
|
+
|
|
182
|
+
if (verIdx === -1) {
|
|
183
|
+
// Case A — promote Unreleased → [version].
|
|
184
|
+
const today = todayUtcIsoDate();
|
|
185
|
+
const promoted = {
|
|
186
|
+
header: `## [${version}] - ${today}`,
|
|
187
|
+
name: version,
|
|
188
|
+
date: today,
|
|
189
|
+
body: trimTrailingBlank(unrel.body).concat(['']), // single trailing blank
|
|
190
|
+
};
|
|
191
|
+
const emptied = {
|
|
192
|
+
header: `## [Unreleased]`,
|
|
193
|
+
name: 'Unreleased',
|
|
194
|
+
date: null,
|
|
195
|
+
body: ['', ''], // two blank lines for the next round of entries
|
|
196
|
+
};
|
|
197
|
+
parsed.blocks.splice(unrelIdx, 1, emptied, promoted);
|
|
198
|
+
const next = joinChangelog(parsed);
|
|
199
|
+
writeFileSync(CHANGELOG_PATH, appendLinkRef(next, version));
|
|
200
|
+
console.log(`prepare-release: ${version} — renamed [Unreleased] to [${version}] - ${today}`);
|
|
201
|
+
return;
|
|
202
|
+
}
|
|
203
|
+
|
|
204
|
+
// Case B — merge Unreleased sub-sections into the existing
|
|
205
|
+
// [version] sub-sections. New sub-section headings encountered in
|
|
206
|
+
// Unreleased that don't exist in [version] get appended.
|
|
207
|
+
const ver = parsed.blocks[verIdx];
|
|
208
|
+
const unrelSubs = splitSubsections(unrel.body);
|
|
209
|
+
const verSubs = splitSubsections(ver.body);
|
|
210
|
+
|
|
211
|
+
let merged = 0;
|
|
212
|
+
for (const us of unrelSubs.subs) {
|
|
213
|
+
const target = verSubs.subs.find((s) => s.heading === us.heading);
|
|
214
|
+
const usBody = trimTrailingBlank(us.body);
|
|
215
|
+
if (usBody.length === 0) continue;
|
|
216
|
+
if (target) {
|
|
217
|
+
// Append Unreleased's entries to the end of the version's matching
|
|
218
|
+
// sub-section, keeping their original ordering. Insert a separating
|
|
219
|
+
// blank line if the existing sub-section doesn't already end in one.
|
|
220
|
+
const existing = trimTrailingBlank(target.body);
|
|
221
|
+
const sep = existing.length && !/^\s*$/.test(existing[existing.length - 1]) ? [''] : [];
|
|
222
|
+
target.body = existing.concat(sep, usBody, ['']);
|
|
223
|
+
} else {
|
|
224
|
+
// Append the whole sub-section to the end.
|
|
225
|
+
verSubs.subs.push({
|
|
226
|
+
heading: us.heading,
|
|
227
|
+
headerLine: us.headerLine,
|
|
228
|
+
body: usBody.concat(['']),
|
|
229
|
+
});
|
|
230
|
+
}
|
|
231
|
+
merged += usBody.filter((l) => /^\s*([-*]|\d+\.)\s+/.test(l)).length;
|
|
232
|
+
}
|
|
233
|
+
|
|
234
|
+
ver.body = rebuildBody(verSubs);
|
|
235
|
+
// Empty out Unreleased.
|
|
236
|
+
unrel.body = ['', ''];
|
|
237
|
+
|
|
238
|
+
const merged_text = joinChangelog(parsed);
|
|
239
|
+
writeFileSync(CHANGELOG_PATH, appendLinkRef(merged_text, version));
|
|
240
|
+
console.log(`prepare-release: ${version} — merged ${merged} Unreleased entries into existing [${version}] block`);
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Append a `[X.Y.Z]: https://github.com/selvakumarEsra/specship/releases/tag/vX.Y.Z`
|
|
245
|
+
* link reference at the end of the file IF one doesn't already exist. The
|
|
246
|
+
* link ref is what makes `## [X.Y.Z]` heading text auto-link to its tag in
|
|
247
|
+
* GitHub's renderer; without it the heading still renders, just unlinked.
|
|
248
|
+
*
|
|
249
|
+
* Idempotent. The existing CHANGELOG mixes link refs scattered through the
|
|
250
|
+
* file and a sorted block at the bottom — we just append at the very end,
|
|
251
|
+
* which CommonMark accepts regardless.
|
|
252
|
+
*/
|
|
253
|
+
function appendLinkRef(text, version) {
|
|
254
|
+
const refLine = `[${version}]: https://github.com/selvakumarEsra/specship/releases/tag/v${version}`;
|
|
255
|
+
// Already there? Look for a line that EQUALS this (anywhere in the file)
|
|
256
|
+
// to keep idempotency robust against the scattered-vs-block layout.
|
|
257
|
+
const lines = text.split('\n');
|
|
258
|
+
if (lines.some((l) => l.trim() === refLine)) return text;
|
|
259
|
+
// Append, separated by a blank line from the prior content. Preserve a
|
|
260
|
+
// single trailing newline at EOF.
|
|
261
|
+
const trailingNewline = text.endsWith('\n') ? '' : '\n';
|
|
262
|
+
return text + trailingNewline + refLine + '\n';
|
|
263
|
+
}
|
|
264
|
+
|
|
265
|
+
try {
|
|
266
|
+
main();
|
|
267
|
+
} catch (err) {
|
|
268
|
+
console.error(`prepare-release: ${err?.message ?? err}`);
|
|
269
|
+
process.exit(1);
|
|
270
|
+
}
|