apcore-mcp 0.13.0 → 0.15.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.
Files changed (120) hide show
  1. package/LICENSE +190 -0
  2. package/README.md +246 -19
  3. package/dist/acl-builder.d.ts +43 -0
  4. package/dist/acl-builder.d.ts.map +1 -0
  5. package/dist/acl-builder.js +115 -0
  6. package/dist/acl-builder.js.map +1 -0
  7. package/dist/adapters/annotations.d.ts.map +1 -1
  8. package/dist/adapters/annotations.js +23 -2
  9. package/dist/adapters/annotations.js.map +1 -1
  10. package/dist/adapters/errors.d.ts +37 -0
  11. package/dist/adapters/errors.d.ts.map +1 -1
  12. package/dist/adapters/errors.js +213 -17
  13. package/dist/adapters/errors.js.map +1 -1
  14. package/dist/adapters/id-normalizer.d.ts +41 -0
  15. package/dist/adapters/id-normalizer.d.ts.map +1 -0
  16. package/dist/adapters/id-normalizer.js +56 -0
  17. package/dist/adapters/id-normalizer.js.map +1 -0
  18. package/dist/adapters/index.d.ts +2 -2
  19. package/dist/adapters/index.d.ts.map +1 -1
  20. package/dist/adapters/index.js +2 -2
  21. package/dist/adapters/index.js.map +1 -1
  22. package/dist/adapters/{mcpErrorFormatter.d.ts → mcp-error-formatter.d.ts} +1 -1
  23. package/dist/adapters/mcp-error-formatter.d.ts.map +1 -0
  24. package/dist/adapters/{mcpErrorFormatter.js → mcp-error-formatter.js} +1 -1
  25. package/dist/adapters/mcp-error-formatter.js.map +1 -0
  26. package/dist/adapters/schema.d.ts +32 -4
  27. package/dist/adapters/schema.d.ts.map +1 -1
  28. package/dist/adapters/schema.js +190 -14
  29. package/dist/adapters/schema.js.map +1 -1
  30. package/dist/apcore-mcp.d.ts +25 -3
  31. package/dist/apcore-mcp.d.ts.map +1 -1
  32. package/dist/apcore-mcp.js +8 -0
  33. package/dist/apcore-mcp.js.map +1 -1
  34. package/dist/auth/hooks.d.ts +1 -1
  35. package/dist/auth/hooks.d.ts.map +1 -1
  36. package/dist/auth/hooks.js +10 -3
  37. package/dist/auth/hooks.js.map +1 -1
  38. package/dist/auth/index.d.ts +7 -0
  39. package/dist/auth/index.d.ts.map +1 -1
  40. package/dist/auth/index.js +7 -0
  41. package/dist/auth/index.js.map +1 -1
  42. package/dist/auth/jwt.d.ts +1 -2
  43. package/dist/auth/jwt.d.ts.map +1 -1
  44. package/dist/auth/jwt.js +22 -11
  45. package/dist/auth/jwt.js.map +1 -1
  46. package/dist/auth/types.d.ts +6 -3
  47. package/dist/auth/types.d.ts.map +1 -1
  48. package/dist/cli.d.ts.map +1 -1
  49. package/dist/cli.js +21 -1
  50. package/dist/cli.js.map +1 -1
  51. package/dist/config.d.ts.map +1 -1
  52. package/dist/config.js +6 -0
  53. package/dist/config.js.map +1 -1
  54. package/dist/constants.d.ts +37 -0
  55. package/dist/constants.d.ts.map +1 -0
  56. package/dist/constants.js +43 -0
  57. package/dist/constants.js.map +1 -0
  58. package/dist/converters/openai.d.ts +22 -0
  59. package/dist/converters/openai.d.ts.map +1 -1
  60. package/dist/converters/openai.js +128 -8
  61. package/dist/converters/openai.js.map +1 -1
  62. package/dist/index.d.ts +62 -7
  63. package/dist/index.d.ts.map +1 -1
  64. package/dist/index.js +329 -108
  65. package/dist/index.js.map +1 -1
  66. package/dist/markdown.d.ts +54 -0
  67. package/dist/markdown.d.ts.map +1 -0
  68. package/dist/markdown.js +125 -0
  69. package/dist/markdown.js.map +1 -0
  70. package/dist/middleware-builder.d.ts +41 -0
  71. package/dist/middleware-builder.d.ts.map +1 -0
  72. package/dist/middleware-builder.js +129 -0
  73. package/dist/middleware-builder.js.map +1 -0
  74. package/dist/server/async-task-bridge.d.ts +228 -0
  75. package/dist/server/async-task-bridge.d.ts.map +1 -0
  76. package/dist/server/async-task-bridge.js +579 -0
  77. package/dist/server/async-task-bridge.js.map +1 -0
  78. package/dist/server/context.d.ts +17 -2
  79. package/dist/server/context.d.ts.map +1 -1
  80. package/dist/server/context.js +29 -6
  81. package/dist/server/context.js.map +1 -1
  82. package/dist/server/factory.d.ts +57 -3
  83. package/dist/server/factory.d.ts.map +1 -1
  84. package/dist/server/factory.js +179 -9
  85. package/dist/server/factory.js.map +1 -1
  86. package/dist/server/listener.d.ts +3 -0
  87. package/dist/server/listener.d.ts.map +1 -1
  88. package/dist/server/listener.js +13 -2
  89. package/dist/server/listener.js.map +1 -1
  90. package/dist/server/observability.d.ts +51 -0
  91. package/dist/server/observability.d.ts.map +1 -0
  92. package/dist/server/observability.js +96 -0
  93. package/dist/server/observability.js.map +1 -0
  94. package/dist/server/router.d.ts +103 -3
  95. package/dist/server/router.d.ts.map +1 -1
  96. package/dist/server/router.js +289 -25
  97. package/dist/server/router.js.map +1 -1
  98. package/dist/server/trace-context.d.ts +40 -0
  99. package/dist/server/trace-context.d.ts.map +1 -0
  100. package/dist/server/trace-context.js +67 -0
  101. package/dist/server/trace-context.js.map +1 -0
  102. package/dist/server/transport.d.ts +47 -1
  103. package/dist/server/transport.d.ts.map +1 -1
  104. package/dist/server/transport.js +147 -4
  105. package/dist/server/transport.js.map +1 -1
  106. package/dist/types.d.ts +16 -5
  107. package/dist/types.d.ts.map +1 -1
  108. package/dist/types.js +12 -0
  109. package/dist/types.js.map +1 -1
  110. package/package.json +11 -8
  111. package/dist/adapters/idNormalizer.d.ts +0 -22
  112. package/dist/adapters/idNormalizer.d.ts.map +0 -1
  113. package/dist/adapters/idNormalizer.js +0 -30
  114. package/dist/adapters/idNormalizer.js.map +0 -1
  115. package/dist/adapters/mcpErrorFormatter.d.ts.map +0 -1
  116. package/dist/adapters/mcpErrorFormatter.js.map +0 -1
  117. package/dist/server/index.d.ts +0 -11
  118. package/dist/server/index.d.ts.map +0 -1
  119. package/dist/server/index.js +0 -8
  120. package/dist/server/index.js.map +0 -1
@@ -0,0 +1,115 @@
1
+ /**
2
+ * Build an apcore `ACL` instance from a Config Bus `mcp.acl` section.
3
+ *
4
+ * Config Bus schema (YAML, shared across Python/TS/Rust bridges):
5
+ *
6
+ * ```yaml
7
+ * mcp:
8
+ * acl:
9
+ * default_effect: deny # or "allow" — default "deny" (fail-secure)
10
+ * rules:
11
+ * - callers: ["role:admin"]
12
+ * targets: ["sys.*"]
13
+ * effect: allow
14
+ * description: "Admins can reach system modules"
15
+ * - callers: ["*"]
16
+ * targets: ["sys.reload", "sys.toggle"]
17
+ * effect: deny
18
+ * conditions:
19
+ * identity_types: ["human", "system"]
20
+ * ```
21
+ *
22
+ * Mirrors the Python `acl_builder.build_acl_from_config` contract. Invalid
23
+ * entries throw so misconfiguration fails loudly at startup.
24
+ */
25
+ const ALLOWED_EFFECTS = new Set(["allow", "deny"]);
26
+ const ALLOWED_RULE_KEYS = new Set([
27
+ "callers",
28
+ "targets",
29
+ "effect",
30
+ "description",
31
+ "conditions",
32
+ ]);
33
+ /**
34
+ * Construct an apcore `ACL` from a Config Bus `mcp.acl` mapping.
35
+ *
36
+ * Returns `null` when `aclConfig` is falsy (no ACL section configured).
37
+ * Throws on malformed entries.
38
+ */
39
+ export async function buildAclFromConfig(aclConfig) {
40
+ if (aclConfig === null || aclConfig === undefined)
41
+ return null;
42
+ if (typeof aclConfig !== "object" || Array.isArray(aclConfig)) {
43
+ throw new Error(`mcp.acl must be a mapping with 'rules' and optional 'default_effect', ` +
44
+ `got ${Array.isArray(aclConfig) ? "array" : typeof aclConfig}`);
45
+ }
46
+ const cfg = aclConfig;
47
+ const rulesRaw = cfg.rules;
48
+ // Validate rules type up-front — even for empty configs — to keep errors
49
+ // visible at startup rather than silently returning null.
50
+ if (rulesRaw !== undefined && !Array.isArray(rulesRaw)) {
51
+ throw new Error(`mcp.acl.rules must be a list, got ${typeof rulesRaw}`);
52
+ }
53
+ const hasRules = Array.isArray(rulesRaw) && rulesRaw.length > 0;
54
+ const hasDefault = cfg.default_effect !== undefined;
55
+ if (!hasRules && !hasDefault) {
56
+ return null; // Empty config section — treat as no ACL
57
+ }
58
+ let apcore;
59
+ try {
60
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
61
+ apcore = (await import("apcore-js"));
62
+ }
63
+ catch (err) {
64
+ throw new Error(`Config Bus 'mcp.acl' requires apcore-js>=0.18 with ACL support: ${err.message}`);
65
+ }
66
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
67
+ const ACL = (apcore.ACL ?? apcore.default?.ACL);
68
+ if (!ACL) {
69
+ throw new Error("apcore-js does not export ACL");
70
+ }
71
+ const defaultEffect = (cfg.default_effect ?? "deny");
72
+ if (!ALLOWED_EFFECTS.has(defaultEffect)) {
73
+ throw new Error(`mcp.acl.default_effect must be 'allow' or 'deny', got '${defaultEffect}'`);
74
+ }
75
+ const rawRules = (rulesRaw ?? []);
76
+ const rules = [];
77
+ for (let idx = 0; idx < rawRules.length; idx += 1) {
78
+ const entry = rawRules[idx];
79
+ if (!entry || typeof entry !== "object" || Array.isArray(entry)) {
80
+ throw new Error(`mcp.acl.rules[${idx}] must be an object, got ${Array.isArray(entry) ? "array" : typeof entry}`);
81
+ }
82
+ const rec = entry;
83
+ const extra = Object.keys(rec).filter((k) => !ALLOWED_RULE_KEYS.has(k));
84
+ if (extra.length) {
85
+ throw new Error(`mcp.acl.rules[${idx}] got unexpected keys: ${extra.sort().join(", ")}`);
86
+ }
87
+ const callers = rec.callers;
88
+ const targets = rec.targets;
89
+ const effect = rec.effect;
90
+ if (!Array.isArray(callers) || callers.length === 0) {
91
+ throw new Error(`mcp.acl.rules[${idx}] 'callers' must be a non-empty list`);
92
+ }
93
+ if (!Array.isArray(targets) || targets.length === 0) {
94
+ throw new Error(`mcp.acl.rules[${idx}] 'targets' must be a non-empty list`);
95
+ }
96
+ if (typeof effect !== "string" || !ALLOWED_EFFECTS.has(effect)) {
97
+ throw new Error(`mcp.acl.rules[${idx}] 'effect' must be 'allow' or 'deny', got '${effect}'`);
98
+ }
99
+ const rule = {
100
+ callers: [...callers],
101
+ targets: [...targets],
102
+ effect: effect,
103
+ description: typeof rec.description === "string" ? rec.description : "",
104
+ };
105
+ if (rec.conditions !== undefined && rec.conditions !== null) {
106
+ if (typeof rec.conditions !== "object" || Array.isArray(rec.conditions)) {
107
+ throw new Error(`mcp.acl.rules[${idx}] 'conditions' must be an object or null`);
108
+ }
109
+ rule.conditions = rec.conditions;
110
+ }
111
+ rules.push(rule);
112
+ }
113
+ return new ACL(rules, defaultEffect);
114
+ }
115
+ //# sourceMappingURL=acl-builder.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"acl-builder.js","sourceRoot":"","sources":["../src/acl-builder.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/adapters/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAczE,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,kBAAkB;IAoB3E;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM;IAkElE;;;;OAIG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO;CAOpE"}
1
+ {"version":3,"file":"annotations.d.ts","sourceRoot":"","sources":["../../src/adapters/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAkBzE,qBAAa,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,kBAAkB;IAoB3E;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,MAAM;IAyFlE;;;;OAIG;IACH,mBAAmB,CAAC,WAAW,EAAE,iBAAiB,GAAG,IAAI,GAAG,OAAO;CAOpE"}
@@ -15,6 +15,10 @@ const DEFAULT_ANNOTATIONS = {
15
15
  streaming: false,
16
16
  cacheable: false,
17
17
  paginated: false,
18
+ // [AM-2] Numeric/string defaults for cache_ttl and pagination_style.
19
+ // Spec: default values omitted from suffix.
20
+ cacheTtl: 0,
21
+ paginationStyle: "cursor",
18
22
  };
19
23
  export class AnnotationMapper {
20
24
  /**
@@ -79,12 +83,29 @@ export class AnnotationMapper {
79
83
  parts.push(`streaming=${annotations.streaming}`);
80
84
  if ((annotations.cacheable ?? false) !== DEFAULT_ANNOTATIONS.cacheable)
81
85
  parts.push(`cacheable=${annotations.cacheable}`);
86
+ // [AM-2] Skip cache_ttl when equal to default (0). Spec: "Default
87
+ // values omitted from suffix". Pre-fix TS emitted any non-null
88
+ // value including the default, diverging from Python+Rust.
89
+ if (annotations.cacheTtl !== undefined &&
90
+ annotations.cacheTtl !== null &&
91
+ annotations.cacheTtl !== DEFAULT_ANNOTATIONS.cacheTtl)
92
+ parts.push(`cache_ttl=${annotations.cacheTtl}`);
93
+ if (annotations.cacheKeyFields !== undefined &&
94
+ annotations.cacheKeyFields !== null &&
95
+ annotations.cacheKeyFields.length > 0)
96
+ parts.push(`cache_key_fields=[${annotations.cacheKeyFields.join(",")}]`);
82
97
  if ((annotations.paginated ?? false) !== DEFAULT_ANNOTATIONS.paginated)
83
98
  parts.push(`paginated=${annotations.paginated}`);
84
- // Append mcp_-prefixed extra fields
99
+ // [AM-2] Skip pagination_style when equal to default ("cursor").
100
+ if (annotations.paginationStyle !== undefined &&
101
+ annotations.paginationStyle !== null &&
102
+ annotations.paginationStyle !== DEFAULT_ANNOTATIONS.paginationStyle)
103
+ parts.push(`pagination_style=${annotations.paginationStyle}`);
104
+ // Append mcp_-prefixed extra fields (sorted alphabetically for deterministic output,
105
+ // matching Python+Rust sort behavior). [D11-022]
85
106
  const extraLines = [];
86
107
  if (annotations.extra && typeof annotations.extra === "object") {
87
- for (const [key, value] of Object.entries(annotations.extra)) {
108
+ for (const [key, value] of Object.entries(annotations.extra).sort(([a], [b]) => a.localeCompare(b))) {
88
109
  if (key.startsWith("mcp_") && typeof value === "string") {
89
110
  const strippedKey = key.slice(4); // remove "mcp_" prefix
90
111
  extraLines.push(`${strippedKey}: ${value}`);
@@ -1 +1 @@
1
- {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/adapters/annotations.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"annotations.js","sourceRoot":"","sources":["../../src/adapters/annotations.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAIH,8EAA8E;AAC9E,MAAM,mBAAmB,GAAG;IAC1B,QAAQ,EAAE,KAAK;IACf,WAAW,EAAE,KAAK;IAClB,UAAU,EAAE,KAAK;IACjB,gBAAgB,EAAE,KAAK;IACvB,SAAS,EAAE,IAAI;IACf,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,SAAS,EAAE,KAAK;IAChB,qEAAqE;IACrE,4CAA4C;IAC5C,QAAQ,EAAE,CAAC;IACX,eAAe,EAAE,QAAQ;CACjB,CAAC;AAEX,MAAM,OAAO,gBAAgB;IAC3B;;;;;;;;;OASG;IACH,gBAAgB,CAAC,WAAqC;QACpD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO;gBACL,YAAY,EAAE,KAAK;gBACnB,eAAe,EAAE,KAAK;gBACtB,cAAc,EAAE,KAAK;gBACrB,aAAa,EAAE,IAAI;gBACnB,KAAK,EAAE,IAAI;aACZ,CAAC;QACJ,CAAC;QAED,OAAO;YACL,YAAY,EAAE,WAAW,CAAC,QAAQ;YAClC,eAAe,EAAE,WAAW,CAAC,WAAW;YACxC,cAAc,EAAE,WAAW,CAAC,UAAU;YACtC,aAAa,EAAE,WAAW,CAAC,SAAS;YACpC,KAAK,EAAE,IAAI;SACZ,CAAC;IACJ,CAAC;IAED;;;;;;OAMG;IACH,mBAAmB,CAAC,WAAqC;QACvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,WAAW,CAAC,WAAW,EAAE,CAAC;YAC5B,QAAQ,CAAC,IAAI,CACX,mEAAmE;gBACjE,gDAAgD,CACnD,CAAC;QACJ,CAAC;QACD,IAAI,WAAW,CAAC,gBAAgB,EAAE,CAAC;YACjC,QAAQ,CAAC,IAAI,CACX,qEAAqE,CACtE,CAAC;QACJ,CAAC;QAED,MAAM,KAAK,GAAa,EAAE,CAAC;QAC3B,IAAI,WAAW,CAAC,QAAQ,KAAK,mBAAmB,CAAC,QAAQ;YACvD,KAAK,CAAC,IAAI,CAAC,YAAY,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QACjD,IAAI,WAAW,CAAC,WAAW,KAAK,mBAAmB,CAAC,WAAW;YAC7D,KAAK,CAAC,IAAI,CAAC,eAAe,WAAW,CAAC,WAAW,EAAE,CAAC,CAAC;QACvD,IAAI,WAAW,CAAC,UAAU,KAAK,mBAAmB,CAAC,UAAU;YAC3D,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,UAAU,EAAE,CAAC,CAAC;QACrD,IAAI,WAAW,CAAC,gBAAgB,KAAK,mBAAmB,CAAC,gBAAgB;YACvE,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,gBAAgB,EAAE,CAAC,CAAC;QAClE,IAAI,WAAW,CAAC,SAAS,KAAK,mBAAmB,CAAC,SAAS;YACzD,KAAK,CAAC,IAAI,CAAC,cAAc,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACpD,IAAI,WAAW,CAAC,SAAS,KAAK,mBAAmB,CAAC,SAAS;YACzD,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,mBAAmB,CAAC,SAAS;YACpE,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,kEAAkE;QAClE,+DAA+D;QAC/D,2DAA2D;QAC3D,IACE,WAAW,CAAC,QAAQ,KAAK,SAAS;YAClC,WAAW,CAAC,QAAQ,KAAK,IAAI;YAC7B,WAAW,CAAC,QAAQ,KAAK,mBAAmB,CAAC,QAAQ;YAErD,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC;QAClD,IACE,WAAW,CAAC,cAAc,KAAK,SAAS;YACxC,WAAW,CAAC,cAAc,KAAK,IAAI;YACnC,WAAW,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC;YAErC,KAAK,CAAC,IAAI,CAAC,qBAAqB,WAAW,CAAC,cAAc,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAC3E,IAAI,CAAC,WAAW,CAAC,SAAS,IAAI,KAAK,CAAC,KAAK,mBAAmB,CAAC,SAAS;YACpE,KAAK,CAAC,IAAI,CAAC,aAAa,WAAW,CAAC,SAAS,EAAE,CAAC,CAAC;QACnD,iEAAiE;QACjE,IACE,WAAW,CAAC,eAAe,KAAK,SAAS;YACzC,WAAW,CAAC,eAAe,KAAK,IAAI;YACpC,WAAW,CAAC,eAAe,KAAK,mBAAmB,CAAC,eAAe;YAEnE,KAAK,CAAC,IAAI,CAAC,oBAAoB,WAAW,CAAC,eAAe,EAAE,CAAC,CAAC;QAEhE,qFAAqF;QACrF,iDAAiD;QACjD,MAAM,UAAU,GAAa,EAAE,CAAC;QAChC,IAAI,WAAW,CAAC,KAAK,IAAI,OAAO,WAAW,CAAC,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC/D,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpG,IAAI,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;oBACxD,MAAM,WAAW,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,uBAAuB;oBACzD,UAAU,CAAC,IAAI,CAAC,GAAG,WAAW,KAAK,KAAK,EAAE,CAAC,CAAC;gBAC9C,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3E,OAAO,EAAE,CAAC;QACZ,CAAC;QAED,MAAM,QAAQ,GAAa,EAAE,CAAC;QAC9B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACrB,QAAQ,CAAC,IAAI,CAAC,iBAAiB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtD,CAAC;QAED,IAAI,MAAM,GAAG,MAAM,GAAG,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5C,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC1B,MAAM,IAAI,IAAI,GAAG,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACzC,CAAC;QACD,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,mBAAmB,CAAC,WAAqC;QACvD,IAAI,WAAW,KAAK,IAAI,EAAE,CAAC;YACzB,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,WAAW,CAAC,gBAAgB,CAAC;IACtC,CAAC;CACF"}
@@ -4,8 +4,23 @@
4
4
  * Handles ModuleError instances with specific error codes, sanitizes
5
5
  * internal error details, formats schema validation errors with
6
6
  * field-level detail, and extracts AI guidance fields.
7
+ *
8
+ * Cross-language contract: apcore-js exposes concrete error classes
9
+ * (e.g. `TaskLimitExceededError`). We prefer `instanceof` dispatch when
10
+ * those classes are importable so structured fields flow through
11
+ * losslessly; we fall back to duck-typing (`error.code` inspection)
12
+ * when apcore-js is unavailable or the caller constructs a bare
13
+ * `ModuleError`.
7
14
  */
8
15
  import type { McpErrorResponse } from "../types.js";
16
+ /**
17
+ * Canonical GENERAL_INTERNAL_ERROR envelope for non-ModuleError fallback.
18
+ *
19
+ * All three SDKs (Python, TypeScript, Rust) emit byte-identical envelopes so
20
+ * MCP clients can branch on `errorType === "GENERAL_INTERNAL_ERROR"` portably.
21
+ * See `apcore-mcp/docs/features/error-mapper.md` (EM-6).
22
+ */
23
+ export declare function internalErrorResponse(): McpErrorResponse;
9
24
  export declare class ErrorMapper {
10
25
  /**
11
26
  * Convert an error to an MCP error response.
@@ -14,6 +29,28 @@ export declare class ErrorMapper {
14
29
  * Applies sanitization and formatting rules based on the error code.
15
30
  */
16
31
  toMcpError(error: unknown): McpErrorResponse;
32
+ /**
33
+ * Generic-error fallback for arbitrary inputs.
34
+ *
35
+ * Ports Rust's `to_mcp_error_any` downcast pattern: if the input is a
36
+ * `ModuleError` subclass, delegate to {@link toMcpError} so structured
37
+ * fields (code, details, AI guidance) survive. Otherwise — plain `Error`,
38
+ * unrelated subclass, or non-error object — return the canonical
39
+ * GENERAL_INTERNAL_ERROR envelope. The original class, message, stack,
40
+ * and details are deliberately discarded in that branch (security: avoid
41
+ * leaking server-side state). [D9-004]
42
+ */
43
+ toMcpErrorAny(error: unknown): McpErrorResponse;
44
+ /**
45
+ * Preferred `instanceof` dispatch for concrete apcore-js error classes.
46
+ *
47
+ * When the cache hasn't been populated yet (first call before the lazy
48
+ * load settles), returns null and the caller falls back to duck-typing.
49
+ * Once the cache is warm, subsequent calls produce identical output
50
+ * whether the error was thrown as a concrete class or a duck-typed
51
+ * plain object — the duck-typed branch below handles the latter.
52
+ */
53
+ private _matchApcoreErrorInstance;
17
54
  /**
18
55
  * Extract AI guidance fields from error and attach non-undefined values to result.
19
56
  */
@@ -1 +1 @@
1
- {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAgBpD,qBAAa,WAAW;IACtB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAwK5C;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CA4B/B"}
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAGH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAEpD;;;;;;GAMG;AACH,wBAAgB,qBAAqB,IAAI,gBAAgB,CAOxD;AA0DD,qBAAa,WAAW;IACtB;;;;;OAKG;IACH,UAAU,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IA+O5C;;;;;;;;;;OAUG;IACH,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,gBAAgB;IAQ/C;;;;;;;;OAQG;IACH,OAAO,CAAC,yBAAyB;IAyDjC;;OAEG;IACH,OAAO,CAAC,iBAAiB;IAazB;;OAEG;IACH,OAAO,CAAC,qBAAqB;IAQ7B;;;;OAIG;IACH,OAAO,CAAC,cAAc;IAetB;;;;;OAKG;IACH,OAAO,CAAC,sBAAsB;CA4B/B"}
@@ -4,8 +4,64 @@
4
4
  * Handles ModuleError instances with specific error codes, sanitizes
5
5
  * internal error details, formats schema validation errors with
6
6
  * field-level detail, and extracts AI guidance fields.
7
+ *
8
+ * Cross-language contract: apcore-js exposes concrete error classes
9
+ * (e.g. `TaskLimitExceededError`). We prefer `instanceof` dispatch when
10
+ * those classes are importable so structured fields flow through
11
+ * losslessly; we fall back to duck-typing (`error.code` inspection)
12
+ * when apcore-js is unavailable or the caller constructs a bare
13
+ * `ModuleError`.
7
14
  */
8
15
  import { ErrorCodes } from "../types.js";
16
+ /**
17
+ * Canonical GENERAL_INTERNAL_ERROR envelope for non-ModuleError fallback.
18
+ *
19
+ * All three SDKs (Python, TypeScript, Rust) emit byte-identical envelopes so
20
+ * MCP clients can branch on `errorType === "GENERAL_INTERNAL_ERROR"` portably.
21
+ * See `apcore-mcp/docs/features/error-mapper.md` (EM-6).
22
+ */
23
+ export function internalErrorResponse() {
24
+ return {
25
+ isError: true,
26
+ errorType: ErrorCodes.GENERAL_INTERNAL_ERROR,
27
+ message: "Internal error occurred",
28
+ details: null,
29
+ };
30
+ }
31
+ /**
32
+ * Lazy snapshot of apcore-js error classes used for `instanceof` dispatch.
33
+ * Populated on first use; falls back to duck-typing when apcore-js is
34
+ * unavailable. Cached across calls for perf.
35
+ *
36
+ * `ModuleError` is the documented base class for all structured apcore errors.
37
+ * `toMcpErrorAny` uses it as a downcast pivot, mirroring Rust's
38
+ * `to_mcp_error_any` which checks `err.downcast_ref::<ModuleError>()` before
39
+ * collapsing to the canonical envelope.
40
+ */
41
+ let _apcoreErrorClasses = null;
42
+ async function _loadApcoreErrorClasses() {
43
+ if (_apcoreErrorClasses)
44
+ return _apcoreErrorClasses;
45
+ try {
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const apcore = (await import("apcore-js"));
48
+ _apcoreErrorClasses = {
49
+ ModuleError: apcore.ModuleError,
50
+ TaskLimitExceededError: apcore.TaskLimitExceededError,
51
+ VersionConstraintError: apcore.VersionConstraintError,
52
+ DependencyNotFoundError: apcore.DependencyNotFoundError,
53
+ DependencyVersionMismatchError: apcore.DependencyVersionMismatchError,
54
+ loaded: true,
55
+ };
56
+ }
57
+ catch {
58
+ _apcoreErrorClasses = { loaded: true };
59
+ }
60
+ return _apcoreErrorClasses;
61
+ }
62
+ // Kick off the load eagerly but don't await; toMcpError is sync and will
63
+ // observe the populated cache on subsequent invocations.
64
+ void _loadApcoreErrorClasses();
9
65
  /** Internal error codes that should be sanitized to a generic message. */
10
66
  const INTERNAL_ERROR_CODES = new Set([
11
67
  ErrorCodes.CALL_DEPTH_EXCEEDED,
@@ -36,6 +92,13 @@ export class ErrorMapper {
36
92
  retryable: true,
37
93
  };
38
94
  }
95
+ // Preferred: instanceof dispatch against apcore-js's concrete error
96
+ // classes so cross-language contracts stay tight. Falls back to the
97
+ // duck-typed code-based dispatch below when apcore-js was unavailable
98
+ // at load time.
99
+ const instanceMatch = this._matchApcoreErrorInstance(error);
100
+ if (instanceMatch)
101
+ return instanceMatch;
39
102
  // Duck-type check for ModuleError-like objects
40
103
  if (this._isModuleError(error)) {
41
104
  const code = error.code;
@@ -70,17 +133,15 @@ export class ErrorMapper {
70
133
  this._attachAiGuidance(error, result);
71
134
  return result;
72
135
  }
73
- // Approval pending -> narrow details to approvalId only
74
- // NOTE: apcore-js may use camelCase (approvalId) or snake_case (approval_id).
75
- // Check both to stay compatible with either convention.
136
+ // Approval pending -> narrow details to approvalId only.
137
+ // [D10-003] Cross-language parity: upstream apcore SDKs emit
138
+ // snake_case (`approval_id`) exclusively, so the previous dual-key
139
+ // branch for camelCase `approvalId` was dormant and diverged from
140
+ // Python/Rust contracts (which accept snake_case only). Drop the
141
+ // camelCase source key; the output stays camelCase per MCP convention.
76
142
  if (code === ErrorCodes.APPROVAL_PENDING) {
77
- const idKey = details && "approvalId" in details
78
- ? "approvalId"
79
- : details && "approval_id" in details
80
- ? "approval_id"
81
- : null;
82
- const narrowed = idKey
83
- ? { approvalId: details[idKey] }
143
+ const narrowed = details && "approval_id" in details
144
+ ? { approvalId: details["approval_id"] }
84
145
  : null;
85
146
  const result = {
86
147
  isError: true,
@@ -161,6 +222,67 @@ export class ErrorMapper {
161
222
  this._attachAiGuidance(error, result);
162
223
  return result;
163
224
  }
225
+ // Dependency resolution errors (apcore 0.19) -> pass through with user-fixable hint
226
+ if (code === ErrorCodes.DEPENDENCY_NOT_FOUND ||
227
+ code === ErrorCodes.DEPENDENCY_VERSION_MISMATCH) {
228
+ const result = {
229
+ isError: true,
230
+ errorType: code,
231
+ message: error.message,
232
+ details,
233
+ userFixable: true,
234
+ };
235
+ this._attachAiGuidance(error, result);
236
+ return result;
237
+ }
238
+ // Task limit exceeded -> retryable
239
+ if (code === ErrorCodes.TASK_LIMIT_EXCEEDED) {
240
+ const result = {
241
+ isError: true,
242
+ errorType: code,
243
+ message: error.message,
244
+ details,
245
+ retryable: true,
246
+ };
247
+ this._attachAiGuidance(error, result);
248
+ return result;
249
+ }
250
+ // apcore 0.20.0 sync alignment A-001: CircuitBreakerOpenError ->
251
+ // retryable=true with the per-module recovery hint already attached
252
+ // by apcore-js's error class (mirrored via _attachAiGuidance).
253
+ if (code === ErrorCodes.CIRCUIT_BREAKER_OPEN) {
254
+ const result = {
255
+ isError: true,
256
+ errorType: code,
257
+ message: error.message,
258
+ details,
259
+ retryable: true,
260
+ };
261
+ this._attachAiGuidance(error, result);
262
+ if (!result.aiGuidance) {
263
+ result.aiGuidance =
264
+ "Module's circuit breaker is OPEN — repeated failures have tripped " +
265
+ "the breaker. Wait until the recovery window elapses, then retry; " +
266
+ "the breaker will move to HALF_OPEN and accept a trial call.";
267
+ }
268
+ return result;
269
+ }
270
+ // Binding / version-constraint validation errors (apcore 0.19) -> pass through
271
+ if (code === ErrorCodes.VERSION_CONSTRAINT_INVALID ||
272
+ code === ErrorCodes.BINDING_SCHEMA_INFERENCE_FAILED ||
273
+ code === ErrorCodes.BINDING_SCHEMA_MODE_CONFLICT ||
274
+ code === ErrorCodes.BINDING_STRICT_SCHEMA_INCOMPATIBLE ||
275
+ code === ErrorCodes.BINDING_POLICY_VIOLATION) {
276
+ const result = {
277
+ isError: true,
278
+ errorType: code,
279
+ message: error.message,
280
+ details,
281
+ userFixable: true,
282
+ };
283
+ this._attachAiGuidance(error, result);
284
+ return result;
285
+ }
164
286
  // Other known ModuleError codes -> pass through
165
287
  const result = {
166
288
  isError: true,
@@ -171,13 +293,87 @@ export class ErrorMapper {
171
293
  this._attachAiGuidance(error, result);
172
294
  return result;
173
295
  }
174
- // Unknown/unexpected exceptions -> generic error
175
- return {
176
- isError: true,
177
- errorType: ErrorCodes.INTERNAL_ERROR,
178
- message: "Internal error occurred",
179
- details: null,
180
- };
296
+ // Unknown/unexpected exceptions -> canonical GENERAL_INTERNAL_ERROR envelope (EM-6).
297
+ // Mirrors Python `internal_error_response()` and Rust `to_mcp_error_any()`.
298
+ return internalErrorResponse();
299
+ }
300
+ /**
301
+ * Generic-error fallback for arbitrary inputs.
302
+ *
303
+ * Ports Rust's `to_mcp_error_any` downcast pattern: if the input is a
304
+ * `ModuleError` subclass, delegate to {@link toMcpError} so structured
305
+ * fields (code, details, AI guidance) survive. Otherwise — plain `Error`,
306
+ * unrelated subclass, or non-error object — return the canonical
307
+ * GENERAL_INTERNAL_ERROR envelope. The original class, message, stack,
308
+ * and details are deliberately discarded in that branch (security: avoid
309
+ * leaking server-side state). [D9-004]
310
+ */
311
+ toMcpErrorAny(error) {
312
+ const ModuleError = _apcoreErrorClasses?.ModuleError;
313
+ if (ModuleError && error instanceof ModuleError) {
314
+ return this.toMcpError(error);
315
+ }
316
+ return internalErrorResponse();
317
+ }
318
+ /**
319
+ * Preferred `instanceof` dispatch for concrete apcore-js error classes.
320
+ *
321
+ * When the cache hasn't been populated yet (first call before the lazy
322
+ * load settles), returns null and the caller falls back to duck-typing.
323
+ * Once the cache is warm, subsequent calls produce identical output
324
+ * whether the error was thrown as a concrete class or a duck-typed
325
+ * plain object — the duck-typed branch below handles the latter.
326
+ */
327
+ _matchApcoreErrorInstance(error) {
328
+ if (!(error instanceof Error) || !_apcoreErrorClasses?.loaded)
329
+ return null;
330
+ const classes = _apcoreErrorClasses;
331
+ const asModErr = error;
332
+ if (classes.TaskLimitExceededError && error instanceof classes.TaskLimitExceededError) {
333
+ const result = {
334
+ isError: true,
335
+ errorType: ErrorCodes.TASK_LIMIT_EXCEEDED,
336
+ message: error.message,
337
+ details: asModErr.details ?? null,
338
+ retryable: true,
339
+ };
340
+ this._attachAiGuidance(error, result);
341
+ return result;
342
+ }
343
+ if (classes.DependencyNotFoundError && error instanceof classes.DependencyNotFoundError) {
344
+ const result = {
345
+ isError: true,
346
+ errorType: ErrorCodes.DEPENDENCY_NOT_FOUND,
347
+ message: error.message,
348
+ details: asModErr.details ?? null,
349
+ userFixable: true,
350
+ };
351
+ this._attachAiGuidance(error, result);
352
+ return result;
353
+ }
354
+ if (classes.DependencyVersionMismatchError && error instanceof classes.DependencyVersionMismatchError) {
355
+ const result = {
356
+ isError: true,
357
+ errorType: ErrorCodes.DEPENDENCY_VERSION_MISMATCH,
358
+ message: error.message,
359
+ details: asModErr.details ?? null,
360
+ userFixable: true,
361
+ };
362
+ this._attachAiGuidance(error, result);
363
+ return result;
364
+ }
365
+ if (classes.VersionConstraintError && error instanceof classes.VersionConstraintError) {
366
+ const result = {
367
+ isError: true,
368
+ errorType: ErrorCodes.VERSION_CONSTRAINT_INVALID,
369
+ message: error.message,
370
+ details: asModErr.details ?? null,
371
+ userFixable: true,
372
+ };
373
+ this._attachAiGuidance(error, result);
374
+ return result;
375
+ }
376
+ return null;
181
377
  }
182
378
  /**
183
379
  * Extract AI guidance fields from error and attach non-undefined values to result.
@@ -1 +1 @@
1
- {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../src/adapters/errors.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * ModuleIDNormalizer - Converts between apcore module IDs and OpenAI tool names.
3
+ *
4
+ * apcore uses dot-separated module IDs (e.g. "myorg.tools.search").
5
+ *
6
+ * [MID-6] MCP tool names accept dots and hyphens (and dot-notation is the
7
+ * apcore convention), so this normalizer is intended ONLY for the OpenAI
8
+ * function-calling format, which restricts function names to `[a-zA-Z0-9_-]`.
9
+ * Pre-fix doc here claimed "MCP tool names use hyphens" — that is incorrect
10
+ * and contradicts the spec at `docs/features/openai-converter.md`. This
11
+ * normalizer must NOT be applied on the MCP path.
12
+ */
13
+ export declare class ModuleIDNormalizer {
14
+ /**
15
+ * Normalize an apcore module ID to an MCP-compatible tool name.
16
+ *
17
+ * Validates the module ID against MODULE_ID_PATTERN before converting.
18
+ * Replaces dots (`.`) with hyphens (`-`).
19
+ */
20
+ normalize(moduleId: string): string;
21
+ /**
22
+ * Denormalize an MCP tool name back to an apcore module ID.
23
+ *
24
+ * Replaces hyphens (`-`) with dots (`.`).
25
+ */
26
+ denormalize(toolName: string): string;
27
+ /**
28
+ * Bijection-guarded variant of denormalize. [MID-5]
29
+ *
30
+ * Returns the denormalized module ID if `toolName` is a valid pre-image of
31
+ * `normalize()` (i.e. the dash→dot replacement yields a string matching
32
+ * MODULE_ID_PATTERN). Returns `null` for inputs that could not have been
33
+ * produced by `normalize()`.
34
+ *
35
+ * Cross-language parity [D11-3]: validates the denormalized result against
36
+ * the shared MODULE_ID_PATTERN so underscores within segments (e.g.
37
+ * `"my_mod-v2"` → `"my_mod.v2"`) round-trip identically to Python/Rust.
38
+ */
39
+ tryDenormalize(toolName: string): string | null;
40
+ }
41
+ //# sourceMappingURL=id-normalizer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"id-normalizer.d.ts","sourceRoot":"","sources":["../../src/adapters/id-normalizer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,qBAAa,kBAAkB;IAC7B;;;;;OAKG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IASnC;;;;OAIG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIrC;;;;;;;;;;;OAWG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAMhD"}