@pellux/goodvibes-sdk 0.25.2 → 0.25.4
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/_internal/platform/adapters/ntfy/index.d.ts.map +1 -1
- package/dist/_internal/platform/adapters/ntfy/index.js +105 -0
- package/dist/_internal/platform/adapters/types.d.ts +21 -0
- package/dist/_internal/platform/adapters/types.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/account-actions.js +18 -3
- package/dist/_internal/platform/channels/builtin/accounts.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/accounts.js +3 -0
- package/dist/_internal/platform/channels/builtin/plugins.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/plugins.js +3 -0
- package/dist/_internal/platform/channels/builtin/setup-schema.d.ts.map +1 -1
- package/dist/_internal/platform/channels/builtin/setup-schema.js +7 -3
- package/dist/_internal/platform/channels/delivery/strategies-core.d.ts.map +1 -1
- package/dist/_internal/platform/channels/delivery/strategies-core.js +1 -0
- package/dist/_internal/platform/channels/provider-runtime.d.ts +1 -1
- package/dist/_internal/platform/channels/provider-runtime.d.ts.map +1 -1
- package/dist/_internal/platform/channels/provider-runtime.js +14 -9
- package/dist/_internal/platform/channels/reply-pipeline.d.ts +1 -0
- package/dist/_internal/platform/channels/reply-pipeline.d.ts.map +1 -1
- package/dist/_internal/platform/channels/reply-pipeline.js +32 -1
- package/dist/_internal/platform/channels/surface-registry.d.ts.map +1 -1
- package/dist/_internal/platform/channels/surface-registry.js +3 -0
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts +12 -0
- package/dist/_internal/platform/companion/companion-chat-manager.d.ts.map +1 -1
- package/dist/_internal/platform/companion/companion-chat-manager.js +41 -0
- package/dist/_internal/platform/config/schema-domain-surfaces.d.ts +3 -0
- package/dist/_internal/platform/config/schema-domain-surfaces.d.ts.map +1 -1
- package/dist/_internal/platform/config/schema-domain-surfaces.js +22 -1
- package/dist/_internal/platform/config/schema-types.d.ts +5 -2
- package/dist/_internal/platform/config/schema-types.d.ts.map +1 -1
- package/dist/_internal/platform/control-plane/conversation-message.d.ts +1 -1
- package/dist/_internal/platform/control-plane/conversation-message.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade-composition.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/facade-composition.js +3 -0
- package/dist/_internal/platform/daemon/surface-actions.d.ts +21 -1
- package/dist/_internal/platform/daemon/surface-actions.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/surface-actions.js +184 -0
- package/dist/_internal/platform/daemon/surface-delivery.d.ts.map +1 -1
- package/dist/_internal/platform/daemon/surface-delivery.js +2 -0
- package/dist/_internal/platform/integrations/index.d.ts +2 -2
- package/dist/_internal/platform/integrations/index.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/index.js +1 -1
- package/dist/_internal/platform/integrations/ntfy.d.ts +23 -0
- package/dist/_internal/platform/integrations/ntfy.d.ts.map +1 -1
- package/dist/_internal/platform/integrations/ntfy.js +281 -30
- package/dist/_internal/platform/providers/registry.d.ts +1 -0
- package/dist/_internal/platform/providers/registry.d.ts.map +1 -1
- package/dist/_internal/platform/providers/registry.js +15 -5
- package/dist/_internal/platform/runtime/emitters/agents.d.ts +3 -0
- package/dist/_internal/platform/runtime/emitters/agents.d.ts.map +1 -1
- package/dist/_internal/platform/runtime/events/agents.d.ts +3 -0
- package/dist/_internal/platform/runtime/events/agents.d.ts.map +1 -1
- package/dist/_internal/platform/tools/agent/manager.d.ts.map +1 -1
- package/dist/_internal/platform/tools/agent/manager.js +3 -0
- package/dist/_internal/platform/version.js +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/adapters/ntfy/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/adapters/ntfy/index.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAMzD,wBAAsB,wBAAwB,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,QAAQ,CAAC,CA4B9G;AAED,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,qBAAqB,EAC9B,GAAG,CAAC,EAAE,GAAG,GACR,OAAO,CAAC,QAAQ,CAAC,CA0BnB"}
|
|
@@ -1,4 +1,6 @@
|
|
|
1
|
+
import { randomUUID } from 'node:crypto';
|
|
1
2
|
import { parseJsonRecord, readBearerOrHeaderToken, readTextBodyWithinLimit } from '../helpers.js';
|
|
3
|
+
import { isGoodVibesNtfyDeliveryEcho, resolveGoodVibesNtfyTopics, } from '../../integrations/ntfy.js';
|
|
2
4
|
export async function handleNtfySurfaceWebhook(req, context) {
|
|
3
5
|
const enabled = Boolean(context.configManager.get('surfaces.ntfy.enabled'));
|
|
4
6
|
const configuredToken = String(context.configManager.get('surfaces.ntfy.token') ?? '')
|
|
@@ -30,6 +32,9 @@ export async function handleNtfySurfaceWebhook(req, context) {
|
|
|
30
32
|
return handleNtfySurfacePayload(body, context, new URL(req.url));
|
|
31
33
|
}
|
|
32
34
|
export async function handleNtfySurfacePayload(body, context, url) {
|
|
35
|
+
if (isGoodVibesNtfyDeliveryEcho(body)) {
|
|
36
|
+
return Response.json({ acknowledged: true, queued: false, ignored: 'goodvibes-self-echo' });
|
|
37
|
+
}
|
|
33
38
|
const topic = typeof body.topic === 'string'
|
|
34
39
|
? body.topic
|
|
35
40
|
: url?.searchParams.get('topic') ?? '';
|
|
@@ -41,6 +46,30 @@ export async function handleNtfySurfacePayload(body, context, url) {
|
|
|
41
46
|
if (!topic) {
|
|
42
47
|
return Response.json({ error: 'Missing ntfy topic' }, { status: 400 });
|
|
43
48
|
}
|
|
49
|
+
const topics = resolveConfiguredNtfyTopics(context);
|
|
50
|
+
if (topic === topics.chatTopic) {
|
|
51
|
+
return handleNtfyChatPayload(body, context, topic, message);
|
|
52
|
+
}
|
|
53
|
+
if (topic === topics.remoteTopic) {
|
|
54
|
+
return handleNtfyRemoteChatPayload(body, context, topic, message);
|
|
55
|
+
}
|
|
56
|
+
if (topic !== topics.agentTopic) {
|
|
57
|
+
return Response.json({ acknowledged: true, queued: false, ignored: 'unknown-ntfy-topic', topic });
|
|
58
|
+
}
|
|
59
|
+
return handleNtfyAgentPayload(body, context, topic, message);
|
|
60
|
+
}
|
|
61
|
+
function resolveConfiguredNtfyTopics(context) {
|
|
62
|
+
return resolveGoodVibesNtfyTopics({
|
|
63
|
+
chatTopic: readConfigString(context, 'surfaces.ntfy.chatTopic'),
|
|
64
|
+
agentTopic: readConfigString(context, 'surfaces.ntfy.agentTopic'),
|
|
65
|
+
remoteTopic: readConfigString(context, 'surfaces.ntfy.remoteTopic'),
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
function readConfigString(context, key) {
|
|
69
|
+
const value = context.configManager.get(key);
|
|
70
|
+
return typeof value === 'string' ? value : '';
|
|
71
|
+
}
|
|
72
|
+
async function authorizeNtfyPayload(body, context, topic, message) {
|
|
44
73
|
const policy = await context.authorizeSurfaceIngress({
|
|
45
74
|
surface: 'ntfy',
|
|
46
75
|
channelId: topic,
|
|
@@ -53,6 +82,81 @@ export async function handleNtfySurfacePayload(body, context, url) {
|
|
|
53
82
|
if (!policy.allowed) {
|
|
54
83
|
return Response.json({ error: `Blocked by channel policy: ${policy.reason}` }, { status: 403 });
|
|
55
84
|
}
|
|
85
|
+
return null;
|
|
86
|
+
}
|
|
87
|
+
async function handleNtfyChatPayload(body, context, topic, message) {
|
|
88
|
+
const denied = await authorizeNtfyPayload(body, context, topic, message);
|
|
89
|
+
if (denied)
|
|
90
|
+
return denied;
|
|
91
|
+
if (!message) {
|
|
92
|
+
return Response.json({ acknowledged: true, queued: false, topic });
|
|
93
|
+
}
|
|
94
|
+
if (!context.publishConversationFollowup) {
|
|
95
|
+
return Response.json({ error: 'ntfy chat routing is unavailable in this runtime' }, { status: 503 });
|
|
96
|
+
}
|
|
97
|
+
const session = await context.sessionBroker.findPreferredSession({ surfaceKind: 'tui' });
|
|
98
|
+
if (!session) {
|
|
99
|
+
return Response.json({ error: 'No active terminal TUI session is available for ntfy chat' }, { status: 409 });
|
|
100
|
+
}
|
|
101
|
+
const messageId = randomUUID();
|
|
102
|
+
const timestamp = Date.now();
|
|
103
|
+
await context.sessionBroker.appendCompanionMessage(session.id, {
|
|
104
|
+
messageId,
|
|
105
|
+
body: message,
|
|
106
|
+
source: 'ntfy-chat',
|
|
107
|
+
timestamp,
|
|
108
|
+
});
|
|
109
|
+
context.queueNtfyChatReply?.({
|
|
110
|
+
sessionId: session.id,
|
|
111
|
+
topic,
|
|
112
|
+
body: message,
|
|
113
|
+
title: typeof body.title === 'string' ? body.title : 'GoodVibes chat',
|
|
114
|
+
messageId,
|
|
115
|
+
});
|
|
116
|
+
context.publishConversationFollowup(session.id, {
|
|
117
|
+
messageId,
|
|
118
|
+
body: message,
|
|
119
|
+
source: 'ntfy-chat',
|
|
120
|
+
timestamp,
|
|
121
|
+
metadata: { surface: 'ntfy', topic },
|
|
122
|
+
});
|
|
123
|
+
return Response.json({
|
|
124
|
+
acknowledged: true,
|
|
125
|
+
queued: false,
|
|
126
|
+
routedTo: 'tui-chat',
|
|
127
|
+
sessionId: session.id,
|
|
128
|
+
messageId,
|
|
129
|
+
topic,
|
|
130
|
+
}, { status: 202 });
|
|
131
|
+
}
|
|
132
|
+
async function handleNtfyRemoteChatPayload(body, context, topic, message) {
|
|
133
|
+
const denied = await authorizeNtfyPayload(body, context, topic, message);
|
|
134
|
+
if (denied)
|
|
135
|
+
return denied;
|
|
136
|
+
if (!message) {
|
|
137
|
+
return Response.json({ acknowledged: true, queued: false, topic });
|
|
138
|
+
}
|
|
139
|
+
if (!context.postNtfyRemoteChatMessage) {
|
|
140
|
+
return Response.json({ error: 'ntfy remote chat is unavailable in this runtime' }, { status: 503 });
|
|
141
|
+
}
|
|
142
|
+
const result = await context.postNtfyRemoteChatMessage({
|
|
143
|
+
topic,
|
|
144
|
+
body: message,
|
|
145
|
+
title: typeof body.title === 'string' ? body.title : 'GoodVibes ntfy',
|
|
146
|
+
});
|
|
147
|
+
return Response.json({
|
|
148
|
+
acknowledged: true,
|
|
149
|
+
queued: false,
|
|
150
|
+
routedTo: 'ntfy-remote-chat',
|
|
151
|
+
...result,
|
|
152
|
+
topic,
|
|
153
|
+
}, { status: result.error ? 502 : 202 });
|
|
154
|
+
}
|
|
155
|
+
async function handleNtfyAgentPayload(body, context, topic, message) {
|
|
156
|
+
const denied = await authorizeNtfyPayload(body, context, topic, message);
|
|
157
|
+
if (denied)
|
|
158
|
+
return denied;
|
|
159
|
+
const preferredTuiSession = await context.sessionBroker.findPreferredSession({ surfaceKind: 'tui' });
|
|
56
160
|
const binding = await context.routeBindings.upsertBinding({
|
|
57
161
|
kind: 'channel',
|
|
58
162
|
surfaceKind: 'ntfy',
|
|
@@ -66,6 +170,7 @@ export async function handleNtfySurfacePayload(body, context, url) {
|
|
|
66
170
|
return Response.json({ acknowledged: true, queued: false, bindingId: binding.id });
|
|
67
171
|
}
|
|
68
172
|
const submission = await context.sessionBroker.submitMessage({
|
|
173
|
+
...(preferredTuiSession ? { sessionId: preferredTuiSession.id } : {}),
|
|
69
174
|
routeId: binding.id,
|
|
70
175
|
surfaceKind: 'ntfy',
|
|
71
176
|
surfaceId: binding.surfaceId,
|
|
@@ -4,6 +4,7 @@ import type { AutomationRouteBinding } from '../automation/routes.js';
|
|
|
4
4
|
import type { AutomationSurfaceKind } from '../automation/types.js';
|
|
5
5
|
import type { ChannelConversationKind, ChannelPolicyDecision, RouteBindingManager } from '../channels/index.js';
|
|
6
6
|
import type { SharedSessionBroker } from '../control-plane/index.js';
|
|
7
|
+
import type { ConversationMessageEnvelope } from '../control-plane/conversation-message.js';
|
|
7
8
|
import type { ServiceRegistry } from '../config/service-registry.js';
|
|
8
9
|
export interface SurfaceControlCommand {
|
|
9
10
|
readonly action: 'status' | 'cancel' | 'retry';
|
|
@@ -14,6 +15,19 @@ export interface QueueSurfaceReplyInput {
|
|
|
14
15
|
readonly task: string;
|
|
15
16
|
readonly sessionId?: string;
|
|
16
17
|
}
|
|
18
|
+
export interface QueueNtfyChatReplyInput {
|
|
19
|
+
readonly sessionId: string;
|
|
20
|
+
readonly topic: string;
|
|
21
|
+
readonly body: string;
|
|
22
|
+
readonly title?: string;
|
|
23
|
+
readonly messageId: string;
|
|
24
|
+
}
|
|
25
|
+
export interface NtfyRemoteChatResult {
|
|
26
|
+
readonly sessionId: string;
|
|
27
|
+
readonly messageId: string;
|
|
28
|
+
readonly delivered: boolean;
|
|
29
|
+
readonly error?: string;
|
|
30
|
+
}
|
|
17
31
|
export type TrySpawnAgentInput = Parameters<AgentManager['spawn']>[0];
|
|
18
32
|
export type TrySpawnAgentResult = AgentRecord | Response;
|
|
19
33
|
export type TrySpawnAgentFn = (input: TrySpawnAgentInput, logLabel: string, sessionId?: string) => TrySpawnAgentResult;
|
|
@@ -43,6 +57,13 @@ export interface SurfaceAdapterContext {
|
|
|
43
57
|
readonly performInteractiveSurfaceAction: (actionId: string, surface: 'slack' | 'discord', req: Request) => Promise<string>;
|
|
44
58
|
readonly trySpawnAgent: TrySpawnAgentFn;
|
|
45
59
|
readonly queueSurfaceReplyFromBinding: (binding: AutomationRouteBinding | undefined, input: QueueSurfaceReplyInput) => void;
|
|
60
|
+
readonly publishConversationFollowup?: (sessionId: string, envelope: Omit<ConversationMessageEnvelope, 'sessionId'>) => void;
|
|
61
|
+
readonly queueNtfyChatReply?: (input: QueueNtfyChatReplyInput) => void;
|
|
62
|
+
readonly postNtfyRemoteChatMessage?: (input: {
|
|
63
|
+
readonly topic: string;
|
|
64
|
+
readonly body: string;
|
|
65
|
+
readonly title?: string;
|
|
66
|
+
}) => Promise<NtfyRemoteChatResult>;
|
|
46
67
|
}
|
|
47
68
|
export interface GenericWebhookReplyInput {
|
|
48
69
|
readonly agentId: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/adapters/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,yBAAyB,CAAC;AACtE,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,wBAAwB,CAAC;AACpE,OAAO,KAAK,EAAE,uBAAuB,EAAE,qBAAqB,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAChH,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AACrE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAErE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,OAAO,CAAC;IAC/C,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,MAAM,kBAAkB,GAAG,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtE,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,QAAQ,CAAC;AACzD,MAAM,MAAM,eAAe,GAAG,CAC5B,KAAK,EAAE,kBAAkB,EACzB,QAAQ,EAAE,MAAM,EAChB,SAAS,CAAC,EAAE,MAAM,KACf,mBAAmB,CAAC;AAEzB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,aAAa,EAAE;QACtB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;KAC3B,CAAC;IACF,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,uBAAuB,EAAE,CAAC,KAAK,EAAE;QACxC,OAAO,EAAE,OAAO,CAAC,qBAAqB,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,GAAG,UAAU,GAAG,aAAa,GAAG,QAAQ,GAAG,UAAU,GAAG,UAAU,GAAG,SAAS,GAAG,aAAa,GAAG,YAAY,GAAG,QAAQ,CAAC,CAAC;QAC9L,MAAM,CAAC,EAAE,MAAM,CAAC;QAChB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,gBAAgB,CAAC,EAAE,uBAAuB,CAAC;QAC3C,aAAa,CAAC,EAAE,OAAO,CAAC;QACxB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,SAAS,CAAC,EAAE,OAAO,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KACpC,KAAK,OAAO,CAAC,qBAAqB,CAAC,CAAC;IACrC,QAAQ,CAAC,0BAA0B,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,qBAAqB,GAAG,IAAI,CAAC;IACpF,QAAQ,CAAC,4BAA4B,EAAE,CAAC,OAAO,EAAE,qBAAqB,KAAK,OAAO,CAAC,MAAM,CAAC,CAAC;IAC3F,QAAQ,CAAC,+BAA+B,EAAE,CACxC,QAAQ,EAAE,MAAM,EAChB,OAAO,EAAE,OAAO,GAAG,SAAS,EAC5B,GAAG,EAAE,OAAO,KACT,OAAO,CAAC,MAAM,CAAC,CAAC;IACrB,QAAQ,CAAC,aAAa,EAAE,eAAe,CAAC;IACxC,QAAQ,CAAC,4BAA4B,EAAE,CACrC,OAAO,EAAE,sBAAsB,GAAG,SAAS,EAC3C,KAAK,EAAE,sBAAsB,KAC1B,IAAI,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/adapters/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -368,25 +368,40 @@ async function runProviderSetupAction(context, surface, action, base, account, i
|
|
|
368
368
|
}
|
|
369
369
|
if (surface === 'ntfy') {
|
|
370
370
|
const topic = readString(input?.topic);
|
|
371
|
+
const chatTopic = readString(input?.chatTopic);
|
|
372
|
+
const agentTopic = readString(input?.agentTopic);
|
|
373
|
+
const remoteTopic = readString(input?.remoteTopic);
|
|
371
374
|
const token = readString(input?.token);
|
|
372
375
|
const baseUrl = readString(input?.baseUrl);
|
|
373
376
|
if (topic)
|
|
374
377
|
context.deps.configManager.set('surfaces.ntfy.topic', topic);
|
|
378
|
+
if (chatTopic)
|
|
379
|
+
context.deps.configManager.set('surfaces.ntfy.chatTopic', chatTopic);
|
|
380
|
+
if (agentTopic)
|
|
381
|
+
context.deps.configManager.set('surfaces.ntfy.agentTopic', agentTopic);
|
|
382
|
+
if (remoteTopic)
|
|
383
|
+
context.deps.configManager.set('surfaces.ntfy.remoteTopic', remoteTopic);
|
|
375
384
|
if (baseUrl)
|
|
376
385
|
context.deps.configManager.set('surfaces.ntfy.baseUrl', baseUrl);
|
|
377
386
|
if (token)
|
|
378
387
|
await context.deps.secretsManager.set('NTFY_ACCESS_TOKEN', token, { scope: readSecretScope(input?.secretScope) });
|
|
379
388
|
context.deps.configManager.set('surfaces.ntfy.enabled', true);
|
|
380
389
|
const refreshed = await context.buildAccount('ntfy');
|
|
390
|
+
const configured = Boolean(topic || chatTopic || agentTopic || remoteTopic || token || account.configured);
|
|
381
391
|
return {
|
|
382
392
|
...base,
|
|
383
|
-
ok:
|
|
393
|
+
ok: configured,
|
|
384
394
|
account: refreshed,
|
|
385
395
|
state: refreshed.state,
|
|
386
396
|
authState: refreshed.authState,
|
|
387
397
|
login: { kind: 'none' },
|
|
388
|
-
message:
|
|
389
|
-
metadata: {
|
|
398
|
+
message: configured ? 'ntfy configuration stored.' : 'ntfy is config-backed; provide topics and optional token to configure it.',
|
|
399
|
+
metadata: {
|
|
400
|
+
topic: topic ?? context.deps.configManager.get('surfaces.ntfy.topic'),
|
|
401
|
+
chatTopic: chatTopic ?? context.deps.configManager.get('surfaces.ntfy.chatTopic'),
|
|
402
|
+
agentTopic: agentTopic ?? context.deps.configManager.get('surfaces.ntfy.agentTopic'),
|
|
403
|
+
remoteTopic: remoteTopic ?? context.deps.configManager.get('surfaces.ntfy.remoteTopic'),
|
|
404
|
+
},
|
|
390
405
|
};
|
|
391
406
|
}
|
|
392
407
|
return {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/accounts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAEV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC;CAC9E;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,oBAAoB,CAAC,
|
|
1
|
+
{"version":3,"file":"accounts.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/accounts.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AACrE,OAAO,KAAK,EAEV,oBAAoB,EAEpB,cAAc,EACf,MAAM,aAAa,CAAC;AACrB,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,aAAa,CAAC;AAE7D,UAAU,qBAAqB;IAC7B,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,qBAAqB,EAAE,CAAC,OAAO,EAAE,sBAAsB,KAAK,OAAO,CAAC;CAC9E;AAED,wBAAsB,mBAAmB,CACvC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,oBAAoB,CAAC,CA0R/B;AAED,wBAAsB,qBAAqB,CACzC,OAAO,EAAE,qBAAqB,EAC9B,OAAO,EAAE,cAAc,EACvB,SAAS,EAAE,MAAM,GAChB,OAAO,CAAC,oBAAoB,GAAG,IAAI,CAAC,CAKtC"}
|
|
@@ -76,6 +76,9 @@ export async function buildBuiltinAccount(context, surface) {
|
|
|
76
76
|
metadata: {
|
|
77
77
|
baseUrl: context.deps.configManager.get('surfaces.ntfy.baseUrl'),
|
|
78
78
|
topic: context.deps.configManager.get('surfaces.ntfy.topic'),
|
|
79
|
+
chatTopic: context.deps.configManager.get('surfaces.ntfy.chatTopic'),
|
|
80
|
+
agentTopic: context.deps.configManager.get('surfaces.ntfy.agentTopic'),
|
|
81
|
+
remoteTopic: context.deps.configManager.get('surfaces.ntfy.remoteTopic'),
|
|
79
82
|
providerRuntime: context.providerRuntimeStatus('ntfy'),
|
|
80
83
|
},
|
|
81
84
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/plugins.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/plugins.ts"],"names":[],"mappings":"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"}
|
|
@@ -135,6 +135,9 @@ export function registerBuiltinChannelPlugins(context) {
|
|
|
135
135
|
enabled: context.deps.surfaceDeliveryEnabled('ntfy'),
|
|
136
136
|
metadata: {
|
|
137
137
|
topic: context.deps.configManager.get('surfaces.ntfy.topic'),
|
|
138
|
+
chatTopic: context.deps.configManager.get('surfaces.ntfy.chatTopic'),
|
|
139
|
+
agentTopic: context.deps.configManager.get('surfaces.ntfy.agentTopic'),
|
|
140
|
+
remoteTopic: context.deps.configManager.get('surfaces.ntfy.remoteTopic'),
|
|
138
141
|
baseUrl: context.deps.configManager.get('surfaces.ntfy.baseUrl'),
|
|
139
142
|
providerRuntime: context.providerRuntimeStatus('ntfy'),
|
|
140
143
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup-schema.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/setup-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,cAAc,EACf,MAAM,aAAa,CAAC;AAMrB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,
|
|
1
|
+
{"version":3,"file":"setup-schema.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/builtin/setup-schema.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAGV,kBAAkB,EAClB,cAAc,EACf,MAAM,aAAa,CAAC;AAMrB,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,kBAAkB,CA2cjF"}
|
|
@@ -116,11 +116,14 @@ export function getBuiltinSetupSchema(surface) {
|
|
|
116
116
|
version: CHANNEL_SETUP_VERSION,
|
|
117
117
|
label: 'ntfy',
|
|
118
118
|
setupMode: 'webhook',
|
|
119
|
-
description: 'ntfy is a notification surface backed by
|
|
119
|
+
description: 'ntfy is a notification and remote-control surface backed by configurable inbound topics, optional delivery topics, and optional authentication.',
|
|
120
120
|
fields: [
|
|
121
121
|
setupField('enabled', 'Enabled', 'boolean', false, { configKey: 'surfaces.ntfy.enabled', defaultValue: false }),
|
|
122
122
|
setupField('baseUrl', 'Base URL', 'url', false, { configKey: 'surfaces.ntfy.baseUrl', placeholder: 'https://ntfy.sh' }),
|
|
123
|
-
setupField('topic', '
|
|
123
|
+
setupField('topic', 'Default delivery topic', 'string', false, { configKey: 'surfaces.ntfy.topic' }),
|
|
124
|
+
setupField('chatTopic', 'Chat topic', 'string', false, { configKey: 'surfaces.ntfy.chatTopic', defaultValue: 'goodvibes-chat' }),
|
|
125
|
+
setupField('agentTopic', 'Agent topic', 'string', false, { configKey: 'surfaces.ntfy.agentTopic', defaultValue: 'goodvibes-agent' }),
|
|
126
|
+
setupField('remoteTopic', 'Remote topic', 'string', false, { configKey: 'surfaces.ntfy.remoteTopic', defaultValue: 'goodvibes-ntfy' }),
|
|
124
127
|
setupField('token', 'Access token', 'secret', false, { configKey: 'surfaces.ntfy.token', secretTargetId: 'primary' }),
|
|
125
128
|
],
|
|
126
129
|
secretTargets: [
|
|
@@ -132,7 +135,8 @@ export function getBuiltinSetupSchema(surface) {
|
|
|
132
135
|
}),
|
|
133
136
|
],
|
|
134
137
|
externalSteps: [
|
|
135
|
-
'
|
|
138
|
+
'Subscribe the daemon to the configured chat, agent, and remote ntfy topics.',
|
|
139
|
+
'Optionally configure a default delivery topic for outbound notifications.',
|
|
136
140
|
'Optionally configure an authenticated ntfy token.',
|
|
137
141
|
'Use provider actions to inspect subscribe and poll URLs.',
|
|
138
142
|
],
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"strategies-core.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/delivery/strategies-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAc1D,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GAAG,uBAAuB,CAsCjI;AAED,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CA0CzB;AAED,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CA2CzB;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,GAC3B,uBAAuB,
|
|
1
|
+
{"version":3,"file":"strategies-core.d.ts","sourceRoot":"","sources":["../../../../../src/_internal/platform/channels/delivery/strategies-core.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAC;AACnE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gCAAgC,CAAC;AAGrE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAc1D,wBAAgB,6BAA6B,CAAC,aAAa,EAAE,aAAa,EAAE,aAAa,EAAE,aAAa,GAAG,uBAAuB,CAsCjI;AAED,wBAAgB,2BAA2B,CACzC,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CA0CzB;AAED,wBAAgB,6BAA6B,CAC3C,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CA2CzB;AAED,wBAAgB,0BAA0B,CACxC,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CAwBzB;AAED,wBAAgB,qCAAqC,CACnD,aAAa,EAAE,aAAa,EAC5B,aAAa,EAAE,aAAa,EAC5B,UAAU,EAAE,MAAM,mBAAmB,GAAG,IAAI,GAC3C,uBAAuB,CA6BzB;AAED,wBAAgB,8BAA8B,CAC5C,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CAqCzB;AAED,wBAAgB,gCAAgC,CAC9C,aAAa,EAAE,aAAa,EAC5B,eAAe,EAAE,eAAe,EAChC,aAAa,EAAE,aAAa,GAC3B,uBAAuB,CA+BzB"}
|
|
@@ -145,6 +145,7 @@ export function createNtfyDeliveryStrategy(configManager, serviceRegistry, artif
|
|
|
145
145
|
title: request.target.label ?? titleFromBody(request.body),
|
|
146
146
|
...(request.includeLinks && baseUrlHint ? { click: `${baseUrlHint.replace(/\/+$/, '')}/api/control-plane/web` } : {}),
|
|
147
147
|
...(primaryAttachment?.contentUrl ? { attach: primaryAttachment.contentUrl } : {}),
|
|
148
|
+
markGoodVibesOrigin: true,
|
|
148
149
|
});
|
|
149
150
|
return success(topic);
|
|
150
151
|
},
|
|
@@ -45,7 +45,7 @@ export declare class ChannelProviderRuntimeManager {
|
|
|
45
45
|
private resolveSlackAppToken;
|
|
46
46
|
private resolveDiscordBotToken;
|
|
47
47
|
private resolveNtfyToken;
|
|
48
|
-
private
|
|
48
|
+
private resolveNtfyTopics;
|
|
49
49
|
private isConfigured;
|
|
50
50
|
private markStarted;
|
|
51
51
|
private markStopped;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"provider-runtime.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/provider-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;
|
|
1
|
+
{"version":3,"file":"provider-runtime.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/provider-runtime.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAYrE,OAAO,EACL,KAAK,qBAAqB,EAI3B,MAAM,sBAAsB,CAAC;AAI9B,MAAM,MAAM,sBAAsB,GAAG,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;AAElE,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,aAAa,GAAG,SAAS,GAAG,aAAa,CAAC;IAC9D,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,aAAa,CAAC,EAAE,MAAM,CAAC;IAChC,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAC5C;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,EAAE,EAAE,OAAO,CAAC;IACrB,QAAQ,CAAC,OAAO,EAAE,sBAAsB,CAAC;IACzC,QAAQ,CAAC,MAAM,EAAE,qBAAqB,CAAC;IACvC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,0BAA0B;IAClC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAC;IACtC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC;IAC1C,QAAQ,CAAC,0BAA0B,EAAE,MAAM,qBAAqB,CAAC;CAClE;AAeD,qBAAa,6BAA6B;IAU5B,OAAO,CAAC,QAAQ,CAAC,IAAI;IATjC,OAAO,CAAC,WAAW,CAAsC;IACzD,OAAO,CAAC,aAAa,CAAqC;IAC1D,OAAO,CAAC,SAAS,CAAgC;IACjD,OAAO,CAAC,QAAQ,CAAC,KAAK,CAIpB;gBAE2B,IAAI,EAAE,0BAA0B;IAEvD,eAAe,IAAI,OAAO,CAAC,2BAA2B,EAAE,CAAC;IAczD,KAAK,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,2BAA2B,CAAC;IAMlF,IAAI,CAAC,OAAO,EAAE,sBAAsB,GAAG,2BAA2B;IAmBlE,OAAO,IAAI,IAAI;IAMf,MAAM,CAAC,OAAO,EAAE,sBAAsB,GAAG,qBAAqB;YAchD,UAAU;YAoCV,YAAY;YA8BZ,SAAS;YA8BT,mBAAmB;YASnB,qBAAqB;YASrB,iBAAiB;YASjB,oBAAoB;YAQpB,oBAAoB;YAMpB,sBAAsB;YAQtB,gBAAgB;IAQ9B,OAAO,CAAC,iBAAiB;IAQzB,OAAO,CAAC,YAAY;IAUpB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,WAAW;IAQnB,OAAO,CAAC,SAAS;IAQjB,OAAO,CAAC,MAAM;CAQf"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { DiscordGatewayClient, DiscordIntegration, NtfyIntegration, SlackIntegration, SlackSocketModeClient, } from '../integrations/index.js';
|
|
1
|
+
import { DiscordGatewayClient, DiscordIntegration, NtfyIntegration, SlackIntegration, SlackSocketModeClient, resolveGoodVibesNtfyTopics, } from '../integrations/index.js';
|
|
2
2
|
import { handleDiscordGatewayDispatchPayload, handleNtfySurfacePayload, handleSlackSurfacePayload, } from '../adapters/index.js';
|
|
3
3
|
import { logger } from '../utils/logger.js';
|
|
4
4
|
import { summarizeError } from '../utils/error-display.js';
|
|
@@ -27,7 +27,7 @@ export class ChannelProviderRuntimeManager {
|
|
|
27
27
|
if (this.deps.configManager.get('surfaces.discord.enabled') && await this.resolveDiscordBotToken()) {
|
|
28
28
|
results.push(await this.start('discord'));
|
|
29
29
|
}
|
|
30
|
-
if (this.deps.configManager.get('surfaces.ntfy.enabled') && this.
|
|
30
|
+
if (this.deps.configManager.get('surfaces.ntfy.enabled') && this.resolveNtfyTopics().length > 0) {
|
|
31
31
|
results.push(await this.start('ntfy'));
|
|
32
32
|
}
|
|
33
33
|
return results;
|
|
@@ -139,16 +139,17 @@ export class ChannelProviderRuntimeManager {
|
|
|
139
139
|
if (this.ntfyAbort) {
|
|
140
140
|
return this.result('ntfy', true, 'ntfy JSON stream runtime is already running.');
|
|
141
141
|
}
|
|
142
|
-
const
|
|
143
|
-
if (
|
|
142
|
+
const topics = this.resolveNtfyTopics();
|
|
143
|
+
if (topics.length === 0) {
|
|
144
144
|
this.markError('ntfy', 'ntfy topic is required for subscription runtime.');
|
|
145
145
|
return this.result('ntfy', false, 'ntfy topic is required for subscription runtime.');
|
|
146
146
|
}
|
|
147
147
|
const abort = new AbortController();
|
|
148
148
|
this.ntfyAbort = abort;
|
|
149
149
|
const ntfy = new NtfyIntegration(String(this.deps.configManager.get('surfaces.ntfy.baseUrl') || 'https://ntfy.sh'), await this.resolveNtfyToken() ?? undefined);
|
|
150
|
-
|
|
151
|
-
|
|
150
|
+
const topicList = topics.join(',');
|
|
151
|
+
this.markStarted('ntfy', { topics });
|
|
152
|
+
void ntfy.subscribeJsonStream(topicList, (message) => this.handleNtfyMessage(message), {
|
|
152
153
|
since: 'latest',
|
|
153
154
|
signal: abort.signal,
|
|
154
155
|
}).catch((error) => {
|
|
@@ -213,8 +214,12 @@ export class ChannelProviderRuntimeManager {
|
|
|
213
214
|
|| process.env.NTFY_ACCESS_TOKEN
|
|
214
215
|
|| null;
|
|
215
216
|
}
|
|
216
|
-
|
|
217
|
-
return
|
|
217
|
+
resolveNtfyTopics() {
|
|
218
|
+
return [...resolveGoodVibesNtfyTopics({
|
|
219
|
+
chatTopic: String(this.deps.configManager.get('surfaces.ntfy.chatTopic') || ''),
|
|
220
|
+
agentTopic: String(this.deps.configManager.get('surfaces.ntfy.agentTopic') || ''),
|
|
221
|
+
remoteTopic: String(this.deps.configManager.get('surfaces.ntfy.remoteTopic') || ''),
|
|
222
|
+
}).all];
|
|
218
223
|
}
|
|
219
224
|
isConfigured(surface) {
|
|
220
225
|
if (surface === 'slack') {
|
|
@@ -223,7 +228,7 @@ export class ChannelProviderRuntimeManager {
|
|
|
223
228
|
if (surface === 'discord') {
|
|
224
229
|
return Boolean(this.deps.configManager.get('surfaces.discord.botToken') || process.env.DISCORD_BOT_TOKEN);
|
|
225
230
|
}
|
|
226
|
-
return
|
|
231
|
+
return this.resolveNtfyTopics().length > 0;
|
|
227
232
|
}
|
|
228
233
|
markStarted(surface, metadata) {
|
|
229
234
|
this.state[surface] = {
|
|
@@ -34,6 +34,7 @@ export declare class ChannelReplyPipeline {
|
|
|
34
34
|
deliverProgress(agentId: string, explicitText?: string, force?: boolean): Promise<ChannelRenderResult | null>;
|
|
35
35
|
deliverFinal(agentId: string, explicitText: string): Promise<ChannelRenderResult | null>;
|
|
36
36
|
private handleEnvelope;
|
|
37
|
+
private trackChildPendingReply;
|
|
37
38
|
private resolvePolicy;
|
|
38
39
|
private dispatch;
|
|
39
40
|
private disposeSubscriptions;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"reply-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/reply-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACzG,OAAO,KAAK,EACV,kBAAkB,EAIlB,mBAAmB,EAEnB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;
|
|
1
|
+
{"version":3,"file":"reply-pipeline.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/reply-pipeline.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,4BAA4B,CAAC;AACzG,OAAO,KAAK,EACV,kBAAkB,EAIlB,mBAAmB,EAEnB,cAAc,EACf,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAK9D,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,WAAW,EAAE,cAAc,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACjC;AAED,UAAU,iBAAiB;IACzB,QAAQ,CAAC,cAAc,EAAE,qBAAqB,CAAC;IAC/C,QAAQ,CAAC,aAAa,EAAE,mBAAmB,CAAC;IAC5C,QAAQ,CAAC,UAAU,CAAC,EAAE,eAAe,GAAG,IAAI,CAAC;IAC7C,QAAQ,CAAC,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CAC7B;AA+OD,wBAAgB,sCAAsC,CACpD,QAAQ,EAAE,oBAAoB,CAAC,eAAe,CAAC,MAAM,CAAC,EAAE,eAAe,CAAC,GACvE,kBAAkB,EAAE,CAyFtB;AAED,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAwB;IACvD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAsB;IACpD,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAe;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAuC;IAC/D,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAyB;gBAE3C,IAAI,EAAE,iBAAiB;IAOnC,gBAAgB,CAAC,UAAU,EAAE,eAAe,GAAG,IAAI,GAAG,IAAI;IAmB1D,OAAO,IAAI,IAAI;IAKf,YAAY,CAAC,OAAO,EAAE,mBAAmB,GAAG,IAAI;IAOhD,OAAO,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI;IAI9B,GAAG,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAI7B,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,mBAAmB,GAAG,IAAI;IAIjD,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE,MAAM,EAAE,KAAK,UAAQ,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;IAe3G,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,GAAG,IAAI,CAAC;YAwBhF,cAAc;IAsC5B,OAAO,CAAC,sBAAsB;YAmBhB,aAAa;YAIb,QAAQ;IAgCtB,OAAO,CAAC,oBAAoB;CAK7B"}
|
|
@@ -211,6 +211,12 @@ function renderEvent(kind, phase, envelope, extras = {}) {
|
|
|
211
211
|
...extras,
|
|
212
212
|
};
|
|
213
213
|
}
|
|
214
|
+
function resolveEnvelopeAgentId(envelope) {
|
|
215
|
+
if (envelope.agentId)
|
|
216
|
+
return envelope.agentId;
|
|
217
|
+
const payload = envelope.payload;
|
|
218
|
+
return typeof payload.agentId === 'string' ? payload.agentId : null;
|
|
219
|
+
}
|
|
214
220
|
export function normalizeChannelRenderEventFromRuntime(envelope) {
|
|
215
221
|
const payload = envelope.payload;
|
|
216
222
|
switch (payload.type) {
|
|
@@ -386,7 +392,12 @@ export class ChannelReplyPipeline {
|
|
|
386
392
|
return result;
|
|
387
393
|
}
|
|
388
394
|
async handleEnvelope(envelope) {
|
|
389
|
-
|
|
395
|
+
if (envelope.payload.type === 'AGENT_SPAWNING'
|
|
396
|
+
&& typeof envelope.payload.parentAgentId === 'string'
|
|
397
|
+
&& envelope.payload.parentAgentId.length > 0) {
|
|
398
|
+
this.trackChildPendingReply(envelope.payload.agentId, envelope.payload.parentAgentId, envelope.payload.task);
|
|
399
|
+
}
|
|
400
|
+
const agentId = resolveEnvelopeAgentId(envelope);
|
|
390
401
|
if (!agentId)
|
|
391
402
|
return;
|
|
392
403
|
const state = this.buffers.get(agentId);
|
|
@@ -412,6 +423,26 @@ export class ChannelReplyPipeline {
|
|
|
412
423
|
}
|
|
413
424
|
await this.deliverProgress(agentId);
|
|
414
425
|
}
|
|
426
|
+
trackChildPendingReply(agentId, parentAgentId, task) {
|
|
427
|
+
if (this.buffers.has(agentId))
|
|
428
|
+
return;
|
|
429
|
+
const parentState = this.buffers.get(parentAgentId);
|
|
430
|
+
if (!parentState)
|
|
431
|
+
return;
|
|
432
|
+
const rootAgentId = typeof parentState.pending.rootAgentId === 'string'
|
|
433
|
+
? parentState.pending.rootAgentId
|
|
434
|
+
: parentAgentId;
|
|
435
|
+
this.buffers.set(agentId, {
|
|
436
|
+
pending: {
|
|
437
|
+
...parentState.pending,
|
|
438
|
+
agentId,
|
|
439
|
+
task,
|
|
440
|
+
parentAgentId,
|
|
441
|
+
rootAgentId,
|
|
442
|
+
},
|
|
443
|
+
events: [],
|
|
444
|
+
});
|
|
445
|
+
}
|
|
415
446
|
async resolvePolicy(surface) {
|
|
416
447
|
return await this.channelPlugins.getRenderPolicy(surface) ?? DEFAULT_POLICY[surface];
|
|
417
448
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"surface-registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/surface-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAAsC;gBAEhD,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,iBAAiB;IAMvG,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAO/C,oBAAoB,CAAC,cAAc,EAAE,qBAAqB,GAAG,IAAI;IAIjE,sBAAsB,IAAI,aAAa,EAAE;
|
|
1
|
+
{"version":3,"file":"surface-registry.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/channels/surface-registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAkB,YAAY,EAAE,MAAM,2BAA2B,CAAC;AAC9E,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sCAAsC,CAAC;AAC1E,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,sBAAsB,CAAC;AAClE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,mCAAmC,CAAC;AAO3E,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAgB;IAC9C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAoB;IACjD,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAoC;IAC7D,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,cAAc,CAAsC;gBAEhD,aAAa,EAAE,aAAa,EAAE,YAAY,CAAC,EAAE,YAAY,EAAE,YAAY,CAAC,EAAE,iBAAiB;IAMvG,aAAa,CAAC,YAAY,EAAE,YAAY,GAAG,IAAI;IAO/C,oBAAoB,CAAC,cAAc,EAAE,qBAAqB,GAAG,IAAI;IAIjE,sBAAsB,IAAI,aAAa,EAAE;IAkJzC,IAAI,IAAI,aAAa,EAAE;CAGxB"}
|
|
@@ -167,6 +167,9 @@ export class SurfaceRegistry {
|
|
|
167
167
|
metadata: {
|
|
168
168
|
baseUrl: this.configManager.get('surfaces.ntfy.baseUrl'),
|
|
169
169
|
topic: this.configManager.get('surfaces.ntfy.topic'),
|
|
170
|
+
chatTopic: this.configManager.get('surfaces.ntfy.chatTopic'),
|
|
171
|
+
agentTopic: this.configManager.get('surfaces.ntfy.agentTopic'),
|
|
172
|
+
remoteTopic: this.configManager.get('surfaces.ntfy.remoteTopic'),
|
|
170
173
|
},
|
|
171
174
|
},
|
|
172
175
|
{
|
|
@@ -50,6 +50,12 @@ export interface CompanionChatEventPublisher {
|
|
|
50
50
|
clientId?: string;
|
|
51
51
|
}): void;
|
|
52
52
|
}
|
|
53
|
+
export interface CompanionChatReplyResult {
|
|
54
|
+
readonly messageId: string;
|
|
55
|
+
readonly assistantMessageId?: string;
|
|
56
|
+
readonly response?: string;
|
|
57
|
+
readonly error?: string;
|
|
58
|
+
}
|
|
53
59
|
export interface CompanionChatManagerConfig {
|
|
54
60
|
readonly provider: CompanionLLMProvider;
|
|
55
61
|
readonly eventPublisher: CompanionChatEventPublisher;
|
|
@@ -90,6 +96,7 @@ export declare class CompanionChatManager {
|
|
|
90
96
|
private gcTimer;
|
|
91
97
|
/** Tracks whether the async init() has completed. */
|
|
92
98
|
private initCompleted;
|
|
99
|
+
private readonly pendingReplies;
|
|
93
100
|
/**
|
|
94
101
|
* Serializes persistence writes per session to prevent write-after-write
|
|
95
102
|
* races where two concurrent saves could result in an older snapshot
|
|
@@ -131,6 +138,10 @@ export declare class CompanionChatManager {
|
|
|
131
138
|
* Pass '' to skip client-level rate limiting.
|
|
132
139
|
*/
|
|
133
140
|
postMessage(sessionId: string, content: string, clientId?: string): Promise<string>;
|
|
141
|
+
postMessageAndWaitForReply(sessionId: string, content: string, clientId?: string, options?: {
|
|
142
|
+
readonly timeoutMs?: number;
|
|
143
|
+
}): Promise<CompanionChatReplyResult>;
|
|
144
|
+
private _postMessageInternal;
|
|
134
145
|
dispose(): void;
|
|
135
146
|
private _runTurn;
|
|
136
147
|
_gcSweep(): void;
|
|
@@ -143,5 +154,6 @@ export declare class CompanionChatManager {
|
|
|
143
154
|
*/
|
|
144
155
|
private _persist;
|
|
145
156
|
private _doSave;
|
|
157
|
+
private resolvePendingReply;
|
|
146
158
|
}
|
|
147
159
|
//# sourceMappingURL=companion-chat-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"companion-chat-manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/companion/companion-chat-manager.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAIH,OAAO,KAAK,EACV,oBAAoB,EACpB,oBAAoB,EAGpB,+BAA+B,EAChC,MAAM,2BAA2B,CAAC;AAMnC,OAAO,KAAK,EAAE,+BAA+B,EAAE,MAAM,kCAAkC,CAAC;AACxF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAMzD,MAAM,WAAW,wBAAwB;IACvC,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CAAC;IACpC,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,IAAI,EAAE,YAAY,GAAG,WAAW,GAAG,aAAa,GAAG,MAAM,GAAG,OAAO,CAAC;IAC7E,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,UAAU,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC;IAC7B,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,OAAO,CAAC,EAAE,OAAO,CAAC;IAC3B,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,wDAAwD;IACxD,UAAU,CACR,QAAQ,EAAE,wBAAwB,EAAE,EACpC,OAAO,EAAE;QACP,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAClC,QAAQ,CAAC,WAAW,CAAC,EAAE,WAAW,CAAC;KACpC,GACA,aAAa,CAAC,sBAAsB,CAAC,CAAC;CAC1C;AAMD,MAAM,WAAW,2BAA2B;IAC1C,YAAY,CACV,KAAK,EAAE,MAAM,EACb,OAAO,EAAE,OAAO,EAChB,MAAM,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,GAC7B,IAAI,CAAC;CACT;
|
|
1
|
+
{"version":3,"file":"companion-chat-manager.d.ts","sourceRoot":"","sources":["../../../../src/_internal/platform/companion/companion-chat-manager.ts"],"names":[],"mappings":"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"}
|