crewly 1.20.206 → 1.20.208
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/config/hooks/credential-guard/guard.sh +243 -0
- package/dist/backend/backend/src/constants.d.ts +63 -2
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +67 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js +17 -1
- package/dist/backend/backend/src/controllers/agent-hooks/agent-hooks.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts +19 -5
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js +71 -5
- package/dist/backend/backend/src/controllers/cloud/cloud.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js +4 -1
- package/dist/backend/backend/src/controllers/cloud/cloud.routes.js.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js +4 -0
- package/dist/backend/backend/src/controllers/monitoring/terminal.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/session/session.controller.js +2 -0
- package/dist/backend/backend/src/controllers/session/session.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.js +10 -2
- package/dist/backend/backend/src/controllers/workspace/workspace.routes.js.map +1 -1
- package/dist/backend/backend/src/index.d.ts +8 -0
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +54 -2
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/agent-registration.service.js +16 -2
- package/dist/backend/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-daemon.utils.d.ts +16 -0
- package/dist/backend/backend/src/services/agent/codex-daemon.utils.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/codex-daemon.utils.js +44 -0
- package/dist/backend/backend/src/services/agent/codex-daemon.utils.js.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts +14 -2
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js +18 -3
- package/dist/backend/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/credential-guard.service.d.ts +153 -0
- package/dist/backend/backend/src/services/agent/credential-guard.service.d.ts.map +1 -0
- package/dist/backend/backend/src/services/agent/credential-guard.service.js +314 -0
- package/dist/backend/backend/src/services/agent/credential-guard.service.js.map +1 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +5 -0
- package/dist/backend/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts +39 -0
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js +132 -3
- package/dist/backend/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/backend/backend/src/services/core/credential-files.d.ts +26 -0
- package/dist/backend/backend/src/services/core/credential-files.d.ts.map +1 -0
- package/dist/backend/backend/src/services/core/credential-files.js +60 -0
- package/dist/backend/backend/src/services/core/credential-files.js.map +1 -0
- package/dist/backend/backend/src/services/google/docs.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/docs.service.js +14 -1
- package/dist/backend/backend/src/services/google/docs.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/drive.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/drive.service.js +6 -4
- package/dist/backend/backend/src/services/google/drive.service.js.map +1 -1
- package/dist/backend/backend/src/services/google/google-api.client.d.ts +8 -3
- package/dist/backend/backend/src/services/google/google-api.client.d.ts.map +1 -1
- package/dist/backend/backend/src/services/google/google-api.client.js +5 -2
- package/dist/backend/backend/src/services/google/google-api.client.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts +10 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js +16 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +10 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js +21 -0
- package/dist/backend/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.d.ts +68 -0
- package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.d.ts.map +1 -0
- package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.js +95 -0
- package/dist/backend/backend/src/services/monitoring/credential-guard-alerts.js.map +1 -0
- package/dist/backend/backend/src/services/session/input-ledger.d.ts +115 -0
- package/dist/backend/backend/src/services/session/input-ledger.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/input-ledger.js +144 -0
- package/dist/backend/backend/src/services/session/input-ledger.js.map +1 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +26 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +156 -37
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts +40 -0
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.js +95 -0
- package/dist/backend/backend/src/services/session/tui-input-guard.js.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js +4 -1
- package/dist/backend/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +63 -2
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +67 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/agent-registration.service.js +16 -2
- package/dist/cli/backend/src/services/agent/agent-registration.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-daemon.utils.d.ts +16 -0
- package/dist/cli/backend/src/services/agent/codex-daemon.utils.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/codex-daemon.utils.js +44 -0
- package/dist/cli/backend/src/services/agent/codex-daemon.utils.js.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts +14 -2
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js +18 -3
- package/dist/cli/backend/src/services/agent/control-plane-guard.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/credential-guard.service.d.ts +153 -0
- package/dist/cli/backend/src/services/agent/credential-guard.service.d.ts.map +1 -0
- package/dist/cli/backend/src/services/agent/credential-guard.service.js +314 -0
- package/dist/cli/backend/src/services/agent/credential-guard.service.js.map +1 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js +5 -0
- package/dist/cli/backend/src/services/agent/crewly-agent/crewly-agent-external-runtime.service.js.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts +39 -0
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.d.ts.map +1 -1
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js +132 -3
- package/dist/cli/backend/src/services/agent/runtime-agent.service.abstract.js.map +1 -1
- package/dist/cli/backend/src/services/core/credential-files.d.ts +26 -0
- package/dist/cli/backend/src/services/core/credential-files.d.ts.map +1 -0
- package/dist/cli/backend/src/services/core/credential-files.js +60 -0
- package/dist/cli/backend/src/services/core/credential-files.js.map +1 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts +10 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js +16 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts +10 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js +21 -0
- package/dist/cli/backend/src/services/messaging/sub-agent-message-queue.service.js.map +1 -1
- package/dist/cli/backend/src/services/session/input-ledger.d.ts +115 -0
- package/dist/cli/backend/src/services/session/input-ledger.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/input-ledger.js +144 -0
- package/dist/cli/backend/src/services/session/input-ledger.js.map +1 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +26 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +156 -37
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts +40 -0
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.js +95 -0
- package/dist/cli/backend/src/services/session/tui-input-guard.js.map +1 -1
- package/dist/cli/backend/src/websocket/terminal.gateway.d.ts.map +1 -1
- package/dist/cli/backend/src/websocket/terminal.gateway.js +4 -1
- package/dist/cli/backend/src/websocket/terminal.gateway.js.map +1 -1
- package/package.json +1 -1
- package/packages/crewly-agent/src/runtime/credential-guard.test.ts +48 -0
- package/packages/crewly-agent/src/runtime/credential-guard.ts +56 -0
- package/packages/crewly-agent/src/runtime/tool-registry.ts +15 -0
- package/packages/crewly-agent/src/runtime/web-search.tool.test.ts +18 -0
- 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
|
|
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
|
|
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
|
|
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"}
|