verbolab 0.1.0-alpha.1
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 +21 -0
- package/README.md +71 -0
- package/dist/bin/verbo.d.ts +3 -0
- package/dist/bin/verbo.d.ts.map +1 -0
- package/dist/bin/verbo.js +1156 -0
- package/dist/bin/verbo.js.map +1 -0
- package/dist/relay/index.d.ts +2 -0
- package/dist/relay/index.d.ts.map +1 -0
- package/dist/relay/index.js +15 -0
- package/dist/relay/index.js.map +1 -0
- package/dist/src/agent/agent-launcher.d.ts +64 -0
- package/dist/src/agent/agent-launcher.d.ts.map +1 -0
- package/dist/src/agent/agent-launcher.js +326 -0
- package/dist/src/agent/agent-launcher.js.map +1 -0
- package/dist/src/agent/agent-monitor.d.ts +16 -0
- package/dist/src/agent/agent-monitor.d.ts.map +1 -0
- package/dist/src/agent/agent-monitor.js +41 -0
- package/dist/src/agent/agent-monitor.js.map +1 -0
- package/dist/src/agent/fun-names.d.ts +9 -0
- package/dist/src/agent/fun-names.d.ts.map +1 -0
- package/dist/src/agent/fun-names.js +118 -0
- package/dist/src/agent/fun-names.js.map +1 -0
- package/dist/src/agent/mcp-shim.d.ts +45 -0
- package/dist/src/agent/mcp-shim.d.ts.map +1 -0
- package/dist/src/agent/mcp-shim.js +192 -0
- package/dist/src/agent/mcp-shim.js.map +1 -0
- package/dist/src/agent/personas.d.ts +47 -0
- package/dist/src/agent/personas.d.ts.map +1 -0
- package/dist/src/agent/personas.js +86 -0
- package/dist/src/agent/personas.js.map +1 -0
- package/dist/src/agent/provider-detection.d.ts +21 -0
- package/dist/src/agent/provider-detection.d.ts.map +1 -0
- package/dist/src/agent/provider-detection.js +47 -0
- package/dist/src/agent/provider-detection.js.map +1 -0
- package/dist/src/agent/providers/claude-provider.d.ts +3 -0
- package/dist/src/agent/providers/claude-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/claude-provider.js +119 -0
- package/dist/src/agent/providers/claude-provider.js.map +1 -0
- package/dist/src/agent/providers/gemini-provider.d.ts +13 -0
- package/dist/src/agent/providers/gemini-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/gemini-provider.js +143 -0
- package/dist/src/agent/providers/gemini-provider.js.map +1 -0
- package/dist/src/agent/providers/openai-provider.d.ts +3 -0
- package/dist/src/agent/providers/openai-provider.d.ts.map +1 -0
- package/dist/src/agent/providers/openai-provider.js +127 -0
- package/dist/src/agent/providers/openai-provider.js.map +1 -0
- package/dist/src/agent/providers/registry.d.ts +19 -0
- package/dist/src/agent/providers/registry.d.ts.map +1 -0
- package/dist/src/agent/providers/registry.js +30 -0
- package/dist/src/agent/providers/registry.js.map +1 -0
- package/dist/src/agent/providers/types.d.ts +118 -0
- package/dist/src/agent/providers/types.d.ts.map +1 -0
- package/dist/src/agent/providers/types.js +2 -0
- package/dist/src/agent/providers/types.js.map +1 -0
- package/dist/src/approval/approval-server.d.ts +17 -0
- package/dist/src/approval/approval-server.d.ts.map +1 -0
- package/dist/src/approval/approval-server.js +90 -0
- package/dist/src/approval/approval-server.js.map +1 -0
- package/dist/src/approval/approval-store.d.ts +29 -0
- package/dist/src/approval/approval-store.d.ts.map +1 -0
- package/dist/src/approval/approval-store.js +94 -0
- package/dist/src/approval/approval-store.js.map +1 -0
- package/dist/src/auth/auth-store.d.ts +18 -0
- package/dist/src/auth/auth-store.d.ts.map +1 -0
- package/dist/src/auth/auth-store.js +34 -0
- package/dist/src/auth/auth-store.js.map +1 -0
- package/dist/src/auth/device-code-client.d.ts +32 -0
- package/dist/src/auth/device-code-client.d.ts.map +1 -0
- package/dist/src/auth/device-code-client.js +41 -0
- package/dist/src/auth/device-code-client.js.map +1 -0
- package/dist/src/auth/plan-enforcer.d.ts +8 -0
- package/dist/src/auth/plan-enforcer.d.ts.map +1 -0
- package/dist/src/auth/plan-enforcer.js +14 -0
- package/dist/src/auth/plan-enforcer.js.map +1 -0
- package/dist/src/commands/audit.d.ts +7 -0
- package/dist/src/commands/audit.d.ts.map +1 -0
- package/dist/src/commands/audit.js +92 -0
- package/dist/src/commands/audit.js.map +1 -0
- package/dist/src/commands/team.d.ts +48 -0
- package/dist/src/commands/team.d.ts.map +1 -0
- package/dist/src/commands/team.js +175 -0
- package/dist/src/commands/team.js.map +1 -0
- package/dist/src/config/verbo-config.d.ts +43 -0
- package/dist/src/config/verbo-config.d.ts.map +1 -0
- package/dist/src/config/verbo-config.js +111 -0
- package/dist/src/config/verbo-config.js.map +1 -0
- package/dist/src/core/agent-session-store.d.ts +69 -0
- package/dist/src/core/agent-session-store.d.ts.map +1 -0
- package/dist/src/core/agent-session-store.js +168 -0
- package/dist/src/core/agent-session-store.js.map +1 -0
- package/dist/src/core/audit-log-store.d.ts +33 -0
- package/dist/src/core/audit-log-store.d.ts.map +1 -0
- package/dist/src/core/audit-log-store.js +104 -0
- package/dist/src/core/audit-log-store.js.map +1 -0
- package/dist/src/core/compliance.d.ts +50 -0
- package/dist/src/core/compliance.d.ts.map +1 -0
- package/dist/src/core/compliance.js +59 -0
- package/dist/src/core/compliance.js.map +1 -0
- package/dist/src/core/conflict-detector.d.ts +19 -0
- package/dist/src/core/conflict-detector.d.ts.map +1 -0
- package/dist/src/core/conflict-detector.js +87 -0
- package/dist/src/core/conflict-detector.js.map +1 -0
- package/dist/src/core/conflict-enforcer.d.ts +37 -0
- package/dist/src/core/conflict-enforcer.d.ts.map +1 -0
- package/dist/src/core/conflict-enforcer.js +139 -0
- package/dist/src/core/conflict-enforcer.js.map +1 -0
- package/dist/src/core/cost-store.d.ts +55 -0
- package/dist/src/core/cost-store.d.ts.map +1 -0
- package/dist/src/core/cost-store.js +140 -0
- package/dist/src/core/cost-store.js.map +1 -0
- package/dist/src/core/hot-files.d.ts +19 -0
- package/dist/src/core/hot-files.d.ts.map +1 -0
- package/dist/src/core/hot-files.js +64 -0
- package/dist/src/core/hot-files.js.map +1 -0
- package/dist/src/core/human-action-store.d.ts +33 -0
- package/dist/src/core/human-action-store.d.ts.map +1 -0
- package/dist/src/core/human-action-store.js +92 -0
- package/dist/src/core/human-action-store.js.map +1 -0
- package/dist/src/core/learning-store.d.ts +32 -0
- package/dist/src/core/learning-store.d.ts.map +1 -0
- package/dist/src/core/learning-store.js +95 -0
- package/dist/src/core/learning-store.js.map +1 -0
- package/dist/src/core/merge-queue.d.ts +28 -0
- package/dist/src/core/merge-queue.d.ts.map +1 -0
- package/dist/src/core/merge-queue.js +92 -0
- package/dist/src/core/merge-queue.js.map +1 -0
- package/dist/src/core/notification-service.d.ts +13 -0
- package/dist/src/core/notification-service.d.ts.map +1 -0
- package/dist/src/core/notification-service.js +126 -0
- package/dist/src/core/notification-service.js.map +1 -0
- package/dist/src/core/notifications.d.ts +10 -0
- package/dist/src/core/notifications.d.ts.map +1 -0
- package/dist/src/core/notifications.js +33 -0
- package/dist/src/core/notifications.js.map +1 -0
- package/dist/src/core/orchestrator-store.d.ts +44 -0
- package/dist/src/core/orchestrator-store.d.ts.map +1 -0
- package/dist/src/core/orchestrator-store.js +69 -0
- package/dist/src/core/orchestrator-store.js.map +1 -0
- package/dist/src/core/parallelizer.d.ts +47 -0
- package/dist/src/core/parallelizer.d.ts.map +1 -0
- package/dist/src/core/parallelizer.js +224 -0
- package/dist/src/core/parallelizer.js.map +1 -0
- package/dist/src/core/pipeline-rollback.d.ts +29 -0
- package/dist/src/core/pipeline-rollback.d.ts.map +1 -0
- package/dist/src/core/pipeline-rollback.js +84 -0
- package/dist/src/core/pipeline-rollback.js.map +1 -0
- package/dist/src/core/pipeline-runner.d.ts +73 -0
- package/dist/src/core/pipeline-runner.d.ts.map +1 -0
- package/dist/src/core/pipeline-runner.js +165 -0
- package/dist/src/core/pipeline-runner.js.map +1 -0
- package/dist/src/core/pr-creator.d.ts +22 -0
- package/dist/src/core/pr-creator.d.ts.map +1 -0
- package/dist/src/core/pr-creator.js +55 -0
- package/dist/src/core/pr-creator.js.map +1 -0
- package/dist/src/core/rbac.d.ts +27 -0
- package/dist/src/core/rbac.d.ts.map +1 -0
- package/dist/src/core/rbac.js +76 -0
- package/dist/src/core/rbac.js.map +1 -0
- package/dist/src/core/startup-cleanup.d.ts +47 -0
- package/dist/src/core/startup-cleanup.d.ts.map +1 -0
- package/dist/src/core/startup-cleanup.js +150 -0
- package/dist/src/core/startup-cleanup.js.map +1 -0
- package/dist/src/core/task-store.d.ts +96 -0
- package/dist/src/core/task-store.d.ts.map +1 -0
- package/dist/src/core/task-store.js +309 -0
- package/dist/src/core/task-store.js.map +1 -0
- package/dist/src/core/verbo-config-editor.d.ts +44 -0
- package/dist/src/core/verbo-config-editor.d.ts.map +1 -0
- package/dist/src/core/verbo-config-editor.js +204 -0
- package/dist/src/core/verbo-config-editor.js.map +1 -0
- package/dist/src/core/verbo-config.d.ts +35 -0
- package/dist/src/core/verbo-config.d.ts.map +1 -0
- package/dist/src/core/verbo-config.js +55 -0
- package/dist/src/core/verbo-config.js.map +1 -0
- package/dist/src/core/verbo-md.d.ts +96 -0
- package/dist/src/core/verbo-md.d.ts.map +1 -0
- package/dist/src/core/verbo-md.js +410 -0
- package/dist/src/core/verbo-md.js.map +1 -0
- package/dist/src/db/database.d.ts +9 -0
- package/dist/src/db/database.d.ts.map +1 -0
- package/dist/src/db/database.js +37 -0
- package/dist/src/db/database.js.map +1 -0
- package/dist/src/db/migrations/001-personas-subtasks.d.ts +10 -0
- package/dist/src/db/migrations/001-personas-subtasks.d.ts.map +1 -0
- package/dist/src/db/migrations/001-personas-subtasks.js +32 -0
- package/dist/src/db/migrations/001-personas-subtasks.js.map +1 -0
- package/dist/src/db/migrations/002-rbac.d.ts +9 -0
- package/dist/src/db/migrations/002-rbac.d.ts.map +1 -0
- package/dist/src/db/migrations/002-rbac.js +31 -0
- package/dist/src/db/migrations/002-rbac.js.map +1 -0
- package/dist/src/db/migrations/003-provider-column.d.ts +8 -0
- package/dist/src/db/migrations/003-provider-column.d.ts.map +1 -0
- package/dist/src/db/migrations/003-provider-column.js +12 -0
- package/dist/src/db/migrations/003-provider-column.js.map +1 -0
- package/dist/src/db/migrations/004-pipeline-cost.d.ts +8 -0
- package/dist/src/db/migrations/004-pipeline-cost.d.ts.map +1 -0
- package/dist/src/db/migrations/004-pipeline-cost.js +23 -0
- package/dist/src/db/migrations/004-pipeline-cost.js.map +1 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.d.ts +10 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.d.ts.map +1 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.js +39 -0
- package/dist/src/db/migrations/005-audit-log-timestamp.js.map +1 -0
- package/dist/src/db/migrations/006-human-action-type.d.ts +9 -0
- package/dist/src/db/migrations/006-human-action-type.d.ts.map +1 -0
- package/dist/src/db/migrations/006-human-action-type.js +16 -0
- package/dist/src/db/migrations/006-human-action-type.js.map +1 -0
- package/dist/src/db/schema.d.ts +6 -0
- package/dist/src/db/schema.d.ts.map +1 -0
- package/dist/src/db/schema.js +255 -0
- package/dist/src/db/schema.js.map +1 -0
- package/dist/src/deps/dependabot-generator.d.ts +22 -0
- package/dist/src/deps/dependabot-generator.d.ts.map +1 -0
- package/dist/src/deps/dependabot-generator.js +83 -0
- package/dist/src/deps/dependabot-generator.js.map +1 -0
- package/dist/src/deps/dependabot-monitor.d.ts +22 -0
- package/dist/src/deps/dependabot-monitor.d.ts.map +1 -0
- package/dist/src/deps/dependabot-monitor.js +28 -0
- package/dist/src/deps/dependabot-monitor.js.map +1 -0
- package/dist/src/deps/package-auditor.d.ts +24 -0
- package/dist/src/deps/package-auditor.d.ts.map +1 -0
- package/dist/src/deps/package-auditor.js +118 -0
- package/dist/src/deps/package-auditor.js.map +1 -0
- package/dist/src/init/ensure-init.d.ts +6 -0
- package/dist/src/init/ensure-init.d.ts.map +1 -0
- package/dist/src/init/ensure-init.js +27 -0
- package/dist/src/init/ensure-init.js.map +1 -0
- package/dist/src/init/project-detector.d.ts +11 -0
- package/dist/src/init/project-detector.d.ts.map +1 -0
- package/dist/src/init/project-detector.js +117 -0
- package/dist/src/init/project-detector.js.map +1 -0
- package/dist/src/init/questionnaire.d.ts +5 -0
- package/dist/src/init/questionnaire.d.ts.map +1 -0
- package/dist/src/init/questionnaire.js +112 -0
- package/dist/src/init/questionnaire.js.map +1 -0
- package/dist/src/init/template.d.ts +17 -0
- package/dist/src/init/template.d.ts.map +1 -0
- package/dist/src/init/template.js +46 -0
- package/dist/src/init/template.js.map +1 -0
- package/dist/src/intelligence/claude-client.d.ts +3 -0
- package/dist/src/intelligence/claude-client.d.ts.map +1 -0
- package/dist/src/intelligence/claude-client.js +12 -0
- package/dist/src/intelligence/claude-client.js.map +1 -0
- package/dist/src/intelligence/conflict-mediator.d.ts +17 -0
- package/dist/src/intelligence/conflict-mediator.d.ts.map +1 -0
- package/dist/src/intelligence/conflict-mediator.js +83 -0
- package/dist/src/intelligence/conflict-mediator.js.map +1 -0
- package/dist/src/intelligence/github-orchestrator.d.ts +30 -0
- package/dist/src/intelligence/github-orchestrator.d.ts.map +1 -0
- package/dist/src/intelligence/github-orchestrator.js +270 -0
- package/dist/src/intelligence/github-orchestrator.js.map +1 -0
- package/dist/src/intelligence/kill-switch.d.ts +10 -0
- package/dist/src/intelligence/kill-switch.d.ts.map +1 -0
- package/dist/src/intelligence/kill-switch.js +12 -0
- package/dist/src/intelligence/kill-switch.js.map +1 -0
- package/dist/src/intelligence/learnings-extractor.d.ts +13 -0
- package/dist/src/intelligence/learnings-extractor.d.ts.map +1 -0
- package/dist/src/intelligence/learnings-extractor.js +74 -0
- package/dist/src/intelligence/learnings-extractor.js.map +1 -0
- package/dist/src/intelligence/project-scanner.d.ts +2 -0
- package/dist/src/intelligence/project-scanner.d.ts.map +1 -0
- package/dist/src/intelligence/project-scanner.js +28 -0
- package/dist/src/intelligence/project-scanner.js.map +1 -0
- package/dist/src/intelligence/task-decomposer.d.ts +14 -0
- package/dist/src/intelligence/task-decomposer.d.ts.map +1 -0
- package/dist/src/intelligence/task-decomposer.js +97 -0
- package/dist/src/intelligence/task-decomposer.js.map +1 -0
- package/dist/src/intelligence/types.d.ts +14 -0
- package/dist/src/intelligence/types.d.ts.map +1 -0
- package/dist/src/intelligence/types.js +2 -0
- package/dist/src/intelligence/types.js.map +1 -0
- package/dist/src/mcp/server.d.ts +63 -0
- package/dist/src/mcp/server.d.ts.map +1 -0
- package/dist/src/mcp/server.js +537 -0
- package/dist/src/mcp/server.js.map +1 -0
- package/dist/src/mcp/stdio-entry.d.ts +2 -0
- package/dist/src/mcp/stdio-entry.d.ts.map +1 -0
- package/dist/src/mcp/stdio-entry.js +124 -0
- package/dist/src/mcp/stdio-entry.js.map +1 -0
- package/dist/src/mcp/subtask-handlers.d.ts +7 -0
- package/dist/src/mcp/subtask-handlers.d.ts.map +1 -0
- package/dist/src/mcp/subtask-handlers.js +50 -0
- package/dist/src/mcp/subtask-handlers.js.map +1 -0
- package/dist/src/security/network-proxy.d.ts +20 -0
- package/dist/src/security/network-proxy.d.ts.map +1 -0
- package/dist/src/security/network-proxy.js +125 -0
- package/dist/src/security/network-proxy.js.map +1 -0
- package/dist/src/security/network-sandbox.d.ts +19 -0
- package/dist/src/security/network-sandbox.d.ts.map +1 -0
- package/dist/src/security/network-sandbox.js +100 -0
- package/dist/src/security/network-sandbox.js.map +1 -0
- package/dist/src/security/sanitize.d.ts +13 -0
- package/dist/src/security/sanitize.d.ts.map +1 -0
- package/dist/src/security/sanitize.js +19 -0
- package/dist/src/security/sanitize.js.map +1 -0
- package/dist/src/security/secrets-patterns.d.ts +29 -0
- package/dist/src/security/secrets-patterns.d.ts.map +1 -0
- package/dist/src/security/secrets-patterns.js +430 -0
- package/dist/src/security/secrets-patterns.js.map +1 -0
- package/dist/src/security/secrets-scanner.d.ts +26 -0
- package/dist/src/security/secrets-scanner.d.ts.map +1 -0
- package/dist/src/security/secrets-scanner.js +62 -0
- package/dist/src/security/secrets-scanner.js.map +1 -0
- package/dist/src/skills/classifier.d.ts +9 -0
- package/dist/src/skills/classifier.d.ts.map +1 -0
- package/dist/src/skills/classifier.js +41 -0
- package/dist/src/skills/classifier.js.map +1 -0
- package/dist/src/skills/registry.d.ts +16 -0
- package/dist/src/skills/registry.d.ts.map +1 -0
- package/dist/src/skills/registry.js +61 -0
- package/dist/src/skills/registry.js.map +1 -0
- package/dist/src/sync/events.d.ts +9 -0
- package/dist/src/sync/events.d.ts.map +1 -0
- package/dist/src/sync/events.js +2 -0
- package/dist/src/sync/events.js.map +1 -0
- package/dist/src/sync/relay-server.d.ts +18 -0
- package/dist/src/sync/relay-server.d.ts.map +1 -0
- package/dist/src/sync/relay-server.js +131 -0
- package/dist/src/sync/relay-server.js.map +1 -0
- package/dist/src/sync/sync-client.d.ts +31 -0
- package/dist/src/sync/sync-client.d.ts.map +1 -0
- package/dist/src/sync/sync-client.js +314 -0
- package/dist/src/sync/sync-client.js.map +1 -0
- package/dist/src/tui/app.d.ts +35 -0
- package/dist/src/tui/app.d.ts.map +1 -0
- package/dist/src/tui/app.js +676 -0
- package/dist/src/tui/app.js.map +1 -0
- package/dist/src/tui/components/activity-feed.d.ts +12 -0
- package/dist/src/tui/components/activity-feed.d.ts.map +1 -0
- package/dist/src/tui/components/activity-feed.js +82 -0
- package/dist/src/tui/components/activity-feed.js.map +1 -0
- package/dist/src/tui/components/agent-list.d.ts +19 -0
- package/dist/src/tui/components/agent-list.d.ts.map +1 -0
- package/dist/src/tui/components/agent-list.js +33 -0
- package/dist/src/tui/components/agent-list.js.map +1 -0
- package/dist/src/tui/components/agent-row.d.ts +12 -0
- package/dist/src/tui/components/agent-row.d.ts.map +1 -0
- package/dist/src/tui/components/agent-row.js +37 -0
- package/dist/src/tui/components/agent-row.js.map +1 -0
- package/dist/src/tui/components/approval-terminal.d.ts +13 -0
- package/dist/src/tui/components/approval-terminal.d.ts.map +1 -0
- package/dist/src/tui/components/approval-terminal.js +34 -0
- package/dist/src/tui/components/approval-terminal.js.map +1 -0
- package/dist/src/tui/components/audit-viewer.d.ts +16 -0
- package/dist/src/tui/components/audit-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/audit-viewer.js +46 -0
- package/dist/src/tui/components/audit-viewer.js.map +1 -0
- package/dist/src/tui/components/auth-gate.d.ts +9 -0
- package/dist/src/tui/components/auth-gate.d.ts.map +1 -0
- package/dist/src/tui/components/auth-gate.js +112 -0
- package/dist/src/tui/components/auth-gate.js.map +1 -0
- package/dist/src/tui/components/command-palette.d.ts +12 -0
- package/dist/src/tui/components/command-palette.d.ts.map +1 -0
- package/dist/src/tui/components/command-palette.js +51 -0
- package/dist/src/tui/components/command-palette.js.map +1 -0
- package/dist/src/tui/components/compliance-badge.d.ts +11 -0
- package/dist/src/tui/components/compliance-badge.d.ts.map +1 -0
- package/dist/src/tui/components/compliance-badge.js +12 -0
- package/dist/src/tui/components/compliance-badge.js.map +1 -0
- package/dist/src/tui/components/decomposition-review.d.ts +10 -0
- package/dist/src/tui/components/decomposition-review.d.ts.map +1 -0
- package/dist/src/tui/components/decomposition-review.js +19 -0
- package/dist/src/tui/components/decomposition-review.js.map +1 -0
- package/dist/src/tui/components/dependency-graph.d.ts +13 -0
- package/dist/src/tui/components/dependency-graph.d.ts.map +1 -0
- package/dist/src/tui/components/dependency-graph.js +143 -0
- package/dist/src/tui/components/dependency-graph.js.map +1 -0
- package/dist/src/tui/components/diff-viewer.d.ts +11 -0
- package/dist/src/tui/components/diff-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/diff-viewer.js +82 -0
- package/dist/src/tui/components/diff-viewer.js.map +1 -0
- package/dist/src/tui/components/edit-task-input.d.ts +10 -0
- package/dist/src/tui/components/edit-task-input.d.ts.map +1 -0
- package/dist/src/tui/components/edit-task-input.js +20 -0
- package/dist/src/tui/components/edit-task-input.js.map +1 -0
- package/dist/src/tui/components/footer.d.ts +12 -0
- package/dist/src/tui/components/footer.d.ts.map +1 -0
- package/dist/src/tui/components/footer.js +41 -0
- package/dist/src/tui/components/footer.js.map +1 -0
- package/dist/src/tui/components/header.d.ts +8 -0
- package/dist/src/tui/components/header.d.ts.map +1 -0
- package/dist/src/tui/components/header.js +20 -0
- package/dist/src/tui/components/header.js.map +1 -0
- package/dist/src/tui/components/human-actions.d.ts +14 -0
- package/dist/src/tui/components/human-actions.d.ts.map +1 -0
- package/dist/src/tui/components/human-actions.js +43 -0
- package/dist/src/tui/components/human-actions.js.map +1 -0
- package/dist/src/tui/components/log-panel.d.ts +10 -0
- package/dist/src/tui/components/log-panel.d.ts.map +1 -0
- package/dist/src/tui/components/log-panel.js +38 -0
- package/dist/src/tui/components/log-panel.js.map +1 -0
- package/dist/src/tui/components/memory-viewer.d.ts +10 -0
- package/dist/src/tui/components/memory-viewer.d.ts.map +1 -0
- package/dist/src/tui/components/memory-viewer.js +44 -0
- package/dist/src/tui/components/memory-viewer.js.map +1 -0
- package/dist/src/tui/components/new-task-input.d.ts +9 -0
- package/dist/src/tui/components/new-task-input.d.ts.map +1 -0
- package/dist/src/tui/components/new-task-input.js +21 -0
- package/dist/src/tui/components/new-task-input.js.map +1 -0
- package/dist/src/tui/components/orchestrator-status.d.ts +9 -0
- package/dist/src/tui/components/orchestrator-status.d.ts.map +1 -0
- package/dist/src/tui/components/orchestrator-status.js +15 -0
- package/dist/src/tui/components/orchestrator-status.js.map +1 -0
- package/dist/src/tui/components/parallelize-banner.d.ts +8 -0
- package/dist/src/tui/components/parallelize-banner.d.ts.map +1 -0
- package/dist/src/tui/components/parallelize-banner.js +9 -0
- package/dist/src/tui/components/parallelize-banner.js.map +1 -0
- package/dist/src/tui/components/progress-bar.d.ts +9 -0
- package/dist/src/tui/components/progress-bar.d.ts.map +1 -0
- package/dist/src/tui/components/progress-bar.js +15 -0
- package/dist/src/tui/components/progress-bar.js.map +1 -0
- package/dist/src/tui/components/review-queue.d.ts +13 -0
- package/dist/src/tui/components/review-queue.d.ts.map +1 -0
- package/dist/src/tui/components/review-queue.js +78 -0
- package/dist/src/tui/components/review-queue.js.map +1 -0
- package/dist/src/tui/components/rich-header.d.ts +11 -0
- package/dist/src/tui/components/rich-header.d.ts.map +1 -0
- package/dist/src/tui/components/rich-header.js +25 -0
- package/dist/src/tui/components/rich-header.js.map +1 -0
- package/dist/src/tui/components/spinner.d.ts +7 -0
- package/dist/src/tui/components/spinner.d.ts.map +1 -0
- package/dist/src/tui/components/spinner.js +8 -0
- package/dist/src/tui/components/spinner.js.map +1 -0
- package/dist/src/tui/components/status-bar.d.ts +23 -0
- package/dist/src/tui/components/status-bar.d.ts.map +1 -0
- package/dist/src/tui/components/status-bar.js +28 -0
- package/dist/src/tui/components/status-bar.js.map +1 -0
- package/dist/src/tui/components/task-queue.d.ts +11 -0
- package/dist/src/tui/components/task-queue.d.ts.map +1 -0
- package/dist/src/tui/components/task-queue.js +30 -0
- package/dist/src/tui/components/task-queue.js.map +1 -0
- package/dist/src/tui/components/team-view.d.ts +13 -0
- package/dist/src/tui/components/team-view.d.ts.map +1 -0
- package/dist/src/tui/components/team-view.js +12 -0
- package/dist/src/tui/components/team-view.js.map +1 -0
- package/dist/src/tui/graph-renderer.d.ts +11 -0
- package/dist/src/tui/graph-renderer.d.ts.map +1 -0
- package/dist/src/tui/graph-renderer.js +296 -0
- package/dist/src/tui/graph-renderer.js.map +1 -0
- package/dist/src/tui/hooks/use-bell.d.ts +21 -0
- package/dist/src/tui/hooks/use-bell.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-bell.js +38 -0
- package/dist/src/tui/hooks/use-bell.js.map +1 -0
- package/dist/src/tui/hooks/use-ci-status.d.ts +16 -0
- package/dist/src/tui/hooks/use-ci-status.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-ci-status.js +97 -0
- package/dist/src/tui/hooks/use-ci-status.js.map +1 -0
- package/dist/src/tui/hooks/use-command-palette.d.ts +37 -0
- package/dist/src/tui/hooks/use-command-palette.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-command-palette.js +108 -0
- package/dist/src/tui/hooks/use-command-palette.js.map +1 -0
- package/dist/src/tui/hooks/use-diff-view.d.ts +16 -0
- package/dist/src/tui/hooks/use-diff-view.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-diff-view.js +75 -0
- package/dist/src/tui/hooks/use-diff-view.js.map +1 -0
- package/dist/src/tui/hooks/use-keyboard.d.ts +3 -0
- package/dist/src/tui/hooks/use-keyboard.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-keyboard.js +70 -0
- package/dist/src/tui/hooks/use-keyboard.js.map +1 -0
- package/dist/src/tui/hooks/use-log-stream.d.ts +25 -0
- package/dist/src/tui/hooks/use-log-stream.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-log-stream.js +83 -0
- package/dist/src/tui/hooks/use-log-stream.js.map +1 -0
- package/dist/src/tui/hooks/use-spinner.d.ts +3 -0
- package/dist/src/tui/hooks/use-spinner.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-spinner.js +13 -0
- package/dist/src/tui/hooks/use-spinner.js.map +1 -0
- package/dist/src/tui/hooks/use-store.d.ts +33 -0
- package/dist/src/tui/hooks/use-store.d.ts.map +1 -0
- package/dist/src/tui/hooks/use-store.js +21 -0
- package/dist/src/tui/hooks/use-store.js.map +1 -0
- package/dist/src/tui/lib/diff-parser.d.ts +24 -0
- package/dist/src/tui/lib/diff-parser.d.ts.map +1 -0
- package/dist/src/tui/lib/diff-parser.js +115 -0
- package/dist/src/tui/lib/diff-parser.js.map +1 -0
- package/dist/src/tui/lib/palette-commands.d.ts +14 -0
- package/dist/src/tui/lib/palette-commands.d.ts.map +1 -0
- package/dist/src/tui/lib/palette-commands.js +101 -0
- package/dist/src/tui/lib/palette-commands.js.map +1 -0
- package/dist/src/tui/tui.d.ts +8 -0
- package/dist/src/tui/tui.d.ts.map +1 -0
- package/dist/src/tui/tui.js +8 -0
- package/dist/src/tui/tui.js.map +1 -0
- package/package.json +66 -0
- package/skills/api-design.md +84 -0
- package/skills/backend-typescript.md +76 -0
- package/skills/data-modeling.md +73 -0
- package/skills/devops-ci.md +82 -0
- package/skills/frontend-design.md +69 -0
- package/skills/observability.md +73 -0
- package/skills/react-nextjs.md +76 -0
- package/skills/refactoring.md +77 -0
- package/skills/security.md +75 -0
- package/skills/testing.md +69 -0
|
@@ -0,0 +1,430 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Secrets pattern library — 54 RegExp patterns compiled at module load.
|
|
3
|
+
*
|
|
4
|
+
* Covers: AWS, GitHub, Stripe, private keys, .env, JWT, connection strings,
|
|
5
|
+
* Google/GCP, Azure, Slack, Twilio, email services, package registries,
|
|
6
|
+
* Supabase, hosting providers, and generic credential patterns.
|
|
7
|
+
*
|
|
8
|
+
* All patterns include the `g` flag. When reusing a pattern across multiple
|
|
9
|
+
* inputs, reset `pattern.lastIndex = 0` between calls, or use
|
|
10
|
+
* `String.prototype.match()` / `matchAll()` which reset it automatically.
|
|
11
|
+
*/
|
|
12
|
+
export const SECRET_PATTERNS = [
|
|
13
|
+
// ── AWS (6) ──────────────────────────────────────────────────────────────
|
|
14
|
+
{
|
|
15
|
+
id: 'aws-access-key-id',
|
|
16
|
+
name: 'AWS Access Key ID',
|
|
17
|
+
category: 'aws',
|
|
18
|
+
pattern: /AKIA[0-9A-Z]{16}/g,
|
|
19
|
+
severity: 'critical',
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
id: 'aws-secret-access-key',
|
|
23
|
+
name: 'AWS Secret Access Key',
|
|
24
|
+
category: 'aws',
|
|
25
|
+
pattern: /(?:aws[_-]?secret[_-]?access[_-]?key|SECRET_ACCESS_KEY)\s*[=:]\s*['"]?([0-9A-Za-z/+=]{40})['"]?/gi,
|
|
26
|
+
severity: 'critical',
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
id: 'aws-session-token',
|
|
30
|
+
name: 'AWS Session Token',
|
|
31
|
+
category: 'aws',
|
|
32
|
+
pattern: /(?:AWSSessionToken|aws[_-]?session[_-]?token)\s*[=:]\s*['"]?([A-Za-z0-9/+=]{100,})['"]?/gi,
|
|
33
|
+
severity: 'critical',
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
id: 'aws-mfa-arn',
|
|
37
|
+
name: 'AWS MFA ARN',
|
|
38
|
+
category: 'aws',
|
|
39
|
+
pattern: /arn:aws:iam::\d{12}:mfa\/[\w+=,.@-]+/g,
|
|
40
|
+
severity: 'medium',
|
|
41
|
+
},
|
|
42
|
+
{
|
|
43
|
+
id: 'aws-arn',
|
|
44
|
+
name: 'AWS ARN with Account ID',
|
|
45
|
+
category: 'aws',
|
|
46
|
+
pattern: /arn:aws[a-z-]*:[a-z0-9-]+:[a-z0-9-]*:\d{12}:[^\s"']+/g,
|
|
47
|
+
severity: 'low',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
id: 'aws-account-id',
|
|
51
|
+
name: 'AWS Account ID',
|
|
52
|
+
category: 'aws',
|
|
53
|
+
pattern: /(?:account[_-]?id|aws[_-]?account)\s*[=:'"]{0,3}\s*(\d{12})/gi,
|
|
54
|
+
severity: 'low',
|
|
55
|
+
},
|
|
56
|
+
// ── GitHub (4) ───────────────────────────────────────────────────────────
|
|
57
|
+
{
|
|
58
|
+
id: 'github-pat-classic',
|
|
59
|
+
name: 'GitHub Personal Access Token (classic)',
|
|
60
|
+
category: 'github',
|
|
61
|
+
pattern: /ghp_[A-Za-z0-9]{36}/g,
|
|
62
|
+
severity: 'critical',
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
id: 'github-pat-fine-grained',
|
|
66
|
+
name: 'GitHub Fine-grained Personal Access Token',
|
|
67
|
+
category: 'github',
|
|
68
|
+
pattern: /github_pat_[A-Za-z0-9_]{82}/g,
|
|
69
|
+
severity: 'critical',
|
|
70
|
+
},
|
|
71
|
+
{
|
|
72
|
+
id: 'github-oauth-token',
|
|
73
|
+
name: 'GitHub OAuth Access Token',
|
|
74
|
+
category: 'github',
|
|
75
|
+
pattern: /gho_[A-Za-z0-9]{36}/g,
|
|
76
|
+
severity: 'critical',
|
|
77
|
+
},
|
|
78
|
+
{
|
|
79
|
+
id: 'github-app-installation-token',
|
|
80
|
+
name: 'GitHub App Installation Token',
|
|
81
|
+
category: 'github',
|
|
82
|
+
pattern: /ghs_[A-Za-z0-9]{36}/g,
|
|
83
|
+
severity: 'high',
|
|
84
|
+
},
|
|
85
|
+
// ── Stripe (3) ───────────────────────────────────────────────────────────
|
|
86
|
+
{
|
|
87
|
+
id: 'stripe-live-secret-key',
|
|
88
|
+
name: 'Stripe Live Secret Key',
|
|
89
|
+
category: 'stripe',
|
|
90
|
+
pattern: /sk_live_[A-Za-z0-9]{24,99}/g,
|
|
91
|
+
severity: 'critical',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
id: 'stripe-test-secret-key',
|
|
95
|
+
name: 'Stripe Test Secret Key',
|
|
96
|
+
category: 'stripe',
|
|
97
|
+
pattern: /sk_test_[A-Za-z0-9]{24,99}/g,
|
|
98
|
+
severity: 'high',
|
|
99
|
+
},
|
|
100
|
+
{
|
|
101
|
+
id: 'stripe-restricted-key',
|
|
102
|
+
name: 'Stripe Restricted Key',
|
|
103
|
+
category: 'stripe',
|
|
104
|
+
pattern: /rk_live_[A-Za-z0-9]{24,99}/g,
|
|
105
|
+
severity: 'critical',
|
|
106
|
+
},
|
|
107
|
+
// ── Private Keys (4) ─────────────────────────────────────────────────────
|
|
108
|
+
{
|
|
109
|
+
id: 'private-key-rsa',
|
|
110
|
+
name: 'RSA Private Key',
|
|
111
|
+
category: 'private-key',
|
|
112
|
+
pattern: /-----BEGIN RSA PRIVATE KEY-----/g,
|
|
113
|
+
severity: 'critical',
|
|
114
|
+
},
|
|
115
|
+
{
|
|
116
|
+
id: 'private-key-ec',
|
|
117
|
+
name: 'EC Private Key',
|
|
118
|
+
category: 'private-key',
|
|
119
|
+
pattern: /-----BEGIN EC PRIVATE KEY-----/g,
|
|
120
|
+
severity: 'critical',
|
|
121
|
+
},
|
|
122
|
+
{
|
|
123
|
+
id: 'private-key-openssh',
|
|
124
|
+
name: 'OpenSSH Private Key',
|
|
125
|
+
category: 'private-key',
|
|
126
|
+
pattern: /-----BEGIN OPENSSH PRIVATE KEY-----/g,
|
|
127
|
+
severity: 'critical',
|
|
128
|
+
},
|
|
129
|
+
{
|
|
130
|
+
id: 'private-key-pkcs8',
|
|
131
|
+
name: 'PKCS#8 Private Key',
|
|
132
|
+
category: 'private-key',
|
|
133
|
+
pattern: /-----BEGIN PRIVATE KEY-----/g,
|
|
134
|
+
severity: 'critical',
|
|
135
|
+
},
|
|
136
|
+
// ── .env (2) ─────────────────────────────────────────────────────────────
|
|
137
|
+
{
|
|
138
|
+
id: 'dotenv-password',
|
|
139
|
+
name: '.env Password Assignment',
|
|
140
|
+
category: 'dotenv',
|
|
141
|
+
pattern: /^(?:password|passwd|pwd)\s*=\s*.+/gim,
|
|
142
|
+
severity: 'high',
|
|
143
|
+
},
|
|
144
|
+
{
|
|
145
|
+
id: 'dotenv-secret',
|
|
146
|
+
name: '.env Secret / API Key Assignment',
|
|
147
|
+
category: 'dotenv',
|
|
148
|
+
pattern: /^(?:secret|api_key|apikey|api_secret)\s*=\s*.+/gim,
|
|
149
|
+
severity: 'high',
|
|
150
|
+
},
|
|
151
|
+
// ── JWT (1) ──────────────────────────────────────────────────────────────
|
|
152
|
+
{
|
|
153
|
+
id: 'jwt-token',
|
|
154
|
+
name: 'JSON Web Token (JWT)',
|
|
155
|
+
category: 'jwt',
|
|
156
|
+
pattern: /eyJ[A-Za-z0-9\-_=]+\.eyJ[A-Za-z0-9\-_=]+\.[A-Za-z0-9\-_.+/=]*/g,
|
|
157
|
+
severity: 'high',
|
|
158
|
+
},
|
|
159
|
+
// ── Connection Strings (5) ───────────────────────────────────────────────
|
|
160
|
+
{
|
|
161
|
+
id: 'connection-string-postgres',
|
|
162
|
+
name: 'PostgreSQL Connection String',
|
|
163
|
+
category: 'connection-string',
|
|
164
|
+
pattern: /postgres(?:ql)?:\/\/[^\s@]+:[^\s@]+@[^\s"']+/gi,
|
|
165
|
+
severity: 'critical',
|
|
166
|
+
},
|
|
167
|
+
{
|
|
168
|
+
id: 'connection-string-mysql',
|
|
169
|
+
name: 'MySQL Connection String',
|
|
170
|
+
category: 'connection-string',
|
|
171
|
+
pattern: /mysql:\/\/[^\s@]+:[^\s@]+@[^\s"']+/gi,
|
|
172
|
+
severity: 'critical',
|
|
173
|
+
},
|
|
174
|
+
{
|
|
175
|
+
id: 'connection-string-mongodb',
|
|
176
|
+
name: 'MongoDB Connection String',
|
|
177
|
+
category: 'connection-string',
|
|
178
|
+
pattern: /mongodb(?:\+srv)?:\/\/[^\s@]+:[^\s@]+@[^\s"']+/gi,
|
|
179
|
+
severity: 'critical',
|
|
180
|
+
},
|
|
181
|
+
{
|
|
182
|
+
id: 'connection-string-redis',
|
|
183
|
+
name: 'Redis Connection String with Credentials',
|
|
184
|
+
category: 'connection-string',
|
|
185
|
+
pattern: /redis:\/\/[^\s:@]+:[^\s@]+@[^\s"']+/gi,
|
|
186
|
+
severity: 'critical',
|
|
187
|
+
},
|
|
188
|
+
{
|
|
189
|
+
id: 'connection-string-amqp',
|
|
190
|
+
name: 'AMQP / RabbitMQ Connection String',
|
|
191
|
+
category: 'connection-string',
|
|
192
|
+
pattern: /amqps?:\/\/[^\s@]+:[^\s@]+@[^\s"']+/gi,
|
|
193
|
+
severity: 'critical',
|
|
194
|
+
},
|
|
195
|
+
// ── Google / GCP (4) ─────────────────────────────────────────────────────
|
|
196
|
+
{
|
|
197
|
+
id: 'google-api-key',
|
|
198
|
+
name: 'Google API Key',
|
|
199
|
+
category: 'google',
|
|
200
|
+
pattern: /AIza[0-9A-Za-z_\-]{35}/g,
|
|
201
|
+
severity: 'high',
|
|
202
|
+
},
|
|
203
|
+
{
|
|
204
|
+
id: 'google-oauth-client-secret',
|
|
205
|
+
name: 'Google OAuth Client Secret',
|
|
206
|
+
category: 'google',
|
|
207
|
+
pattern: /(?:google|gcp|oauth).{0,20}client[_-]?secret.{0,20}['"][A-Za-z0-9_\-]{24}['"]/gi,
|
|
208
|
+
severity: 'critical',
|
|
209
|
+
},
|
|
210
|
+
{
|
|
211
|
+
id: 'google-service-account',
|
|
212
|
+
name: 'Google Service Account JSON',
|
|
213
|
+
category: 'google',
|
|
214
|
+
pattern: /"type"\s*:\s*"service_account"/g,
|
|
215
|
+
severity: 'critical',
|
|
216
|
+
},
|
|
217
|
+
{
|
|
218
|
+
id: 'firebase-server-key',
|
|
219
|
+
name: 'Firebase Server Key',
|
|
220
|
+
category: 'google',
|
|
221
|
+
pattern: /AAAA[A-Za-z0-9_\-]{7}:[A-Za-z0-9_\-]{140}/g,
|
|
222
|
+
severity: 'critical',
|
|
223
|
+
},
|
|
224
|
+
// ── Azure (4) ────────────────────────────────────────────────────────────
|
|
225
|
+
{
|
|
226
|
+
id: 'azure-storage-connection-string',
|
|
227
|
+
name: 'Azure Storage Connection String',
|
|
228
|
+
category: 'azure',
|
|
229
|
+
pattern: /DefaultEndpointsProtocol=https;AccountName=[^;]+;AccountKey=[A-Za-z0-9+/=]{88};/g,
|
|
230
|
+
severity: 'critical',
|
|
231
|
+
},
|
|
232
|
+
{
|
|
233
|
+
id: 'azure-sas-token',
|
|
234
|
+
name: 'Azure SAS Token',
|
|
235
|
+
category: 'azure',
|
|
236
|
+
pattern: /sv=\d{4}-\d{2}-\d{2}&(?:ss|spr|sr)=[^&\s"']+(?:&[^&\s"']+)*&sig=[^&\s"']+/gi,
|
|
237
|
+
severity: 'critical',
|
|
238
|
+
},
|
|
239
|
+
{
|
|
240
|
+
id: 'azure-client-secret',
|
|
241
|
+
name: 'Azure AD Client Secret',
|
|
242
|
+
category: 'azure',
|
|
243
|
+
pattern: /(?:azure|microsoft).{0,30}(?:secret|password).{0,10}['"][A-Za-z0-9~._\-]{34,}['"]/gi,
|
|
244
|
+
severity: 'critical',
|
|
245
|
+
},
|
|
246
|
+
{
|
|
247
|
+
id: 'azure-subscription-key',
|
|
248
|
+
name: 'Azure APIM Subscription Key',
|
|
249
|
+
category: 'azure',
|
|
250
|
+
pattern: /(?:ocp-apim-subscription-key|azure[_-]?subscription[_-]?key)\s*[=:]\s*['"]?[a-f0-9]{32}['"]?/gi,
|
|
251
|
+
severity: 'high',
|
|
252
|
+
},
|
|
253
|
+
// ── Slack (3) ────────────────────────────────────────────────────────────
|
|
254
|
+
{
|
|
255
|
+
id: 'slack-bot-token',
|
|
256
|
+
name: 'Slack Bot Token',
|
|
257
|
+
category: 'slack',
|
|
258
|
+
pattern: /xoxb-\d{11,13}-\d{11,13}-[a-zA-Z0-9]{24}/g,
|
|
259
|
+
severity: 'critical',
|
|
260
|
+
},
|
|
261
|
+
{
|
|
262
|
+
id: 'slack-webhook-url',
|
|
263
|
+
name: 'Slack Incoming Webhook URL',
|
|
264
|
+
category: 'slack',
|
|
265
|
+
pattern: /hooks\.slack\.com\/services\/T[A-Z0-9]{8,}\/B[A-Z0-9]{8,}\/[A-Za-z0-9]{24}/g,
|
|
266
|
+
severity: 'high',
|
|
267
|
+
},
|
|
268
|
+
{
|
|
269
|
+
id: 'slack-signing-secret',
|
|
270
|
+
name: 'Slack Signing Secret',
|
|
271
|
+
category: 'slack',
|
|
272
|
+
pattern: /(?:slack.{0,10}signing[_-]?secret|SLACK_SIGNING_SECRET)\s*[=:]\s*['"]?[a-f0-9]{32}['"]?/gi,
|
|
273
|
+
severity: 'high',
|
|
274
|
+
},
|
|
275
|
+
// ── Twilio (2) ───────────────────────────────────────────────────────────
|
|
276
|
+
{
|
|
277
|
+
id: 'twilio-account-sid',
|
|
278
|
+
name: 'Twilio Account SID',
|
|
279
|
+
category: 'twilio',
|
|
280
|
+
pattern: /AC[a-f0-9]{32}/g,
|
|
281
|
+
severity: 'high',
|
|
282
|
+
},
|
|
283
|
+
{
|
|
284
|
+
id: 'twilio-auth-token',
|
|
285
|
+
name: 'Twilio Auth Token',
|
|
286
|
+
category: 'twilio',
|
|
287
|
+
pattern: /(?:twilio.{0,20}auth[_-]?token|TWILIO_AUTH_TOKEN)\s*[=:]\s*['"]?[a-f0-9]{32}['"]?/gi,
|
|
288
|
+
severity: 'critical',
|
|
289
|
+
},
|
|
290
|
+
// ── Email Services (2) ───────────────────────────────────────────────────
|
|
291
|
+
{
|
|
292
|
+
id: 'sendgrid-api-key',
|
|
293
|
+
name: 'SendGrid API Key',
|
|
294
|
+
category: 'email',
|
|
295
|
+
pattern: /SG\.[A-Za-z0-9_\-]{22}\.[A-Za-z0-9_\-]{43}/g,
|
|
296
|
+
severity: 'critical',
|
|
297
|
+
},
|
|
298
|
+
{
|
|
299
|
+
id: 'mailgun-api-key',
|
|
300
|
+
name: 'Mailgun API Key',
|
|
301
|
+
category: 'email',
|
|
302
|
+
pattern: /key-[0-9a-f]{32}/g,
|
|
303
|
+
severity: 'critical',
|
|
304
|
+
},
|
|
305
|
+
// ── Package Registries (3) ───────────────────────────────────────────────
|
|
306
|
+
{
|
|
307
|
+
id: 'npm-access-token',
|
|
308
|
+
name: 'npm Access Token',
|
|
309
|
+
category: 'registry',
|
|
310
|
+
pattern: /npm_[A-Za-z0-9]{36}/g,
|
|
311
|
+
severity: 'high',
|
|
312
|
+
},
|
|
313
|
+
{
|
|
314
|
+
id: 'pypi-api-token',
|
|
315
|
+
name: 'PyPI API Token',
|
|
316
|
+
category: 'registry',
|
|
317
|
+
pattern: /pypi-AgEIcHlwaS5vcmcA[A-Za-z0-9_\-]+/g,
|
|
318
|
+
severity: 'high',
|
|
319
|
+
},
|
|
320
|
+
{
|
|
321
|
+
id: 'docker-hub-token',
|
|
322
|
+
name: 'Docker Hub Access Token',
|
|
323
|
+
category: 'registry',
|
|
324
|
+
pattern: /(?:docker[_-]?hub|dockerhub).{0,20}(?:password|token)\s*[=:]\s*['"][A-Za-z0-9_\-]{20,}['"]/gi,
|
|
325
|
+
severity: 'high',
|
|
326
|
+
},
|
|
327
|
+
// ── Supabase (2) ─────────────────────────────────────────────────────────
|
|
328
|
+
{
|
|
329
|
+
id: 'supabase-url',
|
|
330
|
+
name: 'Supabase Project URL',
|
|
331
|
+
category: 'supabase',
|
|
332
|
+
pattern: /https:\/\/[a-z0-9]{20}\.supabase\.(?:co|in)\//g,
|
|
333
|
+
severity: 'low',
|
|
334
|
+
},
|
|
335
|
+
{
|
|
336
|
+
id: 'supabase-service-role-key',
|
|
337
|
+
name: 'Supabase Service Role Key',
|
|
338
|
+
category: 'supabase',
|
|
339
|
+
pattern: /(?:supabase.{0,10}service[_-]?role|SUPABASE_SERVICE_ROLE_KEY)\s*[=:]\s*['"]?(eyJ[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+\.[A-Za-z0-9_\-]+)['"]?/gi,
|
|
340
|
+
severity: 'critical',
|
|
341
|
+
},
|
|
342
|
+
// ── Hosting Providers (3) ────────────────────────────────────────────────
|
|
343
|
+
{
|
|
344
|
+
id: 'heroku-api-key',
|
|
345
|
+
name: 'Heroku API Key',
|
|
346
|
+
category: 'hosting',
|
|
347
|
+
pattern: /(?:heroku).{0,20}['"]?[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}['"]?/gi,
|
|
348
|
+
severity: 'critical',
|
|
349
|
+
},
|
|
350
|
+
{
|
|
351
|
+
id: 'netlify-personal-access-token',
|
|
352
|
+
name: 'Netlify Personal Access Token',
|
|
353
|
+
category: 'hosting',
|
|
354
|
+
pattern: /(?:netlify.{0,10}token|NETLIFY_TOKEN)\s*[=:]\s*['"][A-Za-z0-9_\-]{40,}['"]/gi,
|
|
355
|
+
severity: 'critical',
|
|
356
|
+
},
|
|
357
|
+
{
|
|
358
|
+
id: 'vercel-access-token',
|
|
359
|
+
name: 'Vercel Access Token',
|
|
360
|
+
category: 'hosting',
|
|
361
|
+
pattern: /(?:vercel.{0,10}token|VERCEL_TOKEN)\s*[=:]\s*['"][A-Za-z0-9_\-]{24,}['"]/gi,
|
|
362
|
+
severity: 'critical',
|
|
363
|
+
},
|
|
364
|
+
// ── Generic (6) ──────────────────────────────────────────────────────────
|
|
365
|
+
{
|
|
366
|
+
id: 'generic-api-key',
|
|
367
|
+
name: 'Generic API Key',
|
|
368
|
+
category: 'generic',
|
|
369
|
+
pattern: /(?:api[_-]?key|api[_-]?secret|app[_-]?secret)\s*[=:'"]{1,5}\s*['"]([A-Za-z0-9+/=_\-]{32,})['"]?/gi,
|
|
370
|
+
severity: 'medium',
|
|
371
|
+
},
|
|
372
|
+
{
|
|
373
|
+
id: 'generic-password',
|
|
374
|
+
name: 'Generic Password in Config',
|
|
375
|
+
category: 'generic',
|
|
376
|
+
pattern: /(?:password|passwd|pwd)\s*[:=]\s*['"]?([^\s'"]{8,})['"]?/gi,
|
|
377
|
+
severity: 'medium',
|
|
378
|
+
},
|
|
379
|
+
{
|
|
380
|
+
id: 'generic-auth-token',
|
|
381
|
+
name: 'Generic Auth / Access Token',
|
|
382
|
+
category: 'generic',
|
|
383
|
+
pattern: /(?:auth[_-]?token|access[_-]?token)\s*[=:]\s*['"]([A-Za-z0-9+/=_.`-]{20,})['"]?/gi,
|
|
384
|
+
severity: 'medium',
|
|
385
|
+
},
|
|
386
|
+
{
|
|
387
|
+
id: 'generic-secret-key',
|
|
388
|
+
name: 'Generic Secret Key',
|
|
389
|
+
category: 'generic',
|
|
390
|
+
pattern: /(?:secret[_-]?key|secret[_-]?token)\s*[=:]\s*['"]([A-Za-z0-9+/=_.`-]{16,})['"]?/gi,
|
|
391
|
+
severity: 'medium',
|
|
392
|
+
},
|
|
393
|
+
{
|
|
394
|
+
id: 'private-key-pgp',
|
|
395
|
+
name: 'PGP Private Key Block',
|
|
396
|
+
category: 'generic',
|
|
397
|
+
pattern: /-----BEGIN PGP PRIVATE KEY BLOCK-----/g,
|
|
398
|
+
severity: 'critical',
|
|
399
|
+
},
|
|
400
|
+
{
|
|
401
|
+
id: 'private-key-dsa',
|
|
402
|
+
name: 'DSA Private Key',
|
|
403
|
+
category: 'generic',
|
|
404
|
+
pattern: /-----BEGIN DSA PRIVATE KEY-----/g,
|
|
405
|
+
severity: 'critical',
|
|
406
|
+
},
|
|
407
|
+
];
|
|
408
|
+
/** Total number of patterns — must equal 54. */
|
|
409
|
+
export const PATTERN_COUNT = SECRET_PATTERNS.length;
|
|
410
|
+
/** Patterns grouped by category, built once at module load. */
|
|
411
|
+
export const PATTERNS_BY_CATEGORY = (() => {
|
|
412
|
+
const map = new Map();
|
|
413
|
+
for (const p of SECRET_PATTERNS) {
|
|
414
|
+
const list = map.get(p.category) ?? [];
|
|
415
|
+
list.push(p);
|
|
416
|
+
map.set(p.category, list);
|
|
417
|
+
}
|
|
418
|
+
return map;
|
|
419
|
+
})();
|
|
420
|
+
/** Patterns grouped by severity, built once at module load. */
|
|
421
|
+
export const PATTERNS_BY_SEVERITY = (() => {
|
|
422
|
+
const map = new Map();
|
|
423
|
+
for (const p of SECRET_PATTERNS) {
|
|
424
|
+
const list = map.get(p.severity) ?? [];
|
|
425
|
+
list.push(p);
|
|
426
|
+
map.set(p.severity, list);
|
|
427
|
+
}
|
|
428
|
+
return map;
|
|
429
|
+
})();
|
|
430
|
+
//# sourceMappingURL=secrets-patterns.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-patterns.js","sourceRoot":"","sources":["../../../src/security/secrets-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export interface ScanFinding {
|
|
2
|
+
/** Pattern rule name, e.g. "AWS Access Key ID" */
|
|
3
|
+
rule: string;
|
|
4
|
+
/** 1-based line number within the scanned text */
|
|
5
|
+
line: number;
|
|
6
|
+
/** The line with the secret value replaced by block characters */
|
|
7
|
+
redacted: string;
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Scan a unified diff string for secrets.
|
|
11
|
+
* Only inspects lines that start with `+` (added lines); context lines and
|
|
12
|
+
* removed lines (`-`) are ignored.
|
|
13
|
+
*
|
|
14
|
+
* @param diff Output of `git diff` or `git diff --cached`
|
|
15
|
+
* @returns Array of findings with redacted values
|
|
16
|
+
*/
|
|
17
|
+
export declare function scanDiff(diff: string): ScanFinding[];
|
|
18
|
+
/**
|
|
19
|
+
* Scan the full content of a file for secrets.
|
|
20
|
+
* Every line is inspected (no diff-prefix filtering).
|
|
21
|
+
*
|
|
22
|
+
* @param content Raw file text
|
|
23
|
+
* @returns Array of findings with redacted values
|
|
24
|
+
*/
|
|
25
|
+
export declare function scanFile(content: string): ScanFinding[];
|
|
26
|
+
//# sourceMappingURL=secrets-scanner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-scanner.d.ts","sourceRoot":"","sources":["../../../src/security/secrets-scanner.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,kDAAkD;IAClD,IAAI,EAAE,MAAM,CAAC;IACb,kEAAkE;IAClE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAqCD;;;;;;;GAOG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,EAAE,CAapD;AAED;;;;;;GAMG;AACH,wBAAgB,QAAQ,CAAC,OAAO,EAAE,MAAM,GAAG,WAAW,EAAE,CAGvD"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { SECRET_PATTERNS } from './secrets-patterns.js';
|
|
2
|
+
// ── Helpers ──────────────────────────────────────────────────────────────────
|
|
3
|
+
const REDACT_CHAR = '█';
|
|
4
|
+
/** Replace the matched secret value with block characters. */
|
|
5
|
+
function redactLine(line, match) {
|
|
6
|
+
// Prefer capture group 1 (the actual secret) over the full match
|
|
7
|
+
const secret = match[1] ?? match[0];
|
|
8
|
+
if (!secret)
|
|
9
|
+
return line;
|
|
10
|
+
return line.replace(secret, REDACT_CHAR.repeat(secret.length));
|
|
11
|
+
}
|
|
12
|
+
/** Scan an array of {text, originalLineNumber} pairs against all patterns. */
|
|
13
|
+
function scanEntries(entries) {
|
|
14
|
+
const findings = [];
|
|
15
|
+
for (const { text, lineNumber } of entries) {
|
|
16
|
+
for (const { name, pattern } of SECRET_PATTERNS) {
|
|
17
|
+
const match = text.match(pattern);
|
|
18
|
+
if (match) {
|
|
19
|
+
findings.push({
|
|
20
|
+
rule: name,
|
|
21
|
+
line: lineNumber,
|
|
22
|
+
redacted: redactLine(text, match),
|
|
23
|
+
});
|
|
24
|
+
break; // One finding per line — first match wins
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
return findings;
|
|
29
|
+
}
|
|
30
|
+
// ── Public API ───────────────────────────────────────────────────────────────
|
|
31
|
+
/**
|
|
32
|
+
* Scan a unified diff string for secrets.
|
|
33
|
+
* Only inspects lines that start with `+` (added lines); context lines and
|
|
34
|
+
* removed lines (`-`) are ignored.
|
|
35
|
+
*
|
|
36
|
+
* @param diff Output of `git diff` or `git diff --cached`
|
|
37
|
+
* @returns Array of findings with redacted values
|
|
38
|
+
*/
|
|
39
|
+
export function scanDiff(diff) {
|
|
40
|
+
const lines = diff.split('\n');
|
|
41
|
+
const addedEntries = [];
|
|
42
|
+
for (let i = 0; i < lines.length; i++) {
|
|
43
|
+
const line = lines[i];
|
|
44
|
+
// Skip diff meta-headers (+++/---/@@/diff/index) and removed lines
|
|
45
|
+
if (line.startsWith('+') && !line.startsWith('+++')) {
|
|
46
|
+
addedEntries.push({ text: line.slice(1), lineNumber: i + 1 });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
return scanEntries(addedEntries);
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Scan the full content of a file for secrets.
|
|
53
|
+
* Every line is inspected (no diff-prefix filtering).
|
|
54
|
+
*
|
|
55
|
+
* @param content Raw file text
|
|
56
|
+
* @returns Array of findings with redacted values
|
|
57
|
+
*/
|
|
58
|
+
export function scanFile(content) {
|
|
59
|
+
const entries = content.split('\n').map((text, i) => ({ text, lineNumber: i + 1 }));
|
|
60
|
+
return scanEntries(entries);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=secrets-scanner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"secrets-scanner.js","sourceRoot":"","sources":["../../../src/security/secrets-scanner.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAaxD,gFAAgF;AAEhF,MAAM,WAAW,GAAG,GAAG,CAAC;AAExB,8DAA8D;AAC9D,SAAS,UAAU,CAAC,IAAY,EAAE,KAAuB;IACvD,iEAAiE;IACjE,MAAM,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAC;IACzB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;AACjE,CAAC;AAED,8EAA8E;AAC9E,SAAS,WAAW,CAAC,OAAoD;IACvE,MAAM,QAAQ,GAAkB,EAAE,CAAC;IAEnC,KAAK,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,OAAO,EAAE,CAAC;QAC3C,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,eAAe,EAAE,CAAC;YAChD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAClC,IAAI,KAAK,EAAE,CAAC;gBACV,QAAQ,CAAC,IAAI,CAAC;oBACZ,IAAI,EAAE,IAAI;oBACV,IAAI,EAAE,UAAU;oBAChB,QAAQ,EAAE,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC;iBAClC,CAAC,CAAC;gBACH,MAAM,CAAC,0CAA0C;YACnD,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,gFAAgF;AAEhF;;;;;;;GAOG;AACH,MAAM,UAAU,QAAQ,CAAC,IAAY;IACnC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC/B,MAAM,YAAY,GAAgD,EAAE,CAAC;IAErE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACtC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;QACtB,mEAAmE;QACnE,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;YACpD,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAC,YAAY,CAAC,CAAC;AACnC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,QAAQ,CAAC,OAAe;IACtC,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;IACpF,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC;AAC9B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { SkillMeta } from './registry.js';
|
|
2
|
+
export interface ClassifierResult {
|
|
3
|
+
skillName: string;
|
|
4
|
+
}
|
|
5
|
+
export interface TaskClassifier {
|
|
6
|
+
classify(title: string, description: string, skills: SkillMeta[]): Promise<ClassifierResult>;
|
|
7
|
+
}
|
|
8
|
+
export declare function createClassifier(apiKey: string): TaskClassifier;
|
|
9
|
+
//# sourceMappingURL=classifier.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifier.d.ts","sourceRoot":"","sources":["../../../src/skills/classifier.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC;CAC9F;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,GAAG,cAAc,CA+C/D"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
2
|
+
export function createClassifier(apiKey) {
|
|
3
|
+
const client = new Anthropic({ apiKey });
|
|
4
|
+
return {
|
|
5
|
+
async classify(title, description, skills) {
|
|
6
|
+
const fallback = skills[0]?.name ?? 'backend-typescript';
|
|
7
|
+
try {
|
|
8
|
+
const skillList = skills
|
|
9
|
+
.map((s) => `- ${s.name}: ${s.description}`)
|
|
10
|
+
.join('\n');
|
|
11
|
+
const response = await client.messages.create({
|
|
12
|
+
model: 'claude-haiku-4-5-20251001',
|
|
13
|
+
max_tokens: 50,
|
|
14
|
+
messages: [
|
|
15
|
+
{
|
|
16
|
+
role: 'user',
|
|
17
|
+
content: `You are a task classifier for a software engineering team.
|
|
18
|
+
Given a task and a list of available skills, return the single most relevant skill name.
|
|
19
|
+
Return ONLY the skill name, nothing else.
|
|
20
|
+
|
|
21
|
+
Available skills:
|
|
22
|
+
${skillList}
|
|
23
|
+
|
|
24
|
+
Task title: ${title}
|
|
25
|
+
Task description: ${description ?? ''}`,
|
|
26
|
+
},
|
|
27
|
+
],
|
|
28
|
+
});
|
|
29
|
+
const text = response.content[0].type === 'text'
|
|
30
|
+
? response.content[0].text.trim()
|
|
31
|
+
: fallback;
|
|
32
|
+
const valid = skills.find((s) => s.name === text);
|
|
33
|
+
return { skillName: valid?.name ?? fallback };
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
return { skillName: fallback };
|
|
37
|
+
}
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=classifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"classifier.js","sourceRoot":"","sources":["../../../src/skills/classifier.ts"],"names":[],"mappings":"AAAA,OAAO,SAAS,MAAM,mBAAmB,CAAC;AAW1C,MAAM,UAAU,gBAAgB,CAAC,MAAc;IAC7C,MAAM,MAAM,GAAG,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC;IAEzC,OAAO;QACL,KAAK,CAAC,QAAQ,CACZ,KAAa,EACb,WAAmB,EACnB,MAAmB;YAEnB,MAAM,QAAQ,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,oBAAoB,CAAC;YAEzD,IAAI,CAAC;gBACH,MAAM,SAAS,GAAG,MAAM;qBACrB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;qBAC3C,IAAI,CAAC,IAAI,CAAC,CAAC;gBAEd,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC;oBAC5C,KAAK,EAAE,2BAA2B;oBAClC,UAAU,EAAE,EAAE;oBACd,QAAQ,EAAE;wBACR;4BACE,IAAI,EAAE,MAAM;4BACZ,OAAO,EAAE;;;;;EAKrB,SAAS;;cAEG,KAAK;oBACC,WAAW,IAAI,EAAE,EAAE;yBAC1B;qBACF;iBACF,CAAC,CAAC;gBAEH,MAAM,IAAI,GACR,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,KAAK,MAAM;oBACjC,CAAC,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE;oBACjC,CAAC,CAAC,QAAQ,CAAC;gBAEf,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAC;gBAClD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,IAAI,IAAI,QAAQ,EAAE,CAAC;YAChD,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;YACjC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export interface SkillMeta {
|
|
2
|
+
name: string;
|
|
3
|
+
description: string;
|
|
4
|
+
domain: string;
|
|
5
|
+
subdomain: string;
|
|
6
|
+
source: 'bundled' | 'local';
|
|
7
|
+
}
|
|
8
|
+
export interface Skill extends SkillMeta {
|
|
9
|
+
content: string;
|
|
10
|
+
}
|
|
11
|
+
export interface SkillRegistry {
|
|
12
|
+
listSkills(): SkillMeta[];
|
|
13
|
+
getSkill(name: string): Skill | undefined;
|
|
14
|
+
}
|
|
15
|
+
export declare function createSkillRegistry(localSkillsDir: string, bundledSkillsDir?: string): SkillRegistry;
|
|
16
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../../src/skills/registry.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,KAAM,SAAQ,SAAS;IACtC,OAAO,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,UAAU,IAAI,SAAS,EAAE,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,GAAG,SAAS,CAAC;CAC3C;AAmCD,wBAAgB,mBAAmB,CAAC,cAAc,EAAE,MAAM,EAAE,gBAAgB,CAAC,EAAE,MAAM,GAAG,aAAa,CAyBpG"}
|