specrails-desktop 2.8.0 → 2.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -19
- package/client/dist/assets/{ActivityFeedPage-LKqd18-G.js → ActivityFeedPage-DNqnf1fZ.js} +1 -1
- package/client/dist/assets/{AgentsPage-Cb-b-6Ot.js → AgentsPage-vmNIEbGM.js} +1 -1
- package/client/dist/assets/{AnalyticsPage-HVxQQ1wy.js → AnalyticsPage-CdfN0ofZ.js} +1 -1
- package/client/dist/assets/{BarChart-BOyHB0dw.js → BarChart-CIkopHjl.js} +1 -1
- package/client/dist/assets/{CodePage-DnOnwKGB.js → CodePage-DDRNU5FN.js} +1 -1
- package/client/dist/assets/{DesktopAnalyticsPage-D2auU39x.js → DesktopAnalyticsPage-Cl3sKKSG.js} +1 -1
- package/client/dist/assets/{DocsDialog-CTuDX3GK.js → DocsDialog-BGrBOfUr.js} +2 -2
- package/client/dist/assets/{DocsPage-DRyMmu0Z.js → DocsPage-CY-2SSzw.js} +2 -2
- package/client/dist/assets/{ExportDropdown-DO-GGiMh.js → ExportDropdown-BRHcvP0r.js} +1 -1
- package/client/dist/assets/{IntegrationsPage-BhbO4jFT.js → IntegrationsPage-nKdLB4Ub.js} +1 -1
- package/client/dist/assets/{JobDetailPage-DJooEg1s.js → JobDetailPage-Bf0A6WWQ.js} +1 -1
- package/client/dist/assets/{JobsPage-BbaC-YOg.js → JobsPage-Vg4nXPdL.js} +1 -1
- package/client/dist/assets/{dist-js-CiIVMsx3.js → dist-js-0i_klubI.js} +1 -1
- package/client/dist/assets/{dist-js-Xc2lRKp2.js → dist-js-CUs5GjwA.js} +1 -1
- package/client/dist/assets/{index-DK214dak.js → index-BXoHFtfG.js} +8 -8
- package/client/dist/assets/index-D6BaYRRU.css +2 -0
- package/client/dist/assets/{integrations-2C7MkGT0.js → integrations-7YyTBuU9.js} +1 -1
- package/client/dist/assets/{integrations-CX4p_bij.js → integrations-B9CEpNF0.js} +1 -1
- package/client/dist/assets/{integrations-C2jQtv-s.js → integrations-BlvAdewo.js} +1 -1
- package/client/dist/assets/{integrations-eQPHAYsE.js → integrations-Bw8UM9Xd.js} +1 -1
- package/client/dist/assets/{integrations-BDC670cg.js → integrations-C5SxNKnG.js} +1 -1
- package/client/dist/assets/{integrations-BqUmRUef.js → integrations-CJQKMmdW.js} +1 -1
- package/client/dist/assets/{integrations-CB98NeH5.js → integrations-DWz1eU_K.js} +1 -1
- package/client/dist/assets/{integrations-_SuVeQIG.js → integrations-DiPR8Fzp.js} +1 -1
- package/client/dist/assets/{lib-Bo5s6xpe.js → lib-D6M_MvoC.js} +1 -1
- package/client/dist/assets/setup-B6egeeTM.js +1 -0
- package/client/dist/assets/setup-BHroXlke.js +1 -0
- package/client/dist/assets/setup-BIXsWUp1.js +1 -0
- package/client/dist/assets/setup-BJRdg1iE.js +1 -0
- package/client/dist/assets/setup-C0rVGnCy.js +1 -0
- package/client/dist/assets/setup-Cpu17hJv.js +1 -0
- package/client/dist/assets/setup-D-1r0uSx.js +1 -0
- package/client/dist/assets/setup-Dn2-veYO.js +1 -0
- package/client/dist/assets/{useProjectCache-DVNypkmR.js → useProjectCache-BeyBSNpD.js} +1 -1
- package/client/dist/index.html +4 -4
- package/docs/README.md +5 -2
- package/docs/agy-cli-provider-study.md +78 -0
- package/docs/cli.md +23 -4
- package/docs/codex.md +116 -58
- package/docs/creating-specs.md +19 -5
- package/docs/customizing.md +27 -6
- package/docs/gemini.md +225 -73
- package/docs/getting-started.md +18 -9
- package/docs/guide/de/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/de/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/de/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/de/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/de/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/de/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/de/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/de/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/de/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/de/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/de/insights/3-code-explorer.md +50 -0
- package/docs/guide/de/integrations/1-ai-providers.md +64 -0
- package/docs/guide/de/integrations/2-plugins.md +44 -0
- package/docs/guide/de/integrations/3-jira-integration.md +71 -0
- package/docs/guide/de/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/de/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/de/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/de/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/de/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/de/settings/1-themes.md +37 -0
- package/docs/guide/de/settings/2-language.md +39 -0
- package/docs/guide/de/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/de/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/de/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/de/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/de/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/de/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/en/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/en/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/en/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/en/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/en/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/en/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/en/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/en/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/en/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/en/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/en/insights/3-code-explorer.md +50 -0
- package/docs/guide/en/integrations/1-ai-providers.md +64 -0
- package/docs/guide/en/integrations/2-plugins.md +44 -0
- package/docs/guide/en/integrations/3-jira-integration.md +71 -0
- package/docs/guide/en/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/en/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/en/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/en/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/en/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/en/settings/1-themes.md +37 -0
- package/docs/guide/en/settings/2-language.md +39 -0
- package/docs/guide/en/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/en/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/en/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/en/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/en/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/en/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/es/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/es/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/es/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/es/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/es/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/es/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/es/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/es/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/es/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/es/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/es/insights/3-code-explorer.md +50 -0
- package/docs/guide/es/integrations/1-ai-providers.md +64 -0
- package/docs/guide/es/integrations/2-plugins.md +44 -0
- package/docs/guide/es/integrations/3-jira-integration.md +71 -0
- package/docs/guide/es/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/es/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/es/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/es/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/es/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/es/settings/1-themes.md +37 -0
- package/docs/guide/es/settings/2-language.md +39 -0
- package/docs/guide/es/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/es/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/es/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/es/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/es/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/es/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/fr/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/fr/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/fr/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/fr/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/fr/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/fr/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/fr/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/fr/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/fr/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/fr/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/fr/insights/3-code-explorer.md +50 -0
- package/docs/guide/fr/integrations/1-ai-providers.md +64 -0
- package/docs/guide/fr/integrations/2-plugins.md +44 -0
- package/docs/guide/fr/integrations/3-jira-integration.md +71 -0
- package/docs/guide/fr/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/fr/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/fr/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/fr/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/fr/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/fr/settings/1-themes.md +37 -0
- package/docs/guide/fr/settings/2-language.md +39 -0
- package/docs/guide/fr/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/fr/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/fr/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/fr/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/fr/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/fr/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/it/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/it/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/it/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/it/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/it/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/it/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/it/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/it/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/it/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/it/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/it/insights/3-code-explorer.md +50 -0
- package/docs/guide/it/integrations/1-ai-providers.md +64 -0
- package/docs/guide/it/integrations/2-plugins.md +44 -0
- package/docs/guide/it/integrations/3-jira-integration.md +71 -0
- package/docs/guide/it/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/it/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/it/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/it/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/it/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/it/settings/1-themes.md +37 -0
- package/docs/guide/it/settings/2-language.md +39 -0
- package/docs/guide/it/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/it/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/it/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/it/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/it/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/it/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/ja/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/ja/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/ja/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/ja/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/ja/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/ja/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/ja/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/ja/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/ja/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/ja/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/ja/insights/3-code-explorer.md +50 -0
- package/docs/guide/ja/integrations/1-ai-providers.md +64 -0
- package/docs/guide/ja/integrations/2-plugins.md +44 -0
- package/docs/guide/ja/integrations/3-jira-integration.md +71 -0
- package/docs/guide/ja/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/ja/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/ja/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/ja/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/ja/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/ja/settings/1-themes.md +37 -0
- package/docs/guide/ja/settings/2-language.md +39 -0
- package/docs/guide/ja/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/ja/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/ja/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/ja/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/ja/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/ja/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/pt/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/pt/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/pt/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/pt/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/pt/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/pt/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/pt/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/pt/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/pt/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/pt/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/pt/insights/3-code-explorer.md +50 -0
- package/docs/guide/pt/integrations/1-ai-providers.md +64 -0
- package/docs/guide/pt/integrations/2-plugins.md +44 -0
- package/docs/guide/pt/integrations/3-jira-integration.md +71 -0
- package/docs/guide/pt/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/pt/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/pt/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/pt/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/pt/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/pt/settings/1-themes.md +37 -0
- package/docs/guide/pt/settings/2-language.md +39 -0
- package/docs/guide/pt/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/pt/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/pt/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/pt/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/pt/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/pt/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/guide/zh/agents/1-meet-the-agents.md +38 -0
- package/docs/guide/zh/agents/2-profiles-and-the-balanced-default.md +45 -0
- package/docs/guide/zh/agents/3-customizing-models-per-agent.md +60 -0
- package/docs/guide/zh/agents/4-custom-agents-catalog.md +43 -0
- package/docs/guide/zh/getting-started/1-what-is-specrails.md +49 -0
- package/docs/guide/zh/getting-started/2-installing-and-first-run.md +42 -0
- package/docs/guide/zh/getting-started/3-adding-your-first-project.md +58 -0
- package/docs/guide/zh/getting-started/4-the-dashboard-tour.md +53 -0
- package/docs/guide/zh/insights/1-analytics-and-cost-tracking.md +78 -0
- package/docs/guide/zh/insights/2-the-integrated-terminal.md +46 -0
- package/docs/guide/zh/insights/3-code-explorer.md +50 -0
- package/docs/guide/zh/integrations/1-ai-providers.md +64 -0
- package/docs/guide/zh/integrations/2-plugins.md +44 -0
- package/docs/guide/zh/integrations/3-jira-integration.md +71 -0
- package/docs/guide/zh/integrations/4-mobile-companion.md +38 -0
- package/docs/guide/zh/pipeline/1-rails-and-jobs.md +94 -0
- package/docs/guide/zh/pipeline/2-the-job-detail-view.md +90 -0
- package/docs/guide/zh/pipeline/3-batch-implement-and-multi-feature.md +78 -0
- package/docs/guide/zh/pipeline/4-picking-an-engine-per-rail.md +60 -0
- package/docs/guide/zh/settings/1-themes.md +37 -0
- package/docs/guide/zh/settings/2-language.md +39 -0
- package/docs/guide/zh/settings/3-pipeline-telemetry-and-diagnostics.md +46 -0
- package/docs/guide/zh/settings/4-where-your-data-lives.md +48 -0
- package/docs/guide/zh/specs/1-specs-and-the-backlog.md +52 -0
- package/docs/guide/zh/specs/2-add-spec-quick-mode.md +45 -0
- package/docs/guide/zh/specs/3-add-spec-explore-mode.md +68 -0
- package/docs/guide/zh/specs/4-drafts-and-contract-layer.md +81 -0
- package/docs/internals/README.md +1 -1
- package/docs/internals/adding-a-provider.md +192 -59
- package/docs/internals/api-reference.md +130 -21
- package/docs/internals/architecture.md +22 -9
- package/docs/internals/bundled-framework-build-plan.md +264 -0
- package/docs/internals/configuration.md +33 -8
- package/docs/internals/global-artifacts-alignment-contract.md +486 -0
- package/docs/internals/global-artifacts-relocation-evaluation.md +294 -0
- package/docs/internals/operations-runbook.md +16 -5
- package/docs/internals/profiles.md +42 -14
- package/docs/platforms/macos.md +27 -8
- package/docs/platforms/windows.md +20 -6
- package/docs/running-pipelines.md +17 -9
- package/docs/terminal.md +9 -3
- package/docs/tracking-cost.md +17 -11
- package/package.json +1 -1
- package/server/dist/agent-refine-manager.js +20 -5
- package/server/dist/artifact-registry.js +468 -0
- package/server/dist/attachment-manager.js +5 -8
- package/server/dist/browser-capture-manager.js +4 -4
- package/server/dist/bundled-core.js +72 -0
- package/server/dist/bundled-openspec.js +58 -0
- package/server/dist/chat-manager.js +42 -5
- package/server/dist/code-explorer-router.js +10 -7
- package/server/dist/config.js +7 -2
- package/server/dist/context-budget.js +17 -6
- package/server/dist/context-scope.js +6 -2
- package/server/dist/contract-refine-runner.js +31 -9
- package/server/dist/desktop-router.js +24 -1
- package/server/dist/docs-router.js +210 -132
- package/server/dist/file-summary-manager.js +41 -16
- package/server/dist/framework-manager.js +248 -0
- package/server/dist/framework-migration.js +308 -0
- package/server/dist/index.js +30 -0
- package/server/dist/install-config-path.js +73 -0
- package/server/dist/jira/jira-sync-manager.js +23 -11
- package/server/dist/openspec-shim.js +153 -0
- package/server/dist/plugins-router.js +19 -8
- package/server/dist/profiles-router.js +38 -16
- package/server/dist/project-registry.js +101 -3
- package/server/dist/project-router-chat.js +1 -1
- package/server/dist/project-router-helpers.js +25 -12
- package/server/dist/project-router-jobs.js +3 -3
- package/server/dist/project-router-settings.js +8 -6
- package/server/dist/project-router-setup.js +27 -10
- package/server/dist/project-router-spending.js +6 -1
- package/server/dist/project-router-tickets.js +30 -10
- package/server/dist/project-router.js +16 -1
- package/server/dist/queue-manager.js +149 -18
- package/server/dist/setup-manager.js +131 -29
- package/server/dist/smash-runner.js +21 -6
- package/server/dist/ticket-store.js +6 -2
- package/server/dist/ticket-watcher.js +5 -1
- package/server/dist/vitest-setup.js +25 -0
- package/server/dist/workspace-manager.js +199 -0
- package/server/dist/workspace-resolution.js +147 -0
- package/client/dist/assets/index-DgKfQFcf.css +0 -2
- package/client/dist/assets/setup-BIIkb-_K.js +0 -1
- package/client/dist/assets/setup-BeQxu9kD.js +0 -1
- package/client/dist/assets/setup-CPa6GnlI.js +0 -1
- package/client/dist/assets/setup-CZl4OEJx.js +0 -1
- package/client/dist/assets/setup-ChpodNfn.js +0 -1
- package/client/dist/assets/setup-D_fjJH6u.js +0 -1
- package/client/dist/assets/setup-YzD8DX4O.js +0 -1
- package/client/dist/assets/setup-fRpDozmq.js +0 -1
- package/docs/adding-a-provider.md +0 -107
|
@@ -50,21 +50,28 @@ Compare the output against the matching architecture's `sha256` (`platforms["win
|
|
|
50
50
|
The desktop app ships its own **Node** and **Git** runtimes inside the bundle, so you do **not** need to pre-install them:
|
|
51
51
|
|
|
52
52
|
- `runtimes/node/{node.exe, npm.cmd, npx.cmd}`
|
|
53
|
-
- `runtimes/git/cmd/git.exe`
|
|
53
|
+
- `runtimes/git/cmd/git.exe` (the app probes this path first, then falls back to `runtimes/git/bin/git.exe` — PortableGit ships the real binary at `cmd/git.exe` with a redirector at `bin/git.exe`)
|
|
54
54
|
|
|
55
55
|
When the bundle is present, the Tauri host sets `SPECRAILS_IS_DESKTOP=1` and `SPECRAILS_BUNDLED_RUNTIMES_PATH`, and the embedded server prepends the bundled `node`/`git` directories to the front of `PATH` so a system install can never shadow them. If a build ships **without** the runtimes (or a partial extraction occurs), the app does not dead-end — it falls back to discovering `node`/`git` on your system `PATH` (probed with Windows `where.exe`) instead of reporting a corrupted bundle.
|
|
56
56
|
|
|
57
|
-
The **provider CLIs** — **Claude Code** and **
|
|
57
|
+
The **provider CLIs** — **Claude Code**, **Codex**, and **Gemini** — are **never bundled**. All three are probed via your system `PATH`, in every mode (using Windows `where.exe`). Install at least one before adding a project; the prerequisites panel blocks Add Project until one is usable. All three are enabled by default; you can roll one back with `SPECRAILS_CODEX_BETA=0` or `SPECRAILS_GEMINI_BETA=0` (each disabled only by the exact string `0`). See the per-provider setup guides: [Codex](../codex.md) and [Gemini](../gemini.md).
|
|
58
58
|
|
|
59
59
|
## Updates
|
|
60
60
|
|
|
61
|
-
The desktop app self-updates via the Tauri updater plugin. It checks a GitHub Releases `latest.json` endpoint and, on Windows, applies updates with `installMode: "passive"` — the update runs with a minimal progress UI and the app relaunches into the new version.
|
|
61
|
+
The desktop app self-updates via the Tauri updater plugin. It checks a GitHub Releases `latest.json` endpoint and, on Windows, applies updates with `installMode: "passive"` — the update runs with a minimal progress UI and the app relaunches into the new version.
|
|
62
|
+
|
|
63
|
+
Note that updates are delivered as the **MSI** (verified by an embedded **minisign** signature the updater checks before applying), not the NSIS `-setup.exe` used for first install. Because the installers are not Authenticode-signed, an applied update may still surface the same SmartScreen prompt; click **More info → Run anyway** as during the first install.
|
|
62
64
|
|
|
63
65
|
## Setup wizard
|
|
64
66
|
|
|
65
|
-
When you add a project, the setup wizard runs `npx specrails-core
|
|
67
|
+
When you add a project, the setup wizard runs `npx specrails-core@^4.8.0 init --from-config` under the hood (the full spawn is `npx --yes --prefer-online specrails-core@^4.8.0 init --yes --from-config <tempPath>`, with the app writing a temporary `install-config.yaml`). The wizard has three steps — **Configure / Install / Done**.
|
|
68
|
+
|
|
69
|
+
There are two distinct version floors to be aware of:
|
|
70
|
+
|
|
71
|
+
- The app **installs** `specrails-core@^4.8.0` — the major-pinned range it ships (4.8.0 is the release that adds the Gemini provider target). The exact package spec is the `CORE_PACKAGE_SPEC` constant in `server/core-package.ts`, so it stays verifiable in one place. You need internet access at install time so `npx` can resolve it.
|
|
72
|
+
- The minimum it will **accept** at runtime is **specrails-core ≥ 4.1.0** — the Node-native installer floor (`MIN_NODE_NATIVE_CORE_VERSION`). Anything below that is a legacy bash/python3 installer and cannot run on Windows without WSL.
|
|
66
73
|
|
|
67
|
-
|
|
74
|
+
You can point the app at a local or linked build with the `SPECRAILS_CORE_BIN` environment variable (it overrides the `npx` spec above).
|
|
68
75
|
|
|
69
76
|
Reserved paths (`.specrails/profiles/**`, `.claude/agents/custom-*.md`) are preserved across re-runs per the contract documented in [specrails-core's README](https://github.com/fjpulidop/specrails-core#reserved-paths).
|
|
70
77
|
|
|
@@ -76,6 +83,13 @@ Reserved paths (`.specrails/profiles/**`, `.claude/agents/custom-*.md`) are pres
|
|
|
76
83
|
## Known limitations
|
|
77
84
|
|
|
78
85
|
- **Terminal panel shell**: the bottom terminal panel auto-prefers **PowerShell 7 (`pwsh.exe`)** when it is on your `PATH`, then falls back to Windows PowerShell (`powershell.exe`), and finally `COMSPEC`/`cmd.exe`. Set the `SHELL` environment variable to override the platform default with any shell you prefer. Per-session shell selection is not yet exposed in the UI.
|
|
79
|
-
- **Port 4200** must be free on launch. The app binds `127.0.0.1:4200` for its API + WebSocket. If another process holds it, the app shows a native **Specrails — Port Conflict** dialog and exits.
|
|
86
|
+
- **Port 4200** must be free on launch. The app binds `127.0.0.1:4200` for its API + WebSocket. If another process holds it, the app shows a native **Specrails — Port Conflict** dialog and exits. When you need to investigate, two files under `%USERPROFILE%\.specrails\` help: `desktop.log` (the embedded server's log output) and `manager.pid` (the running server's process ID).
|
|
80
87
|
- **Custom window chrome**: the app uses a frameless window with a custom titlebar; the min/max/close controls are rendered by the app.
|
|
81
88
|
- **Code signing**: Windows builds are unsigned in v1 (see SmartScreen above). Authenticode signing is deferred to a later release.
|
|
89
|
+
|
|
90
|
+
## See also
|
|
91
|
+
|
|
92
|
+
- [macOS platform guide](./macos.md) — the equivalent guide for Apple Silicon.
|
|
93
|
+
- [Getting started](../getting-started.md) — first run, adding a project, the dashboard tour.
|
|
94
|
+
- [Codex provider setup](../codex.md) and [Gemini provider setup](../gemini.md) — installing and configuring the provider CLIs.
|
|
95
|
+
- [CLI reference](../cli.md) — driving Specrails from the command line.
|
|
@@ -21,7 +21,7 @@ SpecsBoard (left) Rails (right)
|
|
|
21
21
|
|
|
22
22
|
A **rail** is an execution lane. Drag a spec card from the SpecsBoard onto a rail and press **▶ Play** to launch the pipeline. Rails let you organise and queue work into named lanes.
|
|
23
23
|
|
|
24
|
-
Rails run on **Claude** by default. If your project has
|
|
24
|
+
Rails run on **Claude** by default. If your project has more than one provider installed, a per-rail engine selector lets you launch a rail on **Codex** or **Gemini** instead — see [Using Codex](codex.md) and [Using Gemini](gemini.md). Only **Ultracode** mode is Claude-only; the standard Implement and Batch pipelines run on any installed provider.
|
|
25
25
|
|
|
26
26
|
> **One job at a time per project.** Each project has a single queue, so within a project only one rail job runs at a time; the rest queue behind it. Real parallelism is **across projects** — open two projects and their rails run independently. See [Running multiple rails](#running-multiple-rails).
|
|
27
27
|
|
|
@@ -33,7 +33,7 @@ Each rail has a header with:
|
|
|
33
33
|
- **Spec list** — the IDs of the specs assigned to this rail. Drag in more, drag out to detach. You can also use the **Move to rail** popover from a spec card; it shows a status dot per rail so you don't push work onto a busy lane.
|
|
34
34
|
- **Mode segmented control** — `Implement`, `Batch`, and (Claude rails only) `Ultra`. See [Rail modes](#rail-modes).
|
|
35
35
|
- **Profile picker** — which agent profile this rail uses. This only appears once the project has **at least one** profile (create them on the Agents page). When present, `No profile` runs the rail in legacy mode.
|
|
36
|
-
- **Engine selector** — Claude
|
|
36
|
+
- **Engine selector** — pick which installed provider (Claude, Codex, or Gemini) runs this rail. Only renders on projects with more than one provider installed.
|
|
37
37
|
- **Play / Stop button** — start or cancel.
|
|
38
38
|
|
|
39
39
|
### Rail modes
|
|
@@ -54,7 +54,7 @@ The mode is a segmented control in the rail header, persisted per rail.
|
|
|
54
54
|
Architect ──► Developer ──► Reviewer ──► Ship
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
Each phase is a specialised Claude
|
|
57
|
+
Each phase is a specialised agent invoked by the rail's engine (Claude, Codex, or Gemini) in your project's working directory:
|
|
58
58
|
|
|
59
59
|
| Phase | Agent | What it does |
|
|
60
60
|
|-------|-------|--------------|
|
|
@@ -63,7 +63,7 @@ Each phase is a specialised Claude Code agent invoked in your project's working
|
|
|
63
63
|
| Reviewer | `sr-reviewer` | Reviews the output |
|
|
64
64
|
| Ship | (varies) | Final wrap-up: tests, commit, PR draft |
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
In plain terms: the project's **agent profile** decides which AI agent handles each phase. The baseline trio (`sr-architect`, `sr-developer`, `sr-reviewer`) is always present; a profile's routing rules can add extra agents or swap which one runs a phase. The phase progress bar only renders when the command defines phases. For the full format, see [internals/profiles.md](internals/profiles.md).
|
|
67
67
|
|
|
68
68
|
### Ultracode mode
|
|
69
69
|
|
|
@@ -72,9 +72,10 @@ The exact agent for each phase is determined by your project's agent profile. Th
|
|
|
72
72
|
- **One job per spec.** If the rail has three specs, `Ultra` launches three independent jobs.
|
|
73
73
|
- **Variable cost.** Because the run is open-ended, pressing Play opens a confirmation dialog before anything spawns.
|
|
74
74
|
- **Model picker.** A per-rail control lets you pick **Haiku / Sonnet / Opus** (default Sonnet) for the Ultracode run.
|
|
75
|
-
- **Claude only.** The `Ultra` segment and its model picker only appear when the rail's engine is Claude.
|
|
75
|
+
- **Claude only.** The `Ultra` segment and its model picker only appear when the rail's engine is Claude. Codex and Gemini rails can't run Ultracode, and agent profiles don't apply to Ultracode rails.
|
|
76
|
+
- **Interactive (optional).** An `Interactive` toggle next to the `Ultra` segment turns the run into a back-and-forth session: you can chat with the running job, send follow-up prompts, and click **Finalize** when you're done. Without it, the job runs to completion on its own. (Available when the rail is idle; can be disabled server-side via `SPECRAILS_INTERACTIVE_JOBS=false`.)
|
|
76
77
|
|
|
77
|
-
You can customise the Ultracode pre-prompt per project on the [Settings page](customizing.md#
|
|
78
|
+
You can customise the Ultracode pre-prompt per project on the [Settings page](customizing.md#ultracode-pre-prompt).
|
|
78
79
|
|
|
79
80
|
### Running multiple rails
|
|
80
81
|
|
|
@@ -102,10 +103,10 @@ Click a card to open the **Job Detail page**.
|
|
|
102
103
|
|
|
103
104
|
### Job Detail page
|
|
104
105
|
|
|
105
|
-
Two
|
|
106
|
+
Two panels sit above the streaming log:
|
|
106
107
|
|
|
107
|
-
-
|
|
108
|
-
-
|
|
108
|
+
- **Status header** — a status icon and a live duration timer (the one genuinely live number), plus an activity line showing what the job is doing right now and a count of steps taken. Cost, turns, and tokens are deliberately **not** estimated mid-run — they show as pending and are revealed with their final, authoritative values when the job exits.
|
|
109
|
+
- **Ticket header** — chips for every spec the job touched (matched from the launched command). Click a chip to open that spec's detail over the job page without leaving it. With four or more tickets, the chips collapse into a `+N more` mode you can expand.
|
|
109
110
|
|
|
110
111
|
Below: the full streaming log with auto-scroll, search, and copy.
|
|
111
112
|
|
|
@@ -113,6 +114,10 @@ Below: the full streaming log with auto-scroll, search, and copy.
|
|
|
113
114
|
|
|
114
115
|
Click **Stop** on the rail header. The app sends `SIGTERM` to the subprocess, waits **5 s**, then `SIGKILL`.
|
|
115
116
|
|
|
117
|
+
### If a rail won't launch
|
|
118
|
+
|
|
119
|
+
If you pick an engine whose CLI isn't installed on your machine, the launch fails fast instead of starting a broken job. Install the missing provider CLI — see [Using Codex](codex.md) or [Using Gemini](gemini.md) — then launch again. (Missing Claude or Codex returns a precise "*<provider> CLI not found*" message; missing Gemini surfaces a generic launch error today, but the result is the same — nothing spawns.)
|
|
120
|
+
|
|
116
121
|
### Diagnostic export
|
|
117
122
|
|
|
118
123
|
Visible only when [telemetry](customizing.md#telemetry) was enabled for the job. Click **Export diagnostic** in the Job Detail header to download a ZIP containing:
|
|
@@ -152,6 +157,8 @@ Pick the profile from the **rail header's profile dropdown**. It's preselected t
|
|
|
152
157
|
|
|
153
158
|
The **`No profile`** option always exists — use it to run a rail exactly as it did pre-4.1.0. (The dropdown itself only appears once the project has at least one profile.)
|
|
154
159
|
|
|
160
|
+
> **Profiles apply to Claude rails only.** When a rail's engine is Codex or Gemini, the run always uses legacy mode — any selected profile is ignored. Profiles are a Claude-specific feature.
|
|
161
|
+
|
|
155
162
|
### Custom agents (Agent Studio)
|
|
156
163
|
|
|
157
164
|
From the Agents Catalog tab, the toolbar offers three creation entry points:
|
|
@@ -237,4 +244,5 @@ If something looks wrong:
|
|
|
237
244
|
- [Tracking cost](tracking-cost.md) — see what each rail run is costing you.
|
|
238
245
|
- [Customising the app](customizing.md) — daily budget, per-job alerts, telemetry.
|
|
239
246
|
- [Using Codex](codex.md) — run rails on the Codex CLI.
|
|
247
|
+
- [Using Gemini](gemini.md) — run rails on the Gemini CLI.
|
|
240
248
|
- [Agent profile internals](internals/profiles.md) — for power users.
|
package/docs/terminal.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
specrails-desktop ships a full-featured terminal at the bottom of the window. Toggle it with `Cmd+J` (macOS) or `Ctrl+J` (other). It's a real xterm.js with WebGL rendering, shell integration, scrollback search, file drag-and-drop, inline images, and a few quality-of-life touches you won't find in a plain terminal app.
|
|
4
4
|
|
|
5
|
+
The panel opens your usual shell. On macOS/Linux it honours `$SHELL` (falling back to `/bin/zsh` when `$SHELL` is unset); on Windows it picks PowerShell (`pwsh`, then the built-in `powershell.exe`) and only falls back to `cmd.exe` as a last resort.
|
|
6
|
+
|
|
7
|
+
> The terminal panel is **on by default**. To turn it off entirely, set `SPECRAILS_TERMINAL_PANEL=false` (server) or build the client with `VITE_FEATURE_TERMINAL_PANEL=false` — both are opt-out (any other value, or unset, keeps the panel on).
|
|
8
|
+
|
|
5
9
|
```
|
|
6
10
|
┌──────────────────────────────────────────────────────────────┐
|
|
7
11
|
│ Dashboard content │
|
|
@@ -28,7 +32,7 @@ You don't have to. You can keep using iTerm/Windows Terminal/Alacritty/whatever
|
|
|
28
32
|
|
|
29
33
|
The panel header carries three one-click shortcuts:
|
|
30
34
|
|
|
31
|
-
- **Open AI CLI** (✨ Sparkles) — spins up a fresh session and types
|
|
35
|
+
- **Open AI CLI** (✨ Sparkles) — spins up a fresh session and types the launch command for you. On a single-provider project it launches the project's provider CLI directly (`claude`, `codex`, or `gemini`); on a multi-provider project it opens a small picker so you choose which CLI to start.
|
|
32
36
|
- **Open in browser** (🌐 Globe) — opens the URL from the `browserShortcutUrl` setting (default `https://specrails.dev`). Right-click it to jump to the setting and change the URL.
|
|
33
37
|
- **Paste quick script** (`</>`) — writes the snippet from the `quickScript` setting (which defaults to a personalised `echo "Wake up, <username> …"` reminder, editable in Settings) into the active session. Right-click it to edit the snippet in Settings. Disabled when there's no active terminal or the snippet is empty.
|
|
34
38
|
|
|
@@ -79,7 +83,7 @@ If shell integration doesn't bootstrap — for example your `~/.zshrc` runs `exe
|
|
|
79
83
|
Inside the Tauri desktop app, drop one or more files from Finder/Explorer onto the terminal viewport to paste their absolute paths into the active session. Paths are shell-quoted for your host platform:
|
|
80
84
|
|
|
81
85
|
- macOS / Linux — POSIX single-quote
|
|
82
|
-
- Windows —
|
|
86
|
+
- Windows — PowerShell single-quote (the panel's default Windows shell is PowerShell, where single-quoted strings are literal, so this is injection-safe)
|
|
83
87
|
|
|
84
88
|
In a plain browser context this is a silent no-op — the browser doesn't expose `File.path`.
|
|
85
89
|
|
|
@@ -117,9 +121,10 @@ Render mode `auto` picks WebGL when the WebView exposes WebGL2; on `webglcontext
|
|
|
117
121
|
## Limits and edge cases
|
|
118
122
|
|
|
119
123
|
- **Sessions per project** — hard cap of 10.
|
|
120
|
-
- **Closing a project** — kills all its sessions
|
|
124
|
+
- **Closing a project** — kills all its sessions (SIGTERM, then SIGKILL after a short grace).
|
|
121
125
|
- **Window close / quit** — graceful: SIGTERM, 2 s grace, SIGKILL.
|
|
122
126
|
- **Cmd+J inside an open Dialog** — ignored. The panel won't toggle on top of a modal.
|
|
127
|
+
- **Failed spawn** — if a new session dies within ~1.5 s of opening (for example the host is out of file descriptors), the panel surfaces a concrete reason (e.g. "out of file descriptors") instead of leaving a blank pane.
|
|
123
128
|
|
|
124
129
|
## Diagnostics
|
|
125
130
|
|
|
@@ -136,3 +141,4 @@ For deeper inspection of how the panel resolves PATH at startup (relevant for Vo
|
|
|
136
141
|
|
|
137
142
|
- [Customising the app](customizing.md) — terminal settings, themes.
|
|
138
143
|
- [Getting started](getting-started.md) — registering a project.
|
|
144
|
+
- [Codex](codex.md) / [Gemini](gemini.md) — setting up the CLI behind the **Open AI CLI** button on a Codex or Gemini project.
|
package/docs/tracking-cost.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Tracking cost
|
|
2
2
|
|
|
3
|
-
specrails-desktop records every AI CLI invocation it spawns —
|
|
3
|
+
specrails-desktop records every AI CLI invocation it spawns — Claude, Codex, and Gemini — and surfaces the totals on one Analytics page per project. This guide walks through what's tracked, what's not, and how to read the dashboard.
|
|
4
4
|
|
|
5
5
|
## What gets tracked
|
|
6
6
|
|
|
@@ -15,22 +15,27 @@ Six surfaces, all per-project:
|
|
|
15
15
|
| **`smash`** | SMASH runs that break an epic spec into sub-specs |
|
|
16
16
|
| **`file-summary`** | Code-explorer AI summaries of individual files |
|
|
17
17
|
|
|
18
|
-
Each invocation row carries: provider (Claude or
|
|
18
|
+
Each invocation row carries: provider (Claude, Codex, or Gemini), model, status, started/finished timestamps, duration (wall clock + API-only), tokens (in / out / cache read / cache create), total USD cost, turn count, and — when applicable — the ticket and conversation IDs it touched.
|
|
19
19
|
|
|
20
20
|
> Cost averages exclude `failed`/`aborted` rows, but those rows still count toward the total run count and the failure rate.
|
|
21
21
|
|
|
22
|
-
##
|
|
22
|
+
## Authoritative vs estimated cost
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
Whether a cost figure is exact depends on the provider's CLI, not on which provider you picked:
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
- **Claude cost is provider-billed and authoritative** — the figure comes straight from the CLI's own usage report.
|
|
27
|
+
- **Codex and Gemini do not report cost natively**, so the app **estimates** their cost from a local rate-card (`server/pricing.ts`) using the captured token counts. Estimated rows are flagged: they render with a `~` tilde in the raw table (hover for the tooltip — *"Estimated from local pricing table — this provider does not report cost natively"*) and feed an "includes ~$X estimated" footnote in the Hero.
|
|
28
|
+
|
|
29
|
+
On multi-provider projects, a **Provider breakdown** card splits spend across the project's installed engines so you can see authoritative vs estimated at a glance.
|
|
30
|
+
|
|
31
|
+
> **Fail-soft on unknown models.** The rate card lists specific models (the current Codex and Gemini catalogs). If an invocation uses a model that isn't in the table, the app **does not fabricate a number** — it stores no cost (`total_cost_usd` is left empty), so that row simply shows a blank cost rather than a misleading estimate.
|
|
27
32
|
|
|
28
33
|
## What's NOT tracked (intentionally)
|
|
29
34
|
|
|
30
35
|
- **Sidebar chat** — the general-purpose chat panel in the right sidebar. It spawns an AI process but isn't pipeline work, so the app excludes it from analytics by design.
|
|
31
36
|
- **Setup wizard** — the install/enrich flow when you add a project. It *does* spawn an AI CLI (a genuine model invocation), but it's an interactive one-time wizard rather than a repeatable pipeline job, so it's deliberately left uninstrumented.
|
|
32
37
|
|
|
33
|
-
If you want the absolute total of what an engine has cost you, your provider's own console
|
|
38
|
+
If you want the absolute total of what an engine has cost you, your provider's own console is the source of truth — the Anthropic console for Claude, the OpenAI dashboard for Codex, and Google AI Studio / Cloud billing for Gemini.
|
|
34
39
|
|
|
35
40
|
## The Analytics page
|
|
36
41
|
|
|
@@ -40,7 +45,7 @@ Open **Analytics** from the project right sidebar.
|
|
|
40
45
|
|
|
41
46
|
- **Period** — `7d`, `30d`, `90d`, or `All`. (There's no 24-hour or custom-range option here — the custom calendar range lives on Desktop Analytics, below.)
|
|
42
47
|
- **Surface** — chips for `All` plus each of the six surfaces (Jobs, Explore, Quick, Refine, SMASH, File summaries). All are included by default; toggle chips to narrow the view.
|
|
43
|
-
- **Engine** — provider
|
|
48
|
+
- **Engine** — one chip per installed provider (Claude, Codex, Gemini) plus `All`. These appear **only on multi-provider projects** (more than one engine installed) and let you filter spend by engine.
|
|
44
49
|
|
|
45
50
|
The period and surface filters are URL-synced, so you can share or bookmark a view.
|
|
46
51
|
|
|
@@ -57,13 +62,13 @@ When the project has zero invocations in the period (e.g. you just started), the
|
|
|
57
62
|
|
|
58
63
|
### Provider breakdown
|
|
59
64
|
|
|
60
|
-
On multi-provider projects, a dedicated card splits total spend
|
|
65
|
+
On multi-provider projects, a dedicated card splits total spend across the project's installed engines (Claude, Codex, Gemini) — it's data-driven, so it renders for any combination of more than one provider. Each engine's row marks an all-estimated total with a `~` tilde. It's hidden on single-provider projects.
|
|
61
66
|
|
|
62
67
|
### Daily stacked timeline
|
|
63
68
|
|
|
64
|
-
A daily bar chart for the period, stacked by surface. Days with zero activity are zero-filled so the x-axis stays regular.
|
|
69
|
+
A daily bar chart for the period, stacked by surface. It plots five series — **Jobs, Explore, Quick, Refine, and File summaries**. SMASH spend is still tracked and shows up elsewhere (the Hero per-surface bar, Top models, and the raw table), but it is not currently a separate bar in this chart. Days with zero activity are zero-filled so the x-axis stays regular.
|
|
65
70
|
|
|
66
|
-
Surface colours are consistent across the
|
|
71
|
+
Surface colours are consistent wherever a surface appears across the page:
|
|
67
72
|
|
|
68
73
|
- `job` → blue (`accent-info`)
|
|
69
74
|
- `quick-spec` → purple (`accent-secondary`)
|
|
@@ -152,4 +157,5 @@ For the cross-project view, open **Analytics** from the Arc sidebar on the left.
|
|
|
152
157
|
|
|
153
158
|
- [Customising the app](customizing.md) — set the budget, configure notifications.
|
|
154
159
|
- [Creating specs](creating-specs.md) — every spec you create adds rows to your analytics.
|
|
155
|
-
- [Using Codex](codex.md) — how cost works when you run a project on Codex.
|
|
160
|
+
- [Using Codex](codex.md) — how cost works when you run a project on Codex (estimated, ~ tilde).
|
|
161
|
+
- [Using Gemini](gemini.md) — how cost works when you run a project on Gemini (also estimated, ~ tilde).
|
package/package.json
CHANGED
|
@@ -15,6 +15,7 @@ const agent_generator_1 = require("./agent-generator");
|
|
|
15
15
|
const ai_invocations_1 = require("./ai-invocations");
|
|
16
16
|
const result_event_1 = require("./result-event");
|
|
17
17
|
const spawn_lifecycle_1 = require("./spawn-lifecycle");
|
|
18
|
+
const workspace_resolution_1 = require("./workspace-resolution");
|
|
18
19
|
const providers_1 = require("./providers");
|
|
19
20
|
const agent_refine_db_1 = require("./agent-refine-db");
|
|
20
21
|
const CUSTOM_PREFIX = /^custom-[a-z0-9][a-z0-9-]*$/;
|
|
@@ -174,14 +175,23 @@ class AgentRefineManager {
|
|
|
174
175
|
// ─── Private ──────────────────────────────────────────────────────────────
|
|
175
176
|
_agentFile(agentId) {
|
|
176
177
|
// Per-provider on-disk layout:
|
|
177
|
-
// claude → <
|
|
178
|
-
// codex → <
|
|
178
|
+
// claude → <root>/.claude/agents/<agentId>.md
|
|
179
|
+
// codex → <root>/.codex/skills/<agentId>/SKILL.md
|
|
179
180
|
// Future providers add their own branch via the adapter; the projectDir
|
|
180
181
|
// is already provider-aware.
|
|
182
|
+
//
|
|
183
|
+
// Relocate-artifacts: custom-* agents are materialized by core into the
|
|
184
|
+
// WORKSPACE when the project is relocated (same place the rails load them
|
|
185
|
+
// from). Reading/writing `<project.path>/<providerDir>/agents` would touch a
|
|
186
|
+
// stale repo copy the rails never see — and this path WRITES the refined
|
|
187
|
+
// agent. Resolve through the gate so reads + writes hit the same tree the
|
|
188
|
+
// rails consume. Legacy projects are byte-identical (root === project.path).
|
|
189
|
+
const exec = (0, workspace_resolution_1.resolveProjectExecution)({ path: this._projectPath });
|
|
190
|
+
const root = exec.relocated && exec.workspaceDir ? exec.workspaceDir : this._projectPath;
|
|
181
191
|
if (this._adapter.id === 'codex') {
|
|
182
|
-
return path_1.default.join(
|
|
192
|
+
return path_1.default.join(root, this._adapter.projectDirName, 'skills', agentId, 'SKILL.md');
|
|
183
193
|
}
|
|
184
|
-
return path_1.default.join(
|
|
194
|
+
return path_1.default.join(root, this._adapter.projectDirName, 'agents', `${agentId}.md`);
|
|
185
195
|
}
|
|
186
196
|
_currentVersion(agentId) {
|
|
187
197
|
const row = this._db
|
|
@@ -224,11 +234,16 @@ class AgentRefineManager {
|
|
|
224
234
|
// Spawn / stream / settlement is owned by the shared spawn-lifecycle; the
|
|
225
235
|
// refine-specific draft buffering, accounting, validation and history all
|
|
226
236
|
// stay here unchanged.
|
|
237
|
+
// Relocate-artifacts gate: spawn from the workspace (with SPECRAILS_REPO_DIR)
|
|
238
|
+
// when relocated, else cwd = project.path + empty env (byte-identical legacy).
|
|
239
|
+
const refineExec = (0, workspace_resolution_1.resolveProjectExecution)({ path: this._projectPath });
|
|
240
|
+
const refineEnv = refineExec.relocated ? { ...process.env, ...refineExec.env } : undefined;
|
|
227
241
|
const run = await (0, spawn_lifecycle_1.runAiCliInvocation)({
|
|
228
242
|
adapter: this._adapter,
|
|
229
243
|
action,
|
|
230
244
|
buildOpts: { prompt, model: refineModel, sessionId: session.session_id ?? undefined },
|
|
231
|
-
cwd:
|
|
245
|
+
cwd: refineExec.cwd,
|
|
246
|
+
env: refineEnv,
|
|
232
247
|
onSpawn: (child) => this._activeProcesses.set(refineId, child),
|
|
233
248
|
onSpawnError: (err) => { spawnState.err = err; },
|
|
234
249
|
onEvent: (ev) => {
|