@rubytech/create-maxy-code 0.1.592 → 0.1.593
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/package.json +1 -1
- package/payload/platform/plugins/admin/skills/platform-architecture/SKILL.md +7 -3
- package/payload/platform/plugins/admin/skills/whats-new/SKILL.md +6 -0
- package/payload/platform/plugins/docs/references/internals.md +4 -2
- package/payload/platform/plugins/docs/references/telegram-guide.md +2 -0
- package/payload/platform/plugins/scheduling/PLUGIN.md +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js +15 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/__tests__/agent-turn-dispatch.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js +7 -2
- package/payload/platform/plugins/scheduling/mcp/dist/scripts/agent-turn-dispatch.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js +125 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/__tests__/scheduling-gate.test.js.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts +28 -0
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.d.ts.map +1 -1
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js +72 -12
- package/payload/platform/plugins/scheduling/mcp/dist/tools/scheduling-gate.js.map +1 -1
- package/payload/platform/plugins/telegram/PLUGIN.md +12 -5
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js +31 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/ask-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js +30 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/card-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js +24 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-fetch-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js +31 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/media-send-tool.test.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.js +55 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin-registry.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.d.ts +2 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js +89 -0
- package/payload/platform/plugins/telegram/mcp/dist/__tests__/public-pin.test.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/index.js +13 -42
- package/payload/platform/plugins/telegram/mcp/dist/index.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.d.ts +80 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.d.ts.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js +96 -0
- package/payload/platform/plugins/telegram/mcp/dist/lib/public-pin.js.map +1 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/ask.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/card.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-fetch.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/media-send.js.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts +5 -0
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.d.ts.map +1 -1
- package/payload/platform/plugins/telegram/mcp/dist/tools/thread.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts +37 -0
- package/payload/platform/services/claude-session-manager/dist/http-server.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/http-server.js +178 -13
- package/payload/platform/services/claude-session-manager/dist/http-server.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts +13 -5
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js +23 -9
- package/payload/platform/services/claude-session-manager/dist/rc-public-lockdown.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-mcp.d.ts +7 -4
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-mcp.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-mcp.js +5 -3
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-mcp.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-store.d.ts +15 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-store.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-store.js +16 -7
- package/payload/platform/services/claude-session-manager/dist/telegram-channel-store.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/telegram-plugin-mcp.d.ts +28 -0
- package/payload/platform/services/claude-session-manager/dist/telegram-plugin-mcp.d.ts.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/telegram-plugin-mcp.js +53 -0
- package/payload/platform/services/claude-session-manager/dist/telegram-plugin-mcp.js.map +1 -0
- package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.d.ts +9 -5
- package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.js +12 -6
- package/payload/platform/services/claude-session-manager/dist/wa-channel-mcp.js.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.d.ts +7 -3
- package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.d.ts.map +1 -1
- package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.js +5 -1
- package/payload/platform/services/claude-session-manager/dist/webchat-channel-mcp.js.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts +14 -2
- package/payload/platform/services/telegram-channel/dist/instructions.d.ts.map +1 -1
- package/payload/platform/services/telegram-channel/dist/instructions.js +34 -3
- package/payload/platform/services/telegram-channel/dist/instructions.js.map +1 -1
- package/payload/server/server.js +74 -9
package/payload/server/server.js
CHANGED
|
@@ -7177,11 +7177,29 @@ function createScheduleInjectRoutes(deps) {
|
|
|
7177
7177
|
console.error(`${TAG6} op=schedule-telegram-reject eventId=${eventId} destination=${destination} reason=unresolved-effective-account`);
|
|
7178
7178
|
return c.json({ ok: false, error: "unresolved-effective-account" }, 403);
|
|
7179
7179
|
}
|
|
7180
|
-
|
|
7181
|
-
|
|
7182
|
-
|
|
7180
|
+
let claimant;
|
|
7181
|
+
if (resolution.kind === "one") {
|
|
7182
|
+
claimant = resolution;
|
|
7183
|
+
} else {
|
|
7184
|
+
const mine = resolution.claimants.filter((c2) => c2.accountId === eventAccountId);
|
|
7185
|
+
if (mine.length === 0) {
|
|
7186
|
+
console.error(
|
|
7187
|
+
`${TAG6} op=event-account-scope-mismatch eventId=${eventId} eventAccount=${eventAccountId ?? "-"} effectiveAccount=none claimants=${resolution.claimants.length} destination=${destination} dispatched=no`
|
|
7188
|
+
);
|
|
7189
|
+
return c.json({ ok: false, error: "event-account-scope-mismatch" }, 403);
|
|
7190
|
+
}
|
|
7191
|
+
if (mine.length > 1) {
|
|
7192
|
+
console.error(
|
|
7193
|
+
`${TAG6} op=telegram-destination-ambiguous eventId=${eventId} destination=${destination} accounts=${mine.length} scope=within-account dispatched=no`
|
|
7194
|
+
);
|
|
7195
|
+
return c.json({ ok: false, error: "telegram-destination-ambiguous" }, 403);
|
|
7196
|
+
}
|
|
7197
|
+
claimant = mine[0];
|
|
7198
|
+
console.error(
|
|
7199
|
+
`${TAG6} op=telegram-destination-narrowed eventId=${eventId} destination=${destination} claimants=${resolution.claimants.length} account=${claimant.accountId} botId=${claimant.botId}`
|
|
7200
|
+
);
|
|
7183
7201
|
}
|
|
7184
|
-
const { accountId: effectiveAccount, botId, botToken } =
|
|
7202
|
+
const { accountId: effectiveAccount, botId, botToken } = claimant;
|
|
7185
7203
|
console.error(`${TAG6} op=effective-account eventId=${eventId} effectiveAccount=${effectiveAccount} botId=${botId}`);
|
|
7186
7204
|
if (eventAccountId === null || eventAccountId !== effectiveAccount) {
|
|
7187
7205
|
console.error(`${TAG6} op=event-account-scope-mismatch eventId=${eventId} eventAccount=${eventAccountId ?? "-"} effectiveAccount=${effectiveAccount} destination=${destination} dispatched=no`);
|
|
@@ -7189,8 +7207,8 @@ function createScheduleInjectRoutes(deps) {
|
|
|
7189
7207
|
}
|
|
7190
7208
|
const sendVerdict = checkTelegramChatSend({
|
|
7191
7209
|
chatId: Number(destination),
|
|
7192
|
-
allowChannels:
|
|
7193
|
-
allowGroups:
|
|
7210
|
+
allowChannels: claimant.allowChannels,
|
|
7211
|
+
allowGroups: claimant.allowGroups
|
|
7194
7212
|
});
|
|
7195
7213
|
console.error(
|
|
7196
7214
|
`[telegram-outbound] op=channel-send botId=${botId} chatId=${destination} allowed=${sendVerdict.allowed ? "yes" : "no"} reason=${sendVerdict.reason} messageId=none`
|
|
@@ -39977,6 +39995,16 @@ function startEmitter(opts) {
|
|
|
39977
39995
|
}
|
|
39978
39996
|
continue;
|
|
39979
39997
|
}
|
|
39998
|
+
if (opts.onToolUse && !suppressing && event.type === "assistant") {
|
|
39999
|
+
const pre = event.message;
|
|
40000
|
+
if (pre && Array.isArray(pre.content)) {
|
|
40001
|
+
for (const block of pre.content) {
|
|
40002
|
+
if (block?.type === "tool_use" && typeof block.name === "string") {
|
|
40003
|
+
opts.onToolUse(block.name);
|
|
40004
|
+
}
|
|
40005
|
+
}
|
|
40006
|
+
}
|
|
40007
|
+
}
|
|
39980
40008
|
for (const answer of answers.push(line)) {
|
|
39981
40009
|
if (suppressing) {
|
|
39982
40010
|
discardedAnswers += 1;
|
|
@@ -41215,7 +41243,17 @@ function buildTelegramSpawnRequest(input) {
|
|
|
41215
41243
|
// session resolve under that account, not the manager's boot-time house
|
|
41216
41244
|
// default. Mirror of the WhatsApp builder.
|
|
41217
41245
|
targetAccountId: input.accountId,
|
|
41218
|
-
|
|
41246
|
+
// Task 2666 — the pin travels with the channel binding. Sent on EVERY role,
|
|
41247
|
+
// not just public: the manager grants the rich tool surface only on
|
|
41248
|
+
// role:'public', and putting a role branch here would be a second place
|
|
41249
|
+
// that has to be kept in step with the manager's own gate.
|
|
41250
|
+
telegramChannel: {
|
|
41251
|
+
senderId: channelKey,
|
|
41252
|
+
gatewayUrl: input.gatewayUrl,
|
|
41253
|
+
serverPath: input.serverPath,
|
|
41254
|
+
botId: input.botId,
|
|
41255
|
+
chatId: input.chatId
|
|
41256
|
+
},
|
|
41219
41257
|
logContext: `channel=telegram-native role=${input.role} botId=${input.botId} senderId=${input.senderId}`
|
|
41220
41258
|
};
|
|
41221
41259
|
}
|
|
@@ -41239,6 +41277,10 @@ function buildTelegramEnsureSession(deps) {
|
|
|
41239
41277
|
gatewayUrl: input.gatewayUrl,
|
|
41240
41278
|
serverPath: input.serverPath,
|
|
41241
41279
|
botId: input.botId,
|
|
41280
|
+
// Task 2666 — the chat the public spawn's tools are pinned to. The same
|
|
41281
|
+
// value handed to the file follower below, so a group answers into the
|
|
41282
|
+
// group and a business chat into the customer's chat.
|
|
41283
|
+
chatId: input.chatId,
|
|
41242
41284
|
// Task 2615 — the builder keys both the channel key and the session id on
|
|
41243
41285
|
// this when present, instead of on the sender.
|
|
41244
41286
|
businessChatId: input.businessChatId ?? null,
|
|
@@ -41510,6 +41552,7 @@ function runTelegramPresenceCensus() {
|
|
|
41510
41552
|
}
|
|
41511
41553
|
|
|
41512
41554
|
// app/lib/telegram/gateway/native-file-follower.ts
|
|
41555
|
+
var TELEGRAM_CARD_TOOL = "mcp__telegram__telegram-card";
|
|
41513
41556
|
var CHAT_ACTION_REFRESH_MS = 4e3;
|
|
41514
41557
|
function startTelegramNativeFileFollower(input) {
|
|
41515
41558
|
const entry2 = {
|
|
@@ -41532,6 +41575,7 @@ function startTelegramNativeFileFollower(input) {
|
|
|
41532
41575
|
};
|
|
41533
41576
|
let lastChatActionAt = Number.NEGATIVE_INFINITY;
|
|
41534
41577
|
let turnOpen = false;
|
|
41578
|
+
let cardSentThisTurn = false;
|
|
41535
41579
|
let heartbeat = null;
|
|
41536
41580
|
const send = (driver2) => {
|
|
41537
41581
|
lastChatActionAt = Date.now();
|
|
@@ -41568,6 +41612,7 @@ function startTelegramNativeFileFollower(input) {
|
|
|
41568
41612
|
};
|
|
41569
41613
|
const onTurnComplete = () => {
|
|
41570
41614
|
turnOpen = false;
|
|
41615
|
+
cardSentThisTurn = false;
|
|
41571
41616
|
if (input.backgroundActive?.() === true) return;
|
|
41572
41617
|
stopHeartbeat();
|
|
41573
41618
|
lastChatActionAt = Number.NEGATIVE_INFINITY;
|
|
@@ -41596,10 +41641,30 @@ function startTelegramNativeFileFollower(input) {
|
|
|
41596
41641
|
onActivity,
|
|
41597
41642
|
onTurnComplete,
|
|
41598
41643
|
onTurnStart,
|
|
41644
|
+
// Task 2666 — which tools this turn used. Only `telegram-card` matters: it
|
|
41645
|
+
// posts the answer's own words WITH its buttons, so delivering the turn's
|
|
41646
|
+
// final text beside it shows the visitor the same answer twice. A poll or a
|
|
41647
|
+
// photo is a separate object and its accompanying sentence is usually the
|
|
41648
|
+
// part that explains what it is, so those are left alone.
|
|
41649
|
+
//
|
|
41650
|
+
// Every card call posts or edits a message: `text` is required in
|
|
41651
|
+
// CARD_SHAPE and card.ts always issues sendMessage or editMessageText
|
|
41652
|
+
// before it reaches the optional answerCallbackQuery, so there is no card
|
|
41653
|
+
// call that posts nothing and no bare acknowledgement to keep the text for.
|
|
41654
|
+
onToolUse: (name) => {
|
|
41655
|
+
if (name === TELEGRAM_CARD_TOOL) cardSentThisTurn = true;
|
|
41656
|
+
},
|
|
41599
41657
|
// Task 2521 — the answer reaches every bound door through the one fan-out.
|
|
41600
41658
|
// Ungated by design: whatever woke the turn, the reader and the chats show
|
|
41601
|
-
// the same thing.
|
|
41659
|
+
// the same thing. Task 2666 adds the one exception above.
|
|
41602
41660
|
onAnswer: async (answer) => {
|
|
41661
|
+
if (cardSentThisTurn) {
|
|
41662
|
+
cardSentThisTurn = false;
|
|
41663
|
+
console.error(
|
|
41664
|
+
`[telegram-public] op=text-suppressed sessionId=${input.sessionId.slice(0, 8)} messageId=${answer.messageId} reason=card-sent`
|
|
41665
|
+
);
|
|
41666
|
+
return;
|
|
41667
|
+
}
|
|
41603
41668
|
const targets = input.fanTargets?.() ?? [];
|
|
41604
41669
|
if (targets.length === 0) return;
|
|
41605
41670
|
noteAnswer(input.sessionId, answer.messageId);
|
|
@@ -43481,7 +43546,7 @@ var scheduleInjectRoutes = createScheduleInjectRoutes({
|
|
|
43481
43546
|
}
|
|
43482
43547
|
}
|
|
43483
43548
|
if (hits.length === 0) return { kind: "none" };
|
|
43484
|
-
if (hits.length > 1) return { kind: "ambiguous",
|
|
43549
|
+
if (hits.length > 1) return { kind: "ambiguous", claimants: hits };
|
|
43485
43550
|
return { kind: "one", ...hits[0] };
|
|
43486
43551
|
}
|
|
43487
43552
|
// Task 2078 — the same binding the live inbound resolves. Without it a
|