instar 0.28.1 → 0.28.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.
Files changed (61) hide show
  1. package/README.md +1 -1
  2. package/dashboard/index.html +1 -1
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +131 -52
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/core/Config.js +2 -2
  7. package/dist/core/Config.js.map +1 -1
  8. package/dist/core/SessionManager.d.ts +1 -0
  9. package/dist/core/SessionManager.d.ts.map +1 -1
  10. package/dist/core/SessionManager.js +3 -0
  11. package/dist/core/SessionManager.js.map +1 -1
  12. package/dist/lifeline/ServerSupervisor.d.ts +1 -0
  13. package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
  14. package/dist/lifeline/ServerSupervisor.js +74 -10
  15. package/dist/lifeline/ServerSupervisor.js.map +1 -1
  16. package/dist/lifeline/TelegramLifeline.d.ts +8 -0
  17. package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
  18. package/dist/lifeline/TelegramLifeline.js +115 -6
  19. package/dist/lifeline/TelegramLifeline.js.map +1 -1
  20. package/dist/messaging/SpawnRequestManager.d.ts +16 -0
  21. package/dist/messaging/SpawnRequestManager.d.ts.map +1 -1
  22. package/dist/messaging/SpawnRequestManager.js +63 -5
  23. package/dist/messaging/SpawnRequestManager.js.map +1 -1
  24. package/dist/messaging/TelegramAdapter.d.ts +13 -1
  25. package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
  26. package/dist/messaging/TelegramAdapter.js +90 -7
  27. package/dist/messaging/TelegramAdapter.js.map +1 -1
  28. package/dist/messaging/imessage/IMessageAdapter.d.ts +4 -2
  29. package/dist/messaging/imessage/IMessageAdapter.d.ts.map +1 -1
  30. package/dist/messaging/imessage/IMessageAdapter.js +19 -5
  31. package/dist/messaging/imessage/IMessageAdapter.js.map +1 -1
  32. package/dist/messaging/slack/SlackAdapter.d.ts +6 -0
  33. package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
  34. package/dist/messaging/slack/SlackAdapter.js +27 -0
  35. package/dist/messaging/slack/SlackAdapter.js.map +1 -1
  36. package/dist/server/AgentServer.d.ts +5 -0
  37. package/dist/server/AgentServer.d.ts.map +1 -1
  38. package/dist/server/AgentServer.js +1 -0
  39. package/dist/server/AgentServer.js.map +1 -1
  40. package/dist/server/routes.d.ts +7 -0
  41. package/dist/server/routes.d.ts.map +1 -1
  42. package/dist/server/routes.js +162 -34
  43. package/dist/server/routes.js.map +1 -1
  44. package/dist/threadline/AgentTrustManager.d.ts +17 -3
  45. package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
  46. package/dist/threadline/AgentTrustManager.js +44 -13
  47. package/dist/threadline/AgentTrustManager.js.map +1 -1
  48. package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
  49. package/dist/threadline/ThreadlineMCPServer.js +32 -10
  50. package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
  51. package/dist/threadline/client/ThreadlineClient.d.ts +9 -1
  52. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  53. package/dist/threadline/client/ThreadlineClient.js +64 -10
  54. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  55. package/dist/threadline/mcp-stdio-entry.js +3 -2
  56. package/dist/threadline/mcp-stdio-entry.js.map +1 -1
  57. package/package.json +1 -1
  58. package/src/data/builtin-manifest.json +50 -50
  59. package/src/templates/hooks/compaction-recovery.sh +82 -3
  60. package/upgrades/0.28.2.md +29 -0
  61. package/upgrades/0.28.3.md +35 -0
@@ -128,6 +128,13 @@ export interface RouteContext {
128
128
  featureRegistry: import('../core/FeatureRegistry.js').FeatureRegistry | null;
129
129
  discoveryEvaluator: import('../core/DiscoveryEvaluator.js').DiscoveryEvaluator | null;
130
130
  unifiedTrust: UnifiedTrustSystem | null;
131
+ /** Pending reply waiters for threadline relay-send waitForReply support.
132
+ * Key: sender fingerprint, Value: resolve callback with reply text */
133
+ threadlineReplyWaiters: Map<string, {
134
+ resolve: (reply: string) => void;
135
+ threadId: string;
136
+ timer: ReturnType<typeof setTimeout>;
137
+ }>;
131
138
  startTime: Date;
132
139
  }
133
140
  export declare function createRoutes(ctx: RouteContext): Router;
@@ -1 +1 @@
1
- {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"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"}
@@ -2148,7 +2148,7 @@ export function createRoutes(ctx) {
2148
2148
  result.platform = 'telegram';
2149
2149
  result.platformId = topicId;
2150
2150
  const topicName = ctx.telegram.getTopicName?.(topicId);
2151
- if (topicName)
2151
+ if (topicName && !/^topic-\d+$/.test(topicName))
2152
2152
  result.platformName = topicName;
2153
2153
  }
2154
2154
  }
@@ -4330,7 +4330,7 @@ export function createRoutes(ctx) {
4330
4330
  res.send(html);
4331
4331
  });
4332
4332
  // Receive a secret submission (user-facing, NO auth — token + CSRF is the auth)
4333
- router.post('/secrets/drop/:token', (req, res) => {
4333
+ router.post('/secrets/drop/:token', async (req, res) => {
4334
4334
  const { _csrf, ...values } = req.body;
4335
4335
  if (!_csrf || typeof _csrf !== 'string') {
4336
4336
  res.status(400).json({ error: 'Missing CSRF token' });
@@ -4384,15 +4384,32 @@ export function createRoutes(ctx) {
4384
4384
  else {
4385
4385
  // No live session — spawn one to handle the secret receipt
4386
4386
  let topicName = `topic-${topicId}`;
4387
- try {
4388
- if (fs.existsSync(sdRegistryPath)) {
4389
- const reg = JSON.parse(fs.readFileSync(sdRegistryPath, 'utf-8'));
4390
- const stored = reg.topicToName?.[String(topicId)];
4391
- if (stored)
4392
- topicName = stored;
4387
+ // Try live adapter first, then disk registry, then active probe
4388
+ if (ctx.telegram) {
4389
+ const liveName = ctx.telegram.getTopicName(topicId);
4390
+ if (liveName && !/^topic-\d+$/.test(liveName)) {
4391
+ topicName = liveName;
4392
+ }
4393
+ }
4394
+ if (/^topic-\d+$/.test(topicName)) {
4395
+ try {
4396
+ if (fs.existsSync(sdRegistryPath)) {
4397
+ const reg = JSON.parse(fs.readFileSync(sdRegistryPath, 'utf-8'));
4398
+ const stored = reg.topicToName?.[String(topicId)];
4399
+ if (stored && !/^topic-\d+$/.test(stored))
4400
+ topicName = stored;
4401
+ }
4393
4402
  }
4403
+ catch { /* fall through */ }
4404
+ }
4405
+ if (/^topic-\d+$/.test(topicName) && ctx.telegram) {
4406
+ try {
4407
+ const resolved = await ctx.telegram.resolveTopicName(topicId);
4408
+ if (resolved)
4409
+ topicName = resolved;
4410
+ }
4411
+ catch { /* fall through to default */ }
4394
4412
  }
4395
- catch { /* fall through to default */ }
4396
4413
  // Build context with thread history
4397
4414
  const historyLines = [];
4398
4415
  if (ctx.telegram) {
@@ -4564,7 +4581,7 @@ export function createRoutes(ctx) {
4564
4581
  // ── Internal: Lifeline Telegram Forward ─────────────────────────
4565
4582
  // Receives messages from the Telegram Lifeline process and injects
4566
4583
  // them into the appropriate session, just like TelegramAdapter would.
4567
- router.post('/internal/telegram-forward', (req, res) => {
4584
+ router.post('/internal/telegram-forward', async (req, res) => {
4568
4585
  const { topicId, text, fromUserId, fromUsername, fromFirstName, messageId } = req.body;
4569
4586
  if (!topicId || !text) {
4570
4587
  res.status(400).json({ error: 'topicId and text required' });
@@ -4680,15 +4697,32 @@ export function createRoutes(ctx) {
4680
4697
  // tmux names include the project prefix (e.g., "ai-guy-lifeline"), and
4681
4698
  // spawnInteractiveSession prepends it again → cascading names.
4682
4699
  let topicName = `topic-${topicId}`;
4683
- try {
4684
- if (fs.existsSync(registryPath)) {
4685
- const reg = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
4686
- const stored = reg.topicToName?.[String(topicId)];
4687
- if (stored)
4688
- topicName = stored;
4700
+ // Try live adapter first, then disk registry, then active probe
4701
+ if (ctx.telegram) {
4702
+ const liveName = ctx.telegram.getTopicName(topicId);
4703
+ if (liveName && !/^topic-\d+$/.test(liveName)) {
4704
+ topicName = liveName;
4705
+ }
4706
+ }
4707
+ if (/^topic-\d+$/.test(topicName)) {
4708
+ try {
4709
+ if (fs.existsSync(registryPath)) {
4710
+ const reg = JSON.parse(fs.readFileSync(registryPath, 'utf-8'));
4711
+ const stored = reg.topicToName?.[String(topicId)];
4712
+ if (stored && !/^topic-\d+$/.test(stored))
4713
+ topicName = stored;
4714
+ }
4689
4715
  }
4716
+ catch { /* fall through */ }
4717
+ }
4718
+ if (/^topic-\d+$/.test(topicName) && ctx.telegram) {
4719
+ try {
4720
+ const resolved = await ctx.telegram.resolveTopicName(topicId);
4721
+ if (resolved)
4722
+ topicName = resolved;
4723
+ }
4724
+ catch { /* fall through to default */ }
4690
4725
  }
4691
- catch { /* fall through to default */ }
4692
4726
  console.log(`[telegram-forward] No live session for topic ${topicId}, spawning "${topicName}"...`);
4693
4727
  // Fetch thread history so auto-spawned sessions have full conversational context
4694
4728
  const historyLines = [];
@@ -7124,6 +7158,28 @@ export function createRoutes(ctx) {
7124
7158
  }
7125
7159
  const accepted = await ctx.messageRouter.relay(envelope, 'agent');
7126
7160
  if (accepted) {
7161
+ const senderAgent = envelope.message?.from?.agent;
7162
+ console.log(`[relay-agent] Accepted message from ${senderAgent ?? 'unknown'} (thread: ${envelope.message?.threadId ?? 'none'}, id: ${envelope.message?.id ?? 'none'})`);
7163
+ // Check if this message resolves a pending waitForReply request.
7164
+ // Local delivery bypasses the relay client's gate-passed event, so we
7165
+ // must check reply waiters here directly.
7166
+ if (senderAgent && ctx.threadlineReplyWaiters.size > 0) {
7167
+ let textContent;
7168
+ const body = envelope.message?.body;
7169
+ if (typeof body === 'string')
7170
+ textContent = body;
7171
+ else if (typeof body === 'object' && body !== null) {
7172
+ textContent = String(body.content ?? body.text ?? JSON.stringify(body));
7173
+ }
7174
+ if (textContent) {
7175
+ const isAutoAck = textContent.startsWith('Message received.') || textContent.startsWith('Message received,');
7176
+ const waiter = ctx.threadlineReplyWaiters.get(senderAgent);
7177
+ if (waiter && !isAutoAck) {
7178
+ console.log(`[relay-agent] Resolved reply waiter for ${senderAgent}`);
7179
+ waiter.resolve(textContent);
7180
+ }
7181
+ }
7182
+ }
7127
7183
  // If the message has a threadId and we have a ThreadlineRouter,
7128
7184
  // route it through the threadline pipeline for session resume/spawn.
7129
7185
  if (ctx.threadlineRouter && envelope.message?.threadId) {
@@ -7584,6 +7640,27 @@ export function createRoutes(ctx) {
7584
7640
  },
7585
7641
  });
7586
7642
  });
7643
+ // ── Threadline Reply Waiter ─────────────────────────────────────────
7644
+ // Waits for an incoming reply from a specific agent on a specific thread.
7645
+ // Used by the relay-send endpoint when waitForReply is true.
7646
+ function waitForThreadlineReply(routeCtx, senderAgent, _threadId, timeoutSec) {
7647
+ const timeout = Math.min(Math.max(timeoutSec ?? 120, 5), 300) * 1000; // 5s–300s, default 120s
7648
+ return new Promise((resolve) => {
7649
+ const timer = setTimeout(() => {
7650
+ routeCtx.threadlineReplyWaiters.delete(senderAgent);
7651
+ resolve(null);
7652
+ }, timeout);
7653
+ routeCtx.threadlineReplyWaiters.set(senderAgent, {
7654
+ resolve: (reply) => {
7655
+ clearTimeout(timer);
7656
+ routeCtx.threadlineReplyWaiters.delete(senderAgent);
7657
+ resolve(reply);
7658
+ },
7659
+ threadId: _threadId,
7660
+ timer,
7661
+ });
7662
+ });
7663
+ }
7587
7664
  // ── Threadline Relay Send ────────────────────────────────────────────
7588
7665
  // Used by the MCP server's threadline_send tool to route messages through
7589
7666
  // the relay WebSocket. Tries local delivery first for co-located agents,
@@ -7592,7 +7669,7 @@ export function createRoutes(ctx) {
7592
7669
  // HTTP endpoint.
7593
7670
  router.post('/threadline/relay-send', async (req, res) => {
7594
7671
  const relayClient = ctx.threadlineRelayClient;
7595
- const { targetAgent, message, threadId } = req.body;
7672
+ const { targetAgent, message, threadId, waitForReply, timeoutSeconds } = req.body;
7596
7673
  if (!targetAgent || !message) {
7597
7674
  res.status(400).json({ success: false, error: 'Missing required fields: targetAgent, message' });
7598
7675
  return;
@@ -7613,7 +7690,30 @@ export function createRoutes(ctx) {
7613
7690
  if (fs.existsSync(knownAgentsPath)) {
7614
7691
  const knownData = JSON.parse(fs.readFileSync(knownAgentsPath, 'utf-8'));
7615
7692
  const agents = knownData.agents ?? [];
7616
- const localTarget = agents.find(a => a.name === targetAgent || a.name?.toLowerCase() === targetAgent?.toLowerCase());
7693
+ // Support "name:fingerprintPrefix" disambiguation syntax
7694
+ let targetName = targetAgent;
7695
+ let targetFpPrefix;
7696
+ const colonIdx = targetAgent.lastIndexOf(':');
7697
+ if (colonIdx > 0 && colonIdx < targetAgent.length - 1) {
7698
+ const suffix = targetAgent.substring(colonIdx + 1);
7699
+ if (/^[0-9a-f]{4,32}$/i.test(suffix)) {
7700
+ targetName = targetAgent.substring(0, colonIdx);
7701
+ targetFpPrefix = suffix.toLowerCase();
7702
+ }
7703
+ }
7704
+ const nameMatches = agents.filter(a => a.name === targetName || a.name?.toLowerCase() === targetName?.toLowerCase());
7705
+ // If multiple same-named agents, disambiguate by fingerprint prefix
7706
+ let localTarget = nameMatches.length === 1 ? nameMatches[0] : undefined;
7707
+ if (nameMatches.length > 1 && targetFpPrefix) {
7708
+ localTarget = nameMatches.find(a => {
7709
+ const fp = a.fingerprint || a.publicKey?.substring(0, 32);
7710
+ return fp?.toLowerCase().startsWith(targetFpPrefix);
7711
+ });
7712
+ }
7713
+ else if (nameMatches.length > 1 && !targetFpPrefix) {
7714
+ // Ambiguous — skip local delivery, let relay handle it
7715
+ localTarget = undefined;
7716
+ }
7617
7717
  if (localTarget?.port && localTarget.name !== ctx.config.projectName) {
7618
7718
  // Check if the local agent is actually running
7619
7719
  try {
@@ -7673,13 +7773,26 @@ export function createRoutes(ctx) {
7673
7773
  });
7674
7774
  if (localResp.ok) {
7675
7775
  console.log(`[relay-send] Local delivery to ${localTarget.name}:${localTarget.port} (thread: ${effectiveThreadId})`);
7676
- res.json({
7677
- success: true,
7678
- messageId: msgId,
7679
- threadId: effectiveThreadId,
7680
- resolvedAgent: localTarget.name,
7681
- deliveryPath: 'local',
7682
- });
7776
+ if (waitForReply) {
7777
+ const reply = await waitForThreadlineReply(ctx, localTarget.name, effectiveThreadId, timeoutSeconds);
7778
+ res.json({
7779
+ success: true,
7780
+ messageId: msgId,
7781
+ threadId: effectiveThreadId,
7782
+ resolvedAgent: localTarget.name,
7783
+ deliveryPath: 'local',
7784
+ reply,
7785
+ });
7786
+ }
7787
+ else {
7788
+ res.json({
7789
+ success: true,
7790
+ messageId: msgId,
7791
+ threadId: effectiveThreadId,
7792
+ resolvedAgent: localTarget.name,
7793
+ deliveryPath: 'local',
7794
+ });
7795
+ }
7683
7796
  return;
7684
7797
  }
7685
7798
  // Local delivery failed — fall through to relay
@@ -7712,13 +7825,27 @@ export function createRoutes(ctx) {
7712
7825
  return;
7713
7826
  }
7714
7827
  const relayMsgId = relayClient.sendAuto(resolvedId, message, threadId);
7715
- res.json({
7716
- success: true,
7717
- messageId: relayMsgId,
7718
- threadId: threadId ?? relayMsgId,
7719
- resolvedAgent: resolvedId,
7720
- deliveryPath: 'relay',
7721
- });
7828
+ const effectiveRelayThreadId = threadId ?? relayMsgId;
7829
+ if (waitForReply) {
7830
+ const reply = await waitForThreadlineReply(ctx, resolvedId, effectiveRelayThreadId, timeoutSeconds);
7831
+ res.json({
7832
+ success: true,
7833
+ messageId: relayMsgId,
7834
+ threadId: effectiveRelayThreadId,
7835
+ resolvedAgent: resolvedId,
7836
+ deliveryPath: 'relay',
7837
+ reply,
7838
+ });
7839
+ }
7840
+ else {
7841
+ res.json({
7842
+ success: true,
7843
+ messageId: relayMsgId,
7844
+ threadId: effectiveRelayThreadId,
7845
+ resolvedAgent: resolvedId,
7846
+ deliveryPath: 'relay',
7847
+ });
7848
+ }
7722
7849
  }
7723
7850
  catch (err) {
7724
7851
  res.status(500).json({
@@ -8339,7 +8466,7 @@ export function createRoutes(ctx) {
8339
8466
  res.status(501).json({ error: 'FeatureRegistry not initialized' });
8340
8467
  return;
8341
8468
  }
8342
- const { to, userId: bodyUserId, trigger, consentRecord, context } = req.body || {};
8469
+ const { to, userId: bodyUserId, trigger, consentRecord, context, activationChallenge } = req.body || {};
8343
8470
  if (!to) {
8344
8471
  res.status(400).json({ error: { code: 'MISSING_TARGET', message: 'Request body must include "to" (target state)' } });
8345
8472
  return;
@@ -8349,6 +8476,7 @@ export function createRoutes(ctx) {
8349
8476
  trigger,
8350
8477
  consentRecord,
8351
8478
  context,
8479
+ activationChallenge,
8352
8480
  });
8353
8481
  if (!result.success) {
8354
8482
  const status = result.error?.code === 'FEATURE_NOT_FOUND' ? 404