@stratusagent/gateway 0.11.3 → 0.11.5
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 +5 -1
- package/dist/index.d.ts +80 -82
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +302 -208
- package/dist/index.js.map +1 -1
- package/dist/sessions.d.ts +211 -0
- package/dist/sessions.d.ts.map +1 -0
- package/dist/sessions.js +592 -0
- package/dist/sessions.js.map +1 -0
- package/package.json +7 -7
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|
|
5
5
|
One gateway owns:
|
|
6
6
|
|
|
7
|
-
- **Durable sessions** — `SqliteSessionStore`
|
|
7
|
+
- **Durable sessions, one database per agent** — `ShardedSessionStore` over a `SqliteSessionStore` per agent (`node:sqlite`, Node 22.13+, no native deps) at `~/.stratus/agents/<id>/sessions.db`, so a store is opened on one agent's path and no query can return another's rows. The whole session round-trips as one JSON body, provider replay state included, so a conversation resumed after a daemon restart replays exactly. Session ids are caller-chosen and stable (channels derive them from conversations), which is what makes any inbound message resumable — and a fleet-wide index in `~/.stratus/fleet.db` is where such an id is claimed, where a lookup with no agent in hand resolves it, and what answers the reads that were never about one agent (status counts, per-agent activity, the listing, the restart sweeps). `start()` reconciles the index against the stores before anything reads either.
|
|
8
8
|
- **A per-provider runner pool** — each agent's soul pins its own provider/model; config re-resolves on every dispatch and runners are pooled by resolved configuration, so two agents never share a billing path or credentials by accident.
|
|
9
9
|
- **Dispatcher-backed delegation** — `agent.delegate` routes the target through the same per-provider dispatch as a direct message; a delegated specialist runs on *their* provider, never the delegator's.
|
|
10
10
|
- **Approval recovery** — a turn parked on a human is a durable checkpoint, not a lost turn. The runner records the parked call and the calls queued behind it *before* asking, and clears it before the tool runs, so the record covers exactly the window in which nothing has happened. On start the gateway sweeps for `pending_approval` sessions and finishes them: the parked call is re-asked (or refused, if its window ran out while the process was down), and the queue behind it drains, so every `tool_use` still ends with a `tool_result`. Earlier calls are never replayed — their results were already durable, and a re-asked request keeps the remainder of its original window rather than starting a new one. Calls made through a provider that drives its own inner loop are deliberately excluded: recovery re-enters the *kernel* loop and cannot rebuild that provider's, so those fail cleanly instead (see [04](../../docs/roadmap/04-agent-sdk-bridge.md)).
|
|
@@ -26,3 +26,7 @@ await gateway.stop(); // drains in-flight turns first
|
|
|
26
26
|
```
|
|
27
27
|
|
|
28
28
|
Run it in the foreground with `stratus serve`. A launchd template for macOS lives in `launchd/com.stratuslabs.stratusd.plist`.
|
|
29
|
+
|
|
30
|
+
**A host that starts the gateway itself owns the state migration.** `stratus serve` claims the home (`claimHome`) and runs the pending migrations before it ever calls `createGateway`. A host doing its own wiring must do the same on a directory written by a build before the per-agent layout: `start()` refuses one that still holds a shared `sessions.db` or an `<id>.whitelist.json`, rather than opening empty stores over it and starting a second population beside every session, schedule, and grant already there. The message names the fix — claim the home, then `await runStateMigrations(env, { exclusive: true })` from `@stratusagent/state`. The gateway will not do it unasked: the move needs the directory to itself, and only the host knows whether it has it.
|
|
31
|
+
|
|
32
|
+
The question is asked about `stateDir` — the directory the stores were actually opened on — not about `~/.stratus`. A host that set its own `stateDir` is stranding *that* directory's sessions, and `stratus update` does not migrate a directory it does not know about; the refusal says so rather than pointing at a remedy that would not apply.
|
package/dist/index.d.ts
CHANGED
|
@@ -1,88 +1,12 @@
|
|
|
1
|
-
import { EventBus, type AgentDefinition, type AlwaysMeans, type ApprovalAnswer, type ApprovalOutcome, type ApprovalPolicy, type ImageAttachment, type JsonObject, type Session, type
|
|
1
|
+
import { EventBus, type AgentDefinition, type AlwaysMeans, type ApprovalAnswer, type ApprovalOutcome, type ApprovalPolicy, type ImageAttachment, type JsonObject, type Session, type ToolRisk } from '@stratusagent/core';
|
|
2
2
|
import { type ParsedSoul, type ScheduleRecord } from '@stratusagent/agents';
|
|
3
3
|
import { type SchedulerLimits } from './schedules.ts';
|
|
4
|
+
import { ShardedSessionStore } from './sessions.ts';
|
|
4
5
|
export { claimHome, homeLockPath, HomeClaimedError, type HomeClaim, } from './lock.ts';
|
|
6
|
+
export { SqliteSessionStore, ShardedSessionStore, FleetSessionIndex, SessionIdTakenError, tightenSqliteFile, type SqliteSessionStoreOptions, type ShardedSessionStoreOptions, type SessionIndexRow, type SessionReconcileReport, } from './sessions.ts';
|
|
5
7
|
export { SqliteScheduleStore, createSchedulerRuntime, isScheduleSessionId, SCHEDULE_SESSION_ID_PREFIX, type ScheduleStoreLike, type SchedulerLimits, type SchedulerRuntime, type SchedulerRuntimeOptions, } from './schedules.ts';
|
|
6
8
|
import { type OptionalModuleHost } from '@stratusagent/plugins';
|
|
7
9
|
import { type PluginsConfig, type RuntimeSelection, type StateEnvironment } from '@stratusagent/state';
|
|
8
|
-
/**
|
|
9
|
-
* Where a daemon with no explicit `sessionDbPath` keeps its database — the
|
|
10
|
-
* one rule for it, exported because `stratus schedules` opens the same file
|
|
11
|
-
* from another process and a re-derived copy of this join is how the CLI
|
|
12
|
-
* ends up auditing a database no daemon writes.
|
|
13
|
-
*/
|
|
14
|
-
export declare const defaultSessionDbPath: (env?: StateEnvironment) => string;
|
|
15
|
-
/**
|
|
16
|
-
* Durable session storage on node:sqlite (unflagged on Node 22.13+). The
|
|
17
|
-
* whole session — messages, status, and metadata, including provider replay
|
|
18
|
-
* state like the Anthropic raw-turn cache — round-trips as one JSON body,
|
|
19
|
-
* so a conversation resumed after a daemon restart replays exactly.
|
|
20
|
-
*/
|
|
21
|
-
export interface SqliteSessionStoreOptions {
|
|
22
|
-
/**
|
|
23
|
-
* The database's parent directory is dedicated Stratus state (e.g. the
|
|
24
|
-
* default ~/.stratus): tighten it to owner-only even when it already
|
|
25
|
-
* exists, since mkdir's mode only applies to directories it creates and
|
|
26
|
-
* an upgrade over a looser install must not stay world-readable. Leave
|
|
27
|
-
* false for caller-supplied paths — a shared parent like /tmp or a
|
|
28
|
-
* project directory must never be chmodded implicitly.
|
|
29
|
-
*/
|
|
30
|
-
ownedDirectory?: boolean;
|
|
31
|
-
}
|
|
32
|
-
export declare class SqliteSessionStore implements SessionStore {
|
|
33
|
-
private readonly db;
|
|
34
|
-
constructor(filePath: string, options?: SqliteSessionStoreOptions);
|
|
35
|
-
create(input: Omit<Session, 'createdAt' | 'updatedAt'>): Promise<Session>;
|
|
36
|
-
get(id: string): Promise<Session | undefined>;
|
|
37
|
-
save(session: Session): Promise<void>;
|
|
38
|
-
/**
|
|
39
|
-
* Session ids in a state, oldest first — the index a restarting daemon
|
|
40
|
-
* sweeps for turns parked on a human. The `status` column carries it, so
|
|
41
|
-
* no conversation body is deserialized to answer the question.
|
|
42
|
-
*/
|
|
43
|
-
listIdsByStatus(status: SessionStatus): Promise<string[]>;
|
|
44
|
-
/**
|
|
45
|
-
* When each agent last did anything, and how many of its sessions are live
|
|
46
|
-
* right now.
|
|
47
|
-
*
|
|
48
|
-
* One aggregate over the indexed columns — no conversation body is
|
|
49
|
-
* deserialized, for the same reason `listIdsByStatus` returns ids: a
|
|
50
|
-
* roster view asks this on every load, and it must not cost a JSON parse
|
|
51
|
-
* per session to answer.
|
|
52
|
-
*
|
|
53
|
-
* Both halves are needed and neither is sufficient. `lastActiveAt` alone
|
|
54
|
-
* reads a turn parked on a human as idle, because the save that recorded
|
|
55
|
-
* the park is the last thing that touched the row — and a turn waiting
|
|
56
|
-
* twenty minutes on an approval is exactly when someone wants to see the
|
|
57
|
-
* agent lit. `activeSessions` alone loses an agent that finished a moment
|
|
58
|
-
* ago. The caller decides what window counts as "recent"; a daemon that
|
|
59
|
-
* baked one in would need upgrading to change it.
|
|
60
|
-
*/
|
|
61
|
-
/**
|
|
62
|
-
* How many sessions are in each state.
|
|
63
|
-
*
|
|
64
|
-
* A grouped count, not a listing that gets counted. The table grows for the
|
|
65
|
-
* life of an install and a health endpoint is polled, so materialising one
|
|
66
|
-
* object per historical session to produce five numbers gets steadily
|
|
67
|
-
* slower at exactly the thing meant to report that the daemon is fine.
|
|
68
|
-
*/
|
|
69
|
-
countByStatus(): Record<string, number>;
|
|
70
|
-
lastActivityByAgent(): Record<string, {
|
|
71
|
-
lastActiveAt: string;
|
|
72
|
-
activeSessions: number;
|
|
73
|
-
}>;
|
|
74
|
-
/**
|
|
75
|
-
* Newest-first session listing for one agent (or all agents).
|
|
76
|
-
*
|
|
77
|
-
* `limit` is not decoration: this table grows for the life of an install,
|
|
78
|
-
* and a surface that renders "recent conversations" would otherwise pull
|
|
79
|
-
* every session anyone has ever had to show ten of them.
|
|
80
|
-
*/
|
|
81
|
-
list(agentId?: string, limit?: number): Array<Pick<Session, 'id' | 'status' | 'createdAt' | 'updatedAt'> & {
|
|
82
|
-
agentId: string;
|
|
83
|
-
}>;
|
|
84
|
-
close(): void;
|
|
85
|
-
}
|
|
86
10
|
/**
|
|
87
11
|
* A soul's provider/model pins, and the daemon-wide defaults they demote.
|
|
88
12
|
*
|
|
@@ -360,15 +284,43 @@ export interface GatewayPluginStatus {
|
|
|
360
284
|
trusted?: boolean;
|
|
361
285
|
tools?: GatewayTool[];
|
|
362
286
|
skills?: GatewaySkill[];
|
|
287
|
+
/** Provider names it registered — what a soul's `provider:` can select. */
|
|
288
|
+
providers?: string[];
|
|
289
|
+
/** Channel kinds it registered, and the agents each carries. */
|
|
290
|
+
channels?: Array<{
|
|
291
|
+
kind: string;
|
|
292
|
+
agents: string[];
|
|
293
|
+
}>;
|
|
294
|
+
/** Memory store names it registered — what `memoryStore` can select. */
|
|
295
|
+
memory?: string[];
|
|
296
|
+
/** Executor names it registered — what `executor` can select. */
|
|
297
|
+
executors?: string[];
|
|
363
298
|
/** Present when the plugin did not load, and the only field that is. */
|
|
364
299
|
error?: string;
|
|
365
300
|
}
|
|
301
|
+
/** One provider a soul's `provider:` can select on this daemon. */
|
|
302
|
+
export interface GatewayProviderStatus {
|
|
303
|
+
/** The name as a soul writes it: `anthropic`, or a plugin's `ollama`. */
|
|
304
|
+
name: string;
|
|
305
|
+
/** The plugin package that registered it; absent for a built-in. */
|
|
306
|
+
package?: string;
|
|
307
|
+
}
|
|
366
308
|
export interface GatewayOptions {
|
|
367
309
|
env?: StateEnvironment;
|
|
368
310
|
/** Gateway-wide provider/model overrides applied beneath per-soul pins. */
|
|
369
311
|
selection?: RuntimeSelection;
|
|
370
312
|
/** Channel adapters to run (Slack, …). Started on start(), stopped on stop(). */
|
|
371
313
|
channels?: GatewayChannelAdapter[];
|
|
314
|
+
/**
|
|
315
|
+
* Which (kind, agent) pairs the host's own adapters carry, so a plugin
|
|
316
|
+
* channel claiming one of them is refused at load rather than started
|
|
317
|
+
* beside it. The Slack adapter the CLI wires reports its agents here;
|
|
318
|
+
* a host that omits this lets a plugin double up on a host adapter.
|
|
319
|
+
*/
|
|
320
|
+
hostChannelClaims?: Array<{
|
|
321
|
+
kind: string;
|
|
322
|
+
agents: readonly string[];
|
|
323
|
+
}>;
|
|
372
324
|
/**
|
|
373
325
|
* The policy, or a factory that builds one from the gateway's approval
|
|
374
326
|
* transport. Pass a factory whenever the policy parks turns on a human
|
|
@@ -381,6 +333,16 @@ export interface GatewayOptions {
|
|
|
381
333
|
* which is only ever right in a test. Default 15 minutes.
|
|
382
334
|
*/
|
|
383
335
|
approvalTimeoutMs?: number;
|
|
336
|
+
/**
|
|
337
|
+
* How many tool turns one dispatched turn may take before the runner
|
|
338
|
+
* wraps it up with a summary. Default 40 (`DEFAULT_MAX_TURNS` in core).
|
|
339
|
+
*
|
|
340
|
+
* Applies to every runner this gateway builds, so a delegated
|
|
341
|
+
* sub-session is held to the same ceiling as the turn that delegated it
|
|
342
|
+
* — they are separate dispatches and each gets its own allowance, not a
|
|
343
|
+
* share of one. `stratus serve` fills it from the trusted config's
|
|
344
|
+
* `maxTurns`.
|
|
345
|
+
*/
|
|
384
346
|
maxTurns?: number;
|
|
385
347
|
/**
|
|
386
348
|
* The activity watchdog: abort a turn when no event for its session has
|
|
@@ -388,8 +350,17 @@ export interface GatewayOptions {
|
|
|
388
350
|
* event, or response resets it. 0 disables. Default 120s.
|
|
389
351
|
*/
|
|
390
352
|
idleTimeoutMs?: number;
|
|
391
|
-
/**
|
|
392
|
-
|
|
353
|
+
/**
|
|
354
|
+
* Where the per-agent session stores (`agents/<id>/sessions.db`) and the
|
|
355
|
+
* fleet database (`fleet.db`, holding the schedules and the session
|
|
356
|
+
* index) live. Default `~/.stratus`.
|
|
357
|
+
*
|
|
358
|
+
* A directory rather than the single database path it replaced: after
|
|
359
|
+
* step 15's layer A there is no one file to point at, which is the
|
|
360
|
+
* point — a store is opened on one agent's path, so no query can return
|
|
361
|
+
* another agent's rows.
|
|
362
|
+
*/
|
|
363
|
+
stateDir?: string;
|
|
393
364
|
/**
|
|
394
365
|
* Scheduler limits — the interval floor, the per-agent cap on concurrent
|
|
395
366
|
* scheduled turns, and the tick cadence. Defaults are production values;
|
|
@@ -404,6 +375,24 @@ export interface GatewayOptions {
|
|
|
404
375
|
* is already understood.
|
|
405
376
|
*/
|
|
406
377
|
plugins?: PluginsConfig;
|
|
378
|
+
/**
|
|
379
|
+
* Which executor runs tool calls, by the name a plugin registered it
|
|
380
|
+
* under (`local`, or absent, is the built-in child-process executor).
|
|
381
|
+
* From a **trusted** config only, like `plugins`: an executor is where
|
|
382
|
+
* an agent's commands run, and a cloned repository swapping a sandbox
|
|
383
|
+
* for the host is the downgrade that rule exists to refuse. A name no
|
|
384
|
+
* loaded plugin registered fails `start()` — a daemon silently running
|
|
385
|
+
* commands on the host when the operator selected a sandbox is worse
|
|
386
|
+
* than one that did not start.
|
|
387
|
+
*/
|
|
388
|
+
executor?: string;
|
|
389
|
+
/**
|
|
390
|
+
* Which store backs agent memory, by registered name (`file`, or absent,
|
|
391
|
+
* is the built-in). Same trust rule and same refusal as `executor`: a
|
|
392
|
+
* daemon writing memories into a store the operator did not select is a
|
|
393
|
+
* daemon whose agents remember into the wrong place.
|
|
394
|
+
*/
|
|
395
|
+
memoryStore?: string;
|
|
407
396
|
/**
|
|
408
397
|
* How plugin packages are resolved and imported.
|
|
409
398
|
*
|
|
@@ -496,7 +485,7 @@ export interface Gateway {
|
|
|
496
485
|
/** Live events from every runner, one stream for all consumers. */
|
|
497
486
|
readonly bus: EventBus;
|
|
498
487
|
/** The store shared by every runner (durable across restarts). */
|
|
499
|
-
readonly store:
|
|
488
|
+
readonly store: ShardedSessionStore;
|
|
500
489
|
/** The current roster, default agent included. */
|
|
501
490
|
agents(): AgentDefinition[];
|
|
502
491
|
/**
|
|
@@ -583,6 +572,13 @@ export interface Gateway {
|
|
|
583
572
|
* and an empty list would say the opposite.
|
|
584
573
|
*/
|
|
585
574
|
plugins(): GatewayPluginStatus[];
|
|
575
|
+
/**
|
|
576
|
+
* Every provider a soul's `provider:` can select on this daemon: the
|
|
577
|
+
* built-ins, then what loaded plugins registered, in load order. The
|
|
578
|
+
* registry, not the literal — a surface listing providers reads this so
|
|
579
|
+
* a contributed one is offered where the built-ins are.
|
|
580
|
+
*/
|
|
581
|
+
providers(): GatewayProviderStatus[];
|
|
586
582
|
/**
|
|
587
583
|
* The soul behind each agent in the current roster, built-in included
|
|
588
584
|
* (which has none).
|
|
@@ -699,6 +695,8 @@ export declare const ROLLED_OVER_FROM_METADATA_KEY = "rolledOverFrom";
|
|
|
699
695
|
export declare const ROLLED_OVER_TO_METADATA_KEY = "rolledOverTo";
|
|
700
696
|
/** The segment a rollover mints into the archived transcript's id. */
|
|
701
697
|
export declare const ROLLED_OVER_SESSION_ID_MARKER = ":rolledover:";
|
|
698
|
+
/** Where the session's tool calls ran: `local-command`, or a contributed executor's registered name. */
|
|
699
|
+
export declare const EXECUTOR_METADATA_KEY = "executor";
|
|
702
700
|
export declare const RESERVED_SESSION_METADATA_KEYS: readonly string[];
|
|
703
701
|
/**
|
|
704
702
|
* The first reserved key `metadata` carries, or undefined when it carries
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|