@alexlikevibe/agent-sdk 0.1.2 → 0.1.3

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.
@@ -1 +1 @@
1
- {"version":3,"file":"create-agent.d.ts","sourceRoot":"","sources":["../src/create-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAOnE,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8CjF"}
1
+ {"version":3,"file":"create-agent.d.ts","sourceRoot":"","sources":["../src/create-agent.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAA;AAOnE,MAAM,WAAW,kBAAkB;IACjC,kCAAkC;IAClC,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,+BAA+B;IAC/B,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,sCAAsC;IACtC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;CACrB;AAED,wBAAsB,WAAW,CAAC,OAAO,GAAE,kBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,CA8DjF"}
@@ -16,35 +16,46 @@ export async function createAgent(options = {}) {
16
16
  else {
17
17
  logger.info({ event: 'agent.start', mode: 'local' });
18
18
  }
19
- // Create the app (registers LLM provider, sets up session, mounts routes)
20
- // The app is created first so /health is available immediately after listen().
21
- const app = await createHarnessApp({ systemPrompt, tools, skillDirs, config, gateway });
19
+ // Build the express app synchronously (no async init yet just mounts routes).
20
+ // /health is available as soon as server.listen() is called.
21
+ const app = createHarnessApp({ systemPrompt, tools, skillDirs, config, gateway });
22
+ // Mark flags as false so /chat returns 503 until both are ready
23
+ app.locals.sessionReady = false;
24
+ app.locals.fileSyncReady = config.mode !== 'sandbox'; // local: no file sync needed
22
25
  const server = createServer(app);
23
- server.listen(config.port, () => {
26
+ await new Promise((resolve) => server.listen(config.port, () => {
24
27
  logger.info({ event: 'agent.listening', port: config.port, mode: config.mode });
28
+ resolve();
29
+ }));
30
+ // After listen(), kick off session init and file sync in parallel.
31
+ // /health already returns 200; /chat returns 503 until both complete.
32
+ const sessionInitPromise = app.locals.initSession().catch((err) => {
33
+ logger.error({ event: 'agent.session_init_failed', error: String(err) });
34
+ app.locals.sessionReady = true; // unblock /chat even on failure
25
35
  });
26
- // In sandbox mode, run file sync init in the background AFTER the server is
27
- // already listening. /health returns 200 immediately; /chat returns 503 until
28
- // init is complete (handled inside createHarnessApp via the readyPromise).
29
- if (config.mode === 'sandbox' && fileSync) {
30
- const initStart = Date.now();
31
- logger.info({ event: 'agent.file_sync_init', mode: 'sandbox' });
32
- fileSync.init().then(() => {
33
- fileSync.startWatch();
34
- logger.info({ event: 'agent.file_sync_started', duration_ms: Date.now() - initStart });
35
- app.locals.fileSyncReady = true;
36
- }).catch((err) => {
37
- logger.error({ event: 'agent.file_sync_failed', error: String(err) });
38
- app.locals.fileSyncReady = true; // don't block chat on file sync failure
39
- });
40
- }
41
- else {
42
- app.locals.fileSyncReady = true;
43
- }
36
+ const fileSyncPromise = fileSync
37
+ ? (() => {
38
+ const initStart = Date.now();
39
+ logger.info({ event: 'agent.file_sync_init', mode: 'sandbox' });
40
+ return fileSync.init()
41
+ .then(() => {
42
+ fileSync.startWatch();
43
+ logger.info({ event: 'agent.file_sync_started', duration_ms: Date.now() - initStart });
44
+ })
45
+ .catch((err) => {
46
+ logger.error({ event: 'agent.file_sync_failed', error: String(err) });
47
+ })
48
+ .finally(() => { app.locals.fileSyncReady = true; });
49
+ })()
50
+ : Promise.resolve();
44
51
  // Graceful shutdown
45
52
  process.on('SIGTERM', () => {
46
53
  fileSync?.stopWatch();
47
54
  server.close(() => process.exit(0));
48
55
  });
56
+ // In local mode, await both so the process doesn't exit early
57
+ if (config.mode !== 'sandbox') {
58
+ await Promise.all([sessionInitPromise, fileSyncPromise]);
59
+ }
49
60
  }
50
61
  //# sourceMappingURL=create-agent.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../src/create-agent.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"create-agent.js","sourceRoot":"","sources":["../src/create-agent.ts"],"names":[],"mappings":"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"}
@@ -9,5 +9,5 @@ export interface HarnessServerOptions {
9
9
  config: ResolvedConfig;
10
10
  gateway?: GatewayClient;
11
11
  }
12
- export declare function createHarnessApp(options: HarnessServerOptions): Promise<Application>;
12
+ export declare function createHarnessApp(options: HarnessServerOptions): Application;
13
13
  //# sourceMappingURL=harness-server.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"harness-server.d.ts","sourceRoot":"","sources":["../src/harness-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAA;AACtC,OAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAA;AAGrE,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAKD,wBAAsB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,WAAW,CAAC,CAkI1F"}
1
+ {"version":3,"file":"harness-server.d.ts","sourceRoot":"","sources":["../src/harness-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAML,KAAK,cAAc,EACpB,MAAM,+BAA+B,CAAA;AACtC,OAAgB,EAAE,KAAK,WAAW,EAAE,MAAM,SAAS,CAAA;AAInD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAA;AACxD,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,kBAAkB,CAAA;AAGrE,MAAM,WAAW,oBAAoB;IACnC,YAAY,EAAE,MAAM,CAAA;IACpB,KAAK,CAAC,EAAE,cAAc,EAAE,CAAA;IACxB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAA;IACpB,MAAM,EAAE,cAAc,CAAA;IACtB,OAAO,CAAC,EAAE,aAAa,CAAA;CACxB;AAKD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,oBAAoB,GAAG,WAAW,CAwI3E"}
@@ -6,72 +6,75 @@ import { logger } from './logger.js';
6
6
  // Note: /chat requests are processed serially by the pi agent session.
7
7
  // Concurrent requests are not supported in MVP — the dispatcher ensures
8
8
  // one request at a time per conversation (sandbox-per-conversation model).
9
- export async function createHarnessApp(options) {
9
+ export function createHarnessApp(options) {
10
10
  const { config, systemPrompt, tools = [], gateway } = options;
11
11
  const app = express();
12
12
  app.use(express.json());
13
- // Register gateway LLM provider in sandbox mode
14
- if (config.mode === 'sandbox' && gateway) {
15
- const provider = createGatewayLlmProvider(config.gatewayUrl, config.sessionToken);
16
- try {
17
- const { registerApiProvider } = await import('@mariozechner/pi-ai');
18
- registerApiProvider(provider, 'aaas-gateway');
13
+ // Session is initialized asynchronously after the server starts listening.
14
+ // /health returns 200 immediately; /chat returns 503 until session is ready.
15
+ let session = null;
16
+ let lastMessageId = null;
17
+ // Kick off session init in the background — caller triggers this after listen()
18
+ app.locals.initSession = async () => {
19
+ const initStart = Date.now();
20
+ // Register gateway LLM provider in sandbox mode
21
+ if (config.mode === 'sandbox' && gateway) {
22
+ const provider = createGatewayLlmProvider(config.gatewayUrl, config.sessionToken);
23
+ try {
24
+ const { registerApiProvider } = await import('@mariozechner/pi-ai');
25
+ registerApiProvider(provider, 'aaas-gateway');
26
+ }
27
+ catch (e) {
28
+ logger.warn({ event: 'harness.provider_register_failed', error: String(e) });
29
+ }
19
30
  }
20
- catch (e) {
21
- logger.warn({ event: 'harness.provider_register_failed', error: String(e) });
31
+ const sessionDir = config.mode === 'sandbox'
32
+ ? join(config.persistentRoot, 'conversation')
33
+ : undefined;
34
+ const sessionManager = sessionDir
35
+ ? SessionManager.continueRecent(process.cwd(), sessionDir)
36
+ : SessionManager.inMemory();
37
+ let gatewayModel;
38
+ let modelRegistry;
39
+ if (config.mode === 'sandbox') {
40
+ const sandboxConfig = config;
41
+ gatewayModel = {
42
+ id: process.env.LLM_MODEL ?? 'glm-5.1',
43
+ name: 'Gateway LLM',
44
+ api: 'gateway-llm',
45
+ provider: 'gateway',
46
+ baseUrl: sandboxConfig.gatewayUrl,
47
+ reasoning: false,
48
+ input: ['text'],
49
+ cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
50
+ contextWindow: 128000,
51
+ maxTokens: 4096,
52
+ };
53
+ modelRegistry = new ModelRegistry(AuthStorage.inMemory(), undefined);
54
+ modelRegistry.registerProvider('gateway', { apiKey: sandboxConfig.sessionToken });
22
55
  }
23
- }
24
- // Resolve session directory
25
- const sessionDir = config.mode === 'sandbox'
26
- ? join(config.persistentRoot, 'conversation')
27
- : undefined;
28
- // SessionManager: use continueRecent in sandbox, or inMemory in local dev
29
- const sessionManager = sessionDir
30
- ? SessionManager.continueRecent(process.cwd(), sessionDir)
31
- : SessionManager.inMemory();
32
- // In sandbox mode, construct a Model pointing to gateway-llm provider and a
33
- // ModelRegistry that knows the 'gateway' provider's API key (= sessionToken).
34
- // pi-coding-agent calls getApiKey(model.provider) before each LLM request;
35
- // without a registered key it throws "No API key found for gateway".
36
- let gatewayModel;
37
- let modelRegistry;
38
- if (config.mode === 'sandbox') {
39
- const sandboxConfig = config;
40
- gatewayModel = {
41
- id: process.env.LLM_MODEL ?? 'glm-5.1',
42
- name: 'Gateway LLM',
43
- api: 'gateway-llm',
44
- provider: 'gateway',
45
- baseUrl: sandboxConfig.gatewayUrl,
46
- reasoning: false,
47
- input: ['text'],
48
- cost: { input: 0, output: 0, cacheRead: 0, cacheWrite: 0 },
49
- contextWindow: 128000,
50
- maxTokens: 4096,
56
+ const sessionOptions = {
57
+ sessionManager,
58
+ customTools: tools,
59
+ ...(gatewayModel && { model: gatewayModel }),
60
+ ...(modelRegistry && { modelRegistry }),
51
61
  };
52
- modelRegistry = new ModelRegistry(AuthStorage.inMemory(), undefined);
53
- modelRegistry.registerProvider('gateway', { apiKey: sandboxConfig.sessionToken });
54
- }
55
- const sessionOptions = {
56
- sessionManager,
57
- customTools: tools,
58
- ...(gatewayModel && { model: gatewayModel }),
59
- ...(modelRegistry && { modelRegistry }),
62
+ const result = await createAgentSession(sessionOptions);
63
+ session = result.session;
64
+ if (systemPrompt) {
65
+ session.agent.setSystemPrompt(systemPrompt);
66
+ }
67
+ logger.info({ event: 'agent.session_ready', duration_ms: Date.now() - initStart });
68
+ app.locals.sessionReady = true;
60
69
  };
61
- const { session } = await createAgentSession(sessionOptions);
62
- let lastMessageId = null;
63
- if (systemPrompt) {
64
- session.agent.setSystemPrompt(systemPrompt);
65
- }
66
70
  // /health is always 200 — dispatcher polls this to detect agent startup.
67
- // It returns OK as soon as the HTTP server is listening, before file sync
68
- // or session init completes, allowing faster sandbox ready detection.
71
+ // Returns OK as soon as the HTTP server is listening, before session init.
69
72
  app.get('/health', (_req, res) => {
70
73
  res.json({ ok: true });
71
74
  });
72
75
  app.post('/chat', async (req, res) => {
73
- // Return 503 if file sync init is still in progress (typically < 1s)
74
- if (config.mode === 'sandbox' && !req.app.locals.fileSyncReady) {
76
+ // Return 503 if session or file sync init is still in progress
77
+ if (!app.locals.sessionReady || !app.locals.fileSyncReady) {
75
78
  res.status(503).json({ error: 'agent initializing' });
76
79
  return;
77
80
  }
@@ -1 +1 @@
1
- {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../src/harness-server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"harness-server.js","sourceRoot":"","sources":["../src/harness-server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@alexlikevibe/agent-sdk",
3
- "version": "0.1.2",
3
+ "version": "0.1.3",
4
4
  "description": "AaaS Agent SDK — build agents that run on the AaaS harness",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",