crewly 1.20.205 → 1.20.207

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 (124) hide show
  1. package/config/hooks/credential-guard/guard.sh +243 -0
  2. package/config/skills/agent/core/docs-comment/SKILL.md +121 -0
  3. package/config/skills/agent/core/docs-comment/execute.sh +131 -0
  4. package/config/skills/agent/core/docs-comment/execute.test.sh +105 -0
  5. package/dist/backend/backend/src/constants.d.ts +67 -2
  6. package/dist/backend/backend/src/constants.d.ts.map +1 -1
  7. package/dist/backend/backend/src/constants.js +71 -1
  8. package/dist/backend/backend/src/constants.js.map +1 -1
  9. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
  10. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +17 -1
  11. package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
  12. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +19 -5
  13. package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
  14. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +71 -5
  15. package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
  16. package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
  17. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +4 -1
  18. package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
  19. package/dist/backend/backend/src/controllers/google/google.controller.d.ts +30 -0
  20. package/dist/backend/backend/src/controllers/google/google.controller.d.ts.map +1 -1
  21. package/dist/backend/backend/src/controllers/google/google.controller.js +75 -0
  22. package/dist/backend/backend/src/controllers/google/google.controller.js.map +1 -1
  23. package/dist/backend/backend/src/controllers/google/google.routes.d.ts +4 -0
  24. package/dist/backend/backend/src/controllers/google/google.routes.d.ts.map +1 -1
  25. package/dist/backend/backend/src/controllers/google/google.routes.js +9 -1
  26. package/dist/backend/backend/src/controllers/google/google.routes.js.map +1 -1
  27. package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts.map +1 -1
  28. package/dist/backend/backend/src/controllers/workspace/workspace.routes.js +10 -2
  29. package/dist/backend/backend/src/controllers/workspace/workspace.routes.js.map +1 -1
  30. package/dist/backend/backend/src/index.d.ts +8 -0
  31. package/dist/backend/backend/src/index.d.ts.map +1 -1
  32. package/dist/backend/backend/src/index.js +39 -1
  33. package/dist/backend/backend/src/index.js.map +1 -1
  34. package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  35. package/dist/backend/backend/src/services/agent/agent-registration.service.js +4 -0
  36. package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
  37. package/dist/backend/backend/src/services/agent/codex-daemon.utils.d.ts +16 -0
  38. package/dist/backend/backend/src/services/agent/codex-daemon.utils.d.ts.map +1 -1
  39. package/dist/backend/backend/src/services/agent/codex-daemon.utils.js +44 -0
  40. package/dist/backend/backend/src/services/agent/codex-daemon.utils.js.map +1 -1
  41. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +14 -2
  42. package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  43. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +18 -3
  44. package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  45. package/dist/backend/backend/src/services/agent/credential-guard.service.d.ts +153 -0
  46. package/dist/backend/backend/src/services/agent/credential-guard.service.d.ts.map +1 -0
  47. package/dist/backend/backend/src/services/agent/credential-guard.service.js +314 -0
  48. package/dist/backend/backend/src/services/agent/credential-guard.service.js.map +1 -0
  49. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  50. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +5 -0
  51. package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  52. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +39 -0
  53. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
  54. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +132 -3
  55. package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  56. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  57. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  58. package/dist/backend/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  59. package/dist/backend/backend/src/services/core/credential-files.d.ts +26 -0
  60. package/dist/backend/backend/src/services/core/credential-files.d.ts.map +1 -0
  61. package/dist/backend/backend/src/services/core/credential-files.js +60 -0
  62. package/dist/backend/backend/src/services/core/credential-files.js.map +1 -0
  63. package/dist/backend/backend/src/services/google/docs-comments.service.d.ts +171 -0
  64. package/dist/backend/backend/src/services/google/docs-comments.service.d.ts.map +1 -0
  65. package/dist/backend/backend/src/services/google/docs-comments.service.js +218 -0
  66. package/dist/backend/backend/src/services/google/docs-comments.service.js.map +1 -0
  67. package/dist/backend/backend/src/services/google/docs.service.d.ts.map +1 -1
  68. package/dist/backend/backend/src/services/google/docs.service.js +14 -1
  69. package/dist/backend/backend/src/services/google/docs.service.js.map +1 -1
  70. package/dist/backend/backend/src/services/google/drive.service.d.ts.map +1 -1
  71. package/dist/backend/backend/src/services/google/drive.service.js +6 -4
  72. package/dist/backend/backend/src/services/google/drive.service.js.map +1 -1
  73. package/dist/backend/backend/src/services/google/google-api.client.d.ts +16 -3
  74. package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -1
  75. package/dist/backend/backend/src/services/google/google-api.client.js +5 -2
  76. package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -1
  77. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts +10 -0
  78. package/dist/backend/backend/src/services/google/google-workspace-token.service.d.ts.map +1 -1
  79. package/dist/backend/backend/src/services/google/google-workspace-token.service.js +10 -0
  80. package/dist/backend/backend/src/services/google/google-workspace-token.service.js.map +1 -1
  81. package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.d.ts +68 -0
  82. package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.d.ts.map +1 -0
  83. package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.js +95 -0
  84. package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.js.map +1 -0
  85. package/dist/backend/build-info.json +2 -2
  86. package/dist/cli/backend/src/constants.d.ts +67 -2
  87. package/dist/cli/backend/src/constants.d.ts.map +1 -1
  88. package/dist/cli/backend/src/constants.js +71 -1
  89. package/dist/cli/backend/src/constants.js.map +1 -1
  90. package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
  91. package/dist/cli/backend/src/services/agent/agent-registration.service.js +4 -0
  92. package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
  93. package/dist/cli/backend/src/services/agent/codex-daemon.utils.d.ts +16 -0
  94. package/dist/cli/backend/src/services/agent/codex-daemon.utils.d.ts.map +1 -1
  95. package/dist/cli/backend/src/services/agent/codex-daemon.utils.js +44 -0
  96. package/dist/cli/backend/src/services/agent/codex-daemon.utils.js.map +1 -1
  97. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +14 -2
  98. package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
  99. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +18 -3
  100. package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
  101. package/dist/cli/backend/src/services/agent/credential-guard.service.d.ts +153 -0
  102. package/dist/cli/backend/src/services/agent/credential-guard.service.d.ts.map +1 -0
  103. package/dist/cli/backend/src/services/agent/credential-guard.service.js +314 -0
  104. package/dist/cli/backend/src/services/agent/credential-guard.service.js.map +1 -0
  105. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
  106. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +5 -0
  107. package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
  108. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +39 -0
  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 +132 -3
  111. package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
  112. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.d.ts.map +1 -1
  113. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js +1 -0
  114. package/dist/cli/backend/src/services/ai/prompt-modules/skills-reference.module.js.map +1 -1
  115. package/dist/cli/backend/src/services/core/credential-files.d.ts +26 -0
  116. package/dist/cli/backend/src/services/core/credential-files.d.ts.map +1 -0
  117. package/dist/cli/backend/src/services/core/credential-files.js +60 -0
  118. package/dist/cli/backend/src/services/core/credential-files.js.map +1 -0
  119. package/package.json +1 -1
  120. package/packages/crewly-agent/src/runtime/credential-guard.test.ts +48 -0
  121. package/packages/crewly-agent/src/runtime/credential-guard.ts +56 -0
  122. package/packages/crewly-agent/src/runtime/tool-registry.ts +15 -0
  123. package/packages/crewly-agent/src/runtime/web-search.tool.test.ts +18 -0
  124. package/packages/crewly-agent/src/runtime/web-search.tool.ts +36 -14
@@ -53,4 +53,20 @@ export interface CodexNoDaemonProbeDeps {
53
53
  export declare function codexSupportsNoDaemon(deps?: CodexNoDaemonProbeDeps): Promise<boolean>;
54
54
  /** Forget the cached capability check (tests). */
55
55
  export declare function resetCodexNoDaemonProbe(): void;
56
+ /**
57
+ * Whether the codex binary the agent shell would run lists `flag` in its
58
+ * `--help`. A positive answer is cached for the process; a negative one is
59
+ * re-checked after NO_DAEMON_PROBE_RETRY_MS (an upgrade may add the flag).
60
+ *
61
+ * Used for `--dangerously-bypass-hook-trust`, which the credential guard
62
+ * needs (specs/2026-10-04-agent-credential-isolation.md): a Codex too old to
63
+ * know it would refuse to start if it were passed.
64
+ *
65
+ * @param flag - Flag to look for
66
+ * @param deps - Same injectables as {@link codexSupportsNoDaemon}
67
+ * @returns True when listed
68
+ */
69
+ export declare function codexSupportsFlag(flag: string, deps?: CodexNoDaemonProbeDeps): Promise<boolean>;
70
+ /** Forget every {@link codexSupportsFlag} result (tests). */
71
+ export declare function resetCodexFlagProbes(): void;
56
72
  //# sourceMappingURL=codex-daemon.utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-daemon.utils.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/codex-daemon.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAO9D;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,sBAA2B,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB/F;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C"}
1
+ {"version":3,"file":"codex-daemon.utils.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/codex-daemon.utils.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AAO9D;;;;;;;;;;;GAWG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CASzD;AAED,yDAAyD;AACzD,MAAM,WAAW,sBAAsB;IACtC,GAAG,CAAC,EAAE,UAAU,CAAC;IACjB,uDAAuD;IACvD,YAAY,CAAC,EAAE,MAAM,MAAM,GAAG,IAAI,CAAC;IACnC,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;CACnB;AAiBD;;;;;;;;;;;GAWG;AACH,wBAAsB,qBAAqB,CAAC,IAAI,GAAE,sBAA2B,GAAG,OAAO,CAAC,OAAO,CAAC,CAuB/F;AAED,kDAAkD;AAClD,wBAAgB,uBAAuB,IAAI,IAAI,CAE9C;AAKD;;;;;;;;;;;;GAYG;AACH,wBAAsB,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,GAAE,sBAA2B,GAAG,OAAO,CAAC,OAAO,CAAC,CAsBzG;AAED,6DAA6D;AAC7D,wBAAgB,oBAAoB,IAAI,IAAI,CAE3C"}
@@ -97,4 +97,48 @@ export async function codexSupportsNoDaemon(deps = {}) {
97
97
  export function resetCodexNoDaemonProbe() {
98
98
  cached = null;
99
99
  }
100
+ /** Per-flag probe results (same retry rule as the --no-daemon probe). */
101
+ const flagProbeCache = new Map();
102
+ /**
103
+ * Whether the codex binary the agent shell would run lists `flag` in its
104
+ * `--help`. A positive answer is cached for the process; a negative one is
105
+ * re-checked after NO_DAEMON_PROBE_RETRY_MS (an upgrade may add the flag).
106
+ *
107
+ * Used for `--dangerously-bypass-hook-trust`, which the credential guard
108
+ * needs (specs/2026-10-04-agent-credential-isolation.md): a Codex too old to
109
+ * know it would refuse to start if it were passed.
110
+ *
111
+ * @param flag - Flag to look for
112
+ * @param deps - Same injectables as {@link codexSupportsNoDaemon}
113
+ * @returns True when listed
114
+ */
115
+ export async function codexSupportsFlag(flag, deps = {}) {
116
+ const now = deps.now ?? Date.now;
117
+ const hit = flagProbeCache.get(flag);
118
+ if (hit && (hit.supported || now() - hit.checkedAt < CODEX.NO_DAEMON_PROBE_RETRY_MS))
119
+ return hit.supported;
120
+ const env = deps.env ?? process.env;
121
+ const shellPath = agentShellPath(env);
122
+ const resolveCodex = deps.resolveCodex ?? (() => resolveExecutable('codex', shellPath));
123
+ let supported = false;
124
+ try {
125
+ const binary = resolveCodex();
126
+ if (binary) {
127
+ const result = await (deps.run ?? runCommand)(binary, ['--help'], {
128
+ env: { ...env, PATH: shellPath },
129
+ timeoutMs: CODEX.HELP_PROBE_TIMEOUT_MS,
130
+ });
131
+ supported = result.code === 0 && `${result.stdout}\n${result.stderr}`.includes(flag);
132
+ }
133
+ }
134
+ catch {
135
+ supported = false;
136
+ }
137
+ flagProbeCache.set(flag, { supported, checkedAt: now() });
138
+ return supported;
139
+ }
140
+ /** Forget every {@link codexSupportsFlag} result (tests). */
141
+ export function resetCodexFlagProbes() {
142
+ flagProbeCache.clear();
143
+ }
100
144
  //# sourceMappingURL=codex-daemon.utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"codex-daemon.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/codex-daemon.utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"codex-daemon.utils.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/codex-daemon.utils.ts"],"names":[],"mappings":"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"}
@@ -143,9 +143,16 @@ export declare function toRuleSpecifier(absPath: string, isDirectory: boolean):
143
143
  * @param hookCommand - Shell command that runs the PreToolUse Bash hook
144
144
  * @param statusHookCommand - Shell command that runs the agent-status hook; omit to leave it out
145
145
  * @param subagentHookCommand - Shell command that runs the subagent guard (#852); omit to leave it out
146
+ * @param credentialGuard - The credential guard (specs/2026-10-04-agent-credential-isolation.md):
147
+ * its hook command (a PreToolUse group on Bash/Read/Grep/Glob, right after the
148
+ * control-plane group) and its `Read(...)` deny rules; omit to leave it out
146
149
  * @returns Settings object ready to serialise
147
150
  */
148
- export declare function buildControlPlaneSettings(paths: ControlPlanePaths, hookCommand: string, statusHookCommand?: string, subagentHookCommand?: string): ControlPlaneSettings;
151
+ export declare function buildControlPlaneSettings(paths: ControlPlanePaths, hookCommand: string, statusHookCommand?: string, subagentHookCommand?: string, credentialGuard?: {
152
+ hookCommand: string;
153
+ matcher: string;
154
+ denyRules: string[];
155
+ }): ControlPlaneSettings;
149
156
  /**
150
157
  * Make a session name safe to use as a file name.
151
158
  *
@@ -159,10 +166,15 @@ export declare function toSafeFileStem(sessionName: string): string;
159
166
  * @param sessionName - Crewly session name (used for the file names)
160
167
  * @param roots - Crewly home, install root and optional project path
161
168
  * @param env - Environment holding the kill switch (defaults to process.env)
169
+ * @param credentialGuard - Credential guard hook + deny rules to merge in (optional)
162
170
  * @returns Where the files were written, or why the guard is off
163
171
  * @throws When the files cannot be written (the caller decides whether to launch unguarded)
164
172
  */
165
- export declare function prepareControlPlaneGuard(sessionName: string, roots: ControlPlaneRoots, env?: NodeJS.ProcessEnv): Promise<ControlPlaneGuardResult>;
173
+ export declare function prepareControlPlaneGuard(sessionName: string, roots: ControlPlaneRoots, env?: NodeJS.ProcessEnv, credentialGuard?: {
174
+ hookCommand: string;
175
+ matcher: string;
176
+ denyRules: string[];
177
+ }): Promise<ControlPlaneGuardResult>;
166
178
  /**
167
179
  * Append `--settings <file>` to a Claude Code launch command.
168
180
  *
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-guard.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/control-plane-guard.service.ts"],"names":[],"mappings":"AA2BA;;;;;;;;;;;;;;;;;;GAkBG;AAEH,sDAAsD;AACtD,MAAM,WAAW,iBAAiB;IACjC,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,sFAAsF;IACtF,WAAW,EAAE,MAAM,CAAC;IACpB,gEAAgE;IAChE,WAAW,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,gDAAgD;AAChD,MAAM,WAAW,iBAAiB;IACjC,2EAA2E;IAC3E,WAAW,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,OAAO,CAAA;KAAE,CAAC,CAAC;IAC3D,wEAAwE;IACxE,UAAU,EAAE,MAAM,EAAE,CAAC;CACrB;AAED,6EAA6E;AAC7E,MAAM,WAAW,SAAS;IACzB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,SAAS,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnD;AAED,8EAA8E;AAC9E,MAAM,WAAW,oBAAoB;IACpC,WAAW,EAAE;QAAE,IAAI,EAAE,MAAM,EAAE,CAAA;KAAE,CAAC;IAChC;;;;OAIG;IACH,uBAAuB,EAAE,KAAK,CAAC;IAC/B,KAAK,EAAE;QACN,yGAAyG;QACzG,UAAU,EAAE,KAAK,CAAC,SAAS,GAAG;YAAE,OAAO,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;QACnD,iHAAiH;QACjH,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,EAAE,CAAC;KAC7B,CAAC;CACF;AAED,qDAAqD;AACrD,MAAM,MAAM,uBAAuB,GAChC;IAAE,OAAO,EAAE,IAAI,CAAC;IAAC,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,MAAM,CAAA;CAAE,GAClF;IAAE,OAAO,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAEtC;;;;;;;;;GASG;AACH,wBAAgB,0BAA0B,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAExF;AAED;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AACH,wBAAgB,wBAAwB,CACvC,KAAK,EAAE,iBAAiB,EACxB,eAAe,GAAE,SAAS,MAAM,EAAO,GACrC,iBAAiB,CAwBnB;AAED;;;;;;;;;GASG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,GAAG,MAAM,CAG7E;AAED;;;;;;;;;;;;;;;;;;;;;GAqBG;AACH,wBAAgB,yBAAyB,CACxC,KAAK,EAAE,iBAAiB,EACxB,WAAW,EAAE,MAAM,EACnB,iBAAiB,CAAC,EAAE,MAAM,EAC1B,mBAAmB,CAAC,EAAE,MAAM,GAC1B,oBAAoB,CAyCtB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAG1D;AAYD;;;;;;;;GAQG;AACH,wBAAsB,wBAAwB,CAC7C,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,iBAAiB,EACxB,GAAG,GAAE,MAAM,CAAC,UAAwB,GAClC,OAAO,CAAC,uBAAuB,CAAC,CAsClC;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAKvF"}
1
+ {"version":3,"file":"control-plane-guard.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/control-plane-guard.service.ts"],"names":[],"mappings":"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"}
@@ -126,9 +126,12 @@ export function toRuleSpecifier(absPath, isDirectory) {
126
126
  * @param hookCommand - Shell command that runs the PreToolUse Bash hook
127
127
  * @param statusHookCommand - Shell command that runs the agent-status hook; omit to leave it out
128
128
  * @param subagentHookCommand - Shell command that runs the subagent guard (#852); omit to leave it out
129
+ * @param credentialGuard - The credential guard (specs/2026-10-04-agent-credential-isolation.md):
130
+ * its hook command (a PreToolUse group on Bash/Read/Grep/Glob, right after the
131
+ * control-plane group) and its `Read(...)` deny rules; omit to leave it out
129
132
  * @returns Settings object ready to serialise
130
133
  */
131
- export function buildControlPlaneSettings(paths, hookCommand, statusHookCommand, subagentHookCommand) {
134
+ export function buildControlPlaneSettings(paths, hookCommand, statusHookCommand, subagentHookCommand, credentialGuard) {
132
135
  const deny = [];
133
136
  for (const { path: p, isDirectory } of paths.writeDenied) {
134
137
  deny.push(`Edit(${toRuleSpecifier(p, false)})`);
@@ -137,6 +140,11 @@ export function buildControlPlaneSettings(paths, hookCommand, statusHookCommand,
137
140
  }
138
141
  for (const p of paths.readDenied)
139
142
  deny.push(`Read(${toRuleSpecifier(p, false)})`);
143
+ if (credentialGuard) {
144
+ for (const rule of credentialGuard.denyRules)
145
+ if (!deny.includes(rule))
146
+ deny.push(rule);
147
+ }
140
148
  const settings = {
141
149
  permissions: { deny },
142
150
  promptSuggestionEnabled: RUNTIME_INPUT_SAFETY.CLAUDE_CODE_SETTINGS.promptSuggestionEnabled,
@@ -149,6 +157,12 @@ export function buildControlPlaneSettings(paths, hookCommand, statusHookCommand,
149
157
  ],
150
158
  },
151
159
  };
160
+ if (credentialGuard) {
161
+ settings.hooks.PreToolUse.push({
162
+ matcher: credentialGuard.matcher,
163
+ hooks: [{ type: 'command', command: credentialGuard.hookCommand }],
164
+ });
165
+ }
152
166
  const append = (event, group) => {
153
167
  if (event === 'PreToolUse') {
154
168
  settings.hooks.PreToolUse.push({ ...group, matcher: group.matcher ?? AGENT_STATUS_HOOK_CONSTANTS.ALL_TOOLS_MATCHER });
@@ -197,10 +211,11 @@ function shellQuote(value) {
197
211
  * @param sessionName - Crewly session name (used for the file names)
198
212
  * @param roots - Crewly home, install root and optional project path
199
213
  * @param env - Environment holding the kill switch (defaults to process.env)
214
+ * @param credentialGuard - Credential guard hook + deny rules to merge in (optional)
200
215
  * @returns Where the files were written, or why the guard is off
201
216
  * @throws When the files cannot be written (the caller decides whether to launch unguarded)
202
217
  */
203
- export async function prepareControlPlaneGuard(sessionName, roots, env = process.env) {
218
+ export async function prepareControlPlaneGuard(sessionName, roots, env = process.env, credentialGuard) {
204
219
  const C = CONTROL_PLANE_GUARD_CONSTANTS;
205
220
  if (!isControlPlaneGuardEnabled(env)) {
206
221
  return { enabled: false, reason: `${C.KILL_SWITCH_ENV}=${C.KILL_SWITCH_OFF_VALUE}` };
@@ -227,7 +242,7 @@ export async function prepareControlPlaneGuard(sessionName, roots, env = process
227
242
  ].join('\n');
228
243
  await fs.mkdir(dir, { recursive: true });
229
244
  await fs.writeFile(pathsPath, pathsBody, 'utf-8');
230
- await fs.writeFile(settingsPath, `${JSON.stringify(buildControlPlaneSettings(paths, hookCommand, statusHookCommand, subagentHookCommand), null, 2)}\n`, 'utf-8');
245
+ await fs.writeFile(settingsPath, `${JSON.stringify(buildControlPlaneSettings(paths, hookCommand, statusHookCommand, subagentHookCommand, credentialGuard), null, 2)}\n`, 'utf-8');
231
246
  return { enabled: true, settingsPath, pathsPath, protectedCount: paths.writeDenied.length };
232
247
  }
233
248
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"control-plane-guard.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/control-plane-guard.service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"control-plane-guard.service.js","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/control-plane-guard.service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,153 @@
1
+ /**
2
+ * Credential guard — layer 2 of specs/2026-10-04-agent-credential-isolation.md.
3
+ *
4
+ * One hook script (`config/hooks/credential-guard/guard.sh`) refuses an
5
+ * agent's tool call that touches Crewly's credentials. This module writes
6
+ * what the script reads and wires it into every runtime that has a pre-tool
7
+ * hook:
8
+ *
9
+ * | Runtime | How | Per process? |
10
+ * |---|---|---|
11
+ * | Claude Code | PreToolUse group + `Read(...)` deny rules in the control-plane `--settings` file | yes |
12
+ * | Codex | `-c hooks.PreToolUse=[...]` + `--dangerously-bypass-hook-trust` (probed) | yes |
13
+ * | Gemini CLI | `GEMINI_CLI_SYSTEM_SETTINGS_PATH=<file>` with a BeforeTool hook | yes |
14
+ * | Antigravity (agy) | an entry in agy's global `~/.gemini/config/hooks.json` | no — the script ignores calls without CREWLY_SESSION_NAME, so the owner's own agy is unaffected |
15
+ * | crewly-agent | its own tools run the script before reading or executing | yes |
16
+ * | OpenCode | none (gap, documented) | — |
17
+ *
18
+ * @module services/agent/credential-guard.service
19
+ */
20
+ import { type GuardedPath } from '../core/credential-files.js';
21
+ /** Formats the hook script speaks. */
22
+ export type CredentialGuardFormat = 'claude' | 'codex' | 'gemini' | 'antigravity';
23
+ /** What {@link prepareCredentialGuard} wrote. */
24
+ export interface CredentialGuardFiles {
25
+ /** The paths file. */
26
+ pathsFile: string;
27
+ /** The hook script (install root). */
28
+ script: string;
29
+ /** One no-argument wrapper per format (`<dir>/hook-<format>.sh`). */
30
+ wrappers: Record<CredentialGuardFormat, string>;
31
+ /** Paths agents may not read. */
32
+ guarded: GuardedPath[];
33
+ }
34
+ /**
35
+ * Whether the guard is on for sessions launched by this backend.
36
+ *
37
+ * @param env - Backend environment
38
+ * @returns false only when `CREWLY_CREDENTIAL_GUARD=0`
39
+ */
40
+ export declare function isCredentialGuardEnabled(env?: NodeJS.ProcessEnv): boolean;
41
+ /**
42
+ * The paths-file body: the Crewly home, then each guarded path in absolute
43
+ * form. The hook resolves every path argument it sees and compares it to
44
+ * these; there are no tail or bare-name forms (a bare word like `cloud`
45
+ * must never match).
46
+ *
47
+ * @param crewlyHome - CREWLY_HOME
48
+ * @param guarded - Guarded paths
49
+ * @returns File body
50
+ */
51
+ export declare function buildCredentialGuardPathsBody(crewlyHome: string, guarded: GuardedPath[]): string;
52
+ /**
53
+ * The body of one per-format wrapper.
54
+ *
55
+ * Every wrapper fails OPEN: outside an agent session (no
56
+ * CREWLY_SESSION_NAME — the owner's own runtime) or when the guard script is
57
+ * gone (Crewly uninstalled or moved) it exits 0 without running anything.
58
+ * That matters most for agy, which reads a non-zero exit (and `{}`) as
59
+ * "deny": a missing script there would otherwise refuse every tool call in
60
+ * every agy session, the owner's included. The agy wrapper therefore also
61
+ * never passes the script's exit status through: it prints the script's
62
+ * output only when it is a deny decision, and always exits 0.
63
+ *
64
+ * @param format - Hook format
65
+ * @param script - The guard script
66
+ * @param pathsFile - The paths file
67
+ * @returns Wrapper body
68
+ */
69
+ export declare function buildCredentialGuardWrapper(format: CredentialGuardFormat, script: string, pathsFile: string): string;
70
+ /**
71
+ * Write the paths file and one wrapper per format under
72
+ * `<crewlyHome>/runtime/credential-guard/`. The wrappers take no arguments,
73
+ * so a runtime that runs a hook command without a shell still works, and an
74
+ * install path with spaces needs no quoting in TOML or JSON.
75
+ *
76
+ * @param crewlyHome - CREWLY_HOME
77
+ * @param installRoot - Crewly install root (holds `config/hooks`)
78
+ * @param guarded - Paths to guard (defaults to the credential inventory)
79
+ * @returns What was written
80
+ */
81
+ export declare function prepareCredentialGuard(crewlyHome: string, installRoot: string, guarded?: GuardedPath[]): CredentialGuardFiles;
82
+ /**
83
+ * Env vars an agent process gets so its hooks (and crewly-agent's own tools)
84
+ * find the guard.
85
+ *
86
+ * @param files - Prepared guard
87
+ * @returns Env map
88
+ */
89
+ export declare function credentialGuardAgentEnv(files: Pick<CredentialGuardFiles, 'pathsFile' | 'script'>): Record<string, string>;
90
+ /**
91
+ * {@link credentialGuardAgentEnv} from the fixed locations, without writing
92
+ * anything (the launch path writes the files). Empty when the guard is off.
93
+ *
94
+ * @param crewlyHome - CREWLY_HOME
95
+ * @param installRoot - Install root
96
+ * @param env - Backend environment (kill switch)
97
+ * @returns Env map
98
+ */
99
+ export declare function credentialGuardEnvFor(crewlyHome: string, installRoot: string, env?: NodeJS.ProcessEnv): Record<string, string>;
100
+ /** Claude Code `Read(...)` deny rules for the guarded paths (built-in Read/Grep/Glob). */
101
+ export declare function claudeCredentialReadDenyRules(guarded: GuardedPath[]): string[];
102
+ /**
103
+ * Codex launch arguments that attach the guard as a session PreToolUse hook.
104
+ *
105
+ * @param wrapper - The codex wrapper script
106
+ * @returns Arguments to insert after the `codex` command word, or null when
107
+ * the wrapper path cannot be embedded safely
108
+ */
109
+ export declare function codexCredentialGuardArgs(wrapper: string): string | null;
110
+ /**
111
+ * Insert the Codex guard arguments after the codex command word.
112
+ *
113
+ * @param command - Launch command
114
+ * @param args - From {@link codexCredentialGuardArgs}
115
+ * @returns The command, unchanged when it already has the trust flag
116
+ */
117
+ export declare function withCodexCredentialGuard(command: string, args: string): string;
118
+ /**
119
+ * Write Crewly's Gemini CLI system settings file (BeforeTool hook), merged
120
+ * over the machine's own system settings file so that one is not shadowed.
121
+ *
122
+ * @param dir - Runtime dir
123
+ * @param wrapper - The gemini wrapper script
124
+ * @param platform - Platform (for the default system settings path)
125
+ * @returns The settings file path
126
+ */
127
+ export declare function writeGeminiCredentialGuardSettings(dir: string, wrapper: string, platform?: NodeJS.Platform): string;
128
+ /** What happened to agy's hooks file. */
129
+ export type AntigravityHookResult = 'written' | 'unchanged' | 'removed' | 'skipped-not-object';
130
+ /**
131
+ * Add (or, with `wrapper` null, remove) Crewly's entry in agy's global hooks
132
+ * file, keeping every other entry and the file's mode. A symlinked file is
133
+ * written through to its target. A file that is not a JSON object, or a
134
+ * dangling link, is left alone (`skipped-not-object`): agy sessions then run
135
+ * unguarded, with a WARN at launch.
136
+ *
137
+ * @param wrapper - The antigravity wrapper, or null to remove the entry
138
+ * @param homeDir - Home directory (agy resolves the file from $HOME)
139
+ * @returns What was done
140
+ */
141
+ export declare function syncAntigravityCredentialHook(wrapper: string | null, homeDir?: string): AntigravityHookResult;
142
+ /**
143
+ * The command agy runs for Crewly's hook entry. agy runs it through `sh`
144
+ * (verified on 1.2.14) and treats any non-zero exit as deny, so the entry
145
+ * itself fails open when the wrapper is gone (`~/.crewly` deleted, Crewly
146
+ * uninstalled): `[ -f W ] || exit 0; exec bash W`. `test -f W && bash W`
147
+ * would deny (exit 1) — the wrong form.
148
+ *
149
+ * @param wrapper - The antigravity wrapper
150
+ * @returns Shell command string
151
+ */
152
+ export declare function antigravityHookCommand(wrapper: string): string;
153
+ //# sourceMappingURL=credential-guard.service.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"credential-guard.service.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/agent/credential-guard.service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;GAkBG;AAOH,OAAO,EAA6B,KAAK,WAAW,EAAE,MAAM,6BAA6B,CAAC;AAI1F,sCAAsC;AACtC,MAAM,MAAM,qBAAqB,GAAG,QAAQ,GAAG,OAAO,GAAG,QAAQ,GAAG,aAAa,CAAC;AAElF,iDAAiD;AACjD,MAAM,WAAW,oBAAoB;IACpC,sBAAsB;IACtB,SAAS,EAAE,MAAM,CAAC;IAClB,sCAAsC;IACtC,MAAM,EAAE,MAAM,CAAC;IACf,qEAAqE;IACrE,QAAQ,EAAE,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;IAChD,iCAAiC;IACjC,OAAO,EAAE,WAAW,EAAE,CAAC;CACvB;AAED;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,OAAO,CAEtF;AAED;;;;;;;;;GASG;AACH,wBAAgB,6BAA6B,CAAC,UAAU,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,CAIhG;AA2BD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,qBAAqB,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,MAAM,CAqBpH;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,GAAE,WAAW,EAAgC,GAAG,oBAAoB,CAa1J;AAED;;;;;;GAMG;AACH,wBAAgB,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,oBAAoB,EAAE,WAAW,GAAG,QAAQ,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAEzH;AAED;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,UAAU,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,GAAE,MAAM,CAAC,UAAwB,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3I;AAED,0FAA0F;AAC1F,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,EAAE,CAO9E;AAED;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAIvE;AAKD;;;;;;GAMG;AACH,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAG9E;AAED;;;;;;;;GAQG;AACH,wBAAgB,kCAAkC,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAM,CAAC,QAA2B,GAAG,MAAM,CAqBrI;AAED,yCAAyC;AACzC,MAAM,MAAM,qBAAqB,GAAG,SAAS,GAAG,WAAW,GAAG,SAAS,GAAG,oBAAoB,CAAC;AAE/F;;;;;;;;;;GAUG;AACH,wBAAgB,6BAA6B,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,EAAE,OAAO,GAAE,MAAyC,GAAG,qBAAqB,CAqC/I;AAED;;;;;;;;;GASG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAE9D"}