@exellix/graph-composer 2.11.0 → 2.14.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
@@ -94,7 +111,7 @@
94
111
 
95
112
  ### Fixed
96
113
 
97
- - Load `@exellix/ai-skills` analysis helpers via resolved file paths instead of non-exported package subpaths, so consumers importing `@exellix/graph-composer` or `@exellix/exellix-runtime` (e.g. `@exellix/exellix-jobs`) no longer fail at module load.
114
+ - Load `@exellix/ai-skills` analysis helpers via resolved file paths instead of non-exported package subpaths, so consumers importing `@exellix/graph-composer` or `@x12i/exellix-runtime` (e.g. `@x12i/exellix-jobs`) no longer fail at module load.
98
115
 
99
116
  ## 2.5.0
100
117
 
package/README.md CHANGED
@@ -1,9 +1,9 @@
1
- # @x12i/graph-composer
1
+ # @exellix/graph-composer
2
2
 
3
3
  | | Location |
4
4
  |---|----------|
5
5
  | **GitHub (source)** | [`woroces/graph-composer`](https://github.com/woroces/graph-composer) — clone: `git@github.com:woroces/graph-composer.git` |
6
- | **npm (package)** | [`@x12i/graph-composer`](https://www.npmjs.com/package/@x12i/graph-composer) |
6
+ | **npm (package)** | [`@exellix/graph-composer`](https://www.npmjs.com/package/@exellix/graph-composer) |
7
7
 
8
8
  The Git repo lives under the **woroces** org with repo name **graph-composer**. That is separate from the npm scope **@x12i**.
9
9
 
@@ -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`).
@@ -62,7 +62,7 @@ Copy [`.env.example`](./.env.example) to `.env` for local development. **Do not
62
62
  ## Quick start (direct worker)
63
63
 
64
64
  ```ts
65
- import { runGraphComposer } from "@x12i/graph-composer";
65
+ import { runGraphComposer } from "@exellix/graph-composer";
66
66
 
67
67
  const result = await runGraphComposer(
68
68
  {
@@ -103,7 +103,7 @@ const result = await runGraphComposer(
103
103
  ### Orchestrator (toolbox)
104
104
 
105
105
  ```ts
106
- import { runGraphComposerAgent } from "@x12i/graph-composer";
106
+ import { runGraphComposerAgent } from "@exellix/graph-composer";
107
107
 
108
108
  const out = await runGraphComposerAgent(
109
109
  {
@@ -162,7 +162,7 @@ Types: `GraphConceptPatch`, `GraphConceptPatchKey`, `PrimaryIntentType`. Helper:
162
162
  **Example using the bundled fixture helper:**
163
163
 
164
164
  ```ts
165
- import { runGraphComposer, inputSuggestConceptObjectiveNetworkVulnSubnet } from "@x12i/graph-composer";
165
+ import { runGraphComposer, inputSuggestConceptObjectiveNetworkVulnSubnet } from "@exellix/graph-composer";
166
166
 
167
167
  const result = await runGraphComposer(inputSuggestConceptObjectiveNetworkVulnSubnet(), {
168
168
  askTimeoutMs: 120_000,
@@ -186,7 +186,7 @@ import {
186
186
  configureGraphComposerLogging,
187
187
  getGraphComposerLoggingConfig,
188
188
  runGraphComposer,
189
- } from "@x12i/graph-composer";
189
+ } from "@exellix/graph-composer";
190
190
 
191
191
  // Process-wide (e.g. after reading your service config)
192
192
  configureGraphComposerLogging({ logsLevel: "info" });
@@ -205,7 +205,7 @@ Precedence per worker run: **`options.logsLevel`** → **`configureGraphComposer
205
205
  Use `generateGraphJsonInputExample` when a host has a graph-specific expected input JSON Schema and wants a realistic smoke-test payload. It wraps Funcx `generateJsonExample`, adding graph metadata such as `metadata.graphConcept.expectedInput` and core tasks to the guidance.
206
206
 
207
207
  ```ts
208
- import { generateGraphJsonInputExample } from "@x12i/graph-composer";
208
+ import { generateGraphJsonInputExample } from "@exellix/graph-composer";
209
209
 
210
210
  const out = await generateGraphJsonInputExample({
211
211
  existingGraph: myGraphJson,
@@ -220,7 +220,7 @@ The package also re-exports Funcx `generateJsonExample`, `generateMdExample`, an
220
220
 
221
221
  ### Catalog resolution & creation (`suggestCatalogResolution`, `suggestCatalogCreations`)
222
222
 
223
- Both **require** `existingGraph`. Pass **`catalogCandidates`** (from **Catalox** via `loadCatalogCandidatesFromCatalox`, or fixtures): `aiSkills`, `utilitySkills`, `scopingMaps`, `narrixTemplates` — see [`docs/worox-graphs-catalogs.md`](./docs/worox-graphs-catalogs.md) and [`docs/catalog-metadb-end-state-contract.md`](./docs/catalog-metadb-end-state-contract.md) (**Catalox bridge + `catalogCandidates` as documented there: `@x12i/graph-composer` ≥ 1.6.0**).
223
+ Both **require** `existingGraph`. Pass **`catalogCandidates`** (from **Catalox** via `loadCatalogCandidatesFromCatalox`, or fixtures): `aiSkills`, `utilitySkills`, `scopingMaps`, `narrixTemplates` — see [`docs/worox-graphs-catalogs.md`](./docs/worox-graphs-catalogs.md) and [`docs/catalog-metadb-end-state-contract.md`](./docs/catalog-metadb-end-state-contract.md) (**Catalox bridge + `catalogCandidates` as documented there: `@exellix/graph-composer` ≥ 1.6.0**).
224
224
 
225
225
  - **`suggestCatalogResolution`** — Per-node style recommendations: `skillResolution`, `scopingResolution`, `narrixResolution`, `gaps`. Optional **`matchLists`** pre-pass (skills / scoping / narrix) injects **`catalogMatchHints`** into the worker prompt when `catalogMatchListsAssist !== false` (default) and an OpenRouter **client** is available.
226
226
  - **`suggestCatalogCreations`** — `catalogRequestProposals` (+ optional `newSkillDescriptors`). Host applies approved rows via **Catalox** (or your store); this package emits JSON only.
@@ -228,7 +228,7 @@ Both **require** `existingGraph`. Pass **`catalogCandidates`** (from **Catalox**
228
228
  ### Scoping need match & scoping map creation
229
229
 
230
230
  - **`suggestScopingNeedMatch`** — **Does not** require `existingGraph` (optional context). **Requires** non-empty **`catalogCandidates.scopingMaps`**. Put the data need in **`intent.description`**. Output: **`hasSuitableMatch`**, **`recommended`** (`scopingMapId` / `questionId` when true, **`null` when false**), **`gaps`**, optional **`alternatives`**. Optional **`matchLists`** injects **`scopingNeedMatchHints`** (same client / `catalogMatchListsAssist` flag).
231
- - **`suggestScopingMapCreation`** — Plan a new scoping map: **`scopingMapProposal`** + non-empty **`catalogRequestProposals`**. Host persists approved artifacts; see **`WoroxScopingMapCatalogCreatePayload`** exported from **`@x12i/graph-composer`** (authored as `src/scopingCatalogHostTypes.ts` in this repo).
231
+ - **`suggestScopingMapCreation`** — Plan a new scoping map: **`scopingMapProposal`** + non-empty **`catalogRequestProposals`**. Host persists approved artifacts; see **`WoroxScopingMapCatalogCreatePayload`** exported from **`@exellix/graph-composer`** (authored as `src/scopingCatalogHostTypes.ts` in this repo).
232
232
 
233
233
  ### `RunGraphComposerOptions` (workers)
234
234
 
@@ -266,8 +266,8 @@ Authoritative JSON shapes: [`functions/graph-composer/meta.json`](./functions/gr
266
266
 
267
267
  ```bash
268
268
  export OPENROUTER_API_KEY=sk-or-...
269
- npx @x12i/graph-composer explain-basic
270
- npx @x12i/graph-composer network-vuln
269
+ npx @exellix/graph-composer explain-basic
270
+ npx @exellix/graph-composer network-vuln
271
271
  ```
272
272
 
273
273
  Or use the binary name:
@@ -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). |
@@ -339,11 +339,7 @@ npm run typecheck
339
339
  npm test # live tests; needs OPENROUTER_API_KEY in .env
340
340
  ```
341
341
 
342
- Optional: [nx-config2](https://www.npmjs.com/package/nx-config2) for scripts that load `.env`:
343
-
344
- ```bash
345
- npx nx-config2 run --env-file .env -- npm test
346
- ```
342
+ Live tests and scripts load `.env` via `@x12i/env` (`x12i-env run --env-file .env -- …`); see `npm test` / `npm run test:live` scripts.
347
343
 
348
344
  **Maintainer smoke (suggest only, truncated JSON):** `npm run suggest-smoke` (repo only; uses `scripts/run-suggest-concept-smoke.ts`).
349
345
 
@@ -363,11 +359,11 @@ Published npm tarball still **does not** ship `docs/`; clone the repo or read th
363
359
 
364
360
  ## Publishing (maintainers)
365
361
 
366
- Scoped package `@x12i/graph-composer` uses `publishConfig.access: "public"`. Ensure your npm user is a member of the **x12i** org (or owns the scope) and has a valid token in `~/.npmrc` or project `.npmrc` (never commit tokens).
362
+ Scoped package `@exellix/graph-composer` uses `publishConfig.access: "public"`. Ensure your npm user is a member of the **x12i** org (or owns the scope) and has a valid token in the **monorepo root** `.npmrc` (copy from `.npmrc.example`; never commit tokens). Publish via `npm run publish:all` from the repo root — do not run `npm publish` in this folder directly.
367
363
 
368
364
  ```bash
369
- npm run build
370
- npm publish
365
+ # From monorepo root (uses root .npmrc for all packages)
366
+ npm run publish:all -- --packages graph-composer
371
367
  ```
372
368
 
373
369
  Confirm tarball: `npm run pack:check` (must **not** list `docs/`, `.env`, or `test/`).
@@ -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":"AAAA,OAAO,EACL,mBAAmB,EACnB,yBAAyB,EACzB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACL,8BAA8B,EAC9B,mBAAmB,EACnB,6BAA6B,EAC7B,+BAA+B,EAC/B,sBAAsB,EACtB,KAAK,mBAAmB,EACxB,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,qBAAqB,EACrB,2BAA2B,GAC5B,MAAM,cAAc,CAAC;AACtB,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EACL,gBAAgB,EAChB,cAAc,EACd,0BAA0B,EAC1B,yBAAyB,EACzB,UAAU,EACV,mCAAmC,EACnC,oCAAoC,EACpC,uCAAuC,EACvC,mBAAmB,EACnB,KAAK,uBAAuB,GAC7B,MAAM,uBAAuB,CAAC;AAC/B,YAAY,EACV,iBAAiB,EACjB,QAAQ,EACR,sBAAsB,EACtB,mBAAmB,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,4BAA4B,EAC5B,yBAAyB,GAC1B,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,6BAA6B,EAC7B,6BAA6B,EAC7B,yBAAyB,EACzB,sBAAsB,EACtB,6BAA6B,EAC7B,2BAA2B,EAC3B,0BAA0B,EAC1B,KAAK,oCAAoC,EACzC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EAAE,iCAAiC,EAAE,MAAM,6BAA6B,CAAC;AAChF,OAAO,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AACxE,OAAO,EACL,0BAA0B,EAC1B,qBAAqB,EACrB,iCAAiC,EACjC,4BAA4B,EAC5B,8BAA8B,EAC9B,+BAA+B,EAC/B,KAAK,eAAe,EACpB,KAAK,oBAAoB,EACzB,KAAK,iBAAiB,EACtB,KAAK,gBAAgB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,mBAAmB,EACxB,KAAK,kBAAkB,EACvB,KAAK,sBAAsB,EAC3B,KAAK,oBAAoB,EACzB,KAAK,oBAAoB,GAC1B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,qBAAqB,EACrB,KAAK,wBAAwB,EAC7B,KAAK,mCAAmC,EACxC,KAAK,4BAA4B,GAClC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EACV,kBAAkB,EAClB,uBAAuB,EACvB,mBAAmB,EACnB,wBAAwB,EACxB,eAAe,EACf,iBAAiB,EACjB,kBAAkB,EAClB,0BAA0B,EAC1B,iBAAiB,EACjB,oBAAoB,EACpB,6BAA6B,EAC7B,6BAA6B,EAC7B,0BAA0B,EAC1B,sBAAsB,EACtB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,YAAY,CAAC;AACpB,OAAO,EACL,sBAAsB,EACtB,KAAK,yBAAyB,GAC/B,MAAM,yBAAyB,CAAC;AACjC,OAAO,EACL,0BAA0B,EAC1B,KAAK,6BAA6B,GACnC,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,0BAA0B,EAC1B,sCAAsC,EACtC,qCAAqC,EACrC,qCAAqC,EACrC,uCAAuC,EACvC,2BAA2B,EAC3B,uCAAuC,EACvC,sCAAsC,EACtC,uCAAuC,EACvC,yCAAyC,EACzC,qCAAqC,EACrC,qCAAqC,EACrC,2CAA2C,EAC3C,KAAK,uBAAuB,GAC7B,MAAM,oCAAoC,CAAC;AAC5C,YAAY,EACV,mCAAmC,EACnC,4BAA4B,GAC7B,MAAM,8BAA8B,CAAC;AACtC,OAAO,EACL,gBAAgB,EAChB,6BAA6B,EAC7B,6CAA6C,EAC7C,yBAAyB,GAC1B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,8BAA8B,EAC9B,8BAA8B,EAC9B,6BAA6B,EAC7B,8BAA8B,EAC9B,mBAAmB,EACnB,iBAAiB,EACjB,sBAAsB,EACtB,KAAK,mCAAmC,EACxC,KAAK,oCAAoC,EACzC,KAAK,yBAAyB,EAC9B,KAAK,uBAAuB,EAC5B,KAAK,uBAAuB,EAC5B,KAAK,4BAA4B,EACjC,KAAK,4BAA4B,GAClC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,sBAAsB,EACtB,0BAA0B,EAC1B,8BAA8B,EAC9B,0BAA0B,GAC3B,MAAM,6BAA6B,CAAC;AACrC,YAAY,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACtE,OAAO,EACL,0BAA0B,EAC1B,wBAAwB,EACxB,KAAK,qBAAqB,EAC1B,KAAK,mBAAmB,EACxB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,EACzB,KAAK,wBAAwB,EAC7B,KAAK,yBAAyB,GAC/B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,4BAA4B,EAC5B,mCAAmC,EACnC,8BAA8B,EAC9B,8BAA8B,EAC9B,8BAA8B,EAC9B,iCAAiC,EACjC,gCAAgC,EAChC,iCAAiC,EACjC,qDAAqD,EACrD,qCAAqC,EACrC,wBAAwB,EACxB,oBAAoB,EACpB,4BAA4B,EAC5B,KAAK,+BAA+B,EACpC,KAAK,sBAAsB,EAC3B,KAAK,qBAAqB,EAC1B,KAAK,iBAAiB,EACtB,KAAK,mCAAmC,GACzC,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,qCAAqC,EACrC,uCAAuC,EACvC,KAAK,6BAA6B,GACnC,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAE,6BAA6B,EAAE,MAAM,6BAA6B,CAAC;AAC5E,OAAO,EACL,iCAAiC,EACjC,sCAAsC,EACtC,0BAA0B,EAC1B,KAAK,0BAA0B,EAC/B,KAAK,wBAAwB,GAC9B,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,uCAAuC,EACvC,qCAAqC,EACrC,sBAAsB,EACtB,qBAAqB,EACrB,6BAA6B,EAC7B,2BAA2B,EAC3B,6BAA6B,EAC7B,6BAA6B,EAC7B,sCAAsC,EACtC,yBAAyB,EACzB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,gCAAgC,EAChC,mBAAmB,EACnB,+BAA+B,EAC/B,kCAAkC,EAClC,KAAK,4BAA4B,EACjC,KAAK,2BAA2B,EAChC,KAAK,iCAAiC,EACtC,KAAK,mCAAmC,EACxC,KAAK,0BAA0B,EAC/B,KAAK,yBAAyB,EAC9B,KAAK,2BAA2B,EAChC,KAAK,0BAA0B,EAC/B,KAAK,2BAA2B,EAChC,KAAK,qCAAqC,EAC1C,KAAK,iCAAiC,EACtC,KAAK,mCAAmC,EACxC,KAAK,iCAAiC,EACtC,KAAK,mCAAmC,EACxC,KAAK,+BAA+B,EACpC,KAAK,iCAAiC,GACvC,MAAM,iCAAiC,CAAC;AACzC,OAAO,EACL,uBAAuB,EACvB,4BAA4B,EAC5B,qBAAqB,EACrB,uBAAuB,EACvB,4BAA4B,EAC5B,gCAAgC,EAChC,2BAA2B,EAC3B,4BAA4B,EAC5B,KAAK,2BAA2B,EAChC,KAAK,8BAA8B,EACnC,KAAK,oBAAoB,EACzB,KAAK,qBAAqB,EAC1B,KAAK,yBAAyB,EAC9B,KAAK,wBAAwB,EAC7B,KAAK,8BAA8B,EACnC,KAAK,wBAAwB,EAC7B,KAAK,oBAAoB,GAC1B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EACL,qBAAqB,EACrB,2BAA2B,EAC3B,2BAA2B,EAC3B,qCAAqC,EACrC,sBAAsB,EACtB,gCAAgC,EAChC,kCAAkC,EAClC,qBAAqB,EACrB,UAAU,EACV,eAAe,EACf,KAAK,yBAAyB,EAC9B,KAAK,6BAA6B,GACnC,MAAM,2BAA2B,CAAC;AACnC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,OAAO,EACP,YAAY,GACb,MAAM,wBAAwB,CAAC;AAChC,YAAY,EACV,cAAc,EACd,oBAAoB,GACrB,MAAM,wBAAwB,CAAC;AAChC,OAAO,EACL,gCAAgC,EAChC,mCAAmC,EACnC,uCAAuC,EACvC,2CAA2C,EAC3C,KAAK,8BAA8B,EACnC,KAAK,gCAAgC,EACrC,KAAK,+BAA+B,EACpC,KAAK,+BAA+B,EACpC,KAAK,2BAA2B,GACjC,MAAM,2BAA2B,CAAC"}
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":"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"}
@@ -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.14.0",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },
@@ -28,7 +28,6 @@
28
28
  ".env.example"
29
29
  ],
30
30
  "scripts": {
31
- "postinstall": "node -e \"const fs=require('fs'),p=require('path');const s=p.join('node_modules','nx-config2','bin','nx-config2.js'),d=p.join('node_modules','@x12i','env','bin','nx-config2.js');try{if(fs.existsSync(s)&&!fs.existsSync(d))fs.copyFileSync(s,d);}catch(_){}\"",
32
31
  "build": "tsc -p tsconfig.build.json",
33
32
  "prepublishOnly": "npm run build",
34
33
  "start": "x12i-env run --env-file .env -- node dist/cli.js",
@@ -57,34 +56,18 @@
57
56
  },
58
57
  "repository": {
59
58
  "type": "git",
60
- "url": "git+https://github.com/woroces/graph-composer.git"
59
+ "url": "git+ssh://git@github.com/exellix/exellix-engine-mono-repo.git",
60
+ "directory": "graph-composer"
61
61
  },
62
62
  "bugs": {
63
63
  "url": "https://github.com/woroces/graph-composer/issues"
64
64
  },
65
65
  "homepage": "https://github.com/woroces/graph-composer#readme",
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",
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"
78
- },
79
66
  "peerDependencies": {
80
- "@exellix/ai-skills": "^6.12.3",
81
- "@exellix/ai-tasks": "^10.0.9",
82
- "@exellix/graph-engine": "^8.5.0"
67
+ "@exellix/ai-skills": "^6.12.5",
68
+ "@exellix/ai-tasks": "^10.0.13"
83
69
  },
84
70
  "peerDependenciesMeta": {
85
- "@exellix/graph-engine": {
86
- "optional": true
87
- },
88
71
  "@exellix/ai-tasks": {
89
72
  "optional": true
90
73
  },
@@ -93,18 +76,17 @@
93
76
  }
94
77
  },
95
78
  "dependencies": {
96
- "@x12i/catalox": "^5.9.7",
97
- "@x12i/env": "^4.0.1",
79
+ "@exellix/graph-engine": "^8.6.0",
80
+ "@x12i/catalox": "^5.9.8",
81
+ "@x12i/env": "^4.0.3",
98
82
  "@x12i/funcx": "^4.9.13",
99
83
  "@x12i/logxer": "^4.6.0"
100
84
  },
101
85
  "devDependencies": {
102
- "@exellix/ai-skills": "^6.12.3",
103
- "@exellix/ai-tasks": "^10.0.9",
104
- "@exellix/graph-engine": "^8.5.0",
86
+ "@exellix/ai-skills": "^6.12.5",
87
+ "@exellix/ai-tasks": "^10.0.13",
105
88
  "@types/node": "^22.10.2",
106
89
  "@x12i/rendrix": "^4.3.0",
107
- "nx-config2": "^3.6.5",
108
90
  "tsx": "^4.19.2",
109
91
  "typescript": "^5.7.2"
110
92
  }