agent-switchboard 0.1.26 → 0.1.27
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +11 -10
- package/dist/commands/library.d.ts +1 -1
- package/dist/commands/library.js +4 -5
- package/dist/commands/library.js.map +1 -1
- package/dist/config/paths.d.ts +6 -0
- package/dist/config/paths.js +9 -0
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schemas.d.ts +305 -21
- package/dist/config/schemas.js +10 -4
- package/dist/config/schemas.js.map +1 -1
- package/dist/index.js +118 -40
- package/dist/index.js.map +1 -1
- package/dist/library/sources.d.ts +72 -0
- package/dist/library/sources.js +279 -0
- package/dist/library/sources.js.map +1 -0
- package/dist/rules/agents.d.ts +4 -4
- package/dist/rules/agents.js +10 -4
- package/dist/rules/agents.js.map +1 -1
- package/dist/rules/distribution.js +46 -110
- package/dist/rules/distribution.js.map +1 -1
- package/dist/rules/library.d.ts +1 -1
- package/dist/rules/library.js +4 -5
- package/dist/rules/library.js.map +1 -1
- package/dist/skills/library.d.ts +1 -1
- package/dist/skills/library.js +4 -5
- package/dist/skills/library.js.map +1 -1
- package/dist/subagents/library.d.ts +1 -1
- package/dist/subagents/library.js +4 -5
- package/dist/subagents/library.js.map +1 -1
- package/package.json +1 -1
- package/dist/library/subscriptions.d.ts +0 -42
- package/dist/library/subscriptions.js +0 -116
- package/dist/library/subscriptions.js.map +0 -1
package/dist/skills/library.d.ts
CHANGED
|
@@ -25,7 +25,7 @@ export interface BundleFile {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function ensureSkillsDirectory(): string;
|
|
27
27
|
/**
|
|
28
|
-
* Load all skills from default library and
|
|
28
|
+
* Load all skills from default library and external sources.
|
|
29
29
|
* Each skill is a directory containing a SKILL.md file.
|
|
30
30
|
*/
|
|
31
31
|
export declare function loadSkillLibrary(): SkillEntry[];
|
package/dist/skills/library.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { getSkillsDir } from '../config/paths.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getSourcesRecord } from '../library/sources.js';
|
|
5
5
|
import { parseSkillMarkdown } from './parser.js';
|
|
6
6
|
const SKILL_FILE = 'SKILL.md';
|
|
7
7
|
export function ensureSkillsDirectory() {
|
|
@@ -61,7 +61,7 @@ function loadSkillsFromDirectory(directory, namespace) {
|
|
|
61
61
|
return result;
|
|
62
62
|
}
|
|
63
63
|
/**
|
|
64
|
-
* Load all skills from default library and
|
|
64
|
+
* Load all skills from default library and external sources.
|
|
65
65
|
* Each skill is a directory containing a SKILL.md file.
|
|
66
66
|
*/
|
|
67
67
|
export function loadSkillLibrary() {
|
|
@@ -69,9 +69,8 @@ export function loadSkillLibrary() {
|
|
|
69
69
|
// Load from default library (no namespace)
|
|
70
70
|
const defaultDir = ensureSkillsDirectory();
|
|
71
71
|
result.push(...loadSkillsFromDirectory(defaultDir));
|
|
72
|
-
|
|
73
|
-
const
|
|
74
|
-
for (const [namespace, basePath] of Object.entries(subscriptions)) {
|
|
72
|
+
const sources = getSourcesRecord();
|
|
73
|
+
for (const [namespace, basePath] of Object.entries(sources)) {
|
|
75
74
|
const skillsDir = path.join(basePath, 'skills');
|
|
76
75
|
result.push(...loadSkillsFromDirectory(skillsDir, namespace));
|
|
77
76
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/skills/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,
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/skills/library.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,6 +10,6 @@ export interface SubagentEntry {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function ensureSubagentsDirectory(): string;
|
|
12
12
|
/**
|
|
13
|
-
* Load all subagents from default library and
|
|
13
|
+
* Load all subagents from default library and external sources
|
|
14
14
|
*/
|
|
15
15
|
export declare function loadSubagentLibrary(): SubagentEntry[];
|
|
@@ -2,7 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { getSubagentsDir } from '../config/paths.js';
|
|
4
4
|
import { parseLibraryMarkdown } from '../library/parser.js';
|
|
5
|
-
import {
|
|
5
|
+
import { getSourcesRecord } from '../library/sources.js';
|
|
6
6
|
function isMarkdownFile(fileName) {
|
|
7
7
|
const extension = path.extname(fileName).toLowerCase();
|
|
8
8
|
return extension === '.md' || extension === '.markdown';
|
|
@@ -59,16 +59,15 @@ function loadSubagentsFromDirectory(directory, namespace) {
|
|
|
59
59
|
return result;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Load all subagents from default library and
|
|
62
|
+
* Load all subagents from default library and external sources
|
|
63
63
|
*/
|
|
64
64
|
export function loadSubagentLibrary() {
|
|
65
65
|
const result = [];
|
|
66
66
|
// Load from default library (no namespace)
|
|
67
67
|
const defaultDir = ensureSubagentsDirectory();
|
|
68
68
|
result.push(...loadSubagentsFromDirectory(defaultDir));
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
for (const [namespace, basePath] of Object.entries(subscriptions)) {
|
|
69
|
+
const sources = getSourcesRecord();
|
|
70
|
+
for (const [namespace, basePath] of Object.entries(sources)) {
|
|
72
71
|
const subagentsDir = path.join(basePath, 'subagents');
|
|
73
72
|
result.push(...loadSubagentsFromDirectory(subagentsDir, namespace));
|
|
74
73
|
}
|
|
@@ -1 +1 @@
|
|
|
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,eAAe,EAAE,MAAM,oBAAoB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAE5D,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/subagents/library.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -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
|
-
};
|
|
@@ -1,116 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Library subscription management utilities
|
|
3
|
-
* Handles adding, removing, and listing library source subscriptions
|
|
4
|
-
*/
|
|
5
|
-
import fs from 'node:fs';
|
|
6
|
-
import path from 'node:path';
|
|
7
|
-
import { updateConfigLayer } from '../config/layered-config.js';
|
|
8
|
-
import { loadSwitchboardConfig } from '../config/switchboard-config.js';
|
|
9
|
-
/**
|
|
10
|
-
* Get all library subscriptions from config
|
|
11
|
-
*/
|
|
12
|
-
export function getSubscriptions() {
|
|
13
|
-
const config = loadSwitchboardConfig();
|
|
14
|
-
const subs = config.library.subscriptions;
|
|
15
|
-
return Object.entries(subs).map(([namespace, subPath]) => ({
|
|
16
|
-
namespace,
|
|
17
|
-
path: subPath,
|
|
18
|
-
}));
|
|
19
|
-
}
|
|
20
|
-
/**
|
|
21
|
-
* Get subscriptions as a record (namespace -> path)
|
|
22
|
-
*/
|
|
23
|
-
export function getSubscriptionsRecord() {
|
|
24
|
-
const config = loadSwitchboardConfig();
|
|
25
|
-
return config.library.subscriptions;
|
|
26
|
-
}
|
|
27
|
-
/**
|
|
28
|
-
* Add a library subscription
|
|
29
|
-
* @param namespace - Unique namespace for this subscription
|
|
30
|
-
* @param libraryPath - Path to the library directory
|
|
31
|
-
* @throws Error if namespace already exists or path is invalid
|
|
32
|
-
*/
|
|
33
|
-
export function addSubscription(namespace, libraryPath) {
|
|
34
|
-
const resolvedPath = path.resolve(libraryPath);
|
|
35
|
-
// Validate path exists and is a directory
|
|
36
|
-
if (!fs.existsSync(resolvedPath)) {
|
|
37
|
-
throw new Error(`Path does not exist: ${resolvedPath}`);
|
|
38
|
-
}
|
|
39
|
-
if (!fs.statSync(resolvedPath).isDirectory()) {
|
|
40
|
-
throw new Error(`Path is not a directory: ${resolvedPath}`);
|
|
41
|
-
}
|
|
42
|
-
// Validate namespace format (alphanumeric, hyphens, underscores)
|
|
43
|
-
if (!/^[a-zA-Z0-9_-]+$/.test(namespace)) {
|
|
44
|
-
throw new Error(`Invalid namespace "${namespace}". Use only letters, numbers, hyphens, and underscores.`);
|
|
45
|
-
}
|
|
46
|
-
// Check if namespace already exists
|
|
47
|
-
const current = getSubscriptionsRecord();
|
|
48
|
-
if (namespace in current) {
|
|
49
|
-
throw new Error(`Namespace "${namespace}" already exists. Use a different name or unsubscribe first.`);
|
|
50
|
-
}
|
|
51
|
-
// Update config
|
|
52
|
-
updateConfigLayer((layer) => ({
|
|
53
|
-
...layer,
|
|
54
|
-
library: {
|
|
55
|
-
...layer.library,
|
|
56
|
-
subscriptions: {
|
|
57
|
-
...(layer.library?.subscriptions ?? {}),
|
|
58
|
-
[namespace]: resolvedPath,
|
|
59
|
-
},
|
|
60
|
-
},
|
|
61
|
-
}));
|
|
62
|
-
}
|
|
63
|
-
/**
|
|
64
|
-
* Remove a library subscription by namespace
|
|
65
|
-
* @param namespace - Namespace to remove
|
|
66
|
-
* @throws Error if namespace doesn't exist
|
|
67
|
-
*/
|
|
68
|
-
export function removeSubscription(namespace) {
|
|
69
|
-
const current = getSubscriptionsRecord();
|
|
70
|
-
if (!(namespace in current)) {
|
|
71
|
-
throw new Error(`Namespace "${namespace}" not found in subscriptions.`);
|
|
72
|
-
}
|
|
73
|
-
updateConfigLayer((layer) => {
|
|
74
|
-
const newSubs = { ...(layer.library?.subscriptions ?? {}) };
|
|
75
|
-
delete newSubs[namespace];
|
|
76
|
-
return {
|
|
77
|
-
...layer,
|
|
78
|
-
library: {
|
|
79
|
-
...layer.library,
|
|
80
|
-
subscriptions: newSubs,
|
|
81
|
-
},
|
|
82
|
-
};
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Check if a subscription namespace exists
|
|
87
|
-
*/
|
|
88
|
-
export function hasSubscription(namespace) {
|
|
89
|
-
const current = getSubscriptionsRecord();
|
|
90
|
-
return namespace in current;
|
|
91
|
-
}
|
|
92
|
-
/**
|
|
93
|
-
* Validate a subscription path has expected library structure
|
|
94
|
-
* Returns list of found library types
|
|
95
|
-
*/
|
|
96
|
-
export function validateSubscriptionPath(libraryPath) {
|
|
97
|
-
const resolvedPath = path.resolve(libraryPath);
|
|
98
|
-
const libraryTypes = ['rules', 'commands', 'subagents', 'skills'];
|
|
99
|
-
const found = [];
|
|
100
|
-
const missing = [];
|
|
101
|
-
for (const type of libraryTypes) {
|
|
102
|
-
const typePath = path.join(resolvedPath, type);
|
|
103
|
-
if (fs.existsSync(typePath) && fs.statSync(typePath).isDirectory()) {
|
|
104
|
-
found.push(type);
|
|
105
|
-
}
|
|
106
|
-
else {
|
|
107
|
-
missing.push(type);
|
|
108
|
-
}
|
|
109
|
-
}
|
|
110
|
-
return {
|
|
111
|
-
valid: found.length > 0,
|
|
112
|
-
found,
|
|
113
|
-
missing,
|
|
114
|
-
};
|
|
115
|
-
}
|
|
116
|
-
//# sourceMappingURL=subscriptions.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"subscriptions.js","sourceRoot":"","sources":["../../src/library/subscriptions.ts"],"names":[],"mappings":"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"}
|