@xopcai/xopcbot 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +132 -0
- package/README.zh-CN.md +130 -0
- package/dist/__tests__/core.test.d.ts +1 -0
- package/dist/__tests__/core.test.js +72 -0
- package/dist/__tests__/core.test.js.map +1 -0
- package/dist/agent/fallback/__tests__/index.test.d.ts +1 -0
- package/dist/agent/fallback/__tests__/index.test.js +111 -0
- package/dist/agent/fallback/__tests__/index.test.js.map +1 -0
- package/dist/agent/fallback/candidates.d.ts +23 -0
- package/dist/agent/fallback/candidates.js +62 -0
- package/dist/agent/fallback/candidates.js.map +1 -0
- package/dist/agent/fallback/error.d.ts +22 -0
- package/dist/agent/fallback/error.js +27 -0
- package/dist/agent/fallback/error.js.map +1 -0
- package/dist/agent/fallback/index.d.ts +6 -0
- package/dist/agent/fallback/index.js +5 -0
- package/dist/agent/fallback/index.js.map +1 -0
- package/dist/agent/fallback/reason.d.ts +7 -0
- package/dist/agent/fallback/reason.js +78 -0
- package/dist/agent/fallback/reason.js.map +1 -0
- package/dist/agent/fallback/runner.d.ts +22 -0
- package/dist/agent/fallback/runner.js +34 -0
- package/dist/agent/fallback/runner.js.map +1 -0
- package/dist/agent/helpers.d.ts +38 -0
- package/dist/agent/helpers.js +122 -0
- package/dist/agent/helpers.js.map +1 -0
- package/dist/agent/index.d.ts +7 -0
- package/dist/agent/index.js +7 -0
- package/dist/agent/index.js.map +1 -0
- package/dist/agent/memory/compaction.d.ts +63 -0
- package/dist/agent/memory/compaction.js +233 -0
- package/dist/agent/memory/compaction.js.map +1 -0
- package/dist/agent/memory/window.d.ts +29 -0
- package/dist/agent/memory/window.js +64 -0
- package/dist/agent/memory/window.js.map +1 -0
- package/dist/agent/model-manager.d.ts +80 -0
- package/dist/agent/model-manager.js +213 -0
- package/dist/agent/model-manager.js.map +1 -0
- package/dist/agent/prompt/heartbeat.d.ts +97 -0
- package/dist/agent/prompt/heartbeat.js +313 -0
- package/dist/agent/prompt/heartbeat.js.map +1 -0
- package/dist/agent/prompt/index.d.ts +65 -0
- package/dist/agent/prompt/index.js +215 -0
- package/dist/agent/prompt/index.js.map +1 -0
- package/dist/agent/prompt/memory/index.d.ts +37 -0
- package/dist/agent/prompt/memory/index.js +241 -0
- package/dist/agent/prompt/memory/index.js.map +1 -0
- package/dist/agent/prompt/modes.d.ts +44 -0
- package/dist/agent/prompt/modes.js +167 -0
- package/dist/agent/prompt/modes.js.map +1 -0
- package/dist/agent/prompt/safety.d.ts +88 -0
- package/dist/agent/prompt/safety.js +290 -0
- package/dist/agent/prompt/safety.js.map +1 -0
- package/dist/agent/service.d.ts +91 -0
- package/dist/agent/service.js +641 -0
- package/dist/agent/service.js.map +1 -0
- package/dist/agent/session-tracker.d.ts +73 -0
- package/dist/agent/session-tracker.js +137 -0
- package/dist/agent/session-tracker.js.map +1 -0
- package/dist/agent/skills/__tests__/test-framework.test.d.ts +4 -0
- package/dist/agent/skills/__tests__/test-framework.test.js +343 -0
- package/dist/agent/skills/__tests__/test-framework.test.js.map +1 -0
- package/dist/agent/skills/config.d.ts +58 -0
- package/dist/agent/skills/config.js +212 -0
- package/dist/agent/skills/config.js.map +1 -0
- package/dist/agent/skills/index.d.ts +25 -0
- package/dist/agent/skills/index.js +349 -0
- package/dist/agent/skills/index.js.map +1 -0
- package/dist/agent/skills/installer.d.ts +38 -0
- package/dist/agent/skills/installer.js +352 -0
- package/dist/agent/skills/installer.js.map +1 -0
- package/dist/agent/skills/scanner.d.ts +32 -0
- package/dist/agent/skills/scanner.js +265 -0
- package/dist/agent/skills/scanner.js.map +1 -0
- package/dist/agent/skills/test-framework.d.ts +107 -0
- package/dist/agent/skills/test-framework.js +607 -0
- package/dist/agent/skills/test-framework.js.map +1 -0
- package/dist/agent/skills/types.d.ts +181 -0
- package/dist/agent/skills/types.js +7 -0
- package/dist/agent/skills/types.js.map +1 -0
- package/dist/agent/skills/watcher.d.ts +37 -0
- package/dist/agent/skills/watcher.js +124 -0
- package/dist/agent/skills/watcher.js.map +1 -0
- package/dist/agent/tools/communication.d.ts +18 -0
- package/dist/agent/tools/communication.js +56 -0
- package/dist/agent/tools/communication.js.map +1 -0
- package/dist/agent/tools/edit-diff.d.ts +21 -0
- package/dist/agent/tools/edit-diff.js +69 -0
- package/dist/agent/tools/edit-diff.js.map +1 -0
- package/dist/agent/tools/edit.d.ts +13 -0
- package/dist/agent/tools/edit.js +65 -0
- package/dist/agent/tools/edit.js.map +1 -0
- package/dist/agent/tools/find.d.ts +24 -0
- package/dist/agent/tools/find.js +99 -0
- package/dist/agent/tools/find.js.map +1 -0
- package/dist/agent/tools/grep.d.ts +33 -0
- package/dist/agent/tools/grep.js +183 -0
- package/dist/agent/tools/grep.js.map +1 -0
- package/dist/agent/tools/index.d.ts +13 -0
- package/dist/agent/tools/index.js +18 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/list-dir.d.ts +6 -0
- package/dist/agent/tools/list-dir.js +37 -0
- package/dist/agent/tools/list-dir.js.map +1 -0
- package/dist/agent/tools/memory-tool.d.ts +14 -0
- package/dist/agent/tools/memory-tool.js +81 -0
- package/dist/agent/tools/memory-tool.js.map +1 -0
- package/dist/agent/tools/path-utils.d.ts +4 -0
- package/dist/agent/tools/path-utils.js +13 -0
- package/dist/agent/tools/path-utils.js.map +1 -0
- package/dist/agent/tools/read.d.ts +7 -0
- package/dist/agent/tools/read.js +47 -0
- package/dist/agent/tools/read.js.map +1 -0
- package/dist/agent/tools/send-media.d.ts +18 -0
- package/dist/agent/tools/send-media.js +104 -0
- package/dist/agent/tools/send-media.js.map +1 -0
- package/dist/agent/tools/shell.d.ts +13 -0
- package/dist/agent/tools/shell.js +114 -0
- package/dist/agent/tools/shell.js.map +1 -0
- package/dist/agent/tools/truncate.d.ts +36 -0
- package/dist/agent/tools/truncate.js +98 -0
- package/dist/agent/tools/truncate.js.map +1 -0
- package/dist/agent/tools/web.d.ts +14 -0
- package/dist/agent/tools/web.js +109 -0
- package/dist/agent/tools/web.js.map +1 -0
- package/dist/agent/tools/write.d.ts +7 -0
- package/dist/agent/tools/write.js +35 -0
- package/dist/agent/tools/write.js.map +1 -0
- package/dist/agent/types.d.ts +8 -0
- package/dist/agent/types.js +2 -0
- package/dist/agent/types.js.map +1 -0
- package/dist/agent/typing.d.ts +9 -0
- package/dist/agent/typing.js +32 -0
- package/dist/agent/typing.js.map +1 -0
- package/dist/auth/index.d.ts +12 -0
- package/dist/auth/index.js +14 -0
- package/dist/auth/index.js.map +1 -0
- package/dist/auth/oauth/anthropic.d.ts +7 -0
- package/dist/auth/oauth/anthropic.js +89 -0
- package/dist/auth/oauth/anthropic.js.map +1 -0
- package/dist/auth/oauth/github-copilot.d.ts +8 -0
- package/dist/auth/oauth/github-copilot.js +35 -0
- package/dist/auth/oauth/github-copilot.js.map +1 -0
- package/dist/auth/oauth/google-antigravity.d.ts +7 -0
- package/dist/auth/oauth/google-antigravity.js +27 -0
- package/dist/auth/oauth/google-antigravity.js.map +1 -0
- package/dist/auth/oauth/google-gemini-cli.d.ts +7 -0
- package/dist/auth/oauth/google-gemini-cli.js +28 -0
- package/dist/auth/oauth/google-gemini-cli.js.map +1 -0
- package/dist/auth/oauth/index.d.ts +14 -0
- package/dist/auth/oauth/index.js +15 -0
- package/dist/auth/oauth/index.js.map +1 -0
- package/dist/auth/oauth/kimi.d.ts +8 -0
- package/dist/auth/oauth/kimi.js +104 -0
- package/dist/auth/oauth/kimi.js.map +1 -0
- package/dist/auth/oauth/minimax.d.ts +8 -0
- package/dist/auth/oauth/minimax.js +109 -0
- package/dist/auth/oauth/minimax.js.map +1 -0
- package/dist/auth/oauth/openai-codex.d.ts +7 -0
- package/dist/auth/oauth/openai-codex.js +33 -0
- package/dist/auth/oauth/openai-codex.js.map +1 -0
- package/dist/auth/oauth/pkce.d.ts +8 -0
- package/dist/auth/oauth/pkce.js +22 -0
- package/dist/auth/oauth/pkce.js.map +1 -0
- package/dist/auth/oauth/qwen.d.ts +7 -0
- package/dist/auth/oauth/qwen.js +114 -0
- package/dist/auth/oauth/qwen.js.map +1 -0
- package/dist/auth/oauth/types.d.ts +46 -0
- package/dist/auth/oauth/types.js +7 -0
- package/dist/auth/oauth/types.js.map +1 -0
- package/dist/auth/profiles/index.d.ts +16 -0
- package/dist/auth/profiles/index.js +17 -0
- package/dist/auth/profiles/index.js.map +1 -0
- package/dist/auth/profiles/oauth.d.ts +12 -0
- package/dist/auth/profiles/oauth.js +106 -0
- package/dist/auth/profiles/oauth.js.map +1 -0
- package/dist/auth/profiles/order.d.ts +19 -0
- package/dist/auth/profiles/order.js +63 -0
- package/dist/auth/profiles/order.js.map +1 -0
- package/dist/auth/profiles/profiles.d.ts +27 -0
- package/dist/auth/profiles/profiles.js +110 -0
- package/dist/auth/profiles/profiles.js.map +1 -0
- package/dist/auth/profiles/store.d.ts +17 -0
- package/dist/auth/profiles/store.js +234 -0
- package/dist/auth/profiles/store.js.map +1 -0
- package/dist/auth/profiles/types.d.ts +64 -0
- package/dist/auth/profiles/types.js +7 -0
- package/dist/auth/profiles/types.js.map +1 -0
- package/dist/auth/profiles/usage.d.ts +24 -0
- package/dist/auth/profiles/usage.js +99 -0
- package/dist/auth/profiles/usage.js.map +1 -0
- package/dist/auth/storage.d.ts +99 -0
- package/dist/auth/storage.js +315 -0
- package/dist/auth/storage.js.map +1 -0
- package/dist/bus/index.d.ts +3 -0
- package/dist/bus/index.js +2 -0
- package/dist/bus/index.js.map +1 -0
- package/dist/bus/queue.d.ts +20 -0
- package/dist/bus/queue.js +57 -0
- package/dist/bus/queue.js.map +1 -0
- package/dist/channels/__tests__/access-control.test.d.ts +4 -0
- package/dist/channels/__tests__/access-control.test.js +310 -0
- package/dist/channels/__tests__/access-control.test.js.map +1 -0
- package/dist/channels/__tests__/draft-stream.test.d.ts +4 -0
- package/dist/channels/__tests__/draft-stream.test.js +243 -0
- package/dist/channels/__tests__/draft-stream.test.js.map +1 -0
- package/dist/channels/__tests__/format.test.d.ts +4 -0
- package/dist/channels/__tests__/format.test.js +146 -0
- package/dist/channels/__tests__/format.test.js.map +1 -0
- package/dist/channels/__tests__/manager.test.d.ts +6 -0
- package/dist/channels/__tests__/manager.test.js +34 -0
- package/dist/channels/__tests__/manager.test.js.map +1 -0
- package/dist/channels/__tests__/typing-controller.test.d.ts +4 -0
- package/dist/channels/__tests__/typing-controller.test.js +109 -0
- package/dist/channels/__tests__/typing-controller.test.js.map +1 -0
- package/dist/channels/__tests__/update-offset-store.test.d.ts +7 -0
- package/dist/channels/__tests__/update-offset-store.test.js +35 -0
- package/dist/channels/__tests__/update-offset-store.test.js.map +1 -0
- package/dist/channels/access-control.d.ts +93 -0
- package/dist/channels/access-control.js +201 -0
- package/dist/channels/access-control.js.map +1 -0
- package/dist/channels/draft-stream.d.ts +55 -0
- package/dist/channels/draft-stream.js +211 -0
- package/dist/channels/draft-stream.js.map +1 -0
- package/dist/channels/format.d.ts +38 -0
- package/dist/channels/format.js +187 -0
- package/dist/channels/format.js.map +1 -0
- package/dist/channels/index.d.ts +22 -0
- package/dist/channels/index.js +23 -0
- package/dist/channels/index.js.map +1 -0
- package/dist/channels/manager.d.ts +30 -0
- package/dist/channels/manager.js +125 -0
- package/dist/channels/manager.js.map +1 -0
- package/dist/channels/telegram/__tests__/index.test.d.ts +4 -0
- package/dist/channels/telegram/__tests__/index.test.js +153 -0
- package/dist/channels/telegram/__tests__/index.test.js.map +1 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.d.ts +4 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.js +99 -0
- package/dist/channels/telegram/__tests__/inline-keyboards.test.js.map +1 -0
- package/dist/channels/telegram/client.d.ts +48 -0
- package/dist/channels/telegram/client.js +177 -0
- package/dist/channels/telegram/client.js.map +1 -0
- package/dist/channels/telegram/command-handler.d.ts +28 -0
- package/dist/channels/telegram/command-handler.js +209 -0
- package/dist/channels/telegram/command-handler.js.map +1 -0
- package/dist/channels/telegram/index.d.ts +8 -0
- package/dist/channels/telegram/index.js +9 -0
- package/dist/channels/telegram/index.js.map +1 -0
- package/dist/channels/telegram/inline-keyboards.d.ts +20 -0
- package/dist/channels/telegram/inline-keyboards.js +38 -0
- package/dist/channels/telegram/inline-keyboards.js.map +1 -0
- package/dist/channels/telegram/plugin.d.ts +33 -0
- package/dist/channels/telegram/plugin.js +640 -0
- package/dist/channels/telegram/plugin.js.map +1 -0
- package/dist/channels/telegram/webhook.d.ts +31 -0
- package/dist/channels/telegram/webhook.js +129 -0
- package/dist/channels/telegram/webhook.js.map +1 -0
- package/dist/channels/types.d.ts +186 -0
- package/dist/channels/types.js +7 -0
- package/dist/channels/types.js.map +1 -0
- package/dist/channels/typing-controller.d.ts +47 -0
- package/dist/channels/typing-controller.js +117 -0
- package/dist/channels/typing-controller.js.map +1 -0
- package/dist/channels/update-offset-store.d.ts +37 -0
- package/dist/channels/update-offset-store.js +165 -0
- package/dist/channels/update-offset-store.js.map +1 -0
- package/dist/channels/whatsapp/index.d.ts +4 -0
- package/dist/channels/whatsapp/index.js +5 -0
- package/dist/channels/whatsapp/index.js.map +1 -0
- package/dist/channels/whatsapp/plugin.d.ts +27 -0
- package/dist/channels/whatsapp/plugin.js +66 -0
- package/dist/channels/whatsapp/plugin.js.map +1 -0
- package/dist/cli/__tests__/registry.test.d.ts +1 -0
- package/dist/cli/__tests__/registry.test.js +366 -0
- package/dist/cli/__tests__/registry.test.js.map +1 -0
- package/dist/cli/commands/agent.d.ts +1 -0
- package/dist/cli/commands/agent.js +216 -0
- package/dist/cli/commands/agent.js.map +1 -0
- package/dist/cli/commands/auth.d.ts +6 -0
- package/dist/cli/commands/auth.js +440 -0
- package/dist/cli/commands/auth.js.map +1 -0
- package/dist/cli/commands/config.d.ts +1 -0
- package/dist/cli/commands/config.js +135 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/configure.d.ts +1 -0
- package/dist/cli/commands/configure.js +173 -0
- package/dist/cli/commands/configure.js.map +1 -0
- package/dist/cli/commands/cron.d.ts +1 -0
- package/dist/cli/commands/cron.js +81 -0
- package/dist/cli/commands/cron.js.map +1 -0
- package/dist/cli/commands/gateway.d.ts +1 -0
- package/dist/cli/commands/gateway.js +91 -0
- package/dist/cli/commands/gateway.js.map +1 -0
- package/dist/cli/commands/index.d.ts +0 -0
- package/dist/cli/commands/index.js +2 -0
- package/dist/cli/commands/index.js.map +1 -0
- package/dist/cli/commands/models.d.ts +1 -0
- package/dist/cli/commands/models.js +79 -0
- package/dist/cli/commands/models.js.map +1 -0
- package/dist/cli/commands/onboard.d.ts +1 -0
- package/dist/cli/commands/onboard.js +621 -0
- package/dist/cli/commands/onboard.js.map +1 -0
- package/dist/cli/commands/plugin.d.ts +1 -0
- package/dist/cli/commands/plugin.js +341 -0
- package/dist/cli/commands/plugin.js.map +1 -0
- package/dist/cli/commands/session.d.ts +1 -0
- package/dist/cli/commands/session.js +450 -0
- package/dist/cli/commands/session.js.map +1 -0
- package/dist/cli/commands/skills-test.d.ts +9 -0
- package/dist/cli/commands/skills-test.js +195 -0
- package/dist/cli/commands/skills-test.js.map +1 -0
- package/dist/cli/commands/skills.d.ts +9 -0
- package/dist/cli/commands/skills.js +385 -0
- package/dist/cli/commands/skills.js.map +1 -0
- package/dist/cli/index.d.ts +19 -0
- package/dist/cli/index.js +40 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/registry.d.ts +43 -0
- package/dist/cli/registry.js +82 -0
- package/dist/cli/registry.js.map +1 -0
- package/dist/cli/templates.d.ts +19 -0
- package/dist/cli/templates.js +191 -0
- package/dist/cli/templates.js.map +1 -0
- package/dist/cli/utils/colors.d.ts +13 -0
- package/dist/cli/utils/colors.js +16 -0
- package/dist/cli/utils/colors.js.map +1 -0
- package/dist/config/__tests__/diff.test.d.ts +1 -0
- package/dist/config/__tests__/diff.test.js +192 -0
- package/dist/config/__tests__/diff.test.js.map +1 -0
- package/dist/config/__tests__/loader.test.d.ts +1 -0
- package/dist/config/__tests__/loader.test.js +356 -0
- package/dist/config/__tests__/loader.test.js.map +1 -0
- package/dist/config/__tests__/paths.test.d.ts +1 -0
- package/dist/config/__tests__/paths.test.js +192 -0
- package/dist/config/__tests__/paths.test.js.map +1 -0
- package/dist/config/__tests__/reload.test.d.ts +1 -0
- package/dist/config/__tests__/reload.test.js +374 -0
- package/dist/config/__tests__/reload.test.js.map +1 -0
- package/dist/config/__tests__/rules.test.d.ts +1 -0
- package/dist/config/__tests__/rules.test.js +204 -0
- package/dist/config/__tests__/rules.test.js.map +1 -0
- package/dist/config/__tests__/schema.test.d.ts +1 -0
- package/dist/config/__tests__/schema.test.js +672 -0
- package/dist/config/__tests__/schema.test.js.map +1 -0
- package/dist/config/diff.d.ts +7 -0
- package/dist/config/diff.js +46 -0
- package/dist/config/diff.js.map +1 -0
- package/dist/config/index.d.ts +6 -0
- package/dist/config/index.js +7 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +5 -0
- package/dist/config/loader.js +81 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/config/paths.d.ts +35 -0
- package/dist/config/paths.js +79 -0
- package/dist/config/paths.js.map +1 -0
- package/dist/config/reload.d.ts +78 -0
- package/dist/config/reload.js +190 -0
- package/dist/config/reload.js.map +1 -0
- package/dist/config/rules.d.ts +42 -0
- package/dist/config/rules.js +114 -0
- package/dist/config/rules.js.map +1 -0
- package/dist/config/schema.d.ts +1340 -0
- package/dist/config/schema.js +611 -0
- package/dist/config/schema.js.map +1 -0
- package/dist/cron/executor.d.ts +54 -0
- package/dist/cron/executor.js +364 -0
- package/dist/cron/executor.js.map +1 -0
- package/dist/cron/index.d.ts +5 -0
- package/dist/cron/index.js +6 -0
- package/dist/cron/index.js.map +1 -0
- package/dist/cron/persistence.d.ts +61 -0
- package/dist/cron/persistence.js +188 -0
- package/dist/cron/persistence.js.map +1 -0
- package/dist/cron/service.d.ts +94 -0
- package/dist/cron/service.js +382 -0
- package/dist/cron/service.js.map +1 -0
- package/dist/cron/types.d.ts +119 -0
- package/dist/cron/types.js +3 -0
- package/dist/cron/types.js.map +1 -0
- package/dist/cron/validation.d.ts +144 -0
- package/dist/cron/validation.js +113 -0
- package/dist/cron/validation.js.map +1 -0
- package/dist/errors/__tests__/index.test.d.ts +1 -0
- package/dist/errors/__tests__/index.test.js +301 -0
- package/dist/errors/__tests__/index.test.js.map +1 -0
- package/dist/errors/index.d.ts +114 -0
- package/dist/errors/index.js +278 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/gateway/hono/app.d.ts +7 -0
- package/dist/gateway/hono/app.js +668 -0
- package/dist/gateway/hono/app.js.map +1 -0
- package/dist/gateway/hono/index.d.ts +2 -0
- package/dist/gateway/hono/index.js +3 -0
- package/dist/gateway/hono/index.js.map +1 -0
- package/dist/gateway/hono/middleware/auth.d.ts +18 -0
- package/dist/gateway/hono/middleware/auth.js +79 -0
- package/dist/gateway/hono/middleware/auth.js.map +1 -0
- package/dist/gateway/hono/middleware/logger.d.ts +1 -0
- package/dist/gateway/hono/middleware/logger.js +17 -0
- package/dist/gateway/hono/middleware/logger.js.map +1 -0
- package/dist/gateway/hono/sse.d.ts +55 -0
- package/dist/gateway/hono/sse.js +224 -0
- package/dist/gateway/hono/sse.js.map +1 -0
- package/dist/gateway/index.d.ts +4 -0
- package/dist/gateway/index.js +5 -0
- package/dist/gateway/index.js.map +1 -0
- package/dist/gateway/protocol.d.ts +28 -0
- package/dist/gateway/protocol.js +14 -0
- package/dist/gateway/protocol.js.map +1 -0
- package/dist/gateway/server.d.ts +19 -0
- package/dist/gateway/server.js +64 -0
- package/dist/gateway/server.js.map +1 -0
- package/dist/gateway/service.d.ts +265 -0
- package/dist/gateway/service.js +621 -0
- package/dist/gateway/service.js.map +1 -0
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js +2105 -0
- package/dist/gateway/static/root/assets/main-CfIxL-cL.js.map +1 -0
- package/dist/gateway/static/root/assets/main-DndcTCgX.css +1 -0
- package/dist/gateway/static/root/index.html +116 -0
- package/dist/heartbeat/index.d.ts +1 -0
- package/dist/heartbeat/index.js +2 -0
- package/dist/heartbeat/index.js.map +1 -0
- package/dist/heartbeat/service.d.ts +19 -0
- package/dist/heartbeat/service.js +61 -0
- package/dist/heartbeat/service.js.map +1 -0
- package/dist/plugin-sdk/index.d.ts +21 -0
- package/dist/plugin-sdk/index.js +12 -0
- package/dist/plugin-sdk/index.js.map +1 -0
- package/dist/plugins/__tests__/api.test.d.ts +1 -0
- package/dist/plugins/__tests__/api.test.js +164 -0
- package/dist/plugins/__tests__/api.test.js.map +1 -0
- package/dist/plugins/__tests__/hooks.test.d.ts +1 -0
- package/dist/plugins/__tests__/hooks.test.js +159 -0
- package/dist/plugins/__tests__/hooks.test.js.map +1 -0
- package/dist/plugins/__tests__/loader.test.d.ts +1 -0
- package/dist/plugins/__tests__/loader.test.js +120 -0
- package/dist/plugins/__tests__/loader.test.js.map +1 -0
- package/dist/plugins/api.d.ts +41 -0
- package/dist/plugins/api.js +131 -0
- package/dist/plugins/api.js.map +1 -0
- package/dist/plugins/hooks.d.ts +153 -0
- package/dist/plugins/hooks.js +172 -0
- package/dist/plugins/hooks.js.map +1 -0
- package/dist/plugins/index.d.ts +11 -0
- package/dist/plugins/index.js +16 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/install.d.ts +59 -0
- package/dist/plugins/install.js +324 -0
- package/dist/plugins/install.js.map +1 -0
- package/dist/plugins/loader.d.ts +84 -0
- package/dist/plugins/loader.js +545 -0
- package/dist/plugins/loader.js.map +1 -0
- package/dist/plugins/types.d.ts +190 -0
- package/dist/plugins/types.js +7 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/providers/__tests__/registry.test.d.ts +1 -0
- package/dist/providers/__tests__/registry.test.js +110 -0
- package/dist/providers/__tests__/registry.test.js.map +1 -0
- package/dist/providers/api-strategies.d.ts +15 -0
- package/dist/providers/api-strategies.js +96 -0
- package/dist/providers/api-strategies.js.map +1 -0
- package/dist/providers/auto-discovery.d.ts +84 -0
- package/dist/providers/auto-discovery.js +236 -0
- package/dist/providers/auto-discovery.js.map +1 -0
- package/dist/providers/config.d.ts +25 -0
- package/dist/providers/config.js +42 -0
- package/dist/providers/config.js.map +1 -0
- package/dist/providers/index.d.ts +25 -0
- package/dist/providers/index.js +55 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/model-catalog.d.ts +205 -0
- package/dist/providers/model-catalog.js +1071 -0
- package/dist/providers/model-catalog.js.map +1 -0
- package/dist/providers/models-dev-data.d.ts +11 -0
- package/dist/providers/models-dev-data.js +1035 -0
- package/dist/providers/models-dev-data.js.map +1 -0
- package/dist/providers/models-dev.d.ts +30 -0
- package/dist/providers/models-dev.js +42 -0
- package/dist/providers/models-dev.js.map +1 -0
- package/dist/providers/pi-ai.d.ts +62 -0
- package/dist/providers/pi-ai.js +221 -0
- package/dist/providers/pi-ai.js.map +1 -0
- package/dist/providers/provider-catalog.d.ts +173 -0
- package/dist/providers/provider-catalog.js +834 -0
- package/dist/providers/provider-catalog.js.map +1 -0
- package/dist/providers/registry.d.ts +155 -0
- package/dist/providers/registry.js +524 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/providers/types.d.ts +95 -0
- package/dist/providers/types.js +7 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/session/chat-manager.d.ts +49 -0
- package/dist/session/chat-manager.js +167 -0
- package/dist/session/chat-manager.js.map +1 -0
- package/dist/session/chat-types.d.ts +53 -0
- package/dist/session/chat-types.js +63 -0
- package/dist/session/chat-types.js.map +1 -0
- package/dist/session/index.d.ts +5 -0
- package/dist/session/index.js +5 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/manager.d.ts +103 -0
- package/dist/session/manager.js +200 -0
- package/dist/session/manager.js.map +1 -0
- package/dist/session/store.d.ts +114 -0
- package/dist/session/store.js +687 -0
- package/dist/session/store.js.map +1 -0
- package/dist/session/types.d.ts +88 -0
- package/dist/session/types.js +10 -0
- package/dist/session/types.js.map +1 -0
- package/dist/types/index.d.ts +177 -0
- package/dist/types/index.js +4 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/providers.d.ts +67 -0
- package/dist/types/providers.js +7 -0
- package/dist/types/providers.js.map +1 -0
- package/dist/utils/frontmatter.d.ts +17 -0
- package/dist/utils/frontmatter.js +104 -0
- package/dist/utils/frontmatter.js.map +1 -0
- package/dist/utils/helpers.d.ts +5 -0
- package/dist/utils/helpers.js +36 -0
- package/dist/utils/helpers.js.map +1 -0
- package/dist/utils/index.d.ts +2 -0
- package/dist/utils/index.js +3 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/log-store.d.ts +78 -0
- package/dist/utils/log-store.js +432 -0
- package/dist/utils/log-store.js.map +1 -0
- package/dist/utils/logger.d.ts +127 -0
- package/dist/utils/logger.js +481 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/logger.types.d.ts +152 -0
- package/dist/utils/logger.types.js +30 -0
- package/dist/utils/logger.types.js.map +1 -0
- package/package.json +93 -0
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Store - Enhanced File-based Log Storage
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Query logs across multiple files with filtering
|
|
6
|
+
* - Support for compressed (.gz) log files
|
|
7
|
+
* - Pagination and sorting
|
|
8
|
+
* - Statistics and analytics
|
|
9
|
+
* - Safe log cleanup with actual deletion
|
|
10
|
+
*/
|
|
11
|
+
import type { LogLevel, LogFileMeta, LogQuery, LogStats, LogEntry } from './logger.types.js';
|
|
12
|
+
declare const LOG_DIR: string;
|
|
13
|
+
/**
|
|
14
|
+
* Get all log files (including compressed)
|
|
15
|
+
*/
|
|
16
|
+
export declare function getLogFiles(): LogFileMeta[];
|
|
17
|
+
/**
|
|
18
|
+
* Get log file path for a specific date and type
|
|
19
|
+
*/
|
|
20
|
+
export declare function getLogPath(date?: Date, type?: 'app' | 'error' | 'audit' | 'access'): string;
|
|
21
|
+
/**
|
|
22
|
+
* Get available log files for a date range
|
|
23
|
+
*/
|
|
24
|
+
export declare function getLogFilesForRange(from: Date, to: Date): LogFileMeta[];
|
|
25
|
+
/**
|
|
26
|
+
* Query logs across multiple files
|
|
27
|
+
*/
|
|
28
|
+
export declare function queryLogs(query?: LogQuery): Promise<LogEntry[]>;
|
|
29
|
+
/**
|
|
30
|
+
* Get recent logs (convenience method)
|
|
31
|
+
*/
|
|
32
|
+
export declare function getRecentLogs(options?: {
|
|
33
|
+
level?: LogLevel;
|
|
34
|
+
limit?: number;
|
|
35
|
+
module?: string;
|
|
36
|
+
}): Promise<LogEntry[]>;
|
|
37
|
+
/**
|
|
38
|
+
* Search logs by keyword
|
|
39
|
+
*/
|
|
40
|
+
export declare function searchLogs(keyword: string, options?: {
|
|
41
|
+
from?: string;
|
|
42
|
+
to?: string;
|
|
43
|
+
limit?: number;
|
|
44
|
+
}): Promise<LogEntry[]>;
|
|
45
|
+
/**
|
|
46
|
+
* Get logs for a specific request/session
|
|
47
|
+
*/
|
|
48
|
+
export declare function getLogsByContext(contextType: 'requestId' | 'sessionId', contextValue: string, limit?: number): Promise<LogEntry[]>;
|
|
49
|
+
/**
|
|
50
|
+
* Get available log levels from actual log data
|
|
51
|
+
*/
|
|
52
|
+
export declare function getLogLevels(): Promise<LogLevel[]>;
|
|
53
|
+
/**
|
|
54
|
+
* Get available modules from log data
|
|
55
|
+
*/
|
|
56
|
+
export declare function getLogModules(): Promise<string[]>;
|
|
57
|
+
/**
|
|
58
|
+
* Get log statistics by level (sampled from recent files)
|
|
59
|
+
*/
|
|
60
|
+
export declare function getLogStats(): Promise<LogStats>;
|
|
61
|
+
/**
|
|
62
|
+
* Clean old logs (actually deletes files)
|
|
63
|
+
*/
|
|
64
|
+
export declare function cleanOldLogs(keepDays?: number): {
|
|
65
|
+
deleted: number;
|
|
66
|
+
freedBytes: number;
|
|
67
|
+
errors: string[];
|
|
68
|
+
};
|
|
69
|
+
/**
|
|
70
|
+
* Clean logs by size (keep total under limit)
|
|
71
|
+
*/
|
|
72
|
+
export declare function cleanBySize(maxTotalMB?: number): {
|
|
73
|
+
deleted: number;
|
|
74
|
+
freedBytes: number;
|
|
75
|
+
errors: string[];
|
|
76
|
+
};
|
|
77
|
+
export { LOG_DIR };
|
|
78
|
+
export type { LogEntry, LogQuery, LogFileMeta, LogStats } from './logger.types.js';
|
|
@@ -0,0 +1,432 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Log Store - Enhanced File-based Log Storage
|
|
3
|
+
*
|
|
4
|
+
* Features:
|
|
5
|
+
* - Query logs across multiple files with filtering
|
|
6
|
+
* - Support for compressed (.gz) log files
|
|
7
|
+
* - Pagination and sorting
|
|
8
|
+
* - Statistics and analytics
|
|
9
|
+
* - Safe log cleanup with actual deletion
|
|
10
|
+
*/
|
|
11
|
+
import { existsSync, mkdirSync, readdirSync, statSync, createReadStream, unlinkSync, } from 'fs';
|
|
12
|
+
import { readFile } from 'fs/promises';
|
|
13
|
+
import { join, basename } from 'path';
|
|
14
|
+
import { createInterface } from 'readline';
|
|
15
|
+
import { gunzip } from 'zlib';
|
|
16
|
+
import { promisify } from 'util';
|
|
17
|
+
import { Readable } from 'stream';
|
|
18
|
+
const gunzipAsync = promisify(gunzip);
|
|
19
|
+
// ============================================
|
|
20
|
+
// Configuration
|
|
21
|
+
// ============================================
|
|
22
|
+
const LOG_DIR = process.env.XOPCBOT_LOG_DIR || join(process.env.HOME || '.', '.xopcbot', 'logs');
|
|
23
|
+
function ensureLogDir() {
|
|
24
|
+
if (!existsSync(LOG_DIR)) {
|
|
25
|
+
mkdirSync(LOG_DIR, { recursive: true });
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
// ============================================
|
|
29
|
+
// File Management
|
|
30
|
+
// ============================================
|
|
31
|
+
/**
|
|
32
|
+
* Get all log files (including compressed)
|
|
33
|
+
*/
|
|
34
|
+
export function getLogFiles() {
|
|
35
|
+
ensureLogDir();
|
|
36
|
+
const files = readdirSync(LOG_DIR)
|
|
37
|
+
.filter(f => f.endsWith('.log') || f.endsWith('.log.gz'))
|
|
38
|
+
.map(f => {
|
|
39
|
+
const filePath = join(LOG_DIR, f);
|
|
40
|
+
const stats = statSync(filePath);
|
|
41
|
+
let type = 'app';
|
|
42
|
+
if (f.includes('error'))
|
|
43
|
+
type = 'error';
|
|
44
|
+
else if (f.includes('audit'))
|
|
45
|
+
type = 'audit';
|
|
46
|
+
else if (f.includes('access'))
|
|
47
|
+
type = 'access';
|
|
48
|
+
return {
|
|
49
|
+
name: f,
|
|
50
|
+
path: filePath,
|
|
51
|
+
size: stats.size,
|
|
52
|
+
created: stats.birthtime.toISOString(),
|
|
53
|
+
modified: stats.mtime.toISOString(),
|
|
54
|
+
type,
|
|
55
|
+
};
|
|
56
|
+
})
|
|
57
|
+
.sort((a, b) => new Date(b.modified).getTime() - new Date(a.modified).getTime());
|
|
58
|
+
return files;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Get log file path for a specific date and type
|
|
62
|
+
*/
|
|
63
|
+
export function getLogPath(date = new Date(), type = 'app') {
|
|
64
|
+
ensureLogDir();
|
|
65
|
+
const dateStr = date.toISOString().split('T')[0];
|
|
66
|
+
return join(LOG_DIR, `${type}-${dateStr}.log`);
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Get available log files for a date range
|
|
70
|
+
*/
|
|
71
|
+
export function getLogFilesForRange(from, to) {
|
|
72
|
+
const allFiles = getLogFiles();
|
|
73
|
+
return allFiles.filter(f => {
|
|
74
|
+
// Extract date from filename (e.g., app-2024-01-01.log)
|
|
75
|
+
const match = f.name.match(/(\d{4}-\d{2}-\d{2})/);
|
|
76
|
+
if (!match)
|
|
77
|
+
return false;
|
|
78
|
+
const fileDate = new Date(match[1]);
|
|
79
|
+
return fileDate >= from && fileDate <= to;
|
|
80
|
+
});
|
|
81
|
+
}
|
|
82
|
+
// ============================================
|
|
83
|
+
// Log Parsing
|
|
84
|
+
// ============================================
|
|
85
|
+
/**
|
|
86
|
+
* Parse a single log line (JSON format from pino)
|
|
87
|
+
*/
|
|
88
|
+
function parseLogLine(line, source, lineNumber) {
|
|
89
|
+
const trimmed = line.trim();
|
|
90
|
+
if (!trimmed)
|
|
91
|
+
return null;
|
|
92
|
+
try {
|
|
93
|
+
// Try JSON format (pino default)
|
|
94
|
+
const parsed = JSON.parse(trimmed);
|
|
95
|
+
// Convert pino numeric level to string (10=trace, 20=debug, 30=info, 40=warn, 50=error, 60=fatal)
|
|
96
|
+
const levelNum = typeof parsed.level === 'number' ? parsed.level : 30;
|
|
97
|
+
const levelMap = {
|
|
98
|
+
10: 'trace',
|
|
99
|
+
20: 'debug',
|
|
100
|
+
30: 'info',
|
|
101
|
+
40: 'warn',
|
|
102
|
+
50: 'error',
|
|
103
|
+
60: 'fatal',
|
|
104
|
+
};
|
|
105
|
+
return {
|
|
106
|
+
timestamp: parsed.time || parsed.timestamp || '',
|
|
107
|
+
level: levelMap[levelNum] || (parsed.level?.toString() || 'info').toLowerCase(),
|
|
108
|
+
message: parsed.msg || parsed.message || '',
|
|
109
|
+
module: parsed.module,
|
|
110
|
+
prefix: parsed.prefix,
|
|
111
|
+
service: parsed.service,
|
|
112
|
+
plugin: parsed.plugin,
|
|
113
|
+
requestId: parsed.requestId,
|
|
114
|
+
sessionId: parsed.sessionId,
|
|
115
|
+
_source: source,
|
|
116
|
+
_lineNumber: lineNumber,
|
|
117
|
+
...parsed,
|
|
118
|
+
};
|
|
119
|
+
}
|
|
120
|
+
catch {
|
|
121
|
+
// Fallback: try to parse pino's text format
|
|
122
|
+
const match = trimmed.match(/^\[([^\]]+)\]\s+(\w+):\s+(.+)$/);
|
|
123
|
+
if (match) {
|
|
124
|
+
return {
|
|
125
|
+
timestamp: match[1],
|
|
126
|
+
level: match[2].toLowerCase(),
|
|
127
|
+
message: match[3],
|
|
128
|
+
_source: source,
|
|
129
|
+
_lineNumber: lineNumber,
|
|
130
|
+
};
|
|
131
|
+
}
|
|
132
|
+
// Plain text fallback
|
|
133
|
+
return {
|
|
134
|
+
timestamp: new Date().toISOString(),
|
|
135
|
+
level: 'info',
|
|
136
|
+
message: trimmed,
|
|
137
|
+
_source: source,
|
|
138
|
+
_lineNumber: lineNumber,
|
|
139
|
+
};
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
// ============================================
|
|
143
|
+
// Streaming
|
|
144
|
+
// ============================================
|
|
145
|
+
/**
|
|
146
|
+
* Create a readable stream for a log file (handles .gz files)
|
|
147
|
+
*/
|
|
148
|
+
async function createLogFileStream(filePath) {
|
|
149
|
+
if (filePath.endsWith('.gz')) {
|
|
150
|
+
const compressed = await readFile(filePath);
|
|
151
|
+
const decompressed = await gunzipAsync(compressed);
|
|
152
|
+
return Readable.from(decompressed.toString('utf-8').split('\n'));
|
|
153
|
+
}
|
|
154
|
+
return createReadStream(filePath, { encoding: 'utf-8' });
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Stream and filter log entries from a file
|
|
158
|
+
*/
|
|
159
|
+
async function* streamLogFile(filePath, query = {}) {
|
|
160
|
+
if (!existsSync(filePath))
|
|
161
|
+
return;
|
|
162
|
+
const fileName = basename(filePath);
|
|
163
|
+
let stream;
|
|
164
|
+
try {
|
|
165
|
+
stream = await createLogFileStream(filePath);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
return;
|
|
169
|
+
}
|
|
170
|
+
const rl = createInterface({
|
|
171
|
+
input: stream,
|
|
172
|
+
crlfDelay: Infinity
|
|
173
|
+
});
|
|
174
|
+
let lineNumber = 0;
|
|
175
|
+
try {
|
|
176
|
+
for await (const line of rl) {
|
|
177
|
+
lineNumber++;
|
|
178
|
+
const entry = parseLogLine(line, fileName, lineNumber);
|
|
179
|
+
if (!entry)
|
|
180
|
+
continue;
|
|
181
|
+
// Apply filters
|
|
182
|
+
if (!matchesQuery(entry, query))
|
|
183
|
+
continue;
|
|
184
|
+
yield entry;
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
finally {
|
|
188
|
+
rl.close();
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
/**
|
|
192
|
+
* Check if a log entry matches the query filters
|
|
193
|
+
*/
|
|
194
|
+
function matchesQuery(entry, query) {
|
|
195
|
+
// Filter by levels
|
|
196
|
+
if (query.levels?.length && !query.levels.includes(entry.level)) {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
// Filter by time range
|
|
200
|
+
if (query.from) {
|
|
201
|
+
const fromDate = new Date(query.from);
|
|
202
|
+
const entryDate = new Date(entry.timestamp);
|
|
203
|
+
if (entryDate < fromDate)
|
|
204
|
+
return false;
|
|
205
|
+
}
|
|
206
|
+
if (query.to) {
|
|
207
|
+
const toDate = new Date(query.to);
|
|
208
|
+
const entryDate = new Date(entry.timestamp);
|
|
209
|
+
if (entryDate > toDate)
|
|
210
|
+
return false;
|
|
211
|
+
}
|
|
212
|
+
// Filter by keyword (search in message and context fields)
|
|
213
|
+
if (query.q) {
|
|
214
|
+
const keyword = query.q.toLowerCase();
|
|
215
|
+
const searchable = [
|
|
216
|
+
entry.message,
|
|
217
|
+
entry.module,
|
|
218
|
+
entry.prefix,
|
|
219
|
+
entry.service,
|
|
220
|
+
entry.plugin,
|
|
221
|
+
entry.requestId,
|
|
222
|
+
entry.sessionId,
|
|
223
|
+
]
|
|
224
|
+
.filter(Boolean)
|
|
225
|
+
.map(String)
|
|
226
|
+
.join(' ')
|
|
227
|
+
.toLowerCase();
|
|
228
|
+
if (!searchable.includes(keyword))
|
|
229
|
+
return false;
|
|
230
|
+
}
|
|
231
|
+
// Filter by specific fields
|
|
232
|
+
if (query.module && entry.module !== query.module)
|
|
233
|
+
return false;
|
|
234
|
+
if (query.plugin && entry.plugin !== query.plugin)
|
|
235
|
+
return false;
|
|
236
|
+
if (query.service && entry.service !== query.service)
|
|
237
|
+
return false;
|
|
238
|
+
if (query.requestId && entry.requestId !== query.requestId)
|
|
239
|
+
return false;
|
|
240
|
+
if (query.sessionId && entry.sessionId !== query.sessionId)
|
|
241
|
+
return false;
|
|
242
|
+
return true;
|
|
243
|
+
}
|
|
244
|
+
// ============================================
|
|
245
|
+
// Query API
|
|
246
|
+
// ============================================
|
|
247
|
+
/**
|
|
248
|
+
* Query logs across multiple files
|
|
249
|
+
*/
|
|
250
|
+
export async function queryLogs(query = {}) {
|
|
251
|
+
ensureLogDir();
|
|
252
|
+
const results = [];
|
|
253
|
+
const files = getLogFiles();
|
|
254
|
+
// Filter files by date range if specified
|
|
255
|
+
let relevantFiles = files;
|
|
256
|
+
if (query.from || query.to) {
|
|
257
|
+
const fromDate = query.from ? new Date(query.from) : new Date(0);
|
|
258
|
+
const toDate = query.to ? new Date(query.to) : new Date();
|
|
259
|
+
relevantFiles = getLogFilesForRange(fromDate, toDate);
|
|
260
|
+
}
|
|
261
|
+
// Query each file
|
|
262
|
+
for (const file of relevantFiles) {
|
|
263
|
+
for await (const entry of streamLogFile(file.path, query)) {
|
|
264
|
+
results.push(entry);
|
|
265
|
+
// Early exit if limit reached
|
|
266
|
+
const limit = query.limit || 100;
|
|
267
|
+
if (results.length >= limit) {
|
|
268
|
+
break;
|
|
269
|
+
}
|
|
270
|
+
}
|
|
271
|
+
if (query.limit && results.length >= query.limit) {
|
|
272
|
+
break;
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
// Sort by timestamp
|
|
276
|
+
const order = query.order || 'desc';
|
|
277
|
+
results.sort((a, b) => {
|
|
278
|
+
const diff = new Date(b.timestamp).getTime() - new Date(a.timestamp).getTime();
|
|
279
|
+
return order === 'desc' ? diff : -diff;
|
|
280
|
+
});
|
|
281
|
+
// Apply offset/limit
|
|
282
|
+
const offset = query.offset || 0;
|
|
283
|
+
const limit = query.limit || 100;
|
|
284
|
+
return results.slice(offset, offset + limit).map(({ _source, _lineNumber, ...rest }) => rest);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get recent logs (convenience method)
|
|
288
|
+
*/
|
|
289
|
+
export async function getRecentLogs(options) {
|
|
290
|
+
return queryLogs({
|
|
291
|
+
levels: options?.level ? [options.level] : undefined,
|
|
292
|
+
limit: options?.limit || 50,
|
|
293
|
+
module: options?.module,
|
|
294
|
+
order: 'desc',
|
|
295
|
+
});
|
|
296
|
+
}
|
|
297
|
+
/**
|
|
298
|
+
* Search logs by keyword
|
|
299
|
+
*/
|
|
300
|
+
export async function searchLogs(keyword, options) {
|
|
301
|
+
return queryLogs({
|
|
302
|
+
q: keyword,
|
|
303
|
+
...options,
|
|
304
|
+
limit: options?.limit || 100,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Get logs for a specific request/session
|
|
309
|
+
*/
|
|
310
|
+
export async function getLogsByContext(contextType, contextValue, limit = 100) {
|
|
311
|
+
return queryLogs({
|
|
312
|
+
[contextType]: contextValue,
|
|
313
|
+
limit,
|
|
314
|
+
order: 'asc',
|
|
315
|
+
});
|
|
316
|
+
}
|
|
317
|
+
// ============================================
|
|
318
|
+
// Statistics
|
|
319
|
+
// ============================================
|
|
320
|
+
/**
|
|
321
|
+
* Get available log levels from actual log data
|
|
322
|
+
*/
|
|
323
|
+
export async function getLogLevels() {
|
|
324
|
+
const levels = new Set();
|
|
325
|
+
const files = getLogFiles().slice(0, 3); // Check last 3 files
|
|
326
|
+
for (const file of files) {
|
|
327
|
+
for await (const entry of streamLogFile(file.path, { limit: 500 })) {
|
|
328
|
+
levels.add(entry.level);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
return Array.from(levels).sort();
|
|
332
|
+
}
|
|
333
|
+
/**
|
|
334
|
+
* Get available modules from log data
|
|
335
|
+
*/
|
|
336
|
+
export async function getLogModules() {
|
|
337
|
+
const modules = new Set();
|
|
338
|
+
const files = getLogFiles().slice(0, 7);
|
|
339
|
+
for (const file of files) {
|
|
340
|
+
for await (const entry of streamLogFile(file.path, { limit: 1000 })) {
|
|
341
|
+
if (entry.module)
|
|
342
|
+
modules.add(entry.module);
|
|
343
|
+
if (entry.prefix)
|
|
344
|
+
modules.add(entry.prefix);
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
return Array.from(modules).filter(Boolean).sort();
|
|
348
|
+
}
|
|
349
|
+
/**
|
|
350
|
+
* Get log statistics by level (sampled from recent files)
|
|
351
|
+
*/
|
|
352
|
+
export async function getLogStats() {
|
|
353
|
+
const files = getLogFiles();
|
|
354
|
+
// Count by level (sample from recent files)
|
|
355
|
+
const byLevel = {
|
|
356
|
+
trace: 0,
|
|
357
|
+
debug: 0,
|
|
358
|
+
info: 0,
|
|
359
|
+
warn: 0,
|
|
360
|
+
error: 0,
|
|
361
|
+
fatal: 0,
|
|
362
|
+
silent: 0,
|
|
363
|
+
};
|
|
364
|
+
for (const file of files.slice(0, 7)) {
|
|
365
|
+
for await (const entry of streamLogFile(file.path, { limit: 1000 })) {
|
|
366
|
+
if (entry.level in byLevel) {
|
|
367
|
+
byLevel[entry.level]++;
|
|
368
|
+
}
|
|
369
|
+
}
|
|
370
|
+
}
|
|
371
|
+
return { byLevel };
|
|
372
|
+
}
|
|
373
|
+
// ============================================
|
|
374
|
+
// Cleanup
|
|
375
|
+
// ============================================
|
|
376
|
+
/**
|
|
377
|
+
* Clean old logs (actually deletes files)
|
|
378
|
+
*/
|
|
379
|
+
export function cleanOldLogs(keepDays = 7) {
|
|
380
|
+
const cutoff = new Date();
|
|
381
|
+
cutoff.setDate(cutoff.getDate() - keepDays);
|
|
382
|
+
let deleted = 0;
|
|
383
|
+
let freedBytes = 0;
|
|
384
|
+
const errors = [];
|
|
385
|
+
const files = getLogFiles();
|
|
386
|
+
for (const file of files) {
|
|
387
|
+
const fileDate = new Date(file.modified);
|
|
388
|
+
if (fileDate < cutoff) {
|
|
389
|
+
try {
|
|
390
|
+
const size = file.size;
|
|
391
|
+
unlinkSync(file.path);
|
|
392
|
+
deleted++;
|
|
393
|
+
freedBytes += size;
|
|
394
|
+
}
|
|
395
|
+
catch (err) {
|
|
396
|
+
errors.push(`Failed to delete ${file.name}: ${err}`);
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
}
|
|
400
|
+
return { deleted, freedBytes, errors };
|
|
401
|
+
}
|
|
402
|
+
/**
|
|
403
|
+
* Clean logs by size (keep total under limit)
|
|
404
|
+
*/
|
|
405
|
+
export function cleanBySize(maxTotalMB = 500) {
|
|
406
|
+
const maxBytes = maxTotalMB * 1024 * 1024;
|
|
407
|
+
const files = getLogFiles();
|
|
408
|
+
let totalSize = files.reduce((sum, f) => sum + f.size, 0);
|
|
409
|
+
let deleted = 0;
|
|
410
|
+
let freedBytes = 0;
|
|
411
|
+
const errors = [];
|
|
412
|
+
// Delete oldest files until under limit
|
|
413
|
+
for (const file of files.slice().reverse()) {
|
|
414
|
+
if (totalSize <= maxBytes)
|
|
415
|
+
break;
|
|
416
|
+
try {
|
|
417
|
+
unlinkSync(file.path);
|
|
418
|
+
freedBytes += file.size;
|
|
419
|
+
totalSize -= file.size;
|
|
420
|
+
deleted++;
|
|
421
|
+
}
|
|
422
|
+
catch (err) {
|
|
423
|
+
errors.push(`Failed to delete ${file.name}: ${err}`);
|
|
424
|
+
}
|
|
425
|
+
}
|
|
426
|
+
return { deleted, freedBytes, errors };
|
|
427
|
+
}
|
|
428
|
+
// ============================================
|
|
429
|
+
// Exports
|
|
430
|
+
// ============================================
|
|
431
|
+
export { LOG_DIR };
|
|
432
|
+
//# sourceMappingURL=log-store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"log-store.js","sourceRoot":"","sources":["../../src/utils/log-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,127 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Logger Module - Optimized Version
|
|
3
|
+
*
|
|
4
|
+
* Centralized logging system using pino with enhanced features:
|
|
5
|
+
* - Contextual logging with requestId/sessionId tracking
|
|
6
|
+
* - Log rotation with automatic cleanup
|
|
7
|
+
* - Sampling for high-frequency debug logs
|
|
8
|
+
* - Async logging with proper flush on shutdown
|
|
9
|
+
* - Unified configuration via XOPCBOT_* environment variables
|
|
10
|
+
*
|
|
11
|
+
* Log Levels (in order of severity):
|
|
12
|
+
* - trace: Most detailed, for development debugging only
|
|
13
|
+
* - debug: Detailed info for troubleshooting (supports sampling)
|
|
14
|
+
* - info: General operational events (startup, shutdown, major state changes)
|
|
15
|
+
* - warn: Unexpected but non-fatal issues
|
|
16
|
+
* - error: Errors that affect functionality
|
|
17
|
+
* - fatal: Critical errors that prevent operation
|
|
18
|
+
*/
|
|
19
|
+
import pino from 'pino';
|
|
20
|
+
import type { LogLevel, LogContext, ContextualLogger, LoggerConfig, RotationResult } from './logger.types.js';
|
|
21
|
+
export declare const logger: ContextualLogger;
|
|
22
|
+
export { pino as Pino };
|
|
23
|
+
/**
|
|
24
|
+
* Create a child logger with a specific prefix/context
|
|
25
|
+
*/
|
|
26
|
+
export declare function createLogger(prefix: string, context?: LogContext): ContextualLogger;
|
|
27
|
+
/**
|
|
28
|
+
* Create a logger for a specific module/component
|
|
29
|
+
*/
|
|
30
|
+
export declare function createModuleLogger(moduleName: string, modulePath?: string): ContextualLogger;
|
|
31
|
+
/**
|
|
32
|
+
* Create a logger for plugins with consistent interface
|
|
33
|
+
*/
|
|
34
|
+
export declare function createPluginLogger(pluginName: string): ContextualLogger;
|
|
35
|
+
/**
|
|
36
|
+
* Create a logger for cron services
|
|
37
|
+
*/
|
|
38
|
+
export declare function createServiceLogger(serviceId: string): ContextualLogger;
|
|
39
|
+
/**
|
|
40
|
+
* Create a request-scoped logger with tracking ID
|
|
41
|
+
*/
|
|
42
|
+
export declare function createRequestLogger(requestId: string, initialContext?: LogContext): ContextualLogger;
|
|
43
|
+
/**
|
|
44
|
+
* Remove request context when done
|
|
45
|
+
*/
|
|
46
|
+
export declare function clearRequestContext(requestId: string): void;
|
|
47
|
+
/**
|
|
48
|
+
* Get context for a request ID
|
|
49
|
+
*/
|
|
50
|
+
export declare function getRequestContext(requestId: string): LogContext | undefined;
|
|
51
|
+
export { LogLevel };
|
|
52
|
+
export declare function setLogLevel(level: LogLevel): void;
|
|
53
|
+
export declare function getLogLevel(): LogLevel;
|
|
54
|
+
/**
|
|
55
|
+
* Temporarily change log level for a block of code
|
|
56
|
+
*/
|
|
57
|
+
export declare function withLogLevel<T>(level: LogLevel, fn: () => T): T;
|
|
58
|
+
/**
|
|
59
|
+
* Rotate logs if they exceed max size
|
|
60
|
+
*/
|
|
61
|
+
export declare function rotateLogs(): Promise<RotationResult>;
|
|
62
|
+
/**
|
|
63
|
+
* Clean old logs based on retention policy
|
|
64
|
+
*/
|
|
65
|
+
export declare function cleanOldLogs(keepDays?: number): RotationResult;
|
|
66
|
+
/**
|
|
67
|
+
* Get current log directory
|
|
68
|
+
*/
|
|
69
|
+
export declare function getLogDir(): string;
|
|
70
|
+
/**
|
|
71
|
+
* Get logger configuration
|
|
72
|
+
*/
|
|
73
|
+
export declare function getLoggerConfig(): Readonly<LoggerConfig>;
|
|
74
|
+
/**
|
|
75
|
+
* Register shutdown handler to flush logs
|
|
76
|
+
*/
|
|
77
|
+
export declare function registerShutdownHandler(): void;
|
|
78
|
+
/**
|
|
79
|
+
* Check if a log level is enabled
|
|
80
|
+
*/
|
|
81
|
+
export declare function isLevelEnabled(level: LogLevel): boolean;
|
|
82
|
+
/**
|
|
83
|
+
* Log with sampling (for high-frequency debug logs)
|
|
84
|
+
*/
|
|
85
|
+
export declare function logWithSample(logger: ContextualLogger, level: LogLevel, sampleRate: number, message: string, data?: unknown): void;
|
|
86
|
+
export type { ContextualLogger as Logger, LogContext } from './logger.types.js';
|
|
87
|
+
/**
|
|
88
|
+
* Logging Best Practices:
|
|
89
|
+
*
|
|
90
|
+
* 1. TRACE (development only):
|
|
91
|
+
* - Function entry/exit with parameters
|
|
92
|
+
* - Variable values during execution
|
|
93
|
+
* - Loop iterations and detailed state
|
|
94
|
+
*
|
|
95
|
+
* 2. DEBUG:
|
|
96
|
+
* - Detailed troubleshooting information
|
|
97
|
+
* - Request/response payloads (sanitized)
|
|
98
|
+
* - State transitions and decisions
|
|
99
|
+
* - Use sampling for high-frequency logs
|
|
100
|
+
*
|
|
101
|
+
* 3. INFO (default level):
|
|
102
|
+
* - Service startup/shutdown
|
|
103
|
+
* - Major state transitions
|
|
104
|
+
* - Important business events
|
|
105
|
+
* - Configuration changes
|
|
106
|
+
* - User actions (login, logout, etc.)
|
|
107
|
+
*
|
|
108
|
+
* 4. WARN:
|
|
109
|
+
* - Deprecated feature usage
|
|
110
|
+
* - Recoverable errors with fallback
|
|
111
|
+
* - Performance degradation
|
|
112
|
+
* - Missing optional configuration
|
|
113
|
+
* - Rate limit approaching
|
|
114
|
+
*
|
|
115
|
+
* 5. ERROR:
|
|
116
|
+
* - Failed operations with impact
|
|
117
|
+
* - Unhandled exceptions
|
|
118
|
+
* - Data validation failures
|
|
119
|
+
* - External service failures
|
|
120
|
+
* - Always include error context
|
|
121
|
+
*
|
|
122
|
+
* 6. FATAL:
|
|
123
|
+
* - System cannot continue operating
|
|
124
|
+
* - Critical initialization failure
|
|
125
|
+
* - Data corruption detected
|
|
126
|
+
* - Requires immediate attention
|
|
127
|
+
*/
|