@opengsd/gsd-pi 1.4.0-dev.5fc22c6f → 1.4.0-dev.c18009cd
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/resources/.managed-resources-content-hash +1 -1
- package/dist/resources/extensions/claude-code-cli/stream-adapter.js +58 -4
- package/dist/resources/extensions/gsd/artifact-verification.js +17 -5
- package/dist/resources/extensions/gsd/auto/closeout.js +45 -42
- package/dist/resources/extensions/gsd/auto/finalize.js +9 -0
- package/dist/resources/extensions/gsd/auto/orchestrator.js +1 -1
- package/dist/resources/extensions/gsd/auto/run-unit.js +5 -2
- package/dist/resources/extensions/gsd/auto/schedule-wakeup.js +3 -0
- package/dist/resources/extensions/gsd/auto.js +10 -3
- package/dist/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.js +58 -9
- package/dist/resources/extensions/gsd/doctor-engine-checks.js +174 -16
- package/dist/resources/extensions/gsd/gsd-db.js +52 -0
- package/dist/resources/extensions/gsd/migrate-external.js +13 -4
- package/dist/resources/extensions/gsd/milestone-merge-transaction.js +3 -3
- package/dist/resources/extensions/gsd/repo-identity.js +16 -0
- package/dist/resources/extensions/gsd/root-write-leak-guard.js +4 -2
- package/dist/resources/extensions/gsd/unit-registry.js +27 -2
- package/dist/resources/extensions/gsd/worktree-lifecycle.js +67 -5
- package/dist/tsconfig.extensions.tsbuildinfo +1 -1
- package/dist/web/standalone/.next/BUILD_ID +1 -1
- package/dist/web/standalone/.next/app-path-routes-manifest.json +6 -6
- package/dist/web/standalone/.next/build-manifest.json +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/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/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/integrations/hermes/CONTEXT.md +47 -0
- package/integrations/hermes/README.md +21 -0
- package/integrations/hermes/docs/issue-1162-grilling.md +197 -0
- package/integrations/hermes/docs/setup.md +4 -0
- package/integrations/hermes/open_gsd_hermes/commands.py +141 -0
- package/integrations/hermes/open_gsd_hermes/config.py +2 -0
- package/integrations/hermes/open_gsd_hermes/gsd_client.py +594 -31
- package/integrations/hermes/open_gsd_hermes/notifications.py +10 -1
- package/integrations/hermes/plugin.yaml +4 -0
- package/integrations/hermes/tests/test_config.py +6 -0
- package/integrations/hermes/tests/test_gsd_client_cache.py +3 -0
- package/integrations/hermes/tests/test_gsd_client_execute.py +35 -0
- package/integrations/hermes/tests/test_gsd_client_process_cwd.py +22 -0
- package/integrations/hermes/tests/test_gsd_client_timeout.py +98 -0
- package/integrations/hermes/tests/test_milestone_client.py +447 -0
- package/integrations/hermes/tests/test_new_milestone_command.py +313 -0
- package/integrations/hermes/tests/test_supervisor_fsm.py +40 -0
- package/package.json +1 -1
- package/packages/cloud-mcp-gateway/package.json +2 -2
- package/packages/contracts/package.json +1 -1
- package/packages/daemon/dist/session-manager.js +1 -1
- package/packages/daemon/dist/session-manager.js.map +1 -1
- package/packages/daemon/package.json +4 -4
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.d.ts.map +1 -1
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.js +4 -1
- package/packages/gsd-agent-core/dist/session/agent-session-navigation.js.map +1 -1
- package/packages/gsd-agent-core/package.json +5 -5
- package/packages/gsd-agent-modes/package.json +7 -7
- package/packages/mcp-server/dist/server.d.ts +18 -5
- package/packages/mcp-server/dist/server.d.ts.map +1 -1
- package/packages/mcp-server/dist/server.js +46 -5
- package/packages/mcp-server/dist/server.js.map +1 -1
- package/packages/mcp-server/dist/session-manager.js +1 -1
- package/packages/mcp-server/dist/session-manager.js.map +1 -1
- package/packages/mcp-server/package.json +4 -4
- package/packages/native/package.json +1 -1
- package/packages/pi-agent-core/package.json +1 -1
- package/packages/pi-ai/package.json +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts +1 -0
- package/packages/pi-coding-agent/dist/core/session-manager-types.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager-types.js.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.d.ts.map +1 -1
- package/packages/pi-coding-agent/dist/core/session-manager.js +3 -0
- package/packages/pi-coding-agent/dist/core/session-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/claude-code-cli/stream-adapter.ts +64 -3
- package/src/resources/extensions/claude-code-cli/tests/stream-adapter.test.ts +212 -39
- package/src/resources/extensions/gsd/artifact-verification.ts +16 -4
- package/src/resources/extensions/gsd/auto/closeout.ts +54 -56
- package/src/resources/extensions/gsd/auto/finalize.ts +8 -0
- package/src/resources/extensions/gsd/auto/loop-deps.ts +1 -0
- package/src/resources/extensions/gsd/auto/orchestrator.ts +1 -1
- package/src/resources/extensions/gsd/auto/run-unit.ts +5 -2
- package/src/resources/extensions/gsd/auto/schedule-wakeup.ts +8 -0
- package/src/resources/extensions/gsd/auto.ts +9 -3
- package/src/resources/extensions/gsd/bootstrap/schedule-wakeup-tool.ts +80 -12
- package/src/resources/extensions/gsd/doctor-engine-checks.ts +230 -21
- package/src/resources/extensions/gsd/gsd-db.ts +72 -0
- package/src/resources/extensions/gsd/migrate-external.ts +14 -4
- package/src/resources/extensions/gsd/milestone-merge-transaction.ts +4 -4
- package/src/resources/extensions/gsd/repo-identity.ts +17 -0
- package/src/resources/extensions/gsd/root-write-leak-guard.ts +3 -2
- package/src/resources/extensions/gsd/tests/auto-loop.test.ts +131 -5
- package/src/resources/extensions/gsd/tests/auto-phases-lifecycle.test.ts +43 -1
- package/src/resources/extensions/gsd/tests/auto-recovery.test.ts +54 -0
- package/src/resources/extensions/gsd/tests/doctor-scope-db-unavailable.test.ts +335 -0
- package/src/resources/extensions/gsd/tests/merge-conflict-stops-loop.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/migrate-external-worktree.test.ts +116 -0
- package/src/resources/extensions/gsd/tests/milestone-merge-stash-restore.test.ts +152 -22
- package/src/resources/extensions/gsd/tests/milestone-merge-transaction.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/phases-merge-error-stops-auto.test.ts +50 -6
- package/src/resources/extensions/gsd/tests/root-write-leak-guard.test.ts +31 -9
- package/src/resources/extensions/gsd/tests/schedule-wakeup-tool.test.ts +167 -0
- package/src/resources/extensions/gsd/tests/state-corruption-2945.test.ts +1 -1
- package/src/resources/extensions/gsd/tests/unit-registry.test.ts +56 -0
- package/src/resources/extensions/gsd/tests/worktree-journal-events.test.ts +4 -4
- package/src/resources/extensions/gsd/tests/worktree-lifecycle.test.ts +2 -2
- package/src/resources/extensions/gsd/unit-registry.ts +34 -2
- package/src/resources/extensions/gsd/worktree-lifecycle.ts +135 -11
- /package/dist/web/standalone/.next/static/{kIEFsCryyGy6RzifULbJl → L2UMqXELiDH3oz-7yguXp}/_buildManifest.js +0 -0
- /package/dist/web/standalone/.next/static/{kIEFsCryyGy6RzifULbJl → L2UMqXELiDH3oz-7yguXp}/_ssgManifest.js +0 -0
|
@@ -102,6 +102,51 @@ class UserNotifiedError extends Error {
|
|
|
102
102
|
function isSamePathPhysical(a, b) {
|
|
103
103
|
return normalizeWorktreePathForCompare(a) === normalizeWorktreePathForCompare(b);
|
|
104
104
|
}
|
|
105
|
+
function preflightBlockedMergeReason(blockedReason) {
|
|
106
|
+
if (blockedReason?.startsWith("unmerged-conflicts")) {
|
|
107
|
+
return "preflight-unmerged-conflicts";
|
|
108
|
+
}
|
|
109
|
+
return "preflight-dirty-overlap";
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Run a milestone merge behind the Worktree Lifecycle seam with the root-clean
|
|
113
|
+
* stash guard that protects user changes around merge.
|
|
114
|
+
*
|
|
115
|
+
* The helper owns the invariant ordering (preflight -> merge callback ->
|
|
116
|
+
* postflight on every attempted merge path) and returns the same typed result
|
|
117
|
+
* shape as `exitMilestone`. Auto closeout remains responsible for translating
|
|
118
|
+
* that result into loop policy (pause vs. stop, visible transcript
|
|
119
|
+
* preservation, projection rebuild).
|
|
120
|
+
*/
|
|
121
|
+
function runGuardedMilestoneMerge(request) {
|
|
122
|
+
const { merge, guard, milestoneId, notify } = request;
|
|
123
|
+
const preflight = guard.preflightCleanRoot(guard.projectRoot, milestoneId, notify);
|
|
124
|
+
if (preflight.blocked) {
|
|
125
|
+
return {
|
|
126
|
+
ok: false,
|
|
127
|
+
reason: preflightBlockedMergeReason(preflight.blockedReason),
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
let mergeError = null;
|
|
131
|
+
const exitResult = merge();
|
|
132
|
+
if (!exitResult.ok) {
|
|
133
|
+
mergeError = exitResult.cause ?? new Error(`exit ${exitResult.reason}`);
|
|
134
|
+
}
|
|
135
|
+
let postflight;
|
|
136
|
+
if (preflight.stashPushed) {
|
|
137
|
+
postflight = guard.postflightPopStash(guard.projectRoot, milestoneId, preflight.stashMarker, notify);
|
|
138
|
+
}
|
|
139
|
+
if (mergeError instanceof MergeConflictError) {
|
|
140
|
+
return { ok: false, reason: "merge-conflict", cause: mergeError, postflight };
|
|
141
|
+
}
|
|
142
|
+
if (mergeError) {
|
|
143
|
+
return { ok: false, reason: "merge-failed", cause: mergeError, postflight };
|
|
144
|
+
}
|
|
145
|
+
if (postflight?.needsManualRecovery) {
|
|
146
|
+
return { ok: false, reason: "postflight-stash-restore-failed", postflight };
|
|
147
|
+
}
|
|
148
|
+
return exitResult;
|
|
149
|
+
}
|
|
105
150
|
// ─── Validation ──────────────────────────────────────────────────────────
|
|
106
151
|
function isValidMilestoneId(milestoneId) {
|
|
107
152
|
return !/[\/\\]|\.\./.test(milestoneId);
|
|
@@ -645,7 +690,7 @@ function _mergeWorktreeModeImpl(deps, mctx) {
|
|
|
645
690
|
pushed: false,
|
|
646
691
|
};
|
|
647
692
|
}
|
|
648
|
-
const mergeResult = deps.
|
|
693
|
+
const mergeResult = deps.mergeMilestone(originalBasePath, milestoneId, roadmapResolution.content);
|
|
649
694
|
// #2945 Bug 3: mergeMilestoneToMain performs best-effort worktree
|
|
650
695
|
// cleanup internally (step 12), but it can silently fail on Windows
|
|
651
696
|
// or when the worktree directory is locked. Perform a secondary
|
|
@@ -780,7 +825,7 @@ function _mergeBranchModeImpl(deps, mctx) {
|
|
|
780
825
|
pushed: false,
|
|
781
826
|
};
|
|
782
827
|
}
|
|
783
|
-
const mergeResult = deps.
|
|
828
|
+
const mergeResult = deps.mergeMilestone(worktreeBasePath, milestoneId, roadmapResolution.content);
|
|
784
829
|
if (mergeResult.codeFilesChanged) {
|
|
785
830
|
notify(`Milestone ${milestoneId} merged (branch mode).${mergeResult.pushed ? " Pushed to remote." : ""}`, "info");
|
|
786
831
|
}
|
|
@@ -983,14 +1028,31 @@ export class WorktreeLifecycle {
|
|
|
983
1028
|
* With `opts.merge === false`, runs auto-commit and teardown without
|
|
984
1029
|
* merging to main.
|
|
985
1030
|
*
|
|
1031
|
+
* When `opts.guardedMerge` is present with `opts.merge === true`, the
|
|
1032
|
+
* lifecycle verb also owns the root-clean guard around the merge: preflight
|
|
1033
|
+
* runs before the inner merge, postflight stash restore runs after every
|
|
1034
|
+
* attempted merge path, and guard failures are returned as typed
|
|
1035
|
+
* `ExitResult` reasons.
|
|
1036
|
+
*
|
|
986
1037
|
* Returns a typed `ExitResult`. `MergeConflictError` is surfaced as
|
|
987
1038
|
* `{ ok: false, reason: "merge-conflict", cause }` instead of thrown,
|
|
988
|
-
* giving callers a typed branch for the expected failure path.
|
|
989
|
-
*
|
|
990
|
-
*
|
|
1039
|
+
* giving callers a typed branch for the expected failure path. Guarded merge
|
|
1040
|
+
* failures surface as `preflight-dirty-overlap`,
|
|
1041
|
+
* `preflight-unmerged-conflicts`, `merge-failed`, or
|
|
1042
|
+
* `postflight-stash-restore-failed`. Unexpected failures (filesystem, git
|
|
1043
|
+
* permissions, etc.) are wrapped as
|
|
1044
|
+
* `{ ok: false, reason: "teardown-failed", cause }` so callers always
|
|
991
1045
|
* receive a discriminated union — no exceptions for any expected outcome.
|
|
992
1046
|
*/
|
|
993
1047
|
exitMilestone(milestoneId, opts, ctx) {
|
|
1048
|
+
if (opts.merge && opts.guardedMerge) {
|
|
1049
|
+
return runGuardedMilestoneMerge({
|
|
1050
|
+
merge: () => this.exitMilestone(milestoneId, { merge: true }, ctx),
|
|
1051
|
+
guard: opts.guardedMerge,
|
|
1052
|
+
milestoneId,
|
|
1053
|
+
notify: ctx.notify,
|
|
1054
|
+
});
|
|
1055
|
+
}
|
|
994
1056
|
if (opts.merge) {
|
|
995
1057
|
try {
|
|
996
1058
|
const merged = this._mergeAndExit(milestoneId, ctx);
|