crewly 1.5.9 → 1.5.10
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/config/skills/agent/browse-stealth/execute.sh +7 -7
- package/config/skills/agent/competitor-content-tracker/execute.sh +13 -13
- package/config/skills/agent/content-calendar/execute.sh +29 -29
- package/config/skills/agent/content-repurposer/execute.sh +8 -8
- package/config/skills/agent/content-writer/execute.sh +22 -22
- package/config/skills/agent/core/block-task/execute.sh +5 -5
- package/config/skills/agent/core/check-quality-gates/execute.sh +5 -5
- package/config/skills/agent/core/complete-task/execute.sh +13 -13
- package/config/skills/agent/core/generate-pdf/execute.sh +4 -4
- package/config/skills/agent/core/get-sops/execute.sh +4 -4
- package/config/skills/agent/core/get-team-norms/execute.sh +4 -4
- package/config/skills/agent/core/handoff-task/execute.sh +8 -8
- package/config/skills/agent/core/manage-knowledge/execute.sh +14 -14
- package/config/skills/agent/core/marketplace-search/execute.sh +6 -6
- package/config/skills/agent/core/query-knowledge/execute.sh +5 -5
- package/config/skills/agent/core/read-task/execute.sh +2 -2
- package/config/skills/agent/core/report-progress/execute.sh +5 -5
- package/config/skills/agent/core/report-status/execute.sh +2 -2
- package/config/skills/agent/core/save-working-state/execute.sh +5 -5
- package/config/skills/agent/core/schedule-check/execute.sh +9 -9
- package/config/skills/agent/core/send-chat-response/execute.sh +5 -5
- package/config/skills/agent/core/update-team-norm/execute.sh +9 -9
- package/config/skills/agent/core/update-user-profile/execute.sh +2 -2
- package/config/skills/agent/marketing/brand-onboarding/execute.sh +8 -8
- package/config/skills/agent/marketing/submit-for-approval/execute.sh +10 -10
- package/config/skills/agent/marketing/weekly-content-planning/execute.sh +8 -8
- package/config/skills/agent/marketing/weekly-marketing-report/execute.sh +5 -5
- package/config/skills/agent/trend-monitor/execute.sh +12 -12
- package/config/skills/auditor/score-task/execute.sh +4 -4
- package/config/skills/orchestrator/assign-task/execute.sh +1 -1
- package/config/skills/orchestrator/assign-team-to-project/execute.sh +2 -2
- package/config/skills/orchestrator/broadcast/execute.sh +2 -2
- package/config/skills/orchestrator/broadcast-to-org/execute.sh +3 -3
- package/config/skills/orchestrator/cancel-all-schedules/execute.sh +3 -3
- package/config/skills/orchestrator/cancel-cron/execute.sh +2 -2
- package/config/skills/orchestrator/cancel-schedule/execute.sh +2 -2
- package/config/skills/orchestrator/complete-task/execute.sh +1 -1
- package/config/skills/orchestrator/create-cron/execute.sh +6 -6
- package/config/skills/orchestrator/create-project/execute.sh +2 -2
- package/config/skills/orchestrator/create-team/execute.sh +2 -2
- package/config/skills/orchestrator/get-agent-logs/execute.sh +3 -3
- package/config/skills/orchestrator/get-agent-status/execute.sh +2 -2
- package/config/skills/orchestrator/get-tasks/execute.sh +2 -2
- package/config/skills/orchestrator/handle-agent-failure/execute.sh +7 -7
- package/config/skills/orchestrator/list-cron/execute.sh +3 -3
- package/config/skills/orchestrator/list-schedules/execute.sh +2 -2
- package/config/skills/orchestrator/query-knowledge/execute.sh +5 -5
- package/config/skills/orchestrator/read-session-logs/execute.sh +3 -3
- package/config/skills/orchestrator/read-system-logs/execute.sh +3 -3
- package/config/skills/orchestrator/recall/execute.sh +2 -2
- package/config/skills/orchestrator/record-failure/execute.sh +2 -2
- package/config/skills/orchestrator/record-learning/execute.sh +2 -2
- package/config/skills/orchestrator/record-success/execute.sh +2 -2
- package/config/skills/orchestrator/register-self/execute.sh +4 -4
- package/config/skills/orchestrator/remember/execute.sh +3 -3
- package/config/skills/orchestrator/report-bug/execute.sh +5 -5
- package/config/skills/orchestrator/resume-session/execute.sh +2 -2
- package/config/skills/orchestrator/schedule-check/execute.sh +10 -10
- package/config/skills/orchestrator/send-key/execute.sh +6 -6
- package/config/skills/orchestrator/set-goal/execute.sh +2 -2
- package/config/skills/orchestrator/start-agent/execute.sh +3 -3
- package/config/skills/orchestrator/start-team/execute.sh +2 -2
- package/config/skills/orchestrator/stop-agent/execute.sh +3 -3
- package/config/skills/orchestrator/stop-team/execute.sh +2 -2
- package/config/skills/orchestrator/subscribe-event/execute.sh +3 -3
- package/config/skills/orchestrator/terminate-agent/execute.sh +2 -2
- package/config/skills/orchestrator/unsubscribe-event/execute.sh +2 -2
- package/config/skills/orchestrator/update-cron/execute.sh +3 -3
- package/config/skills/orchestrator/update-focus/execute.sh +2 -2
- package/config/skills/orchestrator/update-team/execute.sh +3 -3
- package/config/skills/team-leader/aggregate-results/execute.sh +7 -7
- package/config/skills/team-leader/decompose-goal/execute.sh +5 -5
- package/config/skills/team-leader/handle-failure/execute.sh +10 -10
- package/config/skills/team-leader/schedule-check/execute.sh +9 -9
- package/config/skills/team-leader/start-agent/execute.sh +4 -4
- package/config/skills/team-leader/stop-agent/execute.sh +4 -4
- package/config/skills/team-leader/verify-output/execute.sh +8 -8
- package/config/templates/cloud-deploy.json +119 -0
- package/config/templates/dev-fullstack/template.json +64 -17
- package/config/templates/research-analysis/template.json +44 -15
- package/config/templates/social-media-ops/template.json +43 -15
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts +31 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +94 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts +19 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts.map +1 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js +25 -0
- package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js.map +1 -0
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +11 -3
- package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.controller.js +56 -26
- package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js +3 -1
- package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +16 -0
- package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.controller.js +39 -2
- package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/chat/chat.routes.js +3 -1
- package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +15 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +45 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +1 -0
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +3 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/index.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/index.js +2 -0
- package/dist/backend/backend/src/controllers/index.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +15 -0
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +35 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +2 -1
- package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js +7 -1
- package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts +29 -0
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js +76 -0
- package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts +16 -0
- package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.controller.js +47 -0
- package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project/project.routes.js +3 -1
- package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/team/team.controller.js +34 -3
- package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +18 -4
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +2 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +19 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts +145 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js +133 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +8 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +44 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +323 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +21 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js +7 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +4 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js +26 -11
- package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
- package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts +100 -0
- package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat/chat-highlights.service.js +145 -0
- package/dist/backend/backend/src/services/chat/chat-highlights.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts +76 -0
- package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js +127 -0
- package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js.map +1 -0
- package/dist/backend/backend/src/services/chat/chat.service.d.ts +8 -0
- package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/chat/chat.service.js +27 -1
- package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -1
- package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/index.js +1 -1
- package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +11 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js +31 -0
- package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts +197 -0
- package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/token-estimator.service.js +408 -0
- package/dist/backend/backend/src/services/monitoring/token-estimator.service.js.map +1 -0
- package/dist/backend/backend/src/services/project/project-search.service.d.ts +62 -0
- package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/project/project-search.service.js +107 -0
- package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts +11 -0
- package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/quality/quality-gate.service.js +93 -19
- package/dist/backend/backend/src/services/quality/quality-gate.service.js.map +1 -1
- package/dist/backend/backend/src/types/settings.types.d.ts +3 -0
- package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/settings.types.js +1 -0
- package/dist/backend/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/backend/src/types/settings.types.d.ts +3 -0
- package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/settings.types.js +1 -0
- package/dist/cli/backend/src/types/settings.types.js.map +1 -1
- package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/stop.js +3 -0
- package/dist/cli/cli/src/commands/stop.js.map +1 -1
- package/dist/cli/cli/src/utils/license-check.d.ts +70 -0
- package/dist/cli/cli/src/utils/license-check.d.ts.map +1 -0
- package/dist/cli/cli/src/utils/license-check.js +124 -0
- package/dist/cli/cli/src/utils/license-check.js.map +1 -0
- package/dist/cli/cli/src/utils/process-cleanup.d.ts +9 -0
- package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
- package/dist/cli/cli/src/utils/process-cleanup.js +48 -0
- package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
- package/frontend/dist/assets/{index-27a2c65e.js → index-76782e9e.js} +355 -355
- package/frontend/dist/assets/index-b19b2478.css +33 -0
- package/frontend/dist/index.html +2 -2
- package/package.json +1 -1
- package/frontend/dist/assets/index-dc6ac165.css +0 -33
|
@@ -0,0 +1,256 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt Guard Service — Prompt Injection Protection
|
|
3
|
+
*
|
|
4
|
+
* Detects and blocks prompt injection attempts that try to extract API keys,
|
|
5
|
+
* secrets, or sensitive environment variables through agent commands.
|
|
6
|
+
*
|
|
7
|
+
* Integrates with the tool registry to block dangerous bash commands and
|
|
8
|
+
* logs blocked attempts to the audit trail.
|
|
9
|
+
*
|
|
10
|
+
* @module services/agent/crewly-agent/prompt-guard.service
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* ```typescript
|
|
14
|
+
* const guard = new PromptGuardService();
|
|
15
|
+
* const result = guard.checkCommand('echo $ANTHROPIC_API_KEY');
|
|
16
|
+
* // { blocked: true, reason: 'Key extraction attempt: echo env var', pattern: '...' }
|
|
17
|
+
* ```
|
|
18
|
+
*/
|
|
19
|
+
/**
|
|
20
|
+
* Patterns that detect attempts to extract API keys or secrets via bash commands.
|
|
21
|
+
*/
|
|
22
|
+
export const KEY_EXTRACTION_PATTERNS = [
|
|
23
|
+
// Direct env var echo/print
|
|
24
|
+
{
|
|
25
|
+
pattern: /\becho\s+\$[A-Z_]*(?:KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH)/i,
|
|
26
|
+
reason: 'Attempt to echo sensitive environment variable',
|
|
27
|
+
category: 'env_extraction',
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
pattern: /\bprintf\s+.*\$[A-Z_]*(?:KEY|SECRET|TOKEN|PASSWORD|CREDENTIAL|AUTH)/i,
|
|
31
|
+
reason: 'Attempt to printf sensitive environment variable',
|
|
32
|
+
category: 'env_extraction',
|
|
33
|
+
},
|
|
34
|
+
// env/printenv with grep for secrets
|
|
35
|
+
{
|
|
36
|
+
pattern: /\benv\b.*\|\s*grep\s+.*(?:KEY|SECRET|TOKEN|PASSWORD|API|AUTH)/i,
|
|
37
|
+
reason: 'Attempt to grep env for secrets',
|
|
38
|
+
category: 'env_extraction',
|
|
39
|
+
},
|
|
40
|
+
{
|
|
41
|
+
pattern: /\bprintenv\b.*(?:KEY|SECRET|TOKEN|PASSWORD|API|AUTH)/i,
|
|
42
|
+
reason: 'Attempt to printenv sensitive variable',
|
|
43
|
+
category: 'env_extraction',
|
|
44
|
+
},
|
|
45
|
+
// set | grep (bash set command dumps all vars)
|
|
46
|
+
{
|
|
47
|
+
pattern: /\bset\b\s*\|\s*grep\s+.*(?:KEY|SECRET|TOKEN|PASSWORD|API|AUTH)/i,
|
|
48
|
+
reason: 'Attempt to dump shell variables and grep for secrets',
|
|
49
|
+
category: 'env_extraction',
|
|
50
|
+
},
|
|
51
|
+
// Reading sensitive config files (must come before bare env/printenv to avoid early match on "cat .env")
|
|
52
|
+
{
|
|
53
|
+
pattern: /\bcat\s+.*\.env\b/i,
|
|
54
|
+
reason: 'Attempt to read .env file',
|
|
55
|
+
category: 'file_exfiltration',
|
|
56
|
+
},
|
|
57
|
+
{
|
|
58
|
+
pattern: /\bcat\s+.*(?:credentials|secrets|\.aws\/credentials|\.npmrc|\.netrc|\.pgpass)/i,
|
|
59
|
+
reason: 'Attempt to read credentials file',
|
|
60
|
+
category: 'file_exfiltration',
|
|
61
|
+
},
|
|
62
|
+
{
|
|
63
|
+
pattern: /\bcat\s+.*\/etc\/shadow\b/i,
|
|
64
|
+
reason: 'Attempt to read system password file',
|
|
65
|
+
category: 'file_exfiltration',
|
|
66
|
+
},
|
|
67
|
+
// Direct env dump
|
|
68
|
+
{
|
|
69
|
+
pattern: /\benv\s*$/i,
|
|
70
|
+
reason: 'Attempt to dump all environment variables',
|
|
71
|
+
category: 'key_dump',
|
|
72
|
+
},
|
|
73
|
+
{
|
|
74
|
+
pattern: /\bprintenv\s*$/i,
|
|
75
|
+
reason: 'Attempt to dump all environment variables',
|
|
76
|
+
category: 'key_dump',
|
|
77
|
+
},
|
|
78
|
+
// compgen dumps shell vars/functions
|
|
79
|
+
{
|
|
80
|
+
pattern: /\bcompgen\s+-[ev]/i,
|
|
81
|
+
reason: 'Attempt to dump shell variables via compgen',
|
|
82
|
+
category: 'key_dump',
|
|
83
|
+
},
|
|
84
|
+
// base64 encoding secrets for exfiltration
|
|
85
|
+
{
|
|
86
|
+
pattern: /\bbase64\b.*\$[A-Z_]*(?:KEY|SECRET|TOKEN)/i,
|
|
87
|
+
reason: 'Attempt to base64 encode secret for exfiltration',
|
|
88
|
+
category: 'file_exfiltration',
|
|
89
|
+
},
|
|
90
|
+
// curl/wget exfiltration of env vars
|
|
91
|
+
{
|
|
92
|
+
pattern: /\b(?:curl|wget)\b.*\$[A-Z_]*(?:KEY|SECRET|TOKEN)/i,
|
|
93
|
+
reason: 'Attempt to exfiltrate secret via HTTP request',
|
|
94
|
+
category: 'file_exfiltration',
|
|
95
|
+
},
|
|
96
|
+
// Python/Node one-liners to access env
|
|
97
|
+
{
|
|
98
|
+
pattern: /\bpython[23]?\s+-c\s+.*os\.environ/i,
|
|
99
|
+
reason: 'Attempt to access env via Python subprocess',
|
|
100
|
+
category: 'env_extraction',
|
|
101
|
+
},
|
|
102
|
+
{
|
|
103
|
+
pattern: /\bnode\s+-e\s+.*process\.env/i,
|
|
104
|
+
reason: 'Attempt to access env via Node subprocess',
|
|
105
|
+
category: 'env_extraction',
|
|
106
|
+
},
|
|
107
|
+
// Specific key variable names in $() or backtick subshells
|
|
108
|
+
{
|
|
109
|
+
pattern: /\$\(.*(?:ANTHROPIC_API_KEY|OPENAI_API_KEY|GOOGLE_API_KEY|AWS_SECRET|STRIPE_SECRET)/i,
|
|
110
|
+
reason: 'Attempt to expand sensitive env var in subshell',
|
|
111
|
+
category: 'env_extraction',
|
|
112
|
+
},
|
|
113
|
+
];
|
|
114
|
+
/**
|
|
115
|
+
* Prompt-level injection patterns (detected in natural language prompts, not just commands).
|
|
116
|
+
*/
|
|
117
|
+
export const PROMPT_INJECTION_PATTERNS = [
|
|
118
|
+
{
|
|
119
|
+
pattern: /(?:print|show|reveal|tell\s+me|display|output|give\s+me|share)\s+(?:(?:your|the|my|me\s+the)\s+)?(?:api[_ ]?key|secret|token|password|credentials)/i,
|
|
120
|
+
reason: 'Prompt injection: request to reveal API key/secret',
|
|
121
|
+
category: 'prompt_injection',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
pattern: /(?:what\s+is|what's)\s+(?:your|the|my)\s+(?:api[_ ]?key|secret[_ ]?key|auth[_ ]?token|password)/i,
|
|
125
|
+
reason: 'Prompt injection: question about API key/secret',
|
|
126
|
+
category: 'prompt_injection',
|
|
127
|
+
},
|
|
128
|
+
{
|
|
129
|
+
pattern: /ignore\s+(?:previous|all|your)\s+(?:instructions|rules|safety)/i,
|
|
130
|
+
reason: 'Prompt injection: instruction override attempt',
|
|
131
|
+
category: 'prompt_injection',
|
|
132
|
+
},
|
|
133
|
+
{
|
|
134
|
+
pattern: /(?:override|bypass|disable|turn\s+off)\s+(?:security|safety|filter|guardrail|redaction)/i,
|
|
135
|
+
reason: 'Prompt injection: attempt to disable security filters',
|
|
136
|
+
category: 'prompt_injection',
|
|
137
|
+
},
|
|
138
|
+
];
|
|
139
|
+
/**
|
|
140
|
+
* Additional blocked command patterns for tool-registry.ts integration.
|
|
141
|
+
* These extend the existing BLOCKED_COMMAND_PATTERNS with key extraction blocks.
|
|
142
|
+
*/
|
|
143
|
+
export const KEY_EXTRACTION_BLOCKED_COMMANDS = [
|
|
144
|
+
/\benv\s*$/i,
|
|
145
|
+
/\bprintenv\s*$/i,
|
|
146
|
+
/\benv\b.*\|\s*grep\s+.*(?:KEY|SECRET|TOKEN|PASSWORD|API)/i,
|
|
147
|
+
/\bset\b\s*\|\s*grep\s+.*(?:KEY|SECRET|TOKEN|PASSWORD|API)/i,
|
|
148
|
+
/\bcompgen\s+-[ev]/i,
|
|
149
|
+
/\bcat\s+.*\.env\b/i,
|
|
150
|
+
/\bcat\s+.*(?:credentials|secrets|\.aws\/credentials|\.npmrc|\.netrc|\.pgpass)/i,
|
|
151
|
+
];
|
|
152
|
+
/**
|
|
153
|
+
* Service that detects and blocks prompt injection and key extraction attempts.
|
|
154
|
+
*/
|
|
155
|
+
export class PromptGuardService {
|
|
156
|
+
commandPatterns;
|
|
157
|
+
promptPatterns;
|
|
158
|
+
/**
|
|
159
|
+
* Creates a new PromptGuardService.
|
|
160
|
+
*
|
|
161
|
+
* @param additionalCommandPatterns - Extra command-level patterns
|
|
162
|
+
* @param additionalPromptPatterns - Extra prompt-level patterns
|
|
163
|
+
*/
|
|
164
|
+
constructor(additionalCommandPatterns, additionalPromptPatterns) {
|
|
165
|
+
this.commandPatterns = additionalCommandPatterns
|
|
166
|
+
? [...KEY_EXTRACTION_PATTERNS, ...additionalCommandPatterns]
|
|
167
|
+
: KEY_EXTRACTION_PATTERNS;
|
|
168
|
+
this.promptPatterns = additionalPromptPatterns
|
|
169
|
+
? [...PROMPT_INJECTION_PATTERNS, ...additionalPromptPatterns]
|
|
170
|
+
: PROMPT_INJECTION_PATTERNS;
|
|
171
|
+
}
|
|
172
|
+
/**
|
|
173
|
+
* Checks a bash command for key extraction attempts.
|
|
174
|
+
*
|
|
175
|
+
* @param command - Raw bash command string
|
|
176
|
+
* @returns Guard check result
|
|
177
|
+
*/
|
|
178
|
+
checkCommand(command) {
|
|
179
|
+
if (!command) {
|
|
180
|
+
return { blocked: false, reason: '' };
|
|
181
|
+
}
|
|
182
|
+
for (const guard of this.commandPatterns) {
|
|
183
|
+
if (guard.pattern.test(command)) {
|
|
184
|
+
return {
|
|
185
|
+
blocked: true,
|
|
186
|
+
reason: guard.reason,
|
|
187
|
+
category: guard.category,
|
|
188
|
+
matchedPattern: guard.pattern.source,
|
|
189
|
+
};
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
return { blocked: false, reason: '' };
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Checks a user/agent prompt for injection attempts targeting secrets.
|
|
196
|
+
*
|
|
197
|
+
* @param prompt - The text prompt or message
|
|
198
|
+
* @returns Guard check result
|
|
199
|
+
*/
|
|
200
|
+
checkPrompt(prompt) {
|
|
201
|
+
if (!prompt) {
|
|
202
|
+
return { blocked: false, reason: '' };
|
|
203
|
+
}
|
|
204
|
+
for (const guard of this.promptPatterns) {
|
|
205
|
+
if (guard.pattern.test(prompt)) {
|
|
206
|
+
return {
|
|
207
|
+
blocked: true,
|
|
208
|
+
reason: guard.reason,
|
|
209
|
+
category: guard.category,
|
|
210
|
+
matchedPattern: guard.pattern.source,
|
|
211
|
+
};
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
return { blocked: false, reason: '' };
|
|
215
|
+
}
|
|
216
|
+
/**
|
|
217
|
+
* Checks both command and prompt patterns.
|
|
218
|
+
* Use this for comprehensive scanning of any agent input.
|
|
219
|
+
*
|
|
220
|
+
* @param text - Text to check (command or prompt)
|
|
221
|
+
* @returns Guard check result
|
|
222
|
+
*/
|
|
223
|
+
check(text) {
|
|
224
|
+
const cmdResult = this.checkCommand(text);
|
|
225
|
+
if (cmdResult.blocked)
|
|
226
|
+
return cmdResult;
|
|
227
|
+
return this.checkPrompt(text);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Creates an audit entry for a blocked attempt.
|
|
231
|
+
*
|
|
232
|
+
* @param sessionName - Agent session that triggered the block
|
|
233
|
+
* @param toolName - Tool that was used (e.g. 'bash_exec')
|
|
234
|
+
* @param command - The blocked command
|
|
235
|
+
* @param guardResult - The guard check result
|
|
236
|
+
* @returns AuditEntry suitable for the audit log
|
|
237
|
+
*/
|
|
238
|
+
createAuditEntry(sessionName, toolName, command, guardResult) {
|
|
239
|
+
return {
|
|
240
|
+
timestamp: new Date().toISOString(),
|
|
241
|
+
sessionName,
|
|
242
|
+
toolName,
|
|
243
|
+
sensitivity: 'destructive',
|
|
244
|
+
args: {
|
|
245
|
+
command,
|
|
246
|
+
blockedReason: guardResult.reason,
|
|
247
|
+
category: guardResult.category || 'unknown',
|
|
248
|
+
matchedPattern: guardResult.matchedPattern || '',
|
|
249
|
+
},
|
|
250
|
+
success: false,
|
|
251
|
+
error: `Blocked by prompt guard: ${guardResult.reason}`,
|
|
252
|
+
durationMs: 0,
|
|
253
|
+
};
|
|
254
|
+
}
|
|
255
|
+
}
|
|
256
|
+
//# sourceMappingURL=prompt-guard.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-guard.service.js","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/prompt-guard.service.ts"],"names":[],"mappings":"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"}
|
|
@@ -34,6 +34,50 @@ export declare function validateBashCommand(command: string): string | null;
|
|
|
34
34
|
* @returns Matching label if approval is required, or null if safe to proceed
|
|
35
35
|
*/
|
|
36
36
|
export declare function checkBashApprovalRequired(command: string): string | null;
|
|
37
|
+
/**
|
|
38
|
+
* Convert a glob pattern to a RegExp.
|
|
39
|
+
*
|
|
40
|
+
* Supports:
|
|
41
|
+
* - `*` matches any characters except `/`
|
|
42
|
+
* - `**` matches any characters including `/` (recursive)
|
|
43
|
+
* - `?` matches a single character except `/`
|
|
44
|
+
* - `{a,b}` matches either a or b
|
|
45
|
+
* - Character classes `[abc]`
|
|
46
|
+
*
|
|
47
|
+
* @param pattern - Glob pattern string (e.g., "src/**\/*.ts")
|
|
48
|
+
* @returns Compiled RegExp
|
|
49
|
+
*/
|
|
50
|
+
export declare function globToRegExp(pattern: string): RegExp;
|
|
51
|
+
/**
|
|
52
|
+
* Recursively walk a directory tree, yielding file paths that match
|
|
53
|
+
* the given glob pattern while respecting ignore patterns.
|
|
54
|
+
*
|
|
55
|
+
* Uses a stack-based iterative approach to avoid stack overflow on deep trees.
|
|
56
|
+
* Respects DEFAULT_IGNORE_PATTERNS and user-supplied ignore patterns.
|
|
57
|
+
*
|
|
58
|
+
* @param rootDir - Root directory to start traversal
|
|
59
|
+
* @param patternRegex - Compiled glob regex to test relative paths against
|
|
60
|
+
* @param ignoreSet - Set of directory base names to skip
|
|
61
|
+
* @param maxResults - Maximum number of results to return
|
|
62
|
+
* @returns Array of matching absolute file paths
|
|
63
|
+
*/
|
|
64
|
+
export declare function walkAndMatch(rootDir: string, patternRegex: RegExp, ignoreSet: Set<string>, maxResults: number): Promise<string[]>;
|
|
65
|
+
/**
|
|
66
|
+
* Search file contents for lines matching a regular expression.
|
|
67
|
+
*
|
|
68
|
+
* Reads the file once, splits into lines, and tests each against the pattern.
|
|
69
|
+
* Returns matching lines with line numbers and optional context lines.
|
|
70
|
+
*
|
|
71
|
+
* @param filePath - Absolute path to the file to search
|
|
72
|
+
* @param regex - Compiled RegExp to test each line
|
|
73
|
+
* @param contextLines - Number of lines before and after each match to include
|
|
74
|
+
* @returns Array of match objects with line number, content, and context
|
|
75
|
+
*/
|
|
76
|
+
export declare function searchFileContents(filePath: string, regex: RegExp, contextLines: number): Promise<Array<{
|
|
77
|
+
line: number;
|
|
78
|
+
content: string;
|
|
79
|
+
context?: string[];
|
|
80
|
+
}>>;
|
|
37
81
|
/**
|
|
38
82
|
* Strip [NOTIFY]...[/NOTIFY] markers from text.
|
|
39
83
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"tool-registry.d.ts","sourceRoot":"","sources":["../../../../../../../backend/src/services/agent/crewly-agent/tool-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAOH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAoD,MAAM,YAAY,CAAC;AA+BnI;;;;;;GAMG;AACH,eAAO,MAAM,+BAA+B,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CASrF,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOlE;AAED;;;;;GAKG;AACH,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAOxE;AAuKD;;;;;;;;;;;;GAYG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAgDpD;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,EACtB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAgCnB;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CACtC,QAAQ,EAAE,MAAM,EAChB,KAAK,EAAE,MAAM,EACb,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC,CAAC,CAqBvE;AAuBD;;;;;;;;;;;GAWG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAavD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAoBjE;AAED;;;GAGG;AACH,eAAO,MAAM,gBAAgB,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,CA0C5D,CAAC;AAkIF;;;;;;;;;;;;GAYG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,aAAa,EAAE,cAAc,CAAC,EAAE,MAAM,EAAE,YAAY,CAAC,EAAE;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,QAAQ,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAwuCtR;AA2BD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAYvC"}
|