@exellix/graph-composer 2.11.0 → 2.12.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/CHANGELOG.md CHANGED
@@ -1,5 +1,22 @@
1
1
  # Changelog
2
2
 
3
+ ## 2.12.0 — Graphenix 2.7.3 + webQueryTemplate authoring
4
+
5
+ ### Breaking
6
+
7
+ - **Legacy web scope:** Create/modify validation rejects `webScoping` on task nodes and requirements; canonicalizer strips `aiTaskProfile.webScoping` if present. Use **`webQueryTemplate`** / **`webQueryTemplates[]`** under **`taskConfiguration.aiTaskProfile`**.
8
+ - **Narrix web keys:** Validation rejects `enableWebScope`, `forceWebScope`, `webScopeQuestions` on **`taskConfiguration.narrix`** (discovery-only narrix remains).
9
+
10
+ ### Changed
11
+
12
+ - **Peer / dev:** `@exellix/graph-engine` **^8.6.0**, `@exellix/ai-tasks` **^10.0.13**, `@exellix/ai-skills` **^6.12.5**.
13
+ - **npm overrides** — `@x12i/graphenix-*` **^2.7.3** (format ^2.0.0).
14
+ - **Prompts / judge rules** — aligned with webQueryTemplate + no legacy narrix web keys.
15
+
16
+ ### Downstream
17
+
18
+ - **graphs-studio:** `docs/handoff/graphs-studio-graphenix-2.7.3.md` — pin composer **2.12.0** + engine **8.6.0**.
19
+
3
20
  ## 2.11.0 — Graphenix 2.7.0 + CR-006 alignment
4
21
 
5
22
  ### Breaking
package/README.md CHANGED
@@ -26,7 +26,7 @@ FuncX pack / example-generation contract: [docs/funcx-generic-pack-spec.md](./do
26
26
  ## Install
27
27
 
28
28
  ```bash
29
- npm install @exellix/graph-composer @exellix/graph-engine@^8.1.0 @exellix/ai-tasks@^9.0.0
29
+ npm install @exellix/graph-composer @exellix/graph-engine@^8.6.0 @exellix/ai-tasks@^10.0.13
30
30
  ```
31
31
 
32
32
  Requires **Node.js 20+** (Catalox embedder and this package align on `>=20`).
@@ -298,7 +298,7 @@ graph-composer explain-basic
298
298
  | `validateSuggestCatalogResolutionOutput`, `validateSuggestCatalogCreationsOutput`, `validateSuggestScopingNeedMatchOutput`, `validateSuggestScopingMapCreationOutput`, `validateReviewConceptOutput` | Offline output validators for tests / hosts. |
299
299
  | Types: `GraphComposerInput`, `GraphComposerAgentInput`, `GraphComposerIntent`, `CatalogCandidates`, `ScopingMapCandidate`, `NarrixTemplateCandidate`, … | See `dist/index.d.ts`. |
300
300
  | `loadCatalogCandidatesFromCatalox`, `createCatalox`, `unifiedCatalogItemToSkillDescriptor`, … | Build `catalogCandidates` from **Catalox** catalogs; see [`docs/catalog-metadb-end-state-contract.md`](./docs/catalog-metadb-end-state-contract.md). |
301
- | `reportTaskNodeProtocolGaps` | Offline list of **AI task** nodes violating **`taskConfiguration.aiTaskProfile`** (pre/post, **`webScoping.questions`** when enabled, **`inputSynthesis`** fields when synthesis is on). See `docs/task-node-execution-protocol.md`. |
301
+ | `reportTaskNodeProtocolGaps` | Offline list of **AI task** nodes violating **`taskConfiguration.aiTaskProfile`** (pre/post, **`webQueryTemplate`** when web scope is needed, **`inputSynthesis`** fields when synthesis is on). See `docs/task-node-execution-protocol.md`. |
302
302
  | `collectCanonicalGraphWarnings` | Warn-first **`@exellix/graph-engine`** canonical checks (top-level keys, metadata placement, memory paths, model profile aliases). |
303
303
  | `collectGraphOrchestratorInvokeWarnings` | Authoring: **`taskConfiguration.llmCall.reasoningEffort`**, reject **`maxTokens`** on **`modelConfig`**. |
304
304
  | **Studio preflight** | **`analyzeTaskNodeRunTaskRequest`**, **`analyzeRunTaskRequest`**, **`buildSkillRequestAnalysisPacket`**, **`formatSkillRequestAnalysisMarkdown`**, **`FUNCX_ANALYZE_GATEWAY_INVOKE_REQUEST_ID`** — moved from graph-engine / ai-tasks 8.6; see [`docs/graph-entry-agent-contract.md`](./docs/graph-entry-agent-contract.md). |
@@ -1,12 +1,12 @@
1
1
  import type { SkillDescriptor } from "./types.js";
2
2
  /**
3
- * Web scoping for this node: explicit flag + question list for the scoper / ai-tasks.
3
+ * Web scope for this node: Rendrix query template compiled to PRE `webScope` unit (Graphenix 2.7.3+).
4
4
  * See `docs/task-node-execution-protocol.md`.
5
5
  */
6
- export type WebScopingNodeConfig = {
7
- enabled: boolean;
8
- /** When `enabled` is true, must be a non-empty list of non-empty strings. */
9
- questions?: string[];
6
+ export type WebQueryTemplateConfig = {
7
+ webQueryTemplate?: string;
8
+ webQueryTemplates?: string[];
9
+ webScopeOptions?: Record<string, unknown>;
10
10
  };
11
11
  export type InputSynthesisDestination = "job" | "task" | "execution";
12
12
  /**
@@ -44,12 +44,14 @@ export type InputSynthesisNodeConfig = {
44
44
  export type AiTaskProfileMetadata = {
45
45
  preStrategyKey: string;
46
46
  postStrategyKey: string;
47
- webScoping?: WebScopingNodeConfig;
47
+ webQueryTemplate?: string;
48
+ webQueryTemplates?: string[];
49
+ webScopeOptions?: Record<string, unknown>;
48
50
  inputSynthesis?: InputSynthesisNodeConfig;
49
51
  };
50
52
  /** Built-in worox-graph local skills — no aiTaskProfile required. */
51
53
  export declare const DEFAULT_LOCAL_SKILL_KEYS: readonly string[];
52
- export type TaskNodeProtocolIssueCode = "missing_preStrategyKey" | "missing_postStrategyKey" | "web_scoping_enabled_without_questions" | "web_scoping_questions_without_enabled" | "synthesis_enabled_without_catalogId" | "synthesis_enabled_without_strategyKey" | "synthesis_enabled_without_outputKey" | "synthesis_enabled_without_sources" | "synthesis_enabled_without_destination" | "synthesis_pipeline_conflict";
54
+ export type TaskNodeProtocolIssueCode = "missing_preStrategyKey" | "missing_postStrategyKey" | "legacy_web_scoping" | "web_query_template_invalid" | "synthesis_enabled_without_catalogId" | "synthesis_enabled_without_strategyKey" | "synthesis_enabled_without_outputKey" | "synthesis_enabled_without_sources" | "synthesis_enabled_without_destination" | "synthesis_pipeline_conflict";
53
55
  export type TaskNodeProtocolGap = {
54
56
  nodeId: string;
55
57
  skillKey: string;
@@ -57,7 +59,7 @@ export type TaskNodeProtocolGap = {
57
59
  };
58
60
  /**
59
61
  * Lists **AI task** nodes that violate the **task node execution protocol**
60
- * (pre/post strategies, web scoping questions, input synthesis strategy).
62
+ * (pre/post strategies, web query template, input synthesis strategy).
61
63
  */
62
64
  export declare function reportTaskNodeProtocolGaps(graph: object, options?: {
63
65
  utilitySkills?: SkillDescriptor[];
@@ -1 +1 @@
1
- {"version":3,"file":"aiTaskProfile.d.ts","sourceRoot":"","sources":["../src/aiTaskProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,EAAE,OAAO,CAAC;IACjB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;CACtB,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,UAAU,CAAC,EAAE,oBAAoB,CAAC;IAClC,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAK5C,CAAC;AAEX,MAAM,MAAM,yBAAyB,GACjC,wBAAwB,GACxB,yBAAyB,GACzB,uCAAuC,GACvC,uCAAuC,GACvC,qCAAqC,GACrC,uCAAuC,GACvC,qCAAqC,GACrC,mCAAmC,GACnC,uCAAuC,GACvC,6BAA6B,CAAC;AAElC,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC,CAAC;AAsHF;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACxC,GACA,mBAAmB,EAAE,CAsEvB"}
1
+ {"version":3,"file":"aiTaskProfile.d.ts","sourceRoot":"","sources":["../src/aiTaskProfile.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,YAAY,CAAC;AAElD;;;GAGG;AACH,MAAM,MAAM,sBAAsB,GAAG;IACnC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC3C,CAAC;AAEF,MAAM,MAAM,yBAAyB,GAAG,KAAK,GAAG,MAAM,GAAG,WAAW,CAAC;AAErE;;;GAGG;AACH,MAAM,MAAM,wBAAwB,GAAG;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB;;;;OAIG;IACH,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,wFAAwF;IACxF,WAAW,CAAC,EAAE,yBAAyB,CAAC;IACxC,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,qDAAqD;IACrD,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,oFAAoF;IACpF,IAAI,CAAC,EAAE,MAAM,CAAC;CACf,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,qBAAqB,GAAG;IAClC,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC1C,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C,CAAC;AAEF,qEAAqE;AACrE,eAAO,MAAM,wBAAwB,EAAE,SAAS,MAAM,EAK5C,CAAC;AAEX,MAAM,MAAM,yBAAyB,GACjC,wBAAwB,GACxB,yBAAyB,GACzB,oBAAoB,GACpB,4BAA4B,GAC5B,qCAAqC,GACrC,uCAAuC,GACvC,qCAAqC,GACrC,mCAAmC,GACnC,uCAAuC,GACvC,6BAA6B,CAAC;AAElC,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,yBAAyB,EAAE,CAAC;CACrC,CAAC;AAkIF;;;GAGG;AACH,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,MAAM,EACb,OAAO,CAAC,EAAE;IACR,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,mBAAmB,CAAC,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;CACxC,GACA,mBAAmB,EAAE,CA0EvB"}
@@ -26,16 +26,14 @@ function readAiTaskProfileFromRecord(container) {
26
26
  const p = readRecord(raw);
27
27
  if (p === undefined)
28
28
  return {};
29
- const webRaw = readRecord(p.webScoping);
30
- let web;
31
- if (webRaw !== undefined) {
32
- const enabled = webRaw.enabled === true;
33
- const qraw = webRaw.questions;
34
- const questions = Array.isArray(qraw)
35
- ? qraw.filter((x) => nonEmptyString(x)).map((s) => s.trim())
36
- : undefined;
37
- web = { enabled, ...(questions !== undefined && questions.length > 0 ? { questions } : {}) };
38
- }
29
+ const legacyWebScoping = p.webScoping !== undefined;
30
+ const webQueryTemplate = nonEmptyString(p.webQueryTemplate)
31
+ ? p.webQueryTemplate.trim()
32
+ : undefined;
33
+ const qraw = p.webQueryTemplates;
34
+ const webQueryTemplates = Array.isArray(qraw)
35
+ ? qraw.filter((x) => nonEmptyString(x)).map((s) => s.trim())
36
+ : undefined;
39
37
  const synRaw = readRecord(p.inputSynthesis);
40
38
  let synthesis;
41
39
  if (synRaw !== undefined) {
@@ -72,10 +70,19 @@ function readAiTaskProfileFromRecord(container) {
72
70
  return {
73
71
  pre: nonEmptyString(p.preStrategyKey) ? p.preStrategyKey.trim() : undefined,
74
72
  post: nonEmptyString(p.postStrategyKey) ? p.postStrategyKey.trim() : undefined,
75
- ...(web !== undefined ? { web } : {}),
73
+ ...(webQueryTemplate !== undefined ? { webQueryTemplate } : {}),
74
+ ...(webQueryTemplates !== undefined && webQueryTemplates.length > 0
75
+ ? { webQueryTemplates }
76
+ : {}),
77
+ ...(legacyWebScoping ? { legacyWebScoping: true } : {}),
76
78
  ...(synthesis !== undefined ? { synthesis } : {}),
77
79
  };
78
80
  }
81
+ function hasWebQueryAuthoring(profile) {
82
+ if (nonEmptyString(profile.webQueryTemplate))
83
+ return true;
84
+ return (profile.webQueryTemplates?.length ?? 0) > 0;
85
+ }
79
86
  function hasSynthesisPipelineConflict(node) {
80
87
  const tc = readRecord(node.taskConfiguration);
81
88
  const profile = readRecord(tc?.aiTaskProfile);
@@ -109,7 +116,7 @@ function localSkillKeySet(utilitySkills, extraLocal) {
109
116
  }
110
117
  /**
111
118
  * Lists **AI task** nodes that violate the **task node execution protocol**
112
- * (pre/post strategies, web scoping questions, input synthesis strategy).
119
+ * (pre/post strategies, web query template, input synthesis strategy).
113
120
  */
114
121
  export function reportTaskNodeProtocolGaps(graph, options) {
115
122
  const localKeys = localSkillKeySet(options?.utilitySkills, options?.extraLocalSkillKeys);
@@ -136,20 +143,21 @@ export function reportTaskNodeProtocolGaps(graph, options) {
136
143
  const fromMeta = readAiTaskProfileFromRecord(meta);
137
144
  const pre = fromTaskConfig.pre ?? fromMeta.pre;
138
145
  const post = fromTaskConfig.post ?? fromMeta.post;
139
- const web = fromTaskConfig.web ?? fromMeta.web;
146
+ const webQueryTemplate = fromTaskConfig.webQueryTemplate ?? fromMeta.webQueryTemplate;
147
+ const webQueryTemplates = fromTaskConfig.webQueryTemplates ?? fromMeta.webQueryTemplates;
148
+ const legacyWebScoping = fromTaskConfig.legacyWebScoping === true || fromMeta.legacyWebScoping === true;
140
149
  const synthesis = fromTaskConfig.synthesis ?? fromMeta.synthesis;
141
150
  const issues = [];
142
151
  if (pre === undefined)
143
152
  issues.push("missing_preStrategyKey");
144
153
  if (post === undefined)
145
154
  issues.push("missing_postStrategyKey");
146
- const wsEnabled = web?.enabled === true;
147
- const questions = web?.questions ?? [];
148
- if (wsEnabled && questions.length === 0) {
149
- issues.push("web_scoping_enabled_without_questions");
155
+ if (legacyWebScoping) {
156
+ issues.push("legacy_web_scoping");
150
157
  }
151
- if (!wsEnabled && questions.length > 0) {
152
- issues.push("web_scoping_questions_without_enabled");
158
+ if (hasWebQueryAuthoring({ webQueryTemplate, webQueryTemplates }) &&
159
+ webQueryTemplate === "input.question") {
160
+ issues.push("web_query_template_invalid");
153
161
  }
154
162
  if (synthesis?.enabled === true) {
155
163
  if (!nonEmptyString(synthesis.catalogId)) {
@@ -1 +1 @@
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;AAyBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAkCtF;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;AA0ZH,qFAAqF;AACrF,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAc7E;AAyBD,wBAAgB,8BAA8B,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAkCtF;AAED,wBAAgB,6BAA6B,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAWpF"}
@@ -33,6 +33,7 @@ const FORBIDDEN_GRAPH_RESPONSE_KEYS = [
33
33
  "mappingPreset",
34
34
  ];
35
35
  const FORBIDDEN_NARRIX_WEB_KEYS = [
36
+ "enableWebScope",
36
37
  "webScopeQuestions",
37
38
  "webScoping",
38
39
  "webScopeTemplates",
@@ -234,45 +235,8 @@ function canonicalizeTaskConfigurationExecutionStrategies(node) {
234
235
  }
235
236
  return changed;
236
237
  }
237
- function extractWebQuestionsFromNarrix(narrix) {
238
- const raw = narrix.webScopeQuestions;
239
- if (!Array.isArray(raw))
240
- return [];
241
- const out = [];
242
- for (const item of raw) {
243
- if (typeof item === "string" && item.trim() !== "") {
244
- out.push(item.trim());
245
- continue;
246
- }
247
- const o = readRecord(item);
248
- const q = o?.question;
249
- if (typeof q === "string" && q.trim() !== "")
250
- out.push(q.trim());
251
- }
252
- return out;
253
- }
254
- function mergeWebScopingFromNarrix(taskConfiguration, narrix) {
238
+ function stripForbiddenNarrixWebKeys(narrix) {
255
239
  let changed = false;
256
- const questions = extractWebQuestionsFromNarrix(narrix);
257
- const enabled = narrix.enableWebScope === true ||
258
- narrix.forceWebScope === true ||
259
- questions.length > 0;
260
- const profile = {
261
- ...readRecord(taskConfiguration.aiTaskProfile),
262
- };
263
- const existingWeb = readRecord(profile.webScoping);
264
- const existingQuestions = Array.isArray(existingWeb?.questions)
265
- ? existingWeb.questions.filter((x) => nonEmptyString(x))
266
- : [];
267
- if (questions.length > 0 || enabled) {
268
- const mergedQuestions = [...new Set([...existingQuestions, ...questions])];
269
- profile.webScoping = {
270
- enabled: existingWeb?.enabled === true || enabled || mergedQuestions.length > 0,
271
- ...(mergedQuestions.length > 0 ? { questions: mergedQuestions } : {}),
272
- };
273
- taskConfiguration.aiTaskProfile = profile;
274
- changed = true;
275
- }
276
240
  for (const k of FORBIDDEN_NARRIX_WEB_KEYS) {
277
241
  if (k in narrix) {
278
242
  delete narrix[k];
@@ -281,14 +245,28 @@ function mergeWebScopingFromNarrix(taskConfiguration, narrix) {
281
245
  }
282
246
  return changed;
283
247
  }
284
- function stripForbiddenNarrixWebKeys(narrix) {
248
+ function rejectLegacyWebScopingOnProfile(taskConfiguration) {
249
+ const profile = readRecord(taskConfiguration.aiTaskProfile);
250
+ if (profile === undefined || !("webScoping" in profile))
251
+ return false;
252
+ delete profile.webScoping;
253
+ taskConfiguration.aiTaskProfile = profile;
254
+ return true;
255
+ }
256
+ function canonicalizeNarrixWebOnNode(node) {
257
+ const tc = readRecord(node.taskConfiguration);
258
+ if (tc === undefined)
259
+ return false;
285
260
  let changed = false;
286
- for (const k of FORBIDDEN_NARRIX_WEB_KEYS) {
287
- if (k in narrix) {
288
- delete narrix[k];
289
- changed = true;
290
- }
261
+ const narrix = readRecord(tc.narrix);
262
+ if (narrix !== undefined && stripForbiddenNarrixWebKeys(narrix)) {
263
+ changed = true;
264
+ }
265
+ if (rejectLegacyWebScopingOnProfile(tc)) {
266
+ changed = true;
291
267
  }
268
+ if (changed)
269
+ node.taskConfiguration = tc;
292
270
  return changed;
293
271
  }
294
272
  function liftSkillKeyAndVariables(node) {
@@ -398,22 +376,6 @@ function removeLegacySynthesisFlags(node) {
398
376
  node.taskConfiguration = { ...tc, aiTaskProfile: nextProfile };
399
377
  return true;
400
378
  }
401
- function canonicalizeNarrixWebOnNode(node) {
402
- const tc = readRecord(node.taskConfiguration);
403
- if (tc === undefined)
404
- return false;
405
- let changed = false;
406
- const narrix = readRecord(tc.narrix);
407
- if (narrix !== undefined && mergeWebScopingFromNarrix(tc, narrix)) {
408
- changed = true;
409
- }
410
- if (narrix !== undefined && stripForbiddenNarrixWebKeys(narrix)) {
411
- changed = true;
412
- }
413
- if (changed)
414
- node.taskConfiguration = tc;
415
- return changed;
416
- }
417
379
  /** Convert record-keyed `nodes` to an array; returns whether conversion happened. */
418
380
  export function normalizeNodesToArray(graph) {
419
381
  const nodes = graph.nodes;
@@ -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,CAgIrE"}
1
+ {"version":3,"file":"canonicalGraphWarnings.d.ts","sourceRoot":"","sources":["../src/canonicalGraphWarnings.ts"],"names":[],"mappings":"AAmIA;;;GAGG;AACH,wBAAgB,6BAA6B,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,EAAE,CAgIrE"}
@@ -53,6 +53,7 @@ const FORBIDDEN_TASK_METADATA_EXECUTION_KEYS = new Set([
53
53
  "woroxContractTarget",
54
54
  ]);
55
55
  const FORBIDDEN_NARRIX_WEB_KEYS = [
56
+ "enableWebScope",
56
57
  "webScopeQuestions",
57
58
  "webScoping",
58
59
  "webScopeTemplates",
@@ -165,7 +166,7 @@ export function collectCanonicalGraphWarnings(graph) {
165
166
  if (narrix !== undefined) {
166
167
  for (const k of FORBIDDEN_NARRIX_WEB_KEYS) {
167
168
  if (k in narrix) {
168
- warnings.push(`${prefix}: taskConfiguration.narrix.${k} is forbidden — author web scope under taskConfiguration.aiTaskProfile.webScoping.`);
169
+ warnings.push(`${prefix}: taskConfiguration.narrix.${k} is forbidden — author web scope under taskConfiguration.aiTaskProfile.webQueryTemplate.`);
169
170
  }
170
171
  }
171
172
  }
@@ -1 +1 @@
1
- {"version":3,"file":"catalogMatchAssist.d.ts","sourceRoot":"","sources":["../src/catalogMatchAssist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAEV,kBAAkB,EAGlB,eAAe,EAChB,MAAM,YAAY,CAAC;AAgKpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,kBAAkB,GAAG;IAC1B,SAAS,EAAE,QAAQ,GAAG,YAAY,CAAC;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,aAAa,EAAE,eAAe,EAAE,CAAC;CAClC,EACD,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAmF9C"}
1
+ {"version":3,"file":"catalogMatchAssist.d.ts","sourceRoot":"","sources":["../src/catalogMatchAssist.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAE1C,OAAO,KAAK,EAEV,kBAAkB,EAGlB,eAAe,EAChB,MAAM,YAAY,CAAC;AA0KpB,MAAM,MAAM,yBAAyB,GAAG;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,CAAC;AAEF;;;GAGG;AACH,wBAAsB,sBAAsB,CAC1C,KAAK,EAAE,kBAAkB,GAAG;IAC1B,SAAS,EAAE,QAAQ,GAAG,YAAY,CAAC;IACnC,QAAQ,EAAE,eAAe,EAAE,CAAC;IAC5B,aAAa,EAAE,eAAe,EAAE,CAAC;CAClC,EACD,IAAI,EAAE,yBAAyB,GAC9B,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAC,CAmF9C"}
@@ -1,5 +1,11 @@
1
1
  import { matchLists } from "@x12i/funcx/functions";
2
2
  import { resolveFuncxModel } from "./funcxModel.js";
3
+ function readRecord(v) {
4
+ if (v === null || v === undefined || typeof v !== "object" || Array.isArray(v)) {
5
+ return undefined;
6
+ }
7
+ return v;
8
+ }
3
9
  function mergeBySkillKey(a, b) {
4
10
  if (!b?.length)
5
11
  return [...a];
@@ -93,6 +99,8 @@ function narrixNodeSummary(node) {
93
99
  return null;
94
100
  }
95
101
  const n = narrix;
102
+ const tc = readRecord(node.taskConfiguration);
103
+ const profile = readRecord(tc?.aiTaskProfile);
96
104
  const id = typeof node.id === "string" ? node.id : "(no-id)";
97
105
  const skillKey = typeof node.skillKey === "string" ? node.skillKey : undefined;
98
106
  return {
@@ -101,9 +109,9 @@ function narrixNodeSummary(node) {
101
109
  narrix: {
102
110
  datasetId: n.datasetId,
103
111
  layer: n.layer,
104
- enableWebScope: n.enableWebScope,
105
112
  narrativeTypeIds: n.narrativeTypeIds,
106
113
  },
114
+ webQueryTemplate: typeof profile?.webQueryTemplate === "string" ? profile.webQueryTemplate : undefined,
107
115
  };
108
116
  }
109
117
  function skillCatalogItems(skills) {
@@ -131,7 +139,7 @@ function narrixCatalogItems(templates) {
131
139
  datasetId: t.datasetId,
132
140
  layer: t.layer,
133
141
  narrativeTypeIds: t.narrativeTypeIds ?? [],
134
- enableWebScope: t.enableWebScope ?? false,
142
+ ...(t.webQueryTemplate !== undefined ? { webQueryTemplate: t.webQueryTemplate } : {}),
135
143
  tags: t.tags ?? [],
136
144
  }));
137
145
  }
@@ -127,7 +127,7 @@ export function unifiedCatalogItemToNarrixTemplateCandidate(item) {
127
127
  datasetId: pickStr(d.datasetId) ?? pickStr(d.dataset_id),
128
128
  layer: pickStr(d.layer),
129
129
  narrativeTypeIds: pickStrArray(d.narrativeTypeIds) ?? pickStrArray(d.narrative_type_ids),
130
- enableWebScope: pickBool(d.enableWebScope) ?? pickBool(d.enable_web_scope),
130
+ webQueryTemplate: pickStr(d.webQueryTemplate) ?? pickStr(d.web_query_template),
131
131
  tags: pickStrArray(d.tags),
132
132
  };
133
133
  }
@@ -1 +1 @@
1
- {"version":3,"file":"graphComposerOutputValidation.d.ts","sourceRoot":"","sources":["../src/graphComposerOutputValidation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,YAAY,CAAC;AAE3E,mHAAmH;AACnH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,CAAC,EAAE,uBAAuB,KAC1B,IAAI,CAAC;AAEV,OAAO,EACL,sCAAsC,EACtC,uCAAuC,EACvC,yCAAyC,EACzC,qCAAqC,EACrC,qCAAqC,EACrC,2CAA2C,GAC5C,MAAM,iCAAiC,CAAC;AAuBzC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAIN;AAmYD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwGN;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,KAAK,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,IAAI,CAqCN;AAuBD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAmBN;AAsBD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,CAAC,EAAE,uBAAuB,GAC5B,IAAI,CA+BN;AAmBD,wBAAgB,sCAAsC,CACpD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAkDN;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAiCN;AAUD,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwDN;AAED,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwDN"}
1
+ {"version":3,"file":"graphComposerOutputValidation.d.ts","sourceRoot":"","sources":["../src/graphComposerOutputValidation.ts"],"names":[],"mappings":"AASA,OAAO,KAAK,EAAE,kBAAkB,EAAwB,MAAM,YAAY,CAAC;AAE3E,mHAAmH;AACnH,MAAM,MAAM,uBAAuB,GAAG;IACpC,KAAK,CAAC,EAAE,kBAAkB,CAAC;CAC5B,CAAC;AAEF,MAAM,MAAM,eAAe,GAAG,CAC5B,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,CAAC,EAAE,uBAAuB,KAC1B,IAAI,CAAC;AAEV,OAAO,EACL,sCAAsC,EACtC,uCAAuC,EACvC,yCAAyC,EACzC,qCAAqC,EACrC,qCAAqC,EACrC,2CAA2C,GAC5C,MAAM,iCAAiC,CAAC;AAuBzC,wBAAgB,qBAAqB,CACnC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAIN;AAwYD,wBAAgB,2BAA2B,CACzC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwGN;AAED;;;;GAIG;AACH,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,KAAK,EAAE;IAAE,aAAa,CAAC,EAAE,OAAO,CAAA;CAAE,GACjC,IAAI,CAqCN;AAuBD,wBAAgB,4BAA4B,CAC1C,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAmBN;AAsBD,wBAAgB,0BAA0B,CACxC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,GAAG,CAAC,EAAE,uBAAuB,GAC5B,IAAI,CA+BN;AAmBD,wBAAgB,sCAAsC,CACpD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAkDN;AAED,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAiCN;AAUD,wBAAgB,qCAAqC,CACnD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwDN;AAED,wBAAgB,uCAAuC,CACrD,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC5B,IAAI,CAAC,EAAE,uBAAuB,GAC7B,IAAI,CAwDN"}
@@ -229,9 +229,12 @@ function validateReviewConceptCoreTaskPatchItem(t, ctxPrefix) {
229
229
  }
230
230
  }
231
231
  if ("webScoping" in t && t.webScoping !== undefined) {
232
- const w = t.webScoping;
233
- if (w === null || typeof w !== "object" || Array.isArray(w)) {
234
- throw new Error(`${ctxPrefix}.webScoping must be an object when present`);
232
+ throw new Error(`${ctxPrefix}.webScoping is not allowed — use requirements.webQueryTemplate or aiTaskProfile.webQueryTemplate on materialized nodes`);
233
+ }
234
+ if ("webQueryTemplate" in t && t.webQueryTemplate !== undefined) {
235
+ const wqt = t.webQueryTemplate;
236
+ if (typeof wqt !== "string" || wqt.trim() === "") {
237
+ throw new Error(`${ctxPrefix}.webQueryTemplate must be a non-empty string when present`);
235
238
  }
236
239
  }
237
240
  if ("synthesis" in t && t.synthesis !== undefined) {
@@ -516,7 +519,7 @@ export function validateCreateModifyOutput(out, ctx) {
516
519
  utilitySkills: ctx?.input?.utilitySkills,
517
520
  });
518
521
  if (gaps.length > 0) {
519
- throw new Error(`create/modify graph violates task node protocol (taskConfiguration.aiTaskProfile / webScoping / inputSynthesis): ${JSON.stringify(gaps)}`);
522
+ throw new Error(`create/modify graph violates task node protocol (taskConfiguration.aiTaskProfile / webQueryTemplate / inputSynthesis): ${JSON.stringify(gaps)}`);
520
523
  }
521
524
  try {
522
525
  assertCanonicalGraphDocument(canonicalized);
package/dist/index.d.ts CHANGED
@@ -19,7 +19,7 @@ export { loadExampleGraph, inputExplainNetworkVulnSubnet, inputSuggestConceptObj
19
19
  export { buildGraphInputExampleGuidance, buildGraphEntryExampleGuidance, generateGraphJsonInputExample, generateGraphEntryInputExample, generateJsonExample, generateMdExample, generateContentExample, type GenerateGraphJsonInputExampleParams, type GenerateGraphEntryInputExampleParams, type GenerateJsonExampleResult, type GenerateMdExampleParams, type GenerateMdExampleResult, type GenerateContentExampleParams, type GenerateContentExampleResult, } from "./exampleGeneration.js";
20
20
  export { parseGraphConceptStory, parseGraphConceptStoryBody, isGraphConceptStoryDescription, GRAPH_CONCEPT_STORY_MARKER, } from "./parseGraphConceptStory.js";
21
21
  export type { ParsedGraphConcept } from "./parseGraphConceptStory.js";
22
- export { reportTaskNodeProtocolGaps, DEFAULT_LOCAL_SKILL_KEYS, type AiTaskProfileMetadata, type TaskNodeProtocolGap, type TaskNodeProtocolIssueCode, type WebScopingNodeConfig, type InputSynthesisNodeConfig, type InputSynthesisDestination, } from "./aiTaskProfile.js";
22
+ export { reportTaskNodeProtocolGaps, DEFAULT_LOCAL_SKILL_KEYS, type AiTaskProfileMetadata, type TaskNodeProtocolGap, type TaskNodeProtocolIssueCode, type WebQueryTemplateConfig, type InputSynthesisNodeConfig, type InputSynthesisDestination, } from "./aiTaskProfile.js";
23
23
  export { assertCanonicalGraphDocument, getCanonicalGraphDocumentViolations, CANONICAL_GRAPH_TOP_LEVEL_KEYS, GRAPH_ENGINE_MEMORY_PATH_ROOTS, isAllowedGraphEngineMemoryPath, collectAiTasksNodeExtensionIssues, assertAiTasksNodeExtensionsValid, resolveGraphEngineMemoryPathValue, buildGraphEngineMemoryResolutionRootFromWorkingMemory, DEFAULT_GRAPH_AI_MODEL_PROFILE_CONFIG, looksLikeConcreteModelId, isGraphAiProfileName, compileExellixExecutablePlan, type GraphEngineMemoryResolutionRoot, type AuthoringGraphDocument, type ExecutableGraphPlanV2, type NodeExecutionPlan, type CompileExellixExecutablePlanOptions, } from "./graphEngineBridge.js";
24
24
  export { collectAuthoringGraphValidationIssues, collectAuthoringGraphValidationWarnings, type AuthoringGraphValidationIssue, } from "./authoringGraphValidation.js";
25
25
  export { collectCanonicalGraphWarnings } from "./canonicalGraphWarnings.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -24,7 +24,8 @@ export type NarrixTemplateCandidate = {
24
24
  datasetId?: string;
25
25
  layer?: string;
26
26
  narrativeTypeIds?: string[];
27
- enableWebScope?: boolean;
27
+ /** Example Rendrix web query template for catalog hints (not graph narrix). */
28
+ webQueryTemplate?: string;
28
29
  tags?: string[];
29
30
  };
30
31
  /**
@@ -83,7 +84,8 @@ export type GraphConceptCoreTaskPatchItem = {
83
84
  stepInputs?: string | Record<string, unknown>;
84
85
  subTasks?: Record<string, unknown>[];
85
86
  requirements?: GraphConceptRequirementsPatch;
86
- webScoping?: Record<string, unknown>;
87
+ /** Rendrix web query template for PRE webScope (Graphenix 2.7.3+). */
88
+ webQueryTemplate?: string;
87
89
  synthesis?: Record<string, unknown>;
88
90
  };
89
91
  export type GraphConceptPatch = {
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,yBAAyB,CAAC;AAEzE,YAAY,EAAE,yBAAyB,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AAEjG,MAAM,MAAM,eAAe,GAAG;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,qGAAqG;AACrG,MAAM,MAAM,mBAAmB,GAAG;IAChC,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF,6EAA6E;AAC7E,MAAM,MAAM,uBAAuB,GAAG;IACpC,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC5B,+EAA+E;IAC/E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;CACjB,CAAC;AAEF;;;GAGG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,mBAAmB,EAAE,CAAC;IACpC,eAAe,CAAC,EAAE,uBAAuB,EAAE,CAAC;CAC7C,CAAC;AAEF,6DAA6D;AAC7D,MAAM,MAAM,iBAAiB,GACzB,UAAU,GACV,UAAU,GACV,QAAQ,GACR,WAAW,CAAC;AAEhB,uEAAuE;AACvE,MAAM,MAAM,kBAAkB,GAC1B,aAAa,GACb,iBAAiB,GACjB,cAAc,GACd,UAAU,CAAC;AAEf;;;GAGG;AACH,MAAM,MAAM,0BAA0B,GAAG;IACvC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,6BAA6B,CAAC,EAAE,MAAM,EAAE,CAAC;IACzC,wBAAwB,CAAC,EAAE,MAAM,CAAC;CACnC,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,oBAAoB,GAC5B,mBAAmB,GACnB,wBAAwB,GACxB,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,yGAAyG;AACzG,MAAM,MAAM,6BAA6B,GAAG;IAC1C,KAAK,CAAC,EAAE;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAA;KAAE,CAAC;IAChD,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACzC,6DAA6D;IAC7D,UAAU,CAAC,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,EAAE,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IACjD,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;QACjB,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,kBAAkB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC9C,CAAC;CACH,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,QAAQ,CAAC,EAAE,iBAAiB,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,iBAAiB,CAAC,EAAE,MAAM,EAAE,CAAC;IAC7B,8EAA8E;IAC9E,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,2DAA2D;IAC3D,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC9C,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,CAAC;IACrC,YAAY,CAAC,EAAE,6BAA6B,CAAC;IAC7C,sEAAsE;IACtE,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACrC,CAAC;AAEF,MAAM,MAAM,iBAAiB,GAAG;IAC9B,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC,sBAAsB,CAAC,EAAE,MAAM,CAAC;IAChC,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,aAAa,CAAC,EAAE,kBAAkB,CAAC;IACnC,cAAc,CAAC,EAAE,0BAA0B,CAAC;IAC5C,SAAS,CAAC,EAAE,CAAC,6BAA6B,GAAG,IAAI,GAAG,SAAS,CAAC,EAAE,CAAC;CAClE,CAAC;AAEF,iFAAiF;AACjF,MAAM,MAAM,0BAA0B,GAAG;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB,CAAC;AAEF,0DAA0D;AAC1D,MAAM,MAAM,sBAAsB,GAAG;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,iFAAiF;IACjF,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,0BAA0B,EAAE,CAAC;IACzC,gBAAgB,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEF,MAAM,MAAM,mBAAmB,GAAG;IAChC,MAAM,EACF,QAAQ,GACR,QAAQ,GACR,SAAS,GACT,yBAAyB,GACzB,0BAA0B,GAC1B,yBAAyB,GACzB,yBAAyB,GACzB,2BAA2B,GAC3B,eAAe,GACf,0BAA0B,GAC1B,yBAAyB,GACzB,2BAA2B,GAC3B,6BAA6B,GAC7B,yBAAyB,GACzB,yBAAyB,GACzB,+BAA+B,CAAC;IACpC,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB;;;OAGG;IACH,WAAW,CAAC,EAAE,oBAAoB,EAAE,CAAC;CACtC,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC,CAAC;AAEF;;;;GAIG;AACH,MAAM,MAAM,kBAAkB,GAAG;IAC/B,MAAM,EAAE,mBAAmB,CAAC;IAC5B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB;;;OAGG;IACH,YAAY,CAAC,EAAE,yBAAyB,CAAC;IACzC;;;OAGG;IACH,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IACpC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,4FAA4F;IAC5F,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;IACtC;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC5C;;;OAGG;IACH,qBAAqB,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACjD,CAAC;AAEF,0FAA0F;AAC1F,MAAM,MAAM,uBAAuB,GAAG;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,SAAS,CAAC,EAAE,QAAQ,GAAG,YAAY,CAAC;IACpC,QAAQ,CAAC,EAAE,eAAe,EAAE,CAAC;IAC7B,aAAa,CAAC,EAAE,eAAe,EAAE,CAAC;IAClC,WAAW,CAAC,EAAE,wBAAwB,CAAC;IACvC,iBAAiB,CAAC,EAAE,iBAAiB,CAAC;CACvC,CAAC"}
@@ -262,9 +262,6 @@
262
262
  "aiTaskProfile": {
263
263
  "preStrategyKey": "subnet-context-pre-v1",
264
264
  "postStrategyKey": "subnet-answer-post-v1",
265
- "webScoping": {
266
- "enabled": false
267
- },
268
265
  "inputSynthesis": {
269
266
  "enabled": false
270
267
  }
@@ -80,7 +80,7 @@
80
80
  "requirements": {
81
81
  "$ref": "#/$defs/GraphConceptRequirementsPatch"
82
82
  },
83
- "webScoping": { "type": "object" },
83
+ "webQueryTemplate": { "type": "string" },
84
84
  "synthesis": { "type": "object" }
85
85
  }
86
86
  },
@@ -9,18 +9,20 @@ You are a graph architect for the **worox-graph** flat authoring format (`@exell
9
9
  4. Add edges to express dependencies. Use conditional edges only when a prior step's output determines which path to take and `allowConditionalEdges` is not forbidding it.
10
10
  5. Add a finalizer that assembles the canonical output from upstream nodes when `requireFinalizer` is true.
11
11
  6. Validate: no orphan nodes, no dangling memory paths, no cycles.
12
- 7. **Task node config:** For every **non-local** AI task node, set **`taskConfiguration.aiTaskProfile`** with non-empty **`preStrategyKey`** and **`postStrategyKey`**. Add **`taskConfiguration.narrix`** when discovery applies (discovery only — optional **`enableWebScope`** boolean). Add **`webScoping`** / **`inputSynthesis`** under **`aiTaskProfile`** when needed. Use **`inputsConfig`** + **`taskVariable`** + **`executionMapping`** (not deprecated `inputs` / `outputMapping`). Add **`metadata.graphReadability`** / **`catalogBinding`** for planning only.
12
+ 7. **Task node config:** For every **non-local** AI task node, set **`taskConfiguration.aiTaskProfile`** with non-empty **`preStrategyKey`** and **`postStrategyKey`**. Add **`taskConfiguration.narrix`** when discovery applies (discovery only). Add **`webQueryTemplate`** / **`inputSynthesis`** under **`aiTaskProfile`** when needed. Use **`inputsConfig`** + **`taskVariable`** + **`executionMapping`** (not deprecated `inputs` / `outputMapping`). Add **`metadata.graphReadability`** / **`catalogBinding`** for planning only.
13
13
 
14
- **Web scoping migration (author on `aiTaskProfile`, not `narrix`):**
14
+ **Web scope (Graphenix 2.7.2+ — Rendrix template on `aiTaskProfile`, not `narrix`):**
15
15
  ```json
16
- // Legacy (do not emit)
17
- "taskConfiguration": { "narrix": { "webScopeQuestions": ["Is this asset reachable?"] } }
18
- // Canonical
19
16
  "taskConfiguration": {
20
- "narrix": { "enableWebScope": true },
21
- "aiTaskProfile": { "webScoping": { "enabled": true, "questions": ["Is this asset reachable?"] } }
17
+ "narrix": { "datasetId": "network.assets", "layer": "asset" },
18
+ "aiTaskProfile": {
19
+ "preStrategyKey": "pre-v1",
20
+ "postStrategyKey": "post-v1",
21
+ "webQueryTemplate": "Is {{input.assetId}} reachable from the internet?"
22
+ }
22
23
  }
23
24
  ```
25
+ Do **not** emit `webScoping`, `narrix.enableWebScope`, or `narrix.webScopeQuestions`.
24
26
 
25
27
  **Task I/O example:**
26
28
  ```json
@@ -8,7 +8,7 @@ You are a **senior graph architect** reviewing **worox-graph** DAGs at the **con
8
8
  3. **`graphConceptFromStory.parsed`**: When present (server-injected alongside a concept story), use it as **structured** expected intent (`coreTasks`, `expectedInput`, `outputDescription`, `persistenceNotes`, etc.) and compare to what the graph actually implements.
9
9
  4. **`analysisContext`**: When provided, use it for execution order, IO summaries, and known issues—**if** consistent with `existingGraph`.
10
10
  5. **Skill catalogs** in the request (`aiSkills`, `utilitySkills`, and **`catalogCandidates`** when present): Judge whether `skillKey` choices fit each step (AI vs local, appropriateness). Infer **catalog / scoping / Narrix** hints from nodes and these lists.
11
- 6. **Offline protocol parity:** When helpful, cross-check **non-local** AI nodes against the same rules as **`reportTaskNodeProtocolGaps`** (missing **`aiTaskProfile`**, bad **`webScoping`**, bad **`inputSynthesis`**) and mention the issue codes in **`suggestedChange`** so hosts can grep CI.
11
+ 6. **Offline protocol parity:** When helpful, cross-check **non-local** AI nodes against the same rules as **`reportTaskNodeProtocolGaps`** (missing **`aiTaskProfile`**, **`legacy_web_scoping`**, bad **`webQueryTemplate`**, bad **`inputSynthesis`**) and mention the issue codes in **`suggestedChange`** so hosts can grep CI.
12
12
 
13
13
  ### Intent Map v3 — orthogonal lanes (do not conflate)
14
14
 
@@ -18,7 +18,7 @@ Product **`metadata.graphConcept`** separates three concerns. Your patch must re
18
18
  |------|-----------------|--------|
19
19
  | **Graph subject (xmemory entity scope)** | **Top-level** **`entityBindings`** (`coreEntityCollectionId`, optional `supportingEntityCollectionIds`, `targetEntityCollectionId`) | Which **entity collections** the graph is *about* (Catalox **`xmemory.entityCollections`**). When the host loads that catalog via the Catalox bridge, rows are often merged into **`catalogCandidates.scopingMaps`** — use them to infer **`entityBindings`**, not execution paths. |
20
20
  | **Per-step execution handoff** | **`coreTasks[i].requirements.memoryIO`** | Reads / writes / **`jobContextMappings`** for **execution memory** between steps. |
21
- | **Discovery / web / narrative** | **`coreTasks[i].requirements.narrix`**, **`coreTasks[i].webScoping`**, editor **`synthesis`** | Discovery configuration. **Never** use these alone to stand in for missing **`entityBindings`** when the graph is clearly about a typed entity collection. |
21
+ | **Discovery / web / narrative** | **`coreTasks[i].requirements.narrix`**, **`coreTasks[i].webQueryTemplate`**, editor **`synthesis`** | Discovery + Rendrix web query template. **Never** use these alone to stand in for missing **`entityBindings`** when the graph is clearly about a typed entity collection. |
22
22
 
23
23
  Also populate **`requirements.strategies`** with **`pre`** / **`post`** string arrays (strategy catalog ids) when **`taskConfiguration.aiTaskProfile.preStrategyKey`** / **`postStrategyKey`** on nodes map to an intent step. Use **`conceptStatus`** on the patch (`not-started`, `generated-draft`, `user-refined`, `complete`) when your review implies a lifecycle transition. Prefer **`stepInputs`** as a **single execution-memory path hint string** (v3); a plain object is still accepted for legacy merges. **Do not** put legacy graphConcept keys in patches (`primaryOutputs`, `downstreamEffects`, `primaryQuestionOrDecision`, `subquestions` — consumers migrate those on read).
24
24
 
@@ -29,7 +29,7 @@ Cover what matters for the graph at hand; skip axes that clearly do not apply. *
29
29
  - **Narrix discovery**: For **`professional-answer`** (or other LLM) nodes that imply discovery, check **`taskConfiguration.narrix`** (`datasetId`, `layer`, `narrativeTypeIds`) for coherence with **`inputsConfig`** / **`taskVariable`** and **`catalogCandidates.narrixTemplates`** when present.
30
30
  - **Catalog planning vs runtime**: When **`metadata.catalogBinding`** / **`metadata.catalogRequests`** (graph) exist, note mismatches vs actual **`taskConfiguration.narrix`** / **`taskConfiguration.scopingMapId`** on nodes, or vs gaps declared in **`catalogRequests`**.
31
31
  - **Graph I/O contracts**: When **`metadata.graphEntry`** or **`metadata.graphResponse`** exist, comment on whether **`inputs`**, **`taskVariable`**, execution paths, and finalizer outputs align with declared **`requiredExecutionPaths`** / **`notableExecutionPaths`** / schemas (authoring-level review).
32
- - **Web scoping + input synthesis (node-level)**: Under **`taskConfiguration.aiTaskProfile`**, when **`webScoping.enabled`** is true, require a non-empty **`webScoping.questions`** list (do not author web questions on **`taskConfiguration.narrix`**). When **`inputSynthesis.enabled`** is true, require non-empty **`catalogId`**, **`strategyKey`**, **`outputKey`**, **`sources`**, and **`destination`** (`job`, `task`, or `execution`). Flag **`catalog`** / **`core_task`** findings when **`questions`** exist but scoping is off, or synthesis is enabled without required fields.
32
+ - **Web scoping + input synthesis (node-level)**: Under **`taskConfiguration.aiTaskProfile`**, web scope requires non-empty **`webQueryTemplate`** (Rendrix string with `{{input.*}}` refs) — do **not** author **`webScoping`** or web keys on **`narrix`**. When **`inputSynthesis.enabled`** is true, require non-empty **`catalogId`**, **`strategyKey`**, **`outputKey`**, **`sources`**, and **`destination`** (`job`, `task`, or `execution`).
33
33
  - **Task decomposition**: One clear responsibility per node; avoid redundant or oversized steps.
34
34
  - **Skill selection**: Right tool for deterministic vs inferential work; catalog alignment in locked mode.
35
35
  - **Data flow**: Execution-memory paths and `jobContextMapping` / `inputs` trace from `input.*` or upstream writers; `taskVariable.question` and other task variables stay out of runtime payload bindings; `taskVariable` refs trace to top-level `variables`; no obvious dangling reads.
@@ -18,8 +18,8 @@ Weighted rules passed to aifunctions-js for scoring model outputs. **Source of t
18
18
  { "rule": "For reviewConcept: when a single requirement value cannot be chosen with confidence, include requirementOptions with ranked candidates and/or catalogProposals or findings with structured proposal — not only free-text findings summaries", "weight": 2 },
19
19
  { "rule": "For create/modify: every AI task node must include taskConfiguration.aiTaskProfile.preStrategyKey and postStrategyKey (non-empty); core skill stays skillKey", "weight": 3 },
20
20
  { "rule": "For create/modify: use inputsConfig (not inputs) on task nodes; executionMapping (not outputMapping) for task result wiring; taskVariable for question and variable refs (jobVariables.* / taskVariables.*)", "weight": 3 },
21
- { "rule": "For create/modify: when taskConfiguration.aiTaskProfile.webScoping.enabled is true, webScoping.questions must be non-empty; when inputSynthesis.enabled is true, catalogId and strategyKey must be non-empty", "weight": 3 },
22
- { "rule": "For create/modify: returned graph must pass offline task-node protocol (pre/post, webScoping, inputSynthesis) on taskConfiguration.aiTaskProfile", "weight": 3 },
21
+ { "rule": "For create/modify: when web scope is needed, taskConfiguration.aiTaskProfile.webQueryTemplate must be a non-empty Rendrix template; when inputSynthesis.enabled is true, catalogId and strategyKey must be non-empty", "weight": 3 },
22
+ { "rule": "For create/modify: returned graph must pass offline task-node protocol (pre/post, webQueryTemplate, inputSynthesis) on taskConfiguration.aiTaskProfile", "weight": 3 },
23
23
  { "rule": "In locked mode, no skillKey outside the provided catalog may appear in nodes", "weight": 3 },
24
24
  { "rule": "In extensible mode, every novel skillKey must have a corresponding requiredSkills entry with all required fields", "weight": 2 },
25
25
  { "rule": "taskVariable.question for AI skills must be specific and self-contained; question, literals, and variable refs belong in taskVariable not inputsConfig", "weight": 2 },
@@ -43,7 +43,7 @@ A graph is a single JSON object. Top-level fields (canonical root keys only):
43
43
  "aiTaskProfile": {
44
44
  "preStrategyKey": "<pre-strategy-row-id>",
45
45
  "postStrategyKey": "<post-strategy-row-id>",
46
- "webScoping": { "enabled": false },
46
+ "webQueryTemplate": "Optional Rendrix template, e.g. Patch status for {{input.cveId}}?",
47
47
  "inputSynthesis": { "enabled": false }
48
48
  },
49
49
  "narrix": { "datasetId": "<optional>", "layer": "<optional>" },
@@ -68,7 +68,7 @@ A graph is a single JSON object. Top-level fields (canonical root keys only):
68
68
  | Planning / UX | `metadata.*` | `graphReadability`, `catalogBinding`, `name`, `description` — **not** `aiTaskProfile` or `narrix`. |
69
69
  | Result wiring | `executionMapping` | Writes into execution memory after the task succeeds. |
70
70
 
71
- - **AI task nodes** must include **`taskConfiguration.aiTaskProfile`** with non-empty **`preStrategyKey`** and **`postStrategyKey`** (deployment catalog row ids). Add **`taskConfiguration.narrix`** when discovery applies. Add **`webScoping`** / **`inputSynthesis`** under **`aiTaskProfile`** when needed. Legacy **`metadata.aiTaskProfile`** is dual-read and canonicalized to **`taskConfiguration`** on output — do not author new graphs under `metadata`.
71
+ - **AI task nodes** must include **`taskConfiguration.aiTaskProfile`** with non-empty **`preStrategyKey`** and **`postStrategyKey`** (deployment catalog row ids). Add **`taskConfiguration.narrix`** when discovery applies. Add **`webQueryTemplate`** (and optional **`webScopeOptions`**) / **`inputSynthesis`** under **`aiTaskProfile`** when needed. Do **not** author **`webScoping`**, **`narrix.enableWebScope`**, or **`narrix.webScopeQuestions`**. Legacy **`metadata.aiTaskProfile`** is dual-read and canonicalized to **`taskConfiguration`** on output — do not author new graphs under `metadata`.
72
72
  - **`taskConfiguration.llmCall`** (MAIN tuning only): optional **`temperature`**, **`topP`**, **`reasoningEffort`** (`not-applicable` | `none` | `low` | `medium` | `high`), **`timeoutMs`**, **`outputExpectation`**. Do **not** author **`maxTokens`**, **`max_completion_tokens`**, or **`maxTokensCap`** — Optimixer owns completion budget at invoke. Do **not** set **`llmCall.model`** on graph JSON (runtime resolves from **`skillModel`**).
73
73
  - **`modelConfig`** cases hold **`@x12i/ai-profiles` profile names only** in three slots — never token caps or provider ids on graph JSON.
74
74
  - `skillKey` must come from the provided skill catalog unless extensible mode is active.
@@ -10,10 +10,10 @@ Before returning any graph (create/modify only), verify:
10
10
  8. If `maxNodes` is set, the total node count does not exceed it.
11
11
  9. All `skillKey` values exist in the provided catalog (unless extensible mode is active).
12
12
  10. For every **AI task** node, include **`taskConfiguration.aiTaskProfile.preStrategyKey`** and **`postStrategyKey`** (non-empty strings matching deployment PRE/POST strategy catalog row ids). Omit only on local/utility skills.
13
- 11. When **`taskConfiguration.aiTaskProfile.webScoping.enabled`** is `true`, include a non-empty **`webScoping.questions`** array. Do not set `questions` when `enabled` is `false`.
13
+ 11. When web scope is needed, set non-empty **`taskConfiguration.aiTaskProfile.webQueryTemplate`** (Rendrix string with `{{input.*}}` refs). Optional **`webQueryTemplates[]`** for pack mode. Do **not** author **`webScoping`** or web keys on **`narrix`**.
14
14
  12. When **`inputSynthesis.enabled`** is `true`, set non-empty **`inputSynthesis.catalogId`**, **`strategyKey`**, **`outputKey`**, **`sources`** (memory paths), and **`destination`** (`job`, `task`, or `execution`). Do not add manual PRE `synthesized-context` steps when profile synthesis is enabled.
15
15
  13. Do not author deprecated task-node **`inputs`** or **`outputMapping`** — use **`inputsConfig`** and **`executionMapping`**.
16
- 14. **Narrix** belongs under **`taskConfiguration.narrix`** (`datasetId`, `layer`, `narrativeTypeIds` when needed). Author web questions only under **`taskConfiguration.aiTaskProfile.webScoping`**, not on `narrix`.
16
+ 14. **Narrix** belongs under **`taskConfiguration.narrix`** (`datasetId`, `layer`, `narrativeTypeIds` when needed). Discovery only no web fields on `narrix`.
17
17
  15. **`metadata`** is for planning fields (`graphReadability`, `catalogBinding`, …) only.
18
18
  16. Optional **`metadata.catalogBinding`** / **`metadata.catalogRequests`** per product catalog planning.
19
19
  17. New graphs should include root **`response`** with `shape` selectors; legacy `metadata.graphResponse` is non-canonical.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@exellix/graph-composer",
3
- "version": "2.11.0",
3
+ "version": "2.12.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -64,22 +64,22 @@
64
64
  },
65
65
  "homepage": "https://github.com/woroces/graph-composer#readme",
66
66
  "overrides": {
67
- "@x12i/graphenix-authoring-format": "^2.7.0",
68
- "@x12i/graphenix-case-format": "^2.7.0",
69
- "@x12i/graphenix-core": "^2.7.0",
70
- "@x12i/graphenix-executable-contracts": "^2.7.0",
71
- "@x12i/graphenix-executable-format": "^2.7.0",
72
- "@x12i/graphenix-execute-envelope": "^2.7.0",
67
+ "@x12i/graphenix-authoring-format": "^2.7.3",
68
+ "@x12i/graphenix-case-format": "^2.7.3",
69
+ "@x12i/graphenix-core": "^2.7.3",
70
+ "@x12i/graphenix-executable-contracts": "^2.7.3",
71
+ "@x12i/graphenix-executable-format": "^2.7.3",
72
+ "@x12i/graphenix-execute-envelope": "^2.7.3",
73
73
  "@x12i/graphenix-format": "^2.0.0",
74
- "@x12i/graphenix-plan-compiler": "^2.7.0",
75
- "@x12i/graphenix-plan-format": "^2.7.0",
76
- "@x12i/graphenix-task-node-format": "^2.7.0",
77
- "@x12i/graphenix-trace-format": "^2.7.0"
74
+ "@x12i/graphenix-plan-compiler": "^2.7.3",
75
+ "@x12i/graphenix-plan-format": "^2.7.3",
76
+ "@x12i/graphenix-task-node-format": "^2.7.3",
77
+ "@x12i/graphenix-trace-format": "^2.7.3"
78
78
  },
79
79
  "peerDependencies": {
80
- "@exellix/ai-skills": "^6.12.3",
81
- "@exellix/ai-tasks": "^10.0.9",
82
- "@exellix/graph-engine": "^8.5.0"
80
+ "@exellix/ai-skills": "^6.12.5",
81
+ "@exellix/ai-tasks": "^10.0.13",
82
+ "@exellix/graph-engine": "^8.6.0"
83
83
  },
84
84
  "peerDependenciesMeta": {
85
85
  "@exellix/graph-engine": {
@@ -93,15 +93,15 @@
93
93
  }
94
94
  },
95
95
  "dependencies": {
96
- "@x12i/catalox": "^5.9.7",
96
+ "@x12i/catalox": "^5.9.8",
97
97
  "@x12i/env": "^4.0.1",
98
98
  "@x12i/funcx": "^4.9.13",
99
99
  "@x12i/logxer": "^4.6.0"
100
100
  },
101
101
  "devDependencies": {
102
- "@exellix/ai-skills": "^6.12.3",
103
- "@exellix/ai-tasks": "^10.0.9",
104
- "@exellix/graph-engine": "^8.5.0",
102
+ "@exellix/ai-skills": "^6.12.5",
103
+ "@exellix/ai-tasks": "^10.0.13",
104
+ "@exellix/graph-engine": "^8.6.0",
105
105
  "@types/node": "^22.10.2",
106
106
  "@x12i/rendrix": "^4.3.0",
107
107
  "nx-config2": "^3.6.5",