@meetquinn/animactl 0.1.1-canary.21.1.cd63d38
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/README.md +13 -0
- package/bin/anima +14 -0
- package/bin/animactl +14 -0
- package/dist/server/activities/activity.service.d.ts +22 -0
- package/dist/server/activities/activity.service.d.ts.map +1 -0
- package/dist/server/activities/activity.service.js +49 -0
- package/dist/server/agents/agent-config-ops.d.ts +17 -0
- package/dist/server/agents/agent-config-ops.d.ts.map +1 -0
- package/dist/server/agents/agent-config-ops.js +209 -0
- package/dist/server/agents/agent-skills.d.ts +4 -0
- package/dist/server/agents/agent-skills.d.ts.map +1 -0
- package/dist/server/agents/agent-skills.js +71 -0
- package/dist/server/agents/agent-slack-validation.d.ts +16 -0
- package/dist/server/agents/agent-slack-validation.d.ts.map +1 -0
- package/dist/server/agents/agent-slack-validation.js +155 -0
- package/dist/server/agents/agent-slack.service.d.ts +26 -0
- package/dist/server/agents/agent-slack.service.d.ts.map +1 -0
- package/dist/server/agents/agent-slack.service.js +198 -0
- package/dist/server/agents/agent.service.d.ts +41 -0
- package/dist/server/agents/agent.service.d.ts.map +1 -0
- package/dist/server/agents/agent.service.js +149 -0
- package/dist/server/agents/seed-memory.d.ts +4 -0
- package/dist/server/agents/seed-memory.d.ts.map +1 -0
- package/dist/server/agents/seed-memory.js +26 -0
- package/dist/server/anima-home.d.ts +3 -0
- package/dist/server/anima-home.d.ts.map +1 -0
- package/dist/server/anima-home.js +28 -0
- package/dist/server/asks/interactive-ask.service.d.ts +54 -0
- package/dist/server/asks/interactive-ask.service.d.ts.map +1 -0
- package/dist/server/asks/interactive-ask.service.js +181 -0
- package/dist/server/bundled-templates.d.ts +2 -0
- package/dist/server/bundled-templates.d.ts.map +1 -0
- package/dist/server/bundled-templates.js +24 -0
- package/dist/server/cli/anima.d.ts +4 -0
- package/dist/server/cli/anima.d.ts.map +1 -0
- package/dist/server/cli/anima.js +33 -0
- package/dist/server/cli/animactl-npm.d.ts +4 -0
- package/dist/server/cli/animactl-npm.d.ts.map +1 -0
- package/dist/server/cli/animactl-npm.js +17 -0
- package/dist/server/cli/animactl.d.ts +4 -0
- package/dist/server/cli/animactl.d.ts.map +1 -0
- package/dist/server/cli/animactl.js +26 -0
- package/dist/server/cli/runtime-cli.d.ts +33 -0
- package/dist/server/cli/runtime-cli.d.ts.map +1 -0
- package/dist/server/cli/runtime-cli.js +309 -0
- package/dist/server/cli/service.d.ts +3 -0
- package/dist/server/cli/service.d.ts.map +1 -0
- package/dist/server/cli/service.js +35 -0
- package/dist/server/cli/services-cli.d.ts +3 -0
- package/dist/server/cli/services-cli.d.ts.map +1 -0
- package/dist/server/cli/services-cli.js +191 -0
- package/dist/server/cli/shared.d.ts +6 -0
- package/dist/server/cli/shared.d.ts.map +1 -0
- package/dist/server/cli/shared.js +6 -0
- package/dist/server/ids.d.ts +10 -0
- package/dist/server/ids.d.ts.map +1 -0
- package/dist/server/ids.js +16 -0
- package/dist/server/inbox/reminder-subscriber.d.ts +15 -0
- package/dist/server/inbox/reminder-subscriber.d.ts.map +1 -0
- package/dist/server/inbox/reminder-subscriber.js +69 -0
- package/dist/server/inbox/slack-events.d.ts +62 -0
- package/dist/server/inbox/slack-events.d.ts.map +1 -0
- package/dist/server/inbox/slack-events.js +84 -0
- package/dist/server/inbox/slack-profiles.d.ts +41 -0
- package/dist/server/inbox/slack-profiles.d.ts.map +1 -0
- package/dist/server/inbox/slack-profiles.js +119 -0
- package/dist/server/inbox/slack-subscriber.d.ts +23 -0
- package/dist/server/inbox/slack-subscriber.d.ts.map +1 -0
- package/dist/server/inbox/slack-subscriber.js +301 -0
- package/dist/server/inbox/slack-subscription.service.d.ts +74 -0
- package/dist/server/inbox/slack-subscription.service.d.ts.map +1 -0
- package/dist/server/inbox/slack-subscription.service.js +346 -0
- package/dist/server/inbox/subscriber.d.ts +15 -0
- package/dist/server/inbox/subscriber.d.ts.map +1 -0
- package/dist/server/inbox/subscriber.js +26 -0
- package/dist/server/inbox/wake-queue.service.d.ts +58 -0
- package/dist/server/inbox/wake-queue.service.d.ts.map +1 -0
- package/dist/server/inbox/wake-queue.service.js +127 -0
- package/dist/server/json.d.ts +8 -0
- package/dist/server/json.d.ts.map +1 -0
- package/dist/server/json.js +23 -0
- package/dist/server/kb/kb.helper.d.ts +28 -0
- package/dist/server/kb/kb.helper.d.ts.map +1 -0
- package/dist/server/kb/kb.helper.js +112 -0
- package/dist/server/kb/kb.service.d.ts +41 -0
- package/dist/server/kb/kb.service.d.ts.map +1 -0
- package/dist/server/kb/kb.service.js +282 -0
- package/dist/server/messages/message.projection.d.ts +8 -0
- package/dist/server/messages/message.projection.d.ts.map +1 -0
- package/dist/server/messages/message.projection.js +198 -0
- package/dist/server/messages/message.service.d.ts +25 -0
- package/dist/server/messages/message.service.d.ts.map +1 -0
- package/dist/server/messages/message.service.js +69 -0
- package/dist/server/provider-usage/http.d.ts +16 -0
- package/dist/server/provider-usage/http.d.ts.map +1 -0
- package/dist/server/provider-usage/http.js +39 -0
- package/dist/server/provider-usage/provider-usage.service.d.ts +19 -0
- package/dist/server/provider-usage/provider-usage.service.d.ts.map +1 -0
- package/dist/server/provider-usage/provider-usage.service.js +78 -0
- package/dist/server/provider-usage/providers/claude.d.ts +15 -0
- package/dist/server/provider-usage/providers/claude.d.ts.map +1 -0
- package/dist/server/provider-usage/providers/claude.js +128 -0
- package/dist/server/provider-usage/providers/codex.d.ts +9 -0
- package/dist/server/provider-usage/providers/codex.d.ts.map +1 -0
- package/dist/server/provider-usage/providers/codex.js +64 -0
- package/dist/server/provider-usage/providers/common.d.ts +16 -0
- package/dist/server/provider-usage/providers/common.d.ts.map +1 -0
- package/dist/server/provider-usage/providers/common.js +72 -0
- package/dist/server/provider-usage/providers/kimi.d.ts +9 -0
- package/dist/server/provider-usage/providers/kimi.d.ts.map +1 -0
- package/dist/server/provider-usage/providers/kimi.js +113 -0
- package/dist/server/providers/active-runtime.d.ts +9 -0
- package/dist/server/providers/active-runtime.d.ts.map +1 -0
- package/dist/server/providers/active-runtime.js +24 -0
- package/dist/server/providers/child-process.d.ts +21 -0
- package/dist/server/providers/child-process.d.ts.map +1 -0
- package/dist/server/providers/child-process.js +93 -0
- package/dist/server/providers/claude-events.d.ts +11 -0
- package/dist/server/providers/claude-events.d.ts.map +1 -0
- package/dist/server/providers/claude-events.js +1007 -0
- package/dist/server/providers/claude.d.ts +19 -0
- package/dist/server/providers/claude.d.ts.map +1 -0
- package/dist/server/providers/claude.js +523 -0
- package/dist/server/providers/codex-app-server.d.ts +50 -0
- package/dist/server/providers/codex-app-server.d.ts.map +1 -0
- package/dist/server/providers/codex-app-server.js +357 -0
- package/dist/server/providers/codex-events.d.ts +18 -0
- package/dist/server/providers/codex-events.d.ts.map +1 -0
- package/dist/server/providers/codex-events.js +568 -0
- package/dist/server/providers/codex.d.ts +17 -0
- package/dist/server/providers/codex.d.ts.map +1 -0
- package/dist/server/providers/codex.js +127 -0
- package/dist/server/providers/factory.d.ts +3 -0
- package/dist/server/providers/factory.d.ts.map +1 -0
- package/dist/server/providers/factory.js +12 -0
- package/dist/server/providers/kimi-events.d.ts +4 -0
- package/dist/server/providers/kimi-events.d.ts.map +1 -0
- package/dist/server/providers/kimi-events.js +177 -0
- package/dist/server/providers/kimi.d.ts +17 -0
- package/dist/server/providers/kimi.d.ts.map +1 -0
- package/dist/server/providers/kimi.js +485 -0
- package/dist/server/providers/reasoning-events.d.ts +15 -0
- package/dist/server/providers/reasoning-events.d.ts.map +1 -0
- package/dist/server/providers/reasoning-events.js +25 -0
- package/dist/server/reminders/cli.d.ts +3 -0
- package/dist/server/reminders/cli.d.ts.map +1 -0
- package/dist/server/reminders/cli.js +216 -0
- package/dist/server/reminders/reminder.activity.d.ts +29 -0
- package/dist/server/reminders/reminder.activity.d.ts.map +1 -0
- package/dist/server/reminders/reminder.activity.js +86 -0
- package/dist/server/reminders/reminder.helper.d.ts +14 -0
- package/dist/server/reminders/reminder.helper.d.ts.map +1 -0
- package/dist/server/reminders/reminder.helper.js +160 -0
- package/dist/server/reminders/reminder.service.d.ts +48 -0
- package/dist/server/reminders/reminder.service.d.ts.map +1 -0
- package/dist/server/reminders/reminder.service.js +152 -0
- package/dist/server/runtime/active-item.d.ts +22 -0
- package/dist/server/runtime/active-item.d.ts.map +1 -0
- package/dist/server/runtime/active-item.js +49 -0
- package/dist/server/runtime/activity-payload.d.ts +5 -0
- package/dist/server/runtime/activity-payload.d.ts.map +1 -0
- package/dist/server/runtime/activity-payload.js +21 -0
- package/dist/server/runtime/activity-text.d.ts +4 -0
- package/dist/server/runtime/activity-text.d.ts.map +1 -0
- package/dist/server/runtime/activity-text.js +16 -0
- package/dist/server/runtime/activity.d.ts +15 -0
- package/dist/server/runtime/activity.d.ts.map +1 -0
- package/dist/server/runtime/activity.js +142 -0
- package/dist/server/runtime/agent-runner.d.ts +17 -0
- package/dist/server/runtime/agent-runner.d.ts.map +1 -0
- package/dist/server/runtime/agent-runner.js +51 -0
- package/dist/server/runtime/context.d.ts +3 -0
- package/dist/server/runtime/context.d.ts.map +1 -0
- package/dist/server/runtime/context.js +27 -0
- package/dist/server/runtime/delivery-prompt.d.ts +32 -0
- package/dist/server/runtime/delivery-prompt.d.ts.map +1 -0
- package/dist/server/runtime/delivery-prompt.js +189 -0
- package/dist/server/runtime/host.d.ts +44 -0
- package/dist/server/runtime/host.d.ts.map +1 -0
- package/dist/server/runtime/host.js +363 -0
- package/dist/server/runtime/item-activities.d.ts +3 -0
- package/dist/server/runtime/item-activities.d.ts.map +1 -0
- package/dist/server/runtime/item-activities.js +22 -0
- package/dist/server/runtime/managed-runtime.d.ts +73 -0
- package/dist/server/runtime/managed-runtime.d.ts.map +1 -0
- package/dist/server/runtime/managed-runtime.js +199 -0
- package/dist/server/runtime/processing-reactions.d.ts +28 -0
- package/dist/server/runtime/processing-reactions.d.ts.map +1 -0
- package/dist/server/runtime/processing-reactions.js +65 -0
- package/dist/server/runtime/provider-contract.d.ts +55 -0
- package/dist/server/runtime/provider-contract.d.ts.map +1 -0
- package/dist/server/runtime/provider-contract.js +4 -0
- package/dist/server/runtime/runtime-bridge.d.ts +26 -0
- package/dist/server/runtime/runtime-bridge.d.ts.map +1 -0
- package/dist/server/runtime/runtime-bridge.js +115 -0
- package/dist/server/runtime/runtime-release.d.ts +13 -0
- package/dist/server/runtime/runtime-release.d.ts.map +1 -0
- package/dist/server/runtime/runtime-release.js +97 -0
- package/dist/server/runtime/runtime-session.service.d.ts +22 -0
- package/dist/server/runtime/runtime-session.service.d.ts.map +1 -0
- package/dist/server/runtime/runtime-session.service.js +276 -0
- package/dist/server/runtime/runtime-upgrade.d.ts +79 -0
- package/dist/server/runtime/runtime-upgrade.d.ts.map +1 -0
- package/dist/server/runtime/runtime-upgrade.js +531 -0
- package/dist/server/runtime/runtime-worker.d.ts +56 -0
- package/dist/server/runtime/runtime-worker.d.ts.map +1 -0
- package/dist/server/runtime/runtime-worker.js +540 -0
- package/dist/server/runtime/runtime.service.d.ts +13 -0
- package/dist/server/runtime/runtime.service.d.ts.map +1 -0
- package/dist/server/runtime/runtime.service.js +50 -0
- package/dist/server/runtime/standing-prompt.d.ts +6 -0
- package/dist/server/runtime/standing-prompt.d.ts.map +1 -0
- package/dist/server/runtime/standing-prompt.js +41 -0
- package/dist/server/runtime/types.d.ts +16 -0
- package/dist/server/runtime/types.d.ts.map +1 -0
- package/dist/server/runtime/types.js +1 -0
- package/dist/server/runtime/usage.d.ts +5 -0
- package/dist/server/runtime/usage.d.ts.map +1 -0
- package/dist/server/runtime/usage.js +8 -0
- package/dist/server/services/env.d.ts +8 -0
- package/dist/server/services/env.d.ts.map +1 -0
- package/dist/server/services/env.js +31 -0
- package/dist/server/services/restart-drain.d.ts +4 -0
- package/dist/server/services/restart-drain.d.ts.map +1 -0
- package/dist/server/services/restart-drain.js +39 -0
- package/dist/server/services/restart-gate.d.ts +40 -0
- package/dist/server/services/restart-gate.d.ts.map +1 -0
- package/dist/server/services/restart-gate.js +151 -0
- package/dist/server/services/restart-result.d.ts +14 -0
- package/dist/server/services/restart-result.d.ts.map +1 -0
- package/dist/server/services/restart-result.js +79 -0
- package/dist/server/services/supervisor.d.ts +31 -0
- package/dist/server/services/supervisor.d.ts.map +1 -0
- package/dist/server/services/supervisor.js +201 -0
- package/dist/server/settings/settings.service.d.ts +21 -0
- package/dist/server/settings/settings.service.d.ts.map +1 -0
- package/dist/server/settings/settings.service.js +36 -0
- package/dist/server/slack/app-manifest.d.ts +5 -0
- package/dist/server/slack/app-manifest.d.ts.map +1 -0
- package/dist/server/slack/app-manifest.js +24 -0
- package/dist/server/slack/client.d.ts +3 -0
- package/dist/server/slack/client.d.ts.map +1 -0
- package/dist/server/slack/client.js +7 -0
- package/dist/server/slack/shortcut.service.d.ts +140 -0
- package/dist/server/slack/shortcut.service.d.ts.map +1 -0
- package/dist/server/slack/shortcut.service.js +493 -0
- package/dist/server/slack/shortcuts.d.ts +32 -0
- package/dist/server/slack/shortcuts.d.ts.map +1 -0
- package/dist/server/slack/shortcuts.js +163 -0
- package/dist/server/slack/slack-file.service.d.ts +46 -0
- package/dist/server/slack/slack-file.service.d.ts.map +1 -0
- package/dist/server/slack/slack-file.service.js +125 -0
- package/dist/server/slack/slack.helper.d.ts +50 -0
- package/dist/server/slack/slack.helper.d.ts.map +1 -0
- package/dist/server/slack/slack.helper.js +222 -0
- package/dist/server/slack/workspace-directory.service.d.ts +37 -0
- package/dist/server/slack/workspace-directory.service.d.ts.map +1 -0
- package/dist/server/slack/workspace-directory.service.js +239 -0
- package/dist/server/storage/json-file.d.ts +25 -0
- package/dist/server/storage/json-file.d.ts.map +1 -0
- package/dist/server/storage/json-file.js +97 -0
- package/dist/server/storage/json-store.d.ts +15 -0
- package/dist/server/storage/json-store.d.ts.map +1 -0
- package/dist/server/storage/json-store.js +34 -0
- package/dist/server/storage/jsonl-log.d.ts +41 -0
- package/dist/server/storage/jsonl-log.d.ts.map +1 -0
- package/dist/server/storage/jsonl-log.js +271 -0
- package/dist/server/storage/lock.d.ts +2 -0
- package/dist/server/storage/lock.d.ts.map +1 -0
- package/dist/server/storage/lock.js +90 -0
- package/dist/server/storage/safe-filename.d.ts +2 -0
- package/dist/server/storage/safe-filename.d.ts.map +1 -0
- package/dist/server/storage/safe-filename.js +4 -0
- package/dist/server/storage/schema/activity.store.d.ts +25 -0
- package/dist/server/storage/schema/activity.store.d.ts.map +1 -0
- package/dist/server/storage/schema/activity.store.js +49 -0
- package/dist/server/storage/schema/agent-usage.store.d.ts +13 -0
- package/dist/server/storage/schema/agent-usage.store.d.ts.map +1 -0
- package/dist/server/storage/schema/agent-usage.store.js +29 -0
- package/dist/server/storage/schema/agent.store.d.ts +17 -0
- package/dist/server/storage/schema/agent.store.d.ts.map +1 -0
- package/dist/server/storage/schema/agent.store.js +64 -0
- package/dist/server/storage/schema/cache.d.ts +41 -0
- package/dist/server/storage/schema/cache.d.ts.map +1 -0
- package/dist/server/storage/schema/cache.js +45 -0
- package/dist/server/storage/schema/interactive-ask.store.d.ts +77 -0
- package/dist/server/storage/schema/interactive-ask.store.d.ts.map +1 -0
- package/dist/server/storage/schema/interactive-ask.store.js +87 -0
- package/dist/server/storage/schema/kb.store.d.ts +23 -0
- package/dist/server/storage/schema/kb.store.d.ts.map +1 -0
- package/dist/server/storage/schema/kb.store.js +91 -0
- package/dist/server/storage/schema/message.store.d.ts +24 -0
- package/dist/server/storage/schema/message.store.d.ts.map +1 -0
- package/dist/server/storage/schema/message.store.js +52 -0
- package/dist/server/storage/schema/reminder.store.d.ts +53 -0
- package/dist/server/storage/schema/reminder.store.d.ts.map +1 -0
- package/dist/server/storage/schema/reminder.store.js +75 -0
- package/dist/server/storage/schema/server.store.d.ts +21 -0
- package/dist/server/storage/schema/server.store.d.ts.map +1 -0
- package/dist/server/storage/schema/server.store.js +27 -0
- package/dist/server/storage/schema/session.store.d.ts +64 -0
- package/dist/server/storage/schema/session.store.d.ts.map +1 -0
- package/dist/server/storage/schema/session.store.js +88 -0
- package/dist/server/storage/schema/subscription.store.d.ts +72 -0
- package/dist/server/storage/schema/subscription.store.d.ts.map +1 -0
- package/dist/server/storage/schema/subscription.store.js +93 -0
- package/dist/server/storage/schema/wake-queue.store.d.ts +191 -0
- package/dist/server/storage/schema/wake-queue.store.d.ts.map +1 -0
- package/dist/server/storage/schema/wake-queue.store.js +233 -0
- package/dist/server/tools/ask.d.ts +14 -0
- package/dist/server/tools/ask.d.ts.map +1 -0
- package/dist/server/tools/ask.js +309 -0
- package/dist/server/tools/file-send.d.ts +10 -0
- package/dist/server/tools/file-send.d.ts.map +1 -0
- package/dist/server/tools/file-send.js +128 -0
- package/dist/server/tools/files-cli.d.ts +3 -0
- package/dist/server/tools/files-cli.d.ts.map +1 -0
- package/dist/server/tools/files-cli.js +97 -0
- package/dist/server/tools/message-history-cli.d.ts +3 -0
- package/dist/server/tools/message-history-cli.d.ts.map +1 -0
- package/dist/server/tools/message-history-cli.js +111 -0
- package/dist/server/tools/message-read.d.ts +20 -0
- package/dist/server/tools/message-read.d.ts.map +1 -0
- package/dist/server/tools/message-read.js +138 -0
- package/dist/server/tools/messages-cli.d.ts +3 -0
- package/dist/server/tools/messages-cli.d.ts.map +1 -0
- package/dist/server/tools/messages-cli.js +104 -0
- package/dist/server/tools/messages.d.ts +18 -0
- package/dist/server/tools/messages.d.ts.map +1 -0
- package/dist/server/tools/messages.js +188 -0
- package/dist/server/tools/reactions-cli.d.ts +3 -0
- package/dist/server/tools/reactions-cli.d.ts.map +1 -0
- package/dist/server/tools/reactions-cli.js +87 -0
- package/dist/server/tools/reactions.d.ts +11 -0
- package/dist/server/tools/reactions.d.ts.map +1 -0
- package/dist/server/tools/reactions.js +77 -0
- package/dist/server/tools/slack-channel-resolver.d.ts +14 -0
- package/dist/server/tools/slack-channel-resolver.d.ts.map +1 -0
- package/dist/server/tools/slack-channel-resolver.js +47 -0
- package/dist/server/tools/slack-file-upload.d.ts +49 -0
- package/dist/server/tools/slack-file-upload.d.ts.map +1 -0
- package/dist/server/tools/slack-file-upload.js +93 -0
- package/dist/server/tools/slack-message-format.d.ts +13 -0
- package/dist/server/tools/slack-message-format.d.ts.map +1 -0
- package/dist/server/tools/slack-message-format.js +28 -0
- package/dist/server/tools/slack-message-mentions.d.ts +30 -0
- package/dist/server/tools/slack-message-mentions.d.ts.map +1 -0
- package/dist/server/tools/slack-message-mentions.js +88 -0
- package/dist/server/tools/slack-target.d.ts +22 -0
- package/dist/server/tools/slack-target.d.ts.map +1 -0
- package/dist/server/tools/slack-target.js +94 -0
- package/dist/server/tools/slack-transcript.d.ts +40 -0
- package/dist/server/tools/slack-transcript.d.ts.map +1 -0
- package/dist/server/tools/slack-transcript.js +166 -0
- package/dist/server/tools/subscriptions-cli.d.ts +3 -0
- package/dist/server/tools/subscriptions-cli.d.ts.map +1 -0
- package/dist/server/tools/subscriptions-cli.js +132 -0
- package/dist/server/tools/tool-context.d.ts +28 -0
- package/dist/server/tools/tool-context.d.ts.map +1 -0
- package/dist/server/tools/tool-context.js +79 -0
- package/dist/server/web/agent-file-routes.d.ts +3 -0
- package/dist/server/web/agent-file-routes.d.ts.map +1 -0
- package/dist/server/web/agent-file-routes.js +57 -0
- package/dist/server/web/agent-routes.d.ts +3 -0
- package/dist/server/web/agent-routes.d.ts.map +1 -0
- package/dist/server/web/agent-routes.js +96 -0
- package/dist/server/web/agent-slack-routes.d.ts +3 -0
- package/dist/server/web/agent-slack-routes.d.ts.map +1 -0
- package/dist/server/web/agent-slack-routes.js +17 -0
- package/dist/server/web/app.d.ts +3 -0
- package/dist/server/web/app.d.ts.map +1 -0
- package/dist/server/web/app.js +16 -0
- package/dist/server/web/host.d.ts +6 -0
- package/dist/server/web/host.d.ts.map +1 -0
- package/dist/server/web/host.js +40 -0
- package/dist/server/web/http.d.ts +15 -0
- package/dist/server/web/http.d.ts.map +1 -0
- package/dist/server/web/http.js +66 -0
- package/dist/server/web/kb-routes.d.ts +6 -0
- package/dist/server/web/kb-routes.d.ts.map +1 -0
- package/dist/server/web/kb-routes.js +94 -0
- package/dist/server/web/static.d.ts +3 -0
- package/dist/server/web/static.d.ts.map +1 -0
- package/dist/server/web/static.js +72 -0
- package/dist/server/web/system-routes.d.ts +3 -0
- package/dist/server/web/system-routes.d.ts.map +1 -0
- package/dist/server/web/system-routes.js +181 -0
- package/dist/shared/activity.d.ts +107 -0
- package/dist/shared/activity.d.ts.map +1 -0
- package/dist/shared/activity.js +2 -0
- package/dist/shared/agent-config.d.ts +368 -0
- package/dist/shared/agent-config.d.ts.map +1 -0
- package/dist/shared/agent-config.js +223 -0
- package/dist/shared/agent-home.d.ts +4 -0
- package/dist/shared/agent-home.d.ts.map +1 -0
- package/dist/shared/agent-home.js +5 -0
- package/dist/shared/inbox.d.ts +341 -0
- package/dist/shared/inbox.d.ts.map +1 -0
- package/dist/shared/inbox.js +91 -0
- package/dist/shared/kb-file-types.d.ts +5 -0
- package/dist/shared/kb-file-types.d.ts.map +1 -0
- package/dist/shared/kb-file-types.js +57 -0
- package/dist/shared/kb.d.ts +37 -0
- package/dist/shared/kb.d.ts.map +1 -0
- package/dist/shared/kb.js +9 -0
- package/dist/shared/messages.d.ts +52 -0
- package/dist/shared/messages.d.ts.map +1 -0
- package/dist/shared/messages.js +4 -0
- package/dist/shared/provider-catalog.d.ts +30 -0
- package/dist/shared/provider-catalog.d.ts.map +1 -0
- package/dist/shared/provider-catalog.js +59 -0
- package/dist/shared/provider-usage.d.ts +132 -0
- package/dist/shared/provider-usage.d.ts.map +1 -0
- package/dist/shared/provider-usage.js +41 -0
- package/dist/shared/reminder.d.ts +73 -0
- package/dist/shared/reminder.d.ts.map +1 -0
- package/dist/shared/reminder.js +44 -0
- package/dist/shared/runtime-upgrade.d.ts +161 -0
- package/dist/shared/runtime-upgrade.d.ts.map +1 -0
- package/dist/shared/runtime-upgrade.js +56 -0
- package/dist/shared/server-info.d.ts +180 -0
- package/dist/shared/server-info.d.ts.map +1 -0
- package/dist/shared/server-info.js +50 -0
- package/dist/shared/server-settings.d.ts +12 -0
- package/dist/shared/server-settings.d.ts.map +1 -0
- package/dist/shared/server-settings.js +6 -0
- package/dist/shared/skills.d.ts +19 -0
- package/dist/shared/skills.d.ts.map +1 -0
- package/dist/shared/skills.js +1 -0
- package/dist/shared/slack-manifest.d.ts +15 -0
- package/dist/shared/slack-manifest.d.ts.map +1 -0
- package/dist/shared/slack-manifest.js +8 -0
- package/dist/shared/snapshot.d.ts +47 -0
- package/dist/shared/snapshot.d.ts.map +1 -0
- package/dist/shared/snapshot.js +2 -0
- package/dist/shared/url-routes.d.ts +70 -0
- package/dist/shared/url-routes.d.ts.map +1 -0
- package/dist/shared/url-routes.js +144 -0
- package/dist/web/assets/activity-BP0C81IV.js +7 -0
- package/dist/web/assets/albert-sans-latin-ext-wght-normal-BAo4qCk1.woff2 +0 -0
- package/dist/web/assets/albert-sans-latin-wght-normal-BJ0ssN8N.woff2 +0 -0
- package/dist/web/assets/external-link-Dt0qTpmV.js +1 -0
- package/dist/web/assets/file-text-Dd9ys6py.js +1 -0
- package/dist/web/assets/fraunces-latin-ext-wght-italic-BfTTTDIL.woff2 +0 -0
- package/dist/web/assets/fraunces-latin-ext-wght-normal-Ca2vKHc0.woff2 +0 -0
- package/dist/web/assets/fraunces-latin-wght-italic-Py8at3oI.woff2 +0 -0
- package/dist/web/assets/fraunces-latin-wght-normal-ukD16Tqj.woff2 +0 -0
- package/dist/web/assets/fraunces-vietnamese-wght-italic-BicUS2cM.woff2 +0 -0
- package/dist/web/assets/fraunces-vietnamese-wght-normal-CnvboYUG.woff2 +0 -0
- package/dist/web/assets/globe-DmDZSgDP.js +1 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-400-normal-BSMlKf0J.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-400-normal-CEL4l2ZJ.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-500-normal-Ael50iVv.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-500-normal-Bq9vWWag.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-600-normal-CTOM6hUh.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-600-normal-fLZuRloM.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-DMdlQ8Kv.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-400-normal-xuaO2J-f.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-500-normal-BIfNGwUT.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-500-normal-BqneJy0T.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-600-normal-9HEixskS.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-cyrillic-ext-600-normal-V-xxqcpd.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-400-normal-CvHOgSBP.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-400-normal-DMJ8VG8y.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-500-normal-CB9ihrfo.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-500-normal-DSY6xOcd.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-600-normal-BgSNZQsw.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-600-normal-DWFSQ4vo.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-400-normal-BmRBH3aV.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-400-normal-D3D2R8hC.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-500-normal-CAhNIIs5.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-500-normal-CZ70TYgx.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-600-normal-D38SheWl.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-latin-ext-600-normal-DmB0ttJJ.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-400-normal-BulugwFq.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-400-normal-DDuiU_S-.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-500-normal-C8zxqsMH.woff +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-500-normal-DZ4AoWbu.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-600-normal-D2EvbN8M.woff2 +0 -0
- package/dist/web/assets/ibm-plex-mono-vietnamese-600-normal-iLQfcSjf.woff +0 -0
- package/dist/web/assets/index-CzAQnbuO.js +80 -0
- package/dist/web/assets/index-DKecrvN0.css +2 -0
- package/dist/web/assets/kb-3wFeP2Jt.js +32 -0
- package/dist/web/assets/profile-D7wPZXW_.js +1 -0
- package/dist/web/assets/reminders-DOhroVwo.js +1 -0
- package/dist/web/favicon.svg +1 -0
- package/dist/web/icons.svg +24 -0
- package/dist/web/index.html +14 -0
- package/package.json +42 -0
- package/templates/agent-seed-memory.md +30 -0
- package/templates/runtime-standing-prompt.md +64 -0
- package/templates/slack-app-manifest.yaml +81 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"service.d.ts","sourceRoot":"","sources":["../../../server/cli/service.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoBzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAkB9D"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
import { startRuntimeHost } from '../runtime/host.js';
|
|
3
|
+
import { startWebHost } from '../web/host.js';
|
|
4
|
+
const GlobalFlags = z.object({
|
|
5
|
+
agent: z.string().optional(),
|
|
6
|
+
});
|
|
7
|
+
const ServerSchema = GlobalFlags;
|
|
8
|
+
const WebSchema = GlobalFlags.extend({
|
|
9
|
+
host: z.string().optional(),
|
|
10
|
+
port: z.coerce.number().int().positive().optional(),
|
|
11
|
+
});
|
|
12
|
+
export function registerServiceCommands(program) {
|
|
13
|
+
program
|
|
14
|
+
.command('server')
|
|
15
|
+
.description('Run the Anima server: Slack listener, reminder scheduler, and worker loop')
|
|
16
|
+
.action(async (_, command) => {
|
|
17
|
+
const opts = ServerSchema.parse(command.optsWithGlobals());
|
|
18
|
+
await server(opts);
|
|
19
|
+
});
|
|
20
|
+
program
|
|
21
|
+
.command('web')
|
|
22
|
+
.description('Run the local Anima web app')
|
|
23
|
+
.option('--host <host>')
|
|
24
|
+
.option('--port <port>')
|
|
25
|
+
.action(async (_, command) => {
|
|
26
|
+
const opts = WebSchema.parse(command.optsWithGlobals());
|
|
27
|
+
await web(opts);
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
async function server(opts) {
|
|
31
|
+
await startRuntimeHost(opts);
|
|
32
|
+
}
|
|
33
|
+
async function web(opts) {
|
|
34
|
+
await startWebHost(opts);
|
|
35
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"services-cli.d.ts","sourceRoot":"","sources":["../../../server/cli/services-cli.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA4CzC,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuD9D"}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
import { fileURLToPath } from 'node:url';
|
|
2
|
+
import { resolve as resolvePath } from 'node:path';
|
|
3
|
+
import { defaultServerSettingsService } from '../settings/settings.service.js';
|
|
4
|
+
import { resolveAnimaHome } from '../anima-home.js';
|
|
5
|
+
import { clearRestartDrain, } from '../services/restart-drain.js';
|
|
6
|
+
import { DEFAULT_RESTART_DRAIN_TIMEOUT_MS, DEFAULT_RESTART_IDLE_TIMEOUT_MS, listRestartBlockers, RestartBlockedError, restartBlockedError, waitForRestartDrain, waitForRestartIdle, } from '../services/restart-gate.js';
|
|
7
|
+
import { blockedServicesRestartResult, idleServicesRestartResult, writeServicesRestartResult, } from '../services/restart-result.js';
|
|
8
|
+
import { isServiceRunning, printStatus, startService, stopService, } from '../services/supervisor.js';
|
|
9
|
+
const DEFAULT_DASHBOARD_PORT = 4174;
|
|
10
|
+
export function registerServicesCommand(program) {
|
|
11
|
+
const services = program
|
|
12
|
+
.command('services')
|
|
13
|
+
.description('Supervise the agent and web daemons for this environment');
|
|
14
|
+
services
|
|
15
|
+
.command('start')
|
|
16
|
+
.description('Start the agent and web app as background processes')
|
|
17
|
+
.option('--only <service>', 'Start only one service: agent or web')
|
|
18
|
+
.action(async (_, command) => {
|
|
19
|
+
const opts = command.optsWithGlobals();
|
|
20
|
+
await runStart(opts);
|
|
21
|
+
});
|
|
22
|
+
services
|
|
23
|
+
.command('stop')
|
|
24
|
+
.description('Stop the agent and web app background processes')
|
|
25
|
+
.option('--only <service>', 'Stop only one service: agent or web')
|
|
26
|
+
.action(async (_, command) => {
|
|
27
|
+
const opts = command.optsWithGlobals();
|
|
28
|
+
await runStop(opts);
|
|
29
|
+
});
|
|
30
|
+
services
|
|
31
|
+
.command('restart')
|
|
32
|
+
.description('Stop and start the agent and web app background processes')
|
|
33
|
+
.option('--only <service>', 'Restart only one service: agent or web')
|
|
34
|
+
.option('--drain-active', 'Drain running agents to a safe boundary before restart')
|
|
35
|
+
.option('--drain-timeout-ms <ms>', 'How long to wait for running agents to reach a drain point', parseNonNegativeInteger, DEFAULT_RESTART_DRAIN_TIMEOUT_MS)
|
|
36
|
+
.option('--force', 'Restart even if agent inboxes are running or queued')
|
|
37
|
+
.option('--idle-timeout-ms <ms>', 'How long to wait for agent inboxes to become idle before failing', parseNonNegativeInteger, DEFAULT_RESTART_IDLE_TIMEOUT_MS)
|
|
38
|
+
.option('--resume-running', 'Resume drained running agents after restart')
|
|
39
|
+
.action(async (_, command) => {
|
|
40
|
+
const opts = command.optsWithGlobals();
|
|
41
|
+
await runRestart(opts);
|
|
42
|
+
});
|
|
43
|
+
services
|
|
44
|
+
.command('status')
|
|
45
|
+
.description('Report the agent and web app daemon status')
|
|
46
|
+
.option('--only <service>', 'Show only one service: agent or web')
|
|
47
|
+
.action(async (_, command) => {
|
|
48
|
+
const opts = command.optsWithGlobals();
|
|
49
|
+
await runStatus(opts);
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async function runStart(opts) {
|
|
53
|
+
const { specs, supervisor } = await resolveServices(opts);
|
|
54
|
+
for (const spec of specs)
|
|
55
|
+
await startService(spec, supervisor);
|
|
56
|
+
await printStatus(specs);
|
|
57
|
+
}
|
|
58
|
+
async function runStop(opts) {
|
|
59
|
+
const { specs } = await resolveServices(opts);
|
|
60
|
+
assertCanControlServices(specs);
|
|
61
|
+
for (const spec of specs)
|
|
62
|
+
await stopService(spec);
|
|
63
|
+
await printStatus(specs);
|
|
64
|
+
}
|
|
65
|
+
async function runRestart(opts) {
|
|
66
|
+
validateRestartDrainOptions(opts);
|
|
67
|
+
const { specs, supervisor } = await resolveServices(opts);
|
|
68
|
+
assertCanControlServices(specs);
|
|
69
|
+
let gate;
|
|
70
|
+
let stopped = false;
|
|
71
|
+
try {
|
|
72
|
+
gate = await prepareRestartGate(specs, opts);
|
|
73
|
+
for (const spec of specs)
|
|
74
|
+
await stopService(spec);
|
|
75
|
+
stopped = true;
|
|
76
|
+
await gate.beforeStart();
|
|
77
|
+
for (const spec of specs)
|
|
78
|
+
await startService(spec, supervisor);
|
|
79
|
+
await printStatus(specs);
|
|
80
|
+
await writeRestartResult(gate.result);
|
|
81
|
+
if (gate.drainResult?.resumedCount) {
|
|
82
|
+
console.log(`restart: ${gate.drainResult.resumedCount} agent item(s) resumed after restart`);
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
catch (error) {
|
|
86
|
+
if (error instanceof RestartBlockedError) {
|
|
87
|
+
await writeRestartResult(blockedServicesRestartResult(error));
|
|
88
|
+
}
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
finally {
|
|
92
|
+
if (!stopped)
|
|
93
|
+
await gate?.cleanup();
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
async function runStatus(opts) {
|
|
97
|
+
const { specs } = await resolveServices(opts);
|
|
98
|
+
await printStatus(specs);
|
|
99
|
+
}
|
|
100
|
+
async function resolveServices(opts) {
|
|
101
|
+
const animaHome = resolveAnimaHome();
|
|
102
|
+
const { host: dashboardHost, port: dashboardPort } = await defaultServerSettingsService.getDashboardSettings({
|
|
103
|
+
defaultHost: '0.0.0.0',
|
|
104
|
+
defaultPort: DEFAULT_DASHBOARD_PORT,
|
|
105
|
+
});
|
|
106
|
+
// For the status URL display: 0.0.0.0 means all interfaces, show 127.0.0.1 for local access.
|
|
107
|
+
const dashboardDisplayHost = dashboardHost === '0.0.0.0' ? '127.0.0.1' : dashboardHost;
|
|
108
|
+
const allSpecs = [
|
|
109
|
+
{
|
|
110
|
+
args: ['server'],
|
|
111
|
+
animaHome,
|
|
112
|
+
id: 'agent',
|
|
113
|
+
logName: 'agent.log',
|
|
114
|
+
matchAny: [' server'],
|
|
115
|
+
},
|
|
116
|
+
{
|
|
117
|
+
args: ['web', '--host', dashboardHost, '--port', String(dashboardPort)],
|
|
118
|
+
animaHome,
|
|
119
|
+
id: 'web',
|
|
120
|
+
legacyIds: ['ui'],
|
|
121
|
+
logName: 'web.log',
|
|
122
|
+
matchAny: [' web ', ' ui '],
|
|
123
|
+
url: `http://${dashboardDisplayHost}:${dashboardPort}`,
|
|
124
|
+
},
|
|
125
|
+
];
|
|
126
|
+
if (opts.only && opts.only !== 'agent' && opts.only !== 'web') {
|
|
127
|
+
throw new Error('--only must be "agent" or "web"');
|
|
128
|
+
}
|
|
129
|
+
const specs = opts.only ? allSpecs.filter((spec) => spec.id === opts.only) : allSpecs;
|
|
130
|
+
const animactl = fileURLToPath(new URL('./animactl.js', import.meta.url));
|
|
131
|
+
const cwd = process.cwd();
|
|
132
|
+
return { specs, supervisor: { animactl, cwd } };
|
|
133
|
+
}
|
|
134
|
+
function assertCanControlServices(specs) {
|
|
135
|
+
if (!specs.some((spec) => spec.id === 'agent'))
|
|
136
|
+
return;
|
|
137
|
+
const isRuntimeItem = Boolean(process.env.ANIMA_INBOX_ITEM_ID || process.env.ANIMA_AGENT_ID);
|
|
138
|
+
if (!isRuntimeItem)
|
|
139
|
+
return;
|
|
140
|
+
const runtimeHome = process.env.ANIMA_RUNTIME_HOME;
|
|
141
|
+
if (runtimeHome && resolvePath(runtimeHome) !== resolvePath(resolveAnimaHome()))
|
|
142
|
+
return;
|
|
143
|
+
throw new Error('Refusing to stop or restart the agent service from inside its own active runtime. '
|
|
144
|
+
+ 'Use an external shell or idle-gated restart for full restarts, or pass --only web for web-only reloads.');
|
|
145
|
+
}
|
|
146
|
+
async function prepareRestartGate(specs, opts) {
|
|
147
|
+
const agentSpec = specs.find((spec) => spec.id === 'agent');
|
|
148
|
+
const noop = {
|
|
149
|
+
beforeStart: async () => { },
|
|
150
|
+
cleanup: async () => { },
|
|
151
|
+
result: idleServicesRestartResult(),
|
|
152
|
+
};
|
|
153
|
+
if (!agentSpec || opts.force || !(await isServiceRunning(agentSpec)))
|
|
154
|
+
return noop;
|
|
155
|
+
if (opts.drainActive || opts.resumeRunning) {
|
|
156
|
+
const drainResult = await waitForRestartDrain({
|
|
157
|
+
drainTimeoutMs: opts.drainTimeoutMs ?? DEFAULT_RESTART_DRAIN_TIMEOUT_MS,
|
|
158
|
+
markerTtlMs: (opts.drainTimeoutMs ?? DEFAULT_RESTART_DRAIN_TIMEOUT_MS) + 60_000,
|
|
159
|
+
});
|
|
160
|
+
return {
|
|
161
|
+
beforeStart: clearRestartDrain,
|
|
162
|
+
cleanup: clearRestartDrain,
|
|
163
|
+
drainResult,
|
|
164
|
+
result: drainResult,
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
await waitForRestartIdle(opts.idleTimeoutMs ?? DEFAULT_RESTART_IDLE_TIMEOUT_MS);
|
|
168
|
+
const finalBlockers = await listRestartBlockers();
|
|
169
|
+
if (finalBlockers.length > 0) {
|
|
170
|
+
throw restartBlockedError(finalBlockers, 'Agents became busy before restart.', 'became_busy');
|
|
171
|
+
}
|
|
172
|
+
return noop;
|
|
173
|
+
}
|
|
174
|
+
function validateRestartDrainOptions(opts) {
|
|
175
|
+
if ((opts.drainActive || opts.resumeRunning) && (!opts.drainActive || !opts.resumeRunning)) {
|
|
176
|
+
throw new Error('--drain-active and --resume-running must be used together');
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
async function writeRestartResult(result) {
|
|
180
|
+
const resultPath = process.env.ANIMA_RESTART_RESULT_FILE;
|
|
181
|
+
if (!resultPath)
|
|
182
|
+
return;
|
|
183
|
+
await writeServicesRestartResult(resultPath, result);
|
|
184
|
+
}
|
|
185
|
+
function parseNonNegativeInteger(value) {
|
|
186
|
+
const parsed = Number(value);
|
|
187
|
+
if (!Number.isInteger(parsed) || parsed < 0) {
|
|
188
|
+
throw new Error('timeout must be a non-negative integer');
|
|
189
|
+
}
|
|
190
|
+
return parsed;
|
|
191
|
+
}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export interface GlobalCliOptions {
|
|
2
|
+
agent?: string;
|
|
3
|
+
}
|
|
4
|
+
export declare function resolveAgentIdFrom(agent: string | undefined): string | undefined;
|
|
5
|
+
export declare function resolveItemIdFrom(item: string | undefined): string | undefined;
|
|
6
|
+
//# sourceMappingURL=shared.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"shared.d.ts","sourceRoot":"","sources":["../../../server/cli/shared.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAEhF;AAED,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAE9E"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function nowIso(): string;
|
|
2
|
+
export declare function errorMessage(error: unknown): string;
|
|
3
|
+
export declare function makeId(prefix: string): string;
|
|
4
|
+
export declare function slackSurfaceId(surface: {
|
|
5
|
+
channelId: string;
|
|
6
|
+
teamId: string;
|
|
7
|
+
threadTs?: string;
|
|
8
|
+
}): string;
|
|
9
|
+
export declare function slackMessageEventId(teamId: string, channelId: string, ts: string): string;
|
|
10
|
+
//# sourceMappingURL=ids.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ids.d.ts","sourceRoot":"","sources":["../../server/ids.ts"],"names":[],"mappings":"AAAA,wBAAgB,MAAM,IAAI,MAAM,CAE/B;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAEnD;AAED,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,MAAM,CAGxG;AAED,wBAAgB,mBAAmB,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,MAAM,CAEzF"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function nowIso() {
|
|
2
|
+
return new Date().toISOString();
|
|
3
|
+
}
|
|
4
|
+
export function errorMessage(error) {
|
|
5
|
+
return error instanceof Error ? error.message : String(error);
|
|
6
|
+
}
|
|
7
|
+
export function makeId(prefix) {
|
|
8
|
+
return `${prefix}_${Date.now().toString(36)}_${Math.random().toString(36).slice(2, 8)}`;
|
|
9
|
+
}
|
|
10
|
+
export function slackSurfaceId(surface) {
|
|
11
|
+
const base = `slack:${surface.teamId}:${surface.channelId}`;
|
|
12
|
+
return surface.threadTs ? `${base}:thread:${surface.threadTs}` : base;
|
|
13
|
+
}
|
|
14
|
+
export function slackMessageEventId(teamId, channelId, ts) {
|
|
15
|
+
return `slack:${teamId}:${channelId}:${ts}`;
|
|
16
|
+
}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { type ReminderService } from '../reminders/reminder.service.js';
|
|
2
|
+
import { WakeQueueService } from './wake-queue.service.js';
|
|
3
|
+
export declare class ReminderInboxSubscriber {
|
|
4
|
+
private readonly queue;
|
|
5
|
+
private poll?;
|
|
6
|
+
private readonly reminderService;
|
|
7
|
+
private timer?;
|
|
8
|
+
constructor(queue: WakeQueueService, reminderService?: ReminderService);
|
|
9
|
+
start(): void;
|
|
10
|
+
stop(): Promise<void>;
|
|
11
|
+
private pollDueReminders;
|
|
12
|
+
private fireDueReminders;
|
|
13
|
+
private fireReminder;
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=reminder-subscriber.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reminder-subscriber.d.ts","sourceRoot":"","sources":["../../../server/inbox/reminder-subscriber.ts"],"names":[],"mappings":"AACA,OAAO,EAA2B,KAAK,eAAe,EAAE,MAAM,kCAAkC,CAAC;AAGjG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAI3D,qBAAa,uBAAuB;IAMhC,OAAO,CAAC,QAAQ,CAAC,KAAK;IALxB,OAAO,CAAC,IAAI,CAAC,CAAgB;IAC7B,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,KAAK,CAAC,CAAiB;gBAGZ,KAAK,EAAE,gBAAgB,EACxC,eAAe,CAAC,EAAE,eAAe;IAKnC,KAAK,IAAI,IAAI;IAMP,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAMb,gBAAgB;YAYhB,gBAAgB;YAOhB,YAAY;CA6B3B"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { errorMessage } from '../ids.js';
|
|
2
|
+
import { reminderServiceForAgent } from '../reminders/reminder.service.js';
|
|
3
|
+
const REMINDER_POLL_MS = 30_000;
|
|
4
|
+
export class ReminderInboxSubscriber {
|
|
5
|
+
queue;
|
|
6
|
+
poll;
|
|
7
|
+
reminderService;
|
|
8
|
+
timer;
|
|
9
|
+
constructor(queue, reminderService) {
|
|
10
|
+
this.queue = queue;
|
|
11
|
+
this.reminderService = reminderService ?? reminderServiceForAgent(queue.agentId);
|
|
12
|
+
}
|
|
13
|
+
start() {
|
|
14
|
+
this.timer = setInterval(() => void this.pollDueReminders(), REMINDER_POLL_MS);
|
|
15
|
+
this.timer.unref();
|
|
16
|
+
void this.pollDueReminders();
|
|
17
|
+
}
|
|
18
|
+
async stop() {
|
|
19
|
+
if (this.timer)
|
|
20
|
+
clearInterval(this.timer);
|
|
21
|
+
this.timer = undefined;
|
|
22
|
+
await (this.poll ?? Promise.resolve());
|
|
23
|
+
}
|
|
24
|
+
async pollDueReminders() {
|
|
25
|
+
if (this.poll)
|
|
26
|
+
return this.poll;
|
|
27
|
+
this.poll = this.fireDueReminders()
|
|
28
|
+
.catch((error) => {
|
|
29
|
+
console.error(`Reminder scheduler failed for ${this.queue.agentId}: ${errorMessage(error)}`);
|
|
30
|
+
})
|
|
31
|
+
.finally(() => {
|
|
32
|
+
this.poll = undefined;
|
|
33
|
+
});
|
|
34
|
+
return this.poll;
|
|
35
|
+
}
|
|
36
|
+
async fireDueReminders() {
|
|
37
|
+
const firedAt = new Date();
|
|
38
|
+
for (const reminder of await this.reminderService.dueReminders({ now: firedAt })) {
|
|
39
|
+
await this.fireReminder(reminder, firedAt);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
async fireReminder(reminder, firedAt) {
|
|
43
|
+
const receivedAt = firedAt.toISOString();
|
|
44
|
+
const event = {
|
|
45
|
+
id: `reminder:${reminder.reminderId}:fire:${reminder.firedCount + 1}`,
|
|
46
|
+
kind: 'reminder',
|
|
47
|
+
receivedAt,
|
|
48
|
+
handling: {
|
|
49
|
+
createdAt: receivedAt,
|
|
50
|
+
queuedAt: receivedAt,
|
|
51
|
+
status: 'queued',
|
|
52
|
+
updatedAt: receivedAt,
|
|
53
|
+
},
|
|
54
|
+
reminderId: reminder.reminderId,
|
|
55
|
+
};
|
|
56
|
+
const decision = await this.queue.enqueue(event);
|
|
57
|
+
const firedReminder = await this.reminderService.completeReminderFire({
|
|
58
|
+
id: reminder.reminderId,
|
|
59
|
+
now: firedAt,
|
|
60
|
+
});
|
|
61
|
+
if (!decision.duplicate) {
|
|
62
|
+
await this.reminderService.recordReminderFire({
|
|
63
|
+
firedAt,
|
|
64
|
+
reminder: firedReminder,
|
|
65
|
+
});
|
|
66
|
+
}
|
|
67
|
+
console.log(`reminder fired reminderId=${reminder.reminderId} eventId=${event.id} duplicate=${Boolean(decision.duplicate)} queued=${Boolean(decision.queued)} firedAt=${firedAt.toISOString()}`);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import type { SlackFileMeta, SlackInboxItem } from '../../shared/inbox.js';
|
|
2
|
+
import type { SlackUserProfile } from './slack-profiles.js';
|
|
3
|
+
export type SlackEvent = SlackInboxItem;
|
|
4
|
+
export type SlackFile = SlackFileMeta;
|
|
5
|
+
export interface SlackSurface {
|
|
6
|
+
id: string;
|
|
7
|
+
channelId: string;
|
|
8
|
+
channelName?: string;
|
|
9
|
+
kind: 'channel' | 'dm' | 'thread';
|
|
10
|
+
teamId: string;
|
|
11
|
+
threadTs?: string;
|
|
12
|
+
visibility: 'private' | 'public';
|
|
13
|
+
}
|
|
14
|
+
export interface SlackMessageEnvelope {
|
|
15
|
+
event_id?: string;
|
|
16
|
+
team_id?: string;
|
|
17
|
+
}
|
|
18
|
+
export interface SlackRawMessageEvent {
|
|
19
|
+
bot_id?: string;
|
|
20
|
+
channel?: string;
|
|
21
|
+
channel_type?: string;
|
|
22
|
+
files?: Array<{
|
|
23
|
+
id?: string;
|
|
24
|
+
mimetype?: string;
|
|
25
|
+
name?: string;
|
|
26
|
+
size?: number;
|
|
27
|
+
title?: string;
|
|
28
|
+
url_private?: string;
|
|
29
|
+
url_private_download?: string;
|
|
30
|
+
}>;
|
|
31
|
+
subtype?: string;
|
|
32
|
+
team?: string;
|
|
33
|
+
text?: string;
|
|
34
|
+
thread_ts?: string;
|
|
35
|
+
ts?: string;
|
|
36
|
+
type?: string;
|
|
37
|
+
user?: string;
|
|
38
|
+
}
|
|
39
|
+
interface SlackUserMessageEvent extends SlackRawMessageEvent {
|
|
40
|
+
channel: string;
|
|
41
|
+
text: string;
|
|
42
|
+
ts: string;
|
|
43
|
+
type: 'app_mention' | 'message';
|
|
44
|
+
user: string;
|
|
45
|
+
}
|
|
46
|
+
export declare function isUserAuthoredSlackMessage(event: SlackRawMessageEvent): event is SlackUserMessageEvent;
|
|
47
|
+
export declare function isRoutableSlackMessage(event: SlackRawMessageEvent): event is SlackUserMessageEvent;
|
|
48
|
+
export declare function normalizeSlackMessage(input: {
|
|
49
|
+
attentionSuggestion?: string;
|
|
50
|
+
envelope?: SlackMessageEnvelope;
|
|
51
|
+
channelName?: string;
|
|
52
|
+
event: SlackRawMessageEvent;
|
|
53
|
+
files?: SlackFile[];
|
|
54
|
+
permalink?: string;
|
|
55
|
+
text?: string;
|
|
56
|
+
userProfile?: SlackUserProfile;
|
|
57
|
+
}): SlackEvent;
|
|
58
|
+
export declare function isSlackEvent(event: unknown): event is SlackEvent;
|
|
59
|
+
export declare function slackSurfaceDisplayRef(surface: SlackSurface): string;
|
|
60
|
+
export declare function slackSurfaceForEvent(event: SlackEvent): SlackSurface;
|
|
61
|
+
export {};
|
|
62
|
+
//# sourceMappingURL=slack-events.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-events.d.ts","sourceRoot":"","sources":["../../../server/inbox/slack-events.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAC3E,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG,cAAc,CAAC;AACxC,MAAM,MAAM,SAAS,GAAG,aAAa,CAAC;AAEtC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,EAAE,SAAS,GAAG,IAAI,GAAG,QAAQ,CAAC;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,SAAS,GAAG,QAAQ,CAAC;CAClC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,KAAK,CAAC,EAAE,KAAK,CAAC;QACZ,EAAE,CAAC,EAAE,MAAM,CAAC;QACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,oBAAoB,CAAC,EAAE,MAAM,CAAC;KAC/B,CAAC,CAAC;IACH,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,qBAAsB,SAAQ,oBAAoB;IAC1D,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,aAAa,GAAG,SAAS,CAAC;IAChC,IAAI,EAAE,MAAM,CAAC;CACd;AAED,wBAAgB,0BAA0B,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,IAAI,qBAAqB,CAMtG;AAED,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,oBAAoB,GAAG,KAAK,IAAI,qBAAqB,CAUlG;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE;IAC3C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,EAAE,oBAAoB,CAAC;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,oBAAoB,CAAC;IAC5B,KAAK,CAAC,EAAE,SAAS,EAAE,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,gBAAgB,CAAC;CAChC,GAAG,UAAU,CA0Bb;AAED,wBAAgB,YAAY,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,UAAU,CAEhE;AAED,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,CAEpE;AAED,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,UAAU,GAAG,YAAY,CAcpE"}
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
import { nowIso, slackMessageEventId, slackSurfaceId } from '../ids.js';
|
|
2
|
+
import { slackFileFromRaw } from '../slack/slack.helper.js';
|
|
3
|
+
export function isUserAuthoredSlackMessage(event) {
|
|
4
|
+
return (isRoutableSlackMessage(event) &&
|
|
5
|
+
event.bot_id === undefined &&
|
|
6
|
+
event.subtype !== 'bot_message');
|
|
7
|
+
}
|
|
8
|
+
export function isRoutableSlackMessage(event) {
|
|
9
|
+
return ((event.type === 'message' || event.type === 'app_mention') &&
|
|
10
|
+
typeof event.channel === 'string' &&
|
|
11
|
+
typeof event.ts === 'string' &&
|
|
12
|
+
typeof event.user === 'string' &&
|
|
13
|
+
typeof event.text === 'string' &&
|
|
14
|
+
(event.text.trim().length > 0 || (Array.isArray(event.files) && event.files.length > 0)) &&
|
|
15
|
+
(event.subtype === undefined || event.subtype === 'bot_message' || event.subtype === 'file_share'));
|
|
16
|
+
}
|
|
17
|
+
export function normalizeSlackMessage(input) {
|
|
18
|
+
const teamId = input.envelope?.team_id ?? input.event.team ?? 'unknown-team';
|
|
19
|
+
const channelId = input.event.channel;
|
|
20
|
+
const ts = input.event.ts;
|
|
21
|
+
const threadTs = input.event.thread_ts || undefined;
|
|
22
|
+
const eventId = slackMessageEventId(teamId, channelId, ts);
|
|
23
|
+
const files = input.files ?? input.event.files?.map(slackFileFromRaw).filter(Boolean);
|
|
24
|
+
const handlingAt = nowIso();
|
|
25
|
+
const result = {
|
|
26
|
+
id: eventId,
|
|
27
|
+
kind: 'slack',
|
|
28
|
+
receivedAt: slackTsToIsoOrNow(ts),
|
|
29
|
+
handling: { createdAt: handlingAt, queuedAt: handlingAt, status: 'queued', updatedAt: handlingAt },
|
|
30
|
+
teamId,
|
|
31
|
+
channelId,
|
|
32
|
+
messageTs: ts,
|
|
33
|
+
actor: { userId: input.event.user, ...input.userProfile },
|
|
34
|
+
text: input.text ?? input.event.text,
|
|
35
|
+
};
|
|
36
|
+
if (input.attentionSuggestion)
|
|
37
|
+
result.attentionSuggestion = input.attentionSuggestion;
|
|
38
|
+
if (input.channelName)
|
|
39
|
+
result.channelName = input.channelName;
|
|
40
|
+
if (threadTs)
|
|
41
|
+
result.threadTs = threadTs;
|
|
42
|
+
if (input.permalink)
|
|
43
|
+
result.permalink = input.permalink;
|
|
44
|
+
if (files?.length)
|
|
45
|
+
result.files = files;
|
|
46
|
+
return result;
|
|
47
|
+
}
|
|
48
|
+
export function isSlackEvent(event) {
|
|
49
|
+
return Boolean(event && typeof event === 'object' && event.kind === 'slack');
|
|
50
|
+
}
|
|
51
|
+
export function slackSurfaceDisplayRef(surface) {
|
|
52
|
+
return surface.channelName && surface.kind !== 'dm' ? `#${surface.channelName}` : surface.channelId;
|
|
53
|
+
}
|
|
54
|
+
export function slackSurfaceForEvent(event) {
|
|
55
|
+
return {
|
|
56
|
+
channelId: event.channelId,
|
|
57
|
+
...(event.channelName ? { channelName: event.channelName } : {}),
|
|
58
|
+
id: slackSurfaceId({
|
|
59
|
+
channelId: event.channelId,
|
|
60
|
+
teamId: event.teamId,
|
|
61
|
+
...(event.threadTs ? { threadTs: event.threadTs } : {}),
|
|
62
|
+
}),
|
|
63
|
+
kind: slackSurfaceKind(event),
|
|
64
|
+
teamId: event.teamId,
|
|
65
|
+
...(event.threadTs ? { threadTs: event.threadTs } : {}),
|
|
66
|
+
visibility: slackVisibility(event),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
function slackTsToIsoOrNow(ts) {
|
|
70
|
+
const seconds = Number(ts.split('.')[0]);
|
|
71
|
+
if (!Number.isFinite(seconds))
|
|
72
|
+
return nowIso();
|
|
73
|
+
return new Date(seconds * 1000).toISOString();
|
|
74
|
+
}
|
|
75
|
+
function slackSurfaceKind(event) {
|
|
76
|
+
if (event.channelId.startsWith('D'))
|
|
77
|
+
return 'dm';
|
|
78
|
+
if (event.threadTs)
|
|
79
|
+
return 'thread';
|
|
80
|
+
return 'channel';
|
|
81
|
+
}
|
|
82
|
+
function slackVisibility(event) {
|
|
83
|
+
return event.channelId.startsWith('C') ? 'public' : 'private';
|
|
84
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import type { WebClient } from '@slack/web-api';
|
|
2
|
+
export interface SlackConversationProfile {
|
|
3
|
+
name?: string;
|
|
4
|
+
}
|
|
5
|
+
export interface SlackUserProfile {
|
|
6
|
+
displayName?: string;
|
|
7
|
+
handle?: string;
|
|
8
|
+
realName?: string;
|
|
9
|
+
timezone?: {
|
|
10
|
+
label?: string;
|
|
11
|
+
name: string;
|
|
12
|
+
offsetSeconds?: number;
|
|
13
|
+
};
|
|
14
|
+
}
|
|
15
|
+
export declare class SlackProfileResolver {
|
|
16
|
+
private readonly conversations;
|
|
17
|
+
private readonly users;
|
|
18
|
+
user(input: {
|
|
19
|
+
client: WebClient;
|
|
20
|
+
teamId: string;
|
|
21
|
+
userId: string;
|
|
22
|
+
}): Promise<SlackUserProfile | undefined>;
|
|
23
|
+
conversation(input: {
|
|
24
|
+
channelId: string;
|
|
25
|
+
client: WebClient;
|
|
26
|
+
teamId: string;
|
|
27
|
+
}): Promise<SlackConversationProfile | undefined>;
|
|
28
|
+
userMentionLabels(input: {
|
|
29
|
+
client: WebClient;
|
|
30
|
+
teamId: string;
|
|
31
|
+
text: string;
|
|
32
|
+
}): Promise<Map<string, string>>;
|
|
33
|
+
channelMentionLabels(input: {
|
|
34
|
+
client: WebClient;
|
|
35
|
+
teamId: string;
|
|
36
|
+
text: string;
|
|
37
|
+
}): Promise<Map<string, string>>;
|
|
38
|
+
private userMentions;
|
|
39
|
+
private channelMentions;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=slack-profiles.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"slack-profiles.d.ts","sourceRoot":"","sources":["../../../server/inbox/slack-profiles.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAehD,MAAM,WAAW,wBAAwB;IACvC,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE;QACT,KAAK,CAAC,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;QACb,aAAa,CAAC,EAAE,MAAM,CAAC;KACxB,CAAC;CACH;AAcD,qBAAa,oBAAoB;IAC/B,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2D;IACzF,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAmD;IAEnE,IAAI,CAAC,KAAK,EAAE;QAChB,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,gBAAgB,GAAG,SAAS,CAAC;IAkBnC,YAAY,CAAC,KAAK,EAAE;QACxB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;KAChB,GAAG,OAAO,CAAC,wBAAwB,GAAG,SAAS,CAAC;IAkB3C,iBAAiB,CAAC,KAAK,EAAE;QAC7B,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAK1B,oBAAoB,CAAC,KAAK,EAAE;QAChC,MAAM,EAAE,SAAS,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,IAAI,EAAE,MAAM,CAAC;KACd,GAAG,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;YAKlB,YAAY;YAsBZ,eAAe;CAqB9B"}
|