@stratusagent/gateway 0.4.0 → 0.7.0

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/dist/index.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import { EventBus, type AgentDefinition, type ApprovalAnswer, type ApprovalPolicy, type JsonObject, type Session, type SessionStatus, type SessionStore, type ToolRisk } from '@stratusagent/core';
2
2
  import { type ParsedSoul } from '@stratusagent/agents';
3
- import { type RuntimeSelection, type StateEnvironment } from '@stratusagent/state';
3
+ import { type OptionalModuleHost } from '@stratusagent/plugins';
4
+ import { type PluginsConfig, type RuntimeSelection, type StateEnvironment } from '@stratusagent/state';
4
5
  /**
5
6
  * Durable session storage on node:sqlite (unflagged on Node 22.13+). The
6
7
  * whole session — messages, status, and metadata, including provider replay
@@ -30,45 +31,81 @@ export declare class SqliteSessionStore implements SessionStore {
30
31
  * no conversation body is deserialized to answer the question.
31
32
  */
32
33
  listIdsByStatus(status: SessionStatus): Promise<string[]>;
33
- /** Newest-first session listing for one agent (or all agents). */
34
- list(agentId?: string): Array<Pick<Session, 'id' | 'status' | 'createdAt' | 'updatedAt'> & {
34
+ /**
35
+ * When each agent last did anything, and how many of its sessions are live
36
+ * right now.
37
+ *
38
+ * One aggregate over the indexed columns — no conversation body is
39
+ * deserialized, for the same reason `listIdsByStatus` returns ids: a
40
+ * roster view asks this on every load, and it must not cost a JSON parse
41
+ * per session to answer.
42
+ *
43
+ * Both halves are needed and neither is sufficient. `lastActiveAt` alone
44
+ * reads a turn parked on a human as idle, because the save that recorded
45
+ * the park is the last thing that touched the row — and a turn waiting
46
+ * twenty minutes on an approval is exactly when someone wants to see the
47
+ * agent lit. `activeSessions` alone loses an agent that finished a moment
48
+ * ago. The caller decides what window counts as "recent"; a daemon that
49
+ * baked one in would need upgrading to change it.
50
+ */
51
+ /**
52
+ * How many sessions are in each state.
53
+ *
54
+ * A grouped count, not a listing that gets counted. The table grows for the
55
+ * life of an install and a health endpoint is polled, so materialising one
56
+ * object per historical session to produce five numbers gets steadily
57
+ * slower at exactly the thing meant to report that the daemon is fine.
58
+ */
59
+ countByStatus(): Record<string, number>;
60
+ lastActivityByAgent(): Record<string, {
61
+ lastActiveAt: string;
62
+ activeSessions: number;
63
+ }>;
64
+ /**
65
+ * Newest-first session listing for one agent (or all agents).
66
+ *
67
+ * `limit` is not decoration: this table grows for the life of an install,
68
+ * and a surface that renders "recent conversations" would otherwise pull
69
+ * every session anyone has ever had to show ten of them.
70
+ */
71
+ list(agentId?: string, limit?: number): Array<Pick<Session, 'id' | 'status' | 'createdAt' | 'updatedAt'> & {
35
72
  agentId: string;
36
73
  }>;
37
74
  close(): void;
38
75
  }
76
+ /**
77
+ * A soul's provider/model pins, and the daemon-wide defaults they demote.
78
+ *
79
+ * The implementation lives in `@stratusagent/state`, beside the resolver
80
+ * whose precedence it manipulates — it never had a gateway dependency. It is
81
+ * re-exported here because this is where callers were told to import it from,
82
+ * and because "what will a served agent actually resolve to" is a gateway
83
+ * question even when the rule answering it is not gateway code.
84
+ */
85
+ export { applySoulPins, type SoulPinContext } from '@stratusagent/state';
39
86
  /**
40
87
  * A channel adapter as the gateway sees it: started after the roster
41
88
  * loads, stopped before the store drains. Structurally identical to
42
89
  * @stratusagent/channels' ChannelAdapter — kept structural here so the
43
90
  * gateway does not depend on the channels package.
44
91
  */
45
- /** Where the daemon-wide provider default could have come from. */
46
- export interface SoulPinContext {
47
- /** A provider fixed by the caller (the gateway's own selection). */
48
- selectionProvider?: string;
49
- /** The provider named by the active config file. */
50
- configProvider?: string;
51
- /** Whether a config file was found at all. */
52
- configPresent: boolean;
53
- }
54
- /**
55
- * Apply a soul's provider/model pins to a selection, demoting the
56
- * daemon-wide defaults the pins outrank.
57
- *
58
- * Exported because this is not only dispatch logic: anything that wants to
59
- * know what a served agent will actually resolve to — a startup billing
60
- * check, a diagnostic — has to normalize the same way, and a second copy
61
- * of these rules drifts from this one.
62
- */
63
- export declare const applySoulPins: (pins: ParsedSoul, selection: RuntimeSelection, env: StateEnvironment, context: SoulPinContext) => {
64
- selection: RuntimeSelection;
65
- env: StateEnvironment;
66
- };
67
92
  export interface GatewayChannelAdapter {
68
93
  name: string;
69
94
  start(gateway: Gateway): Promise<void>;
70
95
  stop(): Promise<void>;
71
96
  }
97
+ /**
98
+ * Where a session came from, as the gateway reports it. Structural for the
99
+ * same reason as the adapter above — @stratusagent/channels declares the
100
+ * matching shape for adapters to consume, and neither package imports the
101
+ * other to agree on it.
102
+ */
103
+ export interface SessionRouting {
104
+ /** Whose app must do the talking. */
105
+ agentId: string;
106
+ /** The metadata the dispatching surface attached to the session. */
107
+ metadata: JsonObject;
108
+ }
72
109
  /**
73
110
  * What the gateway hands a policy that needs a human somewhere else: one
74
111
  * function that publishes a request and settles on the answer. Handed to a
@@ -104,6 +141,36 @@ export interface GatewayApprovalRequest {
104
141
  signal?: AbortSignal;
105
142
  }
106
143
  export type ApprovalRequester = (request: GatewayApprovalRequest) => Promise<ApprovalAnswer>;
144
+ /**
145
+ * A parked call as an observer sees it — everything `tool.approval-requested`
146
+ * announced, still outstanding.
147
+ *
148
+ * Listable because an event stream only tells you what happened while you
149
+ * were listening. A surface that connects while a turn is already parked
150
+ * would otherwise show no pending request at all until the next one, and
151
+ * rebuilding the set from the bus means keeping a second copy of state the
152
+ * gateway already holds.
153
+ */
154
+ export interface PendingApproval {
155
+ requestId: string;
156
+ sessionId: string;
157
+ agentId: string;
158
+ call: {
159
+ id: string;
160
+ toolName: string;
161
+ input: JsonObject;
162
+ };
163
+ risk: ToolRisk;
164
+ /** When this call parked, ISO-8601. */
165
+ parkedAt: string;
166
+ /**
167
+ * When it denies itself, ISO-8601. Absent when it never will — the same
168
+ * distinction the announcing event draws.
169
+ */
170
+ expiresAt?: string;
171
+ /** The session's metadata: where the turn is happening. */
172
+ metadata?: JsonObject;
173
+ }
107
174
  export interface ResolveApprovalInput {
108
175
  requestId: string;
109
176
  answer: ApprovalAnswer;
@@ -122,6 +189,39 @@ export interface ResolveApprovalInput {
122
189
  */
123
190
  reason?: 'decided' | 'undeliverable';
124
191
  }
192
+ /** One registered tool, as an operator's surfaces need to see it. */
193
+ export interface GatewayTool {
194
+ name: string;
195
+ description?: string;
196
+ risk: ToolRisk;
197
+ /** The plugin package that contributed it; absent for kernel tools. */
198
+ package?: string;
199
+ /** Whether that package is trusted to declare a tool `safe`. */
200
+ trusted?: boolean;
201
+ }
202
+ /** One skill this daemon serves — identity and provenance, never the body. */
203
+ export interface GatewaySkill {
204
+ /** Canonical id: bare for an operator-installed skill, `<package>:<skill>` for a plugin's. */
205
+ id: string;
206
+ name: string;
207
+ description: string;
208
+ /** The bare id a plugin's skill also answers to, while no one else claims it. */
209
+ alias?: string;
210
+ /** The plugin package that contributed it; absent for operator-installed skills. */
211
+ package?: string;
212
+ /** Where the SKILL.md lives. */
213
+ path?: string;
214
+ }
215
+ /** A plugin this daemon was asked to load, and what came of it. */
216
+ export interface GatewayPluginStatus {
217
+ package: string;
218
+ name?: string;
219
+ trusted?: boolean;
220
+ tools?: GatewayTool[];
221
+ skills?: GatewaySkill[];
222
+ /** Present when the plugin did not load, and the only field that is. */
223
+ error?: string;
224
+ }
125
225
  export interface GatewayOptions {
126
226
  env?: StateEnvironment;
127
227
  /** Gateway-wide provider/model overrides applied beneath per-soul pins. */
@@ -149,6 +249,26 @@ export interface GatewayOptions {
149
249
  idleTimeoutMs?: number;
150
250
  /** Session database path. Default ~/.stratus/sessions.db. */
151
251
  sessionDbPath?: string;
252
+ /**
253
+ * Plugins to load, keyed by package name — the `plugins` block, which the
254
+ * caller has already read from a **trusted** config. The gateway does not
255
+ * go looking for one: a plugin runs in-process with the daemon, and which
256
+ * file may say so is a decision that belongs where the config precedence
257
+ * is already understood.
258
+ */
259
+ plugins?: PluginsConfig;
260
+ /**
261
+ * How plugin packages are resolved and imported.
262
+ *
263
+ * Worth passing, and `stratus serve` does. `import.meta.resolve` answers
264
+ * relative to the module that calls it, so the default here asks "is this
265
+ * plugin visible from the gateway package" when the question is "is it
266
+ * visible from the thing the operator installed". Those differ under any
267
+ * layout that is not flat — a pnpm install being the obvious one — and the
268
+ * failure is a plugin reported as not installed while sitting right next
269
+ * to the CLI.
270
+ */
271
+ pluginHost?: OptionalModuleHost;
152
272
  log?: (line: string) => void;
153
273
  warn?: (line: string) => void;
154
274
  }
@@ -164,6 +284,16 @@ export interface DispatchInput {
164
284
  userMessage: string;
165
285
  metadata?: JsonObject;
166
286
  signal?: AbortSignal;
287
+ /**
288
+ * Caller-chosen id for this turn, so events emitted while it runs can be
289
+ * attributed to it. A session processes several turns in sequence and
290
+ * `StratusEvent` carries no turn identifier, so a surface that queued a
291
+ * message has no other way to tell its own deltas from the next caller's.
292
+ *
293
+ * Optional because most callers do not need one: a channel renders
294
+ * whatever arrives for the conversation it is watching.
295
+ */
296
+ turnId?: string;
167
297
  }
168
298
  export interface Gateway {
169
299
  start(): Promise<void>;
@@ -176,6 +306,81 @@ export interface Gateway {
176
306
  readonly store: SqliteSessionStore;
177
307
  /** The current roster, default agent included. */
178
308
  agents(): AgentDefinition[];
309
+ /**
310
+ * Re-read the agents directory and the configured default soul, returning
311
+ * the roster that results. Souls are already re-read on every dispatch, so
312
+ * this is for files that appeared or disappeared since start — an agent
313
+ * created by another surface, or one whose soul was deleted.
314
+ */
315
+ reloadRoster(): Promise<AgentDefinition[]>;
316
+ /**
317
+ * The turn currently running on a session, if the caller that started it
318
+ * named one. Single-flight per session is what makes this exact: at most
319
+ * one turn is ever running on a session, so an event emitted for it
320
+ * belongs to this turn and no other.
321
+ */
322
+ activeTurnId(sessionId: string): string | undefined;
323
+ /** Every call parked on a human right now, oldest first. */
324
+ pendingApprovals(): PendingApproval[];
325
+ /**
326
+ * Every registered tool, with the risk it will actually be judged at and
327
+ * the package it came from.
328
+ *
329
+ * Provenance is the reason this is not `tools.describe()`: "which of
330
+ * these can this daemon run, and whose code is it" is the question the
331
+ * catalog endpoint and 07's tool screens are asking, and a descriptor
332
+ * list answers only half of it. Kernel tools have no package, which is
333
+ * itself the answer for them.
334
+ */
335
+ tools(): GatewayTool[];
336
+ /**
337
+ * Every skill this daemon serves — operator-installed and
338
+ * plugin-contributed — with the ids an allowlist can name. Descriptors
339
+ * only: bodies stay behind `skill.read`, on the agent's own turn.
340
+ */
341
+ skills(): GatewaySkill[];
342
+ /**
343
+ * The plugins this daemon loaded, and the ones it could not — a plugin an
344
+ * operator enabled that failed to load is exactly what they need to see,
345
+ * and an empty list would say the opposite.
346
+ */
347
+ plugins(): GatewayPluginStatus[];
348
+ /**
349
+ * The soul behind each agent in the current roster, built-in included
350
+ * (which has none).
351
+ *
352
+ * The roster the daemon is *serving*, which the agents directory stops
353
+ * describing the moment a soul is added, deleted, or broken since the last
354
+ * reload — and the gateway keeps dispatching from the soul it cached. A
355
+ * caller that has to answer "what would a turn as this agent run on" needs
356
+ * the pins that answer it, so this hands back the parsed soul rather than a
357
+ * path a second reader would have to re-read (and now read differently).
358
+ *
359
+ * Async because it re-reads each soul file, exactly as `refreshAgent` does
360
+ * before every dispatch: a pin edited on disk is live on the next turn, so
361
+ * a caller answering from the load-time snapshot would name the provider
362
+ * the daemon has already stopped billing. An unreadable file falls back to
363
+ * the cached soul, which is what that next dispatch falls back to as well.
364
+ *
365
+ * An agent is **absent** from this list when its file now declares a
366
+ * different id: `refreshAgent` refuses every dispatch for the old one until
367
+ * the roster reloads, so nothing is served under it and no runtime should
368
+ * be claimed for it. The roster it reports is therefore what can currently
369
+ * run, which is a narrower thing than `agents()`.
370
+ */
371
+ servedSouls(): Promise<Array<{
372
+ id: string;
373
+ soul?: ParsedSoul;
374
+ }>>;
375
+ /**
376
+ * Where a durable session came from — its agent, and the metadata the
377
+ * dispatching surface attached to it.
378
+ *
379
+ * A projection rather than an accessor: the session's messages are not
380
+ * a channel's business, and handing back the whole record to save a few
381
+ * lines would make them one.
382
+ */
383
+ sessionRouting(sessionId: string): Promise<SessionRouting | undefined>;
179
384
  /**
180
385
  * Settles a parked call. Returns false when the request is not pending —
181
386
  * already decided, expired, or belonging to a turn that was cancelled —
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,QAAQ,EAIR,KAAK,eAAe,EACpB,KAAK,cAAc,EACnB,KAAK,cAAc,EAEnB,KAAK,UAAU,EACf,KAAK,OAAO,EACZ,KAAK,aAAa,EAClB,KAAK,YAAY,EAEjB,KAAK,QAAQ,EACd,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,KAAK,UAAU,EAChB,MAAM,sBAAsB,CAAC;AAE9B,OAAO,EAqBL,KAAK,gBAAgB,EACrB,KAAK,gBAAgB,EACtB,MAAM,qBAAqB,CAAC;AAiB7B;;;;;GAKG;AACH,MAAM,WAAW,yBAAyB;IACxC;;;;;;;OAOG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B;AAED,qBAAa,kBAAmB,YAAW,YAAY;IACrD,OAAO,CAAC,QAAQ,CAAC,EAAE,CAAe;gBAEtB,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,yBAA8B;IAuD/D,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,GAAG,WAAW,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC;IASzE,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,GAAG,SAAS,CAAC;IAO7C,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3C;;;;OAIG;IACG,eAAe,CAAC,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAO/D,kEAAkE;IAClE,IAAI,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,QAAQ,GAAG,WAAW,GAAG,WAAW,CAAC,GAAG;QAAE,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC;IAmB/G,KAAK,IAAI,IAAI;CAGd;AAED;;;;;GAKG;AACH,mEAAmE;AACnE,MAAM,WAAW,cAAc;IAC7B,oEAAoE;IACpE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,oDAAoD;IACpD,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,8CAA8C;IAC9C,aAAa,EAAE,OAAO,CAAC;CACxB;AAED;;;;;;;;GAQG;AACH,eAAO,MAAM,aAAa,GACxB,MAAM,UAAU,EAChB,WAAW,gBAAgB,EAC3B,KAAK,gBAAgB,EACrB,SAAS,cAAc,KACtB;IAAE,SAAS,EAAE,gBAAgB,CAAC;IAAC,GAAG,EAAE,gBAAgB,CAAA;CAiDtD,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACvC,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACvB;AAED;;;;;;GAMG;AACH,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,iBAAiB,CAAC;CAC5B;AAED;;;;;GAKG;AACH,MAAM,WAAW,sBAAsB;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,UAAU,CAAA;KAAE,CAAC;IAC1D,IAAI,EAAE,QAAQ,CAAC;IACf;;;;;;OAMG;IACH,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,MAAM,iBAAiB,GAAG,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC,cAAc,CAAC,CAAC;AAE7F,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,cAAc,CAAC;IACvB;;;;OAIG;IACH,KAAK,CAAC,EAAE,MAAM,CAAC;IACf;;;;;;OAMG;IACH,MAAM,CAAC,EAAE,SAAS,GAAG,eAAe,CAAC;CACtC;AAED,MAAM,WAAW,cAAc;IAC7B,GAAG,CAAC,EAAE,gBAAgB,CAAC;IACvB,2EAA2E;IAC3E,SAAS,CAAC,EAAE,gBAAgB,CAAC;IAC7B,iFAAiF;IACjF,QAAQ,CAAC,EAAE,qBAAqB,EAAE,CAAC;IACnC;;;;;OAKG;IACH,SAAS,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,SAAS,EAAE,iBAAiB,KAAK,cAAc,CAAC,CAAC;IAChF;;;OAGG;IACH,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB;;;;OAIG;IACH,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,6DAA6D;IAC7D,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,GAAG,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;IAC7B,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,UAAU,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB;AAED,MAAM,WAAW,OAAO;IACtB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACvB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACtB,qFAAqF;IACrF,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IACjD,mEAAmE;IACnE,QAAQ,CAAC,GAAG,EAAE,QAAQ,CAAC;IACvB,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,kBAAkB,CAAC;IACnC,kDAAkD;IAClD,MAAM,IAAI,eAAe,EAAE,CAAC;IAC5B;;;;;;OAMG;IACH,eAAe,CAAC,KAAK,EAAE,oBAAoB,GAAG,OAAO,CAAC;CACvD;AAUD;;;;;;;;GAQG;AACH,eAAO,MAAM,oBAAoB,oGACkE,CAAC;AAEpG;;;;;GAKG;AACH,eAAO,MAAM,aAAa,GAAI,UAAS,cAAmB,KAAG,OA2nC5D,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}