@opengsd/gsd-pi 1.1.1-dev.154fd443 → 1.1.1-dev.1854a79a
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/dist/project-sessions.js +4 -2
- package/dist/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/browser-tools/index.js +39 -22
- package/dist/resources/extensions/browser-tools/state.js +12 -0
- package/dist/resources/extensions/browser-tools/tools/session.js +3 -2
- package/dist/resources/extensions/browser-tools/utils.js +3 -3
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +17 -9
- package/dist/resources/extensions/gsd/auto/contracts.js +8 -1
- package/dist/resources/extensions/gsd/auto/orchestrator.js +659 -57
- package/dist/resources/extensions/gsd/auto-prompts.js +14 -1
- package/dist/resources/extensions/gsd/auto-runtime-state.js +3 -0
- package/dist/resources/extensions/gsd/auto-tool-tracking.js +5 -0
- package/dist/resources/extensions/gsd/auto-unit-tool-scope.js +29 -0
- package/dist/resources/extensions/gsd/auto.js +62 -464
- package/dist/resources/extensions/gsd/bootstrap/register-hooks.js +2 -1
- package/dist/resources/extensions/gsd/debug-logger.js +10 -0
- package/dist/resources/extensions/gsd/doctor-proactive.js +7 -2
- package/dist/resources/extensions/gsd/markdown-renderer.js +31 -32
- package/dist/resources/extensions/gsd/mcp-filter.js +6 -0
- package/dist/resources/extensions/gsd/native-git-bridge.js +9 -0
- package/dist/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/dist/resources/extensions/gsd/schemas/parsers.js +6 -1
- package/dist/resources/extensions/gsd/state-reconciliation/drift/artifact-db.js +21 -1
- package/dist/resources/extensions/gsd/tools/workflow-tool-executors.js +169 -20
- 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 +2 -2
- package/dist/web/standalone/.next/prerender-manifest.json +3 -3
- 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.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/api/boot/route.js.nft.json +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/resize/route.js.nft.json +1 -1
- 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/captures/route.js.nft.json +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/doctor/route.js.nft.json +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/files/route.js.nft.json +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/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/history/route.js.nft.json +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/inspect/route.js.nft.json +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/live-state/route.js.nft.json +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/notifications/route.js.nft.json +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/projects/route.js.nft.json +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/session/browser/route.js.nft.json +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/events/route.js.nft.json +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/settings-data/route.js.nft.json +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/skill-health/route.js.nft.json +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/switch-root/route.js.nft.json +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/stream/route.js.nft.json +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/visualizer/route.js.nft.json +1 -1
- package/dist/web/standalone/.next/server/app/index.html +1 -1
- package/dist/web/standalone/.next/server/app/index.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
- package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
- 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-paths-manifest.json +6 -6
- package/dist/web/standalone/.next/server/chunks/5047.js +2 -0
- package/dist/web/standalone/.next/server/chunks/5124.js +1 -0
- package/dist/web/standalone/.next/server/chunks/8357.js +2 -2
- package/dist/web/standalone/.next/server/middleware-build-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/node_modules/node-pty/build/Makefile +1 -1
- package/package.json +6 -4
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js +21 -23
- package/packages/gsd-agent-modes/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/components/transcript-design.js.map +1 -1
- 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 +18 -11
- package/packages/gsd-agent-modes/dist/modes/interactive/controllers/chat-controller.js.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.d.ts.map +1 -1
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js +16 -0
- package/packages/gsd-agent-modes/dist/modes/interactive/interactive-chat-render.js.map +1 -1
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/package.json +3 -3
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/dist/models.generated.d.ts +0 -34
- package/packages/pi-ai/dist/models.generated.d.ts.map +1 -1
- package/packages/pi-ai/dist/models.generated.js +0 -34
- package/packages/pi-ai/dist/models.generated.js.map +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/auth-storage.js +11 -3
- package/packages/pi-coding-agent/dist/core/auth-storage.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.js +1 -1
- package/packages/pi-coding-agent/dist/core/settings-manager.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/package.json +1 -1
- package/src/resources/extensions/browser-tools/index.ts +39 -22
- package/src/resources/extensions/browser-tools/state.ts +13 -0
- package/src/resources/extensions/browser-tools/tests/browser-tools-unit.test.cjs +57 -0
- package/src/resources/extensions/browser-tools/tools/session.ts +4 -2
- package/src/resources/extensions/browser-tools/utils.ts +3 -3
- package/src/resources/extensions/claude-code-cli/stream-adapter.ts +18 -8
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +2 -2
- package/src/resources/extensions/gsd/auto/contracts.ts +8 -119
- package/src/resources/extensions/gsd/auto/orchestrator.ts +794 -58
- package/src/resources/extensions/gsd/auto-prompts.ts +21 -1
- package/src/resources/extensions/gsd/auto-runtime-state.ts +4 -0
- package/src/resources/extensions/gsd/auto-tool-tracking.ts +5 -0
- package/src/resources/extensions/gsd/auto-unit-tool-scope.ts +33 -0
- package/src/resources/extensions/gsd/auto.ts +81 -500
- package/src/resources/extensions/gsd/bootstrap/register-hooks.ts +2 -0
- package/src/resources/extensions/gsd/debug-logger.ts +11 -0
- package/src/resources/extensions/gsd/doctor-proactive.ts +8 -2
- package/src/resources/extensions/gsd/markdown-renderer.ts +38 -19
- package/src/resources/extensions/gsd/mcp-filter.ts +7 -0
- package/src/resources/extensions/gsd/native-git-bridge.ts +9 -0
- package/src/resources/extensions/gsd/prompts/plan-slice.md +1 -1
- package/src/resources/extensions/gsd/schemas/parsers.ts +6 -1
- package/src/resources/extensions/gsd/state-reconciliation/drift/artifact-db.ts +31 -10
- package/src/resources/extensions/gsd/tests/artifact-db-drift-memo.test.ts +66 -0
- package/src/resources/extensions/gsd/tests/auto-dispatch-baseline-harness.test.ts +53 -0
- package/src/resources/extensions/gsd/tests/auto-orchestrator.test.ts +590 -855
- package/src/resources/extensions/gsd/tests/auto-paused-ui-cleanup.test.ts +38 -10
- package/src/resources/extensions/gsd/tests/debug-logger.test.ts +15 -0
- package/src/resources/extensions/gsd/tests/execute-summary-save-empty-project.test.ts +64 -1
- package/src/resources/extensions/gsd/tests/markdown-renderer-parse-cache.test.ts +75 -0
- package/src/resources/extensions/gsd/tests/orchestrator-legacy-parity.test.ts +127 -0
- package/src/resources/extensions/gsd/tests/parse-project-milestone-bridge.test.ts +77 -0
- package/src/resources/extensions/gsd/tests/plan-slice-prompt.test.ts +4 -2
- package/src/resources/extensions/gsd/tests/start-auto-detached.test.ts +19 -5
- package/src/resources/extensions/gsd/tests/worktree-safety.test.ts +24 -0
- package/src/resources/extensions/gsd/tests/write-gate-planning-unit.test.ts +15 -3
- package/src/resources/extensions/gsd/tools/workflow-tool-executors.ts +183 -21
- package/dist/web/standalone/.next/server/chunks/678.js +0 -2
- /package/dist/web/standalone/.next/static/{vAecbJ3K9eO213bAxU8Mi → h38jfi0dnRY0y3hbyBszg}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{vAecbJ3K9eO213bAxU8Mi → h38jfi0dnRY0y3hbyBszg}/_ssgManifest.js +0 -0
package/dist/project-sessions.js
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
|
-
import { join } from "node:path";
|
|
1
|
+
import { join, normalize } from "node:path";
|
|
2
2
|
import { sessionsDir as defaultSessionsDir } from "./app-paths.js";
|
|
3
3
|
export function getProjectSessionsDir(cwd, baseSessionsDir = defaultSessionsDir) {
|
|
4
|
-
|
|
4
|
+
// Normalize the cwd path to prevent directory traversal
|
|
5
|
+
const normalizedCwd = normalize(cwd).replace(/^[/\\]/, "").replace(/[/\\:]/g, "-");
|
|
6
|
+
const safePath = `--${normalizedCwd}--`;
|
|
5
7
|
return join(baseSessionsDir, safePath);
|
|
6
8
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
|
|
1
|
+
848de9262becc128
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
import { importExtensionModule } from "@gsd/pi-coding-agent";
|
|
3
3
|
import { closeManagedGsdBrowser, registerManagedGsdBrowserTools, warmUpManagedGsdBrowser } from "./engine/managed-gsd-browser.js";
|
|
4
4
|
import { resolveBrowserEngineMode } from "./engine/selection.js";
|
|
5
|
+
import { setArtifactRootForCwd } from "./state.js";
|
|
5
6
|
import { detectWebApp } from "./web-app-detect.js";
|
|
6
7
|
let legacyRegistrationPromise = null;
|
|
7
8
|
let managedRegistrationPromise = null;
|
|
@@ -84,28 +85,29 @@ async function registerLegacyBrowserTools(pi) {
|
|
|
84
85
|
sanitizeArtifactName: utils.sanitizeArtifactName,
|
|
85
86
|
formatArtifactTimestamp: utils.formatArtifactTimestamp,
|
|
86
87
|
};
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
88
|
+
const cwdScopedPi = withBrowserArtifactCwdScope(pi);
|
|
89
|
+
navigation.registerNavigationTools(cwdScopedPi, deps);
|
|
90
|
+
screenshot.registerScreenshotTools(cwdScopedPi, deps);
|
|
91
|
+
interaction.registerInteractionTools(cwdScopedPi, deps);
|
|
92
|
+
inspection.registerInspectionTools(cwdScopedPi, deps);
|
|
93
|
+
session.registerSessionTools(cwdScopedPi, deps);
|
|
94
|
+
assertions.registerAssertionTools(cwdScopedPi, deps);
|
|
95
|
+
refTools.registerRefTools(cwdScopedPi, deps);
|
|
96
|
+
wait.registerWaitTools(cwdScopedPi, deps);
|
|
97
|
+
pages.registerPageTools(cwdScopedPi, deps);
|
|
98
|
+
forms.registerFormTools(cwdScopedPi, deps);
|
|
99
|
+
intent.registerIntentTools(cwdScopedPi, deps);
|
|
100
|
+
pdf.registerPdfTools(cwdScopedPi, deps);
|
|
101
|
+
statePersistence.registerStatePersistenceTools(cwdScopedPi, deps);
|
|
102
|
+
networkMock.registerNetworkMockTools(cwdScopedPi, deps);
|
|
103
|
+
device.registerDeviceTools(cwdScopedPi, deps);
|
|
104
|
+
extract.registerExtractTools(cwdScopedPi, deps);
|
|
105
|
+
visualDiff.registerVisualDiffTools(cwdScopedPi, deps);
|
|
106
|
+
zoom.registerZoomTools(cwdScopedPi, deps);
|
|
107
|
+
codegen.registerCodegenTools(cwdScopedPi, deps);
|
|
108
|
+
actionCache.registerActionCacheTools(cwdScopedPi, deps);
|
|
109
|
+
injectionDetection.registerInjectionDetectionTools(cwdScopedPi, deps);
|
|
110
|
+
verify.registerVerifyTools(cwdScopedPi, deps);
|
|
109
111
|
})().catch((error) => {
|
|
110
112
|
legacyRegistrationPromise = null;
|
|
111
113
|
throw error;
|
|
@@ -113,6 +115,21 @@ async function registerLegacyBrowserTools(pi) {
|
|
|
113
115
|
}
|
|
114
116
|
return legacyRegistrationPromise;
|
|
115
117
|
}
|
|
118
|
+
function withBrowserArtifactCwdScope(pi) {
|
|
119
|
+
return {
|
|
120
|
+
...pi,
|
|
121
|
+
registerTool(definition) {
|
|
122
|
+
pi.registerTool({
|
|
123
|
+
...definition,
|
|
124
|
+
async execute(toolCallId, params, signal, onUpdate, ctx) {
|
|
125
|
+
if (ctx?.cwd)
|
|
126
|
+
setArtifactRootForCwd(ctx.cwd);
|
|
127
|
+
return definition.execute(toolCallId, params, signal, onUpdate, ctx);
|
|
128
|
+
},
|
|
129
|
+
});
|
|
130
|
+
},
|
|
131
|
+
};
|
|
132
|
+
}
|
|
116
133
|
async function registerBrowserTools(pi) {
|
|
117
134
|
const engine = resolveBrowserEngineMode();
|
|
118
135
|
if (engine === "off")
|
|
@@ -18,6 +18,17 @@ export const HAR_FILENAME = "session.har";
|
|
|
18
18
|
// ---------------------------------------------------------------------------
|
|
19
19
|
// Mutable state variables — accessed only via get/set functions
|
|
20
20
|
// ---------------------------------------------------------------------------
|
|
21
|
+
// 0. artifactRoot
|
|
22
|
+
let _artifactRoot = ARTIFACT_ROOT;
|
|
23
|
+
export function getArtifactRoot() { return _artifactRoot; }
|
|
24
|
+
export function setArtifactRootForCwd(cwd) {
|
|
25
|
+
const newRoot = path.resolve(cwd, ".artifacts", "browser");
|
|
26
|
+
if (newRoot !== _artifactRoot) {
|
|
27
|
+
_artifactRoot = newRoot;
|
|
28
|
+
_sessionArtifactDir = null;
|
|
29
|
+
}
|
|
30
|
+
return _artifactRoot;
|
|
31
|
+
}
|
|
21
32
|
// 1. browser
|
|
22
33
|
let _browser = null;
|
|
23
34
|
export function getBrowser() { return _browser; }
|
|
@@ -102,6 +113,7 @@ export function setHarState(h) { _harState = h; }
|
|
|
102
113
|
// resetAllState — mirrors closeBrowser()'s reset logic
|
|
103
114
|
// ---------------------------------------------------------------------------
|
|
104
115
|
export function resetAllState() {
|
|
116
|
+
_artifactRoot = ARTIFACT_ROOT;
|
|
105
117
|
_browser = null;
|
|
106
118
|
_context = null;
|
|
107
119
|
pageRegistry.pages = [];
|
|
@@ -2,7 +2,7 @@ import { Type } from "@sinclair/typebox";
|
|
|
2
2
|
import { stat } from "node:fs/promises";
|
|
3
3
|
import path from "node:path";
|
|
4
4
|
import { formatTimelineEntries, buildFailureHypothesis, summarizeBrowserSession, } from "../core.js";
|
|
5
|
-
import {
|
|
5
|
+
import { HAR_FILENAME, getArtifactRoot, getPageRegistry, getConsoleLogs, getNetworkLogs, getDialogLogs, getActionTimeline, getActiveTraceSession, setActiveTraceSession, getHarState, setHarState, getSessionStartedAt, getSessionArtifactDir, } from "../state.js";
|
|
6
6
|
import { getActiveFrameMetadata, ensureDir, } from "../utils.js";
|
|
7
7
|
export function registerSessionTools(pi, deps) {
|
|
8
8
|
// -------------------------------------------------------------------------
|
|
@@ -289,7 +289,8 @@ export function registerSessionTools(pi, deps) {
|
|
|
289
289
|
const { page: p } = await deps.ensureBrowser();
|
|
290
290
|
const startedAt = Date.now();
|
|
291
291
|
const sessionDir = await deps.ensureSessionArtifactDir();
|
|
292
|
-
const
|
|
292
|
+
const bundleName = `${deps.formatArtifactTimestamp(startedAt)}-${deps.sanitizeArtifactName(params.name ?? "debug-bundle", "debug-bundle")}`;
|
|
293
|
+
const bundleDir = path.join(getArtifactRoot(), bundleName);
|
|
293
294
|
await ensureDir(bundleDir);
|
|
294
295
|
const pages = await deps.getLivePagesSnapshot();
|
|
295
296
|
const actionTimeline = getActionTimeline();
|
|
@@ -8,7 +8,7 @@ import { mkdir, stat, writeFile, copyFile } from "node:fs/promises";
|
|
|
8
8
|
import path from "node:path";
|
|
9
9
|
import { DEFAULT_MAX_BYTES, DEFAULT_MAX_LINES, truncateHead, } from "@gsd/pi-coding-agent";
|
|
10
10
|
import { beginAction, finishAction, findAction, toActionParamsSummary, registryListPages, } from "./core.js";
|
|
11
|
-
import {
|
|
11
|
+
import { getActiveFrame, getArtifactRoot, getActiveTraceSession, getConsoleLogs, getDialogLogs, getHarState, getNetworkLogs, getSessionArtifactDir, getSessionStartedAt, setSessionArtifactDir, setSessionStartedAt, pageRegistry, actionTimeline, getPendingCriticalRequestsByPage, } from "./state.js";
|
|
12
12
|
// ---------------------------------------------------------------------------
|
|
13
13
|
// Text truncation
|
|
14
14
|
// ---------------------------------------------------------------------------
|
|
@@ -60,7 +60,7 @@ export async function ensureSessionArtifactDir() {
|
|
|
60
60
|
return existing;
|
|
61
61
|
}
|
|
62
62
|
const startedAt = ensureSessionStartedAt();
|
|
63
|
-
const dir = path.join(
|
|
63
|
+
const dir = path.join(getArtifactRoot(), `${formatArtifactTimestamp(startedAt)}-session`);
|
|
64
64
|
setSessionArtifactDir(dir);
|
|
65
65
|
await ensureDir(dir);
|
|
66
66
|
return dir;
|
|
@@ -95,7 +95,7 @@ export function getActiveFrameMetadata() {
|
|
|
95
95
|
}
|
|
96
96
|
export function getSessionArtifactMetadata() {
|
|
97
97
|
return {
|
|
98
|
-
artifactRoot:
|
|
98
|
+
artifactRoot: getArtifactRoot(),
|
|
99
99
|
sessionStartedAt: getSessionStartedAt(),
|
|
100
100
|
sessionArtifactDir: getSessionArtifactDir(),
|
|
101
101
|
activeTraceSession: getActiveTraceSession(),
|
|
@@ -18,7 +18,7 @@ import { PartialMessageBuilder, ZERO_USAGE, mapUsage } from "./partial-builder.j
|
|
|
18
18
|
import { buildWorkflowMcpServers, getRequiredWorkflowToolsForAutoUnit, resolveWorkflowMcpProjectRoot, } from "../gsd/workflow-mcp.js";
|
|
19
19
|
import { buildProjectGsdMcpServers, ensureProjectWorkflowMcpConfig } from "../gsd/mcp-project-config.js";
|
|
20
20
|
import { loadProjectGSDPreferences } from "../gsd/preferences.js";
|
|
21
|
-
import { discoverBrowserMcpServerName, discoverMcpServers, discoverMcpServerNames, discoverWorkflowMcpServerName, computeMcpDisallowedTools, } from "../gsd/mcp-filter.js";
|
|
21
|
+
import { discoverBrowserMcpServerName, discoverMcpServers, discoverMcpServerNames, discoverUserMcpServerNames, discoverWorkflowMcpServerName, computeMcpDisallowedTools, } from "../gsd/mcp-filter.js";
|
|
22
22
|
import { RUN_UAT_CLAUDE_NATIVE_TOOL_NAMES, RUN_UAT_FORBIDDEN_TOOL_NAMES, RUN_UAT_WORKFLOW_TOOL_NAMES, resolveToolPresentationPlan } from "../gsd/tool-presentation-plan.js";
|
|
23
23
|
import { showInterviewRound } from "../shared/tui.js";
|
|
24
24
|
export function serverToolUseToToolCallLike(block) {
|
|
@@ -1341,14 +1341,22 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1341
1341
|
const projectBrowserServerName = discoverBrowserMcpServerName(projectRoot);
|
|
1342
1342
|
const workflowServerName = projectWorkflowServerName ?? injectedWorkflowServerName;
|
|
1343
1343
|
const browserServerName = projectBrowserServerName ?? injectedBrowserServerName;
|
|
1344
|
-
//
|
|
1345
|
-
//
|
|
1346
|
-
//
|
|
1347
|
-
//
|
|
1344
|
+
// Non-strict (non-phase) sessions load ~/.claude/settings.json via settingSources
|
|
1345
|
+
// including "user". If the user declared the same server names there, injecting them
|
|
1346
|
+
// again via mcpServers causes duplicate registration and leaves MCP tools unavailable.
|
|
1347
|
+
// Strict (gsdPhase) sessions set settingSources=[] so user settings are not loaded.
|
|
1348
|
+
const userDiscovered = !gsdPhase ? discoverUserMcpServerNames() : [];
|
|
1349
|
+
const allDiscovered = discovered.length > 0 || userDiscovered.length > 0
|
|
1350
|
+
? [...discovered, ...userDiscovered]
|
|
1351
|
+
: discovered;
|
|
1352
|
+
// If a default GSD MCP server is already declared in project config or in the user's
|
|
1353
|
+
// ~/.claude/settings.json (when that file will be loaded), do not inject it again via
|
|
1354
|
+
// mcpServers. Passing the same server name from two sources causes a duplicate
|
|
1355
|
+
// registration conflict that prevents the MCP server from loading (tools become unavailable).
|
|
1348
1356
|
const workflowAlreadyInProject = projectWorkflowServerName !== undefined
|
|
1349
|
-
|| (injectedWorkflowServerName !== undefined &&
|
|
1357
|
+
|| (injectedWorkflowServerName !== undefined && allDiscovered.includes(injectedWorkflowServerName));
|
|
1350
1358
|
const browserAlreadyInProject = projectBrowserServerName !== undefined
|
|
1351
|
-
|| (injectedBrowserServerName !== undefined &&
|
|
1359
|
+
|| (injectedBrowserServerName !== undefined && allDiscovered.includes(injectedBrowserServerName));
|
|
1352
1360
|
const mcpServersToInject = { ...defaultMcpServers.servers };
|
|
1353
1361
|
if (workflowAlreadyInProject && injectedWorkflowServerName)
|
|
1354
1362
|
delete mcpServersToInject[injectedWorkflowServerName];
|
|
@@ -1405,9 +1413,9 @@ export function buildSdkOptions(modelId, prompt, overrides, extraOptions = {}) {
|
|
|
1405
1413
|
const sdkMcpServers = inlinePhaseMcpServers ?? filteredMcpServers;
|
|
1406
1414
|
const strictMcpConfig = !!inlinePhaseMcpServers;
|
|
1407
1415
|
// Strict phase configs inline the exact MCP servers GSD needs. Loading
|
|
1408
|
-
//
|
|
1416
|
+
// Claude Code settings at the same time can duplicate those servers and
|
|
1409
1417
|
// leave allowed mcp__... tools with no registered backing tool.
|
|
1410
|
-
const settingSources = strictMcpConfig ? [] : ["project", "local"];
|
|
1418
|
+
const settingSources = strictMcpConfig ? [] : ["user", "project", "local"];
|
|
1411
1419
|
const exactWorkflowMcpTools = resolveExactWorkflowMcpToolsForPhase(gsdPhase, workflowServerName, workflowExplicitlyBlocked);
|
|
1412
1420
|
const runUatDisallowedTools = gsdPhase === "run-uat" && workflowServerName
|
|
1413
1421
|
? [
|
|
@@ -1,3 +1,10 @@
|
|
|
1
1
|
// Project/App: gsd-pi
|
|
2
|
-
// File Purpose: Auto Orchestration module
|
|
2
|
+
// File Purpose: Auto Orchestration module public contract types.
|
|
3
|
+
//
|
|
4
|
+
// Phase 2 of #442 collapsed the nine single-implementation adapter interfaces
|
|
5
|
+
// (DispatchAdapter, RecoveryAdapter, StateReconciliationAdapter,
|
|
6
|
+
// ToolContractAdapter, WorktreeAdapter, HealthAdapter, UokGateAdapter,
|
|
7
|
+
// RuntimePersistenceAdapter, NotificationAdapter) and AutoOrchestratorDeps
|
|
8
|
+
// into AutoOrchestrator itself (auto/orchestrator.ts). Only the public result
|
|
9
|
+
// and lifecycle-interface types remain here.
|
|
3
10
|
export {};
|