@zhivex-ai/core 1.16.0 → 1.17.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/advanced-tool-registry.d.ts.map +1 -1
- package/dist/advanced-tool-registry.js.map +1 -1
- package/dist/agent-approval.d.ts +3 -1
- package/dist/agent-approval.d.ts.map +1 -1
- package/dist/agent-control-plane.d.ts.map +1 -1
- package/dist/agent-control-plane.js.map +1 -1
- package/dist/agent-evaluation.d.ts.map +1 -1
- package/dist/agent-evaluation.js.map +1 -1
- package/dist/agent-handoff-contracts.d.ts.map +1 -1
- package/dist/agent-handoff.d.ts.map +1 -1
- package/dist/agent-handoff.js.map +1 -1
- package/dist/agent-harness.d.ts.map +1 -1
- package/dist/agent-state.d.ts.map +1 -1
- package/dist/agent-state.js.map +1 -1
- package/dist/agent-store.d.ts.map +1 -1
- package/dist/agent-store.js.map +1 -1
- package/dist/agent-trace.d.ts.map +1 -1
- package/dist/agent-trace.js.map +1 -1
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +73 -17
- package/dist/agent.js.map +1 -1
- package/dist/api-stability.d.ts.map +1 -1
- package/dist/api-stability.js +1 -0
- package/dist/api-stability.js.map +1 -1
- package/dist/artifact.d.ts.map +1 -1
- package/dist/artifact.js.map +1 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/bounded-broadcast.d.ts.map +1 -1
- package/dist/bounded-broadcast.js.map +1 -1
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js.map +1 -1
- package/dist/embed.d.ts +1 -1
- package/dist/embed.d.ts.map +1 -1
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js.map +1 -1
- package/dist/fetch.d.ts.map +1 -1
- package/dist/fetch.js.map +1 -1
- package/dist/generate-object.d.ts.map +1 -1
- package/dist/generate-text.d.ts +2 -1
- package/dist/generate-text.d.ts.map +1 -1
- package/dist/generate-text.js +39 -0
- package/dist/generate-text.js.map +1 -1
- package/dist/google.d.ts.map +1 -1
- package/dist/google.js.map +1 -1
- package/dist/grounded-text.d.ts.map +1 -1
- package/dist/http-retry.d.ts.map +1 -1
- package/dist/http-retry.js.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/live-agent.d.ts.map +1 -1
- package/dist/live-agent.js.map +1 -1
- package/dist/mcp.d.ts.map +1 -1
- package/dist/mcp.js.map +1 -1
- package/dist/media.d.ts.map +1 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/middleware.d.ts.map +1 -1
- package/dist/middleware.js.map +1 -1
- package/dist/model-capabilities.d.ts.map +1 -1
- package/dist/model-capabilities.js.map +1 -1
- package/dist/model-cost.d.ts +36 -0
- package/dist/model-cost.d.ts.map +1 -0
- package/dist/model-cost.js +89 -0
- package/dist/model-cost.js.map +1 -0
- package/dist/model-evaluation.d.ts.map +1 -1
- package/dist/model-evaluation.js.map +1 -1
- package/dist/model-resolver.d.ts.map +1 -1
- package/dist/model-resolver.js.map +1 -1
- package/dist/observability.d.ts.map +1 -1
- package/dist/observability.js.map +1 -1
- package/dist/postgres-client.d.ts.map +1 -1
- package/dist/production-agent-kit.d.ts.map +1 -1
- package/dist/production-agent-kit.js.map +1 -1
- package/dist/provider-conformance.d.ts.map +1 -1
- package/dist/provider-conformance.js.map +1 -1
- package/dist/provider-parity.d.ts.map +1 -1
- package/dist/provider-parity.js.map +1 -1
- package/dist/provider-resources.d.ts.map +1 -1
- package/dist/raw-provider-options.d.ts.map +1 -1
- package/dist/realtime.d.ts.map +1 -1
- package/dist/response.d.ts.map +1 -1
- package/dist/response.js.map +1 -1
- package/dist/retrieval.d.ts.map +1 -1
- package/dist/retrieval.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js.map +1 -1
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js.map +1 -1
- package/dist/safety-policy.d.ts.map +1 -1
- package/dist/safety-policy.js.map +1 -1
- package/dist/secure-id-node.d.ts.map +1 -1
- package/dist/secure-id.d.ts.map +1 -1
- package/dist/store-security.d.ts.map +1 -1
- package/dist/store-security.js.map +1 -1
- package/dist/stream.d.ts.map +1 -1
- package/dist/stream.js.map +1 -1
- package/dist/structured-output-prompt.d.ts.map +1 -1
- package/dist/structured-output-prompt.js.map +1 -1
- package/dist/tool-execution-suspension.d.ts.map +1 -1
- package/dist/tool-execution-suspension.js.map +1 -1
- package/dist/tool-registry.d.ts.map +1 -1
- package/dist/types.d.ts +7 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js.map +1 -1
- package/dist/url-security.d.ts.map +1 -1
- package/dist/workflow-artifacts.d.ts.map +1 -1
- package/dist/workflow-artifacts.js.map +1 -1
- package/dist/workflow-evaluation-diff.d.ts.map +1 -1
- package/dist/workflow-evaluation-diff.js.map +1 -1
- package/dist/workflow-evaluation-gate.d.ts.map +1 -1
- package/dist/workflow-evaluation-gate.js.map +1 -1
- package/dist/workflow-evaluation.d.ts.map +1 -1
- package/dist/workflow-evaluation.js.map +1 -1
- package/dist/workflow-observability.d.ts.map +1 -1
- package/dist/workflow-observability.js.map +1 -1
- package/dist/workflow-state-contracts.d.ts.map +1 -1
- package/dist/workflow-state-contracts.js.map +1 -1
- package/dist/workflow-state-service.d.ts.map +1 -1
- package/dist/workflow-state-service.js.map +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/package.json +2 -2
package/dist/agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"AAuBA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,KAAK,EAQV,eAAe,EAIf,gBAAgB,EAChB,kBAAkB,EAClB,mBAAmB,EAInB,2BAA2B,EAE3B,aAAa,EACb,cAAc,EACd,aAAa,EACb,cAAc,EACd,aAAa,EACb,8BAA8B,EAM9B,iBAAiB,EAGjB,yBAAyB,EAIzB,SAAS,EACT,aAAa,EAGb,+BAA+B,EAG/B,kBAAkB,EAGlB,cAAc,EAIf,MAAM,YAAY,CAAC;AAwnBpB,QAAA,MAAM,uBAAuB;;;iBAG3B,CAAC;AAaH,eAAO,MAAM,kBAAkB,GAAI,MAAM,SAAS,aAAa,
|
|
1
|
+
{"version":3,"file":"agent.d.ts","sourceRoot":"","sources":["../src/agent.ts"],"names":[],"mappings":"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"}
|
package/dist/agent.js
CHANGED
|
@@ -637,19 +637,19 @@ export const createSubAgentTool = (options) => {
|
|
|
637
637
|
}
|
|
638
638
|
};
|
|
639
639
|
};
|
|
640
|
-
const saveStateWithRevision = async (store, state) => {
|
|
640
|
+
const saveStateWithRevision = async (store, state, serializedNextState) => {
|
|
641
641
|
const expectedRevision = state.revision ?? 0;
|
|
642
642
|
const nextRevision = expectedRevision + 1;
|
|
643
643
|
const nextState = { ...state, revision: nextRevision };
|
|
644
|
-
await store.save(cloneState(nextState), { expectedRevision });
|
|
644
|
+
await store.save(serializedNextState === undefined ? cloneState(nextState) : JSON.parse(serializedNextState), { expectedRevision });
|
|
645
645
|
state.revision = nextRevision;
|
|
646
646
|
};
|
|
647
647
|
const claimAgentExecution = async (agent, state) => {
|
|
648
648
|
state.status = "running";
|
|
649
649
|
state.updatedAt = Date.now();
|
|
650
|
-
assertStateSize(agent, state);
|
|
650
|
+
const serialized = assertStateSize(agent, agent.store ? normalizeAgentRunState({ ...state, revision: (state.revision ?? 0) + 1 }) : state);
|
|
651
651
|
if (agent.store) {
|
|
652
|
-
await saveStateWithRevision(agent.store, state);
|
|
652
|
+
await saveStateWithRevision(agent.store, state, serialized);
|
|
653
653
|
}
|
|
654
654
|
};
|
|
655
655
|
const assertStateSize = (agent, state, policy) => {
|
|
@@ -657,16 +657,18 @@ const assertStateSize = (agent, state, policy) => {
|
|
|
657
657
|
if (!Number.isSafeInteger(limit) || limit < 1) {
|
|
658
658
|
throw new ValidationError('Agent policy "maxStateBytes" must be a positive integer.');
|
|
659
659
|
}
|
|
660
|
-
const
|
|
660
|
+
const serialized = JSON.stringify(state);
|
|
661
|
+
const bytes = new TextEncoder().encode(serialized).byteLength;
|
|
661
662
|
if (bytes > limit) {
|
|
662
663
|
throw new ValidationError(`Agent run state is ${bytes} bytes and exceeds maxStateBytes=${limit}. Offload large tool outputs to artifacts or raise the explicit limit.`);
|
|
663
664
|
}
|
|
665
|
+
return serialized;
|
|
664
666
|
};
|
|
665
667
|
const persistState = async (agent, state, policy) => {
|
|
666
668
|
state.updatedAt = Date.now();
|
|
667
|
-
assertStateSize(agent, state, policy);
|
|
669
|
+
const serialized = assertStateSize(agent, agent.store ? normalizeAgentRunState({ ...state, revision: (state.revision ?? 0) + 1 }) : state, policy);
|
|
668
670
|
if (agent.store) {
|
|
669
|
-
await saveStateWithRevision(agent.store, state);
|
|
671
|
+
await saveStateWithRevision(agent.store, state, serialized);
|
|
670
672
|
}
|
|
671
673
|
await emitTelemetryEvent(agent, {
|
|
672
674
|
type: "state-saved",
|
|
@@ -848,6 +850,11 @@ const resolveContext = async (agent, input) => {
|
|
|
848
850
|
ensureValidStateInput(normalizedInput);
|
|
849
851
|
const metadata = cloneMetadata(agent.metadata, loadedState?.metadata, input.metadata, input.handoff?.metadata);
|
|
850
852
|
if (loadedState) {
|
|
853
|
+
const groupIdentity = input.metadata?.agentGroupIdentity;
|
|
854
|
+
if (groupIdentity !== undefined && (loadedState.metadata?.agentGroupIdentity !== groupIdentity ||
|
|
855
|
+
loadedState.agentId !== agent.id)) {
|
|
856
|
+
throw new ConflictError("Agent group idempotency key belongs to a different member or agent.");
|
|
857
|
+
}
|
|
851
858
|
bindDurableRuntime(agent, input, loadedState, executionEnvironmentBinding);
|
|
852
859
|
const maxSteps = input.maxSteps ?? loadedState.maxSteps;
|
|
853
860
|
const resumed = await applyApprovalResponses(loadedState.messages, input.approvals, loadedState.pendingApprovals, loadedState.approvalHistory, agent.toolApprovalSigner);
|
|
@@ -1255,7 +1262,7 @@ const createGenerateOptions = (agent, state, input, messages, maxSteps, context,
|
|
|
1255
1262
|
].filter((value) => value !== undefined);
|
|
1256
1263
|
const maxTokens = tokenCeilings.length ? Math.min(...tokenCeilings) : undefined;
|
|
1257
1264
|
const requestedToolExecution = input.toolExecution ?? agent.toolExecution;
|
|
1258
|
-
const toolExecution = agent.subagents?.length
|
|
1265
|
+
const toolExecution = agent.subagents?.length && !(requestedToolExecution?.parallel && requestedToolExecution.independentOnly)
|
|
1259
1266
|
? {
|
|
1260
1267
|
...requestedToolExecution,
|
|
1261
1268
|
parallel: false,
|
|
@@ -1850,7 +1857,39 @@ export const prepareSubagentsForAgent = (agent, options = {}) => {
|
|
|
1850
1857
|
};
|
|
1851
1858
|
};
|
|
1852
1859
|
export const runAgentGroup = async (agents, input = {}) => {
|
|
1853
|
-
const { stopOnError, runId: _runId, state: _state, approvals: _approvals, handoff: _handoff, ...sharedInput } = input;
|
|
1860
|
+
const { stopOnError, maxConcurrency, runId: _runId, state: _state, approvals: _approvals, handoff: _handoff, ...sharedInput } = input;
|
|
1861
|
+
if (maxConcurrency !== undefined && (!Number.isSafeInteger(maxConcurrency) || maxConcurrency < 1)) {
|
|
1862
|
+
throw new ValidationError('Agent group "maxConcurrency" must be a positive safe integer.');
|
|
1863
|
+
}
|
|
1864
|
+
// Validate the complete group before any member can claim a key or invoke a model.
|
|
1865
|
+
const identities = new Set();
|
|
1866
|
+
const claims = [];
|
|
1867
|
+
const memberInputs = agents.map((member) => {
|
|
1868
|
+
const merged = { ...sharedInput, ...member.input };
|
|
1869
|
+
ensureValidScope(merged.scope);
|
|
1870
|
+
ensureValidIdempotencyInput(merged, member.agent.store);
|
|
1871
|
+
if (!merged.idempotencyKey)
|
|
1872
|
+
return merged;
|
|
1873
|
+
const identity = member.name ?? member.agent.id;
|
|
1874
|
+
if (!identity || identities.has(identity)) {
|
|
1875
|
+
throw new ValidationError("Idempotent agent group members require unique names or agent IDs.");
|
|
1876
|
+
}
|
|
1877
|
+
identities.add(identity);
|
|
1878
|
+
const key = member.input?.idempotencyKey ?? `agent-group:${JSON.stringify([input.idempotencyKey, identity])}`;
|
|
1879
|
+
const scope = merged.scope;
|
|
1880
|
+
const scopedKey = JSON.stringify([scope?.namespace ?? "default", scope?.tenantId, scope?.userId, key]);
|
|
1881
|
+
if (claims.some((claim) => claim.store === member.agent.store && claim.key === scopedKey)) {
|
|
1882
|
+
throw new ConflictError("Agent group members cannot share an explicit idempotency key in the same store and scope.");
|
|
1883
|
+
}
|
|
1884
|
+
claims.push({ store: member.agent.store, key: scopedKey });
|
|
1885
|
+
return {
|
|
1886
|
+
...merged,
|
|
1887
|
+
idempotencyKey: key,
|
|
1888
|
+
metadata: cloneMetadata(input.metadata, member.input?.metadata, {
|
|
1889
|
+
agentGroupIdentity: JSON.stringify([input.idempotencyKey ?? null, identity])
|
|
1890
|
+
})
|
|
1891
|
+
};
|
|
1892
|
+
});
|
|
1854
1893
|
const parentRunId = input.parentRunId;
|
|
1855
1894
|
const controllers = agents.map(() => new AbortController());
|
|
1856
1895
|
let failFastTriggered = false;
|
|
@@ -1866,15 +1905,17 @@ export const runAgentGroup = async (agents, input = {}) => {
|
|
|
1866
1905
|
}
|
|
1867
1906
|
});
|
|
1868
1907
|
};
|
|
1869
|
-
const
|
|
1908
|
+
const runMember = async (member, index) => {
|
|
1870
1909
|
const merged = createMergedAbortSignal(input.abortSignal, member.input?.abortSignal, controllers[index].signal);
|
|
1871
1910
|
try {
|
|
1911
|
+
if (merged.signal?.aborted) {
|
|
1912
|
+
throw new DOMException("Agent group member aborted before execution.", "AbortError");
|
|
1913
|
+
}
|
|
1872
1914
|
const runInput = {
|
|
1873
|
-
...
|
|
1874
|
-
...(member.input ?? {}),
|
|
1915
|
+
...memberInputs[index],
|
|
1875
1916
|
parentRunId: member.input?.parentRunId ?? parentRunId,
|
|
1876
1917
|
abortSignal: merged.signal,
|
|
1877
|
-
metadata: cloneMetadata(input.metadata,
|
|
1918
|
+
metadata: cloneMetadata(input.metadata, memberInputs[index]?.metadata, {
|
|
1878
1919
|
...(member.name ? { agentGroupMember: member.name } : {})
|
|
1879
1920
|
})
|
|
1880
1921
|
};
|
|
@@ -1891,8 +1932,20 @@ export const runAgentGroup = async (agents, input = {}) => {
|
|
|
1891
1932
|
finally {
|
|
1892
1933
|
merged.cleanup();
|
|
1893
1934
|
}
|
|
1894
|
-
}
|
|
1895
|
-
const settled =
|
|
1935
|
+
};
|
|
1936
|
+
const settled = new Array(agents.length);
|
|
1937
|
+
let nextIndex = 0;
|
|
1938
|
+
await Promise.all(Array.from({ length: Math.min(maxConcurrency ?? agents.length, agents.length) }, async () => {
|
|
1939
|
+
while (nextIndex < agents.length) {
|
|
1940
|
+
const index = nextIndex++;
|
|
1941
|
+
try {
|
|
1942
|
+
settled[index] = { status: "fulfilled", value: await runMember(agents[index], index) };
|
|
1943
|
+
}
|
|
1944
|
+
catch (reason) {
|
|
1945
|
+
settled[index] = { status: "rejected", reason };
|
|
1946
|
+
}
|
|
1947
|
+
}
|
|
1948
|
+
}));
|
|
1896
1949
|
const outputs = settled.map((result, index) => {
|
|
1897
1950
|
const member = agents[index];
|
|
1898
1951
|
if (result.status === "fulfilled") {
|
|
@@ -1916,9 +1969,12 @@ export const runAgentGroup = async (agents, input = {}) => {
|
|
|
1916
1969
|
}
|
|
1917
1970
|
};
|
|
1918
1971
|
});
|
|
1919
|
-
const
|
|
1972
|
+
const precedence = [
|
|
1973
|
+
"failed", "timed_out", "cancel_requested", "running", "queued", "waiting_approval", "suspended", "cancelled", "completed"
|
|
1974
|
+
];
|
|
1975
|
+
const status = precedence.find((status) => outputs.some((output) => output.status === "rejected" ? status === "failed" : output.output?.status === status)) ?? "completed";
|
|
1920
1976
|
return {
|
|
1921
|
-
status
|
|
1977
|
+
status,
|
|
1922
1978
|
parentRunId,
|
|
1923
1979
|
outputs
|
|
1924
1980
|
};
|