@exellix/ai-tasks 9.1.0 → 9.1.1

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.
Files changed (171) hide show
  1. package/CHANGELOG.md +15 -4
  2. package/README.md +2 -2
  3. package/RUNTASK_REQUEST.md +17 -15
  4. package/dist/compile/compileTaskConfiguration.d.ts.map +1 -1
  5. package/dist/compile/compileTaskConfiguration.js +3 -0
  6. package/dist/compile/compileTaskConfiguration.js.map +1 -1
  7. package/dist/core/task-sdk.d.ts.map +1 -1
  8. package/dist/core/task-sdk.js +112 -166
  9. package/dist/core/task-sdk.js.map +1 -1
  10. package/dist/invocation/types.d.ts +1 -1
  11. package/dist/narrix/narrixUnitExecution.js +2 -2
  12. package/dist/narrix/narrixUnitExecution.js.map +1 -1
  13. package/dist/node-execution/buildRequestFromNodePlan.d.ts +4 -0
  14. package/dist/node-execution/buildRequestFromNodePlan.d.ts.map +1 -1
  15. package/dist/node-execution/buildRequestFromNodePlan.js +4 -13
  16. package/dist/node-execution/buildRequestFromNodePlan.js.map +1 -1
  17. package/dist/node-execution/compileProfessionalAnswerRequest.d.ts +2 -0
  18. package/dist/node-execution/compileProfessionalAnswerRequest.d.ts.map +1 -0
  19. package/dist/node-execution/compileProfessionalAnswerRequest.js +4 -0
  20. package/dist/node-execution/compileProfessionalAnswerRequest.js.map +1 -0
  21. package/dist/node-execution/rejectForbiddenWireFields.d.ts +2 -0
  22. package/dist/node-execution/rejectForbiddenWireFields.d.ts.map +1 -1
  23. package/dist/node-execution/rejectForbiddenWireFields.js +42 -7
  24. package/dist/node-execution/rejectForbiddenWireFields.js.map +1 -1
  25. package/dist/post-steps/audit/auditChecklistFuncxEnvelope.d.ts +19 -3
  26. package/dist/post-steps/audit/auditChecklistFuncxEnvelope.d.ts.map +1 -1
  27. package/dist/post-steps/audit/auditChecklistFuncxEnvelope.js +7 -1
  28. package/dist/post-steps/audit/auditChecklistFuncxEnvelope.js.map +1 -1
  29. package/dist/post-steps/audit/loadAuditTemplates.d.ts +2 -55
  30. package/dist/post-steps/audit/loadAuditTemplates.d.ts.map +1 -1
  31. package/dist/post-steps/audit/loadAuditTemplates.js +3 -38
  32. package/dist/post-steps/audit/loadAuditTemplates.js.map +1 -1
  33. package/dist/post-steps/audit/parseAuditFuncxOutput.d.ts +8 -0
  34. package/dist/post-steps/audit/parseAuditFuncxOutput.d.ts.map +1 -0
  35. package/dist/post-steps/audit/parseAuditFuncxOutput.js +62 -0
  36. package/dist/post-steps/audit/parseAuditFuncxOutput.js.map +1 -0
  37. package/dist/post-steps/audit/parseAuditOutput.d.ts +2 -0
  38. package/dist/post-steps/audit/parseAuditOutput.d.ts.map +1 -1
  39. package/dist/post-steps/audit/parseAuditOutput.js +56 -0
  40. package/dist/post-steps/audit/parseAuditOutput.js.map +1 -1
  41. package/dist/post-steps/audit/runAudit.d.ts.map +1 -1
  42. package/dist/post-steps/audit/runAudit.js +53 -113
  43. package/dist/post-steps/audit/runAudit.js.map +1 -1
  44. package/dist/post-steps/audit/runAuditFuncxCall.d.ts +18 -0
  45. package/dist/post-steps/audit/runAuditFuncxCall.d.ts.map +1 -0
  46. package/dist/post-steps/audit/runAuditFuncxCall.js +59 -0
  47. package/dist/post-steps/audit/runAuditFuncxCall.js.map +1 -0
  48. package/dist/synthesis/resolveSourceMaterial.d.ts.map +1 -1
  49. package/dist/synthesis/resolveSourceMaterial.js +14 -0
  50. package/dist/synthesis/resolveSourceMaterial.js.map +1 -1
  51. package/dist/types/task-types.d.ts +4 -3
  52. package/dist/types/task-types.d.ts.map +1 -1
  53. package/dist/utils/bridgeRunSkillGatewayMemory.d.ts.map +1 -1
  54. package/dist/utils/bridgeRunSkillGatewayMemory.js +1 -0
  55. package/dist/utils/bridgeRunSkillGatewayMemory.js.map +1 -1
  56. package/dist/utils/executionMemoryInputRecord.d.ts +12 -0
  57. package/dist/utils/executionMemoryInputRecord.d.ts.map +1 -0
  58. package/dist/utils/executionMemoryInputRecord.js +28 -0
  59. package/dist/utils/executionMemoryInputRecord.js.map +1 -0
  60. package/dist/utils/resolveAiProfileModel.d.ts +1 -1
  61. package/dist/utils/resolveAiProfileModel.d.ts.map +1 -1
  62. package/dist/utils/skillTemplateVariables.d.ts +3 -2
  63. package/dist/utils/skillTemplateVariables.d.ts.map +1 -1
  64. package/dist/utils/skillTemplateVariables.js +3 -2
  65. package/dist/utils/skillTemplateVariables.js.map +1 -1
  66. package/dist/validation/validateProfessionalAnswerContract.d.ts +8 -0
  67. package/dist/validation/validateProfessionalAnswerContract.d.ts.map +1 -0
  68. package/dist/validation/validateProfessionalAnswerContract.js +45 -0
  69. package/dist/validation/validateProfessionalAnswerContract.js.map +1 -0
  70. package/dist/validation/validateRunTaskConfig.d.ts.map +1 -1
  71. package/dist/validation/validateRunTaskConfig.js +2 -0
  72. package/dist/validation/validateRunTaskConfig.js.map +1 -1
  73. package/documenations/record-and-template-variables.md +21 -13
  74. package/documenations/run-task-execution-flow.md +1 -1
  75. package/documenations/upstream-feature-requests/README.md +9 -5
  76. package/documenations/upstream-feature-requests/ai-skills-orchestrator-invoke-contract-5.9.md +1 -1
  77. package/documenations/upstream-feature-requests/funcx-4.9.13-open-items.md +62 -0
  78. package/documenations/upstream-feature-requests/funcx-gap-analysis-cr-fr.md +401 -0
  79. package/documenations/upstream-feature-requests/funcx-pre-post-sidekick-actions.md +1 -0
  80. package/documenations/upstream-feature-requests/graph-engine-runtask-contract-alignment-investigation.md +370 -0
  81. package/documenations/upstream-feature-requests/xynthesis-ai-profiles-2.1-import-break.md +2 -2
  82. package/documenations/upstream-feature-requests/xynthesis-openrouter-wire-model-double-prefix-bug.md +1 -1
  83. package/documenations/upstream-feature-requests/xynthesis-orchestrator-invoke-contract-4.2.md +1 -1
  84. package/package.json +10 -9
  85. package/.docs/DOWNSTREAM_ENV.md +0 -42
  86. package/.docs/FEEDBACK_TO_CLIENT_DOWNSTREAM_FIXES.md +0 -64
  87. package/.docs/INTERMEDIATE_STEPS.md +0 -82
  88. package/.docs/activity-structure.md +0 -31
  89. package/.docs/ai-task-ai-scoping-spec.md +0 -338
  90. package/.docs/ai-tasks-model-profile-aliases-7x.md +0 -96
  91. package/.docs/blockers-and-issues.md +0 -346
  92. package/.docs/building-runTask-sdk.md +0 -659
  93. package/.docs/building-skill-execution-orchestrator.md +0 -968
  94. package/.docs/code-used-before/run-task.txt +0 -39
  95. package/.docs/code-used-before/task-executor.ts.old +0 -57
  96. package/.docs/code-used-before/test-run-task.ts.old +0 -42
  97. package/.docs/code-used-before/types.txt +0 -23
  98. package/.docs/env-ready-policy.md +0 -40
  99. package/.docs/flow-io/flow-README.md +0 -76
  100. package/.docs/flow-io/narrix.md +0 -124
  101. package/.docs/flow-io/web-scoping.md +0 -135
  102. package/.docs/flow-io/xynthesis-post.md +0 -154
  103. package/.docs/flow-io/xynthesis-pre.md +0 -181
  104. package/.docs/gap-analysis.md +0 -201
  105. package/.docs/integration-facts-ai-tasks.md +0 -109
  106. package/.docs/investigation/ai-skills.md +0 -170
  107. package/.docs/investigation/external-packages-assignments.md +0 -66
  108. package/.docs/investigation/integration-summary.md +0 -20
  109. package/.docs/investigation/narrix-catalox.md +0 -29
  110. package/.docs/investigation/workplan-close-graph-engine-gaps.md +0 -101
  111. package/.docs/logging-stack.md +0 -30
  112. package/.docs/memory-narrix-adapter-developer-guide.md +0 -402
  113. package/.docs/memory-narrix-adapter-requirements.md +0 -112
  114. package/.docs/narrix-context-consumption-gap.md +0 -184
  115. package/.docs/narrix-context-downstream-report.md +0 -30
  116. package/.docs/narrix-ingest-and-packs-library-spec.md +0 -240
  117. package/.docs/narrix-record-input-current-design.md +0 -48
  118. package/.docs/pacakge.md +0 -48
  119. package/.docs/possible-components/README.md +0 -11
  120. package/.docs/possible-components/integration/README.md +0 -10
  121. package/.docs/possible-components/integration/gaps-when-merging.md +0 -16
  122. package/.docs/possible-components/integration/platform.md +0 -54
  123. package/.docs/possible-components/integration/reintegrate-into-ai-tasks.md +0 -26
  124. package/.docs/possible-components/integration/roadmap-and-checklists.md +0 -54
  125. package/.docs/possible-components/post-component/README.md +0 -18
  126. package/.docs/possible-components/post-component/builder-guide.md +0 -175
  127. package/.docs/possible-components/post-component/gaps-and-artifacts.md +0 -52
  128. package/.docs/possible-components/post-component/handler-audit.md +0 -47
  129. package/.docs/possible-components/post-component/handler-polish.md +0 -41
  130. package/.docs/possible-components/post-component/unified-protocol.md +0 -59
  131. package/.docs/possible-components/pre-component/README.md +0 -22
  132. package/.docs/possible-components/pre-component/builder-guide.md +0 -127
  133. package/.docs/possible-components/pre-component/gaps-and-artifacts.md +0 -35
  134. package/.docs/possible-components/pre-component/handler-ai-scoping.md +0 -45
  135. package/.docs/possible-components/pre-component/handler-narrix-preprocessor.md +0 -49
  136. package/.docs/possible-components/pre-component/handler-narrix-system2.md +0 -35
  137. package/.docs/possible-components/pre-component/handler-synthesized-context.md +0 -65
  138. package/.docs/possible-components/pre-component/handler-web-scope.md +0 -29
  139. package/.docs/possible-components/pre-component/unified-protocol.md +0 -89
  140. package/.docs/prefer-openrouter-routing-policy.md +0 -114
  141. package/.docs/questions-for-ai-skills.md +0 -123
  142. package/.docs/realtime-narrixing-gap-analysis.md +0 -40
  143. package/.docs/realtime-narrixing.md +0 -433
  144. package/.docs/run-context-object.md +0 -32
  145. package/.docs/session-id-usage.md +0 -26
  146. package/.docs/skill-library-spec.md +0 -249
  147. package/.docs/synthesized-context-strategy-spec.md +0 -906
  148. package/.docs/upstream-issue/2026-03-21_woroces-ai-tasks_ISSUE-006_web-scope-question-from-cni-entity.md +0 -46
  149. package/.docs/web-scopper-embed.md +0 -93
  150. package/.docs/xynthesis-wiring-and-io.md +0 -12
  151. package/documenations/activix-feature-request-identity.md +0 -123
  152. package/documenations/bug-report-xynthesis-and-synthesis-call.md +0 -217
  153. package/documenations/feature-request-ai-skills-raw-template-access.md +0 -82
  154. package/documenations/feature-request-athenix-core-directive.md +0 -145
  155. package/documenations/feature-request-athenix-token-extraction.md +0 -124
  156. package/documenations/funcx-upstream-github-issues-draft.md +0 -153
  157. package/documenations/identity-metadata-contract.md +0 -165
  158. package/documenations/run-task-single-run-checklist.md +0 -109
  159. package/documenations/sessions/2026-06-08-subnets-model-resolution/CR-1-no-concrete-wire-in-graph-plans.md +0 -93
  160. package/documenations/sessions/2026-06-08-subnets-model-resolution/CR-2-skillModel-profile-only-at-storage.md +0 -88
  161. package/documenations/sessions/2026-06-08-subnets-model-resolution/CR-3-reject-concrete-models-in-catalog-rows.md +0 -76
  162. package/documenations/sessions/2026-06-08-subnets-model-resolution/FR-1-suggested-profile-in-catalogs.md +0 -96
  163. package/documenations/sessions/2026-06-08-subnets-model-resolution/FR-2-graph-engine-failure-phase-attribution.md +0 -92
  164. package/documenations/sessions/2026-06-08-subnets-model-resolution/INVESTIGATION-original-bug.md +0 -182
  165. package/documenations/sessions/2026-06-08-subnets-model-resolution/PROBLEM.md +0 -236
  166. package/documenations/sessions/2026-06-08-subnets-model-resolution/README.md +0 -11
  167. package/documenations/sessions/2026-06-08-subnets-model-resolution/funcx-test-resolveModel.cheapDefaultWireSlug.test.ts +0 -117
  168. package/documenations/upstream-feature-requests/ai-tasks-wrap-up-after-upstream.md +0 -129
  169. package/documenations/upstream-feedback-request-shape-clarification.md +0 -101
  170. package/documenations/web-context-precedence.md +0 -33
  171. package/documenations/xynthesis-activix-telemetry.md +0 -28
@@ -1,170 +0,0 @@
1
- since this workspace is @exellix/ai-skills@5.2.5 (the package you pin), I can answer authoritatively from the source. Below, citations point to the published surface so your @exellix/ai-tasks / orchestrator team can rely on them.
2
-
3
- 1. agentId, jobTypeId, taskTypeId — semantics & format
4
- Required: all three are mandatory non-empty (post-trim) strings on every RunSkillRequest. The SDK rejects empty/whitespace and never substitutes a default:
5
-
6
-
7
- validate-mandatory-activix-invoke-fields.ts
8
- Lines 3-20
9
- function assertNonEmptyTrimmed(field: keyof Pick<RunSkillRequest, "agentId" | "jobTypeId" | "taskTypeId">, value: string): void {
10
- const trimmed = value.trim();
11
- if (!trimmed) {
12
- throw new Error(
13
- `[AI-SKILLS] RunSkillRequest.${String(field)} is mandatory for gateway.invoke / Activix: upstream must supply a non-empty string (no package defaults).`
14
- );
15
- }
16
- }
17
- ...
18
- export function validateMandatoryActivixInvokeFields(skillRequest: RunSkillRequest): void {
19
- assertNonEmptyTrimmed("agentId", skillRequest.agentId);
20
- assertNonEmptyTrimmed("jobTypeId", skillRequest.jobTypeId);
21
- assertNonEmptyTrimmed("taskTypeId", skillRequest.taskTypeId);
22
- }
23
- Format: opaque strings. The SDK only .trim()s and forwards verbatim — no shape, charset, or casing rules; no enum.
24
-
25
- Routing / quotas / billing alignment with skillKey: none. They are independent telemetry/correlation labels:
26
-
27
- The gateway’s skill-routing classification on invoke uses actionType: "skill" + actionRef: skillRequest.skillKey, set explicitly in buildSkillGatewayInvokePayload:
28
-
29
- build-gateway-invoke-request.ts
30
- Lines 117-122
31
- agentId,
32
- jobTypeId,
33
- taskTypeId,
34
- actionType: "skill",
35
- actionRef: skillRequest.skillKey,
36
- agentId/jobTypeId/taskTypeId are forwarded as gateway top-level fields and also merged into identity for Activix linkage (top-level wins on conflict):
37
-
38
- build-gateway-invoke-request.ts
39
- Lines 51-64
40
- const agentId = skillRequest.agentId.trim();
41
- const jobTypeId = skillRequest.jobTypeId.trim();
42
- const taskTypeId = skillRequest.taskTypeId.trim();
43
- ...
44
- return {
45
- ...upstreamIdentityObj,
46
- jobId,
47
- taskId,
48
- agentId,
49
- jobTypeId,
50
- taskTypeId,
51
- aiEngineId,
52
- } as unknown as ActivityIdentity & Record<string, unknown>;
53
- So:
54
-
55
- taskTypeId is strictly an opaque telemetry/catalog label — it does not need to equal skillKey, is not consulted for routing, and ai-skills imposes no quota/billing semantics on it. Same for jobTypeId (a recurring-job classifier) and agentId (Activix identity.agentId / gateway identity.instance source).
56
- skillKey is the only identifier used by this SDK for content lookup (Catalox ai-skills catalog) and as gateway actionRef.
57
- You can safely make taskTypeId === skillKey in your pipeline if it helps your dashboards, but it is not required and is not enforced by @exellix/ai-skills.
58
-
59
- 2. RunSkillRequest vs nested authoring metadata — what is canonical
60
- Canonical = the top-level typed fields. There is no metadata envelope on RunSkillRequest.
61
-
62
- The shape is fully enumerated in src/types.ts (RunSkillRequest, lines 256–427) and the flat normalizer is deliberately closed:
63
-
64
-
65
- run-skill-request.ts
66
- Lines 3-11
67
- /**
68
- * Required fields for {@link RunSkillRequest} plus optional copies of every other key.
69
- * Does not accept arbitrary index signatures — avoids silently forwarding unknown props (e.g. obsolete `taskConfig`).
70
- */
71
- export type RunSkillRequestFlat = Pick<...> &
72
- Partial<Omit<RunSkillRequest, ...>>;
73
- Concretely:
74
-
75
- If a host sends a generic metadata: { taskTypeId: "...", agentId: "..." } blob alongside top-level fields, ai-skills ignores the blob entirely when building the gateway payload. There is no merge, no warning, no error — buildSkillGatewayInvokePayload only reads the named fields.
76
- The one runtime envelope that is merged is identity. The shallow-merge rule is: upstream identity is cloned, then top-level jobId/taskId/agentId/jobTypeId/taskTypeId/aiEngineId overwrite anything supplied under identity:
77
-
78
- build-gateway-invoke-request.ts
79
- Lines 42-64
80
- const upstreamIdentityObj: Record<string, any> =
81
- upstreamIdentity && typeof upstreamIdentity === "object" && !Array.isArray(upstreamIdentity)
82
- ? { ...(upstreamIdentity as Record<string, any>) }
83
- : {};
84
- enrichActivixIdentityForGateway(upstreamIdentityObj, { skillId: skillRequest.skillId });
85
- ...
86
- return {
87
- ...upstreamIdentityObj,
88
- jobId, taskId, agentId, jobTypeId, taskTypeId, aiEngineId,
89
- } ...
90
- jobId/taskId may also be read from identity as a fallback when omitted at top-level (with a warn log), per resolveGatewayJobAndTaskIds:
91
-
92
- resolve-gateway-job-task-ids.ts
93
- Lines 26-32
94
- const jobId = trimmedString(params.jobId) || trimmedString(id?.jobId);
95
- const taskId = trimmedString(params.taskId) || trimmedString(id?.taskId);
96
- sessionId is the only field with a cross-field agreement check: top-level sessionId must equal identity.sessionId if both are set (validateSessionIdAgreement).
97
- Recommendation for your runTask layer: put correlation values on the top-level typed fields (and identity if you also need them for downstream packages). Avoid stuffing them into a generic metadata envelope passed to runSkill — they will not survive into the gateway invoke. If you want a stricter contract on your side, prefer runSkillRequestFromFlat(...) because it destructures explicitly and won’t silently forward strays.
98
-
99
- 3. taskKind, outputValidation, autoValidateDecisionOutput on the wire to runSkill
100
- Confirmed orchestrator-only. A repo-wide search returned zero matches for any of those identifiers:
101
-
102
- They are not declared on RunSkillRequest / RunSkillResponse / gateway invoke payload types.
103
- They are not consulted for routing, validation, defaulting, or logging anywhere in @exellix/ai-skills (or in the @x12i/ai-gateway types this package depends on as far as ai-skills uses them).
104
- If they appear on a request object at runtime they are silently dropped (TypeScript structural typing accepts the cast; the executor only reads the typed fields). No warning is emitted.
105
- What this layer does do regarding output:
106
-
107
- FlexMD parsing of the gateway response (response.flexMd or fallback to parseFlexMd) — see SkillExecutor.execute.
108
- Optional outputSchema is exposed on SkillMetadata as a catalog descriptor (src/types.ts:52) but the SDK does not auto-validate against it; that is the caller’s responsibility.
109
- There is no autoValidate* flag, no decision-output special case, and no audit short-circuit (the README explicitly notes “audit is no longer a separate skill type” — src/types.ts:48).
110
- So your ai-tasks-side semantics for taskKind / outputValidation / autoValidateDecisionOutput are entirely safe to keep above runSkill.
111
-
112
- 4. Diagnostics & run logs — stable schema, types, versioning
113
- The stable types are part of the package’s public TypeScript surface (re-exported via src/index.ts: export * from "./types.js"). Two layers:
114
-
115
- 4a. Always-on RunSkillResponse.metadata (no opt-in needed)
116
-
117
- types.ts
118
- Lines 445-472
119
- metadata: {
120
- instructionVersion?: string;
121
- activityId?: string;
122
- costUsd?: number;
123
- usage?: SkillTraceUsage;
124
- modelUsed?: string;
125
- provider?: string;
126
- effectiveMaxTokens?: number;
127
- region?: string;
128
- requestedModelConfig?: ModelConfig;
129
- effectiveModelConfig?: EffectiveModelConfigSlice;
130
- invokeExec?: { timeoutMs?: number };
131
- };
132
- activityId is the primary correlation id for the persisted Activix activity; usage follows SkillTraceUsage. Helpers re-exported for consumers: billingSnapshotFromGatewayMetadata, gatewayExecutionSummaryFromInvokeResponse, effectiveModelConfigFromGatewayMetadata.
133
-
134
- 4b. Opt-in structured trace (gated by executionMode: "trace" or diagnostics.includeDebugTrace: true)
135
-
136
- types.ts
137
- Lines 221-250
138
- export interface SkillDiagnosticsTrace {
139
- step: SkillTraceStepIdentity;
140
- timing: { startedAt: string; endedAt: string; durationMs: number; };
141
- routing: SkillTraceRouting;
142
- usage: SkillTraceUsage;
143
- costUsd?: number;
144
- modelUsed: string;
145
- ok: boolean;
146
- error?: { name: string; message: string };
147
- attempts: SkillTraceAttempt[];
148
- tasks: SkillTraceAttempt[]; // alias of attempts (same array ref)
149
- rawProviderPayload?: string; // only when includeRawProviderPayload
150
- invokeRequest?: SkillDiagnosticsInvokeRequest;
151
- invokeRejection?: GatewayInvokeRejectionMetadata;
152
- }
153
- Surfaced on the response as both diagnostics.trace and the alias debugTrace (same reference). All sub-types are exported names you can import: RunSkillDiagnostics, SkillDiagnosticsTrace, SkillTraceAttempt, SkillTraceRouting (with requestIds.gatewayAiRequestId / routerRequestId / providerActivityRequestId), SkillTraceUsage, SkillTraceStepIdentity, SkillDiagnosticsInputOptions, SkillDiagnosticsInvokeRequest, ExecutionMode, plus the gateway type GatewayInvokeRejectionMetadata (re-exported from @x12i/ai-gateway).
154
-
155
- Production helpers exported for consumers building their own trace pipeline: mapGatewayInvokeToTrace, traceToDiagnostics, metadataFromInvokeError, isTraceExecutionMode, includeRawProviderPayload. Failure-path correlation: when an invoke rejects in trace mode, the SDK throws SkillExecutionTraceError with the same RunSkillDiagnostics shape attached.
156
-
157
- Run-log rows / milestones
158
- @exellix/ai-skills does not define a per-step run-log row schema. Structured logging is delegated to @x12i/logxer: every milestone in SkillExecutor.execute is emitted as logger.info/warn with a stable shape — { debugKind: DebugLogAbstract.<INTENT|EVENT|ANOMALY>, identity, jobId, taskId, skillKey, ... }. That contract belongs to @x12i/logxer, not this package; please bind your sink against that surface rather than scraping our log strings.
159
-
160
- The Activix-style nested billing snapshot for chaining is a stable SDK concept too — exposed via enrichIdentityWithAiSkillsLlmSnapshot and the constant AI_SKILLS_LLM_IDENTITY_KEY = "aiSkillsLlm". Forward RunSkillResponse.identity between steps to retain it.
161
-
162
- Versioning policy
163
- Types travel with the package semver (currently 5.2.5). There is no separate diagnostics version field on the wire.
164
- README pins compatibility: @x12i/ai-gateway ≥ 9.1.2 is recommended for routing metadata (≥9.1.1) and GatewayInvokeRejectionMetadata on error.metadata (≥9.1.2).
165
- Suggested coupling for your consumers: import the types by name from @exellix/ai-skills and treat unknown optional fields as additive (we add fields in minor versions; we do not rename existing ones without a major bump). The tasks alias of attempts is intentional and stable for orchestrators that look up debugTrace.tasks.
166
- Things I would still like you to confirm
167
- I answered all four from source, so nothing was guessed — but two product calls are yours, not mine:
168
-
169
- Do you want me to add a "unknown top-level key" warning in runSkill (e.g. surface a logxer warn when an orchestrator sends metadata, taskKind, outputValidation, autoValidateDecisionOutput)? Today they’re silently ignored.
170
- Do you want taskTypeId === skillKey enforced or merely recommended in your runTask layer? The skills package will accept any value.
@@ -1,66 +0,0 @@
1
- # External package assignments (integration follow-ups)
2
-
3
- Tracker for work **outside `@exellix/ai-tasks`** that closes orchestrator / stack gaps.
4
- **Reference:** answers and ai-tasks-owned behavior are normative in [`RUNTASK_REQUEST.md`](../../RUNTASK_REQUEST.md) § **Orchestrator integration**.
5
-
6
- **Created:** 2026-05-07
7
-
8
- ---
9
-
10
- ## Summary table
11
-
12
- | Due date | Package / repo | Assignment | Owner (fill) | Deliverable |
13
- |----------|----------------|------------|----------------|-------------|
14
- | **2026-05-14** | **`@exellix/graph-engine`** | Docs + deps clarity | Graph runtime team | Update format doc: remove or correct stale **“local web scoping”** if current code only **forwards `narrix`** (match `executeNode.ts`). Document pinned **`@exellix/ai-tasks`** range for **4.8.x** in package README or `.docs`. |
15
- | **2026-05-14** | **`@exellix/graph-engine`** | Compatibility discipline | Graph runtime team | Optional **CI** or Renovate policy: fail or warn when lockfile **`@exellix/ai-tasks`** major drifts outside supported range (define range in graph-engine). |
16
- | **2026-05-21** | **`@exellix/graph-engine`** | Passthrough whitelist | Graph runtime team | **`extractRunTaskMetadataPassthrough`**: process to update when schema grows — e.g. consume exported JSON Schema keys from ai-tasks **`scripts/export-run-task-request-keys.mjs`** once added (**optional ai-tasks P2**), or document manual review cadence on each ai-tasks **minor**. |
17
- | **2026-05-21** | **`@exellix/graph-engine`** | Run log contract | Graph runtime + observability | Document canonical **`runLog`** vs **`exellixRunLog`**, **`logxerRunId`** vs **`logxerCorrelationId`**; add **`schemaVersion`** on buffered **`RunLogEntry`** **or** explicitly state “unversioned, best-effort normalize”. |
18
- | **2026-05-28** | **`@x12i/logxer`** | Viewer alignment | Logging platform team | If graph-engine standardizes **`logxerRunId`**, document mapping to Logxer run/session viewers and stable field names. |
19
- | **2026-05-28** | **`@exellix/ai-skills`** | Optional strictness | AI gateway team | Product decision: **warn** on unknown top-level keys** toward invoke vs silent strip (see `.docs/investigation/ai-skills.md` open questions). |
20
- | **2026-05-14** | **`@exellix/narrix-catalox`** | Doc sync | Narrix tooling team | Confirm [**narrix-catalox.md**](./narrix-catalox.md) UX rule (**`ai-task-main-execution-wrappers` only**) is published in narrix-catalox repo if copied from here. |
21
-
22
- ---
23
-
24
- ## By package (detail)
25
-
26
- ### `@exellix/graph-engine`
27
-
28
- | ID | Target date | Task |
29
- |----|-------------|------|
30
- | GE-DOC-1 | 2026-05-14 | Align **web scoping** documentation with implementation: **Narrix / web scope owned by ai-tasks** when config is forwarded; no duplicate in-tree scoper unless a branch reintroduces it. |
31
- | GE-DEP-1 | 2026-05-14 | State **supported `@exellix/ai-tasks` semver** for **4.8.x** (e.g. `^7.3.8`) in repo docs; optional matrix table “engine release ↔ ai-tasks tested”. |
32
- | GE-CI-1 | 2026-05-21 | Optional: CI gate on dependency range or lockfile diff vs allowed ai-tasks versions. |
33
- | GE-PASS-1 | 2026-05-21 | Maintain **`extractRunTaskMetadataPassthrough`** when **`RunTaskRequest`** schema grows; link to **`RUNTASK_REQUEST.md`** as contract. |
34
- | GE-LOG-1 | 2026-05-21 | Publish **`RunLogEntry`** + metadata key deprecation policy (**`runLog`** preferred vs **`exellixRunLog`**, etc.). |
35
-
36
- ### `@x12i/logxer`
37
-
38
- | ID | Target date | Task |
39
- |----|-------------|------|
40
- | LX-MAP-1 | 2026-05-28 | If orchestrator emits **`logxerRunId`**, document how it maps to Logxer dashboards / correlation with **`@exellix/ai-skills`** milestone logs. |
41
-
42
- ### `@exellix/ai-skills`
43
-
44
- | ID | Target date | Task |
45
- |----|-------------|------|
46
- | SK-WARN-1 | 2026-05-28 | Decide whether unknown keys (`taskKind`, nested `metadata` blobs, etc.) should **log warn** at invoke build time; document outcome in ai-skills README. |
47
-
48
- ### `@exellix/narrix-catalox`
49
-
50
- | ID | Target date | Task |
51
- |----|-------------|------|
52
- | NC-PUB-1 | 2026-05-14 | Ensure catalog UX policy (**canonical `ai-task-main-execution-wrappers`**) is the published narrix-catalox doc; legacy **`ai-task-execution-strategies`** noted as ai-tasks-seeded for old consoles only. |
53
-
54
- ---
55
-
56
- ## Completed in `@exellix/ai-tasks` (2026-05-07)
57
-
58
- - **`RUNTASK_REQUEST.md`**: § Orchestrator integration (versioning, passthrough, **`taskTypeId`**, **`xynthesizedPatch`** × optimizer/retry, web scope, run-log keys, utilities, scope table); **`taskKind` row** clarified vs **`runSkill`**.
59
- - **`documenations/run-task-execution-flow.md`**: diagnostics section corrected vs **`task-sdk`** reality.
60
- - **`CHANGELOG.md`**: cross-package TBD replaced with pointer to orchestrator-owned versioning.
61
-
62
- ---
63
-
64
- ## How to use dates
65
-
66
- Treat dates as **target completion** for the owning team. Slide **`2026-05-28`** items if product priority shifts; keep **GE-DOC-1** and **GE-DEP-1** high priority to match current **`executeNode`** behavior and dependency transparency.
@@ -1,20 +0,0 @@
1
- # Integration summary (`ai-tasks` ↔ graph-engine ↔ stack)
2
-
3
- One-page index for orchestrator and Catalox integration work.
4
-
5
- | Artifact | Purpose |
6
- |----------|---------|
7
- | [**workplan-close-graph-engine-gaps.md**](./workplan-close-graph-engine-gaps.md) | Actionable workplan: gap owners, priorities, definition of done, file checklist. |
8
- | [**external-packages-assignments.md**](./external-packages-assignments.md) | **Dated assignments** for graph-engine, logxer, ai-skills, narrix-catalox (outside this repo). |
9
- | [**narrix-catalox.md**](./narrix-catalox.md) | Canonical Catalox catalog id for **`RunTaskRequest.executionStrategies`** UX (`ai-task-main-execution-wrappers`). |
10
- | [**ai-skills.md**](./ai-skills.md) | **`agentId` / `jobTypeId` / `taskTypeId`**, wire vs **`taskKind`**, diagnostics/trace vs run-log rows. |
11
-
12
- **Normative contract (this package):**
13
-
14
- - `RUNTASK_REQUEST.md` — field inventory, `executionPipeline`, template merge.
15
- - `documenations/schemas/v1/run-task-request.json` — closed JSON shape.
16
- - `src/types/task-types.ts` — TypeScript `RunTaskRequest` / response patches.
17
-
18
- **Related deep dives:**
19
-
20
- - `documenations/web-scoping-in-ai-tasks.md` — Narrix web scope, skip flags, no cross-host dedupe.
@@ -1,29 +0,0 @@
1
- # `@exellix/ai-tasks` integration note: `executionStrategies`
2
-
3
- This repo (`@exellix/narrix-catalox`) seeds **Narrix** catalogs (e.g. `categories`, `signals`, `pipelines`) and does not seed the `ai-tasks` app’s catalogs. This document exists to make the **contract decision** explicit for downstream tooling that renders/authorizes `RunTaskRequest.executionStrategies`.
4
-
5
- ## Canonical catalog identity (NO legacy)
6
-
7
- - **Canonical UX dropdown catalogId**: **`ai-task-main-execution-wrappers`**
8
- - **Runtime request field**: `RunTaskRequest.executionStrategies`
9
- - **Meaning**: optional FuncX wrappers immediately around the MAIN `runSkill` call (e.g. planner before MAIN, optimizer around/after MAIN attempts).
10
-
11
- There is **no legacy alias support** in narrix-catalox tooling: bind UX only to **`ai-task-main-execution-wrappers`**. Separately, **`@exellix/ai-tasks`** may still provision **`ai-task-execution-strategies`** in Catalox (same seeded rows) for older consoles — narrix-catalox does not use that catalog id.
12
-
13
- ## Seed equality vs operational truth
14
-
15
- When seeds are produced by the official `@exellix/ai-tasks` publish script, items are expected to be stable and keyed by `strategyKey` (natural identity). However, Catalox/Firestore can be manually edited; operational truth is established by re-running the official publish script rather than assuming two catalogs remain in sync.
16
-
17
- ## `taskTypeId` / `jobTypeId` (host-defined)
18
-
19
- `taskTypeId` / `jobTypeId` are treated as **host-defined opaque non-empty strings** (correlation / telemetry classification). They are **not** constrained by a Catalox catalog in this repo.
20
-
21
- Recommended convention (documentation-only): use stable, collision-resistant namespaced IDs (e.g. `exellix.task.<kind>` / `exellix.job.<kind>`).
22
-
23
- ## Deprecation & drift policy (breaking allowed)
24
-
25
- If the runtime validation/wire contract changes (e.g. supported `strategyKey` set changes), treat it as **breaking**:
26
-
27
- - **Signal**: semver **major** for the runtime package that validates requests (e.g. `@exellix/ai-tasks`).
28
- - **Downstream behavior**: consoles should compare catalog `strategyKey` values to the runtime’s exported canonical key set and warn/error on divergence (drift is not assumed to be auto-detected at runtime).
29
-
@@ -1,101 +0,0 @@
1
- # Workplan: close integration gaps + graph-engine Q&A
2
-
3
- This plan closes gaps identified across **`@exellix/ai-tasks`**, **`@exellix/graph-engine`** (client/orchestrator), and optionally **`@exellix/ai-skills`** / **`@x12i/logxer`**.
4
-
5
- **Status (2026-05-07):** Sprint 1 **ai-tasks** doc items (**AI-T-1, AI-T-2, AI-T-5**, **`taskKind` row**) landed in **`RUNTASK_REQUEST.md`**, **`run-task-execution-flow.md`**, **`CHANGELOG.md`**. Dated tasks for other repos: [**external-packages-assignments.md**](./external-packages-assignments.md).
6
- Priority order is **P0** (blocks correctness or contracts), **P1** (docs/tooling), **P2** (nice-to-have).
7
-
8
- ---
9
-
10
- ## A. Answer key — original graph-engine questions (where truth lives)
11
-
12
- | Topic | Answer (authoritative) | Owner of normative doc |
13
- |-------|------------------------|-------------------------|
14
- | **Versioning** (`ai-tasks` min for graph-engine 4.8.x) | No matrix in **ai-tasks**. Declare **`package.json` / lockfile`** line on graph-engine; **`CHANGELOG.md` + `BREAKING-CHANGES.md`** for semver (majors = breaking `RunTaskRequest`). Joint **tested range** only after CI matrix exists. | graph-engine (deps + optional matrix); ai-tasks (changelog policy — already present). |
15
- | **`extractRunTaskMetadataPassthrough`** | **No** generated allowlist in ai-tasks; parity is **host** responsibility. Optional future: schema-driven export from ai-tasks. | graph-engine (whitelist / codegen consumer); ai-tasks (optional tooling — below). |
16
- | **`taskTypeId` vs `skillKey`** | **`@exellix/ai-skills`**: all three correlation ids required; **`taskTypeId` opaque**, not used for routing. **`taskTypeId === skillKey`** optional. Graph pattern `metadata.taskTypeId` → root normalize is fine. | `.docs/investigation/ai-skills.md`; graph-engine build layer. |
17
- | **`executionStrategies`** shape / errors | **`resolveExecutionStrategies`**: `planner`/`optimizer`, phases, `priority`, optimizer-only **`maxIterations`**; errors are **`Error` strings**. **`direct`** = **`[]`** on wire; Catalox **`direct`** row is UX-only. | `RUNTASK_REQUEST.md`, types, `src/execution-strategies/resolveExecutionStrategies.ts`. |
18
- | Catalog ids (`ai-task-execution-strategies` vs `ai-task-main-execution-wrappers`) | Same seed source in ai-tasks publish script; **`strategyKey`** identity. Narrix-catalox UX: **`ai-task-main-execution-wrappers`** only; legacy catalog may still exist in Firestore for old consoles. | `.docs/investigation/narrix-catalox.md`; ai-tasks constants + publish script. |
19
- | **`executionPipeline`** | Exactly **one** `main`; PRE only **`synthesized-context`** — **first** such PRE runs then **`break`** (extras skipped + warnings). POST **`audit`** / **`polish`** only; others ignored. | `RUNTASK_REQUEST.md` § `executionPipeline`. |
20
- | **Web scoping** | **`narrix.enableWebScope`** triggers internal **`@exellix/narrix-web-scoper`** after Narrix preprocessor. **`skipWebScopeWhenExternalWebMarkdownPresent`** + **`executionMemory.webContextMarkdown`** skips internal fetch. **No** URL-level dedupe across hosts. | `documenations/web-scoping-in-ai-tasks.md`, `task-sdk.ts`. |
21
- | **`runLog` / `exellixRunLog` / `logxerRunId` / `logxerCorrelationId`** | **Not set by `runTask`** in ai-tasks. Consumer contract on merged **`response.metadata`** (graph-engine today). Stable schema/version = **orchestrator + log stack**, not `RunSkillResponse` types. | graph-engine `runLog.ts`; optional **`@x12i/logxer`** alignment doc. |
22
- | **`taskKind` / `outputValidation` / defaults for MAIN** | Interpreted **only in ai-tasks** before **`runSkill`**. **`taskKind: "decision"`** + **`autoValidateDecisionOutput !== false`** injects default schema **`fail`**. Not on **`RunSkillRequest`**. | `RUNTASK_REQUEST.md`, `task-sdk.ts` (`withDefaultDecisionValidation`). |
23
- | **`xynthesized` / `xynthesizedPatch`** | **`applyXynthesizedOutputWrite`**: **`replace`** vs **`merge`** (deep-merge plain objects only). **`mergeXynthesizedPatchSlices`**: shallow merge **`job`/`task` buckets**. **`xynthesizedPatchAccumulator`** updated **only** on PRE **`xynthesizedOutput`** path — **not** per optimizer MAIN iteration. | `src/utils/xynthesizedWrite.ts`, `task-sdk.ts`; graph merges patches **per successful `runTask`**. |
24
- | **Optimizer × env × graph retry** | **`AI_TASKS_OPTIMIZER_MAX_ITERATIONS`** / request **`maxIterations`** bound **inner** loop inside **one** `runTask`. **Each graph-engine retry** = new `runTask` → optimizer state **resets** unless host replays memory/`xynthesized`. Upper bound ≈ **retries × inner iterations**. | `src/execution-strategies/constants.ts`, `resolveExecutionStrategies.ts`, `task-sdk.ts`. |
25
- | **Utility PRE/POST (`taskTypeIdOverride`, pipeline, strategies)** | **`runTask`** does **not** forbid **`executionStrategies`** / pipeline for **`taskKind: "utility"`**; graph-engine **policy** (fixed MAIN + `[]`) is isolation. Telemetry convention **`exellix-graph-xynthesis-pre/post:…`** is graph-engine choice — ai-skills accepts any non-empty **`taskTypeId`**. | graph-engine strategy phases; ai-tasks runtime permissive. |
26
- | **`scope` vs `aiScoping` vs `narrixScope`** | **`narrixScope`**: filters **`taskMemory.narrix`**. **`aiScoping`**: PRE-MAIN → **`input.aiScoped`**. Authoring **`scope`** compiles into **`input`/`variables`/`executionMemory`** — not a separate top-level field on **`RunTaskRequest`**. | `RUNTASK_REQUEST.md`, `task-types.ts` JSDoc. |
27
-
28
- ---
29
-
30
- ## B. Work items by repo
31
-
32
- ### B1. `@exellix/ai-tasks` (this repo)
33
-
34
- | ID | Priority | Work | Acceptance criteria |
35
- |----|----------|------|---------------------|
36
- | **AI-T-1** | P1 | **Extend `RUNTASK_REQUEST.md`** with a short **“Orchestrator integration”** subsection: (1) no formal graph-engine version matrix in-package; cite semver docs; (2) **`xynthesizedPatch`** only accumulates PRE **`xynthesizedOutput`** writes, not optimizer iterations; (3) optimizer vs **separate** `runTask` retries; (4) run-log metadata keys **not** emitted by `runTask` — graph/client owns buffering keys if present; (5) link to `documenations/web-scoping-in-ai-tasks.md` for web scope / dedupe. | Single source readers can resolve graph-engine threads without chat archaeology. |
37
- | **AI-T-2** | P1 | **Align `documenations/run-task-execution-flow.md`** with implementation: either remove or qualify **`request.diagnostics` / `appendRunLog` / Logxer sink** bullets unless/until implemented in `task-sdk.ts`, **or** track a GitHub issue “implement diagnostics sink”. | No doc claiming behavior that `grep` cannot find in `src/`. |
38
- | **AI-T-3** | P2 | **`RUNTASK_REQUEST.md`**: table row or § for **`taskKind` / `outputValidation`** — “not forwarded to `runSkill`; enforced in `runTask` only” + pointer to **`@exellix/ai-skills`** investigation note. | Matches `.docs/investigation/ai-skills.md`. |
39
- | **AI-T-4** | P2 | **Optional tooling**: script **`scripts/export-run-task-request-keys.mjs`** (or ts) that prints **top-level JSON Schema keys** from `documenations/schemas/v1/run-task-request.json` for graph-engine CI diff vs passthrough whitelist. | graph-engine can fail CI when schema adds keys not in allowlist (or forces explicit ignore list). |
40
- | **AI-T-5** | P2 | **Replace `TBD` minimum graph-engine** lines in `RUNTASK_REQUEST.md` / `CHANGELOG.md` with: *“Orchestrator minimum version is not declared here; follow consuming app’s `package.json` and joint CI when introduced.”* | Removes false expectation of an ai-tasks-owned engine floor. |
41
- | **AI-T-6** | P1 | **Keep `.docs/investigation/integration-summary.md`** (new): 1-page pointer to `narrix-catalox.md`, `ai-skills.md`, this workplan, `RUNTASK_REQUEST.md`. | Onboarding path for integrators. |
42
-
43
- ### B2. `@exellix/graph-engine` (consumer repo — track as external tickets)
44
-
45
- | ID | Priority | Work | Acceptance criteria |
46
- |----|----------|------|---------------------|
47
- | **GE-1** | P1 | **Docs**: fix stale **“local web scoping”** language in format doc to match **`executeNode.ts`** (forward `narrix` only; ai-tasks owns internal scoper). | Matches runtime. |
48
- | **GE-2** | P1 | **Compatibility**: document **`@exellix/ai-tasks` pinned range** for 4.8.x; optional **CI** job: lockfile major/minor vs allowed range or Renovate policy. | Repeatable upgrade discipline. |
49
- | **GE-3** | P2 | **Passthrough**: adopt **AI-T-4** export in CI **or** widen whitelist strategy (explicit ignore vs full passthrough for unknown keys policy). | Fewer silent misses on new `RunTaskRequest` fields. |
50
- | **GE-4** | P2 | **`RunLogEntry`**: add **`schemaVersion`** (or document why omitted) + canonical key table **`runLog` vs `exellixRunLog`**, **`logxerRunId` vs `logxerCorrelationId`** — align **`@x12i/logxer`** viewers if applicable. | Single contract doc for log consumers. |
51
-
52
- ### B3. `@exellix/ai-skills` / `@x12i/logxer` (optional follow-ups)
53
-
54
- | ID | Priority | Work | Acceptance criteria |
55
- |----|----------|------|---------------------|
56
- | **SK-1** | P2 | Product decision: **warn** on unknown keys** passed toward invoke (or strict strip list)** — only if graph-engine/ai-tasks want noise in logs. | Decision recorded; implement or explicitly decline. |
57
- | **LX-1** | P2 | Document **mapping** `logxerRunId` ↔ Logxer session/run viewers if graph-engine standardizes on those keys. | Reduces cross-package ambiguity. |
58
-
59
- ### B4. `@exellix/narrix-catalox` (doc tweak)
60
-
61
- | ID | Priority | Work | Acceptance criteria |
62
- |----|----------|------|---------------------|
63
- | **NC-1** | P1 | **`narrix-catalox.md`**: one sentence — **`ai-task-execution-strategies` may still exist** for legacy UIs; narrix-catalox binds only **`ai-task-main-execution-wrappers`**. | No contradiction with ai-tasks publish script. |
64
-
65
- ---
66
-
67
- ## C. Suggested execution order (2 short sprints)
68
-
69
- **Sprint 1 (close doc + Q&A surface — ~0.5–1 dev-day in ai-tasks)**
70
- 1. AI-T-1, AI-T-2, AI-T-5, AI-T-6
71
- 2. NC-1 (narrix-catalox repo or shared doc)
72
- 3. GE-1 (graph-engine) in parallel if someone has access
73
-
74
- **Sprint 2 (tooling + contracts — ~1–2 dev-days cross-repo)**
75
- 4. AI-T-4 + GE-3
76
- 5. GE-2, GE-4
77
- 6. AI-T-3, SK-1, LX-1 as bandwidth allows
78
-
79
- ---
80
-
81
- ## D. Definition of done (for “gaps closed”)
82
-
83
- - [ ] Every row in **§A** has a **linked** normative location (markdown or exported types), not only Slack/chat.
84
- - [ ] No ai-tasks markdown asserts **`appendRunLog`** / run-log injection **without** implementation or explicit “planned”.
85
- - [ ] graph-engine format doc matches **forward-only Narrix / web scope** behavior.
86
- - [ ] Optional: CI prevents passthrough drift (**AI-T-4** + **GE-3**).
87
- - [ ] Optional: versioned or explicitly versionless **`RunLogEntry`** contract (**GE-4**).
88
-
89
- ---
90
-
91
- ## E. Files to touch in **this** repo (checklist)
92
-
93
- | File | Action |
94
- |------|--------|
95
- | `RUNTASK_REQUEST.md` | Add orchestrator subsection; replace graph-engine **TBD** with explicit non-ownership statement. |
96
- | `documenations/run-task-execution-flow.md` | Fix diagnostics/runLog claims vs code. |
97
- | `.docs/investigation/integration-summary.md` | **Create** — index + links. |
98
- | `.docs/investigation/narrix-catalox.md` | **NC-1** sentence (if maintained here). |
99
- | `CHANGELOG.md` | Optional note when docs land (doc-only release acceptable as **patch**). |
100
-
101
- No runtime behavior change is **required** to close documentation gaps; **AI-T-4** is the only new artifact that changes maintainer workflow.
@@ -1,30 +0,0 @@
1
- # Logging Stack (Activix + xronox-store)
2
-
3
- For initial rollout and integration debugging, enable logs at both layers:
4
-
5
- - **Activix**: `ACTIVIX_LOGS_LEVEL=debug`
6
- - **xronox-store**: `XRONOX_STORE_LOG=1`
7
-
8
- ## What to expect
9
-
10
- - Activix logs should make it clear when lifecycle APIs are called (`start`/`complete`/`fail`/`patch`) and which instance is producing output (via `diagnostics` when provided).
11
- - Store logs should help diagnose Mongo connectivity, retries, and deterministic write failures (like duplicate keys).
12
-
13
- ## Diagnostics metadata (recommended for multi-instance)
14
-
15
- If you expect more than one Activix instance in a process/fleet, pass `diagnostics` metadata at construction time so logs are self-identifying:
16
-
17
- ```ts
18
- const ax = new Activix({
19
- storageMode: 'automatic',
20
- mongoUri: process.env.MONGO_URI!,
21
- collection: 'task-activities',
22
- diagnostics: {
23
- owner: '@your-org/your-service',
24
- component: 'graph-executor',
25
- instanceLabel: 'worker-main',
26
- workerId: process.pid.toString(),
27
- },
28
- });
29
- ```
30
-