@zhivex-ai/core 0.17.0 → 0.19.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/agent-handoff.d.ts +2 -0
- package/dist/agent-handoff.d.ts.map +1 -1
- package/dist/agent-handoff.js +8 -3
- package/dist/agent-handoff.js.map +1 -1
- package/dist/agent-state.d.ts +6 -0
- package/dist/agent-state.d.ts.map +1 -0
- package/dist/agent-state.js +374 -0
- package/dist/agent-state.js.map +1 -0
- package/dist/agent-store.d.ts +5 -3
- package/dist/agent-store.d.ts.map +1 -1
- package/dist/agent-store.js +1027 -145
- package/dist/agent-store.js.map +1 -1
- package/dist/agent.d.ts +1 -0
- package/dist/agent.d.ts.map +1 -1
- package/dist/agent.js +698 -229
- package/dist/agent.js.map +1 -1
- package/dist/api-stability.d.ts.map +1 -1
- package/dist/api-stability.js +10 -0
- package/dist/api-stability.js.map +1 -1
- package/dist/artifact.d.ts.map +1 -1
- package/dist/artifact.js +2 -1
- package/dist/artifact.js.map +1 -1
- package/dist/audio.d.ts +2 -1
- package/dist/audio.d.ts.map +1 -1
- package/dist/audio.js +25 -0
- package/dist/audio.js.map +1 -1
- package/dist/bounded-broadcast.d.ts +45 -0
- package/dist/bounded-broadcast.d.ts.map +1 -0
- package/dist/bounded-broadcast.js +163 -0
- package/dist/bounded-broadcast.js.map +1 -0
- package/dist/catalog.d.ts.map +1 -1
- package/dist/catalog.js +119 -14
- package/dist/catalog.js.map +1 -1
- package/dist/generate-object.d.ts.map +1 -1
- package/dist/generate-object.js +26 -88
- package/dist/generate-object.js.map +1 -1
- package/dist/generate-text.d.ts +9 -1
- package/dist/generate-text.d.ts.map +1 -1
- package/dist/generate-text.js +118 -55
- package/dist/generate-text.js.map +1 -1
- package/dist/google.d.ts +12 -1
- package/dist/google.d.ts.map +1 -1
- package/dist/google.js +27 -0
- package/dist/google.js.map +1 -1
- package/dist/index.d.ts +6 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -3
- package/dist/index.js.map +1 -1
- package/dist/live-agent.d.ts.map +1 -1
- package/dist/live-agent.js +31 -54
- package/dist/live-agent.js.map +1 -1
- package/dist/messages.d.ts +4 -1
- package/dist/messages.d.ts.map +1 -1
- package/dist/messages.js.map +1 -1
- package/dist/realtime.d.ts.map +1 -1
- package/dist/realtime.js +39 -55
- package/dist/realtime.js.map +1 -1
- package/dist/response.js +1 -1
- package/dist/response.js.map +1 -1
- package/dist/runner.d.ts.map +1 -1
- package/dist/runner.js +2 -1
- package/dist/runner.js.map +1 -1
- package/dist/safety-policy.d.ts +41 -1
- package/dist/safety-policy.d.ts.map +1 -1
- package/dist/safety-policy.js +114 -8
- package/dist/safety-policy.js.map +1 -1
- package/dist/secure-id.d.ts +2 -0
- package/dist/secure-id.d.ts.map +1 -0
- package/dist/secure-id.js +3 -0
- package/dist/secure-id.js.map +1 -0
- package/dist/types.d.ts +289 -8
- package/dist/types.d.ts.map +1 -1
- package/dist/ui.d.ts.map +1 -1
- package/dist/ui.js +2 -1
- package/dist/ui.js.map +1 -1
- package/dist/workflow.d.ts.map +1 -1
- package/dist/workflow.js +2 -1
- package/dist/workflow.js.map +1 -1
- package/package.json +1 -1
- package/dist/durable-store-migration.d.ts +0 -26
- package/dist/durable-store-migration.d.ts.map +0 -1
- package/dist/durable-store-migration.js +0 -158
- package/dist/durable-store-migration.js.map +0 -1
|
@@ -1,158 +0,0 @@
|
|
|
1
|
-
import { ValidationError } from "./errors.js";
|
|
2
|
-
export const DURABLE_STORE_MIGRATION_PLAN_SCHEMA_VERSION = 1;
|
|
3
|
-
const identifierPattern = /^[A-Za-z_][A-Za-z0-9_]*$/;
|
|
4
|
-
export const validateDurableStoreIdentifier = (value, fieldName) => {
|
|
5
|
-
if (!identifierPattern.test(value)) {
|
|
6
|
-
throw new ValidationError(`The "${fieldName}" option must match the SQL identifier pattern [A-Za-z_][A-Za-z0-9_]*.`);
|
|
7
|
-
}
|
|
8
|
-
return value;
|
|
9
|
-
};
|
|
10
|
-
export const durableStoreMutationCount = (result) => {
|
|
11
|
-
if (!result || typeof result !== "object") {
|
|
12
|
-
return undefined;
|
|
13
|
-
}
|
|
14
|
-
const record = result;
|
|
15
|
-
const value = record.changes ?? record.changeset ?? record.rowCount;
|
|
16
|
-
return typeof value === "number" ? value : undefined;
|
|
17
|
-
};
|
|
18
|
-
export const getDurableStoreRecordField = (value, candidates) => {
|
|
19
|
-
if (!value || typeof value !== "object") {
|
|
20
|
-
return undefined;
|
|
21
|
-
}
|
|
22
|
-
const record = value;
|
|
23
|
-
for (const candidate of candidates) {
|
|
24
|
-
if (candidate in record) {
|
|
25
|
-
return record[candidate];
|
|
26
|
-
}
|
|
27
|
-
}
|
|
28
|
-
return undefined;
|
|
29
|
-
};
|
|
30
|
-
const uniqueTargets = (targets) => {
|
|
31
|
-
const input = Array.isArray(targets) ? targets : [targets];
|
|
32
|
-
const expanded = input.includes("all")
|
|
33
|
-
? ["agent-runs", "agent-memory", "sessions", "workflow-states", "artifacts"]
|
|
34
|
-
: input;
|
|
35
|
-
return [...new Set(expanded)];
|
|
36
|
-
};
|
|
37
|
-
const tableNames = (names = {}) => ({
|
|
38
|
-
agentRuns: validateDurableStoreIdentifier(names.agentRuns ?? "zhivex_agent_runs", "tableNames.agentRuns"),
|
|
39
|
-
agentMemory: validateDurableStoreIdentifier(names.agentMemory ?? "zhivex_agent_memory", "tableNames.agentMemory"),
|
|
40
|
-
sessions: validateDurableStoreIdentifier(names.sessions ?? "zhivex_agent_sessions", "tableNames.sessions"),
|
|
41
|
-
workflowStates: validateDurableStoreIdentifier(names.workflowStates ?? "zhivex_workflow_states", "tableNames.workflowStates"),
|
|
42
|
-
artifacts: validateDurableStoreIdentifier(names.artifacts ?? "zhivex_artifacts", "tableNames.artifacts")
|
|
43
|
-
});
|
|
44
|
-
const sqlTypes = (dialect) => ({
|
|
45
|
-
json: dialect === "postgres" ? "JSONB" : "TEXT",
|
|
46
|
-
bigint: dialect === "postgres" ? "BIGINT" : "INTEGER"
|
|
47
|
-
});
|
|
48
|
-
const agentRunStatements = (dialect, tableName) => {
|
|
49
|
-
const types = sqlTypes(dialect);
|
|
50
|
-
const idempotencyTable = `${tableName}_idempotency`;
|
|
51
|
-
const parentTable = `${tableName}_parents`;
|
|
52
|
-
return [
|
|
53
|
-
`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
54
|
-
run_id TEXT PRIMARY KEY,
|
|
55
|
-
state_json ${types.json} NOT NULL,
|
|
56
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
57
|
-
)`,
|
|
58
|
-
`CREATE TABLE IF NOT EXISTS ${idempotencyTable} (
|
|
59
|
-
idempotency_key TEXT PRIMARY KEY,
|
|
60
|
-
run_id TEXT NOT NULL,
|
|
61
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
62
|
-
)`,
|
|
63
|
-
`CREATE INDEX IF NOT EXISTS ${idempotencyTable}_run_id_idx ON ${idempotencyTable} (run_id)`,
|
|
64
|
-
`CREATE TABLE IF NOT EXISTS ${parentTable} (
|
|
65
|
-
run_id TEXT PRIMARY KEY,
|
|
66
|
-
parent_run_id TEXT NOT NULL,
|
|
67
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
68
|
-
)`,
|
|
69
|
-
`CREATE INDEX IF NOT EXISTS ${parentTable}_parent_run_id_idx ON ${parentTable} (parent_run_id)`
|
|
70
|
-
];
|
|
71
|
-
};
|
|
72
|
-
const agentMemoryStatements = (dialect, tableName) => {
|
|
73
|
-
const types = sqlTypes(dialect);
|
|
74
|
-
return [
|
|
75
|
-
`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
76
|
-
memory_key TEXT PRIMARY KEY,
|
|
77
|
-
messages_json ${types.json} NOT NULL,
|
|
78
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
79
|
-
)`
|
|
80
|
-
];
|
|
81
|
-
};
|
|
82
|
-
const sessionStatements = (dialect, tableName) => {
|
|
83
|
-
const types = sqlTypes(dialect);
|
|
84
|
-
return [
|
|
85
|
-
`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
86
|
-
session_key TEXT PRIMARY KEY,
|
|
87
|
-
app_name TEXT NOT NULL,
|
|
88
|
-
user_id TEXT NOT NULL,
|
|
89
|
-
session_id TEXT NOT NULL,
|
|
90
|
-
session_json ${types.json} NOT NULL,
|
|
91
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
92
|
-
)`,
|
|
93
|
-
`CREATE INDEX IF NOT EXISTS ${tableName}_identity_idx ON ${tableName} (app_name, user_id, session_id)`
|
|
94
|
-
];
|
|
95
|
-
};
|
|
96
|
-
const workflowStateStatements = (dialect, tableName) => {
|
|
97
|
-
const types = sqlTypes(dialect);
|
|
98
|
-
return [
|
|
99
|
-
`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
100
|
-
workflow_state_key TEXT PRIMARY KEY,
|
|
101
|
-
app_name TEXT NOT NULL,
|
|
102
|
-
user_id TEXT NOT NULL,
|
|
103
|
-
session_id TEXT NOT NULL,
|
|
104
|
-
workflow_key TEXT NOT NULL,
|
|
105
|
-
run_id TEXT NOT NULL,
|
|
106
|
-
status TEXT NOT NULL,
|
|
107
|
-
state_json ${types.json} NOT NULL,
|
|
108
|
-
created_at_ms ${types.bigint} NOT NULL,
|
|
109
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
110
|
-
)`,
|
|
111
|
-
`CREATE INDEX IF NOT EXISTS ${tableName}_list_idx ON ${tableName} (app_name, user_id, session_id, workflow_key, status, updated_at_ms)`
|
|
112
|
-
];
|
|
113
|
-
};
|
|
114
|
-
const artifactStatements = (dialect, tableName) => {
|
|
115
|
-
const types = sqlTypes(dialect);
|
|
116
|
-
return [
|
|
117
|
-
`CREATE TABLE IF NOT EXISTS ${tableName} (
|
|
118
|
-
artifact_key TEXT PRIMARY KEY,
|
|
119
|
-
app_name TEXT NOT NULL,
|
|
120
|
-
user_id TEXT NOT NULL,
|
|
121
|
-
session_id TEXT NOT NULL,
|
|
122
|
-
artifact_id TEXT NOT NULL,
|
|
123
|
-
workflow_run_id TEXT,
|
|
124
|
-
workflow_step_id TEXT,
|
|
125
|
-
agent_run_id TEXT,
|
|
126
|
-
artifact_json ${types.json} NOT NULL,
|
|
127
|
-
created_at_ms ${types.bigint} NOT NULL,
|
|
128
|
-
updated_at_ms ${types.bigint} NOT NULL
|
|
129
|
-
)`,
|
|
130
|
-
`CREATE INDEX IF NOT EXISTS ${tableName}_list_idx ON ${tableName} (app_name, user_id, session_id, workflow_run_id, workflow_step_id, agent_run_id, created_at_ms)`
|
|
131
|
-
];
|
|
132
|
-
};
|
|
133
|
-
export const createDurableStoreMigrationPlan = (options) => {
|
|
134
|
-
const names = tableNames(options.tableNames);
|
|
135
|
-
const targets = uniqueTargets(options.targets);
|
|
136
|
-
const statements = targets.flatMap((target) => {
|
|
137
|
-
if (target === "agent-runs") {
|
|
138
|
-
return agentRunStatements(options.dialect, names.agentRuns);
|
|
139
|
-
}
|
|
140
|
-
if (target === "agent-memory") {
|
|
141
|
-
return agentMemoryStatements(options.dialect, names.agentMemory);
|
|
142
|
-
}
|
|
143
|
-
if (target === "sessions") {
|
|
144
|
-
return sessionStatements(options.dialect, names.sessions);
|
|
145
|
-
}
|
|
146
|
-
if (target === "workflow-states") {
|
|
147
|
-
return workflowStateStatements(options.dialect, names.workflowStates);
|
|
148
|
-
}
|
|
149
|
-
return artifactStatements(options.dialect, names.artifacts);
|
|
150
|
-
});
|
|
151
|
-
return {
|
|
152
|
-
schemaVersion: DURABLE_STORE_MIGRATION_PLAN_SCHEMA_VERSION,
|
|
153
|
-
dialect: options.dialect,
|
|
154
|
-
targets,
|
|
155
|
-
statements
|
|
156
|
-
};
|
|
157
|
-
};
|
|
158
|
-
//# sourceMappingURL=durable-store-migration.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"durable-store-migration.js","sourceRoot":"","sources":["../src/durable-store-migration.ts"],"names":[],"mappings":"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"}
|