@danmoisan/drm-copilot-mcp 1.0.20 → 1.0.21

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/out/mcp-server.js CHANGED
@@ -3646,7 +3646,12 @@ var require_fast_uri = __commonJS({
3646
3646
  }
3647
3647
  function resolve4(baseURI, relativeURI, options) {
3648
3648
  const schemelessOptions = options ? Object.assign({ scheme: "null" }, options) : { scheme: "null" };
3649
- const resolved = resolveComponent(parse3(baseURI, schemelessOptions), parse3(relativeURI, schemelessOptions), schemelessOptions, true);
3649
+ const { parsed: baseParsed, malformedAuthorityOrPort: baseMalformed } = parseWithStatus(baseURI, schemelessOptions);
3650
+ const { parsed: relativeParsed, malformedAuthorityOrPort: relativeMalformed } = parseWithStatus(relativeURI, schemelessOptions);
3651
+ if (baseMalformed || relativeMalformed) {
3652
+ throw new Error(baseParsed.error || relativeParsed.error || "URI is malformed.");
3653
+ }
3654
+ const resolved = resolveComponent(baseParsed, relativeParsed, schemelessOptions, true);
3650
3655
  schemelessOptions.skipEscape = true;
3651
3656
  return serialize(resolved, schemelessOptions);
3652
3657
  }
@@ -3772,6 +3777,7 @@ var require_fast_uri = __commonJS({
3772
3777
  }
3773
3778
  var URI_PARSE = /^(?:([^#/:?]+):)?(?:\/\/((?:([^#/?@]*)@)?(\[[^#/?\]]+\]|[^#/:?]*)(?::(\d*))?))?([^#?]*)(?:\?([^#]*))?(?:#((?:.|[\n\r])*))?/u;
3774
3779
  var AUTHORITY_PREFIX = /^(?:[^#/:?]+:)?\/\/([^/?#]*)/;
3780
+ var AUTHORITY_INTRODUCER_REGION = /^(?:[^#/:?]+:)?([/\\\t\n\r]*)/;
3775
3781
  function getParseError(parsed, matches) {
3776
3782
  if (matches[2] !== void 0 && parsed.path && parsed.path[0] !== "/") {
3777
3783
  return 'URI path must start with "/" when authority is present.';
@@ -3806,6 +3812,20 @@ var require_fast_uri = __commonJS({
3806
3812
  parsed.error = "URI authority must not contain a literal backslash.";
3807
3813
  malformedAuthorityOrPort = true;
3808
3814
  }
3815
+ const introducerMatch = uri.match(AUTHORITY_INTRODUCER_REGION);
3816
+ if (introducerMatch !== null) {
3817
+ const region = introducerMatch[1];
3818
+ const normalizedRegion = region.replace(/[\t\n\r]/g, "");
3819
+ if (normalizedRegion.length >= 2) {
3820
+ if (normalizedRegion.slice(0, 2) !== "//") {
3821
+ parsed.error = parsed.error || "URI authority must not contain a literal backslash.";
3822
+ malformedAuthorityOrPort = true;
3823
+ } else if (region.length !== normalizedRegion.length) {
3824
+ parsed.error = parsed.error || "URI authority introducer must not contain whitespace.";
3825
+ malformedAuthorityOrPort = true;
3826
+ }
3827
+ }
3828
+ }
3809
3829
  const matches = uri.match(URI_PARSE);
3810
3830
  if (matches) {
3811
3831
  parsed.scheme = matches[1];
@@ -23307,7 +23327,10 @@ function validateCodexModelRoutingReceipts(value) {
23307
23327
  }
23308
23328
  function delegatedAgentNames(state) {
23309
23329
  const result = /* @__PURE__ */ new Set();
23310
- const receipts = state["delegation_receipts"];
23330
+ let receipts = state["delegation_receipts"];
23331
+ if (isObject4(receipts)) {
23332
+ receipts = receipts["agents"];
23333
+ }
23311
23334
  if (!Array.isArray(receipts)) {
23312
23335
  return result;
23313
23336
  }
@@ -23701,7 +23724,10 @@ function validateCodexTopologyReceipts(value) {
23701
23724
  }
23702
23725
  function delegatedAgentNames2(state) {
23703
23726
  const result = /* @__PURE__ */ new Set();
23704
- const receipts = state["delegation_receipts"];
23727
+ let receipts = state["delegation_receipts"];
23728
+ if (isObject5(receipts)) {
23729
+ receipts = receipts["agents"];
23730
+ }
23705
23731
  if (!Array.isArray(receipts)) {
23706
23732
  return result;
23707
23733
  }
@@ -25354,6 +25380,9 @@ function stateList(state, key, expected) {
25354
25380
  return value;
25355
25381
  }
25356
25382
  function listReceipts(receipts) {
25383
+ if (isObject8(receipts)) {
25384
+ receipts = receipts["agents"];
25385
+ }
25357
25386
  if (!Array.isArray(receipts)) {
25358
25387
  return [];
25359
25388
  }
@@ -25764,7 +25793,10 @@ function isObject12(value) {
25764
25793
  }
25765
25794
  function delegatedAgents(state) {
25766
25795
  const agents = /* @__PURE__ */ new Set();
25767
- const receipts = state["delegation_receipts"];
25796
+ let receipts = state["delegation_receipts"];
25797
+ if (isObject12(receipts)) {
25798
+ receipts = receipts["agents"];
25799
+ }
25768
25800
  if (Array.isArray(receipts)) {
25769
25801
  for (const receipt of receipts) {
25770
25802
  if (!isObject12(receipt)) {
@@ -25867,6 +25899,7 @@ var STEP_STATUS_KEYS = [
25867
25899
  "step9_status",
25868
25900
  "step10_status"
25869
25901
  ];
25902
+ var AGENT_RECEIPT_NAMESPACE_KEY = "agents";
25870
25903
  var STEP_SPECIFIC_EXTRA_STATUS = /* @__PURE__ */ new Map([
25871
25904
  ["step6_status", /* @__PURE__ */ new Set(["blocked_remediation_loop_limit"])],
25872
25905
  [
@@ -25915,12 +25948,22 @@ function validateListDelegationReceipts(receipts) {
25915
25948
  }
25916
25949
  function validateNamespacedDelegationReceipts(receipts) {
25917
25950
  const errors = [];
25918
- const unsupportedKeys = Object.keys(receipts).filter((key) => key !== PROMOTION_RECEIPT_NAMESPACE_KEY).sort();
25951
+ const unsupportedKeys = Object.keys(receipts).filter(
25952
+ (key) => key !== AGENT_RECEIPT_NAMESPACE_KEY && key !== PROMOTION_RECEIPT_NAMESPACE_KEY
25953
+ ).sort();
25919
25954
  for (const key of unsupportedKeys) {
25920
25955
  errors.push(
25921
25956
  `Checkpoint delegation_receipts object contains unsupported key: ${key}`
25922
25957
  );
25923
25958
  }
25959
+ if (AGENT_RECEIPT_NAMESPACE_KEY in receipts) {
25960
+ const agentReceipts = receipts[AGENT_RECEIPT_NAMESPACE_KEY];
25961
+ if (!Array.isArray(agentReceipts)) {
25962
+ errors.push("Checkpoint delegation_receipts.agents must be a list.");
25963
+ } else {
25964
+ errors.push(...validateListDelegationReceipts(agentReceipts));
25965
+ }
25966
+ }
25924
25967
  const promotionReceipts = receipts[PROMOTION_RECEIPT_NAMESPACE_KEY];
25925
25968
  if (promotionReceipts === void 0 || promotionReceipts === null) {
25926
25969
  return errors;
@@ -26342,7 +26385,7 @@ function validatePlanText(text) {
26342
26385
  const seenPhases = [];
26343
26386
  const expectedTaskNum = /* @__PURE__ */ new Map();
26344
26387
  let foundTask = false;
26345
- const lines = text.split("\n");
26388
+ const lines = text.split(/\r\n|\n|\r/);
26346
26389
  lines.forEach((line, lineIndex) => {
26347
26390
  const lineNumber = lineIndex + 1;
26348
26391
  if (line.startsWith("### Phase ")) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@danmoisan/drm-copilot-mcp",
3
- "version": "1.0.20",
3
+ "version": "1.0.21",
4
4
  "description": "Stdio MCP server exposing drm-copilot repo-automation tools.",
5
5
  "license": "MIT",
6
6
  "type": "commonjs",
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -142,6 +142,10 @@ Update it after every completed step with:
142
142
  - `completed_steps`, `next_step`, `last_updated`
143
143
  - `step5_status` through `step10_status`
144
144
  - `delegation_receipts`, `blocked_reason`
145
+ - New checkpoints must store `delegation_receipts` as an object with a strict
146
+ `agents` list and an opaque `promotion` object. Strict receipt fields remain
147
+ unchanged, promotion payload values remain opaque, and readers retain
148
+ legacy top-level-list and promotion-only compatibility.
145
149
  - `skill_receipts`, `mcp_call_receipts`
146
150
  - `local_execution_overrides`, `delegation_bypasses`, `lifecycle_operations`
147
151
  - raw promotion MCP receipts under `delegation_receipts.promotion.potential_entry`, `delegation_receipts.promotion.issue`, and `delegation_receipts.promotion.feature_folder`
@@ -2,7 +2,7 @@ default_permissions = ":danger-full-access"
2
2
 
3
3
  [mcp_servers.drm-copilot]
4
4
  command = "npx"
5
- args = ["-y", "@danmoisan/drm-copilot-mcp@1.0.20"]
5
+ args = ["-y", "@danmoisan/drm-copilot-mcp@1.0.21"]
6
6
  required = true
7
7
  enabled_tools = [
8
8
  "collect_commit_context",