@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,4 @@
|
|
|
1
|
+
import{a as gt}from"./chunk-LBXLFPVN.js";import{a as Z}from"./chunk-SCNDZRN2.js";import{a as ut}from"./chunk-G7VZT5KB.js";import{a as xt}from"./chunk-OM7JVWQQ.js";import{a as mt}from"./chunk-SH6UVHQC.js";import{a as _t}from"./chunk-RSZZWGGC.js";import{a as rt,c as lt,d as st}from"./chunk-DSGNOCKQ.js";import{b as dt,c as Y}from"./chunk-B3CWIVBW.js";import"./chunk-W22AVG3N.js";import{a as pt}from"./chunk-4JYHAP7B.js";import{Aa as d,Ga as N,I as F,Ia as M,Ka as p,M as k,N as S,R as K,Ta as C,Ua as q,Va as l,W as V,Wa as u,X as j,Xa as g,Ya as H,Za as nt,aa as L,bb as it,ea as o,gb as z,ib as $,ka as X,lb as h,qa as U,ra as m,sa as _,ta as tt,ua as et,va as O,vb as ot,wa as D,xa as c,ya as r,yb as at,za as a,zb as ct}from"./chunk-MFHO2F2U.js";import"./chunk-Q7L6LLAK.js";function Pt(n){return n>=85?{label:"Excellent",color:"var(--success)"}:n>=70?{label:"Good",color:"var(--node-route)"}:n>=50?{label:"Fair",color:"var(--warn)"}:{label:"Needs work",color:"var(--error)"}}function wt(n){let e=(n.input_tokens||0)+(n.cache_creation_tokens||0)+(n.cache_read_tokens||0);return e>0?(n.cache_read_tokens||0)/e:0}function Mt(n,e){let t=n.toLowerCase();return/grep|call site|every/.test(t)?`Use \`specship_search '${e||"<symbol>"}' --kind call-site\` instead of grep \u2014 it returns just the qualified call sites.`:/read|explain|map|where|how |why |walk|boundaries|module/.test(t)?`Use \`specship_explore --symbol ${e||"<symbol>"} --depth 2\` and summarize callers, callees and linked specs \u2014 avoid re-reading the file.`:/implement/.test(t)&&!/REQ-[A-Z]+-\d+/.test(n)?`Reference the requirement id: \`Implement REQ-\u2026: ${n.slice(0,48)}\u2026\` then plan before editing.`:e?null:`${n} \u2014 name the exact symbol, file or REQ id so it can be resolved structurally.`}function Tt(n){return n.is_specship===1||/specship_/.test(n.tool_name)||/^mcp__/.test(n.tool_name)}function Et(n){return(n.tool_name==="Bash"||n.tool_name==="Grep"||n.tool_name==="Read")&&(n.result_length||0)>3e4}function J(n,e){let t=n.text||"",i=(t.match(/[a-z][a-zA-Z]+[A-Z][a-zA-Z]+/)||[])[0],s=(t.match(/[\w/]+\.(ts|tsx|js|md)/)||[])[0],f=(t.match(/REQ-[A-Z]+-\d+/)||[])[0]||i||s,T=!!f,b=/^(read |grep |look |check |explain |tell me|why |what )/i.test(t.trim()),E=t.length>=45&&!b||t.length>=72,B=e.some(Et),A=e.some(Tt),R=wt(n)>=.5,P=62,I=[];I.push({label:"Names a concrete target",ok:T}),P+=T?12:-10,I.push({label:"Scoped & specific",ok:E}),P+=E?10:-9,I.push({label:"Cache-friendly",ok:R}),P+=R?8:-10,I.push({label:"Structural over brute-force",ok:A||!B}),P+=A||!B?9:-13,P=Math.max(14,Math.min(98,Math.round(P)));let w=[];T||w.push({sev:"warn",text:"Name the exact symbol, file or REQ id so the agent doesn\u2019t have to search for it first."}),E||w.push({sev:"warn",text:"Lead with the concrete change you want rather than an open-ended question."}),B&&!A&&w.push({sev:"error",text:"This turn leaned on Read/grep and pulled a lot of tokens. Ask for a structural query instead.",fix:`specship_explore --symbol ${i||"<name>"} --depth 2`}),R||w.push({sev:"warn",text:"Cache hit was low \u2014 keep a stable prompt prefix and avoid reordering context to reuse the 1h cache."}),w.length===0&&w.push({sev:"info",text:"Well-formed prompt \u2014 specific, scoped and cache-friendly. Nothing to change."});let Q=P<72?Mt(t,f):null,G=Pt(P);return{score:P,label:G.label,color:G.color,factors:I,suggestions:w,rewrite:Q}}function vt(n){return`Prompt quality: ${n.label} (${n.score}/100)
|
|
2
|
+
`+n.suggestions.map(e=>`- ${e.text}${e.fix?` [${e.fix}]`:""}`).join(`
|
|
3
|
+
`)+(n.rewrite?`
|
|
4
|
+
Suggested rewrite: ${n.rewrite}`:"")}var Ot=()=>["/sessions"],Dt=(n,e)=>e.label,ht=(n,e)=>e.id,bt=(n,e)=>e.prompt.id,ft=(n,e)=>e.name;function It(n,e){if(n&1&&(r(0,"app-pill",7),l(1),a()),n&2){let t=p();c("color","var(--node-spec)")("bg","var(--node-spec-soft)"),o(),u(t.session().last_model)}}function zt(n,e){if(n&1&&l(0),n&2){let t=p(),i=p();nt(" \xB7 ",i.fmtClock(t.started_at)," \u2013 ",i.fmtClock(t.ended_at)," (",i.fmtDurationSec(t.started_at,t.ended_at),") ")}}function $t(n,e){if(n&1&&(r(0,"div",10),l(1),m(2,zt,1,3),a()),n&2){let t=e;o(),g("",t.project_path," "),o(),_(t.started_at&&t.ended_at?2:-1)}}function Rt(n,e){n&1&&(r(0,"div",14),l(1,"Loading session\u2026"),a())}function Ft(n,e){if(n&1){let t=N();r(0,"div",15)(1,"div",17),l(2,"Couldn't load session"),a(),r(3,"div",18),l(4),a(),r(5,"button",19),M("click",function(){k(t);let s=p();return S(s.forceRefresh())}),l(6,"Retry"),a()()}if(n&2){let t,i=p();o(4),u((t=i.resource.state().error)==null?null:t.message)}}function qt(n,e){if(n&1&&(r(0,"app-pill",25),d(1,"app-icon",56),l(2),a()),n&2){let t=p();o(),c("size",10),o(),u(t.slashCommand)}}function Bt(n,e){n&1&&(r(0,"app-pill",26),d(1,"app-icon",57),l(2,"subagent"),a()),n&2&&(o(),c("size",10))}function Nt(n,e){if(n&1&&(r(0,"span",31),l(1),a()),n&2){let t=p();o(),u(t.prompt.model)}}function At(n,e){if(n&1&&(r(0,"span",31),l(1),a()),n&2){let t=p(),i=p(2);o(),u(i.fmtDurationMs(t.prompt.durationMs))}}function Vt(n,e){if(n&1&&(r(0,"div",68),d(1,"app-icon",72),r(2,"span",73),l(3),a()()),n&2){let t=e.$implicit;o(),C("color",t.ok?"var(--success)":"var(--warn)"),c("name",t.ok?"check":"minus")("size",13),o(),q("bad",!t.ok),o(),u(t.label)}}function Lt(n,e){if(n&1&&(r(0,"div",76)(1,"code",77),l(2),a(),d(3,"app-copy-btn",50),a()),n&2){let t=p().$implicit;o(2),u(t.fix),o(),c("text",t.fix)}}function Ht(n,e){if(n&1&&(r(0,"div",71),d(1,"span",74),r(2,"div",27)(3,"div",75),l(4),a(),m(5,Lt,4,2,"div",76),a()()),n&2){let t=e.$implicit;o(),C("background",t.sev==="error"?"var(--error)":t.sev==="warn"?"var(--warn)":"var(--success)"),o(3),u(t.text),o(),_(t.fix?5:-1)}}function Qt(n,e){if(n&1&&(r(0,"div",69),l(1,"Suggested rewrite"),a(),r(2,"div",78)(3,"span",79),l(4),a(),d(5,"app-copy-btn",50),a()),n&2){let t=p();o(4),u(t.rewrite),o(),c("text",t.rewrite)}}function Gt(n,e){if(n&1&&(r(0,"div",58)(1,"div",59),d(2,"app-icon",60),r(3,"span",61),l(4,"Prompt quality"),a(),d(5,"span",27),r(6,"span",62),l(7),r(8,"span",63),l(9),a()(),d(10,"app-copy-btn",64),a(),r(11,"div",65),d(12,"app-bar",66),a(),r(13,"div",67),O(14,Vt,4,7,"div",68,Dt),a(),r(16,"div",69),l(17,"How to improve"),a(),r(18,"div",70),O(19,Ht,6,4,"div",71,tt),a(),m(21,Qt,6,2),a()),n&2){let t=e,i=p(3);C("border-color","color-mix(in srgb, "+t.color+" 32%, transparent)")("background","color-mix(in srgb, "+t.color+" 6%, var(--bg-canvas))"),o(2),C("color",t.color),c("size",14),o(4),C("color",t.color)("background","color-mix(in srgb, "+t.color+" 15%, transparent)"),o(),g("",t.label," \xB7 "),o(2),g("",t.score,"/100"),o(),c("text",i.qualityShareText()),o(2),c("frac",t.score/100)("color",t.color)("height",6),o(2),D(t.factors),o(5),D(t.suggestions),o(2),_(t.rewrite?21:-1)}}function Wt(n,e){if(n&1&&d(0,"app-copy-btn",50),n&2){let t=p();c("text",t.prompt.text)}}function jt(n,e){if(n&1&&d(0,"div",52),n&2){let t=p(),i=p(2);c("innerHTML",i.renderAssistant(t.prompt.assistant_text),L)}}function Ut(n,e){n&1&&(r(0,"div",53),l(1,"No assistant text captured for this turn."),a())}function Yt(n,e){if(n&1&&(r(0,"details",54)(1,"summary",80),l(2,"Extended thinking"),a(),d(3,"div",81),a()),n&2){let t=p(),i=p(2);o(3),c("innerHTML",i.renderAssistant(t.prompt.thinking_text),L)}}function Zt(n,e){if(n&1&&(r(0,"span",85),l(1),a()),n&2){let t=p().$implicit;o(),u(t.input_summary)}}function Jt(n,e){if(n&1&&(r(0,"span",86),l(1),a()),n&2){let t=p().$implicit,i=p(4);o(),u(i.fmtBytes(t.result_length))}}function Kt(n,e){if(n&1&&(r(0,"div",83)(1,"span",84),l(2),a(),m(3,Zt,2,1,"span",85),d(4,"span",27),m(5,Jt,2,1,"span",86),a()),n&2){let t=e.$implicit,i=p(4);o(),C("color",i.toolColor(t.tool_name)),o(),u(t.tool_name),o(),_(t.input_summary?3:-1),o(2),_(t.result_length?5:-1)}}function Xt(n,e){if(n&1&&(r(0,"div",34),l(1),a(),r(2,"div",82),O(3,Kt,6,5,"div",83,ht),a()),n&2){let t=p(),i=p(2);o(),H("Tools \xB7 ",t.tools.length," \xB7 returned ",i.fmtBytes(t.toolBytes)),o(2),D(t.tools)}}function te(n,e){if(n&1){let t=N();r(0,"div",20)(1,"div",22)(2,"button",23),M("click",function(){k(t);let s=p(2);return S(s.closePrompt())}),d(3,"app-icon",3),l(4," Timeline "),a(),r(5,"span",24),l(6),a(),m(7,qt,3,2,"app-pill",25),m(8,Bt,3,1,"app-pill",26),d(9,"span",27),r(10,"button",28),M("click",function(){k(t);let s=p(2);return S(s.stepPrompt(-1))}),d(11,"app-icon",3),l(12," Prev"),a(),r(13,"button",28),M("click",function(){k(t);let s=p(2);return S(s.stepPrompt(1))}),l(14,"Next "),d(15,"app-icon",29),a()(),r(16,"div",30)(17,"span",31),l(18),a(),r(19,"span",31),l(20),a(),m(21,Nt,2,1,"span",31),r(22,"span",31),d(23,"app-icon",32),l(24),a(),m(25,At,2,1,"span",31),a(),m(26,Gt,22,18,"div",33),r(27,"div",34),l(28,"Token breakdown"),a(),r(29,"div",35),d(30,"div",36)(31,"div",37)(32,"div",38)(33,"div",39),a(),r(34,"div",40)(35,"span",41),d(36,"span",42),l(37),a(),r(38,"span",41),d(39,"span",43),l(40),a(),r(41,"span",41),d(42,"span",44),l(43),a(),r(44,"span",41),d(45,"span",45),l(46),a()(),r(47,"div",46)(48,"div",47)(49,"div",48)(50,"span",49),l(51,"Input"),a(),d(52,"span",27),m(53,Wt,1,1,"app-copy-btn",50),a(),r(54,"pre",51),l(55),a()(),r(56,"div",47)(57,"div",48)(58,"span",49),l(59,"Output"),a()(),m(60,jt,1,1,"div",52)(61,Ut,2,0,"div",53),a()(),m(62,Yt,4,1,"details",54),m(63,Xt,5,2),d(64,"div",55),a()}if(n&2){let t,i=e,s=p(2);o(3),c("size",14),o(3),u(s.fmtClock(i.prompt.ts)),o(),_(i.slashCommand?7:-1),o(),_(i.prompt.is_sidechain===1?8:-1),o(2),c("disabled",!s.hasPrevPrompt()),o(),c("size",13),o(2),c("disabled",!s.hasNextPrompt()),o(2),c("size",13),o(3),g("",s.fmtTokens(i.totalTokens)," tok"),o(),C("color",i.prompt.cost_usd>2.5?"var(--error)":"var(--text-primary)"),o(),g("$",i.prompt.cost_usd.toFixed(2)),o(),_(i.prompt.model?21:-1),o(2),c("size",10),o(),g(" ",i.tools.length," tools"),o(),_(i.prompt.durationMs?25:-1),o(),_((t=s.quality())?26:-1,t),o(4),C("width",s.promptTokPct(i.prompt,"input"),"%"),c("title","Input: "+s.fmtTokens(i.prompt.input_tokens)),o(),C("width",s.promptTokPct(i.prompt,"output"),"%"),c("title","Output: "+s.fmtTokens(i.prompt.output_tokens)),o(),C("width",s.promptTokPct(i.prompt,"cacheWrite"),"%"),c("title","Cache write: "+s.fmtTokens(i.prompt.cache_creation_tokens)),o(),C("width",s.promptTokPct(i.prompt,"cacheRead"),"%"),c("title","Cache read: "+s.fmtTokens(i.prompt.cache_read_tokens)),o(4),g("Input ",s.fmtTokens(i.prompt.input_tokens)),o(3),g("Output ",s.fmtTokens(i.prompt.output_tokens)),o(3),g("Cache write ",s.fmtTokens(i.prompt.cache_creation_tokens)),o(3),g("Cache read ",s.fmtTokens(i.prompt.cache_read_tokens)),o(7),_(i.prompt.text?53:-1),o(2),u(i.prompt.text||"(assistant-only turn)"),o(5),_(i.prompt.assistant_text?60:61),o(2),_(i.prompt.thinking_text?62:-1),o(),_(i.tools.length?63:-1)}}function ee(n,e){n&1&&(r(0,"app-pill",118),d(1,"app-icon",57),l(2,"subagent "),a()),n&2&&(c("color","var(--node-route)")("bg","var(--node-route-soft)"),o(),c("size",10))}function ne(n,e){if(n&1&&d(0,"app-icon",119),n&2){let t=p().$implicit;c("size",12)("title",t.slashCommand)}}function ie(n,e){if(n&1&&l(0),n&2){let t=p().$implicit;g(" ",t.prompt.text.length>140?t.prompt.text.slice(0,140)+"\u2026":t.prompt.text," ")}}function oe(n,e){n&1&&(r(0,"span",121),l(1,"(assistant-only turn)"),a())}function ae(n,e){if(n&1&&(r(0,"span",122),l(1),a()),n&2){let t=p().$implicit;c("title","SpecShip \xB7 spent ~"+t.specshipSpendTokens+" tok \xB7 est. saved ~"+t.specshipSavedTokens+" tok"),o(),g("SS ~",t.specshipSpendTokens," tok")}}function re(n,e){if(n&1&&(r(0,"span",126),l(1),a()),n&2){let t=p().$implicit,i=p(3);o(),u(i.fmtDurationMs(t.prompt.durationMs))}}function le(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2,"User prompt"),a(),r(3,"pre",141),l(4),a()()),n&2){let t=p(2).$implicit;o(4),u(t.prompt.text)}}function se(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2,"Assistant response"),a(),d(3,"div",142),a()),n&2){let t=p(2).$implicit,i=p(3);o(3),c("innerHTML",i.renderAssistant(t.prompt.assistant_text),L)}}function pe(n,e){if(n&1&&(r(0,"section",134)(1,"details",143)(2,"summary",144),l(3," Extended thinking "),r(4,"span",145),l(5,"(click to expand)"),a()(),d(6,"div",146),a()()),n&2){let t=p(2).$implicit,i=p(3);o(6),c("innerHTML",i.renderAssistant(t.prompt.thinking_text),L)}}function de(n,e){if(n&1&&(r(0,"div",137)(1,"div",138),l(2,"Duration"),a(),r(3,"div",139),l(4),a()()),n&2){let t=p(2).$implicit,i=p(3);o(4),u(i.fmtDurationMs(t.prompt.durationMs))}}function ce(n,e){if(n&1&&(r(0,"div",137)(1,"div",138),l(2,"Model"),a(),r(3,"div",139),l(4),a()()),n&2){let t=p(2).$implicit;o(4),u(t.prompt.model)}}function me(n,e){if(n&1&&(r(0,"div",148)(1,"span",149),l(2),a()()),n&2){let t=e.$implicit;c("title",t),o(2),u(t)}}function _e(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2),a(),r(3,"div",147),O(4,me,3,2,"div",148,et),a()()),n&2){let t=p(2).$implicit;o(2),g("Files touched \xB7 ",t.filesTouched.length),o(2),D(t.filesTouched)}}function ue(n,e){n&1&&l(0," \u203A ")}function xe(n,e){if(n&1&&(r(0,"span",155),l(1),a()),n&2){let t=p().$implicit;o(),u(t.input_summary)}}function ge(n,e){if(n&1&&(r(0,"span",156),l(1),a()),n&2){let t=p().$implicit,i=p(6);o(),u(i.fmtBytes(t.result_length))}}function ve(n,e){if(n&1&&(r(0,"pre",157),l(1),a()),n&2){let t=p().$implicit,i=p(6);o(),u(i.formatToolInput(t.input_json))}}function fe(n,e){if(n&1){let t=N();r(0,"div",151)(1,"button",152),M("click",function(){let s=k(t).$implicit,x=p(6);return S(x.toggleToolInput(s.id))}),r(2,"span",153),m(3,ue,1,0),a(),r(4,"span",154),l(5),a(),m(6,xe,2,1,"span",155),d(7,"span",27),m(8,ge,2,1,"span",156),a(),m(9,ve,2,1,"pre",157),a()}if(n&2){let t=e.$implicit,i=p(6);o(),q("has-input",!!t.input_json)("expanded",i.isToolInputExpanded(t.id)),c("disabled",!t.input_json),U("aria-expanded",i.isToolInputExpanded(t.id)),o(),q("open",i.isToolInputExpanded(t.id)),o(),_(t.input_json?3:-1),o(),C("color",i.toolColor(t.tool_name)),o(),u(t.tool_name),o(),_(t.input_summary?6:-1),o(2),_(t.result_length?8:-1),o(),_(t.input_json&&i.isToolInputExpanded(t.id)?9:-1)}}function Ce(n,e){if(n&1&&(r(0,"section",134)(1,"div",135),l(2),a(),r(3,"div",150),O(4,fe,10,15,"div",151,ht),a()()),n&2){let t=p(2).$implicit,i=p(3);o(2),H("Tool calls \xB7 ",t.tools.length," \xB7 returned ",i.fmtBytes(t.toolBytes)),o(2),D(t.tools)}}function he(n,e){if(n&1&&(r(0,"div",133),m(1,le,5,1,"section",134),m(2,se,4,1,"section",134),m(3,pe,7,1,"section",134),r(4,"section",134)(5,"div",135),l(6,"Token breakdown"),a(),r(7,"div",136)(8,"div",137)(9,"div",138),l(10,"Input"),a(),r(11,"div",139),l(12),a()(),r(13,"div",137)(14,"div",138),l(15,"Output"),a(),r(16,"div",139),l(17),a()(),r(18,"div",137)(19,"div",138),l(20,"Cache write"),a(),r(21,"div",139),l(22),a()(),r(23,"div",137)(24,"div",138),l(25,"Cache read"),a(),r(26,"div",139),l(27),a()(),r(28,"div",137)(29,"div",138),l(30,"Cost"),a(),r(31,"div",140),l(32),a()(),m(33,de,5,1,"div",137),m(34,ce,5,1,"div",137),a()(),m(35,_e,6,1,"section",134),m(36,Ce,6,2,"section",134),a()),n&2){let t=p().$implicit,i=p(3);o(),_(t.prompt.text?1:-1),o(),_(t.prompt.assistant_text?2:-1),o(),_(t.prompt.thinking_text?3:-1),o(9),u(i.fmtTokens(t.prompt.input_tokens)),o(5),u(i.fmtTokens(t.prompt.output_tokens)),o(5),u(i.fmtTokens(t.prompt.cache_creation_tokens)),o(5),u(i.fmtTokens(t.prompt.cache_read_tokens)),o(5),g("$",t.prompt.cost_usd.toFixed(4)),o(),_(t.prompt.durationMs?33:-1),o(),_(t.prompt.model?34:-1),o(),_(t.filesTouched.length>0?35:-1),o(),_(t.tools.length>0?36:-1)}}function be(n,e){if(n&1){let t=N();r(0,"div",97)(1,"div",115),M("click",function(){let s=k(t).$implicit,x=p(3);return S(x.toggleExpand(s.prompt.id))})("keydown.enter",function(){let s=k(t).$implicit,x=p(3);return S(x.toggleExpand(s.prompt.id))})("keydown.space",function(s){let x=k(t).$implicit,f=p(3);return s.preventDefault(),S(f.toggleExpand(x.prompt.id))}),r(2,"span",116),l(3),a(),d(4,"span",117),m(5,ee,3,3,"app-pill",118),m(6,ne,1,2,"app-icon",119),r(7,"span",120),m(8,ie,1,1)(9,oe,2,0,"span",121),a(),m(10,ae,2,2,"span",122),r(11,"span",123),d(12,"app-icon",124),r(13,"span",125),l(14),a()(),m(15,re,2,1,"span",126),r(16,"span",127),l(17),a(),r(18,"span",128),l(19),z(20,"number"),a(),r(21,"span",129),l(22),a(),r(23,"button",130),M("click",function(s){let x=k(t).$implicit,f=p(3);return s.stopPropagation(),S(f.openPrompt(x.prompt.id))}),d(24,"app-icon",131),a(),d(25,"app-icon",132),a(),m(26,he,37,12,"div",133),a()}if(n&2){let t=e.$implicit,i=p(3);o(),q("expanded",i.isExpanded(t.prompt.id)),U("aria-expanded",i.isExpanded(t.prompt.id)),o(2),u(i.fmtClock(t.prompt.ts)),o(),C("background",i.promptQualityColor(t)),o(),_(t.prompt.is_sidechain===1?5:-1),o(),_(t.slashCommand?6:-1),o(2),_(t.prompt.text?8:9),o(2),_(t.specshipSpendTokens>0?10:-1),o(2),c("size",11),o(2),u(t.tools.length),o(),_(t.prompt.durationMs?15:-1),o(2),u(i.fmtTokens(t.totalTokens)),o(),C("color",i.cacheColor(t.totalTokens>0?(t.prompt.cache_read_tokens||0)/t.totalTokens:0)),o(),g(" ",t.totalTokens>0?$(20,23,(t.prompt.cache_read_tokens||0)/t.totalTokens*100,"1.0-0"):0,"% "),o(2),C("color",t.prompt.cost_usd>2.5?"var(--error)":"var(--text-primary)"),o(),g("$",t.prompt.cost_usd.toFixed(2)),o(2),c("size",12),o(),c("size",14),o(),_(i.isExpanded(t.prompt.id)?26:-1)}}function ye(n,e){n&1&&(r(0,"div",16),l(1,"No prompts logged for this session yet."),a())}function ke(n,e){if(n&1&&(r(0,"span",163),l(1),a()),n&2){let t=p().$implicit;o(),g("\xD7",t.count)}}function Se(n,e){if(n&1&&(r(0,"span",161),d(1,"app-icon",56),l(2),m(3,ke,2,1,"span",163),a()),n&2){let t=e.$implicit;o(),c("size",10),o(),g("",t.name," "),o(),_(t.count>1?3:-1)}}function Pe(n,e){if(n&1&&(r(0,"span",163),l(1),a()),n&2){let t=p().$implicit;o(),g("\xD7",t.count)}}function we(n,e){if(n&1&&(r(0,"span",162),d(1,"app-icon",60),l(2),m(3,Pe,2,1,"span",163),a()),n&2){let t=e.$implicit;o(),c("size",10),o(),g("",t.name," "),o(),_(t.count>1?3:-1)}}function Me(n,e){if(n&1&&(r(0,"div",158)(1,"div",99),l(2,"Commands & skills"),a(),r(3,"div",160),O(4,Se,4,3,"span",161,ft),O(6,we,4,3,"span",162,ft),a()()),n&2){let t=p();o(4),D(t.slashCommands),o(2),D(t.skills)}}function Te(n,e){if(n&1&&(r(0,"div",99),l(1),a(),d(2,"app-h-bars",164),r(3,"div",165),l(4,"bar = call count"),a()),n&2){let t=p(),i=p(3);o(),g("Tools used \xB7 ",t.byTool.length),o(),c("items",t.byTool)("fmt",i.fmtTokensFn)("color",i.toolBarColor)}}function Ee(n,e){if(n&1&&(r(0,"div",159)(1,"div",166)(2,"span",167),l(3,"SpecShip"),a(),r(4,"span",168),l(5,"est."),a()(),r(6,"div",169)(7,"div",68)(8,"span",170),l(9,"Spent"),a(),r(10,"span",171),l(11),a()(),r(12,"div",68)(13,"span",170),l(14,"Est. saved"),a(),r(15,"span",172),l(16),a()(),r(17,"div",173)(18,"span",170),l(19,"Net"),a(),r(20,"span",174),l(21),a()()()()),n&2){let t=p(),i=p(3);o(11),g("~",i.fmtTokens(t.specship.spendTokens)," tok"),o(5),g("~",i.fmtTokens(t.specship.savedTokens)," tok"),o(4),C("color",t.specship.netTokens>=0?"var(--success)":"var(--warn)"),o(),H("",t.specship.netTokens>0?"+":"","",i.fmtTokens(t.specship.netTokens)," tok")}}function Oe(n,e){if(n&1&&(m(0,Me,8,0,"div",158),m(1,Te,5,4),m(2,Ee,22,6,"div",159)),n&2){let t=e;_(t.slashCommands.length||t.skills.length?0:-1),o(),_(t.byTool.length?1:-1),o(),_(t.specship&&t.specship.spendTokens>0?2:-1)}}function De(n,e){if(n&1&&(r(0,"div",102)(1,"span",177),l(2),a(),r(3,"div",27),d(4,"app-bar",178),a(),r(5,"span",179),l(6),a()()),n&2){let t=e.$implicit,i=p(4);o(2),u(i.fmtClock(t.prompt.ts)),o(2),c("frac",t.prompt.cost_usd/i.maxPromptCost())("color",t.prompt.cost_usd>2.5?"var(--error)":"var(--accent)"),o(2),g("$",t.prompt.cost_usd.toFixed(2))}}function Ie(n,e){if(n&1&&(r(0,"div",175),l(1,"Cost per prompt"),a(),r(2,"div",176),O(3,De,7,4,"div",102,bt),a()),n&2){let t=p(3);o(3),D(t.groups())}}function ze(n,e){if(n&1){let t=N();r(0,"div",21)(1,"div",87)(2,"div",88)(3,"div",89)(4,"div",90),l(5,"Cost"),a(),r(6,"div",91),l(7),a()(),r(8,"div",89)(9,"div",90),l(10,"Prompts"),a(),r(11,"div",92),l(12),a()(),r(13,"div",89)(14,"div",90),l(15,"Window"),a(),r(16,"div",93),l(17),a()(),r(18,"div",89)(19,"div",90),l(20,"Cache hit"),a(),r(21,"div",92),l(22),z(23,"number"),a()(),r(24,"div",89)(25,"div",90),l(26,"Tool calls"),a(),r(27,"div",92),l(28),a()()(),r(29,"div",94)(30,"span",49),l(31),a(),r(32,"span",95),l(33,"click a prompt for full detail"),a(),d(34,"div",27),r(35,"button",23),M("click",function(){k(t);let s=p(2);return S(s.expandAll())}),l(36,"Expand all"),a(),r(37,"button",23),M("click",function(){k(t);let s=p(2);return S(s.collapseAll())}),l(38,"Collapse all"),a()(),r(39,"div",96),O(40,be,27,26,"div",97,bt,!1,ye,2,0,"div",16),a()(),r(43,"div",98)(44,"div",99),l(45,"Token mix"),a(),r(46,"div",100),d(47,"div",36)(48,"div",37)(49,"div",38)(50,"div",39),a(),r(51,"div",101)(52,"div",102),d(53,"span",103),r(54,"span",104),l(55,"Input"),a(),r(56,"span",105),l(57),a(),r(58,"span",106),l(59),z(60,"number"),a()(),r(61,"div",102),d(62,"span",107),r(63,"span",104),l(64,"Output"),a(),r(65,"span",105),l(66),a(),r(67,"span",106),l(68),z(69,"number"),a()(),r(70,"div",102),d(71,"span",108),r(72,"span",104),l(73,"Cache write"),a(),r(74,"span",105),l(75),a(),r(76,"span",106),l(77),z(78,"number"),a()(),r(79,"div",102),d(80,"span",109),r(81,"span",104),l(82,"Cache read"),a(),r(83,"span",105),l(84),a(),r(85,"span",106),l(86),z(87,"number"),a()()(),r(88,"div",110)(89,"div",102),d(90,"app-icon",111),r(91,"span",112),l(92,"Cache effectiveness"),a()(),r(93,"div",113)(94,"span",114),l(95),z(96,"number"),a(),r(97,"span",112),l(98,"of input served from cache"),a()()(),m(99,Oe,3,3),m(100,Ie,5,0),a()()}if(n&2){let t,i=p(),s=p();o(7),g("$",i.total_cost_usd.toFixed(2)),o(5),u(i.prompt_count),o(5),H(" ",s.fmtClock(i.started_at)," \u2013 ",s.fmtClock(i.ended_at).split(" ").pop()," "),o(4),C("color",s.cacheColor(s.cacheReadRate())),o(),g(" ",$(23,34,s.cacheReadRate()*100,"1.0-0"),"% "),o(6),u(s.totalToolCalls()),o(3),g("Prompt timeline \xB7 ",s.groups().length),o(9),D(s.groups()),o(7),C("width",s.tokPct("input"),"%"),c("title","Input: "+s.fmtTokens(i.total_input_tokens)),o(),C("width",s.tokPct("output"),"%"),c("title","Output: "+s.fmtTokens(i.total_output_tokens)),o(),C("width",s.tokPct("cacheWrite"),"%"),c("title","Cache write: "+s.fmtTokens(i.total_cache_creation_tokens)),o(),C("width",s.tokPct("cacheRead"),"%"),c("title","Cache read: "+s.fmtTokens(i.total_cache_read_tokens)),o(7),u(s.fmtTokens(i.total_input_tokens)),o(2),g("",$(60,37,s.tokPct("input"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_output_tokens)),o(2),g("",$(69,40,s.tokPct("output"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_cache_creation_tokens)),o(2),g("",$(78,43,s.tokPct("cacheWrite"),"1.0-0"),"%"),o(7),u(s.fmtTokens(i.total_cache_read_tokens)),o(2),g("",$(87,46,s.tokPct("cacheRead"),"1.0-0"),"%"),o(4),c("size",13),o(5),g("",$(96,49,s.cacheReadRate()*100,"1.0-0"),"%"),o(4),_((t=s.summaryData())?99:-1,t),o(),_(s.groups().length>0?100:-1)}}function $e(n,e){if(n&1&&m(0,te,65,38,"div",20)(1,ze,101,52,"div",21),n&2){let t,i=p();_((t=i.selectedGroup())?0:1,t)}}function Re(n,e){n&1&&(r(0,"div",16),l(1,"Session not found."),a())}var Fe=5e3,qe=/<command-name>([^<]+)<\/command-name>/,Be=new Set(["Read","Edit","Write","NotebookEdit","MultiEdit"]);function Ne(n){if(!n)return[];try{let e=JSON.parse(n);return Array.isArray(e)?e.filter(t=>Array.isArray(t)&&t.length>=2&&typeof t[0]=="string"&&typeof t[1]=="number"):[]}catch{return[]}}var Ct=class n{api=F(pt);route=F(rt);router=F(lt);sanitizer=F(at);destroyRef=F(K);refresh=F(dt);liveMode=V("idle");idSig=Z(this.route.paramMap,{initialValue:this.route.snapshot.paramMap});id=h(()=>this.idSig().get("id")??"");localRefreshing=V(!1);expandedIds=V(new Set);expandedToolInputs=V(new Set);resource=Y(this.api,()=>{let e=this.id();return e?`/api/claude/session/${encodeURIComponent(e)}`:null});summary=Y(this.api,()=>{let e=this.id();return e?`/api/claude/session/${encodeURIComponent(e)}/summary`:null});session=h(()=>this.resource.state().data?.session??null);prompts=h(()=>this.resource.state().data?.prompts??[]);toolCalls=h(()=>this.resource.state().data?.toolCalls??[]);summaryData=h(()=>this.summary.state().data??null);groups=h(()=>{let e=this.prompts(),t=this.toolCalls(),i=new Map;for(let s of t){let x=i.get(s.prompt_id)??[];x.push(s),i.set(s.prompt_id,x)}return e.map(s=>{let x=i.get(s.id)??[],f=(s.input_tokens||0)+(s.output_tokens||0)+(s.cache_creation_tokens||0)+(s.cache_read_tokens||0),T=x.reduce((v,y)=>v+(y.result_length||0),0),b=s.text?qe.exec(s.text):null,E=b?b[1].trim():null,B=x.length>0?Math.max(...x.map(v=>v.ts||0)):0,A=B>s.ts?B-s.ts:0,R=new Map;for(let v of x)R.set(v.tool_name,(R.get(v.tool_name)??0)+1);let P=Array.from(R.entries()).map(([v,y])=>({name:v,count:y,color:this.toolColor(v)})).sort((v,y)=>y.count-v.count),I=new Set;for(let v of x)Be.has(v.tool_name)&&v.input_summary&&I.add(v.input_summary);let w=x.filter(v=>v.is_specship===1),Q=w.reduce((v,y)=>v+(y.result_length||0),0),G=w.length>0?Math.ceil(Q/4):0,W=new Map;for(let v of w)if(v.resolution==="resolved")for(let[y,St]of Ne(v.displaced_files))W.has(y)||W.set(y,St);let yt=Array.from(W.values()).reduce((v,y)=>v+y,0),kt=Math.ceil(Math.max(0,yt-Q)/4);return{prompt:s,tools:x,totalTokens:f,toolBytes:T,slashCommand:E,durationMs:A,toolBreakdown:P,filesTouched:Array.from(I),specshipSpendTokens:G,specshipSavedTokens:kt}})});totalToolCalls=h(()=>this.toolCalls().length);queryMap=Z(this.route.queryParamMap,{initialValue:this.route.snapshot.queryParamMap});selectedPromptId=h(()=>this.queryMap().get("prompt"));selectedIndex=h(()=>{let e=this.selectedPromptId();return e?this.groups().findIndex(t=>t.prompt.id===e):-1});selectedGroup=h(()=>{let e=this.selectedIndex();return e>=0?this.groups()[e]:null});quality=h(()=>{let e=this.selectedGroup();return e?J(e.prompt,e.tools):null});qualityShareText=h(()=>{let e=this.quality();return e?vt(e):""});hasPrevPrompt=h(()=>this.selectedIndex()>0);hasNextPrompt=h(()=>{let e=this.selectedIndex();return e>=0&&e<this.groups().length-1});promptCacheRate(e){let t=(e.input_tokens||0)+(e.cache_creation_tokens||0)+(e.cache_read_tokens||0);return t>0?(e.cache_read_tokens||0)/t:0}promptQualityColor(e){return J(e.prompt,e.tools).color}openPrompt(e){this.router.navigate([],{relativeTo:this.route,queryParams:{prompt:e},queryParamsHandling:"merge"})}closePrompt(){this.router.navigate([],{relativeTo:this.route,queryParams:{prompt:null},queryParamsHandling:"merge"})}stepPrompt(e){let t=this.selectedIndex(),i=this.groups()[t+e];i&&this.openPrompt(i.prompt.id)}promptTok(e,t){return t==="input"?e.input_tokens||0:t==="output"?e.output_tokens||0:t==="cacheWrite"?e.cache_creation_tokens||0:e.cache_read_tokens||0}promptTokPct(e,t){let i=(e.input_tokens||0)+(e.output_tokens||0)+(e.cache_creation_tokens||0)+(e.cache_read_tokens||0)||1;return this.promptTok(e,t)/i*100}totalTokens=h(()=>{let e=this.session();return e&&(e.total_input_tokens||0)+(e.total_output_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0)||1});maxPromptCost=h(()=>{let e=this.groups();return Math.max(1e-4,...e.map(t=>t.prompt.cost_usd||0))});toolBarColor=e=>{let t=e.name;return t==="Read"?"var(--node-spec)":t==="Edit"||t==="Write"||t==="MultiEdit"?"var(--accent)":t==="Bash"?"var(--warn)":t==="Grep"||t==="Glob"?"var(--node-test)":t==="Task"?"var(--node-route)":t.startsWith("mcp__")?"var(--success)":"var(--node-code)"};cacheReadRate=h(()=>{let e=this.session();if(!e)return 0;let t=(e.total_input_tokens||0)+(e.total_cache_creation_tokens||0)+(e.total_cache_read_tokens||0);return t>0?(e.total_cache_read_tokens||0)/t:0});constructor(){j(()=>{!this.resource.state().loading&&this.localRefreshing()&&this.localRefreshing.set(!1)});let e=null,t=null,i=()=>{t!==null&&(clearInterval(t),t=null)},s=()=>{t===null&&(t=setInterval(()=>{typeof document<"u"&&document.visibilityState==="visible"&&this.resource.refetch()},Fe))},x=()=>{e&&(e(),e=null)},f=b=>{b&&(x(),e=this.api.openEventStream(`/api/claude/session/${encodeURIComponent(b)}/events`,E=>{E==="prompt_added"||E==="tool_call_added"?this.resource.refetch():E==="snapshot"?(this.liveMode.set("live"),i()):E==="stream_error"&&(this.liveMode.set("polling"),s())},()=>{this.liveMode.set("polling"),s()},["prompt_added","tool_call_added","snapshot","stream_error"]))},T=()=>{if(!(typeof document>"u"))if(document.visibilityState==="visible"){this.resource.refetch();let b=this.id();b&&this.liveMode()==="polling"&&f(b)}else i()};j(()=>{let b=this.id();if(x(),i(),!b){this.liveMode.set("idle");return}f(b)}),typeof document<"u"&&document.addEventListener("visibilitychange",T),this.destroyRef.onDestroy(()=>{x(),i(),this.liveMode.set("idle"),typeof document<"u"&&document.removeEventListener("visibilitychange",T)})}async forceRefresh(){this.localRefreshing.set(!0),await this.refresh.triggerGlobalRefresh()}isExpanded(e){return this.expandedIds().has(e)}toggleExpand(e){this.expandedIds.update(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})}expandAll(){this.expandedIds.set(new Set(this.prompts().map(e=>e.id)))}collapseAll(){this.expandedIds.set(new Set)}isToolInputExpanded(e){return this.expandedToolInputs().has(e)}toggleToolInput(e){this.expandedToolInputs.update(t=>{let i=new Set(t);return i.has(e)?i.delete(e):i.add(e),i})}renderAssistant(e){return this.sanitizer.bypassSecurityTrustHtml(ut(e??""))}formatToolInput(e){if(!e)return"";try{return JSON.stringify(JSON.parse(e),null,2)}catch{return e}}fmtBytes(e){return e?e<1024?`${e} B`:e<1024*1024?`${(e/1024).toFixed(1)} kB`:`${(e/(1024*1024)).toFixed(1)} MB`:"0"}fmtTokens(e){return e<1e3?`${e}`:e<1e6?`${(e/1e3).toFixed(1)}k`:`${(e/1e6).toFixed(2)}M`}fmtTokensFn=e=>this.fmtTokens(e);fmtClock(e){if(!e)return"";try{let t=new Date(e),i=new Date;i.setHours(0,0,0,0);let s=864e5,x=i.getTime()-new Date(t.getFullYear(),t.getMonth(),t.getDate()).getTime(),f=t.toLocaleTimeString([],{hour:"2-digit",minute:"2-digit",second:"2-digit"});return x===0?f:x===s?"Yest "+f:t.toLocaleDateString([],{month:"short",day:"numeric"})+" "+f}catch{return String(e)}}fmtDurationSec(e,t){if(!e||!t)return"";let i=Math.round((t-e)/1e3);if(i<60)return`${i}s`;let s=Math.floor(i/60),x=i%60;if(s<60)return`${s}m ${x}s`;let f=Math.floor(s/60),T=s%60;return`${f}h ${T}m`}fmtDurationMs(e){if(!e||e<=0)return"";if(e<1e3)return`${e}ms`;let t=e/1e3;if(t<60)return`${t.toFixed(t<10?1:0)}s`;let i=Math.floor(t/60),s=Math.round(t%60);if(i<60)return`${i}m ${s}s`;let x=Math.floor(i/60),f=i%60;return`${x}h ${f}m`}basename(e){if(!e)return"";if(e.length<=40)return e;let t=e.split("/");return t.length<=2?e:"\u2026/"+t.slice(-2).join("/")}toolColor(e){return e==="Read"?"var(--node-spec)":e==="Edit"||e==="Write"||e==="MultiEdit"||e==="NotebookEdit"?"var(--accent)":e==="Bash"?"var(--warn)":e==="Grep"||e==="Glob"?"var(--node-test)":e==="Task"?"var(--node-route)":e.startsWith("mcp__")?"var(--success)":"var(--text-secondary)"}cacheColor(e){return e>=.7?"var(--success)":e>=.5?"var(--warn)":"var(--error)"}tokPct(e){let t=this.session();if(!t)return 0;let i=this.totalTokens();return(e==="input"?t.total_input_tokens||0:e==="output"?t.total_output_tokens||0:e==="cacheWrite"?t.total_cache_creation_tokens||0:t.total_cache_read_tokens||0)/i*100}static \u0275fac=function(t){return new(t||n)};static \u0275cmp=X({type:n,selectors:[["app-session-detail"]],decls:22,vars:20,consts:[[1,"sd-root"],[1,"page-head"],[1,"back-link","btn","btn-ghost","btn-sm",3,"routerLink"],["name","chevronLeft",3,"size"],[1,"title-block"],[1,"title"],[1,"mono","session-id"],[3,"color","bg"],[1,"live-pill",3,"title"],[1,"dot"],[1,"sub"],[1,"page-actions"],["type","button","aria-label","Refresh session detail",1,"btn","btn-secondary","btn-sm","refresh-btn",3,"click","disabled"],["name","refresh",3,"size"],[1,"loading"],[1,"error"],[1,"empty"],[1,"error-title"],[1,"error-detail"],[1,"btn","btn-secondary","btn-sm",3,"click"],[1,"scroll-y","pp-page"],[1,"sd-body"],[1,"row","gap-10","pp-head"],["type","button",1,"btn","btn-ghost","btn-sm",3,"click"],[1,"mono","muted","pp-time"],["color","var(--node-code)","bg","var(--node-code-soft)"],["color","var(--node-route)","bg","var(--node-route-soft)"],[1,"grow"],["type","button",1,"btn","btn-ghost","btn-sm",3,"click","disabled"],["name","chevronRight",3,"size"],[1,"row","gap-6","pp-meta"],[1,"pp-chip","mono"],["name","wrench",3,"size"],[1,"pp-quality",3,"border-color","background"],[1,"eyebrow","pp-sec-lbl"],[1,"tok-bar","pp-tokbar"],[1,"tok-seg",2,"background","var(--node-spec)",3,"title"],[1,"tok-seg",2,"background","var(--node-code)",3,"title"],[1,"tok-seg",2,"background","var(--warn)",3,"title"],[1,"tok-seg",2,"background","var(--node-route)",3,"title"],[1,"row","gap-12","pp-tok-legend"],[1,"pp-tok-li"],[1,"dot",2,"background","var(--node-spec)"],[1,"dot",2,"background","var(--node-code)"],[1,"dot",2,"background","var(--warn)"],[1,"dot",2,"background","var(--node-route)"],[1,"pp-io"],[1,"pp-io-col"],[1,"row","gap-6","pp-io-head"],[1,"eyebrow"],[3,"text"],[1,"pp-io-body","mono"],[1,"pp-io-body","md-content",3,"innerHTML"],[1,"pp-io-body","muted"],[1,"pp-thinking"],[2,"height","24px"],["name","command",3,"size"],["name","bot",3,"size"],[1,"pp-quality"],[1,"row","gap-8","pp-q-head"],["name","sparkles",3,"size"],[1,"pp-q-title"],[1,"pill","pp-q-grade"],[1,"tabular"],["label","Share",3,"text"],[1,"pp-q-bar"],[3,"frac","color","height"],[1,"pp-q-factors"],[1,"row","gap-6"],[1,"eyebrow","pp-q-sub"],[1,"col","gap-8"],[1,"row","gap-8","pp-sug"],[3,"name","size"],[1,"pp-q-factor"],[1,"pp-sug-dot"],[1,"pp-sug-text"],[1,"row","gap-6","pp-sug-fix"],[1,"mono"],[1,"row","gap-8","pp-rewrite"],[1,"grow","pp-rewrite-text"],[1,"eyebrow","pp-thinking-sum"],[1,"md-content","pp-thinking-body",3,"innerHTML"],[1,"col","gap-4","pp-tools"],[1,"row","gap-8","pp-tool"],[1,"mono","pp-tool-name"],[1,"mono","muted","pp-tool-input"],[1,"mono","muted","pp-tool-bytes"],[1,"scroll-y","sd-main"],[1,"stat-strip"],[1,"stat"],[1,"stat-lbl"],[1,"stat-val","cost"],[1,"stat-val","mono"],[1,"stat-val","mono",2,"font-size","12px"],[1,"row","gap-8",2,"justify-content","space-between","margin-bottom","8px"],[1,"muted",2,"font-size","11px"],[1,"col","gap-6",2,"padding-bottom","16px"],[1,"prompt","card"],[1,"scroll-y","sd-rail"],[1,"eyebrow",2,"margin-bottom","10px"],[1,"tok-bar",2,"margin-bottom","10px"],[1,"col","gap-6",2,"margin-bottom","20px"],[1,"row","gap-8"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-spec)","flex-shrink","0"],[1,"muted","grow",2,"font-size","11.5px"],[1,"mono","tabular",2,"font-size","11.5px"],[1,"mono","tabular","muted",2,"font-size","10px","width","32px","text-align","right"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-code)","flex-shrink","0"],[2,"width","9px","height","9px","border-radius","2px","background","var(--warn)","flex-shrink","0"],[2,"width","9px","height","9px","border-radius","2px","background","var(--node-route)","flex-shrink","0"],[1,"cache-card",2,"margin-bottom","20px"],["name","database",2,"color","var(--success)",3,"size"],[1,"muted",2,"font-size","10.5px"],[1,"row",2,"align-items","baseline","gap","8px","margin-top","4px"],[1,"tabular",2,"font-size","24px","font-weight","700","color","var(--success)"],["role","button","tabindex","0",1,"prompt-head","row","gap-10",3,"click","keydown.enter","keydown.space"],[1,"mono","muted",2,"font-size","10.5px","width","52px","flex-shrink","0"],["title","Prompt quality",2,"width","8px","height","8px","border-radius","50%","flex-shrink","0"],[2,"flex-shrink","0",3,"color","bg"],["name","command",2,"color","var(--node-code)","flex-shrink","0",3,"size","title"],[1,"grow",2,"font-size","12.5px","overflow","hidden","text-overflow","ellipsis","white-space","nowrap","min-width","0"],[1,"muted"],[1,"pill",2,"color","var(--success)","background","var(--success-soft)","font-family","var(--font-mono)","font-size","10px","font-weight","600","flex-shrink","0","cursor","help",3,"title"],[1,"row","gap-4",2,"flex-shrink","0"],["name","wrench",2,"color","var(--text-muted)",3,"size"],[1,"mono","tabular","muted",2,"font-size","11px"],["title","Wall-clock duration for this prompt",1,"mono","tabular","muted",2,"font-size","11px","width","44px","text-align","right","flex-shrink","0"],[1,"mono","tabular","muted",2,"font-size","11px","width","50px","text-align","right","flex-shrink","0"],[1,"mono","tabular",2,"font-size","11px","width","38px","text-align","right","flex-shrink","0"],[1,"mono","tabular",2,"font-size","13px","font-weight","600","width","54px","text-align","right","flex-shrink","0"],["type","button","title","Open full view","aria-label","Open full prompt view",1,"pp-open-btn",3,"click"],["name","maximize",3,"size"],["name","chevronRight",2,"color","var(--text-muted)","flex-shrink","0",3,"size"],[1,"prompt-body"],[1,"prompt-section"],[1,"section-lbl"],[1,"kv-row"],[1,"kv"],[1,"kv-lbl"],[1,"kv-val","mono"],[1,"kv-val","mono","cost"],[1,"prompt-pre"],[1,"assistant-body","md-content",3,"innerHTML"],[1,"thinking-details"],[1,"section-lbl","thinking-summary"],[1,"muted","xs"],[1,"thinking-body","md-content",3,"innerHTML"],[1,"files-touched"],[1,"file-row",3,"title"],[1,"file-path","mono"],[1,"tools"],[1,"tool-block"],["type","button",1,"tool-row",3,"click","disabled"],["aria-hidden","true",1,"tool-chevron","mono"],[1,"tool-name","mono"],[1,"tool-input","mono"],[1,"tool-bytes","mono","muted"],[1,"tool-input-json","mono"],[2,"margin-bottom","20px"],[2,"margin-top","16px","padding","10px 12px","background","var(--success-soft)","border","1px solid rgba(70,194,107,0.25)","border-radius","8px"],[1,"row","gap-6",2,"flex-wrap","wrap"],[1,"pill",2,"color","var(--node-code)","background","var(--node-code-soft)","font-family","var(--font-mono)","font-weight","500"],[1,"pill",2,"color","var(--node-test)","background","var(--node-test-soft)","font-family","var(--font-mono)","font-weight","500"],[2,"opacity","0.7"],["valueKey","calls",3,"items","fmt","color"],[1,"muted",2,"font-size","10px","margin-top","8px"],[1,"row","gap-8",2,"margin-bottom","4px"],[2,"font-size","10.5px","font-weight","700","color","var(--success)","text-transform","uppercase","letter-spacing","0.04em"],[1,"pill",2,"color","var(--success)","background","rgba(70,194,107,0.15)","font-size","9.5px","padding","1px 5px"],[1,"col","gap-4"],[1,"muted","grow",2,"font-size","11px"],[1,"mono","tabular",2,"font-size","11px","color","var(--text-primary)"],[1,"mono","tabular",2,"font-size","11px","color","var(--success)"],[1,"row","gap-6",2,"border-top","1px dashed rgba(70,194,107,0.3)","padding-top","4px","margin-top","2px"],[1,"mono","tabular",2,"font-size","11px"],[1,"eyebrow",2,"margin","20px 0 10px"],[1,"col","gap-5"],[1,"mono","muted",2,"font-size","10px","width","44px","flex-shrink","0"],[3,"frac","color"],[1,"mono","tabular",2,"font-size","10.5px","width","40px","text-align","right"]],template:function(t,i){if(t&1&&(r(0,"div",0)(1,"header",1)(2,"a",2),d(3,"app-icon",3),l(4," Sessions "),a(),r(5,"div",4)(6,"div",5)(7,"span",6),l(8),a(),m(9,It,2,3,"app-pill",7),r(10,"span",8),d(11,"span",9),l(12),a()(),m(13,$t,3,2,"div",10),a(),r(14,"div",11)(15,"button",12),M("click",function(){return i.forceRefresh()}),d(16,"app-icon",13),l(17),a()()(),m(18,Rt,2,0,"div",14)(19,Ft,7,1,"div",15)(20,$e,2,1)(21,Re,2,0,"div",16),a()),t&2){let s,x,f;o(2),c("routerLink",it(19,Ot)),o(),c("size",14),o(5),u(i.id().slice(0,12)),o(),_((s=i.session())!=null&&s.last_model?9:-1),o(),q("live",i.liveMode()==="live")("polling",i.liveMode()==="polling")("idle",i.liveMode()==="idle"),c("title",i.liveMode()==="live"?"Live \u2014 new prompts push as Claude Code writes them":i.liveMode()==="polling"?"Polling \u2014 SSE unavailable, refetching every 5s":"Idle \u2014 live updates paused"),o(2),g(" ",i.liveMode()==="live"?"Live":i.liveMode()==="polling"?"Polling":"Idle"," "),o(),_((x=i.session())?13:-1,x),o(2),q("spinning",i.localRefreshing()||i.refresh.loading()),c("disabled",i.refresh.loading()),o(),c("size",13),o(),g(" ",i.localRefreshing()||i.refresh.loading()?"Refreshing\u2026":"Refresh"," "),o(),_(i.resource.state().loading&&!i.session()?18:i.resource.state().error?19:(f=i.session())?20:21,f)}},dependencies:[st,ct,xt,mt,_t,gt,ot],styles:['@charset "UTF-8";[_nghost-%COMP%]{display:contents}.sd-root[_ngcontent-%COMP%]{flex:1;display:flex;flex-direction:column;min-height:0;padding:16px 18px 0}.page-head[_ngcontent-%COMP%]{display:flex;align-items:flex-start;gap:12px;margin-bottom:14px;flex-wrap:wrap}.back-link[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;color:var(--text-muted);text-decoration:none}.title-block[_ngcontent-%COMP%]{flex:1;min-width:250px}.title[_ngcontent-%COMP%]{font-size:var(--fs-title);font-weight:600;letter-spacing:-.01em;display:flex;align-items:center;gap:10px;flex-wrap:wrap}.session-id[_ngcontent-%COMP%]{color:var(--accent);font-size:14px}.live-pill[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px;font-size:10.5px;font-weight:600;padding:2px 8px;border-radius:999px;white-space:nowrap;cursor:help}.live-pill[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:7px;height:7px;border-radius:50%;flex-shrink:0}.live-pill.live[_ngcontent-%COMP%]{color:var(--success);background:var(--success-soft)}.live-pill.live[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--success);animation:_ngcontent-%COMP%_live-pulse 1.6s ease-in-out infinite}.live-pill.polling[_ngcontent-%COMP%]{color:var(--warn);background:var(--warn-soft)}.live-pill.polling[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--warn)}.live-pill.idle[_ngcontent-%COMP%]{color:var(--text-muted);background:var(--bg-canvas)}.live-pill.idle[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{background:var(--text-muted)}@keyframes _ngcontent-%COMP%_live-pulse{0%,to{opacity:.4;transform:scale(.85)}50%{opacity:1;transform:scale(1.05)}}.sub[_ngcontent-%COMP%]{color:var(--text-secondary);font-size:12px;margin-top:2px}.page-actions[_ngcontent-%COMP%]{display:flex;align-items:center;gap:8px}.refresh-btn[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:6px}.refresh-btn.spinning[_ngcontent-%COMP%] app-icon[_ngcontent-%COMP%]{animation:_ngcontent-%COMP%_spin .9s linear infinite;color:var(--accent)}.refresh-btn[_ngcontent-%COMP%]:disabled{cursor:progress;opacity:.8}@keyframes _ngcontent-%COMP%_spin{0%{transform:rotate(0)}to{transform:rotate(360deg)}}.sd-body[_ngcontent-%COMP%]{flex:1;display:flex;min-height:0;gap:0}.sd-main[_ngcontent-%COMP%]{flex:1;min-width:0;padding:0 0 18px}.sd-rail[_ngcontent-%COMP%]{width:290px;flex-shrink:0;border-left:1px solid var(--border-subtle);background:var(--bg-panel);padding:16px}.stat-strip[_ngcontent-%COMP%]{display:flex;gap:24px;padding:12px 0;border-top:1px solid var(--border-subtle);border-bottom:1px solid var(--border-subtle);margin-bottom:16px}.stat[_ngcontent-%COMP%] .stat-lbl[_ngcontent-%COMP%]{font-size:10.5px;color:var(--text-muted)}.stat[_ngcontent-%COMP%] .stat-val[_ngcontent-%COMP%]{font-size:16px;font-weight:600;margin-top:2px;color:var(--text-primary);font-variant-numeric:tabular-nums}.stat-val.cost[_ngcontent-%COMP%]{color:var(--accent)}.tok-bar[_ngcontent-%COMP%]{display:flex;height:10px;border-radius:999px;overflow:hidden}.tok-seg[_ngcontent-%COMP%]{height:100%}.cache-card[_ngcontent-%COMP%]{background:var(--success-soft);border:1px solid rgba(70,194,107,.25);border-radius:8px;padding:10px 12px}.prompt.card[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:9px;overflow:hidden;transition:border-color .12s}.prompt.card[_ngcontent-%COMP%]:hover{border-color:var(--border-strong)}.prompt-head[_ngcontent-%COMP%]{width:100%;padding:11px 12px;background:transparent;border:0;text-align:left;cursor:pointer;color:inherit;font-family:inherit}.prompt-head[_ngcontent-%COMP%]:hover{background:var(--bg-hover)}.prompt-head[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.pp-open-btn[_ngcontent-%COMP%]{flex-shrink:0;display:inline-flex;align-items:center;background:transparent;border:0;cursor:pointer;color:var(--text-muted);padding:2px;border-radius:4px;opacity:0;transition:opacity .1s,background .1s,color .1s}.prompt-head[_ngcontent-%COMP%]:hover .pp-open-btn[_ngcontent-%COMP%]{opacity:1}.pp-open-btn[_ngcontent-%COMP%]:hover{background:var(--bg-panel-2);color:var(--text-primary)}.pp-open-btn[_ngcontent-%COMP%]:focus-visible{opacity:1;outline:2px solid var(--accent);outline-offset:1px}.pp-page[_ngcontent-%COMP%]{flex:1;min-height:0;padding:18px}.pp-head[_ngcontent-%COMP%]{align-items:center;margin-bottom:14px}.pp-time[_ngcontent-%COMP%]{font-size:11.5px}.pp-meta[_ngcontent-%COMP%]{flex-wrap:wrap;margin-bottom:16px}.pp-chip[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:4px;font-size:11px;padding:3px 8px;border-radius:6px;background:var(--bg-panel);border:1px solid var(--border-subtle);color:var(--text-secondary)}.pp-quality[_ngcontent-%COMP%]{border:1px solid var(--border-subtle);border-radius:8px;padding:12px;margin-bottom:16px}.pp-q-head[_ngcontent-%COMP%]{align-items:center;margin-bottom:10px}.pp-q-title[_ngcontent-%COMP%]{font-weight:600;font-size:12.5px}.pp-q-grade[_ngcontent-%COMP%]{font-weight:600}.pp-q-bar[_ngcontent-%COMP%]{margin-bottom:12px}.pp-q-factors[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:6px 12px;margin-bottom:12px}.pp-q-factor[_ngcontent-%COMP%]{font-size:11.5px;color:var(--text-secondary)}.pp-q-factor.bad[_ngcontent-%COMP%]{color:var(--text-primary)}.pp-q-sub[_ngcontent-%COMP%]{margin-bottom:7px}.pp-q-sub[_ngcontent-%COMP%] + .col[_ngcontent-%COMP%], .pp-q-sub[_ngcontent-%COMP%] + .pp-rewrite[_ngcontent-%COMP%]{margin-top:0}.col[_ngcontent-%COMP%] + .pp-q-sub[_ngcontent-%COMP%], .pp-q-bar[_ngcontent-%COMP%] + .pp-q-factors[_ngcontent-%COMP%] + .pp-q-sub[_ngcontent-%COMP%]{margin-top:12px}.pp-sug[_ngcontent-%COMP%]{align-items:flex-start}.pp-sug-dot[_ngcontent-%COMP%]{width:6px;height:6px;border-radius:50%;flex-shrink:0;margin-top:5px}.pp-sug-text[_ngcontent-%COMP%]{font-size:12px;line-height:1.5;color:var(--text-secondary);text-wrap:pretty}.pp-sug-fix[_ngcontent-%COMP%]{margin-top:5px;align-items:center}.pp-sug-fix[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{font-size:11px;color:var(--text-primary);background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:5px;padding:2px 7px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pp-rewrite[_ngcontent-%COMP%]{align-items:flex-start;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:7px;padding:9px 11px}.pp-rewrite-text[_ngcontent-%COMP%]{font-size:12px;line-height:1.5;color:var(--text-primary);text-wrap:pretty}.pp-sec-lbl[_ngcontent-%COMP%]{margin:16px 0 8px}.pp-tokbar[_ngcontent-%COMP%]{margin-bottom:8px}.pp-tok-legend[_ngcontent-%COMP%]{flex-wrap:wrap;margin-bottom:16px}.pp-tok-li[_ngcontent-%COMP%]{display:inline-flex;align-items:center;gap:5px;font-size:10.5px;color:var(--text-muted)}.pp-tok-li[_ngcontent-%COMP%] .dot[_ngcontent-%COMP%]{width:8px;height:8px;border-radius:2px}.pp-io[_ngcontent-%COMP%]{display:grid;grid-template-columns:1fr 1fr;gap:12px;margin-bottom:16px}.pp-io-col[_ngcontent-%COMP%]{min-width:0;display:flex;flex-direction:column}.pp-io-head[_ngcontent-%COMP%]{margin-bottom:6px;align-items:center}.pp-io-body[_ngcontent-%COMP%]{background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:8px;padding:11px 13px;font-size:12px;line-height:1.6;max-height:460px;overflow:auto;margin:0}pre.pp-io-body[_ngcontent-%COMP%]{white-space:pre-wrap;word-break:break-word}.pp-thinking[_ngcontent-%COMP%]{margin-bottom:16px}.pp-thinking-sum[_ngcontent-%COMP%]{cursor:pointer}.pp-thinking-body[_ngcontent-%COMP%]{margin-top:8px}.pp-tool[_ngcontent-%COMP%]{padding:7px 10px;border-radius:6px;background:var(--bg-panel);border:1px solid var(--border-subtle);align-items:center}.pp-tool-name[_ngcontent-%COMP%]{font-size:12px;font-weight:600}.pp-tool-input[_ngcontent-%COMP%]{font-size:11px;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.pp-tool-bytes[_ngcontent-%COMP%]{font-size:11px}@media(max-width:720px){.pp-io[_ngcontent-%COMP%]{grid-template-columns:1fr}}.prompt-body[_ngcontent-%COMP%]{border-top:1px solid var(--border-subtle);padding:14px 16px;background:var(--bg-canvas)}.prompt-section[_ngcontent-%COMP%]{margin-bottom:14px}.prompt-section[_ngcontent-%COMP%]:last-child{margin-bottom:0}.section-lbl[_ngcontent-%COMP%]{font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted);margin-bottom:6px}.prompt-pre[_ngcontent-%COMP%]{margin:0;padding:10px 12px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;font-family:var(--font-mono);font-size:11.5px;line-height:1.55;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:280px;overflow-y:auto}.kv-row[_ngcontent-%COMP%]{display:grid;grid-template-columns:repeat(auto-fit,minmax(100px,1fr));gap:10px 18px}.kv[_ngcontent-%COMP%] .kv-lbl[_ngcontent-%COMP%]{font-size:10px;color:var(--text-muted);text-transform:uppercase;letter-spacing:.04em;font-weight:600}.kv[_ngcontent-%COMP%] .kv-val[_ngcontent-%COMP%]{font-size:12.5px;font-weight:600;margin-top:2px;color:var(--text-primary);font-variant-numeric:tabular-nums}.kv-val.cost[_ngcontent-%COMP%]{color:var(--accent)}.tools[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px}.tool-block[_ngcontent-%COMP%]{display:flex;flex-direction:column}.tool-row[_ngcontent-%COMP%]{appearance:none;background:var(--bg-panel);border:1px solid var(--border-subtle);color:inherit;font-family:inherit;text-align:left;display:flex;align-items:center;gap:8px;width:100%;padding:5px 10px;border-radius:6px;font-size:11.5px;cursor:pointer}.tool-row[_ngcontent-%COMP%]:hover:not(:disabled){background:var(--bg-hover)}.tool-row[_ngcontent-%COMP%]:disabled{cursor:default}.tool-row[_ngcontent-%COMP%]:focus-visible{outline:2px solid var(--accent);outline-offset:-2px}.tool-row.expanded[_ngcontent-%COMP%]{border-bottom-left-radius:0;border-bottom-right-radius:0}.tool-chevron[_ngcontent-%COMP%]{width:10px;color:var(--text-muted);transition:transform .12s;font-size:12px;flex-shrink:0;display:inline-block}.tool-chevron.open[_ngcontent-%COMP%]{transform:rotate(90deg);color:var(--accent)}.tool-name[_ngcontent-%COMP%]{font-weight:600;flex-shrink:0}.tool-input[_ngcontent-%COMP%]{color:var(--text-secondary);overflow:hidden;text-overflow:ellipsis;white-space:nowrap;flex:1;min-width:0;font-size:11px}.tool-bytes[_ngcontent-%COMP%]{font-size:10.5px;flex-shrink:0}.tool-input-json[_ngcontent-%COMP%]{margin:0;padding:10px 14px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-top:0;border-radius:0 0 6px 6px;font-family:var(--font-mono);font-size:11px;line-height:1.5;color:var(--text-primary);white-space:pre-wrap;word-break:break-word;max-height:320px;overflow-y:auto}.assistant-body[_ngcontent-%COMP%]{padding:10px 14px;background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;font-size:12.5px;line-height:1.55;color:var(--text-primary);max-height:480px;overflow-y:auto;overflow-wrap:anywhere}.thinking-details[_ngcontent-%COMP%]{background:var(--bg-panel);border:1px solid var(--border-subtle);border-radius:7px;padding:8px 12px}.thinking-summary[_ngcontent-%COMP%]{cursor:pointer;list-style:none;display:flex;align-items:center;gap:6px;font-size:10px;font-weight:700;text-transform:uppercase;letter-spacing:.05em;color:var(--text-muted)}.thinking-summary[_ngcontent-%COMP%]::-webkit-details-marker{display:none}.thinking-summary[_ngcontent-%COMP%]:before{content:"\\203a";display:inline-block;transition:transform .12s;font-size:14px;color:var(--text-muted)}.thinking-details[open][_ngcontent-%COMP%] .thinking-summary[_ngcontent-%COMP%]:before{transform:rotate(90deg);color:var(--accent)}.thinking-body[_ngcontent-%COMP%]{margin-top:10px;padding:8px 0 0;border-top:1px dashed var(--border-subtle);font-size:12px;line-height:1.55;color:var(--text-secondary);max-height:320px;overflow-y:auto;overflow-wrap:anywhere}.files-touched[_ngcontent-%COMP%]{display:flex;flex-direction:column;gap:3px;font-size:11.5px;max-height:180px;overflow-y:auto;padding:6px 10px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:6px}.files-touched[_ngcontent-%COMP%] .file-row[_ngcontent-%COMP%]{display:flex;align-items:center;min-width:0}.files-touched[_ngcontent-%COMP%] .file-path[_ngcontent-%COMP%]{overflow:hidden;text-overflow:ellipsis;white-space:nowrap;color:var(--text-secondary)}.loading[_ngcontent-%COMP%]{padding:40px 18px;text-align:center;color:var(--text-muted);font-size:13px}.error[_ngcontent-%COMP%]{padding:16px;margin:12px 0;border-radius:8px;border:1px solid rgba(255,90,90,.35);background:var(--error-soft);color:var(--error);display:flex;flex-direction:column;gap:8px;align-items:flex-start}.error-title[_ngcontent-%COMP%]{font-weight:600;font-size:13px}.error-detail[_ngcontent-%COMP%]{font-size:12px;color:var(--text-secondary)}.empty[_ngcontent-%COMP%]{padding:30px 18px;color:var(--text-muted);font-size:12.5px;text-align:center}.md-content[_ngcontent-%COMP%] .md-h1[_ngcontent-%COMP%]{font-size:14px;font-weight:650;color:var(--text-primary);letter-spacing:-.01em;margin:0 0 8px}.md-content[_ngcontent-%COMP%] .md-h2[_ngcontent-%COMP%]{font-size:12.5px;font-weight:650;color:var(--text-primary);margin:14px 0 4px;padding-bottom:3px;border-bottom:1px solid var(--border-subtle)}.md-content[_ngcontent-%COMP%] .md-h3[_ngcontent-%COMP%]{font-size:12px;font-weight:650;color:var(--text-primary);margin:12px 0 4px}.md-content[_ngcontent-%COMP%] .md-p[_ngcontent-%COMP%]{font-size:12.5px;line-height:1.6;color:var(--text-primary);margin:0 0 4px;overflow-wrap:anywhere}.md-content[_ngcontent-%COMP%] .md-p[_ngcontent-%COMP%] strong[_ngcontent-%COMP%]{color:var(--text-primary);font-weight:650}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%], .md-content[_ngcontent-%COMP%] .md-ol[_ngcontent-%COMP%]{padding:0;margin:4px 0 6px}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%], .md-content[_ngcontent-%COMP%] .md-ol[_ngcontent-%COMP%] li[_ngcontent-%COMP%]{position:relative;padding:2px 0 2px 20px;font-size:12.5px;line-height:1.55;color:var(--text-primary);overflow-wrap:anywhere}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%]{list-style:none}.md-content[_ngcontent-%COMP%] .md-list[_ngcontent-%COMP%] li[_ngcontent-%COMP%]:before{content:"\\2022";position:absolute;left:4px;top:1px;color:var(--text-faint)}.md-content[_ngcontent-%COMP%] .md-spacer[_ngcontent-%COMP%]{height:5px}.md-content[_ngcontent-%COMP%] .md-inline-code[_ngcontent-%COMP%]{font-size:11px;background:var(--bg-canvas);padding:1px 5px;border-radius:3px;border:1px solid var(--border-subtle);color:var(--node-spec)}.md-content[_ngcontent-%COMP%] .md-blockquote[_ngcontent-%COMP%]{margin:5px 0;padding:6px 10px;border-left:3px solid var(--accent);background:var(--accent-soft);color:var(--text-secondary);font-size:12px;line-height:1.5;border-radius:0 5px 5px 0}.md-content[_ngcontent-%COMP%] .md-pre[_ngcontent-%COMP%]{position:relative;margin:6px 0 8px;padding:10px 12px;background:var(--bg-canvas);border:1px solid var(--border-subtle);border-radius:6px;overflow-x:auto}.md-content[_ngcontent-%COMP%] .md-pre[_ngcontent-%COMP%] code[_ngcontent-%COMP%]{display:block;font-size:11px;line-height:1.5;color:var(--text-primary);white-space:pre}.md-content[_ngcontent-%COMP%] > [_ngcontent-%COMP%]:first-child{margin-top:0}'],changeDetection:0})};export{Ct as SessionDetail};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import"./chunk-Q7L6LLAK.js";var e={comments:{blockComment:["<!--","-->"]},brackets:[["{","}"],["[","]"],["(",")"]],autoClosingPairs:[{open:"{",close:"}"},{open:"[",close:"]"},{open:"(",close:")"},{open:"<",close:">",notIn:["string"]}],surroundingPairs:[{open:"(",close:")"},{open:"[",close:"]"},{open:"`",close:"`"}],folding:{markers:{start:new RegExp("^\\s*<!--\\s*#?region\\b.*-->"),end:new RegExp("^\\s*<!--\\s*#?endregion\\b.*-->")}}},t={defaultToken:"",tokenPostfix:".md",control:/[\\`*_\[\]{}()#+\-\.!]/,noncontrol:/[^\\`*_\[\]{}()#+\-\.!]/,escapes:/\\(?:@control)/,jsescapes:/\\(?:[btnfr\\"']|[0-7][0-7]?|[0-3][0-7]{2})/,empty:["area","base","basefont","br","col","frame","hr","img","input","isindex","link","meta","param"],tokenizer:{root:[[/^\s*\|/,"@rematch","@table_header"],[/^(\s{0,3})(#+)((?:[^\\#]|@escapes)+)((?:#+)?)/,["white","keyword","keyword","keyword"]],[/^\s*(=+|\-+)\s*$/,"keyword"],[/^\s*((\*[ ]?)+)\s*$/,"meta.separator"],[/^\s*>+/,"comment"],[/^\s*([\*\-+:]|\d+\.)\s/,"keyword"],[/^(\t|[ ]{4})[^ ].*$/,"string"],[/^\s*~~~\s*((?:\w|[\/\-#])+)?\s*$/,{token:"string",next:"@codeblock"}],[/^\s*```\s*((?:\w|[\/\-#])+).*$/,{token:"string",next:"@codeblockgh",nextEmbedded:"$1"}],[/^\s*```\s*$/,{token:"string",next:"@codeblock"}],{include:"@linecontent"}],table_header:[{include:"@table_common"},[/[^\|]+/,"keyword.table.header"]],table_body:[{include:"@table_common"},{include:"@linecontent"}],table_common:[[/\s*[\-:]+\s*/,{token:"keyword",switchTo:"table_body"}],[/^\s*\|/,"keyword.table.left"],[/^\s*[^\|]/,"@rematch","@pop"],[/^\s*$/,"@rematch","@pop"],[/\|/,{cases:{"@eos":"keyword.table.right","@default":"keyword.table.middle"}}]],codeblock:[[/^\s*~~~\s*$/,{token:"string",next:"@pop"}],[/^\s*```\s*$/,{token:"string",next:"@pop"}],[/.*$/,"variable.source"]],codeblockgh:[[/```\s*$/,{token:"string",next:"@pop",nextEmbedded:"@pop"}],[/[^`]+/,"variable.source"]],linecontent:[[/&\w+;/,"string.escape"],[/@escapes/,"escape"],[/\b__([^\\_]|@escapes|_(?!_))+__\b/,"strong"],[/\*\*([^\\*]|@escapes|\*(?!\*))+\*\*/,"strong"],[/\b_[^_]+_\b/,"emphasis"],[/\*([^\\*]|@escapes)+\*/,"emphasis"],[/`([^\\`]|@escapes)+`/,"variable"],[/\{+[^}]+\}+/,"string.target"],[/(!?\[)((?:[^\]\\]|@escapes)*)(\]\([^\)]+\))/,["string.link","","string.link"]],[/(!?\[)((?:[^\]\\]|@escapes)*)(\])/,"string.link"],{include:"html"}],html:[[/<(\w+)\/>/,"tag"],[/<(\w+)(\-|\w)*/,{cases:{"@empty":{token:"tag",next:"@tag.$1"},"@default":{token:"tag",next:"@tag.$1"}}}],[/<\/(\w+)(\-|\w)*\s*>/,{token:"tag"}],[/<!--/,"comment","@comment"]],comment:[[/[^<\-]+/,"comment.content"],[/-->/,"comment","@pop"],[/<!--/,"comment.content.invalid"],[/[<\-]/,"comment.content"]],tag:[[/[ \t\r\n]+/,"white"],[/(type)(\s*=\s*)(")([^"]+)(")/,["attribute.name.html","delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(type)(\s*=\s*)(')([^']+)(')/,["attribute.name.html","delimiter.html","string.html",{token:"string.html",switchTo:"@tag.$S2.$4"},"string.html"]],[/(\w+)(\s*=\s*)("[^"]*"|'[^']*')/,["attribute.name.html","delimiter.html","string.html"]],[/\w+/,"attribute.name.html"],[/\/>/,"tag","@pop"],[/>/,{cases:{"$S2==style":{token:"tag",switchTo:"embeddedStyle",nextEmbedded:"text/css"},"$S2==script":{cases:{$S3:{token:"tag",switchTo:"embeddedScript",nextEmbedded:"$S3"},"@default":{token:"tag",switchTo:"embeddedScript",nextEmbedded:"text/javascript"}}},"@default":{token:"tag",next:"@pop"}}}]],embeddedStyle:[[/[^<]+/,""],[/<\/style\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]],embeddedScript:[[/[^<]+/,""],[/<\/script\s*>/,{token:"@rematch",next:"@pop",nextEmbedded:"@pop"}],[/</,""]]}};export{e as conf,t as language};
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
<svg width="32" height="32" viewBox="0 0 32 32" fill="none" xmlns="http://www.w3.org/2000/svg">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="tile" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop stop-color="#12161E"></stop><stop offset="1" stop-color="#0B0D11"></stop>
|
|
5
|
+
</linearGradient>
|
|
6
|
+
</defs>
|
|
7
|
+
<rect width="32" height="32" rx="7" fill="url(#tile)"></rect>
|
|
8
|
+
<g transform="translate(16 16) scale(1.18) translate(-16 -16)">
|
|
9
|
+
<path d="M10 10 L22 16 L10 22" stroke="rgba(160,175,205,0.6)" stroke-width="2.3" stroke-linecap="round" stroke-linejoin="round" fill="none"></path>
|
|
10
|
+
<line x1="10" y1="10" x2="10" y2="22" stroke="rgba(160,175,205,0.45)" stroke-width="2.3" stroke-linecap="round"></line>
|
|
11
|
+
<circle cx="22" cy="16" r="4.1" fill="#5B93F2"></circle>
|
|
12
|
+
<circle cx="10" cy="10" r="3.3" fill="#A586F5"></circle>
|
|
13
|
+
<circle cx="10" cy="22" r="3.3" fill="#46C26B"></circle>
|
|
14
|
+
</g>
|
|
15
|
+
</svg>
|
|
Binary file
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 32 32" width="32" height="32">
|
|
2
|
+
<defs>
|
|
3
|
+
<linearGradient id="t" x1="0" y1="0" x2="32" y2="32" gradientUnits="userSpaceOnUse">
|
|
4
|
+
<stop stop-color="#12161E"/><stop offset="1" stop-color="#0B0D11"/>
|
|
5
|
+
</linearGradient>
|
|
6
|
+
<linearGradient id="l" x1="18" y1="11" x2="26" y2="21" gradientUnits="userSpaceOnUse">
|
|
7
|
+
<stop stop-color="#6FA0F6"/><stop offset="1" stop-color="#5B93F2"/>
|
|
8
|
+
</linearGradient>
|
|
9
|
+
</defs>
|
|
10
|
+
<rect width="32" height="32" rx="7.2" fill="url(#t)"/>
|
|
11
|
+
<rect x="0.5" y="0.5" width="31" height="31" rx="6.7" fill="none" stroke="rgba(255,255,255,0.08)"/>
|
|
12
|
+
<g transform="translate(4.6 4.6) scale(0.715)">
|
|
13
|
+
<path d="M5 16 H11 M11 9 L23 16 L11 23" stroke="rgba(150,165,200,0.5)" stroke-width="1.9" stroke-linecap="round" stroke-linejoin="round" fill="none"/>
|
|
14
|
+
<line x1="11" y1="9" x2="11" y2="23" stroke="rgba(150,165,200,0.4)" stroke-width="1.9" stroke-linecap="round"/>
|
|
15
|
+
<circle cx="23" cy="16" r="3.6" fill="url(#l)"/>
|
|
16
|
+
<circle cx="11" cy="9" r="2.9" fill="#A586F5"/>
|
|
17
|
+
<circle cx="11" cy="23" r="2.9" fill="#46C26B"/>
|
|
18
|
+
<circle cx="5" cy="16" r="2.1" fill="#29D2BE"/>
|
|
19
|
+
</g>
|
|
20
|
+
</svg>
|
|
Binary file
|
|
Binary file
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en" data-beasties-container>
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="utf-8">
|
|
5
|
+
<title>SpecShip Desktop</title>
|
|
6
|
+
<base href="/">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
8
|
+
<link rel="icon" type="image/svg+xml" href="favicon.svg">
|
|
9
|
+
<link rel="icon" type="image/png" sizes="32x32" href="favicon-32.png">
|
|
10
|
+
<link rel="icon" type="image/png" sizes="16x16" href="favicon-16.png">
|
|
11
|
+
<link rel="apple-touch-icon" sizes="180x180" href="favicon-180.png">
|
|
12
|
+
<link rel="manifest" href="manifest.webmanifest">
|
|
13
|
+
<meta name="theme-color" content="#0B0D11">
|
|
14
|
+
<meta name="description" content="SpecShip Desktop — see your codebase, understand your sessions.">
|
|
15
|
+
<link rel="preconnect" href="https://fonts.googleapis.com">
|
|
16
|
+
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
|
|
17
|
+
<style>@font-face{font-family:'Geist';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist';font-style:normal;font-weight:450;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:450;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:450;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:450;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:450;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist';font-style:normal;font-weight:650;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:650;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:650;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:650;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:650;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwRGFWfOw.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwYGFWfOw.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwTGFWfOw.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwSGFWfOw.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist';font-style:normal;font-weight:700;font-display:swap;src:url(https://fonts.gstatic.com/s/geist/v5/gyByhwUxId8gMEwcGFU.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');unicode-range:U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:400;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');unicode-range:U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:500;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrodmgPn.woff2) format('woff2');unicode-range:U+0460-052F, U+1C80-1C8A, U+20B4, U+2DE0-2DFF, U+A640-A69F, U+FE2E-FE2F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrMdmgPn.woff2) format('woff2');unicode-range:U+0301, U+0400-045F, U+0490-0491, U+04B0-04B1, U+2116;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFg08vz7ehw.woff2) format('woff2');unicode-range:U+2000-2001, U+2004-2008, U+200A, U+23B8-23BD, U+2500-259F;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrgdmgPn.woff2) format('woff2');unicode-range:U+0102-0103, U+0110-0111, U+0128-0129, U+0168-0169, U+01A0-01A1, U+01AF-01B0, U+0300-0301, U+0303-0304, U+0308-0309, U+0323, U+0329, U+1EA0-1EF9, U+20AB;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrkdmgPn.woff2) format('woff2');unicode-range:U+0100-02BA, U+02BD-02C5, U+02C7-02CC, U+02CE-02D7, U+02DD-02FF, U+0304, U+0308, U+0329, U+1D00-1DBF, U+1E00-1E9F, U+1EF2-1EFF, U+2020, U+20A0-20AB, U+20AD-20C0, U+2113, U+2C60-2C7F, U+A720-A7FF;}@font-face{font-family:'Geist Mono';font-style:normal;font-weight:600;font-display:swap;src:url(https://fonts.gstatic.com/s/geistmono/v6/or3nQ6H-1_WfwkMZI_qYFrcdmg.woff2) format('woff2');unicode-range:U+0000-00FF, U+0131, U+0152-0153, U+02BB-02BC, U+02C6, U+02DA, U+02DC, U+0304, U+0308, U+0329, U+2000-206F, U+20AC, U+2122, U+2191, U+2193, U+2212, U+2215, U+FEFF, U+FFFD;}</style>
|
|
18
|
+
<script>try{if(sessionStorage.getItem('specship-booted'))document.documentElement.className+=' booted';}catch(e){}</script>
|
|
19
|
+
<style>
|
|
20
|
+
html.booted #boot-splash{display:none!important;}
|
|
21
|
+
#boot-splash{position:fixed;inset:0;z-index:9999;display:grid;place-items:center;
|
|
22
|
+
background:radial-gradient(120% 90% at 50% 38%, rgba(59,130,246,0.10), transparent 60%),
|
|
23
|
+
radial-gradient(80% 70% at 50% 60%, rgba(165,134,245,0.06), transparent 60%),#0B0D11;
|
|
24
|
+
font-family:"Geist",system-ui,sans-serif;color:#E8EBF0;transition:opacity .55s ease;}
|
|
25
|
+
#boot-splash.done{opacity:0;pointer-events:none;}
|
|
26
|
+
#boot-splash .ambient{position:absolute;inset:0;pointer-events:none;
|
|
27
|
+
background:radial-gradient(40% 32% at 50% 40%, rgba(91,147,242,0.12), transparent 70%);
|
|
28
|
+
animation:bsBreathe 5.5s ease-in-out infinite;}
|
|
29
|
+
@keyframes bsBreathe{0%,100%{opacity:.55;transform:scale(1);}50%{opacity:1;transform:scale(1.08);}}
|
|
30
|
+
#boot-splash .splash{position:relative;display:flex;flex-direction:column;align-items:center;z-index:2;}
|
|
31
|
+
#boot-splash .markWrap{position:relative;width:170px;height:170px;display:grid;place-items:center;}
|
|
32
|
+
#boot-splash .glowPad{position:absolute;width:64px;height:64px;border-radius:50%;
|
|
33
|
+
background:radial-gradient(circle, rgba(91,147,242,0.6), transparent 70%);filter:blur(9px);
|
|
34
|
+
left:71.8%;top:50%;transform:translate(-50%,-50%);opacity:.5;
|
|
35
|
+
animation:bsLeadGlow 2.8s ease-in-out infinite;animation-delay:1.2s;}
|
|
36
|
+
@keyframes bsLeadGlow{0%,100%{opacity:.35;}50%{opacity:.85;}}
|
|
37
|
+
#boot-splash svg.mark{width:170px;height:170px;overflow:visible;}
|
|
38
|
+
#boot-splash circle.node{transform-box:fill-box;transform-origin:center;}
|
|
39
|
+
#boot-splash .edge{stroke:rgba(150,165,200,0.5);stroke-width:1.9;stroke-linecap:round;stroke-linejoin:round;fill:none;}
|
|
40
|
+
#boot-splash .splash.play circle.node{animation:bsPop .55s cubic-bezier(.34,1.56,.64,1) both;}
|
|
41
|
+
#boot-splash .splash.play .n-route{animation-delay:.05s;}
|
|
42
|
+
#boot-splash .splash.play .n-code{animation-delay:.42s;}
|
|
43
|
+
#boot-splash .splash.play .n-test{animation-delay:.52s;}
|
|
44
|
+
#boot-splash .splash.play .n-lead{animation-delay:.92s;animation-duration:.6s;}
|
|
45
|
+
@keyframes bsPop{0%{transform:scale(0);}70%{transform:scale(1.18);}100%{transform:scale(1);}}
|
|
46
|
+
#boot-splash .splash.play .e-wake{stroke-dasharray:7;animation:bsDraw .35s ease both;animation-delay:.18s;--len:7;}
|
|
47
|
+
#boot-splash .splash.play .e-spine{stroke-dasharray:15;animation:bsDraw .4s ease both;animation-delay:.3s;--len:15;}
|
|
48
|
+
#boot-splash .splash.play .e-up{stroke-dasharray:14.5;animation:bsDraw .45s ease both;animation-delay:.55s;--len:14.5;}
|
|
49
|
+
#boot-splash .splash.play .e-down{stroke-dasharray:14.5;animation:bsDraw .45s ease both;animation-delay:.62s;--len:14.5;}
|
|
50
|
+
@keyframes bsDraw{from{stroke-dashoffset:var(--len,15);}to{stroke-dashoffset:0;}}
|
|
51
|
+
#boot-splash .sonar{transform-box:fill-box;transform-origin:center;opacity:0;}
|
|
52
|
+
#boot-splash .splash.lit .sonar{animation:bsSonar 2.6s ease-out infinite;animation-delay:1.4s;}
|
|
53
|
+
@keyframes bsSonar{0%{transform:scale(.5);opacity:.6;}80%{opacity:0;}100%{transform:scale(2.6);opacity:0;}}
|
|
54
|
+
#boot-splash .streak{opacity:0;}
|
|
55
|
+
#boot-splash .splash.lit .streak{animation:bsStreak 2.4s ease-out infinite;}
|
|
56
|
+
#boot-splash .splash.lit .s1{animation-delay:1.5s;}
|
|
57
|
+
#boot-splash .splash.lit .s2{animation-delay:1.62s;}
|
|
58
|
+
#boot-splash .splash.lit .s3{animation-delay:1.74s;}
|
|
59
|
+
@keyframes bsStreak{0%{opacity:0;transform:translateX(0);}25%{opacity:.7;}100%{opacity:0;transform:translateX(7px);}}
|
|
60
|
+
#boot-splash .word{margin-top:18px;font-size:30px;font-weight:700;letter-spacing:-0.02em;display:flex;align-items:baseline;}
|
|
61
|
+
#boot-splash .word .desk{color:#8A93A3;font-weight:500;}
|
|
62
|
+
#boot-splash .splash.play .word{animation:bsRise .7s cubic-bezier(.2,.7,.3,1) both;animation-delay:.95s;}
|
|
63
|
+
@keyframes bsRise{from{opacity:0;transform:translateY(10px);}to{opacity:1;transform:translateY(0);}}
|
|
64
|
+
#boot-splash .status{margin-top:26px;height:18px;display:flex;align-items:center;gap:8px;font-size:12.5px;color:#8A93A3;font-family:"Geist Mono",monospace;}
|
|
65
|
+
#boot-splash .splash.play .status{animation:bsFade .5s ease both;animation-delay:1.5s;}
|
|
66
|
+
@keyframes bsFade{from{opacity:0;}to{opacity:1;}}
|
|
67
|
+
#boot-splash .status .dot{width:6px;height:6px;border-radius:50%;background:#5B93F2;box-shadow:0 0 8px #5B93F2;animation:bsBlink 1s ease-in-out infinite;}
|
|
68
|
+
@keyframes bsBlink{0%,100%{opacity:.35;}50%{opacity:1;}}
|
|
69
|
+
#boot-splash .status .ok{color:#46C26B;}
|
|
70
|
+
#boot-splash .bar{margin-top:22px;width:200px;height:2px;border-radius:2px;background:rgba(255,255,255,0.06);overflow:hidden;}
|
|
71
|
+
#boot-splash .splash.play .bar{animation:bsFade .5s ease both;animation-delay:1.5s;}
|
|
72
|
+
#boot-splash .bar::after{content:"";display:block;height:100%;width:40%;border-radius:2px;
|
|
73
|
+
background:linear-gradient(90deg,transparent,#5B93F2,transparent);animation:bsSlide 1.5s ease-in-out infinite;}
|
|
74
|
+
@keyframes bsSlide{0%{transform:translateX(-120%);}100%{transform:translateX(320%);}}
|
|
75
|
+
#boot-splash .ver{position:absolute;bottom:20px;left:0;right:0;text-align:center;font-size:11px;color:#5C6573;font-family:"Geist Mono",monospace;}
|
|
76
|
+
@media(prefers-reduced-motion:reduce){#boot-splash *{animation:none!important;}}
|
|
77
|
+
</style>
|
|
78
|
+
<style>@layer properties;@layer theme,base,components,utilities;@layer theme{:root{--font-sans:ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji";--font-mono:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;--spacing:.25rem;--ease-out:cubic-bezier(0, 0, .2, 1);--ease-in-out:cubic-bezier(.4, 0, .2, 1);--default-transition-duration:.15s;--default-transition-timing-function:cubic-bezier(.4, 0, .2, 1);--default-font-family:var(--font-sans);--default-mono-font-family:var(--font-mono)}}@layer base{*,:after,:before{box-sizing:border-box;margin:0;padding:0;border:0 solid}html{line-height:1.5;-webkit-text-size-adjust:100%;tab-size:4;font-family:var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji");font-feature-settings:var(--default-font-feature-settings, normal);font-variation-settings:var(--default-font-variation-settings, normal);-webkit-tap-highlight-color:transparent}svg{display:block;vertical-align:middle}}@layer utilities{}:root{color-scheme:dark;--bg-canvas:#0E1014;--bg-canvas-2:#0B0D11;--bg-panel:#161A21;--bg-panel-2:#1A1F28;--bg-elevated:#20262F;--bg-hover:rgba(255,255,255,.04);--bg-active:rgba(255,255,255,.07);--border-subtle:rgba(255,255,255,.07);--border-strong:rgba(255,255,255,.12);--border-focus:#3B82F6;--text-primary:#E8EBF0;--text-secondary:#9AA3B2;--text-muted:#5C6573;--text-faint:#424B59;--accent:#3B82F6;--accent-strong:#2563EB;--accent-soft:rgba(59,130,246,.14);--accent-line:rgba(59,130,246,.35);--node-code:#A586F5;--node-spec:#5B93F2;--node-test:#46C26B;--node-route:#29D2BE;--node-code-soft:rgba(165,134,245,.14);--node-spec-soft:rgba(91,147,242,.14);--node-test-soft:rgba(70,194,107,.14);--node-route-soft:rgba(41,210,190,.14);--node-text:#ffffff;--dot-grid:rgba(255,255,255,.045);--success:#46C26B;--success-soft:rgba(70,194,107,.13);--warn:#E5A50A;--warn-soft:rgba(229,165,10,.14);--error:#F2555A;--error-soft:rgba(242,85,90,.14);--info:#58A6FF;--info-soft:rgba(88,166,255,.13);--font-ui:"Geist", system-ui, -apple-system, sans-serif;--font-mono:"Geist Mono", ui-monospace, "SF Mono", Menlo, monospace;--fs-title:22px;--fs-base:13px;--fs-sm:12px;--fs-xs:11px;--fs-big:28px;--r-sm:5px;--r-md:8px;--r-lg:12px;--r-pill:999px;--shadow-pop:0 12px 32px -8px rgba(0,0,0,.6), 0 2px 8px rgba(0,0,0,.4);--shadow-panel:0 1px 0 rgba(255,255,255,.02) inset;--sidebar-w:232px;--sidebar-w-collapsed:56px;--status-h:30px}*{box-sizing:border-box}html,body{margin:0;padding:0;height:100%;background:var(--bg-canvas);color:var(--text-primary);font-family:var(--font-ui);font-size:var(--fs-base);line-height:1.45;-webkit-font-smoothing:antialiased;text-rendering:optimizeLegibility;font-feature-settings:"cv01","cv03","ss03";overflow:hidden}@media(prefers-reduced-motion:reduce){*{animation-duration:.001ms!important;transition-duration:.001ms!important}}@property --tw-rotate-x{syntax:"*";inherits:false;}@property --tw-rotate-y{syntax:"*";inherits:false;}@property --tw-rotate-z{syntax:"*";inherits:false;}@property --tw-skew-x{syntax:"*";inherits:false;}@property --tw-skew-y{syntax:"*";inherits:false;}@property --tw-border-style{syntax:"*";inherits:false;initial-value:solid;}@property --tw-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}@property --tw-shadow-color{syntax:"*";inherits:false;}@property --tw-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%;}@property --tw-inset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}@property --tw-inset-shadow-color{syntax:"*";inherits:false;}@property --tw-inset-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%;}@property --tw-ring-color{syntax:"*";inherits:false;}@property --tw-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}@property --tw-inset-ring-color{syntax:"*";inherits:false;}@property --tw-inset-ring-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}@property --tw-ring-inset{syntax:"*";inherits:false;}@property --tw-ring-offset-width{syntax:"<length>";inherits:false;initial-value:0px;}@property --tw-ring-offset-color{syntax:"*";inherits:false;initial-value:#fff;}@property --tw-ring-offset-shadow{syntax:"*";inherits:false;initial-value:0 0 #0000;}@property --tw-blur{syntax:"*";inherits:false;}@property --tw-brightness{syntax:"*";inherits:false;}@property --tw-contrast{syntax:"*";inherits:false;}@property --tw-grayscale{syntax:"*";inherits:false;}@property --tw-hue-rotate{syntax:"*";inherits:false;}@property --tw-invert{syntax:"*";inherits:false;}@property --tw-opacity{syntax:"*";inherits:false;}@property --tw-saturate{syntax:"*";inherits:false;}@property --tw-sepia{syntax:"*";inherits:false;}@property --tw-drop-shadow{syntax:"*";inherits:false;}@property --tw-drop-shadow-color{syntax:"*";inherits:false;}@property --tw-drop-shadow-alpha{syntax:"<percentage>";inherits:false;initial-value:100%;}@property --tw-drop-shadow-size{syntax:"*";inherits:false;}@property --tw-ease{syntax:"*";inherits:false;}@layer properties{@supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))){*,:before,:after{--tw-rotate-x:initial;--tw-rotate-y:initial;--tw-rotate-z:initial;--tw-skew-x:initial;--tw-skew-y:initial;--tw-border-style:solid;--tw-shadow:0 0 #0000;--tw-shadow-color:initial;--tw-shadow-alpha:100%;--tw-inset-shadow:0 0 #0000;--tw-inset-shadow-color:initial;--tw-inset-shadow-alpha:100%;--tw-ring-color:initial;--tw-ring-shadow:0 0 #0000;--tw-inset-ring-color:initial;--tw-inset-ring-shadow:0 0 #0000;--tw-ring-inset:initial;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-offset-shadow:0 0 #0000;--tw-blur:initial;--tw-brightness:initial;--tw-contrast:initial;--tw-grayscale:initial;--tw-hue-rotate:initial;--tw-invert:initial;--tw-opacity:initial;--tw-saturate:initial;--tw-sepia:initial;--tw-drop-shadow:initial;--tw-drop-shadow-color:initial;--tw-drop-shadow-alpha:100%;--tw-drop-shadow-size:initial;--tw-ease:initial}}}</style><link rel="stylesheet" href="styles-KSOPUVDA.css" media="print" onload="this.media='all'"><noscript><link rel="stylesheet" href="styles-KSOPUVDA.css"></noscript></head>
|
|
79
|
+
<body>
|
|
80
|
+
<div id="boot-splash" aria-hidden="true">
|
|
81
|
+
<div class="ambient"></div>
|
|
82
|
+
<div class="splash">
|
|
83
|
+
<div class="markWrap">
|
|
84
|
+
<div class="glowPad"></div>
|
|
85
|
+
<svg class="mark" viewBox="0 0 32 32">
|
|
86
|
+
<defs>
|
|
87
|
+
<linearGradient id="bsLead" x1="18" y1="11" x2="26" y2="21" gradientUnits="userSpaceOnUse">
|
|
88
|
+
<stop stop-color="#6FA0F6"/><stop offset="1" stop-color="#5B93F2"/>
|
|
89
|
+
</linearGradient>
|
|
90
|
+
</defs>
|
|
91
|
+
<circle class="sonar" cx="23" cy="16" r="3.6" fill="none" stroke="#5B93F2" stroke-width="1"/>
|
|
92
|
+
<g stroke="#29D2BE" stroke-width="1.3" stroke-linecap="round" opacity="0.9">
|
|
93
|
+
<line class="streak s1" x1="27" y1="16" x2="29.5" y2="16"/>
|
|
94
|
+
<line class="streak s2" x1="26.5" y1="13" x2="28.5" y2="13"/>
|
|
95
|
+
<line class="streak s3" x1="26.5" y1="19" x2="28.5" y2="19"/>
|
|
96
|
+
</g>
|
|
97
|
+
<line class="edge e-wake" x1="5" y1="16" x2="11" y2="16"/>
|
|
98
|
+
<line class="edge e-spine" x1="11" y1="9" x2="11" y2="23"/>
|
|
99
|
+
<path class="edge e-up" d="M11 9 L23 16"/>
|
|
100
|
+
<path class="edge e-down" d="M23 16 L11 23"/>
|
|
101
|
+
<circle class="node n-route" cx="5" cy="16" r="2.1" fill="#29D2BE"/>
|
|
102
|
+
<circle class="node n-code" cx="11" cy="9" r="2.9" fill="#A586F5"/>
|
|
103
|
+
<circle class="node n-test" cx="11" cy="23" r="2.9" fill="#46C26B"/>
|
|
104
|
+
<circle class="node n-lead" cx="23" cy="16" r="3.6" fill="url(#bsLead)"/>
|
|
105
|
+
</svg>
|
|
106
|
+
</div>
|
|
107
|
+
<div class="word">SpecShip<span class="desk"> Desktop</span></div>
|
|
108
|
+
<div class="status"><span class="dot"></span><span id="bs-status">Connecting to MCP server</span></div>
|
|
109
|
+
<div class="bar"></div>
|
|
110
|
+
</div>
|
|
111
|
+
<div class="ver">v0.4.0 · better-sqlite3</div>
|
|
112
|
+
</div>
|
|
113
|
+
<script>
|
|
114
|
+
(function(){
|
|
115
|
+
var el = document.getElementById('boot-splash');
|
|
116
|
+
if(!el) return;
|
|
117
|
+
if(document.documentElement.classList.contains('booted')){ el.parentNode.removeChild(el); return; }
|
|
118
|
+
try{ sessionStorage.setItem('specship-booted','1'); }catch(e){}
|
|
119
|
+
var splash = el.querySelector('.splash');
|
|
120
|
+
var statusText = el.querySelector('#bs-status');
|
|
121
|
+
var statusEl = el.querySelector('.status');
|
|
122
|
+
var steps = ["Connecting to MCP server","Loading knowledge graph","Reading session transcripts","Resolving spec links","Ready"];
|
|
123
|
+
function dismiss(){ el.classList.add('done'); setTimeout(function(){ if(el.parentNode) el.parentNode.removeChild(el); }, 600); }
|
|
124
|
+
var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches;
|
|
125
|
+
if(reduce){ setTimeout(dismiss, 800); return; }
|
|
126
|
+
splash.classList.add('play');
|
|
127
|
+
setTimeout(function(){ splash.classList.add('lit'); }, 1100);
|
|
128
|
+
setTimeout(function(){
|
|
129
|
+
var i = 0;
|
|
130
|
+
var t = setInterval(function(){
|
|
131
|
+
i++;
|
|
132
|
+
if(i >= steps.length){ clearInterval(t); return; }
|
|
133
|
+
statusText.textContent = steps[i];
|
|
134
|
+
if(i === steps.length-1){
|
|
135
|
+
var d = statusEl.querySelector('.dot'); d.className = 'dot ok';
|
|
136
|
+
d.style.background = '#46C26B'; d.style.boxShadow = '0 0 8px #46C26B'; d.style.animation = 'none';
|
|
137
|
+
statusText.className = 'ok';
|
|
138
|
+
}
|
|
139
|
+
}, 470);
|
|
140
|
+
}, 1200);
|
|
141
|
+
setTimeout(dismiss, 3500);
|
|
142
|
+
})();
|
|
143
|
+
</script>
|
|
144
|
+
<app-root></app-root>
|
|
145
|
+
<link rel="modulepreload" href="chunk-LGNSHRCE.js"><link rel="modulepreload" href="chunk-H5TWEFYX.js"><link rel="modulepreload" href="chunk-DSGNOCKQ.js"><link rel="modulepreload" href="chunk-B3CWIVBW.js"><link rel="modulepreload" href="chunk-W22AVG3N.js"><link rel="modulepreload" href="chunk-4JYHAP7B.js"><link rel="modulepreload" href="chunk-MFHO2F2U.js"><link rel="modulepreload" href="chunk-Q7L6LLAK.js"><script src="main-SQFUMVQA.js" type="module"></script></body>
|
|
146
|
+
</html>
|