@opengsd/gsd-pi 1.5.0 → 1.6.0-dev.aa7f94e8
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 +10 -10
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/ask-user-questions.js +1 -1
- package/dist/resources/extensions/browser-tools/engine/managed-gsd-browser.js +114 -36
- package/dist/resources/extensions/gsd/activity-log.js +1 -1
- package/dist/resources/extensions/gsd/auto/closeout.js +97 -5
- package/dist/resources/extensions/gsd/auto/orchestrator.js +20 -13
- package/dist/resources/extensions/gsd/auto/pre-dispatch.js +6 -3
- package/dist/resources/extensions/gsd/auto/unit-phase.js +5 -9
- package/dist/resources/extensions/gsd/auto-artifact-paths.js +14 -5
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +11 -7
- package/dist/resources/extensions/gsd/auto-dispatch.js +69 -17
- package/dist/resources/extensions/gsd/auto-model-selection.js +28 -1
- package/dist/resources/extensions/gsd/auto-post-unit.js +23 -6
- package/dist/resources/extensions/gsd/auto-prompts.js +49 -117
- package/dist/resources/extensions/gsd/auto-recovery.js +50 -6
- package/dist/resources/extensions/gsd/auto-start.js +57 -33
- package/dist/resources/extensions/gsd/auto-timeout-recovery.js +12 -2
- package/dist/resources/extensions/gsd/auto-timers.js +9 -2
- package/dist/resources/extensions/gsd/auto-worktree-branch-lifecycle.js +189 -0
- package/dist/resources/extensions/gsd/auto-worktree-cleanup.js +133 -0
- package/dist/resources/extensions/gsd/auto-worktree-conflict-auto-resolve.js +35 -0
- package/dist/resources/extensions/gsd/auto-worktree-creation.js +130 -0
- package/dist/resources/extensions/gsd/auto-worktree-entry.js +118 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-already-merged.js +98 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-branch-head.js +52 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-cleanup.js +87 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-code-changes.js +46 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-db-ready.js +68 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-integration-branch.js +51 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-message.js +106 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-pre-teardown.js +64 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge-stash.js +168 -0
- package/dist/resources/extensions/gsd/auto-worktree-merge.js +302 -0
- package/dist/resources/extensions/gsd/auto-worktree-milestone-shelter.js +119 -0
- package/dist/resources/extensions/gsd/auto-worktree-path-resolution.js +5 -0
- package/dist/resources/extensions/gsd/auto-worktree-path-utils.js +5 -0
- package/dist/resources/extensions/gsd/auto-worktree-resource-version.js +41 -0
- package/dist/resources/extensions/gsd/auto-worktree-runtime-cleanup.js +99 -0
- package/dist/resources/extensions/gsd/auto-worktree-session-registry.js +57 -0
- package/dist/resources/extensions/gsd/auto-worktree-sync.js +249 -0
- package/dist/resources/extensions/gsd/auto-worktree-teardown.js +120 -0
- package/dist/resources/extensions/gsd/auto-worktree.js +20 -2073
- package/dist/resources/extensions/gsd/auto.js +118 -34
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +20 -2
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +1 -1
- package/dist/resources/extensions/gsd/bootstrap/tool-call-loop-guard.js +185 -27
- package/dist/resources/extensions/gsd/browser-daemon-auto-prep.js +68 -2
- package/dist/resources/extensions/gsd/codebase-generator.js +7 -1
- package/dist/resources/extensions/gsd/commands-handlers.js +1 -1
- package/dist/resources/extensions/gsd/commands-workflow-templates.js +3 -3
- package/dist/resources/extensions/gsd/compat/compat-marker.js +44 -0
- package/dist/resources/extensions/gsd/config-overlay.js +7 -2
- package/dist/resources/extensions/gsd/db/engine.js +33 -0
- package/dist/resources/extensions/gsd/db/queries.js +9 -9
- package/dist/resources/extensions/gsd/db/writers/cascades.js +20 -2
- package/dist/resources/extensions/gsd/db-adapter.js +30 -3
- package/dist/resources/extensions/gsd/docs/preferences-reference.md +3 -3
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +93 -11
- package/dist/resources/extensions/gsd/flat-phase-migration.js +32 -3
- package/dist/resources/extensions/gsd/forensics.js +1 -1
- package/dist/resources/extensions/gsd/git-conflict-resolve.js +2 -2
- package/dist/resources/extensions/gsd/git-service.js +45 -0
- package/dist/resources/extensions/gsd/gsd-db.js +23 -11
- package/dist/resources/extensions/gsd/guided-flow.js +22 -17
- package/dist/resources/extensions/gsd/journal.js +1 -1
- package/dist/resources/extensions/gsd/markdown-renderer.js +34 -79
- package/dist/resources/extensions/gsd/md-importer.js +89 -23
- package/dist/resources/extensions/gsd/metrics.js +2 -2
- package/dist/resources/extensions/gsd/migration-auto-check.js +30 -3
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +11 -0
- package/dist/resources/extensions/gsd/milestone-settlement.js +1 -1
- package/dist/resources/extensions/gsd/parallel-merge.js +1 -1
- package/dist/resources/extensions/gsd/parallel-orchestrator.js +3 -1
- package/dist/resources/extensions/gsd/paths.js +87 -52
- package/dist/resources/extensions/gsd/post-unit-hooks.js +27 -0
- package/dist/resources/extensions/gsd/preferences-models.js +66 -15
- package/dist/resources/extensions/gsd/preferences-skills.js +10 -16
- package/dist/resources/extensions/gsd/preferences-types.js +1 -0
- package/dist/resources/extensions/gsd/preferences-validation.js +148 -10
- package/dist/resources/extensions/gsd/preferences.js +20 -0
- package/dist/resources/extensions/gsd/prompts/system.md +6 -6
- package/dist/resources/extensions/gsd/quick.js +12 -3
- package/dist/resources/extensions/gsd/reopen-reason.js +98 -0
- package/dist/resources/extensions/gsd/rule-registry.js +106 -10
- package/dist/resources/extensions/gsd/session-status-io.js +31 -0
- package/dist/resources/extensions/gsd/skill-discovery.js +36 -23
- package/dist/resources/extensions/gsd/slice-parallel-orchestrator.js +2 -1
- package/dist/resources/extensions/gsd/state/derive/from-db.js +88 -153
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +1 -10
- package/dist/resources/extensions/gsd/state-reconciliation/drift/completion.js +3 -24
- package/dist/resources/extensions/gsd/state-reconciliation/index.js +10 -0
- package/dist/resources/extensions/gsd/tool-contract.js +14 -0
- package/dist/resources/extensions/gsd/tools/complete-milestone.js +3 -5
- package/dist/resources/extensions/gsd/tools/reassess-roadmap.js +16 -10
- package/dist/resources/extensions/gsd/tools/reopen-slice.js +5 -0
- package/dist/resources/extensions/gsd/tools/reopen-task.js +28 -5
- package/dist/resources/extensions/gsd/tools/validate-milestone.js +3 -8
- package/dist/resources/extensions/gsd/uat-dispatch.js +94 -0
- package/dist/resources/extensions/gsd/unit-registry.js +12 -2
- package/dist/resources/extensions/gsd/unmerged-milestone-guard.js +1 -1
- package/dist/resources/extensions/gsd/uok/audit-toggle.js +31 -2
- package/dist/resources/extensions/gsd/uok/audit.js +3 -0
- package/dist/resources/extensions/gsd/uok/gate-runner.js +22 -30
- package/dist/resources/extensions/gsd/uok/gitops.js +18 -15
- package/dist/resources/extensions/gsd/uok/kernel.js +120 -46
- package/dist/resources/extensions/gsd/uok/model-policy.js +17 -14
- package/dist/resources/extensions/gsd/validation-block-guard.js +2 -1
- package/dist/resources/extensions/gsd/workflow-event-ledger.js +1 -1
- package/dist/resources/extensions/gsd/workflow-logger.js +1 -1
- package/dist/resources/extensions/gsd/workflow-projections.js +9 -26
- package/dist/resources/extensions/gsd/workspace-git-preflight.js +2 -2
- package/dist/resources/extensions/gsd/workspace.js +5 -14
- package/dist/resources/extensions/gsd/worktree-command.js +1 -1
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +14 -9
- package/dist/resources/extensions/gsd/worktree-reentry.js +2 -1
- package/dist/resources/extensions/shared/gsd-browser-cli.js +51 -5
- package/dist/resources/extensions/shared/interview-ui.js +62 -9
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- package/dist/web/standalone/.next/build-manifest.json +3 -3
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- package/dist/web/standalone/.next/required-server-files.json +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page.js +3 -3
- package/dist/web/standalone/.next/server/app/_global-error/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found/page.js +2 -2
- package/dist/web/standalone/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/boot/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/bridge-terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/browse-directories/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/captures/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/cleanup/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/dev-mode/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/doctor/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/experimental/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/experimental/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/export-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/files/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/forensics/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/git/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/history/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/hooks/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/inspect/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/knowledge/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/live-state/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/mcp-connections/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/notifications/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/notifications/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/onboarding/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/preferences/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/projects/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/recovery/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/remote-questions/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/remote-questions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/browser/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/command/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/session/events/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/events/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/session/manage/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/settings-data/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/shutdown/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/skill-health/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/steer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/switch-root/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/input/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route.js +2 -2
- package/dist/web/standalone/.next/server/app/api/terminal/resize/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/sessions/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js +4 -4
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/stream/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/terminal/upload/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/undo/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/update/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/api/visualizer/route_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +2 -2
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +4 -4
- package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +3 -3
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page.js +2 -2
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +6 -6
- package/dist/web/standalone/.next/server/chunks/{1128.js → 1991.js} +1 -1
- package/dist/web/standalone/.next/server/chunks/2842.js +4 -4
- package/dist/web/standalone/.next/server/chunks/8357.js +3 -3
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware.js +3 -3
- package/dist/web/standalone/.next/server/pages/404.html +1 -1
- package/dist/web/standalone/.next/server/pages/500.html +1 -1
- package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-a6fb1847f67f167c.js +1 -0
- package/dist/web/standalone/.next/static/chunks/app/{layout-b35cbfff38aaf4cf.js → layout-4ae2d68984392bbf.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/app/page-72a856634ad14c10.js +1 -0
- package/dist/web/standalone/.next/static/chunks/{main-app-590a74400e35f685.js → main-app-90d1d8d5e5d2dc6b.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-1115d46ac61b9823.js +1 -0
- package/dist/web/standalone/node_modules/@gsd/native/package.json +1 -1
- package/dist/web/standalone/node_modules/node-pty/build/Makefile +2 -2
- package/dist/web/standalone/node_modules/node-pty/build/Release/pty.node +0 -0
- package/dist/web/standalone/node_modules/node-pty/build/pty.target.mk +14 -14
- package/dist/web/standalone/server.js +1 -1
- package/dist/worktree-cli-create.d.ts +10 -0
- package/dist/worktree-cli-create.js +11 -0
- package/dist/worktree-cli-format.d.ts +12 -0
- package/dist/worktree-cli-format.js +38 -0
- package/dist/worktree-cli-plan.d.ts +16 -0
- package/dist/worktree-cli-plan.js +19 -0
- package/dist/worktree-cli-session.d.ts +13 -0
- package/dist/worktree-cli-session.js +18 -0
- package/dist/worktree-cli-status.d.ts +35 -0
- package/dist/worktree-cli-status.js +54 -0
- package/dist/worktree-cli.d.ts +1 -16
- package/dist/worktree-cli.js +28 -122
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +25 -36
- package/integrations/hermes/pyproject.toml +1 -1
- package/integrations/hermes/tests/test_gsd_client_timeout.py +4 -4
- package/package.json +6 -6
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/dist/cloud-cli.d.ts +1 -1
- package/packages/daemon/dist/cloud-cli.d.ts.map +1 -1
- package/packages/daemon/dist/cloud-cli.js +42 -2
- package/packages/daemon/dist/cloud-cli.js.map +1 -1
- package/packages/daemon/dist/cloud-config.d.ts +1 -0
- package/packages/daemon/dist/cloud-config.d.ts.map +1 -1
- package/packages/daemon/dist/cloud-config.js +1 -1
- package/packages/daemon/dist/cloud-config.js.map +1 -1
- package/packages/daemon/dist/device-flow.d.ts +24 -0
- package/packages/daemon/dist/device-flow.d.ts.map +1 -0
- package/packages/daemon/dist/device-flow.js +128 -0
- package/packages/daemon/dist/device-flow.js.map +1 -0
- package/packages/daemon/dist/device-flow.test.d.ts +2 -0
- package/packages/daemon/dist/device-flow.test.d.ts.map +1 -0
- package/packages/daemon/dist/device-flow.test.js +172 -0
- package/packages/daemon/dist/device-flow.test.js.map +1 -0
- package/packages/daemon/dist/orchestrator-agent.d.ts +21 -0
- package/packages/daemon/dist/orchestrator-agent.d.ts.map +1 -0
- package/packages/daemon/dist/orchestrator-agent.js +113 -0
- package/packages/daemon/dist/orchestrator-agent.js.map +1 -0
- package/packages/daemon/dist/orchestrator-tools.d.ts +12 -0
- package/packages/daemon/dist/orchestrator-tools.d.ts.map +1 -0
- package/packages/daemon/dist/orchestrator-tools.js +137 -0
- package/packages/daemon/dist/orchestrator-tools.js.map +1 -0
- package/packages/daemon/dist/orchestrator.d.ts +4 -56
- package/packages/daemon/dist/orchestrator.d.ts.map +1 -1
- package/packages/daemon/dist/orchestrator.js +13 -303
- package/packages/daemon/dist/orchestrator.js.map +1 -1
- package/packages/daemon/dist/orchestrator.test.js +11 -1
- package/packages/daemon/dist/orchestrator.test.js.map +1 -1
- package/packages/daemon/package.json +5 -5
- package/packages/gsd-agent-core/dist/export-html/template.js +53 -4
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js +3 -2
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/gsd-cloud/README.md +34 -0
- package/packages/gsd-cloud/bin/gsd-cloud.js +27 -0
- package/packages/gsd-cloud/package.json +38 -0
- package/packages/mcp-server/package.json +4 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.d.ts.map +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +14 -9
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/index.d.ts +1 -0
- package/packages/pi-ai/dist/index.d.ts.map +1 -1
- package/packages/pi-ai/dist/index.js +1 -0
- package/packages/pi-ai/dist/index.js.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.d.ts.map +1 -1
- package/packages/pi-ai/dist/providers/transform-messages.js +7 -3
- package/packages/pi-ai/dist/providers/transform-messages.js.map +1 -1
- package/packages/pi-ai/dist/tool-result-content.d.ts +3 -0
- package/packages/pi-ai/dist/tool-result-content.d.ts.map +1 -0
- package/packages/pi-ai/dist/tool-result-content.js +62 -0
- package/packages/pi-ai/dist/tool-result-content.js.map +1 -0
- package/packages/pi-ai/dist/types.d.ts +8 -20
- package/packages/pi-ai/dist/types.d.ts.map +1 -1
- package/packages/pi-ai/dist/types.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts +9 -0
- package/packages/pi-coding-agent/dist/core/package-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/package-manager.js +74 -53
- package/packages/pi-coding-agent/dist/core/package-manager.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts +6 -0
- package/packages/pi-coding-agent/dist/core/resource-loader.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/resource-loader.js +30 -2
- package/packages/pi-coding-agent/dist/core/resource-loader.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/skill-directories.d.ts +66 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.js +138 -0
- package/packages/pi-coding-agent/dist/core/skill-directories.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/skills.d.ts +4 -1
- package/packages/pi-coding-agent/dist/core/skills.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/skills.js +4 -1
- package/packages/pi-coding-agent/dist/core/skills.js.map +1 -1
- package/packages/pi-coding-agent/dist/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/index.js +1 -0
- package/packages/pi-coding-agent/dist/index.js.map +1 -1
- package/packages/pi-coding-agent/package.json +7 -7
- package/packages/pi-tui/package.json +2 -2
- package/packages/rpc-client/package.json +2 -2
- package/pkg/dist/core/export-html/template.js +53 -4
- package/pkg/package.json +1 -1
- package/src/resources/extensions/ask-user-questions.ts +1 -1
- package/src/resources/extensions/browser-tools/engine/managed-gsd-browser.ts +146 -33
- package/src/resources/extensions/browser-tools/tests/gsd-browser-launch-config.test.mjs +44 -0
- package/src/resources/extensions/browser-tools/tests/managed-gsd-browser-tools.test.mjs +93 -0
- package/src/resources/extensions/gsd/activity-log.ts +1 -1
- package/src/resources/extensions/gsd/auto/closeout.ts +114 -7
- package/src/resources/extensions/gsd/auto/orchestrator.ts +21 -14
- package/src/resources/extensions/gsd/auto/pre-dispatch.ts +6 -3
- package/src/resources/extensions/gsd/auto/unit-phase.ts +5 -9
- package/src/resources/extensions/gsd/auto-artifact-paths.ts +14 -4
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +13 -7
- package/src/resources/extensions/gsd/auto-dispatch.ts +77 -16
- package/src/resources/extensions/gsd/auto-model-selection.ts +33 -1
- package/src/resources/extensions/gsd/auto-post-unit.ts +26 -5
- package/src/resources/extensions/gsd/auto-prompts.ts +73 -113
- package/src/resources/extensions/gsd/auto-recovery.ts +50 -6
- package/src/resources/extensions/gsd/auto-start.ts +62 -31
- package/src/resources/extensions/gsd/auto-timeout-recovery.ts +12 -2
- package/src/resources/extensions/gsd/auto-timers.ts +9 -2
- package/src/resources/extensions/gsd/auto-worktree-branch-lifecycle.ts +237 -0
- package/src/resources/extensions/gsd/auto-worktree-cleanup.ts +166 -0
- package/src/resources/extensions/gsd/auto-worktree-conflict-auto-resolve.ts +37 -0
- package/src/resources/extensions/gsd/auto-worktree-creation.ts +171 -0
- package/src/resources/extensions/gsd/auto-worktree-entry.ts +154 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-already-merged.ts +161 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-branch-head.ts +83 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-cleanup.ts +132 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-code-changes.ts +71 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-db-ready.ts +112 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-integration-branch.ts +99 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-message.ts +166 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-pre-teardown.ts +93 -0
- package/src/resources/extensions/gsd/auto-worktree-merge-stash.ts +213 -0
- package/src/resources/extensions/gsd/auto-worktree-merge.ts +391 -0
- package/src/resources/extensions/gsd/auto-worktree-milestone-shelter.ts +159 -0
- package/src/resources/extensions/gsd/auto-worktree-path-resolution.ts +6 -0
- package/src/resources/extensions/gsd/auto-worktree-path-utils.ts +10 -0
- package/src/resources/extensions/gsd/auto-worktree-resource-version.ts +44 -0
- package/src/resources/extensions/gsd/auto-worktree-runtime-cleanup.ts +119 -0
- package/src/resources/extensions/gsd/auto-worktree-session-registry.ts +71 -0
- package/src/resources/extensions/gsd/auto-worktree-sync.ts +370 -0
- package/src/resources/extensions/gsd/auto-worktree-teardown.ts +161 -0
- package/src/resources/extensions/gsd/auto-worktree.ts +69 -2429
- package/src/resources/extensions/gsd/auto.ts +126 -47
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +20 -2
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +1 -1
- package/src/resources/extensions/gsd/bootstrap/tool-call-loop-guard.ts +218 -27
- package/src/resources/extensions/gsd/browser-daemon-auto-prep.ts +77 -1
- package/src/resources/extensions/gsd/codebase-generator.ts +7 -1
- package/src/resources/extensions/gsd/commands-handlers.ts +1 -1
- package/src/resources/extensions/gsd/commands-workflow-templates.ts +3 -3
- package/src/resources/extensions/gsd/compat/compat-marker.ts +47 -0
- package/src/resources/extensions/gsd/config-overlay.ts +7 -1
- package/src/resources/extensions/gsd/db/engine.ts +36 -0
- package/src/resources/extensions/gsd/db/queries.ts +9 -9
- package/src/resources/extensions/gsd/db/writers/cascades.ts +23 -1
- package/src/resources/extensions/gsd/db-adapter.ts +29 -3
- package/src/resources/extensions/gsd/docs/preferences-reference.md +3 -3
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +109 -10
- package/src/resources/extensions/gsd/flat-phase-migration.ts +34 -3
- package/src/resources/extensions/gsd/forensics.ts +1 -1
- package/src/resources/extensions/gsd/git-conflict-resolve.ts +2 -2
- package/src/resources/extensions/gsd/git-service.ts +53 -0
- package/src/resources/extensions/gsd/gsd-db.ts +33 -11
- package/src/resources/extensions/gsd/guided-flow.ts +26 -18
- package/src/resources/extensions/gsd/journal.ts +1 -1
- package/src/resources/extensions/gsd/markdown-renderer.ts +52 -91
- package/src/resources/extensions/gsd/md-importer.ts +93 -22
- package/src/resources/extensions/gsd/metrics.ts +2 -2
- package/src/resources/extensions/gsd/migration-auto-check.ts +32 -3
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +15 -0
- package/src/resources/extensions/gsd/milestone-settlement.ts +1 -1
- package/src/resources/extensions/gsd/parallel-merge.ts +1 -1
- package/src/resources/extensions/gsd/parallel-orchestrator.ts +3 -1
- package/src/resources/extensions/gsd/paths.ts +108 -51
- package/src/resources/extensions/gsd/post-unit-hooks.ts +32 -0
- package/src/resources/extensions/gsd/preferences-models.ts +74 -20
- package/src/resources/extensions/gsd/preferences-skills.ts +10 -16
- package/src/resources/extensions/gsd/preferences-types.ts +54 -1
- package/src/resources/extensions/gsd/preferences-validation.ts +146 -9
- package/src/resources/extensions/gsd/preferences.ts +20 -0
- package/src/resources/extensions/gsd/prompts/system.md +6 -6
- package/src/resources/extensions/gsd/quick.ts +11 -3
- package/src/resources/extensions/gsd/reopen-reason.ts +109 -0
- package/src/resources/extensions/gsd/rule-registry.ts +111 -9
- package/src/resources/extensions/gsd/session-status-io.ts +34 -0
- package/src/resources/extensions/gsd/skill-discovery.ts +47 -23
- package/src/resources/extensions/gsd/slice-parallel-orchestrator.ts +3 -1
- package/src/resources/extensions/gsd/state/derive/from-db.ts +201 -157
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +1 -9
- package/src/resources/extensions/gsd/state-reconciliation/drift/completion.ts +2 -22
- package/src/resources/extensions/gsd/state-reconciliation/index.ts +14 -0
- package/src/resources/extensions/gsd/tests/auto-artifact-paths.test.ts +169 -1
- package/src/resources/extensions/gsd/tests/auto-loop-no-copy-artifacts.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +41 -2
- package/src/resources/extensions/gsd/tests/auto-post-unit-artifact-diagnostic.test.ts +48 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +57 -0
- package/src/resources/extensions/gsd/tests/auto-start-clean-runtime-db-gated.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-start-project-milestone-reconcile.test.ts +29 -1
- package/src/resources/extensions/gsd/tests/auto-timeout-recovery-supervisor-inflight-guard.test.ts +159 -0
- package/src/resources/extensions/gsd/tests/auto-warning-noise-regression.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-auto-resolve.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-already-merged.test.ts +177 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-branch-head.test.ts +118 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-cleanup.test.ts +115 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-code-changes.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-db-ready.test.ts +140 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-integration-branch.test.ts +123 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-message.test.ts +114 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-pre-teardown.test.ts +84 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-merge-stash.test.ts +70 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-milestone-shelter.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-registry.test.ts +6 -6
- package/src/resources/extensions/gsd/tests/auto-worktree-resource-version.test.ts +59 -0
- package/src/resources/extensions/gsd/tests/auto-worktree-untracked-content.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/browser-daemon-auto-prep.test.ts +26 -0
- package/src/resources/extensions/gsd/tests/codebase-generator.test.ts +22 -0
- package/src/resources/extensions/gsd/tests/commands-verdict.test.ts +3 -1
- package/src/resources/extensions/gsd/tests/compat-marker.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/complete-milestone.test.ts +45 -0
- package/src/resources/extensions/gsd/tests/completed-units-metrics-sync.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/db-adapter.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/db-writable-probe.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/derive-state-db.test.ts +4 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +174 -0
- package/src/resources/extensions/gsd/tests/fast-forward-reused-milestone-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/flat-phase-migration.test.ts +71 -1
- package/src/resources/extensions/gsd/tests/flat-phase-renderer.test.ts +46 -1
- package/src/resources/extensions/gsd/tests/flat-phase-validation-path.test.ts +72 -32
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +40 -0
- package/src/resources/extensions/gsd/tests/import-completion-lost-update.test.ts +196 -0
- package/src/resources/extensions/gsd/tests/integration/all-milestones-complete-merge.test.ts +4 -6
- package/src/resources/extensions/gsd/tests/integration/auto-stash-merge.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/integration/auto-worktree-milestone-merge.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/integration/auto-worktree.test.ts +7 -8
- package/src/resources/extensions/gsd/tests/integration/feature-branch-lifecycle-integration.test.ts +2 -5
- package/src/resources/extensions/gsd/tests/integration/git-service.test.ts +76 -0
- package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/merge-preserve-worktree-on-preteardown-error.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/integration/merge-strategy-regular.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/integration/milestone-transition-worktree.test.ts +5 -7
- package/src/resources/extensions/gsd/tests/integration/paths.test.ts +88 -1
- package/src/resources/extensions/gsd/tests/integration/workspace-collapse-integration.test.ts +2 -4
- package/src/resources/extensions/gsd/tests/journal-integration.test.ts +16 -15
- package/src/resources/extensions/gsd/tests/merge-closeout-consistency-gate.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-db-cycle.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/merge-self-branch-guard.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +91 -0
- package/src/resources/extensions/gsd/tests/milestone-closeout.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +439 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/none-mode-gates.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/originalbase-path-comparison.test.ts +3 -3
- package/src/resources/extensions/gsd/tests/parallel-worker-lock-contention.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +0 -1
- package/src/resources/extensions/gsd/tests/post-unit-hooks.test.ts +269 -0
- package/src/resources/extensions/gsd/tests/post-unit-retry-on-orchestrator-bridge.test.ts +8 -1
- package/src/resources/extensions/gsd/tests/preferences-worktree-sync.test.ts +1 -4
- package/src/resources/extensions/gsd/tests/preferences.test.ts +19 -0
- package/src/resources/extensions/gsd/tests/prefs-wizard-coverage.test.ts +5 -0
- package/src/resources/extensions/gsd/tests/read-uat-gate-verdict.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/reassess-handler.test.ts +49 -1
- package/src/resources/extensions/gsd/tests/reopen-reason.test.ts +117 -0
- package/src/resources/extensions/gsd/tests/reopen-slice.test.ts +52 -0
- package/src/resources/extensions/gsd/tests/rule-registry.test.ts +95 -1
- package/src/resources/extensions/gsd/tests/runtime-invariant-modules.test.ts +20 -0
- package/src/resources/extensions/gsd/tests/sibling-model-fallbacks.test.ts +189 -0
- package/src/resources/extensions/gsd/tests/single-field-model-thinking.test.ts +156 -0
- package/src/resources/extensions/gsd/tests/skill-discovery.test.ts +46 -0
- package/src/resources/extensions/gsd/tests/skipped-validation-db-atomicity.test.ts +6 -1
- package/src/resources/extensions/gsd/tests/stale-worktree-cwd.test.ts +3 -5
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +32 -0
- package/src/resources/extensions/gsd/tests/stash-pop-gsd-conflict.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/stash-queued-context-files.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/steer-worktree-path.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/supervisor-model-swap-inflight-guard.test.ts +181 -0
- package/src/resources/extensions/gsd/tests/supervisor-model-swap-thinking-clamp.test.ts +122 -0
- package/src/resources/extensions/gsd/tests/sync-worktree-skip-current.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/system-flat-phase-layout.test.ts +33 -0
- package/src/resources/extensions/gsd/tests/teardown-chdir-failure-clears-registry.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/teardown-cleanup-parity.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/teardown-failure-clears-registry.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/tool-call-loop-guard.test.ts +196 -0
- package/src/resources/extensions/gsd/tests/uat-dispatch.test.ts +211 -0
- package/src/resources/extensions/gsd/tests/uat-stuck-loop-orphaned-worktree.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +26 -1
- package/src/resources/extensions/gsd/tests/uok-gate-runner.test.ts +39 -0
- package/src/resources/extensions/gsd/tests/uok-kernel-path.test.ts +226 -2
- package/src/resources/extensions/gsd/tests/uok-model-policy.test.ts +6 -0
- package/src/resources/extensions/gsd/tests/worker-resume-wait.test.ts +73 -0
- package/src/resources/extensions/gsd/tests/workflow-projections.test.ts +213 -2
- package/src/resources/extensions/gsd/tests/worktree-db-integration.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-db-respawn-truncation.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-db-same-file.test.ts +1 -3
- package/src/resources/extensions/gsd/tests/worktree-expected-warnings.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-git-pathspec.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-main-branch.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-preferences-sync.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-reentry.test.ts +2 -1
- package/src/resources/extensions/gsd/tests/worktree-sync-milestones.test.ts +5 -2
- package/src/resources/extensions/gsd/tests/worktree-sync-overwrite-loop.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/worktree-sync-tasks.test.ts +1 -1
- package/src/resources/extensions/gsd/tool-contract.ts +29 -0
- package/src/resources/extensions/gsd/tools/complete-milestone.ts +9 -5
- package/src/resources/extensions/gsd/tools/reassess-roadmap.ts +19 -8
- package/src/resources/extensions/gsd/tools/reopen-slice.ts +5 -0
- package/src/resources/extensions/gsd/tools/reopen-task.ts +28 -5
- package/src/resources/extensions/gsd/tools/validate-milestone.ts +13 -9
- package/src/resources/extensions/gsd/types.ts +23 -4
- package/src/resources/extensions/gsd/uat-dispatch.ts +176 -0
- package/src/resources/extensions/gsd/unit-registry.ts +16 -2
- package/src/resources/extensions/gsd/unmerged-milestone-guard.ts +1 -1
- package/src/resources/extensions/gsd/uok/audit-toggle.ts +32 -2
- package/src/resources/extensions/gsd/uok/audit.ts +2 -0
- package/src/resources/extensions/gsd/uok/gate-runner.ts +26 -36
- package/src/resources/extensions/gsd/uok/gitops.ts +21 -18
- package/src/resources/extensions/gsd/uok/kernel.ts +169 -48
- package/src/resources/extensions/gsd/uok/model-policy.ts +20 -17
- package/src/resources/extensions/gsd/validation-block-guard.ts +2 -1
- package/src/resources/extensions/gsd/workflow-event-ledger.ts +1 -1
- package/src/resources/extensions/gsd/workflow-logger.ts +1 -1
- package/src/resources/extensions/gsd/workflow-projections.ts +9 -24
- package/src/resources/extensions/gsd/workspace-git-preflight.ts +2 -2
- package/src/resources/extensions/gsd/workspace.ts +5 -21
- package/src/resources/extensions/gsd/worktree-command.ts +1 -1
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +19 -15
- package/src/resources/extensions/gsd/worktree-reentry.ts +2 -1
- package/src/resources/extensions/shared/gsd-browser-cli.ts +64 -7
- package/src/resources/extensions/shared/interview-ui.ts +58 -11
- package/src/resources/extensions/shared/tests/interview-ui-border.test.ts +32 -0
- package/dist/web/standalone/.next/static/chunks/app/_not-found/page-49f565245e1e4afe.js +0 -1
- package/dist/web/standalone/.next/static/chunks/app/page-bc4c723c6a19c6f0.js +0 -1
- package/dist/web/standalone/.next/static/chunks/next/dist/client/components/builtin/global-error-ec3eaffc9785ba48.js +0 -1
- /package/dist/web/standalone/.next/static/{bCg3aYrFN1DKZr2dqgE7L → XFuMvz26Zb_lrrR-8dvkd}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{bCg3aYrFN1DKZr2dqgE7L → XFuMvz26Zb_lrrR-8dvkd}/_ssgManifest.js +0 -0
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import type { TaskMetadata } from "../complexity-classifier.js";
|
|
2
2
|
import { computeTaskRequirements, filterToolsForProvider } from "../model-router.js";
|
|
3
3
|
import { buildAuditEnvelope, emitUokAuditEvent } from "./audit.js";
|
|
4
|
+
import { isUnifiedAuditEnabled } from "./audit-toggle.js";
|
|
4
5
|
|
|
5
6
|
export interface ModelCandidate {
|
|
6
7
|
id: string;
|
|
@@ -83,23 +84,25 @@ export function applyModelPolicyFilter<T extends ModelCandidate>(
|
|
|
83
84
|
};
|
|
84
85
|
decisions.push(decision);
|
|
85
86
|
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
87
|
+
if (isUnifiedAuditEnabled(options.basePath)) {
|
|
88
|
+
emitUokAuditEvent(
|
|
89
|
+
options.basePath,
|
|
90
|
+
buildAuditEnvelope({
|
|
91
|
+
traceId: options.traceId,
|
|
92
|
+
turnId: options.turnId,
|
|
93
|
+
category: "model-policy",
|
|
94
|
+
type: allowed ? "model-policy-allow" : "model-policy-deny",
|
|
95
|
+
payload: {
|
|
96
|
+
modelId: model.id,
|
|
97
|
+
provider: model.provider,
|
|
98
|
+
api: model.api,
|
|
99
|
+
reason,
|
|
100
|
+
unitType: options.unitType,
|
|
101
|
+
requirements,
|
|
102
|
+
},
|
|
103
|
+
}),
|
|
104
|
+
);
|
|
105
|
+
}
|
|
103
106
|
|
|
104
107
|
if (allowed) eligible.push(model);
|
|
105
108
|
}
|
|
@@ -3,7 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { existsSync } from "node:fs";
|
|
5
5
|
|
|
6
|
-
import {
|
|
6
|
+
import { isInAutoWorktree } from "./auto-worktree-entry.js";
|
|
7
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
7
8
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
8
9
|
import { refreshWorkflowDatabaseFromDisk } from "./db-workspace.js";
|
|
9
10
|
import { getIsolationMode } from "./preferences.js";
|
|
@@ -105,7 +105,7 @@ export function writeWorktreeEventLog(
|
|
|
105
105
|
}
|
|
106
106
|
|
|
107
107
|
function emitWorkflowEventAudit(basePath: string, event: WorkflowEvent): void {
|
|
108
|
-
if (!isUnifiedAuditEnabled()) return;
|
|
108
|
+
if (!isUnifiedAuditEnabled(basePath)) return;
|
|
109
109
|
try {
|
|
110
110
|
const normalized = normalizeWorkflowEventCommand(event.cmd) ?? "unknown";
|
|
111
111
|
emitUokAuditEvent(
|
|
@@ -17,7 +17,7 @@ import type { MilestoneRow } from "./db-milestone-artifact-rows.js";
|
|
|
17
17
|
import type { SliceRow, TaskRow } from "./db-task-slice-rows.js";
|
|
18
18
|
import type { VerificationEvidenceRow } from "./db-verification-evidence-rows.js";
|
|
19
19
|
import { atomicWriteSync } from "./atomic-write.js";
|
|
20
|
-
import { join } from "node:path";
|
|
20
|
+
import { dirname, join } from "node:path";
|
|
21
21
|
import { mkdirSync, existsSync } from "node:fs";
|
|
22
22
|
import { readFile } from "node:fs/promises";
|
|
23
23
|
import { logWarning } from "./workflow-logger.js";
|
|
@@ -26,7 +26,7 @@ import { deriveState } from "./state.js";
|
|
|
26
26
|
import type { GSDState } from "./types.js";
|
|
27
27
|
import { renderPlanFromDb, renderRoadmapFromDb } from "./markdown-renderer.js";
|
|
28
28
|
import { readManifest } from "./workflow-manifest.js";
|
|
29
|
-
import { gsdRoot,
|
|
29
|
+
import { gsdRoot, resolveMilestoneFile, resolveSliceFile, resolveTaskFile, relTaskFile } from "./paths.js";
|
|
30
30
|
|
|
31
31
|
// ─── Helpers ─────────────────────────────────────────────────────────────
|
|
32
32
|
|
|
@@ -329,24 +329,10 @@ export function renderSummaryProjection(basePath: string, milestoneId: string, s
|
|
|
329
329
|
const evidenceRows = getVerificationEvidence(milestoneId, sliceId, taskId);
|
|
330
330
|
const content = renderSummaryContent(taskRow, sliceId, milestoneId, evidenceRows);
|
|
331
331
|
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
const phaseDir = resolveMilestonePath(basePath, milestoneId);
|
|
337
|
-
let dir: string;
|
|
338
|
-
if (slicePath && phaseDir && slicePath !== phaseDir) {
|
|
339
|
-
// Legacy layout: slice has its own slices/SID/ subdir → tasks/ subdir
|
|
340
|
-
dir = join(slicePath, "tasks");
|
|
341
|
-
} else if (phaseDir) {
|
|
342
|
-
// Flat-phase: task summaries go in the phase dir (no tasks/ subdir needed)
|
|
343
|
-
dir = phaseDir;
|
|
344
|
-
} else {
|
|
345
|
-
// Fallback: legacy hardcoded path (milestone dir not on disk yet)
|
|
346
|
-
dir = join(gsdProjectionRoot(basePath), "milestones", milestoneId, "slices", sliceId, "tasks");
|
|
347
|
-
}
|
|
348
|
-
mkdirSync(dir, { recursive: true });
|
|
349
|
-
atomicWriteSync(join(dir, `${taskId}-SUMMARY.md`), content);
|
|
332
|
+
const summaryPath = resolveTaskFile(basePath, milestoneId, sliceId, taskId, "SUMMARY")
|
|
333
|
+
?? join(basePath, relTaskFile(basePath, milestoneId, sliceId, taskId, "SUMMARY", getMilestone(milestoneId)?.title));
|
|
334
|
+
mkdirSync(dirname(summaryPath), { recursive: true });
|
|
335
|
+
atomicWriteSync(summaryPath, content);
|
|
350
336
|
}
|
|
351
337
|
|
|
352
338
|
// ─── STATE.md Projection ────────────────────────────────────────────────
|
|
@@ -536,7 +522,7 @@ export async function regenerateIfMissing(
|
|
|
536
522
|
filePath = resolveSliceFile(basePath, milestoneId, sliceId, "PLAN") ?? "";
|
|
537
523
|
break;
|
|
538
524
|
case "ROADMAP":
|
|
539
|
-
filePath =
|
|
525
|
+
filePath = resolveMilestoneFile(basePath, milestoneId, "ROADMAP") ?? "";
|
|
540
526
|
break;
|
|
541
527
|
case "SUMMARY":
|
|
542
528
|
// For SUMMARY, we regenerate all task summaries in the slice
|
|
@@ -553,8 +539,7 @@ export async function regenerateIfMissing(
|
|
|
553
539
|
const doneTasks = taskRows.filter(t => t.status === "done" || t.status === "complete");
|
|
554
540
|
let regenerated = 0;
|
|
555
541
|
for (const task of doneTasks) {
|
|
556
|
-
|
|
557
|
-
if (!existsSync(summaryPath)) {
|
|
542
|
+
if (!resolveTaskFile(basePath, milestoneId, sliceId, task.id, "SUMMARY")) {
|
|
558
543
|
try {
|
|
559
544
|
renderSummaryProjection(basePath, milestoneId, sliceId, task.id);
|
|
560
545
|
regenerated++;
|
|
@@ -591,7 +576,7 @@ export async function regenerateIfMissing(
|
|
|
591
576
|
return !!(resolveSliceFile(basePath, milestoneId, sliceId, "PLAN"));
|
|
592
577
|
case "ROADMAP":
|
|
593
578
|
await renderRoadmapFromDb(basePath, milestoneId);
|
|
594
|
-
return
|
|
579
|
+
return !!resolveMilestoneFile(basePath, milestoneId, "ROADMAP");
|
|
595
580
|
case "STATE":
|
|
596
581
|
await renderStateProjection(basePath);
|
|
597
582
|
return existsSync(filePath);
|
|
@@ -3,8 +3,8 @@
|
|
|
3
3
|
|
|
4
4
|
import { existsSync, realpathSync } from "node:fs";
|
|
5
5
|
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
6
|
+
import { isSafeToAutoResolve } from "./auto-worktree-conflict-auto-resolve.js";
|
|
7
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
8
8
|
import { ensureDbOpen } from "./bootstrap/dynamic-tools.js";
|
|
9
9
|
import {
|
|
10
10
|
listMergeStateBlockers,
|
|
@@ -2,14 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
import { dirname, join, resolve } from "node:path";
|
|
4
4
|
import {
|
|
5
|
-
buildMilestoneFileName,
|
|
6
|
-
canonicalPhaseDirName,
|
|
7
|
-
isLegacyMilestonesLayout,
|
|
8
|
-
milestonesDir,
|
|
9
5
|
type GsdPathContract,
|
|
10
6
|
resolveGsdPathContract,
|
|
11
7
|
resolveMilestoneFile,
|
|
12
8
|
resolveMilestonePath,
|
|
9
|
+
targetMilestoneFile,
|
|
13
10
|
normalizeRealPath,
|
|
14
11
|
} from "./paths.js";
|
|
15
12
|
import { isGsdWorktreePath, resolveWorktreeProjectRoot } from "./worktree-root.js";
|
|
@@ -41,27 +38,14 @@ function tryRealpath(p: string): string {
|
|
|
41
38
|
return normalizeRealPath(p);
|
|
42
39
|
}
|
|
43
40
|
|
|
44
|
-
function isLegacyMilestoneDirectory(dir: string): boolean {
|
|
45
|
-
const parent = dirname(dir);
|
|
46
|
-
return parent.endsWith("/milestones") || parent.endsWith("\\milestones");
|
|
47
|
-
}
|
|
48
|
-
|
|
49
41
|
function scopeMilestoneDir(basePath: string, milestoneId: string): string {
|
|
50
|
-
return resolveMilestonePath(basePath, milestoneId)
|
|
51
|
-
|
|
52
|
-
isLegacyMilestonesLayout(basePath) ? milestoneId : canonicalPhaseDirName(milestoneId),
|
|
53
|
-
);
|
|
42
|
+
return resolveMilestonePath(basePath, milestoneId)
|
|
43
|
+
?? dirname(targetMilestoneFile(basePath, milestoneId, "ROADMAP"));
|
|
54
44
|
}
|
|
55
45
|
|
|
56
46
|
function scopeMilestoneFile(basePath: string, milestoneId: string, suffix: string): string {
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
const dir = scopeMilestoneDir(basePath, milestoneId);
|
|
61
|
-
const filename = isLegacyMilestoneDirectory(dir)
|
|
62
|
-
? `${milestoneId}-${suffix}.md`
|
|
63
|
-
: buildMilestoneFileName(milestoneId, suffix);
|
|
64
|
-
return join(dir, filename);
|
|
47
|
+
return resolveMilestoneFile(basePath, milestoneId, suffix)
|
|
48
|
+
?? targetMilestoneFile(basePath, milestoneId, suffix);
|
|
65
49
|
}
|
|
66
50
|
|
|
67
51
|
/**
|
|
@@ -13,7 +13,7 @@
|
|
|
13
13
|
import type { ExtensionAPI, ExtensionCommandContext } from "@gsd/pi-coding-agent";
|
|
14
14
|
import { loadPrompt } from "./prompt-loader.js";
|
|
15
15
|
import { autoCommitCurrentBranch, getMainBranch, resolveGitHeadPath, nudgeGitBranchCache } from "./worktree.js";
|
|
16
|
-
import { runWorktreePostCreateHook } from "./
|
|
16
|
+
import { runWorktreePostCreateHook } from "./worktree-post-create-hook.js";
|
|
17
17
|
import { showConfirm } from "../shared/tui.js";
|
|
18
18
|
import { gsdRoot, milestonesDir, resolveGsdPathContract } from "./paths.js";
|
|
19
19
|
import {
|
|
@@ -68,19 +68,21 @@ import {
|
|
|
68
68
|
getCurrentBranch,
|
|
69
69
|
} from "./worktree.js";
|
|
70
70
|
import { nativeCheckoutBranch } from "./native-git-bridge.js";
|
|
71
|
-
// ADR-016 phase 2 / C2 (#5625):
|
|
72
|
-
//
|
|
73
|
-
//
|
|
74
|
-
//
|
|
71
|
+
// ADR-016 phase 2 / C2 (#5625): lifecycle uses focused auto-worktree
|
|
72
|
+
// modules instead of the legacy compatibility barrel. Branch, entry/path,
|
|
73
|
+
// creation, and teardown primitives are still implementation-level seams for
|
|
74
|
+
// Lifecycle; tests vary them through `WorktreeLifecycleTestOverrides` below.
|
|
75
75
|
import {
|
|
76
76
|
autoWorktreeBranch,
|
|
77
|
-
createAutoWorktree,
|
|
78
|
-
enterAutoWorktree,
|
|
79
77
|
enterBranchModeForMilestone,
|
|
80
|
-
|
|
78
|
+
} from "./auto-worktree-branch-lifecycle.js";
|
|
79
|
+
import { createAutoWorktree } from "./auto-worktree-creation.js";
|
|
80
|
+
import {
|
|
81
|
+
enterAutoWorktree,
|
|
81
82
|
isInAutoWorktree,
|
|
82
|
-
|
|
83
|
-
} from "./auto-worktree.js";
|
|
83
|
+
} from "./auto-worktree-entry.js";
|
|
84
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
85
|
+
import { teardownAutoWorktree } from "./auto-worktree-teardown.js";
|
|
84
86
|
import { resolveRoadmapForMilestoneMerge } from "./milestone-merge-roadmap.js";
|
|
85
87
|
import type { MilestoneMergeTransactionRunner } from "./milestone-merge-transaction.js";
|
|
86
88
|
|
|
@@ -353,7 +355,7 @@ export interface MergeContext {
|
|
|
353
355
|
originalBasePath: string;
|
|
354
356
|
/**
|
|
355
357
|
* Current worktree path or project root when in branch mode. Used as the
|
|
356
|
-
* cwd anchor for
|
|
358
|
+
* cwd anchor for the milestone merge transaction and the source for
|
|
357
359
|
* `Projection.finalizeProjectionForMerge`.
|
|
358
360
|
*/
|
|
359
361
|
worktreeBasePath: string;
|
|
@@ -381,7 +383,8 @@ export interface MergeStandaloneResult {
|
|
|
381
383
|
pushed: boolean;
|
|
382
384
|
/**
|
|
383
385
|
* Commit message produced by the squash merge, if available. Forwarded
|
|
384
|
-
* from
|
|
386
|
+
* from the milestone merge transaction. Only populated when
|
|
387
|
+
* `merged === true`.
|
|
385
388
|
*/
|
|
386
389
|
commitMessage?: string;
|
|
387
390
|
}
|
|
@@ -1373,8 +1376,9 @@ function _mergeBranchModeImpl(
|
|
|
1373
1376
|
* **CWD anchor**: anchors `process.cwd()` at `originalBasePath` before
|
|
1374
1377
|
* non-worktree merge paths to mirror the single-loop guard against ENOENT
|
|
1375
1378
|
* after teardown (de73fb43d). Worktree-mode merge paths keep the real
|
|
1376
|
-
* worktree as cwd because
|
|
1377
|
-
*
|
|
1379
|
+
* worktree as cwd because the default milestone merge transaction delegates
|
|
1380
|
+
* to the legacy merge primitive, which infers source worktree state from
|
|
1381
|
+
* `process.cwd()`. Best-effort; silent on failure.
|
|
1378
1382
|
*
|
|
1379
1383
|
* **Failure handling**: `MergeConflictError` and other unrecoverable errors
|
|
1380
1384
|
* propagate to the caller. The caller is responsible for any state restore
|
|
@@ -1475,8 +1479,8 @@ export function mergeMilestoneStandalone(
|
|
|
1475
1479
|
|
|
1476
1480
|
// Set cwd to the correct anchor before dispatching to mode implementations.
|
|
1477
1481
|
// Worktree mode / in-worktree override must run from the live worktree so
|
|
1478
|
-
//
|
|
1479
|
-
// the original project root. Best-effort for synthetic test paths.
|
|
1482
|
+
// The default merge transaction can find worktree-local state; branch mode
|
|
1483
|
+
// runs from the original project root. Best-effort for synthetic test paths.
|
|
1480
1484
|
const targetCwd = mode === "worktree" || inWorktree
|
|
1481
1485
|
? worktreeBasePath
|
|
1482
1486
|
: originalBasePath;
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
import { readdirSync } from "node:fs";
|
|
10
10
|
|
|
11
|
-
import { enterAutoWorktree
|
|
11
|
+
import { enterAutoWorktree } from "./auto-worktree-entry.js";
|
|
12
|
+
import { getAutoWorktreePath } from "./auto-worktree-path-resolution.js";
|
|
12
13
|
import { getIsolationMode } from "./preferences.js";
|
|
13
14
|
import { allWorktreesDirs } from "./worktree-manager.js";
|
|
14
15
|
import { isGsdWorktreePath, resolveWorktreeProjectRoot } from "./worktree-root.js";
|
|
@@ -66,6 +66,30 @@ function splitCommandLine(commandLine: string): string[] {
|
|
|
66
66
|
});
|
|
67
67
|
}
|
|
68
68
|
|
|
69
|
+
/**
|
|
70
|
+
* Extra gsd-browser CLI flags to forward verbatim to the launched daemon, from
|
|
71
|
+
* GSD_BROWSER_MCP_EXTRA_ARGS. Unlike GSD_BROWSER_MCP_ARGS (a full args override),
|
|
72
|
+
* these are *appended* to the default `mcp`/`daemon start` invocation so callers
|
|
73
|
+
* keep the managed session/identity flags. Accepts a JSON array (e.g.
|
|
74
|
+
* `["--stealth"]`) or a plain, optionally-quoted command-line string
|
|
75
|
+
* (e.g. `--stealth --browser-path /usr/bin/chromium`). This is the config-level
|
|
76
|
+
* knob for environments where Chrome needs extra launch flags — e.g. containers
|
|
77
|
+
* without unprivileged user namespaces, where `--stealth` supplies Chrome's
|
|
78
|
+
* `--no-sandbox`.
|
|
79
|
+
*/
|
|
80
|
+
function resolveExtraGsdBrowserArgs(env: NodeJS.ProcessEnv): string[] {
|
|
81
|
+
const raw = env.GSD_BROWSER_MCP_EXTRA_ARGS?.trim();
|
|
82
|
+
if (!raw) return [];
|
|
83
|
+
if (raw.startsWith("[")) {
|
|
84
|
+
const parsed = parseJsonEnv<unknown>(env, "GSD_BROWSER_MCP_EXTRA_ARGS");
|
|
85
|
+
if (!Array.isArray(parsed)) {
|
|
86
|
+
throw new Error("GSD_BROWSER_MCP_EXTRA_ARGS JSON must be an array of strings");
|
|
87
|
+
}
|
|
88
|
+
return parsed.map(String);
|
|
89
|
+
}
|
|
90
|
+
return splitCommandLine(raw);
|
|
91
|
+
}
|
|
92
|
+
|
|
69
93
|
function buildPathGsdBrowserVersionInvocation(platform: NodeJS.Platform): { command: string; args: string[] } {
|
|
70
94
|
if (platform === "win32") {
|
|
71
95
|
return { command: "cmd", args: ["/d", "/s", "/c", "gsd-browser", "--version"] };
|
|
@@ -297,6 +321,10 @@ export function resolveGsdBrowserMcpLaunchConfig(
|
|
|
297
321
|
|| (preferPathCli ? "gsd-browser" : undefined)
|
|
298
322
|
|| (bundledCliPath ? process.execPath : undefined)
|
|
299
323
|
|| "gsd-browser";
|
|
324
|
+
// Appended after the managed session/identity flags so they survive the
|
|
325
|
+
// daemon-start transformation (which forwards everything after `mcp`), letting
|
|
326
|
+
// callers add extra Chrome/gsd-browser launch flags via one config knob.
|
|
327
|
+
const extraArgs = resolveExtraGsdBrowserArgs(env);
|
|
300
328
|
const args = Array.isArray(explicitArgs) && explicitArgs.length > 0
|
|
301
329
|
? explicitArgs.map(String)
|
|
302
330
|
: [
|
|
@@ -311,6 +339,7 @@ export function resolveGsdBrowserMcpLaunchConfig(
|
|
|
311
339
|
identityKey,
|
|
312
340
|
"--identity-project",
|
|
313
341
|
identityProject,
|
|
342
|
+
...extraArgs,
|
|
314
343
|
];
|
|
315
344
|
const cwd = env.GSD_BROWSER_MCP_CWD?.trim() || resolvedProjectRoot;
|
|
316
345
|
|
|
@@ -326,14 +355,16 @@ export function resolveGsdBrowserMcpLaunchConfig(
|
|
|
326
355
|
}
|
|
327
356
|
|
|
328
357
|
/**
|
|
329
|
-
* CLI invocation that
|
|
330
|
-
* session and identity flags as
|
|
331
|
-
*
|
|
358
|
+
* CLI invocation that runs a `daemon <action>` command against the gsd-browser
|
|
359
|
+
* session daemon with the same session and identity flags as
|
|
360
|
+
* {@link resolveGsdBrowserMcpLaunchConfig}, so start (warm-up) and stop
|
|
361
|
+
* (teardown) address the exact same managed daemon.
|
|
332
362
|
*/
|
|
333
|
-
|
|
363
|
+
function resolveGsdBrowserDaemonInvocation(
|
|
364
|
+
action: "start" | "stop",
|
|
334
365
|
projectRoot: string,
|
|
335
|
-
env: NodeJS.ProcessEnv
|
|
336
|
-
options: GsdBrowserMcpLaunchOptions
|
|
366
|
+
env: NodeJS.ProcessEnv,
|
|
367
|
+
options: GsdBrowserMcpLaunchOptions,
|
|
337
368
|
): Pick<GsdBrowserMcpLaunchConfig, "command" | "args" | "cwd" | "env"> {
|
|
338
369
|
const launch = resolveGsdBrowserMcpLaunchConfig(projectRoot, env, options);
|
|
339
370
|
const mcpIndex = launch.args.indexOf("mcp");
|
|
@@ -345,8 +376,34 @@ export function resolveGsdBrowserDaemonStartInvocation(
|
|
|
345
376
|
const sessionFlags = launch.args.slice(mcpIndex + 1);
|
|
346
377
|
return {
|
|
347
378
|
command: launch.command,
|
|
348
|
-
args: [...prefix, "daemon",
|
|
379
|
+
args: [...prefix, "daemon", action, ...sessionFlags],
|
|
349
380
|
cwd: launch.cwd,
|
|
350
381
|
...(launch.env ? { env: launch.env } : {}),
|
|
351
382
|
};
|
|
352
383
|
}
|
|
384
|
+
|
|
385
|
+
/**
|
|
386
|
+
* CLI invocation that starts the gsd-browser session daemon with the same
|
|
387
|
+
* session and identity flags as {@link resolveGsdBrowserMcpLaunchConfig}, so
|
|
388
|
+
* browser UAT can warm Chrome/CDP before the first MCP navigation.
|
|
389
|
+
*/
|
|
390
|
+
export function resolveGsdBrowserDaemonStartInvocation(
|
|
391
|
+
projectRoot: string,
|
|
392
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
393
|
+
options: GsdBrowserMcpLaunchOptions = {},
|
|
394
|
+
): Pick<GsdBrowserMcpLaunchConfig, "command" | "args" | "cwd" | "env"> {
|
|
395
|
+
return resolveGsdBrowserDaemonInvocation("start", projectRoot, env, options);
|
|
396
|
+
}
|
|
397
|
+
|
|
398
|
+
/**
|
|
399
|
+
* CLI invocation that stops the gsd-browser session daemon warmed for browser
|
|
400
|
+
* UAT, so the Chrome process is torn down instead of lingering after the
|
|
401
|
+
* triggering task/session ends.
|
|
402
|
+
*/
|
|
403
|
+
export function resolveGsdBrowserDaemonStopInvocation(
|
|
404
|
+
projectRoot: string,
|
|
405
|
+
env: NodeJS.ProcessEnv = process.env,
|
|
406
|
+
options: GsdBrowserMcpLaunchOptions = {},
|
|
407
|
+
): Pick<GsdBrowserMcpLaunchConfig, "command" | "args" | "cwd" | "env"> {
|
|
408
|
+
return resolveGsdBrowserDaemonInvocation("stop", projectRoot, env, options);
|
|
409
|
+
}
|
|
@@ -244,6 +244,14 @@ export async function showInterviewRound(
|
|
|
244
244
|
let completed = false;
|
|
245
245
|
let removeAbortListener: (() => void) | undefined;
|
|
246
246
|
|
|
247
|
+
// Preview-panel scrolling. previewScroll is the first visible line of the
|
|
248
|
+
// side-by-side preview column; the viewport/total are captured on each
|
|
249
|
+
// render so PgUp/PgDn input can clamp against real bounds.
|
|
250
|
+
let previewScroll = 0;
|
|
251
|
+
let previewViewport = 0;
|
|
252
|
+
let previewTotal = 0;
|
|
253
|
+
function resetPreviewScroll() { previewScroll = 0; }
|
|
254
|
+
|
|
247
255
|
function finish(result: RoundResult) {
|
|
248
256
|
if (completed) return;
|
|
249
257
|
completed = true;
|
|
@@ -309,6 +317,7 @@ export async function showInterviewRound(
|
|
|
309
317
|
if (newIdx === currentIdx) return;
|
|
310
318
|
saveEditorToState();
|
|
311
319
|
currentIdx = newIdx;
|
|
320
|
+
resetPreviewScroll();
|
|
312
321
|
loadStateToEditor();
|
|
313
322
|
focusNotes = states[currentIdx].notesVisible && states[currentIdx].notes.length > 0;
|
|
314
323
|
refresh();
|
|
@@ -455,9 +464,20 @@ export async function showInterviewRound(
|
|
|
455
464
|
if (matchesKey(data, Key.right)) { switchQuestion((currentIdx + 1) % questions.length); return; }
|
|
456
465
|
}
|
|
457
466
|
|
|
467
|
+
// ── Preview scrolling ────────────────────────────────────────
|
|
468
|
+
if (matchesKey(data, Key.pageUp)) {
|
|
469
|
+
if (previewScroll > 0) { previewScroll = Math.max(0, previewScroll - previewViewport); refresh(); }
|
|
470
|
+
return;
|
|
471
|
+
}
|
|
472
|
+
if (matchesKey(data, Key.pageDown)) {
|
|
473
|
+
const maxScroll = Math.max(0, previewTotal - previewViewport);
|
|
474
|
+
if (previewScroll < maxScroll) { previewScroll = Math.min(maxScroll, previewScroll + previewViewport); refresh(); }
|
|
475
|
+
return;
|
|
476
|
+
}
|
|
477
|
+
|
|
458
478
|
// ── Cursor navigation ────────────────────────────────────────
|
|
459
|
-
if (matchesKey(data, Key.up)) { st.cursorIndex = (st.cursorIndex - 1 + optCount) % optCount; refresh(); return; }
|
|
460
|
-
if (matchesKey(data, Key.down)) { st.cursorIndex = (st.cursorIndex + 1) % optCount; refresh(); return; }
|
|
479
|
+
if (matchesKey(data, Key.up)) { st.cursorIndex = (st.cursorIndex - 1 + optCount) % optCount; resetPreviewScroll(); refresh(); return; }
|
|
480
|
+
if (matchesKey(data, Key.down)) { st.cursorIndex = (st.cursorIndex + 1) % optCount; resetPreviewScroll(); refresh(); return; }
|
|
461
481
|
|
|
462
482
|
if (multiSel) {
|
|
463
483
|
const doneI = noneOrDoneIdx(currentIdx);
|
|
@@ -562,6 +582,12 @@ export async function showInterviewRound(
|
|
|
562
582
|
|
|
563
583
|
// ── Preview helpers ──────────────────────────────────────────────
|
|
564
584
|
|
|
585
|
+
// Centered dim label between horizontal rules, used to mark hidden/scrollable rows.
|
|
586
|
+
function scrollIndicator(lbl: string, colWidth: number): string {
|
|
587
|
+
const d = "─".repeat(Math.max(0, Math.floor((colWidth - lbl.length - 2) / 2)));
|
|
588
|
+
return truncateToWidth(theme.fg("dim", ` ${d} ${lbl} ${d}`), colWidth);
|
|
589
|
+
}
|
|
590
|
+
|
|
565
591
|
let mdThemeCache: ReturnType<typeof getMarkdownTheme> | null = null;
|
|
566
592
|
let previewCache: { markdown: string; width: number; lines: string[] } | null = null;
|
|
567
593
|
|
|
@@ -666,6 +692,10 @@ export async function showInterviewRound(
|
|
|
666
692
|
const useSideBySide = questionHasAnyPreview()
|
|
667
693
|
&& contentWidth >= (MIN_OPTIONS_WIDTH + MIN_PREVIEW_WIDTH + DIVIDER_WIDTH);
|
|
668
694
|
|
|
695
|
+
// No scrollable preview unless the side-by-side path sets these below.
|
|
696
|
+
previewTotal = 0;
|
|
697
|
+
previewViewport = 0;
|
|
698
|
+
|
|
669
699
|
if (useSideBySide) {
|
|
670
700
|
// ── Preview path ──────────────────────────────────────
|
|
671
701
|
const ui = makeUI(theme, contentWidth);
|
|
@@ -707,19 +737,35 @@ export async function showInterviewRound(
|
|
|
707
737
|
const leftLines = fullLeft.slice(0, maxBody);
|
|
708
738
|
if (fullLeft.length > maxBody) {
|
|
709
739
|
const n = fullLeft.length - maxBody + 1;
|
|
710
|
-
|
|
711
|
-
const d = "─".repeat(Math.max(0, Math.floor((leftWidth - lbl.length - 2) / 2)));
|
|
712
|
-
leftLines[maxBody - 1] = truncateToWidth(theme.fg("dim", ` ${d} ${lbl} ${d}`), leftWidth);
|
|
740
|
+
leftLines[maxBody - 1] = scrollIndicator(`+${n} lines hidden`, leftWidth);
|
|
713
741
|
}
|
|
714
742
|
|
|
715
743
|
const preview = getCurrentPreview();
|
|
716
744
|
const fullRight = preview ? renderPreviewColumn(preview, previewWidth) : [];
|
|
717
|
-
|
|
718
|
-
|
|
719
|
-
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
745
|
+
// The first two lines are the pinned "Preview" header; the body
|
|
746
|
+
// below them scrolls via PgUp/PgDn so no content is unreachable.
|
|
747
|
+
const headerRows = fullRight.length > 0 ? 2 : 0;
|
|
748
|
+
const previewBody = fullRight.slice(headerRows);
|
|
749
|
+
const bodyViewport = Math.max(1, maxBody - headerRows);
|
|
750
|
+
previewTotal = previewBody.length;
|
|
751
|
+
previewViewport = bodyViewport;
|
|
752
|
+
const maxScroll = Math.max(0, previewBody.length - bodyViewport);
|
|
753
|
+
if (previewScroll > maxScroll) previewScroll = maxScroll;
|
|
754
|
+
|
|
755
|
+
const rightLines = fullRight.slice(0, headerRows);
|
|
756
|
+
if (previewBody.length <= bodyViewport) {
|
|
757
|
+
rightLines.push(...previewBody);
|
|
758
|
+
} else {
|
|
759
|
+
rightLines.push(...previewBody.slice(previewScroll, previewScroll + bodyViewport));
|
|
760
|
+
const hiddenAbove = previewScroll;
|
|
761
|
+
const hiddenBelow = previewBody.length - (previewScroll + bodyViewport);
|
|
762
|
+
// Overwrite the top/bottom visible rows with scroll indicators.
|
|
763
|
+
if (hiddenAbove > 0) {
|
|
764
|
+
rightLines[headerRows] = scrollIndicator(`▲ ${hiddenAbove} more`, previewWidth);
|
|
765
|
+
}
|
|
766
|
+
if (hiddenBelow > 0) {
|
|
767
|
+
rightLines[rightLines.length - 1] = scrollIndicator(`▼ ${hiddenBelow} more · PgUp/PgDn`, previewWidth);
|
|
768
|
+
}
|
|
723
769
|
}
|
|
724
770
|
|
|
725
771
|
while (leftLines.length < maxBody) leftLines.push("");
|
|
@@ -744,6 +790,7 @@ export async function showInterviewRound(
|
|
|
744
790
|
if (isMultiQuestion) hints.push("←/→ navigate");
|
|
745
791
|
hints.push(isLast && allAnswered() ? "enter to review" : "enter to next");
|
|
746
792
|
}
|
|
793
|
+
if (previewTotal > previewViewport) hints.push("pgup/pgdn scroll preview");
|
|
747
794
|
hints.push("esc to exit");
|
|
748
795
|
const footer = ui.hints(hints)[0] ?? "";
|
|
749
796
|
|
|
@@ -16,6 +16,8 @@ import {
|
|
|
16
16
|
const ANSI_PATTERN = /\x1b\[[0-9;?]*[ -/]*[@-~]/g;
|
|
17
17
|
const ENTER = "\r";
|
|
18
18
|
const ESC = "\x1b";
|
|
19
|
+
const PAGE_DOWN = "\x1b[6~";
|
|
20
|
+
const PAGE_UP = "\x1b[5~";
|
|
19
21
|
|
|
20
22
|
before(() => { initTheme(); });
|
|
21
23
|
|
|
@@ -160,4 +162,34 @@ describe("interview-ui dialog borders", () => {
|
|
|
160
162
|
const widget = await captureWrapUpWidget();
|
|
161
163
|
assertFullOuterBorder(widget.render(80), 80);
|
|
162
164
|
});
|
|
165
|
+
|
|
166
|
+
it("makes an overflowing preview scrollable with PgUp/PgDn", async () => {
|
|
167
|
+
const longPreview = Array.from({ length: 60 }, (_, i) => `line ${i + 1}`).join("\n");
|
|
168
|
+
const widget = await captureInterviewWidget([{
|
|
169
|
+
...questions[0],
|
|
170
|
+
options: [
|
|
171
|
+
{ label: "Web App", description: "Frontend or full-stack", preview: longPreview },
|
|
172
|
+
],
|
|
173
|
+
}]);
|
|
174
|
+
|
|
175
|
+
// Initial render: content overflows, so a bottom "more" indicator and the
|
|
176
|
+
// scroll hint are shown, and the border stays intact.
|
|
177
|
+
const initial = stripAnsi(widget.render(100).join("\n"));
|
|
178
|
+
assertFullOuterBorder(widget.render(100), 100);
|
|
179
|
+
assert.match(initial, /▼ \d+ more/, "bottom scroll indicator should appear when preview overflows");
|
|
180
|
+
assert.match(initial, /pgup\/pgdn scroll preview/, "footer should hint at preview scrolling");
|
|
181
|
+
assert.doesNotMatch(initial, /▲ \d+ more/, "top indicator should be absent before scrolling");
|
|
182
|
+
|
|
183
|
+
// Scroll down: content below is now revealed and a top indicator appears.
|
|
184
|
+
widget.handleInput(PAGE_DOWN);
|
|
185
|
+
const scrolled = stripAnsi(widget.render(100).join("\n"));
|
|
186
|
+
assertFullOuterBorder(widget.render(100), 100);
|
|
187
|
+
assert.match(scrolled, /▲ \d+ more/, "top scroll indicator should appear after scrolling down");
|
|
188
|
+
assert.ok(scrolled !== initial, "scrolling should change the rendered preview");
|
|
189
|
+
|
|
190
|
+
// Scroll back up returns to the original view.
|
|
191
|
+
widget.handleInput(PAGE_UP);
|
|
192
|
+
const back = stripAnsi(widget.render(100).join("\n"));
|
|
193
|
+
assert.doesNotMatch(back, /▲ \d+ more/, "top indicator should disappear after scrolling back to top");
|
|
194
|
+
});
|
|
163
195
|
});
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9492],{29999:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"styles",{enumerable:!0,get:function(){return l}});let l={error:{fontFamily:'system-ui,"Segoe UI",Roboto,Helvetica,Arial,sans-serif,"Apple Color Emoji","Segoe UI Emoji"',height:"100vh",textAlign:"center",display:"flex",flexDirection:"column",alignItems:"center",justifyContent:"center"},desc:{display:"inline-block"},h1:{display:"inline-block",margin:"0 20px 0 0",padding:"0 23px 0 0",fontSize:24,fontWeight:500,verticalAlign:"top",lineHeight:"49px"},h2:{fontSize:14,fontWeight:400,lineHeight:"49px",margin:0}};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},32910:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return o}});let r=l(18870),n=l(48664),o=function(){return(0,r.jsx)("html",{children:(0,r.jsx)("body",{children:(0,r.jsx)(n.HTTPAccessErrorFallback,{status:404,message:"This page could not be found."})})})};("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},33433:(e,t,l)=>{(window.__NEXT_P=window.__NEXT_P||[]).push(["/_not-found/page",function(){return l(32910)}])},48664:(e,t,l)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"HTTPAccessErrorFallback",{enumerable:!0,get:function(){return o}});let r=l(18870),n=l(29999);function o({status:e,message:t}){return(0,r.jsxs)(r.Fragment,{children:[(0,r.jsx)("title",{children:`${e}: ${t}`}),(0,r.jsx)("div",{style:n.styles.error,children:(0,r.jsxs)("div",{children:[(0,r.jsx)("style",{dangerouslySetInnerHTML:{__html:"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}),(0,r.jsx)("h1",{className:"next-error-h1",style:n.styles.h1,children:e}),(0,r.jsx)("div",{style:n.styles.desc,children:(0,r.jsx)("h2",{style:n.styles.h2,children:t})})]})})]})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)}},e=>{e.O(0,[9990,686,7358],()=>e(e.s=33433)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{13914:(e,t,n)=>{Promise.resolve().then(n.bind(n,92703))},19013:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorage",{enumerable:!0,get:function(){return r.workAsyncStorageInstance}});let r=n(34969)},23711:(e,t,n)=>{"use strict";n.d(t,{default:()=>u.a});var r=n(60276),u=n.n(r)},30039:(e,t)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n={bindSnapshot:function(){return s},createAsyncLocalStorage:function(){return a},createSnapshot:function(){return i}};for(var r in n)Object.defineProperty(t,r,{enumerable:!0,get:n[r]});let u=Object.defineProperty(Error("Invariant: AsyncLocalStorage accessed in runtime where it is not available"),"__NEXT_ERROR_CODE",{value:"E504",enumerable:!1,configurable:!0});class l{disable(){throw u}getStore(){}run(){throw u}exit(){throw u}enterWith(){throw u}static bind(e){return e}}let o="u">typeof globalThis&&globalThis.AsyncLocalStorage;function a(){return o?new o:new l}function s(e){return o?o.bind(e):l.bind(e)}function i(){return o?o.snapshot():function(e,...t){return e(...t)}}},34969:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"workAsyncStorageInstance",{enumerable:!0,get:function(){return r}});let r=(0,n(30039).createAsyncLocalStorage)()},47811:(e,t,n)=>{"use strict";function r({reason:e,children:t}){return t}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"BailoutToCSR",{enumerable:!0,get:function(){return r}}),n(71495)},60276:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return u}});let r=n(51481)._(n(80260));function u(e,t){let n={};"function"==typeof e&&(n.loader=e);let u={...n,...t};return(0,r.default)({...u,modules:u.loadableGenerated?.modules})}("function"==typeof t.default||"object"==typeof t.default&&null!==t.default)&&void 0===t.default.__esModule&&(Object.defineProperty(t.default,"__esModule",{value:!0}),Object.assign(t.default,t),e.exports=t.default)},76670:(e,t,n)=>{"use strict";function r({moduleIds:e}){return null}Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"PreloadChunks",{enumerable:!0,get:function(){return r}}),n(18870),n(29411),n(19013),n(19132),n(63632)},80260:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}});let r=n(18870),u=n(45110),l=n(47811);function o(e){return{default:e&&"default"in e?e.default:e}}n(76670);let a={loader:()=>Promise.resolve(o(()=>null)),loading:null,ssr:!0},s=function(e){let t={...a,...e},n=(0,u.lazy)(()=>t.loader().then(o)),s=t.loading;function i(e){let o=s?(0,r.jsx)(s,{isLoading:!0,pastDelay:!0,error:null}):null,a=!t.ssr||!!t.loading,i=a?u.Suspense:u.Fragment,c=t.ssr?(0,r.jsxs)(r.Fragment,{children:[null,(0,r.jsx)(n,{...e})]}):(0,r.jsx)(l.BailoutToCSR,{reason:"next/dynamic",children:(0,r.jsx)(n,{...e})});return(0,r.jsx)(i,{...a?{fallback:o}:{},children:c})}return i.displayName="LoadableComponent",i}},92703:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(18870);let u=(0,n(23711).default)(()=>Promise.all([n.e(4825),n.e(5395),n.e(7882),n.e(8937)]).then(n.bind(n,38937)).then(e=>e.GSDAppShell),{loadableGenerated:{webpack:()=>[38937]},ssr:!1,loading:()=>(0,r.jsx)("div",{className:"flex h-screen items-center justify-center bg-background text-sm text-muted-foreground",children:"Loading workspace…"})});function l(){return(0,r.jsx)(u,{})}}},e=>{e.O(0,[9990,686,7358],()=>e(e.s=13914)),_N_E=e.O()}]);
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[9337],{29454:(e,s,_)=>{Promise.resolve().then(_.t.bind(_,45336,23))}},e=>{e.O(0,[9990,686,7358],()=>e(e.s=29454)),_N_E=e.O()}]);
|
|
File without changes
|
|
File without changes
|