@vantageos/agent-engine 0.1.0-alpha.7 → 0.1.0-alpha.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.
Files changed (2) hide show
  1. package/README.md +127 -49
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,10 +1,12 @@
1
1
  # @vantageos/agent-engine
2
2
 
3
- A reusable [Convex component](https://www.convex.dev/components) that provides
4
- a durable **agent engine**: sessions, delegation, tool approvals, scheduled
5
- "habits", bounded spending "mandates", and long-task survival — all built on
6
- top of [`@convex-dev/workflow`](https://www.npmjs.com/package/@convex-dev/workflow)
7
- and [`@convex-dev/workpool`](https://www.npmjs.com/package/@convex-dev/workpool).
3
+ A reusable [Convex component](https://www.convex.dev/components) that
4
+ provides a durable **agent engine**: sessions, delegation, tool approvals,
5
+ scheduled "habits", bounded spending "mandates", and long-task survival —
6
+ all built on top of
7
+ [`@convex-dev/workflow`](https://www.npmjs.com/package/@convex-dev/workflow)
8
+ and
9
+ [`@convex-dev/workpool`](https://www.npmjs.com/package/@convex-dev/workpool).
8
10
 
9
11
  **An agent is a data aggregate, not compiled code.** Creating an agent means
10
12
  writing a row (plus child rows for skills, tool approvals, connections,
@@ -77,61 +79,137 @@ scoped by `orgId` first, deny-by-default.
77
79
  ### API surface (component/, current release)
78
80
 
79
81
  ```
80
- components.agentEngine.engine.agents.create({ orgId, createdBy, name, description?, instructions, model, reasoningEffort?, modelProvider?, maxSubagents?, maxInputTokensPerSession? }) -> Id<"agents">
82
+ components.agentEngine.engine.agents.create({
83
+ orgId, createdBy, name, description?, instructions, model,
84
+ reasoningEffort?, modelProvider?, maxSubagents?,
85
+ maxInputTokensPerSession?,
86
+ }) -> Id<"agents">
81
87
  components.agentEngine.engine.agents.get({ orgId, agentId }) -> agent | null
82
88
 
83
- components.agentEngine.engine.directory.listByOrg({ orgId }) -> { _id, name, status, model, createdAt }[]
84
-
85
- components.agentEngine.engine.resolvers.resolveManifest({ orgId, sessionId }) -> { agentId, name, instructions, model, toolApprovals[] }
86
-
87
- components.agentEngine.engine.sessions.start({ orgId, agentId, createdBy }) -> { sessionId: Id<"sessions">, workflowId: string }
88
- components.agentEngine.engine.sessions.sendTurn({ orgId, sessionId, input }) -> null
89
- components.agentEngine.engine.sessions.appendReasoning({ orgId, sessionId, chunk }) -> null
90
- components.agentEngine.engine.sessions.requestToolCall({ orgId, sessionId, toolName, argsJson }) -> { authorized, approvalPending, denied }
91
- components.agentEngine.engine.sessions.completeToolCall({ orgId, sessionId, toolName, resultJson }) -> null
92
- components.agentEngine.engine.sessions.completeTurn({ orgId, sessionId }) -> null
93
- components.agentEngine.engine.sessions.listEvents({ orgId, sessionId }) -> sessionEvent[]
94
-
95
- components.agentEngine.engine.toolApprovals.respond({ orgId, sessionId, toolName, decision: "approved"|"denied", updatePolicy?: "always"|"once"|"never" }) -> null
96
-
97
- components.agentEngine.engine.wakeup.enqueue({ orgId, agentId, mandateScope, cost, reason, workFunctionHandle, workflowId, awaitedEventName }) -> Id<"wakeableWork"> (action)
89
+ components.agentEngine.engine.directory.listByOrg({ orgId })
90
+ -> { _id, name, status, model, createdAt }[]
91
+
92
+ components.agentEngine.engine.resolvers.resolveManifest({
93
+ orgId, sessionId,
94
+ }) -> { agentId, name, instructions, model, toolApprovals[] }
95
+
96
+ components.agentEngine.engine.sessions.start({
97
+ orgId, agentId, createdBy,
98
+ }) -> { sessionId: Id<"sessions">, workflowId: string }
99
+ components.agentEngine.engine.sessions.sendTurn({
100
+ orgId, sessionId, input,
101
+ }) -> null
102
+ components.agentEngine.engine.sessions.appendReasoning({
103
+ orgId, sessionId, chunk,
104
+ }) -> null
105
+ components.agentEngine.engine.sessions.requestToolCall({
106
+ orgId, sessionId, toolName, argsJson,
107
+ }) -> { authorized, approvalPending, denied }
108
+ components.agentEngine.engine.sessions.completeToolCall({
109
+ orgId, sessionId, toolName, resultJson,
110
+ }) -> null
111
+ components.agentEngine.engine.sessions.completeTurn({
112
+ orgId, sessionId,
113
+ }) -> null
114
+ components.agentEngine.engine.sessions.listEvents({
115
+ orgId, sessionId,
116
+ }) -> sessionEvent[]
117
+
118
+ components.agentEngine.engine.toolApprovals.respond({
119
+ orgId, sessionId, toolName,
120
+ decision: "approved"|"denied",
121
+ updatePolicy?: "always"|"once"|"never",
122
+ }) -> null
123
+
124
+ components.agentEngine.engine.wakeup.enqueue({
125
+ orgId, agentId, mandateScope, cost, reason,
126
+ workFunctionHandle, workflowId, awaitedEventName,
127
+ }) -> Id<"wakeableWork"> (action)
98
128
  components.agentEngine.engine.wakeup.cancel({ orgId, wakeableWorkId }) -> null
99
- components.agentEngine.engine.wakeup.getStatus({ orgId, wakeableWorkId }) -> { status, resultSummary?, ... }
100
-
101
- components.agentEngine.engine.durableJob.start({ orgId, kind, stepFunctionHandle, totalSteps, maxAttemptsPerStep }) -> Id<"durableJobs">
102
- components.agentEngine.engine.durableJob.getStatus({ orgId, jobId }) -> { status, cursor, totalSteps, lastError?, abandonedAtStep? }
129
+ components.agentEngine.engine.wakeup.getStatus({
130
+ orgId, wakeableWorkId,
131
+ }) -> { status, resultSummary?, ... }
132
+
133
+ components.agentEngine.engine.durableJob.start({
134
+ orgId, kind, stepFunctionHandle, totalSteps, maxAttemptsPerStep,
135
+ }) -> Id<"durableJobs">
136
+ components.agentEngine.engine.durableJob.getStatus({ orgId, jobId })
137
+ -> { status, cursor, totalSteps, lastError?, abandonedAtStep? }
103
138
  components.agentEngine.engine.durableJob.cancel({ orgId, jobId }) -> null
104
139
 
105
- components.agentEngine.engine.mandates.set({ orgId, agentId, scope, kind, rate, period, capacity? }) -> Id<"mandates">
106
- components.agentEngine.engine.mandates.get({ orgId, agentId, scope }) -> mandate | null
107
- components.agentEngine.engine.mandates.spend({ orgId, agentId, scope, cost, reason }) -> { ok, approvalId? }
108
- components.agentEngine.engine.mandates.listApprovals({ orgId, agentId }) -> approvalRequest[]
109
- components.agentEngine.engine.mandates.resolveApproval({ orgId, approvalId, resolvedBy, status: "approved"|"denied" }) -> null
110
- components.agentEngine.engine.mandates.usageCount({ orgId, agentId, scope }) -> number
111
-
112
- components.agentEngine.engine.habits.create({ orgId, agentId, name, cronExpression, prompt }) -> Id<"habits">
140
+ components.agentEngine.engine.mandates.set({
141
+ orgId, agentId, scope, kind, rate, period, capacity?,
142
+ }) -> Id<"mandates">
143
+ components.agentEngine.engine.mandates.get({
144
+ orgId, agentId, scope,
145
+ }) -> mandate | null
146
+ components.agentEngine.engine.mandates.spend({
147
+ orgId, agentId, scope, cost, reason,
148
+ }) -> { ok, approvalId? }
149
+ components.agentEngine.engine.mandates.listApprovals({
150
+ orgId, agentId,
151
+ }) -> approvalRequest[]
152
+ components.agentEngine.engine.mandates.resolveApproval({
153
+ orgId, approvalId, resolvedBy, status: "approved"|"denied",
154
+ }) -> null
155
+ components.agentEngine.engine.mandates.usageCount({
156
+ orgId, agentId, scope,
157
+ }) -> number
158
+
159
+ components.agentEngine.engine.habits.create({
160
+ orgId, agentId, name, cronExpression, prompt,
161
+ }) -> Id<"habits">
113
162
  components.agentEngine.engine.habits.get({ orgId, habitId }) -> habit | null
114
163
  components.agentEngine.engine.habits.listForAgent({ orgId, agentId }) -> habit[]
115
- components.agentEngine.engine.habits.updateSchedule({ orgId, habitId, cronExpression }) -> null
164
+ components.agentEngine.engine.habits.updateSchedule({
165
+ orgId, habitId, cronExpression,
166
+ }) -> null
116
167
  components.agentEngine.engine.habits.disable({ orgId, habitId }) -> null
117
168
  components.agentEngine.engine.habits.enable({ orgId, habitId }) -> null
118
169
  components.agentEngine.engine.habits.listRuns({ orgId, habitId }) -> habitRun[]
119
170
 
120
- components.agentEngine.engine.sandboxCallback.startRun({ orgId, workflowId, awaitedEventName, timeoutMs }) -> Id<"sandboxRuns">
121
- components.agentEngine.engine.sandboxCallback.attachSandboxId({ orgId, sandboxRunId, sandboxId }) -> null
122
- components.agentEngine.engine.sandboxCallback.getStatus({ orgId, sandboxRunId }) -> { status, resultSummary?, ... }
123
- components.agentEngine.engine.sandboxCallback.processCallback({ orgId, sandboxRunId, deliveryId, status, resultSummary? }) -> { outcome: "woke"|"duplicate" }
124
- components.agentEngine.engine.sandboxCallback.deadLetterMalformed({ orgId?, deliveryId, reason, rawBody }) -> null
125
-
126
- components.agentEngine.engine.delegation.declareSubagent({ orgId, parentAgentId, childAgentId, toolName, description? }) -> Id<"subagents">
127
- components.agentEngine.engine.delegation.listSubagents({ orgId, parentAgentId }) -> subagent[]
128
- components.agentEngine.engine.delegation.delegateToSubagent({ orgId, subagentId, ... }) -> null (action)
129
- components.agentEngine.engine.delegation.invokeAgentClone({ orgId, agentId, ... }) -> null (action; root-only, non-recursive by construction)
130
-
131
- components.agentEngine.engine.vpConnection.get({ orgId, agentId }) -> vpConnection | null
132
- components.agentEngine.engine.vpConnection.getToggles({ orgId, agentId }) -> { memoryEnabled, tasksEnabled, messagesEnabled, notesEnabled }
133
- components.agentEngine.engine.vpConnection.setToggles({ orgId, agentId, memoryEnabled?, tasksEnabled?, messagesEnabled?, notesEnabled? }) -> Id<"vpConnections">
134
- components.agentEngine.engine.vpConnection.invokeVpTool({ orgId, agentId, tool, vpFunctionHandle, argsJson }) -> null (action)
171
+ components.agentEngine.engine.sandboxCallback.startRun({
172
+ orgId, workflowId, awaitedEventName, timeoutMs,
173
+ }) -> Id<"sandboxRuns">
174
+ components.agentEngine.engine.sandboxCallback.attachSandboxId({
175
+ orgId, sandboxRunId, sandboxId,
176
+ }) -> null
177
+ components.agentEngine.engine.sandboxCallback.getStatus({
178
+ orgId, sandboxRunId,
179
+ }) -> { status, resultSummary?, ... }
180
+ components.agentEngine.engine.sandboxCallback.processCallback({
181
+ orgId, sandboxRunId, deliveryId, status, resultSummary?,
182
+ }) -> { outcome: "woke"|"duplicate" }
183
+ components.agentEngine.engine.sandboxCallback.deadLetterMalformed({
184
+ orgId?, deliveryId, reason, rawBody,
185
+ }) -> null
186
+
187
+ components.agentEngine.engine.delegation.declareSubagent({
188
+ orgId, parentAgentId, childAgentId, toolName, description?,
189
+ }) -> Id<"subagents">
190
+ components.agentEngine.engine.delegation.listSubagents({
191
+ orgId, parentAgentId,
192
+ }) -> subagent[]
193
+ components.agentEngine.engine.delegation.delegateToSubagent({
194
+ orgId, subagentId, ...,
195
+ }) -> null (action)
196
+ components.agentEngine.engine.delegation.invokeAgentClone({
197
+ orgId, agentId, ...,
198
+ }) -> null (action; root-only, non-recursive by construction)
199
+
200
+ components.agentEngine.engine.vpConnection.get({
201
+ orgId, agentId,
202
+ }) -> vpConnection | null
203
+ components.agentEngine.engine.vpConnection.getToggles({
204
+ orgId, agentId,
205
+ }) -> { memoryEnabled, tasksEnabled, messagesEnabled, notesEnabled }
206
+ components.agentEngine.engine.vpConnection.setToggles({
207
+ orgId, agentId, memoryEnabled?, tasksEnabled?,
208
+ messagesEnabled?, notesEnabled?,
209
+ }) -> Id<"vpConnections">
210
+ components.agentEngine.engine.vpConnection.invokeVpTool({
211
+ orgId, agentId, tool, vpFunctionHandle, argsJson,
212
+ }) -> null (action)
135
213
  ```
136
214
 
137
215
  ### Concepts
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vantageos/agent-engine",
3
- "version": "0.1.0-alpha.7",
3
+ "version": "0.1.0-alpha.8",
4
4
  "description": "Reusable Convex component: durable agent engine. Agent = data aggregate (root sheet + child tables), never compiled code. Built on @convex-dev/workflow + @convex-dev/workpool (+ @convex-dev/agent). Eve parity by design.",
5
5
  "type": "module",
6
6
  "license": "FSL-1.1-Apache-2.0",