@dexto/agent-management 1.4.0 → 1.5.1

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 (78) hide show
  1. package/dist/AgentFactory.cjs +1 -2
  2. package/dist/AgentFactory.d.ts +1 -1
  3. package/dist/AgentFactory.d.ts.map +1 -1
  4. package/dist/AgentFactory.js +1 -2
  5. package/dist/config/config-enrichment.cjs +50 -1
  6. package/dist/config/config-enrichment.d.ts +2 -2
  7. package/dist/config/config-enrichment.d.ts.map +1 -1
  8. package/dist/config/config-enrichment.js +51 -3
  9. package/dist/config/discover-prompts.cjs +13 -0
  10. package/dist/config/discover-prompts.d.ts +13 -0
  11. package/dist/config/discover-prompts.d.ts.map +1 -1
  12. package/dist/config/discover-prompts.js +12 -0
  13. package/dist/config/errors.cjs +2 -2
  14. package/dist/config/errors.js +2 -2
  15. package/dist/index.cjs +69 -0
  16. package/dist/index.d.ts +4 -3
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.js +72 -2
  19. package/dist/installation.cjs +0 -13
  20. package/dist/installation.d.ts +0 -2
  21. package/dist/installation.d.ts.map +1 -1
  22. package/dist/installation.js +0 -13
  23. package/dist/models/custom-models.cjs +46 -2
  24. package/dist/models/custom-models.d.ts +54 -6
  25. package/dist/models/custom-models.d.ts.map +1 -1
  26. package/dist/models/custom-models.js +45 -2
  27. package/dist/models/index.cjs +89 -0
  28. package/dist/models/index.d.ts +11 -0
  29. package/dist/models/index.d.ts.map +1 -0
  30. package/dist/models/index.js +68 -0
  31. package/dist/models/path-resolver.cjs +154 -0
  32. package/dist/models/path-resolver.d.ts +77 -0
  33. package/dist/models/path-resolver.d.ts.map +1 -0
  34. package/dist/models/path-resolver.js +108 -0
  35. package/dist/models/state-manager.cjs +220 -0
  36. package/dist/models/state-manager.d.ts +138 -0
  37. package/dist/models/state-manager.d.ts.map +1 -0
  38. package/dist/models/state-manager.js +184 -0
  39. package/dist/preferences/error-codes.cjs +2 -0
  40. package/dist/preferences/error-codes.d.ts +3 -1
  41. package/dist/preferences/error-codes.d.ts.map +1 -1
  42. package/dist/preferences/error-codes.js +2 -0
  43. package/dist/preferences/index.d.ts +1 -1
  44. package/dist/preferences/index.d.ts.map +1 -1
  45. package/dist/preferences/loader.cjs +35 -6
  46. package/dist/preferences/loader.d.ts +25 -4
  47. package/dist/preferences/loader.d.ts.map +1 -1
  48. package/dist/preferences/loader.js +35 -6
  49. package/dist/preferences/schemas.cjs +24 -3
  50. package/dist/preferences/schemas.d.ts +64 -24
  51. package/dist/preferences/schemas.d.ts.map +1 -1
  52. package/dist/preferences/schemas.js +31 -4
  53. package/dist/registry/registry.cjs +7 -43
  54. package/dist/registry/registry.d.ts +3 -6
  55. package/dist/registry/registry.d.ts.map +1 -1
  56. package/dist/registry/registry.js +7 -43
  57. package/dist/registry/types.d.ts +2 -4
  58. package/dist/registry/types.d.ts.map +1 -1
  59. package/dist/resolver.cjs +20 -20
  60. package/dist/resolver.d.ts +1 -2
  61. package/dist/resolver.d.ts.map +1 -1
  62. package/dist/resolver.js +20 -20
  63. package/dist/utils/api-key-resolver.cjs +19 -1
  64. package/dist/utils/api-key-resolver.d.ts.map +1 -1
  65. package/dist/utils/api-key-resolver.js +19 -1
  66. package/dist/utils/api-key-store.cjs +46 -0
  67. package/dist/utils/api-key-store.d.ts +27 -0
  68. package/dist/utils/api-key-store.d.ts.map +1 -1
  69. package/dist/utils/api-key-store.js +44 -0
  70. package/dist/utils/env-file.cjs +20 -68
  71. package/dist/utils/env-file.d.ts +2 -1
  72. package/dist/utils/env-file.d.ts.map +1 -1
  73. package/dist/utils/env-file.js +20 -68
  74. package/dist/writer.cjs +20 -2
  75. package/dist/writer.d.ts +1 -0
  76. package/dist/writer.d.ts.map +1 -1
  77. package/dist/writer.js +20 -2
  78. package/package.json +2 -2
@@ -72,8 +72,7 @@ const AgentFactory = {
72
72
  /**
73
73
  * Install a custom agent from local path
74
74
  */
75
- async installCustomAgent(agentId, sourcePath, metadata, injectPreferences) {
76
- const options = typeof injectPreferences === "boolean" ? { injectPreferences } : injectPreferences || {};
75
+ async installCustomAgent(agentId, sourcePath, metadata, options) {
77
76
  return (0, import_installation.installCustomAgent)(agentId, sourcePath, metadata, options);
78
77
  },
79
78
  /**
@@ -78,7 +78,7 @@ export declare const AgentFactory: {
78
78
  /**
79
79
  * Install a custom agent from local path
80
80
  */
81
- installCustomAgent(agentId: string, sourcePath: string, metadata: Pick<AgentMetadata, "name" | "description" | "author" | "tags">, injectPreferences?: boolean | InstallOptions): Promise<string>;
81
+ installCustomAgent(agentId: string, sourcePath: string, metadata: Pick<AgentMetadata, "name" | "description" | "author" | "tags">, options?: InstallOptions): Promise<string>;
82
82
  /**
83
83
  * Uninstall an agent
84
84
  * @param agentId - Agent ID to uninstall
@@ -1 +1 @@
1
- {"version":3,"file":"AgentFactory.d.ts","sourceRoot":"","sources":["../src/AgentFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,EAIH,KAAK,cAAc,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACrB;;;OAGG;yBACwB,iBAAiB;;;;;;;;;;;;;;;;;;IAyC5C;;OAEG;0BACyB,MAAM,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E;;OAEG;gCAEU,MAAM,cACH,MAAM,YACR,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,sBACrD,OAAO,GAAG,cAAc,GAC7C,OAAO,CAAC,MAAM,CAAC;IAUlB;;;;OAIG;4BAC2B,MAAM,WAAW,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;wBACuB,WAAW,YAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CAwB5F,CAAC"}
1
+ {"version":3,"file":"AgentFactory.d.ts","sourceRoot":"","sources":["../src/AgentFactory.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,EAAE,UAAU,EAAE,KAAK,WAAW,EAAE,MAAM,aAAa,CAAC;AAK3D,OAAO,EAIH,KAAK,cAAc,EACtB,MAAM,mBAAmB,CAAC;AAC3B,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,iBAAiB;IAC9B,6CAA6C;IAC7C,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,6CAA6C;IAC7C,8BAA8B,CAAC,EAAE,MAAM,CAAC;CAC3C;AAED;;GAEG;AACH,MAAM,WAAW,kBAAkB;IAC/B,8FAA8F;IAC9F,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,qEAAqE;IACrE,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC9B;AAED;;;GAGG;AACH,eAAO,MAAM,YAAY;IACrB;;;OAGG;yBACwB,iBAAiB;;;;;;;;;;;;;;;;;;IAyC5C;;OAEG;0BACyB,MAAM,YAAY,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC;IAI9E;;OAEG;gCAEU,MAAM,cACH,MAAM,YACR,IAAI,CAAC,aAAa,EAAE,MAAM,GAAG,aAAa,GAAG,QAAQ,GAAG,MAAM,CAAC,YAC/D,cAAc,GACzB,OAAO,CAAC,MAAM,CAAC;IAIlB;;;;OAIG;4BAC2B,MAAM,WAAW,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAItE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OA8BG;wBACuB,WAAW,YAAY,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC;CAwB5F,CAAC"}
@@ -53,8 +53,7 @@ const AgentFactory = {
53
53
  /**
54
54
  * Install a custom agent from local path
55
55
  */
56
- async installCustomAgent(agentId, sourcePath, metadata, injectPreferences) {
57
- const options = typeof injectPreferences === "boolean" ? { injectPreferences } : injectPreferences || {};
56
+ async installCustomAgent(agentId, sourcePath, metadata, options) {
58
57
  return installCustomAgent(agentId, sourcePath, metadata, options);
59
58
  },
60
59
  /**
@@ -29,6 +29,7 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
29
29
  var config_enrichment_exports = {};
30
30
  __export(config_enrichment_exports, {
31
31
  deriveAgentId: () => deriveAgentId,
32
+ discoverAgentInstructionFile: () => import_discover_prompts2.discoverAgentInstructionFile,
32
33
  discoverCommandPrompts: () => import_discover_prompts2.discoverCommandPrompts,
33
34
  enrichAgentConfig: () => enrichAgentConfig
34
35
  });
@@ -38,6 +39,10 @@ var path = __toESM(require("path"), 1);
38
39
  var import_discover_prompts = require("./discover-prompts.js");
39
40
  var import_discover_prompts2 = require("./discover-prompts.js");
40
41
  function deriveAgentId(config, configPath) {
42
+ if (config.agentId) {
43
+ const sanitizedId = config.agentId.toLowerCase().replace(/[^a-z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
44
+ return sanitizedId || "coding-agent";
45
+ }
41
46
  if (config.agentCard?.name) {
42
47
  const sanitizedName = config.agentCard.name.toLowerCase().replace(/[^a-z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
43
48
  if (sanitizedName) {
@@ -50,7 +55,7 @@ function deriveAgentId(config, configPath) {
50
55
  return basename;
51
56
  }
52
57
  }
53
- return "default-agent";
58
+ return "coding-agent";
54
59
  }
55
60
  function enrichAgentConfig(config, configPath, options = {}) {
56
61
  const opts = typeof options === "boolean" ? { isInteractiveCli: options } : options;
@@ -127,11 +132,55 @@ function enrichAgentConfig(config, configPath, options = {}) {
127
132
  );
128
133
  enriched.prompts = [...existingPrompts, ...filteredDiscovered];
129
134
  }
135
+ const instructionFile = (0, import_discover_prompts.discoverAgentInstructionFile)();
136
+ if (instructionFile) {
137
+ const fileContributor = {
138
+ id: "discovered-instructions",
139
+ type: "file",
140
+ priority: 5,
141
+ enabled: true,
142
+ files: [instructionFile],
143
+ options: {
144
+ includeFilenames: true,
145
+ errorHandling: "skip",
146
+ maxFileSize: 1e5
147
+ }
148
+ };
149
+ if (!config.systemPrompt) {
150
+ enriched.systemPrompt = {
151
+ contributors: [fileContributor]
152
+ };
153
+ } else if (typeof config.systemPrompt === "string") {
154
+ enriched.systemPrompt = {
155
+ contributors: [
156
+ {
157
+ id: "inline",
158
+ type: "static",
159
+ content: config.systemPrompt,
160
+ priority: 0,
161
+ enabled: true
162
+ },
163
+ fileContributor
164
+ ]
165
+ };
166
+ } else if ("contributors" in config.systemPrompt) {
167
+ const existingContributors = config.systemPrompt.contributors ?? [];
168
+ const hasDiscoveredInstructions = existingContributors.some(
169
+ (c) => c.id === "discovered-instructions"
170
+ );
171
+ if (!hasDiscoveredInstructions) {
172
+ enriched.systemPrompt = {
173
+ contributors: [...existingContributors, fileContributor]
174
+ };
175
+ }
176
+ }
177
+ }
130
178
  return enriched;
131
179
  }
132
180
  // Annotate the CommonJS export names for ESM import in node:
133
181
  0 && (module.exports = {
134
182
  deriveAgentId,
183
+ discoverAgentInstructionFile,
135
184
  discoverCommandPrompts,
136
185
  enrichAgentConfig
137
186
  });
@@ -12,10 +12,10 @@
12
12
  * Core services now require explicit paths - this enrichment layer provides them.
13
13
  */
14
14
  import type { AgentConfig } from '@dexto/core';
15
- export { discoverCommandPrompts } from './discover-prompts.js';
15
+ export { discoverCommandPrompts, discoverAgentInstructionFile } from './discover-prompts.js';
16
16
  /**
17
17
  * Derives an agent ID from config or file path for per-agent isolation.
18
- * Priority: agentCard.name > filename (without extension) > 'default-agent'
18
+ * Priority: explicit agentId > agentCard.name > filename (without extension) > 'coding-agent'
19
19
  */
20
20
  export declare function deriveAgentId(config: AgentConfig, configPath?: string): string;
21
21
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"config-enrichment.d.ts","sourceRoot":"","sources":["../../src/config/config-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAE/D;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAyB9E;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,wBAAwB,GAAG,OAAY,GACjD,WAAW,CA+Gb"}
1
+ {"version":3,"file":"config-enrichment.d.ts","sourceRoot":"","sources":["../../src/config/config-enrichment.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAGH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,OAAO,EAAE,sBAAsB,EAAE,4BAA4B,EAAE,MAAM,uBAAuB,CAAC;AAE7F;;;GAGG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,CAoC9E;AAED;;GAEG;AACH,MAAM,WAAW,wBAAwB;IACrC,mGAAmG;IACnG,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,0FAA0F;IAC1F,QAAQ,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;CAClD;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,iBAAiB,CAC7B,MAAM,EAAE,WAAW,EACnB,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,wBAAwB,GAAG,OAAY,GACjD,WAAW,CAoKb"}
@@ -1,8 +1,12 @@
1
1
  import { getDextoPath } from "../utils/path.js";
2
2
  import * as path from "path";
3
- import { discoverCommandPrompts } from "./discover-prompts.js";
4
- import { discoverCommandPrompts as discoverCommandPrompts2 } from "./discover-prompts.js";
3
+ import { discoverCommandPrompts, discoverAgentInstructionFile } from "./discover-prompts.js";
4
+ import { discoverCommandPrompts as discoverCommandPrompts2, discoverAgentInstructionFile as discoverAgentInstructionFile2 } from "./discover-prompts.js";
5
5
  function deriveAgentId(config, configPath) {
6
+ if (config.agentId) {
7
+ const sanitizedId = config.agentId.toLowerCase().replace(/[^a-z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
8
+ return sanitizedId || "coding-agent";
9
+ }
6
10
  if (config.agentCard?.name) {
7
11
  const sanitizedName = config.agentCard.name.toLowerCase().replace(/[^a-z0-9-_]/g, "-").replace(/-+/g, "-").replace(/^-|-$/g, "");
8
12
  if (sanitizedName) {
@@ -15,7 +19,7 @@ function deriveAgentId(config, configPath) {
15
19
  return basename;
16
20
  }
17
21
  }
18
- return "default-agent";
22
+ return "coding-agent";
19
23
  }
20
24
  function enrichAgentConfig(config, configPath, options = {}) {
21
25
  const opts = typeof options === "boolean" ? { isInteractiveCli: options } : options;
@@ -92,10 +96,54 @@ function enrichAgentConfig(config, configPath, options = {}) {
92
96
  );
93
97
  enriched.prompts = [...existingPrompts, ...filteredDiscovered];
94
98
  }
99
+ const instructionFile = discoverAgentInstructionFile();
100
+ if (instructionFile) {
101
+ const fileContributor = {
102
+ id: "discovered-instructions",
103
+ type: "file",
104
+ priority: 5,
105
+ enabled: true,
106
+ files: [instructionFile],
107
+ options: {
108
+ includeFilenames: true,
109
+ errorHandling: "skip",
110
+ maxFileSize: 1e5
111
+ }
112
+ };
113
+ if (!config.systemPrompt) {
114
+ enriched.systemPrompt = {
115
+ contributors: [fileContributor]
116
+ };
117
+ } else if (typeof config.systemPrompt === "string") {
118
+ enriched.systemPrompt = {
119
+ contributors: [
120
+ {
121
+ id: "inline",
122
+ type: "static",
123
+ content: config.systemPrompt,
124
+ priority: 0,
125
+ enabled: true
126
+ },
127
+ fileContributor
128
+ ]
129
+ };
130
+ } else if ("contributors" in config.systemPrompt) {
131
+ const existingContributors = config.systemPrompt.contributors ?? [];
132
+ const hasDiscoveredInstructions = existingContributors.some(
133
+ (c) => c.id === "discovered-instructions"
134
+ );
135
+ if (!hasDiscoveredInstructions) {
136
+ enriched.systemPrompt = {
137
+ contributors: [...existingContributors, fileContributor]
138
+ };
139
+ }
140
+ }
141
+ }
95
142
  return enriched;
96
143
  }
97
144
  export {
98
145
  deriveAgentId,
146
+ discoverAgentInstructionFile2 as discoverAgentInstructionFile,
99
147
  discoverCommandPrompts2 as discoverCommandPrompts,
100
148
  enrichAgentConfig
101
149
  };
@@ -28,6 +28,7 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
28
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
29
  var discover_prompts_exports = {};
30
30
  __export(discover_prompts_exports, {
31
+ discoverAgentInstructionFile: () => discoverAgentInstructionFile,
31
32
  discoverCommandPrompts: () => discoverCommandPrompts
32
33
  });
33
34
  module.exports = __toCommonJS(discover_prompts_exports);
@@ -97,7 +98,19 @@ function scanCommandsDirectory(dir) {
97
98
  }
98
99
  return files;
99
100
  }
101
+ const AGENT_INSTRUCTION_FILES = ["agent.md", "claude.md", "gemini.md"];
102
+ function discoverAgentInstructionFile() {
103
+ const cwd = process.cwd();
104
+ for (const filename of AGENT_INSTRUCTION_FILES) {
105
+ const filePath = path.join(cwd, filename);
106
+ if ((0, import_fs.existsSync)(filePath)) {
107
+ return filePath;
108
+ }
109
+ }
110
+ return null;
111
+ }
100
112
  // Annotate the CommonJS export names for ESM import in node:
101
113
  0 && (module.exports = {
114
+ discoverAgentInstructionFile,
102
115
  discoverCommandPrompts
103
116
  });
@@ -25,4 +25,17 @@ export interface FilePromptEntry {
25
25
  * @returns Array of file prompt entries for discovered .md files
26
26
  */
27
27
  export declare function discoverCommandPrompts(): FilePromptEntry[];
28
+ /**
29
+ * Discovers agent instruction files from the current working directory.
30
+ *
31
+ * Looks for files in this order of priority:
32
+ * 1. agent.md
33
+ * 2. claude.md
34
+ * 3. gemini.md
35
+ *
36
+ * Only the first found file is returned (we don't want multiple instruction files).
37
+ *
38
+ * @returns The absolute path to the first found instruction file, or null if none found
39
+ */
40
+ export declare function discoverAgentInstructionFile(): string | null;
28
41
  //# sourceMappingURL=discover-prompts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"discover-prompts.d.ts","sourceRoot":"","sources":["../../src/config/discover-prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CA8D1D"}
1
+ {"version":3,"file":"discover-prompts.d.ts","sourceRoot":"","sources":["../../src/config/discover-prompts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAWH;;GAEG;AACH,MAAM,WAAW,eAAe;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,sBAAsB,IAAI,eAAe,EAAE,CA8D1D;AA4BD;;;;;;;;;;;GAWG;AACH,wBAAgB,4BAA4B,IAAI,MAAM,GAAG,IAAI,CAW5D"}
@@ -68,6 +68,18 @@ function scanCommandsDirectory(dir) {
68
68
  }
69
69
  return files;
70
70
  }
71
+ const AGENT_INSTRUCTION_FILES = ["agent.md", "claude.md", "gemini.md"];
72
+ function discoverAgentInstructionFile() {
73
+ const cwd = process.cwd();
74
+ for (const filename of AGENT_INSTRUCTION_FILES) {
75
+ const filePath = path.join(cwd, filename);
76
+ if (existsSync(filePath)) {
77
+ return filePath;
78
+ }
79
+ }
80
+ return null;
81
+ }
71
82
  export {
83
+ discoverAgentInstructionFile,
72
84
  discoverCommandPrompts
73
85
  };
@@ -72,8 +72,8 @@ class ConfigError {
72
72
  import_error_codes.ConfigErrorCode.NO_PROJECT_DEFAULT,
73
73
  import_core.ErrorScope.CONFIG,
74
74
  import_core.ErrorType.USER,
75
- `No project default-agent.yml found and no global preferences configured.
76
- Either create default-agent.yml in your project root (${projectPath}) or run \`dexto setup\` to configure preferences.`,
75
+ `No project coding-agent.yml found and no global preferences configured.
76
+ Either create coding-agent.yml in your project root (${projectPath}) or run \`dexto setup\` to configure preferences.`,
77
77
  { projectPath },
78
78
  "Run `dexto setup` or create a project-specific agent config"
79
79
  );
@@ -49,8 +49,8 @@ class ConfigError {
49
49
  ConfigErrorCode.NO_PROJECT_DEFAULT,
50
50
  ErrorScope.CONFIG,
51
51
  ErrorType.USER,
52
- `No project default-agent.yml found and no global preferences configured.
53
- Either create default-agent.yml in your project root (${projectPath}) or run \`dexto setup\` to configure preferences.`,
52
+ `No project coding-agent.yml found and no global preferences configured.
53
+ Either create coding-agent.yml in your project root (${projectPath}) or run \`dexto setup\` to configure preferences.`,
54
54
  { projectPath },
55
55
  "Run `dexto setup` or create a project-specific agent config"
56
56
  );
package/dist/index.cjs CHANGED
@@ -20,6 +20,7 @@ var index_exports = {};
20
20
  __export(index_exports, {
21
21
  AgentFactory: () => import_AgentFactory.AgentFactory,
22
22
  AgentManager: () => import_AgentManager.AgentManager,
23
+ CUSTOM_MODEL_PROVIDERS: () => import_custom_models.CUSTOM_MODEL_PROVIDERS,
23
24
  ConfigError: () => import_config.ConfigError,
24
25
  ConfigErrorCode: () => import_config.ConfigErrorCode,
25
26
  CustomModelSchema: () => import_custom_models.CustomModelSchema,
@@ -28,39 +29,68 @@ __export(index_exports, {
28
29
  PreferenceErrorCode: () => import_errors2.PreferenceErrorCode,
29
30
  RegistryError: () => import_errors.RegistryError,
30
31
  RegistryErrorCode: () => import_error_codes.RegistryErrorCode,
32
+ SHARED_API_KEY_PROVIDERS: () => import_api_key_store.SHARED_API_KEY_PROVIDERS,
33
+ addInstalledModel: () => import_models.addInstalledModel,
31
34
  addPromptToAgentConfig: () => import_config.addPromptToAgentConfig,
35
+ addToDownloadQueue: () => import_models.addToDownloadQueue,
32
36
  copyDirectory: () => import_path.copyDirectory,
33
37
  createInitialPreferences: () => import_loader.createInitialPreferences,
34
38
  deleteCustomModel: () => import_custom_models.deleteCustomModel,
39
+ deleteModelDirectory: () => import_models.deleteModelDirectory,
35
40
  deletePromptByMetadata: () => import_config.deletePromptByMetadata,
36
41
  deriveAgentId: () => import_config.deriveAgentId,
37
42
  deriveDisplayName: () => import_types.deriveDisplayName,
43
+ determineApiKeyStorage: () => import_api_key_store.determineApiKeyStorage,
38
44
  enrichAgentConfig: () => import_config.enrichAgentConfig,
39
45
  ensureDextoGlobalDirectory: () => import_path.ensureDextoGlobalDirectory,
46
+ ensureModelDirectory: () => import_models.ensureModelDirectory,
47
+ ensureModelsDirectory: () => import_models.ensureModelsDirectory,
40
48
  findDextoProjectRoot: () => import_execution_context.findDextoProjectRoot,
41
49
  findDextoSourceRoot: () => import_execution_context.findDextoSourceRoot,
42
50
  findPackageRoot: () => import_path.findPackageRoot,
51
+ formatSize: () => import_models.formatSize,
52
+ getActiveModel: () => import_models.getActiveModel,
53
+ getActiveModelId: () => import_models.getActiveModelId,
43
54
  getAgentRegistry: () => import_registry.getAgentRegistry,
55
+ getAllInstalledModels: () => import_models.getAllInstalledModels,
44
56
  getCustomModel: () => import_custom_models.getCustomModel,
45
57
  getCustomModelsPath: () => import_custom_models.getCustomModelsPath,
46
58
  getDextoEnvPath: () => import_path.getDextoEnvPath,
47
59
  getDextoGlobalPath: () => import_path.getDextoGlobalPath,
48
60
  getDextoPath: () => import_path.getDextoPath,
61
+ getDownloadQueue: () => import_models.getDownloadQueue,
49
62
  getExecutionContext: () => import_execution_context.getExecutionContext,
50
63
  getGlobalPreferencesPath: () => import_loader.getGlobalPreferencesPath,
64
+ getInstalledModel: () => import_models.getInstalledModel,
65
+ getInstalledModelCount: () => import_models.getInstalledModelCount,
66
+ getModelDirectory: () => import_models.getModelDirectory,
67
+ getModelFilePath: () => import_models.getModelFilePath,
68
+ getModelFileSize: () => import_models.getModelFileSize,
69
+ getModelStatePath: () => import_models.getModelStatePath,
70
+ getModelTempDirectory: () => import_models.getModelTempDirectory,
71
+ getModelsDirectory: () => import_models.getModelsDirectory,
72
+ getModelsDiskUsage: () => import_models.getModelsDiskUsage,
51
73
  getPrimaryApiKeyEnvVar: () => import_api_key_resolver.getPrimaryApiKeyEnvVar,
52
74
  getProviderKeyStatus: () => import_api_key_store.getProviderKeyStatus,
75
+ getTotalInstalledSize: () => import_models.getTotalInstalledSize,
53
76
  globalPreferencesExist: () => import_loader.globalPreferencesExist,
54
77
  installBundledAgent: () => import_installation.installBundledAgent,
55
78
  installCustomAgent: () => import_installation.installCustomAgent,
79
+ isModelInstalled: () => import_models.isModelInstalled,
56
80
  isPath: () => import_path.isPath,
57
81
  listInstalledAgents: () => import_installation.listInstalledAgents,
82
+ listModelDirectories: () => import_models.listModelDirectories,
58
83
  listProviderKeyStatus: () => import_api_key_store.listProviderKeyStatus,
59
84
  loadAgentConfig: () => import_config.loadAgentConfig,
60
85
  loadBundledRegistryAgents: () => import_registry.loadBundledRegistryAgents,
61
86
  loadCustomModels: () => import_custom_models.loadCustomModels,
62
87
  loadGlobalPreferences: () => import_loader.loadGlobalPreferences,
88
+ loadModelState: () => import_models.loadModelState,
89
+ modelFileExists: () => import_models.modelFileExists,
90
+ registerManualModel: () => import_models.registerManualModel,
63
91
  reloadAgentConfigFromFile: () => import_config.reloadAgentConfigFromFile,
92
+ removeFromDownloadQueue: () => import_models.removeFromDownloadQueue,
93
+ removeInstalledModel: () => import_models.removeInstalledModel,
64
94
  removeMcpServerFromConfig: () => import_config.removeMcpServerFromConfig,
65
95
  removePromptFromAgentConfig: () => import_config.removePromptFromAgentConfig,
66
96
  resolveAgentPath: () => import_resolver.resolveAgentPath,
@@ -68,13 +98,17 @@ __export(index_exports, {
68
98
  resolveBundledScript: () => import_path.resolveBundledScript,
69
99
  saveCustomModel: () => import_custom_models.saveCustomModel,
70
100
  saveGlobalPreferences: () => import_loader.saveGlobalPreferences,
101
+ saveModelState: () => import_models.saveModelState,
71
102
  saveProviderApiKey: () => import_api_key_store.saveProviderApiKey,
103
+ setActiveModel: () => import_models.setActiveModel,
104
+ syncStateWithFilesystem: () => import_models.syncStateWithFilesystem,
72
105
  uninstallAgent: () => import_installation.uninstallAgent,
73
106
  updateAgentConfigFile: () => import_config.updateAgentConfigFile,
74
107
  updateDefaultAgentPreference: () => import_resolver.updateDefaultAgentPreference,
75
108
  updateEnvFile: () => import_env_file.updateEnvFile,
76
109
  updateGlobalPreferences: () => import_loader.updateGlobalPreferences,
77
110
  updateMcpServerField: () => import_config.updateMcpServerField,
111
+ updateModelLastUsed: () => import_models.updateModelLastUsed,
78
112
  walkUpDirectories: () => import_fs_walk.walkUpDirectories,
79
113
  writeConfigFile: () => import_writer.writeConfigFile,
80
114
  writeLLMPreferences: () => import_writer.writeLLMPreferences,
@@ -100,10 +134,12 @@ var import_config = require("./config/index.js");
100
134
  var import_api_key_store = require("./utils/api-key-store.js");
101
135
  var import_api_key_resolver = require("./utils/api-key-resolver.js");
102
136
  var import_custom_models = require("./models/custom-models.js");
137
+ var import_models = require("./models/index.js");
103
138
  // Annotate the CommonJS export names for ESM import in node:
104
139
  0 && (module.exports = {
105
140
  AgentFactory,
106
141
  AgentManager,
142
+ CUSTOM_MODEL_PROVIDERS,
107
143
  ConfigError,
108
144
  ConfigErrorCode,
109
145
  CustomModelSchema,
@@ -112,39 +148,68 @@ var import_custom_models = require("./models/custom-models.js");
112
148
  PreferenceErrorCode,
113
149
  RegistryError,
114
150
  RegistryErrorCode,
151
+ SHARED_API_KEY_PROVIDERS,
152
+ addInstalledModel,
115
153
  addPromptToAgentConfig,
154
+ addToDownloadQueue,
116
155
  copyDirectory,
117
156
  createInitialPreferences,
118
157
  deleteCustomModel,
158
+ deleteModelDirectory,
119
159
  deletePromptByMetadata,
120
160
  deriveAgentId,
121
161
  deriveDisplayName,
162
+ determineApiKeyStorage,
122
163
  enrichAgentConfig,
123
164
  ensureDextoGlobalDirectory,
165
+ ensureModelDirectory,
166
+ ensureModelsDirectory,
124
167
  findDextoProjectRoot,
125
168
  findDextoSourceRoot,
126
169
  findPackageRoot,
170
+ formatSize,
171
+ getActiveModel,
172
+ getActiveModelId,
127
173
  getAgentRegistry,
174
+ getAllInstalledModels,
128
175
  getCustomModel,
129
176
  getCustomModelsPath,
130
177
  getDextoEnvPath,
131
178
  getDextoGlobalPath,
132
179
  getDextoPath,
180
+ getDownloadQueue,
133
181
  getExecutionContext,
134
182
  getGlobalPreferencesPath,
183
+ getInstalledModel,
184
+ getInstalledModelCount,
185
+ getModelDirectory,
186
+ getModelFilePath,
187
+ getModelFileSize,
188
+ getModelStatePath,
189
+ getModelTempDirectory,
190
+ getModelsDirectory,
191
+ getModelsDiskUsage,
135
192
  getPrimaryApiKeyEnvVar,
136
193
  getProviderKeyStatus,
194
+ getTotalInstalledSize,
137
195
  globalPreferencesExist,
138
196
  installBundledAgent,
139
197
  installCustomAgent,
198
+ isModelInstalled,
140
199
  isPath,
141
200
  listInstalledAgents,
201
+ listModelDirectories,
142
202
  listProviderKeyStatus,
143
203
  loadAgentConfig,
144
204
  loadBundledRegistryAgents,
145
205
  loadCustomModels,
146
206
  loadGlobalPreferences,
207
+ loadModelState,
208
+ modelFileExists,
209
+ registerManualModel,
147
210
  reloadAgentConfigFromFile,
211
+ removeFromDownloadQueue,
212
+ removeInstalledModel,
148
213
  removeMcpServerFromConfig,
149
214
  removePromptFromAgentConfig,
150
215
  resolveAgentPath,
@@ -152,13 +217,17 @@ var import_custom_models = require("./models/custom-models.js");
152
217
  resolveBundledScript,
153
218
  saveCustomModel,
154
219
  saveGlobalPreferences,
220
+ saveModelState,
155
221
  saveProviderApiKey,
222
+ setActiveModel,
223
+ syncStateWithFilesystem,
156
224
  uninstallAgent,
157
225
  updateAgentConfigFile,
158
226
  updateDefaultAgentPreference,
159
227
  updateEnvFile,
160
228
  updateGlobalPreferences,
161
229
  updateMcpServerField,
230
+ updateModelLastUsed,
162
231
  walkUpDirectories,
163
232
  writeConfigFile,
164
233
  writeLLMPreferences,
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ export type { AgentRegistry, AgentRegistryEntry, Registry } from './registry/typ
3
3
  export { deriveDisplayName } from './registry/types.js';
4
4
  export { RegistryError } from './registry/errors.js';
5
5
  export { RegistryErrorCode } from './registry/error-codes.js';
6
- export { loadGlobalPreferences, saveGlobalPreferences, globalPreferencesExist, getGlobalPreferencesPath, createInitialPreferences, updateGlobalPreferences, type GlobalPreferencesUpdates, } from './preferences/loader.js';
6
+ export { loadGlobalPreferences, saveGlobalPreferences, globalPreferencesExist, getGlobalPreferencesPath, createInitialPreferences, updateGlobalPreferences, type GlobalPreferencesUpdates, type CreatePreferencesOptions, } from './preferences/loader.js';
7
7
  export type { GlobalPreferences } from './preferences/schemas.js';
8
8
  export { PreferenceError, PreferenceErrorCode } from './preferences/errors.js';
9
9
  export { resolveAgentPath, updateDefaultAgentPreference } from './resolver.js';
@@ -16,7 +16,8 @@ export { getExecutionContext, findDextoSourceRoot, findDextoProjectRoot, type Ex
16
16
  export { walkUpDirectories } from './utils/fs-walk.js';
17
17
  export { updateEnvFile } from './utils/env-file.js';
18
18
  export { updateAgentConfigFile, reloadAgentConfigFromFile, loadAgentConfig, enrichAgentConfig, deriveAgentId, addPromptToAgentConfig, removePromptFromAgentConfig, deletePromptByMetadata, updateMcpServerField, removeMcpServerFromConfig, ConfigError, ConfigErrorCode, type FilePromptInput, type InlinePromptInput, type PromptInput, type PromptMetadataForDeletion, type PromptDeletionResult, } from './config/index.js';
19
- export { saveProviderApiKey, getProviderKeyStatus, listProviderKeyStatus, } from './utils/api-key-store.js';
19
+ export { saveProviderApiKey, getProviderKeyStatus, listProviderKeyStatus, determineApiKeyStorage, SHARED_API_KEY_PROVIDERS, type ApiKeyStorageStrategy, } from './utils/api-key-store.js';
20
20
  export { resolveApiKeyForProvider, getPrimaryApiKeyEnvVar, PROVIDER_API_KEY_MAP, } from './utils/api-key-resolver.js';
21
- export { loadCustomModels, saveCustomModel, deleteCustomModel, getCustomModel, getCustomModelsPath, CustomModelSchema, type CustomModel, } from './models/custom-models.js';
21
+ export { loadCustomModels, saveCustomModel, deleteCustomModel, getCustomModel, getCustomModelsPath, CustomModelSchema, CUSTOM_MODEL_PROVIDERS, type CustomModel, type CustomModelProvider, } from './models/custom-models.js';
22
+ export { getModelsDirectory, getModelFilePath, getModelDirectory, getModelStatePath, getModelTempDirectory, ensureModelsDirectory, ensureModelDirectory, modelFileExists, getModelFileSize, deleteModelDirectory, listModelDirectories, getModelsDiskUsage, formatSize, type ModelSource, type InstalledModel, type ModelState, loadModelState, saveModelState, addInstalledModel, removeInstalledModel, getInstalledModel, getAllInstalledModels, isModelInstalled, updateModelLastUsed, setActiveModel, getActiveModelId, getActiveModel, addToDownloadQueue, removeFromDownloadQueue, getDownloadQueue, syncStateWithFilesystem, getTotalInstalledSize, getInstalledModelCount, registerManualModel, } from './models/index.js';
22
23
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,yBAAyB,EAAE,MAAM,wBAAwB,CAAC;AACrF,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,QAAQ,EAAE,MAAM,qBAAqB,CAAC;AACvF,OAAO,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AACrD,OAAO,EAAE,iBAAiB,EAAE,MAAM,2BAA2B,CAAC;AAG9D,OAAO,EACH,qBAAqB,EACrB,qBAAqB,EACrB,sBAAsB,EACtB,wBAAwB,EACxB,wBAAwB,EACxB,uBAAuB,EACvB,KAAK,wBAAwB,GAChC,MAAM,yBAAyB,CAAC;AACjC,YAAY,EAAE,iBAAiB,EAAE,MAAM,0BAA0B,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAG/E,OAAO,EAAE,gBAAgB,EAAE,4BAA4B,EAAE,MAAM,eAAe,CAAC;AAG/E,OAAO,EACH,eAAe,EACf,mBAAmB,EACnB,uBAAuB,EACvB,KAAK,YAAY,GACpB,MAAM,aAAa,CAAC;AAGrB,OAAO,EAAE,YAAY,EAAE,KAAK,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAGrE,OAAO,EACH,mBAAmB,EACnB,kBAAkB,EAClB,cAAc,EACd,mBAAmB,EACnB,KAAK,cAAc,GACtB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EAAE,YAAY,EAAE,KAAK,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AAG1E,OAAO,EACH,YAAY,EACZ,kBAAkB,EAClB,eAAe,EACf,aAAa,EACb,MAAM,EACN,eAAe,EACf,oBAAoB,EACpB,0BAA0B,GAC7B,MAAM,iBAAiB,CAAC;AACzB,OAAO,EACH,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,KAAK,gBAAgB,GACxB,MAAM,8BAA8B,CAAC;AACtC,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAGpD,OAAO,EACH,qBAAqB,EACrB,yBAAyB,EACzB,eAAe,EACf,iBAAiB,EACjB,aAAa,EACb,sBAAsB,EACtB,2BAA2B,EAC3B,sBAAsB,EACtB,oBAAoB,EACpB,yBAAyB,EACzB,WAAW,EACX,eAAe,EACf,KAAK,eAAe,EACpB,KAAK,iBAAiB,EACtB,KAAK,WAAW,EAChB,KAAK,yBAAyB,EAC9B,KAAK,oBAAoB,GAC5B,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACH,kBAAkB,EAClB,oBAAoB,EACpB,qBAAqB,GACxB,MAAM,0BAA0B,CAAC;AAClC,OAAO,EACH,wBAAwB,EACxB,sBAAsB,EACtB,oBAAoB,GACvB,MAAM,6BAA6B,CAAC;AAGrC,OAAO,EACH,gBAAgB,EAChB,eAAe,EACf,iBAAiB,EACjB,cAAc,EACd,mBAAmB,EACnB,iBAAiB,EACjB,KAAK,WAAW,GACnB,MAAM,2BAA2B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}