@dexto/agent-management 1.2.5

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 (110) hide show
  1. package/LICENSE +44 -0
  2. package/dist/AgentOrchestrator.cjs +263 -0
  3. package/dist/AgentOrchestrator.d.ts +191 -0
  4. package/dist/AgentOrchestrator.d.ts.map +1 -0
  5. package/dist/AgentOrchestrator.js +239 -0
  6. package/dist/config/config-enrichment.cjs +117 -0
  7. package/dist/config/config-enrichment.d.ts +31 -0
  8. package/dist/config/config-enrichment.d.ts.map +1 -0
  9. package/dist/config/config-enrichment.js +82 -0
  10. package/dist/config/config-manager.cjs +57 -0
  11. package/dist/config/config-manager.d.ts +51 -0
  12. package/dist/config/config-manager.d.ts.map +1 -0
  13. package/dist/config/config-manager.js +32 -0
  14. package/dist/config/error-codes.cjs +39 -0
  15. package/dist/config/error-codes.d.ts +16 -0
  16. package/dist/config/error-codes.d.ts.map +1 -0
  17. package/dist/config/error-codes.js +15 -0
  18. package/dist/config/errors.cjs +125 -0
  19. package/dist/config/errors.d.ts +34 -0
  20. package/dist/config/errors.d.ts.map +1 -0
  21. package/dist/config/errors.js +101 -0
  22. package/dist/config/index.cjs +44 -0
  23. package/dist/config/index.d.ts +6 -0
  24. package/dist/config/index.d.ts.map +1 -0
  25. package/dist/config/index.js +14 -0
  26. package/dist/config/loader.cjs +118 -0
  27. package/dist/config/loader.d.ts +18 -0
  28. package/dist/config/loader.d.ts.map +1 -0
  29. package/dist/config/loader.js +84 -0
  30. package/dist/index.cjs +132 -0
  31. package/dist/index.d.ts +20 -0
  32. package/dist/index.d.ts.map +1 -0
  33. package/dist/index.js +104 -0
  34. package/dist/preferences/constants.cjs +28 -0
  35. package/dist/preferences/constants.d.ts +2 -0
  36. package/dist/preferences/constants.d.ts.map +1 -0
  37. package/dist/preferences/constants.js +4 -0
  38. package/dist/preferences/error-codes.cjs +35 -0
  39. package/dist/preferences/error-codes.d.ts +8 -0
  40. package/dist/preferences/error-codes.d.ts.map +1 -0
  41. package/dist/preferences/error-codes.js +11 -0
  42. package/dist/preferences/errors.cjs +74 -0
  43. package/dist/preferences/errors.d.ts +18 -0
  44. package/dist/preferences/errors.d.ts.map +1 -0
  45. package/dist/preferences/errors.js +49 -0
  46. package/dist/preferences/index.cjs +55 -0
  47. package/dist/preferences/index.d.ts +6 -0
  48. package/dist/preferences/index.d.ts.map +1 -0
  49. package/dist/preferences/index.js +31 -0
  50. package/dist/preferences/loader.cjs +138 -0
  51. package/dist/preferences/loader.d.ts +50 -0
  52. package/dist/preferences/loader.d.ts.map +1 -0
  53. package/dist/preferences/loader.js +109 -0
  54. package/dist/preferences/schemas.cjs +75 -0
  55. package/dist/preferences/schemas.d.ts +110 -0
  56. package/dist/preferences/schemas.d.ts.map +1 -0
  57. package/dist/preferences/schemas.js +48 -0
  58. package/dist/registry/error-codes.cjs +44 -0
  59. package/dist/registry/error-codes.d.ts +21 -0
  60. package/dist/registry/error-codes.d.ts.map +1 -0
  61. package/dist/registry/error-codes.js +20 -0
  62. package/dist/registry/errors.cjs +187 -0
  63. package/dist/registry/errors.d.ts +63 -0
  64. package/dist/registry/errors.d.ts.map +1 -0
  65. package/dist/registry/errors.js +163 -0
  66. package/dist/registry/registry.cjs +479 -0
  67. package/dist/registry/registry.d.ts +130 -0
  68. package/dist/registry/registry.d.ts.map +1 -0
  69. package/dist/registry/registry.js +452 -0
  70. package/dist/registry/types.cjs +74 -0
  71. package/dist/registry/types.d.ts +142 -0
  72. package/dist/registry/types.d.ts.map +1 -0
  73. package/dist/registry/types.js +47 -0
  74. package/dist/registry/user-registry.cjs +140 -0
  75. package/dist/registry/user-registry.d.ts +34 -0
  76. package/dist/registry/user-registry.d.ts.map +1 -0
  77. package/dist/registry/user-registry.js +104 -0
  78. package/dist/resolver.cjs +182 -0
  79. package/dist/resolver.d.ts +14 -0
  80. package/dist/resolver.d.ts.map +1 -0
  81. package/dist/resolver.js +151 -0
  82. package/dist/utils/api-key-resolver.cjs +62 -0
  83. package/dist/utils/api-key-resolver.d.ts +21 -0
  84. package/dist/utils/api-key-resolver.d.ts.map +1 -0
  85. package/dist/utils/api-key-resolver.js +36 -0
  86. package/dist/utils/api-key-store.cjs +56 -0
  87. package/dist/utils/api-key-store.d.ts +18 -0
  88. package/dist/utils/api-key-store.d.ts.map +1 -0
  89. package/dist/utils/api-key-store.js +30 -0
  90. package/dist/utils/env-file.cjs +118 -0
  91. package/dist/utils/env-file.d.ts +5 -0
  92. package/dist/utils/env-file.d.ts.map +1 -0
  93. package/dist/utils/env-file.js +84 -0
  94. package/dist/utils/execution-context.cjs +85 -0
  95. package/dist/utils/execution-context.d.ts +20 -0
  96. package/dist/utils/execution-context.d.ts.map +1 -0
  97. package/dist/utils/execution-context.js +49 -0
  98. package/dist/utils/fs-walk.cjs +52 -0
  99. package/dist/utils/fs-walk.d.ts +8 -0
  100. package/dist/utils/fs-walk.d.ts.map +1 -0
  101. package/dist/utils/fs-walk.js +18 -0
  102. package/dist/utils/path.cjs +205 -0
  103. package/dist/utils/path.d.ts +58 -0
  104. package/dist/utils/path.d.ts.map +1 -0
  105. package/dist/utils/path.js +167 -0
  106. package/dist/writer.cjs +182 -0
  107. package/dist/writer.d.ts +34 -0
  108. package/dist/writer.d.ts.map +1 -0
  109. package/dist/writer.js +146 -0
  110. package/package.json +41 -0
package/dist/writer.js ADDED
@@ -0,0 +1,146 @@
1
+ import { promises as fs } from "fs";
2
+ import { parse as parseYaml, stringify as stringifyYaml } from "yaml";
3
+ import * as path from "path";
4
+ import { logger } from "@dexto/core";
5
+ import { ConfigError } from "./config/index.js";
6
+ async function writeConfigFile(configPath, config) {
7
+ const absolutePath = path.resolve(configPath);
8
+ try {
9
+ const yamlContent = stringifyYaml(config, { indent: 2 });
10
+ await fs.writeFile(absolutePath, yamlContent, "utf-8");
11
+ logger.debug(`Wrote dexto config to: ${absolutePath}`);
12
+ } catch (error) {
13
+ throw ConfigError.fileWriteError(
14
+ absolutePath,
15
+ error instanceof Error ? error.message : String(error)
16
+ );
17
+ }
18
+ }
19
+ async function writeLLMPreferences(configPath, preferences, overrides) {
20
+ logger.debug(`Writing LLM preferences to: ${configPath}`, {
21
+ provider: overrides?.provider ?? preferences.llm.provider,
22
+ model: overrides?.model ?? preferences.llm.model,
23
+ hasApiKeyOverride: Boolean(overrides?.apiKey),
24
+ hasPreferenceApiKey: Boolean(preferences.llm.apiKey)
25
+ });
26
+ logger.debug(`Reading config file: ${configPath}`);
27
+ let fileContent;
28
+ try {
29
+ fileContent = await fs.readFile(configPath, "utf-8");
30
+ logger.debug(`Successfully read config file (${fileContent.length} chars)`);
31
+ } catch (error) {
32
+ logger.error(`Failed to read config file: ${configPath}`, { error });
33
+ throw ConfigError.fileReadError(
34
+ configPath,
35
+ error instanceof Error ? error.message : String(error)
36
+ );
37
+ }
38
+ let config;
39
+ try {
40
+ config = parseYaml(fileContent);
41
+ logger.debug(`Successfully parsed YAML config`, {
42
+ hasLlmSection: Boolean(config.llm),
43
+ existingProvider: config.llm?.provider,
44
+ existingModel: config.llm?.model
45
+ });
46
+ } catch (error) {
47
+ logger.error(`Failed to parse YAML config: ${configPath}`, { error });
48
+ throw ConfigError.parseError(
49
+ configPath,
50
+ error instanceof Error ? error.message : String(error)
51
+ );
52
+ }
53
+ const provider = overrides?.provider ?? preferences.llm.provider;
54
+ const model = overrides?.model ?? preferences.llm.model;
55
+ const apiKey = overrides?.apiKey ?? preferences.llm.apiKey;
56
+ logger.debug(`Applying LLM preferences`, {
57
+ finalProvider: provider,
58
+ finalModel: model,
59
+ hasApiKey: Boolean(apiKey),
60
+ source: overrides ? "CLI overrides + preferences" : "preferences only"
61
+ });
62
+ config.llm = {
63
+ ...config.llm,
64
+ // Preserve temperature, router, maxTokens, etc.
65
+ provider,
66
+ // Write user preference
67
+ model,
68
+ // Write user preference
69
+ apiKey
70
+ // Write user preference
71
+ };
72
+ await writeConfigFile(configPath, config);
73
+ logger.info(`\u2713 Applied preferences to: ${path.basename(configPath)} (${provider}/${model})`);
74
+ }
75
+ async function writePreferencesToAgent(installedPath, preferences, overrides) {
76
+ let stat;
77
+ try {
78
+ stat = await fs.stat(installedPath);
79
+ } catch (error) {
80
+ throw ConfigError.fileReadError(
81
+ installedPath,
82
+ error instanceof Error ? error.message : String(error)
83
+ );
84
+ }
85
+ if (stat.isFile()) {
86
+ if (installedPath.endsWith(".yml") || installedPath.endsWith(".yaml")) {
87
+ await writeLLMPreferences(installedPath, preferences, overrides);
88
+ logger.info(`\u2713 Applied preferences to: ${path.basename(installedPath)}`, null, "green");
89
+ } else {
90
+ logger.warn(`Skipping non-YAML file: ${installedPath}`, null, "yellow");
91
+ }
92
+ } else if (stat.isDirectory()) {
93
+ await writePreferencesToDirectory(installedPath, preferences, overrides);
94
+ } else {
95
+ throw ConfigError.fileReadError(installedPath, "Path is neither a file nor directory");
96
+ }
97
+ }
98
+ async function writePreferencesToDirectory(installedDir, preferences, overrides) {
99
+ const configFiles = await findAgentConfigFiles(installedDir);
100
+ if (configFiles.length === 0) {
101
+ logger.warn(`No YAML config files found in: ${installedDir}`);
102
+ return;
103
+ }
104
+ let successCount = 0;
105
+ const oldProvider = preferences.llm.provider;
106
+ const oldModel = preferences.llm.model;
107
+ const newProvider = overrides?.provider ?? preferences.llm.provider;
108
+ const newModel = overrides?.model ?? preferences.llm.model;
109
+ for (const configPath of configFiles) {
110
+ try {
111
+ await writeLLMPreferences(configPath, preferences, overrides);
112
+ logger.debug(`Applied preferences to: ${path.relative(installedDir, configPath)}`);
113
+ successCount++;
114
+ } catch (error) {
115
+ logger.warn(
116
+ `Failed to write preferences to ${configPath}: ${error instanceof Error ? error.message : String(error)}`
117
+ );
118
+ }
119
+ }
120
+ logger.info(
121
+ `\u2713 Applied preferences to ${successCount}/${configFiles.length} config files (${oldProvider}\u2192${newProvider}, ${oldModel}\u2192${newModel})`
122
+ );
123
+ }
124
+ async function findAgentConfigFiles(dir) {
125
+ const configFiles = [];
126
+ async function walkDir(currentDir) {
127
+ const entries = await fs.readdir(currentDir, { withFileTypes: true });
128
+ for (const entry of entries) {
129
+ const fullPath = path.join(currentDir, entry.name);
130
+ if (entry.isDirectory()) {
131
+ if (!["docs", "data"].includes(entry.name)) {
132
+ await walkDir(fullPath);
133
+ }
134
+ } else if (entry.name.endsWith(".yml") || entry.name.endsWith(".yaml")) {
135
+ configFiles.push(fullPath);
136
+ }
137
+ }
138
+ }
139
+ await walkDir(dir);
140
+ return configFiles;
141
+ }
142
+ export {
143
+ writeConfigFile,
144
+ writeLLMPreferences,
145
+ writePreferencesToAgent
146
+ };
package/package.json ADDED
@@ -0,0 +1,41 @@
1
+ {
2
+ "name": "@dexto/agent-management",
3
+ "version": "1.2.5",
4
+ "private": false,
5
+ "type": "module",
6
+ "main": "./dist/index.js",
7
+ "module": "./dist/index.js",
8
+ "types": "./dist/index.d.ts",
9
+ "exports": {
10
+ ".": {
11
+ "import": "./dist/index.js",
12
+ "require": "./dist/index.cjs"
13
+ },
14
+ "./package.json": "./package.json"
15
+ },
16
+ "dependencies": {
17
+ "yaml": "^2.7.1",
18
+ "zod": "^3.25.0",
19
+ "@dexto/core": "1.2.5"
20
+ },
21
+ "devDependencies": {
22
+ "@types/node": "^22.13.5"
23
+ },
24
+ "peerDependencies": {
25
+ "zod": "^3.25.0"
26
+ },
27
+ "files": [
28
+ "dist",
29
+ "README.md"
30
+ ],
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "sideEffects": false,
35
+ "scripts": {
36
+ "build": "cross-env NODE_OPTIONS='--max-old-space-size=4096' tsup && cross-env NODE_OPTIONS='--max-old-space-size=4096' tsc -p tsconfig.json --emitDeclarationOnly && node scripts/fix-dist-aliases.mjs",
37
+ "dev": "tsup --watch",
38
+ "typecheck": "tsc -p tsconfig.typecheck.json --noEmit",
39
+ "lint": "eslint . --ext .ts"
40
+ }
41
+ }