@pinecall/agents 0.9.20
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 +202 -0
- package/README.md +121 -0
- package/dist/agent/accepts.d.ts +31 -0
- package/dist/agent/accepts.d.ts.map +1 -0
- package/dist/agent/accepts.js +27 -0
- package/dist/agent/accepts.js.map +1 -0
- package/dist/agent/agent.d.ts +151 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +240 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/agent/authors.d.ts +12 -0
- package/dist/agent/authors.d.ts.map +1 -0
- package/dist/agent/authors.js +26 -0
- package/dist/agent/authors.js.map +1 -0
- package/dist/agent/decorators.d.ts +16 -0
- package/dist/agent/decorators.d.ts.map +1 -0
- package/dist/agent/decorators.js +43 -0
- package/dist/agent/decorators.js.map +1 -0
- package/dist/agent/docstrings.d.ts +35 -0
- package/dist/agent/docstrings.d.ts.map +1 -0
- package/dist/agent/docstrings.js +301 -0
- package/dist/agent/docstrings.js.map +1 -0
- package/dist/agent/knowledge.d.ts +9 -0
- package/dist/agent/knowledge.d.ts.map +1 -0
- package/dist/agent/knowledge.js +3 -0
- package/dist/agent/knowledge.js.map +1 -0
- package/dist/agent/lifecycle.d.ts +29 -0
- package/dist/agent/lifecycle.d.ts.map +1 -0
- package/dist/agent/lifecycle.js +9 -0
- package/dist/agent/lifecycle.js.map +1 -0
- package/dist/agent/searching.d.ts +7 -0
- package/dist/agent/searching.d.ts.map +1 -0
- package/dist/agent/searching.js +35 -0
- package/dist/agent/searching.js.map +1 -0
- package/dist/agent/stages.d.ts +23 -0
- package/dist/agent/stages.d.ts.map +1 -0
- package/dist/agent/stages.js +29 -0
- package/dist/agent/stages.js.map +1 -0
- package/dist/agent/state.d.ts +36 -0
- package/dist/agent/state.d.ts.map +1 -0
- package/dist/agent/state.js +93 -0
- package/dist/agent/state.js.map +1 -0
- package/dist/agent/tools.d.ts +61 -0
- package/dist/agent/tools.d.ts.map +1 -0
- package/dist/agent/tools.js +145 -0
- package/dist/agent/tools.js.map +1 -0
- package/dist/agent/view.d.ts +29 -0
- package/dist/agent/view.d.ts.map +1 -0
- package/dist/agent/view.js +29 -0
- package/dist/agent/view.js.map +1 -0
- package/dist/agent/visibility.d.ts +32 -0
- package/dist/agent/visibility.d.ts.map +1 -0
- package/dist/agent/visibility.js +77 -0
- package/dist/agent/visibility.js.map +1 -0
- package/dist/call/call.d.ts +137 -0
- package/dist/call/call.d.ts.map +1 -0
- package/dist/call/call.js +228 -0
- package/dist/call/call.js.map +1 -0
- package/dist/call/history.d.ts +28 -0
- package/dist/call/history.d.ts.map +1 -0
- package/dist/call/history.js +32 -0
- package/dist/call/history.js.map +1 -0
- package/dist/call/room.d.ts +56 -0
- package/dist/call/room.d.ts.map +1 -0
- package/dist/call/room.js +66 -0
- package/dist/call/room.js.map +1 -0
- package/dist/client/agent.d.ts +93 -0
- package/dist/client/agent.d.ts.map +1 -0
- package/dist/client/agent.js +230 -0
- package/dist/client/agent.js.map +1 -0
- package/dist/client/calls.d.ts +87 -0
- package/dist/client/calls.d.ts.map +1 -0
- package/dist/client/calls.js +180 -0
- package/dist/client/calls.js.map +1 -0
- package/dist/client/client.d.ts +112 -0
- package/dist/client/client.d.ts.map +1 -0
- package/dist/client/client.js +284 -0
- package/dist/client/client.js.map +1 -0
- package/dist/client/connection.d.ts +52 -0
- package/dist/client/connection.d.ts.map +1 -0
- package/dist/client/connection.js +157 -0
- package/dist/client/connection.js.map +1 -0
- package/dist/client/endpoints.d.ts +9 -0
- package/dist/client/endpoints.d.ts.map +1 -0
- package/dist/client/endpoints.js +25 -0
- package/dist/client/endpoints.js.map +1 -0
- package/dist/client/frames.d.ts +29 -0
- package/dist/client/frames.d.ts.map +1 -0
- package/dist/client/frames.js +51 -0
- package/dist/client/frames.js.map +1 -0
- package/dist/client/index.d.ts +18 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/client/index.js +13 -0
- package/dist/client/index.js.map +1 -0
- package/dist/client/listeners.d.ts +35 -0
- package/dist/client/listeners.d.ts.map +1 -0
- package/dist/client/listeners.js +60 -0
- package/dist/client/listeners.js.map +1 -0
- package/dist/client/lost.d.ts +4 -0
- package/dist/client/lost.d.ts.map +1 -0
- package/dist/client/lost.js +8 -0
- package/dist/client/lost.js.map +1 -0
- package/dist/client/observe.d.ts +50 -0
- package/dist/client/observe.d.ts.map +1 -0
- package/dist/client/observe.js +125 -0
- package/dist/client/observe.js.map +1 -0
- package/dist/client/signed.d.ts +14 -0
- package/dist/client/signed.d.ts.map +1 -0
- package/dist/client/signed.js +18 -0
- package/dist/client/signed.js.map +1 -0
- package/dist/client/testing/gateway.d.ts +58 -0
- package/dist/client/testing/gateway.d.ts.map +1 -0
- package/dist/client/testing/gateway.js +175 -0
- package/dist/client/testing/gateway.js.map +1 -0
- package/dist/client/testing/index.d.ts +4 -0
- package/dist/client/testing/index.d.ts.map +1 -0
- package/dist/client/testing/index.js +4 -0
- package/dist/client/testing/index.js.map +1 -0
- package/dist/client/testing/log.d.ts +24 -0
- package/dist/client/testing/log.d.ts.map +1 -0
- package/dist/client/testing/log.js +106 -0
- package/dist/client/testing/log.js.map +1 -0
- package/dist/client/testing/loopback.d.ts +3 -0
- package/dist/client/testing/loopback.d.ts.map +1 -0
- package/dist/client/testing/loopback.js +3 -0
- package/dist/client/testing/loopback.js.map +1 -0
- package/dist/index.d.ts +23 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +27 -0
- package/dist/index.js.map +1 -0
- package/dist/runtime/connect.d.ts +42 -0
- package/dist/runtime/connect.d.ts.map +1 -0
- package/dist/runtime/connect.js +234 -0
- package/dist/runtime/connect.js.map +1 -0
- package/dist/runtime/dispatch.d.ts +32 -0
- package/dist/runtime/dispatch.d.ts.map +1 -0
- package/dist/runtime/dispatch.js +46 -0
- package/dist/runtime/dispatch.js.map +1 -0
- package/dist/runtime/environment.d.ts +7 -0
- package/dist/runtime/environment.d.ts.map +1 -0
- package/dist/runtime/environment.js +30 -0
- package/dist/runtime/environment.js.map +1 -0
- package/dist/runtime/recall.d.ts +9 -0
- package/dist/runtime/recall.d.ts.map +1 -0
- package/dist/runtime/recall.js +13 -0
- package/dist/runtime/recall.js.map +1 -0
- package/dist/runtime/run-tool.d.ts +18 -0
- package/dist/runtime/run-tool.d.ts.map +1 -0
- package/dist/runtime/run-tool.js +70 -0
- package/dist/runtime/run-tool.js.map +1 -0
- package/dist/serve/index.d.ts +5 -0
- package/dist/serve/index.d.ts.map +1 -0
- package/dist/serve/index.js +50 -0
- package/dist/serve/index.js.map +1 -0
- package/dist/serve/io.d.ts +14 -0
- package/dist/serve/io.d.ts.map +1 -0
- package/dist/serve/io.js +6 -0
- package/dist/serve/io.js.map +1 -0
- package/dist/serve/leaving.d.ts +12 -0
- package/dist/serve/leaving.d.ts.map +1 -0
- package/dist/serve/leaving.js +61 -0
- package/dist/serve/leaving.js.map +1 -0
- package/dist/serve/lines.d.ts +7 -0
- package/dist/serve/lines.d.ts.map +1 -0
- package/dist/serve/lines.js +25 -0
- package/dist/serve/lines.js.map +1 -0
- package/dist/serve/load.d.ts +26 -0
- package/dist/serve/load.d.ts.map +1 -0
- package/dist/serve/load.js +61 -0
- package/dist/serve/load.js.map +1 -0
- package/dist/serve/machine.d.ts +4 -0
- package/dist/serve/machine.d.ts.map +1 -0
- package/dist/serve/machine.js +33 -0
- package/dist/serve/machine.js.map +1 -0
- package/dist/serve/prompt.d.ts +7 -0
- package/dist/serve/prompt.d.ts.map +1 -0
- package/dist/serve/prompt.js +51 -0
- package/dist/serve/prompt.js.map +1 -0
- package/dist/serve/start.d.ts +7 -0
- package/dist/serve/start.d.ts.map +1 -0
- package/dist/serve/start.js +95 -0
- package/dist/serve/start.js.map +1 -0
- package/dist/serve/viewing.d.ts +17 -0
- package/dist/serve/viewing.d.ts.map +1 -0
- package/dist/serve/viewing.js +42 -0
- package/dist/serve/viewing.js.map +1 -0
- package/dist/views/built-in-rules.d.ts +9 -0
- package/dist/views/built-in-rules.d.ts.map +1 -0
- package/dist/views/built-in-rules.js +28 -0
- package/dist/views/built-in-rules.js.map +1 -0
- package/dist/views/components.d.ts +17 -0
- package/dist/views/components.d.ts.map +1 -0
- package/dist/views/components.js +33 -0
- package/dist/views/components.js.map +1 -0
- package/dist/views/jsx-dev-runtime.d.ts +3 -0
- package/dist/views/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/views/jsx-dev-runtime.js +4 -0
- package/dist/views/jsx-dev-runtime.js.map +1 -0
- package/dist/views/jsx-runtime.d.ts +46 -0
- package/dist/views/jsx-runtime.d.ts.map +1 -0
- package/dist/views/jsx-runtime.js +63 -0
- package/dist/views/jsx-runtime.js.map +1 -0
- package/dist/views/layout.d.ts +19 -0
- package/dist/views/layout.d.ts.map +1 -0
- package/dist/views/layout.js +58 -0
- package/dist/views/layout.js.map +1 -0
- package/dist/views/nodes.d.ts +48 -0
- package/dist/views/nodes.d.ts.map +1 -0
- package/dist/views/nodes.js +45 -0
- package/dist/views/nodes.js.map +1 -0
- package/dist/views/panels.d.ts +17 -0
- package/dist/views/panels.d.ts.map +1 -0
- package/dist/views/panels.js +62 -0
- package/dist/views/panels.js.map +1 -0
- package/dist/views/render.d.ts +11 -0
- package/dist/views/render.d.ts.map +1 -0
- package/dist/views/render.js +19 -0
- package/dist/views/render.js.map +1 -0
- package/dist/wire/agent-config.d.ts +213 -0
- package/dist/wire/agent-config.d.ts.map +1 -0
- package/dist/wire/agent-config.js +126 -0
- package/dist/wire/agent-config.js.map +1 -0
- package/dist/wire/codec.d.ts +43 -0
- package/dist/wire/codec.d.ts.map +1 -0
- package/dist/wire/codec.js +51 -0
- package/dist/wire/codec.js.map +1 -0
- package/dist/wire/commands.d.ts +443 -0
- package/dist/wire/commands.d.ts.map +1 -0
- package/dist/wire/commands.js +203 -0
- package/dist/wire/commands.js.map +1 -0
- package/dist/wire/defs.d.ts +373 -0
- package/dist/wire/defs.d.ts.map +1 -0
- package/dist/wire/defs.js +212 -0
- package/dist/wire/defs.js.map +1 -0
- package/dist/wire/envelope.d.ts +29 -0
- package/dist/wire/envelope.d.ts.map +1 -0
- package/dist/wire/envelope.js +27 -0
- package/dist/wire/envelope.js.map +1 -0
- package/dist/wire/events-call.d.ts +446 -0
- package/dist/wire/events-call.d.ts.map +1 -0
- package/dist/wire/events-call.js +196 -0
- package/dist/wire/events-call.js.map +1 -0
- package/dist/wire/events.d.ts +946 -0
- package/dist/wire/events.d.ts.map +1 -0
- package/dist/wire/events.js +309 -0
- package/dist/wire/events.js.map +1 -0
- package/dist/wire/index.d.ts +19 -0
- package/dist/wire/index.d.ts.map +1 -0
- package/dist/wire/index.js +19 -0
- package/dist/wire/index.js.map +1 -0
- package/dist/wire/metrics.d.ts +366 -0
- package/dist/wire/metrics.d.ts.map +1 -0
- package/dist/wire/metrics.js +269 -0
- package/dist/wire/metrics.js.map +1 -0
- package/dist/wire/reduce.d.ts +10 -0
- package/dist/wire/reduce.d.ts.map +1 -0
- package/dist/wire/reduce.js +367 -0
- package/dist/wire/reduce.js.map +1 -0
- package/dist/wire/registry.d.ts +1789 -0
- package/dist/wire/registry.d.ts.map +1 -0
- package/dist/wire/registry.js +118 -0
- package/dist/wire/registry.js.map +1 -0
- package/dist/wire/rest-data.d.ts +170 -0
- package/dist/wire/rest-data.d.ts.map +1 -0
- package/dist/wire/rest-data.js +78 -0
- package/dist/wire/rest-data.js.map +1 -0
- package/dist/wire/rest-hosting.d.ts +74 -0
- package/dist/wire/rest-hosting.d.ts.map +1 -0
- package/dist/wire/rest-hosting.js +38 -0
- package/dist/wire/rest-hosting.js.map +1 -0
- package/dist/wire/rest-retrieval.d.ts +214 -0
- package/dist/wire/rest-retrieval.d.ts.map +1 -0
- package/dist/wire/rest-retrieval.js +161 -0
- package/dist/wire/rest-retrieval.js.map +1 -0
- package/dist/wire/rest.d.ts +786 -0
- package/dist/wire/rest.d.ts.map +1 -0
- package/dist/wire/rest.js +238 -0
- package/dist/wire/rest.js.map +1 -0
- package/dist/wire/room.d.ts +106 -0
- package/dist/wire/room.d.ts.map +1 -0
- package/dist/wire/room.js +73 -0
- package/dist/wire/room.js.map +1 -0
- package/dist/wire/state.d.ts +915 -0
- package/dist/wire/state.d.ts.map +1 -0
- package/dist/wire/state.js +189 -0
- package/dist/wire/state.js.map +1 -0
- package/dist/wire/verbs.d.ts +73 -0
- package/dist/wire/verbs.d.ts.map +1 -0
- package/dist/wire/verbs.js +50 -0
- package/dist/wire/verbs.js.map +1 -0
- package/package.json +74 -0
- package/tsconfig.tenant.json +24 -0
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
/** The Agent base class: its fields are the state, and every assignment is a change with an author. */
|
|
2
|
+
// Circular with tools.ts; safe because both sides only call across at runtime (hoisted functions).
|
|
3
|
+
import { currentAuthor, UnauthoredWrite } from "./authors.js";
|
|
4
|
+
import { docOf, toolsOf, visibleToolsOf } from "./tools.js";
|
|
5
|
+
import { declaredStateOf } from "./visibility.js";
|
|
6
|
+
import { collapse, restore, snapshot } from "./state.js";
|
|
7
|
+
// Fields that configure the agent instead of holding state: never diffed, never snapshotted.
|
|
8
|
+
// Every other setting (voice, models, language, opening, memory) belongs to the world and is
|
|
9
|
+
// refused at load.
|
|
10
|
+
export const CONFIG_FIELDS = ["phone", "whatsapp", "web", "channelRules"];
|
|
11
|
+
// state.ts derives `ConfigName` from CONFIG_FIELDS, so a name added here is dropped from snapshots.
|
|
12
|
+
const CONFIG = new Set(CONFIG_FIELDS);
|
|
13
|
+
const internals = new WeakMap();
|
|
14
|
+
/**
|
|
15
|
+
* Base class for every agent. The constructor returns a Proxy, so `this.patient = row` records
|
|
16
|
+
* a change with its author and sequence number.
|
|
17
|
+
*/
|
|
18
|
+
export class Agent {
|
|
19
|
+
constructor() {
|
|
20
|
+
// null: no `@state` decorators, so every own field is state.
|
|
21
|
+
const stateFields = declaredStateOf(this.constructor);
|
|
22
|
+
const own = {
|
|
23
|
+
changes: [],
|
|
24
|
+
log: [],
|
|
25
|
+
logListeners: new Set(),
|
|
26
|
+
listeners: new Set(),
|
|
27
|
+
eventListeners: new Set(),
|
|
28
|
+
seq: 0,
|
|
29
|
+
sealed: false,
|
|
30
|
+
target: this,
|
|
31
|
+
call: null,
|
|
32
|
+
last: null,
|
|
33
|
+
recalled: [],
|
|
34
|
+
};
|
|
35
|
+
const proxy = new Proxy(this, {
|
|
36
|
+
set(target, key, next, receiver) {
|
|
37
|
+
// Config fields and undeclared fields (when the class uses `@state`) are not recorded.
|
|
38
|
+
if (typeof key !== "string" || CONFIG.has(key) || (stateFields !== null && !stateFields.has(key))) {
|
|
39
|
+
return Reflect.set(target, key, next, target);
|
|
40
|
+
}
|
|
41
|
+
const prev = Reflect.get(target, key, target);
|
|
42
|
+
const ok = Reflect.set(target, key, next, target);
|
|
43
|
+
if (!ok || !own.sealed)
|
|
44
|
+
return ok;
|
|
45
|
+
const author = currentAuthor();
|
|
46
|
+
// Field initializers run before seal(), so an unauthored write here is a live bug.
|
|
47
|
+
if (author === null)
|
|
48
|
+
throw new UnauthoredWrite(key);
|
|
49
|
+
if (Object.is(prev, next))
|
|
50
|
+
return true;
|
|
51
|
+
const change = { seq: ++own.seq, field: key, prev, next, author, at: Date.now() };
|
|
52
|
+
own.changes.push(change);
|
|
53
|
+
for (const listener of own.listeners)
|
|
54
|
+
listener(change);
|
|
55
|
+
return true;
|
|
56
|
+
},
|
|
57
|
+
});
|
|
58
|
+
internals.set(this, own);
|
|
59
|
+
internals.set(proxy, own);
|
|
60
|
+
return proxy;
|
|
61
|
+
}
|
|
62
|
+
/** The class description, as an alternative to a JSDoc comment. */
|
|
63
|
+
static doc;
|
|
64
|
+
/**
|
|
65
|
+
* Knowledge bases attached to this agent (`pinecall docs attach`), searched from a tool:
|
|
66
|
+
* `await this.knowledge.search("horarios", { k: 3 })`. The gateway runs and logs the search.
|
|
67
|
+
*/
|
|
68
|
+
get knowledge() {
|
|
69
|
+
// Async so that a missing call rejects the promise instead of throwing.
|
|
70
|
+
return { search: async (query, options) => await this.call.search(query, options) };
|
|
71
|
+
}
|
|
72
|
+
/** External events this class accepts, and from whom. */
|
|
73
|
+
static events;
|
|
74
|
+
/** Field visibility as a map, as an alternative to `@state`. */
|
|
75
|
+
static visibility;
|
|
76
|
+
/** The class docstring, as the model reads it. */
|
|
77
|
+
doc() {
|
|
78
|
+
return docOf(this);
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* The per-turn part of the prompt, rendered from the current state. It is the dynamic block and
|
|
82
|
+
* the last thing the model reads. Renders nothing by default.
|
|
83
|
+
*/
|
|
84
|
+
render() {
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Whether memory recalled a fact for this call containing `text` (the fact or its key word).
|
|
89
|
+
* Returns false until the runtime has recalled anything.
|
|
90
|
+
*/
|
|
91
|
+
remembers(text) {
|
|
92
|
+
const wanted = text.trim().toLowerCase();
|
|
93
|
+
if (wanted === "")
|
|
94
|
+
return false;
|
|
95
|
+
return internalsOf(this).recalled.some((known) => known.includes(wanted));
|
|
96
|
+
}
|
|
97
|
+
/** Every tool this agent declares, whether or not the current state shows it. */
|
|
98
|
+
tools() {
|
|
99
|
+
return toolsOf(this).map((declared) => declared.spec);
|
|
100
|
+
}
|
|
101
|
+
/** The tools a model may call right now: the ones whose `when(state)` holds. */
|
|
102
|
+
visibleTools() {
|
|
103
|
+
return visibleToolsOf(this).map((declared) => declared.spec);
|
|
104
|
+
}
|
|
105
|
+
/** Replace the change log with a one-sentence summary; the state is kept. */
|
|
106
|
+
collapse(summary) {
|
|
107
|
+
collapse(this, summary);
|
|
108
|
+
}
|
|
109
|
+
/** Restore the whole state from a snapshot, e.g. in `onCall` for a returning caller. */
|
|
110
|
+
restore(state) {
|
|
111
|
+
restore(this, state);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Overwrite only the fields `state` names, keeping the rest. Unlike `restore`, which replaces the
|
|
115
|
+
* whole state and clears fields the snapshot omits.
|
|
116
|
+
*/
|
|
117
|
+
startIn(state) {
|
|
118
|
+
restore(this, { ...snapshot(this), ...state });
|
|
119
|
+
}
|
|
120
|
+
/** The snapshot this contact's last call left. Requires `mount(Class, { pc, last })`. */
|
|
121
|
+
last(contact) {
|
|
122
|
+
const source = internalsOf(this).last;
|
|
123
|
+
if (source === null) {
|
|
124
|
+
return Promise.reject(new Error("last(contact) needs a store: mount the agent with { last } to give it one"));
|
|
125
|
+
}
|
|
126
|
+
return source(contact);
|
|
127
|
+
}
|
|
128
|
+
/** Append a named entry to the call's log. */
|
|
129
|
+
log(name, data) {
|
|
130
|
+
const own = internalsOf(this);
|
|
131
|
+
const entry = { seq: ++own.seq, name, at: Date.now() };
|
|
132
|
+
if (data !== undefined)
|
|
133
|
+
entry.data = data;
|
|
134
|
+
own.log.push(entry);
|
|
135
|
+
for (const listener of own.logListeners)
|
|
136
|
+
listener(entry);
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* The call being served. A getter, not a field, so it never enters a snapshot; a subclass field
|
|
140
|
+
* named `call` is refused at its first write. Throws when no call is being served.
|
|
141
|
+
*/
|
|
142
|
+
get call() {
|
|
143
|
+
const serving = internalsOf(this).call;
|
|
144
|
+
if (serving === null) {
|
|
145
|
+
throw new Error("this.call is only there while a call is being served: the bridge sets it at start(), " +
|
|
146
|
+
"and a test that renders gives one with setCall(agent, new CallWorld(line, () => {}))");
|
|
147
|
+
}
|
|
148
|
+
return serving;
|
|
149
|
+
}
|
|
150
|
+
/** Speak `text` verbatim now. Resolves true once the turn is delivered. */
|
|
151
|
+
say(text, options = {}) {
|
|
152
|
+
return this.call.say(text, options);
|
|
153
|
+
}
|
|
154
|
+
/** Make the model speak now, guided by instructions the caller does not hear. Resolves like `say`. */
|
|
155
|
+
reply(instructions, options = {}) {
|
|
156
|
+
return this.call.reply(instructions, options);
|
|
157
|
+
}
|
|
158
|
+
on(type, listener) {
|
|
159
|
+
if (type === "state")
|
|
160
|
+
return onChange(this, listener);
|
|
161
|
+
const own = internalsOf(this);
|
|
162
|
+
own.eventListeners.add(listener);
|
|
163
|
+
return () => own.eventListeners.delete(listener);
|
|
164
|
+
}
|
|
165
|
+
/** Called when a declared external event arrives. State writes here are authored by the event. */
|
|
166
|
+
onEvent(_name, _data, _meta) {
|
|
167
|
+
return undefined;
|
|
168
|
+
}
|
|
169
|
+
/** Called when a call starts. State writes here are authored by the hook. */
|
|
170
|
+
onCall(_call) {
|
|
171
|
+
return undefined;
|
|
172
|
+
}
|
|
173
|
+
/** Called when the call ends. */
|
|
174
|
+
onEnd(_call) {
|
|
175
|
+
return undefined;
|
|
176
|
+
}
|
|
177
|
+
/** Called when memory is written; override to persist the ops. */
|
|
178
|
+
onMemory(_ops, _call) {
|
|
179
|
+
return undefined;
|
|
180
|
+
}
|
|
181
|
+
}
|
|
182
|
+
/** The framework's bookkeeping for an agent; throws if `agent` is not one. */
|
|
183
|
+
export function internalsOf(agent) {
|
|
184
|
+
const own = internals.get(agent);
|
|
185
|
+
if (!own)
|
|
186
|
+
throw new TypeError("not a Pinecall agent: its constructor never ran through Agent");
|
|
187
|
+
return own;
|
|
188
|
+
}
|
|
189
|
+
/** Start recording changes. Assignments before this (field initializers) are the baseline. */
|
|
190
|
+
export function seal(agent) {
|
|
191
|
+
internalsOf(agent).sealed = true;
|
|
192
|
+
return agent;
|
|
193
|
+
}
|
|
194
|
+
/** Every change this agent has recorded, oldest first. */
|
|
195
|
+
export function changes(agent) {
|
|
196
|
+
return internalsOf(agent).changes;
|
|
197
|
+
}
|
|
198
|
+
/** Listen to field assignments. Returns an unsubscribe function. */
|
|
199
|
+
export function onChange(agent, listener) {
|
|
200
|
+
const own = internalsOf(agent);
|
|
201
|
+
own.listeners.add(listener);
|
|
202
|
+
return () => own.listeners.delete(listener);
|
|
203
|
+
}
|
|
204
|
+
/** Everything this agent logged, oldest first. */
|
|
205
|
+
export function logOf(agent) {
|
|
206
|
+
return internalsOf(agent).log;
|
|
207
|
+
}
|
|
208
|
+
/** Listen to log entries. Returns an unsubscribe function. */
|
|
209
|
+
export function onLog(agent, listener) {
|
|
210
|
+
const own = internalsOf(agent);
|
|
211
|
+
own.logListeners.add(listener);
|
|
212
|
+
return () => own.logListeners.delete(listener);
|
|
213
|
+
}
|
|
214
|
+
/** Whether a name is one of CONFIG_FIELDS rather than a piece of state. */
|
|
215
|
+
export function isConfigField(name) {
|
|
216
|
+
return CONFIG.has(name);
|
|
217
|
+
}
|
|
218
|
+
/** Set the store `last(contact)` reads. Called by the bridge at start(). */
|
|
219
|
+
export function setLast(agent, source) {
|
|
220
|
+
internalsOf(agent).last = source;
|
|
221
|
+
}
|
|
222
|
+
/** Set the call being served. Called by the bridge at start(). */
|
|
223
|
+
export function setCall(agent, call) {
|
|
224
|
+
internalsOf(agent).call = call;
|
|
225
|
+
}
|
|
226
|
+
/** Record recalled facts and their key words, from the call's `memory.ops` entries. */
|
|
227
|
+
export function recalled(agent, words) {
|
|
228
|
+
const own = internalsOf(agent);
|
|
229
|
+
for (const word of words) {
|
|
230
|
+
const known = word.trim().toLowerCase();
|
|
231
|
+
if (known !== "" && !own.recalled.includes(known))
|
|
232
|
+
own.recalled.push(known);
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
/** Notify in-process observers of an event after its hook ran. */
|
|
236
|
+
export function emitEvent(agent, heard) {
|
|
237
|
+
for (const listener of internalsOf(agent).eventListeners)
|
|
238
|
+
listener(heard);
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=agent.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent.js","sourceRoot":"","sources":["../../src/agent/agent.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** The author attached to each state write, tracked per async context. */
|
|
2
|
+
/** The current writer's name, or null outside any tool or hook. */
|
|
3
|
+
export declare function currentAuthor(): string | null;
|
|
4
|
+
/** Run `body` with every state write inside it attributed to `author`. */
|
|
5
|
+
export declare function withAuthor<T>(name: string, body: () => T): T;
|
|
6
|
+
/** Async variant of `withAuthor`: the author holds across awaits inside `body`. */
|
|
7
|
+
export declare function withAuthorAsync<T>(name: string, body: () => Promise<T> | T): Promise<T>;
|
|
8
|
+
/** Thrown when state is assigned outside a tool or lifecycle hook. */
|
|
9
|
+
export declare class UnauthoredWrite extends Error {
|
|
10
|
+
constructor(field: string);
|
|
11
|
+
}
|
|
12
|
+
//# sourceMappingURL=authors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authors.d.ts","sourceRoot":"","sources":["../../src/agent/authors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAQ1E,mEAAmE;AACnE,wBAAgB,aAAa,IAAI,MAAM,GAAG,IAAI,CAE7C;AAED,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAE5D;AAED,mFAAmF;AACnF,wBAAgB,eAAe,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAEvF;AAED,sEAAsE;AAEtE,qBAAa,eAAgB,SAAQ,KAAK;IACxC,YAAY,KAAK,EAAE,MAAM,EAMxB;CACF"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/** The author attached to each state write, tracked per async context. */
|
|
2
|
+
import { AsyncLocalStorage } from "node:async_hooks";
|
|
3
|
+
// AsyncLocalStorage, not a shared stack: concurrent tools (and calls) interleave across awaits,
|
|
4
|
+
// and each write must be attributed to its own tool.
|
|
5
|
+
const author = new AsyncLocalStorage();
|
|
6
|
+
/** The current writer's name, or null outside any tool or hook. */
|
|
7
|
+
export function currentAuthor() {
|
|
8
|
+
return author.getStore() ?? null;
|
|
9
|
+
}
|
|
10
|
+
/** Run `body` with every state write inside it attributed to `author`. */
|
|
11
|
+
export function withAuthor(name, body) {
|
|
12
|
+
return author.run(name, body);
|
|
13
|
+
}
|
|
14
|
+
/** Async variant of `withAuthor`: the author holds across awaits inside `body`. */
|
|
15
|
+
export function withAuthorAsync(name, body) {
|
|
16
|
+
return author.run(name, async () => await body());
|
|
17
|
+
}
|
|
18
|
+
/** Thrown when state is assigned outside a tool or lifecycle hook. */
|
|
19
|
+
export class UnauthoredWrite extends Error {
|
|
20
|
+
constructor(field) {
|
|
21
|
+
super(`state field ${field} was assigned outside a tool and outside a lifecycle hook; ` +
|
|
22
|
+
`tools are the only writers of state`);
|
|
23
|
+
this.name = "UnauthoredWrite";
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=authors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authors.js","sourceRoot":"","sources":["../../src/agent/authors.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAE1E,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAErD,gGAAgG;AAChG,qDAAqD;AACrD,MAAM,MAAM,GAAG,IAAI,iBAAiB,EAAU,CAAC;AAE/C,mEAAmE;AACnE,MAAM,UAAU,aAAa;IAC3B,OAAO,MAAM,CAAC,QAAQ,EAAE,IAAI,IAAI,CAAC;AACnC,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAI,IAAY,EAAE,IAAa;IACvD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;AAChC,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,eAAe,CAAI,IAAY,EAAE,IAA0B;IACzE,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,IAAI,EAAE,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC;AACpD,CAAC;AAED,sEAAsE;AAEtE,MAAM,OAAO,eAAgB,SAAQ,KAAK;IACxC,YAAY,KAAa;QACvB,KAAK,CACH,eAAe,KAAK,6DAA6D;YAC/E,qCAAqC,CACxC,CAAC;QACF,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;IAChC,CAAC;CACF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/** The `@tool({...})` method decorator and the `@render(Prompt)` class decorator. */
|
|
2
|
+
import { type ToolOptions } from "./tools.js";
|
|
3
|
+
import type { Child } from "../views/jsx-runtime.js";
|
|
4
|
+
/**
|
|
5
|
+
* Declare a method as a tool. Its JSDoc is the description and its signature the schema;
|
|
6
|
+
* `when(state)` controls visibility (`stage` is shorthand for one). State writes are authored by it.
|
|
7
|
+
*/
|
|
8
|
+
export declare function tool<T extends object>(options?: ToolOptions<T>): (prototype: T, name: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
|
|
9
|
+
/** A prompt component whose props are the agent instance itself. */
|
|
10
|
+
export type Prompt<T> = (agent: T) => Child;
|
|
11
|
+
/**
|
|
12
|
+
* Use `prompt` as the class's `render()`: `@render(SupportPrompt)` equals
|
|
13
|
+
* `render() { return SupportPrompt(this); }`. The instance is passed whole (a spread would drop getters).
|
|
14
|
+
*/
|
|
15
|
+
export declare function render<T extends object>(prompt: Prompt<T>): (ctor: new (...args: never[]) => T) => void;
|
|
16
|
+
//# sourceMappingURL=decorators.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/agent/decorators.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAIrF,OAAO,EAAgC,KAAK,WAAW,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,yBAAyB,CAAC;AAErD;;;GAGG;AACH,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,EAAE,OAAO,GAAE,WAAW,CAAC,CAAC,CAAM,eAEpD,CAAC,QACN,MAAM,cACA,kBAAkB,KAC7B,kBAAkB,CAYtB;AAED,oEAAoE;AACpE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,KAAK,CAAC;AAE5C;;;GAGG;AACH,wBAAgB,MAAM,CAAC,CAAC,SAAS,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,UACzB,KAAK,GAAG,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,KAAG,IAAI,CAiBlE"}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
/** The `@tool({...})` method decorator and the `@render(Prompt)` class decorator. */
|
|
2
|
+
import { withAuthorAsync } from "./authors.js";
|
|
3
|
+
import { lowerStage } from "./stages.js";
|
|
4
|
+
import { DeclarationRefused, register } from "./tools.js";
|
|
5
|
+
/**
|
|
6
|
+
* Declare a method as a tool. Its JSDoc is the description and its signature the schema;
|
|
7
|
+
* `when(state)` controls visibility (`stage` is shorthand for one). State writes are authored by it.
|
|
8
|
+
*/
|
|
9
|
+
export function tool(options = {}) {
|
|
10
|
+
return function decorate(prototype, name, descriptor) {
|
|
11
|
+
const method = descriptor.value;
|
|
12
|
+
if (typeof method !== "function") {
|
|
13
|
+
throw new TypeError(`@tool goes on a method; ${name} is not one`);
|
|
14
|
+
}
|
|
15
|
+
// Attribute every state write during the call, including after awaits, to this tool.
|
|
16
|
+
descriptor.value = function running(...args) {
|
|
17
|
+
return withAuthorAsync(name, () => method.apply(this, args));
|
|
18
|
+
};
|
|
19
|
+
register(prototype, { name, options: lowerStage(options), method });
|
|
20
|
+
return descriptor;
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Use `prompt` as the class's `render()`: `@render(SupportPrompt)` equals
|
|
25
|
+
* `render() { return SupportPrompt(this); }`. The instance is passed whole (a spread would drop getters).
|
|
26
|
+
*/
|
|
27
|
+
export function render(prompt) {
|
|
28
|
+
return function decorate(ctor) {
|
|
29
|
+
// Refuse both spellings on one class: one of them would be silently dead.
|
|
30
|
+
if (Object.getOwnPropertyDescriptor(ctor.prototype, "render") !== undefined) {
|
|
31
|
+
throw new DeclarationRefused(`${ctor.name} declares both @render(${prompt.name || "a prompt"}) and a render() method; ` +
|
|
32
|
+
`two ways to answer one question — keep one`);
|
|
33
|
+
}
|
|
34
|
+
Object.defineProperty(ctor.prototype, "render", {
|
|
35
|
+
value: function render() {
|
|
36
|
+
return prompt(this);
|
|
37
|
+
},
|
|
38
|
+
writable: true,
|
|
39
|
+
configurable: true,
|
|
40
|
+
});
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=decorators.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/agent/decorators.ts"],"names":[],"mappings":"AAAA,qFAAqF;AAErF,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,kBAAkB,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAG5E;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAmB,OAAO,GAAmB,EAAE;IACjE,OAAO,SAAS,QAAQ,CACtB,SAAY,EACZ,IAAY,EACZ,UAA8B;QAE9B,MAAM,MAAM,GAAG,UAAU,CAAC,KAAwC,CAAC;QACnE,IAAI,OAAO,MAAM,KAAK,UAAU,EAAE,CAAC;YACjC,MAAM,IAAI,SAAS,CAAC,2BAA2B,IAAI,aAAa,CAAC,CAAC;QACpE,CAAC;QACD,qFAAqF;QACrF,UAAU,CAAC,KAAK,GAAG,SAAS,OAAO,CAAe,GAAG,IAAe;YAClE,OAAO,eAAe,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,IAAI,CAAY,CAAC,CAAC;QAC1E,CAAC,CAAC;QACF,QAAQ,CAAC,SAAS,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;QACpE,OAAO,UAAU,CAAC;IACpB,CAAC,CAAC;AACJ,CAAC;AAKD;;;GAGG;AACH,MAAM,UAAU,MAAM,CAAmB,MAAiB;IACxD,OAAO,SAAS,QAAQ,CAAC,IAAiC;QACxD,0EAA0E;QAE1E,IAAI,MAAM,CAAC,wBAAwB,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,CAAC,KAAK,SAAS,EAAE,CAAC;YAC5E,MAAM,IAAI,kBAAkB,CAC1B,GAAG,IAAI,CAAC,IAAI,0BAA0B,MAAM,CAAC,IAAI,IAAI,UAAU,2BAA2B;gBACxF,4CAA4C,CAC/C,CAAC;QACJ,CAAC;QACD,MAAM,CAAC,cAAc,CAAC,IAAI,CAAC,SAAS,EAAE,QAAQ,EAAE;YAC9C,KAAK,EAAE,SAAS,MAAM;gBACpB,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC;YACtB,CAAC;YACD,QAAQ,EAAE,IAAI;YACd,YAAY,EAAE,IAAI;SACnB,CAAC,CAAC;IACL,CAAC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
/** Read a class's JSDoc and parameter types from its source at runtime, with oxc's parser. */
|
|
2
|
+
/** One parameter of a tool method, as the source declares it. */
|
|
3
|
+
export interface ParamDoc {
|
|
4
|
+
name: string;
|
|
5
|
+
type?: string;
|
|
6
|
+
optional: boolean;
|
|
7
|
+
/** JSON Schema for an interface or type literal; unset when `type` alone suffices (`string`, `number[]`). */
|
|
8
|
+
schema?: Record<string, unknown>;
|
|
9
|
+
}
|
|
10
|
+
/** A class's docstring and its methods' docstrings and parameters. */
|
|
11
|
+
export interface ClassDocs {
|
|
12
|
+
doc?: string;
|
|
13
|
+
methods: Map<string, {
|
|
14
|
+
doc?: string;
|
|
15
|
+
params: ParamDoc[];
|
|
16
|
+
}>;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* Read a class's JSDoc and method signatures from source text: a full file, or `Ctor.toString()`.
|
|
20
|
+
* `file`'s extension selects the dialect: JSX fails as .ts, and `<T>x` casts fail as .tsx.
|
|
21
|
+
*/
|
|
22
|
+
export declare function parseClassSource(text: string, file?: string): ClassDocs;
|
|
23
|
+
/** Counter bumped by each describe(); used to invalidate caches. */
|
|
24
|
+
export declare function docsVersion(): number;
|
|
25
|
+
/** Register a class's source so its docstrings and parameter types are available at runtime. */
|
|
26
|
+
export declare function describe(ctor: Function, source: string, file?: string): ClassDocs;
|
|
27
|
+
/** The class's docs, from describe() if called, else parsed from `ctor.toString()`. */
|
|
28
|
+
export declare function docsOf(ctor: Function): ClassDocs;
|
|
29
|
+
/** The class docstring, read from its source or from an explicit `static doc`. */
|
|
30
|
+
export declare function classDoc(ctor: Function): string | undefined;
|
|
31
|
+
/** The docstring of one method, looked up along the prototype chain. */
|
|
32
|
+
export declare function methodDoc(ctor: Function, name: string): string | undefined;
|
|
33
|
+
/** The parameters of one method, looked up along the prototype chain. */
|
|
34
|
+
export declare function methodParams(ctor: Function, name: string): ParamDoc[];
|
|
35
|
+
//# sourceMappingURL=docstrings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"docstrings.d.ts","sourceRoot":"","sources":["../../src/agent/docstrings.ts"],"names":[],"mappings":"AAAA,8FAA8F;AAoB9F,iEAAiE;AACjE,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,6GAA6G;IAC7G,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAED,sEAAsE;AACtE,MAAM,WAAW,SAAS;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,QAAQ,EAAE,CAAA;KAAE,CAAC,CAAC;CAC5D;AAsMD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,SAAc,GAAG,SAAS,CAyB5E;AAKD,oEAAoE;AACpE,wBAAgB,WAAW,IAAI,MAAM,CAEpC;AAED,gGAAgG;AAChG,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAKjF;AAED,uFAAuF;AACvF,wBAAgB,MAAM,CAAC,IAAI,EAAE,QAAQ,GAAG,SAAS,CAShD;AAED,kFAAkF;AAClF,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,GAAG,SAAS,CAE3D;AAaD,wEAAwE;AACxE,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAM1E;AAED,yEAAyE;AACzE,wBAAgB,YAAY,CAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,EAAE,CAMrE"}
|