@opengsd/gsd-core 1.6.1 → 1.7.0-rc.2
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/.claude-plugin/marketplace.json +20 -0
- package/.claude-plugin/plugin.json +1 -1
- package/.opencode/plugins/gsd-core.js +711 -0
- package/agents/gsd-advisor-researcher.md +2 -0
- package/agents/gsd-ai-researcher.md +1 -1
- package/agents/gsd-assumptions-analyzer.md +2 -0
- package/agents/gsd-code-fixer.md +2 -0
- package/agents/gsd-code-reviewer.md +2 -0
- package/agents/gsd-codebase-mapper.md +2 -0
- package/agents/gsd-debugger.md +2 -0
- package/agents/gsd-doc-writer.md +2 -0
- package/agents/gsd-eval-auditor.md +2 -0
- package/agents/gsd-executor.md +9 -6
- package/agents/gsd-integration-checker.md +2 -0
- package/agents/gsd-nyquist-auditor.md +2 -0
- package/agents/gsd-phase-researcher.md +2 -0
- package/agents/gsd-plan-checker.md +2 -0
- package/agents/gsd-planner.md +2 -0
- package/agents/gsd-project-researcher.md +2 -0
- package/agents/gsd-research-synthesizer.md +2 -0
- package/agents/gsd-roadmapper.md +2 -0
- package/agents/gsd-security-auditor.md +2 -0
- package/agents/gsd-ui-auditor.md +2 -0
- package/agents/gsd-ui-checker.md +2 -0
- package/agents/gsd-ui-researcher.md +2 -0
- package/agents/gsd-verifier.md +5 -2
- package/bin/gsd-mcp-server.js +31 -0
- package/bin/install.js +411 -1146
- package/commands/gsd/review.md +6 -0
- package/gemini-extension.json +1 -1
- package/gsd-core/bin/gsd-tools.cjs +134 -8
- package/gsd-core/bin/lib/adapter-declarative.cjs +35 -0
- package/gsd-core/bin/lib/adapter-imperative.cjs +52 -0
- package/gsd-core/bin/lib/assumption-delta.cjs +231 -0
- package/gsd-core/bin/lib/capability-lifecycle.cjs +7 -7
- package/gsd-core/bin/lib/capability-loader.cjs +45 -9
- package/gsd-core/bin/lib/capability-lock.cjs +2 -2
- package/gsd-core/bin/lib/capability-registry.cjs +891 -82
- package/gsd-core/bin/lib/capability-source.cjs +26 -11
- package/gsd-core/bin/lib/capability-validator.cjs +222 -2
- package/gsd-core/bin/lib/cli-skew-check.cjs +44 -0
- package/gsd-core/bin/lib/command-aliases.cjs +8 -0
- package/gsd-core/bin/lib/commands.cjs +2 -1
- package/gsd-core/bin/lib/config.cjs +27 -0
- package/gsd-core/bin/lib/embedding-adapter.cjs +27 -0
- package/gsd-core/bin/lib/external-descriptor-trust.cjs +70 -0
- package/gsd-core/bin/lib/frontmatter.cjs +53 -6
- package/gsd-core/bin/lib/handshake-serialized.cjs +70 -0
- package/gsd-core/bin/lib/hook-bus.cjs +81 -0
- package/gsd-core/bin/lib/host-integration-sdk.cjs +53 -0
- package/gsd-core/bin/lib/host-integration.cjs +469 -0
- package/gsd-core/bin/lib/init.cjs +35 -7
- package/gsd-core/bin/lib/install-engine.cjs +755 -0
- package/gsd-core/bin/lib/install-profiles.cjs +35 -4
- package/gsd-core/bin/lib/installer-migrations.cjs +1 -1
- package/gsd-core/bin/lib/mcp-server.cjs +194 -0
- package/gsd-core/bin/lib/milestone.cjs +68 -40
- package/gsd-core/bin/lib/model-adapter.cjs +50 -0
- package/gsd-core/bin/lib/phase-id.cjs +18 -0
- package/gsd-core/bin/lib/phase.cjs +57 -90
- package/gsd-core/bin/lib/phases-command-router.cjs +4 -3
- package/gsd-core/bin/lib/planning-workspace.cjs +1 -1
- package/gsd-core/bin/lib/probe-core.cjs +132 -2
- package/gsd-core/bin/lib/review-reviewer-selection.cjs +129 -13
- package/gsd-core/bin/lib/roadmap-command-router.cjs +3 -2
- package/gsd-core/bin/lib/roadmap-parser.cjs +21 -11
- package/gsd-core/bin/lib/roadmap-upgrade.cjs +3 -2
- package/gsd-core/bin/lib/roadmap.cjs +33 -22
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +65 -9
- package/gsd-core/bin/lib/runtime-artifact-install-plan.cjs +54 -4
- package/gsd-core/bin/lib/runtime-artifact-layout.cjs +5 -2
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +1 -1
- package/gsd-core/bin/lib/runtime-name-policy.cjs +160 -30
- package/gsd-core/bin/lib/shell-command-projection.cjs +16 -0
- package/gsd-core/bin/lib/stale-bake-guard.cjs +254 -0
- package/gsd-core/bin/lib/state-command-router.cjs +4 -0
- package/gsd-core/bin/lib/state-io.cjs +55 -0
- package/gsd-core/bin/lib/state-transition.cjs +1603 -0
- package/gsd-core/bin/lib/state.cjs +327 -683
- package/gsd-core/bin/lib/surface.cjs +4 -1
- package/gsd-core/bin/lib/validate.cjs +2 -1
- package/gsd-core/bin/lib/verify.cjs +6 -4
- package/gsd-core/bin/lib/workstream-inventory-builder.cjs +12 -2
- package/gsd-core/bin/lib/workstream-inventory.cjs +28 -0
- package/gsd-core/bin/lib/workstream.cjs +4 -4
- package/gsd-core/bin/shared/config-schema.manifest.json +9 -0
- package/gsd-core/references/agent-skills-bootstrap.md +60 -0
- package/gsd-core/references/honest-verifier.md +105 -0
- package/gsd-core/references/model-profiles.md +27 -0
- package/gsd-core/references/reviewer-instances.md +99 -0
- package/gsd-core/workflows/autonomous.md +30 -32
- package/gsd-core/workflows/complete-milestone.md +6 -10
- package/gsd-core/workflows/execute-phase.md +1 -1
- package/gsd-core/workflows/forensics.md +3 -3
- package/gsd-core/workflows/help/modes/full.md +1 -1
- package/gsd-core/workflows/manager.md +15 -15
- package/gsd-core/workflows/milestone-summary.md +3 -3
- package/gsd-core/workflows/new-milestone.md +6 -0
- package/gsd-core/workflows/plan-phase/steps/closed-phase-gate.md +42 -0
- package/gsd-core/workflows/plan-phase/steps/prd-express-path.md +102 -0
- package/gsd-core/workflows/plan-phase/steps/windows-troubleshooting.md +23 -0
- package/gsd-core/workflows/plan-phase.md +4 -159
- package/gsd-core/workflows/review.md +33 -2
- package/gsd-core/workflows/thread.md +4 -4
- package/gsd-core/workflows/verify-phase.md +11 -4
- package/gsd-core/workflows/verify-work.md +1 -2
- package/hooks/dist/gsd-graphify-update.sh +7 -1
- package/hooks/gsd-graphify-update.sh +7 -1
- package/package.json +6 -4
- package/scripts/ci-test-scope.cjs +38 -9
- package/scripts/lint-allow-test-rule-refs.allowlist.json +0 -1
- package/scripts/lint-regression-test-names.allowlist.json +3 -0
- package/scripts/lint-test-file-count.allowlist.json +19 -5
- package/scripts/mutation-matrix.cjs +45 -3
- package/scripts/prompt-injection-scan.sh +8 -0
- package/scripts/run-tests.cjs +51 -1
- package/scripts/sync-manifest-versions.cjs +66 -14
- package/skills/gsd-review/SKILL.md +6 -0
- package/scripts/lint-windows-test-portability.cjs +0 -178
|
@@ -67,6 +67,7 @@ var __importStar = (this && this.__importStar) || (function () {
|
|
|
67
67
|
};
|
|
68
68
|
})();
|
|
69
69
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
70
|
+
exports.readHostVersion = readHostVersion;
|
|
70
71
|
exports.loadRegistry = loadRegistry;
|
|
71
72
|
const fs = __importStar(require("node:fs"));
|
|
72
73
|
const os = __importStar(require("node:os"));
|
|
@@ -110,17 +111,33 @@ function _setValidatorForTest(v) {
|
|
|
110
111
|
function _setGeneratorForTest(g) {
|
|
111
112
|
_generatorOverride = g;
|
|
112
113
|
}
|
|
113
|
-
/**
|
|
114
|
-
|
|
114
|
+
/**
|
|
115
|
+
* Resolve the running GSD version; fail-closed to '0.0.0' if it cannot be read.
|
|
116
|
+
*
|
|
117
|
+
* Prefer the authoritative `gsd-core/VERSION` the installer writes for EVERY runtime
|
|
118
|
+
* (libDir = gsd-core/bin/lib/, so `../../VERSION` = gsd-core/VERSION). This is reliable
|
|
119
|
+
* across all installed layouts — including runtimes that get no marker package.json, and
|
|
120
|
+
* local installs where the walked-up `../../../package.json` would resolve to the USER's
|
|
121
|
+
* own project and report a wrong version (#1920). Fall back to the runtime-root
|
|
122
|
+
* package.json for the dev/source tree, then fail-closed. Mirrors resolveVersionFrom()
|
|
123
|
+
* (#1383). `libDir` is injectable for tests; it defaults to this module's directory.
|
|
124
|
+
*/
|
|
125
|
+
function readHostVersion(libDir = __dirname) {
|
|
126
|
+
const SEMVER_PREFIX = /^\d+\.\d+\.\d+/;
|
|
115
127
|
try {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
return typeof pkg.version === 'string' && pkg.version ? pkg.version : '0.0.0';
|
|
128
|
+
const v = fs.readFileSync(path.join(libDir, '..', '..', 'VERSION'), 'utf8').trim();
|
|
129
|
+
if (SEMVER_PREFIX.test(v))
|
|
130
|
+
return v;
|
|
120
131
|
}
|
|
121
|
-
catch {
|
|
122
|
-
|
|
132
|
+
catch { /* not an installed tree (no gsd-core/VERSION) */ }
|
|
133
|
+
try {
|
|
134
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment
|
|
135
|
+
const pkg = require(path.join(libDir, '..', '..', '..', 'package.json'));
|
|
136
|
+
if (pkg && typeof pkg.version === 'string' && SEMVER_PREFIX.test(pkg.version))
|
|
137
|
+
return pkg.version;
|
|
123
138
|
}
|
|
139
|
+
catch { /* runtime root has no package.json */ }
|
|
140
|
+
return '0.0.0';
|
|
124
141
|
}
|
|
125
142
|
/**
|
|
126
143
|
* Canonicalize a directory path for dedup/scope-escalation comparison. #1459 finding 1 (HIGH): the dedup
|
|
@@ -397,6 +414,10 @@ function loadRegistry(options = {}) {
|
|
|
397
414
|
const ledgerMod = require('./capability-ledger.cjs');
|
|
398
415
|
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment
|
|
399
416
|
const consentMod = require('./capability-consent.cjs');
|
|
417
|
+
// ADR-1239 Phase C-2 (#1681): load-time configHome confinement for installed
|
|
418
|
+
// third-party descriptors. Accessed via module ref for stub compatibility.
|
|
419
|
+
// eslint-disable-next-line @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment
|
|
420
|
+
const externalDescriptorTrust = require('./external-descriptor-trust.cjs');
|
|
400
421
|
const cwd = options.cwd || process.cwd();
|
|
401
422
|
const hostVersion = options.hostVersion || readHostVersion();
|
|
402
423
|
// The user-owned consent home — SAME `gsdHome || GSD_HOME || homedir()` rule the CLI uses, so the
|
|
@@ -681,6 +702,20 @@ function loadRegistry(options = {}) {
|
|
|
681
702
|
skip('cross-capability validation failed: ' + crossErrs.slice(0, 3).join('; '));
|
|
682
703
|
continue;
|
|
683
704
|
}
|
|
705
|
+
// ADR-1239 Phase C-2 (#1681): load-time configHome confinement — reject
|
|
706
|
+
// (skip + warn) any installed third-party descriptor whose declared
|
|
707
|
+
// destSubpath escapes the user-approved configHome, BEFORE it is composed.
|
|
708
|
+
// Defense-in-depth on top of the install-time gate (#1679 AC3).
|
|
709
|
+
if (typeof options.configHome === 'string' && options.configHome.length > 0) {
|
|
710
|
+
try {
|
|
711
|
+
externalDescriptorTrust.assertDescriptorConfined(cap, options.configHome);
|
|
712
|
+
}
|
|
713
|
+
catch (confineErr) {
|
|
714
|
+
acceptedMap.delete(id);
|
|
715
|
+
skip('configHome confinement rejected: ' + errMessage(confineErr));
|
|
716
|
+
continue;
|
|
717
|
+
}
|
|
718
|
+
}
|
|
684
719
|
// Accepted.
|
|
685
720
|
overlayCaps.push(cap);
|
|
686
721
|
acceptedIds.add(id);
|
|
@@ -761,4 +796,5 @@ function loadRegistry(options = {}) {
|
|
|
761
796
|
return withOverlayMeta(base, meta);
|
|
762
797
|
}
|
|
763
798
|
}
|
|
764
|
-
|
|
799
|
+
// readHostVersion is exported for the #1920 regression (VERSION-first host-version resolution).
|
|
800
|
+
module.exports = { loadRegistry, readHostVersion, _setValidatorForTest, _setGeneratorForTest };
|
|
@@ -42,7 +42,7 @@ const node_os_1 = __importDefault(require("node:os"));
|
|
|
42
42
|
const node_crypto_1 = __importDefault(require("node:crypto"));
|
|
43
43
|
/* eslint-disable @typescript-eslint/no-require-imports */
|
|
44
44
|
const ledgerMod = require('./capability-ledger.cjs');
|
|
45
|
-
const { execTool } = require('./shell-command-projection.cjs');
|
|
45
|
+
const { execTool, retryRenameSync } = require('./shell-command-projection.cjs');
|
|
46
46
|
/* eslint-enable @typescript-eslint/no-require-imports */
|
|
47
47
|
// ---------------------------------------------------------------------------
|
|
48
48
|
// Constants
|
|
@@ -475,7 +475,7 @@ function acquireLock(lockPath, opts) {
|
|
|
475
475
|
// Steal atomically (only one racer can rename the inode).
|
|
476
476
|
const stolen = `${lockPath}.stale-${process.pid}-${Date.now()}-${node_crypto_1.default.randomBytes(4).toString('hex')}`;
|
|
477
477
|
try {
|
|
478
|
-
|
|
478
|
+
retryRenameSync(lockPath, stolen);
|
|
479
479
|
}
|
|
480
480
|
catch {
|
|
481
481
|
return null;
|