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.
- package/README.md +1 -1
- package/dashboard/index.html +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +131 -52
- package/dist/commands/server.js.map +1 -1
- package/dist/core/Config.js +2 -2
- package/dist/core/Config.js.map +1 -1
- package/dist/core/SessionManager.d.ts +1 -0
- package/dist/core/SessionManager.d.ts.map +1 -1
- package/dist/core/SessionManager.js +3 -0
- package/dist/core/SessionManager.js.map +1 -1
- package/dist/lifeline/ServerSupervisor.d.ts +1 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
- package/dist/lifeline/ServerSupervisor.js +74 -10
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/lifeline/TelegramLifeline.d.ts +8 -0
- package/dist/lifeline/TelegramLifeline.d.ts.map +1 -1
- package/dist/lifeline/TelegramLifeline.js +115 -6
- package/dist/lifeline/TelegramLifeline.js.map +1 -1
- package/dist/messaging/SpawnRequestManager.d.ts +16 -0
- package/dist/messaging/SpawnRequestManager.d.ts.map +1 -1
- package/dist/messaging/SpawnRequestManager.js +63 -5
- package/dist/messaging/SpawnRequestManager.js.map +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +13 -1
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +90 -7
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/imessage/IMessageAdapter.d.ts +4 -2
- package/dist/messaging/imessage/IMessageAdapter.d.ts.map +1 -1
- package/dist/messaging/imessage/IMessageAdapter.js +19 -5
- package/dist/messaging/imessage/IMessageAdapter.js.map +1 -1
- package/dist/messaging/slack/SlackAdapter.d.ts +6 -0
- package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -1
- package/dist/messaging/slack/SlackAdapter.js +27 -0
- package/dist/messaging/slack/SlackAdapter.js.map +1 -1
- package/dist/server/AgentServer.d.ts +5 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +1 -0
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +7 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +162 -34
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/AgentTrustManager.d.ts +17 -3
- package/dist/threadline/AgentTrustManager.d.ts.map +1 -1
- package/dist/threadline/AgentTrustManager.js +44 -13
- package/dist/threadline/AgentTrustManager.js.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.d.ts.map +1 -1
- package/dist/threadline/ThreadlineMCPServer.js +32 -10
- package/dist/threadline/ThreadlineMCPServer.js.map +1 -1
- package/dist/threadline/client/ThreadlineClient.d.ts +9 -1
- package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
- package/dist/threadline/client/ThreadlineClient.js +64 -10
- package/dist/threadline/client/ThreadlineClient.js.map +1 -1
- package/dist/threadline/mcp-stdio-entry.js +3 -2
- package/dist/threadline/mcp-stdio-entry.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +50 -50
- package/src/templates/hooks/compaction-recovery.sh +82 -3
- package/upgrades/0.28.2.md +29 -0
- package/upgrades/0.28.3.md +35 -0
package/dist/server/routes.d.ts
CHANGED
|
@@ -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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"}
|
package/dist/server/routes.js
CHANGED
|
@@ -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
|
-
|
|
4388
|
-
|
|
4389
|
-
|
|
4390
|
-
|
|
4391
|
-
|
|
4392
|
-
|
|
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
|
-
|
|
4684
|
-
|
|
4685
|
-
|
|
4686
|
-
|
|
4687
|
-
|
|
4688
|
-
|
|
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
|
-
|
|
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
|
-
|
|
7677
|
-
|
|
7678
|
-
|
|
7679
|
-
|
|
7680
|
-
|
|
7681
|
-
|
|
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
|
-
|
|
7716
|
-
|
|
7717
|
-
|
|
7718
|
-
|
|
7719
|
-
|
|
7720
|
-
|
|
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
|