@wirecat/max-cli 0.0.0-stage → 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 +530 -2
- 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 +125 -4
- package/skills/max-cli/SKILL.md +518 -0
package/dist/report.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
import { createHash, randomBytes } from "node:crypto";
|
|
2
|
+
import { homedir } from "node:os";
|
|
3
|
+
import { basename, join } from "node:path";
|
|
4
|
+
import { CliError } from "@wirecat/cli-core";
|
|
5
|
+
import { findRun, listRuns, readEvents, runtime } from "@wirecat/cli-messaging/cli";
|
|
6
|
+
import { VERSION } from "./version.js";
|
|
7
|
+
/** Where problem reports go (`NEED-267`, changed by the owner to issues). Anybody can read them there. */
|
|
8
|
+
export const REPORT_URL = "https://github.com/WireCatLabs/max-cli/issues/new";
|
|
9
|
+
const RECENT_SENDS = 20;
|
|
10
|
+
/**
|
|
11
|
+
* **Everything a report holds is already free of content** — the run log and the send journal are
|
|
12
|
+
* built that way. Two things are added: chat and message ids become labels, and the home directory
|
|
13
|
+
* is hidden, since the doctor's paths name the person's account on this machine.
|
|
14
|
+
*/
|
|
15
|
+
export const buildReport = ({ profile, doctor, runsDir, runId, sends, now = new Date(), home = homedir(), }) => {
|
|
16
|
+
const chosen = runId === undefined ? newestFailed(runsDir) : findRun(runsDir, runId);
|
|
17
|
+
if (runId !== undefined && !chosen)
|
|
18
|
+
throw new CliError("not_found", `no run ${runId} — \`max runs list\` names them`);
|
|
19
|
+
const label = labeller();
|
|
20
|
+
const labelled = labelledEvent(label);
|
|
21
|
+
const report = {
|
|
22
|
+
createdAt: now.toISOString(),
|
|
23
|
+
version: VERSION,
|
|
24
|
+
runtime: runtime(),
|
|
25
|
+
platform: process.platform,
|
|
26
|
+
arch: process.arch,
|
|
27
|
+
profile,
|
|
28
|
+
// The shell commands in `fix` quote the path in ways no spelling above matches; `binDir` says it.
|
|
29
|
+
doctor: { ...doctor, install: { ...doctor.install, fix: [] } },
|
|
30
|
+
run: chosen ? { metadata: chosen.metadata, events: readEvents(chosen.dir).map(labelled) } : null,
|
|
31
|
+
sends: sends.slice(-RECENT_SENDS).map((entry) => ({
|
|
32
|
+
...entry,
|
|
33
|
+
chatId: entry.chatId === null ? null : label(entry.chatId),
|
|
34
|
+
...(entry.messageId === undefined ? {} : { messageId: label(entry.messageId) }),
|
|
35
|
+
})),
|
|
36
|
+
};
|
|
37
|
+
return JSON.parse(hideHome(JSON.stringify(report), home));
|
|
38
|
+
};
|
|
39
|
+
/**
|
|
40
|
+
* Inside JSON a Windows home is spelled with doubled backslashes, and a PATH entry keeps whatever
|
|
41
|
+
* case it was typed in, so the match ignores case — hiding a little too much costs nothing here.
|
|
42
|
+
*/
|
|
43
|
+
const hideHome = (json, home) => {
|
|
44
|
+
if (home === "")
|
|
45
|
+
return json;
|
|
46
|
+
const spellings = [JSON.stringify(home).slice(1, -1), home, home.replaceAll("\\", "/")];
|
|
47
|
+
return [...new Set(spellings)].reduce((text, spelling) => text.replace(new RegExp(spelling.replace(/[.*+?^${}()|[\]\\]/g, "\\$&"), "gi"), "~"), json);
|
|
48
|
+
};
|
|
49
|
+
/**
|
|
50
|
+
* The report is posted to a public issue, and a chat id is somebody's conversation with the owner.
|
|
51
|
+
* Each id becomes a label that is the same everywhere in this report — so a failure can still be
|
|
52
|
+
* followed from request to journal — and **a new salt per report**, so two reports cannot be joined.
|
|
53
|
+
*/
|
|
54
|
+
const labeller = () => {
|
|
55
|
+
const salt = randomBytes(16);
|
|
56
|
+
return (id) => `id:${createHash("sha256").update(salt).update(id).digest("hex").slice(0, 12)}`;
|
|
57
|
+
};
|
|
58
|
+
const labelledEvent = (label) => (event) => {
|
|
59
|
+
const ids = event.ids;
|
|
60
|
+
if (typeof ids !== "object" || ids === null)
|
|
61
|
+
return event;
|
|
62
|
+
const { chat, message, ...rest } = ids;
|
|
63
|
+
return {
|
|
64
|
+
...event,
|
|
65
|
+
ids: {
|
|
66
|
+
...rest,
|
|
67
|
+
...(typeof chat === "string" ? { chat: label(chat) } : {}),
|
|
68
|
+
...(typeof message === "string" ? { message: label(message) } : {}),
|
|
69
|
+
},
|
|
70
|
+
};
|
|
71
|
+
};
|
|
72
|
+
/**
|
|
73
|
+
* A new issue with its title and body filled in, through GitHub's `title` and `body` query
|
|
74
|
+
* parameters. The file cannot travel in a link; the person drags it in. **Only the file's name**
|
|
75
|
+
* goes into the body — the issue is public, and a full path names the account on this machine.
|
|
76
|
+
*/
|
|
77
|
+
export const issueUrlFor = (report, file) => {
|
|
78
|
+
const run = report.run?.metadata;
|
|
79
|
+
const subject = `max ${report.version}: ${run ? `${run.command} — ${run.errorCode ?? "failed"}` : "problem report"}`;
|
|
80
|
+
const body = [
|
|
81
|
+
"Что я делал:",
|
|
82
|
+
"",
|
|
83
|
+
"Что ожидал:",
|
|
84
|
+
"",
|
|
85
|
+
"Что случилось:",
|
|
86
|
+
"",
|
|
87
|
+
"---",
|
|
88
|
+
`max ${report.version}, ${report.runtime}, ${report.platform} ${report.arch}`,
|
|
89
|
+
...(run
|
|
90
|
+
? [`run ${run.runId}: ${run.errorCode ?? "failed"}${run.providerError ? ` (${run.providerError})` : ""}`]
|
|
91
|
+
: []),
|
|
92
|
+
`Файл отчёта: ${basename(file)}`,
|
|
93
|
+
].join("\n");
|
|
94
|
+
return `${REPORT_URL}?title=${encodeURIComponent(subject)}&body=${encodeURIComponent(body)}`;
|
|
95
|
+
};
|
|
96
|
+
export const reportFileName = (now) => `max-report-${now
|
|
97
|
+
.toISOString()
|
|
98
|
+
.replace(/[-:]/g, "")
|
|
99
|
+
.replace(/\.\d+Z$/, "Z")}.json`;
|
|
100
|
+
const newestFailed = (runsDir) => {
|
|
101
|
+
const failed = listRuns(runsDir).find((run) => run.status === "failed");
|
|
102
|
+
return failed ? { dir: join(runsDir, failed.startedAt.slice(0, 10), failed.runId), metadata: failed } : undefined;
|
|
103
|
+
};
|
|
104
|
+
//# sourceMappingURL=report.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"report.js","sourceRoot":"","sources":["../src/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAA;AACjC,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAC1C,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAoB,UAAU,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAA;AAGrG,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,0GAA0G;AAC1G,MAAM,CAAC,MAAM,UAAU,GAAG,mDAAmD,CAAA;AAE7E,MAAM,YAAY,GAAG,EAAE,CAAA;AAgBvB;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,EAC1B,OAAO,EACP,MAAM,EACN,OAAO,EACP,KAAK,EACL,KAAK,EACL,GAAG,GAAG,IAAI,IAAI,EAAE,EAChB,IAAI,GAAG,OAAO,EAAE,GASjB,EAAU,EAAE;IACX,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;IACpF,IAAI,KAAK,KAAK,SAAS,IAAI,CAAC,MAAM;QAAE,MAAM,IAAI,QAAQ,CAAC,WAAW,EAAE,UAAU,KAAK,iCAAiC,CAAC,CAAA;IAErH,MAAM,KAAK,GAAG,QAAQ,EAAE,CAAA;IACxB,MAAM,QAAQ,GAAG,aAAa,CAAC,KAAK,CAAC,CAAA;IACrC,MAAM,MAAM,GAAW;QACrB,SAAS,EAAE,GAAG,CAAC,WAAW,EAAE;QAC5B,OAAO,EAAE,OAAO;QAChB,OAAO,EAAE,OAAO,EAAE;QAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;QAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;QAClB,OAAO;QACP,kGAAkG;QAClG,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE;QAC9D,GAAG,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI;QAChG,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAChD,GAAG,KAAK;YACR,MAAM,EAAE,KAAK,CAAC,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,MAAM,CAAC;YAC1D,GAAG,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;SAChF,CAAC,CAAC;KACJ,CAAA;IACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAW,CAAA;AACrE,CAAC,CAAA;AAED;;;GAGG;AACH,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,IAAY,EAAU,EAAE;IACtD,IAAI,IAAI,KAAK,EAAE;QAAE,OAAO,IAAI,CAAA;IAC5B,MAAM,SAAS,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAA;IACvF,OAAO,CAAC,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CACnC,CAAC,IAAI,EAAE,QAAQ,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,EAAE,IAAI,CAAC,EAAE,GAAG,CAAC,EACxG,IAAI,CACL,CAAA;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,QAAQ,GAAG,GAAG,EAAE;IACpB,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAA;IAC5B,OAAO,CAAC,EAAU,EAAU,EAAE,CAAC,MAAM,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,CAAA;AAChH,CAAC,CAAA;AAED,MAAM,aAAa,GACjB,CAAC,KAA6B,EAAE,EAAE,CAClC,CAAC,KAA8B,EAA2B,EAAE;IAC1D,MAAM,GAAG,GAAG,KAAK,CAAC,GAAG,CAAA;IACrB,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI;QAAE,OAAO,KAAK,CAAA;IACzD,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,IAAI,EAAE,GAAG,GAA8B,CAAA;IACjE,OAAO;QACL,GAAG,KAAK;QACR,GAAG,EAAE;YACH,GAAG,IAAI;YACP,GAAG,CAAC,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC1D,GAAG,CAAC,OAAO,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SACpE;KACF,CAAA;AACH,CAAC,CAAA;AAEH;;;;GAIG;AACH,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,MAAc,EAAE,IAAY,EAAU,EAAE;IAClE,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,EAAE,QAAQ,CAAA;IAChC,MAAM,OAAO,GAAG,OAAO,MAAM,CAAC,OAAO,KAAK,GAAG,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,OAAO,MAAM,GAAG,CAAC,SAAS,IAAI,QAAQ,EAAE,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAA;IACpH,MAAM,IAAI,GAAG;QACX,cAAc;QACd,EAAE;QACF,aAAa;QACb,EAAE;QACF,gBAAgB;QAChB,EAAE;QACF,KAAK;QACL,OAAO,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,OAAO,KAAK,MAAM,CAAC,QAAQ,IAAI,MAAM,CAAC,IAAI,EAAE;QAC7E,GAAG,CAAC,GAAG;YACL,CAAC,CAAC,CAAC,OAAO,GAAG,CAAC,KAAK,KAAK,GAAG,CAAC,SAAS,IAAI,QAAQ,GAAG,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,aAAa,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;YACzG,CAAC,CAAC,EAAE,CAAC;QACP,gBAAgB,QAAQ,CAAC,IAAI,CAAC,EAAE;KACjC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACZ,OAAO,GAAG,UAAU,UAAU,kBAAkB,CAAC,OAAO,CAAC,SAAS,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAA;AAC9F,CAAC,CAAA;AAED,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,GAAS,EAAU,EAAE,CAClD,cAAc,GAAG;KACd,WAAW,EAAE;KACb,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC;KACpB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC,OAAO,CAAA;AAEnC,MAAM,YAAY,GAAG,CAAC,OAAe,EAAsD,EAAE;IAC3F,MAAM,MAAM,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,MAAM,KAAK,QAAQ,CAAC,CAAA;IACvE,OAAO,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC,SAAS,CAAA;AACnH,CAAC,CAAA"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { isId } from "@wirecat/cli-messaging";
|
|
2
|
+
import type { Chat } from "./domain/models.js";
|
|
3
|
+
export { isId };
|
|
4
|
+
/** cli-messaging's `pickChat`, typed with max-cli's `Chat`: it answers one of the chats it is given. */
|
|
5
|
+
export declare const pickChat: (reference: string, chats: Chat[]) => Chat;
|
|
6
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAA4B,MAAM,wBAAwB,CAAA;AACvE,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AAE9C,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,wGAAwG;AACxG,eAAO,MAAM,QAAQ,cAAe,MAAM,SAAS,IAAI,EAAE,KAAG,IAA8C,CAAA"}
|
package/dist/resolve.js
ADDED
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { isId, pickChat as pickChatFrom } from "@wirecat/cli-messaging";
|
|
2
|
+
export { isId };
|
|
3
|
+
/** cli-messaging's `pickChat`, typed with max-cli's `Chat`: it answers one of the chats it is given. */
|
|
4
|
+
export const pickChat = (reference, chats) => pickChatFrom(reference, chats);
|
|
5
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../src/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,QAAQ,IAAI,YAAY,EAAE,MAAM,wBAAwB,CAAA;AAGvE,OAAO,EAAE,IAAI,EAAE,CAAA;AAEf,wGAAwG;AACxG,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,SAAiB,EAAE,KAAa,EAAQ,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,KAAK,CAAS,CAAA"}
|
package/dist/sends.d.ts
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { type Asker, RecipientList, type SendGuard } from "@wirecat/cli-messaging/sends";
|
|
2
|
+
import { type Settings } from "./config.js";
|
|
3
|
+
export declare const sendsPathFor: (profile: string, env?: NodeJS.ProcessEnv) => string;
|
|
4
|
+
export declare const recipientsPathFor: (profile: string, env?: NodeJS.ProcessEnv) => string;
|
|
5
|
+
export declare const recipientListFor: (profile: string, env?: NodeJS.ProcessEnv) => RecipientList;
|
|
6
|
+
/**
|
|
7
|
+
* Every line one write leaves in the journal carries the same `operationId`, minted at its check;
|
|
8
|
+
* a send's is its send id. A write a shared service started keeps the service's. `MaxClient` checks before each write and records after it, one at a
|
|
9
|
+
* time, and the server builds a guard per request, so one guard never holds two writes at once.
|
|
10
|
+
*/
|
|
11
|
+
export declare const operating: (guard: SendGuard, key?: string) => SendGuard;
|
|
12
|
+
/**
|
|
13
|
+
* The guard a profile's configuration asks for — the command's, and `max serve`'s for every write
|
|
14
|
+
* it forwards. Built per request in the server, so `config set readOnly true` needs no restart.
|
|
15
|
+
*/
|
|
16
|
+
export declare const guardFor: (settings: Settings, warn: (message: string) => void, ask?: Asker, key?: string) => SendGuard;
|
|
17
|
+
//# sourceMappingURL=sends.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sends.d.ts","sourceRoot":"","sources":["../src/sends.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,KAAK,EAMV,aAAa,EACb,KAAK,SAAS,EAKf,MAAM,8BAA8B,CAAA;AAErC,OAAO,EAAE,KAAK,QAAQ,EAAiB,MAAM,aAAa,CAAA;AAG1D,eAAO,MAAM,YAAY,YAAa,MAAM,QAAO,MAAM,CAAC,UAAU,KAAiB,MAC7C,CAAA;AAExC,eAAO,MAAM,iBAAiB,YAAa,MAAM,QAAO,MAAM,CAAC,UAAU,KAAiB,MAC7C,CAAA;AAE7C,eAAO,MAAM,gBAAgB,YAAa,MAAM,QAAO,MAAM,CAAC,UAAU,KAAiB,aACpB,CAAA;AAErE;;;;GAIG;AACH,eAAO,MAAM,SAAS,UAAW,SAAS,QAAQ,MAAM,KAAG,SA2C1D,CAAA;AAED;;;GAGG;AACH,eAAO,MAAM,QAAQ,aAAc,QAAQ,QAAQ,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,QAAQ,KAAK,QAAQ,MAAM,KAAG,SAuCzG,CAAA"}
|
package/dist/sends.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import { currentOperation, keyForWrite, levelFor, newOperationId, RecipientList, SendJournal, sendGuard, recipientsPathFor as sharedRecipientsPath, sendsPathFor as sharedSendsPath, } from "@wirecat/cli-messaging/sends";
|
|
3
|
+
import { MAX_APP } from "./app.js";
|
|
4
|
+
import { setCommandFor } from "./config.js";
|
|
5
|
+
import { approvePermission } from "./permissions.js";
|
|
6
|
+
export const sendsPathFor = (profile, env = process.env) => sharedSendsPath(MAX_APP, profile, env);
|
|
7
|
+
export const recipientsPathFor = (profile, env = process.env) => sharedRecipientsPath(MAX_APP, profile, env);
|
|
8
|
+
export const recipientListFor = (profile, env = process.env) => new RecipientList(recipientsPathFor(profile, env), MAX_APP.command);
|
|
9
|
+
/**
|
|
10
|
+
* Every line one write leaves in the journal carries the same `operationId`, minted at its check;
|
|
11
|
+
* a send's is its send id. A write a shared service started keeps the service's. `MaxClient` checks before each write and records after it, one at a
|
|
12
|
+
* time, and the server builds a guard per request, so one guard never holds two writes at once.
|
|
13
|
+
*/
|
|
14
|
+
export const operating = (guard, key) => {
|
|
15
|
+
let current;
|
|
16
|
+
const ask = guard.ask;
|
|
17
|
+
const requests = new WeakMap();
|
|
18
|
+
const prepared = (request) => {
|
|
19
|
+
let found = requests.get(request);
|
|
20
|
+
const previous = found?.source;
|
|
21
|
+
const unchanged = previous &&
|
|
22
|
+
Object.keys(previous).length === Object.keys(request).length &&
|
|
23
|
+
Object.entries(request).every(([key, value]) => key === "personIds" && Array.isArray(value)
|
|
24
|
+
? value.length === previous.personIds?.length &&
|
|
25
|
+
value.every((id, index) => id === previous.personIds?.[index])
|
|
26
|
+
: value === previous[key]);
|
|
27
|
+
if (!found || !unchanged) {
|
|
28
|
+
const source = {
|
|
29
|
+
...request,
|
|
30
|
+
...(request.personIds ? { personIds: [...request.personIds] } : {}),
|
|
31
|
+
};
|
|
32
|
+
const value = {
|
|
33
|
+
...source,
|
|
34
|
+
...(source.key === undefined && key ? { key } : {}),
|
|
35
|
+
operationId: request.operationId ?? currentOperation() ?? request.sendId ?? newOperationId(),
|
|
36
|
+
};
|
|
37
|
+
found = { source, value };
|
|
38
|
+
requests.set(request, found);
|
|
39
|
+
}
|
|
40
|
+
current = found.value.operationId;
|
|
41
|
+
return found.value;
|
|
42
|
+
};
|
|
43
|
+
return {
|
|
44
|
+
// The shared guard binds confirmation to the request object, not to its operation id.
|
|
45
|
+
...(ask ? { ask: (request) => ask.call(guard, prepared(request)) } : {}),
|
|
46
|
+
check: (request, options) => {
|
|
47
|
+
guard.check(prepared(request), options);
|
|
48
|
+
},
|
|
49
|
+
record: (entry) => {
|
|
50
|
+
const operationId = entry.operationId ?? entry.sendId ?? current;
|
|
51
|
+
guard.record(operationId === undefined ? entry : { ...entry, operationId });
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
};
|
|
55
|
+
/**
|
|
56
|
+
* The guard a profile's configuration asks for — the command's, and `max serve`'s for every write
|
|
57
|
+
* it forwards. Built per request in the server, so `config set readOnly true` needs no restart.
|
|
58
|
+
*/
|
|
59
|
+
export const guardFor = (settings, warn, ask, key) => {
|
|
60
|
+
const guard = operating(sendGuard({
|
|
61
|
+
profile: settings.profile,
|
|
62
|
+
command: MAX_APP.command,
|
|
63
|
+
readOnly: settings.readOnly,
|
|
64
|
+
readOnlyFrom: settings.sources.readOnly,
|
|
65
|
+
...(settings.allow
|
|
66
|
+
? {
|
|
67
|
+
allow: settings.allow,
|
|
68
|
+
allowFrom: settings.sources.allow,
|
|
69
|
+
allowFix: setCommandFor(settings.sources.allow, settings.profile, "allow"),
|
|
70
|
+
}
|
|
71
|
+
: {}),
|
|
72
|
+
permissions: settings.permissions,
|
|
73
|
+
permissionSources: settings.permissionSources,
|
|
74
|
+
...(ask ? { ask } : {}),
|
|
75
|
+
sendsPerHour: settings.sendsPerHour,
|
|
76
|
+
journal: new SendJournal(sendsPathFor(settings.profile)),
|
|
77
|
+
recipients: recipientListFor(settings.profile),
|
|
78
|
+
warn,
|
|
79
|
+
}), key);
|
|
80
|
+
return {
|
|
81
|
+
...guard,
|
|
82
|
+
check: (request, options) => {
|
|
83
|
+
if (request.key === "chats.moderate") {
|
|
84
|
+
const action = keyForWrite(request.kind ?? "message", request.action);
|
|
85
|
+
const level = levelFor(settings.permissions, action).level;
|
|
86
|
+
if (level === "deny" || level === "readonly")
|
|
87
|
+
throw new CliError("permission_error", `profile ${settings.profile} does not let ${action} write`, {
|
|
88
|
+
permission: action,
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
guard.check(request, options);
|
|
92
|
+
if (request.key === "chats.moderate")
|
|
93
|
+
approvePermission(keyForWrite(request.kind ?? "message", request.action));
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
};
|
|
97
|
+
//# sourceMappingURL=sends.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sends.js","sourceRoot":"","sources":["../src/sends.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* One JSON value per line, **losslessly**: a request or an answer passing through `max serve`
|
|
3
|
+
* carries MAX's 18-digit message ids, which `JSON` would round into somebody else's message.
|
|
4
|
+
*
|
|
5
|
+
* **A `bigint` crosses as a `bigint`, however small.** It is how the codec tells an id from a
|
|
6
|
+
* count — ids go to MAX wrapped in extension 1, as the web client sends them — and a plain number
|
|
7
|
+
* literal would come back a `number` for any id that fits one.
|
|
8
|
+
*/
|
|
9
|
+
export declare const toLine: (value: unknown) => string;
|
|
10
|
+
/**
|
|
11
|
+
* **Bytes cross as bytes**: a voice message's waveform is a `Uint8Array`, which `JSON` makes an
|
|
12
|
+
* object of indexes, and MAX refuses that send as `proto.payload` (measured 2026-10-01).
|
|
13
|
+
*/
|
|
14
|
+
export declare const fromLine: (line: string) => Record<string, unknown>;
|
|
15
|
+
/**
|
|
16
|
+
* Calls `onLine` for each complete line `data` finishes, keeping the rest for next time. With
|
|
17
|
+
* `maxLength`, a line that grows past it calls `onTooLong` instead and nothing more is read.
|
|
18
|
+
*/
|
|
19
|
+
export declare const lineReader: (onLine: (line: string) => void, { maxLength, onTooLong }?: {
|
|
20
|
+
maxLength?: number;
|
|
21
|
+
onTooLong?: () => void;
|
|
22
|
+
}) => (data: Buffer | string) => void;
|
|
23
|
+
//# sourceMappingURL=lines.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lines.d.ts","sourceRoot":"","sources":["../../src/server/lines.ts"],"names":[],"mappings":"AAEA;;;;;;;GAOG;AACH,eAAO,MAAM,MAAM,UAAW,OAAO,KAAG,MAOjC,CAAA;AAEP;;;GAGG;AACH,eAAO,MAAM,QAAQ,SAAU,MAAM,KAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAUhC,CAAA;AAW9B;;;GAGG;AACH,eAAO,MAAM,UAAU,WACb,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,6BACkC;IAAE,SAAS,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,IAAI,CAAA;CAAE,YAIhG,MAAM,GAAG,MAAM,SAgB9B,CAAA"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { isInteger, isSafeNumber, parse, stringify } from "lossless-json";
|
|
2
|
+
/**
|
|
3
|
+
* One JSON value per line, **losslessly**: a request or an answer passing through `max serve`
|
|
4
|
+
* carries MAX's 18-digit message ids, which `JSON` would round into somebody else's message.
|
|
5
|
+
*
|
|
6
|
+
* **A `bigint` crosses as a `bigint`, however small.** It is how the codec tells an id from a
|
|
7
|
+
* count — ids go to MAX wrapped in extension 1, as the web client sends them — and a plain number
|
|
8
|
+
* literal would come back a `number` for any id that fits one.
|
|
9
|
+
*/
|
|
10
|
+
export const toLine = (value) => `${stringify(value, (_, item) => typeof item === "bigint"
|
|
11
|
+
? { [BIGINT]: item.toString() }
|
|
12
|
+
: item instanceof Uint8Array
|
|
13
|
+
? { [BYTES]: Buffer.from(item).toString("base64") }
|
|
14
|
+
: item)}\n`;
|
|
15
|
+
/**
|
|
16
|
+
* **Bytes cross as bytes**: a voice message's waveform is a `Uint8Array`, which `JSON` makes an
|
|
17
|
+
* object of indexes, and MAX refuses that send as `proto.payload` (measured 2026-10-01).
|
|
18
|
+
*/
|
|
19
|
+
export const fromLine = (line) => parse(line, (_, item) => isTagged(item, BIGINT)
|
|
20
|
+
? BigInt(item[BIGINT])
|
|
21
|
+
: isTagged(item, BYTES)
|
|
22
|
+
? new Uint8Array(Buffer.from(item[BYTES], "base64"))
|
|
23
|
+
: item, { parseNumber: (text) => (isInteger(text) && !isSafeNumber(text) ? BigInt(text) : Number(text)) });
|
|
24
|
+
const BIGINT = "$bigint";
|
|
25
|
+
const BYTES = "$bytes";
|
|
26
|
+
const isTagged = (item, tag) => typeof item === "object" &&
|
|
27
|
+
item !== null &&
|
|
28
|
+
Object.keys(item).length === 1 &&
|
|
29
|
+
typeof item[tag] === "string";
|
|
30
|
+
/**
|
|
31
|
+
* Calls `onLine` for each complete line `data` finishes, keeping the rest for next time. With
|
|
32
|
+
* `maxLength`, a line that grows past it calls `onTooLong` instead and nothing more is read.
|
|
33
|
+
*/
|
|
34
|
+
export const lineReader = (onLine, { maxLength = Number.POSITIVE_INFINITY, onTooLong = () => { } } = {}) => {
|
|
35
|
+
let buffered = "";
|
|
36
|
+
let stopped = false;
|
|
37
|
+
return (data) => {
|
|
38
|
+
if (stopped)
|
|
39
|
+
return;
|
|
40
|
+
buffered += String(data);
|
|
41
|
+
let end = buffered.indexOf("\n");
|
|
42
|
+
while (end >= 0) {
|
|
43
|
+
const line = buffered.slice(0, end);
|
|
44
|
+
buffered = buffered.slice(end + 1);
|
|
45
|
+
if (line.trim() !== "")
|
|
46
|
+
onLine(line);
|
|
47
|
+
end = buffered.indexOf("\n");
|
|
48
|
+
}
|
|
49
|
+
if (buffered.length > maxLength) {
|
|
50
|
+
stopped = true;
|
|
51
|
+
buffered = "";
|
|
52
|
+
onTooLong();
|
|
53
|
+
}
|
|
54
|
+
};
|
|
55
|
+
};
|
|
56
|
+
//# sourceMappingURL=lines.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lines.js","sourceRoot":"","sources":["../../src/server/lines.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import type { Id } from "@wirecat/cli-messaging";
|
|
2
|
+
import { type SendGuard } from "@wirecat/cli-messaging/sends";
|
|
3
|
+
import type { MaxClient } from "../client.js";
|
|
4
|
+
import type { MessageHit } from "../domain/models.js";
|
|
5
|
+
export interface RepliesOptions {
|
|
6
|
+
profile: string;
|
|
7
|
+
env?: NodeJS.ProcessEnv;
|
|
8
|
+
/** ms: when the server began; what is older came in the catch-up and is never answered. */
|
|
9
|
+
since: number;
|
|
10
|
+
owner: () => Id | undefined;
|
|
11
|
+
client: () => MaxClient | undefined;
|
|
12
|
+
guard: () => SendGuard;
|
|
13
|
+
note: (line: string) => void;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* The owner's reply rules over what MAX pushes, through the shared step tg's `serve` uses — so only
|
|
17
|
+
* senders the rules file's audience allows are answered, and only with `replies.send` at `allow`. One
|
|
18
|
+
* message at a time: two at once would both read the limits before either counted its reply.
|
|
19
|
+
*/
|
|
20
|
+
export declare const serverReplies: ({ profile, env, since, owner, client, guard, note }: RepliesOptions) => {
|
|
21
|
+
arrived: (hit: MessageHit) => void;
|
|
22
|
+
settled: () => Promise<void>;
|
|
23
|
+
stop: () => void;
|
|
24
|
+
close: () => Promise<void>;
|
|
25
|
+
summary: () => {
|
|
26
|
+
sent: Record<string, number>;
|
|
27
|
+
skipped: Record<string, number>;
|
|
28
|
+
tasks?: Record<string, number> | undefined;
|
|
29
|
+
};
|
|
30
|
+
};
|
|
31
|
+
//# sourceMappingURL=replies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replies.d.ts","sourceRoot":"","sources":["../../src/server/replies.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAY,EAAE,EAAW,MAAM,wBAAwB,CAAA;AAWnE,OAAO,EAA0B,KAAK,SAAS,EAAE,MAAM,8BAA8B,CAAA;AAGrF,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAE7C,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAA;AAErD,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAA;IACf,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAA;IACvB,2FAA2F;IAC3F,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAA;IAC3B,MAAM,EAAE,MAAM,SAAS,GAAG,SAAS,CAAA;IACnC,KAAK,EAAE,MAAM,SAAS,CAAA;IACtB,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;CAC7B;AAED;;;;GAIG;AACH,eAAO,MAAM,aAAa,wDAAuE,cAAc;mBAmE5F,UAAU;;;;;;;;;CAe5B,CAAA"}
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
import { CliError } from "@wirecat/cli-core";
|
|
2
|
+
import { NO_RULES, openRequestTask, repliesPathFor, repliesStatePathFor, replyRenderer, replyTo, senderFacts, } from "@wirecat/cli-messaging/cli";
|
|
3
|
+
import { guardedWrite, levelFor } from "@wirecat/cli-messaging/sends";
|
|
4
|
+
import { openStore } from "@wirecat/cli-messaging/store";
|
|
5
|
+
import { MAX_APP } from "../app.js";
|
|
6
|
+
import { resolveSettings } from "../config.js";
|
|
7
|
+
/**
|
|
8
|
+
* The owner's reply rules over what MAX pushes, through the shared step tg's `serve` uses — so only
|
|
9
|
+
* senders the rules file's audience allows are answered, and only with `replies.send` at `allow`. One
|
|
10
|
+
* message at a time: two at once would both read the limits before either counted its reply.
|
|
11
|
+
*/
|
|
12
|
+
export const serverReplies = ({ profile, env = process.env, since, owner, client, guard, note }) => {
|
|
13
|
+
let queue = Promise.resolve();
|
|
14
|
+
const controller = new AbortController();
|
|
15
|
+
let opened;
|
|
16
|
+
const sent = {};
|
|
17
|
+
const skipped = {};
|
|
18
|
+
const tasks = {};
|
|
19
|
+
const handle = async (hit) => {
|
|
20
|
+
const open = client();
|
|
21
|
+
if (!open || controller.signal.aborted)
|
|
22
|
+
return;
|
|
23
|
+
const answer = await replyTo({
|
|
24
|
+
rulesPath: repliesPathFor(MAX_APP, profile, env),
|
|
25
|
+
statePath: repliesStatePathFor(MAX_APP, profile, env),
|
|
26
|
+
provider: "max",
|
|
27
|
+
owner: { id: owner() ?? null },
|
|
28
|
+
since,
|
|
29
|
+
allowed: () => levelFor(resolveSettings({ profile }, { env }).permissions ?? {}, "replies.send").level === "allow",
|
|
30
|
+
chatOf: async (chat) => {
|
|
31
|
+
const found = (await open.chats.list()).items.find((one) => one.id === chat);
|
|
32
|
+
return { id: chat, kind: (found?.kind ?? "unknown"), title: found?.title ?? null };
|
|
33
|
+
},
|
|
34
|
+
senderOf: async (person) => {
|
|
35
|
+
const account = owner();
|
|
36
|
+
if (account === undefined)
|
|
37
|
+
return { isBot: false, isContact: false };
|
|
38
|
+
opened ??= openStore({ env });
|
|
39
|
+
const { isContact, botOf } = await senderFacts(await opened, { provider: "max", account });
|
|
40
|
+
return { isBot: (await botOf(person)) === true, isContact: isContact(person) };
|
|
41
|
+
},
|
|
42
|
+
send: ({ chat, text, replyTo: to, sendId, origin }) => guardedWrite(guard(), {
|
|
43
|
+
chatId: chat,
|
|
44
|
+
kind: "message",
|
|
45
|
+
sendId,
|
|
46
|
+
operationId: sendId,
|
|
47
|
+
length: text.length,
|
|
48
|
+
key: "replies.send",
|
|
49
|
+
origin,
|
|
50
|
+
}, () => open.messages.send(chat, text, { cid: Number(sendId), ...(to === undefined ? {} : { replyTo: to }) }), (message) => ({ messageId: message.id })),
|
|
51
|
+
newSendId: () => open.newSendId(),
|
|
52
|
+
render: replyRenderer(MAX_APP, profile, () => resolveSettings({ profile }, { env }), env, note, {
|
|
53
|
+
ai: true,
|
|
54
|
+
signal: controller.signal,
|
|
55
|
+
}),
|
|
56
|
+
openTask: async (message) => {
|
|
57
|
+
const account = owner();
|
|
58
|
+
if (account === undefined)
|
|
59
|
+
throw new CliError("authentication_error", "the account is not known for reply tasks");
|
|
60
|
+
opened ??= openStore({ env });
|
|
61
|
+
return openRequestTask(await opened, { provider: "max", account }, message);
|
|
62
|
+
},
|
|
63
|
+
}, asShared(hit));
|
|
64
|
+
if (answer.task !== undefined)
|
|
65
|
+
tasks[answer.task] = (tasks[answer.task] ?? 0) + 1;
|
|
66
|
+
if ("sent" in answer)
|
|
67
|
+
sent[answer.sent] = (sent[answer.sent] ?? 0) + 1;
|
|
68
|
+
else if (answer.skip !== NO_RULES)
|
|
69
|
+
skipped[answer.skip] = (skipped[answer.skip] ?? 0) + 1;
|
|
70
|
+
};
|
|
71
|
+
return {
|
|
72
|
+
arrived: (hit) => {
|
|
73
|
+
if (hit.outgoing !== false)
|
|
74
|
+
return;
|
|
75
|
+
queue = queue.then(() => handle(hit).catch(() => note("a reply rule failed; check the replies file and send permissions")));
|
|
76
|
+
},
|
|
77
|
+
settled: () => queue,
|
|
78
|
+
stop: () => controller.abort(),
|
|
79
|
+
close: async () => {
|
|
80
|
+
controller.abort();
|
|
81
|
+
await queue;
|
|
82
|
+
if (opened)
|
|
83
|
+
await (await opened).close();
|
|
84
|
+
},
|
|
85
|
+
summary: () => ({ sent, skipped, ...(Object.keys(tasks).length ? { tasks } : {}) }),
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
/** The rules read the text, the sender and what it answers — not attachments, which stay MAX's own. */
|
|
89
|
+
const asShared = ({ chatTitle: _title, attachments: _attachments, replyTo, forwardedFrom: _forwarded, ...hit }) => ({
|
|
90
|
+
...hit,
|
|
91
|
+
attachments: [],
|
|
92
|
+
replyTo: replyTo && { ...replyTo, attachments: [] },
|
|
93
|
+
forwardedFrom: null,
|
|
94
|
+
});
|
|
95
|
+
//# sourceMappingURL=replies.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"replies.js","sourceRoot":"","sources":["../../src/server/replies.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Connection, type Wire, type WireEvent } from "../protocol/connection.js";
|
|
2
|
+
import { type Payload } from "../protocol/frame.js";
|
|
3
|
+
import type { SessionStore } from "../session/store.js";
|
|
4
|
+
import type { Operation } from "../spec/define.js";
|
|
5
|
+
/**
|
|
6
|
+
* **A command's connection: `max serve`'s, shared** (`MAX-35`, `NEED-229`).
|
|
7
|
+
*
|
|
8
|
+
* One connection to MAX per profile, whoever asks — CLI commands, `max mcp`, `max watch`. INIT
|
|
9
|
+
* and LOGIN are answered by the server's own login; **every other request goes over its
|
|
10
|
+
* connection, sends included**. The server runs the send guards on every write and journals it;
|
|
11
|
+
* the command's client checks too, so a refusal comes before an upload, and journals only that.
|
|
12
|
+
*
|
|
13
|
+
* Before the first request, `ensure` replaces a server a command started under another build; with
|
|
14
|
+
* none answering, it starts one and waits for it. A connection of the command's own
|
|
15
|
+
* is opened only when there is no `ensure` (the owner said `serve: false`) and no server, or for
|
|
16
|
+
* a token being tried out (`max session start`), which is by definition not the server's.
|
|
17
|
+
*/
|
|
18
|
+
export declare class ServerConnection implements Wire {
|
|
19
|
+
#private;
|
|
20
|
+
constructor({ path, store, timeoutMs, direct, ensure, }: {
|
|
21
|
+
path: string;
|
|
22
|
+
store: SessionStore;
|
|
23
|
+
timeoutMs?: number;
|
|
24
|
+
direct?: () => Connection;
|
|
25
|
+
/** Starts a server when none answers and waits for it; `false` if it did not come up. */
|
|
26
|
+
ensure?: () => Promise<boolean>;
|
|
27
|
+
});
|
|
28
|
+
open(): Promise<void>;
|
|
29
|
+
/** Whether the server is the one answering — and so the one writing the send journal. */
|
|
30
|
+
get journals(): boolean;
|
|
31
|
+
invoke(opcode: number, payload?: Payload, watch?: (event: WireEvent) => void): Promise<Payload>;
|
|
32
|
+
close(): Promise<void>;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* The operation the server passes on for this opcode, or `undefined` for one it does not: logging
|
|
36
|
+
* in is the server's own business, a login by QR or SMS is `max session start` on a connection of
|
|
37
|
+
* its own, and a reserved number is never sent at all.
|
|
38
|
+
*/
|
|
39
|
+
export declare const forwardedOperation: (opcode: number) => Operation | undefined;
|
|
40
|
+
/**
|
|
41
|
+
* Which operations this build passes on. Two builds can carry the same version number — a checkout
|
|
42
|
+
* of main against the published package — so the version alone does not tell a server that
|
|
43
|
+
* refuses a newer operation from one that does not.
|
|
44
|
+
*/
|
|
45
|
+
export declare const OPERATIONS_FINGERPRINT: string;
|
|
46
|
+
/**
|
|
47
|
+
* Asks a running server to stop. `"refused"` is a server started by hand, which only Ctrl-C
|
|
48
|
+
* stops; `"none"` is nobody listening.
|
|
49
|
+
*/
|
|
50
|
+
export declare const stopServer: (path: string, { force }?: {
|
|
51
|
+
force?: boolean | undefined;
|
|
52
|
+
}) => Promise<"stopped" | "refused" | "none">;
|
|
53
|
+
/** What a running server says about itself, or `undefined` when nobody answers. */
|
|
54
|
+
export declare const serverStatus: (path: string) => Promise<Record<string, unknown> | undefined>;
|
|
55
|
+
//# sourceMappingURL=server-connection.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-connection.d.ts","sourceRoot":"","sources":["../../src/server/server-connection.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,UAAU,EAAiB,KAAK,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,2BAA2B,CAAA;AAChG,OAAO,EAAQ,KAAK,OAAO,EAAE,MAAM,sBAAsB,CAAA;AACzD,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAA;AACvD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAA;AASlD;;;;;;;;;;;;GAYG;AACH,qBAAa,gBAAiB,YAAW,IAAI;;IAe3C,YAAY,EACV,IAAI,EACJ,KAAK,EACL,SAAkB,EAClB,MAAM,EACN,MAAM,GACP,EAAE;QACD,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,EAAE,YAAY,CAAA;QACnB,SAAS,CAAC,EAAE,MAAM,CAAA;QAClB,MAAM,CAAC,EAAE,MAAM,UAAU,CAAA;QACzB,yFAAyF;QACzF,MAAM,CAAC,EAAE,MAAM,OAAO,CAAC,OAAO,CAAC,CAAA;KAChC,EAMA;IAEK,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAG;IAE9B,yFAAyF;IACzF,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAEK,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,OAAY,EAAE,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,CA4BxG;IAmCK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAS3B;CA6EF;AAED;;;;GAIG;AACH,eAAO,MAAM,kBAAkB,WAAY,MAAM,KAAG,SAAS,GAAG,SAI7D,CAAA;AAEH;;;;GAIG;AACH,eAAO,MAAM,sBAAsB,QASpB,CAAA;AAEf;;;GAGG;AACH,eAAO,MAAM,UAAU,SAAU,MAAM;;MAA2B,OAAO,CAAC,SAAS,GAAG,SAAS,GAAG,MAAM,CAyBpG,CAAA;AAEJ,mFAAmF;AACnF,eAAO,MAAM,YAAY,SAAU,MAAM,KAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAenF,CAAA"}
|