@boyingliu01/dsh-plugin-xp-gate 0.27.2 → 0.27.3

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.
@@ -68,7 +68,7 @@ export declare function expandEnv(value: string, env?: NodeJS.ProcessEnv): strin
68
68
  */
69
69
  export declare function resolveConfig(cfg: RawDelphiConfig, env?: NodeJS.ProcessEnv): ResolvedDelphiConfig;
70
70
  /** Read and resolve `.delphi-config.json` from a project root. */
71
- export declare function loadDelphiConfig(cwd: string, env?: NodeJS.ProcessEnv): ResolvedDelphiConfig;
71
+ export declare function loadDelphiConfig(cwd: string, env?: NodeJS.ProcessEnv, globalPath?: string): ResolvedDelphiConfig;
72
72
  /** Build the transport options a round needs from a resolved config. */
73
73
  export declare function toDelphiOptions(cfg: ResolvedDelphiConfig): DelphiOptions;
74
74
  export {};
@@ -1 +1 @@
1
- {"version":3,"file":"delphi-config.d.ts","sourceRoot":"","sources":["../src/delphi-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG5D,wDAAwD;AACxD,UAAU,SAAS;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtG;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACjD,SAAS,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,8EAA8E;AAC9E,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIrF;AAkCD;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAiFtB;AAED,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAetB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,aAAa,CAQxE"}
1
+ {"version":3,"file":"delphi-config.d.ts","sourceRoot":"","sources":["../src/delphi-config.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAG5D,wDAAwD;AACxD,UAAU,SAAS;IACjB,EAAE,CAAC,EAAE,MAAM,CAAA;IACX,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,IAAI,CAAC,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,UAAU,CAAC,EAAE,MAAM,CAAA;IACnB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,uEAAuE;IACvE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAClB;AAED,UAAU,UAAU;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAA;IACtG;;;OAGG;IACH,OAAO,CAAC,EAAE,SAAS,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,SAAS,CAAC,CAAA;IACjD,SAAS,CAAC,EAAE;QAAE,iBAAiB,CAAC,EAAE,MAAM,CAAC;QAAC,iBAAiB,CAAC,EAAE,MAAM,CAAA;KAAE,CAAA;CACvE;AAED,MAAM,WAAW,eAAgB,SAAQ,UAAU;IACjD,cAAc,CAAC,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,CAAA;CACtC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,KAAK,EAAE,UAAU,EAAE,CAAA;IAC5B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAA;IACjC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAA;CAC1B;AAED,8EAA8E;AAC9E,qBAAa,gBAAiB,SAAQ,KAAK;CAAG;AAE9C;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAIrF;AA0ED;;;;GAIG;AACH,wBAAgB,aAAa,CAC3B,GAAG,EAAE,eAAe,EACpB,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,oBAAoB,CAuBtB;AAsCD,kEAAkE;AAClE,wBAAgB,gBAAgB,CAC9B,GAAG,EAAE,MAAM,EACX,GAAG,GAAE,MAAM,CAAC,UAAwB,EACpC,UAAU,GAAE,MAAqE,GAChF,oBAAoB,CAkCtB;AAED,wEAAwE;AACxE,wBAAgB,eAAe,CAAC,GAAG,EAAE,oBAAoB,GAAG,aAAa,CAQxE"}
@@ -11,7 +11,8 @@
11
11
  * @covers AC-DSH-016-02
12
12
  */
13
13
  import { readFileSync } from "node:fs";
14
- import { resolve } from "node:path";
14
+ import { homedir } from "node:os";
15
+ import { join, resolve } from "node:path";
15
16
  import { validateSeats } from "./delphi.js";
16
17
  /** Raised when config on disk cannot be turned into a usable review setup. */
17
18
  export class DelphiSetupError extends Error {
@@ -54,23 +55,14 @@ function normalizeExperts(experts) {
54
55
  // Object form: the KEY is the role, which is how xp-gate writes it.
55
56
  return Object.entries(experts).map(([role, raw]) => ({ raw, role }));
56
57
  }
57
- /**
58
- * Turn raw config into a ready-to-run review setup.
59
- * Fails loudly and specifically: a missing key or an unexpanded placeholder is
60
- * the most common way a Delphi run silently degrades.
61
- */
62
- export function resolveConfig(cfg, env = process.env) {
63
- const profile = selectProfile(cfg);
64
- const normalized = normalizeExperts(profile.experts);
65
- // An expert may name its own provider; otherwise there must be a profile-wide
66
- // default. Resolve base_url/api_key per provider so mixed setups work.
67
- const providerNames = new Set(normalized.map((e) => e.raw.provider ?? profile.provider).filter((p) => !!p));
68
- if (providerNames.size === 0) {
58
+ /** Resolve every referenced provider's base_url + api_key, failing loudly. */
59
+ function resolveProviders(profile, needed, env) {
60
+ if (needed.size === 0) {
69
61
  throw new DelphiSetupError('No provider configured. Set "provider" on the profile or on each expert.');
70
62
  }
71
63
  const providerTable = profile.providers ?? {};
72
- const resolvedProviders = new Map();
73
- for (const name of providerNames) {
64
+ const resolved = new Map();
65
+ for (const name of needed) {
74
66
  const entry = providerTable[name];
75
67
  if (!entry) {
76
68
  throw new DelphiSetupError(`Provider "${name}" is not defined under "providers". ` +
@@ -89,8 +81,22 @@ export function resolveConfig(cfg, env = process.env) {
89
81
  ? `API key variable ${varName} is not set in the environment.`
90
82
  : `Provider "${name}" has no api_key.`);
91
83
  }
92
- resolvedProviders.set(name, { baseUrl, apiKey });
84
+ resolved.set(name, { baseUrl, apiKey });
93
85
  }
86
+ return resolved;
87
+ }
88
+ /**
89
+ * Turn raw config into a ready-to-run review setup.
90
+ * Fails loudly and specifically: a missing key or an unexpanded placeholder is
91
+ * the most common way a Delphi run silently degrades.
92
+ */
93
+ export function resolveConfig(cfg, env = process.env) {
94
+ const profile = selectProfile(cfg);
95
+ const normalized = normalizeExperts(profile.experts);
96
+ // An expert may name its own provider; otherwise there must be a profile-wide
97
+ // default. Resolve base_url/api_key per provider so mixed setups work.
98
+ const providerNames = new Set(normalized.map((e) => e.raw.provider ?? profile.provider).filter((p) => !!p));
99
+ const resolvedProviders = resolveProviders(profile, providerNames, env);
94
100
  const seats = normalized.map((e, i) => seatFromRaw(e.raw, i, e.role));
95
101
  // Surface an unexpanded placeholder as a config error, not a provider 404.
96
102
  for (const s of seats) {
@@ -99,6 +105,10 @@ export function resolveConfig(cfg, env = process.env) {
99
105
  }
100
106
  }
101
107
  validateSeats(seats);
108
+ return buildResult(profile, normalized, resolvedProviders, seats, cfg);
109
+ }
110
+ /** Assemble the final result after seats and providers validated. */
111
+ function buildResult(profile, normalized, resolvedProviders, seats, cfg) {
102
112
  // All seats share one gateway in the supported setup; require agreement so a
103
113
  // mixed list cannot silently send one seat's key to another host.
104
114
  const chosen = resolvedProviders.get(normalized[0].raw.provider ?? profile.provider ?? "");
@@ -124,14 +134,32 @@ export function resolveConfig(cfg, env = process.env) {
124
134
  };
125
135
  }
126
136
  /** Read and resolve `.delphi-config.json` from a project root. */
127
- export function loadDelphiConfig(cwd, env = process.env) {
137
+ export function loadDelphiConfig(cwd, env = process.env, globalPath = join(homedir(), ".config", "xp-gate", ".delphi-config.json")) {
138
+ // Global fallback (AC-DSH-016-03): the machine-wide config at
139
+ // ~/.config/xp-gate/.delphi-config.json is the single source of truth for
140
+ // every project. Without it, each repo needed its own copy — and reading a
141
+ // stale or differently-priced config from another project's directory caused
142
+ // real money loss (2026-10-03: an expensive overseas model burned the daily
143
+ // quota). A project-local config still wins, so per-project overrides work.
128
144
  const path = resolve(cwd, ".delphi-config.json");
129
145
  let raw;
130
146
  try {
131
147
  raw = readFileSync(path, "utf8");
132
148
  }
133
- catch {
134
- throw new DelphiSetupError(`No .delphi-config.json found at ${path}.`);
149
+ catch (projectError) {
150
+ // Fall back ONLY when the project file is genuinely absent (ENOENT); any
151
+ // other read error must surface rather than silently route this run to
152
+ // another config. Same semantics as delphi-external-review.cjs, which
153
+ // gates the fallback on existsSync (walkthrough R8 MA-01).
154
+ if (projectError?.code !== "ENOENT") {
155
+ throw new DelphiSetupError(`Cannot read ${path}: ${projectError.message}`);
156
+ }
157
+ try {
158
+ raw = readFileSync(globalPath, "utf8");
159
+ }
160
+ catch {
161
+ throw new DelphiSetupError(`No .delphi-config.json found at ${path} or the global location ${globalPath}.`);
162
+ }
135
163
  }
136
164
  let parsed;
137
165
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"delphi-config.js","sourceRoot":"","sources":["../src/delphi-config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"delphi-config.js","sourceRoot":"","sources":["../src/delphi-config.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@boyingliu01/dsh-plugin-xp-gate",
3
- "version": "0.27.2",
3
+ "version": "0.27.3",
4
4
  "description": "XP-Gate deterministic quality gates + AI workflow skills as a DeepSeek Harness (DSH) native plugin: gate-check / gate-principles / gate-arch tools + 12 SKILL.md skills",
5
5
  "type": "module",
6
6
  "main": "./lib/index.js",
@@ -1,9 +1,9 @@
1
1
  # SKILLS/DELPHI-REVIEW KNOWLEDGE BASE
2
2
 
3
- **Generated:** 2026-10-16
4
- **Commit:** a5ee6191
3
+ **Generated:** 2026-10-17
4
+ **Commit:** b207e882
5
5
  **Branch:** main
6
- **Version:** 0.27.2.0
6
+ **Version:** 0.27.3.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Delphi Consensus Review — multi-round anonymous expert review (≥90% threshold, exactly 3 experts with distinct executable model IDs). Supports design, requirements, and code-walkthrough modes.
@@ -1,8 +1,7 @@
1
1
  ---
2
2
  name: grill-with-docs
3
- version: 1.0.0
4
3
  description: A relentless interview to sharpen a plan or design, which also creates docs (ADR's and glossary) as we go.
5
4
  disable-model-invocation: true
6
5
  ---
7
6
 
8
- Run a `/grilling` session, using the `/domain-modeling` skill.
7
+ Call the Skill tool twice, for "grilling" and "domain-modeling".
@@ -1,13 +1,30 @@
1
1
  ---
2
2
  name: grilling
3
- version: 1.0.0
4
3
  description: Grill the user relentlessly about a plan, decision, or idea. Use when the user wants to stress-test their thinking, or uses any 'grill' trigger phrases.
5
4
  ---
6
5
 
7
- Interview me relentlessly about every aspect of this until we reach a shared understanding. Walk down each branch of the decision tree, resolving dependencies between decisions one-by-one. For each question, provide your recommended answer.
6
+ Interview the user relentlessly until you reach a shared understanding. Map this as a **design tree**: every decision branches into the decisions that hang off it.
8
7
 
9
- Ask the questions one at a time, waiting for feedback on each question before continuing. Asking multiple questions at once is bewildering.
8
+ Work the tree in **rounds**. The **frontier** is every decision whose prerequisites are already settled: the questions you can ask _now_ without guessing at answers you haven't heard yet. Ask the whole frontier in one round: number each question and give your recommended answer. Then wait for the user's answers before the next round.
10
9
 
11
- If a *fact* can be found by exploring the environment (filesystem, tools, etc.), look it up rather than asking me. The *decisions*, though, are mine — put each one to me and wait for my answer.
10
+ Format a round like so:
12
11
 
13
- Do not act on it until I confirm we have reached a shared understanding.
12
+ ```
13
+ ❓ **Q1** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>
14
+
15
+ ➡️ <your recommended answer>
16
+
17
+ ---
18
+
19
+ ❓ **Q2** - **<question title>**: <question body, might be multiple paragraphs, including multiple choices>
20
+
21
+ ➡️ <your recommended answer>
22
+ ```
23
+
24
+ Word each question so "yes" accepts your recommended answer.
25
+
26
+ Each round the user answers reshapes the tree: settled decisions push the frontier outward and unblock questions that depended on them. Recompute the frontier and ask the next round. A question whose answer depends on another question still open in this round belongs to a _later_ round, not this one.
27
+
28
+ Finding _facts_ is your job, never the user's. When a frontier question needs a fact from the environment (filesystem, tools, etc.), dispatch a sub-agent to find it; don't ask the user for anything you could look up yourself. Don't block on it: a running exploration is an unsettled prerequisite, so only the questions downstream of it wait for the sub-agent to report; ask the rest of the frontier now. The _decisions_ are the user's: put each to them and wait.
29
+
30
+ The session is done when the frontier is empty: every branch of the design tree visited, nothing left silently assumed. Do not act on it until the user confirms you have reached a shared understanding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/SPRINT-FLOW KNOWLEDGE BASE
2
2
 
3
- **Generated:** 2026-10-16
4
- **Commit:** a5ee6191
3
+ **Generated:** 2026-10-17
4
+ **Commit:** b207e882
5
5
  **Branch:** main
6
- **Version:** 0.27.2.0
6
+ **Version:** 0.27.3.0
7
7
 
8
8
  ## OVERVIEW
9
9
  **6-phase** development pipeline (v2.0 compact redesign, Issue #290): PREP → DESIGN → BUILD → VERIFY → SHIP → CLOSE. Phase 3/6 BUILD default build mode is **ralph-loop** (REQ-level iteration, 40-67% token savings vs parallel). HARD-GATE between DESIGN (2/6) and BUILD (3/6): design must pass Delphi review (≥90% consensus) before any coding.
@@ -1,9 +1,9 @@
1
1
  # SKILLS/TEST-SPECIFICATION-ALIGNMENT KNOWLEDGE BASE
2
2
 
3
- **Generated:** 2026-10-16
4
- **Commit:** a5ee6191
3
+ **Generated:** 2026-10-17
4
+ **Commit:** b207e882
5
5
  **Branch:** main
6
- **Version:** 0.27.2.0
6
+ **Version:** 0.27.3.0
7
7
 
8
8
  ## OVERVIEW
9
9
  Test-Specification Alignment Engine — two-stage validation ensuring tests accurately reflect requirements and design specs.