gsd-pi 2.67.0-dev.1cd1e0f → 2.67.0-dev.2367d7e
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 +1 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +155 -70
- package/dist/resources/extensions/gsd/auto/phases.js +17 -0
- package/dist/resources/extensions/gsd/auto/session.js +10 -0
- package/dist/resources/extensions/gsd/auto-direct-dispatch.js +12 -0
- package/dist/resources/extensions/gsd/auto-dispatch.js +1 -1
- package/dist/resources/extensions/gsd/auto-start.js +16 -30
- package/dist/resources/extensions/gsd/auto-worktree.js +62 -15
- package/dist/resources/extensions/gsd/auto.js +121 -59
- package/dist/resources/extensions/gsd/bootstrap/db-tools.js +11 -435
- package/dist/resources/extensions/gsd/bootstrap/dynamic-tools.js +1 -4
- package/dist/resources/extensions/gsd/bootstrap/query-tools.js +7 -64
- package/dist/resources/extensions/gsd/bootstrap/system-context.js +7 -2
- package/dist/resources/extensions/gsd/bootstrap/write-gate.js +88 -8
- package/dist/resources/extensions/gsd/commands/catalog.js +2 -1
- package/dist/resources/extensions/gsd/commands/handlers/core.js +39 -25
- package/dist/resources/extensions/gsd/commands/index.js +8 -1
- package/dist/resources/extensions/gsd/commands-mcp-status.js +43 -7
- package/dist/resources/extensions/gsd/doctor-git-checks.js +4 -4
- package/dist/resources/extensions/gsd/doctor-proactive.js +3 -3
- package/dist/resources/extensions/gsd/doctor.js +8 -4
- package/dist/resources/extensions/gsd/gsd-db.js +11 -0
- package/dist/resources/extensions/gsd/guided-flow.js +56 -31
- package/dist/resources/extensions/gsd/init-wizard.js +37 -0
- package/dist/resources/extensions/gsd/interrupted-session.js +146 -0
- package/dist/resources/extensions/gsd/mcp-project-config.js +83 -0
- package/dist/resources/extensions/gsd/state.js +7 -2
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +508 -0
- package/dist/resources/extensions/gsd/workflow-logger.js +18 -3
- package/dist/resources/extensions/gsd/workflow-mcp.js +261 -0
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
- 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/react-loadable-manifest.json +2 -2
- 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_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 +1 -1
- package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
- 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 +1 -1
- 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/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +2 -2
- 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 +2 -2
- 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 +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/page_client-reference-manifest.js +1 -1
- package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
- package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
- package/dist/web/standalone/.next/server/middleware-react-loadable-manifest.js +1 -1
- 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/2826.821e01b07d92e948.js +9 -0
- package/dist/web/standalone/.next/static/chunks/app/{page-0c485498795110d6.js → page-f1e30ab6bb269149.js} +1 -1
- package/dist/web/standalone/.next/static/chunks/{webpack-b49b09f97429b5d0.js → webpack-6e4d7e9a4f57bed4.js} +1 -1
- package/package.json +4 -2
- package/packages/mcp-server/README.md +38 -0
- package/packages/mcp-server/dist/cli.d.ts +9 -0
- package/packages/mcp-server/dist/cli.d.ts.map +1 -0
- package/packages/mcp-server/dist/cli.js +58 -0
- package/packages/mcp-server/dist/cli.js.map +1 -0
- package/packages/mcp-server/dist/index.d.ts +20 -0
- package/packages/mcp-server/dist/index.d.ts.map +1 -0
- package/packages/mcp-server/dist/index.js +14 -0
- package/packages/mcp-server/dist/index.js.map +1 -0
- package/packages/mcp-server/dist/readers/captures.d.ts +25 -0
- package/packages/mcp-server/dist/readers/captures.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/captures.js +67 -0
- package/packages/mcp-server/dist/readers/captures.js.map +1 -0
- package/packages/mcp-server/dist/readers/doctor-lite.d.ts +20 -0
- package/packages/mcp-server/dist/readers/doctor-lite.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/doctor-lite.js +173 -0
- package/packages/mcp-server/dist/readers/doctor-lite.js.map +1 -0
- package/packages/mcp-server/dist/readers/index.d.ts +14 -0
- package/packages/mcp-server/dist/readers/index.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/index.js +10 -0
- package/packages/mcp-server/dist/readers/index.js.map +1 -0
- package/packages/mcp-server/dist/readers/knowledge.d.ts +18 -0
- package/packages/mcp-server/dist/readers/knowledge.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/knowledge.js +82 -0
- package/packages/mcp-server/dist/readers/knowledge.js.map +1 -0
- package/packages/mcp-server/dist/readers/metrics.d.ts +32 -0
- package/packages/mcp-server/dist/readers/metrics.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/metrics.js +74 -0
- package/packages/mcp-server/dist/readers/metrics.js.map +1 -0
- package/packages/mcp-server/dist/readers/paths.d.ts +42 -0
- package/packages/mcp-server/dist/readers/paths.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/paths.js +199 -0
- package/packages/mcp-server/dist/readers/paths.js.map +1 -0
- package/packages/mcp-server/dist/readers/roadmap.d.ts +26 -0
- package/packages/mcp-server/dist/readers/roadmap.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/roadmap.js +194 -0
- package/packages/mcp-server/dist/readers/roadmap.js.map +1 -0
- package/packages/mcp-server/dist/readers/state.d.ts +43 -0
- package/packages/mcp-server/dist/readers/state.d.ts.map +1 -0
- package/packages/mcp-server/dist/readers/state.js +184 -0
- package/packages/mcp-server/dist/readers/state.js.map +1 -0
- package/packages/mcp-server/dist/server.d.ts +28 -0
- package/packages/mcp-server/dist/server.d.ts.map +1 -0
- package/packages/mcp-server/dist/server.js +319 -0
- package/packages/mcp-server/dist/server.js.map +1 -0
- package/packages/mcp-server/dist/session-manager.d.ts +54 -0
- package/packages/mcp-server/dist/session-manager.d.ts.map +1 -0
- package/packages/mcp-server/dist/session-manager.js +284 -0
- package/packages/mcp-server/dist/session-manager.js.map +1 -0
- package/packages/mcp-server/dist/types.d.ts +61 -0
- package/packages/mcp-server/dist/types.d.ts.map +1 -0
- package/packages/mcp-server/dist/types.js +11 -0
- package/packages/mcp-server/dist/types.js.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts +9 -0
- package/packages/mcp-server/dist/workflow-tools.d.ts.map +1 -0
- package/packages/mcp-server/dist/workflow-tools.js +532 -0
- package/packages/mcp-server/dist/workflow-tools.js.map +1 -0
- package/packages/mcp-server/src/server.ts +6 -2
- package/packages/mcp-server/src/workflow-tools.test.ts +976 -0
- package/packages/mcp-server/src/workflow-tools.ts +997 -0
- package/packages/mcp-server/tsconfig.json +1 -1
- package/packages/pi-agent-core/dist/agent-loop.js +14 -6
- package/packages/pi-agent-core/dist/agent-loop.js.map +1 -1
- package/packages/pi-agent-core/src/agent-loop.test.ts +53 -0
- package/packages/pi-agent-core/src/agent-loop.ts +20 -6
- package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts +43 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.js +208 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.js +227 -0
- package/packages/pi-coding-agent/dist/core/contextual-tips.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/index.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/index.js +1 -0
- package/packages/pi-coding-agent/dist/core/index.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts +2 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.d.ts.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js +28 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/__tests__/tool-execution.test.js.map +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts +1 -0
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js +17 -12
- package/packages/pi-coding-agent/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js +19 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts +4 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js +14 -0
- package/packages/pi-coding-agent/dist/modes/interactive/controllers/input-controller.js.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts +3 -0
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js +15 -12
- package/packages/pi-coding-agent/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/packages/pi-coding-agent/src/core/contextual-tips.test.ts +259 -0
- package/packages/pi-coding-agent/src/core/contextual-tips.ts +232 -0
- package/packages/pi-coding-agent/src/core/index.ts +2 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/__tests__/tool-execution.test.ts +54 -0
- package/packages/pi-coding-agent/src/modes/interactive/components/tool-execution.ts +18 -12
- package/packages/pi-coding-agent/src/modes/interactive/controllers/chat-controller.ts +21 -0
- package/packages/pi-coding-agent/src/modes/interactive/controllers/input-controller.ts +19 -0
- package/packages/pi-coding-agent/src/modes/interactive/interactive-mode.ts +19 -15
- package/packages/rpc-client/dist/index.d.ts +10 -0
- package/packages/rpc-client/dist/index.d.ts.map +1 -0
- package/packages/rpc-client/dist/index.js +9 -0
- package/packages/rpc-client/dist/index.js.map +1 -0
- package/packages/rpc-client/dist/jsonl.d.ts +17 -0
- package/packages/rpc-client/dist/jsonl.d.ts.map +1 -0
- package/packages/rpc-client/dist/jsonl.js +54 -0
- package/packages/rpc-client/dist/jsonl.js.map +1 -0
- package/packages/rpc-client/dist/rpc-client.d.ts +259 -0
- package/packages/rpc-client/dist/rpc-client.d.ts.map +1 -0
- package/packages/rpc-client/dist/rpc-client.js +541 -0
- package/packages/rpc-client/dist/rpc-client.js.map +1 -0
- package/packages/rpc-client/dist/rpc-client.test.d.ts +2 -0
- package/packages/rpc-client/dist/rpc-client.test.d.ts.map +1 -0
- package/packages/rpc-client/dist/rpc-client.test.js +477 -0
- package/packages/rpc-client/dist/rpc-client.test.js.map +1 -0
- package/packages/rpc-client/dist/rpc-types.d.ts +566 -0
- package/packages/rpc-client/dist/rpc-types.d.ts.map +1 -0
- package/packages/rpc-client/dist/rpc-types.js +12 -0
- package/packages/rpc-client/dist/rpc-types.js.map +1 -0
- package/scripts/ensure-workspace-builds.cjs +2 -0
- package/scripts/link-workspace-packages.cjs +21 -14
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +193 -93
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +173 -79
- package/src/resources/extensions/gsd/auto/phases.ts +25 -0
- package/src/resources/extensions/gsd/auto/session.ts +10 -0
- package/src/resources/extensions/gsd/auto-direct-dispatch.ts +20 -0
- package/src/resources/extensions/gsd/auto-dispatch.ts +1 -1
- package/src/resources/extensions/gsd/auto-start.ts +23 -55
- package/src/resources/extensions/gsd/auto-worktree.ts +59 -15
- package/src/resources/extensions/gsd/auto.ts +133 -64
- package/src/resources/extensions/gsd/bootstrap/db-tools.ts +22 -435
- package/src/resources/extensions/gsd/bootstrap/dynamic-tools.ts +1 -5
- package/src/resources/extensions/gsd/bootstrap/query-tools.ts +7 -72
- package/src/resources/extensions/gsd/bootstrap/system-context.ts +8 -2
- package/src/resources/extensions/gsd/bootstrap/write-gate.ts +122 -6
- package/src/resources/extensions/gsd/commands/catalog.ts +2 -1
- package/src/resources/extensions/gsd/commands/handlers/core.ts +53 -26
- package/src/resources/extensions/gsd/commands/index.ts +7 -1
- package/src/resources/extensions/gsd/commands-mcp-status.ts +53 -7
- package/src/resources/extensions/gsd/doctor-git-checks.ts +4 -4
- package/src/resources/extensions/gsd/doctor-proactive.ts +3 -3
- package/src/resources/extensions/gsd/doctor.ts +9 -5
- package/src/resources/extensions/gsd/gsd-db.ts +12 -0
- package/src/resources/extensions/gsd/guided-flow.ts +66 -36
- package/src/resources/extensions/gsd/init-wizard.ts +40 -0
- package/src/resources/extensions/gsd/interrupted-session.ts +224 -0
- package/src/resources/extensions/gsd/mcp-project-config.ts +128 -0
- package/src/resources/extensions/gsd/state.ts +7 -1
- package/src/resources/extensions/gsd/tests/auto-project-root-env.test.ts +29 -0
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +668 -2
- package/src/resources/extensions/gsd/tests/cold-resume-db-reopen.test.ts +14 -4
- package/src/resources/extensions/gsd/tests/copy-planning-artifacts-samepath.test.ts +21 -0
- package/src/resources/extensions/gsd/tests/core-overlay-fallback.test.ts +101 -0
- package/src/resources/extensions/gsd/tests/crash-recovery.test.ts +380 -2
- package/src/resources/extensions/gsd/tests/ensure-db-open.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/forensics-context-persist.test.ts +30 -0
- package/src/resources/extensions/gsd/tests/gsd-db.test.ts +12 -0
- package/src/resources/extensions/gsd/tests/guided-flow-session-isolation.test.ts +2 -2
- package/src/resources/extensions/gsd/tests/integration/doctor-fixlevel.test.ts +52 -1
- package/src/resources/extensions/gsd/tests/integration/doctor-git.test.ts +2 -9
- package/src/resources/extensions/gsd/tests/integration/doctor-proactive.test.ts +0 -33
- package/src/resources/extensions/gsd/tests/integration/merge-cwd-restore.test.ts +169 -0
- package/src/resources/extensions/gsd/tests/interrupted-session-auto.test.ts +146 -0
- package/src/resources/extensions/gsd/tests/interrupted-session-ui.test.ts +136 -0
- package/src/resources/extensions/gsd/tests/mcp-project-config.test.ts +85 -0
- package/src/resources/extensions/gsd/tests/mcp-status.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/verification-operational-gate.test.ts +11 -0
- package/src/resources/extensions/gsd/tests/workflow-logger.test.ts +16 -0
- package/src/resources/extensions/gsd/tests/workflow-mcp.test.ts +500 -0
- package/src/resources/extensions/gsd/tests/workflow-tool-executors.test.ts +625 -0
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +629 -0
- package/src/resources/extensions/gsd/workflow-logger.ts +19 -3
- package/src/resources/extensions/gsd/workflow-mcp.ts +320 -0
- package/dist/web/standalone/.next/static/chunks/6502.b804e48b7919f55e.js +0 -9
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts +0 -13
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.d.ts.map +0 -1
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js +0 -27
- package/packages/pi-coding-agent/dist/modes/interactive/provider-auth-setup.js.map +0 -1
- package/packages/pi-coding-agent/src/modes/interactive/provider-auth-setup.ts +0 -40
- /package/dist/web/standalone/.next/static/{PHqEommYRR8CRn3i84CGM → WMDT_0C0XDkBKtsAI_AX4}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{PHqEommYRR8CRn3i84CGM → WMDT_0C0XDkBKtsAI_AX4}/_ssgManifest.js +0 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{2600:(e,t,n)=>{Promise.resolve().then(n.bind(n,66919))},5214:(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(17828)},17828:(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(64054).createAsyncLocalStorage)()},21957:(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(95155),n(47650),n(5214),n(2451),n(53887)},37206:(e,t,n)=>{"use strict";n.d(t,{default:()=>u.a});var r=n(75707),u=n.n(r)},41112:(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(1980)},64054:(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)}}},66919:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(95155);let u=(0,n(37206).default)(()=>Promise.all([n.e(1838),n.e(6079),n.e(4986),n.e(2008),n.e(
|
|
1
|
+
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[8974],{2600:(e,t,n)=>{Promise.resolve().then(n.bind(n,66919))},5214:(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(17828)},17828:(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(64054).createAsyncLocalStorage)()},21957:(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(95155),n(47650),n(5214),n(2451),n(53887)},37206:(e,t,n)=>{"use strict";n.d(t,{default:()=>u.a});var r=n(75707),u=n.n(r)},41112:(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(1980)},64054:(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)}}},66919:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>l});var r=n(95155);let u=(0,n(37206).default)(()=>Promise.all([n.e(1838),n.e(6079),n.e(4986),n.e(2008),n.e(2826)]).then(n.bind(n,62826)).then(e=>e.GSDAppShell),{loadableGenerated:{webpack:()=>[62826]},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,{})}},68635:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return s}});let r=n(95155),u=n(12115),l=n(41112);function o(e){return{default:e&&"default"in e?e.default:e}}n(21957);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}},75707:(e,t,n)=>{"use strict";Object.defineProperty(t,"__esModule",{value:!0}),Object.defineProperty(t,"default",{enumerable:!0,get:function(){return u}});let r=n(73623)._(n(68635));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)}},e=>{e.O(0,[8441,3794,7358],()=>e(e.s=2600)),_N_E=e.O()}]);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
(()=>{"use strict";var e,a,c,f,d,b,t,r,o,n={},i={};function l(e){var a=i[e];if(void 0!==a)return a.exports;var c=i[e]={exports:{}},f=!0;try{n[e].call(c.exports,c,c.exports,l),f=!1}finally{f&&delete i[e]}return c.exports}l.m=n,e=[],l.O=(a,c,f,d)=>{if(c){d=d||0;for(var b=e.length;b>0&&e[b-1][2]>d;b--)e[b]=e[b-1];e[b]=[c,f,d];return}for(var t=1/0,b=0;b<e.length;b++){for(var[c,f,d]=e[b],r=!0,o=0;o<c.length;o++)(!1&d||t>=d)&&Object.keys(l.O).every(e=>l.O[e](c[o]))?c.splice(o--,1):(r=!1,d<t&&(t=d));if(r){e.splice(b--,1);var n=f();void 0!==n&&(a=n)}}return a},l.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return l.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,f){if(1&f&&(e=this(e)),8&f||"object"==typeof e&&e&&(4&f&&e.__esModule||16&f&&"function"==typeof e.then))return e;var d=Object.create(null);l.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,l.d(d,b),d},l.d=(e,a)=>{for(var c in a)l.o(a,c)&&!l.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((a,c)=>(l.f[c](e,a),a),[])),l.u=e=>4986===e?"static/chunks/4986-c2fc8845ce785303.js":"static/chunks/"+(({535:"4ca0cff5",1290:"cee15710",1630:"53c1bd3f",2577:"d1c28714",3879:"cfdf2ac7",3888:"e868780c",4763:"4402d2ac",4814:"799ebd4e",6079:"363642f4",6666:"570e4624",6814:"7d29de82",7442:"92e53eb0",8835:"ce16f5a9",9312:"1cd6e1d3"})[e]||e)+"."+({10:"6cf001c181ce1098",34:"ce581867cf95e24b",36:"b4a553bf2106f6d3",194:"76dbdc07cdc2311d",214:"f6bba63dfa159e01",252:"a9e22657cbf67b42",327:"8ecab0b86d52b597",376:"9e742ff6919b2b54",392:"3cad93691f1b7360",400:"59979e0d3ae126e4",425:"9a3434a28926566a",535:"07efe2bc8f09d72e",541:"cfa15b606745131a",579:"33fc87fb95163c6a",583:"b3efc73cb21097e2",624:"2dd909fbfce98c5e",640:"5bf1e25d0bddf875",698:"e0dda03fd303b96b",794:"06b1ae4fc9cc10a9",816:"f909c891b91aa79f",830:"e49b226c07876df4",840:"a9c535f8868cc4bd",862:"fe3b86ecfb9c0716",893:"c469257bbbbca4f5",966:"57e4cd93c2368d34",968:"237f19aca13543fe",1078:"02294b2934d5bf21",1142:"8248bfb76c695146",1161:"06b33878b495da50",1184:"e80a999422621ed9",1188:"1d4ce94ddc297119",1198:"2a5c215f01a8b74d",1215:"88ed89521e915107",1219:"e27b0bd10b029e40",1247:"64e212daa5bb3925",1248:"36af3903f037c1f5",1274:"ce6906b1fe2e04b8",1280:"1651bb5167170457",1290:"869cef5f741d40c2",1335:"716cc5924662708e",1365:"d7391145ca7f8791",1379:"03e1e0f31bdaa2cc",1410:"77acea37535dbbef",1413:"117c5958c59cc695",1453:"3c24c777a3deca2d",1456:"217c3832b3e76b7f",1501:"549af2c91a889a08",1534:"918a25b2e3daab22",1556:"96abc9ff91b0c383",1583:"03a06dbdde85ac56",1595:"ee61519fde230f60",1630:"2911e2bac119d910",1642:"8c00543baa1aef54",1656:"a9efc78185a5a85f",1664:"6d5b5e3112b66906",1898:"e07b2b1c5e789b06",1932:"b0aea9b52cabe5e8",1977:"a06c8e8d2198f765",2008:"71ee9230ad78df21",2013:"598558c40e51e107",2031:"3877441c49bff5cd",2041:"00f4fa0ab26c6ba5",2062:"4a0ab3400fea0e34",2107:"c627112b02b9e1c8",2130:"441ae0f68863efeb",2160:"e38d781fd5c4cde0",2179:"1bf5fe315e6e132c",2215:"9d2d6fbe90ffcc80",2278:"0b14de1cb2041bfd",2349:"ca15d465c4260b4b",2374:"7560cc5c4b8ed6b0",2397:"0e4dce0a557ac7cf",2403:"3dda71b6482dce3b",2485:"3188870375e9fbee",2489:"fcc70bd67329a70e",2501:"4e65b56602faa956",2503:"bb9d3528c3c7ccae",2504:"159b28843e61aae9",2577:"f52cffdd449a2d14",2614:"8349e4b407470a30",2710:"fe0656d4ebae4d30",2728:"5fed9ac13dfcd1d1",2735:"5a3e65a580bd5af9",2747:"1d85d388314f2904",2765:"2c6d9772af50feed",2783:"e8bbf2c794ef9750",2812:"dcd8179a6b1d76c9",2839:"c9a657d5b4031a19",2895:"0339e755e79ee794",2937:"7e724516d5e6ce42",2954:"7d8daeae6410d4a4",2957:"2dd93db1a16e96b0",2964:"1a0e15f7327680a2",3072:"b6da96c10080c967",3074:"911584369786c26c",3077:"bf82c0c332cc9fec",3082:"159e4ab8f0572597",3095:"8cd478c42cee505a",3111:"1cf85db2faeb20cc",3175:"538ce7aec634bddb",3186:"3665756f8aae3eb7",3194:"5a331fb5e3dc34e9",3229:"5e91f7d0b135266b",3274:"858f7f9216c8b074",3286:"196c508356bb0b66",3288:"f23c8a5183e6b910",3290:"b5ba2646ad49c9fd",3304:"16305e84f4ff6598",3313:"471138e5504646a9",3324:"85e21e3313d0901c",3392:"460f5a753531f501",3419:"78b520dab7e2f96d",3437:"0ad1ecc8c5b8a679",3476:"246c30b47bded3b7",3483:"fc2a0b1185dbaa5d",3492:"ca55498822ad7796",3526:"24826331ab265b39",3606:"e5c833cdda239583",3633:"2526b2d018636ff0",3782:"8d7b66d0e37dbe76",3787:"78ebe68a043f50ce",3860:"be5b243bf7d6618c",3873:"72a9a21509f713f7",3879:"f50abf4e93e943ea",3888:"abc48b70a10fc2d6",3942:"085da8d58242eeab",3979:"cea8623f6e9f83ea",4053:"90d71fcbe4ffd852",4080:"08a21dae9e93c547",4163:"c6ebefdd9aa5c358",4174:"b6ff75dd91a2a32e",4223:"c10556cd92fc8018",4242:"3a66c58375424a5b",4275:"8f2e531757c2a813",4295:"6c0f4838b0c9c69d",4309:"a887a10e84c44f9e",4350:"b9d80827e8eee01a",4357:"ac4f251cdac34fbe",4358:"f89b14cf7a988731",4370:"ac13b62c811f7ede",4417:"0b5ee948c3518db3",4447:"5bad7871be61ca73",4474:"053807fa34066566",4539:"559c223da16b0282",4540:"03df20c499bca840",4553:"ce3eab65a260353e",4567:"7dc81a6e1c7df565",4583:"2a5df6eb3a6ea30b",4593:"676ac488744e1af5",4608:"1ff246d6b4c771f8",4634:"0332a56fdb8e26c0",4650:"61aec912b756287b",4659:"0b14de1cb2041bfd",4678:"867dfae26694be02",4763:"d0d1b1777a45e0b2",4801:"17596dbc1818c262",4814:"ccb85c56e9216a38",4823:"907850963b2bcb70",4829:"402ec60139d36417",4846:"c563765de65a34c7",4900:"b723a916eafdf743",4903:"004f583a12223dac",4963:"0f6678151a159143",4969:"1cb10af9489ea295",4976:"8870319ffbd1c31f",5005:"73745d7fcae6989e",5025:"b597364f0cf8b85a",5061:"025d30c3123eeaf6",5136:"ac897c2a56ee392f",5183:"2e5c895a2be76262",5269:"2e771096652dc113",5320:"00f00028b9163a43",5326:"adc4bf49a22f4e67",5331:"4d5d42e5253dbee2",5347:"3192e0021174aaa8",5375:"ebc026e6140b52f1",5424:"4d62f7ee887cd8b9",5482:"0907421e6bf5eeec",5491:"5cc285c4b84dac30",5498:"117ef4b6035a90c5",5518:"6c3dc9afe81a566b",5520:"eab85d7487e77510",5553:"75df19e3cc1246d6",5575:"3d90c643343a1329",5645:"0b86853ae26d9ee3",5670:"2a1b27a6fdb7aa6b",5690:"d30877807cf5c7eb",5712:"574fca2d5f06483a",5728:"8ef773d61765855e",5750:"aa57d25b74640d23",5755:"00015c284ed6fb39",5920:"9db223329ee9e11a",5922:"ce56021f8cc6ebbc",5937:"0827b5b3eb831ff0",5968:"63d5869783fad06f",5997:"226c07d9e6c496e0",6046:"00d36aea7fd5b147",6079:"cf8b455e0d94b478",6089:"2dd351186ec85cc3",6099:"43e6595fcf24fc33",6110:"5ce3f75fced27aaf",6144:"f967a8228bcdf663",6155:"19719cff570d6559",6166:"ecd82a9dcb484b97",6290:"e14cf4fc52dd4539",6293:"5914fa73a9f7e777",6311:"5b9c1f74df9a8f67",6331:"758f2f66b92cada9",6339:"bc9301cc22898be0",6360:"ff0a9063773daeeb",6402:"a0070d7688ed986b",6412:"089ee787a294d10b",6455:"12b78a2660d609eb",6502:"b804e48b7919f55e",6563:"5d618b608750f4dc",6572:"ca2463823b9b01a0",6580:"75d53830b434451f",6588:"0fbca957af7d9e6a",6647:"584c5d5cd8dfdb5a",6666:"a82467c542429379",6686:"796c782c33ab8ca9",6701:"bff0efb979f71a17",6704:"f280f0ad0f5d8644",6729:"77a5381ac8f5c9ae",6741:"06fdaf122961074e",6814:"30ff86a90cbfd921",6846:"91283f709c40802c",6859:"bacad166ee995fe0",6887:"6c81234d73740fb9",6927:"aa3914b5fb0d14d4",6931:"3c90e9fe0f7f1e66",6938:"0ccf683bd8aa8410",6948:"2719ed8731963209",6959:"5a803faf27f88e9f",7021:"b71240b1d5f6fbe4",7040:"0b14de1cb2041bfd",7041:"174bf29bd837f06d",7082:"fc816f91214026d7",7113:"39704408fef3d26e",7130:"8d24694735826c22",7142:"dbd2cf8141eece5e",7152:"c7b7f1f5e9622f21",7227:"a6b2f01487bb3d9d",7258:"6cbe24c3bcb63d1d",7425:"8b47c8e398a12dd8",7442:"097194be4a0e7d55",7455:"71d54397710b923c",7465:"867e8ff655666413",7524:"9528295a19a5837a",7525:"f433aaf1fe40c90a",7557:"bdc743175125b3d8",7610:"b1439345dbcf285d",7625:"ab66bd50d2fb61a4",7635:"166d83de1d29e758",7636:"bf91320a9ff695af",7785:"1402a4110c300764",7799:"40b047a634f96a24",7819:"3c56f48c0dc5ad5d",7844:"2bb29faa262f313e",7846:"c9705c044ab8f87a",7884:"390ae2efbbf230c4",7889:"af3e581842f34c28",7921:"c361f794cc208e06",7977:"80e4daa080a79c39",8113:"907baefc7227cfb8",8132:"74491162f08af899",8192:"5918d83ac6a0e2dc",8243:"1450514f8390977e",8257:"dd8f651f1a43fee2",8288:"9bd1d26060cb00a1",8318:"81c7ac586fcbb728",8406:"955ccfbb4b70b8c3",8430:"b1f802dcffa41626",8432:"bd66ac287c569996",8457:"b61d96d8d30215fc",8496:"046efd6301dd804f",8545:"be0c9eea6aae5971",8555:"ab3ee6358f1d64da",8656:"2ceb4e5ff5df2fca",8670:"90ede75068758e82",8704:"a1003918da6654da",8773:"614f1f4f0f845c5e",8835:"5c7821b201f35593",8848:"7c6e47cca9f0059a",8921:"fb24a4d4d4d3265b",8947:"31d3d834d8281fd9",8977:"01b9c429327004e9",9005:"33cf91e617920d4f",9006:"11537833945ec4b8",9015:"c4e40321a6503a1b",9136:"191be42a2fee842c",9178:"48a90097ee3f0b0c",9186:"3af6fcd13ab752fa",9189:"3e9d29bf275ec462",9220:"bc767ebb5adb9f49",9224:"401f9320ee58570b",9240:"d38ddbe94e0bf128",9267:"fbfd65ea31e7448c",9294:"a20485f3282321b3",9302:"726b065f2df0323a",9312:"8121a74b2042bff3",9377:"f9db706e76f04afe",9382:"bc0e11ecc88dd62c",9421:"a5c1dbcfbfdd8f52",9448:"2668b3cd408e86de",9466:"c9d8f45d14235087",9521:"e1240eb862eb32dc",9547:"7729788fff21926f",9565:"8de0671f99d12abe",9569:"2f36b2b1c2f838d7",9605:"dfac539f89cea7a2",9615:"3b62c13af671f714",9648:"8235b6fea7087b3a",9666:"a515fa6d89a71f1c",9680:"d5ceac8967e0b6a8",9690:"7773c72f0eff6dec",9841:"422321143547591a",9842:"3b71b65b30d8ef2a",9996:"18b7bca2f0ab222e"})[e]+".js",l.miniCssF=e=>"static/css/659eccb5db697b76.css",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},l.l=(e,a,c,d)=>{if(f[e])return void f[e].push(a);if(void 0!==c)for(var b,t,r=document.getElementsByTagName("script"),o=0;o<r.length;o++){var n=r[o];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+c){b=n;break}}b||(t=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,l.nc&&b.setAttribute("nonce",l.nc),b.setAttribute("data-webpack","_N_E:"+c),b.src=l.tu(e)),f[e]=[a];var i=(a,c)=>{b.onerror=b.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach(e=>e(c)),a)return a(c)},s=setTimeout(i.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=i.bind(null,b.onerror),b.onload=i.bind(null,b.onload),t&&document.head.appendChild(b)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=()=>(void 0===d&&(d={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(d=trustedTypes.createPolicy("nextjs#bundler",d))),d),l.tu=e=>l.tt().createScriptURL(e),l.p="/_next/",b={8068:0},l.f.miniCss=(e,a)=>{if(b[e])a.push(b[e]);else 0!==b[e]&&({1838:1})[e]&&a.push(b[e]=new Promise((a,c)=>{var f=l.miniCssF(e),d=l.p+f;if(((e,a)=>{for(var c=document.getElementsByTagName("link"),f=0;f<c.length;f++){var d=c[f],b=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(b===e||b===a))return d}for(var t=document.getElementsByTagName("style"),f=0;f<t.length;f++){var d=t[f],b=d.getAttribute("data-href");if(b===e||b===a)return d}})(f,d))return a();((e,a,c,f)=>{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=b=>{if(d.onerror=d.onload=null,"load"===b.type)c();else{var t=b&&("load"===b.type?"missing":b.type),r=b&&b.target&&b.target.href||a,o=Error("Loading CSS chunk "+e+" failed.\n("+r+")");o.code="CSS_CHUNK_LOAD_FAILED",o.type=t,o.request=r,d.parentNode.removeChild(d),f(o)}},d.href=a;if("function"==typeof _N_E_STYLE_LOAD){var b=d.href,t=d.onload,r=d.onerror;_N_E_STYLE_LOAD(0===b.indexOf(window.location.origin)?new URL(b).pathname:b).then(function(){t&&t.call(d,{type:"load"})},function(){r&&r.call(d,{})})}else document.head.appendChild(d)})(e,d,a,c)}).then(()=>{b[e]=0},a=>{throw delete b[e],a}))},t={8068:0,2557:0,7513:0},l.f.j=(e,a)=>{var c=l.o(t,e)?t[e]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1838|2557|7513|8068)$/.test(e))t[e]=0;else{var f=new Promise((a,f)=>c=t[e]=[a,f]);a.push(c[2]=f);var d=l.p+l.u(e),b=Error();l.l(d,a=>{if(l.o(t,e)&&(0!==(c=t[e])&&(t[e]=void 0),c)){var f=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;b.message="Loading chunk "+e+" failed.\n("+f+": "+d+")",b.name="ChunkLoadError",b.type=f,b.request=d,c[1](b)}},"chunk-"+e,e)}},l.O.j=e=>0===t[e],r=(e,a)=>{var c,f,[d,b,r]=a,o=0;if(d.some(e=>0!==t[e])){for(c in b)l.o(b,c)&&(l.m[c]=b[c]);if(r)var n=r(l)}for(e&&e(a);o<d.length;o++)f=d[o],l.o(t,f)&&t[f]&&t[f][0](),t[f]=0;return l.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o)),l.nc=void 0})();
|
|
1
|
+
(()=>{"use strict";var e,a,c,f,d,b,t,r,o,n={},i={};function l(e){var a=i[e];if(void 0!==a)return a.exports;var c=i[e]={exports:{}},f=!0;try{n[e].call(c.exports,c,c.exports,l),f=!1}finally{f&&delete i[e]}return c.exports}l.m=n,e=[],l.O=(a,c,f,d)=>{if(c){d=d||0;for(var b=e.length;b>0&&e[b-1][2]>d;b--)e[b]=e[b-1];e[b]=[c,f,d];return}for(var t=1/0,b=0;b<e.length;b++){for(var[c,f,d]=e[b],r=!0,o=0;o<c.length;o++)(!1&d||t>=d)&&Object.keys(l.O).every(e=>l.O[e](c[o]))?c.splice(o--,1):(r=!1,d<t&&(t=d));if(r){e.splice(b--,1);var n=f();void 0!==n&&(a=n)}}return a},l.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return l.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,l.t=function(e,f){if(1&f&&(e=this(e)),8&f||"object"==typeof e&&e&&(4&f&&e.__esModule||16&f&&"function"==typeof e.then))return e;var d=Object.create(null);l.r(d);var b={};a=a||[null,c({}),c([]),c(c)];for(var t=2&f&&e;"object"==typeof t&&!~a.indexOf(t);t=c(t))Object.getOwnPropertyNames(t).forEach(a=>b[a]=()=>e[a]);return b.default=()=>e,l.d(d,b),d},l.d=(e,a)=>{for(var c in a)l.o(a,c)&&!l.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},l.f={},l.e=e=>Promise.all(Object.keys(l.f).reduce((a,c)=>(l.f[c](e,a),a),[])),l.u=e=>4986===e?"static/chunks/4986-c2fc8845ce785303.js":"static/chunks/"+(({535:"4ca0cff5",1290:"cee15710",1630:"53c1bd3f",2577:"d1c28714",3879:"cfdf2ac7",3888:"e868780c",4763:"4402d2ac",4814:"799ebd4e",6079:"363642f4",6666:"570e4624",6814:"7d29de82",7442:"92e53eb0",8835:"ce16f5a9",9312:"1cd6e1d3"})[e]||e)+"."+({10:"6cf001c181ce1098",34:"ce581867cf95e24b",36:"b4a553bf2106f6d3",194:"76dbdc07cdc2311d",214:"f6bba63dfa159e01",252:"a9e22657cbf67b42",327:"8ecab0b86d52b597",376:"9e742ff6919b2b54",392:"3cad93691f1b7360",400:"59979e0d3ae126e4",425:"9a3434a28926566a",535:"07efe2bc8f09d72e",541:"cfa15b606745131a",579:"33fc87fb95163c6a",583:"b3efc73cb21097e2",624:"2dd909fbfce98c5e",640:"5bf1e25d0bddf875",698:"e0dda03fd303b96b",794:"06b1ae4fc9cc10a9",816:"f909c891b91aa79f",830:"e49b226c07876df4",840:"a9c535f8868cc4bd",862:"fe3b86ecfb9c0716",893:"c469257bbbbca4f5",966:"57e4cd93c2368d34",968:"237f19aca13543fe",1078:"02294b2934d5bf21",1142:"8248bfb76c695146",1161:"06b33878b495da50",1184:"e80a999422621ed9",1188:"1d4ce94ddc297119",1198:"2a5c215f01a8b74d",1215:"88ed89521e915107",1219:"e27b0bd10b029e40",1247:"64e212daa5bb3925",1248:"36af3903f037c1f5",1274:"ce6906b1fe2e04b8",1280:"1651bb5167170457",1290:"869cef5f741d40c2",1335:"716cc5924662708e",1365:"d7391145ca7f8791",1379:"03e1e0f31bdaa2cc",1410:"77acea37535dbbef",1413:"117c5958c59cc695",1453:"3c24c777a3deca2d",1456:"217c3832b3e76b7f",1501:"549af2c91a889a08",1534:"918a25b2e3daab22",1556:"96abc9ff91b0c383",1583:"03a06dbdde85ac56",1595:"ee61519fde230f60",1630:"2911e2bac119d910",1642:"8c00543baa1aef54",1656:"a9efc78185a5a85f",1664:"6d5b5e3112b66906",1898:"e07b2b1c5e789b06",1932:"b0aea9b52cabe5e8",1977:"a06c8e8d2198f765",2008:"71ee9230ad78df21",2013:"598558c40e51e107",2031:"3877441c49bff5cd",2041:"00f4fa0ab26c6ba5",2062:"4a0ab3400fea0e34",2107:"c627112b02b9e1c8",2130:"441ae0f68863efeb",2160:"e38d781fd5c4cde0",2179:"1bf5fe315e6e132c",2215:"9d2d6fbe90ffcc80",2278:"0b14de1cb2041bfd",2349:"ca15d465c4260b4b",2374:"7560cc5c4b8ed6b0",2397:"0e4dce0a557ac7cf",2403:"3dda71b6482dce3b",2485:"3188870375e9fbee",2489:"fcc70bd67329a70e",2501:"4e65b56602faa956",2503:"bb9d3528c3c7ccae",2504:"159b28843e61aae9",2577:"f52cffdd449a2d14",2614:"8349e4b407470a30",2710:"fe0656d4ebae4d30",2728:"5fed9ac13dfcd1d1",2735:"5a3e65a580bd5af9",2747:"1d85d388314f2904",2765:"2c6d9772af50feed",2783:"e8bbf2c794ef9750",2812:"dcd8179a6b1d76c9",2826:"821e01b07d92e948",2839:"c9a657d5b4031a19",2895:"0339e755e79ee794",2937:"7e724516d5e6ce42",2954:"7d8daeae6410d4a4",2957:"2dd93db1a16e96b0",2964:"1a0e15f7327680a2",3072:"b6da96c10080c967",3074:"911584369786c26c",3077:"bf82c0c332cc9fec",3082:"159e4ab8f0572597",3095:"8cd478c42cee505a",3111:"1cf85db2faeb20cc",3175:"538ce7aec634bddb",3186:"3665756f8aae3eb7",3194:"5a331fb5e3dc34e9",3229:"5e91f7d0b135266b",3274:"858f7f9216c8b074",3286:"196c508356bb0b66",3288:"f23c8a5183e6b910",3290:"b5ba2646ad49c9fd",3304:"16305e84f4ff6598",3313:"471138e5504646a9",3324:"85e21e3313d0901c",3392:"460f5a753531f501",3419:"78b520dab7e2f96d",3437:"0ad1ecc8c5b8a679",3476:"246c30b47bded3b7",3483:"fc2a0b1185dbaa5d",3492:"ca55498822ad7796",3526:"24826331ab265b39",3606:"e5c833cdda239583",3633:"2526b2d018636ff0",3782:"8d7b66d0e37dbe76",3787:"78ebe68a043f50ce",3860:"be5b243bf7d6618c",3873:"72a9a21509f713f7",3879:"f50abf4e93e943ea",3888:"abc48b70a10fc2d6",3942:"085da8d58242eeab",3979:"cea8623f6e9f83ea",4053:"90d71fcbe4ffd852",4080:"08a21dae9e93c547",4163:"c6ebefdd9aa5c358",4174:"b6ff75dd91a2a32e",4223:"c10556cd92fc8018",4242:"3a66c58375424a5b",4275:"8f2e531757c2a813",4295:"6c0f4838b0c9c69d",4309:"a887a10e84c44f9e",4350:"b9d80827e8eee01a",4357:"ac4f251cdac34fbe",4358:"f89b14cf7a988731",4370:"ac13b62c811f7ede",4417:"0b5ee948c3518db3",4447:"5bad7871be61ca73",4474:"053807fa34066566",4539:"559c223da16b0282",4540:"03df20c499bca840",4553:"ce3eab65a260353e",4567:"7dc81a6e1c7df565",4583:"2a5df6eb3a6ea30b",4593:"676ac488744e1af5",4608:"1ff246d6b4c771f8",4634:"0332a56fdb8e26c0",4650:"61aec912b756287b",4659:"0b14de1cb2041bfd",4678:"867dfae26694be02",4763:"d0d1b1777a45e0b2",4801:"17596dbc1818c262",4814:"ccb85c56e9216a38",4823:"907850963b2bcb70",4829:"402ec60139d36417",4846:"c563765de65a34c7",4900:"b723a916eafdf743",4903:"004f583a12223dac",4963:"0f6678151a159143",4969:"1cb10af9489ea295",4976:"8870319ffbd1c31f",5005:"73745d7fcae6989e",5025:"b597364f0cf8b85a",5061:"025d30c3123eeaf6",5136:"ac897c2a56ee392f",5183:"2e5c895a2be76262",5269:"2e771096652dc113",5320:"00f00028b9163a43",5326:"adc4bf49a22f4e67",5331:"4d5d42e5253dbee2",5347:"3192e0021174aaa8",5375:"ebc026e6140b52f1",5424:"4d62f7ee887cd8b9",5482:"0907421e6bf5eeec",5491:"5cc285c4b84dac30",5498:"117ef4b6035a90c5",5518:"6c3dc9afe81a566b",5520:"eab85d7487e77510",5553:"75df19e3cc1246d6",5575:"3d90c643343a1329",5645:"0b86853ae26d9ee3",5670:"2a1b27a6fdb7aa6b",5690:"d30877807cf5c7eb",5712:"574fca2d5f06483a",5728:"8ef773d61765855e",5750:"aa57d25b74640d23",5755:"00015c284ed6fb39",5920:"9db223329ee9e11a",5922:"ce56021f8cc6ebbc",5937:"0827b5b3eb831ff0",5968:"63d5869783fad06f",5997:"226c07d9e6c496e0",6046:"00d36aea7fd5b147",6079:"cf8b455e0d94b478",6089:"2dd351186ec85cc3",6099:"43e6595fcf24fc33",6110:"5ce3f75fced27aaf",6144:"f967a8228bcdf663",6155:"19719cff570d6559",6166:"ecd82a9dcb484b97",6290:"e14cf4fc52dd4539",6293:"5914fa73a9f7e777",6311:"5b9c1f74df9a8f67",6331:"758f2f66b92cada9",6339:"bc9301cc22898be0",6360:"ff0a9063773daeeb",6402:"a0070d7688ed986b",6412:"089ee787a294d10b",6455:"12b78a2660d609eb",6563:"5d618b608750f4dc",6572:"ca2463823b9b01a0",6580:"75d53830b434451f",6588:"0fbca957af7d9e6a",6647:"584c5d5cd8dfdb5a",6666:"a82467c542429379",6686:"796c782c33ab8ca9",6701:"bff0efb979f71a17",6704:"f280f0ad0f5d8644",6729:"77a5381ac8f5c9ae",6741:"06fdaf122961074e",6814:"30ff86a90cbfd921",6846:"91283f709c40802c",6859:"bacad166ee995fe0",6887:"6c81234d73740fb9",6927:"aa3914b5fb0d14d4",6931:"3c90e9fe0f7f1e66",6938:"0ccf683bd8aa8410",6948:"2719ed8731963209",6959:"5a803faf27f88e9f",7021:"b71240b1d5f6fbe4",7040:"0b14de1cb2041bfd",7041:"174bf29bd837f06d",7082:"fc816f91214026d7",7113:"39704408fef3d26e",7130:"8d24694735826c22",7142:"dbd2cf8141eece5e",7152:"c7b7f1f5e9622f21",7227:"a6b2f01487bb3d9d",7258:"6cbe24c3bcb63d1d",7425:"8b47c8e398a12dd8",7442:"097194be4a0e7d55",7455:"71d54397710b923c",7465:"867e8ff655666413",7524:"9528295a19a5837a",7525:"f433aaf1fe40c90a",7557:"bdc743175125b3d8",7610:"b1439345dbcf285d",7625:"ab66bd50d2fb61a4",7635:"166d83de1d29e758",7636:"bf91320a9ff695af",7785:"1402a4110c300764",7799:"40b047a634f96a24",7819:"3c56f48c0dc5ad5d",7844:"2bb29faa262f313e",7846:"c9705c044ab8f87a",7884:"390ae2efbbf230c4",7889:"af3e581842f34c28",7921:"c361f794cc208e06",7977:"80e4daa080a79c39",8113:"907baefc7227cfb8",8132:"74491162f08af899",8192:"5918d83ac6a0e2dc",8243:"1450514f8390977e",8257:"dd8f651f1a43fee2",8288:"9bd1d26060cb00a1",8318:"81c7ac586fcbb728",8406:"955ccfbb4b70b8c3",8430:"b1f802dcffa41626",8432:"bd66ac287c569996",8457:"b61d96d8d30215fc",8496:"046efd6301dd804f",8545:"be0c9eea6aae5971",8555:"ab3ee6358f1d64da",8656:"2ceb4e5ff5df2fca",8670:"90ede75068758e82",8704:"a1003918da6654da",8773:"614f1f4f0f845c5e",8835:"5c7821b201f35593",8848:"7c6e47cca9f0059a",8921:"fb24a4d4d4d3265b",8947:"31d3d834d8281fd9",8977:"01b9c429327004e9",9005:"33cf91e617920d4f",9006:"11537833945ec4b8",9015:"c4e40321a6503a1b",9136:"191be42a2fee842c",9178:"48a90097ee3f0b0c",9186:"3af6fcd13ab752fa",9189:"3e9d29bf275ec462",9220:"bc767ebb5adb9f49",9224:"401f9320ee58570b",9240:"d38ddbe94e0bf128",9267:"fbfd65ea31e7448c",9294:"a20485f3282321b3",9302:"726b065f2df0323a",9312:"8121a74b2042bff3",9377:"f9db706e76f04afe",9382:"bc0e11ecc88dd62c",9421:"a5c1dbcfbfdd8f52",9448:"2668b3cd408e86de",9466:"c9d8f45d14235087",9521:"e1240eb862eb32dc",9547:"7729788fff21926f",9565:"8de0671f99d12abe",9569:"2f36b2b1c2f838d7",9605:"dfac539f89cea7a2",9615:"3b62c13af671f714",9648:"8235b6fea7087b3a",9666:"a515fa6d89a71f1c",9680:"d5ceac8967e0b6a8",9690:"7773c72f0eff6dec",9841:"422321143547591a",9842:"3b71b65b30d8ef2a",9996:"18b7bca2f0ab222e"})[e]+".js",l.miniCssF=e=>"static/css/659eccb5db697b76.css",l.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||Function("return this")()}catch(e){if("object"==typeof window)return window}}(),l.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},l.l=(e,a,c,d)=>{if(f[e])return void f[e].push(a);if(void 0!==c)for(var b,t,r=document.getElementsByTagName("script"),o=0;o<r.length;o++){var n=r[o];if(n.getAttribute("src")==e||n.getAttribute("data-webpack")=="_N_E:"+c){b=n;break}}b||(t=!0,(b=document.createElement("script")).charset="utf-8",b.timeout=120,l.nc&&b.setAttribute("nonce",l.nc),b.setAttribute("data-webpack","_N_E:"+c),b.src=l.tu(e)),f[e]=[a];var i=(a,c)=>{b.onerror=b.onload=null,clearTimeout(s);var d=f[e];if(delete f[e],b.parentNode&&b.parentNode.removeChild(b),d&&d.forEach(e=>e(c)),a)return a(c)},s=setTimeout(i.bind(null,void 0,{type:"timeout",target:b}),12e4);b.onerror=i.bind(null,b.onerror),b.onload=i.bind(null,b.onload),t&&document.head.appendChild(b)},l.r=e=>{"u">typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},l.tt=()=>(void 0===d&&(d={createScriptURL:e=>e},"u">typeof trustedTypes&&trustedTypes.createPolicy&&(d=trustedTypes.createPolicy("nextjs#bundler",d))),d),l.tu=e=>l.tt().createScriptURL(e),l.p="/_next/",b={8068:0},l.f.miniCss=(e,a)=>{if(b[e])a.push(b[e]);else 0!==b[e]&&({1838:1})[e]&&a.push(b[e]=new Promise((a,c)=>{var f=l.miniCssF(e),d=l.p+f;if(((e,a)=>{for(var c=document.getElementsByTagName("link"),f=0;f<c.length;f++){var d=c[f],b=d.getAttribute("data-href")||d.getAttribute("href");if("stylesheet"===d.rel&&(b===e||b===a))return d}for(var t=document.getElementsByTagName("style"),f=0;f<t.length;f++){var d=t[f],b=d.getAttribute("data-href");if(b===e||b===a)return d}})(f,d))return a();((e,a,c,f)=>{var d=document.createElement("link");d.rel="stylesheet",d.type="text/css",d.onerror=d.onload=b=>{if(d.onerror=d.onload=null,"load"===b.type)c();else{var t=b&&("load"===b.type?"missing":b.type),r=b&&b.target&&b.target.href||a,o=Error("Loading CSS chunk "+e+" failed.\n("+r+")");o.code="CSS_CHUNK_LOAD_FAILED",o.type=t,o.request=r,d.parentNode.removeChild(d),f(o)}},d.href=a;if("function"==typeof _N_E_STYLE_LOAD){var b=d.href,t=d.onload,r=d.onerror;_N_E_STYLE_LOAD(0===b.indexOf(window.location.origin)?new URL(b).pathname:b).then(function(){t&&t.call(d,{type:"load"})},function(){r&&r.call(d,{})})}else document.head.appendChild(d)})(e,d,a,c)}).then(()=>{b[e]=0},a=>{throw delete b[e],a}))},t={8068:0,2557:0,7513:0},l.f.j=(e,a)=>{var c=l.o(t,e)?t[e]:void 0;if(0!==c)if(c)a.push(c[2]);else if(/^(1838|2557|7513|8068)$/.test(e))t[e]=0;else{var f=new Promise((a,f)=>c=t[e]=[a,f]);a.push(c[2]=f);var d=l.p+l.u(e),b=Error();l.l(d,a=>{if(l.o(t,e)&&(0!==(c=t[e])&&(t[e]=void 0),c)){var f=a&&("load"===a.type?"missing":a.type),d=a&&a.target&&a.target.src;b.message="Loading chunk "+e+" failed.\n("+f+": "+d+")",b.name="ChunkLoadError",b.type=f,b.request=d,c[1](b)}},"chunk-"+e,e)}},l.O.j=e=>0===t[e],r=(e,a)=>{var c,f,[d,b,r]=a,o=0;if(d.some(e=>0!==t[e])){for(c in b)l.o(b,c)&&(l.m[c]=b[c]);if(r)var n=r(l)}for(e&&e(a);o<d.length;o++)f=d[o],l.o(t,f)&&t[f]&&t[f][0](),t[f]=0;return l.O(n)},(o=self.webpackChunk_N_E=self.webpackChunk_N_E||[]).forEach(r.bind(null,0)),o.push=r.bind(null,o.push.bind(o)),l.nc=void 0})();
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gsd-pi",
|
|
3
|
-
"version": "2.67.0-dev.
|
|
3
|
+
"version": "2.67.0-dev.2367d7e",
|
|
4
4
|
"description": "GSD — Get Shit Done coding agent",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
@@ -46,8 +46,10 @@
|
|
|
46
46
|
"build:pi-agent-core": "npm run build -w @gsd/pi-agent-core",
|
|
47
47
|
"build:pi-coding-agent": "npm run build -w @gsd/pi-coding-agent",
|
|
48
48
|
"build:native-pkg": "npm run build -w @gsd/native",
|
|
49
|
+
"build:rpc-client": "npm run build -w @gsd-build/rpc-client",
|
|
49
50
|
"build:pi": "npm run build:native-pkg && npm run build:pi-tui && npm run build:pi-ai && npm run build:pi-agent-core && npm run build:pi-coding-agent",
|
|
50
|
-
"build": "npm run build
|
|
51
|
+
"build:mcp-server": "npm run build -w @gsd-build/mcp-server",
|
|
52
|
+
"build": "npm run build:pi && npm run build:rpc-client && npm run build:mcp-server && tsc && npm run copy-resources && npm run copy-themes && npm run copy-export-html && node scripts/build-web-if-stale.cjs",
|
|
51
53
|
"stage:web-host": "node scripts/stage-web-standalone.cjs",
|
|
52
54
|
"build:web-host": "npm --prefix web run build && npm run stage:web-host",
|
|
53
55
|
"copy-resources": "node scripts/copy-resources.cjs",
|
|
@@ -4,6 +4,11 @@ MCP server exposing GSD orchestration tools for Claude Code, Cursor, and other M
|
|
|
4
4
|
|
|
5
5
|
Start GSD auto-mode sessions, poll progress, resolve blockers, and retrieve results — all through the [Model Context Protocol](https://modelcontextprotocol.io/).
|
|
6
6
|
|
|
7
|
+
This package now exposes two tool surfaces:
|
|
8
|
+
|
|
9
|
+
- session/read tools for starting and inspecting GSD sessions
|
|
10
|
+
- workflow mutation tools for planning, completion, validation, reassessment, and gate persistence
|
|
11
|
+
|
|
7
12
|
## Installation
|
|
8
13
|
|
|
9
14
|
```bash
|
|
@@ -69,6 +74,38 @@ Add to `.cursor/mcp.json`:
|
|
|
69
74
|
|
|
70
75
|
## Tools
|
|
71
76
|
|
|
77
|
+
### Workflow mutation tools
|
|
78
|
+
|
|
79
|
+
The workflow MCP surface includes:
|
|
80
|
+
|
|
81
|
+
- `gsd_plan_milestone`
|
|
82
|
+
- `gsd_plan_slice`
|
|
83
|
+
- `gsd_replan_slice`
|
|
84
|
+
- `gsd_slice_replan`
|
|
85
|
+
- `gsd_task_complete`
|
|
86
|
+
- `gsd_complete_task`
|
|
87
|
+
- `gsd_slice_complete`
|
|
88
|
+
- `gsd_complete_slice`
|
|
89
|
+
- `gsd_validate_milestone`
|
|
90
|
+
- `gsd_milestone_validate`
|
|
91
|
+
- `gsd_complete_milestone`
|
|
92
|
+
- `gsd_milestone_complete`
|
|
93
|
+
- `gsd_reassess_roadmap`
|
|
94
|
+
- `gsd_roadmap_reassess`
|
|
95
|
+
- `gsd_save_gate_result`
|
|
96
|
+
- `gsd_summary_save`
|
|
97
|
+
- `gsd_milestone_status`
|
|
98
|
+
|
|
99
|
+
These mutation tools use the same GSD workflow handlers as the native in-process tool path.
|
|
100
|
+
|
|
101
|
+
Current support boundary:
|
|
102
|
+
|
|
103
|
+
- when running inside the GSD monorepo checkout, the MCP server auto-discovers the shared workflow executor module
|
|
104
|
+
- outside the monorepo, set `GSD_WORKFLOW_EXECUTORS_MODULE` to an importable `workflow-tool-executors` module path if you want the mutation tools enabled
|
|
105
|
+
- session/read tools do not depend on this bridge
|
|
106
|
+
|
|
107
|
+
If the executor bridge cannot be loaded, workflow mutation calls will fail with a precise configuration error instead of silently degrading.
|
|
108
|
+
|
|
72
109
|
### `gsd_execute`
|
|
73
110
|
|
|
74
111
|
Start a GSD auto-mode session for a project directory.
|
|
@@ -175,6 +212,7 @@ Resolve a pending blocker in a session by sending a response to the blocked UI r
|
|
|
175
212
|
| Variable | Description |
|
|
176
213
|
|----------|-------------|
|
|
177
214
|
| `GSD_CLI_PATH` | Absolute path to the GSD CLI binary. If not set, the server resolves `gsd` via `which`. |
|
|
215
|
+
| `GSD_WORKFLOW_EXECUTORS_MODULE` | Optional absolute path or `file:` URL for the shared GSD workflow executor module used by workflow mutation tools. |
|
|
178
216
|
|
|
179
217
|
## Architecture
|
|
180
218
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* @gsd-build/mcp-server CLI — stdio transport entry point.
|
|
4
|
+
*
|
|
5
|
+
* Connects the MCP server to stdin/stdout for use by Claude Code,
|
|
6
|
+
* Cursor, and other MCP-compatible clients.
|
|
7
|
+
*/
|
|
8
|
+
import { SessionManager } from './session-manager.js';
|
|
9
|
+
import { createMcpServer } from './server.js';
|
|
10
|
+
const MCP_PKG = '@modelcontextprotocol/sdk';
|
|
11
|
+
async function main() {
|
|
12
|
+
const sessionManager = new SessionManager();
|
|
13
|
+
// Create the configured MCP server with all 12 tools (6 session + 6 read-only)
|
|
14
|
+
const { server } = await createMcpServer(sessionManager);
|
|
15
|
+
// Dynamic import for StdioServerTransport (same TS subpath workaround)
|
|
16
|
+
const { StdioServerTransport } = await import(`${MCP_PKG}/server/stdio.js`);
|
|
17
|
+
const transport = new StdioServerTransport();
|
|
18
|
+
// Cleanup handler — stop all sessions before exiting
|
|
19
|
+
let cleaningUp = false;
|
|
20
|
+
async function cleanup() {
|
|
21
|
+
if (cleaningUp)
|
|
22
|
+
return;
|
|
23
|
+
cleaningUp = true;
|
|
24
|
+
process.stderr.write('[gsd-mcp-server] Shutting down...\n');
|
|
25
|
+
try {
|
|
26
|
+
await sessionManager.cleanup();
|
|
27
|
+
}
|
|
28
|
+
catch {
|
|
29
|
+
// swallow cleanup errors
|
|
30
|
+
}
|
|
31
|
+
try {
|
|
32
|
+
await server.close();
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// swallow close errors
|
|
36
|
+
}
|
|
37
|
+
process.exit(0);
|
|
38
|
+
}
|
|
39
|
+
process.on('SIGTERM', () => void cleanup());
|
|
40
|
+
process.on('SIGINT', () => void cleanup());
|
|
41
|
+
// Handle stdin end — MCP client disconnected
|
|
42
|
+
process.stdin.on('end', () => void cleanup());
|
|
43
|
+
// Connect and start serving
|
|
44
|
+
try {
|
|
45
|
+
await server.connect(transport);
|
|
46
|
+
process.stderr.write('[gsd-mcp-server] MCP server started on stdio\n');
|
|
47
|
+
}
|
|
48
|
+
catch (err) {
|
|
49
|
+
process.stderr.write(`[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\n`);
|
|
50
|
+
await sessionManager.cleanup();
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
main().catch((err) => {
|
|
55
|
+
process.stderr.write(`[gsd-mcp-server] Fatal: ${err instanceof Error ? err.message : String(err)}\n`);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
});
|
|
58
|
+
//# sourceMappingURL=cli.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAEA;;;;;GAKG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,OAAO,GAAG,2BAA2B,CAAC;AAE5C,KAAK,UAAU,IAAI;IACjB,MAAM,cAAc,GAAG,IAAI,cAAc,EAAE,CAAC;IAE5C,+EAA+E;IAC/E,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,eAAe,CAAC,cAAc,CAAC,CAAC;IAEzD,uEAAuE;IACvE,MAAM,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,GAAG,OAAO,kBAAkB,CAAC,CAAC;IAC5E,MAAM,SAAS,GAAG,IAAI,oBAAoB,EAAE,CAAC;IAE7C,qDAAqD;IACrD,IAAI,UAAU,GAAG,KAAK,CAAC;IACvB,KAAK,UAAU,OAAO;QACpB,IAAI,UAAU;YAAE,OAAO;QACvB,UAAU,GAAG,IAAI,CAAC;QAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC5D,IAAI,CAAC;YACH,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;QACjC,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QACD,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;QACvB,CAAC;QAAC,MAAM,CAAC;YACP,uBAAuB;QACzB,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAC5C,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAE3C,6CAA6C;IAC7C,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;IAE9C,4BAA4B;IAC5B,IAAI,CAAC;QACH,MAAM,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAChC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,gDAAgD,CAAC,CAAC;IACzE,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,6CAA6C,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAClG,CAAC;QACF,MAAM,cAAc,CAAC,OAAO,EAAE,CAAC;QAC/B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAChF,CAAC;IACF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC","sourcesContent":["#!/usr/bin/env node\n\n/**\n * @gsd-build/mcp-server CLI — stdio transport entry point.\n *\n * Connects the MCP server to stdin/stdout for use by Claude Code,\n * Cursor, and other MCP-compatible clients.\n */\n\nimport { SessionManager } from './session-manager.js';\nimport { createMcpServer } from './server.js';\n\nconst MCP_PKG = '@modelcontextprotocol/sdk';\n\nasync function main(): Promise<void> {\n const sessionManager = new SessionManager();\n\n // Create the configured MCP server with all 12 tools (6 session + 6 read-only)\n const { server } = await createMcpServer(sessionManager);\n\n // Dynamic import for StdioServerTransport (same TS subpath workaround)\n const { StdioServerTransport } = await import(`${MCP_PKG}/server/stdio.js`);\n const transport = new StdioServerTransport();\n\n // Cleanup handler — stop all sessions before exiting\n let cleaningUp = false;\n async function cleanup(): Promise<void> {\n if (cleaningUp) return;\n cleaningUp = true;\n process.stderr.write('[gsd-mcp-server] Shutting down...\\n');\n try {\n await sessionManager.cleanup();\n } catch {\n // swallow cleanup errors\n }\n try {\n await server.close();\n } catch {\n // swallow close errors\n }\n process.exit(0);\n }\n\n process.on('SIGTERM', () => void cleanup());\n process.on('SIGINT', () => void cleanup());\n\n // Handle stdin end — MCP client disconnected\n process.stdin.on('end', () => void cleanup());\n\n // Connect and start serving\n try {\n await server.connect(transport);\n process.stderr.write('[gsd-mcp-server] MCP server started on stdio\\n');\n } catch (err) {\n process.stderr.write(\n `[gsd-mcp-server] Fatal: failed to start — ${err instanceof Error ? err.message : String(err)}\\n`\n );\n await sessionManager.cleanup();\n process.exit(1);\n }\n}\n\nmain().catch((err) => {\n process.stderr.write(\n `[gsd-mcp-server] Fatal: ${err instanceof Error ? err.message : String(err)}\\n`\n );\n process.exit(1);\n});\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @gsd-build/mcp-server — MCP server for GSD orchestration and project state.
|
|
3
|
+
*/
|
|
4
|
+
export { SessionManager } from './session-manager.js';
|
|
5
|
+
export { createMcpServer } from './server.js';
|
|
6
|
+
export type { SessionStatus, ManagedSession, ExecuteOptions, PendingBlocker, CostAccumulator, } from './types.js';
|
|
7
|
+
export { MAX_EVENTS, INIT_TIMEOUT_MS } from './types.js';
|
|
8
|
+
export { readProgress } from './readers/state.js';
|
|
9
|
+
export type { ProgressResult } from './readers/state.js';
|
|
10
|
+
export { readRoadmap } from './readers/roadmap.js';
|
|
11
|
+
export type { RoadmapResult, MilestoneInfo, SliceInfo, TaskInfo } from './readers/roadmap.js';
|
|
12
|
+
export { readHistory } from './readers/metrics.js';
|
|
13
|
+
export type { HistoryResult, MetricsUnit } from './readers/metrics.js';
|
|
14
|
+
export { readCaptures } from './readers/captures.js';
|
|
15
|
+
export type { CapturesResult, CaptureEntry } from './readers/captures.js';
|
|
16
|
+
export { readKnowledge } from './readers/knowledge.js';
|
|
17
|
+
export type { KnowledgeResult, KnowledgeEntry } from './readers/knowledge.js';
|
|
18
|
+
export { runDoctorLite } from './readers/doctor-lite.js';
|
|
19
|
+
export type { DoctorResult, DoctorIssue } from './readers/doctor-lite.js';
|
|
20
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,YAAY,EACV,aAAa,EACb,cAAc,EACd,cAAc,EACd,cAAc,EACd,eAAe,GAChB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAGzD,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,YAAY,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAC9F,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACnD,YAAY,EAAE,aAAa,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AACvE,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AACvD,YAAY,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AAC9E,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @gsd-build/mcp-server — MCP server for GSD orchestration and project state.
|
|
3
|
+
*/
|
|
4
|
+
export { SessionManager } from './session-manager.js';
|
|
5
|
+
export { createMcpServer } from './server.js';
|
|
6
|
+
export { MAX_EVENTS, INIT_TIMEOUT_MS } from './types.js';
|
|
7
|
+
// Read-only state readers (usable without a running session)
|
|
8
|
+
export { readProgress } from './readers/state.js';
|
|
9
|
+
export { readRoadmap } from './readers/roadmap.js';
|
|
10
|
+
export { readHistory } from './readers/metrics.js';
|
|
11
|
+
export { readCaptures } from './readers/captures.js';
|
|
12
|
+
export { readKnowledge } from './readers/knowledge.js';
|
|
13
|
+
export { runDoctorLite } from './readers/doctor-lite.js';
|
|
14
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAQ9C,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAEzD,6DAA6D;AAC7D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,OAAO,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAErD,OAAO,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAEvD,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC","sourcesContent":["/**\n * @gsd-build/mcp-server — MCP server for GSD orchestration and project state.\n */\n\nexport { SessionManager } from './session-manager.js';\nexport { createMcpServer } from './server.js';\nexport type {\n SessionStatus,\n ManagedSession,\n ExecuteOptions,\n PendingBlocker,\n CostAccumulator,\n} from './types.js';\nexport { MAX_EVENTS, INIT_TIMEOUT_MS } from './types.js';\n\n// Read-only state readers (usable without a running session)\nexport { readProgress } from './readers/state.js';\nexport type { ProgressResult } from './readers/state.js';\nexport { readRoadmap } from './readers/roadmap.js';\nexport type { RoadmapResult, MilestoneInfo, SliceInfo, TaskInfo } from './readers/roadmap.js';\nexport { readHistory } from './readers/metrics.js';\nexport type { HistoryResult, MetricsUnit } from './readers/metrics.js';\nexport { readCaptures } from './readers/captures.js';\nexport type { CapturesResult, CaptureEntry } from './readers/captures.js';\nexport { readKnowledge } from './readers/knowledge.js';\nexport type { KnowledgeResult, KnowledgeEntry } from './readers/knowledge.js';\nexport { runDoctorLite } from './readers/doctor-lite.js';\nexport type { DoctorResult, DoctorIssue } from './readers/doctor-lite.js';\n"]}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
export type CaptureStatus = 'pending' | 'triaged' | 'resolved';
|
|
2
|
+
export type CaptureClassification = 'quick-task' | 'inject' | 'defer' | 'replan' | 'note' | 'stop' | 'backtrack';
|
|
3
|
+
export interface CaptureEntry {
|
|
4
|
+
id: string;
|
|
5
|
+
text: string;
|
|
6
|
+
timestamp: string;
|
|
7
|
+
status: CaptureStatus;
|
|
8
|
+
classification: CaptureClassification | null;
|
|
9
|
+
resolution: string | null;
|
|
10
|
+
rationale: string | null;
|
|
11
|
+
resolvedAt: string | null;
|
|
12
|
+
milestone: string | null;
|
|
13
|
+
executed: string | null;
|
|
14
|
+
}
|
|
15
|
+
export interface CapturesResult {
|
|
16
|
+
captures: CaptureEntry[];
|
|
17
|
+
counts: {
|
|
18
|
+
total: number;
|
|
19
|
+
pending: number;
|
|
20
|
+
resolved: number;
|
|
21
|
+
actionable: number;
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
export declare function readCaptures(projectDir: string, filter?: 'all' | 'pending' | 'actionable'): CapturesResult;
|
|
25
|
+
//# sourceMappingURL=captures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captures.d.ts","sourceRoot":"","sources":["../../src/readers/captures.ts"],"names":[],"mappings":"AAUA,MAAM,MAAM,aAAa,GAAG,SAAS,GAAG,SAAS,GAAG,UAAU,CAAC;AAC/D,MAAM,MAAM,qBAAqB,GAC7B,YAAY,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,GAAG,WAAW,CAAC;AAEjF,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,aAAa,CAAC;IACtB,cAAc,EAAE,qBAAqB,GAAG,IAAI,CAAC;IAC7C,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAC;CACzB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,YAAY,EAAE,CAAC;IACzB,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;CACH;AAiDD,wBAAgB,YAAY,CAC1B,UAAU,EAAE,MAAM,EAClB,MAAM,GAAE,KAAK,GAAG,SAAS,GAAG,YAAoB,GAC/C,cAAc,CA+BhB"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// GSD MCP Server — captures reader
|
|
2
|
+
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
3
|
+
import { readFileSync, existsSync } from 'node:fs';
|
|
4
|
+
import { resolveGsdRoot, resolveRootFile } from './paths.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Parser
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function parseCapturesMarkdown(content) {
|
|
9
|
+
const entries = [];
|
|
10
|
+
// Split on H3 headers: ### CAP-xxxxxxxx
|
|
11
|
+
const sections = content.split(/(?=^### CAP-)/m);
|
|
12
|
+
for (const section of sections) {
|
|
13
|
+
const idMatch = section.match(/^### (CAP-[\da-f]+)/);
|
|
14
|
+
if (!idMatch)
|
|
15
|
+
continue;
|
|
16
|
+
const id = idMatch[1];
|
|
17
|
+
const field = (label) => {
|
|
18
|
+
const re = new RegExp(`\\*\\*${label}:\\*\\*\\s*(.+)`, 'i');
|
|
19
|
+
const m = section.match(re);
|
|
20
|
+
return m ? m[1].trim() : null;
|
|
21
|
+
};
|
|
22
|
+
const status = (field('Status') ?? 'pending').toLowerCase();
|
|
23
|
+
const classification = field('Classification');
|
|
24
|
+
entries.push({
|
|
25
|
+
id,
|
|
26
|
+
text: field('Text') ?? '',
|
|
27
|
+
timestamp: field('Captured') ?? '',
|
|
28
|
+
status,
|
|
29
|
+
classification,
|
|
30
|
+
resolution: field('Resolution'),
|
|
31
|
+
rationale: field('Rationale'),
|
|
32
|
+
resolvedAt: field('Resolved'),
|
|
33
|
+
milestone: field('Milestone'),
|
|
34
|
+
executed: field('Executed'),
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
return entries;
|
|
38
|
+
}
|
|
39
|
+
// ---------------------------------------------------------------------------
|
|
40
|
+
// Public API
|
|
41
|
+
// ---------------------------------------------------------------------------
|
|
42
|
+
const ACTIONABLE_CLASSIFICATIONS = new Set(['quick-task', 'inject', 'replan']);
|
|
43
|
+
export function readCaptures(projectDir, filter = 'all') {
|
|
44
|
+
const gsd = resolveGsdRoot(projectDir);
|
|
45
|
+
const capturesPath = resolveRootFile(gsd, 'CAPTURES.md');
|
|
46
|
+
if (!existsSync(capturesPath)) {
|
|
47
|
+
return { captures: [], counts: { total: 0, pending: 0, resolved: 0, actionable: 0 } };
|
|
48
|
+
}
|
|
49
|
+
const content = readFileSync(capturesPath, 'utf-8');
|
|
50
|
+
let captures = parseCapturesMarkdown(content);
|
|
51
|
+
// Compute counts before filtering
|
|
52
|
+
const counts = {
|
|
53
|
+
total: captures.length,
|
|
54
|
+
pending: captures.filter((c) => c.status === 'pending').length,
|
|
55
|
+
resolved: captures.filter((c) => c.status === 'resolved').length,
|
|
56
|
+
actionable: captures.filter((c) => c.classification !== null && ACTIONABLE_CLASSIFICATIONS.has(c.classification)).length,
|
|
57
|
+
};
|
|
58
|
+
// Apply filter
|
|
59
|
+
if (filter === 'pending') {
|
|
60
|
+
captures = captures.filter((c) => c.status === 'pending');
|
|
61
|
+
}
|
|
62
|
+
else if (filter === 'actionable') {
|
|
63
|
+
captures = captures.filter((c) => c.classification !== null && ACTIONABLE_CLASSIFICATIONS.has(c.classification));
|
|
64
|
+
}
|
|
65
|
+
return { captures, counts };
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=captures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"captures.js","sourceRoot":"","sources":["../../src/readers/captures.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,4DAA4D;AAE5D,OAAO,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAiC7D,8EAA8E;AAC9E,SAAS;AACT,8EAA8E;AAE9E,SAAS,qBAAqB,CAAC,OAAe;IAC5C,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,wCAAwC;IACxC,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;IAEjD,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;QACrD,IAAI,CAAC,OAAO;YAAE,SAAS;QAEvB,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;QACtB,MAAM,KAAK,GAAG,CAAC,KAAa,EAAiB,EAAE;YAC7C,MAAM,EAAE,GAAG,IAAI,MAAM,CAAC,SAAS,KAAK,iBAAiB,EAAE,GAAG,CAAC,CAAC;YAC5D,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAC5B,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAChC,CAAC,CAAC;QAEF,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,SAAS,CAAC,CAAC,WAAW,EAAmB,CAAC;QAC7E,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAiC,CAAC;QAE/E,OAAO,CAAC,IAAI,CAAC;YACX,EAAE;YACF,IAAI,EAAE,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE;YACzB,SAAS,EAAE,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE;YAClC,MAAM;YACN,cAAc;YACd,UAAU,EAAE,KAAK,CAAC,YAAY,CAAC;YAC/B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;YAC7B,UAAU,EAAE,KAAK,CAAC,UAAU,CAAC;YAC7B,SAAS,EAAE,KAAK,CAAC,WAAW,CAAC;YAC7B,QAAQ,EAAE,KAAK,CAAC,UAAU,CAAC;SAC5B,CAAC,CAAC;IACL,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,0BAA0B,GAAG,IAAI,GAAG,CAAS,CAAC,YAAY,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;AAEvF,MAAM,UAAU,YAAY,CAC1B,UAAkB,EAClB,SAA2C,KAAK;IAEhD,MAAM,GAAG,GAAG,cAAc,CAAC,UAAU,CAAC,CAAC;IACvC,MAAM,YAAY,GAAG,eAAe,CAAC,GAAG,EAAE,aAAa,CAAC,CAAC;IAEzD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,MAAM,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,EAAE,CAAC;IACxF,CAAC;IAED,MAAM,OAAO,GAAG,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACpD,IAAI,QAAQ,GAAG,qBAAqB,CAAC,OAAO,CAAC,CAAC;IAE9C,kCAAkC;IAClC,MAAM,MAAM,GAAG;QACb,KAAK,EAAE,QAAQ,CAAC,MAAM;QACtB,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,MAAM;QAC9D,QAAQ,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC,MAAM;QAChE,UAAU,EAAE,QAAQ,CAAC,MAAM,CACzB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CACrF,CAAC,MAAM;KACT,CAAC;IAEF,eAAe;IACf,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QACzB,QAAQ,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC;IAC5D,CAAC;SAAM,IAAI,MAAM,KAAK,YAAY,EAAE,CAAC;QACnC,QAAQ,GAAG,QAAQ,CAAC,MAAM,CACxB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,IAAI,0BAA0B,CAAC,GAAG,CAAC,CAAC,CAAC,cAAc,CAAC,CACrF,CAAC;IACJ,CAAC;IAED,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["// GSD MCP Server — captures reader\n// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>\n\nimport { readFileSync, existsSync } from 'node:fs';\nimport { resolveGsdRoot, resolveRootFile } from './paths.js';\n\n// ---------------------------------------------------------------------------\n// Types\n// ---------------------------------------------------------------------------\n\nexport type CaptureStatus = 'pending' | 'triaged' | 'resolved';\nexport type CaptureClassification =\n | 'quick-task' | 'inject' | 'defer' | 'replan' | 'note' | 'stop' | 'backtrack';\n\nexport interface CaptureEntry {\n id: string;\n text: string;\n timestamp: string;\n status: CaptureStatus;\n classification: CaptureClassification | null;\n resolution: string | null;\n rationale: string | null;\n resolvedAt: string | null;\n milestone: string | null;\n executed: string | null;\n}\n\nexport interface CapturesResult {\n captures: CaptureEntry[];\n counts: {\n total: number;\n pending: number;\n resolved: number;\n actionable: number;\n };\n}\n\n// ---------------------------------------------------------------------------\n// Parser\n// ---------------------------------------------------------------------------\n\nfunction parseCapturesMarkdown(content: string): CaptureEntry[] {\n const entries: CaptureEntry[] = [];\n\n // Split on H3 headers: ### CAP-xxxxxxxx\n const sections = content.split(/(?=^### CAP-)/m);\n\n for (const section of sections) {\n const idMatch = section.match(/^### (CAP-[\\da-f]+)/);\n if (!idMatch) continue;\n\n const id = idMatch[1];\n const field = (label: string): string | null => {\n const re = new RegExp(`\\\\*\\\\*${label}:\\\\*\\\\*\\\\s*(.+)`, 'i');\n const m = section.match(re);\n return m ? m[1].trim() : null;\n };\n\n const status = (field('Status') ?? 'pending').toLowerCase() as CaptureStatus;\n const classification = field('Classification') as CaptureClassification | null;\n\n entries.push({\n id,\n text: field('Text') ?? '',\n timestamp: field('Captured') ?? '',\n status,\n classification,\n resolution: field('Resolution'),\n rationale: field('Rationale'),\n resolvedAt: field('Resolved'),\n milestone: field('Milestone'),\n executed: field('Executed'),\n });\n }\n\n return entries;\n}\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\nconst ACTIONABLE_CLASSIFICATIONS = new Set<string>(['quick-task', 'inject', 'replan']);\n\nexport function readCaptures(\n projectDir: string,\n filter: 'all' | 'pending' | 'actionable' = 'all',\n): CapturesResult {\n const gsd = resolveGsdRoot(projectDir);\n const capturesPath = resolveRootFile(gsd, 'CAPTURES.md');\n\n if (!existsSync(capturesPath)) {\n return { captures: [], counts: { total: 0, pending: 0, resolved: 0, actionable: 0 } };\n }\n\n const content = readFileSync(capturesPath, 'utf-8');\n let captures = parseCapturesMarkdown(content);\n\n // Compute counts before filtering\n const counts = {\n total: captures.length,\n pending: captures.filter((c) => c.status === 'pending').length,\n resolved: captures.filter((c) => c.status === 'resolved').length,\n actionable: captures.filter(\n (c) => c.classification !== null && ACTIONABLE_CLASSIFICATIONS.has(c.classification),\n ).length,\n };\n\n // Apply filter\n if (filter === 'pending') {\n captures = captures.filter((c) => c.status === 'pending');\n } else if (filter === 'actionable') {\n captures = captures.filter(\n (c) => c.classification !== null && ACTIONABLE_CLASSIFICATIONS.has(c.classification),\n );\n }\n\n return { captures, counts };\n}\n"]}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
export type Severity = 'info' | 'warning' | 'error';
|
|
2
|
+
export interface DoctorIssue {
|
|
3
|
+
severity: Severity;
|
|
4
|
+
code: string;
|
|
5
|
+
scope: 'project' | 'milestone' | 'slice' | 'task';
|
|
6
|
+
unitId: string;
|
|
7
|
+
message: string;
|
|
8
|
+
file?: string;
|
|
9
|
+
}
|
|
10
|
+
export interface DoctorResult {
|
|
11
|
+
ok: boolean;
|
|
12
|
+
issues: DoctorIssue[];
|
|
13
|
+
counts: {
|
|
14
|
+
error: number;
|
|
15
|
+
warning: number;
|
|
16
|
+
info: number;
|
|
17
|
+
};
|
|
18
|
+
}
|
|
19
|
+
export declare function runDoctorLite(projectDir: string, scope?: string): DoctorResult;
|
|
20
|
+
//# sourceMappingURL=doctor-lite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor-lite.d.ts","sourceRoot":"","sources":["../../src/readers/doctor-lite.ts"],"names":[],"mappings":"AAmBA,MAAM,MAAM,QAAQ,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAC;AAEpD,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,QAAQ,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,SAAS,GAAG,WAAW,GAAG,OAAO,GAAG,MAAM,CAAC;IAClD,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,WAAW,EAAE,CAAC;IACtB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC;CAC1D;AAoJD,wBAAgB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,YAAY,CA0C9E"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
// GSD MCP Server — lightweight structural health checks
|
|
2
|
+
// Copyright (c) 2026 Jeremy McSpadden <jeremy@fluxlabs.net>
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { resolveGsdRoot, resolveRootFile, findMilestoneIds, resolveMilestoneFile, resolveMilestoneDir, findSliceIds, resolveSliceFile, findTaskFiles, } from './paths.js';
|
|
5
|
+
// ---------------------------------------------------------------------------
|
|
6
|
+
// Check implementations
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
function checkProjectLevel(gsdRoot, issues) {
|
|
9
|
+
// PROJECT.md should exist
|
|
10
|
+
const projectPath = resolveRootFile(gsdRoot, 'PROJECT.md');
|
|
11
|
+
if (!existsSync(projectPath)) {
|
|
12
|
+
issues.push({
|
|
13
|
+
severity: 'warning',
|
|
14
|
+
code: 'missing_project_md',
|
|
15
|
+
scope: 'project',
|
|
16
|
+
unitId: '',
|
|
17
|
+
message: 'PROJECT.md is missing — project lacks a description',
|
|
18
|
+
file: projectPath,
|
|
19
|
+
});
|
|
20
|
+
}
|
|
21
|
+
// STATE.md should exist if milestones exist
|
|
22
|
+
const milestones = findMilestoneIds(gsdRoot);
|
|
23
|
+
if (milestones.length > 0) {
|
|
24
|
+
const statePath = resolveRootFile(gsdRoot, 'STATE.md');
|
|
25
|
+
if (!existsSync(statePath)) {
|
|
26
|
+
issues.push({
|
|
27
|
+
severity: 'warning',
|
|
28
|
+
code: 'missing_state_md',
|
|
29
|
+
scope: 'project',
|
|
30
|
+
unitId: '',
|
|
31
|
+
message: 'STATE.md is missing — run /gsd status to regenerate',
|
|
32
|
+
file: statePath,
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
function checkMilestoneLevel(gsdRoot, mid, issues) {
|
|
38
|
+
const mDir = resolveMilestoneDir(gsdRoot, mid);
|
|
39
|
+
if (!mDir) {
|
|
40
|
+
issues.push({
|
|
41
|
+
severity: 'error',
|
|
42
|
+
code: 'missing_milestone_dir',
|
|
43
|
+
scope: 'milestone',
|
|
44
|
+
unitId: mid,
|
|
45
|
+
message: `Milestone directory for ${mid} not found`,
|
|
46
|
+
});
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
// CONTEXT.md should exist
|
|
50
|
+
const ctxPath = resolveMilestoneFile(gsdRoot, mid, 'CONTEXT');
|
|
51
|
+
if (!ctxPath || !existsSync(ctxPath)) {
|
|
52
|
+
// Check for draft
|
|
53
|
+
const draftPath = resolveMilestoneFile(gsdRoot, mid, 'CONTEXT-DRAFT');
|
|
54
|
+
if (!draftPath || !existsSync(draftPath)) {
|
|
55
|
+
issues.push({
|
|
56
|
+
severity: 'warning',
|
|
57
|
+
code: 'missing_context',
|
|
58
|
+
scope: 'milestone',
|
|
59
|
+
unitId: mid,
|
|
60
|
+
message: `${mid} has no CONTEXT.md — milestone lacks defined scope`,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
// ROADMAP.md should exist if slices exist
|
|
65
|
+
const sliceIds = findSliceIds(gsdRoot, mid);
|
|
66
|
+
if (sliceIds.length > 0) {
|
|
67
|
+
const roadmapPath = resolveMilestoneFile(gsdRoot, mid, 'ROADMAP');
|
|
68
|
+
if (!roadmapPath || !existsSync(roadmapPath)) {
|
|
69
|
+
issues.push({
|
|
70
|
+
severity: 'warning',
|
|
71
|
+
code: 'missing_roadmap',
|
|
72
|
+
scope: 'milestone',
|
|
73
|
+
unitId: mid,
|
|
74
|
+
message: `${mid} has ${sliceIds.length} slices but no ROADMAP.md`,
|
|
75
|
+
});
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
// Check if all slices done but no SUMMARY
|
|
79
|
+
if (sliceIds.length > 0) {
|
|
80
|
+
const allDone = sliceIds.every((sid) => {
|
|
81
|
+
const tasks = findTaskFiles(gsdRoot, mid, sid);
|
|
82
|
+
return tasks.length > 0 && tasks.every((t) => t.hasSummary);
|
|
83
|
+
});
|
|
84
|
+
const summaryPath = resolveMilestoneFile(gsdRoot, mid, 'SUMMARY');
|
|
85
|
+
if (allDone && (!summaryPath || !existsSync(summaryPath))) {
|
|
86
|
+
issues.push({
|
|
87
|
+
severity: 'error',
|
|
88
|
+
code: 'all_slices_done_missing_summary',
|
|
89
|
+
scope: 'milestone',
|
|
90
|
+
unitId: mid,
|
|
91
|
+
message: `${mid} has all slices completed but no SUMMARY.md`,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
function checkSliceLevel(gsdRoot, mid, sid, issues) {
|
|
97
|
+
const unitId = `${mid}/${sid}`;
|
|
98
|
+
// PLAN.md should exist
|
|
99
|
+
const planPath = resolveSliceFile(gsdRoot, mid, sid, 'PLAN');
|
|
100
|
+
if (!planPath || !existsSync(planPath)) {
|
|
101
|
+
issues.push({
|
|
102
|
+
severity: 'error',
|
|
103
|
+
code: 'missing_slice_plan',
|
|
104
|
+
scope: 'slice',
|
|
105
|
+
unitId,
|
|
106
|
+
message: `${unitId} has no PLAN.md`,
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
// Tasks should have plans
|
|
110
|
+
const tasks = findTaskFiles(gsdRoot, mid, sid);
|
|
111
|
+
for (const task of tasks) {
|
|
112
|
+
const taskUnitId = `${unitId}/${task.id}`;
|
|
113
|
+
if (!task.hasPlan) {
|
|
114
|
+
issues.push({
|
|
115
|
+
severity: 'warning',
|
|
116
|
+
code: 'missing_task_plan',
|
|
117
|
+
scope: 'task',
|
|
118
|
+
unitId: taskUnitId,
|
|
119
|
+
message: `${taskUnitId} has a summary but no plan file`,
|
|
120
|
+
});
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
// Check for empty slice (directory exists but no tasks or plan)
|
|
124
|
+
if (tasks.length === 0 && (!planPath || !existsSync(planPath))) {
|
|
125
|
+
issues.push({
|
|
126
|
+
severity: 'warning',
|
|
127
|
+
code: 'empty_slice',
|
|
128
|
+
scope: 'slice',
|
|
129
|
+
unitId,
|
|
130
|
+
message: `${unitId} has no plan and no tasks — may be abandoned`,
|
|
131
|
+
});
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
// ---------------------------------------------------------------------------
|
|
135
|
+
// Public API
|
|
136
|
+
// ---------------------------------------------------------------------------
|
|
137
|
+
export function runDoctorLite(projectDir, scope) {
|
|
138
|
+
const gsdRoot = resolveGsdRoot(projectDir);
|
|
139
|
+
const issues = [];
|
|
140
|
+
if (!existsSync(gsdRoot)) {
|
|
141
|
+
return {
|
|
142
|
+
ok: true,
|
|
143
|
+
issues: [{
|
|
144
|
+
severity: 'info',
|
|
145
|
+
code: 'no_gsd_directory',
|
|
146
|
+
scope: 'project',
|
|
147
|
+
unitId: '',
|
|
148
|
+
message: 'No .gsd/ directory found — project not initialized',
|
|
149
|
+
}],
|
|
150
|
+
counts: { error: 0, warning: 0, info: 1 },
|
|
151
|
+
};
|
|
152
|
+
}
|
|
153
|
+
// Project-level checks
|
|
154
|
+
checkProjectLevel(gsdRoot, issues);
|
|
155
|
+
// Milestone + slice checks
|
|
156
|
+
const milestoneIds = scope
|
|
157
|
+
? findMilestoneIds(gsdRoot).filter((id) => id === scope)
|
|
158
|
+
: findMilestoneIds(gsdRoot);
|
|
159
|
+
for (const mid of milestoneIds) {
|
|
160
|
+
checkMilestoneLevel(gsdRoot, mid, issues);
|
|
161
|
+
const sliceIds = findSliceIds(gsdRoot, mid);
|
|
162
|
+
for (const sid of sliceIds) {
|
|
163
|
+
checkSliceLevel(gsdRoot, mid, sid, issues);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
const counts = {
|
|
167
|
+
error: issues.filter((i) => i.severity === 'error').length,
|
|
168
|
+
warning: issues.filter((i) => i.severity === 'warning').length,
|
|
169
|
+
info: issues.filter((i) => i.severity === 'info').length,
|
|
170
|
+
};
|
|
171
|
+
return { ok: counts.error === 0, issues, counts };
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=doctor-lite.js.map
|