@amodalai/runtime 0.1.15 → 0.1.17
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/agent/agent-runner.js +13 -1
- package/dist/src/agent/agent-runner.js.map +1 -1
- package/dist/src/agent/config-watcher.d.ts +2 -2
- package/dist/src/agent/config-watcher.js +28 -15
- package/dist/src/agent/config-watcher.js.map +1 -1
- package/dist/src/agent/config-watcher.test.js +13 -4
- package/dist/src/agent/config-watcher.test.js.map +1 -1
- package/dist/src/agent/eval-store.d.ts +14 -0
- package/dist/src/agent/eval-store.js +44 -0
- package/dist/src/agent/eval-store.js.map +1 -1
- package/dist/src/agent/feedback-store.d.ts +39 -0
- package/dist/src/agent/feedback-store.js +98 -0
- package/dist/src/agent/feedback-store.js.map +1 -0
- package/dist/src/agent/local-server.d.ts +1 -1
- package/dist/src/agent/local-server.js +48 -28
- package/dist/src/agent/local-server.js.map +1 -1
- package/dist/src/agent/local-server.test.js +2 -1
- package/dist/src/agent/local-server.test.js.map +1 -1
- package/dist/src/agent/proactive/proactive-runner.d.ts +3 -3
- package/dist/src/agent/proactive/proactive-runner.js +3 -3
- package/dist/src/agent/proactive/proactive-runner.js.map +1 -1
- package/dist/src/agent/proactive/proactive-runner.test.js +2 -2
- package/dist/src/agent/proactive/proactive-runner.test.js.map +1 -1
- package/dist/src/agent/routes/admin-chat.d.ts +3 -2
- package/dist/src/agent/routes/admin-chat.js +3 -3
- package/dist/src/agent/routes/admin-chat.js.map +1 -1
- package/dist/src/agent/routes/chat.d.ts +6 -6
- package/dist/src/agent/routes/chat.js +3 -3
- package/dist/src/agent/routes/chat.js.map +1 -1
- package/dist/src/agent/routes/chat.test.js +7 -6
- package/dist/src/agent/routes/chat.test.js.map +1 -1
- package/dist/src/agent/routes/evals.d.ts +2 -2
- package/dist/src/agent/routes/evals.js +143 -68
- package/dist/src/agent/routes/evals.js.map +1 -1
- package/dist/src/agent/routes/feedback.d.ts +11 -0
- package/dist/src/agent/routes/feedback.js +72 -0
- package/dist/src/agent/routes/feedback.js.map +1 -0
- package/dist/src/agent/routes/files.js +118 -12
- package/dist/src/agent/routes/files.js.map +1 -1
- package/dist/src/agent/routes/inspect.d.ts +2 -2
- package/dist/src/agent/routes/inspect.js +44 -22
- package/dist/src/agent/routes/inspect.js.map +1 -1
- package/dist/src/agent/routes/inspect.test.js +11 -16
- package/dist/src/agent/routes/inspect.test.js.map +1 -1
- package/dist/src/agent/routes/task.d.ts +2 -2
- package/dist/src/agent/routes/task.js +4 -4
- package/dist/src/agent/routes/task.js.map +1 -1
- package/dist/src/agent/routes/task.test.js.map +1 -1
- package/dist/src/agent/session-store.d.ts +2 -2
- package/dist/src/agent/session-store.js +9 -6
- package/dist/src/agent/session-store.js.map +1 -1
- package/dist/src/agent/snapshot-server.js +10 -2
- package/dist/src/agent/snapshot-server.js.map +1 -1
- package/dist/src/cron/heartbeat-runner.d.ts +3 -6
- package/dist/src/cron/heartbeat-runner.js +1 -10
- package/dist/src/cron/heartbeat-runner.js.map +1 -1
- package/dist/src/index.d.ts +5 -3
- package/dist/src/index.js +4 -9
- package/dist/src/index.js.map +1 -1
- package/dist/src/middleware/auth.d.ts +3 -19
- package/dist/src/middleware/auth.js +0 -118
- package/dist/src/middleware/auth.js.map +1 -1
- package/dist/src/routes/ai-stream.d.ts +8 -7
- package/dist/src/routes/ai-stream.js +3 -16
- package/dist/src/routes/ai-stream.js.map +1 -1
- package/dist/src/routes/chat-stream.d.ts +4 -3
- package/dist/src/routes/chat-stream.js +5 -17
- package/dist/src/routes/chat-stream.js.map +1 -1
- package/dist/src/routes/chat.d.ts +4 -2
- package/dist/src/routes/chat.js +2 -14
- package/dist/src/routes/chat.js.map +1 -1
- package/dist/src/routes/chat.test.js +2 -2
- package/dist/src/routes/chat.test.js.map +1 -1
- package/dist/src/server.d.ts +16 -3
- package/dist/src/server.js +24 -27
- package/dist/src/server.js.map +1 -1
- package/dist/src/server.test.js +37 -6
- package/dist/src/server.test.js.map +1 -1
- package/dist/src/session/admin-file-tools.d.ts +136 -0
- package/dist/src/session/admin-file-tools.js +240 -0
- package/dist/src/session/admin-file-tools.js.map +1 -0
- package/dist/src/session/custom-tool-adapter.d.ts +74 -0
- package/dist/src/session/custom-tool-adapter.js +149 -0
- package/dist/src/session/custom-tool-adapter.js.map +1 -0
- package/dist/src/session/session-manager.d.ts +101 -3
- package/dist/src/session/session-manager.js +467 -31
- package/dist/src/session/session-manager.js.map +1 -1
- package/dist/src/session/session-manager.test.js +93 -58
- package/dist/src/session/session-manager.test.js.map +1 -1
- package/dist/src/session/session-runner.d.ts +29 -13
- package/dist/src/session/session-runner.js +40 -91
- package/dist/src/session/session-runner.js.map +1 -1
- package/dist/src/session/session-runner.test.js +70 -80
- package/dist/src/session/session-runner.test.js.map +1 -1
- package/dist/src/types.d.ts +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +2 -2
- package/dist/src/agent/agent-runner.test.d.ts +0 -6
- package/dist/src/agent/agent-runner.test.js +0 -552
- package/dist/src/agent/agent-runner.test.js.map +0 -1
- package/dist/src/agent/session-manager.d.ts +0 -88
- package/dist/src/agent/session-manager.js +0 -341
- package/dist/src/agent/session-manager.js.map +0 -1
- package/dist/src/agent/session-manager.test.d.ts +0 -6
- package/dist/src/agent/session-manager.test.js +0 -145
- package/dist/src/agent/session-manager.test.js.map +0 -1
- package/dist/src/audit/audit-client.d.ts +0 -46
- package/dist/src/audit/audit-client.js +0 -83
- package/dist/src/audit/audit-client.js.map +0 -1
- package/dist/src/middleware/auth.test.d.ts +0 -6
- package/dist/src/middleware/auth.test.js +0 -260
- package/dist/src/middleware/auth.test.js.map +0 -1
- package/dist/src/routes/sessions.d.ts +0 -14
- package/dist/src/routes/sessions.js +0 -82
- package/dist/src/routes/sessions.js.map +0 -1
- package/dist/src/utils/jwt-verify.d.ts +0 -19
- package/dist/src/utils/jwt-verify.js +0 -32
- package/dist/src/utils/jwt-verify.js.map +0 -1
- package/dist/src/utils/jwt-verify.test.d.ts +0 -6
- package/dist/src/utils/jwt-verify.test.js +0 -150
- package/dist/src/utils/jwt-verify.test.js.map +0 -1
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import express from 'express';
|
|
7
7
|
import { loadSnapshotFromFile, snapshotToRepo } from '@amodalai/core';
|
|
8
|
-
import {
|
|
8
|
+
import { SessionManager } from '../session/session-manager.js';
|
|
9
9
|
import { LocalToolExecutor } from './tool-executor-local.js';
|
|
10
10
|
import { createChatRouter } from './routes/chat.js';
|
|
11
11
|
import { createTaskRouter } from './routes/task.js';
|
|
@@ -40,8 +40,16 @@ export async function createSnapshotServer(config) {
|
|
|
40
40
|
if (!toolExecutor && repo.tools.length > 0) {
|
|
41
41
|
toolExecutor = new LocalToolExecutor();
|
|
42
42
|
}
|
|
43
|
-
const sessionManager = new
|
|
43
|
+
const sessionManager = new SessionManager({
|
|
44
|
+
baseParams: {
|
|
45
|
+
sessionId: 'snapshot-init',
|
|
46
|
+
interactive: false,
|
|
47
|
+
noBrowser: true,
|
|
48
|
+
cwd: process.cwd(),
|
|
49
|
+
targetDir: process.cwd(),
|
|
50
|
+
},
|
|
44
51
|
ttlMs: config.sessionTtlMs,
|
|
52
|
+
repo,
|
|
45
53
|
toolExecutor,
|
|
46
54
|
shellExecutor: config.shellExecutor,
|
|
47
55
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-server.js","sourceRoot":"","sources":["../../../src/agent/snapshot-server.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,OAAO,MAAM,SAAS,CAAC;AAE9B,OAAO,EAAC,oBAAoB,EAAE,cAAc,EAAC,MAAM,gBAAgB,CAAC;AAEpE,OAAO,EAAC,
|
|
1
|
+
{"version":3,"file":"snapshot-server.js","sourceRoot":"","sources":["../../../src/agent/snapshot-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,15 +6,12 @@
|
|
|
6
6
|
import type { AutomationDefinition } from '@amodalai/core';
|
|
7
7
|
import type { AutomationResult } from '../types.js';
|
|
8
8
|
import type { SessionManager } from '../session/session-manager.js';
|
|
9
|
-
import type
|
|
9
|
+
import { type StreamHooks } from '../session/session-runner.js';
|
|
10
10
|
export type AutomationRunnerFn = (automation: AutomationDefinition, payload?: Record<string, unknown>) => Promise<AutomationResult>;
|
|
11
11
|
export interface AutomationRunnerOptions {
|
|
12
12
|
sessionManager: SessionManager;
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
auditAppId?: string;
|
|
16
|
-
/** Auth token for audit logging */
|
|
17
|
-
auditToken?: string;
|
|
13
|
+
/** Lifecycle hooks for audit, usage reporting, and session persistence */
|
|
14
|
+
streamHooks?: StreamHooks;
|
|
18
15
|
}
|
|
19
16
|
/**
|
|
20
17
|
* Create an automation runner function.
|
|
@@ -28,15 +28,6 @@ export function createAutomationRunner(options) {
|
|
|
28
28
|
duration_ms: Date.now() - startTime,
|
|
29
29
|
};
|
|
30
30
|
}
|
|
31
|
-
// Build audit context if audit client is available
|
|
32
|
-
let audit;
|
|
33
|
-
if (options.auditClient && options.auditAppId && options.auditToken) {
|
|
34
|
-
audit = {
|
|
35
|
-
auditClient: options.auditClient,
|
|
36
|
-
appId: options.auditAppId,
|
|
37
|
-
token: options.auditToken,
|
|
38
|
-
};
|
|
39
|
-
}
|
|
40
31
|
try {
|
|
41
32
|
// Build prompt — optionally include payload data
|
|
42
33
|
let prompt = automation.prompt;
|
|
@@ -50,7 +41,7 @@ export function createAutomationRunner(options) {
|
|
|
50
41
|
timeoutId = setTimeout(() => controller.abort(), automation.constraints.timeout_seconds * 1000);
|
|
51
42
|
}
|
|
52
43
|
try {
|
|
53
|
-
const result = await runMessage(session, prompt, controller.signal,
|
|
44
|
+
const result = await runMessage(session, prompt, controller.signal, options.streamHooks);
|
|
54
45
|
const automationResult = {
|
|
55
46
|
automation: automation.name,
|
|
56
47
|
response: result.response,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"heartbeat-runner.js","sourceRoot":"","sources":["../../../src/cron/heartbeat-runner.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAE,UAAU,
|
|
1
|
+
{"version":3,"file":"heartbeat-runner.js","sourceRoot":"","sources":["../../../src/cron/heartbeat-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -10,7 +10,8 @@ export type { ServerConfig } from './types.js';
|
|
|
10
10
|
export { createAIStreamRouter, type AIStreamRouterOptions } from './routes/ai-stream.js';
|
|
11
11
|
export { createLocalServer } from './agent/local-server.js';
|
|
12
12
|
export type { LocalServerConfig, AgentChatRequest, AgentSession } from './agent/agent-types.js';
|
|
13
|
-
export {
|
|
13
|
+
export { SessionManager } from './session/session-manager.js';
|
|
14
|
+
export type { ManagedSession, SessionManagerOptions, SessionStore, StoredSessionRecord } from './session/session-manager.js';
|
|
14
15
|
export { ProactiveRunner } from './agent/proactive/proactive-runner.js';
|
|
15
16
|
export type { AutomationInfo, ProactiveRunnerConfig } from './agent/proactive/proactive-runner.js';
|
|
16
17
|
export { createSnapshotServer } from './agent/snapshot-server.js';
|
|
@@ -19,6 +20,7 @@ export { createChatRouter } from './agent/routes/chat.js';
|
|
|
19
20
|
export type { ChatRouterOptions, SessionCreator, SessionHydrator, TurnCompleteHandler } from './agent/routes/chat.js';
|
|
20
21
|
export { createTaskRouter } from './agent/routes/task.js';
|
|
21
22
|
export type { TaskRouterOptions } from './agent/routes/task.js';
|
|
22
|
-
export { getAuthContext
|
|
23
|
-
export type { AuthContext
|
|
23
|
+
export { getAuthContext } from './middleware/auth.js';
|
|
24
|
+
export type { AuthContext } from './middleware/auth.js';
|
|
25
|
+
export type { StreamHooks } from './session/session-runner.js';
|
|
24
26
|
export { errorHandler } from './middleware/error-handler.js';
|
package/dist/src/index.js
CHANGED
|
@@ -10,15 +10,15 @@ export { createServer } from './server.js';
|
|
|
10
10
|
export { createAIStreamRouter } from './routes/ai-stream.js';
|
|
11
11
|
// Local mode
|
|
12
12
|
export { createLocalServer } from './agent/local-server.js';
|
|
13
|
-
export {
|
|
13
|
+
export { SessionManager } from './session/session-manager.js';
|
|
14
14
|
export { ProactiveRunner } from './agent/proactive/proactive-runner.js';
|
|
15
15
|
// Snapshot mode
|
|
16
16
|
export { createSnapshotServer } from './agent/snapshot-server.js';
|
|
17
17
|
// Route creators (used by hosted-runtime to build its own server)
|
|
18
18
|
export { createChatRouter } from './agent/routes/chat.js';
|
|
19
19
|
export { createTaskRouter } from './agent/routes/task.js';
|
|
20
|
-
// Auth
|
|
21
|
-
export { getAuthContext
|
|
20
|
+
// Auth types (middleware implementation provided by hosting layer)
|
|
21
|
+
export { getAuthContext } from './middleware/auth.js';
|
|
22
22
|
// Error handler
|
|
23
23
|
export { errorHandler } from './middleware/error-handler.js';
|
|
24
24
|
// ---------------------------------------------------------------------------
|
|
@@ -42,12 +42,8 @@ async function main() {
|
|
|
42
42
|
const port = getEnvInt('PORT', 3000);
|
|
43
43
|
const host = getEnvOrDefault('HOST', '0.0.0.0');
|
|
44
44
|
const sessionTtlMs = getEnvInt('SESSION_TTL_MS', 30 * 60 * 1000);
|
|
45
|
-
// Platform API URL — used
|
|
46
|
-
// and for loading org-specific config per session.
|
|
47
|
-
// No API key needed at startup — keys come from request headers.
|
|
45
|
+
// Platform API URL — used by SessionManager for AgentSDK config loading.
|
|
48
46
|
const platformApiUrl = process.env['PLATFORM_API_URL'];
|
|
49
|
-
// JWKS URL for JWT verification (defaults to platformApiUrl/.well-known/jwks.json)
|
|
50
|
-
const jwksUrl = process.env['JWT_JWKS_URL'] || undefined;
|
|
51
47
|
// LLM config comes from env. Default matches the platform API default.
|
|
52
48
|
const model = getEnvOrDefault('MODEL', 'claude-sonnet-4-20250514');
|
|
53
49
|
// WORKSPACE_DIR scopes file tools and shell_exec. In Docker, set to
|
|
@@ -81,7 +77,6 @@ async function main() {
|
|
|
81
77
|
},
|
|
82
78
|
version: SERVER_VERSION,
|
|
83
79
|
platformApiUrl,
|
|
84
|
-
jwksUrl,
|
|
85
80
|
});
|
|
86
81
|
await serverInstance.start();
|
|
87
82
|
}
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,EAAE,YAAY,EAAuB,MAAM,aAAa,CAAC;AAEhE,MAAM,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC;AAEtC,0BAA0B;AAC1B,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG3C,OAAO,EAAE,oBAAoB,EAA8B,MAAM,uBAAuB,CAAC;AAEzF,aAAa;AACb,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAE5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,10 +3,10 @@
|
|
|
3
3
|
* Copyright 2025 Amodal Labs, Inc.
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
import type {
|
|
6
|
+
import type { Response } from 'express';
|
|
7
7
|
/**
|
|
8
8
|
* Auth context attached to `res.locals.authContext` after successful auth.
|
|
9
|
-
*
|
|
9
|
+
* The auth middleware that populates this is provided by the hosting layer.
|
|
10
10
|
*/
|
|
11
11
|
export interface AuthContext {
|
|
12
12
|
apiKey?: string;
|
|
@@ -14,26 +14,10 @@ export interface AuthContext {
|
|
|
14
14
|
token?: string;
|
|
15
15
|
orgId: string;
|
|
16
16
|
applicationId: string;
|
|
17
|
-
authMethod:
|
|
17
|
+
authMethod: string;
|
|
18
18
|
actor?: string;
|
|
19
19
|
}
|
|
20
|
-
export interface AuthMiddlewareOptions {
|
|
21
|
-
/** Platform API base URL (e.g., "http://localhost:4000") */
|
|
22
|
-
platformApiUrl: string;
|
|
23
|
-
/** TTL in ms for cached key validations (default: 5 minutes) */
|
|
24
|
-
cacheTtlMs?: number;
|
|
25
|
-
/** JWKS URL for JWT verification (defaults to platformApiUrl/.well-known/jwks.json) */
|
|
26
|
-
jwksUrl?: string;
|
|
27
|
-
}
|
|
28
20
|
/**
|
|
29
21
|
* Get the auth context from response locals.
|
|
30
22
|
*/
|
|
31
23
|
export declare function getAuthContext(res: Response): AuthContext | undefined;
|
|
32
|
-
/**
|
|
33
|
-
* Express middleware that validates Bearer tokens.
|
|
34
|
-
*
|
|
35
|
-
* Supports dual auth:
|
|
36
|
-
* - `ak_` prefixed keys: validated via `GET /api/me` on the platform API (cached)
|
|
37
|
-
* - JWTs: validated locally via JWKS (zero network overhead per request)
|
|
38
|
-
*/
|
|
39
|
-
export declare function createAuthMiddleware(options: AuthMiddlewareOptions): (req: Request, res: Response, next: NextFunction) => void;
|
|
@@ -3,8 +3,6 @@
|
|
|
3
3
|
* Copyright 2025 Amodal Labs, Inc.
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
|
-
import { AppError } from './error-handler.js';
|
|
7
|
-
import { createJWTVerifier } from '../utils/jwt-verify.js';
|
|
8
6
|
const AUTH_CONTEXT_KEY = 'authContext';
|
|
9
7
|
/**
|
|
10
8
|
* Get the auth context from response locals.
|
|
@@ -13,120 +11,4 @@ export function getAuthContext(res) {
|
|
|
13
11
|
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
14
12
|
return res.locals[AUTH_CONTEXT_KEY];
|
|
15
13
|
}
|
|
16
|
-
/**
|
|
17
|
-
* Express middleware that validates Bearer tokens.
|
|
18
|
-
*
|
|
19
|
-
* Supports dual auth:
|
|
20
|
-
* - `ak_` prefixed keys: validated via `GET /api/me` on the platform API (cached)
|
|
21
|
-
* - JWTs: validated locally via JWKS (zero network overhead per request)
|
|
22
|
-
*/
|
|
23
|
-
export function createAuthMiddleware(options) {
|
|
24
|
-
const { platformApiUrl, cacheTtlMs = 5 * 60 * 1000 } = options;
|
|
25
|
-
const cache = new Map();
|
|
26
|
-
// Set up JWT verifier if JWKS URL available
|
|
27
|
-
const jwksUrl = options.jwksUrl ?? `${platformApiUrl}/.well-known/jwks.json`;
|
|
28
|
-
let verifyJWT = null;
|
|
29
|
-
try {
|
|
30
|
-
verifyJWT = createJWTVerifier({ jwksUrl });
|
|
31
|
-
}
|
|
32
|
-
catch {
|
|
33
|
-
// JWKS URL invalid — JWT verification disabled
|
|
34
|
-
}
|
|
35
|
-
return (req, res, next) => {
|
|
36
|
-
const authHeader = req.headers['authorization'];
|
|
37
|
-
if (!authHeader) {
|
|
38
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Missing Authorization header'));
|
|
39
|
-
return;
|
|
40
|
-
}
|
|
41
|
-
if (!authHeader.startsWith('Bearer ')) {
|
|
42
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Authorization header must use Bearer scheme'));
|
|
43
|
-
return;
|
|
44
|
-
}
|
|
45
|
-
const token = authHeader.slice(7);
|
|
46
|
-
if (token.startsWith('ak_')) {
|
|
47
|
-
// API key flow — validate via /api/me (cached)
|
|
48
|
-
const cached = cache.get(token);
|
|
49
|
-
if (cached && cached.expiresAt > Date.now()) {
|
|
50
|
-
res.locals[AUTH_CONTEXT_KEY] = {
|
|
51
|
-
apiKey: token,
|
|
52
|
-
token,
|
|
53
|
-
orgId: cached.orgId,
|
|
54
|
-
applicationId: cached.applicationId,
|
|
55
|
-
authMethod: 'api_key',
|
|
56
|
-
};
|
|
57
|
-
next();
|
|
58
|
-
return;
|
|
59
|
-
}
|
|
60
|
-
void validateKey(platformApiUrl, token).then((result) => {
|
|
61
|
-
if (!result) {
|
|
62
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Invalid API key'));
|
|
63
|
-
return;
|
|
64
|
-
}
|
|
65
|
-
cache.set(token, { ...result, expiresAt: Date.now() + cacheTtlMs });
|
|
66
|
-
res.locals[AUTH_CONTEXT_KEY] = {
|
|
67
|
-
apiKey: token,
|
|
68
|
-
token,
|
|
69
|
-
...result,
|
|
70
|
-
authMethod: 'api_key',
|
|
71
|
-
};
|
|
72
|
-
next();
|
|
73
|
-
}, (err) => {
|
|
74
|
-
next(new AppError(502, 'AUTH_UPSTREAM_ERROR', `Failed to validate API key: ${err instanceof Error ? err.message : 'Unknown error'}`));
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
else if (verifyJWT) {
|
|
78
|
-
// JWT flow — validate locally via JWKS
|
|
79
|
-
void verifyJWT(token).then((claims) => {
|
|
80
|
-
if (!claims) {
|
|
81
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Invalid or expired token'));
|
|
82
|
-
return;
|
|
83
|
-
}
|
|
84
|
-
res.locals[AUTH_CONTEXT_KEY] = {
|
|
85
|
-
token,
|
|
86
|
-
orgId: claims.org_id,
|
|
87
|
-
applicationId: claims.app_id,
|
|
88
|
-
authMethod: 'platform_jwt',
|
|
89
|
-
...(claims.actor ? { actor: claims.actor } : {}),
|
|
90
|
-
};
|
|
91
|
-
next();
|
|
92
|
-
}, () => {
|
|
93
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Token verification failed'));
|
|
94
|
-
});
|
|
95
|
-
}
|
|
96
|
-
else {
|
|
97
|
-
next(new AppError(401, 'UNAUTHORIZED', 'Invalid API key format'));
|
|
98
|
-
}
|
|
99
|
-
};
|
|
100
|
-
}
|
|
101
|
-
/**
|
|
102
|
-
* Validate an API key by calling the platform API's /api/me endpoint.
|
|
103
|
-
* Returns org/app context if valid, null if invalid.
|
|
104
|
-
*/
|
|
105
|
-
async function validateKey(platformApiUrl, apiKey) {
|
|
106
|
-
const controller = new AbortController();
|
|
107
|
-
const timer = setTimeout(() => controller.abort(), 10000);
|
|
108
|
-
try {
|
|
109
|
-
const response = await fetch(`${platformApiUrl}/api/me`, {
|
|
110
|
-
signal: controller.signal,
|
|
111
|
-
headers: {
|
|
112
|
-
Authorization: `Bearer ${apiKey}`,
|
|
113
|
-
Accept: 'application/json',
|
|
114
|
-
},
|
|
115
|
-
});
|
|
116
|
-
clearTimeout(timer);
|
|
117
|
-
if (!response.ok) {
|
|
118
|
-
return null;
|
|
119
|
-
}
|
|
120
|
-
// eslint-disable-next-line @typescript-eslint/no-unsafe-type-assertion
|
|
121
|
-
const data = (await response.json());
|
|
122
|
-
// Prefer singular fields, fall back to arrays
|
|
123
|
-
const orgId = data.org?.id ?? '';
|
|
124
|
-
const applicationId = data.app?.id ?? data.apps?.[0]?.id ?? '';
|
|
125
|
-
return { orgId, applicationId };
|
|
126
|
-
}
|
|
127
|
-
catch {
|
|
128
|
-
clearTimeout(timer);
|
|
129
|
-
throw new Error('Platform API unreachable');
|
|
130
|
-
}
|
|
131
|
-
}
|
|
132
14
|
//# sourceMappingURL=auth.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;
|
|
1
|
+
{"version":3,"file":"auth.js","sourceRoot":"","sources":["../../../src/middleware/auth.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAkBH,MAAM,gBAAgB,GAAG,aAAa,CAAC;AAEvC;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,GAAa;IAC1C,uEAAuE;IACvE,OAAO,GAAG,CAAC,MAAM,CAAC,gBAAgB,CAA4B,CAAC;AACjE,CAAC"}
|
|
@@ -17,8 +17,9 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import { Router } from 'express';
|
|
19
19
|
import { z } from 'zod';
|
|
20
|
+
import type { AuthContext } from '../middleware/auth.js';
|
|
20
21
|
import type { SessionManager } from '../session/session-manager.js';
|
|
21
|
-
import type
|
|
22
|
+
import { type StreamHooks } from '../session/session-runner.js';
|
|
22
23
|
import { type SSEEvent } from '../types.js';
|
|
23
24
|
export declare const AIStreamRequestSchema: z.ZodObject<{
|
|
24
25
|
messages: z.ZodArray<z.ZodObject<{
|
|
@@ -36,18 +37,18 @@ export declare const AIStreamRequestSchema: z.ZodObject<{
|
|
|
36
37
|
content: z.ZodOptional<z.ZodString>;
|
|
37
38
|
}, "strip", z.ZodTypeAny, {
|
|
38
39
|
role: "user" | "assistant" | "system";
|
|
40
|
+
content?: string | undefined;
|
|
39
41
|
parts?: {
|
|
40
42
|
type: string;
|
|
41
43
|
text?: string | undefined;
|
|
42
44
|
}[] | undefined;
|
|
43
|
-
content?: string | undefined;
|
|
44
45
|
}, {
|
|
45
46
|
role: "user" | "assistant" | "system";
|
|
47
|
+
content?: string | undefined;
|
|
46
48
|
parts?: {
|
|
47
49
|
type: string;
|
|
48
50
|
text?: string | undefined;
|
|
49
51
|
}[] | undefined;
|
|
50
|
-
content?: string | undefined;
|
|
51
52
|
}>, "many">;
|
|
52
53
|
session_id: z.ZodOptional<z.ZodString>;
|
|
53
54
|
role: z.ZodOptional<z.ZodString>;
|
|
@@ -55,11 +56,11 @@ export declare const AIStreamRequestSchema: z.ZodObject<{
|
|
|
55
56
|
}, "strip", z.ZodTypeAny, {
|
|
56
57
|
messages: {
|
|
57
58
|
role: "user" | "assistant" | "system";
|
|
59
|
+
content?: string | undefined;
|
|
58
60
|
parts?: {
|
|
59
61
|
type: string;
|
|
60
62
|
text?: string | undefined;
|
|
61
63
|
}[] | undefined;
|
|
62
|
-
content?: string | undefined;
|
|
63
64
|
}[];
|
|
64
65
|
session_id?: string | undefined;
|
|
65
66
|
role?: string | undefined;
|
|
@@ -67,11 +68,11 @@ export declare const AIStreamRequestSchema: z.ZodObject<{
|
|
|
67
68
|
}, {
|
|
68
69
|
messages: {
|
|
69
70
|
role: "user" | "assistant" | "system";
|
|
71
|
+
content?: string | undefined;
|
|
70
72
|
parts?: {
|
|
71
73
|
type: string;
|
|
72
74
|
text?: string | undefined;
|
|
73
75
|
}[] | undefined;
|
|
74
|
-
content?: string | undefined;
|
|
75
76
|
}[];
|
|
76
77
|
session_id?: string | undefined;
|
|
77
78
|
role?: string | undefined;
|
|
@@ -152,8 +153,8 @@ export declare function translateEvent(event: SSEEvent, state: AdapterState): UI
|
|
|
152
153
|
export declare function extractUserMessage(messages: AIStreamRequest['messages']): string;
|
|
153
154
|
export interface AIStreamRouterOptions {
|
|
154
155
|
sessionManager: SessionManager;
|
|
155
|
-
|
|
156
|
-
|
|
156
|
+
/** Factory that builds per-request stream hooks from the auth context */
|
|
157
|
+
createStreamHooks?: (auth?: AuthContext) => StreamHooks;
|
|
157
158
|
}
|
|
158
159
|
export declare function createAIStreamRouter(options: AIStreamRouterOptions): Router;
|
|
159
160
|
export {};
|
|
@@ -259,22 +259,9 @@ export function createAIStreamRouter(options) {
|
|
|
259
259
|
res.flushHeaders();
|
|
260
260
|
const controller = new AbortController();
|
|
261
261
|
res.on('close', () => controller.abort());
|
|
262
|
-
// Build
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
const auth = getAuthContext(res);
|
|
266
|
-
if (auth?.token && auth.applicationId) {
|
|
267
|
-
audit = {
|
|
268
|
-
auditClient: options.auditClient,
|
|
269
|
-
appId: auth.applicationId,
|
|
270
|
-
token: auth.token,
|
|
271
|
-
orgId: auth.orgId,
|
|
272
|
-
actor: auth.actor,
|
|
273
|
-
platformApiUrl: options.platformApiUrl,
|
|
274
|
-
};
|
|
275
|
-
}
|
|
276
|
-
}
|
|
277
|
-
const stream = streamMessage(session, message, controller.signal, audit, options.sessionManager);
|
|
262
|
+
// Build per-request hooks with auth context
|
|
263
|
+
const hooks = options.createStreamHooks?.(getAuthContext(res));
|
|
264
|
+
const stream = streamMessage(session, message, controller.signal, hooks, options.sessionManager);
|
|
278
265
|
const state = createAdapterState();
|
|
279
266
|
for await (const event of stream) {
|
|
280
267
|
if (controller.signal.aborted)
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-stream.js","sourceRoot":"","sources":["../../../src/routes/ai-stream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH;;;;;;;;;;;GAWG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"ai-stream.js","sourceRoot":"","sources":["../../../src/routes/ai-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,11 +4,12 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
6
|
import { Router } from 'express';
|
|
7
|
+
import type { AuthContext } from '../middleware/auth.js';
|
|
7
8
|
import type { SessionManager } from '../session/session-manager.js';
|
|
8
|
-
import type
|
|
9
|
+
import { type StreamHooks } from '../session/session-runner.js';
|
|
9
10
|
export interface ChatStreamRouterOptions {
|
|
10
11
|
sessionManager: SessionManager;
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
/** Factory that builds per-request stream hooks from the auth context */
|
|
13
|
+
createStreamHooks?: (auth?: AuthContext) => StreamHooks;
|
|
13
14
|
}
|
|
14
15
|
export declare function createChatStreamRouter(options: ChatStreamRouterOptions): Router;
|
|
@@ -10,7 +10,8 @@ import { getAuthContext } from '../middleware/auth.js';
|
|
|
10
10
|
import { streamMessage } from '../session/session-runner.js';
|
|
11
11
|
export function createChatStreamRouter(options) {
|
|
12
12
|
const router = Router();
|
|
13
|
-
|
|
13
|
+
// Mount on both /chat and /chat/stream so the SPA always gets SSE
|
|
14
|
+
router.post(['/chat', '/chat/stream'], validate(ChatRequestSchema), async (req, res, next) => {
|
|
14
15
|
try {
|
|
15
16
|
const { message, session_id, role, session_type, deploy_id } = req.body;
|
|
16
17
|
let session;
|
|
@@ -39,22 +40,9 @@ export function createChatStreamRouter(options) {
|
|
|
39
40
|
const controller = new AbortController();
|
|
40
41
|
// Abort on client disconnect
|
|
41
42
|
res.on('close', () => controller.abort());
|
|
42
|
-
// Build
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
const auth = getAuthContext(res);
|
|
46
|
-
if (auth?.token && auth.applicationId) {
|
|
47
|
-
audit = {
|
|
48
|
-
auditClient: options.auditClient,
|
|
49
|
-
appId: auth.applicationId,
|
|
50
|
-
token: auth.token,
|
|
51
|
-
orgId: auth.orgId,
|
|
52
|
-
actor: auth.actor,
|
|
53
|
-
platformApiUrl: options.platformApiUrl,
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
const stream = streamMessage(session, message, controller.signal, audit, options.sessionManager);
|
|
43
|
+
// Build per-request hooks with auth context
|
|
44
|
+
const hooks = options.createStreamHooks?.(getAuthContext(res));
|
|
45
|
+
const stream = streamMessage(session, message, controller.signal, hooks, options.sessionManager);
|
|
58
46
|
for await (const event of stream) {
|
|
59
47
|
if (controller.signal.aborted)
|
|
60
48
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"chat-stream.js","sourceRoot":"","sources":["../../../src/routes/chat-stream.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC9D,OAAO,EAAE,QAAQ,EAAE,MAAM,qCAAqC,CAAC;AAC/D,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"chat-stream.js","sourceRoot":"","sources":["../../../src/routes/chat-stream.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,10 +4,12 @@
|
|
|
4
4
|
* SPDX-License-Identifier: MIT
|
|
5
5
|
*/
|
|
6
6
|
import { Router } from 'express';
|
|
7
|
+
import type { AuthContext } from '../middleware/auth.js';
|
|
7
8
|
import type { SessionManager } from '../session/session-manager.js';
|
|
8
|
-
import type
|
|
9
|
+
import { type StreamHooks } from '../session/session-runner.js';
|
|
9
10
|
export interface ChatRouterOptions {
|
|
10
11
|
sessionManager: SessionManager;
|
|
11
|
-
|
|
12
|
+
/** Factory that builds per-request stream hooks from the auth context */
|
|
13
|
+
createStreamHooks?: (auth?: AuthContext) => StreamHooks;
|
|
12
14
|
}
|
|
13
15
|
export declare function createChatRouter(options: ChatRouterOptions): Router;
|
package/dist/src/routes/chat.js
CHANGED
|
@@ -29,20 +29,8 @@ export function createChatRouter(options) {
|
|
|
29
29
|
const controller = new AbortController();
|
|
30
30
|
// Abort on client disconnect
|
|
31
31
|
res.on('close', () => controller.abort());
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if (options.auditClient) {
|
|
35
|
-
const auth = getAuthContext(res);
|
|
36
|
-
if (auth?.token && auth.applicationId) {
|
|
37
|
-
audit = {
|
|
38
|
-
auditClient: options.auditClient,
|
|
39
|
-
appId: auth.applicationId,
|
|
40
|
-
token: auth.token,
|
|
41
|
-
orgId: auth.orgId,
|
|
42
|
-
};
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
const result = await runMessage(session, message, controller.signal, audit);
|
|
32
|
+
const hooks = options.createStreamHooks?.(getAuthContext(res));
|
|
33
|
+
const result = await runMessage(session, message, controller.signal, hooks);
|
|
46
34
|
res.json(result);
|
|
47
35
|
}
|
|
48
36
|
catch (err) {
|