crewly 1.20.157 → 1.20.159

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 (154) hide show
  1. package/README.md +1 -0
  2. package/config/skills/registry.json +55 -4
  3. package/config/templates/growth-marketing-team.json +5 -5
  4. package/config/templates/personal-assistant-team.json +5 -5
  5. package/dist/backend/backend/src/constants.d.ts +120 -5
  6. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  7. package/dist/backend/backend/src/constants.js +145 -8
  8. package/dist/backend/backend/src/constants.js.map +1 -1
  9. package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts +2 -1
  10. package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.d.ts.map +1 -1
  11. package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js +4 -2
  12. package/dist/backend/backend/src/controllers/worktree-janitor/worktree-janitor.routes.js.map +1 -1
  13. package/dist/backend/backend/src/index.d.ts.map +1 -1
  14. package/dist/backend/backend/src/index.js +17 -2
  15. package/dist/backend/backend/src/index.js.map +1 -1
  16. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts +9 -0
  17. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  18. package/dist/backend/backend/src/services/agent/agent-registration.service.js +34 -29
  19. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  20. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts +4 -3
  21. package/dist/backend/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  22. package/dist/backend/backend/src/services/agent/codex-runtime.service.js +48 -3
  23. package/dist/backend/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  24. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +9 -0
  25. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
  26. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +18 -1
  27. package/dist/backend/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
  28. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  29. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js +5 -1
  30. package/dist/backend/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  31. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  32. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +14 -4
  33. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts +14 -2
  35. package/dist/backend/backend/src/services/agent/tmux-command.service.d.ts.map +1 -1
  36. package/dist/backend/backend/src/services/agent/tmux-command.service.js +24 -5
  37. package/dist/backend/backend/src/services/agent/tmux-command.service.js.map +1 -1
  38. package/dist/backend/backend/src/services/agent/tmux.service.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/agent/tmux.service.js +14 -9
  40. package/dist/backend/backend/src/services/agent/tmux.service.js.map +1 -1
  41. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts +8 -0
  42. package/dist/backend/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/backup/backup-archive.service.js +16 -8
  44. package/dist/backend/backend/src/services/backup/backup-archive.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/backup/backup.types.d.ts +19 -0
  46. package/dist/backend/backend/src/services/backup/backup.types.d.ts.map +1 -1
  47. package/dist/backend/backend/src/services/backup/backup.types.js +19 -0
  48. package/dist/backend/backend/src/services/backup/backup.types.js.map +1 -1
  49. package/dist/backend/backend/src/services/security/secret-scrub.service.d.ts +108 -0
  50. package/dist/backend/backend/src/services/security/secret-scrub.service.d.ts.map +1 -0
  51. package/dist/backend/backend/src/services/security/secret-scrub.service.js +200 -0
  52. package/dist/backend/backend/src/services/security/secret-scrub.service.js.map +1 -0
  53. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts +13 -9
  54. package/dist/backend/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  55. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js +30 -14
  56. package/dist/backend/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  57. package/dist/backend/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  58. package/dist/backend/backend/src/services/session/pty/pty-session.js +6 -1
  59. package/dist/backend/backend/src/services/session/pty/pty-session.js.map +1 -1
  60. package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  61. package/dist/backend/backend/src/services/session/session-command-helper.js +3 -2
  62. package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
  63. package/dist/backend/backend/src/services/worktree/low-disk-guard.d.ts +109 -0
  64. package/dist/backend/backend/src/services/worktree/low-disk-guard.d.ts.map +1 -0
  65. package/dist/backend/backend/src/services/worktree/low-disk-guard.js +148 -0
  66. package/dist/backend/backend/src/services/worktree/low-disk-guard.js.map +1 -0
  67. package/dist/backend/backend/src/services/worktree/scratch-janitor.d.ts +140 -0
  68. package/dist/backend/backend/src/services/worktree/scratch-janitor.d.ts.map +1 -0
  69. package/dist/backend/backend/src/services/worktree/scratch-janitor.js +249 -0
  70. package/dist/backend/backend/src/services/worktree/scratch-janitor.js.map +1 -0
  71. package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts +92 -1
  72. package/dist/backend/backend/src/services/worktree/worktree-janitor.git.d.ts.map +1 -1
  73. package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js +207 -1
  74. package/dist/backend/backend/src/services/worktree/worktree-janitor.git.js.map +1 -1
  75. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts +135 -28
  76. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.d.ts.map +1 -1
  77. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js +248 -39
  78. package/dist/backend/backend/src/services/worktree/worktree-janitor.service.js.map +1 -1
  79. package/dist/backend/backend/src/types/team-template.types.d.ts +1 -1
  80. package/dist/backend/backend/src/types/team-template.types.d.ts.map +1 -1
  81. package/dist/backend/backend/src/utils/secret-redactor.d.ts +131 -0
  82. package/dist/backend/backend/src/utils/secret-redactor.d.ts.map +1 -0
  83. package/dist/backend/backend/src/utils/secret-redactor.js +233 -0
  84. package/dist/backend/backend/src/utils/secret-redactor.js.map +1 -0
  85. package/dist/backend/backend/src/utils/shell-history.d.ts +48 -0
  86. package/dist/backend/backend/src/utils/shell-history.d.ts.map +1 -0
  87. package/dist/backend/backend/src/utils/shell-history.js +65 -0
  88. package/dist/backend/backend/src/utils/shell-history.js.map +1 -0
  89. package/dist/backend/build-info.json +2 -2
  90. package/dist/cli/backend/src/constants.d.ts +120 -5
  91. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  92. package/dist/cli/backend/src/constants.js +145 -8
  93. package/dist/cli/backend/src/constants.js.map +1 -1
  94. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts +9 -0
  95. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  96. package/dist/cli/backend/src/services/agent/agent-registration.service.js +34 -29
  97. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  98. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts +4 -3
  99. package/dist/cli/backend/src/services/agent/codex-runtime.service.d.ts.map +1 -1
  100. package/dist/cli/backend/src/services/agent/codex-runtime.service.js +48 -3
  101. package/dist/cli/backend/src/services/agent/codex-runtime.service.js.map +1 -1
  102. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts +9 -0
  103. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.d.ts.map +1 -1
  104. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js +18 -1
  105. package/dist/cli/backend/src/services/agent/crewly-agent/in-process-log-buffer.js.map +1 -1
  106. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.d.ts.map +1 -1
  107. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js +5 -1
  108. package/dist/cli/backend/src/services/agent/oauth-relogin-monitor.service.js.map +1 -1
  109. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  110. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +14 -4
  111. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  112. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts +8 -0
  113. package/dist/cli/backend/src/services/backup/backup-archive.service.d.ts.map +1 -1
  114. package/dist/cli/backend/src/services/backup/backup-archive.service.js +16 -8
  115. package/dist/cli/backend/src/services/backup/backup-archive.service.js.map +1 -1
  116. package/dist/cli/backend/src/services/backup/backup.types.d.ts +19 -0
  117. package/dist/cli/backend/src/services/backup/backup.types.d.ts.map +1 -1
  118. package/dist/cli/backend/src/services/backup/backup.types.js +19 -0
  119. package/dist/cli/backend/src/services/backup/backup.types.js.map +1 -1
  120. package/dist/cli/backend/src/services/security/secret-scrub.service.d.ts +108 -0
  121. package/dist/cli/backend/src/services/security/secret-scrub.service.d.ts.map +1 -0
  122. package/dist/cli/backend/src/services/security/secret-scrub.service.js +200 -0
  123. package/dist/cli/backend/src/services/security/secret-scrub.service.js.map +1 -0
  124. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts +13 -9
  125. package/dist/cli/backend/src/services/session/pty/pty-session-backend.d.ts.map +1 -1
  126. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js +30 -14
  127. package/dist/cli/backend/src/services/session/pty/pty-session-backend.js.map +1 -1
  128. package/dist/cli/backend/src/services/session/pty/pty-session.d.ts.map +1 -1
  129. package/dist/cli/backend/src/services/session/pty/pty-session.js +6 -1
  130. package/dist/cli/backend/src/services/session/pty/pty-session.js.map +1 -1
  131. package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
  132. package/dist/cli/backend/src/services/session/session-command-helper.js +3 -2
  133. package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
  134. package/dist/cli/backend/src/types/team-template.types.d.ts +1 -1
  135. package/dist/cli/backend/src/types/team-template.types.d.ts.map +1 -1
  136. package/dist/cli/backend/src/utils/secret-redactor.d.ts +131 -0
  137. package/dist/cli/backend/src/utils/secret-redactor.d.ts.map +1 -0
  138. package/dist/cli/backend/src/utils/secret-redactor.js +233 -0
  139. package/dist/cli/backend/src/utils/secret-redactor.js.map +1 -0
  140. package/dist/cli/backend/src/utils/shell-history.d.ts +48 -0
  141. package/dist/cli/backend/src/utils/shell-history.d.ts.map +1 -0
  142. package/dist/cli/backend/src/utils/shell-history.js +65 -0
  143. package/dist/cli/backend/src/utils/shell-history.js.map +1 -0
  144. package/dist/cli/cli/src/commands/security.d.ts +41 -0
  145. package/dist/cli/cli/src/commands/security.d.ts.map +1 -0
  146. package/dist/cli/cli/src/commands/security.js +81 -0
  147. package/dist/cli/cli/src/commands/security.js.map +1 -0
  148. package/dist/cli/cli/src/index.js +9 -0
  149. package/dist/cli/cli/src/index.js.map +1 -1
  150. package/frontend/dist/assets/index-edd6f262.css +42 -0
  151. package/frontend/dist/assets/{index-8d4b3ad2.js → index-f79676aa.js} +268 -268
  152. package/frontend/dist/index.html +2 -2
  153. package/package.json +1 -1
  154. package/frontend/dist/assets/index-b6aded4c.css +0 -42
@@ -0,0 +1,233 @@
1
+ /**
2
+ * Secret redactor for persisted terminal output.
3
+ *
4
+ * Every byte of agent PTY output that Crewly writes to disk
5
+ * (~/.crewly/logs/sessions/*.log) passes through here, and so do the
6
+ * one-time scrub of existing logs and shell history files
7
+ * (`crewly security scrub-logs`). Three layers, applied in this order:
8
+ *
9
+ * 1. **Known values** — the exact value of every secret Crewly holds for the
10
+ * session (backend env + the session's spawn env, see
11
+ * collectSecretEnvValues). Catches secrets no pattern recognises (a Slack
12
+ * signing secret is plain hex). Masked as `[REDACTED <NAME>]`.
13
+ * 2. **Secret-named assignments** — `NAME=value` where NAME is a secret name
14
+ * (isSecretEnvKey: `…API_KEY`, `…TOKEN`, `…SECRET`, `…PASSWORD`,
15
+ * `…PRIVATE_KEY`, … plus SECRET_REDACTION_CONSTANTS.KNOWN_SECRET_ENV_NAMES).
16
+ * The value is masked whatever it looks like. Names are matched on the
17
+ * whole identifier, so `TOKEN_COUNT=5` or `MAX_TOKENS=4096` are left alone
18
+ * (the name does not END in a secret suffix); `$VAR` references and
19
+ * already-masked values are left alone too.
20
+ * 3. **Token shapes** — well-known raw credential formats wherever they
21
+ * appear: Slack `xoxb-/xoxp-/xoxa-/xoxe-/xapp-…`, OpenAI/DeepSeek `sk-…`,
22
+ * Anthropic `sk-ant-…`, Google `AIza…`, GitHub `ghp_/gho_/…` and
23
+ * `github_pat_…`, plus the wiki confidentiality patterns (JWTs, bearer
24
+ * headers, private-key blocks, connection strings).
25
+ *
26
+ * Redaction is idempotent: running it over already-redacted text changes
27
+ * nothing and reports a count of 0.
28
+ *
29
+ * Output is streamed in arbitrary chunks, so a secret can be split between
30
+ * two chunks. StreamingSecretRedactor holds back the tail after the last
31
+ * whitespace (secrets never contain whitespace) and prepends it to the next
32
+ * chunk, which keeps the whole thing linear with a small bounded carry.
33
+ *
34
+ * @module utils/secret-redactor
35
+ */
36
+ import { SECRET_REDACTION_CONSTANTS } from '../constants.js';
37
+ import { SECRET_PATTERNS } from '../services/wiki/wiki-redaction.js';
38
+ import { isSecretEnvKey } from './secret-env.js';
39
+ /**
40
+ * Raw token shapes beyond the wiki SECRET_PATTERNS (which require a numeric
41
+ * team segment for Slack tokens and do not know `xapp-` or `github_pat_`).
42
+ */
43
+ const EXTRA_TOKEN_PATTERNS = [
44
+ { name: 'slack_token', regex: /\bxox[abposre]-[A-Za-z0-9-]{10,}/g, mask: '[REDACTED slack_token]' },
45
+ { name: 'slack_app_token', regex: /\bxapp-[A-Za-z0-9-]{10,}/g, mask: '[REDACTED slack_app_token]' },
46
+ { name: 'anthropic_key', regex: /\bsk-ant-[A-Za-z0-9_-]{20,}/g, mask: '[REDACTED api_key]' },
47
+ { name: 'github_pat', regex: /\bgithub_pat_[A-Za-z0-9_]{20,}/g, mask: '[REDACTED github_token]' },
48
+ ];
49
+ /** Every token-shape detector, most specific first. */
50
+ const TOKEN_PATTERNS = [...EXTRA_TOKEN_PATTERNS, ...SECRET_PATTERNS];
51
+ /**
52
+ * `NAME=value` (optionally quoted value). The value stops at whitespace,
53
+ * quotes, backticks and shell separators. The identifier must start at a
54
+ * word boundary so it is matched whole.
55
+ */
56
+ const ASSIGNMENT_RE = /\b([A-Za-z_][A-Za-z0-9_]*)=(["']?)([^\s"'`;&|]+)/g;
57
+ /** Prefix every mask this module emits starts with. */
58
+ const REDACTED_PREFIX = '[REDACTED';
59
+ /** Mask written in place of a secret-named assignment's value. */
60
+ const ASSIGNMENT_MASK = '[REDACTED]';
61
+ /** Characters that can appear inside a credential or a `NAME=value` pair. */
62
+ const TOKEN_CHAR_RE = /[A-Za-z0-9_\-=.:/+"'[\]]/;
63
+ /** Known secret names, upper-cased, for O(1) lookup. */
64
+ const KNOWN_SECRET_NAMES = new Set(SECRET_REDACTION_CONSTANTS.KNOWN_SECRET_ENV_NAMES);
65
+ /**
66
+ * Whether an assignment's name marks its value as secret.
67
+ *
68
+ * @param name - Variable name as it appeared (any case)
69
+ * @returns True for secret names (see module docs)
70
+ */
71
+ export function isSecretAssignmentName(name) {
72
+ const upper = name.toUpperCase();
73
+ return (KNOWN_SECRET_NAMES.has(upper) ||
74
+ isSecretEnvKey(name) ||
75
+ SECRET_REDACTION_CONSTANTS.SECRET_NAME_PATTERNS.some((re) => re.test(upper)));
76
+ }
77
+ /**
78
+ * Masks every secret in a complete piece of text and counts what was masked.
79
+ *
80
+ * @param text - Text to mask
81
+ * @param knownSecrets - Exact secret values to mask (see collectSecretEnvValues)
82
+ * @returns Masked text and the number of secrets masked
83
+ *
84
+ * @example
85
+ * ```ts
86
+ * redactSecretsWithCount('export OPENAI_API_KEY=sk-abc…').count; // 1
87
+ * redactSecretsWithCount('TOKEN_COUNT=5').count; // 0
88
+ * ```
89
+ */
90
+ export function redactSecretsWithCount(text, knownSecrets = []) {
91
+ let out = text;
92
+ let count = 0;
93
+ for (const { name, value } of knownSecrets) {
94
+ if (!value || !out.includes(value))
95
+ continue;
96
+ const parts = out.split(value);
97
+ count += parts.length - 1;
98
+ out = parts.join(`${REDACTED_PREFIX} ${name}]`);
99
+ }
100
+ out = out.replace(ASSIGNMENT_RE, (match, name, quote, value) => {
101
+ if (!isSecretAssignmentName(name) || value.startsWith('$') || value.startsWith(REDACTED_PREFIX))
102
+ return match;
103
+ count++;
104
+ return `${name}=${quote}${ASSIGNMENT_MASK}`;
105
+ });
106
+ for (const p of TOKEN_PATTERNS) {
107
+ p.regex.lastIndex = 0;
108
+ out = out.replace(p.regex, (match) => {
109
+ if (match === p.mask)
110
+ return match;
111
+ count++;
112
+ return p.mask;
113
+ });
114
+ }
115
+ return { text: out, count };
116
+ }
117
+ /**
118
+ * Masks every secret in a complete piece of text.
119
+ *
120
+ * @param text - Text to mask
121
+ * @param knownSecrets - Exact secret values to mask
122
+ * @returns The masked text
123
+ */
124
+ export function redactSecrets(text, knownSecrets = []) {
125
+ return redactSecretsWithCount(text, knownSecrets).text;
126
+ }
127
+ /**
128
+ * Chunk-boundary-safe redactor for streamed output.
129
+ *
130
+ * `push()` returns the redacted text that is safe to emit now and holds back
131
+ * the tail after the last whitespace; `flush()` returns whatever is held back
132
+ * (call it when the stream closes). Only the new chunk is scanned for
133
+ * whitespace (the carry never contains any), so work is linear in the input.
134
+ * A run of more than MAX_CARRY_CHARS non-whitespace characters is cut at a
135
+ * non-token character near its end (or hard-cut when there is none), keeping
136
+ * the carry bounded.
137
+ *
138
+ * @example
139
+ * ```ts
140
+ * const r = new StreamingSecretRedactor();
141
+ * log.write(r.push('export GEMINI_API_KEY=AIzaSy'));
142
+ * log.write(r.push('…rest of key\n'));
143
+ * log.write(r.flush());
144
+ * ```
145
+ */
146
+ export class StreamingSecretRedactor {
147
+ carry = '';
148
+ knownSecrets;
149
+ maxCarry;
150
+ minCarry;
151
+ /**
152
+ * @param knownSecrets - Exact secret values to mask
153
+ * @param maxCarry - Longest whitespace-free tail held back before forcing a cut
154
+ */
155
+ constructor(knownSecrets = [], maxCarry = SECRET_REDACTION_CONSTANTS.MAX_CARRY_CHARS) {
156
+ this.knownSecrets = knownSecrets;
157
+ this.maxCarry = Math.max(maxCarry, 2);
158
+ this.minCarry = Math.max(1, Math.min(SECRET_REDACTION_CONSTANTS.MIN_FORCED_CARRY_CHARS, Math.floor(this.maxCarry / 2)));
159
+ }
160
+ /**
161
+ * Replaces the exact-value secret set (e.g. after the session's env changes).
162
+ *
163
+ * @param knownSecrets - Exact secret values to mask
164
+ */
165
+ setKnownSecrets(knownSecrets) {
166
+ this.knownSecrets = knownSecrets;
167
+ }
168
+ /**
169
+ * Feeds one chunk and returns the redacted text that can be emitted now.
170
+ *
171
+ * @param chunk - Next piece of output
172
+ * @returns Redacted text (possibly empty while a word is still arriving)
173
+ */
174
+ push(chunk) {
175
+ if (!chunk)
176
+ return '';
177
+ const carryLength = this.carry.length;
178
+ const buf = this.carry + chunk;
179
+ let cut = -1;
180
+ for (let i = buf.length - 1; i >= carryLength; i--) {
181
+ if (isWhitespace(buf.charCodeAt(i))) {
182
+ cut = i + 1;
183
+ break;
184
+ }
185
+ }
186
+ if (cut === -1 || buf.length - cut > this.maxCarry) {
187
+ if (buf.length <= this.maxCarry) {
188
+ this.carry = buf;
189
+ return '';
190
+ }
191
+ cut = this.forcedCut(buf);
192
+ }
193
+ this.carry = buf.slice(cut);
194
+ return cut > 0 ? redactSecrets(buf.slice(0, cut), this.knownSecrets) : '';
195
+ }
196
+ /**
197
+ * Returns (redacted) whatever is still held back and resets the carry.
198
+ *
199
+ * @returns Remaining redacted text
200
+ */
201
+ flush() {
202
+ const rest = this.carry;
203
+ this.carry = '';
204
+ return rest ? redactSecrets(rest, this.knownSecrets) : '';
205
+ }
206
+ /**
207
+ * Picks a cut point for a whitespace-free run that outgrew the carry: the
208
+ * last non-token character before the final minCarry characters, so a
209
+ * credential near the end is not split; hard cut when there is none.
210
+ *
211
+ * @param buf - Buffered text whose tail has no whitespace
212
+ * @returns Index to cut at
213
+ */
214
+ forcedCut(buf) {
215
+ const target = buf.length - this.minCarry;
216
+ const floor = Math.max(0, target - this.minCarry);
217
+ for (let i = target; i > floor; i--) {
218
+ if (!TOKEN_CHAR_RE.test(buf[i - 1]))
219
+ return i;
220
+ }
221
+ return target;
222
+ }
223
+ }
224
+ /**
225
+ * Whitespace test on a UTF-16 code unit (space, tab, CR, LF, VT, FF).
226
+ *
227
+ * @param code - Character code
228
+ * @returns True for ASCII whitespace
229
+ */
230
+ function isWhitespace(code) {
231
+ return code === 32 || (code >= 9 && code <= 13);
232
+ }
233
+ //# sourceMappingURL=secret-redactor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"secret-redactor.js","sourceRoot":"","sources":["../../../../../backend/src/utils/secret-redactor.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ /**
2
+ * Keeps agent shells out of the user's shell history.
3
+ *
4
+ * Crewly used to type `export GEMINI_API_KEY=…` into agent shells, and bash
5
+ * wrote those lines to ~/.bash_history hundreds of times. Secrets now travel
6
+ * only in the spawn env (utils/secret-env), and on top of that agent shells
7
+ * never write a history file at all:
8
+ *
9
+ * - historyOffSpawnEnv() goes into every PTY's spawn environment;
10
+ * - shellHistoryDisableLine() is typed first by the runtime init sequence,
11
+ * after the rc files ran (they may set HISTFILE themselves);
12
+ * - quietShellLine() prefixes every other typed line with a space, which
13
+ * bash (HISTCONTROL=ignorespace) and zsh (HIST_IGNORE_SPACE) skip.
14
+ *
15
+ * See SHELL_HISTORY_CONSTANTS for why HISTSIZE/HISTFILESIZE are not touched.
16
+ *
17
+ * @module utils/shell-history
18
+ */
19
+ /**
20
+ * Env vars that keep a freshly spawned bash/zsh from writing history.
21
+ *
22
+ * @returns A fresh copy (callers may spread or mutate it)
23
+ */
24
+ export declare function historyOffSpawnEnv(): Record<string, string>;
25
+ /**
26
+ * Prefixes a line typed into a shell with a space so it is not recorded.
27
+ * Already-prefixed lines are returned unchanged.
28
+ *
29
+ * @param line - Shell command line
30
+ * @returns The line, space-prefixed
31
+ */
32
+ export declare function quietShellLine(line: string): string;
33
+ /**
34
+ * The (space-prefixed) line that turns history off inside a running shell.
35
+ *
36
+ * @param shell - Shell binary path (defaults to $SHELL, then /bin/bash — what
37
+ * agent PTYs are spawned with)
38
+ * @returns The line to type, or null for a shell we do not know how to quiet
39
+ */
40
+ export declare function shellHistoryDisableLine(shell?: string | undefined): string | null;
41
+ /**
42
+ * Quotes a value for a POSIX shell word (single quotes).
43
+ *
44
+ * @param value - Raw value
45
+ * @returns Single-quoted value safe for `sh -c`
46
+ */
47
+ export declare function shellQuote(value: string): string;
48
+ //# sourceMappingURL=shell-history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-history.d.ts","sourceRoot":"","sources":["../../../../../backend/src/utils/shell-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH;;;;GAIG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAE3D;AAED;;;;;;GAMG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAGnD;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,GAAE,MAAM,GAAG,SAA4C,GAAG,MAAM,GAAG,IAAI,CAOnH;AAED;;;;;GAKG;AACH,wBAAgB,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEhD"}
@@ -0,0 +1,65 @@
1
+ /**
2
+ * Keeps agent shells out of the user's shell history.
3
+ *
4
+ * Crewly used to type `export GEMINI_API_KEY=…` into agent shells, and bash
5
+ * wrote those lines to ~/.bash_history hundreds of times. Secrets now travel
6
+ * only in the spawn env (utils/secret-env), and on top of that agent shells
7
+ * never write a history file at all:
8
+ *
9
+ * - historyOffSpawnEnv() goes into every PTY's spawn environment;
10
+ * - shellHistoryDisableLine() is typed first by the runtime init sequence,
11
+ * after the rc files ran (they may set HISTFILE themselves);
12
+ * - quietShellLine() prefixes every other typed line with a space, which
13
+ * bash (HISTCONTROL=ignorespace) and zsh (HIST_IGNORE_SPACE) skip.
14
+ *
15
+ * See SHELL_HISTORY_CONSTANTS for why HISTSIZE/HISTFILESIZE are not touched.
16
+ *
17
+ * @module utils/shell-history
18
+ */
19
+ import * as path from 'path';
20
+ import { SHELL_HISTORY_CONSTANTS } from '../constants.js';
21
+ /**
22
+ * Env vars that keep a freshly spawned bash/zsh from writing history.
23
+ *
24
+ * @returns A fresh copy (callers may spread or mutate it)
25
+ */
26
+ export function historyOffSpawnEnv() {
27
+ return { ...SHELL_HISTORY_CONSTANTS.SPAWN_ENV };
28
+ }
29
+ /**
30
+ * Prefixes a line typed into a shell with a space so it is not recorded.
31
+ * Already-prefixed lines are returned unchanged.
32
+ *
33
+ * @param line - Shell command line
34
+ * @returns The line, space-prefixed
35
+ */
36
+ export function quietShellLine(line) {
37
+ const prefix = SHELL_HISTORY_CONSTANTS.TYPED_LINE_PREFIX;
38
+ return line.startsWith(prefix) ? line : `${prefix}${line}`;
39
+ }
40
+ /**
41
+ * The (space-prefixed) line that turns history off inside a running shell.
42
+ *
43
+ * @param shell - Shell binary path (defaults to $SHELL, then /bin/bash — what
44
+ * agent PTYs are spawned with)
45
+ * @returns The line to type, or null for a shell we do not know how to quiet
46
+ */
47
+ export function shellHistoryDisableLine(shell = process.env.SHELL || '/bin/bash') {
48
+ const name = path.basename(shell || '').toLowerCase();
49
+ if (SHELL_HISTORY_CONSTANTS.POSIX_SHELLS.includes(name)) {
50
+ return quietShellLine(SHELL_HISTORY_CONSTANTS.DISABLE_COMMAND);
51
+ }
52
+ if (name === 'fish')
53
+ return quietShellLine(SHELL_HISTORY_CONSTANTS.FISH_DISABLE_COMMAND);
54
+ return null;
55
+ }
56
+ /**
57
+ * Quotes a value for a POSIX shell word (single quotes).
58
+ *
59
+ * @param value - Raw value
60
+ * @returns Single-quoted value safe for `sh -c`
61
+ */
62
+ export function shellQuote(value) {
63
+ return `'${value.replace(/'/g, `'\\''`)}'`;
64
+ }
65
+ //# sourceMappingURL=shell-history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shell-history.js","sourceRoot":"","sources":["../../../../../backend/src/utils/shell-history.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAEH,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,uBAAuB,EAAE,MAAM,iBAAiB,CAAC;AAE1D;;;;GAIG;AACH,MAAM,UAAU,kBAAkB;IACjC,OAAO,EAAE,GAAG,uBAAuB,CAAC,SAAS,EAAE,CAAC;AACjD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,cAAc,CAAC,IAAY;IAC1C,MAAM,MAAM,GAAG,uBAAuB,CAAC,iBAAiB,CAAC;IACzD,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,IAAI,EAAE,CAAC;AAC5D,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,uBAAuB,CAAC,QAA4B,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,WAAW;IACnG,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACtD,IAAI,uBAAuB,CAAC,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzD,OAAO,cAAc,CAAC,uBAAuB,CAAC,eAAe,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,IAAI,KAAK,MAAM;QAAE,OAAO,cAAc,CAAC,uBAAuB,CAAC,oBAAoB,CAAC,CAAC;IACzF,OAAO,IAAI,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,UAAU,CAAC,KAAa;IACvC,OAAO,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * CLI Security Command
3
+ *
4
+ * Usage:
5
+ * crewly security scrub-logs # dry run: count secrets on disk
6
+ * crewly security scrub-logs --apply # mask them in place
7
+ * crewly security scrub-logs --no-shell-history
8
+ *
9
+ * Masks API keys and tokens that older Crewly versions typed into agent
10
+ * shells, wherever they were persisted: ~/.crewly/logs/sessions/*.log, the
11
+ * gzipped rotations in ~/.crewly/logs/archive/, and ~/.bash_history /
12
+ * ~/.zsh_history. Same redactor as the live session-log writer. Prints
13
+ * counts only — never a secret value or a matched line. Idempotent: a second
14
+ * run finds nothing.
15
+ *
16
+ * @module cli/commands/security
17
+ */
18
+ import { type ScrubSummary } from '../../../backend/src/services/security/secret-scrub.service.js';
19
+ /** Options accepted by `crewly security`. */
20
+ export interface SecurityOptions {
21
+ /** Rewrite files (default: dry run) */
22
+ apply?: boolean;
23
+ /** commander sets shellHistory=false for --no-shell-history */
24
+ shellHistory?: boolean;
25
+ }
26
+ /**
27
+ * Renders a scrub summary as lines of text (counts only).
28
+ *
29
+ * @param summary - Scrub result
30
+ * @returns Lines to print
31
+ */
32
+ export declare function formatScrubSummary(summary: ScrubSummary): string[];
33
+ /**
34
+ * Entry point for `crewly security <action>`.
35
+ *
36
+ * @param action - Sub-command (scrub-logs)
37
+ * @param options - Command options from Commander.js
38
+ * @returns Process exit code (0 ok, 1 errors or bad action)
39
+ */
40
+ export declare function securityCommand(action: string, options?: SecurityOptions): Promise<number>;
41
+ //# sourceMappingURL=security.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.d.ts","sourceRoot":"","sources":["../../../../../cli/src/commands/security.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAKH,OAAO,EAAsB,KAAK,YAAY,EAAE,MAAM,gEAAgE,CAAC;AAEvH,6CAA6C;AAC7C,MAAM,WAAW,eAAe;IAC/B,uCAAuC;IACvC,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,+DAA+D;IAC/D,YAAY,CAAC,EAAE,OAAO,CAAC;CACvB;AAgBD;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,YAAY,GAAG,MAAM,EAAE,CAqBlE;AAED;;;;;;GAMG;AACH,wBAAsB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,GAAE,eAAoB,GAAG,OAAO,CAAC,MAAM,CAAC,CAWpG"}
@@ -0,0 +1,81 @@
1
+ /**
2
+ * CLI Security Command
3
+ *
4
+ * Usage:
5
+ * crewly security scrub-logs # dry run: count secrets on disk
6
+ * crewly security scrub-logs --apply # mask them in place
7
+ * crewly security scrub-logs --no-shell-history
8
+ *
9
+ * Masks API keys and tokens that older Crewly versions typed into agent
10
+ * shells, wherever they were persisted: ~/.crewly/logs/sessions/*.log, the
11
+ * gzipped rotations in ~/.crewly/logs/archive/, and ~/.bash_history /
12
+ * ~/.zsh_history. Same redactor as the live session-log writer. Prints
13
+ * counts only — never a secret value or a matched line. Idempotent: a second
14
+ * run finds nothing.
15
+ *
16
+ * @module cli/commands/security
17
+ */
18
+ import chalk from 'chalk';
19
+ import * as os from 'os';
20
+ import * as path from 'path';
21
+ import { scrubSecretsOnDisk } from '../../../backend/src/services/security/secret-scrub.service.js';
22
+ /** Supported `crewly security` actions. */
23
+ const ACTIONS = ['scrub-logs'];
24
+ /**
25
+ * Shortens a path under the home directory to `~/…` for display.
26
+ *
27
+ * @param p - Absolute path
28
+ * @returns Display path
29
+ */
30
+ function displayPath(p) {
31
+ const home = os.homedir();
32
+ return p.startsWith(home + path.sep) ? `~${p.slice(home.length)}` : p;
33
+ }
34
+ /**
35
+ * Renders a scrub summary as lines of text (counts only).
36
+ *
37
+ * @param summary - Scrub result
38
+ * @returns Lines to print
39
+ */
40
+ export function formatScrubSummary(summary) {
41
+ const lines = [];
42
+ const verb = summary.applied ? 'masked' : 'found';
43
+ for (const f of summary.files) {
44
+ if (f.error) {
45
+ lines.push(` ${chalk.red('error')} ${displayPath(f.path)} (${f.error})`);
46
+ }
47
+ else if (f.secrets > 0) {
48
+ lines.push(` ${String(f.secrets).padStart(5)} ${verb} ${displayPath(f.path)}`);
49
+ }
50
+ }
51
+ lines.push(`${summary.applied ? 'Applied' : 'Dry run'}: ${summary.filesScanned} file(s) scanned, ` +
52
+ `${summary.secrets} secret(s) ${verb} in ${summary.filesWithSecrets} file(s)` +
53
+ (summary.applied ? `, ${summary.filesRewritten} rewritten` : '') +
54
+ (summary.errors ? `, ${summary.errors} error(s)` : '') +
55
+ '.');
56
+ if (!summary.applied && summary.secrets > 0) {
57
+ lines.push(chalk.yellow('Run again with --apply to mask them in place. Rotate any key that was exposed.'));
58
+ }
59
+ return lines;
60
+ }
61
+ /**
62
+ * Entry point for `crewly security <action>`.
63
+ *
64
+ * @param action - Sub-command (scrub-logs)
65
+ * @param options - Command options from Commander.js
66
+ * @returns Process exit code (0 ok, 1 errors or bad action)
67
+ */
68
+ export async function securityCommand(action, options = {}) {
69
+ if (!ACTIONS.includes(action)) {
70
+ console.error(chalk.red(`Unknown action "${action}". Use: ${ACTIONS.join(' | ')}`));
71
+ return 1;
72
+ }
73
+ const summary = await scrubSecretsOnDisk({
74
+ apply: options.apply === true,
75
+ includeShellHistory: options.shellHistory !== false,
76
+ });
77
+ for (const line of formatScrubSummary(summary))
78
+ console.log(line);
79
+ return summary.errors > 0 ? 1 : 0;
80
+ }
81
+ //# sourceMappingURL=security.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"security.js","sourceRoot":"","sources":["../../../../../cli/src/commands/security.ts"],"names":[],"mappings":"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"}
@@ -19,6 +19,7 @@ import { publishCommand } from './commands/publish.js';
19
19
  import { seedMarketplaceCommand } from './commands/seed-marketplace.js';
20
20
  import { serviceCommand } from './commands/service.js';
21
21
  import { backupCommandAndExit } from './commands/backup.js';
22
+ import { securityCommand } from './commands/security.js';
22
23
  import { desktopCommand } from './commands/desktop.js';
23
24
  import { doctorCommand } from './commands/doctor.js';
24
25
  import { updateStatusCommand } from './commands/update-status.js';
@@ -214,6 +215,14 @@ program
214
215
  .option('--host <host>', 'Host to use in the --url link (default: first LAN IPv4)')
215
216
  .option('--port <port>', 'Port to use in the --url link (default: WEB_PORT or 8787)')
216
217
  .action(tokenCommand);
218
+ program
219
+ .command('security <action>')
220
+ .description('Security maintenance: scrub-logs masks API keys/tokens in session logs and ~/.bash_history / ~/.zsh_history — a dry run (counts only) unless --apply')
221
+ .option('--apply', 'scrub-logs: rewrite the files (default: dry run)')
222
+ .option('--no-shell-history', 'scrub-logs: leave shell history files alone')
223
+ .action(async (action, options) => {
224
+ process.exitCode = await securityCommand(action, options);
225
+ });
217
226
  program
218
227
  .command('tickets <action> [projectPath]')
219
228
  .description('Project tickets (<project>/.crewly/tickets/): list | migrate. migrate imports unfinished v1 .crewly/tasks files as backlog tickets — a dry run unless --apply')
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli/src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../cli/src/index.ts"],"names":[],"mappings":"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"}