@cotal-ai/connector-hermes 0.108.1 → 0.109.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/dist/launch.js CHANGED
@@ -45077,6 +45077,8 @@ function claims(ext) {
45077
45077
  }
45078
45078
  var Registry = class {
45079
45079
  #byKey = /* @__PURE__ */ new Map();
45080
+ /** `kind:name` → the declared provider that registers it, and its import once one has started. */
45081
+ #providers = /* @__PURE__ */ new Map();
45080
45082
  /** `kind:alias` → the claiming extension's `kind:name` key, for committed extensions. */
45081
45083
  #aliases = /* @__PURE__ */ new Map();
45082
45084
  /** While a stage is active in the CURRENT async context, {@link register} writes there instead of
@@ -45163,13 +45165,47 @@ var Registry = class {
45163
45165
  return this.#aliases.get(key) ?? key;
45164
45166
  }
45165
45167
  /** Resolve one extension by kind + name or alias. Unknown throws. Staged (uncommitted) registrations are
45166
- * invisible here; only committed ones resolve. */
45168
+ * invisible here; only committed ones resolve. A key whose declared provider has not loaded throws
45169
+ * too, naming that: {@link load} resolves it. */
45167
45170
  resolve(kind, name) {
45168
45171
  const ext = this.#byKey.get(this.#canonical(kind, name));
45169
- if (!ext)
45172
+ if (!ext) {
45173
+ if (this.#providers.has(`${kind}:${name}`))
45174
+ throw new Error(`${kind} "${name}" is declared by a provider this process has not loaded`);
45170
45175
  throw new Error(`no ${kind} registered for "${name}"`);
45176
+ }
45171
45177
  return ext;
45172
45178
  }
45179
+ /** Declare a provider: a module that registers `provides` when it is imported. Nothing is imported
45180
+ * here. A key that another provider already declares is refused, so a key has one provider. */
45181
+ provide(provider) {
45182
+ const keys = provider.provides.map((ref) => `${ref.kind}:${ref.name}`);
45183
+ for (const key of keys)
45184
+ if (this.#providers.has(key))
45185
+ throw new Error(`extension provider already declared: ${key}`);
45186
+ const entry = { provider };
45187
+ for (const key of keys)
45188
+ this.#providers.set(key, entry);
45189
+ }
45190
+ /** Whether a provider was declared for exactly this kind + name, loaded or not. A boolean probe
45191
+ * that never throws and imports nothing. */
45192
+ provides(kind, name) {
45193
+ return this.#providers.has(`${kind}:${name}`);
45194
+ }
45195
+ /** Resolve kind + name, first importing the provider declared for it unless that import has run.
45196
+ * Concurrent calls share one import. A key no provider declares resolves as {@link resolve} does.
45197
+ * A provider that loads without registering the key it declared throws: the declaration is wrong,
45198
+ * and no other extension stands in for it. */
45199
+ async load(kind, name) {
45200
+ const entry = this.#providers.get(`${kind}:${name}`);
45201
+ if (entry) {
45202
+ entry.loading ??= entry.provider.load();
45203
+ await entry.loading;
45204
+ if (!this.#byKey.has(this.#canonical(kind, name)))
45205
+ throw new Error(`the provider declared for ${kind} "${name}" loaded without registering it`);
45206
+ }
45207
+ return this.resolve(kind, name);
45208
+ }
45173
45209
  all(kind) {
45174
45210
  const values = [...this.#byKey.values()];
45175
45211
  return kind === void 0 ? values : values.filter((e) => e.kind === kind);
@@ -63240,10 +63276,10 @@ function date4(params) {
63240
63276
  config(en_default());
63241
63277
 
63242
63278
  // ../connector-core/dist/docs-bundle.generated.js
63243
- var DOCS_VERSION = "0.108.1";
63279
+ var DOCS_VERSION = "0.109.0";
63244
63280
  function loadDocsBundle() {
63245
63281
  return {
63246
- "version": "0.108.1",
63282
+ "version": "0.109.0",
63247
63283
  "generatedFrom": "docs/*.md + SPEC.md + spec/cotal-lang.md + spec/cotal.schema.json",
63248
63284
  "pages": [
63249
63285
  {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cotal-ai/connector-hermes",
3
3
  "description": "Cotal connector for the Hermes (Nous Research) agent.",
4
- "version": "0.108.1",
4
+ "version": "0.109.0",
5
5
  "license": "Apache-2.0",
6
6
  "repository": {
7
7
  "type": "git",
@@ -24,8 +24,8 @@
24
24
  "@cotal-ai/core": ">=0.1.0"
25
25
  },
26
26
  "devDependencies": {
27
- "@cotal-ai/core": "0.108.1",
28
- "@cotal-ai/connector-core": "0.108.1",
27
+ "@cotal-ai/core": "0.109.0",
28
+ "@cotal-ai/connector-core": "0.109.0",
29
29
  "@cotal-ai/smoke-kit": "0.0.0",
30
30
  "esbuild": "^0.28.0",
31
31
  "tsx": "^4.22.4",
@@ -44934,6 +44934,8 @@ function claims(ext) {
44934
44934
  }
44935
44935
  var Registry = class {
44936
44936
  #byKey = /* @__PURE__ */ new Map();
44937
+ /** `kind:name` → the declared provider that registers it, and its import once one has started. */
44938
+ #providers = /* @__PURE__ */ new Map();
44937
44939
  /** `kind:alias` → the claiming extension's `kind:name` key, for committed extensions. */
44938
44940
  #aliases = /* @__PURE__ */ new Map();
44939
44941
  /** While a stage is active in the CURRENT async context, {@link register} writes there instead of
@@ -45020,13 +45022,47 @@ var Registry = class {
45020
45022
  return this.#aliases.get(key) ?? key;
45021
45023
  }
45022
45024
  /** Resolve one extension by kind + name or alias. Unknown throws. Staged (uncommitted) registrations are
45023
- * invisible here; only committed ones resolve. */
45025
+ * invisible here; only committed ones resolve. A key whose declared provider has not loaded throws
45026
+ * too, naming that: {@link load} resolves it. */
45024
45027
  resolve(kind, name) {
45025
45028
  const ext = this.#byKey.get(this.#canonical(kind, name));
45026
- if (!ext)
45029
+ if (!ext) {
45030
+ if (this.#providers.has(`${kind}:${name}`))
45031
+ throw new Error(`${kind} "${name}" is declared by a provider this process has not loaded`);
45027
45032
  throw new Error(`no ${kind} registered for "${name}"`);
45033
+ }
45028
45034
  return ext;
45029
45035
  }
45036
+ /** Declare a provider: a module that registers `provides` when it is imported. Nothing is imported
45037
+ * here. A key that another provider already declares is refused, so a key has one provider. */
45038
+ provide(provider) {
45039
+ const keys = provider.provides.map((ref) => `${ref.kind}:${ref.name}`);
45040
+ for (const key of keys)
45041
+ if (this.#providers.has(key))
45042
+ throw new Error(`extension provider already declared: ${key}`);
45043
+ const entry = { provider };
45044
+ for (const key of keys)
45045
+ this.#providers.set(key, entry);
45046
+ }
45047
+ /** Whether a provider was declared for exactly this kind + name, loaded or not. A boolean probe
45048
+ * that never throws and imports nothing. */
45049
+ provides(kind, name) {
45050
+ return this.#providers.has(`${kind}:${name}`);
45051
+ }
45052
+ /** Resolve kind + name, first importing the provider declared for it unless that import has run.
45053
+ * Concurrent calls share one import. A key no provider declares resolves as {@link resolve} does.
45054
+ * A provider that loads without registering the key it declared throws: the declaration is wrong,
45055
+ * and no other extension stands in for it. */
45056
+ async load(kind, name) {
45057
+ const entry = this.#providers.get(`${kind}:${name}`);
45058
+ if (entry) {
45059
+ entry.loading ??= entry.provider.load();
45060
+ await entry.loading;
45061
+ if (!this.#byKey.has(this.#canonical(kind, name)))
45062
+ throw new Error(`the provider declared for ${kind} "${name}" loaded without registering it`);
45063
+ }
45064
+ return this.resolve(kind, name);
45065
+ }
45030
45066
  all(kind) {
45031
45067
  const values = [...this.#byKey.values()];
45032
45068
  return kind === void 0 ? values : values.filter((e) => e.kind === kind);
@@ -63077,10 +63113,10 @@ function date4(params) {
63077
63113
  config(en_default());
63078
63114
 
63079
63115
  // ../connector-core/dist/docs-bundle.generated.js
63080
- var DOCS_VERSION = "0.108.1";
63116
+ var DOCS_VERSION = "0.109.0";
63081
63117
  function loadDocsBundle() {
63082
63118
  return {
63083
- "version": "0.108.1",
63119
+ "version": "0.109.0",
63084
63120
  "generatedFrom": "docs/*.md + SPEC.md + spec/cotal-lang.md + spec/cotal.schema.json",
63085
63121
  "pages": [
63086
63122
  {