@opengsd/gsd-core 1.16.0 → 1.17.0
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 +1 -1
- package/.claude-plugin/plugin.json +1 -2
- package/.opencode/plugins/gsd-core.js +251 -1
- package/.opencode/plugins/gsd-statusline/tui.tsx +55 -0
- package/GEMINI.md +1 -1
- package/agents/gsd-debug-session-manager.compact.md +6 -0
- package/agents/gsd-debug-session-manager.md +6 -0
- package/bin/gsd-mcp-server.js +3 -1
- package/bin/install.js +361 -94
- package/gsd-core/bin/gsd-tools.cjs +17 -2
- package/gsd-core/bin/lib/adr-parser.cjs +37 -5
- package/gsd-core/bin/lib/capability-registry.cjs +132 -80
- package/gsd-core/bin/lib/capability-validator.cjs +2 -1
- package/gsd-core/bin/lib/capability-writer.cjs +2 -1
- package/gsd-core/bin/lib/commands.cjs +28 -8
- package/gsd-core/bin/lib/gate-context-drift.cjs +5 -4
- package/gsd-core/bin/lib/gate-ui-safety.cjs +2 -1
- package/gsd-core/bin/lib/graphify.cjs +3 -2
- package/gsd-core/bin/lib/init.cjs +32 -12
- package/gsd-core/bin/lib/install-engine.cjs +11 -0
- package/gsd-core/bin/lib/install-shadow-report.cjs +12 -0
- package/gsd-core/bin/lib/installer-migrations/011-opencode-mcp-no-prompts.cjs +99 -0
- package/gsd-core/bin/lib/installer-migrations.cjs +54 -1
- package/gsd-core/bin/lib/jsonc-edit.cjs +418 -0
- package/gsd-core/bin/lib/loop-host-contract.cjs +2 -1
- package/gsd-core/bin/lib/mcp-server.cjs +5 -1
- package/gsd-core/bin/lib/opencode-mcp-entry.cjs +39 -0
- package/gsd-core/bin/lib/opencode-version.cjs +486 -0
- package/gsd-core/bin/lib/phase.cjs +21 -0
- package/gsd-core/bin/lib/quick-batch-dispatch.cjs +2 -1
- package/gsd-core/bin/lib/runtime-artifact-conversion.cjs +95 -4
- package/gsd-core/bin/lib/runtime-hooks-surface.cjs +58 -3
- package/gsd-core/bin/lib/runtime-slash.cjs +13 -0
- package/gsd-core/bin/lib/smart-entry.cjs +92 -53
- package/gsd-core/bin/lib/state-transition.cjs +67 -9
- package/gsd-core/bin/lib/state.cjs +454 -66
- package/gsd-core/bin/lib/update-context.cjs +18 -1
- package/gsd-core/bin/lib/verification.cjs +107 -17
- package/gsd-core/workflows/code-review.md +16 -1
- package/gsd-core/workflows/execute-phase/steps/executor-isolation-dispatch.md +1 -1
- package/gsd-core/workflows/execute-phase.md +3 -1
- package/gsd-core/workflows/resume-project.md +14 -10
- package/hooks/dist/gsd-check-update.js +26 -20
- package/hooks/dist/gsd-context-monitor.js +14 -5
- package/hooks/dist/gsd-secret-read-guard.js +117 -1
- package/hooks/dist/gsd-statusline.js +321 -22
- package/hooks/gsd-check-update.js +26 -20
- package/hooks/gsd-context-monitor.js +14 -5
- package/hooks/gsd-secret-read-guard.js +117 -1
- package/hooks/gsd-statusline.js +321 -22
- package/package.json +1 -1
- package/scripts/gen-capability-registry.cjs +7 -1
- package/scripts/gen-loop-host-contract.cjs +4 -1
- package/scripts/lib/macos-conformance-tier.generated.cjs +4 -0
- package/scripts/lib/platform-conformance-tier.generated.cjs +10 -0
- package/scripts/mutation-matrix.cjs +3 -1
- package/scripts/release-tarball-smoke.cjs +14 -7
- package/vscode/package.json +1 -1
|
@@ -1593,7 +1593,16 @@ function dispatchOverlayCapabilityCommand({ command, args, cwd, raw, error, load
|
|
|
1593
1593
|
const fsx = require('node:fs');
|
|
1594
1594
|
const os = require('node:os');
|
|
1595
1595
|
const { REVIEWER_LANES, mergeReviewerLanes } = require('./lib/review-lane-descriptor.cjs');
|
|
1596
|
-
const { resolveLanePlan, resolveLaneEffort, resolveLaneBudget } = require('./lib/review-lane-invocation.cjs');
|
|
1596
|
+
const { resolveLanePlan: resolveLanePlanBase, resolveLaneEffort, resolveLaneBudget } = require('./lib/review-lane-invocation.cjs');
|
|
1597
|
+
// OpenCode 2.x argv differs from 1.x (no --variant; effort rides on the model as `#variant`;
|
|
1598
|
+
// ADR-5331 D5/D8). The generation is probed lazily, only when the opencode lane is resolved.
|
|
1599
|
+
const resolveLanePlan = (laneInput) => {
|
|
1600
|
+
if (!laneInput || !laneInput.lane || laneInput.lane.slug !== 'opencode') return resolveLanePlanBase(laneInput);
|
|
1601
|
+
const ocv = require('./lib/opencode-version.cjs');
|
|
1602
|
+
const adapted = ocv.adaptLaneInputForGeneration(laneInput, ocv.detectOpencodeGeneration().generation);
|
|
1603
|
+
for (const w of adapted.warnings) process.stderr.write('gsd: ' + w + '\n');
|
|
1604
|
+
return ocv.adaptLanePlanForGeneration(resolveLanePlanBase(adapted.input), ocv.detectOpencodeGeneration().generation);
|
|
1605
|
+
};
|
|
1597
1606
|
const modelCatalog = require('./lib/model-catalog.cjs');
|
|
1598
1607
|
const runner = require('./lib/review-lane-runner.cjs');
|
|
1599
1608
|
const cfgLoader = require('./lib/config-loader.cjs');
|
|
@@ -2675,8 +2684,14 @@ function dispatchOverlayCapabilityCommand({ command, args, cwd, raw, error, load
|
|
|
2675
2684
|
'gsd-executor', readGsdEffectiveModelOverrides(cwd), null);
|
|
2676
2685
|
model = resolveDispatchModelPin('gsd-executor', pinned);
|
|
2677
2686
|
}
|
|
2687
|
+
let orchestratorExec = runtimeEntry?.runtime?.orchestratorExec;
|
|
2688
|
+
if (orchestratorExec && orchestratorExec.cwdFlag === '--dir' && runtimeId === 'opencode') {
|
|
2689
|
+
// OpenCode 2.x `run` has no --dir: bind the worktree through the process cwd (ADR-5331 D5).
|
|
2690
|
+
const ocv = require('./lib/opencode-version.cjs');
|
|
2691
|
+
orchestratorExec = ocv.adaptOrchestratorExecForGeneration(orchestratorExec, ocv.detectOpencodeGeneration().generation);
|
|
2692
|
+
}
|
|
2678
2693
|
const resolution = hostIntegration.resolveOrchestratorExec(
|
|
2679
|
-
|
|
2694
|
+
orchestratorExec,
|
|
2680
2695
|
cwdTarget,
|
|
2681
2696
|
promptArg,
|
|
2682
2697
|
model,
|
|
@@ -221,13 +221,45 @@ function classifyHeader(normalizedHeader) {
|
|
|
221
221
|
}
|
|
222
222
|
return null;
|
|
223
223
|
}
|
|
224
|
+
// A list item starts with a bullet (-, *, +) or an ordered marker (1. or 1)).
|
|
225
|
+
const LIST_MARKER = /^([-*+]|\d+[.)])\s+/;
|
|
226
|
+
/**
|
|
227
|
+
* Split a section body into one entry per top-level list item (#5227).
|
|
228
|
+
*
|
|
229
|
+
* A line that opens a list item starts a new entry with its marker stripped. Any
|
|
230
|
+
* other non-blank line, and any marker line indented deeper than the first item
|
|
231
|
+
* (a nested sub-bullet), joins the current entry with a single space, so a
|
|
232
|
+
* hard-wrapped item stays one entry. Text before the first marker is its own
|
|
233
|
+
* entry. A block with no list marker at all keeps one entry per line, so a plain
|
|
234
|
+
* `## Status` body still yields its first line.
|
|
235
|
+
*/
|
|
224
236
|
function splitEntries(blockText) {
|
|
225
|
-
|
|
237
|
+
const lines = (typeof blockText === 'string' ? blockText : '')
|
|
226
238
|
.split(/\r?\n/)
|
|
227
|
-
.
|
|
228
|
-
|
|
229
|
-
.map((line) => line.
|
|
230
|
-
|
|
239
|
+
.filter((line) => line.trim() !== '');
|
|
240
|
+
if (!lines.some((line) => LIST_MARKER.test(line.trim())))
|
|
241
|
+
return lines.map((line) => line.trim());
|
|
242
|
+
const entries = [];
|
|
243
|
+
let topIndent = -1;
|
|
244
|
+
let open = false;
|
|
245
|
+
for (const raw of lines) {
|
|
246
|
+
const text = raw.trim();
|
|
247
|
+
const indent = raw.length - raw.trimStart().length;
|
|
248
|
+
const isMarker = LIST_MARKER.test(text);
|
|
249
|
+
if (isMarker && (topIndent < 0 || indent <= topIndent)) {
|
|
250
|
+
if (topIndent < 0)
|
|
251
|
+
topIndent = indent;
|
|
252
|
+
entries.push(text.replace(LIST_MARKER, '').trim());
|
|
253
|
+
open = true;
|
|
254
|
+
}
|
|
255
|
+
else if (open) {
|
|
256
|
+
entries[entries.length - 1] = `${entries[entries.length - 1]} ${text}`;
|
|
257
|
+
}
|
|
258
|
+
else {
|
|
259
|
+
entries.push(text);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return entries.filter(Boolean);
|
|
231
263
|
}
|
|
232
264
|
/**
|
|
233
265
|
* Thin adapter: wraps the seam's `collectSections` to produce the same
|