@didim365/agent-cli-core 0.1.3 → 0.2.0
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/LICENSE +202 -0
- package/README.md +420 -0
- package/dist/src/agents/acknowledgedAgents.js +1 -1
- package/dist/src/agents/acknowledgedAgents.js.map +1 -1
- package/dist/src/agents/cli-help-agent.js +1 -1
- package/dist/src/agents/cli-help-agent.js.map +1 -1
- package/dist/src/agents/registry.js +25 -11
- package/dist/src/agents/registry.js.map +1 -1
- package/dist/src/code_assist/oauth-credential-storage.js +19 -7
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -1
- package/dist/src/code_assist/oauth2.js +18 -6
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/config/providerModels.d.ts +74 -0
- package/dist/src/config/providerModels.js +195 -0
- package/dist/src/config/providerModels.js.map +1 -0
- package/dist/src/config/storage.d.ts +90 -0
- package/dist/src/config/storage.js +191 -23
- package/dist/src/config/storage.js.map +1 -1
- package/dist/src/core/logger.d.ts +1 -1
- package/dist/src/core/logger.js +9 -9
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/prompts.js +3 -2
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/generated/git-commit.d.ts +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookRegistry.js +1 -1
- package/dist/src/hooks/hookRegistry.js.map +1 -1
- package/dist/src/hooks/trustedHooks.d.ts +3 -1
- package/dist/src/hooks/trustedHooks.js +15 -7
- package/dist/src/hooks/trustedHooks.js.map +1 -1
- package/dist/src/index.d.ts +3 -1
- package/dist/src/index.js +3 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +12 -5
- package/dist/src/mcp/oauth-token-storage.js +38 -16
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/token-storage/file-token-storage.d.ts +3 -1
- package/dist/src/mcp/token-storage/file-token-storage.js +31 -23
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -1
- package/dist/src/policy/config.js +30 -8
- package/dist/src/policy/config.js.map +1 -1
- package/dist/src/policy/policies/plan.toml +1 -1
- package/dist/src/providers/providerSelector.d.ts +11 -6
- package/dist/src/providers/providerSelector.js +39 -26
- package/dist/src/providers/providerSelector.js.map +1 -1
- package/dist/src/skills/skillManager.js +10 -6
- package/dist/src/skills/skillManager.js.map +1 -1
- package/dist/src/tools/glob.d.ts +1 -1
- package/dist/src/tools/glob.js +1 -1
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/ls.d.ts +1 -1
- package/dist/src/tools/ls.js +2 -2
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +3 -1
- package/dist/src/tools/memoryTool.js +23 -10
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +1 -1
- package/dist/src/tools/read-many-files.js +2 -2
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/ripGrep.js +1 -1
- package/dist/src/tools/ripGrep.js.map +1 -1
- package/dist/src/utils/filesearch/ignore.js +21 -3
- package/dist/src/utils/filesearch/ignore.js.map +1 -1
- package/dist/src/utils/geminiIgnoreParser.d.ts +8 -2
- package/dist/src/utils/geminiIgnoreParser.js +31 -18
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -1
- package/dist/src/utils/installationManager.d.ts +2 -1
- package/dist/src/utils/installationManager.js +6 -3
- package/dist/src/utils/installationManager.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.js +7 -5
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/paths.d.ts +6 -1
- package/dist/src/utils/paths.js +6 -1
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/userAccountManager.d.ts +2 -1
- package/dist/src/utils/userAccountManager.js +17 -11
- package/dist/src/utils/userAccountManager.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,5 +3,5 @@
|
|
|
3
3
|
* Copyright 2026 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
export declare const GIT_COMMIT_INFO = "
|
|
7
|
-
export declare const CLI_VERSION = "0.27.0
|
|
6
|
+
export declare const GIT_COMMIT_INFO = "fe12cc683";
|
|
7
|
+
export declare const CLI_VERSION = "0.27.0";
|
|
@@ -5,6 +5,6 @@
|
|
|
5
5
|
*/
|
|
6
6
|
// This file is auto-generated by the build script (scripts/generate-git-commit-info.js)
|
|
7
7
|
// Do not edit this file manually.
|
|
8
|
-
export const GIT_COMMIT_INFO = '
|
|
9
|
-
export const CLI_VERSION = '0.27.0
|
|
8
|
+
export const GIT_COMMIT_INFO = 'fe12cc683';
|
|
9
|
+
export const CLI_VERSION = '0.27.0';
|
|
10
10
|
//# sourceMappingURL=git-commit.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,
|
|
1
|
+
{"version":3,"file":"git-commit.js","sourceRoot":"","sources":["../../../src/generated/git-commit.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,wFAAwF;AACxF,kCAAkC;AAClC,MAAM,CAAC,MAAM,eAAe,GAAG,WAAW,CAAC;AAC3C,MAAM,CAAC,MAAM,WAAW,GAAG,QAAQ,CAAC"}
|
|
@@ -78,7 +78,7 @@ export class HookRegistry {
|
|
|
78
78
|
${untrusted.map((h) => ` - ${h}`).join('\n')}
|
|
79
79
|
|
|
80
80
|
These hooks will be executed. If you did not configure these hooks or do not trust this project,
|
|
81
|
-
please review the project settings (.
|
|
81
|
+
please review the project settings (.didim/settings.json) and remove them.`;
|
|
82
82
|
coreEvents.emitFeedback('warning', message);
|
|
83
83
|
// Trust them so we don't warn again
|
|
84
84
|
trustedHooksManager.trustHooks(this.config.getProjectRoot(), projectHooks);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"hookRegistry.js","sourceRoot":"","sources":["../../../src/hooks/hookRegistry.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"hookRegistry.js","sourceRoot":"","sources":["../../../src/hooks/hookRegistry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,aAAa,EAAE,YAAY,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAC9E,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAchD;;GAEG;AACH,MAAM,OAAO,YAAY;IACN,MAAM,CAAS;IACxB,OAAO,GAAwB,EAAE,CAAC;IAE1C,YAAY,MAAc;QACxB,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,UAAU;QACd,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;QAClB,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAE9B,WAAW,CAAC,GAAG,CACb,kCAAkC,IAAI,CAAC,OAAO,CAAC,MAAM,eAAe,CACrE,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,gBAAgB,CAAC,SAAwB;QACvC,OAAO,IAAI,CAAC,OAAO;aAChB,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,SAAS,KAAK,SAAS,IAAI,KAAK,CAAC,OAAO,CAAC;aACjE,IAAI,CACH,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,iBAAiB,CAAC,CAAC,CAAC,MAAM,CAAC,CACtE,CAAC;IACN,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED;;OAEG;IACH,cAAc,CAAC,QAAgB,EAAE,OAAgB;QAC/C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE;YAC5C,MAAM,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;YACrC,IAAI,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACtB,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;gBACxB,OAAO,IAAI,CAAC;YACd,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,WAAW,CAAC,GAAG,CACb,GAAG,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,sBAAsB,QAAQ,GAAG,CACvF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,4BAA4B,QAAQ,GAAG,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAED;;OAEG;IACK,WAAW,CACjB,KAAiD;QAEjD,OAAO,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,IAAI,iBAAiB,CAAC;IACxE,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,CAAC;QACnD,IAAI,CAAC,YAAY;YAAE,OAAO;QAE1B,IAAI,CAAC;YACH,MAAM,mBAAmB,GAAG,IAAI,mBAAmB,EAAE,CAAC;YACtD,MAAM,SAAS,GAAG,mBAAmB,CAAC,iBAAiB,CACrD,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAC5B,YAAY,CACb,CAAC;YAEF,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACzB,MAAM,OAAO,GAAG;EACtB,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC;;;2EAG8B,CAAC;gBACpE,UAAU,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;gBAE5C,oCAAoC;gBACpC,mBAAmB,CAAC,UAAU,CAC5B,IAAI,CAAC,MAAM,CAAC,cAAc,EAAE,EAC5B,YAAY,CACb,CAAC;YACJ,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,WAAW,CAAC,IAAI,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;QACjE,CAAC;IACH,CAAC;IAED;;OAEG;IACK,sBAAsB;QAC5B,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;YAClC,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAChC,CAAC;QAED,uEAAuE;QACvE,MAAM,WAAW,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QAC3C,IAAI,WAAW,EAAE,CAAC;YAChB,IAAI,IAAI,CAAC,MAAM,CAAC,eAAe,EAAE,EAAE,CAAC;gBAClC,IAAI,CAAC,yBAAyB,CAAC,WAAW,EAAE,YAAY,CAAC,OAAO,CAAC,CAAC;YACpE,CAAC;iBAAM,CAAC;gBACN,WAAW,CAAC,IAAI,CACd,2DAA2D,CAC5D,CAAC;YACJ,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,aAAa,EAAE,IAAI,EAAE,CAAC;QACrD,KAAK,MAAM,SAAS,IAAI,UAAU,EAAE,CAAC;YACnC,IAAI,SAAS,CAAC,QAAQ,IAAI,SAAS,CAAC,KAAK,EAAE,CAAC;gBAC1C,IAAI,CAAC,yBAAyB,CAC5B,SAAS,CAAC,KAAK,EACf,YAAY,CAAC,UAAU,CACxB,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,yBAAyB,CAC/B,WAAwD,EACxD,MAAoB;QAEpB,KAAK,MAAM,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;YACnE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC5C,SAAS;YACX,CAAC;YAED,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,SAAS,CAAC,EAAE,CAAC;gBACtC,UAAU,CAAC,YAAY,CACrB,SAAS,EACT,6BAA6B,SAAS,UAAU,MAAM,oBAAoB,CAC3E,CAAC;gBACF,SAAS;YACX,CAAC;YAED,MAAM,cAAc,GAAG,SAAS,CAAC;YAEjC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;gBAChC,WAAW,CAAC,IAAI,CACd,+BAA+B,SAAS,kBAAkB,MAAM,8BAA8B,CAC/F,CAAC;gBACF,SAAS;YACX,CAAC;YAED,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;gBACrC,IAAI,CAAC,qBAAqB,CAAC,UAAU,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC;YACjE,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,qBAAqB,CAC3B,UAA0B,EAC1B,SAAwB,EACxB,MAAoB;QAEpB,IACE,CAAC,UAAU;YACX,OAAO,UAAU,KAAK,QAAQ;YAC9B,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAChC,CAAC;YACD,WAAW,CAAC,IAAI,CACd,0CAA0C,SAAS,SAAS,MAAM,GAAG,EACrE,UAAU,CACX,CAAC;YACF,OAAO;QACT,CAAC;QAED,wCAAwC;QACxC,MAAM,aAAa,GAAG,IAAI,CAAC,MAAM,CAAC,gBAAgB,EAAE,IAAI,EAAE,CAAC;QAE3D,KAAK,MAAM,UAAU,IAAI,UAAU,CAAC,KAAK,EAAE,CAAC;YAC1C,IACE,UAAU;gBACV,OAAO,UAAU,KAAK,QAAQ;gBAC9B,IAAI,CAAC,kBAAkB,CAAC,UAAU,EAAE,SAAS,EAAE,MAAM,CAAC,EACtD,CAAC;gBACD,6CAA6C;gBAC7C,MAAM,QAAQ,GAAG,IAAI,CAAC,WAAW,CAAC;oBAChC,MAAM,EAAE,UAAU;iBACE,CAAC,CAAC;gBACxB,MAAM,UAAU,GAAG,aAAa,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;gBAEpD,4BAA4B;gBAC5B,UAAU,CAAC,MAAM,GAAG,MAAM,CAAC;gBAE3B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;oBAChB,MAAM,EAAE,UAAU;oBAClB,MAAM;oBACN,SAAS;oBACT,OAAO,EAAE,UAAU,CAAC,OAAO;oBAC3B,UAAU,EAAE,UAAU,CAAC,UAAU;oBACjC,OAAO,EAAE,CAAC,UAAU;iBACrB,CAAC,CAAC;YACL,CAAC;iBAAM,CAAC;gBACN,2EAA2E;gBAC3E,WAAW,CAAC,IAAI,CACd,6CAA6C,SAAS,SAAS,MAAM,GAAG,EACxE,UAAU,CACX,CAAC;YACJ,CAAC;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACK,kBAAkB,CACxB,MAAkB,EAClB,SAAwB,EACxB,MAAoB;QAEpB,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;YACjE,WAAW,CAAC,IAAI,CACd,gBAAgB,SAAS,SAAS,MAAM,UAAU,MAAM,CAAC,IAAI,EAAE,CAChE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,IAAI,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACjD,WAAW,CAAC,IAAI,CACd,gBAAgB,SAAS,SAAS,MAAM,wBAAwB,CACjE,CAAC;YACF,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;OAEG;IACK,gBAAgB,CAAC,SAAiB;QACxC,MAAM,eAAe,GAAG,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,CAAC;QACrD,OAAO,eAAe,CAAC,QAAQ,CAAC,SAA0B,CAAC,CAAC;IAC9D,CAAC;IAED;;OAEG;IACK,iBAAiB,CAAC,MAAoB;QAC5C,QAAQ,MAAM,EAAE,CAAC;YACf,KAAK,YAAY,CAAC,OAAO;gBACvB,OAAO,CAAC,CAAC;YACX,KAAK,YAAY,CAAC,IAAI;gBACpB,OAAO,CAAC,CAAC;YACX,KAAK,YAAY,CAAC,MAAM;gBACtB,OAAO,CAAC,CAAC;YACX,KAAK,YAAY,CAAC,UAAU;gBAC1B,OAAO,CAAC,CAAC;YACX;gBACE,OAAO,GAAG,CAAC;QACf,CAAC;IACH,CAAC;CACF"}
|
|
@@ -5,9 +5,11 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import { type HookDefinition, type HookEventName } from './types.js';
|
|
7
7
|
export declare class TrustedHooksManager {
|
|
8
|
-
private
|
|
8
|
+
private static readonly FILENAME;
|
|
9
9
|
private trustedHooks;
|
|
10
10
|
constructor();
|
|
11
|
+
private getReadPath;
|
|
12
|
+
private getWritePath;
|
|
11
13
|
private load;
|
|
12
14
|
private save;
|
|
13
15
|
/**
|
|
@@ -5,20 +5,27 @@
|
|
|
5
5
|
*/
|
|
6
6
|
import * as fs from 'node:fs';
|
|
7
7
|
import * as path from 'node:path';
|
|
8
|
-
import { Storage } from '../config/storage.js';
|
|
8
|
+
import { Storage, resolveReadPath } from '../config/storage.js';
|
|
9
9
|
import { getHookKey, } from './types.js';
|
|
10
10
|
import { debugLogger } from '../utils/debugLogger.js';
|
|
11
|
+
import { homedir } from '../utils/paths.js';
|
|
11
12
|
export class TrustedHooksManager {
|
|
12
|
-
|
|
13
|
+
static FILENAME = 'trusted_hooks.json';
|
|
13
14
|
trustedHooks = {};
|
|
14
15
|
constructor() {
|
|
15
|
-
this.configPath = path.join(Storage.getGlobalGeminiDir(), 'trusted_hooks.json');
|
|
16
16
|
this.load();
|
|
17
17
|
}
|
|
18
|
+
getReadPath() {
|
|
19
|
+
return resolveReadPath(homedir(), TrustedHooksManager.FILENAME);
|
|
20
|
+
}
|
|
21
|
+
getWritePath() {
|
|
22
|
+
return Storage.getGlobalWritePath(TrustedHooksManager.FILENAME);
|
|
23
|
+
}
|
|
18
24
|
load() {
|
|
19
25
|
try {
|
|
20
|
-
|
|
21
|
-
|
|
26
|
+
const readPath = this.getReadPath();
|
|
27
|
+
if (fs.existsSync(readPath)) {
|
|
28
|
+
const content = fs.readFileSync(readPath, 'utf-8');
|
|
22
29
|
this.trustedHooks = JSON.parse(content);
|
|
23
30
|
}
|
|
24
31
|
}
|
|
@@ -29,11 +36,12 @@ export class TrustedHooksManager {
|
|
|
29
36
|
}
|
|
30
37
|
save() {
|
|
31
38
|
try {
|
|
32
|
-
const
|
|
39
|
+
const writePath = this.getWritePath();
|
|
40
|
+
const dir = path.dirname(writePath);
|
|
33
41
|
if (!fs.existsSync(dir)) {
|
|
34
42
|
fs.mkdirSync(dir, { recursive: true });
|
|
35
43
|
}
|
|
36
|
-
fs.writeFileSync(
|
|
44
|
+
fs.writeFileSync(writePath, JSON.stringify(this.trustedHooks, null, 2));
|
|
37
45
|
}
|
|
38
46
|
catch (error) {
|
|
39
47
|
debugLogger.warn('Failed to save trusted hooks config', error);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"trustedHooks.js","sourceRoot":"","sources":["../../../src/hooks/trustedHooks.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"trustedHooks.js","sourceRoot":"","sources":["../../../src/hooks/trustedHooks.ts"],"names":[],"mappings":"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"}
|
package/dist/src/index.d.ts
CHANGED
|
@@ -6,6 +6,7 @@
|
|
|
6
6
|
export * from './config/config.js';
|
|
7
7
|
export * from './config/defaultModelConfigs.js';
|
|
8
8
|
export * from './config/models.js';
|
|
9
|
+
export { PROVIDER_MODEL_REGISTRY, getDefaultModelFromRegistry, isModelValidForProvider, type ProviderModelInfo, type ProviderModelGroup, } from './config/providerModels.js';
|
|
9
10
|
export * from './output/types.js';
|
|
10
11
|
export * from './output/json-formatter.js';
|
|
11
12
|
export * from './output/stream-json-formatter.js';
|
|
@@ -51,6 +52,7 @@ export * from './utils/getFolderStructure.js';
|
|
|
51
52
|
export * from './utils/memoryDiscovery.js';
|
|
52
53
|
export * from './utils/getPty.js';
|
|
53
54
|
export * from './utils/gitIgnoreParser.js';
|
|
55
|
+
export * from './utils/geminiIgnoreParser.js';
|
|
54
56
|
export * from './utils/gitUtils.js';
|
|
55
57
|
export * from './utils/editor.js';
|
|
56
58
|
export * from './utils/quotaErrorDetection.js';
|
|
@@ -134,7 +136,7 @@ export { OAuthUtils } from './mcp/oauth-utils.js';
|
|
|
134
136
|
export * from './telemetry/index.js';
|
|
135
137
|
export { sessionId } from './utils/session.js';
|
|
136
138
|
export * from './utils/browser.js';
|
|
137
|
-
export { Storage } from './config/storage.js';
|
|
139
|
+
export { Storage, resolveReadDir, resolveWriteDir, resolveReadPath, } from './config/storage.js';
|
|
138
140
|
export * from './hooks/index.js';
|
|
139
141
|
export * from './hooks/types.js';
|
|
140
142
|
export * from './agents/types.js';
|
package/dist/src/index.js
CHANGED
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
export * from './config/config.js';
|
|
8
8
|
export * from './config/defaultModelConfigs.js';
|
|
9
9
|
export * from './config/models.js';
|
|
10
|
+
export { PROVIDER_MODEL_REGISTRY, getDefaultModelFromRegistry, isModelValidForProvider, } from './config/providerModels.js';
|
|
10
11
|
export * from './output/types.js';
|
|
11
12
|
export * from './output/json-formatter.js';
|
|
12
13
|
export * from './output/stream-json-formatter.js';
|
|
@@ -55,6 +56,7 @@ export * from './utils/getFolderStructure.js';
|
|
|
55
56
|
export * from './utils/memoryDiscovery.js';
|
|
56
57
|
export * from './utils/getPty.js';
|
|
57
58
|
export * from './utils/gitIgnoreParser.js';
|
|
59
|
+
export * from './utils/geminiIgnoreParser.js';
|
|
58
60
|
export * from './utils/gitUtils.js';
|
|
59
61
|
export * from './utils/editor.js';
|
|
60
62
|
export * from './utils/quotaErrorDetection.js';
|
|
@@ -144,7 +146,7 @@ export { OAuthUtils } from './mcp/oauth-utils.js';
|
|
|
144
146
|
export * from './telemetry/index.js';
|
|
145
147
|
export { sessionId } from './utils/session.js';
|
|
146
148
|
export * from './utils/browser.js';
|
|
147
|
-
export { Storage } from './config/storage.js';
|
|
149
|
+
export { Storage, resolveReadDir, resolveWriteDir, resolveReadPath, } from './config/storage.js';
|
|
148
150
|
// Export hooks system
|
|
149
151
|
export * from './hooks/index.js';
|
|
150
152
|
// Export hook types
|
package/dist/src/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -11,13 +11,15 @@ export declare class MCPOAuthTokenStorage implements TokenStorage {
|
|
|
11
11
|
private readonly hybridTokenStorage;
|
|
12
12
|
private readonly useEncryptedFile;
|
|
13
13
|
/**
|
|
14
|
-
* Get the path to the token storage file.
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
* Get the read path to the token storage file (with .gemini fallback).
|
|
15
|
+
*/
|
|
16
|
+
private getTokenReadPath;
|
|
17
|
+
/**
|
|
18
|
+
* Get the write path to the token storage file (always .didim).
|
|
17
19
|
*/
|
|
18
|
-
private
|
|
20
|
+
private getTokenWritePath;
|
|
19
21
|
/**
|
|
20
|
-
* Ensure the config directory exists.
|
|
22
|
+
* Ensure the config directory exists for writing.
|
|
21
23
|
*/
|
|
22
24
|
private ensureConfigDir;
|
|
23
25
|
/**
|
|
@@ -58,6 +60,11 @@ export declare class MCPOAuthTokenStorage implements TokenStorage {
|
|
|
58
60
|
* @returns True if the token is expired
|
|
59
61
|
*/
|
|
60
62
|
isTokenExpired(token: OAuthToken): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* Delete both primary (.didim) and legacy (.gemini) token files
|
|
65
|
+
* to prevent legacy file re-exposure after clearing.
|
|
66
|
+
*/
|
|
67
|
+
private deleteTokenFiles;
|
|
61
68
|
/**
|
|
62
69
|
* Clear all stored MCP OAuth tokens.
|
|
63
70
|
*/
|
|
@@ -8,6 +8,7 @@ import { promises as fs } from 'node:fs';
|
|
|
8
8
|
import * as path from 'node:path';
|
|
9
9
|
import { Storage } from '../config/storage.js';
|
|
10
10
|
import { getErrorMessage } from '../utils/errors.js';
|
|
11
|
+
import { LEGACY_GEMINI_DIR, homedir } from '../utils/paths.js';
|
|
11
12
|
import { HybridTokenStorage } from './token-storage/hybrid-token-storage.js';
|
|
12
13
|
import { DEFAULT_SERVICE_NAME, FORCE_ENCRYPTED_FILE_ENV_VAR, } from './token-storage/index.js';
|
|
13
14
|
/**
|
|
@@ -17,18 +18,22 @@ export class MCPOAuthTokenStorage {
|
|
|
17
18
|
hybridTokenStorage = new HybridTokenStorage(DEFAULT_SERVICE_NAME);
|
|
18
19
|
useEncryptedFile = process.env[FORCE_ENCRYPTED_FILE_ENV_VAR] === 'true';
|
|
19
20
|
/**
|
|
20
|
-
* Get the path to the token storage file.
|
|
21
|
-
*
|
|
22
|
-
* @returns The full path to the token storage file
|
|
21
|
+
* Get the read path to the token storage file (with .gemini fallback).
|
|
23
22
|
*/
|
|
24
|
-
|
|
23
|
+
getTokenReadPath() {
|
|
25
24
|
return Storage.getMcpOAuthTokensPath();
|
|
26
25
|
}
|
|
27
26
|
/**
|
|
28
|
-
*
|
|
27
|
+
* Get the write path to the token storage file (always .didim).
|
|
28
|
+
*/
|
|
29
|
+
getTokenWritePath() {
|
|
30
|
+
return Storage.getGlobalWritePath('mcp-oauth-tokens.json');
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Ensure the config directory exists for writing.
|
|
29
34
|
*/
|
|
30
35
|
async ensureConfigDir() {
|
|
31
|
-
const configDir = path.dirname(this.
|
|
36
|
+
const configDir = path.dirname(this.getTokenWritePath());
|
|
32
37
|
await fs.mkdir(configDir, { recursive: true });
|
|
33
38
|
}
|
|
34
39
|
/**
|
|
@@ -42,7 +47,7 @@ export class MCPOAuthTokenStorage {
|
|
|
42
47
|
}
|
|
43
48
|
const tokenMap = new Map();
|
|
44
49
|
try {
|
|
45
|
-
const tokenFile = this.
|
|
50
|
+
const tokenFile = this.getTokenReadPath();
|
|
46
51
|
const data = await fs.readFile(tokenFile, 'utf-8');
|
|
47
52
|
const tokens = JSON.parse(data);
|
|
48
53
|
for (const credential of tokens) {
|
|
@@ -71,7 +76,7 @@ export class MCPOAuthTokenStorage {
|
|
|
71
76
|
const tokens = await this.getAllCredentials();
|
|
72
77
|
tokens.set(credentials.serverName, credentials);
|
|
73
78
|
const tokenArray = Array.from(tokens.values());
|
|
74
|
-
const tokenFile = this.
|
|
79
|
+
const tokenFile = this.getTokenWritePath();
|
|
75
80
|
try {
|
|
76
81
|
await fs.writeFile(tokenFile, JSON.stringify(tokenArray, null, 2), { mode: 0o600 });
|
|
77
82
|
}
|
|
@@ -129,13 +134,13 @@ export class MCPOAuthTokenStorage {
|
|
|
129
134
|
const tokens = await this.getAllCredentials();
|
|
130
135
|
if (tokens.delete(serverName)) {
|
|
131
136
|
const tokenArray = Array.from(tokens.values());
|
|
132
|
-
const tokenFile = this.getTokenFilePath();
|
|
133
137
|
try {
|
|
134
138
|
if (tokenArray.length === 0) {
|
|
135
|
-
// Remove
|
|
136
|
-
await
|
|
139
|
+
// Remove both primary and legacy files if no tokens left
|
|
140
|
+
await this.deleteTokenFiles();
|
|
137
141
|
}
|
|
138
142
|
else {
|
|
143
|
+
const tokenFile = this.getTokenWritePath();
|
|
139
144
|
await fs.writeFile(tokenFile, JSON.stringify(tokenArray, null, 2), {
|
|
140
145
|
mode: 0o600,
|
|
141
146
|
});
|
|
@@ -160,6 +165,26 @@ export class MCPOAuthTokenStorage {
|
|
|
160
165
|
const bufferMs = 5 * 60 * 1000;
|
|
161
166
|
return Date.now() + bufferMs >= token.expiresAt;
|
|
162
167
|
}
|
|
168
|
+
/**
|
|
169
|
+
* Delete both primary (.didim) and legacy (.gemini) token files
|
|
170
|
+
* to prevent legacy file re-exposure after clearing.
|
|
171
|
+
*/
|
|
172
|
+
async deleteTokenFiles() {
|
|
173
|
+
const paths = new Set([
|
|
174
|
+
this.getTokenWritePath(),
|
|
175
|
+
path.join(homedir(), LEGACY_GEMINI_DIR, 'mcp-oauth-tokens.json'),
|
|
176
|
+
]);
|
|
177
|
+
for (const tokenPath of paths) {
|
|
178
|
+
try {
|
|
179
|
+
await fs.unlink(tokenPath);
|
|
180
|
+
}
|
|
181
|
+
catch (error) {
|
|
182
|
+
if (error.code !== 'ENOENT') {
|
|
183
|
+
throw error;
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
163
188
|
/**
|
|
164
189
|
* Clear all stored MCP OAuth tokens.
|
|
165
190
|
*/
|
|
@@ -168,13 +193,10 @@ export class MCPOAuthTokenStorage {
|
|
|
168
193
|
return this.hybridTokenStorage.clearAll();
|
|
169
194
|
}
|
|
170
195
|
try {
|
|
171
|
-
|
|
172
|
-
await fs.unlink(tokenFile);
|
|
196
|
+
await this.deleteTokenFiles();
|
|
173
197
|
}
|
|
174
198
|
catch (error) {
|
|
175
|
-
|
|
176
|
-
coreEvents.emitFeedback('error', `Failed to clear MCP OAuth tokens: ${getErrorMessage(error)}`, error);
|
|
177
|
-
}
|
|
199
|
+
coreEvents.emitFeedback('error', `Failed to clear MCP OAuth tokens: ${getErrorMessage(error)}`, error);
|
|
178
200
|
}
|
|
179
201
|
}
|
|
180
202
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"oauth-token-storage.js","sourceRoot":"","sources":["../../../src/mcp/oauth-token-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAC/C,OAAO,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"oauth-token-storage.js","sourceRoot":"","sources":["../../../src/mcp/oauth-token-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -6,9 +6,10 @@
|
|
|
6
6
|
import { BaseTokenStorage } from './base-token-storage.js';
|
|
7
7
|
import type { OAuthCredentials } from './types.js';
|
|
8
8
|
export declare class FileTokenStorage extends BaseTokenStorage {
|
|
9
|
-
private readonly
|
|
9
|
+
private readonly tokenWritePath;
|
|
10
10
|
private readonly encryptionKey;
|
|
11
11
|
constructor(serviceName: string);
|
|
12
|
+
private get tokenReadPath();
|
|
12
13
|
private deriveEncryptionKey;
|
|
13
14
|
private encrypt;
|
|
14
15
|
private decrypt;
|
|
@@ -21,4 +22,5 @@ export declare class FileTokenStorage extends BaseTokenStorage {
|
|
|
21
22
|
listServers(): Promise<string[]>;
|
|
22
23
|
getAllCredentials(): Promise<Map<string, OAuthCredentials>>;
|
|
23
24
|
clearAll(): Promise<void>;
|
|
25
|
+
private deleteTokenFiles;
|
|
24
26
|
}
|
|
@@ -8,16 +8,19 @@ import * as path from 'node:path';
|
|
|
8
8
|
import * as os from 'node:os';
|
|
9
9
|
import * as crypto from 'node:crypto';
|
|
10
10
|
import { BaseTokenStorage } from './base-token-storage.js';
|
|
11
|
-
import {
|
|
11
|
+
import { DIDIM_DIR, LEGACY_GEMINI_DIR, homedir } from '../../utils/paths.js';
|
|
12
|
+
import { resolveReadPath, Storage } from '../../config/storage.js';
|
|
12
13
|
export class FileTokenStorage extends BaseTokenStorage {
|
|
13
|
-
|
|
14
|
+
tokenWritePath;
|
|
14
15
|
encryptionKey;
|
|
15
16
|
constructor(serviceName) {
|
|
16
17
|
super(serviceName);
|
|
17
|
-
|
|
18
|
-
this.tokenFilePath = path.join(configDir, 'mcp-oauth-tokens-v2.json');
|
|
18
|
+
this.tokenWritePath = Storage.getGlobalWritePath('mcp-oauth-tokens-v2.json');
|
|
19
19
|
this.encryptionKey = this.deriveEncryptionKey();
|
|
20
20
|
}
|
|
21
|
+
get tokenReadPath() {
|
|
22
|
+
return resolveReadPath(homedir(), 'mcp-oauth-tokens-v2.json');
|
|
23
|
+
}
|
|
21
24
|
deriveEncryptionKey() {
|
|
22
25
|
const salt = `${os.hostname()}-${os.userInfo().username}-gemini-cli`;
|
|
23
26
|
return crypto.scryptSync('gemini-cli-oauth', salt, 32);
|
|
@@ -45,12 +48,12 @@ export class FileTokenStorage extends BaseTokenStorage {
|
|
|
45
48
|
return decrypted;
|
|
46
49
|
}
|
|
47
50
|
async ensureDirectoryExists() {
|
|
48
|
-
const dir = path.dirname(this.
|
|
51
|
+
const dir = path.dirname(this.tokenWritePath);
|
|
49
52
|
await fs.mkdir(dir, { recursive: true, mode: 0o700 });
|
|
50
53
|
}
|
|
51
54
|
async loadTokens() {
|
|
52
55
|
try {
|
|
53
|
-
const data = await fs.readFile(this.
|
|
56
|
+
const data = await fs.readFile(this.tokenReadPath, 'utf-8');
|
|
54
57
|
const decrypted = this.decrypt(data);
|
|
55
58
|
const tokens = JSON.parse(decrypted);
|
|
56
59
|
return new Map(Object.entries(tokens));
|
|
@@ -72,7 +75,7 @@ export class FileTokenStorage extends BaseTokenStorage {
|
|
|
72
75
|
const data = Object.fromEntries(tokens);
|
|
73
76
|
const json = JSON.stringify(data, null, 2);
|
|
74
77
|
const encrypted = this.encrypt(json);
|
|
75
|
-
await fs.writeFile(this.
|
|
78
|
+
await fs.writeFile(this.tokenWritePath, encrypted, { mode: 0o600 });
|
|
76
79
|
}
|
|
77
80
|
async getCredentials(serverName) {
|
|
78
81
|
const tokens = await this.loadTokens();
|
|
@@ -102,15 +105,7 @@ export class FileTokenStorage extends BaseTokenStorage {
|
|
|
102
105
|
}
|
|
103
106
|
tokens.delete(serverName);
|
|
104
107
|
if (tokens.size === 0) {
|
|
105
|
-
|
|
106
|
-
await fs.unlink(this.tokenFilePath);
|
|
107
|
-
}
|
|
108
|
-
catch (error) {
|
|
109
|
-
const err = error;
|
|
110
|
-
if (err.code !== 'ENOENT') {
|
|
111
|
-
throw error;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
108
|
+
await this.deleteTokenFiles();
|
|
114
109
|
}
|
|
115
110
|
else {
|
|
116
111
|
await this.saveTokens(tokens);
|
|
@@ -131,13 +126,26 @@ export class FileTokenStorage extends BaseTokenStorage {
|
|
|
131
126
|
return result;
|
|
132
127
|
}
|
|
133
128
|
async clearAll() {
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
129
|
+
await this.deleteTokenFiles();
|
|
130
|
+
}
|
|
131
|
+
async deleteTokenFiles() {
|
|
132
|
+
const home = homedir();
|
|
133
|
+
const tokenFileName = 'mcp-oauth-tokens-v2.json';
|
|
134
|
+
// Explicitly include both primary and legacy paths to prevent
|
|
135
|
+
// legacy token re-exposure after deleting only the primary file.
|
|
136
|
+
for (const tokenPath of new Set([
|
|
137
|
+
this.tokenWritePath,
|
|
138
|
+
this.tokenReadPath,
|
|
139
|
+
path.join(home, DIDIM_DIR, tokenFileName),
|
|
140
|
+
path.join(home, LEGACY_GEMINI_DIR, tokenFileName),
|
|
141
|
+
])) {
|
|
142
|
+
try {
|
|
143
|
+
await fs.unlink(tokenPath);
|
|
144
|
+
}
|
|
145
|
+
catch (error) {
|
|
146
|
+
if (error.code !== 'ENOENT') {
|
|
147
|
+
throw error;
|
|
148
|
+
}
|
|
141
149
|
}
|
|
142
150
|
}
|
|
143
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"file-token-storage.js","sourceRoot":"","sources":["../../../../src/mcp/token-storage/file-token-storage.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,SAAS,CAAC;AACzC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,MAAM,MAAM,aAAa,CAAC;AACtC,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAE3D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"file-token-storage.js","sourceRoot":"","sources":["../../../../src/mcp/token-storage/file-token-storage.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@ import * as fs from 'node:fs/promises';
|
|
|
7
7
|
import * as path from 'node:path';
|
|
8
8
|
import { fileURLToPath } from 'node:url';
|
|
9
9
|
import { Storage } from '../config/storage.js';
|
|
10
|
+
import { LEGACY_GEMINI_DIR, homedir } from '../utils/paths.js';
|
|
10
11
|
import { PolicyDecision, } from './types.js';
|
|
11
12
|
import { loadPoliciesFromToml } from './toml-loader.js';
|
|
12
13
|
import { buildArgsPatterns } from './utils.js';
|
|
@@ -39,7 +40,9 @@ export function getPolicyDirectories(defaultPoliciesDir) {
|
|
|
39
40
|
else {
|
|
40
41
|
dirs.push(DEFAULT_CORE_POLICIES_DIR);
|
|
41
42
|
}
|
|
42
|
-
|
|
43
|
+
// Scan both .didim/policies and .gemini/policies to prevent legacy
|
|
44
|
+
// deny/security rules from being silently dropped when .didim/policies exists.
|
|
45
|
+
dirs.push(...Storage.getUserPoliciesReadDirs());
|
|
43
46
|
dirs.push(Storage.getSystemPoliciesDir());
|
|
44
47
|
// Reverse so highest priority (Admin) is first for loading order if needed,
|
|
45
48
|
// though loadPoliciesFromToml might want them in a specific order.
|
|
@@ -51,10 +54,9 @@ export function getPolicyDirectories(defaultPoliciesDir) {
|
|
|
51
54
|
* This is used by the TOML loader to assign priority bands.
|
|
52
55
|
*/
|
|
53
56
|
export function getPolicyTier(dir, defaultPoliciesDir) {
|
|
54
|
-
const
|
|
57
|
+
const userPolicyDirs = Storage.getUserPoliciesReadDirs();
|
|
55
58
|
const ADMIN_POLICIES_DIR = Storage.getSystemPoliciesDir();
|
|
56
59
|
const normalizedDir = path.resolve(dir);
|
|
57
|
-
const normalizedUser = path.resolve(USER_POLICIES_DIR);
|
|
58
60
|
const normalizedAdmin = path.resolve(ADMIN_POLICIES_DIR);
|
|
59
61
|
if (defaultPoliciesDir &&
|
|
60
62
|
normalizedDir === path.resolve(defaultPoliciesDir)) {
|
|
@@ -63,8 +65,11 @@ export function getPolicyTier(dir, defaultPoliciesDir) {
|
|
|
63
65
|
if (normalizedDir === path.resolve(DEFAULT_CORE_POLICIES_DIR)) {
|
|
64
66
|
return DEFAULT_POLICY_TIER;
|
|
65
67
|
}
|
|
66
|
-
|
|
67
|
-
|
|
68
|
+
// Check all user policy directories (both .didim and .gemini)
|
|
69
|
+
for (const userDir of userPolicyDirs) {
|
|
70
|
+
if (normalizedDir === path.resolve(userDir)) {
|
|
71
|
+
return USER_POLICY_TIER;
|
|
72
|
+
}
|
|
68
73
|
}
|
|
69
74
|
if (normalizedDir === normalizedAdmin) {
|
|
70
75
|
return ADMIN_POLICY_TIER;
|
|
@@ -295,17 +300,34 @@ export function createPolicyUpdater(policyEngine, messageBus) {
|
|
|
295
300
|
}
|
|
296
301
|
if (message.persist) {
|
|
297
302
|
try {
|
|
298
|
-
const userPoliciesDir = Storage.
|
|
303
|
+
const userPoliciesDir = Storage.getUserPoliciesWriteDir();
|
|
299
304
|
await fs.mkdir(userPoliciesDir, { recursive: true });
|
|
300
305
|
const policyFile = path.join(userPoliciesDir, 'auto-saved.toml');
|
|
301
|
-
// Read existing file
|
|
306
|
+
// Read existing file from write path, falling back to legacy path
|
|
307
|
+
// to preserve accumulated rules when migrating from .gemini to .didim.
|
|
302
308
|
let existingData = {};
|
|
303
309
|
try {
|
|
304
310
|
const fileContent = await fs.readFile(policyFile, 'utf-8');
|
|
305
311
|
existingData = toml.parse(fileContent);
|
|
306
312
|
}
|
|
307
313
|
catch (error) {
|
|
308
|
-
if (error.code
|
|
314
|
+
if (error.code === 'ENOENT') {
|
|
315
|
+
// Write path file doesn't exist — try legacy .gemini path.
|
|
316
|
+
// Use explicit legacy path rather than getUserPoliciesDir()
|
|
317
|
+
// because mkdir above already created .didim/policies/,
|
|
318
|
+
// causing resolveReadPath to return .didim instead of .gemini.
|
|
319
|
+
const legacyFile = path.join(homedir(), LEGACY_GEMINI_DIR, 'policies', 'auto-saved.toml');
|
|
320
|
+
if (legacyFile !== policyFile) {
|
|
321
|
+
try {
|
|
322
|
+
const legacyContent = await fs.readFile(legacyFile, 'utf-8');
|
|
323
|
+
existingData = toml.parse(legacyContent);
|
|
324
|
+
}
|
|
325
|
+
catch {
|
|
326
|
+
// Legacy file also missing or unreadable — start fresh
|
|
327
|
+
}
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
309
331
|
debugLogger.warn(`Failed to parse ${policyFile}, overwriting with new policy.`, error);
|
|
310
332
|
}
|
|
311
333
|
}
|