@framers/agentos 0.1.93 → 0.1.95
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 +10 -0
- package/dist/api/AgentOS.d.ts +13 -0
- package/dist/api/AgentOS.d.ts.map +1 -1
- package/dist/api/AgentOS.js +36 -1
- package/dist/api/AgentOS.js.map +1 -1
- package/dist/api/agent.d.ts +7 -0
- package/dist/api/agent.d.ts.map +1 -1
- package/dist/api/agent.js +34 -2
- package/dist/api/agent.js.map +1 -1
- package/dist/api/generateImage.d.ts +3 -0
- package/dist/api/generateImage.d.ts.map +1 -1
- package/dist/api/generateImage.js +95 -36
- package/dist/api/generateImage.js.map +1 -1
- package/dist/api/generateText.d.ts +9 -0
- package/dist/api/generateText.d.ts.map +1 -1
- package/dist/api/generateText.js +173 -101
- package/dist/api/generateText.js.map +1 -1
- package/dist/api/observability.d.ts +16 -0
- package/dist/api/observability.d.ts.map +1 -0
- package/dist/api/observability.js +46 -0
- package/dist/api/observability.js.map +1 -0
- package/dist/api/streamText.d.ts.map +1 -1
- package/dist/api/streamText.js +93 -22
- package/dist/api/streamText.js.map +1 -1
- package/dist/api/usageLedger.d.ts +58 -0
- package/dist/api/usageLedger.d.ts.map +1 -0
- package/dist/api/usageLedger.js +151 -0
- package/dist/api/usageLedger.js.map +1 -0
- package/dist/core/tools/IToolOrchestrator.d.ts +38 -1
- package/dist/core/tools/IToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolOrchestrator.d.ts +58 -1
- package/dist/core/tools/ToolOrchestrator.d.ts.map +1 -1
- package/dist/core/tools/ToolOrchestrator.js +116 -1
- package/dist/core/tools/ToolOrchestrator.js.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts +19 -0
- package/dist/discovery/CapabilityDiscoveryEngine.d.ts.map +1 -1
- package/dist/discovery/CapabilityDiscoveryEngine.js +54 -0
- package/dist/discovery/CapabilityDiscoveryEngine.js.map +1 -1
- package/dist/discovery/types.d.ts +8 -1
- package/dist/discovery/types.d.ts.map +1 -1
- package/dist/discovery/types.js.map +1 -1
- package/dist/emergent/ComposableToolBuilder.d.ts +125 -0
- package/dist/emergent/ComposableToolBuilder.d.ts.map +1 -0
- package/dist/emergent/ComposableToolBuilder.js +318 -0
- package/dist/emergent/ComposableToolBuilder.js.map +1 -0
- package/dist/emergent/EmergentCapabilityEngine.d.ts +168 -0
- package/dist/emergent/EmergentCapabilityEngine.d.ts.map +1 -0
- package/dist/emergent/EmergentCapabilityEngine.js +437 -0
- package/dist/emergent/EmergentCapabilityEngine.js.map +1 -0
- package/dist/emergent/EmergentJudge.d.ts +283 -0
- package/dist/emergent/EmergentJudge.d.ts.map +1 -0
- package/dist/emergent/EmergentJudge.js +463 -0
- package/dist/emergent/EmergentJudge.js.map +1 -0
- package/dist/emergent/EmergentToolRegistry.d.ts +286 -0
- package/dist/emergent/EmergentToolRegistry.d.ts.map +1 -0
- package/dist/emergent/EmergentToolRegistry.js +546 -0
- package/dist/emergent/EmergentToolRegistry.js.map +1 -0
- package/dist/emergent/ForgeToolMetaTool.d.ts +124 -0
- package/dist/emergent/ForgeToolMetaTool.d.ts.map +1 -0
- package/dist/emergent/ForgeToolMetaTool.js +170 -0
- package/dist/emergent/ForgeToolMetaTool.js.map +1 -0
- package/dist/emergent/SandboxedToolForge.d.ts +185 -0
- package/dist/emergent/SandboxedToolForge.d.ts.map +1 -0
- package/dist/emergent/SandboxedToolForge.js +383 -0
- package/dist/emergent/SandboxedToolForge.js.map +1 -0
- package/dist/emergent/index.d.ts +25 -0
- package/dist/emergent/index.d.ts.map +1 -0
- package/dist/emergent/index.js +20 -0
- package/dist/emergent/index.js.map +1 -0
- package/dist/emergent/types.d.ts +596 -0
- package/dist/emergent/types.d.ts.map +1 -0
- package/dist/emergent/types.js +36 -0
- package/dist/emergent/types.js.map +1 -0
- package/dist/index.d.ts +8 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +7 -1
- package/dist/index.js.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.d.ts.map +1 -1
- package/dist/orchestration/runtime/GraphRuntime.js +53 -11
- package/dist/orchestration/runtime/GraphRuntime.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview EmergentToolRegistry — tiered lifecycle manager for emergent tools.
|
|
3
|
+
* @module @framers/agentos/emergent/EmergentToolRegistry
|
|
4
|
+
*
|
|
5
|
+
* Manages the lifecycle of emergent tools across three trust tiers:
|
|
6
|
+
*
|
|
7
|
+
* - **Session tier**: In-memory `Map`, auto-cleaned when the session ends.
|
|
8
|
+
* Tools at this tier live only for the duration of the agent session and are
|
|
9
|
+
* never persisted.
|
|
10
|
+
*
|
|
11
|
+
* - **Agent tier**: Persisted in SQLite via the `agentos_emergent_tools` table.
|
|
12
|
+
* Tools at this tier are scoped to the agent that created them and survive
|
|
13
|
+
* across sessions.
|
|
14
|
+
*
|
|
15
|
+
* - **Shared tier**: Same SQLite table, discoverable by all agents. Promotion
|
|
16
|
+
* to shared tier requires explicit human or system approval.
|
|
17
|
+
*
|
|
18
|
+
* All state changes are logged to an in-memory audit trail (and to the
|
|
19
|
+
* `agentos_emergent_audit_log` table when a storage adapter is provided).
|
|
20
|
+
*
|
|
21
|
+
* The registry operates fully in-memory when no storage adapter is supplied,
|
|
22
|
+
* making it suitable for testing and ephemeral agents.
|
|
23
|
+
*/
|
|
24
|
+
import type { EmergentTool, ToolTier, ToolUsageStats, EmergentConfig } from './types.js';
|
|
25
|
+
/**
|
|
26
|
+
* Minimal storage adapter interface for SQLite persistence.
|
|
27
|
+
*
|
|
28
|
+
* The registry uses this abstraction so it can work with any SQLite driver
|
|
29
|
+
* (better-sqlite3, sql.js, Drizzle raw, etc.) without taking a hard dependency.
|
|
30
|
+
* All methods are async to support both sync and async driver wrappers.
|
|
31
|
+
*/
|
|
32
|
+
export interface IStorageAdapter {
|
|
33
|
+
/**
|
|
34
|
+
* Execute a single SQL statement that does not return rows.
|
|
35
|
+
* Used for INSERT, UPDATE, DELETE, and DDL statements.
|
|
36
|
+
*
|
|
37
|
+
* @param sql - The SQL statement to execute.
|
|
38
|
+
* @param params - Optional positional parameters bound to `?` placeholders.
|
|
39
|
+
*/
|
|
40
|
+
run(sql: string, params?: unknown[]): Promise<unknown>;
|
|
41
|
+
/**
|
|
42
|
+
* Execute a single SQL query and return the first matching row.
|
|
43
|
+
*
|
|
44
|
+
* @param sql - The SQL SELECT statement.
|
|
45
|
+
* @param params - Optional positional parameters bound to `?` placeholders.
|
|
46
|
+
* @returns The first row as a plain object, or `undefined` if no rows match.
|
|
47
|
+
*/
|
|
48
|
+
get(sql: string, params?: unknown[]): Promise<unknown>;
|
|
49
|
+
/**
|
|
50
|
+
* Execute a single SQL query and return all matching rows.
|
|
51
|
+
*
|
|
52
|
+
* @param sql - The SQL SELECT statement.
|
|
53
|
+
* @param params - Optional positional parameters bound to `?` placeholders.
|
|
54
|
+
* @returns An array of plain objects, one per matching row.
|
|
55
|
+
*/
|
|
56
|
+
all(sql: string, params?: unknown[]): Promise<unknown[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Execute a raw SQL string containing one or more statements.
|
|
59
|
+
* Used for schema DDL (CREATE TABLE, CREATE INDEX).
|
|
60
|
+
* Not all adapters support this — the registry falls back to `run()` if absent.
|
|
61
|
+
*
|
|
62
|
+
* @param sql - The raw SQL string to execute.
|
|
63
|
+
*/
|
|
64
|
+
exec?(sql: string): Promise<void>;
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* A single entry in the emergent tool audit trail.
|
|
68
|
+
*
|
|
69
|
+
* Audit entries record every significant state change: registration, promotion,
|
|
70
|
+
* demotion, usage recording, and session cleanup. They are stored both in-memory
|
|
71
|
+
* and (when a storage adapter is provided) in the `agentos_emergent_audit_log`
|
|
72
|
+
* SQLite table.
|
|
73
|
+
*/
|
|
74
|
+
export interface AuditEntry {
|
|
75
|
+
/** Unique identifier for this audit entry. */
|
|
76
|
+
id: string;
|
|
77
|
+
/** The tool ID this event pertains to. */
|
|
78
|
+
toolId: string;
|
|
79
|
+
/** Machine-readable event type (e.g., `'register'`, `'promote'`, `'demote'`). */
|
|
80
|
+
eventType: string;
|
|
81
|
+
/** Optional structured data associated with the event. */
|
|
82
|
+
data?: unknown;
|
|
83
|
+
/** Unix epoch millisecond timestamp of when the event occurred. */
|
|
84
|
+
timestamp: number;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Manages the lifecycle of emergent tools across three trust tiers.
|
|
88
|
+
*
|
|
89
|
+
* The registry stores session-tier tools in an in-memory Map (keyed by tool ID)
|
|
90
|
+
* and agent/shared-tier tools in SQLite (when a storage adapter is provided) or
|
|
91
|
+
* in a separate in-memory Map as fallback.
|
|
92
|
+
*
|
|
93
|
+
* Key responsibilities:
|
|
94
|
+
* - **Registration**: Accept new tools at a given tier, enforcing config limits.
|
|
95
|
+
* - **Lookup**: Retrieve tools by ID or filter by tier with optional scope.
|
|
96
|
+
* - **Usage tracking**: Record invocations and update rolling statistics.
|
|
97
|
+
* - **Promotion / demotion**: Move tools between tiers with audit logging.
|
|
98
|
+
* - **Session cleanup**: Bulk-remove all session-scoped tools for a given session.
|
|
99
|
+
* - **Audit trail**: Log every state change for observability and debugging.
|
|
100
|
+
*
|
|
101
|
+
* @example
|
|
102
|
+
* ```ts
|
|
103
|
+
* const registry = new EmergentToolRegistry({ ...DEFAULT_EMERGENT_CONFIG, enabled: true });
|
|
104
|
+
* registry.register(tool, 'session');
|
|
105
|
+
* registry.recordUse(tool.id, { x: 1 }, { y: 2 }, true, 42);
|
|
106
|
+
* const stats = registry.getUsageStats(tool.id);
|
|
107
|
+
* ```
|
|
108
|
+
*/
|
|
109
|
+
export declare class EmergentToolRegistry {
|
|
110
|
+
/** In-memory store for session-tier tools, keyed by tool ID. */
|
|
111
|
+
private readonly sessionTools;
|
|
112
|
+
/** In-memory store for agent/shared-tier tools when no DB is available. */
|
|
113
|
+
private readonly persistedTools;
|
|
114
|
+
/** In-memory audit log. Always populated regardless of DB availability. */
|
|
115
|
+
private readonly auditLog;
|
|
116
|
+
/** Resolved configuration, merged with defaults. */
|
|
117
|
+
private readonly config;
|
|
118
|
+
/** Optional SQLite storage adapter for agent/shared tier persistence. */
|
|
119
|
+
private readonly db?;
|
|
120
|
+
/** Whether `ensureSchema()` has been called and completed. */
|
|
121
|
+
private schemaReady;
|
|
122
|
+
/**
|
|
123
|
+
* Create a new EmergentToolRegistry.
|
|
124
|
+
*
|
|
125
|
+
* @param config - Emergent capability configuration. Missing fields are
|
|
126
|
+
* filled from {@link DEFAULT_EMERGENT_CONFIG}.
|
|
127
|
+
* @param db - Optional SQLite storage adapter. When provided, agent and
|
|
128
|
+
* shared tier tools are persisted to the `agentos_emergent_tools` table.
|
|
129
|
+
* When omitted, all tiers use in-memory storage only.
|
|
130
|
+
*/
|
|
131
|
+
constructor(config?: Partial<EmergentConfig>, db?: IStorageAdapter);
|
|
132
|
+
/**
|
|
133
|
+
* Initialize the database schema for emergent tool persistence.
|
|
134
|
+
*
|
|
135
|
+
* Creates the `agentos_emergent_tools` and `agentos_emergent_audit_log`
|
|
136
|
+
* tables along with their indexes. Safe to call multiple times — all
|
|
137
|
+
* statements use `CREATE TABLE IF NOT EXISTS` / `CREATE INDEX IF NOT EXISTS`.
|
|
138
|
+
*
|
|
139
|
+
* This method is a no-op when no storage adapter was provided.
|
|
140
|
+
*
|
|
141
|
+
* @throws If the storage adapter's `exec` or `run` method rejects.
|
|
142
|
+
*/
|
|
143
|
+
ensureSchema(): Promise<void>;
|
|
144
|
+
/**
|
|
145
|
+
* Register a new emergent tool at the given tier.
|
|
146
|
+
*
|
|
147
|
+
* Session-tier tools are stored in the in-memory session map. Agent and shared
|
|
148
|
+
* tier tools are stored in the persisted map (and will be written to SQLite on
|
|
149
|
+
* the next DB sync if a storage adapter is available).
|
|
150
|
+
*
|
|
151
|
+
* @param tool - The emergent tool to register. Must have a unique `id`.
|
|
152
|
+
* @param tier - The tier to register the tool at. The tool's `tier` property
|
|
153
|
+
* is updated to match.
|
|
154
|
+
*
|
|
155
|
+
* @throws {Error} If the maximum tool count for the target tier is exceeded
|
|
156
|
+
* (checked against `maxSessionTools` or `maxAgentTools` from config).
|
|
157
|
+
* @throws {Error} If a tool with the same ID is already registered.
|
|
158
|
+
*/
|
|
159
|
+
register(tool: EmergentTool, tier: ToolTier): void;
|
|
160
|
+
/**
|
|
161
|
+
* Retrieve a tool by its unique identifier.
|
|
162
|
+
*
|
|
163
|
+
* Searches all tiers (session first, then persisted agent/shared).
|
|
164
|
+
*
|
|
165
|
+
* @param toolId - The tool ID to look up.
|
|
166
|
+
* @returns The tool if found, or `undefined` if no tool with that ID exists.
|
|
167
|
+
*/
|
|
168
|
+
get(toolId: string): EmergentTool | undefined;
|
|
169
|
+
/**
|
|
170
|
+
* Remove a tool from the registry entirely.
|
|
171
|
+
*
|
|
172
|
+
* Used to roll back newly forged tools when downstream activation fails.
|
|
173
|
+
*/
|
|
174
|
+
remove(toolId: string): boolean;
|
|
175
|
+
/**
|
|
176
|
+
* Get all tools registered at a specific tier, optionally filtered by scope.
|
|
177
|
+
*
|
|
178
|
+
* @param tier - The tier to query (`'session'`, `'agent'`, or `'shared'`).
|
|
179
|
+
* @param scope - Optional scope filter. When provided, results are narrowed:
|
|
180
|
+
* - `sessionId`: Match tools whose `source` string contains the session ID.
|
|
181
|
+
* - `agentId`: Match tools whose `createdBy` equals the agent ID.
|
|
182
|
+
* @returns An array of matching tools (may be empty).
|
|
183
|
+
*/
|
|
184
|
+
getByTier(tier: ToolTier, scope?: {
|
|
185
|
+
sessionId?: string;
|
|
186
|
+
agentId?: string;
|
|
187
|
+
}): EmergentTool[];
|
|
188
|
+
/**
|
|
189
|
+
* Record a tool invocation, updating rolling usage statistics.
|
|
190
|
+
*
|
|
191
|
+
* Updates the tool's {@link ToolUsageStats} in place:
|
|
192
|
+
* - Increments `totalUses`.
|
|
193
|
+
* - Increments `successCount` or `failureCount` based on the `success` flag.
|
|
194
|
+
* - Recalculates `avgExecutionTimeMs` as a running average.
|
|
195
|
+
* - Recalculates `confidenceScore` as `successCount / totalUses`.
|
|
196
|
+
* - Sets `lastUsedAt` to the current ISO-8601 timestamp.
|
|
197
|
+
*
|
|
198
|
+
* @param toolId - The ID of the tool that was invoked.
|
|
199
|
+
* @param _input - The input arguments passed to the tool (logged for audit).
|
|
200
|
+
* @param _output - The output returned by the tool (logged for audit).
|
|
201
|
+
* @param success - Whether the invocation completed successfully.
|
|
202
|
+
* @param executionTimeMs - Wall-clock execution time in milliseconds.
|
|
203
|
+
*
|
|
204
|
+
* @throws {Error} If no tool with the given ID is registered.
|
|
205
|
+
*/
|
|
206
|
+
recordUse(toolId: string, _input: unknown, _output: unknown, success: boolean, executionTimeMs: number): void;
|
|
207
|
+
/**
|
|
208
|
+
* Retrieve usage statistics for a registered tool.
|
|
209
|
+
*
|
|
210
|
+
* @param toolId - The tool ID to look up.
|
|
211
|
+
* @returns The tool's {@link ToolUsageStats}, or `undefined` if the tool
|
|
212
|
+
* is not registered.
|
|
213
|
+
*/
|
|
214
|
+
getUsageStats(toolId: string): ToolUsageStats | undefined;
|
|
215
|
+
/**
|
|
216
|
+
* Promote a tool to a higher lifecycle tier.
|
|
217
|
+
*
|
|
218
|
+
* Moves the tool from its current tier to `targetTier`. If the tool was at
|
|
219
|
+
* session tier, it is removed from the session map and added to the persisted
|
|
220
|
+
* map. If a storage adapter is available and the target tier is agent or
|
|
221
|
+
* shared, the tool is persisted to the database.
|
|
222
|
+
*
|
|
223
|
+
* @param toolId - The ID of the tool to promote.
|
|
224
|
+
* @param targetTier - The target tier to promote to. Must be strictly higher
|
|
225
|
+
* than the tool's current tier.
|
|
226
|
+
* @param approvedBy - Optional identifier of the human or system entity that
|
|
227
|
+
* approved the promotion.
|
|
228
|
+
*
|
|
229
|
+
* @throws {Error} If the tool is not found.
|
|
230
|
+
* @throws {Error} If `targetTier` is not higher than the tool's current tier.
|
|
231
|
+
*/
|
|
232
|
+
promote(toolId: string, targetTier: ToolTier, approvedBy?: string): Promise<void>;
|
|
233
|
+
/**
|
|
234
|
+
* Demote or deactivate a tool.
|
|
235
|
+
*
|
|
236
|
+
* Marks the tool as inactive by setting a sentinel on its usage stats
|
|
237
|
+
* (`confidenceScore` set to 0) and logs the demotion event with a reason.
|
|
238
|
+
*
|
|
239
|
+
* Inactive tools are still retrievable via `get()` but should be filtered
|
|
240
|
+
* out by callers when building tool lists for the LLM.
|
|
241
|
+
*
|
|
242
|
+
* @param toolId - The ID of the tool to demote.
|
|
243
|
+
* @param reason - Human-readable explanation for why the tool is being demoted.
|
|
244
|
+
*
|
|
245
|
+
* @throws {Error} If the tool is not found.
|
|
246
|
+
*/
|
|
247
|
+
demote(toolId: string, reason: string): void;
|
|
248
|
+
/**
|
|
249
|
+
* Remove all session-tier tools associated with a specific session.
|
|
250
|
+
*
|
|
251
|
+
* Iterates the session map and deletes every tool whose `source` string
|
|
252
|
+
* contains the given session ID. Logs a cleanup audit event for each
|
|
253
|
+
* removed tool.
|
|
254
|
+
*
|
|
255
|
+
* @param sessionId - The session identifier to match against tool `source`
|
|
256
|
+
* strings.
|
|
257
|
+
* @returns The number of tools removed.
|
|
258
|
+
*/
|
|
259
|
+
cleanupSession(sessionId: string): number;
|
|
260
|
+
/**
|
|
261
|
+
* Retrieve audit log entries, optionally filtered by tool ID.
|
|
262
|
+
*
|
|
263
|
+
* @param toolId - When provided, only entries for this tool are returned.
|
|
264
|
+
* @returns An array of {@link AuditEntry} objects in chronological order.
|
|
265
|
+
*/
|
|
266
|
+
getAuditLog(toolId?: string): AuditEntry[];
|
|
267
|
+
/**
|
|
268
|
+
* Log an audit event to both the in-memory trail and (optionally) the database.
|
|
269
|
+
*
|
|
270
|
+
* @param toolId - The tool this event pertains to.
|
|
271
|
+
* @param eventType - Machine-readable event type string.
|
|
272
|
+
* @param data - Optional structured data to attach to the event.
|
|
273
|
+
*/
|
|
274
|
+
private logAudit;
|
|
275
|
+
/**
|
|
276
|
+
* Upsert a tool record into the `agentos_emergent_tools` SQLite table.
|
|
277
|
+
*
|
|
278
|
+
* Uses INSERT OR REPLACE to handle both initial persistence and updates
|
|
279
|
+
* after promotion.
|
|
280
|
+
*
|
|
281
|
+
* @param tool - The emergent tool to persist.
|
|
282
|
+
* @param approvedBy - Optional identifier of the promotion approver.
|
|
283
|
+
*/
|
|
284
|
+
private persistToolToDb;
|
|
285
|
+
}
|
|
286
|
+
//# sourceMappingURL=EmergentToolRegistry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"EmergentToolRegistry.d.ts","sourceRoot":"","sources":["../../src/emergent/EmergentToolRegistry.ts"],"names":[],"mappings":"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"}
|