@remnic/core 9.3.687 → 9.3.688

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 (35) hide show
  1. package/dist/access-cli.js +3 -3
  2. package/dist/active-recall.js +3 -3
  3. package/dist/{chunk-MCQDSY4G.js → chunk-3K37VPM3.js} +2 -2
  4. package/dist/{chunk-6GJS4BFH.js → chunk-A7UZR6RA.js} +2 -2
  5. package/dist/{chunk-QVMXQGT7.js → chunk-CCWHPGT4.js} +4 -4
  6. package/dist/{chunk-U7D7NP4J.js → chunk-ED35D32I.js} +2 -2
  7. package/dist/chunk-K6MV3TRQ.js +56 -0
  8. package/dist/chunk-K6MV3TRQ.js.map +1 -0
  9. package/dist/{chunk-QO3AILZN.js → chunk-OO42R444.js} +2 -2
  10. package/dist/{chunk-FE6DQUNJ.js → chunk-RVYD6LR3.js} +2 -2
  11. package/dist/cli.js +6 -6
  12. package/dist/config.js +3 -3
  13. package/dist/connectors/index.d.ts +10 -2
  14. package/dist/connectors/index.js +2 -2
  15. package/dist/emit-legacy-tools.js +2 -2
  16. package/dist/index.d.ts +11 -0
  17. package/dist/index.js +10 -7
  18. package/dist/index.js.map +1 -1
  19. package/dist/operator-toolkit.js +4 -4
  20. package/dist/resume-bundles.js +4 -4
  21. package/package.json +2 -2
  22. package/src/connectors/paths.test.ts +192 -0
  23. package/src/connectors/paths.ts +106 -20
  24. package/src/memory-extension/claude-code-publisher.ts +1 -0
  25. package/src/memory-extension/codex-publisher.ts +1 -0
  26. package/src/memory-extension/hermes-publisher.ts +1 -0
  27. package/src/memory-extension/types.ts +11 -0
  28. package/dist/chunk-3BQOQYRB.js +0 -33
  29. package/dist/chunk-3BQOQYRB.js.map +0 -1
  30. /package/dist/{chunk-MCQDSY4G.js.map → chunk-3K37VPM3.js.map} +0 -0
  31. /package/dist/{chunk-6GJS4BFH.js.map → chunk-A7UZR6RA.js.map} +0 -0
  32. /package/dist/{chunk-QVMXQGT7.js.map → chunk-CCWHPGT4.js.map} +0 -0
  33. /package/dist/{chunk-U7D7NP4J.js.map → chunk-ED35D32I.js.map} +0 -0
  34. /package/dist/{chunk-QO3AILZN.js.map → chunk-OO42R444.js.map} +0 -0
  35. /package/dist/{chunk-FE6DQUNJ.js.map → chunk-RVYD6LR3.js.map} +0 -0
@@ -114,11 +114,11 @@ import "./chunk-VL7DP3OW.js";
114
114
  import "./chunk-RK6F44Y6.js";
115
115
  import {
116
116
  parseConfig
117
- } from "./chunk-6GJS4BFH.js";
117
+ } from "./chunk-A7UZR6RA.js";
118
118
  import "./chunk-NDAH7BJ5.js";
119
119
  import "./chunk-Z5LAYHGJ.js";
120
- import "./chunk-QO3AILZN.js";
121
- import "./chunk-3BQOQYRB.js";
120
+ import "./chunk-OO42R444.js";
121
+ import "./chunk-K6MV3TRQ.js";
122
122
  import "./chunk-LBJBNWS2.js";
123
123
  import "./chunk-OADWQ5CR.js";
124
124
  import "./chunk-7WV3F5DQ.js";
@@ -4,11 +4,11 @@ import {
4
4
  } from "./chunk-6MKAMLQL.js";
5
5
  import {
6
6
  DEFAULT_REASONING_MODEL
7
- } from "./chunk-6GJS4BFH.js";
7
+ } from "./chunk-A7UZR6RA.js";
8
8
  import "./chunk-NDAH7BJ5.js";
9
9
  import "./chunk-Z5LAYHGJ.js";
10
- import "./chunk-QO3AILZN.js";
11
- import "./chunk-3BQOQYRB.js";
10
+ import "./chunk-OO42R444.js";
11
+ import "./chunk-K6MV3TRQ.js";
12
12
  import "./chunk-ZPQVJEVQ.js";
13
13
  import "./chunk-4DJQYKMN.js";
14
14
  import "./chunk-EYIEWJNI.js";
@@ -11,7 +11,7 @@ import {
11
11
  } from "./chunk-LMDRGRJ2.js";
12
12
  import {
13
13
  parseConfig
14
- } from "./chunk-6GJS4BFH.js";
14
+ } from "./chunk-A7UZR6RA.js";
15
15
  import {
16
16
  resolveObjectiveStateStoreDir,
17
17
  validateObjectiveStateSnapshot
@@ -268,4 +268,4 @@ export {
268
268
  recordResumeBundle,
269
269
  getResumeBundleStatus
270
270
  };
271
- //# sourceMappingURL=chunk-MCQDSY4G.js.map
271
+ //# sourceMappingURL=chunk-3K37VPM3.js.map
@@ -8,7 +8,7 @@ import {
8
8
  import {
9
9
  resolveEmitLegacyTools,
10
10
  resolveNamespaceCatalogEnabled
11
- } from "./chunk-QO3AILZN.js";
11
+ } from "./chunk-OO42R444.js";
12
12
  import {
13
13
  coerceBool,
14
14
  coerceInstallExtension,
@@ -3214,4 +3214,4 @@ export {
3214
3214
  VALID_MEMORY_CATEGORIES,
3215
3215
  parseConfig
3216
3216
  };
3217
- //# sourceMappingURL=chunk-6GJS4BFH.js.map
3217
+ //# sourceMappingURL=chunk-A7UZR6RA.js.map
@@ -79,7 +79,7 @@ import {
79
79
  buildResumeBundleFromState,
80
80
  getResumeBundleStatus,
81
81
  recordResumeBundle
82
- } from "./chunk-MCQDSY4G.js";
82
+ } from "./chunk-3K37VPM3.js";
83
83
  import {
84
84
  resolveAgentAccessAuthToken
85
85
  } from "./chunk-TGQ2NTWH.js";
@@ -102,7 +102,7 @@ import {
102
102
  runOperatorInventory,
103
103
  runOperatorRepair,
104
104
  runOperatorSetup
105
- } from "./chunk-FE6DQUNJ.js";
105
+ } from "./chunk-RVYD6LR3.js";
106
106
  import {
107
107
  listNamespaces,
108
108
  runNamespaceMigration,
@@ -210,7 +210,7 @@ import {
210
210
  } from "./chunk-UQ7RN5HK.js";
211
211
  import {
212
212
  parseConfig
213
- } from "./chunk-6GJS4BFH.js";
213
+ } from "./chunk-A7UZR6RA.js";
214
214
  import {
215
215
  getAbstractionNodeStoreStatus
216
216
  } from "./chunk-OADWQ5CR.js";
@@ -7311,4 +7311,4 @@ export {
7311
7311
  listMemoryMarkdownFilePaths,
7312
7312
  registerCli
7313
7313
  };
7314
- //# sourceMappingURL=chunk-QVMXQGT7.js.map
7314
+ //# sourceMappingURL=chunk-CCWHPGT4.js.map
@@ -9,7 +9,7 @@ import {
9
9
  import {
10
10
  getConnectorsDir,
11
11
  getRegistryPath
12
- } from "./chunk-3BQOQYRB.js";
12
+ } from "./chunk-K6MV3TRQ.js";
13
13
  import {
14
14
  launchProcessSync
15
15
  } from "./chunk-O75CRYGF.js";
@@ -2254,4 +2254,4 @@ export {
2254
2254
  resolveWeCloneProxyConfigPath,
2255
2255
  buildWeCloneProxyConfig
2256
2256
  };
2257
- //# sourceMappingURL=chunk-U7D7NP4J.js.map
2257
+ //# sourceMappingURL=chunk-ED35D32I.js.map
@@ -0,0 +1,56 @@
1
+ import {
2
+ readEnvVar,
3
+ resolveHomeDir
4
+ } from "./chunk-JUC24CTX.js";
5
+
6
+ // src/connectors/paths.ts
7
+ import fs from "fs";
8
+ import path from "path";
9
+ var REGISTRY_DIR_NAME = ".remnic-connectors";
10
+ var LEGACY_REGISTRY_DIR_NAME = ".engram-connectors";
11
+ var CONFIG_ROOT_SEGMENT = "remnic";
12
+ var LEGACY_CONFIG_ROOT_SEGMENT = "engram";
13
+ function getConnectorsConfigRoot() {
14
+ const xdgConfigHome = readEnvVar("XDG_CONFIG_HOME");
15
+ return xdgConfigHome ? path.join(xdgConfigHome, CONFIG_ROOT_SEGMENT) : path.join(resolveHomeDir(), ".config", CONFIG_ROOT_SEGMENT);
16
+ }
17
+ function getLegacyConnectorsConfigRoot() {
18
+ const xdgConfigHome = readEnvVar("XDG_CONFIG_HOME");
19
+ return xdgConfigHome ? path.join(xdgConfigHome, LEGACY_CONFIG_ROOT_SEGMENT) : path.join(resolveHomeDir(), ".config", LEGACY_CONFIG_ROOT_SEGMENT);
20
+ }
21
+ function getActiveConnectorsConfigRoot() {
22
+ const canonical = getConnectorsConfigRoot();
23
+ if (fs.existsSync(path.join(canonical, REGISTRY_DIR_NAME))) return canonical;
24
+ const legacy = getLegacyConnectorsConfigRoot();
25
+ if (fs.existsSync(path.join(legacy, LEGACY_REGISTRY_DIR_NAME))) return legacy;
26
+ return canonical;
27
+ }
28
+ function getRegistryPath() {
29
+ const root = getActiveConnectorsConfigRoot();
30
+ const dirName = root === getConnectorsConfigRoot() ? REGISTRY_DIR_NAME : LEGACY_REGISTRY_DIR_NAME;
31
+ return path.join(root, dirName, "registry.json");
32
+ }
33
+ function getConnectorsDir() {
34
+ const root = getActiveConnectorsConfigRoot();
35
+ const dirName = root === getConnectorsConfigRoot() ? REGISTRY_DIR_NAME : LEGACY_REGISTRY_DIR_NAME;
36
+ return path.join(root, dirName, "connectors");
37
+ }
38
+ function hasLegacyConnectorEntries() {
39
+ try {
40
+ const legacyDir = path.join(
41
+ getLegacyConnectorsConfigRoot(),
42
+ LEGACY_REGISTRY_DIR_NAME,
43
+ "connectors"
44
+ );
45
+ return fs.readdirSync(legacyDir).some((name) => name.endsWith(".json"));
46
+ } catch {
47
+ return false;
48
+ }
49
+ }
50
+
51
+ export {
52
+ getRegistryPath,
53
+ getConnectorsDir,
54
+ hasLegacyConnectorEntries
55
+ };
56
+ //# sourceMappingURL=chunk-K6MV3TRQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/connectors/paths.ts"],"sourcesContent":["import fs from \"node:fs\";\nimport path from \"node:path\";\n\nimport { readEnvVar, resolveHomeDir } from \"../runtime/env.js\";\n\n/**\n * Connector registry directory name. Kept under the canonical `remnic` config\n * root for new installs; legacy installs that still live under `engram` are\n * read-transparent via {@link getActiveConnectorsConfigRoot} (issue #1518).\n */\nexport const REGISTRY_DIR_NAME = \".remnic-connectors\";\n\n/**\n * Legacy registry directory name from the engram era. Used only for the\n * read-fallback so existing installs keep resolving until the user migrates.\n */\nexport const LEGACY_REGISTRY_DIR_NAME = \".engram-connectors\";\n\n/**\n * Config-root segment for the canonical (post-rename) layout. Issue #1518\n * point 6: the path `~/.config/engram/...` is confusing when the product is\n * called Remnic, so new writes land under `remnic/`.\n */\nconst CONFIG_ROOT_SEGMENT = \"remnic\";\n\n/**\n * Config-root segment for the legacy engram-era layout. Read-fallback only.\n */\nconst LEGACY_CONFIG_ROOT_SEGMENT = \"engram\";\n\n/**\n * Single source of truth for the canonical connectors config root\n * (`$XDG_CONFIG_HOME/remnic` or `~/.config/remnic`). New writes ALWAYS go\n * here. Issue #1527 flagged this derivation as previously duplicated across\n * call sites — add new callers here, never re-derive the path inline.\n */\nexport function getConnectorsConfigRoot(): string {\n const xdgConfigHome = readEnvVar(\"XDG_CONFIG_HOME\");\n return xdgConfigHome\n ? path.join(xdgConfigHome, CONFIG_ROOT_SEGMENT)\n : path.join(resolveHomeDir(), \".config\", CONFIG_ROOT_SEGMENT);\n}\n\n/**\n * Legacy config root from the engram era (`$XDG_CONFIG_HOME/engram` or\n * `~/.config/engram`). Exposed for tests and the migration path only —\n * production code should call {@link getActiveConnectorsConfigRoot} so the\n * read-fallback is applied uniformly.\n */\nexport function getLegacyConnectorsConfigRoot(): string {\n const xdgConfigHome = readEnvVar(\"XDG_CONFIG_HOME\");\n return xdgConfigHome\n ? path.join(xdgConfigHome, LEGACY_CONFIG_ROOT_SEGMENT)\n : path.join(resolveHomeDir(), \".config\", LEGACY_CONFIG_ROOT_SEGMENT);\n}\n\n/**\n * Read-time fallback: pick the config root that actually holds (or will hold)\n * the connector registry.\n *\n * 1. Canonical `remnic/` root when its `.remnic-connectors` registry dir\n * already exists (post-migration, or a fresh install that has already\n * written its first connector).\n * 2. Legacy `engram/` root when ONLY its `.engram-connectors` registry dir\n * exists — an existing install we keep reading in place until the user\n * runs `remnic migrate`.\n * 3. Canonical `remnic/` root otherwise (fresh install with no registry on\n * disk yet) so the first write lands at the new path.\n *\n * The probe looks for the REGISTRY SUBDIR (`.remnic-connectors` /\n * `.engram-connectors`), not the bare config root. The config root\n * `~/.config/remnic/` is created by unrelated daemon setup (e.g. the daemon's\n * own `config.json`), so probing the bare root would falsely resolve to\n * remnic and hide connector data that still lives under\n * `~/.config/engram/.engram-connectors/` (cursor review round 1, #1620).\n *\n * This is a READ-time fallback. Writes go to whichever root this returns, so\n * a legacy install keeps its data colocated for the active session; a fresh\n * install writes straight to `remnic/`.\n */\nexport function getActiveConnectorsConfigRoot(): string {\n const canonical = getConnectorsConfigRoot();\n if (fs.existsSync(path.join(canonical, REGISTRY_DIR_NAME))) return canonical;\n const legacy = getLegacyConnectorsConfigRoot();\n if (fs.existsSync(path.join(legacy, LEGACY_REGISTRY_DIR_NAME))) return legacy;\n return canonical;\n}\n\n/**\n * Path of the connector registry manifest file. The registry subdir name\n * (`.remnic-connectors` vs the legacy `.engram-connectors`) is chosen from the\n * active root so a pre-rename install reads its existing files without a\n * rename-side migration step (#1518).\n */\nexport function getRegistryPath(): string {\n const root = getActiveConnectorsConfigRoot();\n const dirName = root === getConnectorsConfigRoot() ? REGISTRY_DIR_NAME : LEGACY_REGISTRY_DIR_NAME;\n return path.join(root, dirName, \"registry.json\");\n}\n\n/**\n * Directory holding one `<connector-id>.json` per installed connector. The\n * registry subdir name follows the active root (see {@link getRegistryPath}).\n */\nexport function getConnectorsDir(): string {\n const root = getActiveConnectorsConfigRoot();\n const dirName = root === getConnectorsConfigRoot() ? REGISTRY_DIR_NAME : LEGACY_REGISTRY_DIR_NAME;\n return path.join(root, dirName, \"connectors\");\n}\n\n/**\n * Sticky-legacy evidence for `emitLegacyTools` (issue #1550): any persisted\n * connector entry under the LEGACY engram registry means an existing install\n * whose clients may still address engram_* aliases. Missing or unreadable\n * legacy dir means fresh install — no evidence, no aliases.\n *\n * Probes ONLY the legacy engram registry (`$XDG_CONFIG_HOME/engram/.engram-connectors`),\n * never the active/canonical root. A fresh post-rename install that just\n * wrote its first connector under `remnic/.remnic-connectors/` is NOT legacy\n * evidence — counting it would flip `resolveEmitLegacyTools` to true and\n * advertise deprecated `engram.*` aliases to users who never had them\n * (#1620 review, codex P2). An unmigrated install still reports its entries\n * here because its data lives under the engram tree.\n */\nexport function hasLegacyConnectorEntries(): boolean {\n try {\n const legacyDir = path.join(\n getLegacyConnectorsConfigRoot(),\n LEGACY_REGISTRY_DIR_NAME,\n \"connectors\",\n );\n return fs.readdirSync(legacyDir).some((name) => name.endsWith(\".json\"));\n } catch {\n return false;\n }\n}\n"],"mappings":";;;;;;AAAA,OAAO,QAAQ;AACf,OAAO,UAAU;AASV,IAAM,oBAAoB;AAM1B,IAAM,2BAA2B;AAOxC,IAAM,sBAAsB;AAK5B,IAAM,6BAA6B;AAQ5B,SAAS,0BAAkC;AAChD,QAAM,gBAAgB,WAAW,iBAAiB;AAClD,SAAO,gBACH,KAAK,KAAK,eAAe,mBAAmB,IAC5C,KAAK,KAAK,eAAe,GAAG,WAAW,mBAAmB;AAChE;AAQO,SAAS,gCAAwC;AACtD,QAAM,gBAAgB,WAAW,iBAAiB;AAClD,SAAO,gBACH,KAAK,KAAK,eAAe,0BAA0B,IACnD,KAAK,KAAK,eAAe,GAAG,WAAW,0BAA0B;AACvE;AA0BO,SAAS,gCAAwC;AACtD,QAAM,YAAY,wBAAwB;AAC1C,MAAI,GAAG,WAAW,KAAK,KAAK,WAAW,iBAAiB,CAAC,EAAG,QAAO;AACnE,QAAM,SAAS,8BAA8B;AAC7C,MAAI,GAAG,WAAW,KAAK,KAAK,QAAQ,wBAAwB,CAAC,EAAG,QAAO;AACvE,SAAO;AACT;AAQO,SAAS,kBAA0B;AACxC,QAAM,OAAO,8BAA8B;AAC3C,QAAM,UAAU,SAAS,wBAAwB,IAAI,oBAAoB;AACzE,SAAO,KAAK,KAAK,MAAM,SAAS,eAAe;AACjD;AAMO,SAAS,mBAA2B;AACzC,QAAM,OAAO,8BAA8B;AAC3C,QAAM,UAAU,SAAS,wBAAwB,IAAI,oBAAoB;AACzE,SAAO,KAAK,KAAK,MAAM,SAAS,YAAY;AAC9C;AAgBO,SAAS,4BAAqC;AACnD,MAAI;AACF,UAAM,YAAY,KAAK;AAAA,MACrB,8BAA8B;AAAA,MAC9B;AAAA,MACA;AAAA,IACF;AACA,WAAO,GAAG,YAAY,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,SAAS,OAAO,CAAC;AAAA,EACxE,QAAQ;AACN,WAAO;AAAA,EACT;AACF;","names":[]}
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  hasLegacyConnectorEntries
3
- } from "./chunk-3BQOQYRB.js";
3
+ } from "./chunk-K6MV3TRQ.js";
4
4
  import {
5
5
  readEnvVar
6
6
  } from "./chunk-JUC24CTX.js";
@@ -86,4 +86,4 @@ export {
86
86
  resolveEmitLegacyTools,
87
87
  resolveNamespaceCatalogEnabled
88
88
  };
89
- //# sourceMappingURL=chunk-QO3AILZN.js.map
89
+ //# sourceMappingURL=chunk-OO42R444.js.map
@@ -32,7 +32,7 @@ import {
32
32
  } from "./chunk-3PY7VHV7.js";
33
33
  import {
34
34
  parseConfig
35
- } from "./chunk-6GJS4BFH.js";
35
+ } from "./chunk-A7UZR6RA.js";
36
36
  import {
37
37
  listMemoryGovernanceRuns,
38
38
  readMemoryGovernanceRunArtifact
@@ -1336,4 +1336,4 @@ export {
1336
1336
  runBenchmarkRecall,
1337
1337
  runOperatorRepair
1338
1338
  };
1339
- //# sourceMappingURL=chunk-FE6DQUNJ.js.map
1339
+ //# sourceMappingURL=chunk-RVYD6LR3.js.map
package/dist/cli.js CHANGED
@@ -90,7 +90,7 @@ import {
90
90
  runWorkProductStatusCliCommand,
91
91
  runWorkProjectCliCommand,
92
92
  runWorkTaskCliCommand
93
- } from "./chunk-QVMXQGT7.js";
93
+ } from "./chunk-CCWHPGT4.js";
94
94
  import "./chunk-MC4FJXPA.js";
95
95
  import "./chunk-LQHDIS7L.js";
96
96
  import "./chunk-7F7Z6MOS.js";
@@ -120,11 +120,11 @@ import "./chunk-CKITWVWJ.js";
120
120
  import "./chunk-OUELRE5E.js";
121
121
  import "./chunk-IQ7WCZRW.js";
122
122
  import "./chunk-UTYBJR7M.js";
123
- import "./chunk-MCQDSY4G.js";
123
+ import "./chunk-3K37VPM3.js";
124
124
  import "./chunk-TGQ2NTWH.js";
125
125
  import "./chunk-BFVPIKDY.js";
126
126
  import "./chunk-3T74IZB3.js";
127
- import "./chunk-FE6DQUNJ.js";
127
+ import "./chunk-RVYD6LR3.js";
128
128
  import "./chunk-2SJCWLQD.js";
129
129
  import "./chunk-HL4DB7TO.js";
130
130
  import "./chunk-7XH7VJN4.js";
@@ -161,11 +161,11 @@ import "./chunk-LMDRGRJ2.js";
161
161
  import "./chunk-3UXOZBHV.js";
162
162
  import "./chunk-7FL4CNPV.js";
163
163
  import "./chunk-UQ7RN5HK.js";
164
- import "./chunk-6GJS4BFH.js";
164
+ import "./chunk-A7UZR6RA.js";
165
165
  import "./chunk-NDAH7BJ5.js";
166
166
  import "./chunk-Z5LAYHGJ.js";
167
- import "./chunk-QO3AILZN.js";
168
- import "./chunk-3BQOQYRB.js";
167
+ import "./chunk-OO42R444.js";
168
+ import "./chunk-K6MV3TRQ.js";
169
169
  import "./chunk-LBJBNWS2.js";
170
170
  import "./chunk-OADWQ5CR.js";
171
171
  import "./chunk-S2OU5DZY.js";
package/dist/config.js CHANGED
@@ -4,11 +4,11 @@ import {
4
4
  isOpenaiApiKeyDisabled,
5
5
  parseConfig,
6
6
  resolveEnvVars
7
- } from "./chunk-6GJS4BFH.js";
7
+ } from "./chunk-A7UZR6RA.js";
8
8
  import "./chunk-NDAH7BJ5.js";
9
9
  import "./chunk-Z5LAYHGJ.js";
10
- import "./chunk-QO3AILZN.js";
11
- import "./chunk-3BQOQYRB.js";
10
+ import "./chunk-OO42R444.js";
11
+ import "./chunk-K6MV3TRQ.js";
12
12
  import "./chunk-ZPQVJEVQ.js";
13
13
  import "./chunk-4DJQYKMN.js";
14
14
  import "./chunk-EYIEWJNI.js";
@@ -12,9 +12,17 @@ import '../index-DJ9QWMw-.js';
12
12
  */
13
13
  declare function coerceInstallExtension(value: unknown): boolean | undefined;
14
14
 
15
- /** Path of the connector registry manifest file. */
15
+ /**
16
+ * Path of the connector registry manifest file. The registry subdir name
17
+ * (`.remnic-connectors` vs the legacy `.engram-connectors`) is chosen from the
18
+ * active root so a pre-rename install reads its existing files without a
19
+ * rename-side migration step (#1518).
20
+ */
16
21
  declare function getRegistryPath(): string;
17
- /** Directory holding one `<connector-id>.json` per installed connector. */
22
+ /**
23
+ * Directory holding one `<connector-id>.json` per installed connector. The
24
+ * registry subdir name follows the active root (see {@link getRegistryPath}).
25
+ */
18
26
  declare function getConnectorsDir(): string;
19
27
 
20
28
  /**
@@ -22,7 +22,7 @@ import {
22
22
  upsertHermesConfig,
23
23
  validateMarketplaceManifest,
24
24
  writeMarketplaceManifest
25
- } from "../chunk-U7D7NP4J.js";
25
+ } from "../chunk-ED35D32I.js";
26
26
  import "../chunk-UG274TNV.js";
27
27
  import {
28
28
  runCodexMaterialize
@@ -46,7 +46,7 @@ import "../chunk-3UXOZBHV.js";
46
46
  import {
47
47
  getConnectorsDir,
48
48
  getRegistryPath
49
- } from "../chunk-3BQOQYRB.js";
49
+ } from "../chunk-K6MV3TRQ.js";
50
50
  import "../chunk-O75CRYGF.js";
51
51
  import "../chunk-BLIWOONZ.js";
52
52
  import "../chunk-M7XQSUBB.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  resolveEmitLegacyTools,
3
3
  resolveNamespaceCatalogEnabled
4
- } from "./chunk-QO3AILZN.js";
5
- import "./chunk-3BQOQYRB.js";
4
+ } from "./chunk-OO42R444.js";
5
+ import "./chunk-K6MV3TRQ.js";
6
6
  import "./chunk-JUC24CTX.js";
7
7
  import "./chunk-PZ5AY32C.js";
8
8
  export {
package/dist/index.d.ts CHANGED
@@ -1728,8 +1728,19 @@ interface PublishResult {
1728
1728
  * Declarative capability flags that describe what a given publisher
1729
1729
  * can produce. Useful for feature-gating UI or doctor output without
1730
1730
  * instantiating the publisher.
1731
+ *
1732
+ * `isStub` is the explicit declaration required by #1518: when true, the
1733
+ * docs-code parity gate (`scripts/check-docs-parity.mjs`) refuses any
1734
+ * automation claim ("installs the plugin", "configures mcp",
1735
+ * "automatically …") in the publisher's mapped install docs, because a stub
1736
+ * publisher writes nothing to disk. A publisher that implements any real
1737
+ * artefact writes MUST set this false. The inferred "all flags false ⇒ stub"
1738
+ * detection in the parity script remains as a backstop, but the explicit
1739
+ * flag is now the source of truth.
1731
1740
  */
1732
1741
  interface PublisherCapabilities {
1742
+ /** Whether the publisher is an intentional no-op stub (writes nothing). */
1743
+ readonly isStub: boolean;
1733
1744
  /** Whether the publisher writes an instructions.md file. */
1734
1745
  readonly instructionsMd: boolean;
1735
1746
  /** Whether the publisher populates a skills folder. */
package/dist/index.js CHANGED
@@ -43,7 +43,7 @@ import {
43
43
  saveRegistry,
44
44
  validateMarketplaceManifest,
45
45
  writeMarketplaceManifest
46
- } from "./chunk-U7D7NP4J.js";
46
+ } from "./chunk-ED35D32I.js";
47
47
  import "./chunk-V5OCT34X.js";
48
48
  import {
49
49
  executeResolution,
@@ -98,7 +98,7 @@ import {
98
98
  registerTrainingExportAdapter,
99
99
  runBulkImportCliCommand,
100
100
  runWearablesCliCommand
101
- } from "./chunk-QVMXQGT7.js";
101
+ } from "./chunk-CCWHPGT4.js";
102
102
  import "./chunk-MC4FJXPA.js";
103
103
  import "./chunk-LQHDIS7L.js";
104
104
  import "./chunk-7F7Z6MOS.js";
@@ -141,7 +141,7 @@ import {
141
141
  } from "./chunk-OUELRE5E.js";
142
142
  import "./chunk-IQ7WCZRW.js";
143
143
  import "./chunk-UTYBJR7M.js";
144
- import "./chunk-MCQDSY4G.js";
144
+ import "./chunk-3K37VPM3.js";
145
145
  import {
146
146
  clearAuthTokenSecretCache,
147
147
  isAgentAccessSecretRef,
@@ -154,7 +154,7 @@ import {
154
154
  import {
155
155
  parseStrictCliDate
156
156
  } from "./chunk-3T74IZB3.js";
157
- import "./chunk-FE6DQUNJ.js";
157
+ import "./chunk-RVYD6LR3.js";
158
158
  import "./chunk-2SJCWLQD.js";
159
159
  import "./chunk-HL4DB7TO.js";
160
160
  import "./chunk-7XH7VJN4.js";
@@ -480,7 +480,7 @@ import {
480
480
  parseConfig,
481
481
  parseWearablesConfig,
482
482
  resolveEnvVars
483
- } from "./chunk-6GJS4BFH.js";
483
+ } from "./chunk-A7UZR6RA.js";
484
484
  import {
485
485
  REDACTION_PLACEHOLDER,
486
486
  applyCorrections,
@@ -494,8 +494,8 @@ import {
494
494
  saveCorrectionsFile
495
495
  } from "./chunk-NDAH7BJ5.js";
496
496
  import "./chunk-Z5LAYHGJ.js";
497
- import "./chunk-QO3AILZN.js";
498
- import "./chunk-3BQOQYRB.js";
497
+ import "./chunk-OO42R444.js";
498
+ import "./chunk-K6MV3TRQ.js";
499
499
  import "./chunk-LBJBNWS2.js";
500
500
  import "./chunk-OADWQ5CR.js";
501
501
  import {
@@ -4534,6 +4534,7 @@ function normalizeHostRoot(input, homeDir) {
4534
4534
  var CodexMemoryExtensionPublisher = class {
4535
4535
  hostId = "codex";
4536
4536
  static capabilities = {
4537
+ isStub: false,
4537
4538
  instructionsMd: true,
4538
4539
  skillsFolder: false,
4539
4540
  citationFormat: true,
@@ -4638,6 +4639,7 @@ When running inside the Codex phase-2 consolidation sandbox:
4638
4639
  var ClaudeCodeMemoryExtensionPublisher = class {
4639
4640
  hostId = "claude-code";
4640
4641
  static capabilities = {
4642
+ isStub: true,
4641
4643
  instructionsMd: false,
4642
4644
  skillsFolder: false,
4643
4645
  citationFormat: false,
@@ -4668,6 +4670,7 @@ var ClaudeCodeMemoryExtensionPublisher = class {
4668
4670
  var HermesMemoryExtensionPublisher = class {
4669
4671
  hostId = "hermes";
4670
4672
  static capabilities = {
4673
+ isStub: true,
4671
4674
  instructionsMd: false,
4672
4675
  skillsFolder: false,
4673
4676
  citationFormat: false,