@chozzz/vargos 2.0.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/.templates/vargos/agent/extensions/anthropic-custom-payload.patch.json +34 -0
- package/.templates/vargos/agent/extensions/anthropic-custom-payload.ts +74 -0
- package/.templates/vargos/agent/mcp.json +9 -0
- package/.templates/vargos/agent/skills/skill-creator/SKILL.md +77 -0
- package/.templates/vargos/agent/skills/token-capture/SKILL.md +33 -0
- package/.templates/vargos/agent/skills/token-capture/scripts/capture-bearer-token.sh +139 -0
- package/.templates/vargos/agents/README +5 -0
- package/.templates/vargos/agents/default.md +7 -0
- package/.templates/vargos/config.json +1 -0
- package/.templates/vargos/cron/heartbeat.md +11 -0
- package/.templates/vargos/workspace/AGENTS.md +70 -0
- package/.templates/vargos/workspace/HEARTBEAT.md +26 -0
- package/.templates/vargos/workspace/MEMORY.md +15 -0
- package/.templates/vargos/workspace/SOUL.md +51 -0
- package/.templates/vargos/workspace/TOOLS.md +36 -0
- package/CHANGELOG.md +23 -0
- package/CODE_OF_CONDUCT.md +47 -0
- package/CONTRIBUTING.md +65 -0
- package/LICENSE +191 -0
- package/README.md +117 -0
- package/SECURITY.md +30 -0
- package/dist/.templates/vargos/agent/extensions/anthropic-custom-payload.patch.json +34 -0
- package/dist/.templates/vargos/agent/extensions/anthropic-custom-payload.ts +74 -0
- package/dist/.templates/vargos/agent/mcp.json +9 -0
- package/dist/.templates/vargos/agent/skills/skill-creator/SKILL.md +77 -0
- package/dist/.templates/vargos/agent/skills/token-capture/SKILL.md +33 -0
- package/dist/.templates/vargos/agent/skills/token-capture/scripts/capture-bearer-token.sh +139 -0
- package/dist/.templates/vargos/agents/README +5 -0
- package/dist/.templates/vargos/agents/default.md +7 -0
- package/dist/.templates/vargos/config.json +1 -0
- package/dist/.templates/vargos/cron/heartbeat.md +11 -0
- package/dist/.templates/vargos/workspace/AGENTS.md +70 -0
- package/dist/.templates/vargos/workspace/HEARTBEAT.md +26 -0
- package/dist/.templates/vargos/workspace/MEMORY.md +15 -0
- package/dist/.templates/vargos/workspace/SOUL.md +51 -0
- package/dist/.templates/vargos/workspace/TOOLS.md +36 -0
- package/dist/cli/onboard.d.ts +10 -0
- package/dist/cli/onboard.d.ts.map +1 -0
- package/dist/cli/onboard.js +207 -0
- package/dist/cli/onboard.js.map +1 -0
- package/dist/cli.d.ts +13 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +118 -0
- package/dist/cli.js.map +1 -0
- package/dist/edge/mcp/index.d.ts +33 -0
- package/dist/edge/mcp/index.d.ts.map +1 -0
- package/dist/edge/mcp/index.js +217 -0
- package/dist/edge/mcp/index.js.map +1 -0
- package/dist/edge/webhooks/index.d.ts +33 -0
- package/dist/edge/webhooks/index.d.ts.map +1 -0
- package/dist/edge/webhooks/index.js +231 -0
- package/dist/edge/webhooks/index.js.map +1 -0
- package/dist/edge/webhooks/transform.d.ts +8 -0
- package/dist/edge/webhooks/transform.d.ts.map +1 -0
- package/dist/edge/webhooks/transform.js +29 -0
- package/dist/edge/webhooks/transform.js.map +1 -0
- package/dist/gateway/bus.d.ts +48 -0
- package/dist/gateway/bus.d.ts.map +1 -0
- package/dist/gateway/bus.js +2 -0
- package/dist/gateway/bus.js.map +1 -0
- package/dist/gateway/decorators.d.ts +40 -0
- package/dist/gateway/decorators.d.ts.map +1 -0
- package/dist/gateway/decorators.js +43 -0
- package/dist/gateway/decorators.js.map +1 -0
- package/dist/gateway/emitter.d.ts +42 -0
- package/dist/gateway/emitter.d.ts.map +1 -0
- package/dist/gateway/emitter.js +259 -0
- package/dist/gateway/emitter.js.map +1 -0
- package/dist/gateway/events.d.ts +343 -0
- package/dist/gateway/events.d.ts.map +1 -0
- package/dist/gateway/events.js +7 -0
- package/dist/gateway/events.js.map +1 -0
- package/dist/gateway/tcp-server.d.ts +7 -0
- package/dist/gateway/tcp-server.d.ts.map +1 -0
- package/dist/gateway/tcp-server.js +115 -0
- package/dist/gateway/tcp-server.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +74 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/async-handlers.d.ts +13 -0
- package/dist/lib/async-handlers.d.ts.map +1 -0
- package/dist/lib/async-handlers.js +6 -0
- package/dist/lib/async-handlers.js.map +1 -0
- package/dist/lib/error-store.d.ts +19 -0
- package/dist/lib/error-store.d.ts.map +1 -0
- package/dist/lib/error-store.js +19 -0
- package/dist/lib/error-store.js.map +1 -0
- package/dist/lib/error.d.ts +11 -0
- package/dist/lib/error.d.ts.map +1 -0
- package/dist/lib/error.js +41 -0
- package/dist/lib/error.js.map +1 -0
- package/dist/lib/frontmatter.d.ts +23 -0
- package/dist/lib/frontmatter.d.ts.map +1 -0
- package/dist/lib/frontmatter.js +136 -0
- package/dist/lib/frontmatter.js.map +1 -0
- package/dist/lib/glob.d.ts +14 -0
- package/dist/lib/glob.d.ts.map +1 -0
- package/dist/lib/glob.js +22 -0
- package/dist/lib/glob.js.map +1 -0
- package/dist/lib/heartbeat.d.ts +23 -0
- package/dist/lib/heartbeat.d.ts.map +1 -0
- package/dist/lib/heartbeat.js +62 -0
- package/dist/lib/heartbeat.js.map +1 -0
- package/dist/lib/html.d.ts +8 -0
- package/dist/lib/html.d.ts.map +1 -0
- package/dist/lib/html.js +28 -0
- package/dist/lib/html.js.map +1 -0
- package/dist/lib/http-validate.d.ts +12 -0
- package/dist/lib/http-validate.d.ts.map +1 -0
- package/dist/lib/http-validate.js +11 -0
- package/dist/lib/http-validate.js.map +1 -0
- package/dist/lib/id.d.ts +3 -0
- package/dist/lib/id.d.ts.map +1 -0
- package/dist/lib/id.js +5 -0
- package/dist/lib/id.js.map +1 -0
- package/dist/lib/logger.d.ts +12 -0
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +28 -0
- package/dist/lib/logger.js.map +1 -0
- package/dist/lib/media-transcribe.d.ts +57 -0
- package/dist/lib/media-transcribe.d.ts.map +1 -0
- package/dist/lib/media-transcribe.js +98 -0
- package/dist/lib/media-transcribe.js.map +1 -0
- package/dist/lib/media.d.ts +7 -0
- package/dist/lib/media.d.ts.map +1 -0
- package/dist/lib/media.js +18 -0
- package/dist/lib/media.js.map +1 -0
- package/dist/lib/mime.d.ts +6 -0
- package/dist/lib/mime.d.ts.map +1 -0
- package/dist/lib/mime.js +71 -0
- package/dist/lib/mime.js.map +1 -0
- package/dist/lib/paginate.d.ts +3 -0
- package/dist/lib/paginate.d.ts.map +1 -0
- package/dist/lib/paginate.js +5 -0
- package/dist/lib/paginate.js.map +1 -0
- package/dist/lib/paths.d.ts +14 -0
- package/dist/lib/paths.d.ts.map +1 -0
- package/dist/lib/paths.js +29 -0
- package/dist/lib/paths.js.map +1 -0
- package/dist/lib/provider-loader.d.ts +10 -0
- package/dist/lib/provider-loader.d.ts.map +1 -0
- package/dist/lib/provider-loader.js +24 -0
- package/dist/lib/provider-loader.js.map +1 -0
- package/dist/lib/retry.d.ts +20 -0
- package/dist/lib/retry.d.ts.map +1 -0
- package/dist/lib/retry.js +40 -0
- package/dist/lib/retry.js.map +1 -0
- package/dist/lib/safe-async.d.ts +27 -0
- package/dist/lib/safe-async.d.ts.map +1 -0
- package/dist/lib/safe-async.js +38 -0
- package/dist/lib/safe-async.js.map +1 -0
- package/dist/lib/skills.d.ts +9 -0
- package/dist/lib/skills.d.ts.map +1 -0
- package/dist/lib/skills.js +15 -0
- package/dist/lib/skills.js.map +1 -0
- package/dist/lib/sleep.d.ts +6 -0
- package/dist/lib/sleep.d.ts.map +1 -0
- package/dist/lib/sleep.js +22 -0
- package/dist/lib/sleep.js.map +1 -0
- package/dist/lib/strip-markdown.d.ts +7 -0
- package/dist/lib/strip-markdown.d.ts.map +1 -0
- package/dist/lib/strip-markdown.js +32 -0
- package/dist/lib/strip-markdown.js.map +1 -0
- package/dist/lib/subagent.d.ts +14 -0
- package/dist/lib/subagent.d.ts.map +1 -0
- package/dist/lib/subagent.js +25 -0
- package/dist/lib/subagent.js.map +1 -0
- package/dist/lib/templates.d.ts +8 -0
- package/dist/lib/templates.d.ts.map +1 -0
- package/dist/lib/templates.js +39 -0
- package/dist/lib/templates.js.map +1 -0
- package/dist/lib/timeout.d.ts +6 -0
- package/dist/lib/timeout.d.ts.map +1 -0
- package/dist/lib/timeout.js +11 -0
- package/dist/lib/timeout.js.map +1 -0
- package/dist/lib/truncate.d.ts +11 -0
- package/dist/lib/truncate.d.ts.map +1 -0
- package/dist/lib/truncate.js +17 -0
- package/dist/lib/truncate.js.map +1 -0
- package/dist/lib/url-expand.d.ts +22 -0
- package/dist/lib/url-expand.d.ts.map +1 -0
- package/dist/lib/url-expand.js +74 -0
- package/dist/lib/url-expand.js.map +1 -0
- package/dist/scripts/migrate-cron-sessions.d.ts +10 -0
- package/dist/scripts/migrate-cron-sessions.d.ts.map +1 -0
- package/dist/scripts/migrate-cron-sessions.js +139 -0
- package/dist/scripts/migrate-cron-sessions.js.map +1 -0
- package/dist/scripts/seed.d.ts +2 -0
- package/dist/scripts/seed.d.ts.map +1 -0
- package/dist/scripts/seed.js +4 -0
- package/dist/scripts/seed.js.map +1 -0
- package/dist/services/agent/directives.d.ts +14 -0
- package/dist/services/agent/directives.d.ts.map +1 -0
- package/dist/services/agent/directives.js +32 -0
- package/dist/services/agent/directives.js.map +1 -0
- package/dist/services/agent/index.d.ts +104 -0
- package/dist/services/agent/index.d.ts.map +1 -0
- package/dist/services/agent/index.js +534 -0
- package/dist/services/agent/index.js.map +1 -0
- package/dist/services/agent/persona.d.ts +15 -0
- package/dist/services/agent/persona.d.ts.map +1 -0
- package/dist/services/agent/persona.js +63 -0
- package/dist/services/agent/persona.js.map +1 -0
- package/dist/services/agent/prompt-interpolate.d.ts +41 -0
- package/dist/services/agent/prompt-interpolate.d.ts.map +1 -0
- package/dist/services/agent/prompt-interpolate.js +102 -0
- package/dist/services/agent/prompt-interpolate.js.map +1 -0
- package/dist/services/agent/schema.d.ts +10 -0
- package/dist/services/agent/schema.d.ts.map +1 -0
- package/dist/services/agent/schema.js +5 -0
- package/dist/services/agent/schema.js.map +1 -0
- package/dist/services/agent/tools.d.ts +26 -0
- package/dist/services/agent/tools.d.ts.map +1 -0
- package/dist/services/agent/tools.js +85 -0
- package/dist/services/agent/tools.js.map +1 -0
- package/dist/services/channels/base-adapter.d.ts +61 -0
- package/dist/services/channels/base-adapter.d.ts.map +1 -0
- package/dist/services/channels/base-adapter.js +181 -0
- package/dist/services/channels/base-adapter.js.map +1 -0
- package/dist/services/channels/contracts.d.ts +75 -0
- package/dist/services/channels/contracts.d.ts.map +1 -0
- package/dist/services/channels/contracts.js +6 -0
- package/dist/services/channels/contracts.js.map +1 -0
- package/dist/services/channels/debounce.d.ts +22 -0
- package/dist/services/channels/debounce.d.ts.map +1 -0
- package/dist/services/channels/debounce.js +53 -0
- package/dist/services/channels/debounce.js.map +1 -0
- package/dist/services/channels/dedupe.d.ts +19 -0
- package/dist/services/channels/dedupe.d.ts.map +1 -0
- package/dist/services/channels/dedupe.js +52 -0
- package/dist/services/channels/dedupe.js.map +1 -0
- package/dist/services/channels/delivery.d.ts +12 -0
- package/dist/services/channels/delivery.d.ts.map +1 -0
- package/dist/services/channels/delivery.js +53 -0
- package/dist/services/channels/delivery.js.map +1 -0
- package/dist/services/channels/index.d.ts +53 -0
- package/dist/services/channels/index.d.ts.map +1 -0
- package/dist/services/channels/index.js +405 -0
- package/dist/services/channels/index.js.map +1 -0
- package/dist/services/channels/link-expand.d.ts +8 -0
- package/dist/services/channels/link-expand.d.ts.map +1 -0
- package/dist/services/channels/link-expand.js +28 -0
- package/dist/services/channels/link-expand.js.map +1 -0
- package/dist/services/channels/media-extract.d.ts +7 -0
- package/dist/services/channels/media-extract.d.ts.map +1 -0
- package/dist/services/channels/media-extract.js +31 -0
- package/dist/services/channels/media-extract.js.map +1 -0
- package/dist/services/channels/pipeline.d.ts +29 -0
- package/dist/services/channels/pipeline.d.ts.map +1 -0
- package/dist/services/channels/pipeline.js +120 -0
- package/dist/services/channels/pipeline.js.map +1 -0
- package/dist/services/channels/provider-loader.d.ts +7 -0
- package/dist/services/channels/provider-loader.d.ts.map +1 -0
- package/dist/services/channels/provider-loader.js +13 -0
- package/dist/services/channels/provider-loader.js.map +1 -0
- package/dist/services/channels/providers/telegram/adapter.d.ts +34 -0
- package/dist/services/channels/providers/telegram/adapter.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/adapter.js +278 -0
- package/dist/services/channels/providers/telegram/adapter.js.map +1 -0
- package/dist/services/channels/providers/telegram/index.d.ts +11 -0
- package/dist/services/channels/providers/telegram/index.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/index.js +11 -0
- package/dist/services/channels/providers/telegram/index.js.map +1 -0
- package/dist/services/channels/providers/telegram/normalizer.d.ts +12 -0
- package/dist/services/channels/providers/telegram/normalizer.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/normalizer.js +50 -0
- package/dist/services/channels/providers/telegram/normalizer.js.map +1 -0
- package/dist/services/channels/providers/telegram/types.d.ts +72 -0
- package/dist/services/channels/providers/telegram/types.d.ts.map +1 -0
- package/dist/services/channels/providers/telegram/types.js +3 -0
- package/dist/services/channels/providers/telegram/types.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/adapter.d.ts +36 -0
- package/dist/services/channels/providers/whatsapp/adapter.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/adapter.js +261 -0
- package/dist/services/channels/providers/whatsapp/adapter.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/index.d.ts +11 -0
- package/dist/services/channels/providers/whatsapp/index.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/index.js +11 -0
- package/dist/services/channels/providers/whatsapp/index.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/normalizer.d.ts +11 -0
- package/dist/services/channels/providers/whatsapp/normalizer.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/normalizer.js +47 -0
- package/dist/services/channels/providers/whatsapp/normalizer.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/session.d.ts +9 -0
- package/dist/services/channels/providers/whatsapp/session.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/session.js +118 -0
- package/dist/services/channels/providers/whatsapp/session.js.map +1 -0
- package/dist/services/channels/providers/whatsapp/types.d.ts +23 -0
- package/dist/services/channels/providers/whatsapp/types.d.ts.map +1 -0
- package/dist/services/channels/providers/whatsapp/types.js +3 -0
- package/dist/services/channels/providers/whatsapp/types.js.map +1 -0
- package/dist/services/channels/reconnect.d.ts +23 -0
- package/dist/services/channels/reconnect.d.ts.map +1 -0
- package/dist/services/channels/reconnect.js +32 -0
- package/dist/services/channels/reconnect.js.map +1 -0
- package/dist/services/channels/status-reactions.d.ts +27 -0
- package/dist/services/channels/status-reactions.d.ts.map +1 -0
- package/dist/services/channels/status-reactions.js +63 -0
- package/dist/services/channels/status-reactions.js.map +1 -0
- package/dist/services/channels/types.d.ts +16 -0
- package/dist/services/channels/types.d.ts.map +1 -0
- package/dist/services/channels/types.js +2 -0
- package/dist/services/channels/types.js.map +1 -0
- package/dist/services/channels/typing-state.d.ts +22 -0
- package/dist/services/channels/typing-state.d.ts.map +1 -0
- package/dist/services/channels/typing-state.js +88 -0
- package/dist/services/channels/typing-state.js.map +1 -0
- package/dist/services/config/index.d.ts +2426 -0
- package/dist/services/config/index.d.ts.map +1 -0
- package/dist/services/config/index.js +232 -0
- package/dist/services/config/index.js.map +1 -0
- package/dist/services/config/schemas/agent.d.ts +720 -0
- package/dist/services/config/schemas/agent.d.ts.map +1 -0
- package/dist/services/config/schemas/agent.js +86 -0
- package/dist/services/config/schemas/agent.js.map +1 -0
- package/dist/services/config/schemas/auth.d.ts +60 -0
- package/dist/services/config/schemas/auth.d.ts.map +1 -0
- package/dist/services/config/schemas/auth.js +18 -0
- package/dist/services/config/schemas/auth.js.map +1 -0
- package/dist/services/config/schemas/channels.d.ts +117 -0
- package/dist/services/config/schemas/channels.d.ts.map +1 -0
- package/dist/services/config/schemas/channels.js +22 -0
- package/dist/services/config/schemas/channels.js.map +1 -0
- package/dist/services/config/schemas/cron.d.ts +97 -0
- package/dist/services/config/schemas/cron.d.ts.map +1 -0
- package/dist/services/config/schemas/cron.js +18 -0
- package/dist/services/config/schemas/cron.js.map +1 -0
- package/dist/services/config/schemas/features.d.ts +43 -0
- package/dist/services/config/schemas/features.d.ts.map +1 -0
- package/dist/services/config/schemas/features.js +20 -0
- package/dist/services/config/schemas/features.js.map +1 -0
- package/dist/services/config/schemas/index.d.ts +24 -0
- package/dist/services/config/schemas/index.d.ts.map +1 -0
- package/dist/services/config/schemas/index.js +24 -0
- package/dist/services/config/schemas/index.js.map +1 -0
- package/dist/services/config/schemas/mcp.d.ts +31 -0
- package/dist/services/config/schemas/mcp.d.ts.map +1 -0
- package/dist/services/config/schemas/mcp.js +39 -0
- package/dist/services/config/schemas/mcp.js.map +1 -0
- package/dist/services/config/schemas/primitives.d.ts +13 -0
- package/dist/services/config/schemas/primitives.d.ts.map +1 -0
- package/dist/services/config/schemas/primitives.js +17 -0
- package/dist/services/config/schemas/primitives.js.map +1 -0
- package/dist/services/config/schemas/providers.d.ts +335 -0
- package/dist/services/config/schemas/providers.d.ts.map +1 -0
- package/dist/services/config/schemas/providers.js +27 -0
- package/dist/services/config/schemas/providers.js.map +1 -0
- package/dist/services/config/schemas/storage.d.ts +16 -0
- package/dist/services/config/schemas/storage.d.ts.map +1 -0
- package/dist/services/config/schemas/storage.js +9 -0
- package/dist/services/config/schemas/storage.js.map +1 -0
- package/dist/services/config/schemas/webhooks.d.ts +25 -0
- package/dist/services/config/schemas/webhooks.d.ts.map +1 -0
- package/dist/services/config/schemas/webhooks.js +12 -0
- package/dist/services/config/schemas/webhooks.js.map +1 -0
- package/dist/services/cron/index.d.ts +50 -0
- package/dist/services/cron/index.d.ts.map +1 -0
- package/dist/services/cron/index.js +460 -0
- package/dist/services/cron/index.js.map +1 -0
- package/dist/services/log/index.d.ts +14 -0
- package/dist/services/log/index.d.ts.map +1 -0
- package/dist/services/log/index.js +137 -0
- package/dist/services/log/index.js.map +1 -0
- package/dist/services/mcp-client/index.d.ts +37 -0
- package/dist/services/mcp-client/index.d.ts.map +1 -0
- package/dist/services/mcp-client/index.js +258 -0
- package/dist/services/mcp-client/index.js.map +1 -0
- package/dist/services/media/extract-document.d.ts +8 -0
- package/dist/services/media/extract-document.d.ts.map +1 -0
- package/dist/services/media/extract-document.js +85 -0
- package/dist/services/media/extract-document.js.map +1 -0
- package/dist/services/media/index.d.ts +21 -0
- package/dist/services/media/index.d.ts.map +1 -0
- package/dist/services/media/index.js +116 -0
- package/dist/services/media/index.js.map +1 -0
- package/dist/services/media/providers/anthropic.d.ts +6 -0
- package/dist/services/media/providers/anthropic.d.ts.map +1 -0
- package/dist/services/media/providers/anthropic.js +38 -0
- package/dist/services/media/providers/anthropic.js.map +1 -0
- package/dist/services/media/providers/index.d.ts +6 -0
- package/dist/services/media/providers/index.d.ts.map +1 -0
- package/dist/services/media/providers/index.js +15 -0
- package/dist/services/media/providers/index.js.map +1 -0
- package/dist/services/media/providers/openai.d.ts +6 -0
- package/dist/services/media/providers/openai.d.ts.map +1 -0
- package/dist/services/media/providers/openai.js +48 -0
- package/dist/services/media/providers/openai.js.map +1 -0
- package/dist/services/media/providers/provider.d.ts +5 -0
- package/dist/services/media/providers/provider.d.ts.map +1 -0
- package/dist/services/media/providers/provider.js +2 -0
- package/dist/services/media/providers/provider.js.map +1 -0
- package/dist/services/memory/chunker.d.ts +7 -0
- package/dist/services/memory/chunker.d.ts.map +1 -0
- package/dist/services/memory/chunker.js +46 -0
- package/dist/services/memory/chunker.js.map +1 -0
- package/dist/services/memory/context.d.ts +68 -0
- package/dist/services/memory/context.d.ts.map +1 -0
- package/dist/services/memory/context.js +223 -0
- package/dist/services/memory/context.js.map +1 -0
- package/dist/services/memory/embedding.d.ts +9 -0
- package/dist/services/memory/embedding.d.ts.map +1 -0
- package/dist/services/memory/embedding.js +49 -0
- package/dist/services/memory/embedding.js.map +1 -0
- package/dist/services/memory/index.d.ts +24 -0
- package/dist/services/memory/index.d.ts.map +1 -0
- package/dist/services/memory/index.js +140 -0
- package/dist/services/memory/index.js.map +1 -0
- package/dist/services/memory/session-indexer.d.ts +5 -0
- package/dist/services/memory/session-indexer.d.ts.map +1 -0
- package/dist/services/memory/session-indexer.js +62 -0
- package/dist/services/memory/session-indexer.js.map +1 -0
- package/dist/services/memory/sqlite-storage.d.ts +23 -0
- package/dist/services/memory/sqlite-storage.d.ts.map +1 -0
- package/dist/services/memory/sqlite-storage.js +75 -0
- package/dist/services/memory/sqlite-storage.js.map +1 -0
- package/dist/services/memory/types.d.ts +31 -0
- package/dist/services/memory/types.d.ts.map +1 -0
- package/dist/services/memory/types.js +2 -0
- package/dist/services/memory/types.js.map +1 -0
- package/dist/services/web/index.d.ts +9 -0
- package/dist/services/web/index.d.ts.map +1 -0
- package/dist/services/web/index.js +101 -0
- package/dist/services/web/index.js.map +1 -0
- package/dist/vitest.config.d.ts +3 -0
- package/dist/vitest.config.d.ts.map +1 -0
- package/dist/vitest.config.js +9 -0
- package/dist/vitest.config.js.map +1 -0
- package/package.json +102 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Heartbeat utilities — pure functions for heartbeat poll logic
|
|
3
|
+
*/
|
|
4
|
+
/**
|
|
5
|
+
* Returns true if HEARTBEAT.md content has no actionable tasks.
|
|
6
|
+
* Skips blank lines, markdown headers, empty list items, and HTML comments.
|
|
7
|
+
*/
|
|
8
|
+
export function isHeartbeatContentEffectivelyEmpty(content) {
|
|
9
|
+
for (const line of content.split('\n')) {
|
|
10
|
+
const trimmed = line.trim();
|
|
11
|
+
if (!trimmed)
|
|
12
|
+
continue;
|
|
13
|
+
if (trimmed.startsWith('#'))
|
|
14
|
+
continue;
|
|
15
|
+
if (trimmed === '-' || trimmed === '- [ ]')
|
|
16
|
+
continue;
|
|
17
|
+
if (trimmed.startsWith('<!--') && trimmed.endsWith('-->'))
|
|
18
|
+
continue;
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
return true;
|
|
22
|
+
}
|
|
23
|
+
// Matches HEARTBEAT_OK with optional markdown wrapping (bold, backtick, strikethrough)
|
|
24
|
+
const HEARTBEAT_TOKEN_RE = /(?:\*{1,2}|`|~~)?HEARTBEAT_OK(?:\*{1,2}|`|~~)?/g;
|
|
25
|
+
/**
|
|
26
|
+
* Strip HEARTBEAT_OK token from response text.
|
|
27
|
+
* Returns null if the entire response was only the token (signal to skip delivery).
|
|
28
|
+
* Returns cleaned text otherwise.
|
|
29
|
+
*/
|
|
30
|
+
export function stripHeartbeatToken(text) {
|
|
31
|
+
const stripped = text.replace(HEARTBEAT_TOKEN_RE, '').trim();
|
|
32
|
+
if (!stripped)
|
|
33
|
+
return null;
|
|
34
|
+
return stripped;
|
|
35
|
+
}
|
|
36
|
+
function currentHourInZone(timeZone) {
|
|
37
|
+
const parts = new Intl.DateTimeFormat('en-GB', {
|
|
38
|
+
timeZone,
|
|
39
|
+
hour: 'numeric',
|
|
40
|
+
hour12: false,
|
|
41
|
+
}).formatToParts(new Date());
|
|
42
|
+
const hourPart = parts.find(p => p.type === 'hour');
|
|
43
|
+
return parseInt(hourPart?.value ?? '0', 10);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Check if the current hour is within active hours.
|
|
47
|
+
* Returns true if no config (always active).
|
|
48
|
+
* Supports overnight ranges (e.g. 22→6).
|
|
49
|
+
*
|
|
50
|
+
* @param activeHours [startHour, endHour] (0–23). Interpreted in `timeZone` when set, else UTC.
|
|
51
|
+
*/
|
|
52
|
+
export function isWithinActiveHours(activeHours, timeZone) {
|
|
53
|
+
if (!activeHours)
|
|
54
|
+
return true;
|
|
55
|
+
const [start, end] = activeHours;
|
|
56
|
+
const hour = timeZone ? currentHourInZone(timeZone) : new Date().getUTCHours();
|
|
57
|
+
if (start <= end)
|
|
58
|
+
return hour >= start && hour < end;
|
|
59
|
+
// Overnight: e.g. [22, 6] → active 22:00→06:00
|
|
60
|
+
return hour >= start || hour < end;
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=heartbeat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"heartbeat.js","sourceRoot":"","sources":["../../lib/heartbeat.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH;;;GAGG;AACH,MAAM,UAAU,kCAAkC,CAAC,OAAe;IAChE,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;QAC5B,IAAI,CAAC,OAAO;YAAE,SAAS;QACvB,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QACtC,IAAI,OAAO,KAAK,GAAG,IAAI,OAAO,KAAK,OAAO;YAAE,SAAS;QACrD,IAAI,OAAO,CAAC,UAAU,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,SAAS;QACpE,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,uFAAuF;AACvF,MAAM,kBAAkB,GAAG,iDAAiD,CAAC;AAE7E;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CAAC,IAAY;IAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAC,kBAAkB,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;IAC7D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,SAAS,iBAAiB,CAAC,QAAgB;IACzC,MAAM,KAAK,GAAG,IAAI,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE;QAC7C,QAAQ;QACR,IAAI,EAAE,SAAS;QACf,MAAM,EAAE,KAAK;KACd,CAAC,CAAC,aAAa,CAAC,IAAI,IAAI,EAAE,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC;IACpD,OAAO,QAAQ,CAAC,QAAQ,EAAE,KAAK,IAAI,GAAG,EAAE,EAAE,CAAC,CAAC;AAC9C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,mBAAmB,CACjC,WAA8B,EAC9B,QAAiB;IAEjB,IAAI,CAAC,WAAW;QAAE,OAAO,IAAI,CAAC;IAC9B,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,WAAW,CAAC;IACjC,MAAM,IAAI,GAAG,QAAQ,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAC/E,IAAI,KAAK,IAAI,GAAG;QAAE,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;IACrD,+CAA+C;IAC/C,OAAO,IAAI,IAAI,KAAK,IAAI,IAAI,GAAG,GAAG,CAAC;AACrC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTML utilities backed by turndown.
|
|
3
|
+
* - stripHtml: simple tag stripping (for link expansion)
|
|
4
|
+
* - htmlToMarkdown: proper conversion preserving links, headings, lists (for web.fetch)
|
|
5
|
+
*/
|
|
6
|
+
export declare function htmlToMarkdown(html: string): string;
|
|
7
|
+
export declare function stripHtml(html: string): string;
|
|
8
|
+
//# sourceMappingURL=html.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.d.ts","sourceRoot":"","sources":["../../lib/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAOH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAKnD;AAED,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAY9C"}
|
package/dist/lib/html.js
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared HTML utilities backed by turndown.
|
|
3
|
+
* - stripHtml: simple tag stripping (for link expansion)
|
|
4
|
+
* - htmlToMarkdown: proper conversion preserving links, headings, lists (for web.fetch)
|
|
5
|
+
*/
|
|
6
|
+
import TurndownService from 'turndown';
|
|
7
|
+
const turndown = new TurndownService({ headingStyle: 'atx', bulletListMarker: '-' });
|
|
8
|
+
turndown.remove(['script', 'style', 'noscript']);
|
|
9
|
+
export function htmlToMarkdown(html) {
|
|
10
|
+
const titleMatch = html.match(/<title[^>]*>([\s\S]*?)<\/title>/i);
|
|
11
|
+
const title = titleMatch?.[1]?.trim();
|
|
12
|
+
const text = turndown.turndown(html).replace(/\n{3,}/g, '\n\n').trim();
|
|
13
|
+
return title ? `# ${title}\n\n${text}` : text;
|
|
14
|
+
}
|
|
15
|
+
export function stripHtml(html) {
|
|
16
|
+
return html
|
|
17
|
+
.replace(/<(script|style)[^>]*>[\s\S]*?<\/\1>/gi, ' ')
|
|
18
|
+
.replace(/<[^>]+>/g, ' ')
|
|
19
|
+
.replace(/&/g, '&')
|
|
20
|
+
.replace(/</g, '<')
|
|
21
|
+
.replace(/>/g, '>')
|
|
22
|
+
.replace(/"/g, '"')
|
|
23
|
+
.replace(/'/g, "'")
|
|
24
|
+
.replace(/ /g, ' ')
|
|
25
|
+
.replace(/\s+/g, ' ')
|
|
26
|
+
.trim();
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=html.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"html.js","sourceRoot":"","sources":["../../lib/html.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,eAAe,MAAM,UAAU,CAAC;AAEvC,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC,EAAE,YAAY,EAAE,KAAK,EAAE,gBAAgB,EAAE,GAAG,EAAE,CAAC,CAAC;AACrF,QAAQ,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,UAAU,CAAC,CAAC,CAAC;AAEjD,MAAM,UAAU,cAAc,CAAC,IAAY;IACzC,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,kCAAkC,CAAC,CAAC;IAClE,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC;IACtC,MAAM,IAAI,GAAG,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;IACvE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,KAAK,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;AAChD,CAAC;AAED,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,IAAI;SACR,OAAO,CAAC,uCAAuC,EAAE,GAAG,CAAC;SACrD,OAAO,CAAC,UAAU,EAAE,GAAG,CAAC;SACxB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC;SACrB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,QAAQ,EAAE,GAAG,CAAC;SACtB,OAAO,CAAC,SAAS,EAAE,GAAG,CAAC;SACvB,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;SACpB,IAAI,EAAE,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/** HTTP response validation utilities */
|
|
2
|
+
export interface HttpResponse {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
status: number;
|
|
5
|
+
statusText?: string;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Validate HTTP response and throw with formatted error message.
|
|
9
|
+
* Extracts method/URL context from error message if available.
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateHttpResponse(res: HttpResponse, context: string): void;
|
|
12
|
+
//# sourceMappingURL=http-validate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-validate.d.ts","sourceRoot":"","sources":["../../lib/http-validate.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAEzC,MAAM,WAAW,YAAY;IAC3B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,GAAG,EAAE,YAAY,EACjB,OAAO,EAAE,MAAM,GACd,IAAI,CAIN"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/** HTTP response validation utilities */
|
|
2
|
+
/**
|
|
3
|
+
* Validate HTTP response and throw with formatted error message.
|
|
4
|
+
* Extracts method/URL context from error message if available.
|
|
5
|
+
*/
|
|
6
|
+
export function validateHttpResponse(res, context) {
|
|
7
|
+
if (!res.ok) {
|
|
8
|
+
throw new Error(`${context} failed: ${res.status} ${res.statusText || 'error'}`);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=http-validate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-validate.js","sourceRoot":"","sources":["../../lib/http-validate.ts"],"names":[],"mappings":"AAAA,yCAAyC;AAQzC;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAClC,GAAiB,EACjB,OAAe;IAEf,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,GAAG,OAAO,YAAY,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,UAAU,IAAI,OAAO,EAAE,CAAC,CAAC;IACnF,CAAC;AACH,CAAC"}
|
package/dist/lib/id.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.d.ts","sourceRoot":"","sources":["../../lib/id.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjD"}
|
package/dist/lib/id.js
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"id.js","sourceRoot":"","sources":["../../lib/id.ts"],"names":[],"mappings":"AAAA,0EAA0E;AAC1E,MAAM,UAAU,UAAU,CAAC,MAAc;IACvC,OAAO,GAAG,MAAM,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;AAC7E,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Bus } from '../gateway/bus.js';
|
|
2
|
+
import type { Json } from '../gateway/events.js';
|
|
3
|
+
/** Called once by LogService.boot() to wire the global logger to the bus. */
|
|
4
|
+
export declare function setLoggerBus(bus: Bus): void;
|
|
5
|
+
export declare function ts(): string;
|
|
6
|
+
export declare function createLogger(service: string): {
|
|
7
|
+
debug: (msg: string, data?: Json) => void;
|
|
8
|
+
info: (msg: string, data?: Json) => void;
|
|
9
|
+
warn: (msg: string, data?: Json) => void;
|
|
10
|
+
error: (msg: string, data?: Json) => void;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,mBAAmB,CAAC;AAC7C,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAIjD,6EAA6E;AAC7E,wBAAgB,YAAY,CAAC,GAAG,EAAE,GAAG,GAAG,IAAI,CAE3C;AAED,wBAAgB,EAAE,IAAI,MAAM,CAK3B;AAED,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM;iBAU3B,MAAM,SAAS,IAAI;gBACnB,MAAM,SAAS,IAAI;gBACnB,MAAM,SAAS,IAAI;iBACnB,MAAM,SAAS,IAAI;EAEnC"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
let _bus = null;
|
|
2
|
+
/** Called once by LogService.boot() to wire the global logger to the bus. */
|
|
3
|
+
export function setLoggerBus(bus) {
|
|
4
|
+
_bus = bus;
|
|
5
|
+
}
|
|
6
|
+
export function ts() {
|
|
7
|
+
const d = new Date();
|
|
8
|
+
const pad = (n) => String(n).padStart(2, '0');
|
|
9
|
+
return `${d.getFullYear()}-${pad(d.getMonth() + 1)}-${pad(d.getDate())} ` +
|
|
10
|
+
`${pad(d.getHours())}:${pad(d.getMinutes())}:${pad(d.getSeconds())}.${Math.floor(d.getMilliseconds() / 100)}`;
|
|
11
|
+
}
|
|
12
|
+
export function createLogger(service) {
|
|
13
|
+
function write(level, message, data) {
|
|
14
|
+
if (_bus) {
|
|
15
|
+
_bus.emit('log.onLog', { level, service, message, ...(data !== undefined ? { data } : {}) });
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
console.error(`${ts()} [${service}] ${level.toUpperCase()} ${message}`, data ?? '');
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return {
|
|
22
|
+
debug: (msg, data) => write('debug', msg, data),
|
|
23
|
+
info: (msg, data) => write('info', msg, data),
|
|
24
|
+
warn: (msg, data) => write('warn', msg, data),
|
|
25
|
+
error: (msg, data) => write('error', msg, data),
|
|
26
|
+
};
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../../lib/logger.ts"],"names":[],"mappings":"AAGA,IAAI,IAAI,GAAe,IAAI,CAAC;AAE5B,6EAA6E;AAC7E,MAAM,UAAU,YAAY,CAAC,GAAQ;IACnC,IAAI,GAAG,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,EAAE;IAChB,MAAM,CAAC,GAAG,IAAI,IAAI,EAAE,CAAC;IACrB,MAAM,GAAG,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;IACtD,OAAO,GAAG,CAAC,CAAC,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,OAAO,EAAE,CAAC,GAAG;QAClE,GAAG,GAAG,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,eAAe,EAAE,GAAG,GAAG,CAAC,EAAE,CAAC;AACvH,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,OAAe;IAC1C,SAAS,KAAK,CAAC,KAA0C,EAAE,OAAe,EAAE,IAAW;QACrF,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,CAAC,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;QAC/F,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,KAAK,OAAO,KAAK,KAAK,CAAC,WAAW,EAAE,IAAI,OAAO,EAAE,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QACtF,CAAC;IACH,CAAC;IAED,OAAO;QACL,KAAK,EAAE,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAG,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAG,GAAG,EAAE,IAAI,CAAC;QAC9D,IAAI,EAAG,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,MAAM,EAAG,GAAG,EAAE,IAAI,CAAC;QAC9D,KAAK,EAAE,CAAC,GAAW,EAAE,IAAW,EAAE,EAAE,CAAC,KAAK,CAAC,OAAO,EAAE,GAAG,EAAE,IAAI,CAAC;KAC/D,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media utilities — constants and helpers for file operations
|
|
3
|
+
*
|
|
4
|
+
* Transcription is implemented in MediaService via the media.transcribeAudio bus event.
|
|
5
|
+
* Image vision APIs can be added to MediaService as needed.
|
|
6
|
+
*/
|
|
7
|
+
export declare const WHISPER_EXTS: Set<string>;
|
|
8
|
+
export declare const MIME_TO_AUDIO_EXT: Record<string, string>;
|
|
9
|
+
export declare const MIME_EXT: Record<string, string>;
|
|
10
|
+
export declare const MEDIA_TYPE_MIME_DEFAULTS: Record<string, string>;
|
|
11
|
+
export declare const EXT_TO_MIME: Record<string, string>;
|
|
12
|
+
export declare const IMAGE_MIMES: {
|
|
13
|
+
readonly 'image/jpeg': true;
|
|
14
|
+
readonly 'image/png': true;
|
|
15
|
+
readonly 'image/gif': true;
|
|
16
|
+
readonly 'image/webp': true;
|
|
17
|
+
readonly 'image/bmp': true;
|
|
18
|
+
readonly 'image/svg+xml': true;
|
|
19
|
+
};
|
|
20
|
+
export declare const AUDIO_MIMES: {
|
|
21
|
+
readonly 'audio/ogg': true;
|
|
22
|
+
readonly 'audio/mpeg': true;
|
|
23
|
+
readonly 'audio/mp4': true;
|
|
24
|
+
readonly 'audio/wav': true;
|
|
25
|
+
readonly 'audio/webm': true;
|
|
26
|
+
readonly 'audio/flac': true;
|
|
27
|
+
readonly 'audio/x-m4a': true;
|
|
28
|
+
readonly 'audio/mp3': true;
|
|
29
|
+
};
|
|
30
|
+
export declare const VIDEO_MIMES: {
|
|
31
|
+
readonly 'video/mp4': true;
|
|
32
|
+
};
|
|
33
|
+
export declare const DOCUMENT_MIMES: {
|
|
34
|
+
readonly 'text/plain': true;
|
|
35
|
+
readonly 'text/markdown': true;
|
|
36
|
+
readonly 'application/pdf': true;
|
|
37
|
+
readonly 'application/vnd.openxmlformats-officedocument.wordprocessingml.document': true;
|
|
38
|
+
readonly 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': true;
|
|
39
|
+
};
|
|
40
|
+
export type ImageMimeType = keyof typeof IMAGE_MIMES;
|
|
41
|
+
export type AudioMimeType = keyof typeof AUDIO_MIMES;
|
|
42
|
+
export type VideoMimeType = keyof typeof VIDEO_MIMES;
|
|
43
|
+
export type DocumentMimeType = keyof typeof DOCUMENT_MIMES;
|
|
44
|
+
/**
|
|
45
|
+
* Get file extension for MIME type
|
|
46
|
+
*/
|
|
47
|
+
export declare function extFromMime(mimeType: string): string;
|
|
48
|
+
/**
|
|
49
|
+
* Get MIME type from file extension
|
|
50
|
+
*/
|
|
51
|
+
export declare function getMimeTypeFromExt(ext: string): string;
|
|
52
|
+
/**
|
|
53
|
+
* Normalize API base URL by removing trailing /v1 (or /v1/)
|
|
54
|
+
* Supports both formats: 'https://api.openai.com' and 'https://api.openai.com/v1'
|
|
55
|
+
*/
|
|
56
|
+
export declare function normalizeApiBaseUrl(baseUrl?: string): string;
|
|
57
|
+
//# sourceMappingURL=media-transcribe.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-transcribe.d.ts","sourceRoot":"","sources":["../../lib/media-transcribe.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,eAAO,MAAM,YAAY,aAAgG,CAAC;AAG1H,eAAO,MAAM,iBAAiB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAIpD,CAAC;AAGF,eAAO,MAAM,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAY3C,CAAC;AAGF,eAAO,MAAM,wBAAwB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAK3D,CAAC;AAGF,eAAO,MAAM,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAS9C,CAAC;AAGF,eAAO,MAAM,WAAW;;;;;;;CAOd,CAAC;AAEX,eAAO,MAAM,WAAW;;;;;;;;;CASd,CAAC;AAEX,eAAO,MAAM,WAAW;;CAEd,CAAC;AAEX,eAAO,MAAM,cAAc;;;;;;CAMjB,CAAC;AAEX,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,aAAa,GAAG,MAAM,OAAO,WAAW,CAAC;AACrD,MAAM,MAAM,gBAAgB,GAAG,MAAM,OAAO,cAAc,CAAC;AAE3D;;GAEG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAEpD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAEtD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAK5D"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Media utilities — constants and helpers for file operations
|
|
3
|
+
*
|
|
4
|
+
* Transcription is implemented in MediaService via the media.transcribeAudio bus event.
|
|
5
|
+
* Image vision APIs can be added to MediaService as needed.
|
|
6
|
+
*/
|
|
7
|
+
// Supported audio extensions for Whisper API
|
|
8
|
+
export const WHISPER_EXTS = new Set(['.flac', '.m4a', '.mp3', '.mp4', '.mpeg', '.mpga', '.oga', '.ogg', '.wav', '.webm']);
|
|
9
|
+
// MIME type to audio extension mapping
|
|
10
|
+
export const MIME_TO_AUDIO_EXT = {
|
|
11
|
+
'audio/ogg': '.ogg', 'audio/mpeg': '.mp3', 'audio/mp4': '.m4a',
|
|
12
|
+
'audio/wav': '.wav', 'audio/webm': '.webm', 'audio/flac': '.flac',
|
|
13
|
+
'audio/x-m4a': '.m4a', 'audio/mp3': '.mp3',
|
|
14
|
+
};
|
|
15
|
+
// MIME type to file extension mapping (includes images and video)
|
|
16
|
+
export const MIME_EXT = {
|
|
17
|
+
'image/jpeg': '.jpg',
|
|
18
|
+
'image/png': '.png',
|
|
19
|
+
'image/gif': '.gif',
|
|
20
|
+
'image/webp': '.webp',
|
|
21
|
+
'image/bmp': '.bmp',
|
|
22
|
+
'image/svg+xml': '.svg',
|
|
23
|
+
'audio/ogg': '.ogg',
|
|
24
|
+
'audio/mpeg': '.mp3',
|
|
25
|
+
'audio/mp4': '.m4a',
|
|
26
|
+
'video/mp4': '.mp4',
|
|
27
|
+
'application/pdf': '.pdf',
|
|
28
|
+
};
|
|
29
|
+
// Media type to default MIME type mapping (for fallback when MIME is unknown)
|
|
30
|
+
export const MEDIA_TYPE_MIME_DEFAULTS = {
|
|
31
|
+
image: 'image/jpeg',
|
|
32
|
+
audio: 'audio/ogg',
|
|
33
|
+
video: 'video/mp4',
|
|
34
|
+
document: 'application/pdf',
|
|
35
|
+
};
|
|
36
|
+
// Extension to MIME type mapping (inverse of MIME_EXT, includes common variations)
|
|
37
|
+
export const EXT_TO_MIME = {
|
|
38
|
+
'.jpg': 'image/jpeg', '.jpeg': 'image/jpeg',
|
|
39
|
+
'.png': 'image/png', '.gif': 'image/gif', '.webp': 'image/webp',
|
|
40
|
+
'.mp4': 'video/mp4', '.mp3': 'audio/mpeg',
|
|
41
|
+
'.ogg': 'audio/ogg', '.m4a': 'audio/mp4',
|
|
42
|
+
'.pdf': 'application/pdf',
|
|
43
|
+
'.txt': 'text/plain', '.md': 'text/markdown',
|
|
44
|
+
'.docx': 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
45
|
+
'.xlsx': 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet',
|
|
46
|
+
};
|
|
47
|
+
// Typed MIME constants by media type
|
|
48
|
+
export const IMAGE_MIMES = {
|
|
49
|
+
'image/jpeg': true,
|
|
50
|
+
'image/png': true,
|
|
51
|
+
'image/gif': true,
|
|
52
|
+
'image/webp': true,
|
|
53
|
+
'image/bmp': true,
|
|
54
|
+
'image/svg+xml': true,
|
|
55
|
+
};
|
|
56
|
+
export const AUDIO_MIMES = {
|
|
57
|
+
'audio/ogg': true,
|
|
58
|
+
'audio/mpeg': true,
|
|
59
|
+
'audio/mp4': true,
|
|
60
|
+
'audio/wav': true,
|
|
61
|
+
'audio/webm': true,
|
|
62
|
+
'audio/flac': true,
|
|
63
|
+
'audio/x-m4a': true,
|
|
64
|
+
'audio/mp3': true,
|
|
65
|
+
};
|
|
66
|
+
export const VIDEO_MIMES = {
|
|
67
|
+
'video/mp4': true,
|
|
68
|
+
};
|
|
69
|
+
export const DOCUMENT_MIMES = {
|
|
70
|
+
'text/plain': true,
|
|
71
|
+
'text/markdown': true,
|
|
72
|
+
'application/pdf': true,
|
|
73
|
+
'application/vnd.openxmlformats-officedocument.wordprocessingml.document': true,
|
|
74
|
+
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet': true,
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Get file extension for MIME type
|
|
78
|
+
*/
|
|
79
|
+
export function extFromMime(mimeType) {
|
|
80
|
+
return MIME_EXT[mimeType] || '.bin';
|
|
81
|
+
}
|
|
82
|
+
/**
|
|
83
|
+
* Get MIME type from file extension
|
|
84
|
+
*/
|
|
85
|
+
export function getMimeTypeFromExt(ext) {
|
|
86
|
+
return EXT_TO_MIME[ext.toLowerCase()] || 'image/jpeg';
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Normalize API base URL by removing trailing /v1 (or /v1/)
|
|
90
|
+
* Supports both formats: 'https://api.openai.com' and 'https://api.openai.com/v1'
|
|
91
|
+
*/
|
|
92
|
+
export function normalizeApiBaseUrl(baseUrl) {
|
|
93
|
+
let url = baseUrl ?? 'https://api.openai.com';
|
|
94
|
+
// Remove trailing /v1 or /v1/ if present
|
|
95
|
+
url = url.replace(/\/v1\/?$/, '');
|
|
96
|
+
return url;
|
|
97
|
+
}
|
|
98
|
+
//# sourceMappingURL=media-transcribe.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-transcribe.js","sourceRoot":"","sources":["../../lib/media-transcribe.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.d.ts","sourceRoot":"","sources":["../../lib/media.ts"],"names":[],"mappings":"AAKA,wBAAsB,SAAS,CAAC,MAAM,EAAE;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;CAClB,GAAG,OAAO,CAAC,MAAM,CAAC,CAelB"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { mkdir, writeFile } from 'node:fs/promises';
|
|
3
|
+
import path from 'node:path';
|
|
4
|
+
import { extFromMime } from './media-transcribe.js';
|
|
5
|
+
export async function saveMedia(params) {
|
|
6
|
+
const dir = path.join(params.mediaDir, params.sessionKey.replace(/:/g, '-'));
|
|
7
|
+
await mkdir(dir, { recursive: true });
|
|
8
|
+
const now = new Date();
|
|
9
|
+
const date = now.toISOString().slice(0, 10);
|
|
10
|
+
const time = now.toISOString().slice(11, 19).replace(/:/g, '');
|
|
11
|
+
const hash = createHash('sha256').update(params.buffer).digest('hex').slice(0, 4);
|
|
12
|
+
const ext = extFromMime(params.mimeType);
|
|
13
|
+
const filename = `${date}_${time}_${hash}${ext}`;
|
|
14
|
+
const filepath = path.join(dir, filename);
|
|
15
|
+
await writeFile(filepath, params.buffer);
|
|
16
|
+
return filepath;
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=media.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media.js","sourceRoot":"","sources":["../../lib/media.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,KAAK,UAAU,SAAS,CAAC,MAK/B;IACC,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;IAC7E,MAAM,KAAK,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAEtC,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC;IACvB,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAC5C,MAAM,IAAI,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,WAAW,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAEzC,MAAM,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,IAAI,GAAG,GAAG,EAAE,CAAC;IACjD,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;IAE1C,MAAM,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC;IACzC,OAAO,QAAQ,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.d.ts","sourceRoot":"","sources":["../../lib/mime.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,wBAAsB,cAAc,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA2EpE"}
|
package/dist/lib/mime.js
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* MIME type detection from file buffer
|
|
3
|
+
* Simple implementation based on magic numbers
|
|
4
|
+
*/
|
|
5
|
+
export async function detectMimeType(buffer) {
|
|
6
|
+
// Check magic numbers
|
|
7
|
+
if (buffer.length < 4) {
|
|
8
|
+
return 'application/octet-stream';
|
|
9
|
+
}
|
|
10
|
+
const hex = buffer.toString('hex', 0, 4);
|
|
11
|
+
// PNG
|
|
12
|
+
if (hex.startsWith('89504e47')) {
|
|
13
|
+
return 'image/png';
|
|
14
|
+
}
|
|
15
|
+
// JPEG
|
|
16
|
+
if (hex.startsWith('ffd8ff')) {
|
|
17
|
+
return 'image/jpeg';
|
|
18
|
+
}
|
|
19
|
+
// GIF
|
|
20
|
+
if (hex.startsWith('47494638')) {
|
|
21
|
+
return 'image/gif';
|
|
22
|
+
}
|
|
23
|
+
// WebP
|
|
24
|
+
if (hex.startsWith('52494646') && buffer.length >= 12) {
|
|
25
|
+
const webpHex = buffer.toString('hex', 8, 12);
|
|
26
|
+
if (webpHex.startsWith('57454250')) {
|
|
27
|
+
return 'image/webp';
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
// BMP
|
|
31
|
+
if (hex.startsWith('424d')) {
|
|
32
|
+
return 'image/bmp';
|
|
33
|
+
}
|
|
34
|
+
// SVG (check content)
|
|
35
|
+
const contentStart = buffer.toString('utf-8', 0, Math.min(100, buffer.length));
|
|
36
|
+
if (contentStart.includes('<?xml') && contentStart.includes('<svg')) {
|
|
37
|
+
return 'image/svg+xml';
|
|
38
|
+
}
|
|
39
|
+
if (contentStart.includes('<svg')) {
|
|
40
|
+
return 'image/svg+xml';
|
|
41
|
+
}
|
|
42
|
+
// Text files
|
|
43
|
+
const textContent = buffer.toString('utf-8', 0, Math.min(100, buffer.length));
|
|
44
|
+
if (textContent.includes('<?xml')) {
|
|
45
|
+
return 'application/xml';
|
|
46
|
+
}
|
|
47
|
+
if (textContent.includes('<!DOCTYPE html') || textContent.includes('<html')) {
|
|
48
|
+
return 'text/html';
|
|
49
|
+
}
|
|
50
|
+
if (textContent.includes('{') || textContent.includes('[')) {
|
|
51
|
+
// Might be JSON
|
|
52
|
+
try {
|
|
53
|
+
JSON.parse(textContent.slice(0, textContent.indexOf('\n')) || textContent);
|
|
54
|
+
return 'application/json';
|
|
55
|
+
}
|
|
56
|
+
catch {
|
|
57
|
+
// Not valid JSON
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
// Check if mostly printable (text)
|
|
61
|
+
const printable = buffer.slice(0, Math.min(100, buffer.length)).toString('utf-8');
|
|
62
|
+
const nonPrintable = [...printable].filter(c => {
|
|
63
|
+
const code = c.charCodeAt(0);
|
|
64
|
+
return code < 32 && code !== 9 && code !== 10 && code !== 13;
|
|
65
|
+
}).length;
|
|
66
|
+
if (nonPrintable === 0) {
|
|
67
|
+
return 'text/plain';
|
|
68
|
+
}
|
|
69
|
+
return 'application/octet-stream';
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=mime.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mime.js","sourceRoot":"","sources":["../../lib/mime.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginate.d.ts","sourceRoot":"","sources":["../../lib/paginate.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAEvD,wBAAgB,QAAQ,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,GAAE,MAAU,EAAE,KAAK,GAAE,MAAW,GAAG,UAAU,CAAC,CAAC,CAAC,CAG3F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paginate.js","sourceRoot":"","sources":["../../lib/paginate.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,QAAQ,CAAI,KAAU,EAAE,OAAe,CAAC,EAAE,QAAgB,EAAE;IAC1E,MAAM,KAAK,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC,GAAG,KAAK,CAAC;IACjC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,GAAG,KAAK,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface DataPaths {
|
|
2
|
+
dataDir: string;
|
|
3
|
+
workspaceDir: string;
|
|
4
|
+
sessionsDir: string;
|
|
5
|
+
channelsDir: string;
|
|
6
|
+
cronDir: string;
|
|
7
|
+
logsDir: string;
|
|
8
|
+
cacheDir: string;
|
|
9
|
+
configFile: string;
|
|
10
|
+
}
|
|
11
|
+
/** Cached singleton — reads $VARGOS_DATA_DIR or ~/.vargos on first call. */
|
|
12
|
+
export declare function getDataPaths(): DataPaths;
|
|
13
|
+
export declare function resetDataPaths(): void;
|
|
14
|
+
//# sourceMappingURL=paths.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../lib/paths.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,YAAY,EAAE,MAAM,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;CACpB;AAID,4EAA4E;AAC5E,wBAAgB,YAAY,IAAI,SAAS,CAyBxC;AAED,wBAAgB,cAAc,IAAI,IAAI,CAAmB"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import path from 'node:path';
|
|
2
|
+
import os from 'node:os';
|
|
3
|
+
let _cache = null;
|
|
4
|
+
/** Cached singleton — reads $VARGOS_DATA_DIR or ~/.vargos on first call. */
|
|
5
|
+
export function getDataPaths() {
|
|
6
|
+
if (_cache)
|
|
7
|
+
return _cache;
|
|
8
|
+
const env = process.env.VARGOS_DATA_DIR?.trim();
|
|
9
|
+
const dataDir = env
|
|
10
|
+
? (env.startsWith('~') ? path.join(os.homedir(), env.slice(1)) : env)
|
|
11
|
+
: path.join(os.homedir(), '.vargos');
|
|
12
|
+
const xdg = process.env.XDG_CACHE_HOME?.trim();
|
|
13
|
+
const base = xdg
|
|
14
|
+
? (xdg.startsWith('~') ? path.join(os.homedir(), xdg.slice(1)) : xdg)
|
|
15
|
+
: path.join(os.homedir(), '.cache');
|
|
16
|
+
_cache = {
|
|
17
|
+
dataDir,
|
|
18
|
+
workspaceDir: path.join(dataDir, 'workspace'),
|
|
19
|
+
sessionsDir: path.join(dataDir, 'sessions'),
|
|
20
|
+
channelsDir: path.join(dataDir, 'channels'),
|
|
21
|
+
cronDir: path.join(dataDir, 'cron'),
|
|
22
|
+
logsDir: path.join(dataDir, 'logs'),
|
|
23
|
+
cacheDir: path.join(base, 'vargos'),
|
|
24
|
+
configFile: path.join(dataDir, 'config.json'),
|
|
25
|
+
};
|
|
26
|
+
return _cache;
|
|
27
|
+
}
|
|
28
|
+
export function resetDataPaths() { _cache = null; }
|
|
29
|
+
//# sourceMappingURL=paths.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"paths.js","sourceRoot":"","sources":["../../lib/paths.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,MAAM,SAAS,CAAC;AAazB,IAAI,MAAM,GAAqB,IAAI,CAAC;AAEpC,4EAA4E;AAC5E,MAAM,UAAU,YAAY;IAC1B,IAAI,MAAM;QAAE,OAAO,MAAM,CAAC;IAE1B,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,eAAe,EAAE,IAAI,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,GAAG;QACjB,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,CAAC,CAAC;IAEvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,cAAc,EAAE,IAAI,EAAE,CAAC;IAC/C,MAAM,IAAI,GAAG,GAAG;QACd,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;QACrE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,QAAQ,CAAC,CAAC;IAEtC,MAAM,GAAG;QACP,OAAO;QACP,YAAY,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,WAAW,CAAC;QAC7C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3C,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC;QAC3C,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACnC,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;QACnC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC;QACnC,UAAU,EAAE,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,aAAa,CAAC;KAC9C,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,cAAc,KAAW,MAAM,GAAG,IAAI,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic dynamic provider loader — reusable across services.
|
|
3
|
+
* Supports lazy-loaded providers with error handling and logging.
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* Loads and returns providers from a registry of lazy loaders.
|
|
7
|
+
* Logs warnings for failed providers, continues loading others.
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadProviders<T>(providerRegistry: Record<string, () => Promise<T>>): Promise<T[]>;
|
|
10
|
+
//# sourceMappingURL=provider-loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-loader.d.ts","sourceRoot":"","sources":["../../lib/provider-loader.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH;;;GAGG;AACH,wBAAsB,aAAa,CAAC,CAAC,EACnC,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,CAAC,GACjD,OAAO,CAAC,CAAC,EAAE,CAAC,CAWd"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generic dynamic provider loader — reusable across services.
|
|
3
|
+
* Supports lazy-loaded providers with error handling and logging.
|
|
4
|
+
*/
|
|
5
|
+
import { createLogger } from './logger.js';
|
|
6
|
+
const log = createLogger('provider-loader');
|
|
7
|
+
/**
|
|
8
|
+
* Loads and returns providers from a registry of lazy loaders.
|
|
9
|
+
* Logs warnings for failed providers, continues loading others.
|
|
10
|
+
*/
|
|
11
|
+
export async function loadProviders(providerRegistry) {
|
|
12
|
+
const loaded = [];
|
|
13
|
+
for (const [name, loader] of Object.entries(providerRegistry)) {
|
|
14
|
+
try {
|
|
15
|
+
const provider = await loader();
|
|
16
|
+
loaded.push(provider);
|
|
17
|
+
}
|
|
18
|
+
catch (err) {
|
|
19
|
+
log.warn(`failed to load provider "${name}": ${err instanceof Error ? err.message : String(err)}`);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return loaded;
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=provider-loader.js.map
|