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

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