@rudderhq/server 0.1.0-canary.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +14 -0
- package/dist/agent-auth-jwt.d.ts +14 -0
- package/dist/agent-auth-jwt.d.ts.map +1 -0
- package/dist/agent-auth-jwt.js +119 -0
- package/dist/agent-auth-jwt.js.map +1 -0
- package/dist/agent-runtimes/codex-models.d.ts +4 -0
- package/dist/agent-runtimes/codex-models.d.ts.map +1 -0
- package/dist/agent-runtimes/codex-models.js +98 -0
- package/dist/agent-runtimes/codex-models.js.map +1 -0
- package/dist/agent-runtimes/cursor-models.d.ts +13 -0
- package/dist/agent-runtimes/cursor-models.d.ts.map +1 -0
- package/dist/agent-runtimes/cursor-models.js +148 -0
- package/dist/agent-runtimes/cursor-models.js.map +1 -0
- package/dist/agent-runtimes/http/execute.d.ts +3 -0
- package/dist/agent-runtimes/http/execute.d.ts.map +1 -0
- package/dist/agent-runtimes/http/execute.js +39 -0
- package/dist/agent-runtimes/http/execute.js.map +1 -0
- package/dist/agent-runtimes/http/index.d.ts +3 -0
- package/dist/agent-runtimes/http/index.d.ts.map +1 -0
- package/dist/agent-runtimes/http/index.js +20 -0
- package/dist/agent-runtimes/http/index.js.map +1 -0
- package/dist/agent-runtimes/http/test.d.ts +3 -0
- package/dist/agent-runtimes/http/test.d.ts.map +1 -0
- package/dist/agent-runtimes/http/test.js +106 -0
- package/dist/agent-runtimes/http/test.js.map +1 -0
- package/dist/agent-runtimes/index.d.ts +4 -0
- package/dist/agent-runtimes/index.d.ts.map +1 -0
- package/dist/agent-runtimes/index.js +3 -0
- package/dist/agent-runtimes/index.js.map +1 -0
- package/dist/agent-runtimes/process/execute.d.ts +3 -0
- package/dist/agent-runtimes/process/execute.d.ts.map +1 -0
- package/dist/agent-runtimes/process/execute.js +63 -0
- package/dist/agent-runtimes/process/execute.js.map +1 -0
- package/dist/agent-runtimes/process/index.d.ts +3 -0
- package/dist/agent-runtimes/process/index.d.ts.map +1 -0
- package/dist/agent-runtimes/process/index.js +23 -0
- package/dist/agent-runtimes/process/index.js.map +1 -0
- package/dist/agent-runtimes/process/test.d.ts +3 -0
- package/dist/agent-runtimes/process/test.d.ts.map +1 -0
- package/dist/agent-runtimes/process/test.js +77 -0
- package/dist/agent-runtimes/process/test.js.map +1 -0
- package/dist/agent-runtimes/registry.d.ts +9 -0
- package/dist/agent-runtimes/registry.d.ts.map +1 -0
- package/dist/agent-runtimes/registry.js +189 -0
- package/dist/agent-runtimes/registry.js.map +1 -0
- package/dist/agent-runtimes/types.d.ts +2 -0
- package/dist/agent-runtimes/types.d.ts.map +1 -0
- package/dist/agent-runtimes/types.js +2 -0
- package/dist/agent-runtimes/types.js.map +1 -0
- package/dist/agent-runtimes/utils.d.ts +10 -0
- package/dist/agent-runtimes/utils.d.ts.map +1 -0
- package/dist/agent-runtimes/utils.js +14 -0
- package/dist/agent-runtimes/utils.js.map +1 -0
- package/dist/agent-workspace-key.d.ts +17 -0
- package/dist/agent-workspace-key.d.ts.map +1 -0
- package/dist/agent-workspace-key.js +49 -0
- package/dist/agent-workspace-key.js.map +1 -0
- package/dist/app.d.ts +14 -0
- package/dist/app.d.ts.map +1 -0
- package/dist/app.js +19 -0
- package/dist/app.js.map +1 -0
- package/dist/attachment-types.d.ts +33 -0
- package/dist/attachment-types.d.ts.map +1 -0
- package/dist/attachment-types.js +67 -0
- package/dist/attachment-types.js.map +1 -0
- package/dist/auth/better-auth.d.ts +24 -0
- package/dist/auth/better-auth.d.ts.map +1 -0
- package/dist/auth/better-auth.js +108 -0
- package/dist/auth/better-auth.js.map +1 -0
- package/dist/board-claim.d.ts +23 -0
- package/dist/board-claim.d.ts.map +1 -0
- package/dist/board-claim.js +115 -0
- package/dist/board-claim.js.map +1 -0
- package/dist/bootstrap/create-http-app.d.ts +6 -0
- package/dist/bootstrap/create-http-app.d.ts.map +1 -0
- package/dist/bootstrap/create-http-app.js +122 -0
- package/dist/bootstrap/create-http-app.js.map +1 -0
- package/dist/bootstrap/plugin-host-runtime.d.ts +116 -0
- package/dist/bootstrap/plugin-host-runtime.d.ts.map +1 -0
- package/dist/bootstrap/plugin-host-runtime.js +121 -0
- package/dist/bootstrap/plugin-host-runtime.js.map +1 -0
- package/dist/bootstrap/register-api-routes.d.ts +5 -0
- package/dist/bootstrap/register-api-routes.d.ts.map +1 -0
- package/dist/bootstrap/register-api-routes.js +65 -0
- package/dist/bootstrap/register-api-routes.js.map +1 -0
- package/dist/bootstrap/types.d.ts +24 -0
- package/dist/bootstrap/types.d.ts.map +1 -0
- package/dist/bootstrap/types.js +2 -0
- package/dist/bootstrap/types.js.map +1 -0
- package/dist/config-file.d.ts +5 -0
- package/dist/config-file.d.ts.map +1 -0
- package/dist/config-file.js +48 -0
- package/dist/config-file.js.map +1 -0
- package/dist/config.d.ts +45 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +233 -0
- package/dist/config.js.map +1 -0
- package/dist/dev-server-status.d.ts +29 -0
- package/dist/dev-server-status.d.ts.map +1 -0
- package/dist/dev-server-status.js +75 -0
- package/dist/dev-server-status.js.map +1 -0
- package/dist/errors.d.ts +12 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +28 -0
- package/dist/errors.js.map +1 -0
- package/dist/home-paths.d.ts +50 -0
- package/dist/home-paths.d.ts.map +1 -0
- package/dist/home-paths.js +183 -0
- package/dist/home-paths.js.map +1 -0
- package/dist/index.d.ts +69 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +827 -0
- package/dist/index.js.map +1 -0
- package/dist/langfuse-transcript.d.ts +32 -0
- package/dist/langfuse-transcript.d.ts.map +1 -0
- package/dist/langfuse-transcript.js +341 -0
- package/dist/langfuse-transcript.js.map +1 -0
- package/dist/langfuse.d.ts +93 -0
- package/dist/langfuse.d.ts.map +1 -0
- package/dist/langfuse.js +412 -0
- package/dist/langfuse.js.map +1 -0
- package/dist/local-runtime.d.ts +67 -0
- package/dist/local-runtime.d.ts.map +1 -0
- package/dist/local-runtime.js +302 -0
- package/dist/local-runtime.js.map +1 -0
- package/dist/log-redaction.d.ts +11 -0
- package/dist/log-redaction.d.ts.map +1 -0
- package/dist/log-redaction.js +118 -0
- package/dist/log-redaction.js.map +1 -0
- package/dist/middleware/auth.d.ts +12 -0
- package/dist/middleware/auth.d.ts.map +1 -0
- package/dist/middleware/auth.js +144 -0
- package/dist/middleware/auth.js.map +1 -0
- package/dist/middleware/board-mutation-guard.d.ts +3 -0
- package/dist/middleware/board-mutation-guard.d.ts.map +1 -0
- package/dist/middleware/board-mutation-guard.js +59 -0
- package/dist/middleware/board-mutation-guard.js.map +1 -0
- package/dist/middleware/error-handler.d.ts +17 -0
- package/dist/middleware/error-handler.d.ts.map +1 -0
- package/dist/middleware/error-handler.js +37 -0
- package/dist/middleware/error-handler.js.map +1 -0
- package/dist/middleware/index.d.ts +4 -0
- package/dist/middleware/index.d.ts.map +1 -0
- package/dist/middleware/index.js +4 -0
- package/dist/middleware/index.js.map +1 -0
- package/dist/middleware/logger.d.ts +4 -0
- package/dist/middleware/logger.d.ts.map +1 -0
- package/dist/middleware/logger.js +133 -0
- package/dist/middleware/logger.js.map +1 -0
- package/dist/middleware/private-hostname-guard.d.ts +11 -0
- package/dist/middleware/private-hostname-guard.d.ts.map +1 -0
- package/dist/middleware/private-hostname-guard.js +78 -0
- package/dist/middleware/private-hostname-guard.js.map +1 -0
- package/dist/middleware/validate.d.ts +4 -0
- package/dist/middleware/validate.d.ts.map +1 -0
- package/dist/middleware/validate.js +7 -0
- package/dist/middleware/validate.js.map +1 -0
- package/dist/onboarding-assets/ceo/AGENTS.md +33 -0
- package/dist/onboarding-assets/ceo/HEARTBEAT.md +77 -0
- package/dist/onboarding-assets/ceo/SOUL.md +33 -0
- package/dist/onboarding-assets/ceo/TOOLS.md +3 -0
- package/dist/onboarding-assets/default/AGENTS.md +9 -0
- package/dist/onboarding-assets/default/HEARTBEAT.md +36 -0
- package/dist/onboarding-assets/default/SOUL.md +23 -0
- package/dist/onboarding-assets/default/TOOLS.md +3 -0
- package/dist/paths.d.ts +3 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +31 -0
- package/dist/paths.js.map +1 -0
- package/dist/realtime/live-events-ws.d.ts +28 -0
- package/dist/realtime/live-events-ws.d.ts.map +1 -0
- package/dist/realtime/live-events-ws.js +187 -0
- package/dist/realtime/live-events-ws.js.map +1 -0
- package/dist/redaction.d.ts +4 -0
- package/dist/redaction.d.ts.map +1 -0
- package/dist/redaction.js +63 -0
- package/dist/redaction.js.map +1 -0
- package/dist/routes/access.d.ts +57 -0
- package/dist/routes/access.d.ts.map +1 -0
- package/dist/routes/access.js +2266 -0
- package/dist/routes/access.js.map +1 -0
- package/dist/routes/activity.d.ts +3 -0
- package/dist/routes/activity.d.ts.map +1 -0
- package/dist/routes/activity.js +78 -0
- package/dist/routes/activity.js.map +1 -0
- package/dist/routes/agents.d.ts +3 -0
- package/dist/routes/agents.d.ts.map +1 -0
- package/dist/routes/agents.js +1913 -0
- package/dist/routes/agents.js.map +1 -0
- package/dist/routes/approvals.d.ts +3 -0
- package/dist/routes/approvals.d.ts.map +1 -0
- package/dist/routes/approvals.js +365 -0
- package/dist/routes/approvals.js.map +1 -0
- package/dist/routes/assets.d.ts +4 -0
- package/dist/routes/assets.d.ts.map +1 -0
- package/dist/routes/assets.js +309 -0
- package/dist/routes/assets.js.map +1 -0
- package/dist/routes/authz.d.ts +16 -0
- package/dist/routes/authz.d.ts.map +1 -0
- package/dist/routes/authz.js +47 -0
- package/dist/routes/authz.js.map +1 -0
- package/dist/routes/automations.d.ts +3 -0
- package/dist/routes/automations.d.ts.map +1 -0
- package/dist/routes/automations.js +277 -0
- package/dist/routes/automations.js.map +1 -0
- package/dist/routes/chats.d.ts +4 -0
- package/dist/routes/chats.d.ts.map +1 -0
- package/dist/routes/chats.js +1162 -0
- package/dist/routes/chats.js.map +1 -0
- package/dist/routes/costs.d.ts +3 -0
- package/dist/routes/costs.d.ts.map +1 -0
- package/dist/routes/costs.js +268 -0
- package/dist/routes/costs.js.map +1 -0
- package/dist/routes/dashboard.d.ts +3 -0
- package/dist/routes/dashboard.d.ts.map +1 -0
- package/dist/routes/dashboard.js +15 -0
- package/dist/routes/dashboard.js.map +1 -0
- package/dist/routes/execution-workspaces.d.ts +3 -0
- package/dist/routes/execution-workspaces.d.ts.map +1 -0
- package/dist/routes/execution-workspaces.js +165 -0
- package/dist/routes/execution-workspaces.js.map +1 -0
- package/dist/routes/goals.d.ts +3 -0
- package/dist/routes/goals.d.ts.map +1 -0
- package/dist/routes/goals.js +95 -0
- package/dist/routes/goals.js.map +1 -0
- package/dist/routes/health.d.ts +12 -0
- package/dist/routes/health.d.ts.map +1 -0
- package/dist/routes/health.js +85 -0
- package/dist/routes/health.js.map +1 -0
- package/dist/routes/index.d.ts +19 -0
- package/dist/routes/index.d.ts.map +1 -0
- package/dist/routes/index.js +19 -0
- package/dist/routes/index.js.map +1 -0
- package/dist/routes/instance-settings.d.ts +6 -0
- package/dist/routes/instance-settings.d.ts.map +1 -0
- package/dist/routes/instance-settings.js +250 -0
- package/dist/routes/instance-settings.js.map +1 -0
- package/dist/routes/issues-checkout-wakeup.d.ts +9 -0
- package/dist/routes/issues-checkout-wakeup.d.ts.map +1 -0
- package/dist/routes/issues-checkout-wakeup.js +12 -0
- package/dist/routes/issues-checkout-wakeup.js.map +1 -0
- package/dist/routes/issues.d.ts +4 -0
- package/dist/routes/issues.d.ts.map +1 -0
- package/dist/routes/issues.js +1615 -0
- package/dist/routes/issues.js.map +1 -0
- package/dist/routes/llms.d.ts +3 -0
- package/dist/routes/llms.d.ts.map +1 -0
- package/dist/routes/llms.js +78 -0
- package/dist/routes/llms.js.map +1 -0
- package/dist/routes/messenger.d.ts +3 -0
- package/dist/routes/messenger.d.ts.map +1 -0
- package/dist/routes/messenger.js +108 -0
- package/dist/routes/messenger.js.map +1 -0
- package/dist/routes/org-chart-logo.d.ts +2 -0
- package/dist/routes/org-chart-logo.d.ts.map +1 -0
- package/dist/routes/org-chart-logo.js +2 -0
- package/dist/routes/org-chart-logo.js.map +1 -0
- package/dist/routes/org-chart-svg.d.ts +25 -0
- package/dist/routes/org-chart-svg.d.ts.map +1 -0
- package/dist/routes/org-chart-svg.js +652 -0
- package/dist/routes/org-chart-svg.js.map +1 -0
- package/dist/routes/organization-skills.d.ts +3 -0
- package/dist/routes/organization-skills.d.ts.map +1 -0
- package/dist/routes/organization-skills.js +253 -0
- package/dist/routes/organization-skills.js.map +1 -0
- package/dist/routes/orgs.d.ts +4 -0
- package/dist/routes/orgs.d.ts.map +1 -0
- package/dist/routes/orgs.js +575 -0
- package/dist/routes/orgs.js.map +1 -0
- package/dist/routes/plugin-ui-static.d.ts +69 -0
- package/dist/routes/plugin-ui-static.d.ts.map +1 -0
- package/dist/routes/plugin-ui-static.js +411 -0
- package/dist/routes/plugin-ui-static.js.map +1 -0
- package/dist/routes/plugins.d.ts +120 -0
- package/dist/routes/plugins.d.ts.map +1 -0
- package/dist/routes/plugins.js +1776 -0
- package/dist/routes/plugins.js.map +1 -0
- package/dist/routes/projects.d.ts +3 -0
- package/dist/routes/projects.d.ts.map +1 -0
- package/dist/routes/projects.js +235 -0
- package/dist/routes/projects.js.map +1 -0
- package/dist/routes/run-intelligence.d.ts +3 -0
- package/dist/routes/run-intelligence.d.ts.map +1 -0
- package/dist/routes/run-intelligence.js +58 -0
- package/dist/routes/run-intelligence.js.map +1 -0
- package/dist/routes/secrets.d.ts +3 -0
- package/dist/routes/secrets.d.ts.map +1 -0
- package/dist/routes/secrets.js +128 -0
- package/dist/routes/secrets.js.map +1 -0
- package/dist/routes/sidebar-badges.d.ts +3 -0
- package/dist/routes/sidebar-badges.d.ts.map +1 -0
- package/dist/routes/sidebar-badges.js +70 -0
- package/dist/routes/sidebar-badges.js.map +1 -0
- package/dist/secrets/external-stub-providers.d.ts +5 -0
- package/dist/secrets/external-stub-providers.d.ts.map +1 -0
- package/dist/secrets/external-stub-providers.js +21 -0
- package/dist/secrets/external-stub-providers.js.map +1 -0
- package/dist/secrets/local-encrypted-provider.d.ts +3 -0
- package/dist/secrets/local-encrypted-provider.d.ts.map +1 -0
- package/dist/secrets/local-encrypted-provider.js +116 -0
- package/dist/secrets/local-encrypted-provider.js.map +1 -0
- package/dist/secrets/provider-registry.d.ts +5 -0
- package/dist/secrets/provider-registry.d.ts.map +1 -0
- package/dist/secrets/provider-registry.js +20 -0
- package/dist/secrets/provider-registry.js.map +1 -0
- package/dist/secrets/types.d.ts +21 -0
- package/dist/secrets/types.d.ts.map +1 -0
- package/dist/secrets/types.js +2 -0
- package/dist/secrets/types.js.map +1 -0
- package/dist/services/access.d.ts +113 -0
- package/dist/services/access.d.ts.map +1 -0
- package/dist/services/access.js +247 -0
- package/dist/services/access.js.map +1 -0
- package/dist/services/activity-log.d.ts +17 -0
- package/dist/services/activity-log.d.ts.map +1 -0
- package/dist/services/activity-log.js +109 -0
- package/dist/services/activity-log.js.map +1 -0
- package/dist/services/activity.d.ts +472 -0
- package/dist/services/activity.d.ts.map +1 -0
- package/dist/services/activity.js +134 -0
- package/dist/services/activity.js.map +1 -0
- package/dist/services/agent-enabled-skills.d.ts +9 -0
- package/dist/services/agent-enabled-skills.d.ts.map +1 -0
- package/dist/services/agent-enabled-skills.js +89 -0
- package/dist/services/agent-enabled-skills.js.map +1 -0
- package/dist/services/agent-instructions.d.ts +98 -0
- package/dist/services/agent-instructions.d.ts.map +1 -0
- package/dist/services/agent-instructions.js +596 -0
- package/dist/services/agent-instructions.js.map +1 -0
- package/dist/services/agent-name-pool.d.ts +10 -0
- package/dist/services/agent-name-pool.d.ts.map +1 -0
- package/dist/services/agent-name-pool.js +230 -0
- package/dist/services/agent-name-pool.js.map +1 -0
- package/dist/services/agent-permissions.d.ts +6 -0
- package/dist/services/agent-permissions.d.ts.map +1 -0
- package/dist/services/agent-permissions.js +18 -0
- package/dist/services/agent-permissions.js.map +1 -0
- package/dist/services/agent-run-context.d.ts +142 -0
- package/dist/services/agent-run-context.d.ts.map +1 -0
- package/dist/services/agent-run-context.js +451 -0
- package/dist/services/agent-run-context.js.map +1 -0
- package/dist/services/agents.d.ts +1713 -0
- package/dist/services/agents.d.ts.map +1 -0
- package/dist/services/agents.js +750 -0
- package/dist/services/agents.js.map +1 -0
- package/dist/services/approvals.d.ts +546 -0
- package/dist/services/approvals.d.ts.map +1 -0
- package/dist/services/approvals.js +212 -0
- package/dist/services/approvals.js.map +1 -0
- package/dist/services/assets.d.ts +33 -0
- package/dist/services/assets.d.ts.map +1 -0
- package/dist/services/assets.js +17 -0
- package/dist/services/assets.js.map +1 -0
- package/dist/services/automations.d.ts +135 -0
- package/dist/services/automations.d.ts.map +1 -0
- package/dist/services/automations.js +1105 -0
- package/dist/services/automations.js.map +1 -0
- package/dist/services/board-auth.d.ts +234 -0
- package/dist/services/board-auth.d.ts.map +1 -0
- package/dist/services/board-auth.js +295 -0
- package/dist/services/board-auth.js.map +1 -0
- package/dist/services/budgets.d.ts +38 -0
- package/dist/services/budgets.d.ts.map +1 -0
- package/dist/services/budgets.js +784 -0
- package/dist/services/budgets.js.map +1 -0
- package/dist/services/chat-assistant.d.ts +62 -0
- package/dist/services/chat-assistant.d.ts.map +1 -0
- package/dist/services/chat-assistant.js +943 -0
- package/dist/services/chat-assistant.js.map +1 -0
- package/dist/services/chat-generation-locks.d.ts +3 -0
- package/dist/services/chat-generation-locks.d.ts.map +1 -0
- package/dist/services/chat-generation-locks.js +16 -0
- package/dist/services/chat-generation-locks.js.map +1 -0
- package/dist/services/chats.d.ts +723 -0
- package/dist/services/chats.d.ts.map +1 -0
- package/dist/services/chats.js +1188 -0
- package/dist/services/chats.js.map +1 -0
- package/dist/services/costs.d.ts +114 -0
- package/dist/services/costs.d.ts.map +1 -0
- package/dist/services/costs.js +326 -0
- package/dist/services/costs.js.map +1 -0
- package/dist/services/cron.d.ts +80 -0
- package/dist/services/cron.d.ts.map +1 -0
- package/dist/services/cron.js +300 -0
- package/dist/services/cron.js.map +1 -0
- package/dist/services/dashboard.d.ts +26 -0
- package/dist/services/dashboard.d.ts.map +1 -0
- package/dist/services/dashboard.js +98 -0
- package/dist/services/dashboard.js.map +1 -0
- package/dist/services/default-agent-instructions.d.ts +9 -0
- package/dist/services/default-agent-instructions.d.ts.map +1 -0
- package/dist/services/default-agent-instructions.js +20 -0
- package/dist/services/default-agent-instructions.js.map +1 -0
- package/dist/services/documents.d.ts +164 -0
- package/dist/services/documents.d.ts.map +1 -0
- package/dist/services/documents.js +382 -0
- package/dist/services/documents.js.map +1 -0
- package/dist/services/execution-workspace-policy.d.ts +20 -0
- package/dist/services/execution-workspace-policy.d.ts.map +1 -0
- package/dist/services/execution-workspace-policy.js +172 -0
- package/dist/services/execution-workspace-policy.js.map +1 -0
- package/dist/services/execution-workspaces.d.ts +19 -0
- package/dist/services/execution-workspaces.d.ts.map +1 -0
- package/dist/services/execution-workspaces.js +87 -0
- package/dist/services/execution-workspaces.js.map +1 -0
- package/dist/services/finance.d.ts +93 -0
- package/dist/services/finance.d.ts.map +1 -0
- package/dist/services/finance.js +120 -0
- package/dist/services/finance.js.map +1 -0
- package/dist/services/goals.d.ts +433 -0
- package/dist/services/goals.d.ts.map +1 -0
- package/dist/services/goals.js +54 -0
- package/dist/services/goals.js.map +1 -0
- package/dist/services/heartbeat-run-summary.d.ts +2 -0
- package/dist/services/heartbeat-run-summary.d.ts.map +1 -0
- package/dist/services/heartbeat-run-summary.js +131 -0
- package/dist/services/heartbeat-run-summary.js.map +1 -0
- package/dist/services/heartbeat.d.ts +2 -0
- package/dist/services/heartbeat.d.ts.map +1 -0
- package/dist/services/heartbeat.js +2 -0
- package/dist/services/heartbeat.js.map +1 -0
- package/dist/services/hire-hook.d.ts +14 -0
- package/dist/services/hire-hook.d.ts.map +1 -0
- package/dist/services/hire-hook.js +85 -0
- package/dist/services/hire-hook.js.map +1 -0
- package/dist/services/index.d.ts +38 -0
- package/dist/services/index.d.ts.map +1 -0
- package/dist/services/index.js +38 -0
- package/dist/services/index.js.map +1 -0
- package/dist/services/instance-settings.d.ts +14 -0
- package/dist/services/instance-settings.d.ts.map +1 -0
- package/dist/services/instance-settings.js +158 -0
- package/dist/services/instance-settings.js.map +1 -0
- package/dist/services/issue-approvals.d.ts +56 -0
- package/dist/services/issue-approvals.d.ts.map +1 -0
- package/dist/services/issue-approvals.js +153 -0
- package/dist/services/issue-approvals.js.map +1 -0
- package/dist/services/issue-assignment-wakeup.d.ts +32 -0
- package/dist/services/issue-assignment-wakeup.d.ts.map +1 -0
- package/dist/services/issue-assignment-wakeup.js +43 -0
- package/dist/services/issue-assignment-wakeup.js.map +1 -0
- package/dist/services/issue-goal-fallback.d.ts +15 -0
- package/dist/services/issue-goal-fallback.d.ts.map +1 -0
- package/dist/services/issue-goal-fallback.js +15 -0
- package/dist/services/issue-goal-fallback.js.map +1 -0
- package/dist/services/issues.d.ts +580 -0
- package/dist/services/issues.d.ts.map +1 -0
- package/dist/services/issues.js +1464 -0
- package/dist/services/issues.js.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.d.ts +23 -0
- package/dist/services/knowledge-portability/organization-portability.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-portability.js +3795 -0
- package/dist/services/knowledge-portability/organization-portability.js.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.d.ts +105 -0
- package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -0
- package/dist/services/knowledge-portability/organization-skills.js +3172 -0
- package/dist/services/knowledge-portability/organization-skills.js.map +1 -0
- package/dist/services/live-events.d.ts +17 -0
- package/dist/services/live-events.d.ts.map +1 -0
- package/dist/services/live-events.js +33 -0
- package/dist/services/live-events.js.map +1 -0
- package/dist/services/messenger.d.ts +111 -0
- package/dist/services/messenger.d.ts.map +1 -0
- package/dist/services/messenger.js +774 -0
- package/dist/services/messenger.js.map +1 -0
- package/dist/services/native-path-picker.d.ts +18 -0
- package/dist/services/native-path-picker.d.ts.map +1 -0
- package/dist/services/native-path-picker.js +119 -0
- package/dist/services/native-path-picker.js.map +1 -0
- package/dist/services/operator-profile.d.ts +7 -0
- package/dist/services/operator-profile.d.ts.map +1 -0
- package/dist/services/operator-profile.js +66 -0
- package/dist/services/operator-profile.js.map +1 -0
- package/dist/services/organization-export-readme.d.ts +17 -0
- package/dist/services/organization-export-readme.d.ts.map +1 -0
- package/dist/services/organization-export-readme.js +148 -0
- package/dist/services/organization-export-readme.js.map +1 -0
- package/dist/services/organization-portability.d.ts +2 -0
- package/dist/services/organization-portability.d.ts.map +1 -0
- package/dist/services/organization-portability.js +2 -0
- package/dist/services/organization-portability.js.map +1 -0
- package/dist/services/organization-skills.d.ts +2 -0
- package/dist/services/organization-skills.d.ts.map +1 -0
- package/dist/services/organization-skills.js +2 -0
- package/dist/services/organization-skills.js.map +1 -0
- package/dist/services/organization-workspace-browser.d.ts +8 -0
- package/dist/services/organization-workspace-browser.d.ts.map +1 -0
- package/dist/services/organization-workspace-browser.js +229 -0
- package/dist/services/organization-workspace-browser.js.map +1 -0
- package/dist/services/organization-workspace.d.ts +5 -0
- package/dist/services/organization-workspace.d.ts.map +1 -0
- package/dist/services/organization-workspace.js +71 -0
- package/dist/services/organization-workspace.js.map +1 -0
- package/dist/services/orgs.d.ts +163 -0
- package/dist/services/orgs.d.ts.map +1 -0
- package/dist/services/orgs.js +327 -0
- package/dist/services/orgs.js.map +1 -0
- package/dist/services/plugin-capability-validator.d.ts +108 -0
- package/dist/services/plugin-capability-validator.d.ts.map +1 -0
- package/dist/services/plugin-capability-validator.js +268 -0
- package/dist/services/plugin-capability-validator.js.map +1 -0
- package/dist/services/plugin-config-validator.d.ts +26 -0
- package/dist/services/plugin-config-validator.d.ts.map +1 -0
- package/dist/services/plugin-config-validator.js +41 -0
- package/dist/services/plugin-config-validator.js.map +1 -0
- package/dist/services/plugin-dev-watcher.d.ts +30 -0
- package/dist/services/plugin-dev-watcher.d.ts.map +1 -0
- package/dist/services/plugin-dev-watcher.js +241 -0
- package/dist/services/plugin-dev-watcher.js.map +1 -0
- package/dist/services/plugin-event-bus.d.ts +149 -0
- package/dist/services/plugin-event-bus.d.ts.map +1 -0
- package/dist/services/plugin-event-bus.js +258 -0
- package/dist/services/plugin-event-bus.js.map +1 -0
- package/dist/services/plugin-host-service-cleanup.d.ts +14 -0
- package/dist/services/plugin-host-service-cleanup.d.ts.map +1 -0
- package/dist/services/plugin-host-service-cleanup.js +37 -0
- package/dist/services/plugin-host-service-cleanup.js.map +1 -0
- package/dist/services/plugin-host-services.d.ts +13 -0
- package/dist/services/plugin-host-services.d.ts.map +1 -0
- package/dist/services/plugin-host-services.js +973 -0
- package/dist/services/plugin-host-services.js.map +1 -0
- package/dist/services/plugin-job-coordinator.d.ts +81 -0
- package/dist/services/plugin-job-coordinator.d.ts.map +1 -0
- package/dist/services/plugin-job-coordinator.js +172 -0
- package/dist/services/plugin-job-coordinator.js.map +1 -0
- package/dist/services/plugin-job-scheduler.d.ts +163 -0
- package/dist/services/plugin-job-scheduler.d.ts.map +1 -0
- package/dist/services/plugin-job-scheduler.js +564 -0
- package/dist/services/plugin-job-scheduler.js.map +1 -0
- package/dist/services/plugin-job-store.d.ts +208 -0
- package/dist/services/plugin-job-store.d.ts.map +1 -0
- package/dist/services/plugin-job-store.js +350 -0
- package/dist/services/plugin-job-store.js.map +1 -0
- package/dist/services/plugin-lifecycle.d.ts +203 -0
- package/dist/services/plugin-lifecycle.d.ts.map +1 -0
- package/dist/services/plugin-lifecycle.js +476 -0
- package/dist/services/plugin-lifecycle.js.map +1 -0
- package/dist/services/plugin-loader.d.ts +441 -0
- package/dist/services/plugin-loader.d.ts.map +1 -0
- package/dist/services/plugin-loader.js +1192 -0
- package/dist/services/plugin-loader.js.map +1 -0
- package/dist/services/plugin-log-retention.d.ts +20 -0
- package/dist/services/plugin-log-retention.d.ts.map +1 -0
- package/dist/services/plugin-log-retention.js +63 -0
- package/dist/services/plugin-log-retention.js.map +1 -0
- package/dist/services/plugin-manifest-validator.d.ts +79 -0
- package/dist/services/plugin-manifest-validator.d.ts.map +1 -0
- package/dist/services/plugin-manifest-validator.js +84 -0
- package/dist/services/plugin-manifest-validator.js.map +1 -0
- package/dist/services/plugin-registry.d.ts +2542 -0
- package/dist/services/plugin-registry.d.ts.map +1 -0
- package/dist/services/plugin-registry.js +539 -0
- package/dist/services/plugin-registry.js.map +1 -0
- package/dist/services/plugin-runtime-sandbox.d.ts +40 -0
- package/dist/services/plugin-runtime-sandbox.d.ts.map +1 -0
- package/dist/services/plugin-runtime-sandbox.js +154 -0
- package/dist/services/plugin-runtime-sandbox.js.map +1 -0
- package/dist/services/plugin-secrets-handler.d.ts +81 -0
- package/dist/services/plugin-secrets-handler.d.ts.map +1 -0
- package/dist/services/plugin-secrets-handler.js +275 -0
- package/dist/services/plugin-secrets-handler.js.map +1 -0
- package/dist/services/plugin-state-store.d.ts +92 -0
- package/dist/services/plugin-state-store.d.ts.map +1 -0
- package/dist/services/plugin-state-store.js +190 -0
- package/dist/services/plugin-state-store.js.map +1 -0
- package/dist/services/plugin-stream-bus.d.ts +29 -0
- package/dist/services/plugin-stream-bus.d.ts.map +1 -0
- package/dist/services/plugin-stream-bus.js +48 -0
- package/dist/services/plugin-stream-bus.js.map +1 -0
- package/dist/services/plugin-tool-dispatcher.d.ts +180 -0
- package/dist/services/plugin-tool-dispatcher.d.ts.map +1 -0
- package/dist/services/plugin-tool-dispatcher.js +224 -0
- package/dist/services/plugin-tool-dispatcher.js.map +1 -0
- package/dist/services/plugin-tool-registry.d.ts +192 -0
- package/dist/services/plugin-tool-registry.d.ts.map +1 -0
- package/dist/services/plugin-tool-registry.js +224 -0
- package/dist/services/plugin-tool-registry.js.map +1 -0
- package/dist/services/plugin-worker-manager.d.ts +260 -0
- package/dist/services/plugin-worker-manager.d.ts.map +1 -0
- package/dist/services/plugin-worker-manager.js +835 -0
- package/dist/services/plugin-worker-manager.js.map +1 -0
- package/dist/services/projects.d.ts +92 -0
- package/dist/services/projects.d.ts.map +1 -0
- package/dist/services/projects.js +705 -0
- package/dist/services/projects.js.map +1 -0
- package/dist/services/quota-windows.d.ts +9 -0
- package/dist/services/quota-windows.d.ts.map +1 -0
- package/dist/services/quota-windows.js +56 -0
- package/dist/services/quota-windows.js.map +1 -0
- package/dist/services/resource-catalog.d.ts +29 -0
- package/dist/services/resource-catalog.d.ts.map +1 -0
- package/dist/services/resource-catalog.js +298 -0
- package/dist/services/resource-catalog.js.map +1 -0
- package/dist/services/run-intelligence.d.ts +31 -0
- package/dist/services/run-intelligence.d.ts.map +1 -0
- package/dist/services/run-intelligence.js +315 -0
- package/dist/services/run-intelligence.js.map +1 -0
- package/dist/services/run-log-store.d.ts +36 -0
- package/dist/services/run-log-store.d.ts.map +1 -0
- package/dist/services/run-log-store.js +114 -0
- package/dist/services/run-log-store.js.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts +882 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -0
- package/dist/services/runtime-kernel/heartbeat.js +4345 -0
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -0
- package/dist/services/runtime-trace-metadata.d.ts +12 -0
- package/dist/services/runtime-trace-metadata.d.ts.map +1 -0
- package/dist/services/runtime-trace-metadata.js +13 -0
- package/dist/services/runtime-trace-metadata.js.map +1 -0
- package/dist/services/secrets.d.ts +511 -0
- package/dist/services/secrets.d.ts.map +1 -0
- package/dist/services/secrets.js +289 -0
- package/dist/services/secrets.js.map +1 -0
- package/dist/services/sidebar-badges.d.ts +11 -0
- package/dist/services/sidebar-badges.d.ts.map +1 -0
- package/dist/services/sidebar-badges.js +43 -0
- package/dist/services/sidebar-badges.js.map +1 -0
- package/dist/services/work-products.d.ts +14 -0
- package/dist/services/work-products.d.ts.map +1 -0
- package/dist/services/work-products.js +100 -0
- package/dist/services/work-products.js.map +1 -0
- package/dist/services/workspace-operation-log-store.d.ts +35 -0
- package/dist/services/workspace-operation-log-store.d.ts.map +1 -0
- package/dist/services/workspace-operation-log-store.js +115 -0
- package/dist/services/workspace-operation-log-store.js.map +1 -0
- package/dist/services/workspace-operations.d.ts +46 -0
- package/dist/services/workspace-operations.d.ts.map +1 -0
- package/dist/services/workspace-operations.js +237 -0
- package/dist/services/workspace-operations.js.map +1 -0
- package/dist/services/workspace-runtime.d.ts +164 -0
- package/dist/services/workspace-runtime.d.ts.map +1 -0
- package/dist/services/workspace-runtime.js +1235 -0
- package/dist/services/workspace-runtime.js.map +1 -0
- package/dist/startup-banner.d.ts +31 -0
- package/dist/startup-banner.d.ts.map +1 -0
- package/dist/startup-banner.js +121 -0
- package/dist/startup-banner.js.map +1 -0
- package/dist/storage/index.d.ts +6 -0
- package/dist/storage/index.d.ts.map +1 -0
- package/dist/storage/index.js +29 -0
- package/dist/storage/index.js.map +1 -0
- package/dist/storage/local-disk-provider.d.ts +3 -0
- package/dist/storage/local-disk-provider.d.ts.map +1 -0
- package/dist/storage/local-disk-provider.js +79 -0
- package/dist/storage/local-disk-provider.js.map +1 -0
- package/dist/storage/provider-registry.d.ts +4 -0
- package/dist/storage/provider-registry.d.ts.map +1 -0
- package/dist/storage/provider-registry.js +15 -0
- package/dist/storage/provider-registry.js.map +1 -0
- package/dist/storage/s3-provider.d.ts +11 -0
- package/dist/storage/s3-provider.d.ts.map +1 -0
- package/dist/storage/s3-provider.js +123 -0
- package/dist/storage/s3-provider.js.map +1 -0
- package/dist/storage/service.d.ts +3 -0
- package/dist/storage/service.d.ts.map +1 -0
- package/dist/storage/service.js +120 -0
- package/dist/storage/service.js.map +1 -0
- package/dist/storage/types.d.ts +55 -0
- package/dist/storage/types.d.ts.map +1 -0
- package/dist/storage/types.js +2 -0
- package/dist/storage/types.js.map +1 -0
- package/dist/ui-branding.d.ts +14 -0
- package/dist/ui-branding.d.ts.map +1 -0
- package/dist/ui-branding.js +201 -0
- package/dist/ui-branding.js.map +1 -0
- package/dist/version.d.ts +2 -0
- package/dist/version.d.ts.map +1 -0
- package/dist/version.js +5 -0
- package/dist/version.js.map +1 -0
- package/package.json +101 -0
- package/resources/bundled-skills/para-memory-files/SKILL.md +114 -0
- package/resources/bundled-skills/para-memory-files/references/schemas.md +35 -0
- package/resources/bundled-skills/rudder/SKILL.md +265 -0
- package/resources/bundled-skills/rudder/references/api-reference.md +253 -0
- package/resources/bundled-skills/rudder/references/cli-reference.md +67 -0
- package/resources/bundled-skills/rudder/references/organization-skills.md +155 -0
- package/resources/bundled-skills/rudder-create-agent/SKILL.md +166 -0
- package/resources/bundled-skills/rudder-create-agent/references/api-reference.md +172 -0
- package/resources/bundled-skills/rudder-create-agent/references/cli-reference.md +126 -0
- package/resources/bundled-skills/rudder-create-plugin/SKILL.md +103 -0
- package/resources/community-skills/deep-research/README.md +124 -0
- package/resources/community-skills/deep-research/SKILL.md +107 -0
- package/resources/community-skills/deep-research/reference/continuation.md +169 -0
- package/resources/community-skills/deep-research/reference/html-generation.md +103 -0
- package/resources/community-skills/deep-research/reference/methodology.md +421 -0
- package/resources/community-skills/deep-research/reference/quality-gates.md +197 -0
- package/resources/community-skills/deep-research/reference/report-assembly.md +119 -0
- package/resources/community-skills/deep-research/reference/weasyprint_guidelines.md +324 -0
- package/resources/community-skills/deep-research/requirements.txt +14 -0
- package/resources/community-skills/deep-research/scripts/citation_manager.py +177 -0
- package/resources/community-skills/deep-research/scripts/md_to_html.py +330 -0
- package/resources/community-skills/deep-research/scripts/research_engine.py +582 -0
- package/resources/community-skills/deep-research/scripts/source_evaluator.py +292 -0
- package/resources/community-skills/deep-research/scripts/validate_report.py +403 -0
- package/resources/community-skills/deep-research/scripts/verify_citations.py +426 -0
- package/resources/community-skills/deep-research/scripts/verify_html.py +220 -0
- package/resources/community-skills/deep-research/templates/mckinsey_report_template.html +443 -0
- package/resources/community-skills/deep-research/templates/report_template.md +433 -0
- package/resources/community-skills/skill-creator/SKILL.md +9 -0
- package/resources/community-skills/software-product-advisor/SKILL.md +290 -0
- package/skills/para-memory-files/SKILL.md +114 -0
- package/skills/para-memory-files/references/schemas.md +35 -0
- package/skills/rudder/SKILL.md +265 -0
- package/skills/rudder/references/api-reference.md +253 -0
- package/skills/rudder/references/cli-reference.md +67 -0
- package/skills/rudder/references/organization-skills.md +155 -0
- package/skills/rudder-create-agent/SKILL.md +166 -0
- package/skills/rudder-create-agent/references/api-reference.md +172 -0
- package/skills/rudder-create-agent/references/cli-reference.md +126 -0
- package/skills/rudder-create-plugin/SKILL.md +103 -0
- package/ui-dist/android-chrome-192x192.png +0 -0
- package/ui-dist/android-chrome-512x512.png +0 -0
- package/ui-dist/android-chrome-maskable-512x512.png +0 -0
- package/ui-dist/apple-touch-icon.png +0 -0
- package/ui-dist/assets/_basePickBy-CjUu04_e.js +1 -0
- package/ui-dist/assets/_baseUniq-C9YNlrVG.js +1 -0
- package/ui-dist/assets/apl-B4CMkyY2.js +1 -0
- package/ui-dist/assets/arc-CSSZfktq.js +1 -0
- package/ui-dist/assets/architectureDiagram-2XIMDMQ5-Co78JKUi.js +36 -0
- package/ui-dist/assets/asciiarmor-Df11BRmG.js +1 -0
- package/ui-dist/assets/asn1-EdZsLKOL.js +1 -0
- package/ui-dist/assets/asterisk-B-8jnY81.js +1 -0
- package/ui-dist/assets/blockDiagram-WCTKOSBZ-2KUUIzzz.js +132 -0
- package/ui-dist/assets/brainfuck-C4LP7Hcl.js +1 -0
- package/ui-dist/assets/c4Diagram-IC4MRINW-C6pq8tPP.js +10 -0
- package/ui-dist/assets/channel-BEODbRMk.js +1 -0
- package/ui-dist/assets/chunk-4BX2VUAB-ojCLkixe.js +1 -0
- package/ui-dist/assets/chunk-55IACEB6-MGONqzmz.js +1 -0
- package/ui-dist/assets/chunk-FMBD7UC4-CmGuLv2P.js +15 -0
- package/ui-dist/assets/chunk-JSJVCQXG-BNBefVr6.js +1 -0
- package/ui-dist/assets/chunk-KX2RTZJC-DIGBQLn5.js +1 -0
- package/ui-dist/assets/chunk-NQ4KR5QH-_KEutsaQ.js +220 -0
- package/ui-dist/assets/chunk-QZHKN3VN-B6pzyuwm.js +1 -0
- package/ui-dist/assets/chunk-WL4C6EOR-B8NDzcfm.js +189 -0
- package/ui-dist/assets/classDiagram-VBA2DB6C-CsSqaaRj.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-CsSqaaRj.js +1 -0
- package/ui-dist/assets/clike-B9uivgTg.js +1 -0
- package/ui-dist/assets/clojure-BMjYHr_A.js +1 -0
- package/ui-dist/assets/clone-5oWMCI0u.js +1 -0
- package/ui-dist/assets/cmake-BQqOBYOt.js +1 -0
- package/ui-dist/assets/cobol-CWcv1MsR.js +1 -0
- package/ui-dist/assets/coffeescript-S37ZYGWr.js +1 -0
- package/ui-dist/assets/commonlisp-DBKNyK5s.js +1 -0
- package/ui-dist/assets/cose-bilkent-S5V4N54A-B1t6ulcV.js +1 -0
- package/ui-dist/assets/crystal-SjHAIU92.js +1 -0
- package/ui-dist/assets/css-BnMrqG3P.js +1 -0
- package/ui-dist/assets/cypher-C_CwsFkJ.js +1 -0
- package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +331 -0
- package/ui-dist/assets/d-pRatUO7H.js +1 -0
- package/ui-dist/assets/dagre-KLK3FWXG-DWVC5_HJ.js +4 -0
- package/ui-dist/assets/defaultLocale-DX6XiGOO.js +1 -0
- package/ui-dist/assets/diagram-E7M64L7V-C4ztYLox.js +24 -0
- package/ui-dist/assets/diagram-IFDJBPK2-DtWBGLnA.js +43 -0
- package/ui-dist/assets/diagram-P4PSJMXO-BiqiI4Df.js +24 -0
- package/ui-dist/assets/diff-DbItnlRl.js +1 -0
- package/ui-dist/assets/dockerfile-BKs6k2Af.js +1 -0
- package/ui-dist/assets/dtd-DF_7sFjM.js +1 -0
- package/ui-dist/assets/dylan-DwRh75JA.js +1 -0
- package/ui-dist/assets/ebnf-CDyGwa7X.js +1 -0
- package/ui-dist/assets/ecl-Cabwm37j.js +1 -0
- package/ui-dist/assets/eiffel-CnydiIhH.js +1 -0
- package/ui-dist/assets/elm-vLlmbW-K.js +1 -0
- package/ui-dist/assets/erDiagram-INFDFZHY-CUhr9rIh.js +70 -0
- package/ui-dist/assets/erlang-BNw1qcRV.js +1 -0
- package/ui-dist/assets/factor-kuTfRLto.js +1 -0
- package/ui-dist/assets/fcl-Kvtd6kyn.js +1 -0
- package/ui-dist/assets/flowDiagram-PKNHOUZH-BEqBmNL-.js +162 -0
- package/ui-dist/assets/forth-Ffai-XNe.js +1 -0
- package/ui-dist/assets/fortran-DYz_wnZ1.js +1 -0
- package/ui-dist/assets/ganttDiagram-A5KZAMGK-CdeWhdno.js +292 -0
- package/ui-dist/assets/gas-Bneqetm1.js +1 -0
- package/ui-dist/assets/gherkin-heZmZLOM.js +1 -0
- package/ui-dist/assets/gitGraphDiagram-K3NZZRJ6-CgG66QFg.js +65 -0
- package/ui-dist/assets/graph-rmownl79.js +1 -0
- package/ui-dist/assets/groovy-D9Dt4D0W.js +1 -0
- package/ui-dist/assets/haskell-Cw1EW3IL.js +1 -0
- package/ui-dist/assets/haxe-H-WmDvRZ.js +1 -0
- package/ui-dist/assets/http-DBlCnlav.js +1 -0
- package/ui-dist/assets/idl-BEugSyMb.js +1 -0
- package/ui-dist/assets/index-B1YyDqaG.js +1 -0
- package/ui-dist/assets/index-B7exNxYd.js +1 -0
- package/ui-dist/assets/index-BIuriVDl.js +1 -0
- package/ui-dist/assets/index-BT9rfwYt.js +1 -0
- package/ui-dist/assets/index-BZhmacJG.js +1 -0
- package/ui-dist/assets/index-B_ebS3U_.js +3 -0
- package/ui-dist/assets/index-BnQqZOsc.js +1 -0
- package/ui-dist/assets/index-BwPbAax6.js +1 -0
- package/ui-dist/assets/index-C5i670o5.js +1 -0
- package/ui-dist/assets/index-C9KwE7Yr.js +1 -0
- package/ui-dist/assets/index-CDId_UjP.js +1 -0
- package/ui-dist/assets/index-CI9ydSGM.js +1 -0
- package/ui-dist/assets/index-CKpm3WGI.css +1 -0
- package/ui-dist/assets/index-CMP_bzP3.js +2 -0
- package/ui-dist/assets/index-CRcHIoCW.js +1 -0
- package/ui-dist/assets/index-DZqNY-Lg.js +1 -0
- package/ui-dist/assets/index-DbDKJhW-.js +7 -0
- package/ui-dist/assets/index-Dkg6MwQ_.js +1 -0
- package/ui-dist/assets/index-Dn0iitKg.js +1 -0
- package/ui-dist/assets/index-GvHywIOA.js +1323 -0
- package/ui-dist/assets/index-WtX4Y4Fx.js +13 -0
- package/ui-dist/assets/index-iyC5PHC3.js +6 -0
- package/ui-dist/assets/index-jMlzlqoV.js +1 -0
- package/ui-dist/assets/index-pTIOLGTe.js +1 -0
- package/ui-dist/assets/infoDiagram-LFFYTUFH-CEhdbTYQ.js +2 -0
- package/ui-dist/assets/init-Gi6I4Gst.js +1 -0
- package/ui-dist/assets/ishikawaDiagram-PHBUUO56-g9GiiXI2.js +70 -0
- package/ui-dist/assets/javascript-iXu5QeM3.js +1 -0
- package/ui-dist/assets/journeyDiagram-4ABVD52K-CheeZzlg.js +139 -0
- package/ui-dist/assets/julia-DuME0IfC.js +1 -0
- package/ui-dist/assets/kanban-definition-K7BYSVSG-BTpuAgUJ.js +89 -0
- package/ui-dist/assets/katex-B1X10hvy.js +261 -0
- package/ui-dist/assets/layout-CuBgufef.js +1 -0
- package/ui-dist/assets/linear-CnXO6wXw.js +1 -0
- package/ui-dist/assets/livescript-BwQOo05w.js +1 -0
- package/ui-dist/assets/lua-BgMRiT3U.js +1 -0
- package/ui-dist/assets/mathematica-DTrFuWx2.js +1 -0
- package/ui-dist/assets/mbox-CNhZ1qSd.js +1 -0
- package/ui-dist/assets/mermaid.core-DVaYxfh9.js +255 -0
- package/ui-dist/assets/mindmap-definition-YRQLILUH-00nAuexq.js +68 -0
- package/ui-dist/assets/mirc-CjQqDB4T.js +1 -0
- package/ui-dist/assets/mllike-CXdrOF99.js +1 -0
- package/ui-dist/assets/modelica-Dc1JOy9r.js +1 -0
- package/ui-dist/assets/mscgen-BA5vi2Kp.js +1 -0
- package/ui-dist/assets/mumps-BT43cFF4.js +1 -0
- package/ui-dist/assets/nginx-DdIZxoE0.js +1 -0
- package/ui-dist/assets/nsis-LdVXkNf5.js +1 -0
- package/ui-dist/assets/ntriples-BfvgReVJ.js +1 -0
- package/ui-dist/assets/octave-Ck1zUtKM.js +1 -0
- package/ui-dist/assets/ordinal-Cboi1Yqb.js +1 -0
- package/ui-dist/assets/oz-BzwKVEFT.js +1 -0
- package/ui-dist/assets/pascal--L3eBynH.js +1 -0
- package/ui-dist/assets/perl-CdXCOZ3F.js +1 -0
- package/ui-dist/assets/pieDiagram-SKSYHLDU-NaOgRqIj.js +30 -0
- package/ui-dist/assets/pig-CevX1Tat.js +1 -0
- package/ui-dist/assets/powershell-CFHJl5sT.js +1 -0
- package/ui-dist/assets/properties-C78fOPTZ.js +1 -0
- package/ui-dist/assets/protobuf-ChK-085T.js +1 -0
- package/ui-dist/assets/pug-DeIclll2.js +1 -0
- package/ui-dist/assets/puppet-DMA9R1ak.js +1 -0
- package/ui-dist/assets/python-BuPzkPfP.js +1 -0
- package/ui-dist/assets/q-pXgVlZs6.js +1 -0
- package/ui-dist/assets/quadrantDiagram-337W2JSQ-Bnf9OCW0.js +7 -0
- package/ui-dist/assets/r-B6wPVr8A.js +1 -0
- package/ui-dist/assets/requirementDiagram-Z7DCOOCP-BiacZTTh.js +73 -0
- package/ui-dist/assets/rpm-CTu-6PCP.js +1 -0
- package/ui-dist/assets/ruby-B2Rjki9n.js +1 -0
- package/ui-dist/assets/sankeyDiagram-WA2Y5GQK-DOuD4D2Q.js +10 -0
- package/ui-dist/assets/sas-B4kiWyti.js +1 -0
- package/ui-dist/assets/scheme-C41bIUwD.js +1 -0
- package/ui-dist/assets/sequenceDiagram-2WXFIKYE-oV3M_w-H.js +145 -0
- package/ui-dist/assets/shell-CjFT_Tl9.js +1 -0
- package/ui-dist/assets/sieve-C3Gn_uJK.js +1 -0
- package/ui-dist/assets/simple-mode-GW_nhZxv.js +1 -0
- package/ui-dist/assets/smalltalk-CnHTOXQT.js +1 -0
- package/ui-dist/assets/solr-DehyRSwq.js +1 -0
- package/ui-dist/assets/sparql-DkYu6x3z.js +1 -0
- package/ui-dist/assets/spreadsheet-BCZA_wO0.js +1 -0
- package/ui-dist/assets/sql-D0XecflT.js +1 -0
- package/ui-dist/assets/stateDiagram-RAJIS63D-CdRc2Pqb.js +1 -0
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-CIMHFJYg.js +1 -0
- package/ui-dist/assets/stex-C3f8Ysf7.js +1 -0
- package/ui-dist/assets/stylus-B533Al4x.js +1 -0
- package/ui-dist/assets/swift-BzpIVaGY.js +1 -0
- package/ui-dist/assets/tcl-DVfN8rqt.js +1 -0
- package/ui-dist/assets/textile-CnDTJFAw.js +1 -0
- package/ui-dist/assets/tiddlywiki-DO-Gjzrf.js +1 -0
- package/ui-dist/assets/tiki-DGYXhP31.js +1 -0
- package/ui-dist/assets/timeline-definition-YZTLITO2-BCWQDIwt.js +61 -0
- package/ui-dist/assets/toml-Bm5Em-hy.js +1 -0
- package/ui-dist/assets/treemap-KZPCXAKY-BvsIxXAi.js +162 -0
- package/ui-dist/assets/troff-wAsdV37c.js +1 -0
- package/ui-dist/assets/ttcn-CfJYG6tj.js +1 -0
- package/ui-dist/assets/ttcn-cfg-B9xdYoR4.js +1 -0
- package/ui-dist/assets/turtle-B1tBg_DP.js +1 -0
- package/ui-dist/assets/vb-CmGdzxic.js +1 -0
- package/ui-dist/assets/vbscript-BuJXcnF6.js +1 -0
- package/ui-dist/assets/velocity-D8B20fx6.js +1 -0
- package/ui-dist/assets/vennDiagram-LZ73GAT5-BzibHs4r.js +34 -0
- package/ui-dist/assets/verilog-C6RDOZhf.js +1 -0
- package/ui-dist/assets/vhdl-lSbBsy5d.js +1 -0
- package/ui-dist/assets/webidl-ZXfAyPTL.js +1 -0
- package/ui-dist/assets/xquery-DzFWVndE.js +1 -0
- package/ui-dist/assets/xychartDiagram-JWTSCODW-CX_Xt_y-.js +7 -0
- package/ui-dist/assets/yacas-BJ4BC0dw.js +1 -0
- package/ui-dist/assets/z80-Hz9HOZM7.js +1 -0
- package/ui-dist/brands/opencode-logo-dark-square.svg +18 -0
- package/ui-dist/brands/opencode-logo-light-square.svg +18 -0
- package/ui-dist/favicon-16x16.png +0 -0
- package/ui-dist/favicon-32x32.png +0 -0
- package/ui-dist/favicon-dev-16x16.png +0 -0
- package/ui-dist/favicon-dev-32x32.png +0 -0
- package/ui-dist/favicon-dev.ico +0 -0
- package/ui-dist/favicon.ico +0 -0
- package/ui-dist/favicon.svg +1 -0
- package/ui-dist/index.html +61 -0
- package/ui-dist/rudder-logo.png +0 -0
- package/ui-dist/site.webmanifest +30 -0
- package/ui-dist/sw.js +42 -0
- package/ui-dist/worktree-favicon-16x16.png +0 -0
- package/ui-dist/worktree-favicon-32x32.png +0 -0
- package/ui-dist/worktree-favicon.ico +0 -0
- package/ui-dist/worktree-favicon.svg +1 -0
|
@@ -0,0 +1,426 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Citation Verification Script
|
|
4
|
+
|
|
5
|
+
Catches fabricated citations by checking:
|
|
6
|
+
1. DOI resolution (via doi.org)
|
|
7
|
+
2. Basic metadata matching (title similarity, year match)
|
|
8
|
+
3. URL accessibility verification
|
|
9
|
+
4. Hallucination pattern detection (generic titles, suspicious patterns)
|
|
10
|
+
5. Flags suspicious entries for manual review
|
|
11
|
+
|
|
12
|
+
Usage:
|
|
13
|
+
python verify_citations.py --report [path]
|
|
14
|
+
python verify_citations.py --report [path] --strict # Fail on any unverified
|
|
15
|
+
|
|
16
|
+
Does NOT require API keys - uses free DOI resolver and heuristics.
|
|
17
|
+
"""
|
|
18
|
+
|
|
19
|
+
import sys
|
|
20
|
+
import argparse
|
|
21
|
+
import re
|
|
22
|
+
from pathlib import Path
|
|
23
|
+
from typing import List, Dict, Tuple
|
|
24
|
+
from urllib import request, error
|
|
25
|
+
from urllib.parse import quote
|
|
26
|
+
import json
|
|
27
|
+
import time
|
|
28
|
+
from datetime import datetime
|
|
29
|
+
|
|
30
|
+
class CitationVerifier:
|
|
31
|
+
"""Verify citations in research report"""
|
|
32
|
+
|
|
33
|
+
def __init__(self, report_path: Path, strict_mode: bool = False):
|
|
34
|
+
self.report_path = report_path
|
|
35
|
+
self.strict_mode = strict_mode
|
|
36
|
+
self.content = self._read_report()
|
|
37
|
+
self.suspicious = []
|
|
38
|
+
self.verified = []
|
|
39
|
+
self.errors = []
|
|
40
|
+
|
|
41
|
+
# Hallucination detection patterns (2025 CiteGuard enhancement)
|
|
42
|
+
self.suspicious_patterns = [
|
|
43
|
+
# Generic academic-sounding but fake patterns
|
|
44
|
+
(r'^(A |An |The )?(Study|Analysis|Review|Survey|Investigation) (of|on|into)',
|
|
45
|
+
"Generic academic title pattern"),
|
|
46
|
+
(r'^(Recent|Current|Modern|Contemporary) (Advances|Developments|Trends) in',
|
|
47
|
+
"Generic 'advances' title pattern"),
|
|
48
|
+
# Too perfect, templated titles
|
|
49
|
+
(r'^[A-Z][a-z]+ [A-Z][a-z]+: A (Comprehensive|Complete|Systematic) (Review|Analysis|Guide)$',
|
|
50
|
+
"Too perfect, templated structure"),
|
|
51
|
+
]
|
|
52
|
+
|
|
53
|
+
def _read_report(self) -> str:
|
|
54
|
+
"""Read report file"""
|
|
55
|
+
try:
|
|
56
|
+
with open(self.report_path, 'r', encoding='utf-8') as f:
|
|
57
|
+
return f.read()
|
|
58
|
+
except Exception as e:
|
|
59
|
+
print(f"L ERROR: Cannot read report: {e}")
|
|
60
|
+
sys.exit(1)
|
|
61
|
+
|
|
62
|
+
def extract_bibliography(self) -> List[Dict]:
|
|
63
|
+
"""Extract bibliography entries from report"""
|
|
64
|
+
pattern = r'## Bibliography(.*?)(?=##|\Z)'
|
|
65
|
+
match = re.search(pattern, self.content, re.DOTALL | re.IGNORECASE)
|
|
66
|
+
|
|
67
|
+
if not match:
|
|
68
|
+
self.errors.append("No Bibliography section found")
|
|
69
|
+
return []
|
|
70
|
+
|
|
71
|
+
bib_section = match.group(1)
|
|
72
|
+
|
|
73
|
+
# Parse entries: [N] Author (Year). "Title". Venue. URL
|
|
74
|
+
entries = []
|
|
75
|
+
lines = bib_section.strip().split('\n')
|
|
76
|
+
|
|
77
|
+
current_entry = None
|
|
78
|
+
for line in lines:
|
|
79
|
+
line = line.strip()
|
|
80
|
+
if not line:
|
|
81
|
+
continue
|
|
82
|
+
|
|
83
|
+
# Check if starts with citation number [N]
|
|
84
|
+
match_num = re.match(r'^\[(\d+)\]\s+(.+)$', line)
|
|
85
|
+
if match_num:
|
|
86
|
+
if current_entry:
|
|
87
|
+
entries.append(current_entry)
|
|
88
|
+
|
|
89
|
+
num = match_num.group(1)
|
|
90
|
+
rest = match_num.group(2)
|
|
91
|
+
|
|
92
|
+
# Try to parse: Author (Year). "Title". Venue. URL
|
|
93
|
+
year_match = re.search(r'\((\d{4})\)', rest)
|
|
94
|
+
title_match = re.search(r'"([^"]+)"', rest)
|
|
95
|
+
doi_match = re.search(r'doi\.org/(10\.\S+)', rest)
|
|
96
|
+
url_match = re.search(r'https?://[^\s\)]+', rest)
|
|
97
|
+
|
|
98
|
+
current_entry = {
|
|
99
|
+
'num': num,
|
|
100
|
+
'raw': rest,
|
|
101
|
+
'year': year_match.group(1) if year_match else None,
|
|
102
|
+
'title': title_match.group(1) if title_match else None,
|
|
103
|
+
'doi': doi_match.group(1) if doi_match else None,
|
|
104
|
+
'url': url_match.group(0) if url_match else None
|
|
105
|
+
}
|
|
106
|
+
elif current_entry:
|
|
107
|
+
# Multi-line entry, append to raw
|
|
108
|
+
current_entry['raw'] += ' ' + line
|
|
109
|
+
|
|
110
|
+
if current_entry:
|
|
111
|
+
entries.append(current_entry)
|
|
112
|
+
|
|
113
|
+
return entries
|
|
114
|
+
|
|
115
|
+
def verify_doi(self, doi: str) -> Tuple[bool, Dict]:
|
|
116
|
+
"""
|
|
117
|
+
Verify DOI exists and get metadata.
|
|
118
|
+
Returns (success, metadata_dict)
|
|
119
|
+
"""
|
|
120
|
+
if not doi:
|
|
121
|
+
return False, {}
|
|
122
|
+
|
|
123
|
+
try:
|
|
124
|
+
# Use content negotiation to get JSON metadata
|
|
125
|
+
url = f"https://doi.org/{quote(doi)}"
|
|
126
|
+
req = request.Request(url)
|
|
127
|
+
req.add_header('Accept', 'application/vnd.citationstyles.csl+json')
|
|
128
|
+
|
|
129
|
+
with request.urlopen(req, timeout=10) as response:
|
|
130
|
+
data = json.loads(response.read().decode('utf-8'))
|
|
131
|
+
|
|
132
|
+
return True, {
|
|
133
|
+
'title': data.get('title', ''),
|
|
134
|
+
'year': data.get('issued', {}).get('date-parts', [[None]])[0][0],
|
|
135
|
+
'authors': [
|
|
136
|
+
f"{a.get('family', '')} {a.get('given', '')}"
|
|
137
|
+
for a in data.get('author', [])
|
|
138
|
+
],
|
|
139
|
+
'venue': data.get('container-title', '')
|
|
140
|
+
}
|
|
141
|
+
except error.HTTPError as e:
|
|
142
|
+
if e.code == 404:
|
|
143
|
+
return False, {'error': 'DOI not found (404)'}
|
|
144
|
+
return False, {'error': f'HTTP {e.code}'}
|
|
145
|
+
except Exception as e:
|
|
146
|
+
return False, {'error': str(e)}
|
|
147
|
+
|
|
148
|
+
def verify_url(self, url: str) -> Tuple[bool, str]:
|
|
149
|
+
"""
|
|
150
|
+
Verify URL is accessible (2025 CiteGuard enhancement).
|
|
151
|
+
Returns (accessible, status_message)
|
|
152
|
+
"""
|
|
153
|
+
if not url:
|
|
154
|
+
return False, "No URL"
|
|
155
|
+
|
|
156
|
+
try:
|
|
157
|
+
# HEAD request to check accessibility without downloading
|
|
158
|
+
req = request.Request(url, method='HEAD')
|
|
159
|
+
req.add_header('User-Agent', 'Mozilla/5.0 (Research Citation Verifier)')
|
|
160
|
+
|
|
161
|
+
with request.urlopen(req, timeout=10) as response:
|
|
162
|
+
if response.status == 200:
|
|
163
|
+
return True, "URL accessible"
|
|
164
|
+
else:
|
|
165
|
+
return False, f"HTTP {response.status}"
|
|
166
|
+
except error.HTTPError as e:
|
|
167
|
+
return False, f"HTTP {e.code}"
|
|
168
|
+
except error.URLError as e:
|
|
169
|
+
return False, f"URL error: {e.reason}"
|
|
170
|
+
except Exception as e:
|
|
171
|
+
return False, f"Connection error: {str(e)[:50]}"
|
|
172
|
+
|
|
173
|
+
def detect_hallucination_patterns(self, entry: Dict) -> List[str]:
|
|
174
|
+
"""
|
|
175
|
+
Detect common LLM hallucination patterns in citations (2025 CiteGuard).
|
|
176
|
+
Returns list of detected issues.
|
|
177
|
+
"""
|
|
178
|
+
issues = []
|
|
179
|
+
title = entry.get('title', '')
|
|
180
|
+
|
|
181
|
+
if not title:
|
|
182
|
+
return issues
|
|
183
|
+
|
|
184
|
+
# Check against suspicious patterns
|
|
185
|
+
for pattern, description in self.suspicious_patterns:
|
|
186
|
+
if re.match(pattern, title, re.IGNORECASE):
|
|
187
|
+
issues.append(f"Suspicious title pattern: {description}")
|
|
188
|
+
|
|
189
|
+
# Check for overly generic titles
|
|
190
|
+
generic_words = ['overview', 'introduction', 'guide', 'handbook', 'manual']
|
|
191
|
+
if any(word in title.lower() for word in generic_words) and len(title.split()) < 5:
|
|
192
|
+
issues.append("Very generic short title")
|
|
193
|
+
|
|
194
|
+
# Check for placeholder-like titles
|
|
195
|
+
if any(x in title.lower() for x in ['tbd', 'todo', 'placeholder', 'example']):
|
|
196
|
+
issues.append("Placeholder text in title")
|
|
197
|
+
|
|
198
|
+
# Check for inconsistent metadata
|
|
199
|
+
if entry.get('year'):
|
|
200
|
+
year = int(entry['year'])
|
|
201
|
+
current_year = datetime.now().year
|
|
202
|
+
# Very recent without DOI or URL is suspicious
|
|
203
|
+
if year >= current_year - 1 and not entry.get('doi') and not entry.get('url'):
|
|
204
|
+
issues.append(f"Recent year ({year}) with no verification method")
|
|
205
|
+
# Future year is definitely wrong
|
|
206
|
+
if year > current_year:
|
|
207
|
+
issues.append(f"Future year: {year} (current: {current_year})")
|
|
208
|
+
# Very old with modern phrasing is suspicious
|
|
209
|
+
if year < 2000 and any(word in title.lower() for word in ['ai', 'llm', 'gpt', 'transformer']):
|
|
210
|
+
issues.append(f"Anachronistic: pre-2000 ({year}) citation mentioning modern AI terms")
|
|
211
|
+
|
|
212
|
+
return issues
|
|
213
|
+
|
|
214
|
+
def check_title_similarity(self, title1: str, title2: str) -> float:
|
|
215
|
+
"""
|
|
216
|
+
Simple title similarity check (word overlap).
|
|
217
|
+
Returns score 0.0-1.0
|
|
218
|
+
"""
|
|
219
|
+
if not title1 or not title2:
|
|
220
|
+
return 0.0
|
|
221
|
+
|
|
222
|
+
# Normalize: lowercase, remove punctuation, split
|
|
223
|
+
def normalize(s):
|
|
224
|
+
s = s.lower()
|
|
225
|
+
s = re.sub(r'[^\w\s]', ' ', s)
|
|
226
|
+
return set(s.split())
|
|
227
|
+
|
|
228
|
+
words1 = normalize(title1)
|
|
229
|
+
words2 = normalize(title2)
|
|
230
|
+
|
|
231
|
+
if not words1 or not words2:
|
|
232
|
+
return 0.0
|
|
233
|
+
|
|
234
|
+
overlap = len(words1 & words2)
|
|
235
|
+
total = len(words1 | words2)
|
|
236
|
+
|
|
237
|
+
return overlap / total if total > 0 else 0.0
|
|
238
|
+
|
|
239
|
+
def verify_entry(self, entry: Dict) -> Dict:
|
|
240
|
+
"""Verify a single bibliography entry (Enhanced 2025 with CiteGuard)"""
|
|
241
|
+
result = {
|
|
242
|
+
'num': entry['num'],
|
|
243
|
+
'status': 'unknown',
|
|
244
|
+
'issues': [],
|
|
245
|
+
'metadata': {},
|
|
246
|
+
'verification_methods': []
|
|
247
|
+
}
|
|
248
|
+
|
|
249
|
+
# STEP 1: Run hallucination detection (CiteGuard 2025)
|
|
250
|
+
hallucination_issues = self.detect_hallucination_patterns(entry)
|
|
251
|
+
if hallucination_issues:
|
|
252
|
+
result['issues'].extend(hallucination_issues)
|
|
253
|
+
result['status'] = 'suspicious'
|
|
254
|
+
|
|
255
|
+
# STEP 2: Has DOI?
|
|
256
|
+
if entry['doi']:
|
|
257
|
+
print(f" [{entry['num']}] Checking DOI {entry['doi']}...", end=' ')
|
|
258
|
+
success, metadata = self.verify_doi(entry['doi'])
|
|
259
|
+
|
|
260
|
+
if success:
|
|
261
|
+
result['metadata'] = metadata
|
|
262
|
+
result['status'] = 'verified'
|
|
263
|
+
print("")
|
|
264
|
+
|
|
265
|
+
# Check title similarity if we have both
|
|
266
|
+
if entry['title'] and metadata.get('title'):
|
|
267
|
+
similarity = self.check_title_similarity(
|
|
268
|
+
entry['title'],
|
|
269
|
+
metadata['title']
|
|
270
|
+
)
|
|
271
|
+
|
|
272
|
+
if similarity < 0.5:
|
|
273
|
+
result['issues'].append(
|
|
274
|
+
f"Title mismatch (similarity: {similarity:.1%})"
|
|
275
|
+
)
|
|
276
|
+
result['status'] = 'suspicious'
|
|
277
|
+
|
|
278
|
+
# Check year match
|
|
279
|
+
if entry['year'] and metadata.get('year'):
|
|
280
|
+
if int(entry['year']) != int(metadata['year']):
|
|
281
|
+
result['issues'].append(
|
|
282
|
+
f"Year mismatch: report says {entry['year']}, DOI says {metadata['year']}"
|
|
283
|
+
)
|
|
284
|
+
result['status'] = 'suspicious'
|
|
285
|
+
|
|
286
|
+
else:
|
|
287
|
+
print(f"✗ {metadata.get('error', 'Failed')}")
|
|
288
|
+
result['status'] = 'unverified'
|
|
289
|
+
result['issues'].append(f"DOI resolution failed: {metadata.get('error', 'unknown')}")
|
|
290
|
+
|
|
291
|
+
# STEP 3: Check URL accessibility (if no DOI or DOI failed)
|
|
292
|
+
if entry['url'] and result['status'] != 'verified':
|
|
293
|
+
url_ok, url_status = self.verify_url(entry['url'])
|
|
294
|
+
if url_ok:
|
|
295
|
+
result['verification_methods'].append('URL')
|
|
296
|
+
# Upgrade status if URL verifies
|
|
297
|
+
if result['status'] in ['unknown', 'no_doi', 'unverified']:
|
|
298
|
+
result['status'] = 'url_verified'
|
|
299
|
+
print(f" [{entry['num']}] URL accessible ✓")
|
|
300
|
+
else:
|
|
301
|
+
result['issues'].append(f"URL check failed: {url_status}")
|
|
302
|
+
|
|
303
|
+
# STEP 4: Final fallback - no verification method
|
|
304
|
+
if not entry['doi'] and not entry['url']:
|
|
305
|
+
if 'No DOI provided' not in ' '.join(result['issues']):
|
|
306
|
+
result['issues'].append("No DOI or URL - cannot verify")
|
|
307
|
+
result['status'] = 'suspicious'
|
|
308
|
+
|
|
309
|
+
return result
|
|
310
|
+
|
|
311
|
+
def verify_all(self):
|
|
312
|
+
"""Verify all bibliography entries"""
|
|
313
|
+
print(f"\n{'='*60}")
|
|
314
|
+
print(f"CITATION VERIFICATION: {self.report_path.name}")
|
|
315
|
+
print(f"{'='*60}\n")
|
|
316
|
+
|
|
317
|
+
entries = self.extract_bibliography()
|
|
318
|
+
|
|
319
|
+
if not entries:
|
|
320
|
+
print("L No bibliography entries found\n")
|
|
321
|
+
return False
|
|
322
|
+
|
|
323
|
+
print(f"Found {len(entries)} citations\n")
|
|
324
|
+
|
|
325
|
+
results = []
|
|
326
|
+
for entry in entries:
|
|
327
|
+
result = self.verify_entry(entry)
|
|
328
|
+
results.append(result)
|
|
329
|
+
|
|
330
|
+
# Rate limiting
|
|
331
|
+
time.sleep(0.5)
|
|
332
|
+
|
|
333
|
+
# Summarize
|
|
334
|
+
print(f"\n{'='*60}")
|
|
335
|
+
print(f"VERIFICATION SUMMARY")
|
|
336
|
+
print(f"{'='*60}\n")
|
|
337
|
+
|
|
338
|
+
verified = [r for r in results if r['status'] == 'verified']
|
|
339
|
+
url_verified = [r for r in results if r['status'] == 'url_verified']
|
|
340
|
+
suspicious = [r for r in results if r['status'] == 'suspicious']
|
|
341
|
+
unverified = [r for r in results if r['status'] in ['unverified', 'no_doi', 'unknown']]
|
|
342
|
+
|
|
343
|
+
print(f'DOI Verified: {len(verified)}/{len(results)}')
|
|
344
|
+
print(f'URL Verified: {len(url_verified)}/{len(results)}')
|
|
345
|
+
print(f'Suspicious: {len(suspicious)}/{len(results)}')
|
|
346
|
+
print(f'Unverified: {len(unverified)}/{len(results)}')
|
|
347
|
+
print()
|
|
348
|
+
|
|
349
|
+
if suspicious:
|
|
350
|
+
print('SUSPICIOUS CITATIONS (Manual Review Needed):')
|
|
351
|
+
for r in suspicious:
|
|
352
|
+
print(f"\n [{r['num']}]")
|
|
353
|
+
for issue in r['issues']:
|
|
354
|
+
print(f" - {issue}")
|
|
355
|
+
print()
|
|
356
|
+
|
|
357
|
+
if unverified and len(unverified) > 0:
|
|
358
|
+
print('UNVERIFIED CITATIONS (Could not check):')
|
|
359
|
+
for r in unverified:
|
|
360
|
+
print(f" [{r['num']}] {r['issues'][0] if r['issues'] else 'Unknown'}")
|
|
361
|
+
print()
|
|
362
|
+
|
|
363
|
+
# Decision (Enhanced 2025 - includes URL-verified as acceptable)
|
|
364
|
+
total_verified = len(verified) + len(url_verified)
|
|
365
|
+
|
|
366
|
+
if suspicious:
|
|
367
|
+
print('WARNING: Suspicious citations detected')
|
|
368
|
+
if self.strict_mode:
|
|
369
|
+
print(' STRICT MODE: Failing due to suspicious citations')
|
|
370
|
+
return False
|
|
371
|
+
else:
|
|
372
|
+
print(' (Continuing in non-strict mode)')
|
|
373
|
+
|
|
374
|
+
if self.strict_mode and unverified:
|
|
375
|
+
print('STRICT MODE: Unverified citations found')
|
|
376
|
+
return False
|
|
377
|
+
|
|
378
|
+
if total_verified / len(results) < 0.5:
|
|
379
|
+
print('WARNING: Less than 50% citations verified')
|
|
380
|
+
return True # Pass with warning
|
|
381
|
+
else:
|
|
382
|
+
print('CITATION VERIFICATION PASSED')
|
|
383
|
+
return True
|
|
384
|
+
|
|
385
|
+
|
|
386
|
+
def main():
|
|
387
|
+
parser = argparse.ArgumentParser(
|
|
388
|
+
description="Verify citations in research report",
|
|
389
|
+
formatter_class=argparse.RawDescriptionHelpFormatter,
|
|
390
|
+
epilog="""
|
|
391
|
+
Examples:
|
|
392
|
+
python verify_citations.py --report report.md
|
|
393
|
+
|
|
394
|
+
Note: Requires internet connection to check DOIs.
|
|
395
|
+
Uses free DOI resolver - no API key needed.
|
|
396
|
+
"""
|
|
397
|
+
)
|
|
398
|
+
|
|
399
|
+
parser.add_argument(
|
|
400
|
+
'--report', '-r',
|
|
401
|
+
type=str,
|
|
402
|
+
required=True,
|
|
403
|
+
help='Path to research report markdown file'
|
|
404
|
+
)
|
|
405
|
+
|
|
406
|
+
parser.add_argument(
|
|
407
|
+
'--strict',
|
|
408
|
+
action='store_true',
|
|
409
|
+
help='Strict mode: fail on any unverified or suspicious citations'
|
|
410
|
+
)
|
|
411
|
+
|
|
412
|
+
args = parser.parse_args()
|
|
413
|
+
report_path = Path(args.report)
|
|
414
|
+
|
|
415
|
+
if not report_path.exists():
|
|
416
|
+
print(f"ERROR: Report file not found: {report_path}")
|
|
417
|
+
sys.exit(1)
|
|
418
|
+
|
|
419
|
+
verifier = CitationVerifier(report_path, strict_mode=args.strict)
|
|
420
|
+
passed = verifier.verify_all()
|
|
421
|
+
|
|
422
|
+
sys.exit(0 if passed else 1)
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
if __name__ == '__main__':
|
|
426
|
+
main()
|
|
@@ -0,0 +1,220 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
HTML Report Verification Script
|
|
4
|
+
Validates that HTML reports are properly generated with all sections from MD
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
import argparse
|
|
8
|
+
import re
|
|
9
|
+
from pathlib import Path
|
|
10
|
+
from typing import List, Tuple
|
|
11
|
+
|
|
12
|
+
|
|
13
|
+
class HTMLVerifier:
|
|
14
|
+
"""Verify HTML research reports"""
|
|
15
|
+
|
|
16
|
+
def __init__(self, html_path: Path, md_path: Path):
|
|
17
|
+
self.html_path = html_path
|
|
18
|
+
self.md_path = md_path
|
|
19
|
+
self.errors = []
|
|
20
|
+
self.warnings = []
|
|
21
|
+
|
|
22
|
+
def verify(self) -> bool:
|
|
23
|
+
"""
|
|
24
|
+
Run all verification checks
|
|
25
|
+
|
|
26
|
+
Returns:
|
|
27
|
+
True if all checks pass, False otherwise
|
|
28
|
+
"""
|
|
29
|
+
print(f"\n{'='*60}")
|
|
30
|
+
print(f"HTML REPORT VERIFICATION")
|
|
31
|
+
print(f"{'='*60}\n")
|
|
32
|
+
|
|
33
|
+
print(f"HTML File: {self.html_path}")
|
|
34
|
+
print(f"MD File: {self.md_path}\n")
|
|
35
|
+
|
|
36
|
+
# Read files
|
|
37
|
+
try:
|
|
38
|
+
html_content = self.html_path.read_text()
|
|
39
|
+
md_content = self.md_path.read_text()
|
|
40
|
+
except Exception as e:
|
|
41
|
+
self.errors.append(f"Failed to read files: {e}")
|
|
42
|
+
return False
|
|
43
|
+
|
|
44
|
+
# Run checks
|
|
45
|
+
self._check_sections(html_content, md_content)
|
|
46
|
+
self._check_no_placeholders(html_content)
|
|
47
|
+
self._check_no_emojis(html_content)
|
|
48
|
+
self._check_structure(html_content)
|
|
49
|
+
self._check_citations(html_content, md_content)
|
|
50
|
+
self._check_bibliography(html_content, md_content)
|
|
51
|
+
|
|
52
|
+
# Report results
|
|
53
|
+
self._print_results()
|
|
54
|
+
|
|
55
|
+
return len(self.errors) == 0
|
|
56
|
+
|
|
57
|
+
def _check_sections(self, html: str, md: str):
|
|
58
|
+
"""Verify all markdown sections are present in HTML"""
|
|
59
|
+
# Extract section headings from markdown
|
|
60
|
+
md_sections = re.findall(r'^## (.+)$', md, re.MULTILINE)
|
|
61
|
+
|
|
62
|
+
# Extract sections from HTML
|
|
63
|
+
html_sections = re.findall(r'<h2 class="section-title">(.+?)</h2>', html)
|
|
64
|
+
|
|
65
|
+
# Check if we have placeholder sections like <div class="section">#</div>
|
|
66
|
+
placeholder_sections = re.findall(r'<div class="section">#</div>', html)
|
|
67
|
+
|
|
68
|
+
if placeholder_sections:
|
|
69
|
+
self.errors.append(
|
|
70
|
+
f"Found {len(placeholder_sections)} placeholder sections (empty '#' divs) - content not converted properly"
|
|
71
|
+
)
|
|
72
|
+
|
|
73
|
+
# Compare section counts
|
|
74
|
+
if len(md_sections) > len(html_sections) + 1: # +1 for bibliography which is separate
|
|
75
|
+
self.errors.append(
|
|
76
|
+
f"Section count mismatch: MD has {len(md_sections)} sections, HTML has only {len(html_sections)} + bibliography"
|
|
77
|
+
)
|
|
78
|
+
missing = set(md_sections) - set(html_sections)
|
|
79
|
+
if missing:
|
|
80
|
+
self.errors.append(f"Missing sections in HTML: {missing}")
|
|
81
|
+
|
|
82
|
+
# Verify Executive Summary is present
|
|
83
|
+
if "Executive Summary" in md and "Executive Summary" not in html:
|
|
84
|
+
self.errors.append("Executive Summary missing from HTML")
|
|
85
|
+
|
|
86
|
+
def _check_no_placeholders(self, html: str):
|
|
87
|
+
"""Check for common placeholders that shouldn't be in final report"""
|
|
88
|
+
placeholders = [
|
|
89
|
+
'{{TITLE}}', '{{DATE}}', '{{CONTENT}}', '{{BIBLIOGRAPHY}}',
|
|
90
|
+
'{{METRICS_DASHBOARD}}', '{{SOURCE_COUNT}}', 'TODO', 'TBD',
|
|
91
|
+
'PLACEHOLDER', 'FIXME'
|
|
92
|
+
]
|
|
93
|
+
|
|
94
|
+
found = []
|
|
95
|
+
for placeholder in placeholders:
|
|
96
|
+
if placeholder in html:
|
|
97
|
+
found.append(placeholder)
|
|
98
|
+
|
|
99
|
+
if found:
|
|
100
|
+
self.errors.append(f"Found unreplaced placeholders: {', '.join(found)}")
|
|
101
|
+
|
|
102
|
+
def _check_no_emojis(self, html: str):
|
|
103
|
+
"""Verify no emojis are present in HTML"""
|
|
104
|
+
# Common emoji patterns
|
|
105
|
+
emoji_pattern = re.compile(
|
|
106
|
+
"["
|
|
107
|
+
"\U0001F600-\U0001F64F" # emoticons
|
|
108
|
+
"\U0001F300-\U0001F5FF" # symbols & pictographs
|
|
109
|
+
"\U0001F680-\U0001F6FF" # transport & map symbols
|
|
110
|
+
"\U0001F1E0-\U0001F1FF" # flags
|
|
111
|
+
"\U00002702-\U000027B0"
|
|
112
|
+
"\U000024C2-\U0001F251"
|
|
113
|
+
"]+",
|
|
114
|
+
flags=re.UNICODE
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
emojis = emoji_pattern.findall(html)
|
|
118
|
+
if emojis:
|
|
119
|
+
unique_emojis = set(emojis)
|
|
120
|
+
self.errors.append(f"Found {len(emojis)} emojis in HTML (should be none): {unique_emojis}")
|
|
121
|
+
|
|
122
|
+
def _check_structure(self, html: str):
|
|
123
|
+
"""Verify HTML has proper structure"""
|
|
124
|
+
required_elements = [
|
|
125
|
+
('<html', 'HTML tag'),
|
|
126
|
+
('<head', 'head tag'),
|
|
127
|
+
('<body', 'body tag'),
|
|
128
|
+
('<title>', 'title tag'),
|
|
129
|
+
('class="header"', 'header section'),
|
|
130
|
+
('class="content"', 'content section'),
|
|
131
|
+
('class="bibliography"', 'bibliography section'),
|
|
132
|
+
]
|
|
133
|
+
|
|
134
|
+
for element, name in required_elements:
|
|
135
|
+
if element not in html:
|
|
136
|
+
self.errors.append(f"Missing {name} in HTML")
|
|
137
|
+
|
|
138
|
+
# Check for unclosed tags (basic check)
|
|
139
|
+
open_divs = html.count('<div')
|
|
140
|
+
close_divs = html.count('</div>')
|
|
141
|
+
|
|
142
|
+
if abs(open_divs - close_divs) > 2: # Allow small discrepancy
|
|
143
|
+
self.warnings.append(
|
|
144
|
+
f"Possible unclosed divs: {open_divs} opening tags, {close_divs} closing tags"
|
|
145
|
+
)
|
|
146
|
+
|
|
147
|
+
def _check_citations(self, html: str, md: str):
|
|
148
|
+
"""Verify citations are present"""
|
|
149
|
+
# Extract citations from markdown
|
|
150
|
+
md_citations = set(re.findall(r'\[(\d+)\]', md))
|
|
151
|
+
|
|
152
|
+
# Extract citations from HTML (excluding bibliography)
|
|
153
|
+
html_content = html.split('class="bibliography"')[0] if 'class="bibliography"' in html else html
|
|
154
|
+
html_citations = set(re.findall(r'\[(\d+)\]', html_content))
|
|
155
|
+
|
|
156
|
+
if len(md_citations) > 0 and len(html_citations) == 0:
|
|
157
|
+
self.errors.append("No citations found in HTML content (but present in MD)")
|
|
158
|
+
|
|
159
|
+
if len(md_citations) > len(html_citations) * 1.5: # Allow some variation
|
|
160
|
+
self.warnings.append(
|
|
161
|
+
f"Fewer citations in HTML ({len(html_citations)}) than MD ({len(md_citations)})"
|
|
162
|
+
)
|
|
163
|
+
|
|
164
|
+
def _check_bibliography(self, html: str, md: str):
|
|
165
|
+
"""Verify bibliography is present and formatted"""
|
|
166
|
+
if '## Bibliography' in md:
|
|
167
|
+
if 'class="bibliography"' not in html:
|
|
168
|
+
self.errors.append("Bibliography section missing from HTML")
|
|
169
|
+
elif 'class="bib-entry"' not in html:
|
|
170
|
+
self.warnings.append("Bibliography present but entries not properly formatted")
|
|
171
|
+
|
|
172
|
+
def _print_results(self):
|
|
173
|
+
"""Print verification results"""
|
|
174
|
+
print(f"\n{'-'*60}")
|
|
175
|
+
print("VERIFICATION RESULTS")
|
|
176
|
+
print(f"{'-'*60}\n")
|
|
177
|
+
|
|
178
|
+
if self.errors:
|
|
179
|
+
print(f"❌ ERRORS ({len(self.errors)}):")
|
|
180
|
+
for i, error in enumerate(self.errors, 1):
|
|
181
|
+
print(f" {i}. {error}")
|
|
182
|
+
print()
|
|
183
|
+
|
|
184
|
+
if self.warnings:
|
|
185
|
+
print(f"⚠️ WARNINGS ({len(self.warnings)}):")
|
|
186
|
+
for i, warning in enumerate(self.warnings, 1):
|
|
187
|
+
print(f" {i}. {warning}")
|
|
188
|
+
print()
|
|
189
|
+
|
|
190
|
+
if not self.errors and not self.warnings:
|
|
191
|
+
print("✅ All checks passed! HTML report is valid.")
|
|
192
|
+
print()
|
|
193
|
+
|
|
194
|
+
print(f"{'-'*60}\n")
|
|
195
|
+
|
|
196
|
+
|
|
197
|
+
def main():
|
|
198
|
+
"""Main entry point"""
|
|
199
|
+
parser = argparse.ArgumentParser(description='Verify HTML research report')
|
|
200
|
+
parser.add_argument('--html', type=Path, required=True, help='Path to HTML report')
|
|
201
|
+
parser.add_argument('--md', type=Path, required=True, help='Path to markdown report')
|
|
202
|
+
|
|
203
|
+
args = parser.parse_args()
|
|
204
|
+
|
|
205
|
+
if not args.html.exists():
|
|
206
|
+
print(f"Error: HTML file not found: {args.html}")
|
|
207
|
+
return 1
|
|
208
|
+
|
|
209
|
+
if not args.md.exists():
|
|
210
|
+
print(f"Error: Markdown file not found: {args.md}")
|
|
211
|
+
return 1
|
|
212
|
+
|
|
213
|
+
verifier = HTMLVerifier(args.html, args.md)
|
|
214
|
+
success = verifier.verify()
|
|
215
|
+
|
|
216
|
+
return 0 if success else 1
|
|
217
|
+
|
|
218
|
+
|
|
219
|
+
if __name__ == "__main__":
|
|
220
|
+
exit(main())
|