@inkeep/agents-run-api 0.1.0 → 0.1.2
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/LICENSE.md +49 -0
- package/dist/AgentExecutionServer.d.ts +6 -1
- package/dist/AgentExecutionServer.d.ts.map +1 -1
- package/dist/AgentExecutionServer.js +10 -1
- package/dist/__tests__/utils/testRequest.js +1 -1
- package/dist/agents/Agent.d.ts +3 -3
- package/dist/agents/Agent.d.ts.map +1 -1
- package/dist/agents/Agent.js +9 -7
- package/dist/agents/generateTaskHandler.d.ts +2 -2
- package/dist/agents/generateTaskHandler.d.ts.map +1 -1
- package/dist/agents/generateTaskHandler.js +2 -2
- package/dist/agents/relationTools.d.ts +3 -1
- package/dist/agents/relationTools.d.ts.map +1 -1
- package/dist/agents/relationTools.js +4 -5
- package/dist/app.d.ts +11 -3
- package/dist/app.d.ts.map +1 -1
- package/dist/app.js +177 -169
- package/dist/data/agents.d.ts +2 -2
- package/dist/data/agents.d.ts.map +1 -1
- package/dist/data/agents.js +4 -4
- package/dist/env.d.ts +7 -5
- package/dist/env.d.ts.map +1 -1
- package/dist/env.js +1 -0
- package/dist/handlers/executionHandler.d.ts.map +1 -1
- package/dist/handlers/executionHandler.js +2 -5
- package/dist/index.d.ts +21 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21 -36
- package/dist/routes/agents.d.ts +7 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +6 -3
- package/dist/server.d.ts +5 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +61 -0
- package/dist/tracer.d.ts.map +1 -1
- package/dist/tracer.js +9 -0
- package/dist/utils/agent-operations.d.ts +14 -1
- package/dist/utils/agent-operations.d.ts.map +1 -1
- package/dist/utils/agent-operations.js +11 -0
- package/dist/utils/graph-session.d.ts.map +1 -1
- package/dist/utils/graph-session.js +7 -4
- package/dist/utils/stream-helpers.d.ts +12 -0
- package/dist/utils/stream-helpers.d.ts.map +1 -1
- package/dist/utils/stream-helpers.js +111 -30
- package/package.json +22 -18
package/dist/server.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server.d.ts","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"AAAA,OAAO,sBAAsB,CAAC;AAM9B,OAAO,EAAE,oBAAoB,EAAsB,MAAM,2BAA2B,CAAC;AAsBrF,QAAA,MAAM,eAAe,sBAQnB,CAAC;AAmCH,OAAO,EAAE,eAAe,EAAE,CAAC"}
|
package/dist/server.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import './instrumentation.js';
|
|
2
|
+
import { createKeyChainStore, createNangoCredentialStore, InMemoryCredentialStore, } from '@inkeep/agents-core';
|
|
3
|
+
import { AgentExecutionServer, EXECUTION_API_PORT } from './AgentExecutionServer.js';
|
|
4
|
+
import { env } from './env.js';
|
|
5
|
+
import { getLogger } from './logger.js';
|
|
6
|
+
const logger = getLogger('execution-api');
|
|
7
|
+
// Create credential stores
|
|
8
|
+
const credentialStores = [
|
|
9
|
+
new InMemoryCredentialStore('memory-default'), // In-memory store + env vars
|
|
10
|
+
// Nango store (only loads if NANGO_SECRET_KEY is set)
|
|
11
|
+
...(process.env.NANGO_SECRET_KEY
|
|
12
|
+
? [
|
|
13
|
+
createNangoCredentialStore('nango-default', {
|
|
14
|
+
apiUrl: process.env.NANGO_HOST || 'https://api.nango.dev',
|
|
15
|
+
secretKey: process.env.NANGO_SECRET_KEY,
|
|
16
|
+
}),
|
|
17
|
+
]
|
|
18
|
+
: []),
|
|
19
|
+
createKeyChainStore('keychain-default'),
|
|
20
|
+
];
|
|
21
|
+
// Initialize Execution Server
|
|
22
|
+
const executionServer = new AgentExecutionServer({
|
|
23
|
+
port: EXECUTION_API_PORT,
|
|
24
|
+
credentialStores,
|
|
25
|
+
serverOptions: {
|
|
26
|
+
requestTimeout: 120000, // 120 seconds for execution requests
|
|
27
|
+
keepAliveTimeout: 60000,
|
|
28
|
+
keepAlive: true,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
// Start the server only if not in test environment AND not using Vite dev server
|
|
32
|
+
const isViteDevServer = process.env.NODE_ENV === 'development' &&
|
|
33
|
+
(process.env.VITE_DEV_SERVER === 'true' ||
|
|
34
|
+
process.env.VITE !== undefined ||
|
|
35
|
+
process.argv.some((arg) => arg.includes('vite')) ||
|
|
36
|
+
globalThis.__vite_dev_server__);
|
|
37
|
+
if (env.ENVIRONMENT !== 'test' && !isViteDevServer) {
|
|
38
|
+
executionServer
|
|
39
|
+
.serve()
|
|
40
|
+
.then(() => {
|
|
41
|
+
logger.info(`📝 OpenAPI documentation available at http://localhost:${EXECUTION_API_PORT}/openapi.json`);
|
|
42
|
+
})
|
|
43
|
+
.catch((error) => {
|
|
44
|
+
logger.error('Failed to start Execution API server:', error);
|
|
45
|
+
process.exit(1);
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
else if (isViteDevServer) {
|
|
49
|
+
// Initialize server (credential stores, etc.) but don't start HTTP server - Vite handles that
|
|
50
|
+
(async () => {
|
|
51
|
+
try {
|
|
52
|
+
await executionServer.initializeOnly();
|
|
53
|
+
logger.info('🚀 Execution server initialized for Vite dev mode (credential stores ready)');
|
|
54
|
+
logger.info('🔥 HTTP server handled by Vite dev server');
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
logger.error('Failed to initialize execution server:', error);
|
|
58
|
+
}
|
|
59
|
+
})();
|
|
60
|
+
}
|
|
61
|
+
export { executionServer };
|
package/dist/tracer.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EAGT,KAAK,MAAM,EAEZ,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"tracer.d.ts","sourceRoot":"","sources":["../src/tracer.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,IAAI,EAGT,KAAK,MAAM,EAEZ,MAAM,oBAAoB,CAAC;AAU5B,eAAO,MAAM,IAAI,gBAAgB,CAAC;AAGlC,eAAO,MAAM,YAAY,gBAAgB,CAAC;AAC1C,eAAO,MAAM,eAAe,UAAU,CAAC;AAGvC,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,WAAwB,CAAC;AAyCtE;;;GAGG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,OAAO,EACd,MAAM,CAAC,EAAE;IAAE,KAAK,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,EAAE,MAAM,KAAK,IAAI,CAAA;CAAE,EACpD,UAAU,CAAC,EAAE,MAAM,GAClB,IAAI,CAgBN;AAED;;;GAGG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAUxC;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,IAAI,OAAO,CAAC,IAAI,CAAC,CAsBtD"}
|
package/dist/tracer.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
import { SpanStatusCode, trace, } from '@opentelemetry/api';
|
|
2
2
|
import { getLogger } from './logger.js';
|
|
3
|
+
import { env } from './env.js';
|
|
4
|
+
// Environments where trace force flush should be enabled
|
|
5
|
+
const FORCE_FLUSH_ENVIRONMENTS = ['development'];
|
|
3
6
|
const logger = getLogger('tracer');
|
|
4
7
|
// Base prefix for all span names - export this to use in other files
|
|
5
8
|
export const BASE = 'inkeep-chat';
|
|
@@ -80,6 +83,12 @@ export function getGlobalTracer() {
|
|
|
80
83
|
* is sent before the operation completes or fails
|
|
81
84
|
*/
|
|
82
85
|
export async function forceFlushTracer() {
|
|
86
|
+
const isOtelTracesForceFlushEnabled = env.OTEL_TRACES_FORCE_FLUSH_ENABLED;
|
|
87
|
+
const isForceFlushEnvironment = env.ENVIRONMENT && FORCE_FLUSH_ENVIRONMENTS.includes(env.ENVIRONMENT);
|
|
88
|
+
const shouldForceFlush = isOtelTracesForceFlushEnabled === true || (isOtelTracesForceFlushEnabled == null && isForceFlushEnvironment);
|
|
89
|
+
if (!shouldForceFlush) {
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
83
92
|
try {
|
|
84
93
|
// Import the span processor from instrumentation
|
|
85
94
|
const { spanProcessor } = await import('./instrumentation.js');
|
|
@@ -38,6 +38,15 @@ export interface ErrorEvent {
|
|
|
38
38
|
agent?: string;
|
|
39
39
|
};
|
|
40
40
|
}
|
|
41
|
+
/**
|
|
42
|
+
* Agent thinking operation event
|
|
43
|
+
*/
|
|
44
|
+
export interface AgentThinkingEvent {
|
|
45
|
+
type: 'agent_thinking';
|
|
46
|
+
ctx: {
|
|
47
|
+
agent: string;
|
|
48
|
+
};
|
|
49
|
+
}
|
|
41
50
|
/**
|
|
42
51
|
* Status update operation event with flexible structured/unstructured data
|
|
43
52
|
*/
|
|
@@ -51,7 +60,7 @@ export interface StatusUpdateEvent {
|
|
|
51
60
|
/**
|
|
52
61
|
* Discriminated union of all operation events
|
|
53
62
|
*/
|
|
54
|
-
export type OperationEvent = AgentInitializingEvent | AgentReadyEvent | CompletionEvent | ErrorEvent | StatusUpdateEvent;
|
|
63
|
+
export type OperationEvent = AgentInitializingEvent | AgentReadyEvent | AgentThinkingEvent | CompletionEvent | ErrorEvent | StatusUpdateEvent;
|
|
55
64
|
/**
|
|
56
65
|
* Creates an agent initializing operation
|
|
57
66
|
*/
|
|
@@ -60,6 +69,10 @@ export declare function agentInitializingOp(sessionId: string, graphId: string):
|
|
|
60
69
|
* Creates an agent ready operation
|
|
61
70
|
*/
|
|
62
71
|
export declare function agentReadyOp(sessionId: string, graphId: string): AgentReadyEvent;
|
|
72
|
+
/**
|
|
73
|
+
* Creates an agent thinking operation
|
|
74
|
+
*/
|
|
75
|
+
export declare function agentThinkingOp(agent: string): AgentThinkingEvent;
|
|
63
76
|
/**
|
|
64
77
|
* Creates a completion operation
|
|
65
78
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agent-operations.d.ts","sourceRoot":"","sources":["../../src/utils/agent-operations.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE;QACH,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE;QACH,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,eAAe,GACf,eAAe,GACf,UAAU,GACV,iBAAiB,CAAC;AAMtB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAQ9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAQhF;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAQjF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAQnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAK1E"}
|
|
1
|
+
{"version":3,"file":"agent-operations.d.ts","sourceRoot":"","sources":["../../src/utils/agent-operations.ts"],"names":[],"mappings":"AAMA;;GAEG;AACH,MAAM,WAAW,sBAAsB;IACrC,IAAI,EAAE,oBAAoB,CAAC;IAC3B,GAAG,EAAE;QACH,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,aAAa,CAAC;IACpB,GAAG,EAAE;QACH,SAAS,EAAE,MAAM,CAAC;QAClB,OAAO,EAAE,MAAM,CAAC;KACjB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,YAAY,CAAC;IACnB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,SAAS,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,IAAI,EAAE,OAAO,CAAC;IACd,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;KAChB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,gBAAgB,CAAC;IACvB,GAAG,EAAE;QACH,KAAK,EAAE,MAAM,CAAC;KACf,CAAC;CACH;AAED;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,eAAe,CAAC;IACtB,GAAG,EAAE;QACH,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,CAAC,GAAG,EAAE,MAAM,GAAG,GAAG,CAAC;KACpB,CAAC;CACH;AAED;;GAEG;AACH,MAAM,MAAM,cAAc,GACtB,sBAAsB,GACtB,eAAe,GACf,kBAAkB,GAClB,eAAe,GACf,UAAU,GACV,iBAAiB,CAAC;AAMtB;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,sBAAsB,CAQ9F;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,eAAe,CAQhF;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,kBAAkB,CAOjE;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,eAAe,CAQjF;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,UAAU,CAQnE;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,MAAM,CAEvC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,iBAAiB,CAK1E"}
|
|
@@ -26,6 +26,17 @@ export function agentReadyOp(sessionId, graphId) {
|
|
|
26
26
|
},
|
|
27
27
|
};
|
|
28
28
|
}
|
|
29
|
+
/**
|
|
30
|
+
* Creates an agent thinking operation
|
|
31
|
+
*/
|
|
32
|
+
export function agentThinkingOp(agent) {
|
|
33
|
+
return {
|
|
34
|
+
type: 'agent_thinking',
|
|
35
|
+
ctx: {
|
|
36
|
+
agent,
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
}
|
|
29
40
|
/**
|
|
30
41
|
* Creates a completion operation
|
|
31
42
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"graph-session.d.ts","sourceRoot":"","sources":["../../src/utils/graph-session.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"graph-session.d.ts","sourceRoot":"","sources":["../../src/utils/graph-session.ts"],"names":[],"mappings":"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"}
|
|
@@ -307,10 +307,13 @@ export class GraphSession {
|
|
|
307
307
|
continue;
|
|
308
308
|
}
|
|
309
309
|
const operationToSend = {
|
|
310
|
-
type:
|
|
311
|
-
ctx:
|
|
310
|
+
type: 'status_update',
|
|
311
|
+
ctx: {
|
|
312
|
+
operationType: op.type,
|
|
313
|
+
data: op.data,
|
|
314
|
+
},
|
|
312
315
|
};
|
|
313
|
-
await streamHelper.
|
|
316
|
+
await streamHelper.writeOperation(operationToSend);
|
|
314
317
|
}
|
|
315
318
|
// Store summaries for next time - use full JSON for better comparison
|
|
316
319
|
const summaryTexts = result.operations.map((op) => JSON.stringify({ type: op.type, data: op.data }));
|
|
@@ -354,7 +357,7 @@ export class GraphSession {
|
|
|
354
357
|
}, 'Skipping empty or invalid status update operation');
|
|
355
358
|
return;
|
|
356
359
|
}
|
|
357
|
-
await streamHelper.
|
|
360
|
+
await streamHelper.writeOperation(operation);
|
|
358
361
|
// Update state - check if still exists (could be cleaned up during async operation)
|
|
359
362
|
if (this.statusUpdateState) {
|
|
360
363
|
this.statusUpdateState.lastUpdateTime = now;
|
|
@@ -35,6 +35,8 @@ export declare class SSEStreamHelper implements StreamHelper {
|
|
|
35
35
|
private stream;
|
|
36
36
|
private requestId;
|
|
37
37
|
private timestamp;
|
|
38
|
+
private isTextStreaming;
|
|
39
|
+
private queuedOperations;
|
|
38
40
|
constructor(stream: HonoSSEStream, requestId: string, timestamp: number);
|
|
39
41
|
private get sessionId();
|
|
40
42
|
/**
|
|
@@ -68,6 +70,10 @@ export declare class SSEStreamHelper implements StreamHelper {
|
|
|
68
70
|
complete(finishReason?: string): Promise<void>;
|
|
69
71
|
writeData(type: string, data: any): Promise<void>;
|
|
70
72
|
writeOperation(operation: OperationEvent): Promise<void>;
|
|
73
|
+
/**
|
|
74
|
+
* Flush all queued operations in order after text streaming completes
|
|
75
|
+
*/
|
|
76
|
+
private flushQueuedOperations;
|
|
71
77
|
}
|
|
72
78
|
/**
|
|
73
79
|
* Factory function to create SSE stream helper
|
|
@@ -87,6 +93,8 @@ export declare class VercelDataStreamHelper implements StreamHelper {
|
|
|
87
93
|
private sessionId;
|
|
88
94
|
private static readonly MAX_BUFFER_SIZE;
|
|
89
95
|
private isCompleted;
|
|
96
|
+
private isTextStreaming;
|
|
97
|
+
private queuedOperations;
|
|
90
98
|
constructor(writer: VercelUIWriter);
|
|
91
99
|
setSessionId(sessionId: string): void;
|
|
92
100
|
writeRole(_?: string): Promise<void>;
|
|
@@ -125,6 +133,10 @@ export declare class VercelDataStreamHelper implements StreamHelper {
|
|
|
125
133
|
isCompleted: boolean;
|
|
126
134
|
};
|
|
127
135
|
writeOperation(operation: OperationEvent): Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Flush all queued operations in order after text streaming completes
|
|
138
|
+
*/
|
|
139
|
+
private flushQueuedOperations;
|
|
128
140
|
}
|
|
129
141
|
export declare function createVercelStreamHelper(writer: VercelUIWriter): VercelDataStreamHelper;
|
|
130
142
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stream-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/stream-helpers.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,MAAM,WAAW,YAAY;IAC3B,SAAS,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACxC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC7C,UAAU,CAAC,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrC,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1D,UAAU,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChD,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B,SAAS,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAElD,cAAc,CAAC,SAAS,EAAE,cAAc,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1D;AAGD,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAChF,KAAK,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,KAAK,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE;YACL,IAAI,CAAC,EAAE,MAAM,CAAC;YACd,OAAO,CAAC,EAAE,MAAM,CAAC;SAClB,CAAC;QACF,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;KAC9B,CAAC,CAAC;CACJ;AAED,qBAAa,eAAgB,YAAW,YAAY;
|
|
1
|
+
{"version":3,"file":"stream-helpers.d.ts","sourceRoot":"","sources":["../../src/utils/stream-helpers.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,6 +3,9 @@ export class SSEStreamHelper {
|
|
|
3
3
|
stream;
|
|
4
4
|
requestId;
|
|
5
5
|
timestamp;
|
|
6
|
+
// Stream queuing for proper event ordering
|
|
7
|
+
isTextStreaming = false;
|
|
8
|
+
queuedOperations = [];
|
|
6
9
|
constructor(stream, requestId, timestamp) {
|
|
7
10
|
this.stream = stream;
|
|
8
11
|
this.requestId = requestId;
|
|
@@ -58,10 +61,20 @@ export class SSEStreamHelper {
|
|
|
58
61
|
*/
|
|
59
62
|
async streamText(text, delayMs = 100) {
|
|
60
63
|
const words = text.split(' ');
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
64
|
+
// Mark that text streaming is starting
|
|
65
|
+
this.isTextStreaming = true;
|
|
66
|
+
try {
|
|
67
|
+
for (let i = 0; i < words.length; i++) {
|
|
68
|
+
await this.stream.sleep(delayMs);
|
|
69
|
+
const content = i === 0 ? words[i] : ` ${words[i]}`;
|
|
70
|
+
await this.writeContent(content);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
finally {
|
|
74
|
+
// Mark that text streaming has finished
|
|
75
|
+
this.isTextStreaming = false;
|
|
76
|
+
// Flush any queued operations now that text sequence is complete
|
|
77
|
+
await this.flushQueuedOperations();
|
|
65
78
|
}
|
|
66
79
|
}
|
|
67
80
|
async streamData(data) {
|
|
@@ -104,6 +117,8 @@ export class SSEStreamHelper {
|
|
|
104
117
|
* Complete the stream with finish reason and done message
|
|
105
118
|
*/
|
|
106
119
|
async complete(finishReason = 'stop') {
|
|
120
|
+
// Flush any remaining queued operations before completing
|
|
121
|
+
await this.flushQueuedOperations();
|
|
107
122
|
await this.writeCompletion(finishReason);
|
|
108
123
|
await this.writeDone();
|
|
109
124
|
}
|
|
@@ -126,8 +141,34 @@ export class SSEStreamHelper {
|
|
|
126
141
|
});
|
|
127
142
|
}
|
|
128
143
|
async writeOperation(operation) {
|
|
144
|
+
if (operation.type === 'status_update' && operation.ctx.operationType) {
|
|
145
|
+
operation = {
|
|
146
|
+
type: operation.ctx.operationType,
|
|
147
|
+
ctx: operation.ctx.data,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
150
|
+
// Queue operation if text is currently streaming
|
|
151
|
+
if (this.isTextStreaming) {
|
|
152
|
+
this.queuedOperations.push(operation);
|
|
153
|
+
return;
|
|
154
|
+
}
|
|
155
|
+
// If not streaming, flush any queued operations first, then send this one
|
|
156
|
+
await this.flushQueuedOperations();
|
|
129
157
|
await this.writeData('data-operation', operation);
|
|
130
158
|
}
|
|
159
|
+
/**
|
|
160
|
+
* Flush all queued operations in order after text streaming completes
|
|
161
|
+
*/
|
|
162
|
+
async flushQueuedOperations() {
|
|
163
|
+
if (this.queuedOperations.length === 0) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const operationsToFlush = [...this.queuedOperations];
|
|
167
|
+
this.queuedOperations = []; // Clear the queue
|
|
168
|
+
for (const operation of operationsToFlush) {
|
|
169
|
+
await this.writeData('data-operation', operation);
|
|
170
|
+
}
|
|
171
|
+
}
|
|
131
172
|
}
|
|
132
173
|
/**
|
|
133
174
|
* Factory function to create SSE stream helper
|
|
@@ -145,6 +186,9 @@ export class VercelDataStreamHelper {
|
|
|
145
186
|
// Memory management - focused on connection completion cleanup
|
|
146
187
|
static MAX_BUFFER_SIZE = 5 * 1024 * 1024; // 5MB limit (more generous during request)
|
|
147
188
|
isCompleted = false;
|
|
189
|
+
// Stream queuing for proper event ordering
|
|
190
|
+
isTextStreaming = false;
|
|
191
|
+
queuedOperations = [];
|
|
148
192
|
constructor(writer) {
|
|
149
193
|
this.writer = writer;
|
|
150
194
|
}
|
|
@@ -208,37 +252,36 @@ export class VercelDataStreamHelper {
|
|
|
208
252
|
// for each word (with preceding space when necessary) and finish with
|
|
209
253
|
// a single "text-end".
|
|
210
254
|
const id = this.textId;
|
|
211
|
-
//
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
255
|
+
// Mark that text streaming is starting
|
|
256
|
+
this.isTextStreaming = true;
|
|
257
|
+
try {
|
|
258
|
+
this.writer.write({
|
|
259
|
+
type: 'text-start',
|
|
260
|
+
id,
|
|
261
|
+
});
|
|
262
|
+
// Deltas (optionally throttled)
|
|
263
|
+
for (let i = 0; i < words.length; i++) {
|
|
264
|
+
if (delayMs > 0) {
|
|
265
|
+
await new Promise((r) => setTimeout(r, delayMs));
|
|
266
|
+
}
|
|
267
|
+
const delta = i === 0 ? words[i] : ` ${words[i]}`;
|
|
268
|
+
this.writer.write({
|
|
269
|
+
type: 'text-delta',
|
|
270
|
+
id,
|
|
271
|
+
delta,
|
|
272
|
+
});
|
|
225
273
|
}
|
|
226
|
-
|
|
274
|
+
// End
|
|
227
275
|
this.writer.write({
|
|
228
|
-
type: 'text-
|
|
276
|
+
type: 'text-end',
|
|
229
277
|
id,
|
|
230
|
-
delta,
|
|
231
278
|
});
|
|
232
279
|
}
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
// Notify GraphSession that text streaming has finished
|
|
239
|
-
if (this.sessionId) {
|
|
240
|
-
const { graphSessionManager } = await import('./graph-session.js');
|
|
241
|
-
graphSessionManager.setTextStreaming(this.sessionId, false);
|
|
280
|
+
finally {
|
|
281
|
+
// Mark that text streaming has finished
|
|
282
|
+
this.isTextStreaming = false;
|
|
283
|
+
// Flush any queued operations now that text sequence is complete
|
|
284
|
+
await this.flushQueuedOperations();
|
|
242
285
|
}
|
|
243
286
|
}
|
|
244
287
|
async writeData(type, data) {
|
|
@@ -284,6 +327,8 @@ export class VercelDataStreamHelper {
|
|
|
284
327
|
async complete() {
|
|
285
328
|
if (this.isCompleted)
|
|
286
329
|
return;
|
|
330
|
+
// Flush any remaining queued operations before completing
|
|
331
|
+
await this.flushQueuedOperations();
|
|
287
332
|
// Mark as completed to prevent further writes
|
|
288
333
|
this.isCompleted = true;
|
|
289
334
|
// Clean up all buffers and references
|
|
@@ -298,6 +343,8 @@ export class VercelDataStreamHelper {
|
|
|
298
343
|
this.sentItems.clear();
|
|
299
344
|
this.completedItems.clear();
|
|
300
345
|
this.textId = null;
|
|
346
|
+
this.queuedOperations = [];
|
|
347
|
+
this.isTextStreaming = false;
|
|
301
348
|
}
|
|
302
349
|
/**
|
|
303
350
|
* Check if the stream has been completed and cleaned up
|
|
@@ -317,12 +364,46 @@ export class VercelDataStreamHelper {
|
|
|
317
364
|
};
|
|
318
365
|
}
|
|
319
366
|
async writeOperation(operation) {
|
|
367
|
+
if (this.isCompleted) {
|
|
368
|
+
console.warn('Attempted to write operation to completed stream');
|
|
369
|
+
return;
|
|
370
|
+
}
|
|
371
|
+
if (operation.type === 'status_update' && operation.ctx.operationType) {
|
|
372
|
+
operation = {
|
|
373
|
+
type: operation.ctx.operationType,
|
|
374
|
+
ctx: operation.ctx.data,
|
|
375
|
+
};
|
|
376
|
+
}
|
|
377
|
+
// Queue operation if text is currently streaming
|
|
378
|
+
if (this.isTextStreaming) {
|
|
379
|
+
this.queuedOperations.push(operation);
|
|
380
|
+
return;
|
|
381
|
+
}
|
|
382
|
+
// If not streaming, flush any queued operations first, then send this one
|
|
383
|
+
await this.flushQueuedOperations();
|
|
320
384
|
this.writer.write({
|
|
321
385
|
id: 'id' in operation ? operation.id : undefined,
|
|
322
386
|
type: 'data-operation',
|
|
323
387
|
data: operation,
|
|
324
388
|
});
|
|
325
389
|
}
|
|
390
|
+
/**
|
|
391
|
+
* Flush all queued operations in order after text streaming completes
|
|
392
|
+
*/
|
|
393
|
+
async flushQueuedOperations() {
|
|
394
|
+
if (this.queuedOperations.length === 0) {
|
|
395
|
+
return;
|
|
396
|
+
}
|
|
397
|
+
const operationsToFlush = [...this.queuedOperations];
|
|
398
|
+
this.queuedOperations = []; // Clear the queue
|
|
399
|
+
for (const operation of operationsToFlush) {
|
|
400
|
+
this.writer.write({
|
|
401
|
+
id: 'id' in operation ? operation.id : undefined,
|
|
402
|
+
type: 'data-operation',
|
|
403
|
+
data: operation,
|
|
404
|
+
});
|
|
405
|
+
}
|
|
406
|
+
}
|
|
326
407
|
}
|
|
327
408
|
export function createVercelStreamHelper(writer) {
|
|
328
409
|
return new VercelDataStreamHelper(writer);
|
package/package.json
CHANGED
|
@@ -1,32 +1,22 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-run-api",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Execution API for Inkeep Agent Framework - handles chat, agent execution, and streaming",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
7
|
+
"exports": {
|
|
8
|
+
".": "./dist/index.js"
|
|
9
|
+
},
|
|
7
10
|
"type": "module",
|
|
8
11
|
"license": "SEE LICENSE IN LICENSE.md",
|
|
9
|
-
"scripts": {
|
|
10
|
-
"dev": "nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
|
|
11
|
-
"dev:apis": "nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
|
|
12
|
-
"dev:with-bypass": "PORT=3003 nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
|
|
13
|
-
"dev:without-bypass": "PORT=3004 INKEEP_AGENTS_RUN_BYPASS_SECRET= nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
|
|
14
|
-
"build": "tsc",
|
|
15
|
-
"start": "node dist/index.js",
|
|
16
|
-
"test": "ENVIRONMENT=test vitest --run",
|
|
17
|
-
"test:watch": "ENVIRONMENT=test vitest",
|
|
18
|
-
"test:coverage": "ENVIRONMENT=test vitest --run --coverage",
|
|
19
|
-
"typecheck": "tsc --noEmit"
|
|
20
|
-
},
|
|
21
12
|
"dependencies": {
|
|
22
13
|
"@ai-sdk/anthropic": "2.0.2",
|
|
23
14
|
"@ai-sdk/openai": "2.0.11",
|
|
24
15
|
"@ai-sdk/react": "2.0.11",
|
|
25
16
|
"@hono/node-server": "^1.14.3",
|
|
26
17
|
"@hono/otel": "^0.4.0",
|
|
27
|
-
"@hono/zod-openapi": "^1.0.2",
|
|
28
18
|
"@hono/swagger-ui": "^0.5.1",
|
|
29
|
-
"@
|
|
19
|
+
"@hono/zod-openapi": "^1.0.2",
|
|
30
20
|
"@modelcontextprotocol/sdk": "^1.17.2",
|
|
31
21
|
"@opentelemetry/api": "^1.9.0",
|
|
32
22
|
"@opentelemetry/auto-instrumentations-node": "^0.62.0",
|
|
@@ -53,10 +43,12 @@
|
|
|
53
43
|
"pino-pretty": "^13.0.0",
|
|
54
44
|
"traverse": "^0.6.11",
|
|
55
45
|
"ts-pattern": "^5.7.1",
|
|
56
|
-
"zod": "^4.1.5"
|
|
46
|
+
"zod": "^4.1.5",
|
|
47
|
+
"@inkeep/agents-core": "^0.1.2"
|
|
57
48
|
},
|
|
58
49
|
"devDependencies": {
|
|
59
50
|
"@biomejs/biome": "2.1.4",
|
|
51
|
+
"@hono/vite-dev-server": "^0.20.1",
|
|
60
52
|
"@types/ajv": "^1.0.4",
|
|
61
53
|
"@types/jmespath": "^0.15.2",
|
|
62
54
|
"@types/node": "^20.11.24",
|
|
@@ -65,9 +57,10 @@
|
|
|
65
57
|
"nodemon": "^3.1.0",
|
|
66
58
|
"tsx": "^4.7.1",
|
|
67
59
|
"typescript": "^5.3.3",
|
|
60
|
+
"vite": "^7.1.4",
|
|
61
|
+
"vite-tsconfig-paths": "^5.1.4",
|
|
68
62
|
"vitest": "^3.1.4"
|
|
69
63
|
},
|
|
70
|
-
"packageManager": "pnpm@10.11.0",
|
|
71
64
|
"engines": {
|
|
72
65
|
"node": ">=22.0.0"
|
|
73
66
|
},
|
|
@@ -84,5 +77,16 @@
|
|
|
84
77
|
"type": "git",
|
|
85
78
|
"url": "git+https://github.com/inkeep/agent-framework.git",
|
|
86
79
|
"directory": "agents-run-api"
|
|
80
|
+
},
|
|
81
|
+
"scripts": {
|
|
82
|
+
"dev": "vite",
|
|
83
|
+
"dev:with-bypass": "PORT=3003 vite",
|
|
84
|
+
"dev:without-bypass": "PORT=3004 INKEEP_AGENTS_RUN_BYPASS_SECRET= vite",
|
|
85
|
+
"build": "tsc",
|
|
86
|
+
"start": "node dist/server.js",
|
|
87
|
+
"test": "ENVIRONMENT=test vitest --run",
|
|
88
|
+
"test:watch": "ENVIRONMENT=test vitest",
|
|
89
|
+
"test:coverage": "ENVIRONMENT=test vitest --run --coverage",
|
|
90
|
+
"typecheck": "tsc --noEmit"
|
|
87
91
|
}
|
|
88
|
-
}
|
|
92
|
+
}
|