@exellix/graph-composer 2.5.8 → 2.6.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/README.md CHANGED
@@ -21,7 +21,7 @@ LLM-backed **graph composer** for the **worox-graph** DAG format using [@x12i/fu
21
21
 
22
22
  Pass **`catalogCandidates`** on `GraphComposerAgentInput` when the goal involves catalog or scoping tools (host loads rows from **Catalox** via `loadCatalogCandidatesFromCatalox`, or supplies fixtures).
23
23
 
24
- Upstream feature requests/specs for first-class tool loops, worker profiles, chat, preset tool arguments, and Rendrix-rendered templates in FuncX/aifunctions-js: [docs/aifunctions-agent-toolbox-feature-request.md](./docs/aifunctions-agent-toolbox-feature-request.md), [docs/funcx-generic-pack-spec.md](./docs/funcx-generic-pack-spec.md).
24
+ FuncX pack / example-generation contract: [docs/funcx-generic-pack-spec.md](./docs/funcx-generic-pack-spec.md).
25
25
 
26
26
  ## Install
27
27
 
@@ -42,7 +42,9 @@ Requires **Node.js 20+** (Catalox embedder and this package align on `>=20`).
42
42
  | `LOGXER_PACKAGE_LEVELS` | No | Bulk levels, e.g. `GRAPH_COMPOSER:debug,GRAPH_ENGINE:warn` (applied at module load). |
43
43
  | `LOGXER_PACKAGE_LOGS_DEFAULT` | No | Registry default when a prefix has no override (default `warn`). |
44
44
 
45
- Copy [`.env.example`](./.env.example) to `.env` for local development. **Do not commit secrets.**
45
+ Copy [`.env.example`](./.env.example) to `.env` for local development. **Do not commit secrets.** API keys are env-only — never embed `OPENROUTER_API_KEY` in graph JSON or composer input objects.
46
+
47
+ **Composer `maxTokens` vs graph JSON:** `RunGraphComposerOptions.maxTokens` caps the **composer LLM's own** completion when generating or editing graphs. Authored graph nodes must **not** carry token caps on `taskConfiguration.llmCall` or `modelConfig` — Optimixer owns completion budget at `@exellix/ai-tasks` invoke time.
46
48
 
47
49
  ## Quick start (direct worker)
48
50
 
@@ -295,7 +297,7 @@ graph-composer explain-basic
295
297
  | `parseGraphConceptStory`, `isGraphConceptStoryDescription`, `GRAPH_CONCEPT_STORY_MARKER`, … | Parse **graph concept story** text for `create` / `modify` / reviews. |
296
298
  | `redactSecretsForLog` | Deep-redact sensitive key names for logging (used by `reviewConcept` tracing). |
297
299
 
298
- `RunGraphComposerOptions`: `client`, `mode`, `model`, `temperature`, `maxTokens`, `askTimeoutMs`, `connectTimeoutMs`, **`catalogMatchListsAssist`**, **`traceReviewConceptIo`**, **`logsLevel`**, **`logging`** — see [integration handoff](./docs/integration-handoff.md).
300
+ `RunGraphComposerOptions`: `client`, `mode`, `model`, `temperature`, `maxTokens`, `askTimeoutMs`, `connectTimeoutMs`, **`catalogMatchListsAssist`**, **`traceReviewConceptIo`**, **`logsLevel`**, **`logging`** — see `RunGraphComposerOptions` in package types / `runGraphComposer.ts`.
299
301
 
300
302
  **Deep stacks (@x12i/logxer ≥ 4.5):** Call `applyPackageLogLevelsFromEnv()` / `configurePackageLogLevels()` in the host before importing graph-composer, or pass `logging: { packageLevels: { GRAPH_COMPOSER: 'debug' } }` on `runGraphComposer`. Re-exported: `configurePackageLogLevels`, `applyPackageLogLevelsFromEnv`, `StackLoggingOptions`.
301
303
 
@@ -330,18 +332,16 @@ npx nx-config2 run --env-file .env -- npm test
330
332
 
331
333
  **Maintainer smoke (suggest only, truncated JSON):** `npm run suggest-smoke` (repo only; uses `scripts/run-suggest-concept-smoke.ts`).
332
334
 
333
- **Catalox / Firestore live catalog probe:** `npm run verify:catalog-live` — lists configured **`aiSkills`** merge catalogs (core skills + PRE/POST by default; synthesis catalog **only if** `GC_VERIFY_CATALOG_INPUT_SYNTHESIS_MODES` is set) and runs **`loadCatalogCandidatesFromCatalox`**. Defaults **`CataloxContext.superAdmin=true`**; with **@x12i/catalox ≥ 3.4.6**, **`CATALOX_APP_ID`** is optional (catalog-id-first). Needs **`FIREBASE_PROJECT_ID`** (or other project id env) and **`FIREBASE_SERVICE_ACCOUNT_PATH`** / base64 SA / ADC. See [docs/catalox-multi-app-context.md](./docs/catalox-multi-app-context.md) and [docs/catalog-metadb-end-state-contract.md](./docs/catalog-metadb-end-state-contract.md) § Live verification.
335
+ **Catalox / Firestore live catalog probe:** `npm run verify:catalog-live` — lists configured **`aiSkills`** merge catalogs (core skills + PRE/POST by default; synthesis catalog **only if** `GC_VERIFY_CATALOG_INPUT_SYNTHESIS_MODES` is set) and runs **`loadCatalogCandidatesFromCatalox`**. Defaults **`CataloxContext.superAdmin=true`**; with **@x12i/catalox ≥ 3.4.6**, **`CATALOX_APP_ID`** is optional (catalog-id-first). Needs **`FIREBASE_PROJECT_ID`** (or other project id env) and **`FIREBASE_SERVICE_ACCOUNT_PATH`** / base64 SA / ADC. See [docs/catalog-metadb-end-state-contract.md](./docs/catalog-metadb-end-state-contract.md) § Live verification.
334
336
 
335
337
  ## Documentation in this repo
336
338
 
337
- - **Handoff / forward notes:** [docs/integration-handoff.md](./docs/integration-handoff.md)
338
339
  - **Catalog shapes & inspection:** [docs/worox-graphs-catalogs.md](./docs/worox-graphs-catalogs.md)
339
340
  - **MetaDB / host CRUD handoff:** [docs/catalog-metadb-end-state-contract.md](./docs/catalog-metadb-end-state-contract.md)
340
341
  - **Task node (`aiTaskProfile`) + worox-graph alignment:** [docs/task-node-worox-graph-and-graph-composer.md](./docs/task-node-worox-graph-and-graph-composer.md) · [docs/task-node-execution-protocol.md](./docs/task-node-execution-protocol.md)
341
- - **aifunctions-js agent toolbox FR:** [docs/aifunctions-agent-toolbox-feature-request.md](./docs/aifunctions-agent-toolbox-feature-request.md)
342
- - **Funcx example generation context:** [docs/funcx-example-generation-feature-request.md](./docs/funcx-example-generation-feature-request.md)
343
- - **Verify suggestConceptObjective:** [docs/verify-suggest-concept-objective.md](./docs/verify-suggest-concept-objective.md)
344
- - **aifunctions-js transport report:** [docs/report-aifunctions-js-undici-http.md](./docs/report-aifunctions-js-undici-http.md)
342
+ - **FuncX pack spec:** [docs/funcx-generic-pack-spec.md](./docs/funcx-generic-pack-spec.md)
343
+ - **Graph entry agent contract:** [docs/graph-entry-agent-contract.md](./docs/graph-entry-agent-contract.md)
344
+ - **Normative graph object formats:** `@exellix/graph-engine` → `formats-documentations/`
345
345
  - **Historical spec:** [docs/specs.md](./docs/specs.md) — not published on npm
346
346
 
347
347
  Published npm tarball still **does not** ship `docs/`; clone the repo or read these on GitHub for integration details.
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalGraphDocument.d.ts","sourceRoot":"","sources":["../src/canonicalGraphDocument.ts"],"names":[],"mappings":"AAAA;;GAEG;AAmbH,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAc7E;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAiCtF;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAWpF"}
1
+ {"version":3,"file":"canonicalGraphDocument.d.ts","sourceRoot":"","sources":["../src/canonicalGraphDocument.ts"],"names":[],"mappings":"AAAA;;GAEG;AAwcH,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAc7E;AAED,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAiCtF;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAWpF"}
@@ -207,14 +207,32 @@ function ensureGraphResponse(graph) {
207
207
  return changed;
208
208
  }
209
209
  function canonicalizeTaskConfigurationExecutionStrategies(node) {
210
- const tc = readRecord(node.taskConfiguration);
211
- if (tc === undefined || tc.executionStrategies === undefined)
210
+ if (node.type !== 'task' && node.type !== undefined)
212
211
  return false;
213
- const normalized = canonicalizeExecutionStrategies(tc.executionStrategies);
214
- if (normalized === tc.executionStrategies)
212
+ const skillKey = node.skillKey;
213
+ if (typeof skillKey !== 'string' || skillKey.trim() === '')
215
214
  return false;
216
- node.taskConfiguration = { ...tc, executionStrategies: normalized };
217
- return true;
215
+ let tc = readRecord(node.taskConfiguration);
216
+ let changed = false;
217
+ if (tc === undefined) {
218
+ tc = {};
219
+ changed = true;
220
+ }
221
+ if (tc.executionStrategies === undefined) {
222
+ tc = { ...tc, executionStrategies: [] };
223
+ changed = true;
224
+ }
225
+ else {
226
+ const normalized = canonicalizeExecutionStrategies(tc.executionStrategies);
227
+ if (normalized !== tc.executionStrategies) {
228
+ tc = { ...tc, executionStrategies: normalized };
229
+ changed = true;
230
+ }
231
+ }
232
+ if (changed) {
233
+ node.taskConfiguration = tc;
234
+ }
235
+ return changed;
218
236
  }
219
237
  function extractWebQuestionsFromNarrix(narrix) {
220
238
  const raw = narrix.webScopeQuestions;
@@ -1 +1 @@
1
- {"version":3,"file":"canonicalGraphWarnings.d.ts","sourceRoot":"","sources":["../src/canonicalGraphWarnings.ts"],"names":[],"mappings":"AAkIA;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAwHrE"}
1
+ {"version":3,"file":"canonicalGraphWarnings.d.ts","sourceRoot":"","sources":["../src/canonicalGraphWarnings.ts"],"names":[],"mappings":"AAkIA;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgIrE"}
@@ -87,7 +87,7 @@ function collectModelProfileWarnings(graph) {
87
87
  }
88
88
  }
89
89
  if ("xynthesisModel" in o) {
90
- warnings.push(`${path}: xynthesisModel was removed in graph-engine 7.1 — use preActionModel, skillModel, and postActionModel with profile names (cheap, balanced, deep).`);
90
+ warnings.push(`${path}: xynthesisModel was removed in graph-engine 7.1 — use preActionModel, skillModel, and postActionModel with profile/choice keys (e.g. cheap/default, pro/default).`);
91
91
  }
92
92
  };
93
93
  const checkSelection = (selection, path) => {
@@ -183,6 +183,11 @@ export function collectCanonicalGraphWarnings(graph) {
183
183
  }
184
184
  }
185
185
  }
186
+ if (node.type === "task" && typeof node.skillKey === "string" && node.skillKey.trim() !== "") {
187
+ if (tc?.executionStrategies === undefined) {
188
+ warnings.push(`${prefix}: taskConfiguration.executionStrategies is missing — use [] for plain MAIN.`);
189
+ }
190
+ }
186
191
  const extIssues = collectAiTasksNodeExtensionIssues(node, `nodes[${i}]`);
187
192
  for (const issue of extIssues) {
188
193
  warnings.push(`${prefix}: ${issue.code} at ${issue.path}: ${issue.message}`);
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Canonicalize graph JSON modelConfig toward graph-engine 7.1+ shape:
3
3
  * `{ cases: [{ modelConfig: { preActionModel, skillModel, postActionModel } }] }`
4
- * with graph-engine profile names (cheap, balanced, deep, …).
4
+ * with profile/choice keys (e.g. cheap/default, pro/default).
5
5
  */
6
6
  export type GraphAiModelConfigTriple = {
7
7
  preActionModel: string;
@@ -1,7 +1,7 @@
1
1
  /**
2
2
  * Canonicalize graph JSON modelConfig toward graph-engine 7.1+ shape:
3
3
  * `{ cases: [{ modelConfig: { preActionModel, skillModel, postActionModel } }] }`
4
- * with graph-engine profile names (cheap, balanced, deep, …).
4
+ * with profile/choice keys (e.g. cheap/default, pro/default).
5
5
  */
6
6
  function readRecord(v) {
7
7
  if (v === null || v === undefined || typeof v !== "object" || Array.isArray(v)) {
@@ -47,8 +47,9 @@ export type GraphModelLayersRuntimeOverlay = {
47
47
  };
48
48
  export type AnalyzeGraphModelLayersOptions = {
49
49
  /**
50
- * Optional runtime overlay. Omit to analyze **model-authored** config only (recommended).
51
- * Do not inject `runtime.modelConfig` at execute time unless you intend to override the graph.
50
+ * Optional runtime overlay for **studio planning analysis only**.
51
+ * graph-engine 7.7+ rejects runtime model overrides at execute time do not inject
52
+ * `runtime.modelConfig` or `runtime.nodes[id].modelConfig` into executeGraph.
52
53
  */
53
54
  runtime?: GraphModelLayersRuntimeOverlay;
54
55
  utilitySkills?: Iterable<{
@@ -1 +1 @@
1
- {"version":3,"file":"graphModelLayers.d.ts","sourceRoot":"","sources":["../src/graphModelLayers.ts"],"names":[],"mappings":"AAaA,mGAAmG;AACnG,MAAM,MAAM,qBAAqB,GAC7B,2BAA2B,GAC3B,oCAAoC,GACpC,qBAAqB,GACrB,mBAAmB,GACnB,sBAAsB,CAAC;AAE3B,MAAM,MAAM,oBAAoB,GAAG,gBAAgB,GAAG,YAAY,GAAG,iBAAiB,CAAC;AAEvF,yGAAyG;AACzG,MAAM,MAAM,wBAAwB,GAAG;IACrC,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,eAAe,EAAE,MAAM,CAAC;CACzB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG;IACtC,+CAA+C;IAC/C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,kEAAkE;IAClE,UAAU,EAAE,MAAM,CAAC;IACnB,sEAAsE;IACtE,UAAU,EAAE,MAAM,CAAC;IACnB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,8FAA8F;IAC9F,MAAM,EAAE,OAAO,CAAC;IAChB,QAAQ,EAAE,wBAAwB,CAAC;IACnC,wFAAwF;IACxF,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,0FAA0F;IAC1F,eAAe,CAAC,EAAE,MAAM,CAAC;CAC1B,CAAC;AAEF,MAAM,MAAM,oBAAoB,GAAG;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,IAAI,CACX,yBAAyB,EACzB,QAAQ,GAAG,YAAY,GAAG,YAAY,GAAG,YAAY,GAAG,UAAU,GAAG,aAAa,CACnF,CAAC;IACF,mFAAmF;IACnF,KAAK,EAAE,yBAAyB,EAAE,CAAC;CACpC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,eAAe,EAAE,OAAO,CAAC;IACzB,oBAAoB,EAAE,wBAAwB,CAAC;IAC/C,uBAAuB,CAAC,EAAE,wBAAwB,CAAC;IACnD,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,WAAW,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,SAAS,CAAC,CAAC;CAC/D,CAAC;AAEF,MAAM,MAAM,8BAA8B,GAAG;IAC3C;;;OAGG;IACH,OAAO,CAAC,EAAE,8BAA8B,CAAC;IACzC,aAAa,CAAC,EAAE,QAAQ,CAAC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAChD,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACxC,CAAC;AA4KF;;;;;;;GAOG;AACH,wBAAsB,uBAAuB,CAC3C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,wBAAwB,CAAC,CA8InC;AAED,sDAAsD;AACtD,wBAAgB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAGnE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,IAAI,KAAK,CAAC;IAC7C,MAAM,EAAE,qBAAqB,CAAC;IAC9B,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC,CAKD;AAED;;;GAGG;AACH,wBAAsB,4BAA4B,CAAC,CAAC,SAAS,MAAM,EACjE,KAAK,EAAE,CAAC,EACR,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,CAAC,CAAC,CA2CZ;AAED,4EAA4E;AAC5E,wBAAsB,4BAA4B,CAChD,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,CASpF;AAED,MAAM,MAAM,2BAA2B,GAAG;IACxC,uHAAuH;IACvH,kBAAkB,CAAC,EAAE,OAAO,CAAC;IAC7B;;;;OAIG;IACH,IAAI,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,kBAAkB,CAAC;CAC/C,CAAC;AAsBF,kFAAkF;AAClF,wBAAgB,gCAAgC,CAC9C,IAAI,EAAE,OAAO,GACZ,oBAAoB,GAAG,SAAS,CAelC;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,YAAY,EAAE,OAAO,EACrB,OAAO,CAAC,EAAE,2BAA2B,GACpC,MAAM,GAAG,SAAS,CAkCpB;AAED,4EAA4E;AAC5E,wBAAgB,4BAA4B,CAC1C,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE,2BAA2B,GACpC,MAAM,GAAG,SAAS,CAsBpB"}
1
+ {"version":3,"file":"graphModelLayers.d.ts","sourceRoot":"","sources":["../src/graphModelLayers.ts"],"names":[],"mappings":"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"}
@@ -322,7 +322,7 @@ export async function stampGraphModelLayersOnGraph(graph, options) {
322
322
  ? { providerIds: analysis.graphDefaultProviderIds }
323
323
  : {}),
324
324
  },
325
- note: "Planning overlay only. Profile names come from graph JSON and graph-engine defaults; concrete provider ids are resolved at execute time by ai-tasks / xynthesis. Omit runtime.modelConfig unless you intend to override the graph.",
325
+ note: "Planning overlay only. Profile/choice keys come from graph JSON and graph-engine defaults; concrete provider ids are resolved at execute time by ai-tasks. Runtime model overlays are analysis-only graph-engine 7.7+ rejects them at execute time.",
326
326
  };
327
327
  g.metadata = rootMeta;
328
328
  return graph;
@@ -53,11 +53,11 @@ export function collectGraphOrchestratorInvokeWarnings(graph) {
53
53
  if (llmCall !== undefined) {
54
54
  for (const key of LEGACY_LLM_CALL_TOKEN_KEYS) {
55
55
  if (key in llmCall) {
56
- warnings.push(`${prefix}: taskConfiguration.llmCall.${key} is deprecated — token budget is Optimixer-owned at invoke; use outputExpectation / reasoningEffort instead.`);
56
+ warnings.push(`${prefix}: taskConfiguration.llmCall.${key} is forbidden — token budget is Optimixer-owned at invoke; use outputExpectation / reasoningEffort instead.`);
57
57
  }
58
58
  }
59
59
  if ("maxTokensCap" in llmCall) {
60
- warnings.push(`${prefix}: taskConfiguration.llmCall.maxTokensCap is deprecated in ai-tasks 8.6+ — use outputExpectation; step retry may still bump caps at runtime only.`);
60
+ warnings.push(`${prefix}: taskConfiguration.llmCall.maxTokensCap is forbidden — use outputExpectation; completion budget is Optimixer-owned at invoke.`);
61
61
  }
62
62
  if (llmCall.reasoningEffort !== undefined &&
63
63
  !isOptimixerReasoningEffort(llmCall.reasoningEffort)) {
@@ -1,4 +1,4 @@
1
- You are a graph architect for the **GraphModelObject** static graph format (`docs/formats-documentations/`). Your outputs are consumed by **runtime executors**, **analysis tools**, and **product UIs**. Optimize for: **correct structure**, **faithfulness to the user’s `intent.description`**, and **clear, stakeholder-safe language** where prose is required.
1
+ You are a graph architect for the **GraphModelObject** static graph format (`@exellix/graph-engine` `formats-documentations/`). Your outputs are consumed by **runtime executors**, **analysis tools**, and **product UIs**. Optimize for: **correct structure**, **faithfulness to the user’s `intent.description`**, and **clear, stakeholder-safe language** where prose is required.
2
2
 
3
3
  **You ONLY perform `action = "create"` in this call.** Do not return explanations or graph-concept patches; build a new graph from the user’s description.
4
4
 
@@ -1,4 +1,4 @@
1
- You are a graph architect for the **GraphModelObject** static graph format (`docs/formats-documentations/`). Your outputs are consumed by **runtime executors**, **analysis tools**, and **product UIs**. Optimize for: **correct structure**, **faithfulness to the user’s `intent.description`**, and **clear, stakeholder-safe language** where prose is required.
1
+ You are a graph architect for the **GraphModelObject** static graph format (`@exellix/graph-engine` `formats-documentations/`). Your outputs are consumed by **runtime executors**, **analysis tools**, and **product UIs**. Optimize for: **correct structure**, **faithfulness to the user’s `intent.description`**, and **clear, stakeholder-safe language** where prose is required.
2
2
 
3
3
  **You ONLY perform `action = "modify"` in this call.** Do not produce a greenfield design unrelated to `existingGraph`.
4
4
 
@@ -1,6 +1,6 @@
1
1
  ## Format reference (worox-graph / GraphModelObject)
2
2
 
3
- Normative contracts for the **worox-graph** DAG JSON model: `docs/formats-documentations/graph-model-object-format.md` and `task-node-model-object-format.md`. Graph-composer emits **static model** JSON consumed by `@exellix/graph-engine`.
3
+ Normative contracts for the **worox-graph** DAG JSON model: `@exellix/graph-engine` `formats-documentations/graph-model-object-format.md` and `task-node-model-object-format.md`. Graph-composer emits **static model** JSON consumed by `@exellix/graph-engine`.
4
4
 
5
5
  A graph is a single JSON object. Top-level fields (canonical root keys only):
6
6
 
@@ -11,7 +11,7 @@ A graph is a single JSON object. Top-level fields (canonical root keys only):
11
11
  - `variables` (object, optional): graph-level defaults → run as `jobVariables.*` at execution.
12
12
  - `response` (object, required for new graphs): executable final output contract (`missing`, `shape` with selectors such as `outputsMemoryPath`, `executionMemoryPath`, `literal`, `firstPresent`).
13
13
  - `metadata` (object, optional): authoring only (`name`, `description`, `graphEntry`, `graphExecution`, `catalogRequests`, `graphConcept`, …). **No execution wiring under `metadata`.**
14
- - `modelConfig`, `jobKnowledge` (optional): see format docs. **`modelConfig` cases use `@x12i/ai-profiles` profile names only** (`cheap`, `balanced`, `deep`, …) — three slots per case: `preActionModel`, `skillModel`, `postActionModel`. Never provider ids like `openrouter/...`. Resolution uses bundled `@x12i/ai-profiles`; `runtime.aliasConfig` is optional.
14
+ - `modelConfig`, `jobKnowledge` (optional): see format docs. **`modelConfig` cases use profile/choice keys only** (e.g. `cheap/default`, `pro/default`) — three slots per case: `preActionModel`, `skillModel`, `postActionModel`. Never provider ids like `openrouter/...`. Do **not** author `runtime.modelConfig`, `runtime.aliasConfig`, or `runtime.nodes[id].modelConfig` graph-engine 7.7+ rejects runtime model routing.
15
15
 
16
16
  ### Task node shape
17
17
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exellix/graph-composer",
3
- "version": "2.5.8",
3
+ "version": "2.6.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -64,8 +64,8 @@
64
64
  },
65
65
  "homepage": "https://github.com/woroces/graph-composer#readme",
66
66
  "peerDependencies": {
67
- "@exellix/ai-tasks": "^8.6.2",
68
- "@exellix/graph-engine": "^7.7.8"
67
+ "@exellix/ai-tasks": "^8.7.0",
68
+ "@exellix/graph-engine": "7.8.1"
69
69
  },
70
70
  "peerDependenciesMeta": {
71
71
  "@exellix/graph-engine": {
@@ -81,13 +81,13 @@
81
81
  "dependencies": {
82
82
  "@x12i/catalox": "^5.1.3",
83
83
  "@x12i/env": "^4.0.1",
84
- "@x12i/funcx": "^4.4.0",
84
+ "@x12i/funcx": "^4.4.4",
85
85
  "@x12i/logxer": "^4.6.0"
86
86
  },
87
87
  "devDependencies": {
88
- "@exellix/ai-skills": "^6.1.0",
89
- "@exellix/ai-tasks": "^8.6.1",
90
- "@exellix/graph-engine": "^7.7.8",
88
+ "@exellix/ai-skills": "^6.4.0",
89
+ "@exellix/ai-tasks": "^8.7.0",
90
+ "@exellix/graph-engine": "7.8.1",
91
91
  "@types/node": "^22.10.2",
92
92
  "@x12i/rendrix": "^4.3.0",
93
93
  "nx-config2": "^3.6.5",