agent-switchboard 0.2.3 → 0.3.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 (104) hide show
  1. package/README.md +29 -28
  2. package/dist/agents/registry.d.ts +0 -6
  3. package/dist/agents/registry.js +0 -13
  4. package/dist/agents/registry.js.map +1 -1
  5. package/dist/commands/distribution.d.ts +3 -4
  6. package/dist/commands/distribution.js +18 -116
  7. package/dist/commands/distribution.js.map +1 -1
  8. package/dist/config/application-config.d.ts +1 -1
  9. package/dist/config/application-config.js +2 -10
  10. package/dist/config/application-config.js.map +1 -1
  11. package/dist/config/mcp-config.js +1 -3
  12. package/dist/config/mcp-config.js.map +1 -1
  13. package/dist/config/paths.d.ts +11 -7
  14. package/dist/config/paths.js +29 -9
  15. package/dist/config/paths.js.map +1 -1
  16. package/dist/config/schemas.d.ts +331 -43
  17. package/dist/config/schemas.js +109 -15
  18. package/dist/config/schemas.js.map +1 -1
  19. package/dist/config/switchboard-config.js +0 -1
  20. package/dist/config/switchboard-config.js.map +1 -1
  21. package/dist/extensions/api.d.ts +49 -0
  22. package/dist/extensions/api.js +41 -0
  23. package/dist/extensions/api.js.map +1 -0
  24. package/dist/extensions/loader.d.ts +17 -0
  25. package/dist/extensions/loader.js +73 -0
  26. package/dist/extensions/loader.js.map +1 -0
  27. package/dist/hooks/distribution.js +1 -16
  28. package/dist/hooks/distribution.js.map +1 -1
  29. package/dist/index.js +77 -123
  30. package/dist/index.js.map +1 -1
  31. package/dist/library/distribute-bundle.js +1 -19
  32. package/dist/library/distribute-bundle.js.map +1 -1
  33. package/dist/library/fs.d.ts +12 -0
  34. package/dist/library/fs.js +81 -0
  35. package/dist/library/fs.js.map +1 -1
  36. package/dist/library/sources.d.ts +6 -1
  37. package/dist/library/sources.js +73 -16
  38. package/dist/library/sources.js.map +1 -1
  39. package/dist/rules/agents.d.ts +0 -4
  40. package/dist/rules/agents.js +0 -10
  41. package/dist/rules/agents.js.map +1 -1
  42. package/dist/rules/distribution.d.ts +1 -2
  43. package/dist/rules/distribution.js +20 -79
  44. package/dist/rules/distribution.js.map +1 -1
  45. package/dist/skills/distribution.d.ts +0 -22
  46. package/dist/skills/distribution.js +70 -185
  47. package/dist/skills/distribution.js.map +1 -1
  48. package/dist/skills/importer.js +2 -33
  49. package/dist/skills/importer.js.map +1 -1
  50. package/dist/subagents/codex-distribute.d.ts +13 -0
  51. package/dist/subagents/codex-distribute.js +273 -0
  52. package/dist/subagents/codex-distribute.js.map +1 -0
  53. package/dist/subagents/distribution.d.ts +3 -4
  54. package/dist/subagents/distribution.js +30 -410
  55. package/dist/subagents/distribution.js.map +1 -1
  56. package/dist/targets/builtin/claude-code.d.ts +2 -0
  57. package/dist/targets/builtin/claude-code.js +73 -0
  58. package/dist/targets/builtin/claude-code.js.map +1 -0
  59. package/dist/targets/builtin/claude-desktop.d.ts +2 -0
  60. package/dist/targets/builtin/claude-desktop.js +14 -0
  61. package/dist/targets/builtin/claude-desktop.js.map +1 -0
  62. package/dist/targets/builtin/codex.d.ts +3 -0
  63. package/dist/targets/builtin/codex.js +57 -0
  64. package/dist/targets/builtin/codex.js.map +1 -0
  65. package/dist/targets/builtin/common.d.ts +22 -0
  66. package/dist/targets/builtin/common.js +55 -0
  67. package/dist/targets/builtin/common.js.map +1 -0
  68. package/dist/targets/builtin/cursor.d.ts +2 -0
  69. package/dist/targets/builtin/cursor.js +95 -0
  70. package/dist/targets/builtin/cursor.js.map +1 -0
  71. package/dist/targets/builtin/gemini.d.ts +2 -0
  72. package/dist/targets/builtin/gemini.js +62 -0
  73. package/dist/targets/builtin/gemini.js.map +1 -0
  74. package/dist/targets/builtin/index.d.ts +10 -0
  75. package/dist/targets/builtin/index.js +19 -0
  76. package/dist/targets/builtin/index.js.map +1 -0
  77. package/dist/targets/builtin/opencode.d.ts +2 -0
  78. package/dist/targets/builtin/opencode.js +67 -0
  79. package/dist/targets/builtin/opencode.js.map +1 -0
  80. package/dist/targets/builtin/trae.d.ts +3 -0
  81. package/dist/targets/builtin/trae.js +56 -0
  82. package/dist/targets/builtin/trae.js.map +1 -0
  83. package/dist/targets/dsl/compiler.d.ts +13 -0
  84. package/dist/targets/dsl/compiler.js +215 -0
  85. package/dist/targets/dsl/compiler.js.map +1 -0
  86. package/dist/targets/dsl/index.d.ts +2 -0
  87. package/dist/targets/dsl/index.js +3 -0
  88. package/dist/targets/dsl/index.js.map +1 -0
  89. package/dist/targets/dsl/transforms.d.ts +77 -0
  90. package/dist/targets/dsl/transforms.js +159 -0
  91. package/dist/targets/dsl/transforms.js.map +1 -0
  92. package/dist/targets/init.d.ts +14 -0
  93. package/dist/targets/init.js +28 -0
  94. package/dist/targets/init.js.map +1 -0
  95. package/dist/targets/registry.d.ts +38 -0
  96. package/dist/targets/registry.js +101 -0
  97. package/dist/targets/registry.js.map +1 -0
  98. package/dist/targets/types.d.ts +93 -0
  99. package/dist/targets/types.js +28 -0
  100. package/dist/targets/types.js.map +1 -0
  101. package/dist/ui/plugin-ui.d.ts +1 -1
  102. package/dist/ui/plugin-ui.js +5 -12
  103. package/dist/ui/plugin-ui.js.map +1 -1
  104. package/package.json +1 -1
@@ -0,0 +1,273 @@
1
+ /**
2
+ * Codex subagent distribution logic (standalone, no target-registry imports).
3
+ *
4
+ * Extracted from distribution.ts to break circular dependencies:
5
+ * targets/builtin/codex.ts can import this; distribution.ts can import targets/registry.
6
+ */
7
+ import fs from 'node:fs';
8
+ import path from 'node:path';
9
+ import { parse as parseToml, stringify as tomlStringify } from '@iarna/toml';
10
+ import { getCodexAgentsDir, getCodexConfigPath } from '../config/paths.js';
11
+ import { ensureParentDir } from '../library/fs.js';
12
+ import { loadLibraryStateSectionForApplication } from '../library/state.js';
13
+ const ASB_MANAGED_MARKER = '# managed-by: asb';
14
+ const CODEX_ROLE_CONFIG_FIELDS = new Set([
15
+ 'model',
16
+ 'model_reasoning_effort',
17
+ 'model_reasoning_summary',
18
+ 'model_verbosity',
19
+ 'sandbox_mode',
20
+ ]);
21
+ function getCodexExtras(entry) {
22
+ const extras = entry.metadata.extras;
23
+ if (!extras?.codex)
24
+ return undefined;
25
+ const codex = extras.codex;
26
+ return typeof codex === 'object' && Object.keys(codex).length > 0 ? codex : undefined;
27
+ }
28
+ function renderCodexRoleConfig(entry) {
29
+ const codexExtras = getCodexExtras(entry) ?? {};
30
+ const config = {};
31
+ for (const field of CODEX_ROLE_CONFIG_FIELDS) {
32
+ const value = codexExtras[field];
33
+ if (value !== undefined && value !== null) {
34
+ config[field] = value;
35
+ }
36
+ }
37
+ const trimmedContent = entry.content.trim();
38
+ if (trimmedContent.length > 0) {
39
+ config.developer_instructions = trimmedContent;
40
+ }
41
+ let toml = '';
42
+ try {
43
+ toml = tomlStringify(config);
44
+ }
45
+ catch {
46
+ const { developer_instructions: _ignored, ...rest } = config;
47
+ toml = tomlStringify(rest);
48
+ }
49
+ return `${ASB_MANAGED_MARKER}\n${toml}`;
50
+ }
51
+ function isAsbManagedToml(filePath) {
52
+ try {
53
+ const content = fs.readFileSync(filePath, 'utf-8');
54
+ return content.startsWith(ASB_MANAGED_MARKER);
55
+ }
56
+ catch {
57
+ return false;
58
+ }
59
+ }
60
+ function resolveCodexAgentFilePath(id) {
61
+ return path.join(getCodexAgentsDir(), `${id}.toml`);
62
+ }
63
+ /**
64
+ * Distribute subagents to Codex as TOML role config files + config.toml injection.
65
+ */
66
+ export function distributeCodexSubagents(_allEntries, byId, scope) {
67
+ const results = [];
68
+ const platform = 'codex';
69
+ const state = loadLibraryStateSectionForApplication('agents', platform, scope);
70
+ const selected = [];
71
+ for (const id of state.enabled) {
72
+ const e = byId.get(id);
73
+ if (e && getCodexExtras(e))
74
+ selected.push(e);
75
+ }
76
+ const targetDir = getCodexAgentsDir();
77
+ const activeIds = new Set();
78
+ for (const entry of selected) {
79
+ activeIds.add(entry.id);
80
+ const filePath = resolveCodexAgentFilePath(entry.id);
81
+ const content = renderCodexRoleConfig(entry);
82
+ ensureParentDir(filePath);
83
+ let existing = null;
84
+ try {
85
+ if (fs.existsSync(filePath))
86
+ existing = fs.readFileSync(filePath, 'utf-8');
87
+ }
88
+ catch {
89
+ existing = null;
90
+ }
91
+ if (existing !== null && existing === content) {
92
+ results.push({ platform, filePath, status: 'skipped', reason: 'up-to-date' });
93
+ }
94
+ else {
95
+ try {
96
+ fs.writeFileSync(filePath, content, 'utf-8');
97
+ results.push({
98
+ platform,
99
+ filePath,
100
+ status: 'written',
101
+ reason: existing ? 'updated' : 'created',
102
+ });
103
+ }
104
+ catch (error) {
105
+ const msg = error instanceof Error ? error.message : String(error);
106
+ results.push({ platform, filePath, status: 'error', error: msg });
107
+ }
108
+ }
109
+ }
110
+ if (fs.existsSync(targetDir)) {
111
+ try {
112
+ for (const file of fs.readdirSync(targetDir)) {
113
+ if (!file.endsWith('.toml'))
114
+ continue;
115
+ const id = file.slice(0, -5);
116
+ if (activeIds.has(id))
117
+ continue;
118
+ const filePath = path.join(targetDir, file);
119
+ if (fs.statSync(filePath).isDirectory())
120
+ continue;
121
+ if (!isAsbManagedToml(filePath))
122
+ continue;
123
+ try {
124
+ fs.unlinkSync(filePath);
125
+ results.push({
126
+ platform,
127
+ filePath,
128
+ status: 'deleted',
129
+ reason: 'orphan',
130
+ entryId: id,
131
+ });
132
+ }
133
+ catch (error) {
134
+ const msg = error instanceof Error ? error.message : String(error);
135
+ results.push({
136
+ platform,
137
+ filePath,
138
+ status: 'error',
139
+ error: `Failed to delete orphan: ${msg}`,
140
+ entryId: id,
141
+ });
142
+ }
143
+ }
144
+ }
145
+ catch {
146
+ // Ignore directory read errors
147
+ }
148
+ }
149
+ const injectionResult = injectCodexAgentEntries(selected, activeIds);
150
+ if (injectionResult.configResult) {
151
+ results.push(injectionResult.configResult);
152
+ }
153
+ return results;
154
+ }
155
+ function injectCodexAgentEntries(activeEntries, activeIds) {
156
+ const configPath = getCodexConfigPath();
157
+ const platform = 'codex';
158
+ let content = '';
159
+ try {
160
+ if (fs.existsSync(configPath)) {
161
+ content = fs.readFileSync(configPath, 'utf-8');
162
+ }
163
+ }
164
+ catch {
165
+ return {
166
+ configResult: {
167
+ platform,
168
+ filePath: configPath,
169
+ status: 'error',
170
+ error: 'Failed to read config.toml',
171
+ },
172
+ };
173
+ }
174
+ let parsed = {};
175
+ try {
176
+ if (content.trim().length > 0) {
177
+ parsed = parseToml(content);
178
+ }
179
+ }
180
+ catch {
181
+ return {
182
+ configResult: {
183
+ platform,
184
+ filePath: configPath,
185
+ status: 'error',
186
+ error: 'Failed to parse config.toml',
187
+ },
188
+ };
189
+ }
190
+ const agents = (parsed.agents ?? {});
191
+ const reservedKeys = new Set(['max_threads', 'max_depth']);
192
+ let changed = false;
193
+ for (const entry of activeEntries) {
194
+ const existing = agents[entry.id];
195
+ const newEntry = {
196
+ description: entry.metadata.description || `ASB-managed agent role: ${entry.id}`,
197
+ config_file: `agents/${entry.id}.toml`,
198
+ };
199
+ if (!existing ||
200
+ existing.description !== newEntry.description ||
201
+ existing.config_file !== newEntry.config_file) {
202
+ agents[entry.id] = newEntry;
203
+ changed = true;
204
+ }
205
+ }
206
+ for (const [key, value] of Object.entries(agents)) {
207
+ if (reservedKeys.has(key))
208
+ continue;
209
+ if (activeIds.has(key))
210
+ continue;
211
+ if (typeof value !== 'object' || value === null)
212
+ continue;
213
+ const roleConfig = value;
214
+ const configFile = roleConfig.config_file;
215
+ if (typeof configFile === 'string' &&
216
+ configFile.startsWith('agents/') &&
217
+ configFile.endsWith('.toml')) {
218
+ const fullPath = path.join(path.dirname(configPath), configFile);
219
+ if (!fs.existsSync(fullPath) || isAsbManagedToml(fullPath)) {
220
+ delete agents[key];
221
+ changed = true;
222
+ }
223
+ }
224
+ }
225
+ if (!changed && activeEntries.length === 0) {
226
+ return {};
227
+ }
228
+ parsed.agents = agents;
229
+ if (activeEntries.length > 0) {
230
+ const features = (parsed.features ?? {});
231
+ if (features.multi_agent !== true) {
232
+ features.multi_agent = true;
233
+ changed = true;
234
+ }
235
+ parsed.features = features;
236
+ }
237
+ if (!changed) {
238
+ return {};
239
+ }
240
+ const { mcp_servers, ...rest } = parsed;
241
+ try {
242
+ let newContent = tomlStringify(rest).trimEnd();
243
+ if (mcp_servers && typeof mcp_servers === 'object' && Object.keys(mcp_servers).length > 0) {
244
+ const mcpPart = tomlStringify({
245
+ mcp_servers,
246
+ }).trimEnd();
247
+ newContent = `${newContent}\n\n${mcpPart}`;
248
+ }
249
+ newContent = `${newContent}\n`;
250
+ ensureParentDir(configPath);
251
+ fs.writeFileSync(configPath, newContent, 'utf-8');
252
+ return {
253
+ configResult: {
254
+ platform,
255
+ filePath: configPath,
256
+ status: 'written',
257
+ reason: 'agents injected',
258
+ },
259
+ };
260
+ }
261
+ catch (error) {
262
+ const msg = error instanceof Error ? error.message : String(error);
263
+ return {
264
+ configResult: {
265
+ platform,
266
+ filePath: configPath,
267
+ status: 'error',
268
+ error: `Failed to write config.toml: ${msg}`,
269
+ },
270
+ };
271
+ }
272
+ }
273
+ //# sourceMappingURL=codex-distribute.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex-distribute.js","sourceRoot":"","sources":["../../src/subagents/codex-distribute.ts"],"names":[],"mappings":"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"}
@@ -1,13 +1,12 @@
1
1
  import type { ConfigScope } from '../config/scope.js';
2
2
  import { type DistributeOutcome } from '../library/distribute.js';
3
- export type SubagentPlatform = 'claude-code' | 'opencode' | 'cursor' | 'codex';
4
3
  export interface SubagentDistributionResult {
5
- platform: SubagentPlatform;
4
+ platform: string;
6
5
  filePath: string;
7
6
  status: 'written' | 'skipped' | 'error';
8
7
  reason?: string;
9
8
  error?: string;
10
9
  }
11
- export type SubagentDistributionOutcome = DistributeOutcome<SubagentPlatform>;
12
- export declare function resolveSubagentFilePath(platform: SubagentPlatform, id: string, scope?: ConfigScope): string;
10
+ export type SubagentDistributionOutcome = DistributeOutcome<string>;
11
+ export declare function resolveSubagentFilePath(platform: string, id: string, scope?: ConfigScope): string;
13
12
  export declare function distributeSubagents(scope?: ConfigScope): SubagentDistributionOutcome;