@framers/agentos 0.12.12 → 0.12.14

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.
Files changed (86) hide show
  1. package/README.md +1 -1
  2. package/dist/api/agency.d.ts.map +1 -1
  3. package/dist/api/agency.js +26 -5
  4. package/dist/api/agency.js.map +1 -1
  5. package/dist/api/agent.d.ts +35 -1
  6. package/dist/api/agent.d.ts.map +1 -1
  7. package/dist/api/agent.js +8 -0
  8. package/dist/api/agent.js.map +1 -1
  9. package/dist/api/gmi.d.ts +21 -0
  10. package/dist/api/gmi.d.ts.map +1 -0
  11. package/dist/api/gmi.js +527 -0
  12. package/dist/api/gmi.js.map +1 -0
  13. package/dist/api/hitl.d.ts +3 -2
  14. package/dist/api/hitl.d.ts.map +1 -1
  15. package/dist/api/hitl.js +8 -2
  16. package/dist/api/hitl.js.map +1 -1
  17. package/dist/api/runtime/agentCognitiveMemory.d.ts +82 -0
  18. package/dist/api/runtime/agentCognitiveMemory.d.ts.map +1 -0
  19. package/dist/api/runtime/agentCognitiveMemory.js +277 -0
  20. package/dist/api/runtime/agentCognitiveMemory.js.map +1 -0
  21. package/dist/api/runtime/approval-gate.d.ts +13 -8
  22. package/dist/api/runtime/approval-gate.d.ts.map +1 -1
  23. package/dist/api/runtime/approval-gate.js +75 -25
  24. package/dist/api/runtime/approval-gate.js.map +1 -1
  25. package/dist/api/runtime/capabilityContract.d.ts +21 -1
  26. package/dist/api/runtime/capabilityContract.d.ts.map +1 -1
  27. package/dist/api/runtime/capabilityContract.js +15 -15
  28. package/dist/api/runtime/capabilityContract.js.map +1 -1
  29. package/dist/api/runtime/gmiCognition.d.ts +66 -0
  30. package/dist/api/runtime/gmiCognition.d.ts.map +1 -0
  31. package/dist/api/runtime/gmiCognition.js +58 -0
  32. package/dist/api/runtime/gmiCognition.js.map +1 -0
  33. package/dist/api/runtime/gmiPersona.d.ts +16 -0
  34. package/dist/api/runtime/gmiPersona.d.ts.map +1 -0
  35. package/dist/api/runtime/gmiPersona.js +91 -0
  36. package/dist/api/runtime/gmiPersona.js.map +1 -0
  37. package/dist/api/runtime/gmiResults.d.ts +98 -0
  38. package/dist/api/runtime/gmiResults.d.ts.map +1 -0
  39. package/dist/api/runtime/gmiResults.js +333 -0
  40. package/dist/api/runtime/gmiResults.js.map +1 -0
  41. package/dist/api/runtime/gmiSession.d.ts +85 -0
  42. package/dist/api/runtime/gmiSession.d.ts.map +1 -0
  43. package/dist/api/runtime/gmiSession.js +285 -0
  44. package/dist/api/runtime/gmiSession.js.map +1 -0
  45. package/dist/api/runtime/gmiTranscript.d.ts +48 -0
  46. package/dist/api/runtime/gmiTranscript.d.ts.map +1 -0
  47. package/dist/api/runtime/gmiTranscript.js +110 -0
  48. package/dist/api/runtime/gmiTranscript.js.map +1 -0
  49. package/dist/api/runtime/lightweightAgentDiagnostics.d.ts +6 -1
  50. package/dist/api/runtime/lightweightAgentDiagnostics.d.ts.map +1 -1
  51. package/dist/api/runtime/lightweightAgentDiagnostics.js +9 -2
  52. package/dist/api/runtime/lightweightAgentDiagnostics.js.map +1 -1
  53. package/dist/api/runtime/tool-emulation/loop.d.ts +5 -0
  54. package/dist/api/runtime/tool-emulation/loop.d.ts.map +1 -1
  55. package/dist/api/runtime/tool-emulation/loop.js +4 -4
  56. package/dist/api/runtime/tool-emulation/loop.js.map +1 -1
  57. package/dist/api/sessionHistory.d.ts +43 -1
  58. package/dist/api/sessionHistory.d.ts.map +1 -1
  59. package/dist/api/sessionHistory.js +56 -1
  60. package/dist/api/sessionHistory.js.map +1 -1
  61. package/dist/api/sessionTranscript.d.ts +8 -0
  62. package/dist/api/sessionTranscript.d.ts.map +1 -1
  63. package/dist/api/sessionTranscript.js.map +1 -1
  64. package/dist/api/transferStyle.d.ts +8 -0
  65. package/dist/api/transferStyle.d.ts.map +1 -1
  66. package/dist/api/transferStyle.js +4 -1
  67. package/dist/api/transferStyle.js.map +1 -1
  68. package/dist/api/types.d.ts +32 -12
  69. package/dist/api/types.d.ts.map +1 -1
  70. package/dist/api/types.js.map +1 -1
  71. package/dist/cognition/substrate/GMI.d.ts.map +1 -1
  72. package/dist/cognition/substrate/GMI.js +54 -2
  73. package/dist/cognition/substrate/GMI.js.map +1 -1
  74. package/dist/cognition/substrate/IGMI.d.ts +23 -1
  75. package/dist/cognition/substrate/IGMI.d.ts.map +1 -1
  76. package/dist/cognition/substrate/IGMI.js.map +1 -1
  77. package/dist/io/vision/VisionPipeline.d.ts +5 -0
  78. package/dist/io/vision/VisionPipeline.d.ts.map +1 -1
  79. package/dist/io/vision/VisionPipeline.js +28 -13
  80. package/dist/io/vision/VisionPipeline.js.map +1 -1
  81. package/dist/io/vision/index.d.ts.map +1 -1
  82. package/dist/io/vision/index.js +2 -0
  83. package/dist/io/vision/index.js.map +1 -1
  84. package/dist/io/vision/types.d.ts +11 -0
  85. package/dist/io/vision/types.d.ts.map +1 -1
  86. package/package.json +1 -1
@@ -0,0 +1,527 @@
1
+ /**
2
+ * @file gmi.ts
3
+ * gmi(): an agent whose sessions are Generalized Mind Instances, built
4
+ * in-process from agent options (spec D5-D12). `agent({ runtime: 'gmi' })`
5
+ * returns the same handle.
6
+ *
7
+ * Construction checks what needs no environment: options the GMI path cannot
8
+ * honour, the cognition profile, and the `memory.embedding` settings that name
9
+ * their provider. The persona (with the provider and model it resolves), the
10
+ * prompt engine, utility AI and tool orchestrator the sessions share, and the
11
+ * cognitive memory are built on first use, so an agent made before its keys are
12
+ * set resolves them on its first call; a build that fails is not kept, and the
13
+ * next call builds again.
14
+ */
15
+ import { randomUUID } from 'node:crypto';
16
+ import { GMI } from '../cognition/substrate/GMI.js';
17
+ import { InMemoryWorkingMemory } from '../cognition/substrate/memory/InMemoryWorkingMemory.js';
18
+ import { StatisticalUtilityAI } from '../cognition/nlp/ai_utilities/StatisticalUtilityAI.js';
19
+ import { PromptEngine } from '../core/llm/PromptEngine.js';
20
+ import { ToolPermissionManager } from '../core/tools/permissions/ToolPermissionManager.js';
21
+ import { ToolExecutor } from '../core/tools/ToolExecutor.js';
22
+ import { ToolOrchestrator } from '../core/tools/ToolOrchestrator.js';
23
+ import { ExtensionRegistry } from '../extensions/ExtensionRegistry.js';
24
+ import { EXTENSION_KIND_TOOL } from '../extensions/types.js';
25
+ import { createCompletionGateway } from './runtime/completionGateway.js';
26
+ import { GatewayProviderManager } from './runtime/gatewayProviderManager.js';
27
+ import { adaptTools } from './runtime/toolAdapter.js';
28
+ import { resolveCognition } from './runtime/gmiCognition.js';
29
+ import { personaFromAgentOptions } from './runtime/gmiPersona.js';
30
+ import { assertEmbeddingConfig, createAgentCognitiveMemory } from './runtime/agentCognitiveMemory.js';
31
+ import { sendGmiTurn, streamGmiTurn, TurnLock } from './runtime/gmiSession.js';
32
+ import { transcriptToConversation } from './runtime/gmiTranscript.js';
33
+ import { SessionHistoryBuffer, SESSION_HISTORY_DEFAULTS } from './sessionHistory.js';
34
+ import { accumulateUsage, createEmptyUsageAggregate, mergeAggregates } from './runtime/usageAccumulator.js';
35
+ import { exportAgentConfig, exportAgentConfigJSON } from './agentExportCore.js';
36
+ import { getDeferredCapabilities } from './runtime/lightweightAgentDiagnostics.js';
37
+ /** Options with no GMI-path implementation yet; set, they throw at construction. */
38
+ const UNSUPPORTED_ON_GMI = ['voice', 'avatar', 'channels'];
39
+ /** Per-call overrides generate() and stream() accept on the GMI path (spec D10). */
40
+ const ALLOWED_CALL_OVERRIDES = new Set(['temperature', 'maxTokens', 'topP', 'responseFormat', 'model', 'provider', 'maxSteps', 'usageLedger']);
41
+ /** Per-call overrides that pick the route, the step limit or the ledger rather than a completion option. */
42
+ const ROUTE_OVERRIDES = new Set(['model', 'provider', 'maxSteps', 'usageLedger']);
43
+ /** `agent()`'s step limit. */
44
+ const DEFAULT_MAX_STEPS = 5;
45
+ const GMI_PROMPT_ENGINE_CONFIG = {
46
+ defaultTemplateName: 'openai_chat',
47
+ availableTemplates: {},
48
+ tokenCounting: { strategy: 'estimated', estimationModel: 'gpt-3.5-turbo' },
49
+ // Truncation only: no utility AI is passed, and no summary is made by a model call.
50
+ historyManagement: { defaultMaxMessages: 100000, maxTokensForHistory: 120000, summarizationTriggerRatio: 0, preserveImportantMessages: true },
51
+ contextManagement: { maxRAGContextTokens: 1500, summarizationQualityTier: 'balanced', preserveSourceAttributionInSummary: true },
52
+ contextualElementSelection: { maxElementsPerType: {}, defaultMaxElementsPerType: 3, priorityResolutionStrategy: 'highest_first', conflictResolutionStrategy: 'skip_conflicting' },
53
+ performance: { enableCaching: false, cacheTimeoutSeconds: 60 },
54
+ };
55
+ function isSet(value) {
56
+ if (value == null || value === false)
57
+ return false;
58
+ if (typeof value === 'object')
59
+ return Object.keys(value).length > 0;
60
+ return true;
61
+ }
62
+ /**
63
+ * A memoised async build that is not kept when it fails: the next call after a
64
+ * rejection builds again, so one transient failure does not fail every later
65
+ * call. `reset()` drops a kept result.
66
+ */
67
+ function retryingOnce(build) {
68
+ let pending;
69
+ return {
70
+ get() {
71
+ if (!pending) {
72
+ const attempt = build();
73
+ pending = attempt;
74
+ attempt.catch(() => {
75
+ if (pending === attempt)
76
+ pending = undefined;
77
+ });
78
+ }
79
+ return pending;
80
+ },
81
+ peek: () => pending,
82
+ reset() {
83
+ pending = undefined;
84
+ },
85
+ };
86
+ }
87
+ /** `target` with some members replaced; every other method runs on `target` itself. */
88
+ function withMembers(target, members) {
89
+ return new Proxy(target, {
90
+ get(t, prop) {
91
+ if (Object.prototype.hasOwnProperty.call(members, prop))
92
+ return members[prop];
93
+ const value = Reflect.get(t, prop, t);
94
+ return typeof value === 'function' ? value.bind(t) : value;
95
+ },
96
+ });
97
+ }
98
+ /**
99
+ * The agent's memory manager as one GMI sees it. `GMI.shutdown()` shuts down
100
+ * the cognitive memory it was given; the agent's sessions share one manager, so
101
+ * a session's shutdown must leave it to the others, and `agent.close()` closes it.
102
+ */
103
+ function sharedMemoryView(manager) {
104
+ return withMembers(manager, { shutdown: async () => undefined });
105
+ }
106
+ /**
107
+ * A tool registry that leaves out the tools ToolExecutor registers from its own
108
+ * constructor (the built-in getCurrentDateTime), so a tool-less agent offers the
109
+ * model no tools (spec D4j) and an agent tool of the same name is the only one.
110
+ * The constructor starts that registration without waiting for it; skipping it
111
+ * here needs no wait, and no later registration can be overtaken by it.
112
+ */
113
+ class AgentToolRegistry extends ExtensionRegistry {
114
+ constructor() {
115
+ super(...arguments);
116
+ /** False while the executor's constructor registers its built-ins. */
117
+ this.acceptsRegistrations = false;
118
+ }
119
+ async register(...args) {
120
+ if (!this.acceptsRegistrations)
121
+ return;
122
+ return super.register(...args);
123
+ }
124
+ }
125
+ function toolExecutorWithoutBuiltIns() {
126
+ const registry = new AgentToolRegistry(EXTENSION_KIND_TOOL);
127
+ const executor = new ToolExecutor(undefined, undefined, registry);
128
+ registry.acceptsRegistrations = true;
129
+ return executor;
130
+ }
131
+ /**
132
+ * The agent's `onBeforeToolExecution` around the shared orchestrator, for one
133
+ * GMI: `null` skips the tool as `generateText` skips it, returned arguments
134
+ * replace the call's, and a hook that throws is warned about and the tool runs.
135
+ */
136
+ function hookTools(base, hook, step) {
137
+ if (!hook)
138
+ return base;
139
+ const processToolCall = async (details) => {
140
+ const req = details.toolCallRequest;
141
+ let info = {
142
+ name: req.name,
143
+ args: (req.arguments ?? {}),
144
+ id: req.id,
145
+ step: step.index,
146
+ };
147
+ try {
148
+ info = await hook(info);
149
+ }
150
+ catch (hookError) {
151
+ console.warn('[agentos] onBeforeToolExecution hook error:', hookError);
152
+ }
153
+ if (info === null) {
154
+ return {
155
+ toolCallId: req.id,
156
+ toolName: req.name,
157
+ output: { skipped: true },
158
+ isError: true,
159
+ errorDetails: { message: 'Skipped by onBeforeToolExecution hook' },
160
+ };
161
+ }
162
+ return base.processToolCall({ ...details, toolCallRequest: { ...req, arguments: info.args } });
163
+ };
164
+ return withMembers(base, { processToolCall });
165
+ }
166
+ /**
167
+ * The agent's completion gateway. The GMI's route carries its own `onFallback`
168
+ * (a trace entry), which replaces a gateway default, so the agent's
169
+ * `onFallback` is called beside it, as `onFallback(error, provider)`; a
170
+ * listener that throws is warned about and never fails the hop.
171
+ */
172
+ function gatewayFor(opts) {
173
+ const base = createCompletionGateway({
174
+ apiKey: opts.apiKey,
175
+ baseUrl: opts.baseUrl,
176
+ fallbackProviders: opts.fallbackProviders,
177
+ policyTier: opts.policyTier,
178
+ router: opts.router,
179
+ routerParams: opts.routerParams,
180
+ hostPolicy: opts.hostPolicy,
181
+ });
182
+ const listener = opts.onFallback;
183
+ if (!listener)
184
+ return base;
185
+ return {
186
+ stream: base.stream,
187
+ resolve: (route, after) => base.resolve({
188
+ ...route,
189
+ onFallback: (info) => {
190
+ route.onFallback?.(info);
191
+ try {
192
+ listener(info.error, info.to);
193
+ }
194
+ catch (listenerError) {
195
+ console.warn('[agentos] onFallback listener error:', listenerError);
196
+ }
197
+ },
198
+ }, after),
199
+ };
200
+ }
201
+ function mergeLedger(...parts) {
202
+ const merged = Object.assign({}, ...parts.filter(Boolean));
203
+ return Object.keys(merged).length > 0 ? merged : undefined;
204
+ }
205
+ async function recordedUsage(ledger, sessionId) {
206
+ // Imported on use, as agent() imports it: the ledger reads files.
207
+ const { getRecordedAgentOSUsage } = await import('./runtime/usageLedger.js');
208
+ return getRecordedAgentOSUsage({ enabled: ledger?.enabled, path: ledger?.path, sessionId });
209
+ }
210
+ /**
211
+ * An agent whose sessions are GMIs (docs/GMI.md, "GMIs from agent()").
212
+ *
213
+ * @param opts - The options of `agent()`. `voice`, `avatar` and `channels` throw.
214
+ * @returns The `Agent` surface: `generate`, `stream`, `session`, `usage`, `close`, `export`.
215
+ * @throws {Error} At construction, naming the option: an option the GMI path
216
+ * cannot honour, an unknown cognition profile or metaprompt preset, or a
217
+ * `memory.embedding` that names a provider without embeddings, a model that
218
+ * does not resolve, or a dimension that is not a positive integer or not known.
219
+ * No environment is read here: the provider and model resolve on the first
220
+ * call, which rejects with the error `agent()` gives when nothing resolves.
221
+ */
222
+ export function gmi(opts) {
223
+ for (const key of UNSUPPORTED_ON_GMI) {
224
+ if (isSet(opts[key])) {
225
+ throw new Error(`gmi(): '${key}' is not available on the GMI path; remove it or use runtime: 'legacy'.`);
226
+ }
227
+ }
228
+ const deferred = getDeferredCapabilities(opts, 'gmi');
229
+ if (deferred.length > 0) {
230
+ console.warn(`[AgentOS] gmi() accepted config it does not enforce yet: ${deferred.join(', ')}.`);
231
+ }
232
+ const cognition = resolveCognition(opts);
233
+ const lightCognition = resolveCognition({ cognition: 'light' });
234
+ if (cognition.memory)
235
+ assertEmbeddingConfig(cognition.memory);
236
+ if (cognition.memory && opts.memoryProvider?.getContext) {
237
+ console.warn('[agentos] gmi(): cognitive memory supplies the memory context; memoryProvider.getContext is skipped (observe still runs).');
238
+ }
239
+ const tools = adaptTools(opts.tools);
240
+ const ledger = mergeLedger(opts.observability?.usageLedger ?? opts.usageLedger);
241
+ const maxSteps = opts.maxSteps ?? DEFAULT_MAX_STEPS;
242
+ const gateway = gatewayFor(opts);
243
+ const shared = retryingOnce(async () => {
244
+ // Throws, as generateText throws, when no provider or model resolves.
245
+ const persona = personaFromAgentOptions(opts, cognition, tools);
246
+ const lightPersona = personaFromAgentOptions(opts, lightCognition, tools);
247
+ const promptEngine = new PromptEngine();
248
+ await promptEngine.initialize(GMI_PROMPT_ENGINE_CONFIG);
249
+ const utilityAI = new StatisticalUtilityAI(`gmi-utility-${persona.id}`);
250
+ await utilityAI.initialize({ utilityId: `gmi-utility-${persona.id}` });
251
+ const permissions = new ToolPermissionManager();
252
+ await permissions.initialize({ strictCapabilityChecking: false, logToolCalls: false, toolToSubscriptionFeatures: {} });
253
+ const orchestrator = new ToolOrchestrator();
254
+ await orchestrator.initialize({ orchestratorId: `gmi-tools-${persona.id}`, defaultToolCallTimeoutMs: 30000, maxConcurrentToolCalls: 10, logToolCalls: false, globalDisabledTools: [] }, permissions, toolExecutorWithoutBuiltIns(), tools);
255
+ return { persona, lightPersona, promptEngine, utilityAI, tools: orchestrator };
256
+ });
257
+ const memory = retryingOnce(async () => {
258
+ if (!cognition.memory)
259
+ return undefined;
260
+ const { persona } = await shared.get();
261
+ // Reads the environment for the embedding provider when memory.embedding names none.
262
+ return createAgentCognitiveMemory({ persona, memory: cognition.memory, mechanisms: cognition.mechanisms });
263
+ });
264
+ async function buildGmi(id, persona, mem, steps) {
265
+ const s = await shared.get();
266
+ const step = { index: 0 };
267
+ let turn = { prompt: undefined, memoryContext: undefined };
268
+ const instance = new GMI(id);
269
+ const config = {
270
+ workingMemory: new InMemoryWorkingMemory(),
271
+ promptEngine: s.promptEngine,
272
+ llmProviderManager: new GatewayProviderManager().asProviderManager(),
273
+ utilityAI: s.utilityAI,
274
+ toolOrchestrator: hookTools(s.tools, opts.onBeforeToolExecution, step),
275
+ ...(mem ? { cognitiveMemory: sharedMemoryView(mem.manager) } : {}),
276
+ completionGateway: gateway,
277
+ maxToolLoopIterations: steps,
278
+ defaultLlmProviderId: persona.defaultProviderId,
279
+ defaultLlmModelId: persona.defaultModelId,
280
+ // Every model call: the memoryProvider block after the leading system
281
+ // messages (where the legacy path puts it), then onBeforeGeneration.
282
+ beforeModelCall: async (ctx) => {
283
+ step.index = ctx.stepIndex;
284
+ let messages = ctx.messages;
285
+ let changed = false;
286
+ if (turn.memoryContext) {
287
+ let insertAt = 0;
288
+ while (insertAt < messages.length && messages[insertAt].role === 'system')
289
+ insertAt += 1;
290
+ messages = [...messages.slice(0, insertAt), { role: 'system', content: turn.memoryContext }, ...messages.slice(insertAt)];
291
+ changed = true;
292
+ }
293
+ if (opts.onBeforeGeneration) {
294
+ try {
295
+ const modified = await opts.onBeforeGeneration({
296
+ messages: messages,
297
+ system: typeof persona.baseSystemPrompt === 'string' ? persona.baseSystemPrompt : undefined,
298
+ tools,
299
+ model: ctx.modelId,
300
+ provider: ctx.providerId,
301
+ step: ctx.stepIndex,
302
+ prompt: turn.prompt,
303
+ });
304
+ if (modified?.messages) {
305
+ messages = modified.messages;
306
+ changed = true;
307
+ }
308
+ }
309
+ catch (hookError) {
310
+ console.warn('[agentos] onBeforeGeneration hook error:', hookError);
311
+ }
312
+ }
313
+ return changed ? messages : undefined;
314
+ },
315
+ };
316
+ await instance.initialize(persona, config);
317
+ return {
318
+ gmi: instance,
319
+ prepare: (context) => {
320
+ turn = context;
321
+ },
322
+ };
323
+ }
324
+ /** A GMI for one turn only, shut down once the turn ends. */
325
+ function forOneTurn(built) {
326
+ return { ...built, release: () => built.gmi.shutdown() };
327
+ }
328
+ const sessions = new Map();
329
+ const sessionTallies = new Map();
330
+ const agentTally = createEmptyUsageAggregate();
331
+ /** The per-call overrides as completion options; throws naming an override the GMI path does not take. */
332
+ function overridesOf(extra) {
333
+ const out = {};
334
+ for (const [k, v] of Object.entries(extra ?? {})) {
335
+ if (v === undefined)
336
+ continue;
337
+ if (!ALLOWED_CALL_OVERRIDES.has(k))
338
+ throw new Error(`gmi(): the per-call option '${k}' is not supported on the GMI path.`);
339
+ if (!ROUTE_OVERRIDES.has(k))
340
+ out[k] = v;
341
+ }
342
+ return out;
343
+ }
344
+ function oneShotDeps(source, extra) {
345
+ const callId = `${source === 'agent.generate' ? 'generate' : 'stream'}-${randomUUID()}`;
346
+ return {
347
+ sessionId: callId,
348
+ opts,
349
+ userId: callId,
350
+ useMemoryProviderContext: true,
351
+ history: null,
352
+ ledger: mergeLedger(ledger, extra?.usageLedger, { source: extra?.usageLedger?.source ?? source }),
353
+ onUsage: (u) => accumulateUsage(agentTally, u),
354
+ lock: new TurnLock(),
355
+ // generate() and stream() keep no history and run the light profile whatever the agent's (spec D10).
356
+ gmiFor: async () => {
357
+ const s = await shared.get();
358
+ const persona = extra && (extra.model || extra.provider)
359
+ ? personaFromAgentOptions({ ...opts, model: extra.model ?? opts.model, provider: extra.provider ?? opts.provider }, lightCognition, tools)
360
+ : s.lightPersona;
361
+ return forOneTurn(await buildGmi(`gmi-${persona.id}-${callId}`, persona, undefined, extra?.maxSteps ?? maxSteps));
362
+ },
363
+ };
364
+ }
365
+ const handle = {
366
+ async generate(prompt, extra) {
367
+ const options = overridesOf(extra);
368
+ return sendGmiTurn(oneShotDeps('agent.generate', extra), prompt, { options });
369
+ },
370
+ stream(prompt, extra) {
371
+ const options = overridesOf(extra);
372
+ return streamGmiTurn(oneShotDeps('agent.stream', extra), prompt, { options });
373
+ },
374
+ session(id, sessionOptions) {
375
+ const sessionId = id ?? randomUUID();
376
+ const existing = sessions.get(sessionId);
377
+ if (existing) {
378
+ if (sessionOptions?.userId !== undefined && sessionOptions.userId !== existing.userId) {
379
+ throw new Error(`gmi(): session '${sessionId}' already runs as user '${existing.userId}'; close it to open it for another user.`);
380
+ }
381
+ return existing.session;
382
+ }
383
+ // Each session's memory scope is its own unless the caller names the user:
384
+ // sessions are often different people, and one person's facts must not
385
+ // reach another's replies.
386
+ const userId = sessionOptions?.userId ?? sessionId;
387
+ const history = opts.history === false ? null : new SessionHistoryBuffer({ ...SESSION_HISTORY_DEFAULTS, ...(opts.history ?? {}) });
388
+ if (!sessionTallies.has(sessionId))
389
+ sessionTallies.set(sessionId, createEmptyUsageAggregate(sessionId));
390
+ const tally = sessionTallies.get(sessionId);
391
+ const lock = new TurnLock();
392
+ let closing;
393
+ const buildSessionGmi = async (gmiId) => {
394
+ const { persona } = await shared.get();
395
+ return buildGmi(gmiId, persona, await memory.get(), maxSteps);
396
+ };
397
+ // The session's own GMI, when it keeps history; a GMI per turn otherwise.
398
+ const own = retryingOnce(() => buildSessionGmi(`gmi-${sessionId}`));
399
+ let ownBuilt;
400
+ // A send made after close() fails; one made before it runs, and close() waits for it.
401
+ const gmiFor = (closedAtCall) => async () => {
402
+ if (closedAtCall)
403
+ throw new Error(`gmi(): session '${sessionId}' is closed; agent.session('${sessionId}') opens a new one.`);
404
+ if (!history)
405
+ return forOneTurn(await buildSessionGmi(`gmi-${sessionId}-${randomUUID()}`));
406
+ ownBuilt = await own.get();
407
+ return ownBuilt;
408
+ };
409
+ /** Brings the session GMI's own history in line with the store once the running turn ends, so a cleared fact never reaches its sentiment tracker or metaprompts. */
410
+ const syncGmiHistory = () => {
411
+ void lock
412
+ .acquire()
413
+ .then((release) => {
414
+ try {
415
+ ownBuilt?.gmi.replaceHistory?.(transcriptToConversation(history?.messages() ?? []));
416
+ }
417
+ finally {
418
+ release();
419
+ }
420
+ })
421
+ .catch((error) => console.warn('[agentos] gmi(): could not clear the session GMI history:', error));
422
+ };
423
+ const deps = (source) => ({
424
+ sessionId,
425
+ opts,
426
+ userId,
427
+ history,
428
+ lock,
429
+ ledger: mergeLedger(ledger, { sessionId, source }),
430
+ useMemoryProviderContext: !cognition.memory,
431
+ gmiFor: gmiFor(closing !== undefined),
432
+ onUsage: (u) => {
433
+ accumulateUsage(tally, u);
434
+ accumulateUsage(agentTally, u);
435
+ },
436
+ });
437
+ const session = {
438
+ id: sessionId,
439
+ send: (input, sendOpts) => {
440
+ const options = Object.fromEntries(Object.entries({
441
+ toolChoice: sendOpts?.toolChoice,
442
+ requestTimeout: sendOpts?.requestTimeout,
443
+ cacheDiagnostics: sendOpts?.cacheDiagnostics,
444
+ cache: sendOpts?.cache,
445
+ maxTokens: sendOpts?.maxTokens,
446
+ }).filter(([, v]) => v !== undefined));
447
+ return sendGmiTurn(deps('agent.session.send'), input, {
448
+ options,
449
+ responseSchema: sendOpts?.responseSchema,
450
+ schemaName: sendOpts?.schemaName,
451
+ blockLabel: sendOpts?.blockLabel,
452
+ });
453
+ },
454
+ stream: (input) => streamGmiTurn(deps('agent.session.stream'), input, {}),
455
+ messages: () => history?.messages() ?? [],
456
+ reseed: (snapshot) => {
457
+ if (!history)
458
+ throw new Error('reseed requires session history (history: false is set on this agent)');
459
+ history.reseed(snapshot);
460
+ syncGmiHistory();
461
+ },
462
+ drainHistoryEvents: () => history?.drainHistoryEvents() ?? [],
463
+ usage: async () => {
464
+ const persisted = await recordedUsage(ledger, sessionId);
465
+ return ledger?.enabled ? persisted : mergeAggregates(tally, persisted);
466
+ },
467
+ clear: () => {
468
+ history?.reseed([]);
469
+ syncGmiHistory();
470
+ },
471
+ // A turn still running ends first and is returned to its caller, but the
472
+ // reseed keeps it out of the history; then the session's GMI is shut down.
473
+ close: () => (closing ?? (closing = (async () => {
474
+ if (sessions.get(sessionId) === entry)
475
+ sessions.delete(sessionId);
476
+ history?.reseed([]);
477
+ const release = await lock.acquire();
478
+ try {
479
+ const built = await own.peek()?.catch(() => undefined);
480
+ await built?.gmi.shutdown();
481
+ }
482
+ finally {
483
+ release();
484
+ }
485
+ })())),
486
+ };
487
+ const entry = { session, userId };
488
+ sessions.set(sessionId, entry);
489
+ return session;
490
+ },
491
+ async usage(sessionId) {
492
+ const persisted = await recordedUsage(ledger, sessionId);
493
+ const inMemory = sessionId ? sessionTallies.get(sessionId) ?? createEmptyUsageAggregate(sessionId) : agentTally;
494
+ return ledger?.enabled ? persisted : mergeAggregates(inMemory, persisted);
495
+ },
496
+ /**
497
+ * Closes every session (each after its running turn), then the cognitive
498
+ * memory; a session opened from now on builds a new one. The tools stay as
499
+ * the caller passed them: the orchestrator is not shut down, because
500
+ * shutting it down would shut down the caller's tools.
501
+ */
502
+ async close() {
503
+ const pending = memory.peek();
504
+ memory.reset();
505
+ await Promise.all([...sessions.values()].map(({ session }) => session.close()));
506
+ const mem = await pending?.catch(() => undefined);
507
+ await mem?.close();
508
+ },
509
+ export(metadata, options) {
510
+ return exportAgentConfig(handle, metadata, options);
511
+ },
512
+ exportJSON(metadata, options) {
513
+ return exportAgentConfigJSON(handle, metadata, options);
514
+ },
515
+ getAvatarBindings() {
516
+ return {};
517
+ },
518
+ setAvatarBindingOverrides() {
519
+ // avatar is not available on the GMI path
520
+ },
521
+ };
522
+ Object.defineProperty(handle, '__config', { value: opts, enumerable: false, configurable: true });
523
+ return handle;
524
+ }
525
+ /** Alias of {@link gmi}. */
526
+ export const createGmi = gmi;
527
+ //# sourceMappingURL=gmi.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gmi.js","sourceRoot":"","sources":["../../src/api/gmi.ts"],"names":[],"mappings":"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"}
@@ -81,8 +81,9 @@ export declare const hitl: {
81
81
  * Returns a handler that pauses execution and prompts the user interactively
82
82
  * via `stdin`/`stdout`.
83
83
  *
84
- * Displays the approval request summary (description, agent, action, type)
85
- * and waits for the user to type `y` (approve) or `n` (reject).
84
+ * Prints the request's description, agent, action, type and details (for a
85
+ * tool call, the arguments it will run with), then waits for the user to
86
+ * type `y` (approve) or `n` (reject).
86
87
  *
87
88
  * **Important**: This handler reads from `process.stdin`, so it must only be
88
89
  * used in interactive terminal environments (not in CI/CD pipelines or
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/api/hitl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAMzE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAMlF;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;IAKf;;;;;;;;;;;;;OAaG;mBACY,WAAW;IAQ1B;;;;;;;;;;;;;;;OAeG;wBACiB,MAAM,GAAG,WAAW;IAWxC;;;;;;;;;;;;;;;;;OAiBG;WACI,WAAW;IAwBlB;;;;;;;;;;;;;;;OAeG;iBACU,MAAM,GAAG,WAAW;IAoBjC;;;;;;;;;;;;;;;;;;OAkBG;gBACS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;IAkC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;sBACc;QACf,qGAAqG;QACrG,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kGAAkG;QAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,qHAAqH;QACrH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,oFAAoF;QACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,oHAAoH;QACpH,QAAQ,CAAC,EAAE,WAAW,CAAC;QACvB,wBAAwB;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAQ,WAAW;CAuErB,CAAC"}
1
+ {"version":3,"file":"hitl.d.ts","sourceRoot":"","sources":["../../src/api/hitl.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,eAAe,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAGpE,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,uCAAuC,CAAC;AAMzE;;;GAGG;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,EAAE,eAAe,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAMlF;;;;;;GAMG;AACH,eAAO,MAAM,IAAI;IAKf;;;;;;;;;;;;;OAaG;mBACY,WAAW;IAQ1B;;;;;;;;;;;;;;;OAeG;wBACiB,MAAM,GAAG,WAAW;IAWxC;;;;;;;;;;;;;;;;;;OAkBG;WACI,WAAW;IA+BlB;;;;;;;;;;;;;;;OAeG;iBACU,MAAM,GAAG,WAAW;IAoBjC;;;;;;;;;;;;;;;;;;OAkBG;gBACS;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,GAAG,WAAW;IAkC5D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;sBACc;QACf,qGAAqG;QACrG,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,kGAAkG;QAClG,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB;;;;WAIG;QACH,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,qHAAqH;QACrH,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,oFAAoF;QACpF,mBAAmB,CAAC,EAAE,MAAM,CAAC;QAC7B,oHAAoH;QACpH,QAAQ,CAAC,EAAE,WAAW,CAAC;QACvB,wBAAwB;QACxB,MAAM,CAAC,EAAE,MAAM,CAAC;KACjB,GAAQ,WAAW;CAuErB,CAAC"}
package/dist/api/hitl.js CHANGED
@@ -94,8 +94,9 @@ export const hitl = {
94
94
  * Returns a handler that pauses execution and prompts the user interactively
95
95
  * via `stdin`/`stdout`.
96
96
  *
97
- * Displays the approval request summary (description, agent, action, type)
98
- * and waits for the user to type `y` (approve) or `n` (reject).
97
+ * Prints the request's description, agent, action, type and details (for a
98
+ * tool call, the arguments it will run with), then waits for the user to
99
+ * type `y` (approve) or `n` (reject).
99
100
  *
100
101
  * **Important**: This handler reads from `process.stdin`, so it must only be
101
102
  * used in interactive terminal environments (not in CI/CD pipelines or
@@ -111,6 +112,7 @@ export const hitl = {
111
112
  cli() {
112
113
  return async (request) => {
113
114
  const readline = await import('node:readline');
115
+ const { inspect } = await import('node:util');
114
116
  const rl = readline.createInterface({
115
117
  input: process.stdin,
116
118
  output: process.stdout,
@@ -119,6 +121,10 @@ export const hitl = {
119
121
  console.log(`\n[APPROVAL NEEDED] ${request.description}`);
120
122
  console.log(`Agent: ${request.agent} | Action: ${request.action}`);
121
123
  console.log(`Type: ${request.type}`);
124
+ // What is being approved: for a tool call, the arguments it will run
125
+ // with, in full. They are printed here and kept out of the
126
+ // description, which hitl.slack posts to a channel.
127
+ console.log(`Details: ${inspect(request.details, { depth: null, maxArrayLength: null, maxStringLength: null, breakLength: 100 })}`);
122
128
  rl.question('Approve? (y/n): ', (answer) => {
123
129
  rl.close();
124
130
  resolve({ approved: answer.toLowerCase().startsWith('y') });
@@ -1 +1 @@
1
- {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/api/hitl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"hitl.js","sourceRoot":"","sources":["../../src/api/hitl.ts"],"names":[],"mappings":"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"}