instar 0.24.13 → 0.24.14
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/.claude/skills/setup-wizard/skill.md +281 -5
- package/dashboard/index.html +341 -0
- package/dist/cli.js +18 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +188 -1
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/slack-cli.d.ts +16 -0
- package/dist/commands/slack-cli.d.ts.map +1 -0
- package/dist/commands/slack-cli.js +198 -0
- package/dist/commands/slack-cli.js.map +1 -0
- package/dist/core/AgentRegistry.d.ts.map +1 -1
- package/dist/core/AgentRegistry.js +24 -6
- package/dist/core/AgentRegistry.js.map +1 -1
- package/dist/core/SleepWakeDetector.d.ts +11 -0
- package/dist/core/SleepWakeDetector.d.ts.map +1 -1
- package/dist/core/SleepWakeDetector.js +16 -1
- package/dist/core/SleepWakeDetector.js.map +1 -1
- package/dist/lifeline/ServerSupervisor.d.ts +13 -0
- package/dist/lifeline/ServerSupervisor.d.ts.map +1 -1
- package/dist/lifeline/ServerSupervisor.js +129 -0
- package/dist/lifeline/ServerSupervisor.js.map +1 -1
- package/dist/messaging/SessionSummarySentinel.js +1 -1
- package/dist/messaging/TelegramAdapter.d.ts +1 -0
- package/dist/messaging/TelegramAdapter.d.ts.map +1 -1
- package/dist/messaging/TelegramAdapter.js +4 -1
- package/dist/messaging/TelegramAdapter.js.map +1 -1
- package/dist/messaging/slack/ChannelManager.d.ts +36 -0
- package/dist/messaging/slack/ChannelManager.d.ts.map +1 -0
- package/dist/messaging/slack/ChannelManager.js +100 -0
- package/dist/messaging/slack/ChannelManager.js.map +1 -0
- package/dist/messaging/slack/FileHandler.d.ts +30 -0
- package/dist/messaging/slack/FileHandler.d.ts.map +1 -0
- package/dist/messaging/slack/FileHandler.js +87 -0
- package/dist/messaging/slack/FileHandler.js.map +1 -0
- package/dist/messaging/slack/RingBuffer.d.ts +22 -0
- package/dist/messaging/slack/RingBuffer.d.ts.map +1 -0
- package/dist/messaging/slack/RingBuffer.js +48 -0
- package/dist/messaging/slack/RingBuffer.js.map +1 -0
- package/dist/messaging/slack/SlackAdapter.d.ts +136 -0
- package/dist/messaging/slack/SlackAdapter.d.ts.map +1 -0
- package/dist/messaging/slack/SlackAdapter.js +572 -0
- package/dist/messaging/slack/SlackAdapter.js.map +1 -0
- package/dist/messaging/slack/SlackApiClient.d.ts +51 -0
- package/dist/messaging/slack/SlackApiClient.d.ts.map +1 -0
- package/dist/messaging/slack/SlackApiClient.js +94 -0
- package/dist/messaging/slack/SlackApiClient.js.map +1 -0
- package/dist/messaging/slack/SocketModeClient.d.ts +44 -0
- package/dist/messaging/slack/SocketModeClient.d.ts.map +1 -0
- package/dist/messaging/slack/SocketModeClient.js +209 -0
- package/dist/messaging/slack/SocketModeClient.js.map +1 -0
- package/dist/messaging/slack/index.d.ts +12 -0
- package/dist/messaging/slack/index.d.ts.map +1 -0
- package/dist/messaging/slack/index.js +15 -0
- package/dist/messaging/slack/index.js.map +1 -0
- package/dist/messaging/slack/sanitize.d.ts +39 -0
- package/dist/messaging/slack/sanitize.d.ts.map +1 -0
- package/dist/messaging/slack/sanitize.js +71 -0
- package/dist/messaging/slack/sanitize.js.map +1 -0
- package/dist/messaging/slack/types.d.ts +155 -0
- package/dist/messaging/slack/types.d.ts.map +1 -0
- package/dist/messaging/slack/types.js +54 -0
- package/dist/messaging/slack/types.js.map +1 -0
- package/dist/monitoring/PresenceProxy.d.ts +157 -0
- package/dist/monitoring/PresenceProxy.d.ts.map +1 -0
- package/dist/monitoring/PresenceProxy.js +891 -0
- package/dist/monitoring/PresenceProxy.js.map +1 -0
- package/dist/monitoring/SessionWatchdog.d.ts.map +1 -1
- package/dist/monitoring/SessionWatchdog.js +2 -0
- package/dist/monitoring/SessionWatchdog.js.map +1 -1
- package/dist/server/AgentServer.d.ts +1 -0
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +49 -47
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts +1 -0
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +213 -4
- package/dist/server/routes.js.map +1 -1
- package/package.json +1 -1
- package/src/data/builtin-manifest.json +94 -78
- package/src/templates/hooks/slack-channel-context.sh +98 -0
- package/src/templates/scripts/slack-reply.sh +64 -0
- package/upgrades/0.24.11.md +23 -0
- package/upgrades/0.24.14.md +26 -0
- package/upgrades/0.24.6.md +20 -0
- package/upgrades/0.24.7.md +24 -0
- package/upgrades/0.24.8.md +19 -0
- package/upgrades/0.24.9.md +19 -0
- package/upgrades/NEXT.md +35 -0
- /package/.claude/skills/secret-setup/{skill.md → SKILL.md} +0 -0
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack adapter types — configuration, messages, events, and rate limit tiers.
|
|
3
|
+
*/
|
|
4
|
+
export interface SlackConfig {
|
|
5
|
+
/** Bot token (xoxb-...) from OAuth installation */
|
|
6
|
+
botToken: string;
|
|
7
|
+
/** App-level token (xapp-...) for Socket Mode connection */
|
|
8
|
+
appToken: string;
|
|
9
|
+
/** Workspace ID (T...) */
|
|
10
|
+
workspaceId?: string;
|
|
11
|
+
/** Workspace name for display */
|
|
12
|
+
workspaceName?: string;
|
|
13
|
+
/**
|
|
14
|
+
* Authorized Slack user IDs (U...).
|
|
15
|
+
* REQUIRED — fail-closed. Empty array = reject all messages.
|
|
16
|
+
*/
|
|
17
|
+
authorizedUserIds: string[];
|
|
18
|
+
/** Audio file transcription provider */
|
|
19
|
+
audioTranscriptionProvider?: 'groq' | 'openai';
|
|
20
|
+
/** Stall detection timeout in minutes (default: 5) */
|
|
21
|
+
stallTimeoutMinutes?: number;
|
|
22
|
+
/** Promise follow-through timeout in minutes (default: 10) */
|
|
23
|
+
promiseTimeoutMinutes?: number;
|
|
24
|
+
/** System channel IDs */
|
|
25
|
+
lifelineChannelId?: string;
|
|
26
|
+
dashboardChannelId?: string;
|
|
27
|
+
/**
|
|
28
|
+
* Message log retention in days (default: 90).
|
|
29
|
+
* Set to 0 for unlimited (not recommended for GDPR compliance).
|
|
30
|
+
*/
|
|
31
|
+
logRetentionDays?: number;
|
|
32
|
+
/** Prompt Gate config */
|
|
33
|
+
promptGate?: {
|
|
34
|
+
ownerId?: string;
|
|
35
|
+
relayTimeoutSeconds?: number;
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
export interface SlackMessage {
|
|
39
|
+
ts: string;
|
|
40
|
+
user: string;
|
|
41
|
+
text: string;
|
|
42
|
+
channel: string;
|
|
43
|
+
thread_ts?: string;
|
|
44
|
+
files?: SlackFileInfo[];
|
|
45
|
+
reactions?: Array<{
|
|
46
|
+
name: string;
|
|
47
|
+
users: string[];
|
|
48
|
+
}>;
|
|
49
|
+
subtype?: string;
|
|
50
|
+
}
|
|
51
|
+
export interface SlackUser {
|
|
52
|
+
id: string;
|
|
53
|
+
name: string;
|
|
54
|
+
real_name?: string;
|
|
55
|
+
profile?: {
|
|
56
|
+
display_name?: string;
|
|
57
|
+
email?: string;
|
|
58
|
+
image_48?: string;
|
|
59
|
+
};
|
|
60
|
+
tz?: string;
|
|
61
|
+
is_bot?: boolean;
|
|
62
|
+
}
|
|
63
|
+
export interface SlackChannel {
|
|
64
|
+
id: string;
|
|
65
|
+
name: string;
|
|
66
|
+
is_archived: boolean;
|
|
67
|
+
is_private: boolean;
|
|
68
|
+
is_im?: boolean;
|
|
69
|
+
num_members?: number;
|
|
70
|
+
topic?: {
|
|
71
|
+
value: string;
|
|
72
|
+
};
|
|
73
|
+
purpose?: {
|
|
74
|
+
value: string;
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
export interface SlackFileInfo {
|
|
78
|
+
id: string;
|
|
79
|
+
name: string;
|
|
80
|
+
mimetype: string;
|
|
81
|
+
url_private: string;
|
|
82
|
+
size: number;
|
|
83
|
+
filetype?: string;
|
|
84
|
+
}
|
|
85
|
+
export interface SocketModeEnvelope {
|
|
86
|
+
envelope_id: string;
|
|
87
|
+
type: 'events_api' | 'interactive' | 'slash_commands' | 'disconnect';
|
|
88
|
+
payload: Record<string, unknown>;
|
|
89
|
+
retry_attempt?: number;
|
|
90
|
+
retry_reason?: string;
|
|
91
|
+
accepts_response_payload?: boolean;
|
|
92
|
+
}
|
|
93
|
+
export interface SocketModeDisconnect {
|
|
94
|
+
type: 'disconnect';
|
|
95
|
+
reason: 'too_many_websockets' | 'refresh_requested' | 'link_disabled' | 'warning';
|
|
96
|
+
debug_info?: Record<string, unknown>;
|
|
97
|
+
}
|
|
98
|
+
export interface SocketModeConnectionInfo {
|
|
99
|
+
ok: boolean;
|
|
100
|
+
url: string;
|
|
101
|
+
/** Approximate time in seconds the connection has been open */
|
|
102
|
+
approximate_connection_time?: number;
|
|
103
|
+
}
|
|
104
|
+
export interface InteractionPayload {
|
|
105
|
+
type: 'block_actions' | 'message_action' | 'view_submission';
|
|
106
|
+
user: {
|
|
107
|
+
id: string;
|
|
108
|
+
name: string;
|
|
109
|
+
};
|
|
110
|
+
channel?: {
|
|
111
|
+
id: string;
|
|
112
|
+
name: string;
|
|
113
|
+
};
|
|
114
|
+
message?: {
|
|
115
|
+
ts: string;
|
|
116
|
+
text: string;
|
|
117
|
+
};
|
|
118
|
+
actions?: InteractionAction[];
|
|
119
|
+
trigger_id?: string;
|
|
120
|
+
}
|
|
121
|
+
export interface InteractionAction {
|
|
122
|
+
action_id: string;
|
|
123
|
+
type: string;
|
|
124
|
+
value?: string;
|
|
125
|
+
text?: {
|
|
126
|
+
type: string;
|
|
127
|
+
text: string;
|
|
128
|
+
};
|
|
129
|
+
block_id?: string;
|
|
130
|
+
}
|
|
131
|
+
/** Slack API rate limit tiers (requests per minute). */
|
|
132
|
+
export declare enum RateLimitTier {
|
|
133
|
+
/** ~1 req/min — conversations.create, conversations.archive */
|
|
134
|
+
Tier1 = 1,
|
|
135
|
+
/** ~20 req/min — reactions.add, reactions.remove */
|
|
136
|
+
Tier2 = 20,
|
|
137
|
+
/** ~50 req/min — chat.postMessage, conversations.history */
|
|
138
|
+
Tier3 = 50,
|
|
139
|
+
/** ~100 req/min — users.info, auth.test */
|
|
140
|
+
Tier4 = 100
|
|
141
|
+
}
|
|
142
|
+
/**
|
|
143
|
+
* Rate limit tier assignment per Slack API method.
|
|
144
|
+
* Methods not listed default to Tier3.
|
|
145
|
+
*/
|
|
146
|
+
export declare const SLACK_API_TIERS: Record<string, RateLimitTier>;
|
|
147
|
+
/** Get the rate limit tier for a Slack API method. Defaults to Tier3. */
|
|
148
|
+
export declare function getTier(method: string): RateLimitTier;
|
|
149
|
+
export interface PendingPrompt {
|
|
150
|
+
promptId: string;
|
|
151
|
+
channelId: string;
|
|
152
|
+
messageTs: string;
|
|
153
|
+
createdAt: number;
|
|
154
|
+
}
|
|
155
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/messaging/slack/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Slack adapter types — configuration, messages, events, and rate limit tiers.
|
|
3
|
+
*/
|
|
4
|
+
// ── Rate Limit Tiers ──
|
|
5
|
+
/** Slack API rate limit tiers (requests per minute). */
|
|
6
|
+
export var RateLimitTier;
|
|
7
|
+
(function (RateLimitTier) {
|
|
8
|
+
/** ~1 req/min — conversations.create, conversations.archive */
|
|
9
|
+
RateLimitTier[RateLimitTier["Tier1"] = 1] = "Tier1";
|
|
10
|
+
/** ~20 req/min — reactions.add, reactions.remove */
|
|
11
|
+
RateLimitTier[RateLimitTier["Tier2"] = 20] = "Tier2";
|
|
12
|
+
/** ~50 req/min — chat.postMessage, conversations.history */
|
|
13
|
+
RateLimitTier[RateLimitTier["Tier3"] = 50] = "Tier3";
|
|
14
|
+
/** ~100 req/min — users.info, auth.test */
|
|
15
|
+
RateLimitTier[RateLimitTier["Tier4"] = 100] = "Tier4";
|
|
16
|
+
})(RateLimitTier || (RateLimitTier = {}));
|
|
17
|
+
/**
|
|
18
|
+
* Rate limit tier assignment per Slack API method.
|
|
19
|
+
* Methods not listed default to Tier3.
|
|
20
|
+
*/
|
|
21
|
+
export const SLACK_API_TIERS = {
|
|
22
|
+
// Tier 1 — very restricted
|
|
23
|
+
'conversations.create': RateLimitTier.Tier1,
|
|
24
|
+
'conversations.archive': RateLimitTier.Tier1,
|
|
25
|
+
'conversations.unarchive': RateLimitTier.Tier1,
|
|
26
|
+
'conversations.rename': RateLimitTier.Tier1,
|
|
27
|
+
'conversations.setTopic': RateLimitTier.Tier1,
|
|
28
|
+
'conversations.setPurpose': RateLimitTier.Tier1,
|
|
29
|
+
// Tier 2 — moderate
|
|
30
|
+
'reactions.add': RateLimitTier.Tier2,
|
|
31
|
+
'reactions.remove': RateLimitTier.Tier2,
|
|
32
|
+
'pins.add': RateLimitTier.Tier2,
|
|
33
|
+
'pins.remove': RateLimitTier.Tier2,
|
|
34
|
+
'chat.update': RateLimitTier.Tier2,
|
|
35
|
+
// Tier 3 — standard (also the default)
|
|
36
|
+
'chat.postMessage': RateLimitTier.Tier3,
|
|
37
|
+
'chat.postEphemeral': RateLimitTier.Tier3,
|
|
38
|
+
'conversations.history': RateLimitTier.Tier3,
|
|
39
|
+
'conversations.list': RateLimitTier.Tier3,
|
|
40
|
+
'conversations.info': RateLimitTier.Tier3,
|
|
41
|
+
'conversations.members': RateLimitTier.Tier3,
|
|
42
|
+
'files.getUploadURLExternal': RateLimitTier.Tier3,
|
|
43
|
+
'files.completeUploadExternal': RateLimitTier.Tier3,
|
|
44
|
+
// Tier 4 — generous
|
|
45
|
+
'auth.test': RateLimitTier.Tier4,
|
|
46
|
+
'users.info': RateLimitTier.Tier4,
|
|
47
|
+
'users.list': RateLimitTier.Tier4,
|
|
48
|
+
'apps.connections.open': RateLimitTier.Tier4,
|
|
49
|
+
};
|
|
50
|
+
/** Get the rate limit tier for a Slack API method. Defaults to Tier3. */
|
|
51
|
+
export function getTier(method) {
|
|
52
|
+
return SLACK_API_TIERS[method] ?? RateLimitTier.Tier3;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/messaging/slack/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAgIH,yBAAyB;AAEzB,wDAAwD;AACxD,MAAM,CAAN,IAAY,aASX;AATD,WAAY,aAAa;IACvB,+DAA+D;IAC/D,mDAAS,CAAA;IACT,oDAAoD;IACpD,oDAAU,CAAA;IACV,4DAA4D;IAC5D,oDAAU,CAAA;IACV,2CAA2C;IAC3C,qDAAW,CAAA;AACb,CAAC,EATW,aAAa,KAAb,aAAa,QASxB;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,eAAe,GAAkC;IAC5D,2BAA2B;IAC3B,sBAAsB,EAAE,aAAa,CAAC,KAAK;IAC3C,uBAAuB,EAAE,aAAa,CAAC,KAAK;IAC5C,yBAAyB,EAAE,aAAa,CAAC,KAAK;IAC9C,sBAAsB,EAAE,aAAa,CAAC,KAAK;IAC3C,wBAAwB,EAAE,aAAa,CAAC,KAAK;IAC7C,0BAA0B,EAAE,aAAa,CAAC,KAAK;IAE/C,oBAAoB;IACpB,eAAe,EAAE,aAAa,CAAC,KAAK;IACpC,kBAAkB,EAAE,aAAa,CAAC,KAAK;IACvC,UAAU,EAAE,aAAa,CAAC,KAAK;IAC/B,aAAa,EAAE,aAAa,CAAC,KAAK;IAClC,aAAa,EAAE,aAAa,CAAC,KAAK;IAElC,uCAAuC;IACvC,kBAAkB,EAAE,aAAa,CAAC,KAAK;IACvC,oBAAoB,EAAE,aAAa,CAAC,KAAK;IACzC,uBAAuB,EAAE,aAAa,CAAC,KAAK;IAC5C,oBAAoB,EAAE,aAAa,CAAC,KAAK;IACzC,oBAAoB,EAAE,aAAa,CAAC,KAAK;IACzC,uBAAuB,EAAE,aAAa,CAAC,KAAK;IAC5C,4BAA4B,EAAE,aAAa,CAAC,KAAK;IACjD,8BAA8B,EAAE,aAAa,CAAC,KAAK;IAEnD,oBAAoB;IACpB,WAAW,EAAE,aAAa,CAAC,KAAK;IAChC,YAAY,EAAE,aAAa,CAAC,KAAK;IACjC,YAAY,EAAE,aAAa,CAAC,KAAK;IACjC,uBAAuB,EAAE,aAAa,CAAC,KAAK;CAC7C,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,OAAO,CAAC,MAAc;IACpC,OAAO,eAAe,CAAC,MAAM,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC;AACxD,CAAC"}
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PresenceProxy — Intelligent Response Standby
|
|
3
|
+
*
|
|
4
|
+
* Monitors the gap between user messages and agent responses on Telegram,
|
|
5
|
+
* providing tiered, LLM-generated status updates on the agent's behalf.
|
|
6
|
+
*
|
|
7
|
+
* Tier 1 (20s): Haiku summarizes what the agent is doing
|
|
8
|
+
* Tier 2 (2min): Haiku compares progress since Tier 1
|
|
9
|
+
* Tier 3 (5min): Sonnet assesses if the agent is genuinely stuck
|
|
10
|
+
*
|
|
11
|
+
* All messages prefixed with 🔭 [Standby] to distinguish from agent responses.
|
|
12
|
+
* Proxy messages do NOT count as agent responses for StallDetector.
|
|
13
|
+
*/
|
|
14
|
+
import type { IntelligenceProvider } from '../core/types.js';
|
|
15
|
+
import type { MessageLoggedEvent } from '../messaging/shared/MessagingEventBus.js';
|
|
16
|
+
export interface PresenceProxyConfig {
|
|
17
|
+
stateDir: string;
|
|
18
|
+
intelligence: IntelligenceProvider;
|
|
19
|
+
agentName: string;
|
|
20
|
+
captureSessionOutput: (sessionName: string, lines?: number) => string | null;
|
|
21
|
+
getSessionForTopic: (topicId: number) => string | null;
|
|
22
|
+
isSessionAlive: (sessionName: string) => boolean;
|
|
23
|
+
sendMessage: (topicId: number, text: string, metadata?: ProxyMetadata) => Promise<void>;
|
|
24
|
+
getAuthorizedUserIds: () => number[];
|
|
25
|
+
getProcessTree: (sessionName: string) => ProcessInfo[];
|
|
26
|
+
/** Check if agent sent any message to this topic after the given timestamp. Prevents race conditions. */
|
|
27
|
+
hasAgentRespondedSince?: (topicId: number, sinceMs: number) => boolean;
|
|
28
|
+
acquireTriageMutex?: (sessionName: string, holder: string) => boolean;
|
|
29
|
+
releaseTriageMutex?: (sessionName: string, holder: string) => void;
|
|
30
|
+
isTriageMutexHeld?: (sessionName: string) => string | null;
|
|
31
|
+
triggerManualTriage?: (topicId: number, sessionName: string) => Promise<void>;
|
|
32
|
+
tier1DelayMs?: number;
|
|
33
|
+
tier2DelayMs?: number;
|
|
34
|
+
tier3DelayMs?: number;
|
|
35
|
+
tier3RecheckDelayMs?: number;
|
|
36
|
+
silenceDurationMs?: number;
|
|
37
|
+
tier1Model?: 'fast' | 'balanced' | 'capable';
|
|
38
|
+
tier2Model?: 'fast' | 'balanced' | 'capable';
|
|
39
|
+
tier3Model?: 'fast' | 'balanced' | 'capable';
|
|
40
|
+
maxTmuxLines?: {
|
|
41
|
+
t1: number;
|
|
42
|
+
t2: number;
|
|
43
|
+
t3: number;
|
|
44
|
+
};
|
|
45
|
+
llmTimeoutMs?: {
|
|
46
|
+
t1: number;
|
|
47
|
+
t2: number;
|
|
48
|
+
t3: number;
|
|
49
|
+
};
|
|
50
|
+
llmRateLimit?: {
|
|
51
|
+
perTopicPerHour: number;
|
|
52
|
+
tier3MaxRechecks: number;
|
|
53
|
+
autoSilenceMinutes: number;
|
|
54
|
+
};
|
|
55
|
+
concurrentLlmCalls?: number;
|
|
56
|
+
allowExternalLlm?: boolean;
|
|
57
|
+
credentialPatterns?: string[];
|
|
58
|
+
prefix?: string;
|
|
59
|
+
conversationHistoryMax?: number;
|
|
60
|
+
__dev_timerMultiplier?: number;
|
|
61
|
+
}
|
|
62
|
+
export interface ProxyMetadata {
|
|
63
|
+
source: 'presence-proxy';
|
|
64
|
+
tier: number;
|
|
65
|
+
isProxy: true;
|
|
66
|
+
}
|
|
67
|
+
export interface ProcessInfo {
|
|
68
|
+
pid: number;
|
|
69
|
+
command: string;
|
|
70
|
+
elapsed?: string;
|
|
71
|
+
}
|
|
72
|
+
interface PresenceState {
|
|
73
|
+
topicId: number;
|
|
74
|
+
sessionName: string;
|
|
75
|
+
userMessageAt: number;
|
|
76
|
+
userMessageText: string;
|
|
77
|
+
tier1FiredAt: number | null;
|
|
78
|
+
tier1Snapshot: string | null;
|
|
79
|
+
tier1SnapshotHash: string | null;
|
|
80
|
+
tier2FiredAt: number | null;
|
|
81
|
+
tier2Snapshot: string | null;
|
|
82
|
+
tier2SnapshotHash: string | null;
|
|
83
|
+
tier3FiredAt: number | null;
|
|
84
|
+
tier3Assessment: 'working' | 'waiting' | 'stalled' | 'dead' | null;
|
|
85
|
+
tier3Summary: string | null;
|
|
86
|
+
tier3RecheckCount: number;
|
|
87
|
+
silencedUntil: number | null;
|
|
88
|
+
cancelled: boolean;
|
|
89
|
+
llmCallCount: number;
|
|
90
|
+
lastLlmCallAt: number;
|
|
91
|
+
conversationHistory: Array<{
|
|
92
|
+
role: 'user' | 'proxy';
|
|
93
|
+
text: string;
|
|
94
|
+
timestamp: number;
|
|
95
|
+
}>;
|
|
96
|
+
}
|
|
97
|
+
export declare function sanitizeTmuxOutput(raw: string, extraPatterns?: string[]): string;
|
|
98
|
+
export declare function guardProxyOutput(text: string): {
|
|
99
|
+
safe: boolean;
|
|
100
|
+
reason?: string;
|
|
101
|
+
};
|
|
102
|
+
export declare class PresenceProxy {
|
|
103
|
+
private config;
|
|
104
|
+
private states;
|
|
105
|
+
private timers;
|
|
106
|
+
private llmQueue;
|
|
107
|
+
private stateDir;
|
|
108
|
+
private started;
|
|
109
|
+
private tier1DelayMs;
|
|
110
|
+
private tier2DelayMs;
|
|
111
|
+
private tier3DelayMs;
|
|
112
|
+
private tier3RecheckDelayMs;
|
|
113
|
+
private silenceDurationMs;
|
|
114
|
+
private prefix;
|
|
115
|
+
private maxConversationHistory;
|
|
116
|
+
private rateLimit;
|
|
117
|
+
constructor(config: PresenceProxyConfig);
|
|
118
|
+
start(): void;
|
|
119
|
+
stop(): void;
|
|
120
|
+
/**
|
|
121
|
+
* Called when a message is logged. Starts/resets timers for user messages,
|
|
122
|
+
* cancels proxy for agent messages.
|
|
123
|
+
*/
|
|
124
|
+
onMessageLogged(event: MessageLoggedEvent): void;
|
|
125
|
+
/**
|
|
126
|
+
* Handle user commands: unstick, restart, quiet, resume
|
|
127
|
+
*/
|
|
128
|
+
handleCommand(topicId: number, command: string, userId: number): Promise<boolean>;
|
|
129
|
+
private handleUserMessage;
|
|
130
|
+
private handleAgentMessage;
|
|
131
|
+
private scheduleTier;
|
|
132
|
+
private fireTier;
|
|
133
|
+
private fireTier1;
|
|
134
|
+
private fireTier2;
|
|
135
|
+
private fireTier3;
|
|
136
|
+
private handleQuiet;
|
|
137
|
+
private handleResume;
|
|
138
|
+
private handleUnstick;
|
|
139
|
+
private handleRestart;
|
|
140
|
+
private buildTier1Prompt;
|
|
141
|
+
private buildConversationPrompt;
|
|
142
|
+
private buildTier2Prompt;
|
|
143
|
+
private buildTier3Prompt;
|
|
144
|
+
private callLlm;
|
|
145
|
+
private sendProxyMessage;
|
|
146
|
+
/** System/delivery messages that should NOT be treated as real agent responses */
|
|
147
|
+
private isSystemMessage;
|
|
148
|
+
private checkRateLimit;
|
|
149
|
+
private clearTimersForTopic;
|
|
150
|
+
private cleanupState;
|
|
151
|
+
private persistState;
|
|
152
|
+
private recoverFromRestart;
|
|
153
|
+
getState(topicId: number): PresenceState | undefined;
|
|
154
|
+
getActiveTopics(): number[];
|
|
155
|
+
}
|
|
156
|
+
export {};
|
|
157
|
+
//# sourceMappingURL=PresenceProxy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"PresenceProxy.d.ts","sourceRoot":"","sources":["../../src/monitoring/PresenceProxy.ts"],"names":[],"mappings":"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"}
|