@opengsd/gsd-pi 1.7.0-dev.30c4ec2f → 1.7.0-dev.e0039c3c

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.
Files changed (77) hide show
  1. package/dist/resources/.managed-resources-content-hash +1 -1
  2. package/dist/resources/extensions/gsd/doctor.js +653 -14
  3. package/dist/resources/extensions/gsd/md-importer.js +2 -7
  4. package/dist/resources/extensions/gsd/migrate/planning-writer.js +2 -8
  5. package/dist/resources/extensions/gsd/migration-auto-check.js +0 -4
  6. package/dist/resources/extensions/gsd/state-reconciliation/drift/project-md.js +14 -54
  7. package/dist/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.js +5 -48
  8. package/dist/tsconfig.extensions.tsbuildinfo +1 -1
  9. package/dist/web/standalone/.next/BUILD_ID +1 -1
  10. package/dist/web/standalone/.next/app-path-routes-manifest.json +8 -8
  11. package/dist/web/standalone/.next/build-manifest.json +2 -2
  12. package/dist/web/standalone/.next/prerender-manifest.json +3 -3
  13. package/dist/web/standalone/.next/server/app/_global-error.html +1 -1
  14. package/dist/web/standalone/.next/server/app/_global-error.rsc +1 -1
  15. package/dist/web/standalone/.next/server/app/_global-error.segments/_full.segment.rsc +1 -1
  16. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error/__PAGE__.segment.rsc +1 -1
  17. package/dist/web/standalone/.next/server/app/_global-error.segments/_global-error.segment.rsc +1 -1
  18. package/dist/web/standalone/.next/server/app/_global-error.segments/_head.segment.rsc +1 -1
  19. package/dist/web/standalone/.next/server/app/_global-error.segments/_index.segment.rsc +1 -1
  20. package/dist/web/standalone/.next/server/app/_global-error.segments/_tree.segment.rsc +1 -1
  21. package/dist/web/standalone/.next/server/app/_not-found.html +1 -1
  22. package/dist/web/standalone/.next/server/app/_not-found.rsc +1 -1
  23. package/dist/web/standalone/.next/server/app/_not-found.segments/_full.segment.rsc +1 -1
  24. package/dist/web/standalone/.next/server/app/_not-found.segments/_head.segment.rsc +1 -1
  25. package/dist/web/standalone/.next/server/app/_not-found.segments/_index.segment.rsc +1 -1
  26. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found/__PAGE__.segment.rsc +1 -1
  27. package/dist/web/standalone/.next/server/app/_not-found.segments/_not-found.segment.rsc +1 -1
  28. package/dist/web/standalone/.next/server/app/_not-found.segments/_tree.segment.rsc +1 -1
  29. package/dist/web/standalone/.next/server/app/index.html +1 -1
  30. package/dist/web/standalone/.next/server/app/index.rsc +1 -1
  31. package/dist/web/standalone/.next/server/app/index.segments/__PAGE__.segment.rsc +1 -1
  32. package/dist/web/standalone/.next/server/app/index.segments/_full.segment.rsc +1 -1
  33. package/dist/web/standalone/.next/server/app/index.segments/_head.segment.rsc +1 -1
  34. package/dist/web/standalone/.next/server/app/index.segments/_index.segment.rsc +1 -1
  35. package/dist/web/standalone/.next/server/app/index.segments/_tree.segment.rsc +1 -1
  36. package/dist/web/standalone/.next/server/app-paths-manifest.json +8 -8
  37. package/dist/web/standalone/.next/server/middleware-build-manifest.js +1 -1
  38. package/dist/web/standalone/.next/server/pages/404.html +1 -1
  39. package/dist/web/standalone/.next/server/pages/500.html +1 -1
  40. package/dist/web/standalone/.next/server/server-reference-manifest.json +1 -1
  41. package/package.json +1 -1
  42. package/packages/cloud-mcp-gateway/package.json +2 -2
  43. package/packages/contracts/package.json +1 -1
  44. package/packages/daemon/package.json +4 -4
  45. package/packages/gsd-agent-core/package.json +5 -5
  46. package/packages/gsd-agent-modes/package.json +7 -7
  47. package/packages/gsd-cloud/package.json +1 -1
  48. package/packages/mcp-server/package.json +4 -4
  49. package/packages/native/package.json +1 -1
  50. package/packages/pi-agent-core/package.json +1 -1
  51. package/packages/pi-ai/package.json +1 -1
  52. package/packages/pi-coding-agent/package.json +7 -7
  53. package/packages/pi-tui/package.json +2 -2
  54. package/packages/rpc-client/package.json +2 -2
  55. package/pkg/package.json +1 -1
  56. package/src/resources/extensions/gsd/doctor.ts +673 -14
  57. package/src/resources/extensions/gsd/md-importer.ts +2 -7
  58. package/src/resources/extensions/gsd/migrate/planning-writer.ts +3 -9
  59. package/src/resources/extensions/gsd/migration-auto-check.ts +0 -3
  60. package/src/resources/extensions/gsd/state-reconciliation/drift/project-md.ts +20 -67
  61. package/src/resources/extensions/gsd/state-reconciliation/drift/sketch-flag.ts +5 -47
  62. package/src/resources/extensions/gsd/tests/db-authority-regression.test.ts +1 -76
  63. package/src/resources/extensions/gsd/tests/migrate-hierarchy.test.ts +0 -53
  64. package/src/resources/extensions/gsd/tests/migration-auto-check.test.ts +0 -53
  65. package/src/resources/extensions/gsd/tests/parsers-legacy-importers.test.ts +0 -4
  66. package/src/resources/extensions/gsd/tests/planning-writer.test.ts +1 -18
  67. package/src/resources/extensions/gsd/tests/progressive-planning.test.ts +3 -18
  68. package/src/resources/extensions/gsd/tests/state-reconciliation-drift.test.ts +25 -177
  69. package/dist/resources/extensions/gsd/doctor-history.js +0 -65
  70. package/dist/resources/extensions/gsd/doctor-state-checks.js +0 -509
  71. package/dist/resources/extensions/gsd/doctor-workspace-checks.js +0 -91
  72. package/src/resources/extensions/gsd/doctor-history.ts +0 -81
  73. package/src/resources/extensions/gsd/doctor-state-checks.ts +0 -527
  74. package/src/resources/extensions/gsd/doctor-workspace-checks.ts +0 -97
  75. package/src/resources/extensions/gsd/tests/doctor-history-public-api.test.ts +0 -25
  76. /package/dist/web/standalone/.next/static/{ue2JDvA1wboxPBPeblD5N → QoErQJVEEGAIpfz1TMIHj}/_buildManifest.js +0 -0
  77. /package/dist/web/standalone/.next/static/{ue2JDvA1wboxPBPeblD5N → QoErQJVEEGAIpfz1TMIHj}/_ssgManifest.js +0 -0
@@ -1,97 +0,0 @@
1
- import { existsSync, realpathSync } from "node:fs";
2
- import { execFileSync } from "node:child_process";
3
- import { resolve } from "node:path";
4
-
5
- import { GIT_NO_PROMPT_ENV } from "./git-constants.js";
6
- import { createRepositoryRegistryFromPreferences } from "./repository-registry.js";
7
-
8
- import type { DoctorIssue } from "./doctor-types.js";
9
- import type { GSDPreferences } from "./preferences.js";
10
-
11
- /**
12
- * Resolve the git working-tree root for a path, or null if it is not a repo.
13
- * Used by the workspace-repository probe to check that a declared child path is
14
- * itself a git repository (not merely nested inside the parent's repo).
15
- */
16
- function resolveGitToplevel(cwd: string): string | null {
17
- try {
18
- const out = execFileSync("git", ["rev-parse", "--show-toplevel"], {
19
- cwd,
20
- stdio: ["ignore", "pipe", "pipe"],
21
- encoding: "utf-8",
22
- env: GIT_NO_PROMPT_ENV,
23
- }).trim();
24
- return out ? resolve(out) : null;
25
- } catch {
26
- return null;
27
- }
28
- }
29
-
30
- /** realpath that falls back to the resolved path if the link cannot be read. */
31
- function realpathSafe(p: string): string {
32
- try {
33
- return realpathSync(p);
34
- } catch {
35
- return resolve(p);
36
- }
37
- }
38
-
39
- /**
40
- * Parent-workspace probe (#818): validate that every declared child repository
41
- * exists on disk and is a git repository at its own root. The registry only
42
- * checks paths stay inside the project root; it never checks existence or
43
- * git-ness, so a typo'd path (e.g. `frontned`) would otherwise build cleanly
44
- * and silently produce "no problems found." No-op for single-repo projects.
45
- */
46
- export function checkWorkspaceRepositoryHealth(
47
- basePath: string,
48
- prefs: GSDPreferences | undefined,
49
- issues: DoctorIssue[],
50
- ): void {
51
- if (prefs?.workspace?.mode !== "parent") return;
52
- let registry;
53
- try {
54
- registry = createRepositoryRegistryFromPreferences(basePath, prefs);
55
- } catch (err) {
56
- issues.push({
57
- severity: "error",
58
- code: "invalid_preferences",
59
- scope: "project",
60
- unitId: "workspace",
61
- message: `workspace registry failed to build: ${err instanceof Error ? err.message : String(err)}`,
62
- fixable: false,
63
- });
64
- return;
65
- }
66
- for (const repo of registry.repositories) {
67
- if (repo.id === "project") continue;
68
- if (!existsSync(repo.root)) {
69
- issues.push({
70
- severity: "error",
71
- code: "workspace_repo_path_missing",
72
- scope: "project",
73
- unitId: `workspace.repositories.${repo.id}`,
74
- message: `declared repository "${repo.id}" path does not exist on disk: ${repo.root}`,
75
- fixable: false,
76
- });
77
- continue;
78
- }
79
- // Must be a repo at its OWN root — a plain dir nested in the parent repo
80
- // would otherwise pass a bare `nativeIsRepo` check via the enclosing
81
- // parent's .git. Compare on realpath so symlinked temp roots (macOS
82
- // /var vs /private/var) don't cause a false mismatch.
83
- const toplevel = resolveGitToplevel(repo.root);
84
- const declaredReal = realpathSafe(repo.root);
85
- const toplevelReal = toplevel ? realpathSafe(toplevel) : null;
86
- if (toplevelReal !== declaredReal) {
87
- issues.push({
88
- severity: "warning",
89
- code: "workspace_repo_not_a_repo",
90
- scope: "project",
91
- unitId: `workspace.repositories.${repo.id}`,
92
- message: `declared repository "${repo.id}" path is not a git repository at its own root: ${repo.root}`,
93
- fixable: false,
94
- });
95
- }
96
- }
97
- }
@@ -1,25 +0,0 @@
1
- import test from "node:test";
2
- import assert from "node:assert/strict";
3
- import { mkdirSync, mkdtempSync, rmSync } from "node:fs";
4
- import { tmpdir } from "node:os";
5
- import { join } from "node:path";
6
-
7
- import { readDoctorHistory, runGSDDoctor, type DoctorHistoryEntry } from "../doctor.ts";
8
-
9
- test("doctor.ts preserves readDoctorHistory public API and records doctor runs", async (t) => {
10
- const base = mkdtempSync(join(tmpdir(), "gsd-doctor-history-api-"));
11
- mkdirSync(join(base, ".gsd"), { recursive: true });
12
-
13
- t.after(() => rmSync(base, { recursive: true, force: true }));
14
-
15
- const report = await runGSDDoctor(base, { fix: false });
16
- const history: DoctorHistoryEntry[] = await readDoctorHistory(base, 1);
17
-
18
- assert.equal(history.length, 1);
19
- assert.equal(history[0].ok, report.ok);
20
- assert.equal(history[0].errors, report.issues.filter(issue => issue.severity === "error").length);
21
- assert.equal(history[0].warnings, report.issues.filter(issue => issue.severity === "warning").length);
22
- assert.equal(history[0].fixes, 0);
23
- assert.ok(Array.isArray(history[0].codes));
24
- assert.equal(typeof history[0].summary, "string");
25
- });