@exellix/ai-tasks 8.6.3 → 8.6.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,22 +1,25 @@
|
|
|
1
1
|
# @exellix/ai-tasks
|
|
2
2
|
|
|
3
|
-
Private Git/npm package for executing **tasks** using the
|
|
3
|
+
Private Git/npm package for executing **tasks** using the Exellix execution stack (`@exellix/ai-tasks` orchestrates `@exellix/ai-skills` MAIN + `@exellix/xynthesis` PRE/POST).
|
|
4
4
|
|
|
5
|
-
**Breaking — `executionStrategies` (required):** Every `runTask` request must include **`executionStrategies`**: an array of
|
|
5
|
+
**Breaking — `executionStrategies` (required):** Every `runTask` request must include **`executionStrategies`**: an array of MAIN strategy invocations or **`[]`** for plain gateway MAIN. The old **`executionStrategyKey`** field is removed. See [BREAKING-CHANGES.md](BREAKING-CHANGES.md) and [RUNTASK_REQUEST.md](RUNTASK_REQUEST.md). Supported MAIN execution is exactly: **direct** via **`executionStrategies: []`**, **planner** before MAIN, **optimizer** after MAIN, or planner + optimizer together. **8.5+:** planner and optimizer run via **`@exellix/xynthesis`** sidekick actions (`execution-plan`, `execution-evaluate-result`) — not direct FuncX `run()` from ai-tasks. Catalog rows use `runtimeKind: "xynthesis-action"` and `defaultSidekickAction`.
|
|
6
6
|
|
|
7
7
|
**Breaking — 8.4+ LLM invoke contract (no legacy):** Every `runTask` requires **`modelConfig.preActionModel`**, **`modelConfig.skillModel`**, and **`modelConfig.postActionModel`**. Do **not** send `xynthesisModel`, root `modelConfig.model`, `maxTokens`, `maxTokensCap`, or graph-era tier names (`weak` / `strong`). Token budgets are owned by **Optimixer** in `@exellix/ai-skills` (MAIN) and `@exellix/xynthesis` (PRE/POST). Send **`outputExpectation`** (xynthesis) and optional **`reasoningEffort`**, **`temperature`**, **`topP`**. See [How completion budgets work](#how-completion-budgets-work-84) and [Model profile aliases](#model-profile-aliases-x12iai-profiles).
|
|
8
8
|
|
|
9
9
|
### Stack alignment (8.4+)
|
|
10
10
|
|
|
11
|
-
| Package | Role in `runTask` | Minimum |
|
|
12
|
-
|
|
13
|
-
| `@x12i/ai-profiles` | Profile/choice → wire model (`catalogLane` required on resolve) | **2.1.
|
|
14
|
-
| `@exellix/xynthesis` | PRE synthesis, POST audit/polish, scoping, utilities (`executeXynthesisAction`) | **≥ 4.
|
|
15
|
-
| `@exellix/ai-skills` | MAIN `runSkill` (Optimixer caps, `ModelConfig.reasoningEffort
|
|
11
|
+
| Package | Role in `runTask` | Minimum (this repo) |
|
|
12
|
+
|---------|-------------------|---------------------|
|
|
13
|
+
| `@x12i/ai-profiles` | Profile/choice → wire model (`catalogLane` required on resolve) | **2.1.1** |
|
|
14
|
+
| `@exellix/xynthesis` | PRE synthesis, POST audit/polish, scoping, utilities, execution-strategy sidekick actions (`executeXynthesisAction` via `@x12i/funcx`) | **≥ 4.4.9** |
|
|
15
|
+
| `@exellix/ai-skills` | MAIN `runSkill` (Optimixer caps, `ModelConfig.reasoningEffort`, gateway invoke) | **≥ 6.3.7** |
|
|
16
|
+
| `@x12i/ai-gateway` | LLM wire for MAIN skill (transitive via ai-skills) | **≥ 10.0.6** |
|
|
16
17
|
|
|
17
|
-
|
|
18
|
+
**Gateway 10.x (via `@exellix/ai-skills` ≥ 6.3.7):** The gateway **owns billing** — read **`response.metadata.costUsd`**, **`costStatus`**, and token usage only; do **not** post-price with `@x12i/ai-tools`. Every invoke requires explicit **`model`** and **`maxTokens`** (Optimixer supplies `maxTokens` on MAIN before `gateway.invoke()`). Removed upstream: default model, flex-md token auto-fill, packaged instruction blocks, and the 500 ms between-call rate limit. On Activix rows, prefer root **`cost`** / **`costUsd`** and **`outer.cost`** over **`outer.metadata`** for billing. Failed invokes expose **`error.metadata`** (`GatewayInvokeRejectionMetadata`). Full migration rules: **[UPGRADING_AI_GATEWAY_10.md](../ai-skills/docs/UPGRADING_AI_GATEWAY_10.md)** in `@exellix/ai-skills`.
|
|
18
19
|
|
|
19
|
-
**
|
|
20
|
+
**Stored `modelConfig` slots** must use explicit **ai-profiles** **`profile/choice`** keys (`cheap/default`, `pro/default`, …). Bare profile names (`cheap`, `pro`), `profile@choice`, registry shortcuts, and legacy tier aliases (`weak` / `strong`) are **rejected** at validation — not expanded at invoke.
|
|
21
|
+
|
|
22
|
+
**Monorepo dev:** `npm test` syncs sibling **`xynthesis/dist`** and **`ai-skills/dist`** into `node_modules` before compile (see `scripts/ensure-xynthesis-dist.mjs` and `scripts/ensure-ai-skills-dist.mjs`).
|
|
20
23
|
|
|
21
24
|
**Execution pipeline (optional):** You can use `executionPipeline` (array of pre/main/post steps) instead of a single `executionType`. PRE steps include `synthesized-context`; POST steps include `audit` (quality-gate loop) and `polish` (refinement checklist). See [BREAKING-CHANGES.md](BREAKING-CHANGES.md) for migration. When `executionPipeline` is omitted, existing `executionType` behavior is unchanged.
|
|
22
25
|
|
|
@@ -43,30 +46,30 @@ This package implements the canonical `runTask()` flow (every request carries **
|
|
|
43
46
|
- preferred: `SynthesisConfig.synthesisMode: "markdown" | "structured"`
|
|
44
47
|
- legacy-compatible: `SynthesisConfig.synthesisOutputFormat` still works.
|
|
45
48
|
- Structured mode uses detected `templateCores` + resolved question, then builds clean MAIN context from validated synthesized payload.
|
|
46
|
-
- Core discovery reads raw templates (instructions/prompt) via **`
|
|
49
|
+
- Core discovery reads raw templates (instructions/prompt) via **`ExellixSkillsClient.resolveRawTemplate`** (templates loaded from the Catalox **`ai-skills`** catalog in `@exellix/ai-skills` 4.1+) before normal rendering; if no core directives are declared, structured synthesis is rejected as a template-definition error.
|
|
47
50
|
- Raw/enriched materials (`_narrix`, memory bundle, `webContext`) remain in memory; synthesized output is also stored at **`executionMemory.synthesizedContext`** for MAIN traceability unless a PRE step opts out via **`SynthesisConfig.xynthesizedOutput.alsoWriteLegacySynthesizedContext: false`** (see [Xynthesized memory and smart input](#xynthesized-memory-and-smart-input)).
|
|
48
51
|
- Optional **`RunTaskRequest.xynthesized`** holds **job-scoped**, **task-scoped**, and **execution-scoped** synthesized material for graph execution (distinct from raw memories). Optional **`smartInput`** matches **`SmartInputConfig`** from **`@exellix/ai-skills`** / Rendrix (**`paths`** as **`{ title, path, required? }[]`**). Callers may still send legacy **`paths: string[]`**; **`runTask`** validates and **normalizes** each string to **`{ title: path, path }`** before **`runSkill`**. Paths under **`xynthesized.*`** must use scope **`job`**, **`task`**, or **`execution`**; full path resolution for **`{{smartInput}}`** happens in the gateway/Rendrix stack. Optional **`smartInputRenderOptions`** is passed through like other **`RunSkillRequest`** fields.
|
|
49
52
|
- Backward compatibility is preserved by default: existing flows continue unchanged unless structured mode is explicitly selected.
|
|
50
53
|
|
|
51
54
|
Task responses may optionally include **`intermediateSteps`** when a task (or skill) runs multiple logical steps in one call (e.g. to-cni + enrich + triage); see [Intermediate steps (multi-step tasks)](#intermediate-steps-multi-step-tasks).
|
|
52
55
|
|
|
53
|
-
`@exellix/ai-tasks`
|
|
56
|
+
`@exellix/ai-tasks` depends on `@exellix/ai-skills` (MAIN) and `@exellix/xynthesis` (PRE/POST) and re-exports their catalog, invoke, and observability surfaces for single-package consumers.
|
|
54
57
|
|
|
55
58
|
### Gateway template rendering (v4)
|
|
56
59
|
|
|
57
|
-
Task execution goes through **`
|
|
60
|
+
Task execution goes through **`ExellixSkillsClient.runSkill`** (or the skills client’s executor), which uses **`gateway.invoke()`** — not `invokeChat()` — so instruction, prompt, and context templates are built via **`buildMessages`**, nx-content resolution, and **`@x12i/rendrix`** `render`. The gateway rejects a top-level **`input`** field on invoke requests; **`runSkill` / `runAudit`** map caller **`input`** (and related fields) into **`workingMemory.input`** (merged with `variables`, memories, object `context`, `knowledge`) so `.prompt` templates can use **`{{input}}`**.
|
|
58
61
|
|
|
59
62
|
On the **`runTask`** MAIN path, **`variables`** is the **job/graph bucket** forwarded **as-is** (align with **`executionMemory.jobVariables`**). **`executionMemory.taskVariables`** holds node scope. **`input`**, **`xynthesized`**, and **`smartInput`** are separate top-level fields — ai-tasks does **not** fold them into **`variables`**. Templates and Rendrix resolve **`jobVariables.*`**, **`taskVariables.*`**, **`xynthesized.*`**, and **`smartInput`** against the forwarded payload. Optional host helper **`mergeSkillTemplateVariables`** merges maps outside default MAIN.
|
|
60
63
|
|
|
61
64
|
**In this package:**
|
|
62
65
|
|
|
63
66
|
- **`runTask({ ... })`** accepts the same optional fields as **`RunSkillRequest`**: **`templateRenderOptions`**, **`templateTokens`**, **`smartInputRenderOptions`** (with **`smartInput`**). They are passed through unchanged to **`runSkill`** on the DIRECT / pipeline MAIN path.
|
|
64
|
-
- **Default parser options** for all skill runs: set **`templateRendering`** on **`
|
|
67
|
+
- **Default parser options** for all skill runs: set **`templateRendering`** on **`ExellixSkillsClientOptions`** when constructing **`ExellixSkillsClient`** (or configure **`templateRendering`** on a gateway instance you pass as **`options.gateway`**). Per-call overrides use **`templateRenderOptions`** on the request.
|
|
65
68
|
- **Synthesis, audit, polish, and AI scoping** are executed via **`@exellix/xynthesis`** (and therefore inherit xynthesis behavior for retries/repair and diagnostics when enabled).
|
|
66
69
|
|
|
67
70
|
| Mechanism | Where | Effect |
|
|
68
71
|
|-----------|--------|--------|
|
|
69
|
-
| **`
|
|
72
|
+
| **`ExellixSkillsClientOptions.templateRendering`** | Client constructor | Sets gateway defaults when this package (or your app) constructs **`AIGateway`**. If you inject **`options.gateway`**, set **`templateRendering`** on that instance. |
|
|
70
73
|
| **`RunTaskRequest.templateRenderOptions`** | Per **`runTask`** | Deep-merged on gateway defaults for that invoke only. |
|
|
71
74
|
| **`RunTaskRequest.templateTokens`** | Per **`runTask`** | Passed through as gateway **`templateTokens`** (highest overlay priority during render). |
|
|
72
75
|
|
|
@@ -74,7 +77,7 @@ Types **`TemplateRenderOptions`**, **`SmartInputConfig`**, **`SmartInputRenderOp
|
|
|
74
77
|
|
|
75
78
|
**Errors:** **`TemplateResolutionError`** (or codes like **`TEMPLATE_RESOLUTION_ERROR`** / **`TEMPLATE_VARIABLE_MISSING`**) means a **required** template path was **`undefined`** after the gateway merged memory. Fix **`variables` / memories / input**, use optional fragments (**`{{path \|}}`**) in templates, or see the v4 guide for legacy **`silentMissingMustTokens`**. Template resolution failures are **not** treated as missing registry content (they do not go through **`RegistryManager.diagnose`** the same way as “content not found”).
|
|
76
79
|
|
|
77
|
-
Full protocol (MUST vs optional tokens, **`subPathSearch`**, errors): **[GATEWAY_TEMPLATE_PROTOCOL_V4.md](https://github.com/
|
|
80
|
+
Full protocol (MUST vs optional tokens, **`subPathSearch`**, errors): **[GATEWAY_TEMPLATE_PROTOCOL_V4.md](https://github.com/exellix/ai-skills/blob/main/GATEWAY_TEMPLATE_PROTOCOL_V4.md)** in **`@exellix/ai-skills`**. Nx-content layout: **`@x12i/ai-gateway`** [Content Resolver — Upstream Guide](https://github.com/athenices/ai-gateway/blob/main/CONTENT_RESOLVER_UPSTREAM_GUIDE.md).
|
|
78
81
|
|
|
79
82
|
---
|
|
80
83
|
|
|
@@ -86,13 +89,13 @@ Full protocol (MUST vs optional tokens, **`subPathSearch`**, errors): **[GATEWAY
|
|
|
86
89
|
npm install @exellix/ai-tasks
|
|
87
90
|
```
|
|
88
91
|
|
|
89
|
-
**Custom gateway / advanced injection:** add `@
|
|
92
|
+
**Custom gateway / advanced injection:** add `@exellix/ai-skills` and construct `WorexClientTasks` with your own client + executor.
|
|
90
93
|
|
|
91
94
|
```bash
|
|
92
|
-
npm install @exellix/ai-tasks @
|
|
95
|
+
npm install @exellix/ai-tasks @exellix/ai-skills
|
|
93
96
|
```
|
|
94
97
|
|
|
95
|
-
**Bundled x12i stack (direct dependencies of this package):** `@x12i/catalox` (catalog reads / publish script), `@x12i/env` (env conventions aligned with the
|
|
98
|
+
**Bundled x12i stack (direct dependencies of this package):** `@x12i/catalox` (catalog reads / publish script), `@x12i/env` (env conventions aligned with the Exellix stack), and `@x12i/logxer` **4.6.0+** — **`createLogxer`**, **`warnCode`/`errorCode`** with shipped diagnostic catalog (`.metadata/log-diagnostics.json`), **`DebugLogAbstract`**, **`fieldEvidence`**, **`runWithLogContext`** (wired in **`runTask()`** via **`runAiTasksWithLogContext`**), and in-process **`getAiTasksJobLogs`** for debug tooling. Per-package thresholds: **`AI_TASKS_LOGS_LEVEL`**, **`ACTIVIX_LOGS_LEVEL`**. Older names `logs-gateway` and `nx-config2` are not direct dependencies here.
|
|
96
99
|
|
|
97
100
|
### Narrix (v5+)
|
|
98
101
|
|
|
@@ -115,7 +118,7 @@ From **v5.0.0**, the local **`skills/skill.local:narrixRun`** path and **`narrix
|
|
|
115
118
|
| **`ai-task-input-strategies`** | Optional authoring hints: `inputStrategyKey` on `RunTaskRequest` (does not drive Narrix invocation). |
|
|
116
119
|
| **`execution-strategy`** | Preferred catalog for supported MAIN execution metadata: **`direct`**, **`planner`**, **`optimizer`**. |
|
|
117
120
|
| **`ai-task-execution-strategies`** | Compatibility MAIN wrappers metadata catalog: same seeded rows as **`execution-strategy`**. |
|
|
118
|
-
| **`ai-task-main-execution-wrappers`** | Compatibility MAIN
|
|
121
|
+
| **`ai-task-main-execution-wrappers`** | Compatibility MAIN execution-strategy catalog: same seeded rows as **`execution-strategy`**. |
|
|
119
122
|
| **`ai-task-narrix-modes`** | Narrix invocation: `narrixMode` (`off` \| `preprocessor` \| `handler`). |
|
|
120
123
|
|
|
121
124
|
Runtime **does not require** Catalox to be configured for these keys. Catalogs seed console metadata, and `execution-strategy` rows may be passed to `runTask` as `executionStrategyCatalogItems` for guarded metadata consumption. The runtime still code-validates supported strategy keys, phases, and retry rules; malformed or conflicting catalog rows are ignored. **Consumption order:** optional Narrix → optional web (preprocessor path) → optional Xynthesis **PRE** steps → **MAIN**.
|
|
@@ -127,12 +130,12 @@ The runtime supports three MAIN execution strategy records:
|
|
|
127
130
|
| Strategy | Request shape | Runtime behavior |
|
|
128
131
|
|----------|---------------|------------------|
|
|
129
132
|
| **`direct`** | **`executionStrategies: []`** | Plain MAIN. Calls `runSkill` once. `direct` is catalog metadata only and is **not** valid as a row inside `executionStrategies[]`. |
|
|
130
|
-
| **`planner`** | **`{ strategyKey: "planner", phase: "before", priority }`** | Runs
|
|
131
|
-
| **`optimizer`** | **`{ strategyKey: "optimizer", phase: "after", priority, maxIterations? }`** | Runs
|
|
133
|
+
| **`planner`** | **`{ strategyKey: "planner", phase: "before", priority }`** | Runs xynthesis **`execution-plan`** before MAIN and can merge instructions, prompt, variables, and template tokens into the request. |
|
|
134
|
+
| **`optimizer`** | **`{ strategyKey: "optimizer", phase: "after", priority, maxIterations? }`** | Runs xynthesis **`execution-evaluate-result`** after MAIN. If not satisfied, retries MAIN with feedback until satisfied or `maxIterations` is reached. |
|
|
132
135
|
|
|
133
136
|
`planner` must use `phase: "before"` and `optimizer` must use `phase: "after"`. `optimizer.maxIterations` controls MAIN attempts; when omitted it falls back to `AI_TASKS_OPTIMIZER_MAX_ITERATIONS` or the package default. Per-invocation `args.functionId` always wins over catalog metadata and code defaults.
|
|
134
137
|
|
|
135
|
-
`execution-strategy` catalog items are structured metadata, not an open behavior plug-in. Safe runtime consumption is currently limited to fields explicitly marked in `safeRuntimeFields`, such as
|
|
138
|
+
`execution-strategy` catalog items are structured metadata, not an open behavior plug-in. Safe runtime consumption is currently limited to fields explicitly marked in `safeRuntimeFields`, such as `defaultSidekickAction` / `runtimeKind: "xynthesis-action"`, and only when the catalog row matches the already-validated strategy key, phase, and request shape.
|
|
136
139
|
|
|
137
140
|
Legacy monolith id **`ai-task-strategies`** is no longer written by this repo; use the catalogs above.
|
|
138
141
|
|
|
@@ -148,7 +151,7 @@ That provisions **`apps/ai-tasks`**, all six native catalogs, bindings, descript
|
|
|
148
151
|
|
|
149
152
|
### Reading catalogs and items (from `@exellix/ai-tasks`)
|
|
150
153
|
|
|
151
|
-
Construct a **`Catalox`** instance (for example `createCataloxFromEnv()` from `@exellix/ai-tasks`, which re-exports it from `@
|
|
154
|
+
Construct a **`Catalox`** instance (for example `createCataloxFromEnv()` from `@exellix/ai-tasks`, which re-exports it from `@exellix/ai-skills`), then use any of:
|
|
152
155
|
|
|
153
156
|
| Export | Purpose |
|
|
154
157
|
|--------|---------|
|
|
@@ -180,7 +183,7 @@ const { listOutcome, items } = await catalox.listCatalogItems(
|
|
|
180
183
|
|
|
181
184
|
### Skill templates (`ai-skills` app)
|
|
182
185
|
|
|
183
|
-
Skill definitions and template bodies for execution live under Catalox **`appId: ai-skills`** (owned by **`@
|
|
186
|
+
Skill definitions and template bodies for execution live under Catalox **`appId: ai-skills`** (owned by **`@exellix/ai-skills`**). This package re-exports the Catalox skill surface from **`@exellix/ai-skills`** via the same entrypoint (e.g. `listAiSkillsCatalogItems`, `fetchSkillTemplatesFromCatalox`, `createCataloxFromEnv`, `initFirebaseAdminFromEnv`, …) so you can **view and edit skill catalog items** while depending only on **`@exellix/ai-tasks`**.
|
|
184
187
|
|
|
185
188
|
---
|
|
186
189
|
|
|
@@ -303,11 +306,11 @@ const res = await runTask({
|
|
|
303
306
|
### Class-Based API (custom `ai-skills` client)
|
|
304
307
|
|
|
305
308
|
```typescript
|
|
306
|
-
import {
|
|
307
|
-
|
|
309
|
+
import { ExellixSkillsClient, WorexClientTasks, ExecutionType } from "@exellix/ai-tasks";
|
|
310
|
+
// `WorexClientSkills` is a type alias for `ExellixSkillsClient`
|
|
308
311
|
|
|
309
312
|
// skills client is the shared execution + helper layer
|
|
310
|
-
const skills = new
|
|
313
|
+
const skills = new ExellixSkillsClient({
|
|
311
314
|
// ... your existing ai-skills config (gateway/provider/router)
|
|
312
315
|
});
|
|
313
316
|
|
|
@@ -325,8 +328,8 @@ const res = await tasks.runTask({
|
|
|
325
328
|
// optional
|
|
326
329
|
variables: { orgName: "Acme" },
|
|
327
330
|
modelConfig: {
|
|
328
|
-
preActionModel: "cheap",
|
|
329
|
-
postActionModel: "cheap",
|
|
331
|
+
preActionModel: "cheap/default",
|
|
332
|
+
postActionModel: "cheap/default",
|
|
330
333
|
skillModel: "openai/gpt-5",
|
|
331
334
|
temperature: 0.7,
|
|
332
335
|
topP: 0.9,
|
|
@@ -370,7 +373,7 @@ Given a request, `runTask()` performs:
|
|
|
370
373
|
4. **Local task dispatch**: If `getLocalTask(skillKey)` returns a handler, call `{ input, ctx }`. **`ctx`** includes **`skillKey`**, **`jobMemory`**, **`taskMemory`**, **`executionMemory`**, **`variables`**, **`xynthesized`**, **`smartInput`**, and graph/correlation ids. Returns **`RunTaskResponse`**; **skips LLM MAIN path below**.
|
|
371
374
|
5. **LLM path** (pipeline or default MAIN): If **`executionPipeline`** is non-empty, run PRE (**`synthesized-context`** only), then MAIN, then optional POST (**`audit`** / **`polish`**). PRE synthesis may write **`request.xynthesized`** and **`response.xynthesizedPatch`** ([details](#execution-pipeline-and-synthesized-context-pre-step)). Otherwise behave as a single MAIN **`direct`** step.
|
|
372
375
|
6. **MAIN execution** (inside pipeline MAIN or default path): Build **`memoryBundle = { jobMemory, taskMemory, executionMemory }`**, **`enrichMemoriesWithScoping(skillKey, 'task', bundle)`**, generate **`context`** when **`includeContextInPrompt`** (or pipeline synthesis overrides context). Optionally run **`aiScoping`** into **`input.aiScoped`**. Build **`enrichedInput`**: memories, **`context`**, **`input`**, top-level **`xynthesized`** and **`smartInput`**, and **`variables` = passthroughJobTemplateVariables(request.variables)` (job bucket only; see [Gateway template rendering](#gateway-template-rendering-v4)).
|
|
373
|
-
7. **Execute MAIN**: Apply **`executionStrategies`** (planner/optimizer
|
|
376
|
+
7. **Execute MAIN**: Apply **`executionStrategies`** (planner/optimizer xynthesis sidekick actions when non-empty) and call **`runSkill`** / gateway via the configured executor.
|
|
374
377
|
8. **Finalize response**: Identity / task metadata as today; attach **`xynthesizedPatch`** when PRE synthesis produced **`job`**, **`task`**, or **`execution`** writes; when the executor returns **`SmartInputRenderResult`**, lift it to **`response.smartInputRenderResult`** and **`metadata.smartInputRenderResult`** (also accepts shaped **`metadata.smartInput`** from downstream).
|
|
375
378
|
9. **Not-found**: Executor may invoke registry diagnostics when content is missing.
|
|
376
379
|
|
|
@@ -1057,8 +1060,8 @@ Orchestrators send **model** + **sampling** + **`reasoningEffort`** + (for xynth
|
|
|
1057
1060
|
|
|
1058
1061
|
| Phase | Package | Caller sends | Package owns |
|
|
1059
1062
|
|-------|---------|--------------|--------------|
|
|
1060
|
-
| **MAIN** | `@exellix/ai-skills` ≥6 | `modelConfig` → `{ model, temperature, topP, reasoningEffort, … }` | Optimixer + Catalox skill catalog (`maxTokens` on `ModelConfig` is rejected); **one automatic re-invoke** when output hits token limit and Optimixer returns `retryPrediction` |
|
|
1061
|
-
| **PRE / POST / scoping / utility** | `@exellix/xynthesis` ≥4.
|
|
1063
|
+
| **MAIN** | `@exellix/ai-skills` ≥6.3 | `modelConfig` → `{ model, temperature, topP, reasoningEffort, … }` | Optimixer + Catalox skill catalog (`maxTokens` on `ModelConfig` is rejected); gateway **`@x12i/ai-gateway` ≥10.0.6** supplies wire `maxTokens` and authoritative **`costUsd`** / **`costStatus`** on invoke metadata; **one automatic re-invoke** when output hits token limit and Optimixer returns `retryPrediction` |
|
|
1064
|
+
| **PRE / POST / scoping / utility** | `@exellix/xynthesis` ≥4.4 | `outputExpectation` (required on every hop), optional `reasoningEffort`, `temperature`, `topP` | `resolveEffectiveMaxTokens` inside `executeXynthesisAction` (default **`@x12i/funcx`** invoker); authoritative billing from funcx/gateway engines — xynthesis is pass-through only; **same one-shot max-token retry** via Optimixer `retryPrediction` |
|
|
1062
1065
|
|
|
1063
1066
|
**Xynthesis `outputExpectation`** is sizing/density **intent** for Optimixer — not a literal token count. ai-tasks resolves a per-stage default when the caller omits it (`resolveOutputExpectation` / `resolveLlmOutputExpectationForXynthesis`).
|
|
1064
1067
|
|
|
@@ -1066,6 +1069,8 @@ Orchestrators send **model** + **sampling** + **`reasoningEffort`** + (for xynth
|
|
|
1066
1069
|
|
|
1067
1070
|
**Trace:** use `usage.maxTokensRequested` / `invokeSummary` diagnostics after invoke — not pre-set caps on the request.
|
|
1068
1071
|
|
|
1072
|
+
**Billing (gateway 10.x):** MAIN cost is authoritative from `@x12i/ai-gateway` invoke **`metadata`** only — ai-tasks and ai-skills do not re-price. When `costStatus === 'unpriced'`, tokens are recorded but there is no authoritative USD total (do not price locally). See **[UPGRADING_AI_GATEWAY_10.md](../ai-skills/docs/UPGRADING_AI_GATEWAY_10.md)** §1.
|
|
1073
|
+
|
|
1069
1074
|
---
|
|
1070
1075
|
|
|
1071
1076
|
## Model profile aliases (`@x12i/ai-profiles`)
|
|
@@ -1079,15 +1084,18 @@ Orchestrators send **model** + **sampling** + **`reasoningEffort`** + (for xynth
|
|
|
1079
1084
|
|
|
1080
1085
|
**Accepted alias shapes** (`@x12i/ai-profiles` v2.1+):
|
|
1081
1086
|
|
|
1082
|
-
- **Profile/choice keys:** `cheap/default`, `pro/default`, `cyber/default`, …
|
|
1083
|
-
- **
|
|
1084
|
-
- **Explicit `@` form:** `cheap@default`, `pro@fast`, …
|
|
1087
|
+
- **Profile/choice keys (required on stored `modelConfig` and xynthesis `llmCall.model`):** `cheap/default`, `pro/default`, `cyber/default`, …
|
|
1088
|
+
- **Concrete provider wire ids on MAIN only:** `openrouter/...`, `anthropic/claude-sonnet-4`, bare vendor SKUs like `gpt-4o-mini` — accepted on **`skillModel`** / MAIN `llmCall.model` only
|
|
1085
1089
|
|
|
1086
|
-
**
|
|
1090
|
+
**Rejected on stored config:**
|
|
1091
|
+
|
|
1092
|
+
- Bare profile names (`cheap`, `pro`) — use `cheap/default`, `pro/default`
|
|
1093
|
+
- `profile@choice` (`cheap@default`) — use `profile/choice` slash form
|
|
1094
|
+
- Legacy graph tiers (`weak`, `strong`), deprecated `xynthesisModel`, root `modelConfig.model`
|
|
1087
1095
|
|
|
1088
|
-
**
|
|
1096
|
+
**List available keys:** `listAiTasksProfileChoices()` / `listAiTasksProfileChoiceKeys()` (re-exported from `@x12i/ai-profiles` via `@exellix/ai-tasks`). Same registry as xynthesis (`listAIProfiles` / `listAIProfileChoices` on `@exellix/xynthesis`).
|
|
1089
1097
|
|
|
1090
|
-
**Example (
|
|
1098
|
+
**Example (canonical triplet — resolved inside `runTask`):**
|
|
1091
1099
|
|
|
1092
1100
|
```typescript
|
|
1093
1101
|
await runTask({
|
|
@@ -1098,24 +1106,46 @@ await runTask({
|
|
|
1098
1106
|
executionStrategies: [],
|
|
1099
1107
|
input: { topic: "Q1 risks" },
|
|
1100
1108
|
modelConfig: {
|
|
1101
|
-
preActionModel: "cheap", // PRE synthesis
|
|
1102
|
-
postActionModel: "cheap", // POST audit/polish
|
|
1103
|
-
skillModel: "pro/default",
|
|
1109
|
+
preActionModel: "cheap/default", // PRE synthesis (xynthesis)
|
|
1110
|
+
postActionModel: "cheap/default", // POST audit/polish (xynthesis)
|
|
1111
|
+
skillModel: "pro/default", // MAIN skill (ai-skills → ai-gateway)
|
|
1104
1112
|
},
|
|
1105
1113
|
});
|
|
1106
1114
|
```
|
|
1107
1115
|
|
|
1108
|
-
Concrete ids
|
|
1116
|
+
Concrete ids pass through unchanged on **`skillModel`** / MAIN `llmCall.model`. **`preActionModel`** / **`postActionModel`** and xynthesis **`llmCall.model`** must stay **profile/choice aliases** — concrete ids are rejected with **`XYNTHESIS_CONCRETE_MODEL_REJECTED`**.
|
|
1109
1117
|
|
|
1110
1118
|
**Client impact:**
|
|
1111
1119
|
|
|
1112
|
-
- **`skillModel` / MAIN `llmCall.model`:**
|
|
1113
|
-
- **`preActionModel` / `postActionModel`:**
|
|
1114
|
-
- **
|
|
1115
|
-
- **
|
|
1116
|
-
|
|
1120
|
+
- **`skillModel` / MAIN `llmCall.model`:** profile/choice alias or concrete provider wire id.
|
|
1121
|
+
- **`preActionModel` / `postActionModel`:** profile/choice only — graph-engine must not pre-resolve xynthesis slots to concrete ids.
|
|
1122
|
+
- **Validation:** `validateRunTaskConfig` / `resolveRunTaskModelReferences` enforce slot shapes before invoke; unknown aliases fail at resolution with **`XYNTHESIS_ALIAS_RESOLUTION_FAILED`**.
|
|
1123
|
+
- **Helpers:** `resolveModelReference`, `resolveModelReferenceForXynthesis`, `resolveRunTaskModelReferences`, `resolveInvocationPlan`, `isRunTaskModelResolutionError`, `isResolvableModelAlias` (true only for known **`profile/choice`** keys).
|
|
1124
|
+
|
|
1125
|
+
### Pre-run invocation plan (`resolveInvocationPlan`)
|
|
1117
1126
|
|
|
1118
|
-
|
|
1127
|
+
Side-effect-free preview of which **engine + wire model** each phase will use (same routing path as execute):
|
|
1128
|
+
|
|
1129
|
+
```typescript
|
|
1130
|
+
import { resolveInvocationPlan } from "@exellix/ai-tasks";
|
|
1131
|
+
|
|
1132
|
+
const plan = await resolveInvocationPlan({
|
|
1133
|
+
profiles: {
|
|
1134
|
+
preActionModel: "cheap/default",
|
|
1135
|
+
skillModel: "pro/default",
|
|
1136
|
+
postActionModel: "cheap/default",
|
|
1137
|
+
},
|
|
1138
|
+
policy: {
|
|
1139
|
+
preferOpenRouter: true, // default: read from env when omitted
|
|
1140
|
+
openrouterApiKeyPresent: true, // fallback to vendor-direct when false
|
|
1141
|
+
},
|
|
1142
|
+
});
|
|
1143
|
+
// plan.phases[] → { phase: "preAction"|"skill"|"postAction", routing, modelId, engineLabel, ... }
|
|
1144
|
+
```
|
|
1145
|
+
|
|
1146
|
+
**OpenRouter routing (`preferOpenRouter`):** when `true` and an OpenRouter API key is present, MAIN (ai-gateway) and PRE/POST (funcx) resolve to different wire shapes — skill phases use `openrouter/...` gateway ids; xynthesis phases use Funcx API slugs. Helpers: `resolvePreferOpenRouterPolicy`, `readPreferOpenRouterFromEnv`, `detectOpenRouterApiKeyPresent`, `resolveProfileInvocationRouting`. See **`@exellix/ai-skills`** [`PREFER_OPENROUTER_ROUTING.md`](../ai-skills/docs/PREFER_OPENROUTER_ROUTING.md).
|
|
1147
|
+
|
|
1148
|
+
Resolution uses the ai-profiles registry (`auto`: remote refresh with bundled fallback). See [`MODEL-CONFIGURATION.md`](MODEL-CONFIGURATION.md) and [`BREAKING-CHANGES.md`](BREAKING-CHANGES.md) (8.4+ triplet contract).
|
|
1119
1149
|
|
|
1120
1150
|
---
|
|
1121
1151
|
|
|
@@ -1174,7 +1204,7 @@ type LlmCallConfig = {
|
|
|
1174
1204
|
|----------------|--------|
|
|
1175
1205
|
| `POST_STEP_MODEL` | Default model for any POST step that didn't get a specific value |
|
|
1176
1206
|
| `POST_STEP_TIMEOUT_MS` | Default timeout |
|
|
1177
|
-
| `POST_STEP_MAX_TOKENS_CAP` |
|
|
1207
|
+
| `POST_STEP_MAX_TOKENS_CAP` | **Deprecated** — rejected on `llmCall`; Optimixer owns caps |
|
|
1178
1208
|
| `POST_STEP_TEMPERATURE` | Default temperature |
|
|
1179
1209
|
| `POST_STEP_TOP_P` | Default Top-P |
|
|
1180
1210
|
| `POST_STEP_MAX_OUTPUT_LENGTH` | Default char truncation |
|
|
@@ -1215,9 +1245,9 @@ type LlmCallObservation =
|
|
|
1215
1245
|
};
|
|
1216
1246
|
```
|
|
1217
1247
|
|
|
1218
|
-
**`InvokeAttemptSummary`** (xynthesis ≥
|
|
1248
|
+
**`InvokeAttemptSummary`** (xynthesis ≥ 4.4) carries `{ jobId, taskId, modelRequested, modelResolved, maxTokensFromCaller, maxTokensEffective, modelUsedFromProvider, usage, routing, costUsd, costStatus, traceKind, executionMetadata }`. USD cost is **authoritative from `@x12i/funcx`** — xynthesis does not calculate pricing locally.
|
|
1219
1249
|
|
|
1220
|
-
**`RunSkillDiagnostics`** (ai-skills ≥
|
|
1250
|
+
**`RunSkillDiagnostics`** (ai-skills ≥ 6.3) carries `{ trace: { step, timing, routing, usage, costUsd, costStatus, modelUsed, attempts[], rawProviderPayload?, invokeRequest? }, ... }`. USD cost is **authoritative from `@x12i/ai-gateway` ≥10.0.6** — ai-skills normalizes gateway `metadata` only (`mapGatewayInvokeToTrace`, `traceToDiagnostics` re-exported from `@exellix/ai-tasks`). Gateway `costStatus: "priced"` is represented as `costUsd`; `"unpriced"` surfaces as `costStatus: "unpriced"`. For non-trace MAIN failures, read **`(error as Error & { metadata?: GatewayInvokeRejectionMetadata }).metadata`** (re-exported from `@exellix/ai-tasks`) — do not scrape error strings.
|
|
1221
1251
|
|
|
1222
1252
|
### Typed errors (instanceof-friendly)
|
|
1223
1253
|
|
|
@@ -1244,6 +1274,9 @@ import {
|
|
|
1244
1274
|
type RunSkillDiagnostics,
|
|
1245
1275
|
resolveOutputExpectation,
|
|
1246
1276
|
ACTION_OUTPUT_DEFAULTS,
|
|
1277
|
+
mapGatewayInvokeToTrace,
|
|
1278
|
+
traceToDiagnostics,
|
|
1279
|
+
buildInvokeAttemptSummary,
|
|
1247
1280
|
getModelCapabilities,
|
|
1248
1281
|
} from "@exellix/ai-tasks";
|
|
1249
1282
|
```
|
|
@@ -1274,7 +1307,7 @@ const result = await runTask({
|
|
|
1274
1307
|
input: { assetId: "a-123" },
|
|
1275
1308
|
executionMode: "trace",
|
|
1276
1309
|
llmCall,
|
|
1277
|
-
aiScopingOptions: { llmCall: { model: "cheap", outputExpectation: { size: { kind: "absolute", maxWords: 200 }, density: "concise" } } },
|
|
1310
|
+
aiScopingOptions: { llmCall: { model: "cheap/default", outputExpectation: { size: { kind: "absolute", maxWords: 200 }, density: "concise" } } },
|
|
1278
1311
|
// executionPipeline: [{ phase: "pre", type: "synthesized-context", config: { llmCall } }, { phase: "main", type: "direct" }],
|
|
1279
1312
|
});
|
|
1280
1313
|
|
|
@@ -1294,7 +1327,7 @@ console.log("polish calls:", m.postSteps?.polish?.llmCalls?.length ?? 0);
|
|
|
1294
1327
|
|
|
1295
1328
|
`@exellix/ai-tasks` supports optional graph execution context fields that enable smarter activity tracking and identity for nodes executing within graph workflows. When executing tasks in a graph (e.g., via `worex-graphs`), you can provide additional context fields to improve activity tracking and debugging.
|
|
1296
1329
|
|
|
1297
|
-
The client automatically passes these fields through to `@
|
|
1330
|
+
The client automatically passes these fields through to `@exellix/ai-skills`, which then passes them to `@x12i/ai-gateway`. The gateway maps them to the activity identity structure according to `@x12i/activix-tracking` v3.5.0+ mapping rules.
|
|
1298
1331
|
|
|
1299
1332
|
### Optional Fields
|
|
1300
1333
|
|
|
@@ -1409,7 +1442,7 @@ const result = await tasks.runTask({
|
|
|
1409
1442
|
|
|
1410
1443
|
### Field Mapping
|
|
1411
1444
|
|
|
1412
|
-
The client automatically passes graph/node fields through `@
|
|
1445
|
+
The client automatically passes graph/node fields through `@exellix/ai-skills` to the underlying `@x12i/ai-gateway`, which maps them to the activity identity structure. The gateway uses the following priority rules:
|
|
1413
1446
|
|
|
1414
1447
|
#### Graph ID Mapping
|
|
1415
1448
|
|
|
@@ -1440,7 +1473,7 @@ This enables:
|
|
|
1440
1473
|
|
|
1441
1474
|
### Complete Field Mapping Guide
|
|
1442
1475
|
|
|
1443
|
-
| @exellix/ai-tasks Field | @
|
|
1476
|
+
| @exellix/ai-tasks Field | @exellix/ai-skills Field | @x12i/ai-gateway Field | Identity Field | Mapping Priority |
|
|
1444
1477
|
|-------------------------|--------------------------|----------------------------|----------------|------------------|
|
|
1445
1478
|
| `masterSkillId` | `masterSkillId` | `masterSkillId` (AIRequest) | `identity.graphId` | Priority 1 (primary) |
|
|
1446
1479
|
| `graphId` | `graphId` | `graphId` | `identity.graphId` | Priority 2 (fallback) |
|
|
@@ -1770,8 +1803,8 @@ interface RunTaskRequest {
|
|
|
1770
1803
|
|
|
1771
1804
|
### Related Documentation
|
|
1772
1805
|
|
|
1773
|
-
- [
|
|
1774
|
-
- [@
|
|
1806
|
+
- [@exellix/ai-skills — UPGRADING_AI_GATEWAY_10.md](../ai-skills/docs/UPGRADING_AI_GATEWAY_10.md) — gateway 10.x migration (billing, required fields, Activix persistence)
|
|
1807
|
+
- [@exellix/ai-skills Graph Execution Support](https://github.com/exellix/ai-skills#graph-execution-support) - Skills-level documentation
|
|
1775
1808
|
- [@x12i/ai-gateway Graph Execution Support](https://github.com/athenices/ai-gateway#graph-execution-support) - Gateway-level documentation
|
|
1776
1809
|
- [@x12i/activix-tracking](https://github.com/athenices/ai-activities-tracking) - Activity tracking specification
|
|
1777
1810
|
|
|
@@ -1846,7 +1879,7 @@ Builder class for constructing task requests with a fluent API.
|
|
|
1846
1879
|
|
|
1847
1880
|
- `withSkillKey(skillKey: string): this` - Set the skill key
|
|
1848
1881
|
- `withInput(input: Record<string, any> | string): this` - Set input data
|
|
1849
|
-
- `withExecutionStrategies(invocations: ExecutionStrategyInvocation[]): this` — MAIN
|
|
1882
|
+
- `withExecutionStrategies(invocations: ExecutionStrategyInvocation[]): this` — MAIN strategy invocations (**required** on the built request; defaults to **`[]`** in **`build()`** when unset)
|
|
1850
1883
|
- `withExecutionPipeline(steps: ExecutionStep[]): this` - Set execution pipeline (pre/main/post steps)
|
|
1851
1884
|
- `withSynthesizedContextPreStep(modelOrConfig?: string | SynthesisConfig): this` - Add synthesized-context PRE step and set `includeContextInPrompt: true`. Pass a **`SynthesisConfig`** object to set **`contextSourcePolicy`**, **`webEvidence`**, **`memoryPaths`**, etc.
|
|
1852
1885
|
- `withAuditPostStep(config: AuditConfig): this` - Add audit POST step (quality-gate loop)
|
|
@@ -1887,8 +1920,8 @@ const request = new TaskRequestBuilder()
|
|
|
1887
1920
|
.withAiSkillsCorrelation("my-agent", "my-job-type", "my-task-type")
|
|
1888
1921
|
.withExecutionStrategies([]) // [] = plain MAIN; omit only if you rely on build() defaulting strategies to []
|
|
1889
1922
|
.withModelConfig({
|
|
1890
|
-
preActionModel: "cheap",
|
|
1891
|
-
postActionModel: "cheap",
|
|
1923
|
+
preActionModel: "cheap/default",
|
|
1924
|
+
postActionModel: "cheap/default",
|
|
1892
1925
|
skillModel: "gpt-5",
|
|
1893
1926
|
temperature: 0.7,
|
|
1894
1927
|
})
|
|
@@ -1913,7 +1946,7 @@ interface RunTaskRequest {
|
|
|
1913
1946
|
agentId: string; // Required — @exellix/ai-skills correlation
|
|
1914
1947
|
jobTypeId: string; // Required — catalog / telemetry job classification
|
|
1915
1948
|
taskTypeId: string; // Required — catalog / telemetry task classification
|
|
1916
|
-
/** Required: MAIN
|
|
1949
|
+
/** Required: MAIN strategy invocations; use [] for plain gateway MAIN (see BREAKING-CHANGES / RUNTASK_REQUEST). */
|
|
1917
1950
|
executionStrategies: ExecutionStrategyInvocation[];
|
|
1918
1951
|
/** Optional guarded metadata rows from catalogId `execution-strategy`; code validation remains authoritative. */
|
|
1919
1952
|
executionStrategyCatalogItems?: TaskStrategyItemData[];
|
|
@@ -2130,8 +2163,8 @@ interface RunTaskModelConfig {
|
|
|
2130
2163
|
**Example:**
|
|
2131
2164
|
```typescript
|
|
2132
2165
|
const modelConfig: RunTaskModelConfig = {
|
|
2133
|
-
preActionModel: "cheap",
|
|
2134
|
-
postActionModel: "cheap",
|
|
2166
|
+
preActionModel: "cheap/default",
|
|
2167
|
+
postActionModel: "cheap/default",
|
|
2135
2168
|
skillModel: "cyber",
|
|
2136
2169
|
temperature: 0.7,
|
|
2137
2170
|
topP: 0.9,
|
|
@@ -2146,7 +2179,7 @@ const result = await runTask({
|
|
|
2146
2179
|
});
|
|
2147
2180
|
```
|
|
2148
2181
|
|
|
2149
|
-
**Note:** Root `RunTaskRequest.modelConfig` uses canonical slots (`RunTaskModelConfig`: `preActionModel`, `skillModel`, `postActionModel`). Profile
|
|
2182
|
+
**Note:** Root `RunTaskRequest.modelConfig` uses canonical slots (`RunTaskModelConfig`: `preActionModel`, `skillModel`, `postActionModel`). Profile/choice keys are validated at `runTask` entry and resolved at each xynthesis / ai-skills call boundary via `@x12i/ai-profiles` v2. See [Model profile aliases](#model-profile-aliases-x12iai-profiles) and [`MODEL-CONFIGURATION.md`](MODEL-CONFIGURATION.md).
|
|
2150
2183
|
|
|
2151
2184
|
### `JobHistory`, `TaskHistory`, and `ExecutionHistory`
|
|
2152
2185
|
|
|
@@ -2255,7 +2288,7 @@ For a concise breakdown of what ai-tasks uses vs downstream, see [documenations/
|
|
|
2255
2288
|
### Basic Usage
|
|
2256
2289
|
|
|
2257
2290
|
```typescript
|
|
2258
|
-
import { WorexClientSkills } from "@
|
|
2291
|
+
import { WorexClientSkills } from "@exellix/ai-skills";
|
|
2259
2292
|
import { WorexClientTasks, ExecutionType } from "@exellix/ai-tasks";
|
|
2260
2293
|
|
|
2261
2294
|
const skills = new WorexClientSkills();
|
|
@@ -2281,7 +2314,7 @@ console.log(result.flexMd.payloads);
|
|
|
2281
2314
|
### With Memory Management
|
|
2282
2315
|
|
|
2283
2316
|
```typescript
|
|
2284
|
-
import { WorexClientSkills } from "@
|
|
2317
|
+
import { WorexClientSkills } from "@exellix/ai-skills";
|
|
2285
2318
|
import { WorexClientTasks, ExecutionType } from "@exellix/ai-tasks";
|
|
2286
2319
|
import type { JobHistory, TaskHistory, ExecutionHistory } from "@exellix/ai-tasks";
|
|
2287
2320
|
|
|
@@ -2317,7 +2350,7 @@ const result = await tasks.runTask({
|
|
|
2317
2350
|
### With Model Configuration
|
|
2318
2351
|
|
|
2319
2352
|
```typescript
|
|
2320
|
-
import { WorexClientSkills } from "@
|
|
2353
|
+
import { WorexClientSkills } from "@exellix/ai-skills";
|
|
2321
2354
|
import { WorexClientTasks, ExecutionType } from "@exellix/ai-tasks";
|
|
2322
2355
|
|
|
2323
2356
|
const skills = new WorexClientSkills();
|
|
@@ -2334,8 +2367,8 @@ const result = await tasks.runTask({
|
|
|
2334
2367
|
executionType: ExecutionType.DIRECT,
|
|
2335
2368
|
input: { data: "analyze this" },
|
|
2336
2369
|
modelConfig: {
|
|
2337
|
-
preActionModel: "cheap",
|
|
2338
|
-
postActionModel: "cheap",
|
|
2370
|
+
preActionModel: "cheap/default",
|
|
2371
|
+
postActionModel: "cheap/default",
|
|
2339
2372
|
skillModel: "gpt-5",
|
|
2340
2373
|
temperature: 0.7,
|
|
2341
2374
|
topP: 0.9,
|
|
@@ -2351,8 +2384,8 @@ const request = new TaskRequestBuilder()
|
|
|
2351
2384
|
.withAiSkillsCorrelation("agent-1", "analysis-job", "analysis-task")
|
|
2352
2385
|
.withExecutionStrategies([])
|
|
2353
2386
|
.withModelConfig({
|
|
2354
|
-
preActionModel: "cheap",
|
|
2355
|
-
postActionModel: "cheap",
|
|
2387
|
+
preActionModel: "cheap/default",
|
|
2388
|
+
postActionModel: "cheap/default",
|
|
2356
2389
|
skillModel: "gpt-5",
|
|
2357
2390
|
temperature: 0.5,
|
|
2358
2391
|
})
|
|
@@ -2364,7 +2397,7 @@ const result2 = await tasks.runTask(request);
|
|
|
2364
2397
|
### With Graph Execution Context
|
|
2365
2398
|
|
|
2366
2399
|
```typescript
|
|
2367
|
-
import { WorexClientSkills } from "@
|
|
2400
|
+
import { WorexClientSkills } from "@exellix/ai-skills";
|
|
2368
2401
|
import { WorexClientTasks, ExecutionType } from "@exellix/ai-tasks";
|
|
2369
2402
|
|
|
2370
2403
|
const skills = new WorexClientSkills();
|
|
@@ -2473,7 +2506,7 @@ Crashed or hung tasks leave records stuck in `started`. Call `ax.markStaleRecord
|
|
|
2473
2506
|
## Development Notes
|
|
2474
2507
|
|
|
2475
2508
|
- This is a **private package**; we optimize for reuse and speed.
|
|
2476
|
-
- `@
|
|
2509
|
+
- `@exellix/ai-skills` is treated as the shared helper + execution layer.
|
|
2477
2510
|
- Naming leakage is explicitly acceptable (private monorepo + private packages).
|
|
2478
2511
|
- Task-level enrichment always uses `level: 'task'` (not `'skill'`).
|
|
2479
2512
|
- The executor must be a "no-enrichment execute primitive" to avoid double-enrichment.
|
|
@@ -2556,13 +2589,17 @@ ISC
|
|
|
2556
2589
|
|
|
2557
2590
|
## Related Packages
|
|
2558
2591
|
|
|
2559
|
-
- [`@
|
|
2560
|
-
- [`@
|
|
2561
|
-
- [`@x12i/
|
|
2592
|
+
- [`@exellix/ai-skills`](https://github.com/exellix/ai-skills) — MAIN skill execution (`runSkill`, Catalox catalog, gateway invoke; **≥ 6.3.7** / gateway **≥ 10.0.6**)
|
|
2593
|
+
- [`@exellix/xynthesis`](https://github.com/exellix/xynthesis) — PRE/POST LLM hops (`executeXynthesisAction`, sidekick actions)
|
|
2594
|
+
- [`@x12i/ai-gateway`](https://github.com/athenices/ai-gateway) — LLM gateway for MAIN skill (transitive via ai-skills ≥6.3.7, **≥ 10.0.6**)
|
|
2595
|
+
- [`@x12i/execution-memory-manager`](https://github.com/athenices/execution-memory-manager) — Memory management utilities
|
|
2562
2596
|
|
|
2563
2597
|
## Related Documentation
|
|
2564
2598
|
|
|
2565
|
-
- [@
|
|
2599
|
+
- [@exellix/ai-skills — UPGRADING_AI_GATEWAY_10.md](../ai-skills/docs/UPGRADING_AI_GATEWAY_10.md) — **gateway 10.x migration** (billing ownership, required `model` + `maxTokens`, removed defaults, Activix persistence, `error.metadata`)
|
|
2600
|
+
- [@exellix/ai-skills — MODEL_INVOKE_CONTRACT.md](../ai-skills/docs/MODEL_INVOKE_CONTRACT.md) — MAIN wire model, Optimixer caps, gateway billing ownership
|
|
2601
|
+
- [@exellix/ai-skills — AI_GATEWAY_INVOKE_EXECUTION_METADATA.md](../ai-skills/docs/AI_GATEWAY_INVOKE_EXECUTION_METADATA.md) — gateway invoke metadata (`costUsd`, rejection `metadata`, routing)
|
|
2602
|
+
- [@exellix/ai-skills — SKILLS_MANAGER_CLIENT_GUIDE.md](../ai-skills/docs/SKILLS_MANAGER_CLIENT_GUIDE.md) — studio vs runtime boundaries
|
|
2566
2603
|
- [documenations/intermediate-steps.md](./documenations/intermediate-steps.md) - Structured intermediate results for combined/multi-step tasks (`intermediateSteps` response field)
|
|
2567
2604
|
- [HISTORY-OBJECTS.md](./HISTORY-OBJECTS.md) - Comprehensive guide to `JobHistory`, `TaskHistory`, and `ExecutionHistory` objects
|
|
2568
2605
|
- [HISTORY-OBJECTS-DOWNSTREAM.md](./HISTORY-OBJECTS-DOWNSTREAM.md) - How history objects flow downstream through the execution pipeline
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRunTaskModelReferences.d.ts","sourceRoot":"","sources":["../../src/utils/resolveRunTaskModelReferences.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"resolveRunTaskModelReferences.d.ts","sourceRoot":"","sources":["../../src/utils/resolveRunTaskModelReferences.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AA+O7D;;;GAGG;AACH,wBAAsB,6BAA6B,CAAC,OAAO,EAAE,cAAc,GAAG,OAAO,CAAC,cAAc,CAAC,CAyBpG"}
|
|
@@ -1,8 +1,18 @@
|
|
|
1
1
|
import { isRecord } from "../types/model-config.js";
|
|
2
|
-
import { throwRunTaskModelResolutionError, } from "../errors/runTaskModelResolutionError.js";
|
|
2
|
+
import { formatXynthesisConcreteModelRejectedMessage, throwRunTaskModelResolutionError, } from "../errors/runTaskModelResolutionError.js";
|
|
3
3
|
import { requireSkillModelReference, requireXynthesisModelReference, } from "./aiProfileModelFormat.js";
|
|
4
|
+
import { isConcreteModelId } from "./concreteModelId.js";
|
|
4
5
|
import { resolveModelReferenceForXynthesis } from "./resolveAiProfileModel.js";
|
|
5
6
|
function assertXynthesisModelSlot(value, slotPath, ctx) {
|
|
7
|
+
const trimmed = value.trim();
|
|
8
|
+
if (isConcreteModelId(trimmed)) {
|
|
9
|
+
throwRunTaskModelResolutionError({
|
|
10
|
+
code: "XYNTHESIS_CONCRETE_MODEL_REJECTED",
|
|
11
|
+
skillKey: ctx?.skillKey,
|
|
12
|
+
invocationPhase: "model-resolution",
|
|
13
|
+
diagnostics: { slotPath, offendingValue: trimmed },
|
|
14
|
+
}, formatXynthesisConcreteModelRejectedMessage(trimmed, slotPath));
|
|
15
|
+
}
|
|
6
16
|
try {
|
|
7
17
|
requireXynthesisModelReference(value, slotPath);
|
|
8
18
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"resolveRunTaskModelReferences.js","sourceRoot":"","sources":["../../src/utils/resolveRunTaskModelReferences.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,QAAQ,EAAE,MAAM,0BAA0B,CAAC;AACpD,OAAO,
|
|
1
|
+
{"version":3,"file":"resolveRunTaskModelReferences.js","sourceRoot":"","sources":["../../src/utils/resolveRunTaskModelReferences.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@exellix/ai-tasks",
|
|
3
|
-
"version": "8.6.
|
|
3
|
+
"version": "8.6.8",
|
|
4
4
|
"description": "Task orchestration for the Exellix stack: runTask() with local handlers or LLM-backed execution, task-scoped memory/context enrichment, and executor dispatch via @exellix/ai-skills. ERC-compliant.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -23,7 +23,7 @@
|
|
|
23
23
|
"dev": "ts-node src/index.ts",
|
|
24
24
|
"prepublishOnly": "npm run build && node scripts/ensure-nx-content-md-variants.mjs",
|
|
25
25
|
"deps:latest": "npx npm-check-updates -u && npm install",
|
|
26
|
-
"test": "node scripts/ensure-xynthesis-dist.mjs && node scripts/clean-dist-test.mjs && tsc -p tsconfig.test.json && node scripts/copy-test-fixtures.mjs && node --test --test-force-exit --test-concurrency=1 dist-test/test/narrix/*.js dist-test/test/narrix-then-execute/*.js dist-test/test/aiScoping/*.js dist-test/test/intermediateSteps/*.js dist-test/test/post-steps/*.js dist-test/test/planWebScopeQuestions/*.js dist-test/test/synthesis/*.js dist-test/test/utils/*.js dist-test/test/errors/*.js dist-test/test/validation/*.js dist-test/test/compile/*.js dist-test/test/task-strategies/*.js dist-test/test/observability/*.js dist-test/test/run-task/*.js dist-test/test/internal/*.js dist-test/test/execution-strategies/*.js dist-test/test/invocation/*.js dist-test/test/e2e/*.js",
|
|
26
|
+
"test": "node scripts/ensure-xynthesis-dist.mjs && node scripts/ensure-ai-skills-dist.mjs && node scripts/clean-dist-test.mjs && tsc -p tsconfig.test.json && node scripts/copy-test-fixtures.mjs && node --test --test-force-exit --test-concurrency=1 dist-test/test/narrix/*.js dist-test/test/narrix-then-execute/*.js dist-test/test/aiScoping/*.js dist-test/test/intermediateSteps/*.js dist-test/test/post-steps/*.js dist-test/test/planWebScopeQuestions/*.js dist-test/test/synthesis/*.js dist-test/test/utils/*.js dist-test/test/errors/*.js dist-test/test/validation/*.js dist-test/test/compile/*.js dist-test/test/task-strategies/*.js dist-test/test/observability/*.js dist-test/test/run-task/*.js dist-test/test/internal/*.js dist-test/test/execution-strategies/*.js dist-test/test/invocation/*.js dist-test/test/e2e/*.js",
|
|
27
27
|
"test:with-narrix-ingest": "node scripts/run-npm-test-with-narrix-ingest.mjs",
|
|
28
28
|
"test:e2e:intermediateSteps": "node scripts/run-with-env.mjs RUN_INTERMEDIATE_STEPS_E2E=1 npm run test",
|
|
29
29
|
"test:e2e:synthesis": "node scripts/run-synthesis-e2e.mjs",
|
|
@@ -60,7 +60,7 @@
|
|
|
60
60
|
"node": ">=20"
|
|
61
61
|
},
|
|
62
62
|
"dependencies": {
|
|
63
|
-
"@exellix/ai-skills": "^6.3.
|
|
63
|
+
"@exellix/ai-skills": "^6.3.7",
|
|
64
64
|
"@exellix/memorix-narrix-adapter": "^2.0.0",
|
|
65
65
|
"@exellix/narrix-adapter-chat": "^2.0.0",
|
|
66
66
|
"@exellix/narrix-adapter-docs": "^2.0.0",
|
|
@@ -72,7 +72,7 @@
|
|
|
72
72
|
"@exellix/narrix-ingest": "^2.0.0",
|
|
73
73
|
"@exellix/narrix-runner": "^2.0.0",
|
|
74
74
|
"@exellix/narrix-web-scoper": "^2.0.0",
|
|
75
|
-
"@exellix/xynthesis": "^4.4.
|
|
75
|
+
"@exellix/xynthesis": "^4.4.9",
|
|
76
76
|
"@x12i/activix": "^8.5.0",
|
|
77
77
|
"@x12i/catalox": "^5.1.3",
|
|
78
78
|
"@x12i/env": "^4.0.1",
|