@rivet-dev/pi 0.1.0 → 0.5.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.
- package/LICENSE +190 -0
- package/dist/actions.d.ts +188 -77
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +276 -103
- package/dist/actions.js.map +1 -1
- package/dist/actor-config.d.ts +32 -0
- package/dist/actor-config.d.ts.map +1 -0
- package/dist/actor-config.js +86 -0
- package/dist/actor-config.js.map +1 -0
- package/dist/actor-sqlite.d.ts +10 -0
- package/dist/actor-sqlite.d.ts.map +1 -0
- package/dist/actor-sqlite.js +32 -0
- package/dist/actor-sqlite.js.map +1 -0
- package/dist/actor-types.d.ts +34 -0
- package/dist/actor-types.d.ts.map +1 -0
- package/dist/actor-types.js +2 -0
- package/dist/actor-types.js.map +1 -0
- package/dist/actor.d.ts +27 -15
- package/dist/actor.d.ts.map +1 -1
- package/dist/actor.js +71 -78
- package/dist/actor.js.map +1 -1
- package/dist/credentials.d.ts +3 -4
- package/dist/credentials.d.ts.map +1 -1
- package/dist/credentials.js +11 -38
- package/dist/credentials.js.map +1 -1
- package/dist/drain.d.ts +12 -0
- package/dist/drain.d.ts.map +1 -0
- package/dist/drain.js +20 -0
- package/dist/drain.js.map +1 -0
- package/dist/durable.d.ts +24 -0
- package/dist/durable.d.ts.map +1 -0
- package/dist/durable.js +5 -0
- package/dist/durable.js.map +1 -0
- package/dist/errors.d.ts +8 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +19 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +5 -4
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.js.map +1 -1
- package/dist/models.d.ts +7 -33
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +4 -67
- package/dist/models.js.map +1 -1
- package/dist/runtime.d.ts +111 -43
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +444 -225
- package/dist/runtime.js.map +1 -1
- package/dist/storage.d.ts +27 -28
- package/dist/storage.d.ts.map +1 -1
- package/dist/storage.js +33 -55
- package/dist/storage.js.map +1 -1
- package/dist/tracing.d.ts +7 -4
- package/dist/tracing.d.ts.map +1 -1
- package/dist/tracing.js +11 -12
- package/dist/tracing.js.map +1 -1
- package/dist/watches.d.ts +77 -0
- package/dist/watches.d.ts.map +1 -0
- package/dist/watches.js +245 -0
- package/dist/watches.js.map +1 -0
- package/package.json +38 -15
- package/dist/sandbox.d.ts +0 -21
- package/dist/sandbox.d.ts.map +0 -1
- package/dist/sandbox.js +0 -185
- package/dist/sandbox.js.map +0 -1
package/dist/actions.js
CHANGED
|
@@ -1,116 +1,289 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { UserError } from "rivetkit";
|
|
2
|
+
import { assertModelAllowed } from "./models.js";
|
|
3
|
+
import { documentsByKind, piRuntime, withHarness, } from "./runtime.js";
|
|
3
4
|
import { traceRun } from "./tracing.js";
|
|
5
|
+
import { unwatch, watch } from "./watches.js";
|
|
6
|
+
/**
|
|
7
|
+
* The `pi()` actions: Pi Durable's `Harness`, `Conversation`, and
|
|
8
|
+
* `Submission` methods under `harness`, `conversation`, and `submission`, with
|
|
9
|
+
* the same names. Ids replace objects, and conversation methods take the
|
|
10
|
+
* conversation id first. `prompt` is the one convenience action.
|
|
11
|
+
*/
|
|
4
12
|
export function createPiActions(options) {
|
|
5
|
-
|
|
6
|
-
const
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
13
|
+
const documents = documentsByKind(options);
|
|
14
|
+
const run = (c, body) => withHarness(c, options, body);
|
|
15
|
+
const agentChange = (change) => change === undefined ? undefined : resolveAgentChange(options, change);
|
|
16
|
+
/**
|
|
17
|
+
* Starts a watch for the calling connection. Frames go to that connection
|
|
18
|
+
* only. `T` is the starting value `start` in `watches.ts` returns for the
|
|
19
|
+
* kind in `spec`; each action below names it.
|
|
20
|
+
*/
|
|
21
|
+
const watchFor = (c, spec) => run(c, async (harness, context) => {
|
|
22
|
+
const connId = connectionId(c);
|
|
23
|
+
const runtime = piRuntime(c);
|
|
24
|
+
return (await watch(runtime.actor ?? c, runtime.watches, harness, documents, connId, spec, () => requireWatchTarget(harness, spec, context)));
|
|
25
|
+
});
|
|
26
|
+
const unwatchFor = (c, spec) => run(c, async () => {
|
|
27
|
+
const runtime = piRuntime(c);
|
|
28
|
+
await unwatch(runtime.actor ?? c, runtime.watches, connectionId(c), spec);
|
|
29
|
+
});
|
|
30
|
+
const requireWatchTarget = async (harness, spec, context) => {
|
|
31
|
+
if (spec.kind === "doc")
|
|
32
|
+
requireDocument(spec.docKind);
|
|
33
|
+
if (spec.kind !== "taskGraph")
|
|
34
|
+
await requireConversation(harness, spec.conversationId, context);
|
|
35
|
+
};
|
|
36
|
+
const requireDocument = (kind) => {
|
|
37
|
+
const doc = documents.get(kind);
|
|
38
|
+
if (!doc) {
|
|
39
|
+
throw new UserError(`Document ${kind} is not listed in pi({ documents }).`);
|
|
19
40
|
}
|
|
20
|
-
|
|
21
|
-
return result;
|
|
41
|
+
return doc;
|
|
22
42
|
};
|
|
43
|
+
// Ids arrive as plain numbers and are cast to Pi's branded id types. Pi's
|
|
44
|
+
// lookups check that each one exists, and a missing one is a `UserError`.
|
|
23
45
|
return {
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
46
|
+
harness: {
|
|
47
|
+
root: (c, rootOptions) => run(c, async (harness, context) => ({
|
|
48
|
+
id: (await harness.root(context, {
|
|
49
|
+
agent: agentChange(rootOptions?.agent),
|
|
50
|
+
})).id,
|
|
51
|
+
})),
|
|
52
|
+
conversation: (c, id) => run(c, (harness, context) => harness.commit((tx) => tx.conversation(id), context)),
|
|
53
|
+
createConversation: (c, create) => run(c, async (harness, context) => ({
|
|
54
|
+
id: (await harness.createConversation({ ownership: create.ownership, agent: agentChange(create.agent) }, context)).id,
|
|
55
|
+
})),
|
|
56
|
+
submission: (c, id) => run(c, async (harness, context) => (await harness.submission(id, context))?.status(context)),
|
|
57
|
+
abortSubmission: (c, id, conversationId) => run(c, async (harness, context) => {
|
|
58
|
+
const result = await harness.abortSubmission(id, context, conversationId);
|
|
59
|
+
if (result === "not_found")
|
|
60
|
+
throw submissionNotFound(id);
|
|
61
|
+
return result;
|
|
62
|
+
}),
|
|
63
|
+
getTask: (c, id) => run(c, (harness, context) => harness.getTask(id, context)),
|
|
64
|
+
abortTask: (c, id) => run(c, async (harness, context) => {
|
|
65
|
+
await requireTask(harness, id, context);
|
|
66
|
+
return harness.abortTask(id, context);
|
|
67
|
+
}),
|
|
68
|
+
waitForTask: (c, id) => run(c, async (harness, context) => {
|
|
69
|
+
await requireTask(harness, id, context);
|
|
70
|
+
return harness.waitForTask(id, context);
|
|
71
|
+
}),
|
|
72
|
+
waitForIdle: (c) => run(c, (harness, context) => harness.waitForIdle(context)),
|
|
73
|
+
inspect: (c) => run(c, async (harness, context) => {
|
|
74
|
+
const inspection = await harness.inspect(context);
|
|
75
|
+
return {
|
|
76
|
+
...inspection,
|
|
77
|
+
// A migration failure carries an Error, which does not cross the wire.
|
|
78
|
+
tasks: inspection.tasks.map((task) => task.state.kind === "blocked" && task.state.error !== undefined
|
|
79
|
+
? {
|
|
80
|
+
...task,
|
|
81
|
+
state: {
|
|
82
|
+
...task.state,
|
|
83
|
+
error: errorMessage(task.state.error),
|
|
84
|
+
},
|
|
85
|
+
}
|
|
86
|
+
: task),
|
|
87
|
+
};
|
|
88
|
+
}),
|
|
89
|
+
usage: (c) => run(c, (harness, context) => harness.usage(context)),
|
|
90
|
+
taskGraph: (c) => run(c, async (harness, context) => {
|
|
91
|
+
const graph = await harness.taskGraph(context);
|
|
92
|
+
try {
|
|
93
|
+
return graph.value;
|
|
94
|
+
}
|
|
95
|
+
finally {
|
|
96
|
+
graph.dispose();
|
|
97
|
+
}
|
|
98
|
+
}),
|
|
99
|
+
snapshot: (c, kind, conversationId) => run(c, async (harness, context) => harness.snapshot(requireDocument(kind), conversationId, context)),
|
|
100
|
+
/** The task graph; then `pi.taskGraph` frames to this connection. */
|
|
101
|
+
watchTaskGraph: (c) => watchFor(c, { kind: "taskGraph" }),
|
|
102
|
+
unwatchTaskGraph: (c) => unwatchFor(c, { kind: "taskGraph" }),
|
|
103
|
+
/**
|
|
104
|
+
* The document's value; then `pi.doc` frames to this connection. A
|
|
105
|
+
* document that does not exist yet has value `undefined`, and its
|
|
106
|
+
* first frame arrives when a commit creates it.
|
|
107
|
+
*/
|
|
108
|
+
watchDoc: (c, kind, conversationId) => watchFor(c, {
|
|
109
|
+
kind: "doc",
|
|
110
|
+
docKind: kind,
|
|
111
|
+
conversationId,
|
|
112
|
+
}),
|
|
113
|
+
unwatchDoc: (c, kind, conversationId) => unwatchFor(c, { kind: "doc", docKind: kind, conversationId }),
|
|
114
|
+
},
|
|
115
|
+
conversation: {
|
|
116
|
+
agent: (c, conversationId) => run(c, async (harness, context) => agentInfo(await (await requireConversation(harness, conversationId, context)).agent(context))),
|
|
117
|
+
configure: (c, conversationId, change) => run(c, async (harness, context) => {
|
|
118
|
+
const resolved = resolveAgentChange(options, change);
|
|
119
|
+
await (await requireConversation(harness, conversationId, context)).configure(resolved, context);
|
|
120
|
+
}),
|
|
121
|
+
submit: (c, conversationId, draft) => run(c, async (harness, context) => (await (await requireConversation(harness, conversationId, context)).submit(draft, context)).status(context)),
|
|
122
|
+
reset: (c, conversationId, handoff) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).reset(handoff, context)),
|
|
123
|
+
compact: (c, conversationId, instructions) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).compact(instructions, context)),
|
|
124
|
+
context: (c, conversationId) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).context(context)),
|
|
125
|
+
entries: (c, conversationId, query, limit, cursor) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).entries(query, limit, cursor, context)),
|
|
126
|
+
fork: (c, conversationId, at, fork) => run(c, async (harness, context) => {
|
|
127
|
+
const conversation = await requireConversation(harness, conversationId, context);
|
|
128
|
+
const forked = await conversation.fork(at, { ownership: fork.ownership, agent: agentChange(fork.agent) }, context);
|
|
129
|
+
return { id: forked.id };
|
|
130
|
+
}),
|
|
131
|
+
abort: (c, conversationId, abortOptions) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).abort(context, abortOptions)),
|
|
132
|
+
waitForIdle: (c, conversationId) => run(c, async (harness, context) => (await requireConversation(harness, conversationId, context)).waitForIdle(context)),
|
|
133
|
+
/** The structural view; then `pi.view` frames with Chord operations to this connection. */
|
|
134
|
+
watch: (c, conversationId) => watchFor(c, {
|
|
135
|
+
kind: "view",
|
|
136
|
+
conversationId,
|
|
137
|
+
}),
|
|
138
|
+
unwatch: (c, conversationId) => unwatchFor(c, { kind: "view", conversationId }),
|
|
139
|
+
/** A snapshot, partial answer included; then `pi.events` batches to this connection. Nothing is replayed. */
|
|
140
|
+
watchEvents: (c, conversationId) => watchFor(c, {
|
|
141
|
+
kind: "events",
|
|
142
|
+
conversationId,
|
|
143
|
+
}),
|
|
144
|
+
unwatchEvents: (c, conversationId) => unwatchFor(c, { kind: "events", conversationId }),
|
|
145
|
+
},
|
|
146
|
+
submission: {
|
|
147
|
+
status: (c, id) => run(c, async (harness, context) => (await requireSubmission(harness, id, context)).status(context)),
|
|
148
|
+
wait: (c, id) => run(c, async (harness, context) => (await requireSubmission(harness, id, context)).wait(context)),
|
|
149
|
+
abort: (c, id) => run(c, async (harness, context) => (await requireSubmission(harness, id, context)).abort(context)),
|
|
150
|
+
},
|
|
151
|
+
/**
|
|
152
|
+
* Submits user input, waits for the run to settle, and returns the
|
|
153
|
+
* answer's text. A model error does not reject: the status is
|
|
154
|
+
* `unanswered` with Pi's reason.
|
|
155
|
+
*/
|
|
156
|
+
prompt: (c, content, promptOptions) => run(c, async (harness, context) => {
|
|
157
|
+
const conversation = promptOptions?.conversationId === undefined
|
|
158
|
+
? await harness.root(context)
|
|
159
|
+
: await requireConversation(harness, promptOptions.conversationId, context);
|
|
160
|
+
const submission = await conversation.submit({
|
|
161
|
+
type: "input",
|
|
162
|
+
content,
|
|
163
|
+
requestId: promptOptions?.requestId,
|
|
164
|
+
whenBusy: promptOptions?.whenBusy,
|
|
165
|
+
}, context);
|
|
166
|
+
const model = (await conversation.agent(context)).model;
|
|
167
|
+
const settled = await traceRun(c.actorId, conversation.id, model && `${model.provider}/${model.modelId}`, () => submission.wait(context));
|
|
168
|
+
if (settled.status === "unanswered") {
|
|
169
|
+
return {
|
|
170
|
+
status: settled.status,
|
|
171
|
+
reason: settled.reason,
|
|
172
|
+
submissionId: submission.id,
|
|
173
|
+
};
|
|
32
174
|
}
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
abort: (c) => mutate(c, ({ session }) => session.abort()),
|
|
41
|
-
waitForIdle: (c) => read(c, ({ session }) => session.waitForIdle()),
|
|
42
|
-
getAvailableModels: (c) => read(c, async (handle) => {
|
|
43
|
-
await reloadCredentials(handle);
|
|
44
|
-
return availableModels(options, handle.session);
|
|
45
|
-
}),
|
|
46
|
-
setModel: (c, provider, modelId) => mutate(c, async (handle) => {
|
|
47
|
-
await reloadCredentials(handle);
|
|
48
|
-
await switchModel(options, handle.session, provider, modelId);
|
|
175
|
+
return {
|
|
176
|
+
status: settled.status,
|
|
177
|
+
text: settled.type === "input"
|
|
178
|
+
? await answerText(conversation, settled.answer, context)
|
|
179
|
+
: undefined,
|
|
180
|
+
submissionId: submission.id,
|
|
181
|
+
};
|
|
49
182
|
}),
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
getActiveToolNames: (c) => read(c, ({ session }) => session.getActiveToolNames()),
|
|
55
|
-
getCallableToolNames: (c) => read(c, ({ session }) => session.getCallableToolNames()),
|
|
56
|
-
getAllTools: (c) => read(c, ({ session }) => session.getAllTools()),
|
|
57
|
-
setActiveToolsByName: (c, ...args) => mutate(c, ({ session }) => session.setActiveToolsByName(...args)),
|
|
58
|
-
executeBash: (c, command, bashOptions) => mutate(c, ({ session, bashOperations }) => {
|
|
59
|
-
if (!bashOperations) {
|
|
60
|
-
throw new Error("executeBash needs a sandbox; this pi() actor has none configured");
|
|
61
|
-
}
|
|
62
|
-
return session.executeBash(command, undefined, {
|
|
63
|
-
...bashOptions,
|
|
64
|
-
operations: bashOperations,
|
|
65
|
-
});
|
|
66
|
-
}),
|
|
67
|
-
abortBash: (c) => read(c, ({ session }) => session.abortBash()),
|
|
68
|
-
setSteeringMode: (c, ...args) => mutate(c, ({ session }) => session.setSteeringMode(...args)),
|
|
69
|
-
setFollowUpMode: (c, ...args) => mutate(c, ({ session }) => session.setFollowUpMode(...args)),
|
|
70
|
-
compact: (c, ...args) => mutate(c, ({ session }) => session.compact(...args)),
|
|
71
|
-
abortCompaction: (c) => read(c, ({ session }) => session.abortCompaction()),
|
|
72
|
-
setAutoCompactionEnabled: (c, ...args) => mutate(c, ({ session }) => session.setAutoCompactionEnabled(...args)),
|
|
73
|
-
abortRetry: (c) => read(c, ({ session }) => session.abortRetry()),
|
|
74
|
-
setAutoRetryEnabled: (c, ...args) => mutate(c, ({ session }) => session.setAutoRetryEnabled(...args)),
|
|
75
|
-
setSessionName: (c, ...args) => mutate(c, ({ session }) => session.setSessionName(...args)),
|
|
76
|
-
navigateTree: (c, ...args) => mutate(c, ({ session }) => session.navigateTree(...args)),
|
|
77
|
-
getSessionTree: (c) => read(c, ({ session }) => session.sessionManager.getTree()),
|
|
78
|
-
getSession: (c) => read(c, ({ session, cwd }) => ({
|
|
79
|
-
sessionId: session.sessionId,
|
|
80
|
-
sessionName: session.sessionName,
|
|
81
|
-
cwd,
|
|
82
|
-
model: session.model,
|
|
83
|
-
thinkingLevel: session.thinkingLevel,
|
|
84
|
-
isStreaming: session.isStreaming,
|
|
85
|
-
isIdle: session.isIdle,
|
|
86
|
-
isCompacting: session.isCompacting,
|
|
87
|
-
isRetrying: session.isRetrying,
|
|
88
|
-
isBashRunning: session.isBashRunning,
|
|
89
|
-
pendingMessageCount: session.pendingMessageCount,
|
|
90
|
-
activeTools: session.getActiveToolNames(),
|
|
91
|
-
steeringMode: session.steeringMode,
|
|
92
|
-
followUpMode: session.followUpMode,
|
|
93
|
-
autoCompactionEnabled: session.autoCompactionEnabled,
|
|
94
|
-
autoRetryEnabled: session.autoRetryEnabled,
|
|
95
|
-
retryAttempt: session.retryAttempt,
|
|
96
|
-
})),
|
|
97
|
-
getMessages: (c) => read(c, ({ session }) => session.messages),
|
|
98
|
-
getSteeringMessages: (c) => read(c, ({ session }) => [...session.getSteeringMessages()]),
|
|
99
|
-
getFollowUpMessages: (c) => read(c, ({ session }) => [...session.getFollowUpMessages()]),
|
|
100
|
-
getSessionStats: (c) => read(c, ({ session }) => session.getSessionStats()),
|
|
101
|
-
getContextUsage: (c) => read(c, ({ session }) => session.getContextUsage()),
|
|
102
|
-
getLastAssistantText: (c) => read(c, ({ session }) => session.getLastAssistantText()),
|
|
183
|
+
pi: {
|
|
184
|
+
/** Scheduled at the end of a long wait. Opening the harness resumes the waiting work. */
|
|
185
|
+
wake: (c) => run(c, async () => { }),
|
|
186
|
+
},
|
|
103
187
|
};
|
|
104
188
|
}
|
|
105
189
|
/**
|
|
106
|
-
*
|
|
107
|
-
*
|
|
190
|
+
* The calling connection, which receives the watch's frames. A stateless call
|
|
191
|
+
* gets the starting value, and its watch ends with the request. Only a call
|
|
192
|
+
* with no connection at all, such as a scheduled action, cannot watch.
|
|
193
|
+
*/
|
|
194
|
+
function connectionId(c) {
|
|
195
|
+
const conn = c.conn;
|
|
196
|
+
if (!conn) {
|
|
197
|
+
throw new UserError("Watching needs a calling connection. Call it from a client handle, and use connect() to receive frames.");
|
|
198
|
+
}
|
|
199
|
+
return conn.id;
|
|
200
|
+
}
|
|
201
|
+
async function requireConversation(harness, id, context) {
|
|
202
|
+
const conversation = await harness.conversation(id, context);
|
|
203
|
+
if (!conversation) {
|
|
204
|
+
throw new UserError(`Conversation ${id} does not exist.`);
|
|
205
|
+
}
|
|
206
|
+
return conversation;
|
|
207
|
+
}
|
|
208
|
+
async function requireSubmission(harness, id, context) {
|
|
209
|
+
const submission = await harness.submission(id, context);
|
|
210
|
+
if (!submission)
|
|
211
|
+
throw submissionNotFound(id);
|
|
212
|
+
return submission;
|
|
213
|
+
}
|
|
214
|
+
function submissionNotFound(id) {
|
|
215
|
+
return new UserError(`Submission ${id} does not exist.`);
|
|
216
|
+
}
|
|
217
|
+
async function requireTask(harness, id, context) {
|
|
218
|
+
if (!(await harness.getTask(id, context))) {
|
|
219
|
+
throw new UserError(`Task ${id} does not exist.`);
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Resolves extension and tool names against the installed registry. A model
|
|
224
|
+
* outside `scopedModels`, or other than `model` when `scopedModels` is unset,
|
|
225
|
+
* is rejected.
|
|
108
226
|
*/
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
227
|
+
function resolveAgentChange(options, change) {
|
|
228
|
+
const snapshot = options.registry.snapshot();
|
|
229
|
+
const extension = (name) => {
|
|
230
|
+
const found = snapshot.extension(name);
|
|
231
|
+
if (!found)
|
|
232
|
+
throw new UserError(`Extension ${name} is not installed.`);
|
|
233
|
+
return found;
|
|
234
|
+
};
|
|
235
|
+
const tool = (name) => {
|
|
236
|
+
const found = snapshot.tools().find((entry) => entry.tool.name === name);
|
|
237
|
+
if (!found)
|
|
238
|
+
throw new UserError(`Tool ${name} is not installed.`);
|
|
239
|
+
return found.tool;
|
|
240
|
+
};
|
|
241
|
+
if (change.model) {
|
|
242
|
+
assertModelAllowed(options, change.model.provider, change.model.modelId);
|
|
243
|
+
}
|
|
244
|
+
const { extensions, tools, ...rest } = change;
|
|
245
|
+
return {
|
|
246
|
+
...rest,
|
|
247
|
+
extensions: extensions === undefined || extensions === null
|
|
248
|
+
? extensions
|
|
249
|
+
: isNameList(extensions)
|
|
250
|
+
? extensions.map(extension)
|
|
251
|
+
: {
|
|
252
|
+
add: extensions.add?.map(extension),
|
|
253
|
+
remove: extensions.remove?.map(extension),
|
|
254
|
+
},
|
|
255
|
+
tools: tools === undefined || tools === null
|
|
256
|
+
? tools
|
|
257
|
+
: isNameList(tools)
|
|
258
|
+
? tools.map(tool)
|
|
259
|
+
: { remove: tools.remove.map(tool) },
|
|
260
|
+
};
|
|
261
|
+
}
|
|
262
|
+
function isNameList(value) {
|
|
263
|
+
return Array.isArray(value);
|
|
264
|
+
}
|
|
265
|
+
function agentInfo(agent) {
|
|
266
|
+
return {
|
|
267
|
+
model: agent.model,
|
|
268
|
+
thinkingLevel: agent.thinkingLevel,
|
|
269
|
+
extensions: agent.extensions.map((extension) => extension.name),
|
|
270
|
+
tools: agent.tools.map((tool) => tool.name),
|
|
271
|
+
sections: agent.sections.map((section) => section.key),
|
|
272
|
+
instructions: agent.instructions,
|
|
273
|
+
cwd: agent.cwd,
|
|
274
|
+
};
|
|
275
|
+
}
|
|
276
|
+
/** The text blocks of the answer entry, which holds the assistant message. */
|
|
277
|
+
async function answerText(conversation, answer, context) {
|
|
278
|
+
const page = await conversation.entries({ minEntryId: answer, maxEntryId: answer }, 1, undefined, context);
|
|
279
|
+
const message = page.items[0]?.model?.[0];
|
|
280
|
+
if (message?.role !== "assistant")
|
|
281
|
+
return undefined;
|
|
282
|
+
return message.content
|
|
283
|
+
.map((block) => (block.type === "text" ? block.text : ""))
|
|
284
|
+
.join("");
|
|
285
|
+
}
|
|
286
|
+
function errorMessage(error) {
|
|
287
|
+
return error instanceof Error ? error.message : String(error);
|
|
115
288
|
}
|
|
116
289
|
//# sourceMappingURL=actions.js.map
|
package/dist/actions.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"actions.js","sourceRoot":"","sources":["../src/actions.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import type { PiContext, PiStop } from "./runtime.js";
|
|
2
|
+
type ActorConfig = Record<string, any>;
|
|
3
|
+
/** Moves the Pi options named in `keys` out of the actor config. */
|
|
4
|
+
export declare function splitConfig<TOptions>(config: object, keys: readonly (keyof TOptions & string)[]): {
|
|
5
|
+
actorConfig: ActorConfig;
|
|
6
|
+
options: TOptions;
|
|
7
|
+
};
|
|
8
|
+
/** Throws when the app's actions or events reuse a built-in name. */
|
|
9
|
+
export declare function assertNoReservedNames(owner: string, actorConfig: ActorConfig, builtIns: {
|
|
10
|
+
action: object;
|
|
11
|
+
event: object;
|
|
12
|
+
}): void;
|
|
13
|
+
/**
|
|
14
|
+
* The app's actor config with what `pi()` adds: longer action and sleep grace defaults, the runtime slot on the app's vars,
|
|
15
|
+
* and shutdown hooks that run the app's hook and then close Pi.
|
|
16
|
+
*/
|
|
17
|
+
export declare function sharedActorConfig(owner: string, actorConfig: ActorConfig, runtime: {
|
|
18
|
+
slot: symbol;
|
|
19
|
+
create: () => object;
|
|
20
|
+
}, close: (c: PiContext, stop: PiStop) => Promise<void>, userHooks: {
|
|
21
|
+
onSleep?: (c: PiContext) => unknown;
|
|
22
|
+
onDestroy?: (c: PiContext) => unknown;
|
|
23
|
+
}): {
|
|
24
|
+
options: any;
|
|
25
|
+
createVars: (c: unknown, driverCtx: unknown) => Promise<any>;
|
|
26
|
+
onSleep: (c: PiContext) => Promise<void>;
|
|
27
|
+
onDestroy: (c: PiContext) => Promise<void>;
|
|
28
|
+
};
|
|
29
|
+
/** Wraps each of the app's actions, including nested ones, so it runs inside `run`. */
|
|
30
|
+
export declare function wrapActions(actions: Record<string, unknown>, run: (c: any, action: () => unknown) => Promise<unknown>): Record<string, unknown>;
|
|
31
|
+
export {};
|
|
32
|
+
//# sourceMappingURL=actor-config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor-config.d.ts","sourceRoot":"","sources":["../src/actor-config.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAKtD,KAAK,WAAW,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAEvC,oEAAoE;AACpE,wBAAgB,WAAW,CAAC,QAAQ,EACnC,MAAM,EAAE,MAAM,EACd,IAAI,EAAE,SAAS,CAAC,MAAM,QAAQ,GAAG,MAAM,CAAC,EAAE,GACxC;IAAE,WAAW,EAAE,WAAW,CAAC;IAAC,OAAO,EAAE,QAAQ,CAAA;CAAE,CAWjD;AAED,qEAAqE;AACrE,wBAAgB,qBAAqB,CACpC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,QAAQ,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACzC,IAAI,CAWN;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAChC,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,WAAW,EACxB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,MAAM,CAAA;CAAE,EAC/C,KAAK,EAAE,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,KAAK,OAAO,CAAC,IAAI,CAAC,EACpD,SAAS,EAAE;IACV,OAAO,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC;IACpC,SAAS,CAAC,EAAE,CAAC,CAAC,EAAE,SAAS,KAAK,OAAO,CAAC;CACtC;;oBAasB,OAAO,aAAa,OAAO;iBAY9B,SAAS;mBAQP,SAAS;EAQ/B;AAED,uFAAuF;AACvF,wBAAgB,WAAW,CAC1B,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,GAAG,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,GACtD,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CASzB"}
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
import { DEFAULT_SLEEP_GRACE_PERIOD_MS, drainDeadline } from "./drain.js";
|
|
2
|
+
/** Ten minutes. Pi waits such as `waitForIdle`, `prompt`, and `submission.wait` outlive RivetKit's one-minute default. */
|
|
3
|
+
const DEFAULT_ACTION_TIMEOUT_MS = 10 * 60_000;
|
|
4
|
+
/** Moves the Pi options named in `keys` out of the actor config. */
|
|
5
|
+
export function splitConfig(config, keys) {
|
|
6
|
+
const actorConfig = { ...config };
|
|
7
|
+
const options = {};
|
|
8
|
+
for (const key of keys) {
|
|
9
|
+
if (key in actorConfig) {
|
|
10
|
+
options[key] = actorConfig[key];
|
|
11
|
+
delete actorConfig[key];
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
// Only the keys of `TOptions` were copied, with the values the caller passed.
|
|
15
|
+
return { actorConfig, options: options };
|
|
16
|
+
}
|
|
17
|
+
/** Throws when the app's actions or events reuse a built-in name. */
|
|
18
|
+
export function assertNoReservedNames(owner, actorConfig, builtIns) {
|
|
19
|
+
for (const [kind, custom] of [
|
|
20
|
+
["action", actorConfig.actions],
|
|
21
|
+
["event", actorConfig.events],
|
|
22
|
+
]) {
|
|
23
|
+
for (const key of Object.keys(custom ?? {})) {
|
|
24
|
+
if (key in builtIns[kind]) {
|
|
25
|
+
throw new Error(`${owner} ${kind} name is reserved: ${key}`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* The app's actor config with what `pi()` adds: longer action and sleep grace defaults, the runtime slot on the app's vars,
|
|
32
|
+
* and shutdown hooks that run the app's hook and then close Pi.
|
|
33
|
+
*/
|
|
34
|
+
export function sharedActorConfig(owner, actorConfig, runtime, close, userHooks) {
|
|
35
|
+
// The runtime slot rides on the app's vars, so `createVars` replaces `vars`.
|
|
36
|
+
const { vars: userVars, createVars: userCreateVars, ...config } = actorConfig;
|
|
37
|
+
const sleepGracePeriod = config.options?.sleepGracePeriod ?? DEFAULT_SLEEP_GRACE_PERIOD_MS;
|
|
38
|
+
return {
|
|
39
|
+
...config,
|
|
40
|
+
options: {
|
|
41
|
+
actionTimeout: DEFAULT_ACTION_TIMEOUT_MS,
|
|
42
|
+
sleepGracePeriod: DEFAULT_SLEEP_GRACE_PERIOD_MS,
|
|
43
|
+
...config.options,
|
|
44
|
+
},
|
|
45
|
+
createVars: async (c, driverCtx) => {
|
|
46
|
+
const vars = userCreateVars
|
|
47
|
+
? await userCreateVars(c, driverCtx)
|
|
48
|
+
: userVars === undefined
|
|
49
|
+
? undefined
|
|
50
|
+
: structuredClone(userVars);
|
|
51
|
+
if (vars === undefined)
|
|
52
|
+
return { [runtime.slot]: runtime.create() };
|
|
53
|
+
if (typeof vars !== "object" || vars === null) {
|
|
54
|
+
throw new Error(`${owner} requires actor vars to be an object`);
|
|
55
|
+
}
|
|
56
|
+
return Object.assign(vars, { [runtime.slot]: runtime.create() });
|
|
57
|
+
},
|
|
58
|
+
onSleep: async (c) => {
|
|
59
|
+
const drainUntil = drainDeadline(sleepGracePeriod);
|
|
60
|
+
try {
|
|
61
|
+
await userHooks.onSleep?.(c);
|
|
62
|
+
}
|
|
63
|
+
finally {
|
|
64
|
+
await close(c, { reason: "sleep", drainUntil });
|
|
65
|
+
}
|
|
66
|
+
},
|
|
67
|
+
onDestroy: async (c) => {
|
|
68
|
+
try {
|
|
69
|
+
await userHooks.onDestroy?.(c);
|
|
70
|
+
}
|
|
71
|
+
finally {
|
|
72
|
+
await close(c, { reason: "destroy" });
|
|
73
|
+
}
|
|
74
|
+
},
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/** Wraps each of the app's actions, including nested ones, so it runs inside `run`. */
|
|
78
|
+
export function wrapActions(actions, run) {
|
|
79
|
+
return Object.fromEntries(Object.entries(actions).map(([name, action]) => [
|
|
80
|
+
name,
|
|
81
|
+
typeof action === "function"
|
|
82
|
+
? (c, ...args) => run(c, () => action(c, ...args))
|
|
83
|
+
: wrapActions(action, run),
|
|
84
|
+
]));
|
|
85
|
+
}
|
|
86
|
+
//# sourceMappingURL=actor-config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor-config.js","sourceRoot":"","sources":["../src/actor-config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { SqliteDatabase } from "@earendil-works/pi-durable/storage/sqlite";
|
|
2
|
+
import type { RawAccess } from "rivetkit/db";
|
|
3
|
+
/**
|
|
4
|
+
* Pi Durable's `SqliteDatabase` over the actor's SQLite database.
|
|
5
|
+
*
|
|
6
|
+
* The actor owns the database, so `close` does nothing. Pi Durable calls it from
|
|
7
|
+
* `storage.close()`, and the actor closes the database itself when it stops.
|
|
8
|
+
*/
|
|
9
|
+
export declare function actorSqlite(db: RawAccess): SqliteDatabase;
|
|
10
|
+
//# sourceMappingURL=actor-sqlite.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor-sqlite.d.ts","sourceRoot":"","sources":["../src/actor-sqlite.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACX,cAAc,EAGd,MAAM,2CAA2C,CAAC;AACnD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAE7C;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,EAAE,EAAE,SAAS,GAAG,cAAc,CASzD"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Pi Durable's `SqliteDatabase` over the actor's SQLite database.
|
|
3
|
+
*
|
|
4
|
+
* The actor owns the database, so `close` does nothing. Pi Durable calls it from
|
|
5
|
+
* `storage.close()`, and the actor closes the database itself when it stops.
|
|
6
|
+
*/
|
|
7
|
+
export function actorSqlite(db) {
|
|
8
|
+
return {
|
|
9
|
+
...actorSqliteExecutor(db),
|
|
10
|
+
transaction: (callback) => db.transaction((tx) => callback(actorSqliteExecutor(tx)), {
|
|
11
|
+
name: "pi-durable",
|
|
12
|
+
}),
|
|
13
|
+
close: async () => { },
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Pi Durable names the row type of each query it sends. SQLite returns plain
|
|
18
|
+
* rows, so `get` and `all` take Pi's word for their shape.
|
|
19
|
+
*/
|
|
20
|
+
function actorSqliteExecutor(db) {
|
|
21
|
+
return {
|
|
22
|
+
exec: async (sql) => {
|
|
23
|
+
await db.execute(sql);
|
|
24
|
+
},
|
|
25
|
+
run: async (sql, ...params) => {
|
|
26
|
+
await db.execute(sql, ...params);
|
|
27
|
+
},
|
|
28
|
+
get: async (sql, ...params) => (await db.execute(sql, ...params)).at(0),
|
|
29
|
+
all: async (sql, ...params) => (await db.execute(sql, ...params)),
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=actor-sqlite.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"actor-sqlite.js","sourceRoot":"","sources":["../src/actor-sqlite.ts"],"names":[],"mappings":"AAOA;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,EAAa;IACxC,OAAO;QACN,GAAG,mBAAmB,CAAC,EAAE,CAAC;QAC1B,WAAW,EAAE,CAAC,QAAQ,EAAE,EAAE,CACzB,EAAE,CAAC,WAAW,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC,CAAC,EAAE;YACzD,IAAI,EAAE,YAAY;SAClB,CAAC;QACH,KAAK,EAAE,KAAK,IAAI,EAAE,GAAE,CAAC;KACrB,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,SAAS,mBAAmB,CAAC,EAA8B;IAC1D,OAAO;QACN,IAAI,EAAE,KAAK,EAAE,GAAG,EAAE,EAAE;YACnB,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;QACvB,CAAC;QACD,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,MAAM,EAAE,EAAE;YAC7B,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC;QAClC,CAAC;QACD,GAAG,EAAE,KAAK,EAAoB,GAAW,EAAE,GAAG,MAAqB,EAAE,EAAE,CACrE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClD,GAAG,EAAE,KAAK,EAAoB,GAAW,EAAE,GAAG,MAAqB,EAAE,EAAE,CACtE,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAQ;KAC1C,CAAC;AACH,CAAC"}
|