@inkeep/agents-run-api 0.1.1 → 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.
Files changed (45) hide show
  1. package/LICENSE.md +22 -17
  2. package/dist/AgentExecutionServer.d.ts +6 -1
  3. package/dist/AgentExecutionServer.d.ts.map +1 -1
  4. package/dist/AgentExecutionServer.js +10 -1
  5. package/dist/__tests__/utils/testRequest.js +1 -1
  6. package/dist/agents/Agent.d.ts +3 -3
  7. package/dist/agents/Agent.d.ts.map +1 -1
  8. package/dist/agents/Agent.js +9 -7
  9. package/dist/agents/generateTaskHandler.d.ts +2 -2
  10. package/dist/agents/generateTaskHandler.d.ts.map +1 -1
  11. package/dist/agents/generateTaskHandler.js +2 -2
  12. package/dist/agents/relationTools.d.ts +3 -1
  13. package/dist/agents/relationTools.d.ts.map +1 -1
  14. package/dist/agents/relationTools.js +4 -5
  15. package/dist/app.d.ts +11 -3
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +177 -169
  18. package/dist/data/agents.d.ts +2 -2
  19. package/dist/data/agents.d.ts.map +1 -1
  20. package/dist/data/agents.js +4 -4
  21. package/dist/env.d.ts +7 -5
  22. package/dist/env.d.ts.map +1 -1
  23. package/dist/env.js +1 -0
  24. package/dist/handlers/executionHandler.d.ts.map +1 -1
  25. package/dist/handlers/executionHandler.js +2 -5
  26. package/dist/index.d.ts +21 -3
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +21 -36
  29. package/dist/routes/agents.d.ts +7 -1
  30. package/dist/routes/agents.d.ts.map +1 -1
  31. package/dist/routes/agents.js +6 -3
  32. package/dist/server.d.ts +5 -0
  33. package/dist/server.d.ts.map +1 -0
  34. package/dist/server.js +61 -0
  35. package/dist/tracer.d.ts.map +1 -1
  36. package/dist/tracer.js +9 -0
  37. package/dist/utils/agent-operations.d.ts +14 -1
  38. package/dist/utils/agent-operations.d.ts.map +1 -1
  39. package/dist/utils/agent-operations.js +11 -0
  40. package/dist/utils/graph-session.d.ts.map +1 -1
  41. package/dist/utils/graph-session.js +7 -4
  42. package/dist/utils/stream-helpers.d.ts +12 -0
  43. package/dist/utils/stream-helpers.d.ts.map +1 -1
  44. package/dist/utils/stream-helpers.js +111 -30
  45. package/package.json +13 -8
@@ -0,0 +1,5 @@
1
+ import './instrumentation.js';
2
+ import { AgentExecutionServer } from './AgentExecutionServer.js';
3
+ declare const executionServer: AgentExecutionServer;
4
+ export { executionServer };
5
+ //# sourceMappingURL=server.d.ts.map
@@ -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 };
@@ -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;AAM5B,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,CAatD"}
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: op.type,
311
- ctx: op.data,
310
+ type: 'status_update',
311
+ ctx: {
312
+ operationType: op.type,
313
+ data: op.data,
314
+ },
312
315
  };
313
- await streamHelper.writeData('data-operation', operationToSend);
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.writeData('data-operation', operation);
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":"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"}
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
- for (let i = 0; i < words.length; i++) {
62
- await this.stream.sleep(delayMs);
63
- const content = i === 0 ? words[i] : ` ${words[i]}`;
64
- await this.writeContent(content);
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
- // Start - notify GraphSession that text streaming is starting
212
- // Import is at the top of the file, we need to call it here
213
- if (this.sessionId) {
214
- const { graphSessionManager } = await import('./graph-session.js');
215
- graphSessionManager.setTextStreaming(this.sessionId, true);
216
- }
217
- this.writer.write({
218
- type: 'text-start',
219
- id,
220
- });
221
- // Deltas (optionally throttled)
222
- for (let i = 0; i < words.length; i++) {
223
- if (delayMs > 0) {
224
- await new Promise((r) => setTimeout(r, delayMs));
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
- const delta = i === 0 ? words[i] : ` ${words[i]}`;
274
+ // End
227
275
  this.writer.write({
228
- type: 'text-delta',
276
+ type: 'text-end',
229
277
  id,
230
- delta,
231
278
  });
232
279
  }
233
- // End
234
- this.writer.write({
235
- type: 'text-end',
236
- id,
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,9 +1,12 @@
1
1
  {
2
2
  "name": "@inkeep/agents-run-api",
3
- "version": "0.1.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
12
  "dependencies": {
@@ -12,8 +15,8 @@
12
15
  "@ai-sdk/react": "2.0.11",
13
16
  "@hono/node-server": "^1.14.3",
14
17
  "@hono/otel": "^0.4.0",
15
- "@hono/zod-openapi": "^1.0.2",
16
18
  "@hono/swagger-ui": "^0.5.1",
19
+ "@hono/zod-openapi": "^1.0.2",
17
20
  "@modelcontextprotocol/sdk": "^1.17.2",
18
21
  "@opentelemetry/api": "^1.9.0",
19
22
  "@opentelemetry/auto-instrumentations-node": "^0.62.0",
@@ -41,10 +44,11 @@
41
44
  "traverse": "^0.6.11",
42
45
  "ts-pattern": "^5.7.1",
43
46
  "zod": "^4.1.5",
44
- "@inkeep/agents-core": "0.1.0"
47
+ "@inkeep/agents-core": "^0.1.2"
45
48
  },
46
49
  "devDependencies": {
47
50
  "@biomejs/biome": "2.1.4",
51
+ "@hono/vite-dev-server": "^0.20.1",
48
52
  "@types/ajv": "^1.0.4",
49
53
  "@types/jmespath": "^0.15.2",
50
54
  "@types/node": "^20.11.24",
@@ -53,6 +57,8 @@
53
57
  "nodemon": "^3.1.0",
54
58
  "tsx": "^4.7.1",
55
59
  "typescript": "^5.3.3",
60
+ "vite": "^7.1.4",
61
+ "vite-tsconfig-paths": "^5.1.4",
56
62
  "vitest": "^3.1.4"
57
63
  },
58
64
  "engines": {
@@ -73,12 +79,11 @@
73
79
  "directory": "agents-run-api"
74
80
  },
75
81
  "scripts": {
76
- "dev": "nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
77
- "dev:apis": "nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
78
- "dev:with-bypass": "PORT=3003 nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
79
- "dev:without-bypass": "PORT=3004 INKEEP_AGENTS_RUN_BYPASS_SECRET= nodemon --watch src --ext ts --exec 'tsx src/index.ts'",
82
+ "dev": "vite",
83
+ "dev:with-bypass": "PORT=3003 vite",
84
+ "dev:without-bypass": "PORT=3004 INKEEP_AGENTS_RUN_BYPASS_SECRET= vite",
80
85
  "build": "tsc",
81
- "start": "node dist/index.js",
86
+ "start": "node dist/server.js",
82
87
  "test": "ENVIRONMENT=test vitest --run",
83
88
  "test:watch": "ENVIRONMENT=test vitest",
84
89
  "test:coverage": "ENVIRONMENT=test vitest --run --coverage",