@exellix/ai-tasks 8.4.1 → 8.4.2

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/README.md CHANGED
@@ -11,7 +11,7 @@ Private Git/npm package for executing **tasks** using the Woreces execution stac
11
11
  | Package | Role in `runTask` | Minimum |
12
12
  |---------|-------------------|---------|
13
13
  | `@x12i/ai-profiles` | Profile/shortcut → wire model (`catalogLane` required on resolve) | **2.1.0** |
14
- | `@exellix/xynthesis` | PRE synthesis, POST audit/polish, scoping, utilities (`executeXynthesisAction`) | **4.3.0** |
14
+ | `@exellix/xynthesis` | PRE synthesis, POST audit/polish, scoping, utilities (`executeXynthesisAction`) | **≥ 4.3.1** (4.3.0 breaks import with ai-profiles 2.1 — see [upstream §0](./documenations/upstream-feature-requests/xynthesis-orchestrator-invoke-contract-4.2.md)) |
15
15
  | `@exellix/ai-skills` | MAIN `runSkill` (Optimixer caps, `ModelConfig.reasoningEffort`) | **6.0.0** |
16
16
 
17
17
  Use explicit **ai-profiles** profile keys (`cheap`, `pro`, `cyber`, …) or **shortcuts** (`cheapest`, `default`, …) or **`profile/choice`** keys — not removed sync helpers or legacy tier aliases.
@@ -7,7 +7,8 @@ Fix reports filed for sibling packages. Hand these to the package owners; after
7
7
  | Package | Document | Status |
8
8
  |---------|----------|--------|
9
9
  | `@exellix/ai-skills` 6.0 | [ai-skills-orchestrator-invoke-contract-5.9.md](./ai-skills-orchestrator-invoke-contract-5.9.md) | **shipped** — `ModelConfig.reasoningEffort` |
10
- | `@exellix/xynthesis` 4.3 | [xynthesis-orchestrator-invoke-contract-4.2.md](./xynthesis-orchestrator-invoke-contract-4.2.md) | **shipped** — `reasoningEffort` on `ExecuteXynthesisActionRequest` (xynthesis should drop `isKnownProfileOrShortcut` import for ai-profiles 2.1) |
10
+ | `@exellix/xynthesis` 4.3 | [**xynthesis-ai-profiles-2.1-import-break.md**](./xynthesis-ai-profiles-2.1-import-break.md) | **P0 blocked** — **4.3.0** breaks `import "@exellix/xynthesis"` with ai-profiles **2.1.0**; need **≥ 4.3.1** |
11
+ | `@exellix/xynthesis` 4.3 | [xynthesis-orchestrator-invoke-contract-4.2.md](./xynthesis-orchestrator-invoke-contract-4.2.md) | **partial** — `reasoningEffort` shipped in 4.3.0; import break tracked in CR above |
11
12
  | `@x12i/ai-profiles` 2.1 | — | **shipped** — `catalogLane` required; sync `isKnownProfileOrShortcut` removed (safer — resolve at invoke) |
12
13
  | `@exellix/ai-tasks` | [ai-tasks-wrap-up-after-upstream.md](./ai-tasks-wrap-up-after-upstream.md) | **done** in 8.4 — no legacy tiers; resolve at invoke via `resolveAIProfile` |
13
14
 
@@ -1,6 +1,6 @@
1
1
  # `@exellix/ai-tasks` — wrap-up after upstream invoke-contract fixes
2
2
 
3
- Status: **blocked** on **@exellix/xynthesis ≥ 4.3.1** fixing ai-profiles 2.1 import ([§0](./xynthesis-orchestrator-invoke-contract-4.2.md)); invoke-contract items below are otherwise shipped in **ai-skills 6.0** / **xynthesis 4.3**:
3
+ Status: **blocked** on **@exellix/xynthesis ≥ 4.3.1** ([xynthesis-ai-profiles-2.1-import-break.md](./xynthesis-ai-profiles-2.1-import-break.md)); invoke-contract items below are otherwise shipped in **ai-skills 6.0** / **xynthesis 4.3**:
4
4
 
5
5
  - [`ai-skills-orchestrator-invoke-contract-5.9.md`](./ai-skills-orchestrator-invoke-contract-5.9.md)
6
6
  - [`xynthesis-orchestrator-invoke-contract-4.2.md`](./xynthesis-orchestrator-invoke-contract-4.2.md)
@@ -107,8 +107,8 @@ flowchart LR
107
107
 
108
108
  Recommended sequence:
109
109
 
110
- 1. Merge **xynthesis** + **ai-skills** contract PRs (can be parallel).
111
- 2. Bump `package.json` minimums in ai-tasks.
110
+ 1. Merge **xynthesis** ai-profiles 2.1 import fix (**≥ 4.3.1**) + **ai-skills** contract PRs (can be parallel).
111
+ 2. Bump `package.json`: `"@exellix/xynthesis": "^4.3.1"` (minimum — **do not** ship ai-tasks 8.4.x consumer release on **4.3.0**).
112
112
  3. Execute **this wrap-up** checklist in one ai-tasks PR.
113
113
  4. Release note in **8.4.x** or **8.5.0** with graph-engine migration (drop `maxTokensCap` on task payloads if removed).
114
114
 
@@ -0,0 +1,324 @@
1
+ # `@exellix/xynthesis` — ai-profiles 2.1 import break (`isKnownProfileOrShortcut` removed)
2
+
3
+ Status: **open — blocks all consumers**
4
+ Owner: `@exellix/xynthesis`
5
+ Filed by: `@exellix/ai-tasks`
6
+ Target release: **`@exellix/xynthesis` ≥ 4.3.1**
7
+ Reproduced with: `@exellix/xynthesis` **4.3.0** (broken), `@x12i/ai-profiles` **2.1.0** (required by `@x12i/ai-tools` ≥ 2.4)
8
+ Consumers blocked: `@exellix/ai-tasks` **8.4.x**, graph-engine import tests, any app that `import "@exellix/xynthesis"`
9
+
10
+ Related: [`xynthesis-orchestrator-invoke-contract-4.2.md §0`](./xynthesis-orchestrator-invoke-contract-4.2.md) (invoke-contract track — this CR is the **P0 runtime fix**)
11
+
12
+ ---
13
+
14
+ ## Summary
15
+
16
+ **`@exellix/xynthesis@4.3.0`** imports and re-exports **`isKnownProfileOrShortcut`** from **`@x12i/ai-profiles`**. That symbol was **removed from the package root in ai-profiles 2.1.0** (replaced by **`isKnownProfileChoice`** and strict **`profile/choice`** resolution).
17
+
18
+ With the current Exellix stack pinned to ai-profiles **2.1.0**, **module load fails before any API call**:
19
+
20
+ ```text
21
+ SyntaxError: The requested module '@x12i/ai-profiles' does not provide an export named 'isKnownProfileOrShortcut'
22
+ ```
23
+
24
+ **Not an ai-profiles bug** — 2.1.0 intentionally dropped sync alias guessing.
25
+ **Not an ai-tasks bug** — ai-tasks already migrated to ai-profiles 2.1 APIs.
26
+ **Not fixable in consumers** — npm `overrides`, deep imports of `dist/isKnownProfileOrShortcut.js`, or pinning ai-profiles `<2.1` violate the no-legacy invoke contract and break `@x12i/ai-tools`.
27
+
28
+ **Required:** xynthesis **4.3.1** patch — adopt ai-profiles 2.1 resolve input normalization (same pattern as ai-tasks 8.4).
29
+
30
+ ---
31
+
32
+ ## Impact
33
+
34
+ | Path | Symptom |
35
+ |------|---------|
36
+ | `import "@exellix/xynthesis"` | **SyntaxError** at ESM link time |
37
+ | `import "@exellix/ai-tasks"` | Same — ai-tasks depends on xynthesis |
38
+ | graph-engine / consumer test suites | Fail at import; no `runTask()` coverage |
39
+ | `executeXynthesisAction({ model: "cheap", … })` | Would fail at resolve **after** import fix if resolve path is not updated |
40
+
41
+ ---
42
+
43
+ ## Reproduction
44
+
45
+ ### Minimal (any Node 20+ project with both packages installed)
46
+
47
+ ```bash
48
+ npm i @exellix/xynthesis@4.3.0 @x12i/ai-profiles@2.1.0
49
+ node -e "import('@exellix/xynthesis').then(() => console.log('ok')).catch(e => console.error(e))"
50
+ # SyntaxError: ... does not provide an export named 'isKnownProfileOrShortcut'
51
+ ```
52
+
53
+ ### From ai-tasks repo
54
+
55
+ ```bash
56
+ cd ai-tasks
57
+ npm install # tree dedupes ai-profiles@2.1.0
58
+ node -e "import('@exellix/xynthesis')"
59
+ npm run test # fails at import / dist-test compile depending on test graph
60
+ ```
61
+
62
+ ### Dependency tree (why ai-profiles cannot be downgraded)
63
+
64
+ ```text
65
+ @exellix/ai-tasks
66
+ ├── @x12i/ai-profiles@2.1.0
67
+ ├── @exellix/xynthesis@4.3.0 → imports isKnownProfileOrShortcut ✗
68
+ ├── @exellix/ai-skills@6.0.0 → ai-profiles@2.1.0
69
+ └── @x12i/funcx@4.3.3 → ai-profiles@2.1.0
70
+ └── @exellix/xynthesis (transitive)
71
+ └── @x12i/ai-tools@2.4.0 → requires ai-profiles 2.1 (formatProfileChoiceKey)
72
+ ```
73
+
74
+ ---
75
+
76
+ ## Root cause (xynthesis 4.3.0)
77
+
78
+ ### 1. Broken ESM import / re-export
79
+
80
+ **File:** `src/index.ts` (compiled to `dist/index.js`)
81
+
82
+ ```ts
83
+ export {
84
+ resolveAIProfile,
85
+ isKnownProfileOrShortcut, // ← removed from ai-profiles 2.1 root
86
+ listAIProfiles,
87
+ listAIShortcuts,
88
+ } from "@x12i/ai-profiles";
89
+ ```
90
+
91
+ **File:** `src/resolveAiProfileModel.ts`
92
+
93
+ ```ts
94
+ import { isKnownProfileOrShortcut, resolveAIProfile } from "@x12i/ai-profiles";
95
+
96
+ export function assertKnownModelAlias(input: string): void {
97
+ // ...
98
+ if (!isKnownProfileOrShortcut(key)) {
99
+ throw new Error(`xynthesis: unknown model alias "${key}"…`);
100
+ }
101
+ }
102
+ ```
103
+
104
+ Because **`index.ts` re-exports the missing symbol**, Node fails while linking `@exellix/xynthesis` — even callers that never use `assertKnownModelAlias`.
105
+
106
+ ### 2. Stale resolve input shape (secondary — fails after import fix)
107
+
108
+ **File:** `src/resolveAiProfileModel.ts` — `resolveXynthesisModel`
109
+
110
+ ```ts
111
+ const profile = await resolveAIProfile(alias, mergedOptions);
112
+ ```
113
+
114
+ ai-profiles **2.1.0** rejects bare profile keys:
115
+
116
+ ```text
117
+ Unknown profile/choice key: cheap. Use "profile/choice" (e.g. "cheap/default") or a shortcut that pins both.
118
+ ```
119
+
120
+ Orchestrators (graph-engine, ai-tasks) still send **`preActionModel: "cheap"`** / **`postActionModel: "cheap"`** on the wire. ai-tasks expands at invoke via `formatProfileChoiceKey(profile, "default")`; xynthesis must do the same before `resolveAIProfile`.
121
+
122
+ ---
123
+
124
+ ## Recommended fix (xynthesis ≥ 4.3.1)
125
+
126
+ **No consumer workarounds.** Fix belongs entirely in `@exellix/xynthesis`.
127
+
128
+ ### Step 1 — Bump dependency
129
+
130
+ ```json
131
+ "@x12i/ai-profiles": "^2.1.0"
132
+ ```
133
+
134
+ ### Step 2 — Add ai-profiles 2.1 input normalization helper
135
+
136
+ Mirror **`@exellix/ai-tasks`** `src/utils/aiProfileModelFormat.ts` (`toStrictAiProfileResolveInput`). Suggested new file **`src/aiProfileResolveInput.ts`**:
137
+
138
+ ```ts
139
+ import {
140
+ formatProfileChoiceKey,
141
+ isKnownProfileChoice,
142
+ isProfileChoiceKeyFormat,
143
+ } from "@x12i/ai-profiles";
144
+
145
+ /** Map caller alias → ai-profiles 2.1 `resolveAIProfile` input. */
146
+ export function toStrictAiProfileResolveInput(profileSlot: string, explicitChoice?: string): string {
147
+ const trimmed = profileSlot.trim();
148
+ if (!trimmed) return trimmed;
149
+
150
+ if (explicitChoice?.trim()) {
151
+ return formatProfileChoiceKey(trimmed, explicitChoice.trim());
152
+ }
153
+
154
+ const at = trimmed.indexOf("@");
155
+ if (at > 0) {
156
+ const profile = trimmed.slice(0, at).trim();
157
+ const choice = trimmed.slice(at + 1).trim();
158
+ return choice
159
+ ? formatProfileChoiceKey(profile, choice)
160
+ : formatProfileChoiceKey(profile, "default");
161
+ }
162
+
163
+ if (isProfileChoiceKeyFormat(trimmed) || isKnownProfileChoice(trimmed)) {
164
+ return trimmed;
165
+ }
166
+
167
+ // Bare profile key (e.g. "cheap") → default choice ("cheap/default")
168
+ return formatProfileChoiceKey(trimmed, "default");
169
+ }
170
+
171
+ /** Sync bundled-registry check after normalization (shortcuts + profile/choice keys). */
172
+ export function isKnownXynthesisModelAlias(input: string): boolean {
173
+ const trimmed = input.trim();
174
+ if (!trimmed) return false;
175
+ const resolveInput = toStrictAiProfileResolveInput(trimmed);
176
+ return isKnownProfileChoice(resolveInput);
177
+ }
178
+ ```
179
+
180
+ ### Step 3 — Update `resolveAiProfileModel.ts`
181
+
182
+ ```ts
183
+ import { resolveAIProfile } from "@x12i/ai-profiles";
184
+ import {
185
+ isKnownXynthesisModelAlias,
186
+ toStrictAiProfileResolveInput,
187
+ } from "./aiProfileResolveInput.js";
188
+
189
+ export function assertKnownModelAlias(input: string): void {
190
+ const key = normalizeAliasInput(input);
191
+ if (!key) {
192
+ throw new Error("xynthesis: model alias must be a non-empty string");
193
+ }
194
+ if (!isKnownXynthesisModelAlias(key)) {
195
+ throw new Error(
196
+ `xynthesis: unknown model alias "${key}". Use profile/choice (e.g. cheap/default), profile@choice, or a shortcut (cheapest, default, json).`
197
+ );
198
+ }
199
+ }
200
+
201
+ export async function resolveXynthesisModel(input, options) {
202
+ // ... existing guards ...
203
+ const alias = normalizeAliasInput(input);
204
+ const resolveInput = toStrictAiProfileResolveInput(alias);
205
+ const profile = await resolveAIProfile(resolveInput, mergedOptions);
206
+ // ... rest unchanged ...
207
+ }
208
+ ```
209
+
210
+ ### Step 4 — Fix public re-exports in `index.ts`
211
+
212
+ **Remove** `isKnownProfileOrShortcut` from the ai-profiles re-export block.
213
+
214
+ **Preferred replacement:**
215
+
216
+ ```ts
217
+ export {
218
+ resolveAIProfile,
219
+ isKnownProfileChoice,
220
+ formatProfileChoiceKey,
221
+ listAIProfiles,
222
+ listAIShortcuts,
223
+ } from "@x12i/ai-profiles";
224
+ ```
225
+
226
+ **Breaking note for xynthesis CHANGELOG:** `isKnownProfileOrShortcut` re-export removed; use `isKnownProfileChoice` + `toStrictAiProfileResolveInput` (exported from xynthesis) or import directly from `@x12i/ai-profiles`.
227
+
228
+ Optionally export `toStrictAiProfileResolveInput` / `isKnownXynthesisModelAlias` from the package root if downstream tools relied on xynthesis as the ai-profiles facade.
229
+
230
+ ### Step 5 — Tests (xynthesis)
231
+
232
+ Extend **`test/resolveAiProfileModel.unit.ts`**:
233
+
234
+ ```ts
235
+ import assert from "node:assert/strict";
236
+ import { isKnownXynthesisModelAlias, toStrictAiProfileResolveInput } from "../src/aiProfileResolveInput.js";
237
+ import { resolveXynthesisModel, assertKnownModelAlias } from "../src/resolveAiProfileModel.js";
238
+
239
+ // Import smoke (add dedicated test file if needed)
240
+ await import("../dist/index.js"); // must not throw with ai-profiles 2.1 peer
241
+
242
+ assert.equal(toStrictAiProfileResolveInput("cheap"), "cheap/default");
243
+ assert.equal(isKnownXynthesisModelAlias("cheap"), true);
244
+ assert.equal(isKnownXynthesisModelAlias("cheapest"), true);
245
+ assert.throws(() => assertKnownModelAlias("not-a-profile"));
246
+
247
+ const resolved = await resolveXynthesisModel("cheap", {
248
+ source: "bundled",
249
+ preferOpenRouter: false,
250
+ openrouterApiKeyPresent: false,
251
+ });
252
+ assert.ok(resolved?.wireModelId.includes("/"));
253
+ ```
254
+
255
+ Add **`test/aiProfiles21Import.unit.ts`**:
256
+
257
+ ```ts
258
+ await import("@exellix/xynthesis"); // ESM link test
259
+ ```
260
+
261
+ Run full suite with **`@x12i/ai-profiles@2.1.0`** installed (not 2.0.x).
262
+
263
+ ---
264
+
265
+ ## Explicitly rejected (no workarounds)
266
+
267
+ | Approach | Why rejected |
268
+ |----------|--------------|
269
+ | Consumer npm `overrides` pinning ai-profiles 2.0.x | Breaks `@x12i/ai-tools` / `formatProfileChoiceKey`; violates stack alignment |
270
+ | Deep import `@x12i/ai-profiles/dist/isKnownProfileOrShortcut.js` | Private path; not in package exports |
271
+ | ai-profiles 2.1.1 re-export shim only | Pushes debt upstream; xynthesis still passes bare keys to `resolveAIProfile` |
272
+ | graph-engine / ai-tasks patch | Wrong layer — xynthesis owns PRE/POST model resolve |
273
+
274
+ ---
275
+
276
+ ## After xynthesis 4.3.1 ships — ai-tasks follow-up
277
+
278
+ 1. `"@exellix/xynthesis": "^4.3.1"` in `@exellix/ai-tasks` `package.json`
279
+ 2. `npm install && npm run test`
280
+ 3. Patch release **8.4.x** updating README / BREAKING-CHANGES minimums
281
+
282
+ See [`ai-tasks-wrap-up-after-upstream.md`](./ai-tasks-wrap-up-after-upstream.md).
283
+
284
+ ---
285
+
286
+ ## Paste-ready GitHub issue (xynthesis repo)
287
+
288
+ **Title:** ai-profiles 2.1: remove `isKnownProfileOrShortcut` import; normalize profile resolve input
289
+
290
+ **Labels:** `bug`, `ai-profiles`, `breaking`, `P0`
291
+
292
+ **Body:**
293
+
294
+ > `@exellix/xynthesis@4.3.0` fails to load with `@x12i/ai-profiles@2.1.0`:
295
+ >
296
+ > ```
297
+ > SyntaxError: The requested module '@x12i/ai-profiles' does not provide an export named 'isKnownProfileOrShortcut'
298
+ > ```
299
+ >
300
+ > Blocks `@exellix/ai-tasks@8.4.x` and graph-engine import tests.
301
+ >
302
+ > **Fix (4.3.1):**
303
+ > 1. Remove `isKnownProfileOrShortcut` import/re-export; use ai-profiles 2.1 APIs.
304
+ > 2. Normalize bare profile keys (`cheap` → `cheap/default`) before `resolveAIProfile` — see ai-tasks `toStrictAiProfileResolveInput`.
305
+ > 3. Bump `@x12i/ai-profiles` peer to `^2.1.0`; add import + resolve unit tests.
306
+ >
307
+ > Full spec: [link to this doc in ai-tasks repo]
308
+
309
+ **Acceptance criteria:**
310
+
311
+ - [ ] `node -e "import('@exellix/xynthesis')"` succeeds with `@x12i/ai-profiles@2.1.0`.
312
+ - [ ] `resolveXynthesisModel("cheap", { source: "bundled" })` returns a wire model id (no `UNKNOWN_PROFILE_CHOICE`).
313
+ - [ ] `assertKnownModelAlias("cheap")` does not throw; `assertKnownModelAlias("not-a-profile")` throws.
314
+ - [ ] `isKnownProfileOrShortcut` is **not** exported from `@exellix/xynthesis` root.
315
+ - [ ] CHANGELOG entry; publish **4.3.1** (patch).
316
+
317
+ ---
318
+
319
+ ## Related
320
+
321
+ - [`@exellix/ai-tasks` `src/utils/aiProfileModelFormat.ts`](../../src/utils/aiProfileModelFormat.ts) — reference implementation
322
+ - [`.docs/ai-tasks-model-profile-aliases-7x.md`](../../.docs/ai-tasks-model-profile-aliases-7x.md) — wire shapes orchestrators send
323
+ - [`BREAKING-CHANGES.md`](../../BREAKING-CHANGES.md) — 8.4.x blocked subsection
324
+ - [`xynthesis-orchestrator-invoke-contract-4.2.md`](./xynthesis-orchestrator-invoke-contract-4.2.md) — invoke contract (reasoningEffort shipped; import fix is separate P0)
@@ -10,13 +10,13 @@ Related (older, partially superseded): [`xynthesis-llm-observability.md`](./xynt
10
10
 
11
11
  ---
12
12
 
13
- ## 0. Blocker: `isKnownProfileOrShortcut` import vs ai-profiles 2.1.0
13
+ ## 0. Blocker: ai-profiles 2.1 import break — **see dedicated CR**
14
14
 
15
- **`@exellix/xynthesis@4.3.0`** (and **4.2.x**) still import and re-export **`isKnownProfileOrShortcut`** from **`@x12i/ai-profiles`**. That symbol was **removed from the package root in ai-profiles 2.1.0** (implementation remains under `dist/isKnownProfileOrShortcut.js`).
15
+ **P0 tracked in [`xynthesis-ai-profiles-2.1-import-break.md`](./xynthesis-ai-profiles-2.1-import-break.md).**
16
16
 
17
- With **`@x12i/ai-profiles@2.1.0`** (required by **`@x12i/ai-tools`** for `formatProfileChoiceKey`), **`import "@exellix/xynthesis"` fails at runtime** before any `executeXynthesisAction` call.
17
+ **`@exellix/xynthesis@4.3.0`** breaks `import "@exellix/xynthesis"` with **`@x12i/ai-profiles@2.1.0`** (`isKnownProfileOrShortcut` removed). Fix requires **≥ 4.3.1** with ai-profiles 2.1 resolve-input normalization not a symbol rename only.
18
18
 
19
- **Ask:** Replace with **`isKnownProfileChoice`** + **`matchDiscoveryProfileInput`** (or re-export `isKnownProfileOrShortcut` from ai-profiles 2.1.1). Release **≥ 4.3.1**.
19
+ **After publish ai-tasks bump:** `"@exellix/xynthesis": "^4.3.1"`, test, patch release.
20
20
 
21
21
  ---
22
22
 
@@ -167,6 +167,8 @@ ai-tasks will follow whichever contract is published; default integration is **n
167
167
 
168
168
  ## Verification checklist (for xynthesis PR)
169
169
 
170
+ - [ ] Replace `isKnownProfileOrShortcut` → `isKnownProfileChoice` (index re-export + `resolveAiProfileModel` / `assertKnownModelAlias`).
171
+ - [ ] `import "@exellix/xynthesis"` succeeds with `@x12i/ai-profiles@2.1.0` installed.
170
172
  - [ ] `ExecuteXynthesisActionRequest.reasoningEffort` (and gateway wrappers).
171
173
  - [ ] Optimixer predict receives resolved `reasoningEffort`.
172
174
  - [ ] `temperature` + `topP` integration tests on `executeXynthesisAction` + structured gateway.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exellix/ai-tasks",
3
- "version": "8.4.1",
3
+ "version": "8.4.2",
4
4
  "description": "Task orchestration for the Exellix stack: runTask() with local handlers or LLM-backed execution, task-scoped memory/context enrichment, and executor dispatch via @exellix/ai-skills. ERC-compliant.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -78,7 +78,7 @@
78
78
  "@exellix/narrix-ingest": "^2.0.0",
79
79
  "@exellix/narrix-runner": "^2.0.0",
80
80
  "@exellix/narrix-web-scoper": "^2.0.0",
81
- "@exellix/xynthesis": "^4.3.0",
81
+ "@exellix/xynthesis": "^4.3.1",
82
82
  "@x12i/activix": "^8.5.0",
83
83
  "@x12i/ai-profiles": "^2.1.0",
84
84
  "@x12i/catalox": "^5.1.3",