agent-switchboard 0.1.26 → 0.1.28

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 (97) hide show
  1. package/README.md +37 -11
  2. package/dist/commands/distribution.js +2 -2
  3. package/dist/commands/distribution.js.map +1 -1
  4. package/dist/commands/library.d.ts +1 -1
  5. package/dist/commands/library.js +5 -6
  6. package/dist/commands/library.js.map +1 -1
  7. package/dist/config/application-config.d.ts +37 -0
  8. package/dist/config/application-config.js +83 -0
  9. package/dist/config/application-config.js.map +1 -0
  10. package/dist/config/layered-config.js +43 -2
  11. package/dist/config/layered-config.js.map +1 -1
  12. package/dist/config/paths.d.ts +13 -2
  13. package/dist/config/paths.js +21 -3
  14. package/dist/config/paths.js.map +1 -1
  15. package/dist/config/schemas.d.ts +408 -43
  16. package/dist/config/schemas.js +32 -22
  17. package/dist/config/schemas.js.map +1 -1
  18. package/dist/config/switchboard-config.d.ts +3 -6
  19. package/dist/config/switchboard-config.js +3 -6
  20. package/dist/config/switchboard-config.js.map +1 -1
  21. package/dist/hooks/distribution.d.ts +27 -0
  22. package/dist/hooks/distribution.js +235 -0
  23. package/dist/hooks/distribution.js.map +1 -0
  24. package/dist/hooks/library.d.ts +40 -0
  25. package/dist/hooks/library.js +143 -0
  26. package/dist/hooks/library.js.map +1 -0
  27. package/dist/hooks/schema.d.ts +542 -0
  28. package/dist/hooks/schema.js +49 -0
  29. package/dist/hooks/schema.js.map +1 -0
  30. package/dist/index.js +708 -168
  31. package/dist/index.js.map +1 -1
  32. package/dist/library/fs.d.ts +1 -3
  33. package/dist/library/fs.js +24 -7
  34. package/dist/library/fs.js.map +1 -1
  35. package/dist/library/schema.d.ts +1 -1
  36. package/dist/library/schema.js +1 -1
  37. package/dist/library/sources.d.ts +75 -0
  38. package/dist/library/sources.js +285 -0
  39. package/dist/library/sources.js.map +1 -0
  40. package/dist/library/state.d.ts +4 -5
  41. package/dist/library/state.js +15 -31
  42. package/dist/library/state.js.map +1 -1
  43. package/dist/marketplace/plugin-loader.d.ts +30 -0
  44. package/dist/marketplace/plugin-loader.js +178 -0
  45. package/dist/marketplace/plugin-loader.js.map +1 -0
  46. package/dist/marketplace/reader.d.ts +36 -0
  47. package/dist/marketplace/reader.js +90 -0
  48. package/dist/marketplace/reader.js.map +1 -0
  49. package/dist/marketplace/schemas.d.ts +467 -0
  50. package/dist/marketplace/schemas.js +57 -0
  51. package/dist/marketplace/schemas.js.map +1 -0
  52. package/dist/marketplace/source-loader.d.ts +32 -0
  53. package/dist/marketplace/source-loader.js +45 -0
  54. package/dist/marketplace/source-loader.js.map +1 -0
  55. package/dist/rules/agents.d.ts +4 -4
  56. package/dist/rules/agents.js +10 -4
  57. package/dist/rules/agents.js.map +1 -1
  58. package/dist/rules/composer.d.ts +2 -2
  59. package/dist/rules/composer.js +5 -5
  60. package/dist/rules/composer.js.map +1 -1
  61. package/dist/rules/distribution.js +48 -112
  62. package/dist/rules/distribution.js.map +1 -1
  63. package/dist/rules/library.d.ts +1 -1
  64. package/dist/rules/library.js +4 -5
  65. package/dist/rules/library.js.map +1 -1
  66. package/dist/skills/distribution.js +6 -6
  67. package/dist/skills/distribution.js.map +1 -1
  68. package/dist/skills/library.d.ts +1 -2
  69. package/dist/skills/library.js +6 -7
  70. package/dist/skills/library.js.map +1 -1
  71. package/dist/subagents/distribution.d.ts +1 -1
  72. package/dist/subagents/distribution.js +319 -20
  73. package/dist/subagents/distribution.js.map +1 -1
  74. package/dist/subagents/importer.d.ts +1 -1
  75. package/dist/subagents/importer.js +61 -1
  76. package/dist/subagents/importer.js.map +1 -1
  77. package/dist/subagents/inventory.js +3 -3
  78. package/dist/subagents/inventory.js.map +1 -1
  79. package/dist/subagents/library.d.ts +2 -2
  80. package/dist/subagents/library.js +14 -20
  81. package/dist/subagents/library.js.map +1 -1
  82. package/dist/ui/hook-ui.d.ts +8 -0
  83. package/dist/ui/hook-ui.js +17 -0
  84. package/dist/ui/hook-ui.js.map +1 -0
  85. package/dist/ui/library-selector.d.ts +1 -1
  86. package/dist/ui/subagent-ui.js +3 -3
  87. package/dist/ui/subagent-ui.js.map +1 -1
  88. package/dist/util/cli.d.ts +20 -0
  89. package/dist/util/cli.js +107 -14
  90. package/dist/util/cli.js.map +1 -1
  91. package/package.json +3 -2
  92. package/dist/config/agent-config.d.ts +0 -35
  93. package/dist/config/agent-config.js +0 -88
  94. package/dist/config/agent-config.js.map +0 -1
  95. package/dist/library/subscriptions.d.ts +0 -42
  96. package/dist/library/subscriptions.js +0 -116
  97. package/dist/library/subscriptions.js.map +0 -1
@@ -8,8 +8,8 @@ export interface SubagentEntry {
8
8
  metadata: LibraryFrontmatter;
9
9
  content: string;
10
10
  }
11
- export declare function ensureSubagentsDirectory(): string;
11
+ export declare function ensureAgentsDirectory(): string;
12
12
  /**
13
- * Load all subagents from default library and subscribed libraries
13
+ * Load all agents from default library, flat sources, and marketplace sources.
14
14
  */
15
15
  export declare function loadSubagentLibrary(): SubagentEntry[];
@@ -1,8 +1,8 @@
1
1
  import fs from 'node:fs';
2
2
  import path from 'node:path';
3
- import { getSubagentsDir } from '../config/paths.js';
3
+ import { getAgentsDir } from '../config/paths.js';
4
4
  import { parseLibraryMarkdown } from '../library/parser.js';
5
- import { getSubscriptionsRecord } from '../library/subscriptions.js';
5
+ import { loadEntriesFromSources } from '../marketplace/source-loader.js';
6
6
  function isMarkdownFile(fileName) {
7
7
  const extension = path.extname(fileName).toLowerCase();
8
8
  return extension === '.md' || extension === '.markdown';
@@ -10,19 +10,14 @@ function isMarkdownFile(fileName) {
10
10
  function toId(fileName) {
11
11
  return path.basename(fileName, path.extname(fileName));
12
12
  }
13
- export function ensureSubagentsDirectory() {
14
- const directory = getSubagentsDir();
13
+ export function ensureAgentsDirectory() {
14
+ const directory = getAgentsDir();
15
15
  if (!fs.existsSync(directory)) {
16
16
  fs.mkdirSync(directory, { recursive: true });
17
17
  }
18
18
  return directory;
19
19
  }
20
- /**
21
- * Load subagents from a specific directory
22
- * @param directory - Directory to load subagents from
23
- * @param namespace - Optional namespace prefix for IDs
24
- */
25
- function loadSubagentsFromDirectory(directory, namespace) {
20
+ function loadAgentsFromDirectory(directory, namespace) {
26
21
  if (!fs.existsSync(directory)) {
27
22
  return [];
28
23
  }
@@ -51,7 +46,7 @@ function loadSubagentsFromDirectory(directory, namespace) {
51
46
  }
52
47
  catch (error) {
53
48
  if (error instanceof Error) {
54
- throw new Error(`Failed to parse subagent file "${entry.name}": ${error.message}`);
49
+ throw new Error(`Failed to parse agent file "${entry.name}": ${error.message}`);
55
50
  }
56
51
  throw error;
57
52
  }
@@ -59,19 +54,18 @@ function loadSubagentsFromDirectory(directory, namespace) {
59
54
  return result;
60
55
  }
61
56
  /**
62
- * Load all subagents from default library and subscribed libraries
57
+ * Load all agents from default library, flat sources, and marketplace sources.
63
58
  */
64
59
  export function loadSubagentLibrary() {
65
60
  const result = [];
66
- // Load from default library (no namespace)
67
- const defaultDir = ensureSubagentsDirectory();
68
- result.push(...loadSubagentsFromDirectory(defaultDir));
69
- // Load from subscribed libraries (with namespace prefix)
70
- const subscriptions = getSubscriptionsRecord();
71
- for (const [namespace, basePath] of Object.entries(subscriptions)) {
72
- const subagentsDir = path.join(basePath, 'subagents');
73
- result.push(...loadSubagentsFromDirectory(subagentsDir, namespace));
61
+ const defaultDir = ensureAgentsDirectory();
62
+ result.push(...loadAgentsFromDirectory(defaultDir));
63
+ const { flatSources, marketplaceEntries } = loadEntriesFromSources();
64
+ for (const { namespace, basePath } of flatSources) {
65
+ const agentsDir = path.join(basePath, 'agents');
66
+ result.push(...loadAgentsFromDirectory(agentsDir, namespace));
74
67
  }
68
+ result.push(...marketplaceEntries.agents);
75
69
  result.sort((a, b) => a.id.localeCompare(b.id));
76
70
  return result;
77
71
  }
@@ -1 +1 @@
1
- {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/subagents/library.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/subagents/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,sBAAsB,EAAE,MAAM,iCAAiC,CAAC;AAYzE,SAAS,cAAc,CAAC,QAAgB;IACtC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC;IACvD,OAAO,SAAS,KAAK,KAAK,IAAI,SAAS,KAAK,WAAW,CAAC;AAC1D,CAAC;AAED,SAAS,IAAI,CAAC,QAAgB;IAC5B,OAAO,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,CAAC;AAED,MAAM,UAAU,qBAAqB;IACnC,MAAM,SAAS,GAAG,YAAY,EAAE,CAAC;IACjC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,uBAAuB,CAAC,SAAiB,EAAE,SAAkB;IACpE,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,OAAO,EAAE,CAAC;IACZ,CAAC;IAED,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,SAAS,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IACnE,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,IAAI,CAAC,KAAK,CAAC,MAAM,EAAE;YAAE,SAAS;QAC9B,IAAI,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,SAAS;QAE1C,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QACtD,MAAM,UAAU,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QAE1D,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,oBAAoB,CAAC,UAAU,CAAC,CAAC;YAChD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAChC,MAAM,EAAE,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,SAAS,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC;YAEzD,MAAM,CAAC,IAAI,CAAC;gBACV,EAAE;gBACF,MAAM;gBACN,SAAS;gBACT,MAAM,EAAE,SAAS;gBACjB,QAAQ,EAAE,YAAY;gBACtB,QAAQ,EAAE,MAAM,CAAC,QAAQ;gBACzB,OAAO,EAAE,MAAM,CAAC,OAAO;aACxB,CAAC,CAAC;QACL,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC3B,MAAM,IAAI,KAAK,CAAC,+BAA+B,KAAK,CAAC,IAAI,MAAM,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;YAClF,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,MAAM,MAAM,GAAoB,EAAE,CAAC;IAEnC,MAAM,UAAU,GAAG,qBAAqB,EAAE,CAAC;IAC3C,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,UAAU,CAAC,CAAC,CAAC;IAEpD,MAAM,EAAE,WAAW,EAAE,kBAAkB,EAAE,GAAG,sBAAsB,EAAE,CAAC;IAErE,KAAK,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,IAAI,WAAW,EAAE,CAAC;QAClD,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChD,MAAM,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAChE,CAAC;IAED,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,MAAM,CAAC,CAAC;IAE1C,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,aAAa,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAChD,OAAO,MAAM,CAAC;AAChB,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { ConfigScope } from '../config/scope.js';
2
+ import { type GenericSelectionResult } from './library-selector.js';
3
+ export type HookSelectionResult = GenericSelectionResult;
4
+ export interface HookSelectorOptions {
5
+ scope?: ConfigScope;
6
+ pageSize?: number;
7
+ }
8
+ export declare function showHookSelector(options?: HookSelectorOptions): Promise<HookSelectionResult | null>;
@@ -0,0 +1,17 @@
1
+ import { loadHookLibrary } from '../hooks/library.js';
2
+ import { showLibrarySelector } from './library-selector.js';
3
+ export async function showHookSelector(options) {
4
+ return showLibrarySelector({
5
+ section: 'hooks',
6
+ noun: 'hook',
7
+ emptyHint: 'asb hook load <path>',
8
+ allowOrdering: false,
9
+ loadEntries: () => loadHookLibrary(),
10
+ getId: (e) => e.id,
11
+ getTitle: (e) => e.name ?? e.id,
12
+ getDescription: (e) => e.description,
13
+ scope: options?.scope,
14
+ pageSize: options?.pageSize,
15
+ });
16
+ }
17
+ //# sourceMappingURL=hook-ui.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hook-ui.js","sourceRoot":"","sources":["../../src/ui/hook-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAkB,eAAe,EAAE,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAA+B,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AASzF,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,OAA6B;IAE7B,OAAO,mBAAmB,CAAY;QACpC,OAAO,EAAE,OAAO;QAChB,IAAI,EAAE,MAAM;QACZ,SAAS,EAAE,sBAAsB;QACjC,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,eAAe,EAAE;QACpC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,EAAE;QAC/B,cAAc,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW;QACpC,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACL,CAAC"}
@@ -3,7 +3,7 @@ export interface GenericSelectionResult {
3
3
  active: string[];
4
4
  }
5
5
  export interface LibrarySelectorOptions<TEntry> {
6
- section: 'commands' | 'subagents' | 'skills';
6
+ section: 'commands' | 'agents' | 'skills' | 'hooks';
7
7
  emptyHint: string;
8
8
  loadEntries: () => TEntry[];
9
9
  getId: (e: TEntry) => string;
@@ -2,9 +2,9 @@ import { loadSubagentLibrary } from '../subagents/library.js';
2
2
  import { showLibrarySelector } from './library-selector.js';
3
3
  export async function showSubagentSelector(options) {
4
4
  return showLibrarySelector({
5
- section: 'subagents',
6
- noun: 'subagent',
7
- emptyHint: 'asb subagent load <platform> [path] [-r]',
5
+ section: 'agents',
6
+ noun: 'agent',
7
+ emptyHint: 'asb agent load <platform> [path] [-r]',
8
8
  allowOrdering: false,
9
9
  loadEntries: () => loadSubagentLibrary(),
10
10
  getId: (e) => e.id,
@@ -1 +1 @@
1
- {"version":3,"file":"subagent-ui.js","sourceRoot":"","sources":["../../src/ui/subagent-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAA+B,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AASzF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAiC;IAEjC,OAAO,mBAAmB,CAAgB;QACxC,OAAO,EAAE,WAAW;QACpB,IAAI,EAAE,UAAU;QAChB,SAAS,EAAE,0CAA0C;QACrD,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;QACxC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,GAAI,CAAC,CAAC,QAAoC,CAAC,KAAgB,CAAC;YACnE,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAA6C,CAAC;YACxE,MAAM,EAAE,GAAI,MAAM,EAAE,CAAC,aAAa,CAA6B,IAAI,SAAS,CAAC;YAC7E,MAAM,EAAE,GAAI,MAAM,EAAE,QAAoC,IAAI,SAAS,CAAC;YACtE,MAAM,EAAE,GAAI,MAAM,EAAE,MAAkC,IAAI,SAAS,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBACnD,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;oBAC9C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;wBAC9C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,SAAS,CAAC;QACpB,CAAC;QACD,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"subagent-ui.js","sourceRoot":"","sources":["../../src/ui/subagent-ui.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAsB,MAAM,yBAAyB,CAAC;AAClF,OAAO,EAA+B,mBAAmB,EAAE,MAAM,uBAAuB,CAAC;AASzF,MAAM,CAAC,KAAK,UAAU,oBAAoB,CACxC,OAAiC;IAEjC,OAAO,mBAAmB,CAAgB;QACxC,OAAO,EAAE,QAAQ;QACjB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,uCAAuC;QAClD,aAAa,EAAE,KAAK;QACpB,WAAW,EAAE,GAAG,EAAE,CAAC,mBAAmB,EAAE;QACxC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE;QAClB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,GAAI,CAAC,CAAC,QAAoC,CAAC,KAAgB,CAAC;YACnE,OAAO,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QACjE,CAAC;QACD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,MAAM,GAAG,CAAC,CAAC,QAAQ,CAAC,MAA6C,CAAC;YACxE,MAAM,EAAE,GAAI,MAAM,EAAE,CAAC,aAAa,CAA6B,IAAI,SAAS,CAAC;YAC7E,MAAM,EAAE,GAAI,MAAM,EAAE,QAAoC,IAAI,SAAS,CAAC;YACtE,MAAM,EAAE,GAAI,MAAM,EAAE,MAAkC,IAAI,SAAS,CAAC;YACpE,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,MAAM,EAAE,GAAG,EAAE,EAAE,KAAsC,CAAC;YACtD,OAAO,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBACnD,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;oBAC9C,CAAC,CAAC,EAAE;oBACJ,CAAC,CAAC,OAAO,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;wBAC9C,CAAC,CAAC,EAAE;wBACJ,CAAC,CAAC,SAAS,CAAC;QACpB,CAAC;QACD,KAAK,EAAE,OAAO,EAAE,KAAK;QACrB,QAAQ,EAAE,OAAO,EAAE,QAAQ;KAC5B,CAAC,CAAC;AACL,CAAC"}
@@ -1,3 +1,4 @@
1
+ export declare function shortenPath(p: string): string;
1
2
  export type Cell = {
2
3
  plain: string;
3
4
  formatted: string;
@@ -9,6 +10,15 @@ export interface DistributionResultLike {
9
10
  reason?: string;
10
11
  error?: string;
11
12
  }
13
+ export interface DistributionCounts {
14
+ written: number;
15
+ skipped: number;
16
+ deleted: number;
17
+ errors: number;
18
+ skippedByTarget: Map<string, number>;
19
+ }
20
+ export declare function countDistributionResults<T extends DistributionResultLike>(results: T[], getTargetLabel: (result: T) => string): DistributionCounts;
21
+ export declare function formatDistributionSummary(counts: DistributionCounts): string;
12
22
  export declare function printDistributionResults<T extends DistributionResultLike>({ title, results, getTargetLabel, getPath, emptyMessage, }: {
13
23
  title: string;
14
24
  results: T[];
@@ -16,6 +26,16 @@ export declare function printDistributionResults<T extends DistributionResultLik
16
26
  getPath: (result: T) => string;
17
27
  emptyMessage?: string;
18
28
  }): void;
29
+ export interface CompactDistributionSection<T extends DistributionResultLike> {
30
+ label: string;
31
+ results: T[];
32
+ getTargetLabel: (result: T) => string;
33
+ getPath: (result: T) => string;
34
+ emptyMessage?: string;
35
+ }
36
+ export declare function printCompactDistributions(sections: CompactDistributionSection<DistributionResultLike>[]): {
37
+ hasErrors: boolean;
38
+ };
19
39
  export declare function printActiveSelection(label: string, ids: string[]): void;
20
40
  export declare function formatSyncTimestamp(value: string | undefined): string;
21
41
  export declare function printAgentSyncStatus(options: {
package/dist/util/cli.js CHANGED
@@ -1,4 +1,12 @@
1
+ import os from 'node:os';
1
2
  import chalk from 'chalk';
3
+ const HOME = os.homedir();
4
+ export function shortenPath(p) {
5
+ if (p.startsWith(HOME)) {
6
+ return `~${p.slice(HOME.length)}`;
7
+ }
8
+ return p;
9
+ }
2
10
  export function printTable(header, rows) {
3
11
  const widths = header.map((col, i) => Math.max(col.length, ...rows.map((r) => r[i].plain.length)));
4
12
  const formatRow = (cells) => cells
@@ -9,6 +17,55 @@ export function printTable(header, rows) {
9
17
  console.log(formatRow(r));
10
18
  });
11
19
  }
20
+ export function countDistributionResults(results, getTargetLabel) {
21
+ let written = 0;
22
+ let skipped = 0;
23
+ let deleted = 0;
24
+ let errors = 0;
25
+ const skippedByTarget = new Map();
26
+ for (const result of results) {
27
+ const target = getTargetLabel(result);
28
+ switch (result.status) {
29
+ case 'written':
30
+ written++;
31
+ break;
32
+ case 'skipped':
33
+ skipped++;
34
+ skippedByTarget.set(target, (skippedByTarget.get(target) ?? 0) + 1);
35
+ break;
36
+ case 'deleted':
37
+ deleted++;
38
+ break;
39
+ case 'error':
40
+ errors++;
41
+ break;
42
+ }
43
+ }
44
+ return { written, skipped, deleted, errors, skippedByTarget };
45
+ }
46
+ export function formatDistributionSummary(counts) {
47
+ const { written, skipped, deleted, errors, skippedByTarget } = counts;
48
+ const parts = [];
49
+ if (written > 0)
50
+ parts.push(`${chalk.green(String(written))} written`);
51
+ if (deleted > 0)
52
+ parts.push(`${chalk.yellow(String(deleted))} deleted`);
53
+ if (errors > 0)
54
+ parts.push(`${chalk.red(String(errors))} error`);
55
+ if (skipped > 0) {
56
+ const entries = [...skippedByTarget.entries()].sort(([a], [b]) => a.localeCompare(b));
57
+ const uniqueCounts = new Set(skippedByTarget.values());
58
+ const showBreakdown = entries.length > 0 && uniqueCounts.size > 1;
59
+ if (showBreakdown) {
60
+ const breakdown = entries.map(([target, count]) => `${target}:${count}`).join(', ');
61
+ parts.push(`${chalk.gray(String(skipped))} up-to-date${chalk.gray(` (${breakdown})`)}`);
62
+ }
63
+ else {
64
+ parts.push(`${chalk.gray(String(skipped))} up-to-date`);
65
+ }
66
+ }
67
+ return parts.join(chalk.gray(', '));
68
+ }
12
69
  export function printDistributionResults({ title, results, getTargetLabel, getPath, emptyMessage, }) {
13
70
  console.log(chalk.blue(`${title}:`));
14
71
  if (results.length === 0) {
@@ -17,26 +74,62 @@ export function printDistributionResults({ title, results, getTargetLabel, getPa
17
74
  }
18
75
  return;
19
76
  }
77
+ const counts = countDistributionResults(results, getTargetLabel);
20
78
  for (const result of results) {
21
- const pathLabel = chalk.dim(getPath(result));
22
- const targetLabel = chalk.cyan(getTargetLabel(result));
23
- if (result.status === 'written') {
24
- const reason = result.reason ? chalk.gray(` (${result.reason})`) : '';
25
- console.log(` ${chalk.green('✓')} ${targetLabel} ${pathLabel}${reason}`);
26
- }
27
- else if (result.status === 'skipped') {
28
- const reason = result.reason ? chalk.gray(` (${result.reason})`) : chalk.gray(' (unchanged)');
29
- console.log(` ${chalk.gray('•')} ${targetLabel} ${pathLabel}${reason}`);
79
+ if (result.status === 'skipped')
80
+ continue;
81
+ printResultLine(result, getTargetLabel, getPath, 2);
82
+ }
83
+ const summary = formatDistributionSummary(counts);
84
+ if (summary) {
85
+ console.log(` ${chalk.gray('Summary:')} ${summary}`);
86
+ }
87
+ }
88
+ function printResultLine(result, getTargetLabel, getPath, indent) {
89
+ const pad = ' '.repeat(indent);
90
+ const pathLabel = chalk.dim(shortenPath(getPath(result)));
91
+ const targetLabel = chalk.cyan(getTargetLabel(result));
92
+ if (result.status === 'written') {
93
+ const reason = result.reason ? chalk.gray(` (${result.reason})`) : '';
94
+ console.log(`${pad}${chalk.green('✓')} ${targetLabel} ${pathLabel}${reason}`);
95
+ }
96
+ else if (result.status === 'deleted') {
97
+ const reason = result.reason ? chalk.gray(` (${result.reason})`) : '';
98
+ console.log(`${pad}${chalk.yellow('−')} ${targetLabel} ${pathLabel}${reason}`);
99
+ }
100
+ else if (result.status === 'error') {
101
+ const errorLabel = result.error ? ` ${chalk.red(result.error)}` : '';
102
+ console.log(`${pad}${chalk.red('✗')} ${targetLabel} ${pathLabel}${errorLabel}`);
103
+ }
104
+ }
105
+ export function printCompactDistributions(sections) {
106
+ console.log(chalk.blue('Distribution:'));
107
+ const maxLabelLen = Math.max(...sections.map((s) => s.label.length));
108
+ let hasErrors = false;
109
+ for (const section of sections) {
110
+ const label = section.label.padEnd(maxLabelLen);
111
+ if (section.results.length === 0) {
112
+ console.log(` ${chalk.gray(`${label}:`)} ${chalk.gray(section.emptyMessage || 'none')}`);
113
+ continue;
30
114
  }
31
- else if (result.status === 'deleted') {
32
- const reason = result.reason ? chalk.gray(` (${result.reason})`) : '';
33
- console.log(` ${chalk.gray('•')} ${targetLabel} ${pathLabel}${reason}`);
115
+ const counts = countDistributionResults(section.results, section.getTargetLabel);
116
+ if (counts.errors > 0)
117
+ hasErrors = true;
118
+ const summary = formatDistributionSummary(counts);
119
+ const hasChanges = counts.written > 0 || counts.deleted > 0 || counts.errors > 0;
120
+ if (!hasChanges) {
121
+ console.log(` ${chalk.gray(`${label}:`)} ${summary}`);
34
122
  }
35
123
  else {
36
- const errorLabel = result.error ? ` ${chalk.red(result.error)}` : '';
37
- console.log(` ${chalk.red('✗')} ${targetLabel} ${pathLabel}${errorLabel}`);
124
+ console.log(` ${label}: ${summary}`);
125
+ for (const result of section.results) {
126
+ if (result.status === 'skipped')
127
+ continue;
128
+ printResultLine(result, section.getTargetLabel, section.getPath, 4);
129
+ }
38
130
  }
39
131
  }
132
+ return { hasErrors };
40
133
  }
41
134
  export function printActiveSelection(label, ids) {
42
135
  console.log(chalk.green(`✓ Updated active ${label}:`));
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/util/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/util/cli.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-switchboard",
3
- "version": "0.1.26",
3
+ "version": "0.1.28",
4
4
  "description": "Unified MCP server manager for AI coding agents",
5
5
  "type": "module",
6
6
  "bin": {
@@ -16,7 +16,8 @@
16
16
  "format": "biome format --write .",
17
17
  "test": "tsx --test tests/*.test.ts",
18
18
  "prepublishOnly": "pnpm run build",
19
- "git:hooks": "git config core.hooksPath .githooks || true"
19
+ "postinstall": "git config core.hooksPath .githooks || true",
20
+ "release": "scripts/release.sh"
20
21
  },
21
22
  "keywords": [
22
23
  "mcp",
@@ -1,35 +0,0 @@
1
- /**
2
- * Agent-specific configuration resolution
3
- * Supports per-agent overrides using add/remove incremental syntax
4
- */
5
- import type { IncrementalSelection, SwitchboardConfig } from './schemas.js';
6
- import type { ConfigScope } from './scope.js';
7
- export type ConfigSection = 'mcp' | 'commands' | 'subagents' | 'skills' | 'rules';
8
- export interface ResolvedSectionConfig {
9
- active: string[];
10
- }
11
- /**
12
- * Merge incremental selection with base active list
13
- *
14
- * Priority: active > add/remove
15
- * Formula: (base - remove) ∪ add
16
- */
17
- export declare function mergeIncrementalSelection(base: string[], override?: IncrementalSelection): string[];
18
- /**
19
- * Get per-agent override configuration for a specific section
20
- */
21
- export declare function getAgentOverride(config: SwitchboardConfig, agentId: string, section: ConfigSection): IncrementalSelection | undefined;
22
- /**
23
- * Resolve effective configuration for a specific agent and section
24
- *
25
- * Applies per-agent overrides to the global section config
26
- */
27
- export declare function resolveAgentSectionConfig(section: ConfigSection, agentId: string, scope?: ConfigScope): ResolvedSectionConfig;
28
- /**
29
- * Check if an agent has any overrides configured
30
- */
31
- export declare function hasAgentOverrides(config: SwitchboardConfig, agentId: string): boolean;
32
- /**
33
- * Get list of agents that have overrides configured
34
- */
35
- export declare function getAgentsWithOverrides(config: SwitchboardConfig): string[];
@@ -1,88 +0,0 @@
1
- /**
2
- * Agent-specific configuration resolution
3
- * Supports per-agent overrides using add/remove incremental syntax
4
- */
5
- import { loadMergedSwitchboardConfig } from './layered-config.js';
6
- import { scopeToLayerOptions } from './scope.js';
7
- /**
8
- * Merge incremental selection with base active list
9
- *
10
- * Priority: active > add/remove
11
- * Formula: (base - remove) ∪ add
12
- */
13
- export function mergeIncrementalSelection(base, override) {
14
- if (!override)
15
- return base;
16
- // If active is specified, use it as complete override
17
- if (override.active && override.active.length > 0) {
18
- return override.active;
19
- }
20
- let result = [...base];
21
- // Apply remove first
22
- if (override.remove && override.remove.length > 0) {
23
- const removeSet = new Set(override.remove);
24
- result = result.filter((id) => !removeSet.has(id));
25
- }
26
- // Then apply add
27
- if (override.add && override.add.length > 0) {
28
- const existing = new Set(result);
29
- for (const id of override.add) {
30
- if (!existing.has(id)) {
31
- result.push(id);
32
- }
33
- }
34
- }
35
- return result;
36
- }
37
- /**
38
- * Get per-agent override configuration for a specific section
39
- */
40
- export function getAgentOverride(config, agentId, section) {
41
- // agents object may contain per-agent overrides as additional keys (via passthrough)
42
- const agents = config.agents;
43
- const agentOverrides = agents[agentId];
44
- if (!agentOverrides || typeof agentOverrides !== 'object') {
45
- return undefined;
46
- }
47
- const overrideObj = agentOverrides;
48
- return overrideObj[section];
49
- }
50
- /**
51
- * Resolve effective configuration for a specific agent and section
52
- *
53
- * Applies per-agent overrides to the global section config
54
- */
55
- export function resolveAgentSectionConfig(section, agentId, scope) {
56
- const layerOptions = scopeToLayerOptions(scope);
57
- const { config } = loadMergedSwitchboardConfig(layerOptions);
58
- // Get global active list for the section
59
- const globalActive = [...config[section].active];
60
- // Get agent-specific override
61
- const override = getAgentOverride(config, agentId, section);
62
- // Merge and return
63
- return {
64
- active: mergeIncrementalSelection(globalActive, override),
65
- };
66
- }
67
- /**
68
- * Check if an agent has any overrides configured
69
- */
70
- export function hasAgentOverrides(config, agentId) {
71
- const agents = config.agents;
72
- const agentOverrides = agents[agentId];
73
- return agentOverrides !== undefined && typeof agentOverrides === 'object';
74
- }
75
- /**
76
- * Get list of agents that have overrides configured
77
- */
78
- export function getAgentsWithOverrides(config) {
79
- const agents = config.agents;
80
- const result = [];
81
- for (const key of Object.keys(agents)) {
82
- if (key !== 'active' && typeof agents[key] === 'object') {
83
- result.push(key);
84
- }
85
- }
86
- return result;
87
- }
88
- //# sourceMappingURL=agent-config.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"agent-config.js","sourceRoot":"","sources":["../../src/config/agent-config.ts"],"names":[],"mappings":"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"}
@@ -1,42 +0,0 @@
1
- /**
2
- * Library subscription management utilities
3
- * Handles adding, removing, and listing library source subscriptions
4
- */
5
- export interface Subscription {
6
- namespace: string;
7
- path: string;
8
- }
9
- /**
10
- * Get all library subscriptions from config
11
- */
12
- export declare function getSubscriptions(): Subscription[];
13
- /**
14
- * Get subscriptions as a record (namespace -> path)
15
- */
16
- export declare function getSubscriptionsRecord(): Record<string, string>;
17
- /**
18
- * Add a library subscription
19
- * @param namespace - Unique namespace for this subscription
20
- * @param libraryPath - Path to the library directory
21
- * @throws Error if namespace already exists or path is invalid
22
- */
23
- export declare function addSubscription(namespace: string, libraryPath: string): void;
24
- /**
25
- * Remove a library subscription by namespace
26
- * @param namespace - Namespace to remove
27
- * @throws Error if namespace doesn't exist
28
- */
29
- export declare function removeSubscription(namespace: string): void;
30
- /**
31
- * Check if a subscription namespace exists
32
- */
33
- export declare function hasSubscription(namespace: string): boolean;
34
- /**
35
- * Validate a subscription path has expected library structure
36
- * Returns list of found library types
37
- */
38
- export declare function validateSubscriptionPath(libraryPath: string): {
39
- valid: boolean;
40
- found: string[];
41
- missing: string[];
42
- };