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.
Files changed (239) hide show
  1. package/config/skills/agent/browse-stealth/execute.sh +7 -7
  2. package/config/skills/agent/competitor-content-tracker/execute.sh +13 -13
  3. package/config/skills/agent/content-calendar/execute.sh +29 -29
  4. package/config/skills/agent/content-repurposer/execute.sh +8 -8
  5. package/config/skills/agent/content-writer/execute.sh +22 -22
  6. package/config/skills/agent/core/block-task/execute.sh +5 -5
  7. package/config/skills/agent/core/check-quality-gates/execute.sh +5 -5
  8. package/config/skills/agent/core/complete-task/execute.sh +13 -13
  9. package/config/skills/agent/core/generate-pdf/execute.sh +4 -4
  10. package/config/skills/agent/core/get-sops/execute.sh +4 -4
  11. package/config/skills/agent/core/get-team-norms/execute.sh +4 -4
  12. package/config/skills/agent/core/handoff-task/execute.sh +8 -8
  13. package/config/skills/agent/core/manage-knowledge/execute.sh +14 -14
  14. package/config/skills/agent/core/marketplace-search/execute.sh +6 -6
  15. package/config/skills/agent/core/query-knowledge/execute.sh +5 -5
  16. package/config/skills/agent/core/read-task/execute.sh +2 -2
  17. package/config/skills/agent/core/report-progress/execute.sh +5 -5
  18. package/config/skills/agent/core/report-status/execute.sh +2 -2
  19. package/config/skills/agent/core/save-working-state/execute.sh +5 -5
  20. package/config/skills/agent/core/schedule-check/execute.sh +9 -9
  21. package/config/skills/agent/core/send-chat-response/execute.sh +5 -5
  22. package/config/skills/agent/core/update-team-norm/execute.sh +9 -9
  23. package/config/skills/agent/core/update-user-profile/execute.sh +2 -2
  24. package/config/skills/agent/marketing/brand-onboarding/execute.sh +8 -8
  25. package/config/skills/agent/marketing/submit-for-approval/execute.sh +10 -10
  26. package/config/skills/agent/marketing/weekly-content-planning/execute.sh +8 -8
  27. package/config/skills/agent/marketing/weekly-marketing-report/execute.sh +5 -5
  28. package/config/skills/agent/trend-monitor/execute.sh +12 -12
  29. package/config/skills/auditor/score-task/execute.sh +4 -4
  30. package/config/skills/orchestrator/assign-task/execute.sh +1 -1
  31. package/config/skills/orchestrator/assign-team-to-project/execute.sh +2 -2
  32. package/config/skills/orchestrator/broadcast/execute.sh +2 -2
  33. package/config/skills/orchestrator/broadcast-to-org/execute.sh +3 -3
  34. package/config/skills/orchestrator/cancel-all-schedules/execute.sh +3 -3
  35. package/config/skills/orchestrator/cancel-cron/execute.sh +2 -2
  36. package/config/skills/orchestrator/cancel-schedule/execute.sh +2 -2
  37. package/config/skills/orchestrator/complete-task/execute.sh +1 -1
  38. package/config/skills/orchestrator/create-cron/execute.sh +6 -6
  39. package/config/skills/orchestrator/create-project/execute.sh +2 -2
  40. package/config/skills/orchestrator/create-team/execute.sh +2 -2
  41. package/config/skills/orchestrator/get-agent-logs/execute.sh +3 -3
  42. package/config/skills/orchestrator/get-agent-status/execute.sh +2 -2
  43. package/config/skills/orchestrator/get-tasks/execute.sh +2 -2
  44. package/config/skills/orchestrator/handle-agent-failure/execute.sh +7 -7
  45. package/config/skills/orchestrator/list-cron/execute.sh +3 -3
  46. package/config/skills/orchestrator/list-schedules/execute.sh +2 -2
  47. package/config/skills/orchestrator/query-knowledge/execute.sh +5 -5
  48. package/config/skills/orchestrator/read-session-logs/execute.sh +3 -3
  49. package/config/skills/orchestrator/read-system-logs/execute.sh +3 -3
  50. package/config/skills/orchestrator/recall/execute.sh +2 -2
  51. package/config/skills/orchestrator/record-failure/execute.sh +2 -2
  52. package/config/skills/orchestrator/record-learning/execute.sh +2 -2
  53. package/config/skills/orchestrator/record-success/execute.sh +2 -2
  54. package/config/skills/orchestrator/register-self/execute.sh +4 -4
  55. package/config/skills/orchestrator/remember/execute.sh +3 -3
  56. package/config/skills/orchestrator/report-bug/execute.sh +5 -5
  57. package/config/skills/orchestrator/resume-session/execute.sh +2 -2
  58. package/config/skills/orchestrator/schedule-check/execute.sh +10 -10
  59. package/config/skills/orchestrator/send-key/execute.sh +6 -6
  60. package/config/skills/orchestrator/set-goal/execute.sh +2 -2
  61. package/config/skills/orchestrator/start-agent/execute.sh +3 -3
  62. package/config/skills/orchestrator/start-team/execute.sh +2 -2
  63. package/config/skills/orchestrator/stop-agent/execute.sh +3 -3
  64. package/config/skills/orchestrator/stop-team/execute.sh +2 -2
  65. package/config/skills/orchestrator/subscribe-event/execute.sh +3 -3
  66. package/config/skills/orchestrator/terminate-agent/execute.sh +2 -2
  67. package/config/skills/orchestrator/unsubscribe-event/execute.sh +2 -2
  68. package/config/skills/orchestrator/update-cron/execute.sh +3 -3
  69. package/config/skills/orchestrator/update-focus/execute.sh +2 -2
  70. package/config/skills/orchestrator/update-team/execute.sh +3 -3
  71. package/config/skills/team-leader/aggregate-results/execute.sh +7 -7
  72. package/config/skills/team-leader/decompose-goal/execute.sh +5 -5
  73. package/config/skills/team-leader/handle-failure/execute.sh +10 -10
  74. package/config/skills/team-leader/schedule-check/execute.sh +9 -9
  75. package/config/skills/team-leader/start-agent/execute.sh +4 -4
  76. package/config/skills/team-leader/stop-agent/execute.sh +4 -4
  77. package/config/skills/team-leader/verify-output/execute.sh +8 -8
  78. package/config/templates/cloud-deploy.json +119 -0
  79. package/config/templates/dev-fullstack/template.json +64 -17
  80. package/config/templates/research-analysis/template.json +44 -15
  81. package/config/templates/social-media-ops/template.json +43 -15
  82. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts +31 -0
  83. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.d.ts.map +1 -0
  84. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js +94 -0
  85. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.controller.js.map +1 -0
  86. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts +19 -0
  87. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.d.ts.map +1 -0
  88. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js +25 -0
  89. package/dist/backend/backend/src/controllers/agent-stream/agent-stream.routes.js.map +1 -0
  90. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts +11 -3
  91. package/dist/backend/backend/src/controllers/browser/browser.controller.d.ts.map +1 -1
  92. package/dist/backend/backend/src/controllers/browser/browser.controller.js +56 -26
  93. package/dist/backend/backend/src/controllers/browser/browser.controller.js.map +1 -1
  94. package/dist/backend/backend/src/controllers/browser/browser.routes.d.ts.map +1 -1
  95. package/dist/backend/backend/src/controllers/browser/browser.routes.js +3 -1
  96. package/dist/backend/backend/src/controllers/browser/browser.routes.js.map +1 -1
  97. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts +16 -0
  98. package/dist/backend/backend/src/controllers/chat/chat.controller.d.ts.map +1 -1
  99. package/dist/backend/backend/src/controllers/chat/chat.controller.js +39 -2
  100. package/dist/backend/backend/src/controllers/chat/chat.controller.js.map +1 -1
  101. package/dist/backend/backend/src/controllers/chat/chat.routes.d.ts.map +1 -1
  102. package/dist/backend/backend/src/controllers/chat/chat.routes.js +3 -1
  103. package/dist/backend/backend/src/controllers/chat/chat.routes.js.map +1 -1
  104. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +15 -0
  105. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  106. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +45 -0
  107. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  108. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts +1 -0
  109. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  110. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +3 -1
  111. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  112. package/dist/backend/backend/src/controllers/index.d.ts.map +1 -1
  113. package/dist/backend/backend/src/controllers/index.js +2 -0
  114. package/dist/backend/backend/src/controllers/index.js.map +1 -1
  115. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts +15 -0
  116. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.d.ts.map +1 -1
  117. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js +35 -1
  118. package/dist/backend/backend/src/controllers/marketplace/marketplace.controller.js.map +1 -1
  119. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.d.ts.map +1 -1
  120. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js +2 -1
  121. package/dist/backend/backend/src/controllers/marketplace/marketplace.routes.js.map +1 -1
  122. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.d.ts.map +1 -1
  123. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js +7 -1
  124. package/dist/backend/backend/src/controllers/monitoring/monitoring.routes.js.map +1 -1
  125. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts +29 -0
  126. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.d.ts.map +1 -1
  127. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js +76 -0
  128. package/dist/backend/backend/src/controllers/monitoring/token-usage.controller.js.map +1 -1
  129. package/dist/backend/backend/src/controllers/project/project.controller.d.ts +16 -0
  130. package/dist/backend/backend/src/controllers/project/project.controller.d.ts.map +1 -1
  131. package/dist/backend/backend/src/controllers/project/project.controller.js +47 -0
  132. package/dist/backend/backend/src/controllers/project/project.controller.js.map +1 -1
  133. package/dist/backend/backend/src/controllers/project/project.routes.d.ts.map +1 -1
  134. package/dist/backend/backend/src/controllers/project/project.routes.js +3 -1
  135. package/dist/backend/backend/src/controllers/project/project.routes.js.map +1 -1
  136. package/dist/backend/backend/src/controllers/team/team.controller.d.ts.map +1 -1
  137. package/dist/backend/backend/src/controllers/team/team.controller.js +34 -3
  138. package/dist/backend/backend/src/controllers/team/team.controller.js.map +1 -1
  139. package/dist/backend/backend/src/index.d.ts.map +1 -1
  140. package/dist/backend/backend/src/index.js +18 -4
  141. package/dist/backend/backend/src/index.js.map +1 -1
  142. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  143. package/dist/backend/backend/src/services/agent/agent-registration.service.js +25 -0
  144. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  145. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts +2 -0
  146. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.d.ts.map +1 -1
  147. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js +19 -0
  148. package/dist/backend/backend/src/services/agent/crewly-agent/agent-runner.service.js.map +1 -1
  149. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts +145 -0
  150. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.d.ts.map +1 -0
  151. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js +133 -0
  152. package/dist/backend/backend/src/services/agent/crewly-agent/agent-stream.service.js.map +1 -0
  153. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts +130 -0
  154. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.d.ts.map +1 -0
  155. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js +263 -0
  156. package/dist/backend/backend/src/services/agent/crewly-agent/audit-log.service.js.map +1 -0
  157. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.d.ts.map +1 -1
  158. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js +8 -0
  159. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-runtime.service.js.map +1 -1
  160. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts +79 -0
  161. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.d.ts.map +1 -0
  162. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js +218 -0
  163. package/dist/backend/backend/src/services/agent/crewly-agent/env-isolation.service.js.map +1 -0
  164. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts +91 -0
  165. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.d.ts.map +1 -0
  166. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js +143 -0
  167. package/dist/backend/backend/src/services/agent/crewly-agent/output-filter.service.js.map +1 -0
  168. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts +103 -0
  169. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.d.ts.map +1 -0
  170. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js +256 -0
  171. package/dist/backend/backend/src/services/agent/crewly-agent/prompt-guard.service.js.map +1 -0
  172. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts +44 -0
  173. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.d.ts.map +1 -1
  174. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js +323 -1
  175. package/dist/backend/backend/src/services/agent/crewly-agent/tool-registry.js.map +1 -1
  176. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts +21 -0
  177. package/dist/backend/backend/src/services/agent/crewly-agent/types.d.ts.map +1 -1
  178. package/dist/backend/backend/src/services/agent/crewly-agent/types.js +7 -0
  179. package/dist/backend/backend/src/services/agent/crewly-agent/types.js.map +1 -1
  180. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts +4 -1
  181. package/dist/backend/backend/src/services/browser/browser-bridge.service.d.ts.map +1 -1
  182. package/dist/backend/backend/src/services/browser/browser-bridge.service.js +26 -11
  183. package/dist/backend/backend/src/services/browser/browser-bridge.service.js.map +1 -1
  184. package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts +100 -0
  185. package/dist/backend/backend/src/services/chat/chat-highlights.service.d.ts.map +1 -0
  186. package/dist/backend/backend/src/services/chat/chat-highlights.service.js +145 -0
  187. package/dist/backend/backend/src/services/chat/chat-highlights.service.js.map +1 -0
  188. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts +76 -0
  189. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.d.ts.map +1 -0
  190. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js +127 -0
  191. package/dist/backend/backend/src/services/chat/chat-sanitizer.service.js.map +1 -0
  192. package/dist/backend/backend/src/services/chat/chat.service.d.ts +8 -0
  193. package/dist/backend/backend/src/services/chat/chat.service.d.ts.map +1 -1
  194. package/dist/backend/backend/src/services/chat/chat.service.js +27 -1
  195. package/dist/backend/backend/src/services/chat/chat.service.js.map +1 -1
  196. package/dist/backend/backend/src/services/marketplace/index.d.ts +1 -1
  197. package/dist/backend/backend/src/services/marketplace/index.d.ts.map +1 -1
  198. package/dist/backend/backend/src/services/marketplace/index.js +1 -1
  199. package/dist/backend/backend/src/services/marketplace/index.js.map +1 -1
  200. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts +11 -0
  201. package/dist/backend/backend/src/services/marketplace/marketplace.service.d.ts.map +1 -1
  202. package/dist/backend/backend/src/services/marketplace/marketplace.service.js +31 -0
  203. package/dist/backend/backend/src/services/marketplace/marketplace.service.js.map +1 -1
  204. package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts +197 -0
  205. package/dist/backend/backend/src/services/monitoring/token-estimator.service.d.ts.map +1 -0
  206. package/dist/backend/backend/src/services/monitoring/token-estimator.service.js +408 -0
  207. package/dist/backend/backend/src/services/monitoring/token-estimator.service.js.map +1 -0
  208. package/dist/backend/backend/src/services/project/project-search.service.d.ts +62 -0
  209. package/dist/backend/backend/src/services/project/project-search.service.d.ts.map +1 -0
  210. package/dist/backend/backend/src/services/project/project-search.service.js +107 -0
  211. package/dist/backend/backend/src/services/project/project-search.service.js.map +1 -0
  212. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts +11 -0
  213. package/dist/backend/backend/src/services/quality/quality-gate.service.d.ts.map +1 -1
  214. package/dist/backend/backend/src/services/quality/quality-gate.service.js +93 -19
  215. package/dist/backend/backend/src/services/quality/quality-gate.service.js.map +1 -1
  216. package/dist/backend/backend/src/types/settings.types.d.ts +3 -0
  217. package/dist/backend/backend/src/types/settings.types.d.ts.map +1 -1
  218. package/dist/backend/backend/src/types/settings.types.js +1 -0
  219. package/dist/backend/backend/src/types/settings.types.js.map +1 -1
  220. package/dist/cli/backend/src/types/settings.types.d.ts +3 -0
  221. package/dist/cli/backend/src/types/settings.types.d.ts.map +1 -1
  222. package/dist/cli/backend/src/types/settings.types.js +1 -0
  223. package/dist/cli/backend/src/types/settings.types.js.map +1 -1
  224. package/dist/cli/cli/src/commands/stop.d.ts.map +1 -1
  225. package/dist/cli/cli/src/commands/stop.js +3 -0
  226. package/dist/cli/cli/src/commands/stop.js.map +1 -1
  227. package/dist/cli/cli/src/utils/license-check.d.ts +70 -0
  228. package/dist/cli/cli/src/utils/license-check.d.ts.map +1 -0
  229. package/dist/cli/cli/src/utils/license-check.js +124 -0
  230. package/dist/cli/cli/src/utils/license-check.js.map +1 -0
  231. package/dist/cli/cli/src/utils/process-cleanup.d.ts +9 -0
  232. package/dist/cli/cli/src/utils/process-cleanup.d.ts.map +1 -1
  233. package/dist/cli/cli/src/utils/process-cleanup.js +48 -0
  234. package/dist/cli/cli/src/utils/process-cleanup.js.map +1 -1
  235. package/frontend/dist/assets/{index-27a2c65e.js → index-76782e9e.js} +355 -355
  236. package/frontend/dist/assets/index-b19b2478.css +33 -0
  237. package/frontend/dist/index.html +2 -2
  238. package/package.json +1 -1
  239. 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;AAMH,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACvD,OAAO,KAAK,EAAE,cAAc,EAAE,aAAa,EAAE,eAAe,EAAoD,MAAM,YAAY,CAAC;AA0BnI;;;;;;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;AAoJD;;;;;;;;;;;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,CAwC5D,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,CAwlCtR;AA2BD;;;;GAIG;AACH,wBAAgB,YAAY,IAAI,MAAM,EAAE,CAWvC"}
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"}