@yoda.digital/iris-gateway 1.13.3
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/CHANGELOG.md +515 -0
- package/README.md +282 -0
- package/dist/auto-reply/engine.d.ts +13 -0
- package/dist/auto-reply/engine.d.ts.map +1 -0
- package/dist/auto-reply/engine.js +70 -0
- package/dist/auto-reply/engine.js.map +1 -0
- package/dist/auto-reply/types.d.ts +37 -0
- package/dist/auto-reply/types.d.ts.map +1 -0
- package/dist/auto-reply/types.js +2 -0
- package/dist/auto-reply/types.js.map +1 -0
- package/dist/bridge/circuit-breaker.d.ts +40 -0
- package/dist/bridge/circuit-breaker.d.ts.map +1 -0
- package/dist/bridge/circuit-breaker.js +82 -0
- package/dist/bridge/circuit-breaker.js.map +1 -0
- package/dist/bridge/event-handler.d.ts +18 -0
- package/dist/bridge/event-handler.d.ts.map +1 -0
- package/dist/bridge/event-handler.js +128 -0
- package/dist/bridge/event-handler.js.map +1 -0
- package/dist/bridge/message-queue.d.ts +50 -0
- package/dist/bridge/message-queue.d.ts.map +1 -0
- package/dist/bridge/message-queue.js +110 -0
- package/dist/bridge/message-queue.js.map +1 -0
- package/dist/bridge/message-router.d.ts +37 -0
- package/dist/bridge/message-router.d.ts.map +1 -0
- package/dist/bridge/message-router.js +329 -0
- package/dist/bridge/message-router.js.map +1 -0
- package/dist/bridge/opencode-client.d.ts +55 -0
- package/dist/bridge/opencode-client.d.ts.map +1 -0
- package/dist/bridge/opencode-client.js +282 -0
- package/dist/bridge/opencode-client.js.map +1 -0
- package/dist/bridge/routers/channels.d.ts +11 -0
- package/dist/bridge/routers/channels.d.ts.map +1 -0
- package/dist/bridge/routers/channels.js +164 -0
- package/dist/bridge/routers/channels.js.map +1 -0
- package/dist/bridge/routers/cli.d.ts +11 -0
- package/dist/bridge/routers/cli.d.ts.map +1 -0
- package/dist/bridge/routers/cli.js +31 -0
- package/dist/bridge/routers/cli.js.map +1 -0
- package/dist/bridge/routers/governance.d.ts +13 -0
- package/dist/bridge/routers/governance.d.ts.map +1 -0
- package/dist/bridge/routers/governance.js +115 -0
- package/dist/bridge/routers/governance.js.map +1 -0
- package/dist/bridge/routers/intelligence.d.ts +23 -0
- package/dist/bridge/routers/intelligence.d.ts.map +1 -0
- package/dist/bridge/routers/intelligence.js +165 -0
- package/dist/bridge/routers/intelligence.js.map +1 -0
- package/dist/bridge/routers/skills-handlers.d.ts +122 -0
- package/dist/bridge/routers/skills-handlers.d.ts.map +1 -0
- package/dist/bridge/routers/skills-handlers.js +396 -0
- package/dist/bridge/routers/skills-handlers.js.map +1 -0
- package/dist/bridge/routers/skills-router.d.ts +5 -0
- package/dist/bridge/routers/skills-router.d.ts.map +1 -0
- package/dist/bridge/routers/skills-router.js +22 -0
- package/dist/bridge/routers/skills-router.js.map +1 -0
- package/dist/bridge/routers/skills.d.ts +2 -0
- package/dist/bridge/routers/skills.d.ts.map +1 -0
- package/dist/bridge/routers/skills.js +4 -0
- package/dist/bridge/routers/skills.js.map +1 -0
- package/dist/bridge/routers/system.d.ts +29 -0
- package/dist/bridge/routers/system.d.ts.map +1 -0
- package/dist/bridge/routers/system.js +132 -0
- package/dist/bridge/routers/system.js.map +1 -0
- package/dist/bridge/routers/vault.d.ts +11 -0
- package/dist/bridge/routers/vault.d.ts.map +1 -0
- package/dist/bridge/routers/vault.js +97 -0
- package/dist/bridge/routers/vault.js.map +1 -0
- package/dist/bridge/session-map.d.ts +24 -0
- package/dist/bridge/session-map.d.ts.map +1 -0
- package/dist/bridge/session-map.js +78 -0
- package/dist/bridge/session-map.js.map +1 -0
- package/dist/bridge/stream-coalescer.d.ts +26 -0
- package/dist/bridge/stream-coalescer.d.ts.map +1 -0
- package/dist/bridge/stream-coalescer.js +82 -0
- package/dist/bridge/stream-coalescer.js.map +1 -0
- package/dist/bridge/supervisor.d.ts +50 -0
- package/dist/bridge/supervisor.d.ts.map +1 -0
- package/dist/bridge/supervisor.js +139 -0
- package/dist/bridge/supervisor.js.map +1 -0
- package/dist/bridge/tool-server.d.ts +73 -0
- package/dist/bridge/tool-server.d.ts.map +1 -0
- package/dist/bridge/tool-server.js +209 -0
- package/dist/bridge/tool-server.js.map +1 -0
- package/dist/canvas/components.d.ts +71 -0
- package/dist/canvas/components.d.ts.map +1 -0
- package/dist/canvas/components.js +2 -0
- package/dist/canvas/components.js.map +1 -0
- package/dist/canvas/renderer.d.ts +2 -0
- package/dist/canvas/renderer.d.ts.map +1 -0
- package/dist/canvas/renderer.js +240 -0
- package/dist/canvas/renderer.js.map +1 -0
- package/dist/canvas/server.d.ts +24 -0
- package/dist/canvas/server.d.ts.map +1 -0
- package/dist/canvas/server.js +134 -0
- package/dist/canvas/server.js.map +1 -0
- package/dist/canvas/session.d.ts +23 -0
- package/dist/canvas/session.d.ts.map +1 -0
- package/dist/canvas/session.js +64 -0
- package/dist/canvas/session.js.map +1 -0
- package/dist/channels/adapter.d.ts +90 -0
- package/dist/channels/adapter.d.ts.map +1 -0
- package/dist/channels/adapter.js +2 -0
- package/dist/channels/adapter.js.map +1 -0
- package/dist/channels/discord/client.d.ts +3 -0
- package/dist/channels/discord/client.d.ts.map +1 -0
- package/dist/channels/discord/client.js +13 -0
- package/dist/channels/discord/client.js.map +1 -0
- package/dist/channels/discord/index.d.ts +41 -0
- package/dist/channels/discord/index.d.ts.map +1 -0
- package/dist/channels/discord/index.js +113 -0
- package/dist/channels/discord/index.js.map +1 -0
- package/dist/channels/discord/normalize.d.ts +4 -0
- package/dist/channels/discord/normalize.d.ts.map +1 -0
- package/dist/channels/discord/normalize.js +20 -0
- package/dist/channels/discord/normalize.js.map +1 -0
- package/dist/channels/discord/send.d.ts +13 -0
- package/dist/channels/discord/send.d.ts.map +1 -0
- package/dist/channels/discord/send.js +54 -0
- package/dist/channels/discord/send.js.map +1 -0
- package/dist/channels/mention-gating.d.ts +13 -0
- package/dist/channels/mention-gating.d.ts.map +1 -0
- package/dist/channels/mention-gating.js +42 -0
- package/dist/channels/mention-gating.js.map +1 -0
- package/dist/channels/message-cache.d.ts +17 -0
- package/dist/channels/message-cache.d.ts.map +1 -0
- package/dist/channels/message-cache.js +43 -0
- package/dist/channels/message-cache.js.map +1 -0
- package/dist/channels/registry.d.ts +9 -0
- package/dist/channels/registry.d.ts.map +1 -0
- package/dist/channels/registry.js +19 -0
- package/dist/channels/registry.js.map +1 -0
- package/dist/channels/slack/index.d.ts +38 -0
- package/dist/channels/slack/index.d.ts.map +1 -0
- package/dist/channels/slack/index.js +105 -0
- package/dist/channels/slack/index.js.map +1 -0
- package/dist/channels/slack/normalize.d.ts +14 -0
- package/dist/channels/slack/normalize.d.ts.map +1 -0
- package/dist/channels/slack/normalize.js +23 -0
- package/dist/channels/slack/normalize.js.map +1 -0
- package/dist/channels/slack/send.d.ts +13 -0
- package/dist/channels/slack/send.d.ts.map +1 -0
- package/dist/channels/slack/send.js +48 -0
- package/dist/channels/slack/send.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +42 -0
- package/dist/channels/telegram/index.d.ts.map +1 -0
- package/dist/channels/telegram/index.js +125 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/telegram/normalize.d.ts +4 -0
- package/dist/channels/telegram/normalize.d.ts.map +1 -0
- package/dist/channels/telegram/normalize.js +25 -0
- package/dist/channels/telegram/normalize.js.map +1 -0
- package/dist/channels/telegram/send.d.ts +13 -0
- package/dist/channels/telegram/send.d.ts.map +1 -0
- package/dist/channels/telegram/send.js +55 -0
- package/dist/channels/telegram/send.js.map +1 -0
- package/dist/channels/webchat/index.d.ts +20 -0
- package/dist/channels/webchat/index.d.ts.map +1 -0
- package/dist/channels/webchat/index.js +42 -0
- package/dist/channels/webchat/index.js.map +1 -0
- package/dist/channels/whatsapp/connection.d.ts +43 -0
- package/dist/channels/whatsapp/connection.d.ts.map +1 -0
- package/dist/channels/whatsapp/connection.js +76 -0
- package/dist/channels/whatsapp/connection.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +38 -0
- package/dist/channels/whatsapp/index.d.ts.map +1 -0
- package/dist/channels/whatsapp/index.js +99 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/channels/whatsapp/normalize.d.ts +4 -0
- package/dist/channels/whatsapp/normalize.d.ts.map +1 -0
- package/dist/channels/whatsapp/normalize.js +31 -0
- package/dist/channels/whatsapp/normalize.js.map +1 -0
- package/dist/channels/whatsapp/send.d.ts +12 -0
- package/dist/channels/whatsapp/send.d.ts.map +1 -0
- package/dist/channels/whatsapp/send.js +48 -0
- package/dist/channels/whatsapp/send.js.map +1 -0
- package/dist/cli/banner.d.ts +2 -0
- package/dist/cli/banner.d.ts.map +1 -0
- package/dist/cli/banner.js +18 -0
- package/dist/cli/banner.js.map +1 -0
- package/dist/cli/commands/config-cmd.d.ts +13 -0
- package/dist/cli/commands/config-cmd.d.ts.map +1 -0
- package/dist/cli/commands/config-cmd.js +76 -0
- package/dist/cli/commands/config-cmd.js.map +1 -0
- package/dist/cli/commands/cron-cmd.d.ts +23 -0
- package/dist/cli/commands/cron-cmd.d.ts.map +1 -0
- package/dist/cli/commands/cron-cmd.js +88 -0
- package/dist/cli/commands/cron-cmd.js.map +1 -0
- package/dist/cli/commands/doctor.d.ts +7 -0
- package/dist/cli/commands/doctor.d.ts.map +1 -0
- package/dist/cli/commands/doctor.js +88 -0
- package/dist/cli/commands/doctor.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +8 -0
- package/dist/cli/commands/gateway.d.ts.map +1 -0
- package/dist/cli/commands/gateway.js +33 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/init.d.ts +7 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +308 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/pairing.d.ts +19 -0
- package/dist/cli/commands/pairing.d.ts.map +1 -0
- package/dist/cli/commands/pairing.js +70 -0
- package/dist/cli/commands/pairing.js.map +1 -0
- package/dist/cli/commands/scan.d.ts +8 -0
- package/dist/cli/commands/scan.d.ts.map +1 -0
- package/dist/cli/commands/scan.js +39 -0
- package/dist/cli/commands/scan.js.map +1 -0
- package/dist/cli/commands/security.d.ts +15 -0
- package/dist/cli/commands/security.d.ts.map +1 -0
- package/dist/cli/commands/security.js +49 -0
- package/dist/cli/commands/security.js.map +1 -0
- package/dist/cli/commands/send.d.ts +10 -0
- package/dist/cli/commands/send.d.ts.map +1 -0
- package/dist/cli/commands/send.js +64 -0
- package/dist/cli/commands/send.js.map +1 -0
- package/dist/cli/commands/session.d.ts +13 -0
- package/dist/cli/commands/session.d.ts.map +1 -0
- package/dist/cli/commands/session.js +48 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/status.d.ts +7 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +43 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/executor.d.ts +19 -0
- package/dist/cli/executor.d.ts.map +1 -0
- package/dist/cli/executor.js +75 -0
- package/dist/cli/executor.js.map +1 -0
- package/dist/cli/program.d.ts +3 -0
- package/dist/cli/program.d.ts.map +1 -0
- package/dist/cli/program.js +49 -0
- package/dist/cli/program.js.map +1 -0
- package/dist/cli/registry.d.ts +15 -0
- package/dist/cli/registry.d.ts.map +1 -0
- package/dist/cli/registry.js +64 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/types.d.ts +40 -0
- package/dist/cli/types.d.ts.map +1 -0
- package/dist/cli/types.js +2 -0
- package/dist/cli/types.js.map +1 -0
- package/dist/config/loader.d.ts +4 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +31 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +4 -0
- package/dist/config/paths.d.ts.map +1 -0
- package/dist/config/paths.js +14 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/schema.d.ts +1414 -0
- package/dist/config/schema.d.ts.map +1 -0
- package/dist/config/schema.js +256 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/config/types.d.ts +176 -0
- package/dist/config/types.d.ts.map +1 -0
- package/dist/config/types.js +2 -0
- package/dist/config/types.js.map +1 -0
- package/dist/cron/run-log.d.ts +14 -0
- package/dist/cron/run-log.d.ts.map +1 -0
- package/dist/cron/run-log.js +16 -0
- package/dist/cron/run-log.js.map +1 -0
- package/dist/cron/service.d.ts +29 -0
- package/dist/cron/service.d.ts.map +1 -0
- package/dist/cron/service.js +98 -0
- package/dist/cron/service.js.map +1 -0
- package/dist/cron/store.d.ts +20 -0
- package/dist/cron/store.d.ts.map +1 -0
- package/dist/cron/store.js +61 -0
- package/dist/cron/store.js.map +1 -0
- package/dist/gateway/adapters.d.ts +37 -0
- package/dist/gateway/adapters.d.ts.map +1 -0
- package/dist/gateway/adapters.js +83 -0
- package/dist/gateway/adapters.js.map +1 -0
- package/dist/gateway/health.d.ts +19 -0
- package/dist/gateway/health.d.ts.map +1 -0
- package/dist/gateway/health.js +117 -0
- package/dist/gateway/health.js.map +1 -0
- package/dist/gateway/intelligence-wiring.d.ts +38 -0
- package/dist/gateway/intelligence-wiring.d.ts.map +1 -0
- package/dist/gateway/intelligence-wiring.js +49 -0
- package/dist/gateway/intelligence-wiring.js.map +1 -0
- package/dist/gateway/lifecycle.d.ts +71 -0
- package/dist/gateway/lifecycle.d.ts.map +1 -0
- package/dist/gateway/lifecycle.js +318 -0
- package/dist/gateway/lifecycle.js.map +1 -0
- package/dist/gateway/metrics.d.ts +27 -0
- package/dist/gateway/metrics.d.ts.map +1 -0
- package/dist/gateway/metrics.js +99 -0
- package/dist/gateway/metrics.js.map +1 -0
- package/dist/gateway/security-wiring.d.ts +16 -0
- package/dist/gateway/security-wiring.d.ts.map +1 -0
- package/dist/gateway/security-wiring.js +18 -0
- package/dist/gateway/security-wiring.js.map +1 -0
- package/dist/gateway/shutdown.d.ts +37 -0
- package/dist/gateway/shutdown.d.ts.map +1 -0
- package/dist/gateway/shutdown.js +60 -0
- package/dist/gateway/shutdown.js.map +1 -0
- package/dist/governance/engine.d.ts +11 -0
- package/dist/governance/engine.d.ts.map +1 -0
- package/dist/governance/engine.js +57 -0
- package/dist/governance/engine.js.map +1 -0
- package/dist/governance/policy.d.ts +68 -0
- package/dist/governance/policy.d.ts.map +1 -0
- package/dist/governance/policy.js +300 -0
- package/dist/governance/policy.js.map +1 -0
- package/dist/governance/types.d.ts +18 -0
- package/dist/governance/types.d.ts.map +1 -0
- package/dist/governance/types.js +2 -0
- package/dist/governance/types.js.map +1 -0
- package/dist/heartbeat/active-hours.d.ts +7 -0
- package/dist/heartbeat/active-hours.d.ts.map +1 -0
- package/dist/heartbeat/active-hours.js +38 -0
- package/dist/heartbeat/active-hours.js.map +1 -0
- package/dist/heartbeat/activity.d.ts +16 -0
- package/dist/heartbeat/activity.d.ts.map +1 -0
- package/dist/heartbeat/activity.js +41 -0
- package/dist/heartbeat/activity.js.map +1 -0
- package/dist/heartbeat/checkers.d.ts +34 -0
- package/dist/heartbeat/checkers.d.ts.map +1 -0
- package/dist/heartbeat/checkers.js +161 -0
- package/dist/heartbeat/checkers.js.map +1 -0
- package/dist/heartbeat/coalesce.d.ts +16 -0
- package/dist/heartbeat/coalesce.d.ts.map +1 -0
- package/dist/heartbeat/coalesce.js +36 -0
- package/dist/heartbeat/coalesce.js.map +1 -0
- package/dist/heartbeat/empty-check.d.ts +12 -0
- package/dist/heartbeat/empty-check.d.ts.map +1 -0
- package/dist/heartbeat/empty-check.js +24 -0
- package/dist/heartbeat/empty-check.js.map +1 -0
- package/dist/heartbeat/engine.d.ts +39 -0
- package/dist/heartbeat/engine.d.ts.map +1 -0
- package/dist/heartbeat/engine.js +235 -0
- package/dist/heartbeat/engine.js.map +1 -0
- package/dist/heartbeat/store.d.ts +32 -0
- package/dist/heartbeat/store.d.ts.map +1 -0
- package/dist/heartbeat/store.js +127 -0
- package/dist/heartbeat/store.js.map +1 -0
- package/dist/heartbeat/types.d.ts +74 -0
- package/dist/heartbeat/types.d.ts.map +1 -0
- package/dist/heartbeat/types.js +2 -0
- package/dist/heartbeat/types.js.map +1 -0
- package/dist/heartbeat/visibility.d.ts +8 -0
- package/dist/heartbeat/visibility.d.ts.map +1 -0
- package/dist/heartbeat/visibility.js +13 -0
- package/dist/heartbeat/visibility.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -0
- package/dist/instance/coordinator.d.ts +30 -0
- package/dist/instance/coordinator.d.ts.map +1 -0
- package/dist/instance/coordinator.js +113 -0
- package/dist/instance/coordinator.js.map +1 -0
- package/dist/intelligence/arcs/detector.d.ts +57 -0
- package/dist/intelligence/arcs/detector.d.ts.map +1 -0
- package/dist/intelligence/arcs/detector.js +140 -0
- package/dist/intelligence/arcs/detector.js.map +1 -0
- package/dist/intelligence/arcs/lifecycle.d.ts +39 -0
- package/dist/intelligence/arcs/lifecycle.d.ts.map +1 -0
- package/dist/intelligence/arcs/lifecycle.js +87 -0
- package/dist/intelligence/arcs/lifecycle.js.map +1 -0
- package/dist/intelligence/arcs/store.d.ts +30 -0
- package/dist/intelligence/arcs/store.d.ts.map +1 -0
- package/dist/intelligence/arcs/store.js +117 -0
- package/dist/intelligence/arcs/store.js.map +1 -0
- package/dist/intelligence/bus.d.ts +21 -0
- package/dist/intelligence/bus.d.ts.map +1 -0
- package/dist/intelligence/bus.js +26 -0
- package/dist/intelligence/bus.js.map +1 -0
- package/dist/intelligence/cross-channel/resolver.d.ts +43 -0
- package/dist/intelligence/cross-channel/resolver.d.ts.map +1 -0
- package/dist/intelligence/cross-channel/resolver.js +129 -0
- package/dist/intelligence/cross-channel/resolver.js.map +1 -0
- package/dist/intelligence/goals/lifecycle.d.ts +66 -0
- package/dist/intelligence/goals/lifecycle.d.ts.map +1 -0
- package/dist/intelligence/goals/lifecycle.js +135 -0
- package/dist/intelligence/goals/lifecycle.js.map +1 -0
- package/dist/intelligence/goals/store.d.ts +30 -0
- package/dist/intelligence/goals/store.d.ts.map +1 -0
- package/dist/intelligence/goals/store.js +105 -0
- package/dist/intelligence/goals/store.js.map +1 -0
- package/dist/intelligence/health/gate.d.ts +41 -0
- package/dist/intelligence/health/gate.d.ts.map +1 -0
- package/dist/intelligence/health/gate.js +140 -0
- package/dist/intelligence/health/gate.js.map +1 -0
- package/dist/intelligence/health/trend-detector.d.ts +43 -0
- package/dist/intelligence/health/trend-detector.d.ts.map +1 -0
- package/dist/intelligence/health/trend-detector.js +160 -0
- package/dist/intelligence/health/trend-detector.js.map +1 -0
- package/dist/intelligence/inference/engine.d.ts +32 -0
- package/dist/intelligence/inference/engine.d.ts.map +1 -0
- package/dist/intelligence/inference/engine.js +98 -0
- package/dist/intelligence/inference/engine.js.map +1 -0
- package/dist/intelligence/inference/rules/engagement-trend.d.ts +9 -0
- package/dist/intelligence/inference/rules/engagement-trend.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/engagement-trend.js +50 -0
- package/dist/intelligence/inference/rules/engagement-trend.js.map +1 -0
- package/dist/intelligence/inference/rules/index.d.ts +3 -0
- package/dist/intelligence/inference/rules/index.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/index.js +13 -0
- package/dist/intelligence/inference/rules/index.js.map +1 -0
- package/dist/intelligence/inference/rules/language-stability.d.ts +9 -0
- package/dist/intelligence/inference/rules/language-stability.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/language-stability.js +68 -0
- package/dist/intelligence/inference/rules/language-stability.js.map +1 -0
- package/dist/intelligence/inference/rules/response-cadence.d.ts +9 -0
- package/dist/intelligence/inference/rules/response-cadence.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/response-cadence.js +53 -0
- package/dist/intelligence/inference/rules/response-cadence.js.map +1 -0
- package/dist/intelligence/inference/rules/session-pattern.d.ts +9 -0
- package/dist/intelligence/inference/rules/session-pattern.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/session-pattern.js +53 -0
- package/dist/intelligence/inference/rules/session-pattern.js.map +1 -0
- package/dist/intelligence/inference/rules/timezone-from-hours.d.ts +3 -0
- package/dist/intelligence/inference/rules/timezone-from-hours.d.ts.map +1 -0
- package/dist/intelligence/inference/rules/timezone-from-hours.js +93 -0
- package/dist/intelligence/inference/rules/timezone-from-hours.js.map +1 -0
- package/dist/intelligence/inference/store.d.ts +21 -0
- package/dist/intelligence/inference/store.d.ts.map +1 -0
- package/dist/intelligence/inference/store.js +82 -0
- package/dist/intelligence/inference/store.js.map +1 -0
- package/dist/intelligence/outcomes/analyzer.d.ts +52 -0
- package/dist/intelligence/outcomes/analyzer.d.ts.map +1 -0
- package/dist/intelligence/outcomes/analyzer.js +103 -0
- package/dist/intelligence/outcomes/analyzer.js.map +1 -0
- package/dist/intelligence/outcomes/categorizer.d.ts +12 -0
- package/dist/intelligence/outcomes/categorizer.d.ts.map +1 -0
- package/dist/intelligence/outcomes/categorizer.js +19 -0
- package/dist/intelligence/outcomes/categorizer.js.map +1 -0
- package/dist/intelligence/outcomes/store.d.ts +21 -0
- package/dist/intelligence/outcomes/store.d.ts.map +1 -0
- package/dist/intelligence/outcomes/store.js +107 -0
- package/dist/intelligence/outcomes/store.js.map +1 -0
- package/dist/intelligence/prompt-assembler.d.ts +39 -0
- package/dist/intelligence/prompt-assembler.d.ts.map +1 -0
- package/dist/intelligence/prompt-assembler.js +99 -0
- package/dist/intelligence/prompt-assembler.js.map +1 -0
- package/dist/intelligence/store.d.ts +50 -0
- package/dist/intelligence/store.d.ts.map +1 -0
- package/dist/intelligence/store.js +102 -0
- package/dist/intelligence/store.js.map +1 -0
- package/dist/intelligence/triggers/evaluator.d.ts +27 -0
- package/dist/intelligence/triggers/evaluator.d.ts.map +1 -0
- package/dist/intelligence/triggers/evaluator.js +81 -0
- package/dist/intelligence/triggers/evaluator.js.map +1 -0
- package/dist/intelligence/triggers/rules.d.ts +10 -0
- package/dist/intelligence/triggers/rules.d.ts.map +1 -0
- package/dist/intelligence/triggers/rules.js +186 -0
- package/dist/intelligence/triggers/rules.js.map +1 -0
- package/dist/intelligence/types.d.ts +182 -0
- package/dist/intelligence/types.d.ts.map +1 -0
- package/dist/intelligence/types.js +3 -0
- package/dist/intelligence/types.js.map +1 -0
- package/dist/logging/logger.d.ts +5 -0
- package/dist/logging/logger.d.ts.map +1 -0
- package/dist/logging/logger.js +20 -0
- package/dist/logging/logger.js.map +1 -0
- package/dist/media/compress.d.ts +13 -0
- package/dist/media/compress.d.ts.map +1 -0
- package/dist/media/compress.js +38 -0
- package/dist/media/compress.js.map +1 -0
- package/dist/media/fetch.d.ts +18 -0
- package/dist/media/fetch.d.ts.map +1 -0
- package/dist/media/fetch.js +62 -0
- package/dist/media/fetch.js.map +1 -0
- package/dist/media/mime.d.ts +11 -0
- package/dist/media/mime.d.ts.map +1 -0
- package/dist/media/mime.js +112 -0
- package/dist/media/mime.js.map +1 -0
- package/dist/media/parse.d.ts +20 -0
- package/dist/media/parse.d.ts.map +1 -0
- package/dist/media/parse.js +52 -0
- package/dist/media/parse.js.map +1 -0
- package/dist/media/server.d.ts +17 -0
- package/dist/media/server.d.ts.map +1 -0
- package/dist/media/server.js +76 -0
- package/dist/media/server.js.map +1 -0
- package/dist/media/store.d.ts +26 -0
- package/dist/media/store.d.ts.map +1 -0
- package/dist/media/store.js +100 -0
- package/dist/media/store.js.map +1 -0
- package/dist/onboarding/enricher.d.ts +25 -0
- package/dist/onboarding/enricher.d.ts.map +1 -0
- package/dist/onboarding/enricher.js +151 -0
- package/dist/onboarding/enricher.js.map +1 -0
- package/dist/onboarding/signals.d.ts +13 -0
- package/dist/onboarding/signals.d.ts.map +1 -0
- package/dist/onboarding/signals.js +79 -0
- package/dist/onboarding/signals.js.map +1 -0
- package/dist/onboarding/types.d.ts +28 -0
- package/dist/onboarding/types.d.ts.map +1 -0
- package/dist/onboarding/types.js +2 -0
- package/dist/onboarding/types.js.map +1 -0
- package/dist/plugins/hook-bus.d.ts +7 -0
- package/dist/plugins/hook-bus.d.ts.map +1 -0
- package/dist/plugins/hook-bus.js +25 -0
- package/dist/plugins/hook-bus.js.map +1 -0
- package/dist/plugins/loader.d.ts +14 -0
- package/dist/plugins/loader.d.ts.map +1 -0
- package/dist/plugins/loader.js +108 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/registry.d.ts +13 -0
- package/dist/plugins/registry.d.ts.map +1 -0
- package/dist/plugins/registry.js +32 -0
- package/dist/plugins/registry.js.map +1 -0
- package/dist/plugins/types.d.ts +67 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +2 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/proactive/engine.d.ts +46 -0
- package/dist/proactive/engine.d.ts.map +1 -0
- package/dist/proactive/engine.js +238 -0
- package/dist/proactive/engine.js.map +1 -0
- package/dist/proactive/store.d.ts +35 -0
- package/dist/proactive/store.d.ts.map +1 -0
- package/dist/proactive/store.js +186 -0
- package/dist/proactive/store.js.map +1 -0
- package/dist/proactive/types.d.ts +91 -0
- package/dist/proactive/types.d.ts.map +1 -0
- package/dist/proactive/types.js +2 -0
- package/dist/proactive/types.js.map +1 -0
- package/dist/sdk/client.d.ts +222 -0
- package/dist/sdk/client.d.ts.map +1 -0
- package/dist/sdk/client.js +108 -0
- package/dist/sdk/client.js.map +1 -0
- package/dist/security/allowlist-store.d.ts +17 -0
- package/dist/security/allowlist-store.d.ts.map +1 -0
- package/dist/security/allowlist-store.js +52 -0
- package/dist/security/allowlist-store.js.map +1 -0
- package/dist/security/dm-policy.d.ts +32 -0
- package/dist/security/dm-policy.d.ts.map +1 -0
- package/dist/security/dm-policy.js +67 -0
- package/dist/security/dm-policy.js.map +1 -0
- package/dist/security/pairing-store.d.ts +25 -0
- package/dist/security/pairing-store.d.ts.map +1 -0
- package/dist/security/pairing-store.js +103 -0
- package/dist/security/pairing-store.js.map +1 -0
- package/dist/security/rate-limiter.d.ts +17 -0
- package/dist/security/rate-limiter.d.ts.map +1 -0
- package/dist/security/rate-limiter.js +43 -0
- package/dist/security/rate-limiter.js.map +1 -0
- package/dist/security/scan-rules.d.ts +3 -0
- package/dist/security/scan-rules.d.ts.map +1 -0
- package/dist/security/scan-rules.js +79 -0
- package/dist/security/scan-rules.js.map +1 -0
- package/dist/security/scan-types.d.ts +27 -0
- package/dist/security/scan-types.d.ts.map +1 -0
- package/dist/security/scan-types.js +2 -0
- package/dist/security/scan-types.js.map +1 -0
- package/dist/security/scanner.d.ts +8 -0
- package/dist/security/scanner.d.ts.map +1 -0
- package/dist/security/scanner.js +105 -0
- package/dist/security/scanner.js.map +1 -0
- package/dist/usage/tracker.d.ts +13 -0
- package/dist/usage/tracker.d.ts.map +1 -0
- package/dist/usage/tracker.js +66 -0
- package/dist/usage/tracker.js.map +1 -0
- package/dist/usage/types.d.ts +28 -0
- package/dist/usage/types.d.ts.map +1 -0
- package/dist/usage/types.js +2 -0
- package/dist/usage/types.js.map +1 -0
- package/dist/utils/file-lock.d.ts +2 -0
- package/dist/utils/file-lock.d.ts.map +1 -0
- package/dist/utils/file-lock.js +15 -0
- package/dist/utils/file-lock.js.map +1 -0
- package/dist/utils/retry.d.ts +8 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +35 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/text-chunker.d.ts +3 -0
- package/dist/utils/text-chunker.d.ts.map +1 -0
- package/dist/utils/text-chunker.js +58 -0
- package/dist/utils/text-chunker.js.map +1 -0
- package/dist/utils/typed-emitter.d.ts +14 -0
- package/dist/utils/typed-emitter.d.ts.map +1 -0
- package/dist/utils/typed-emitter.js +27 -0
- package/dist/utils/typed-emitter.js.map +1 -0
- package/dist/utils/types.d.ts +22 -0
- package/dist/utils/types.d.ts.map +1 -0
- package/dist/utils/types.js +13 -0
- package/dist/utils/types.js.map +1 -0
- package/dist/vault/db.d.ts +19 -0
- package/dist/vault/db.d.ts.map +1 -0
- package/dist/vault/db.js +201 -0
- package/dist/vault/db.js.map +1 -0
- package/dist/vault/search.d.ts +16 -0
- package/dist/vault/search.d.ts.map +1 -0
- package/dist/vault/search.js +75 -0
- package/dist/vault/search.js.map +1 -0
- package/dist/vault/store.d.ts +68 -0
- package/dist/vault/store.d.ts.map +1 -0
- package/dist/vault/store.js +170 -0
- package/dist/vault/store.js.map +1 -0
- package/dist/vault/types.d.ts +50 -0
- package/dist/vault/types.d.ts.map +1 -0
- package/dist/vault/types.js +2 -0
- package/dist/vault/types.js.map +1 -0
- package/docs/sdk/getting-started.md +133 -0
- package/package.json +87 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { Command } from "clipanion";
|
|
2
|
+
export declare class GatewayRunCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
config: string | undefined;
|
|
6
|
+
execute(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
//# sourceMappingURL=gateway.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAO5C,qBAAa,iBAAkB,SAAQ,OAAO;IAC5C,OAAgB,KAAK,aAAyC;IAE9D,OAAgB,KAAK,4BAMlB;IAEH,MAAM,qBAGH;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAY/B"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Command, Option } from "clipanion";
|
|
2
|
+
import { createRequire } from "node:module";
|
|
3
|
+
const require = createRequire(import.meta.url);
|
|
4
|
+
const pkg = require("../../../package.json");
|
|
5
|
+
import { startGateway } from "../../gateway/lifecycle.js";
|
|
6
|
+
import { printBanner } from "../banner.js";
|
|
7
|
+
export class GatewayRunCommand extends Command {
|
|
8
|
+
static paths = [["gateway", "run"], Command.Default];
|
|
9
|
+
static usage = Command.Usage({
|
|
10
|
+
description: "Start the Iris messaging gateway",
|
|
11
|
+
examples: [
|
|
12
|
+
["Start with default config", "iris gateway run"],
|
|
13
|
+
["Start with custom config", "iris gateway run --config ./my-config.json"],
|
|
14
|
+
],
|
|
15
|
+
});
|
|
16
|
+
config = Option.String("--config,-c", {
|
|
17
|
+
description: "Path to config file",
|
|
18
|
+
required: false,
|
|
19
|
+
});
|
|
20
|
+
async execute() {
|
|
21
|
+
printBanner(pkg.version);
|
|
22
|
+
try {
|
|
23
|
+
const _ctx = await startGateway(this.config);
|
|
24
|
+
// Gateway is running, wait for shutdown signal
|
|
25
|
+
await new Promise(() => { }); // Block forever until signal
|
|
26
|
+
}
|
|
27
|
+
catch (err) {
|
|
28
|
+
console.error("Failed to start gateway:", err);
|
|
29
|
+
process.exit(1);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=gateway.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gateway.js","sourceRoot":"","sources":["../../../src/cli/commands/gateway.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAC5C,MAAM,OAAO,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC/C,MAAM,GAAG,GAAG,OAAO,CAAC,uBAAuB,CAAwB,CAAC;AACpE,OAAO,EAAE,YAAY,EAAE,MAAM,4BAA4B,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAE3C,MAAM,OAAO,iBAAkB,SAAQ,OAAO;IAC5C,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE9D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,kCAAkC;QAC/C,QAAQ,EAAE;YACR,CAAC,2BAA2B,EAAE,kBAAkB,CAAC;YACjD,CAAC,0BAA0B,EAAE,4CAA4C,CAAC;SAC3E;KACF,CAAC,CAAC;IAEH,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,EAAE;QACpC,WAAW,EAAE,qBAAqB;QAClC,QAAQ,EAAE,KAAK;KAChB,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QAEzB,IAAI,CAAC;YACH,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC7C,+CAA+C;YAC/C,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC,6BAA6B;QAC5D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,GAAG,CAAC,CAAC;YAC/C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4DpC,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAGlB;IAEG,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CA0PjC"}
|
|
@@ -0,0 +1,308 @@
|
|
|
1
|
+
import { Command } from "clipanion";
|
|
2
|
+
import * as p from "@clack/prompts";
|
|
3
|
+
import { writeFile, readFile, access } from "node:fs/promises";
|
|
4
|
+
import { execSync, spawnSync } from "node:child_process";
|
|
5
|
+
import { resolve } from "node:path";
|
|
6
|
+
import * as os from "node:os";
|
|
7
|
+
// ─── helpers ─────────────────────────────────────────────────────────────────
|
|
8
|
+
function detectOpenCode() {
|
|
9
|
+
for (const bin of ["opencode", "opencode-ai"]) {
|
|
10
|
+
try {
|
|
11
|
+
const result = spawnSync("which", [bin], { encoding: "utf-8" });
|
|
12
|
+
if (result.status === 0 && result.stdout.trim())
|
|
13
|
+
return result.stdout.trim();
|
|
14
|
+
}
|
|
15
|
+
catch {
|
|
16
|
+
/* ignore */
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
return null;
|
|
20
|
+
}
|
|
21
|
+
async function validateTelegramToken(token) {
|
|
22
|
+
try {
|
|
23
|
+
const res = await fetch(`https://api.telegram.org/bot${token}/getMe`);
|
|
24
|
+
const json = (await res.json());
|
|
25
|
+
return json.ok === true;
|
|
26
|
+
}
|
|
27
|
+
catch {
|
|
28
|
+
return false;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
async function validateDiscordToken(token) {
|
|
32
|
+
try {
|
|
33
|
+
const res = await fetch("https://discord.com/api/v10/users/@me", {
|
|
34
|
+
headers: { Authorization: `Bot ${token}` },
|
|
35
|
+
});
|
|
36
|
+
return res.ok;
|
|
37
|
+
}
|
|
38
|
+
catch {
|
|
39
|
+
return false;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async function validateSlackAppToken(token) {
|
|
43
|
+
try {
|
|
44
|
+
const res = await fetch("https://slack.com/api/apps.connections.open", {
|
|
45
|
+
method: "POST",
|
|
46
|
+
headers: {
|
|
47
|
+
Authorization: `Bearer ${token}`,
|
|
48
|
+
"Content-Type": "application/json",
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
const json = (await res.json());
|
|
52
|
+
return json.ok === true;
|
|
53
|
+
}
|
|
54
|
+
catch {
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
// ─── command ─────────────────────────────────────────────────────────────────
|
|
59
|
+
export class InitCommand extends Command {
|
|
60
|
+
static paths = [["init"]];
|
|
61
|
+
static usage = Command.Usage({
|
|
62
|
+
description: "Interactive setup wizard — get from zero to running in under 10 minutes",
|
|
63
|
+
examples: [["Run the setup wizard", "iris init"]],
|
|
64
|
+
});
|
|
65
|
+
async execute() {
|
|
66
|
+
p.intro("🌸 Iris Setup Wizard");
|
|
67
|
+
// ── 1. channels ──────────────────────────────────────────────────────────
|
|
68
|
+
const channelsResult = await p.multiselect({
|
|
69
|
+
message: "Which channels do you want to enable?",
|
|
70
|
+
options: [
|
|
71
|
+
{ value: "telegram", label: "Telegram", hint: "requires bot token from @BotFather" },
|
|
72
|
+
{ value: "whatsapp", label: "WhatsApp", hint: "QR-code pairing, no token needed" },
|
|
73
|
+
{ value: "discord", label: "Discord", hint: "requires bot token from Discord Dev Portal" },
|
|
74
|
+
{ value: "slack", label: "Slack", hint: "requires App-Level & Bot tokens" },
|
|
75
|
+
],
|
|
76
|
+
required: true,
|
|
77
|
+
});
|
|
78
|
+
if (p.isCancel(channelsResult)) {
|
|
79
|
+
p.cancel("Setup cancelled.");
|
|
80
|
+
return 1;
|
|
81
|
+
}
|
|
82
|
+
const channels = channelsResult;
|
|
83
|
+
// ── 2. per-channel tokens ─────────────────────────────────────────────────
|
|
84
|
+
const env = {};
|
|
85
|
+
const channelConfig = {};
|
|
86
|
+
if (channels.includes("telegram")) {
|
|
87
|
+
const token = await p.text({
|
|
88
|
+
message: "Enter your Telegram bot token:",
|
|
89
|
+
placeholder: "123456:ABC-DEF… (get one from @BotFather)",
|
|
90
|
+
validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
|
|
91
|
+
});
|
|
92
|
+
if (p.isCancel(token)) {
|
|
93
|
+
p.cancel("Setup cancelled.");
|
|
94
|
+
return 1;
|
|
95
|
+
}
|
|
96
|
+
const spin = p.spinner();
|
|
97
|
+
spin.start("Validating Telegram token…");
|
|
98
|
+
const ok = await validateTelegramToken(token);
|
|
99
|
+
spin.stop(ok ? "✓ Token valid" : "⚠ Could not validate — saved anyway");
|
|
100
|
+
env["TELEGRAM_BOT_TOKEN"] = token;
|
|
101
|
+
channelConfig["telegram"] = {
|
|
102
|
+
type: "telegram",
|
|
103
|
+
enabled: true,
|
|
104
|
+
token: "${env:TELEGRAM_BOT_TOKEN}",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (channels.includes("whatsapp")) {
|
|
108
|
+
channelConfig["whatsapp"] = { type: "whatsapp", enabled: true };
|
|
109
|
+
p.note("WhatsApp uses QR-code pairing on first run — no token needed.", "WhatsApp");
|
|
110
|
+
}
|
|
111
|
+
if (channels.includes("discord")) {
|
|
112
|
+
const token = await p.text({
|
|
113
|
+
message: "Enter your Discord bot token:",
|
|
114
|
+
placeholder: "MTI3… (Discord Developer Portal → Bot → Token)",
|
|
115
|
+
validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
|
|
116
|
+
});
|
|
117
|
+
if (p.isCancel(token)) {
|
|
118
|
+
p.cancel("Setup cancelled.");
|
|
119
|
+
return 1;
|
|
120
|
+
}
|
|
121
|
+
const spin = p.spinner();
|
|
122
|
+
spin.start("Validating Discord token…");
|
|
123
|
+
const ok = await validateDiscordToken(token);
|
|
124
|
+
spin.stop(ok ? "✓ Token valid" : "⚠ Could not validate — saved anyway");
|
|
125
|
+
env["DISCORD_BOT_TOKEN"] = token;
|
|
126
|
+
channelConfig["discord"] = {
|
|
127
|
+
type: "discord",
|
|
128
|
+
enabled: true,
|
|
129
|
+
token: "${env:DISCORD_BOT_TOKEN}",
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
if (channels.includes("slack")) {
|
|
133
|
+
const appToken = await p.text({
|
|
134
|
+
message: "Enter your Slack App-Level token (xapp-…):",
|
|
135
|
+
validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
|
|
136
|
+
});
|
|
137
|
+
if (p.isCancel(appToken)) {
|
|
138
|
+
p.cancel("Setup cancelled.");
|
|
139
|
+
return 1;
|
|
140
|
+
}
|
|
141
|
+
const botToken = await p.text({
|
|
142
|
+
message: "Enter your Slack Bot token (xoxb-…):",
|
|
143
|
+
validate: (v) => (v.trim() === "" ? "Token cannot be empty" : undefined),
|
|
144
|
+
});
|
|
145
|
+
if (p.isCancel(botToken)) {
|
|
146
|
+
p.cancel("Setup cancelled.");
|
|
147
|
+
return 1;
|
|
148
|
+
}
|
|
149
|
+
const spin = p.spinner();
|
|
150
|
+
spin.start("Validating Slack App token…");
|
|
151
|
+
const ok = await validateSlackAppToken(appToken);
|
|
152
|
+
spin.stop(ok ? "✓ App token valid" : "⚠ Could not validate — saved anyway");
|
|
153
|
+
env["SLACK_APP_TOKEN"] = appToken;
|
|
154
|
+
env["SLACK_BOT_TOKEN"] = botToken;
|
|
155
|
+
channelConfig["slack"] = {
|
|
156
|
+
type: "slack",
|
|
157
|
+
enabled: true,
|
|
158
|
+
appToken: "${env:SLACK_APP_TOKEN}",
|
|
159
|
+
botToken: "${env:SLACK_BOT_TOKEN}",
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
// ── 3. AI model ───────────────────────────────────────────────────────────
|
|
163
|
+
const modelResult = await p.select({
|
|
164
|
+
message: "Which AI model do you want to use?",
|
|
165
|
+
options: [
|
|
166
|
+
{
|
|
167
|
+
value: "openrouter/arcee-ai/arcee-spotlight:free",
|
|
168
|
+
label: "Arcee Spotlight (free)",
|
|
169
|
+
hint: "OpenRouter — no API key required",
|
|
170
|
+
},
|
|
171
|
+
{
|
|
172
|
+
value: "openrouter/arcee-ai/trinity-large-preview:free",
|
|
173
|
+
label: "Arcee Trinity Large (free)",
|
|
174
|
+
hint: "OpenRouter — no API key required",
|
|
175
|
+
},
|
|
176
|
+
{
|
|
177
|
+
value: "openrouter/meta-llama/llama-3.3-70b-instruct:free",
|
|
178
|
+
label: "Llama 3.3 70B Instruct (free)",
|
|
179
|
+
hint: "OpenRouter — no API key required",
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
value: "openrouter/mistralai/mistral-7b-instruct:free",
|
|
183
|
+
label: "Mistral 7B Instruct (free)",
|
|
184
|
+
hint: "OpenRouter — no API key required",
|
|
185
|
+
},
|
|
186
|
+
{ value: "__custom__", label: "Custom", hint: "enter model identifier manually" },
|
|
187
|
+
],
|
|
188
|
+
});
|
|
189
|
+
if (p.isCancel(modelResult)) {
|
|
190
|
+
p.cancel("Setup cancelled.");
|
|
191
|
+
return 1;
|
|
192
|
+
}
|
|
193
|
+
let finalModel = modelResult;
|
|
194
|
+
if (finalModel === "__custom__") {
|
|
195
|
+
const customModel = await p.text({
|
|
196
|
+
message: "Enter model identifier:",
|
|
197
|
+
placeholder: "e.g. openrouter/meta-llama/llama-3-8b-instruct:free",
|
|
198
|
+
validate: (v) => (v.trim() === "" ? "Cannot be empty" : undefined),
|
|
199
|
+
});
|
|
200
|
+
if (p.isCancel(customModel)) {
|
|
201
|
+
p.cancel("Setup cancelled.");
|
|
202
|
+
return 1;
|
|
203
|
+
}
|
|
204
|
+
finalModel = customModel;
|
|
205
|
+
}
|
|
206
|
+
if (finalModel.startsWith("openai/")) {
|
|
207
|
+
const apiKey = await p.text({
|
|
208
|
+
message: "Enter your OpenAI API key:",
|
|
209
|
+
validate: (v) => (v.trim() === "" ? "Key cannot be empty" : undefined),
|
|
210
|
+
});
|
|
211
|
+
if (p.isCancel(apiKey)) {
|
|
212
|
+
p.cancel("Setup cancelled.");
|
|
213
|
+
return 1;
|
|
214
|
+
}
|
|
215
|
+
env["OPENAI_API_KEY"] = apiKey;
|
|
216
|
+
}
|
|
217
|
+
else if (finalModel.startsWith("anthropic/")) {
|
|
218
|
+
const apiKey = await p.text({
|
|
219
|
+
message: "Enter your Anthropic API key:",
|
|
220
|
+
validate: (v) => (v.trim() === "" ? "Key cannot be empty" : undefined),
|
|
221
|
+
});
|
|
222
|
+
if (p.isCancel(apiKey)) {
|
|
223
|
+
p.cancel("Setup cancelled.");
|
|
224
|
+
return 1;
|
|
225
|
+
}
|
|
226
|
+
env["ANTHROPIC_API_KEY"] = apiKey;
|
|
227
|
+
}
|
|
228
|
+
// ── 4. OpenCode CLI ───────────────────────────────────────────────────────
|
|
229
|
+
const ocPath = detectOpenCode();
|
|
230
|
+
if (ocPath) {
|
|
231
|
+
p.note(`Detected at ${ocPath}`, "OpenCode CLI ✓");
|
|
232
|
+
}
|
|
233
|
+
else {
|
|
234
|
+
const installOc = await p.confirm({
|
|
235
|
+
message: "OpenCode CLI not found. Install it now? (npm i -g opencode-ai)",
|
|
236
|
+
initialValue: true,
|
|
237
|
+
});
|
|
238
|
+
if (p.isCancel(installOc)) {
|
|
239
|
+
p.cancel("Setup cancelled.");
|
|
240
|
+
return 1;
|
|
241
|
+
}
|
|
242
|
+
if (installOc) {
|
|
243
|
+
const spin = p.spinner();
|
|
244
|
+
spin.start("Installing OpenCode CLI…");
|
|
245
|
+
try {
|
|
246
|
+
execSync("npm install -g opencode-ai", { stdio: "pipe" });
|
|
247
|
+
spin.stop("✓ OpenCode CLI installed");
|
|
248
|
+
}
|
|
249
|
+
catch (err) {
|
|
250
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
251
|
+
const hint = msg.includes("EACCES") || msg.includes("permission")
|
|
252
|
+
? "Permission denied. Try: sudo npm i -g opencode-ai"
|
|
253
|
+
: "Run manually: npm i -g opencode-ai";
|
|
254
|
+
spin.stop(`⚠ Install failed — ${hint}`);
|
|
255
|
+
}
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
p.note("Install later with: npm i -g opencode-ai", "Skipped");
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
// ── 5. generate config ────────────────────────────────────────────────────
|
|
262
|
+
const configPath = resolve(process.cwd(), "iris.config.json");
|
|
263
|
+
const envPath = resolve(process.cwd(), ".env");
|
|
264
|
+
let baseConfig = {};
|
|
265
|
+
try {
|
|
266
|
+
const examplePath = resolve(process.cwd(), "iris.config.example.json");
|
|
267
|
+
await access(examplePath);
|
|
268
|
+
baseConfig = JSON.parse(await readFile(examplePath, "utf-8"));
|
|
269
|
+
}
|
|
270
|
+
catch {
|
|
271
|
+
/* start fresh if no example file */
|
|
272
|
+
}
|
|
273
|
+
const config = {
|
|
274
|
+
...baseConfig,
|
|
275
|
+
channels: channelConfig,
|
|
276
|
+
models: {
|
|
277
|
+
...(typeof baseConfig.models === "object" && baseConfig.models !== null
|
|
278
|
+
? baseConfig.models
|
|
279
|
+
: {}),
|
|
280
|
+
primary: finalModel,
|
|
281
|
+
small: finalModel,
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
const spin2 = p.spinner();
|
|
285
|
+
spin2.start("Writing config files…");
|
|
286
|
+
await writeFile(configPath, JSON.stringify(config, null, 2) + os.EOL, "utf-8");
|
|
287
|
+
const envLines = Object.entries(env)
|
|
288
|
+
.map(([k, v]) => `${k}=${v}`)
|
|
289
|
+
.join(os.EOL);
|
|
290
|
+
if (envLines) {
|
|
291
|
+
await writeFile(envPath, envLines + os.EOL, "utf-8");
|
|
292
|
+
}
|
|
293
|
+
spin2.stop("Done");
|
|
294
|
+
// ── 6. summary ────────────────────────────────────────────────────────────
|
|
295
|
+
p.note([
|
|
296
|
+
`✓ iris.config.json → ${configPath}`,
|
|
297
|
+
envLines ? `✓ .env → ${envPath}` : "",
|
|
298
|
+
"",
|
|
299
|
+
"Next step:",
|
|
300
|
+
" iris gateway run",
|
|
301
|
+
]
|
|
302
|
+
.filter(Boolean)
|
|
303
|
+
.join("\n"), "Setup complete 🎉");
|
|
304
|
+
p.outro("You're ready. Run: iris gateway run");
|
|
305
|
+
return 0;
|
|
306
|
+
}
|
|
307
|
+
}
|
|
308
|
+
//# sourceMappingURL=init.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/D,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AACzD,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAE9B,gFAAgF;AAEhF,SAAS,cAAc;IACrB,KAAK,MAAM,GAAG,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,CAAC;QAC9C,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;YAChE,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE;gBAAE,OAAO,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC;QAC/E,CAAC;QAAC,MAAM,CAAC;YACP,YAAY;QACd,CAAC;IACH,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAa;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,+BAA+B,KAAK,QAAQ,CAAC,CAAC;QACtE,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoB,CAAC;QACnD,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,oBAAoB,CAAC,KAAa;IAC/C,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,uCAAuC,EAAE;YAC/D,OAAO,EAAE,EAAE,aAAa,EAAE,OAAO,KAAK,EAAE,EAAE;SAC3C,CAAC,CAAC;QACH,OAAO,GAAG,CAAC,EAAE,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,KAAK,UAAU,qBAAqB,CAAC,KAAa;IAChD,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,6CAA6C,EAAE;YACrE,MAAM,EAAE,MAAM;YACd,OAAO,EAAE;gBACP,aAAa,EAAE,UAAU,KAAK,EAAE;gBAChC,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QACH,MAAM,IAAI,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,EAAE,CAAoB,CAAC;QACnD,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED,gFAAgF;AAEhF,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,yEAAyE;QACtF,QAAQ,EAAE,CAAC,CAAC,sBAAsB,EAAE,WAAW,CAAC,CAAC;KAClD,CAAC,CAAC;IAEH,KAAK,CAAC,OAAO;QACX,CAAC,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAEjC,4EAA4E;QAE5E,MAAM,cAAc,GAAG,MAAM,CAAC,CAAC,WAAW,CAAS;YACjD,OAAO,EAAE,uCAAuC;YAChD,OAAO,EAAE;gBACP,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,oCAAoC,EAAE;gBACpF,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,kCAAkC,EAAE;gBAClF,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,4CAA4C,EAAE;gBAC1F,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,iCAAiC,EAAE;aAC5E;YACD,QAAQ,EAAE,IAAI;SACf,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,cAAc,CAAC,EAAE,CAAC;YAC/B,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAC7B,OAAO,CAAC,CAAC;QACX,CAAC;QAED,MAAM,QAAQ,GAAG,cAA0B,CAAC;QAE5C,6EAA6E;QAE7E,MAAM,GAAG,GAA2B,EAAE,CAAC;QACvC,MAAM,aAAa,GAA4B,EAAE,CAAC;QAElD,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBACzB,OAAO,EAAE,gCAAgC;gBACzC,WAAW,EAAE,4CAA4C;gBACzD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;aACzE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAElE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,4BAA4B,CAAC,CAAC;YACzC,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAAC,KAAe,CAAC,CAAC;YACxD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YAExE,GAAG,CAAC,oBAAoB,CAAC,GAAG,KAAe,CAAC;YAC5C,aAAa,CAAC,UAAU,CAAC,GAAG;gBAC1B,IAAI,EAAE,UAAU;gBAChB,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,2BAA2B;aACnC,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAClC,aAAa,CAAC,UAAU,CAAC,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YAChE,CAAC,CAAC,IAAI,CAAC,+DAA+D,EAAE,UAAU,CAAC,CAAC;QACtF,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACjC,MAAM,KAAK,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBACzB,OAAO,EAAE,+BAA+B;gBACxC,WAAW,EAAE,gDAAgD;gBAC7D,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;aACzE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAElE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,2BAA2B,CAAC,CAAC;YACxC,MAAM,EAAE,GAAG,MAAM,oBAAoB,CAAC,KAAe,CAAC,CAAC;YACvD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YAExE,GAAG,CAAC,mBAAmB,CAAC,GAAG,KAAe,CAAC;YAC3C,aAAa,CAAC,SAAS,CAAC,GAAG;gBACzB,IAAI,EAAE,SAAS;gBACf,OAAO,EAAE,IAAI;gBACb,KAAK,EAAE,0BAA0B;aAClC,CAAC;QACJ,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,4CAA4C;gBACrD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;aACzE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAErE,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC5B,OAAO,EAAE,sCAAsC;gBAC/C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,uBAAuB,CAAC,CAAC,CAAC,SAAS,CAAC;aACzE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAErE,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;YAC1C,MAAM,EAAE,GAAG,MAAM,qBAAqB,CAAC,QAAkB,CAAC,CAAC;YAC3D,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,qCAAqC,CAAC,CAAC;YAE5E,GAAG,CAAC,iBAAiB,CAAC,GAAG,QAAkB,CAAC;YAC5C,GAAG,CAAC,iBAAiB,CAAC,GAAG,QAAkB,CAAC;YAC5C,aAAa,CAAC,OAAO,CAAC,GAAG;gBACvB,IAAI,EAAE,OAAO;gBACb,OAAO,EAAE,IAAI;gBACb,QAAQ,EAAE,wBAAwB;gBAClC,QAAQ,EAAE,wBAAwB;aACnC,CAAC;QACJ,CAAC;QAED,6EAA6E;QAE7E,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,MAAM,CAAS;YACzC,OAAO,EAAE,oCAAoC;YAC7C,OAAO,EAAE;gBACP;oBACE,KAAK,EAAE,0CAA0C;oBACjD,KAAK,EAAE,wBAAwB;oBAC/B,IAAI,EAAE,kCAAkC;iBACzC;gBACD;oBACE,KAAK,EAAE,gDAAgD;oBACvD,KAAK,EAAE,4BAA4B;oBACnC,IAAI,EAAE,kCAAkC;iBACzC;gBACD;oBACE,KAAK,EAAE,mDAAmD;oBAC1D,KAAK,EAAE,+BAA+B;oBACtC,IAAI,EAAE,kCAAkC;iBACzC;gBACD;oBACE,KAAK,EAAE,+CAA+C;oBACtD,KAAK,EAAE,4BAA4B;oBACnC,IAAI,EAAE,kCAAkC;iBACzC;gBACD,EAAE,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,iCAAiC,EAAE;aAClF;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;YAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;YAAC,OAAO,CAAC,CAAC;QAAC,CAAC;QAExE,IAAI,UAAU,GAAG,WAAqB,CAAC;QACvC,IAAI,UAAU,KAAK,YAAY,EAAE,CAAC;YAChC,MAAM,WAAW,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC/B,OAAO,EAAE,yBAAyB;gBAClC,WAAW,EAAE,qDAAqD;gBAClE,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,iBAAiB,CAAC,CAAC,CAAC,SAAS,CAAC;aACnE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YACxE,UAAU,GAAG,WAAqB,CAAC;QACrC,CAAC;QAED,IAAI,UAAU,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;YACrC,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,4BAA4B;gBACrC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACvE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YACnE,GAAG,CAAC,gBAAgB,CAAC,GAAG,MAAgB,CAAC;QAC3C,CAAC;aAAM,IAAI,UAAU,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAC/C,MAAM,MAAM,GAAG,MAAM,CAAC,CAAC,IAAI,CAAC;gBAC1B,OAAO,EAAE,+BAA+B;gBACxC,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,qBAAqB,CAAC,CAAC,CAAC,SAAS,CAAC;aACvE,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YACnE,GAAG,CAAC,mBAAmB,CAAC,GAAG,MAAgB,CAAC;QAC9C,CAAC;QAED,6EAA6E;QAE7E,MAAM,MAAM,GAAG,cAAc,EAAE,CAAC;QAChC,IAAI,MAAM,EAAE,CAAC;YACX,CAAC,CAAC,IAAI,CAAC,eAAe,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC;QACpD,CAAC;aAAM,CAAC;YACN,MAAM,SAAS,GAAG,MAAM,CAAC,CAAC,OAAO,CAAC;gBAChC,OAAO,EAAE,gEAAgE;gBACzE,YAAY,EAAE,IAAI;aACnB,CAAC,CAAC;YACH,IAAI,CAAC,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAAC,CAAC,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;gBAAC,OAAO,CAAC,CAAC;YAAC,CAAC;YAEtE,IAAI,SAAS,EAAE,CAAC;gBACd,MAAM,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;gBACzB,IAAI,CAAC,KAAK,CAAC,0BAA0B,CAAC,CAAC;gBACvC,IAAI,CAAC;oBACH,QAAQ,CAAC,4BAA4B,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC;oBAC1D,IAAI,CAAC,IAAI,CAAC,0BAA0B,CAAC,CAAC;gBACxC,CAAC;gBAAC,OAAO,GAAG,EAAE,CAAC;oBACb,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;oBAC7D,MAAM,IAAI,GACR,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,YAAY,CAAC;wBAClD,CAAC,CAAC,mDAAmD;wBACrD,CAAC,CAAC,oCAAoC,CAAC;oBAC3C,IAAI,CAAC,IAAI,CAAC,sBAAsB,IAAI,EAAE,CAAC,CAAC;gBAC1C,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,CAAC,CAAC,IAAI,CAAC,0CAA0C,EAAE,SAAS,CAAC,CAAC;YAChE,CAAC;QACH,CAAC;QAED,6EAA6E;QAE7E,MAAM,UAAU,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,kBAAkB,CAAC,CAAC;QAC9D,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC;QAE/C,IAAI,UAAU,GAA4B,EAAE,CAAC;QAC7C,IAAI,CAAC;YACH,MAAM,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,0BAA0B,CAAC,CAAC;YACvE,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC1B,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAA4B,CAAC;QAC3F,CAAC;QAAC,MAAM,CAAC;YACP,oCAAoC;QACtC,CAAC;QAED,MAAM,MAAM,GAAG;YACb,GAAG,UAAU;YACb,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE;gBACN,GAAG,CAAC,OAAO,UAAU,CAAC,MAAM,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,KAAK,IAAI;oBACrE,CAAC,CAAE,UAAU,CAAC,MAAkC;oBAChD,CAAC,CAAC,EAAE,CAAC;gBACP,OAAO,EAAE,UAAU;gBACnB,KAAK,EAAE,UAAU;aAClB;SACF,CAAC;QAEF,MAAM,KAAK,GAAG,CAAC,CAAC,OAAO,EAAE,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,uBAAuB,CAAC,CAAC;QAErC,MAAM,SAAS,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QAE/E,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,GAAG,CAAC;aACjC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;aAC5B,IAAI,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC;QAChB,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,GAAG,EAAE,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACvD,CAAC;QAED,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnB,6EAA6E;QAE7E,CAAC,CAAC,IAAI,CACJ;YACE,0BAA0B,UAAU,EAAE;YACtC,QAAQ,CAAC,CAAC,CAAC,0BAA0B,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE;YACnD,EAAE;YACF,YAAY;YACZ,oBAAoB;SACrB;aACE,MAAM,CAAC,OAAO,CAAC;aACf,IAAI,CAAC,IAAI,CAAC,EACb,mBAAmB,CACpB,CAAC;QAEF,CAAC,CAAC,KAAK,CAAC,qCAAqC,CAAC,CAAC;QAC/C,OAAO,CAAC,CAAC;IACX,CAAC"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { Command } from "clipanion";
|
|
2
|
+
export declare class PairingApproveCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
code: string;
|
|
6
|
+
execute(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class PairingListCommand extends Command {
|
|
9
|
+
static paths: string[][];
|
|
10
|
+
static usage: import("clipanion").Usage;
|
|
11
|
+
execute(): Promise<void>;
|
|
12
|
+
}
|
|
13
|
+
export declare class PairingRevokeCommand extends Command {
|
|
14
|
+
static paths: string[][];
|
|
15
|
+
static usage: import("clipanion").Usage;
|
|
16
|
+
code: string;
|
|
17
|
+
execute(): Promise<void>;
|
|
18
|
+
}
|
|
19
|
+
//# sourceMappingURL=pairing.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/pairing.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAK5C,qBAAa,qBAAsB,SAAQ,OAAO;IAChD,OAAgB,KAAK,aAA4B;IAEjD,OAAgB,KAAK,4BAGlB;IAEH,IAAI,SAAmD;IAEjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/B;AAED,qBAAa,kBAAmB,SAAQ,OAAO;IAC7C,OAAgB,KAAK,aAAyB;IAE9C,OAAgB,KAAK,4BAGlB;IAEG,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAsB/B;AAED,qBAAa,oBAAqB,SAAQ,OAAO;IAC/C,OAAgB,KAAK,aAA2B;IAEhD,OAAgB,KAAK,4BAGlB;IAEH,IAAI,SAAmD;IAEjD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAe/B"}
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
import { Command, Option } from "clipanion";
|
|
2
|
+
import { getStateDir } from "../../config/paths.js";
|
|
3
|
+
import { PairingStore } from "../../security/pairing-store.js";
|
|
4
|
+
import { AllowlistStore } from "../../security/allowlist-store.js";
|
|
5
|
+
export class PairingApproveCommand extends Command {
|
|
6
|
+
static paths = [["pairing", "approve"]];
|
|
7
|
+
static usage = Command.Usage({
|
|
8
|
+
description: "Approve a pairing code and add the sender to the allowlist",
|
|
9
|
+
examples: [["Approve a pairing code", "iris pairing approve ABCD1234"]],
|
|
10
|
+
});
|
|
11
|
+
code = Option.String({ name: "code", required: true });
|
|
12
|
+
async execute() {
|
|
13
|
+
const stateDir = getStateDir();
|
|
14
|
+
const pairingStore = new PairingStore(stateDir);
|
|
15
|
+
const allowlistStore = new AllowlistStore(stateDir);
|
|
16
|
+
const result = await pairingStore.approveCode(this.code);
|
|
17
|
+
if (!result) {
|
|
18
|
+
this.context.stdout.write(`No pending pairing request found for code: ${this.code}\n`);
|
|
19
|
+
process.exitCode = 1;
|
|
20
|
+
return;
|
|
21
|
+
}
|
|
22
|
+
await allowlistStore.add(result.channelId, result.senderId, "cli");
|
|
23
|
+
this.context.stdout.write(`Approved pairing code ${this.code}\n` +
|
|
24
|
+
` Channel: ${result.channelId}\n` +
|
|
25
|
+
` Sender: ${result.senderId}\n` +
|
|
26
|
+
`Added to allowlist.\n`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class PairingListCommand extends Command {
|
|
30
|
+
static paths = [["pairing", "list"]];
|
|
31
|
+
static usage = Command.Usage({
|
|
32
|
+
description: "List pending pairing requests",
|
|
33
|
+
examples: [["List all pending requests", "iris pairing list"]],
|
|
34
|
+
});
|
|
35
|
+
async execute() {
|
|
36
|
+
const stateDir = getStateDir();
|
|
37
|
+
const pairingStore = new PairingStore(stateDir);
|
|
38
|
+
const pending = await pairingStore.listPending();
|
|
39
|
+
if (pending.length === 0) {
|
|
40
|
+
this.context.stdout.write("No pending pairing requests.\n");
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
this.context.stdout.write(`Pending pairing requests (${pending.length}):\n`);
|
|
44
|
+
for (const req of pending) {
|
|
45
|
+
const expiresIn = Math.max(0, Math.round((req.expiresAt - Date.now()) / 1000));
|
|
46
|
+
this.context.stdout.write(` ${req.code} channel=${req.channelId} sender=${req.senderId} expires in ${expiresIn}s\n`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
export class PairingRevokeCommand extends Command {
|
|
51
|
+
static paths = [["pairing", "revoke"]];
|
|
52
|
+
static usage = Command.Usage({
|
|
53
|
+
description: "Revoke a pending pairing code",
|
|
54
|
+
examples: [["Revoke a code", "iris pairing revoke ABCD1234"]],
|
|
55
|
+
});
|
|
56
|
+
code = Option.String({ name: "code", required: true });
|
|
57
|
+
async execute() {
|
|
58
|
+
const stateDir = getStateDir();
|
|
59
|
+
const pairingStore = new PairingStore(stateDir);
|
|
60
|
+
const revoked = await pairingStore.revokeCode(this.code);
|
|
61
|
+
if (revoked) {
|
|
62
|
+
this.context.stdout.write(`Revoked pairing code: ${this.code}\n`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
this.context.stdout.write(`No pending pairing request found for code: ${this.code}\n`);
|
|
66
|
+
process.exitCode = 1;
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=pairing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pairing.js","sourceRoot":"","sources":["../../../src/cli/commands/pairing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,qBAAa,WAAY,SAAQ,OAAO;IACtC,OAAgB,KAAK,aAAc;IAEnC,OAAgB,KAAK,4BAMlB;IAEH,SAAS,qBAAsC;IAEzC,OAAO,IAAI,OAAO,CAAC,MAAM,CAAC;CAiCjC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import { Command, Option } from "clipanion";
|
|
2
|
+
import { resolve } from "node:path";
|
|
3
|
+
import { SecurityScanner } from "../../security/scanner.js";
|
|
4
|
+
export class ScanCommand extends Command {
|
|
5
|
+
static paths = [["scan"]];
|
|
6
|
+
static usage = Command.Usage({
|
|
7
|
+
description: "Scan a directory for security issues",
|
|
8
|
+
examples: [
|
|
9
|
+
["Scan current directory", "iris scan"],
|
|
10
|
+
["Scan a plugin directory", "iris scan ./plugins/my-plugin"],
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
targetDir = Option.String({ required: false });
|
|
14
|
+
async execute() {
|
|
15
|
+
const targetPath = resolve(this.targetDir ?? ".");
|
|
16
|
+
const scanner = new SecurityScanner();
|
|
17
|
+
this.context.stdout.write(`Scanning ${targetPath}...\n`);
|
|
18
|
+
const result = await scanner.scanDirectory(targetPath);
|
|
19
|
+
this.context.stdout.write(`\nScanned ${result.scannedFiles} files\n`);
|
|
20
|
+
if (result.findings.length === 0) {
|
|
21
|
+
this.context.stdout.write("No issues found.\n");
|
|
22
|
+
return 0;
|
|
23
|
+
}
|
|
24
|
+
this.context.stdout.write(`\nFindings: ${result.critical} critical, ${result.warn} warnings, ${result.info} info\n\n`);
|
|
25
|
+
for (const finding of result.findings) {
|
|
26
|
+
const severity = finding.severity === "critical"
|
|
27
|
+
? "\x1b[31mCRITICAL\x1b[0m"
|
|
28
|
+
: finding.severity === "warn"
|
|
29
|
+
? "\x1b[33mWARN\x1b[0m"
|
|
30
|
+
: "\x1b[34mINFO\x1b[0m";
|
|
31
|
+
this.context.stdout.write(` ${severity} ${finding.ruleId}\n` +
|
|
32
|
+
` ${finding.file}:${finding.line}\n` +
|
|
33
|
+
` ${finding.message}\n` +
|
|
34
|
+
` > ${finding.evidence}\n\n`);
|
|
35
|
+
}
|
|
36
|
+
return result.safe ? 0 : 1;
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
//# sourceMappingURL=scan.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scan.js","sourceRoot":"","sources":["../../../src/cli/commands/scan.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAE5D,MAAM,OAAO,WAAY,SAAQ,OAAO;IACtC,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;IAEnC,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,sCAAsC;QACnD,QAAQ,EAAE;YACR,CAAC,wBAAwB,EAAE,WAAW,CAAC;YACvC,CAAC,yBAAyB,EAAE,+BAA+B,CAAC;SAC7D;KACF,CAAC,CAAC;IAEH,SAAS,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,CAAC;IAE/C,KAAK,CAAC,OAAO;QACX,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,SAAS,IAAI,GAAG,CAAC,CAAC;QAClD,MAAM,OAAO,GAAG,IAAI,eAAe,EAAE,CAAC;QAEtC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,YAAY,UAAU,OAAO,CAAC,CAAC;QACzD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,aAAa,CAAC,UAAU,CAAC,CAAC;QAEvD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,aAAa,MAAM,CAAC,YAAY,UAAU,CAAC,CAAC;QAEtE,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,oBAAoB,CAAC,CAAC;YAChD,OAAO,CAAC,CAAC;QACX,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,eAAe,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,IAAI,cAAc,MAAM,CAAC,IAAI,WAAW,CAAC,CAAC;QAEvH,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;YACtC,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,KAAK,UAAU;gBAC9C,CAAC,CAAC,yBAAyB;gBAC3B,CAAC,CAAC,OAAO,CAAC,QAAQ,KAAK,MAAM;oBAC3B,CAAC,CAAC,qBAAqB;oBACvB,CAAC,CAAC,qBAAqB,CAAC;YAE5B,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,QAAQ,KAAK,OAAO,CAAC,MAAM,IAAI;gBACpC,OAAO,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,IAAI,IAAI;gBACvC,OAAO,OAAO,CAAC,OAAO,IAAI;gBAC1B,SAAS,OAAO,CAAC,QAAQ,MAAM,CAChC,CAAC;QACJ,CAAC;QAED,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7B,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { Command } from "clipanion";
|
|
2
|
+
export declare class SecurityAllowlistListCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
channel: string;
|
|
6
|
+
execute(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare class SecurityAllowlistAddCommand extends Command {
|
|
9
|
+
static paths: string[][];
|
|
10
|
+
static usage: import("clipanion").Usage;
|
|
11
|
+
channel: string;
|
|
12
|
+
senderId: string;
|
|
13
|
+
execute(): Promise<void>;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=security.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAI5C,qBAAa,4BAA6B,SAAQ,OAAO;IACvD,OAAgB,KAAK,aAAuC;IAE5D,OAAgB,KAAK,4BAKlB;IAEH,OAAO,SAAsD;IAEvD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAwB/B;AAED,qBAAa,2BAA4B,SAAQ,OAAO;IACtD,OAAgB,KAAK,aAAsC;IAE3D,OAAgB,KAAK,4BAQlB;IAEH,OAAO,SAAsD;IAC7D,QAAQ,SAAuD;IAEzD,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;CAU/B"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Command, Option } from "clipanion";
|
|
2
|
+
import { getStateDir } from "../../config/paths.js";
|
|
3
|
+
import { AllowlistStore } from "../../security/allowlist-store.js";
|
|
4
|
+
export class SecurityAllowlistListCommand extends Command {
|
|
5
|
+
static paths = [["security", "allowlist", "list"]];
|
|
6
|
+
static usage = Command.Usage({
|
|
7
|
+
description: "Show the allowlist for a specific channel",
|
|
8
|
+
examples: [
|
|
9
|
+
["List telegram allowlist", "iris security allowlist list telegram"],
|
|
10
|
+
],
|
|
11
|
+
});
|
|
12
|
+
channel = Option.String({ name: "channel", required: true });
|
|
13
|
+
async execute() {
|
|
14
|
+
const stateDir = getStateDir();
|
|
15
|
+
const store = new AllowlistStore(stateDir);
|
|
16
|
+
const entries = await store.list(this.channel);
|
|
17
|
+
if (entries.length === 0) {
|
|
18
|
+
this.context.stdout.write(`No allowlist entries for channel: ${this.channel}\n`);
|
|
19
|
+
return;
|
|
20
|
+
}
|
|
21
|
+
this.context.stdout.write(`Allowlist for ${this.channel} (${entries.length}):\n`);
|
|
22
|
+
for (const entry of entries) {
|
|
23
|
+
const approvedAt = new Date(entry.approvedAt).toISOString();
|
|
24
|
+
const approvedBy = entry.approvedBy ?? "unknown";
|
|
25
|
+
this.context.stdout.write(` ${entry.senderId} approved-by=${approvedBy} at=${approvedAt}\n`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
export class SecurityAllowlistAddCommand extends Command {
|
|
30
|
+
static paths = [["security", "allowlist", "add"]];
|
|
31
|
+
static usage = Command.Usage({
|
|
32
|
+
description: "Add a sender to the allowlist for a channel",
|
|
33
|
+
examples: [
|
|
34
|
+
[
|
|
35
|
+
"Allow a telegram user",
|
|
36
|
+
"iris security allowlist add telegram 123456789",
|
|
37
|
+
],
|
|
38
|
+
],
|
|
39
|
+
});
|
|
40
|
+
channel = Option.String({ name: "channel", required: true });
|
|
41
|
+
senderId = Option.String({ name: "senderId", required: true });
|
|
42
|
+
async execute() {
|
|
43
|
+
const stateDir = getStateDir();
|
|
44
|
+
const store = new AllowlistStore(stateDir);
|
|
45
|
+
await store.add(this.channel, this.senderId, "cli");
|
|
46
|
+
this.context.stdout.write(`Added ${this.senderId} to allowlist for channel ${this.channel}\n`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=security.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"security.js","sourceRoot":"","sources":["../../../src/cli/commands/security.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,WAAW,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAEnE,MAAM,OAAO,4BAA6B,SAAQ,OAAO;IACvD,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC;IAE5D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,2CAA2C;QACxD,QAAQ,EAAE;YACR,CAAC,yBAAyB,EAAE,uCAAuC,CAAC;SACrE;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE7D,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE/C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,qCAAqC,IAAI,CAAC,OAAO,IAAI,CACtD,CAAC;YACF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,iBAAiB,IAAI,CAAC,OAAO,KAAK,OAAO,CAAC,MAAM,MAAM,CACvD,CAAC;QACF,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;YAC5B,MAAM,UAAU,GAAG,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,WAAW,EAAE,CAAC;YAC5D,MAAM,UAAU,GAAG,KAAK,CAAC,UAAU,IAAI,SAAS,CAAC;YACjD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,KAAK,KAAK,CAAC,QAAQ,iBAAiB,UAAU,QAAQ,UAAU,IAAI,CACrE,CAAC;QACJ,CAAC;IACH,CAAC;;AAGH,MAAM,OAAO,2BAA4B,SAAQ,OAAO;IACtD,MAAM,CAAU,KAAK,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,KAAK,CAAC,CAAC,CAAC;IAE3D,MAAM,CAAU,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC;QACpC,WAAW,EAAE,6CAA6C;QAC1D,QAAQ,EAAE;YACR;gBACE,uBAAuB;gBACvB,gDAAgD;aACjD;SACF;KACF,CAAC,CAAC;IAEH,OAAO,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,QAAQ,GAAG,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/D,KAAK,CAAC,OAAO;QACX,MAAM,QAAQ,GAAG,WAAW,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,IAAI,cAAc,CAAC,QAAQ,CAAC,CAAC;QAE3C,MAAM,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QAEpD,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK,CACvB,SAAS,IAAI,CAAC,QAAQ,6BAA6B,IAAI,CAAC,OAAO,IAAI,CACpE,CAAC;IACJ,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { Command } from "clipanion";
|
|
2
|
+
export declare class SendCommand extends Command {
|
|
3
|
+
static paths: string[][];
|
|
4
|
+
static usage: import("clipanion").Usage;
|
|
5
|
+
channel: string;
|
|
6
|
+
target: string;
|
|
7
|
+
message: string;
|
|
8
|
+
execute(): Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=send.d.ts.map
|