@wirecat/max-cli 0.0.0 → 0.42.0
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/LICENSE +21 -0
- package/README.md +531 -0
- package/dist/adapter/max-adapter.d.ts +17 -0
- package/dist/adapter/max-adapter.d.ts.map +1 -0
- package/dist/adapter/max-adapter.js +364 -0
- package/dist/adapter/max-adapter.js.map +1 -0
- package/dist/app.d.ts +3 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +9 -0
- package/dist/app.js.map +1 -0
- package/dist/bin/max.d.ts +3 -0
- package/dist/bin/max.d.ts.map +1 -0
- package/dist/bin/max.js +20 -0
- package/dist/bin/max.js.map +1 -0
- package/dist/bot/adapter.d.ts +25 -0
- package/dist/bot/adapter.d.ts.map +1 -0
- package/dist/bot/adapter.js +404 -0
- package/dist/bot/adapter.js.map +1 -0
- package/dist/bot/auth.d.ts +13 -0
- package/dist/bot/auth.d.ts.map +1 -0
- package/dist/bot/auth.js +9 -0
- package/dist/bot/auth.js.map +1 -0
- package/dist/bot/client.d.ts +26 -0
- package/dist/bot/client.d.ts.map +1 -0
- package/dist/bot/client.js +105 -0
- package/dist/bot/client.js.map +1 -0
- package/dist/bot/generated/manifest.d.ts +3 -0
- package/dist/bot/generated/manifest.d.ts.map +1 -0
- package/dist/bot/generated/manifest.js +1232 -0
- package/dist/bot/generated/manifest.js.map +1 -0
- package/dist/bot/generated/schemas.d.ts +271 -0
- package/dist/bot/generated/schemas.d.ts.map +1 -0
- package/dist/bot/generated/schemas.js +869 -0
- package/dist/bot/generated/schemas.js.map +1 -0
- package/dist/bot/generated/types.d.ts +1088 -0
- package/dist/bot/generated/types.d.ts.map +1 -0
- package/dist/bot/generated/types.js +5 -0
- package/dist/bot/generated/types.js.map +1 -0
- package/dist/bot/input.d.ts +6 -0
- package/dist/bot/input.d.ts.map +1 -0
- package/dist/bot/input.js +6 -0
- package/dist/bot/input.js.map +1 -0
- package/dist/bot/joins.d.ts +26 -0
- package/dist/bot/joins.d.ts.map +1 -0
- package/dist/bot/joins.js +56 -0
- package/dist/bot/joins.js.map +1 -0
- package/dist/bot/keep.d.ts +25 -0
- package/dist/bot/keep.d.ts.map +1 -0
- package/dist/bot/keep.js +98 -0
- package/dist/bot/keep.js.map +1 -0
- package/dist/bot/map.d.ts +14 -0
- package/dist/bot/map.d.ts.map +1 -0
- package/dist/bot/map.js +101 -0
- package/dist/bot/map.js.map +1 -0
- package/dist/bot/mcp-tools.d.ts +4 -0
- package/dist/bot/mcp-tools.d.ts.map +1 -0
- package/dist/bot/mcp-tools.js +78 -0
- package/dist/bot/mcp-tools.js.map +1 -0
- package/dist/bot/permissions.d.ts +14 -0
- package/dist/bot/permissions.d.ts.map +1 -0
- package/dist/bot/permissions.js +88 -0
- package/dist/bot/permissions.js.map +1 -0
- package/dist/bot/registry.d.ts +11 -0
- package/dist/bot/registry.d.ts.map +1 -0
- package/dist/bot/registry.js +13 -0
- package/dist/bot/registry.js.map +1 -0
- package/dist/bot/russian-trusted-root.d.ts +8 -0
- package/dist/bot/russian-trusted-root.d.ts.map +1 -0
- package/dist/bot/russian-trusted-root.js +41 -0
- package/dist/bot/russian-trusted-root.js.map +1 -0
- package/dist/bot/transport.d.ts +46 -0
- package/dist/bot/transport.d.ts.map +1 -0
- package/dist/bot/transport.js +252 -0
- package/dist/bot/transport.js.map +1 -0
- package/dist/bot/uploads.d.ts +42 -0
- package/dist/bot/uploads.d.ts.map +1 -0
- package/dist/bot/uploads.js +145 -0
- package/dist/bot/uploads.js.map +1 -0
- package/dist/client.d.ts +650 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +2836 -0
- package/dist/client.js.map +1 -0
- package/dist/commands/account.d.ts +3 -0
- package/dist/commands/account.d.ts.map +1 -0
- package/dist/commands/account.js +4 -0
- package/dist/commands/account.js.map +1 -0
- package/dist/commands/bot-comments.d.ts +3 -0
- package/dist/commands/bot-comments.d.ts.map +1 -0
- package/dist/commands/bot-comments.js +74 -0
- package/dist/commands/bot-comments.js.map +1 -0
- package/dist/commands/bot-context.d.ts +38 -0
- package/dist/commands/bot-context.d.ts.map +1 -0
- package/dist/commands/bot-context.js +121 -0
- package/dist/commands/bot-context.js.map +1 -0
- package/dist/commands/bot-members.d.ts +14 -0
- package/dist/commands/bot-members.d.ts.map +1 -0
- package/dist/commands/bot-members.js +64 -0
- package/dist/commands/bot-members.js.map +1 -0
- package/dist/commands/bot-messenger.d.ts +10 -0
- package/dist/commands/bot-messenger.d.ts.map +1 -0
- package/dist/commands/bot-messenger.js +101 -0
- package/dist/commands/bot-messenger.js.map +1 -0
- package/dist/commands/bot-reads.d.ts +4 -0
- package/dist/commands/bot-reads.d.ts.map +1 -0
- package/dist/commands/bot-reads.js +13 -0
- package/dist/commands/bot-reads.js.map +1 -0
- package/dist/commands/bot-sends.d.ts +13 -0
- package/dist/commands/bot-sends.d.ts.map +1 -0
- package/dist/commands/bot-sends.js +103 -0
- package/dist/commands/bot-sends.js.map +1 -0
- package/dist/commands/bot-setup.d.ts +3 -0
- package/dist/commands/bot-setup.d.ts.map +1 -0
- package/dist/commands/bot-setup.js +20 -0
- package/dist/commands/bot-setup.js.map +1 -0
- package/dist/commands/bot.d.ts +3 -0
- package/dist/commands/bot.d.ts.map +1 -0
- package/dist/commands/bot.js +60 -0
- package/dist/commands/bot.js.map +1 -0
- package/dist/commands/calls.d.ts +3 -0
- package/dist/commands/calls.d.ts.map +1 -0
- package/dist/commands/calls.js +4 -0
- package/dist/commands/calls.js.map +1 -0
- package/dist/commands/chats.d.ts +3 -0
- package/dist/commands/chats.d.ts.map +1 -0
- package/dist/commands/chats.js +46 -0
- package/dist/commands/chats.js.map +1 -0
- package/dist/commands/commands.d.ts +2 -0
- package/dist/commands/commands.d.ts.map +1 -0
- package/dist/commands/commands.js +4 -0
- package/dist/commands/commands.js.map +1 -0
- package/dist/commands/complete.d.ts +2 -0
- package/dist/commands/complete.d.ts.map +1 -0
- package/dist/commands/complete.js +34 -0
- package/dist/commands/complete.js.map +1 -0
- package/dist/commands/config.d.ts +3 -0
- package/dist/commands/config.d.ts.map +1 -0
- package/dist/commands/config.js +170 -0
- package/dist/commands/config.js.map +1 -0
- package/dist/commands/contacts.d.ts +10 -0
- package/dist/commands/contacts.d.ts.map +1 -0
- package/dist/commands/contacts.js +80 -0
- package/dist/commands/contacts.js.map +1 -0
- package/dist/commands/context.d.ts +126 -0
- package/dist/commands/context.d.ts.map +1 -0
- package/dist/commands/context.js +137 -0
- package/dist/commands/context.js.map +1 -0
- package/dist/commands/doctor.d.ts +24 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +308 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/mcp.d.ts +36 -0
- package/dist/commands/mcp.d.ts.map +1 -0
- package/dist/commands/mcp.js +214 -0
- package/dist/commands/mcp.js.map +1 -0
- package/dist/commands/messages.d.ts +3 -0
- package/dist/commands/messages.d.ts.map +1 -0
- package/dist/commands/messages.js +105 -0
- package/dist/commands/messages.js.map +1 -0
- package/dist/commands/models.d.ts +3 -0
- package/dist/commands/models.d.ts.map +1 -0
- package/dist/commands/models.js +4 -0
- package/dist/commands/models.js.map +1 -0
- package/dist/commands/paging.d.ts +59 -0
- package/dist/commands/paging.d.ts.map +1 -0
- package/dist/commands/paging.js +77 -0
- package/dist/commands/paging.js.map +1 -0
- package/dist/commands/recipients.d.ts +9 -0
- package/dist/commands/recipients.d.ts.map +1 -0
- package/dist/commands/recipients.js +74 -0
- package/dist/commands/recipients.js.map +1 -0
- package/dist/commands/runs.d.ts +2 -0
- package/dist/commands/runs.d.ts.map +1 -0
- package/dist/commands/runs.js +4 -0
- package/dist/commands/runs.js.map +1 -0
- package/dist/commands/sends.d.ts +3 -0
- package/dist/commands/sends.d.ts.map +1 -0
- package/dist/commands/sends.js +4 -0
- package/dist/commands/sends.js.map +1 -0
- package/dist/commands/serve-members.d.ts +14 -0
- package/dist/commands/serve-members.d.ts.map +1 -0
- package/dist/commands/serve-members.js +54 -0
- package/dist/commands/serve-members.js.map +1 -0
- package/dist/commands/serve-stems.d.ts +9 -0
- package/dist/commands/serve-stems.d.ts.map +1 -0
- package/dist/commands/serve-stems.js +26 -0
- package/dist/commands/serve-stems.js.map +1 -0
- package/dist/commands/serve.d.ts +10 -0
- package/dist/commands/serve.d.ts.map +1 -0
- package/dist/commands/serve.js +79 -0
- package/dist/commands/serve.js.map +1 -0
- package/dist/commands/server.d.ts +16 -0
- package/dist/commands/server.d.ts.map +1 -0
- package/dist/commands/server.js +51 -0
- package/dist/commands/server.js.map +1 -0
- package/dist/commands/session.d.ts +15 -0
- package/dist/commands/session.d.ts.map +1 -0
- package/dist/commands/session.js +169 -0
- package/dist/commands/session.js.map +1 -0
- package/dist/commands/setup.d.ts +3 -0
- package/dist/commands/setup.d.ts.map +1 -0
- package/dist/commands/setup.js +168 -0
- package/dist/commands/setup.js.map +1 -0
- package/dist/commands/skill.d.ts +3 -0
- package/dist/commands/skill.d.ts.map +1 -0
- package/dist/commands/skill.js +7 -0
- package/dist/commands/skill.js.map +1 -0
- package/dist/commands/stickers.d.ts +3 -0
- package/dist/commands/stickers.d.ts.map +1 -0
- package/dist/commands/stickers.js +4 -0
- package/dist/commands/stickers.js.map +1 -0
- package/dist/commands/upgrade.d.ts +2 -0
- package/dist/commands/upgrade.d.ts.map +1 -0
- package/dist/commands/upgrade.js +14 -0
- package/dist/commands/upgrade.js.map +1 -0
- package/dist/commands/watch.d.ts +27 -0
- package/dist/commands/watch.d.ts.map +1 -0
- package/dist/commands/watch.js +105 -0
- package/dist/commands/watch.js.map +1 -0
- package/dist/config.d.ts +385 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +372 -0
- package/dist/config.js.map +1 -0
- package/dist/deadline.d.ts +2 -0
- package/dist/deadline.d.ts.map +1 -0
- package/dist/deadline.js +2 -0
- package/dist/deadline.js.map +1 -0
- package/dist/diagnose.d.ts +143 -0
- package/dist/diagnose.d.ts.map +1 -0
- package/dist/diagnose.js +183 -0
- package/dist/diagnose.js.map +1 -0
- package/dist/domain/map.d.ts +65 -0
- package/dist/domain/map.d.ts.map +1 -0
- package/dist/domain/map.js +431 -0
- package/dist/domain/map.js.map +1 -0
- package/dist/domain/models.d.ts +238 -0
- package/dist/domain/models.d.ts.map +1 -0
- package/dist/domain/models.js +17 -0
- package/dist/domain/models.js.map +1 -0
- package/dist/download.d.ts +38 -0
- package/dist/download.d.ts.map +1 -0
- package/dist/download.js +199 -0
- package/dist/download.js.map +1 -0
- package/dist/format-markdown.d.ts +13 -0
- package/dist/format-markdown.d.ts.map +1 -0
- package/dist/format-markdown.js +241 -0
- package/dist/format-markdown.js.map +1 -0
- package/dist/generated/client.generated.d.ts +95 -0
- package/dist/generated/client.generated.d.ts.map +1 -0
- package/dist/generated/client.generated.js +91 -0
- package/dist/generated/client.generated.js.map +1 -0
- package/dist/generated/opcodes.generated.d.ts +76 -0
- package/dist/generated/opcodes.generated.d.ts.map +1 -0
- package/dist/generated/opcodes.generated.js +76 -0
- package/dist/generated/opcodes.generated.js.map +1 -0
- package/dist/generated/operations.generated.d.ts +502 -0
- package/dist/generated/operations.generated.d.ts.map +1 -0
- package/dist/generated/operations.generated.js +72 -0
- package/dist/generated/operations.generated.js.map +1 -0
- package/dist/inbox-point.d.ts +3 -0
- package/dist/inbox-point.d.ts.map +1 -0
- package/dist/inbox-point.js +17 -0
- package/dist/inbox-point.js.map +1 -0
- package/dist/install/postinstall.d.ts +8 -0
- package/dist/install/postinstall.d.ts.map +1 -0
- package/dist/install/postinstall.js +62 -0
- package/dist/install/postinstall.js.map +1 -0
- package/dist/install.d.ts +43 -0
- package/dist/install.d.ts.map +1 -0
- package/dist/install.js +142 -0
- package/dist/install.js.map +1 -0
- package/dist/markdown.d.ts +13 -0
- package/dist/markdown.d.ts.map +1 -0
- package/dist/markdown.js +6 -0
- package/dist/markdown.js.map +1 -0
- package/dist/mcp/instructions.d.ts +13 -0
- package/dist/mcp/instructions.d.ts.map +1 -0
- package/dist/mcp/instructions.js +16 -0
- package/dist/mcp/instructions.js.map +1 -0
- package/dist/mcp/legacy-check.d.ts +12 -0
- package/dist/mcp/legacy-check.d.ts.map +1 -0
- package/dist/mcp/legacy-check.js +44 -0
- package/dist/mcp/legacy-check.js.map +1 -0
- package/dist/mcp/photo.d.ts +9 -0
- package/dist/mcp/photo.d.ts.map +1 -0
- package/dist/mcp/photo.js +38 -0
- package/dist/mcp/photo.js.map +1 -0
- package/dist/mcp/prompts.d.ts +7 -0
- package/dist/mcp/prompts.d.ts.map +1 -0
- package/dist/mcp/prompts.js +100 -0
- package/dist/mcp/prompts.js.map +1 -0
- package/dist/mcp/resources.d.ts +15 -0
- package/dist/mcp/resources.d.ts.map +1 -0
- package/dist/mcp/resources.js +56 -0
- package/dist/mcp/resources.js.map +1 -0
- package/dist/mcp/server.d.ts +31 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +116 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/mcp/session.d.ts +30 -0
- package/dist/mcp/session.d.ts.map +1 -0
- package/dist/mcp/session.js +109 -0
- package/dist/mcp/session.js.map +1 -0
- package/dist/mcp/shared.d.ts +14 -0
- package/dist/mcp/shared.d.ts.map +1 -0
- package/dist/mcp/shared.js +46 -0
- package/dist/mcp/shared.js.map +1 -0
- package/dist/mcp/tools.d.ts +30 -0
- package/dist/mcp/tools.d.ts.map +1 -0
- package/dist/mcp/tools.js +248 -0
- package/dist/mcp/tools.js.map +1 -0
- package/dist/messenger.d.ts +15 -0
- package/dist/messenger.d.ts.map +1 -0
- package/dist/messenger.js +149 -0
- package/dist/messenger.js.map +1 -0
- package/dist/moderation/check.d.ts +103 -0
- package/dist/moderation/check.d.ts.map +1 -0
- package/dist/moderation/check.js +273 -0
- package/dist/moderation/check.js.map +1 -0
- package/dist/moderation/points.d.ts +8 -0
- package/dist/moderation/points.d.ts.map +1 -0
- package/dist/moderation/points.js +21 -0
- package/dist/moderation/points.js.map +1 -0
- package/dist/moderation/rules.d.ts +7 -0
- package/dist/moderation/rules.d.ts.map +1 -0
- package/dist/moderation/rules.js +24 -0
- package/dist/moderation/rules.js.map +1 -0
- package/dist/online.d.ts +23 -0
- package/dist/online.d.ts.map +1 -0
- package/dist/online.js +87 -0
- package/dist/online.js.map +1 -0
- package/dist/output.d.ts +2 -0
- package/dist/output.d.ts.map +1 -0
- package/dist/output.js +2 -0
- package/dist/output.js.map +1 -0
- package/dist/permissions.d.ts +20 -0
- package/dist/permissions.d.ts.map +1 -0
- package/dist/permissions.js +76 -0
- package/dist/permissions.js.map +1 -0
- package/dist/profile.d.ts +33 -0
- package/dist/profile.d.ts.map +1 -0
- package/dist/profile.js +60 -0
- package/dist/profile.js.map +1 -0
- package/dist/program.d.ts +10 -0
- package/dist/program.d.ts.map +1 -0
- package/dist/program.js +172 -0
- package/dist/program.js.map +1 -0
- package/dist/protocol/connection.d.ts +83 -0
- package/dist/protocol/connection.d.ts.map +1 -0
- package/dist/protocol/connection.js +301 -0
- package/dist/protocol/connection.js.map +1 -0
- package/dist/protocol/frame.d.ts +55 -0
- package/dist/protocol/frame.d.ts.map +1 -0
- package/dist/protocol/frame.js +149 -0
- package/dist/protocol/frame.js.map +1 -0
- package/dist/protocol/lz4.d.ts +15 -0
- package/dist/protocol/lz4.d.ts.map +1 -0
- package/dist/protocol/lz4.js +157 -0
- package/dist/protocol/lz4.js.map +1 -0
- package/dist/record.d.ts +41 -0
- package/dist/record.d.ts.map +1 -0
- package/dist/record.js +104 -0
- package/dist/record.js.map +1 -0
- package/dist/rendering/messages.d.ts +24 -0
- package/dist/rendering/messages.d.ts.map +1 -0
- package/dist/rendering/messages.js +172 -0
- package/dist/rendering/messages.js.map +1 -0
- package/dist/report.d.ts +43 -0
- package/dist/report.d.ts.map +1 -0
- package/dist/report.js +104 -0
- package/dist/report.js.map +1 -0
- package/dist/resolve.d.ts +6 -0
- package/dist/resolve.d.ts.map +1 -0
- package/dist/resolve.js +5 -0
- package/dist/resolve.js.map +1 -0
- package/dist/sends.d.ts +17 -0
- package/dist/sends.d.ts.map +1 -0
- package/dist/sends.js +97 -0
- package/dist/sends.js.map +1 -0
- package/dist/server/lines.d.ts +23 -0
- package/dist/server/lines.d.ts.map +1 -0
- package/dist/server/lines.js +56 -0
- package/dist/server/lines.js.map +1 -0
- package/dist/server/replies.d.ts +31 -0
- package/dist/server/replies.d.ts.map +1 -0
- package/dist/server/replies.js +95 -0
- package/dist/server/replies.js.map +1 -0
- package/dist/server/server-connection.d.ts +55 -0
- package/dist/server/server-connection.d.ts.map +1 -0
- package/dist/server/server-connection.js +245 -0
- package/dist/server/server-connection.js.map +1 -0
- package/dist/server/server.d.ts +88 -0
- package/dist/server/server.d.ts.map +1 -0
- package/dist/server/server.js +634 -0
- package/dist/server/server.js.map +1 -0
- package/dist/server/start.d.ts +37 -0
- package/dist/server/start.d.ts.map +1 -0
- package/dist/server/start.js +102 -0
- package/dist/server/start.js.map +1 -0
- package/dist/server/subscribe.d.ts +9 -0
- package/dist/server/subscribe.d.ts.map +1 -0
- package/dist/server/subscribe.js +26 -0
- package/dist/server/subscribe.js.map +1 -0
- package/dist/session/adopt.d.ts +22 -0
- package/dist/session/adopt.d.ts.map +1 -0
- package/dist/session/adopt.js +34 -0
- package/dist/session/adopt.js.map +1 -0
- package/dist/session/browser.d.ts +55 -0
- package/dist/session/browser.d.ts.map +1 -0
- package/dist/session/browser.js +321 -0
- package/dist/session/browser.js.map +1 -0
- package/dist/session/handshake.d.ts +57 -0
- package/dist/session/handshake.d.ts.map +1 -0
- package/dist/session/handshake.js +40 -0
- package/dist/session/handshake.js.map +1 -0
- package/dist/session/login.d.ts +20 -0
- package/dist/session/login.d.ts.map +1 -0
- package/dist/session/login.js +66 -0
- package/dist/session/login.js.map +1 -0
- package/dist/session/prompt.d.ts +2 -0
- package/dist/session/prompt.d.ts.map +1 -0
- package/dist/session/prompt.js +2 -0
- package/dist/session/prompt.js.map +1 -0
- package/dist/session/qr-terminal.d.ts +9 -0
- package/dist/session/qr-terminal.d.ts.map +1 -0
- package/dist/session/qr-terminal.js +34 -0
- package/dist/session/qr-terminal.js.map +1 -0
- package/dist/session/store.d.ts +76 -0
- package/dist/session/store.d.ts.map +1 -0
- package/dist/session/store.js +134 -0
- package/dist/session/store.js.map +1 -0
- package/dist/skill.d.ts +7 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +8 -0
- package/dist/skill.js.map +1 -0
- package/dist/spec/check.d.ts +16 -0
- package/dist/spec/check.d.ts.map +1 -0
- package/dist/spec/check.js +44 -0
- package/dist/spec/check.js.map +1 -0
- package/dist/spec/define.d.ts +108 -0
- package/dist/spec/define.d.ts.map +1 -0
- package/dist/spec/define.js +47 -0
- package/dist/spec/define.js.map +1 -0
- package/dist/spec/guards.d.ts +16 -0
- package/dist/spec/guards.d.ts.map +1 -0
- package/dist/spec/guards.js +30 -0
- package/dist/spec/guards.js.map +1 -0
- package/dist/spec/identity.d.ts +57 -0
- package/dist/spec/identity.d.ts.map +1 -0
- package/dist/spec/identity.js +53 -0
- package/dist/spec/identity.js.map +1 -0
- package/dist/spec/index.d.ts +15 -0
- package/dist/spec/index.d.ts.map +1 -0
- package/dist/spec/index.js +84 -0
- package/dist/spec/index.js.map +1 -0
- package/dist/spec/operations/account.d.ts +39 -0
- package/dist/spec/operations/account.d.ts.map +1 -0
- package/dist/spec/operations/account.js +103 -0
- package/dist/spec/operations/account.js.map +1 -0
- package/dist/spec/operations/assets.d.ts +17 -0
- package/dist/spec/operations/assets.d.ts.map +1 -0
- package/dist/spec/operations/assets.js +43 -0
- package/dist/spec/operations/assets.js.map +1 -0
- package/dist/spec/operations/attachments.d.ts +15 -0
- package/dist/spec/operations/attachments.d.ts.map +1 -0
- package/dist/spec/operations/attachments.js +40 -0
- package/dist/spec/operations/attachments.js.map +1 -0
- package/dist/spec/operations/banners.d.ts +7 -0
- package/dist/spec/operations/banners.d.ts.map +1 -0
- package/dist/spec/operations/banners.js +16 -0
- package/dist/spec/operations/banners.js.map +1 -0
- package/dist/spec/operations/calls.d.ts +8 -0
- package/dist/spec/operations/calls.d.ts.map +1 -0
- package/dist/spec/operations/calls.js +25 -0
- package/dist/spec/operations/calls.js.map +1 -0
- package/dist/spec/operations/chats.d.ts +115 -0
- package/dist/spec/operations/chats.d.ts.map +1 -0
- package/dist/spec/operations/chats.js +331 -0
- package/dist/spec/operations/chats.js.map +1 -0
- package/dist/spec/operations/contacts.d.ts +39 -0
- package/dist/spec/operations/contacts.d.ts.map +1 -0
- package/dist/spec/operations/contacts.js +135 -0
- package/dist/spec/operations/contacts.js.map +1 -0
- package/dist/spec/operations/folders.d.ts +31 -0
- package/dist/spec/operations/folders.d.ts.map +1 -0
- package/dist/spec/operations/folders.js +94 -0
- package/dist/spec/operations/folders.js.map +1 -0
- package/dist/spec/operations/login.d.ts +64 -0
- package/dist/spec/operations/login.d.ts.map +1 -0
- package/dist/spec/operations/login.js +105 -0
- package/dist/spec/operations/login.js.map +1 -0
- package/dist/spec/operations/messages.d.ts +142 -0
- package/dist/spec/operations/messages.d.ts.map +1 -0
- package/dist/spec/operations/messages.js +347 -0
- package/dist/spec/operations/messages.js.map +1 -0
- package/dist/spec/operations/session.d.ts +120 -0
- package/dist/spec/operations/session.d.ts.map +1 -0
- package/dist/spec/operations/session.js +202 -0
- package/dist/spec/operations/session.js.map +1 -0
- package/dist/spec/operations/uploads.d.ts +31 -0
- package/dist/spec/operations/uploads.d.ts.map +1 -0
- package/dist/spec/operations/uploads.js +59 -0
- package/dist/spec/operations/uploads.js.map +1 -0
- package/dist/spec/scalars.d.ts +17 -0
- package/dist/spec/scalars.d.ts.map +1 -0
- package/dist/spec/scalars.js +33 -0
- package/dist/spec/scalars.js.map +1 -0
- package/dist/transcribe/index.d.ts +70 -0
- package/dist/transcribe/index.d.ts.map +1 -0
- package/dist/transcribe/index.js +127 -0
- package/dist/transcribe/index.js.map +1 -0
- package/dist/transcribe/install.d.ts +2 -0
- package/dist/transcribe/install.d.ts.map +1 -0
- package/dist/transcribe/install.js +2 -0
- package/dist/transcribe/install.js.map +1 -0
- package/dist/transcribe/models.d.ts +5 -0
- package/dist/transcribe/models.d.ts.map +1 -0
- package/dist/transcribe/models.js +6 -0
- package/dist/transcribe/models.js.map +1 -0
- package/dist/transcribe/speech.d.ts +25 -0
- package/dist/transcribe/speech.d.ts.map +1 -0
- package/dist/transcribe/speech.js +107 -0
- package/dist/transcribe/speech.js.map +1 -0
- package/dist/update.d.ts +31 -0
- package/dist/update.d.ts.map +1 -0
- package/dist/update.js +69 -0
- package/dist/update.js.map +1 -0
- package/dist/upload.d.ts +15 -0
- package/dist/upload.d.ts.map +1 -0
- package/dist/upload.js +97 -0
- package/dist/upload.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +2 -0
- package/dist/version.js.map +1 -0
- package/dist/voice.d.ts +9 -0
- package/dist/voice.d.ts.map +1 -0
- package/dist/voice.js +36 -0
- package/dist/voice.js.map +1 -0
- package/dist/wire-events.d.ts +23 -0
- package/dist/wire-events.d.ts.map +1 -0
- package/dist/wire-events.js +47 -0
- package/dist/wire-events.js.map +1 -0
- package/install/postinstall.mjs +3 -0
- package/install/windows.ps1 +160 -0
- package/package.json +119 -2
- package/skills/max-cli/SKILL.md +518 -0
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { defineOperation } from "../define.js";
|
|
3
|
+
import { id } from "../scalars.js";
|
|
4
|
+
/**
|
|
5
|
+
* What we claim to be, as a shape rather than a constant.
|
|
6
|
+
*
|
|
7
|
+
* Declaring it strictly is the point: every field here is one the official web client sends
|
|
8
|
+
* (`REQUIREMENTS.md` §34), and a field we invented would be refused before it reached the socket.
|
|
9
|
+
*/
|
|
10
|
+
const WebUserAgent = v.strictObject({
|
|
11
|
+
deviceType: v.literal("WEB"),
|
|
12
|
+
pushDeviceType: v.literal("WEBPUSH"),
|
|
13
|
+
locale: v.string(),
|
|
14
|
+
deviceLocale: v.string(),
|
|
15
|
+
osVersion: v.string(),
|
|
16
|
+
deviceName: v.string(),
|
|
17
|
+
headerUserAgent: v.string(),
|
|
18
|
+
isPwa: v.literal(false),
|
|
19
|
+
appVersion: v.string(),
|
|
20
|
+
screen: v.string(),
|
|
21
|
+
timezone: v.string(),
|
|
22
|
+
});
|
|
23
|
+
/**
|
|
24
|
+
* **The keep-alive, which only `max serve` sends** — a one-shot command is gone long before it
|
|
25
|
+
* would matter. `interactive` is whether the tab is visible; ours is never, as LOGIN's is.
|
|
26
|
+
*/
|
|
27
|
+
export const sessionPing = defineOperation({
|
|
28
|
+
name: "session.ping",
|
|
29
|
+
constant: "PING",
|
|
30
|
+
opcode: 1,
|
|
31
|
+
auth: true,
|
|
32
|
+
request: v.strictObject({ interactive: v.boolean() }),
|
|
33
|
+
response: v.looseObject({}),
|
|
34
|
+
guard: null,
|
|
35
|
+
provenance: {
|
|
36
|
+
confidence: "confirmed",
|
|
37
|
+
sources: ["web.max.ru bundle read 2026-09-24: `cmd(1, {interactive})` every 30 s", "PyMax Opcode.PING = 1"],
|
|
38
|
+
notes: "MAX pings too; `Connection` answers those itself when it is live.",
|
|
39
|
+
},
|
|
40
|
+
});
|
|
41
|
+
/**
|
|
42
|
+
* **Telemetry, and only the one event a hidden web tab sends** (`MAX-8`): the chat list shown,
|
|
43
|
+
* 20 s after the tab opened. A one-shot command never sends it — a hidden tab closed that soon
|
|
44
|
+
* sends nothing either. Why exactly this and nothing more: `docs/dev/capture/requirements.md`.
|
|
45
|
+
*
|
|
46
|
+
* The request is strict and literal on purpose: anything beyond this one event claims a person in
|
|
47
|
+
* front of a visible tab, which is a different decision.
|
|
48
|
+
*/
|
|
49
|
+
export const sessionLog = defineOperation({
|
|
50
|
+
name: "session.log",
|
|
51
|
+
constant: "LOG",
|
|
52
|
+
opcode: 5,
|
|
53
|
+
auth: true,
|
|
54
|
+
request: v.strictObject({
|
|
55
|
+
events: v.array(v.strictObject({
|
|
56
|
+
type: v.literal("NAV"),
|
|
57
|
+
userId: id(),
|
|
58
|
+
time: v.number(),
|
|
59
|
+
sessionId: v.number(),
|
|
60
|
+
event: v.literal("GO"),
|
|
61
|
+
params: v.strictObject({
|
|
62
|
+
action_id: v.literal(1),
|
|
63
|
+
screen_to: v.literal(150),
|
|
64
|
+
prev_time: v.literal(0),
|
|
65
|
+
source_id: id(),
|
|
66
|
+
}),
|
|
67
|
+
})),
|
|
68
|
+
}),
|
|
69
|
+
response: v.looseObject({}),
|
|
70
|
+
guard: null,
|
|
71
|
+
provenance: {
|
|
72
|
+
confidence: "observed",
|
|
73
|
+
sources: [
|
|
74
|
+
"web.max.ru frames captured 2026-09-25 (docs/dev/capture/2026-09-25-web-tab.md): a hidden tab's only event, answered with an empty body",
|
|
75
|
+
"ids wrapped in extension 1 and times plain: inferred from the frame's unpacked size, 144 bytes, which only that encoding gives",
|
|
76
|
+
],
|
|
77
|
+
},
|
|
78
|
+
});
|
|
79
|
+
export const sessionInit = defineOperation({
|
|
80
|
+
name: "session.init",
|
|
81
|
+
constant: "SESSION_INIT",
|
|
82
|
+
opcode: 6,
|
|
83
|
+
auth: false,
|
|
84
|
+
request: v.strictObject({ userAgent: WebUserAgent, deviceId: v.string() }),
|
|
85
|
+
response: v.looseObject({}),
|
|
86
|
+
guard: null,
|
|
87
|
+
provenance: {
|
|
88
|
+
confidence: "measured",
|
|
89
|
+
sources: ["measured against MAX 2026-09-19", "max-api-docs/protocol/auth.md", "tsmax createWebAgent"],
|
|
90
|
+
notes: "MAX answers nothing before this and LOGIN, in that order.",
|
|
91
|
+
},
|
|
92
|
+
});
|
|
93
|
+
export const sessionLogin = defineOperation({
|
|
94
|
+
name: "session.login",
|
|
95
|
+
constant: "LOGIN",
|
|
96
|
+
opcode: 19,
|
|
97
|
+
auth: false,
|
|
98
|
+
request: v.strictObject({
|
|
99
|
+
token: v.string(),
|
|
100
|
+
// 100 works and 200 comes back `'chatsCount' out of range`; refusing locally beats a round
|
|
101
|
+
// trip that only tells us what we already know. The real boundary is `PROTO-3`.
|
|
102
|
+
chatsCount: v.pipe(v.number(), v.integer(), v.minValue(1), v.maxValue(100)),
|
|
103
|
+
/**
|
|
104
|
+
* False, always: we are a script reading, and claiming a human is present is the small lie that
|
|
105
|
+
* becomes a side effect nobody can trace (`RES-5`). **Correction 2026-09-25:** this said the web
|
|
106
|
+
* client sends true; its LOGIN on a live socket sent `false` too — `true` goes in its pings.
|
|
107
|
+
*/
|
|
108
|
+
interactive: v.literal(false),
|
|
109
|
+
/**
|
|
110
|
+
* **Delta markers, not flags** — measured 2026-09-20. Each is a moment in time, and MAX
|
|
111
|
+
* returns only what changed in that collection since it. `0` means "everything", which is what
|
|
112
|
+
* `src/session/handshake.ts` sends and is why every command re-fetches the whole list — except
|
|
113
|
+
* a `max serve` re-login, which sends its newest chat event in `chatsSync` (`MAX-51`).
|
|
114
|
+
*
|
|
115
|
+
* The measurement, on a real account: `0` returned 6 contacts and 25 chats; the `time` the
|
|
116
|
+
* previous login answered with returned 0 and 0; a week earlier returned 1 and 11. The last of
|
|
117
|
+
* those is the one that matters — without it, "nothing came back" would equally have meant
|
|
118
|
+
* "any non-zero value suppresses the collection".
|
|
119
|
+
*
|
|
120
|
+
* Feeding them back is `MAX-10`, and it needs somewhere to keep the marker per profile.
|
|
121
|
+
*/
|
|
122
|
+
chatsSync: v.number(),
|
|
123
|
+
contactsSync: v.number(),
|
|
124
|
+
presenceSync: v.number(),
|
|
125
|
+
draftsSync: v.number(),
|
|
126
|
+
/** Only when the same connection's owner logs in again — `resume` in `src/session/handshake.ts` (`MAX-51`). */
|
|
127
|
+
lastLogin: v.optional(v.number()),
|
|
128
|
+
configHash: v.optional(v.string()),
|
|
129
|
+
}),
|
|
130
|
+
response: v.looseObject({
|
|
131
|
+
profile: v.optional(v.looseObject({})),
|
|
132
|
+
chats: v.optional(v.array(v.looseObject({}))),
|
|
133
|
+
contacts: v.optional(v.array(v.looseObject({}))),
|
|
134
|
+
/**
|
|
135
|
+
* ⚠ **Shape unknown, and this field is why the response check exists.**
|
|
136
|
+
*
|
|
137
|
+
* It was declared as an array here and MAX sends an **object** — found 2026-09-20 by routing
|
|
138
|
+
* the handshake through the checked path. Nothing broke, because the reader is tolerant; what
|
|
139
|
+
* happened instead is that every message the login carries has been silently discarded since
|
|
140
|
+
* the specification was written, after we paid a request for them.
|
|
141
|
+
*
|
|
142
|
+
* The reference documents no top-level `messages` on this response at all — each chat carries
|
|
143
|
+
* its own `lastMessage` (`max-api-docs/protocol/chats.md:61`). So the array was **invented**,
|
|
144
|
+
* not misread, which is the failure `REQUIREMENTS.md` §10 exists to prevent: an unsourced
|
|
145
|
+
* shape stated with the same confidence as a measured one.
|
|
146
|
+
*
|
|
147
|
+
* Left as `unknown` until somebody looks (`PROTO-6`). `pnpm probe:ids` reports its type and key count.
|
|
148
|
+
*/
|
|
149
|
+
messages: v.optional(v.unknown()),
|
|
150
|
+
/**
|
|
151
|
+
* **A replacement for a credential that has aged** — measured on the real account 2026-09-22
|
|
152
|
+
* (`pnpm probe:token`). Logging in with a token pasted months earlier answers with a different
|
|
153
|
+
* one; logging in with *that* one answers with the same one back. So it is an exchange that
|
|
154
|
+
* happens once, not a rotation on every login.
|
|
155
|
+
*
|
|
156
|
+
* It was undeclared until then, so the exchange happened on every login and the client threw
|
|
157
|
+
* the result away, leaving the profile on whatever was pasted in months ago (`MAX-11`,
|
|
158
|
+
* `NEED-106`). The old token goes on working, which is why this is hygiene rather than repair.
|
|
159
|
+
* `NEED-8` had asserted the rotation in 2026-09-18 on the strength of `tsmax/src/app.ts:99` —
|
|
160
|
+
* somebody else's client — which is a claim; this is the measurement.
|
|
161
|
+
*
|
|
162
|
+
* ⚠ **It is a credential.** Nothing may print it, log it or put it in a fixture. `MaxClient`
|
|
163
|
+
* writes it to the keyring and never returns it.
|
|
164
|
+
*/
|
|
165
|
+
token: v.optional(v.string()),
|
|
166
|
+
presence: v.optional(v.unknown()),
|
|
167
|
+
time: v.optional(v.number()),
|
|
168
|
+
chatMarker: v.optional(v.unknown()),
|
|
169
|
+
config: v.optional(v.unknown()),
|
|
170
|
+
videoChatHistory: v.optional(v.unknown()),
|
|
171
|
+
}),
|
|
172
|
+
guard: null,
|
|
173
|
+
provenance: {
|
|
174
|
+
confidence: "measured",
|
|
175
|
+
sources: [
|
|
176
|
+
"measured against MAX 2026-09-19",
|
|
177
|
+
"measured against MAX 2026-09-20 (`messages` is an object)",
|
|
178
|
+
"measured against MAX 2026-09-22 (`token` replaces a stale credential once, then repeats)",
|
|
179
|
+
],
|
|
180
|
+
notes: "Unusually generous: the answer carries the profile, chats, contacts and recent messages, so `me` and `chats` need no further request.",
|
|
181
|
+
},
|
|
182
|
+
});
|
|
183
|
+
export const sessionLogout = defineOperation({
|
|
184
|
+
name: "session.logout",
|
|
185
|
+
constant: "LOGOUT",
|
|
186
|
+
opcode: 20,
|
|
187
|
+
auth: true,
|
|
188
|
+
/** The web client adds its push subscription's `pushToken`; a session without one has nothing to add. */
|
|
189
|
+
request: v.strictObject({}),
|
|
190
|
+
response: v.looseObject({}),
|
|
191
|
+
// Ends this session and nobody else's — though a token copied from a browser tab is that tab's session.
|
|
192
|
+
guard: null,
|
|
193
|
+
provenance: {
|
|
194
|
+
confidence: "confirmed",
|
|
195
|
+
sources: [
|
|
196
|
+
"web.max.ru chunk `_app/immutable/chunks/Cdo8IOYe.js`, read 2026-10-08: `send(20, {pushToken})`",
|
|
197
|
+
"PyMax 53103f0 `logout` and rumax a9ecaf3 `logout`: `{}`",
|
|
198
|
+
"max-api-docs/protocol/auth.md",
|
|
199
|
+
],
|
|
200
|
+
},
|
|
201
|
+
});
|
|
202
|
+
//# sourceMappingURL=session.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"session.js","sourceRoot":"","sources":["../../../src/spec/operations/session.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
export declare const uploadsPhoto: import("../define.js").Operation<v.StrictObjectSchema<{
|
|
3
|
+
readonly count: v.LiteralSchema<1, undefined>;
|
|
4
|
+
readonly type: v.LiteralSchema<0, undefined>;
|
|
5
|
+
readonly uploaderType: v.LiteralSchema<0, undefined>;
|
|
6
|
+
readonly profile: v.BooleanSchema<undefined>;
|
|
7
|
+
}, undefined>, v.LooseObjectSchema<{
|
|
8
|
+
readonly url: v.OptionalSchema<v.StringSchema<undefined>, undefined>;
|
|
9
|
+
}, undefined>>;
|
|
10
|
+
export declare const uploadsFile: import("../define.js").Operation<v.StrictObjectSchema<{
|
|
11
|
+
readonly count: v.LiteralSchema<1, undefined>;
|
|
12
|
+
readonly type: v.LiteralSchema<0, undefined>;
|
|
13
|
+
readonly uploaderType: v.LiteralSchema<0, undefined>;
|
|
14
|
+
readonly profile: v.LiteralSchema<false, undefined>;
|
|
15
|
+
}, undefined>, v.LooseObjectSchema<{
|
|
16
|
+
readonly info: v.OptionalSchema<v.ArraySchema<v.LooseObjectSchema<{}, undefined>, undefined>, undefined>;
|
|
17
|
+
}, undefined>>;
|
|
18
|
+
export declare const uploadsVideo: import("../define.js").Operation<v.UnionSchema<[v.StrictObjectSchema<{
|
|
19
|
+
readonly count: v.LiteralSchema<1, undefined>;
|
|
20
|
+
readonly type: v.LiteralSchema<0, undefined>;
|
|
21
|
+
readonly uploaderType: v.LiteralSchema<0, undefined>;
|
|
22
|
+
readonly profile: v.LiteralSchema<false, undefined>;
|
|
23
|
+
}, undefined>, v.StrictObjectSchema<{
|
|
24
|
+
readonly count: v.LiteralSchema<1, undefined>;
|
|
25
|
+
readonly type: v.LiteralSchema<2, undefined>;
|
|
26
|
+
readonly uploaderType: v.LiteralSchema<1, undefined>;
|
|
27
|
+
readonly profile: v.LiteralSchema<false, undefined>;
|
|
28
|
+
}, undefined>], undefined>, v.LooseObjectSchema<{
|
|
29
|
+
readonly info: v.OptionalSchema<v.ArraySchema<v.LooseObjectSchema<{}, undefined>, undefined>, undefined>;
|
|
30
|
+
}, undefined>>;
|
|
31
|
+
//# sourceMappingURL=uploads.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.d.ts","sourceRoot":"","sources":["../../../src/spec/operations/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAU5B,eAAO,MAAM,YAAY;;;;;;;cAevB,CAAA;AAEF,eAAO,MAAM,WAAW;;;;;;;cActB,CAAA;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;cAqBvB,CAAA"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
import { defineOperation } from "../define.js";
|
|
3
|
+
const uploadRequest = v.strictObject({
|
|
4
|
+
count: v.literal(1),
|
|
5
|
+
type: v.literal(0),
|
|
6
|
+
uploaderType: v.literal(0),
|
|
7
|
+
profile: v.literal(false),
|
|
8
|
+
});
|
|
9
|
+
export const uploadsPhoto = defineOperation({
|
|
10
|
+
name: "uploads.photo",
|
|
11
|
+
constant: "PHOTO_UPLOAD",
|
|
12
|
+
opcode: 80,
|
|
13
|
+
auth: true,
|
|
14
|
+
/** `profile: true` for a profile photo (2026-09-27, `pnpm probe:profile`). */
|
|
15
|
+
request: v.strictObject({ ...uploadRequest.entries, profile: v.boolean() }),
|
|
16
|
+
response: v.looseObject({ url: v.optional(v.string()) }),
|
|
17
|
+
guard: null,
|
|
18
|
+
provenance: {
|
|
19
|
+
confidence: "measured",
|
|
20
|
+
sources: ["measured against MAX 2026-09-24 in Saved messages (`pnpm probe:upload`)", "PyMax upload_photo"],
|
|
21
|
+
notes: 'Answers `{url}`. A multipart POST of the image, field `file`, answers `{photos: {<key>: {token}}}`; the message attaches `{_type: "PHOTO", photoToken}`.',
|
|
22
|
+
},
|
|
23
|
+
});
|
|
24
|
+
export const uploadsFile = defineOperation({
|
|
25
|
+
name: "uploads.file",
|
|
26
|
+
constant: "FILE_UPLOAD",
|
|
27
|
+
opcode: 87,
|
|
28
|
+
auth: true,
|
|
29
|
+
request: uploadRequest,
|
|
30
|
+
response: v.looseObject({ info: v.optional(v.array(v.looseObject({}))) }),
|
|
31
|
+
guard: null,
|
|
32
|
+
provenance: {
|
|
33
|
+
confidence: "measured",
|
|
34
|
+
sources: ["measured against MAX 2026-09-24 in Saved messages (`pnpm probe:upload`)", "PyMax upload_file"],
|
|
35
|
+
notes: 'Answers `{info: [{url, fileId, token}]}`. The bytes are POSTed raw with `Content-Range: 0-<end>/<size>`; MAX then pushes 136 `{fileId}`, and a send before that is refused `attachment.not.ready`. The message attaches `{_type: "FILE", fileId}`.',
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
export const uploadsVideo = defineOperation({
|
|
39
|
+
name: "uploads.video",
|
|
40
|
+
constant: "VIDEO_UPLOAD",
|
|
41
|
+
opcode: 82,
|
|
42
|
+
auth: true,
|
|
43
|
+
request: v.union([
|
|
44
|
+
v.strictObject({ count: v.literal(1), type: v.literal(0), uploaderType: v.literal(0), profile: v.literal(false) }),
|
|
45
|
+
v.strictObject({ count: v.literal(1), type: v.literal(2), uploaderType: v.literal(1), profile: v.literal(false) }),
|
|
46
|
+
]),
|
|
47
|
+
response: v.looseObject({ info: v.optional(v.array(v.looseObject({}))) }),
|
|
48
|
+
guard: null,
|
|
49
|
+
provenance: {
|
|
50
|
+
confidence: "measured",
|
|
51
|
+
sources: [
|
|
52
|
+
"measured against MAX 2026-09-27 in Saved messages (`pnpm probe:video`, `pnpm probe:voice`)",
|
|
53
|
+
"PyMax 2.4.1 upload_video",
|
|
54
|
+
"web.max.ru bundle (voice)",
|
|
55
|
+
],
|
|
56
|
+
notes: 'Answers `{info: [{url, videoId, token}]}`. `type: 0` is a video; `type: 2, uploaderType: 1` an Ogg Opus voice message. The bytes are POSTed raw with `Content-Range: bytes 0-<end>/<size>`; a send straight after the upload was accepted, before push 136 `{videoId}`. A video attaches `{_type: "VIDEO", videoId, token, videoType: 0}`, a voice message `{_type: "AUDIO", audioId: <videoId>, duration, wave, token}` — `duration` in ms, `wave` 80 bytes of 0–127.',
|
|
57
|
+
},
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=uploads.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"uploads.js","sourceRoot":"","sources":["../../../src/spec/operations/uploads.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAC5B,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAE9C,MAAM,aAAa,GAAG,CAAC,CAAC,YAAY,CAAC;IACnC,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IACnB,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAClB,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;IAC1B,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC;CAC1B,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,8EAA8E;IAC9E,OAAO,EAAE,CAAC,CAAC,YAAY,CAAC,EAAE,GAAG,aAAa,CAAC,OAAO,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC;IAC3E,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,CAAC;IACxD,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yEAAyE,EAAE,oBAAoB,CAAC;QAC1G,KAAK,EACH,0JAA0J;KAC7J;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,WAAW,GAAG,eAAe,CAAC;IACzC,IAAI,EAAE,cAAc;IACpB,QAAQ,EAAE,aAAa;IACvB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,aAAa;IACtB,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE,CAAC,yEAAyE,EAAE,mBAAmB,CAAC;QACzG,KAAK,EACH,oPAAoP;KACvP;CACF,CAAC,CAAA;AAEF,MAAM,CAAC,MAAM,YAAY,GAAG,eAAe,CAAC;IAC1C,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,cAAc;IACxB,MAAM,EAAE,EAAE;IACV,IAAI,EAAE,IAAI;IACV,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC;QACf,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QAClH,CAAC,CAAC,YAAY,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;KACnH,CAAC;IACF,QAAQ,EAAE,CAAC,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IACzE,KAAK,EAAE,IAAI;IACX,UAAU,EAAE;QACV,UAAU,EAAE,UAAU;QACtB,OAAO,EAAE;YACP,4FAA4F;YAC5F,0BAA0B;YAC1B,2BAA2B;SAC5B;QACD,KAAK,EACH,wcAAwc;KAC3c;CACF,CAAC,CAAA"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
/** `BigInt` also reads `0x1f`, `0b1` and `" 7 "` — each a different message than the one typed. */
|
|
3
|
+
export declare const toWireId: (value: string) => bigint;
|
|
4
|
+
/**
|
|
5
|
+
* An id in a request we build: a domain string in, the wire form out.
|
|
6
|
+
*
|
|
7
|
+
* The schema is the encoder as well as the check, so there is no second place where a conversion
|
|
8
|
+
* could be forgotten — `v.parse(request, { chatId: "0" })` yields `{ chatId: 0n }`.
|
|
9
|
+
*/
|
|
10
|
+
export declare const id: () => v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "an id is a whole number written as a string">, v.TransformAction<string, bigint>]>;
|
|
11
|
+
/**
|
|
12
|
+
* An id in an answer we read. **Not the same as `id()` and not a transform**: a response schema
|
|
13
|
+
* reports, it does not convert (§4.6 of the plan), and the conversion to our own string form is
|
|
14
|
+
* the domain mapper's job.
|
|
15
|
+
*/
|
|
16
|
+
export declare const wireId: () => v.UnionSchema<[v.StringSchema<undefined>, v.NumberSchema<undefined>, v.BigintSchema<undefined>], undefined>;
|
|
17
|
+
//# sourceMappingURL=scalars.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalars.d.ts","sourceRoot":"","sources":["../../src/spec/scalars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAgB5B,mGAAmG;AACnG,eAAO,MAAM,QAAQ,UAAW,MAAM,KAAG,MAGxC,CAAA;AAED;;;;;GAKG;AACH,eAAO,MAAM,EAAE,uKACkG,CAAA;AAEjH;;;;GAIG;AACH,eAAO,MAAM,MAAM,mHAAsD,CAAA"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import * as v from "valibot";
|
|
2
|
+
/**
|
|
3
|
+
* The two directions an id travels, and why they are not the same schema.
|
|
4
|
+
*
|
|
5
|
+
* MAX ids are 64-bit. `asId` in `../protocol/frame.ts` is the read direction: whatever arrived —
|
|
6
|
+
* a number when small, a bigint when not — leaves as a string, because an id is an identifier and
|
|
7
|
+
* never arithmetic. The write direction did not exist, and `Number(id)` was standing in for it:
|
|
8
|
+
* `Number("7268926000000000001")` is `7268926000000000000`, which is a different chat.
|
|
9
|
+
*
|
|
10
|
+
* The frame codec sends a `bigint` as a 64-bit integer wrapped in MessagePack extension 1, the way
|
|
11
|
+
* web.max.ru sends an id, so every digit reaches MAX (`src/protocol/frame.ts`).
|
|
12
|
+
*/
|
|
13
|
+
const WHOLE_NUMBER = /^-?\d+$/;
|
|
14
|
+
/** `BigInt` also reads `0x1f`, `0b1` and `" 7 "` — each a different message than the one typed. */
|
|
15
|
+
export const toWireId = (value) => {
|
|
16
|
+
if (!WHOLE_NUMBER.test(value))
|
|
17
|
+
throw new TypeError("an id is a whole number written as a string");
|
|
18
|
+
return BigInt(value);
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* An id in a request we build: a domain string in, the wire form out.
|
|
22
|
+
*
|
|
23
|
+
* The schema is the encoder as well as the check, so there is no second place where a conversion
|
|
24
|
+
* could be forgotten — `v.parse(request, { chatId: "0" })` yields `{ chatId: 0n }`.
|
|
25
|
+
*/
|
|
26
|
+
export const id = () => v.pipe(v.string(), v.regex(WHOLE_NUMBER, "an id is a whole number written as a string"), v.transform(toWireId));
|
|
27
|
+
/**
|
|
28
|
+
* An id in an answer we read. **Not the same as `id()` and not a transform**: a response schema
|
|
29
|
+
* reports, it does not convert (§4.6 of the plan), and the conversion to our own string form is
|
|
30
|
+
* the domain mapper's job.
|
|
31
|
+
*/
|
|
32
|
+
export const wireId = () => v.union([v.string(), v.number(), v.bigint()]);
|
|
33
|
+
//# sourceMappingURL=scalars.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scalars.js","sourceRoot":"","sources":["../../src/spec/scalars.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,SAAS,CAAA;AAE5B;;;;;;;;;;GAUG;AAEH,MAAM,YAAY,GAAG,SAAS,CAAA;AAE9B,mGAAmG;AACnG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,KAAa,EAAU,EAAE;IAChD,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC;QAAE,MAAM,IAAI,SAAS,CAAC,6CAA6C,CAAC,CAAA;IACjG,OAAO,MAAM,CAAC,KAAK,CAAC,CAAA;AACtB,CAAC,CAAA;AAED;;;;;GAKG;AACH,MAAM,CAAC,MAAM,EAAE,GAAG,GAAG,EAAE,CACrB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,YAAY,EAAE,6CAA6C,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAA;AAEjH;;;;GAIG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,CAAA"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import type { MaxClient } from "../client.js";
|
|
3
|
+
import type { AttachmentLink, Id, Message } from "../domain/models.js";
|
|
4
|
+
import type { MaxRecord } from "../record.js";
|
|
5
|
+
import { type SpeechModel } from "./models.js";
|
|
6
|
+
import { type Recognizer } from "./speech.js";
|
|
7
|
+
export interface Transcript {
|
|
8
|
+
chatId: Id;
|
|
9
|
+
messageId: Id;
|
|
10
|
+
text: string;
|
|
11
|
+
model: string;
|
|
12
|
+
/** Length of the recording; `null` when the text came from the cache. */
|
|
13
|
+
seconds: number | null;
|
|
14
|
+
cached: boolean;
|
|
15
|
+
}
|
|
16
|
+
export interface TranscribeOptions {
|
|
17
|
+
model: SpeechModel;
|
|
18
|
+
directory: string;
|
|
19
|
+
record?: Pick<MaxRecord, "transcript" | "keepTranscript"> | undefined;
|
|
20
|
+
/** Called once the audio is in hand, so the connection closes before the long part begins. */
|
|
21
|
+
release?: () => Promise<void>;
|
|
22
|
+
fetchAudio?: (link: AttachmentLink) => Promise<Uint8Array>;
|
|
23
|
+
open?: (model: SpeechModel, directory: string) => Recognizer;
|
|
24
|
+
}
|
|
25
|
+
export declare const notDownloaded: (model: SpeechModel) => CliError;
|
|
26
|
+
export declare const openInstalled: (model: SpeechModel, directory: string) => Recognizer;
|
|
27
|
+
/**
|
|
28
|
+
* One voice message to text, on this machine. A text already heard by the same model comes from
|
|
29
|
+
* the shared store, with no connection and no model loaded.
|
|
30
|
+
*
|
|
31
|
+
* ⚠ **The model is never downloaded from here** (`NEED-231`): an agent calling this through MCP must
|
|
32
|
+
* not start a 230–670 MB download. The refusal names the command that does it.
|
|
33
|
+
*/
|
|
34
|
+
export declare const transcribe: (client: MaxClient, chatId: Id, messageId: Id, { model, directory, record, release, fetchAudio, open }: TranscribeOptions) => Promise<Transcript>;
|
|
35
|
+
export interface Voice {
|
|
36
|
+
chatId: Id;
|
|
37
|
+
messageId: Id;
|
|
38
|
+
}
|
|
39
|
+
export declare const voiceKey: ({ chatId, messageId }: Voice) => string;
|
|
40
|
+
export interface Heard {
|
|
41
|
+
/** By `voiceKey`: the text of every voice message heard now or kept from before. */
|
|
42
|
+
transcripts: Map<string, string>;
|
|
43
|
+
unheard: Voice[];
|
|
44
|
+
/** Why some were not heard — the first reason; the messages are still worth showing. */
|
|
45
|
+
problem?: string;
|
|
46
|
+
}
|
|
47
|
+
export interface HearAllOptions extends Omit<TranscribeOptions, "model"> {
|
|
48
|
+
/** Without one, only texts already kept are used. */
|
|
49
|
+
model?: SpeechModel | undefined;
|
|
50
|
+
/** Told how many are about to be heard, just before the long part. */
|
|
51
|
+
progress?: (count: number) => void;
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Many voice messages at once — a page, an inbox, a review. Kept texts first, whichever model heard
|
|
55
|
+
* them. Then every recording still needed is fetched **before** the connection is released and the
|
|
56
|
+
* model runs: recognition is synchronous for up to a minute each, and a socket that answers no ping
|
|
57
|
+
* that long is a client MAX can tell apart. One recognizer serves the whole run.
|
|
58
|
+
*/
|
|
59
|
+
export declare const hearAll: (client: MaxClient, voices: readonly Voice[], { model, directory, record, release, fetchAudio, open, progress }: HearAllOptions) => Promise<Heard>;
|
|
60
|
+
export declare const isVoice: (message: Message) => boolean;
|
|
61
|
+
/** A message with its transcript, when there is one; others pass through unchanged. */
|
|
62
|
+
export declare const withTranscript: <T extends Pick<Message, "id" | "chatId">>(message: T, heard: Heard) => T & {
|
|
63
|
+
transcript?: string;
|
|
64
|
+
};
|
|
65
|
+
/** How a person sees one: the text MAX has, then what was heard. */
|
|
66
|
+
export declare const spoken: <T extends Message & {
|
|
67
|
+
transcript?: string;
|
|
68
|
+
}>({ transcript, ...message }: T) => Omit<T, "transcript">;
|
|
69
|
+
export declare const hearingLine: (count: number, model: string) => string;
|
|
70
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/transcribe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import { fetchBytes, LARGEST_VOICE } from "../download.js";
|
|
3
|
+
import { installedBytes, isInstalled, megabytes, modelPath, vadPath } from "./install.js";
|
|
4
|
+
import { MODELS, VAD } from "./models.js";
|
|
5
|
+
import { decodeOgg, openRecognizer, toModelRate } from "./speech.js";
|
|
6
|
+
export const notDownloaded = (model) => new CliError("not_found", [
|
|
7
|
+
`the speech model ${model.id} (${model.languages}) is not downloaded — ` +
|
|
8
|
+
`\`max models audio download ${model.id}\` fetches it (${sizeOf(model)}, once)`,
|
|
9
|
+
...MODELS.filter((other) => other.id !== model.id).map((other) => ` or ${other.id}: ${other.languages}, ${sizeOf(other)}`),
|
|
10
|
+
].join("\n"));
|
|
11
|
+
const sizeOf = (model) => megabytes(installedBytes(model) + VAD.bytes);
|
|
12
|
+
export const openInstalled = (model, directory) => openRecognizer(model, modelPath(directory, model), vadPath(directory));
|
|
13
|
+
/** The recording of one voice message, fetched while the connection is still open. */
|
|
14
|
+
const fetchVoice = async (client, chatId, messageId, fetchAudio) => {
|
|
15
|
+
const { links } = await client.messages.links(chatId, messageId);
|
|
16
|
+
const voice = links.find((link) => link.kind === "audio");
|
|
17
|
+
if (!voice)
|
|
18
|
+
throw new CliError("validation_error", `message ${messageId} has no voice recording to transcribe`);
|
|
19
|
+
const bytes = await fetchAudio(voice);
|
|
20
|
+
if (bytes.length > LARGEST_VOICE) {
|
|
21
|
+
throw new CliError("validation_error", `the recording is larger than ${LARGEST_VOICE / 1024 ** 2} MiB — not decoded`);
|
|
22
|
+
}
|
|
23
|
+
return bytes;
|
|
24
|
+
};
|
|
25
|
+
const hear = async (bytes, recognizer) => {
|
|
26
|
+
const { samples, rate } = await decodeOgg(bytes).catch((error) => {
|
|
27
|
+
throw new CliError("invalid_response", `the recording could not be read as Ogg Opus: ${error.message}`);
|
|
28
|
+
});
|
|
29
|
+
return { text: recognizer.recognize(toModelRate(samples, rate)), seconds: Math.round(samples.length / rate) };
|
|
30
|
+
};
|
|
31
|
+
/**
|
|
32
|
+
* One voice message to text, on this machine. A text already heard by the same model comes from
|
|
33
|
+
* the shared store, with no connection and no model loaded.
|
|
34
|
+
*
|
|
35
|
+
* ⚠ **The model is never downloaded from here** (`NEED-231`): an agent calling this through MCP must
|
|
36
|
+
* not start a 230–670 MB download. The refusal names the command that does it.
|
|
37
|
+
*/
|
|
38
|
+
export const transcribe = async (client, chatId, messageId, { model, directory, record, release, fetchAudio = fetchBytes, open = openInstalled }) => {
|
|
39
|
+
const kept = await record?.transcript(chatId, messageId);
|
|
40
|
+
if (kept && kept.source === model.id) {
|
|
41
|
+
return { chatId, messageId, text: kept.text, model: model.id, seconds: null, cached: true };
|
|
42
|
+
}
|
|
43
|
+
if (!isInstalled(model, directory))
|
|
44
|
+
throw notDownloaded(model);
|
|
45
|
+
const bytes = await fetchVoice(client, chatId, messageId, fetchAudio);
|
|
46
|
+
await release?.();
|
|
47
|
+
const recognizer = open(model, directory);
|
|
48
|
+
try {
|
|
49
|
+
const { text, seconds } = await hear(bytes, recognizer);
|
|
50
|
+
await record?.keepTranscript(chatId, messageId, text, model.id);
|
|
51
|
+
return { chatId, messageId, text, model: model.id, seconds, cached: false };
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
recognizer.free();
|
|
55
|
+
}
|
|
56
|
+
};
|
|
57
|
+
export const voiceKey = ({ chatId, messageId }) => `${chatId}/${messageId}`;
|
|
58
|
+
/**
|
|
59
|
+
* Many voice messages at once — a page, an inbox, a review. Kept texts first, whichever model heard
|
|
60
|
+
* them. Then every recording still needed is fetched **before** the connection is released and the
|
|
61
|
+
* model runs: recognition is synchronous for up to a minute each, and a socket that answers no ping
|
|
62
|
+
* that long is a client MAX can tell apart. One recognizer serves the whole run.
|
|
63
|
+
*/
|
|
64
|
+
export const hearAll = async (client, voices, { model, directory, record, release, fetchAudio = fetchBytes, open = openInstalled, progress }) => {
|
|
65
|
+
const transcripts = new Map();
|
|
66
|
+
const unheard = [];
|
|
67
|
+
let problem;
|
|
68
|
+
const failed = (voice, error) => {
|
|
69
|
+
problem ??= error instanceof Error ? error.message : String(error);
|
|
70
|
+
unheard.push(voice);
|
|
71
|
+
};
|
|
72
|
+
const needed = [];
|
|
73
|
+
for (const voice of voices) {
|
|
74
|
+
const kept = await record?.transcript(voice.chatId, voice.messageId);
|
|
75
|
+
if (kept)
|
|
76
|
+
transcripts.set(voiceKey(voice), kept.text);
|
|
77
|
+
else
|
|
78
|
+
needed.push(voice);
|
|
79
|
+
}
|
|
80
|
+
if (needed.length === 0 || !model)
|
|
81
|
+
return { transcripts, unheard: needed };
|
|
82
|
+
if (!isInstalled(model, directory)) {
|
|
83
|
+
return { transcripts, unheard: needed, problem: notDownloaded(model).message };
|
|
84
|
+
}
|
|
85
|
+
const fetched = [];
|
|
86
|
+
for (const voice of needed) {
|
|
87
|
+
try {
|
|
88
|
+
fetched.push({ voice, bytes: await fetchVoice(client, voice.chatId, voice.messageId, fetchAudio) });
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
failed(voice, error);
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
if (fetched.length > 0) {
|
|
95
|
+
await release?.();
|
|
96
|
+
progress?.(fetched.length);
|
|
97
|
+
const recognizer = open(model, directory);
|
|
98
|
+
try {
|
|
99
|
+
for (const { voice, bytes } of fetched) {
|
|
100
|
+
try {
|
|
101
|
+
const { text } = await hear(bytes, recognizer);
|
|
102
|
+
await record?.keepTranscript(voice.chatId, voice.messageId, text, model.id);
|
|
103
|
+
transcripts.set(voiceKey(voice), text);
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
failed(voice, error);
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
recognizer.free();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
return { transcripts, unheard, ...(problem === undefined ? {} : { problem }) };
|
|
115
|
+
};
|
|
116
|
+
export const isVoice = (message) => message.attachments.some(({ kind }) => kind === "audio");
|
|
117
|
+
/** A message with its transcript, when there is one; others pass through unchanged. */
|
|
118
|
+
export const withTranscript = (message, heard) => {
|
|
119
|
+
const transcript = heard.transcripts.get(voiceKey({ chatId: message.chatId, messageId: message.id }));
|
|
120
|
+
return transcript === undefined ? message : { ...message, transcript };
|
|
121
|
+
};
|
|
122
|
+
/** How a person sees one: the text MAX has, then what was heard. */
|
|
123
|
+
export const spoken = ({ transcript, ...message }) => transcript === undefined
|
|
124
|
+
? message
|
|
125
|
+
: { ...message, text: [message.text, `🎤 ${transcript}`].filter(Boolean).join("\n") };
|
|
126
|
+
export const hearingLine = (count, model) => `hearing ${count} voice message${count === 1 ? "" : "s"} with ${model} on this machine`;
|
|
127
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/transcribe/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/transcribe/install.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,KAAK,EACV,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,OAAO,GACR,MAAM,+BAA+B,CAAA"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../../src/transcribe/install.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,OAAO,EACP,cAAc,EACd,WAAW,EACX,SAAS,EACT,SAAS,EACT,eAAe,EACf,OAAO,GACR,MAAM,+BAA+B,CAAA"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { findModel, type ModelFile, type SpeechModel, speechModel, VAD } from "@wirecat/cli-messaging/speech";
|
|
2
|
+
export declare const DEFAULT_MODEL = "gigaam-v3";
|
|
3
|
+
export declare const SPEECH_MODELS: string[];
|
|
4
|
+
export declare const MODELS: import("@wirecat/cli-messaging/speech").SpeechModel[];
|
|
5
|
+
//# sourceMappingURL=models.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.d.ts","sourceRoot":"","sources":["../../src/transcribe/models.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,SAAS,EAAE,KAAK,SAAS,EAAE,KAAK,WAAW,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAA;AAE7G,eAAO,MAAM,aAAa,cAAc,CAAA;AACxC,eAAO,MAAM,aAAa,UAAkD,CAAA;AAC5E,eAAO,MAAM,MAAM,uDAA+B,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { orderedModels } from "@wirecat/cli-messaging/speech";
|
|
2
|
+
export { findModel, speechModel, VAD } from "@wirecat/cli-messaging/speech";
|
|
3
|
+
export const DEFAULT_MODEL = "gigaam-v3";
|
|
4
|
+
export const SPEECH_MODELS = [DEFAULT_MODEL, "gigaam-v3-ctc", "parakeet-v3"];
|
|
5
|
+
export const MODELS = orderedModels(SPEECH_MODELS);
|
|
6
|
+
//# sourceMappingURL=models.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"models.js","sourceRoot":"","sources":["../../src/transcribe/models.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,MAAM,+BAA+B,CAAA;AAE7D,OAAO,EAAE,SAAS,EAAoC,WAAW,EAAE,GAAG,EAAE,MAAM,+BAA+B,CAAA;AAE7G,MAAM,CAAC,MAAM,aAAa,GAAG,WAAW,CAAA;AACxC,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,aAAa,EAAE,eAAe,EAAE,aAAa,CAAC,CAAA;AAC5E,MAAM,CAAC,MAAM,MAAM,GAAG,aAAa,CAAC,aAAa,CAAC,CAAA"}
|