@slopus/happy-agent-base 0.0.5 → 0.0.7
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/README.md +62 -9
- package/dist/Agent.d.ts +27 -22
- package/dist/Agent.d.ts.map +1 -1
- package/dist/Agent.js +120 -110
- package/dist/Agent.js.map +1 -1
- package/dist/AgentBase.d.ts +27 -13
- package/dist/AgentBase.d.ts.map +1 -1
- package/dist/AgentBase.js +657 -151
- package/dist/AgentBase.js.map +1 -1
- package/dist/AgentBaseHooks.d.ts +58 -32
- package/dist/AgentBaseHooks.d.ts.map +1 -1
- package/dist/AgentBasePending.d.ts +6 -2
- package/dist/AgentBasePending.d.ts.map +1 -1
- package/dist/AgentBasePending.js +7 -0
- package/dist/AgentBasePending.js.map +1 -1
- package/dist/AgentConfig.d.ts +20 -13
- package/dist/AgentConfig.d.ts.map +1 -1
- package/dist/AgentConfig.js +32 -12
- package/dist/AgentConfig.js.map +1 -1
- package/dist/AgentContexts.d.ts +18 -1
- package/dist/AgentContexts.d.ts.map +1 -1
- package/dist/AgentContexts.js +24 -1
- package/dist/AgentContexts.js.map +1 -1
- package/dist/AgentDatabase.d.ts +35 -0
- package/dist/AgentDatabase.d.ts.map +1 -0
- package/dist/AgentDatabase.js +30 -0
- package/dist/AgentDatabase.js.map +1 -0
- package/dist/AgentKV.d.ts +19 -6
- package/dist/AgentKV.d.ts.map +1 -1
- package/dist/AgentKV.js +110 -43
- package/dist/AgentKV.js.map +1 -1
- package/dist/AgentMessageAcceptance.d.ts +14 -0
- package/dist/AgentMessageAcceptance.d.ts.map +1 -0
- package/dist/AgentMessageAcceptance.js +2 -0
- package/dist/AgentMessageAcceptance.js.map +1 -0
- package/dist/AgentMetadata.d.ts +37 -0
- package/dist/AgentMetadata.d.ts.map +1 -0
- package/dist/AgentMetadata.js +74 -0
- package/dist/AgentMetadata.js.map +1 -0
- package/dist/AgentModule.d.ts +209 -0
- package/dist/AgentModule.d.ts.map +1 -0
- package/dist/AgentModule.js +2 -0
- package/dist/AgentModule.js.map +1 -0
- package/dist/{AgentFeatureAction.d.ts → AgentModuleAction.d.ts} +7 -2
- package/dist/AgentModuleAction.d.ts.map +1 -0
- package/dist/AgentModuleAction.js +2 -0
- package/dist/AgentModuleAction.js.map +1 -0
- package/dist/AgentPermissionMode.d.ts +1 -1
- package/dist/AgentPermissionMode.js +1 -1
- package/dist/AgentPersistence.d.ts +20 -7
- package/dist/AgentPersistence.d.ts.map +1 -1
- package/dist/AgentPersistenceDrizzle.d.ts +31 -0
- package/dist/AgentPersistenceDrizzle.d.ts.map +1 -0
- package/dist/AgentPersistenceDrizzle.js +99 -0
- package/dist/AgentPersistenceDrizzle.js.map +1 -0
- package/dist/AgentRef.d.ts +17 -9
- package/dist/AgentRef.d.ts.map +1 -1
- package/dist/AgentRef.js +16 -9
- package/dist/AgentRef.js.map +1 -1
- package/dist/AgentStorage.d.ts +33 -13
- package/dist/AgentStorage.d.ts.map +1 -1
- package/dist/AgentStorage.js +174 -3
- package/dist/AgentStorage.js.map +1 -1
- package/dist/AgentSystem.d.ts +34 -12
- package/dist/AgentSystem.d.ts.map +1 -1
- package/dist/AgentSystemContext.d.ts +3 -3
- package/dist/AgentSystemContext.d.ts.map +1 -1
- package/dist/AgentSystemContext.js +4 -4
- package/dist/AgentSystemContext.js.map +1 -1
- package/dist/AgentSystemLocal.d.ts +30 -21
- package/dist/AgentSystemLocal.d.ts.map +1 -1
- package/dist/AgentSystemLocal.js +226 -59
- package/dist/AgentSystemLocal.js.map +1 -1
- package/dist/AgentSystemRef.d.ts +21 -10
- package/dist/AgentSystemRef.d.ts.map +1 -1
- package/dist/AgentSystemRef.js +41 -9
- package/dist/AgentSystemRef.js.map +1 -1
- package/dist/AgentTool.d.ts +16 -1
- package/dist/AgentTool.d.ts.map +1 -1
- package/dist/AgentTool.js.map +1 -1
- package/dist/index.d.ts +10 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -6
- package/dist/index.js.map +1 -1
- package/package.json +4 -3
- package/dist/AgentFeature.d.ts +0 -177
- package/dist/AgentFeature.d.ts.map +0 -1
- package/dist/AgentFeature.js +0 -2
- package/dist/AgentFeature.js.map +0 -1
- package/dist/AgentFeatureAction.d.ts.map +0 -1
- package/dist/AgentFeatureAction.js +0 -2
- package/dist/AgentFeatureAction.js.map +0 -1
package/README.md
CHANGED
|
@@ -10,13 +10,25 @@ restarts.
|
|
|
10
10
|
The package also provides the primitives needed to host that runtime:
|
|
11
11
|
|
|
12
12
|
- `Agent`, `AgentSystem`, and `AgentSystemLocal` for composing and addressing agents;
|
|
13
|
-
-
|
|
13
|
+
- Drizzle-backed `AgentStorage` and scoped `AgentKV` for durable state;
|
|
14
14
|
- `AgentProviders` for resolving provider/model routes;
|
|
15
15
|
- `AgentTool` and lifecycle hooks for extending the loop.
|
|
16
16
|
|
|
17
|
-
One `AgentSystem` exclusively owns one durable store.
|
|
18
|
-
hard database-level lock
|
|
19
|
-
|
|
17
|
+
One `AgentSystem` exclusively owns one durable store. `AgentStorage` requires an asynchronous
|
|
18
|
+
Drizzle SQLite or PostgreSQL/PGlite database plus a hard database-level lock. It owns the agent
|
|
19
|
+
record, key-value, and migration tables itself. `AgentSystem.close()` stops its agents and releases
|
|
20
|
+
the lock; the runtime intentionally contains no CAS or multi-owner coordination.
|
|
21
|
+
|
|
22
|
+
By default, storage uses Drizzle transactions and installs stdlib's universal `afterCommit` scope
|
|
23
|
+
on their contexts, draining it only after the outer transaction succeeds. A host that composes
|
|
24
|
+
agent writes into a wider transaction may provide `transaction`; its callback context must carry
|
|
25
|
+
the host transaction's own stdlib `afterCommit` scope. Outside a transaction, stdlib starts
|
|
26
|
+
post-commit callbacks on the next microtask.
|
|
27
|
+
|
|
28
|
+
Storage, KV, migrations, and transactional module hooks compose with a host-owned outer
|
|
29
|
+
transaction. Live `Agent` and `AgentSystem` commands do not: creating, resolving, messaging,
|
|
30
|
+
mutating, archiving, or closing a live agent from inside an outer storage transaction is rejected
|
|
31
|
+
because the corresponding in-memory lifetime cannot be published until that transaction commits.
|
|
20
32
|
|
|
21
33
|
An agent runs in one of four permission modes — `read_only`, `workspace_write`, `auto`, and
|
|
22
34
|
`full_access` — carried on every context it derives and read back with `agentPermissionMode`. A
|
|
@@ -25,8 +37,8 @@ consumed, so a response and the tools it dispatched finish under the mode they s
|
|
|
25
37
|
is durable, and a change is reported through `permissionModeChangedTransact` and
|
|
26
38
|
`permissionModeChanged`; every message entering the conversation is reported the same way through
|
|
27
39
|
`messageAcceptedTransact` and `messageAccepted`. The runtime enforces nothing — it cannot know what
|
|
28
|
-
a tool touches — so enforcement belongs to
|
|
29
|
-
[`@slopus/happy-agent-features`](../happy-agent-features).
|
|
40
|
+
a tool touches — so enforcement belongs to modules and tools; see the companion
|
|
41
|
+
[`@slopus/happy-agent-features`](../happy-agent-features) package.
|
|
30
42
|
|
|
31
43
|
A tool call is bracketed by four hooks and executed by the loop itself. `beforeToolCallTransact`
|
|
32
44
|
runs inside the transaction that makes a dispatched batch durable; `beforeToolCall` decides what
|
|
@@ -37,11 +49,52 @@ transaction that appends the result. Nothing outside the loop ever executes a to
|
|
|
37
49
|
drove execution would be deciding inside machinery that also commits results, resumes interrupted
|
|
38
50
|
batches, and settles cancelled ones.
|
|
39
51
|
|
|
40
|
-
|
|
52
|
+
Every executable call receives an internally generated cuid2 `id`, the provider's separate opaque
|
|
53
|
+
`providerCallId`, and a call-bound `kv`. Calling `call.commit(ctx, result)` inside a transaction
|
|
54
|
+
atomically saves that result with the tool's writes. The first successful commit wins; later
|
|
55
|
+
commits and the tool's eventual return or throw are ignored. Committed results survive a crash,
|
|
56
|
+
remain ordered with their batch, and the call-bound KV is erased in the result transaction.
|
|
57
|
+
|
|
58
|
+
Modules may provide an ordered array of `[key, migration]` tuples. Agent base tracks each
|
|
59
|
+
successful key and runs every missing migration transactionally before any `beforeStart` hook; a
|
|
60
|
+
failure aborts system startup. Every module migration and hook scope carries a schema-aware common
|
|
61
|
+
Drizzle facade: a root database outside a transaction and its active transaction facade inside
|
|
62
|
+
one. Driver-only root members such as `$client` and `batch` are deliberately not part of that
|
|
63
|
+
surface. Modules may implement `beforeStart(ctx, agents, database)` and
|
|
64
|
+
`afterStart(ctx, agents, database)` hooks.
|
|
41
65
|
Every `beforeStart` settles successfully before active agents are restored; every `afterStart`
|
|
42
|
-
runs after those agents are restored and started. Both receive the system's `AgentSystemRef
|
|
66
|
+
runs after those agents are restored and started. Both receive the system's `AgentSystemRef` and
|
|
67
|
+
root database.
|
|
68
|
+
All hooks may return synchronously or with a promise, including `onEvent`; the runtime awaits each
|
|
69
|
+
answer and contains failures from observing hooks.
|
|
70
|
+
|
|
71
|
+
Messages receive a generated cuid2 identity, or accept one through `{ id }` for idempotent
|
|
72
|
+
delivery. A repeated ID is an ignored persistence conflict while its message remains in the
|
|
73
|
+
durable conversation; deliberate conversation replacement releases identities for the records it
|
|
74
|
+
removes. `send` and `steer` return the effective ID, delivery mode, and whether durable acceptance
|
|
75
|
+
created the identity or found it already present. Optional immutable metadata travels beside the
|
|
76
|
+
provider message and reaches both message-accepted hooks; module-generated send and steer actions
|
|
77
|
+
accept the same fields.
|
|
78
|
+
|
|
79
|
+
Base allocates cuid2 identities for every settled-to-settled loop, turn, inference, and settlement.
|
|
80
|
+
The IDs are persisted with outstanding work before their first lifecycle hook, survive restart,
|
|
81
|
+
and are passed to transactional and observing hook counterparts without imposing a host protocol.
|
|
82
|
+
Modules may also observe agent creation, restoration, metadata changes, and archival. Creation,
|
|
83
|
+
restoration, and archival provide transactional and post-commit hook pairs with an immutable agent
|
|
84
|
+
ID/metadata snapshot and module-scoped shared KV.
|
|
85
|
+
|
|
86
|
+
Agent configuration may contain immutable metadata such as `title`. `updateMetadata` is available
|
|
87
|
+
from `AgentBase`, `Agent`, `AgentRef`, `AgentSystem`, and `AgentSystemRef`; updates shallow-merge,
|
|
88
|
+
commit before memory changes, and fire transactional and post-commit hooks. Created agents also
|
|
89
|
+
record a durable parent. An `AgentSystemRef` carries its owning agent ID (or `null`) and uses it as
|
|
90
|
+
the default parent, while creation options may override the parent or explicitly choose `null`.
|
|
91
|
+
`parentOf` and `childOf` query the resulting direct relationship, and `AgentRef.parent` exposes it.
|
|
92
|
+
|
|
93
|
+
`AgentKV.getOrCreate(ctx, key, factory)` standardizes durable allocate-once values. Used on a
|
|
94
|
+
tool's call-bound KV, it supplies retry-stable operation identities without heap state or provider
|
|
95
|
+
call IDs.
|
|
43
96
|
|
|
44
|
-
This package contains no ready-made product
|
|
97
|
+
This package contains no ready-made product modules. Reusable tools, hooks, permissions,
|
|
45
98
|
workspaces, search, workflows, and other capabilities belong in
|
|
46
99
|
[`@slopus/happy-agent-features`](../happy-agent-features). Provider protocols and vendor
|
|
47
100
|
implementations belong in [`@slopus/happy-providers`](../happy-providers).
|
package/dist/Agent.d.ts
CHANGED
|
@@ -2,53 +2,56 @@ import type { SessionUserMessage } from "@slopus/happy-providers";
|
|
|
2
2
|
import type { Context } from "@steve.kite/stdlib";
|
|
3
3
|
import { type AgentBaseAwaitOptions, type AgentBaseMessageOptions, type AgentBaseOptions } from "./AgentBase.js";
|
|
4
4
|
import type { AgentBaseState } from "./AgentBaseState.js";
|
|
5
|
-
import type {
|
|
5
|
+
import type { AgentDatabase } from "./AgentDatabase.js";
|
|
6
|
+
import type { AgentModule } from "./AgentModule.js";
|
|
6
7
|
import type { AgentKV } from "./AgentKV.js";
|
|
8
|
+
import type { AgentMetadata } from "./AgentMetadata.js";
|
|
9
|
+
import type { AgentMessageAcceptance } from "./AgentMessageAcceptance.js";
|
|
7
10
|
import type { AnyAgentTool } from "./AgentTool.js";
|
|
8
11
|
/**
|
|
9
12
|
* Everything `AgentBase` is constructed with, except its hooks: an agent's behavior comes from
|
|
10
|
-
* its
|
|
13
|
+
* its modules, and the singular hooks the base runs with are merged from them.
|
|
11
14
|
*/
|
|
12
|
-
export interface AgentOptions<Tool extends AnyAgentTool = AnyAgentTool> extends Omit<AgentBaseOptions, "hooks"> {
|
|
15
|
+
export interface AgentOptions<Tool extends AnyAgentTool = AnyAgentTool, Database extends AgentDatabase = AgentDatabase> extends Omit<AgentBaseOptions, "hooks"> {
|
|
13
16
|
/** Independent capabilities whose hook implementations are merged, in array order. */
|
|
14
|
-
readonly
|
|
17
|
+
readonly modules?: readonly AgentModule<Tool, Database>[];
|
|
15
18
|
/**
|
|
16
|
-
* The store
|
|
19
|
+
* The store modules share with every other agent built over the same storage. Each module
|
|
17
20
|
* is handed its own scope of it, which is where anything outliving one conversation belongs.
|
|
18
21
|
*/
|
|
19
22
|
readonly sharedKV: AgentKV;
|
|
20
23
|
}
|
|
21
24
|
/**
|
|
22
|
-
* A thin wrapper around `AgentBase` that assembles its behavior from
|
|
25
|
+
* A thin wrapper around `AgentBase` that assembles its behavior from modules. Each module
|
|
23
26
|
* implements any subset of the agent hooks on its own; the agent merges them into the singular
|
|
24
27
|
* private hooks its internal base runs with.
|
|
25
28
|
*
|
|
26
|
-
*
|
|
27
|
-
*
|
|
28
|
-
* others, and lifecycle actions concatenate across
|
|
29
|
+
* Modules are independent. Observing hooks — events and lifecycle brackets — fan out to every
|
|
30
|
+
* module in array order with per-module isolation, so one throwing module never silences the
|
|
31
|
+
* others, and lifecycle actions concatenate across modules with a failing module losing only
|
|
29
32
|
* its own actions. Correctness hooks are loud instead: instructions and tools concatenate in
|
|
30
|
-
*
|
|
33
|
+
* module order — extending the base state, which `AgentBase` puts first — and a failure there
|
|
31
34
|
* fails the turn rather than running with a wrong configuration. For a model change, every
|
|
32
|
-
*
|
|
35
|
+
* module observes the change, the first returned handoff wins, and a module failure during an
|
|
33
36
|
* incompatible change rejects the switch so the history survives.
|
|
34
37
|
*/
|
|
35
|
-
export declare class Agent<Tool extends AnyAgentTool = AnyAgentTool> {
|
|
38
|
+
export declare class Agent<Tool extends AnyAgentTool = AnyAgentTool, Database extends AgentDatabase = AgentDatabase> {
|
|
36
39
|
#private;
|
|
37
40
|
/**
|
|
38
|
-
* A new agent over a fresh identity, with its
|
|
41
|
+
* A new agent over a fresh identity, with its modules' hooks merged into one set. Touches
|
|
39
42
|
* no storage.
|
|
40
43
|
*/
|
|
41
|
-
static create<Tool extends AnyAgentTool = AnyAgentTool>(ctx: Context, options: AgentOptions<Tool>): Promise<Agent<Tool>>;
|
|
44
|
+
static create<Tool extends AnyAgentTool = AnyAgentTool, Database extends AgentDatabase = AgentDatabase>(ctx: Context, options: AgentOptions<Tool, Database>): Promise<Agent<Tool, Database>>;
|
|
42
45
|
/**
|
|
43
46
|
* An agent over an identity that may already have durable state, with that state's one
|
|
44
47
|
* externally meaningful fact — whether it has work left — read before it is handed back.
|
|
45
48
|
*/
|
|
46
|
-
static load<Tool extends AnyAgentTool = AnyAgentTool>(ctx: Context, options: AgentOptions<Tool>): Promise<Agent<Tool>>;
|
|
49
|
+
static load<Tool extends AnyAgentTool = AnyAgentTool, Database extends AgentDatabase = AgentDatabase>(ctx: Context, options: AgentOptions<Tool, Database>): Promise<Agent<Tool, Database>>;
|
|
47
50
|
/**
|
|
48
51
|
* Load the agent and set it going again if it has work left, or answer with nothing when it
|
|
49
52
|
* has none — how an owner coming up carries on what an earlier process was in the middle of.
|
|
50
53
|
*/
|
|
51
|
-
static loadActive<Tool extends AnyAgentTool = AnyAgentTool>(ctx: Context, options: AgentOptions<Tool>): Promise<Agent<Tool> | undefined>;
|
|
54
|
+
static loadActive<Tool extends AnyAgentTool = AnyAgentTool, Database extends AgentDatabase = AgentDatabase>(ctx: Context, options: AgentOptions<Tool, Database>): Promise<Agent<Tool, Database> | undefined>;
|
|
52
55
|
/**
|
|
53
56
|
* Wrap an already-built base. Private, because an agent is made by `create` or by `load`,
|
|
54
57
|
* and which of the two the caller means is worth saying.
|
|
@@ -59,21 +62,23 @@ export declare class Agent<Tool extends AnyAgentTool = AnyAgentTool> {
|
|
|
59
62
|
/** Whether durable state says this agent still has work to resume. */
|
|
60
63
|
get active(): boolean;
|
|
61
64
|
/**
|
|
62
|
-
* The
|
|
65
|
+
* The module this agent runs under `name`, when it has one. An individual module holds the
|
|
63
66
|
* state of the single agent it was built for, so this is how that agent's owner reaches what
|
|
64
|
-
* belongs to it — a goal to pause, for instance. A shared
|
|
67
|
+
* belongs to it — a goal to pause, for instance. A shared module is answered here too, but
|
|
65
68
|
* it is the collection's instance, serving every agent at once.
|
|
66
69
|
*/
|
|
67
|
-
|
|
70
|
+
module(name: string): AgentModule<Tool, Database> | undefined;
|
|
68
71
|
/**
|
|
69
|
-
* The base's mutable instructions and tools, which every inference reads and every
|
|
72
|
+
* The base's mutable instructions and tools, which every inference reads and every module's
|
|
70
73
|
* own contribution extends.
|
|
71
74
|
*/
|
|
72
75
|
get state(): AgentBaseState;
|
|
73
76
|
/** Queue a user message that injects as soon as the current response and tool batch finish. */
|
|
74
|
-
steer(ctx: Context, message: SessionUserMessage, options?: AgentBaseMessageOptions & AgentBaseAwaitOptions): Promise<
|
|
77
|
+
steer(ctx: Context, message: SessionUserMessage, options?: AgentBaseMessageOptions & AgentBaseAwaitOptions): Promise<AgentMessageAcceptance>;
|
|
75
78
|
/** Queue a user message that injects only when the agent would otherwise stop. */
|
|
76
|
-
send(ctx: Context, message: SessionUserMessage, options?: AgentBaseMessageOptions & AgentBaseAwaitOptions): Promise<
|
|
79
|
+
send(ctx: Context, message: SessionUserMessage, options?: AgentBaseMessageOptions & AgentBaseAwaitOptions): Promise<AgentMessageAcceptance>;
|
|
80
|
+
/** Shallow-merge fields into this agent's immutable metadata. */
|
|
81
|
+
updateMetadata(ctx: Context, update: AgentMetadata): Promise<void>;
|
|
77
82
|
/** Start the loop without a new message, continuing a turn an earlier run left unfinished. */
|
|
78
83
|
start(): void;
|
|
79
84
|
/** Wait until the agent has nothing left to do, including work it accepted but never began. */
|
package/dist/Agent.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../sources/Agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAwB,kBAAkB,EAAE,MAAM,yBAAyB,CAAC;AACxF,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"Agent.d.ts","sourceRoot":"","sources":["../sources/Agent.ts"],"names":[],"mappings":"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"}
|