agent-switchboard 0.1.25 → 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 +169 -229
- 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 +198 -103
- 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 +6 -2
- package/dist/rules/agents.js +11 -2
- package/dist/rules/agents.js.map +1 -1
- package/dist/rules/distribution.d.ts +2 -1
- package/dist/rules/distribution.js +55 -4
- 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
|
@@ -1,8 +1,9 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
|
-
import { getAgentsHome, getClaudeDir, getCodexDir, getGeminiDir, getOpencodePath, } from '../config/paths.js';
|
|
4
|
-
import { RULE_INDIRECT_AGENTS, RULE_SUPPORTED_AGENTS, RULE_UNSUPPORTED_AGENTS } from './agents.js';
|
|
3
|
+
import { getAgentsHome, getClaudeDir, getCodexDir, getCursorDir, getGeminiDir, getOpencodePath, getProjectCursorDir, } from '../config/paths.js';
|
|
4
|
+
import { RULE_INDIRECT_AGENTS, RULE_PER_FILE_AGENTS, RULE_SUPPORTED_AGENTS, RULE_UNSUPPORTED_AGENTS, } from './agents.js';
|
|
5
5
|
import { composeActiveRulesForAgent } from './composer.js';
|
|
6
|
+
import { loadRuleLibrary } from './library.js';
|
|
6
7
|
import { updateRuleState } from './state.js';
|
|
7
8
|
function resolveRuleFile(agent, scope) {
|
|
8
9
|
const home = getAgentsHome();
|
|
@@ -26,6 +27,11 @@ function resolveRuleFile(agent, scope) {
|
|
|
26
27
|
return path.join(path.resolve(projectRoot), 'AGENTS.md');
|
|
27
28
|
}
|
|
28
29
|
return path.join(getGeminiDir(), 'AGENTS.md');
|
|
30
|
+
case 'cursor':
|
|
31
|
+
if (projectRoot && projectRoot.length > 0) {
|
|
32
|
+
return path.join(getProjectCursorDir(projectRoot), 'rules', 'asb-rules.mdc');
|
|
33
|
+
}
|
|
34
|
+
return path.join(getCursorDir(), 'rules', 'asb-rules.mdc');
|
|
29
35
|
case 'opencode':
|
|
30
36
|
// OpenCode supports project-level AGENTS.md at repository root; otherwise use global.
|
|
31
37
|
if (projectRoot && projectRoot.length > 0) {
|
|
@@ -42,6 +48,41 @@ function ensureDirectory(filePath) {
|
|
|
42
48
|
fs.mkdirSync(dir, { recursive: true });
|
|
43
49
|
}
|
|
44
50
|
}
|
|
51
|
+
function wrapMdcFrontmatter(body) {
|
|
52
|
+
const lines = ['---', 'description: Agent Switchboard Rules', 'alwaysApply: true', '---', ''];
|
|
53
|
+
if (body.length > 0) {
|
|
54
|
+
lines.push(body);
|
|
55
|
+
}
|
|
56
|
+
return lines.join('\n');
|
|
57
|
+
}
|
|
58
|
+
const CURSOR_SINGLE_FILE = 'asb-rules.mdc';
|
|
59
|
+
/**
|
|
60
|
+
* Remove legacy per-rule .mdc files left by the old Cursor distribution scheme.
|
|
61
|
+
* Only deletes files whose basename (minus .mdc) matches a known rule library ID,
|
|
62
|
+
* leaving user-created .mdc files and the new single-file untouched.
|
|
63
|
+
*/
|
|
64
|
+
function cleanupLegacyCursorMdcFiles(scope) {
|
|
65
|
+
const projectRoot = scope?.project?.trim();
|
|
66
|
+
const targetDir = projectRoot && projectRoot.length > 0
|
|
67
|
+
? path.join(getProjectCursorDir(projectRoot), 'rules')
|
|
68
|
+
: path.join(getCursorDir(), 'rules');
|
|
69
|
+
if (!fs.existsSync(targetDir))
|
|
70
|
+
return;
|
|
71
|
+
const libraryIds = new Set(loadRuleLibrary().map((r) => r.id));
|
|
72
|
+
for (const file of fs.readdirSync(targetDir)) {
|
|
73
|
+
if (!file.endsWith('.mdc') || file === CURSOR_SINGLE_FILE)
|
|
74
|
+
continue;
|
|
75
|
+
const fileId = file.slice(0, -4);
|
|
76
|
+
if (libraryIds.has(fileId)) {
|
|
77
|
+
try {
|
|
78
|
+
fs.unlinkSync(path.join(targetDir, file));
|
|
79
|
+
}
|
|
80
|
+
catch {
|
|
81
|
+
// best-effort
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
}
|
|
45
86
|
export function distributeRules(_composed, options, scope) {
|
|
46
87
|
const results = [];
|
|
47
88
|
const timestamp = new Date().toISOString();
|
|
@@ -56,6 +97,7 @@ export function distributeRules(_composed, options, scope) {
|
|
|
56
97
|
firstComposed = document;
|
|
57
98
|
}
|
|
58
99
|
const filePath = resolveRuleFile(agent, scope);
|
|
100
|
+
const finalContent = agent === 'cursor' ? wrapMdcFrontmatter(document.content) : document.content;
|
|
59
101
|
let existingContent = null;
|
|
60
102
|
try {
|
|
61
103
|
if (fs.existsSync(filePath)) {
|
|
@@ -66,7 +108,7 @@ export function distributeRules(_composed, options, scope) {
|
|
|
66
108
|
existingContent = null;
|
|
67
109
|
}
|
|
68
110
|
const hadExistingFile = existingContent !== null;
|
|
69
|
-
const contentMatches = existingContent !== null && existingContent ===
|
|
111
|
+
const contentMatches = existingContent !== null && existingContent === finalContent;
|
|
70
112
|
if (!forceRewrite && contentMatches) {
|
|
71
113
|
results.push({
|
|
72
114
|
agent,
|
|
@@ -80,7 +122,7 @@ export function distributeRules(_composed, options, scope) {
|
|
|
80
122
|
const reason = hadExistingFile ? (contentMatches ? 'refreshed' : 'updated') : 'created';
|
|
81
123
|
try {
|
|
82
124
|
ensureDirectory(filePath);
|
|
83
|
-
fs.writeFileSync(filePath,
|
|
125
|
+
fs.writeFileSync(filePath, finalContent, 'utf-8');
|
|
84
126
|
agentSyncUpdates.set(agent, { hash: document.hash, updatedAt: timestamp });
|
|
85
127
|
results.push({ agent, filePath, status: 'written', reason });
|
|
86
128
|
}
|
|
@@ -89,6 +131,9 @@ export function distributeRules(_composed, options, scope) {
|
|
|
89
131
|
results.push({ agent, filePath, status: 'error', error: message });
|
|
90
132
|
}
|
|
91
133
|
}
|
|
134
|
+
// Clean up legacy per-rule .mdc files from the old Cursor distribution scheme.
|
|
135
|
+
// The new approach writes a single asb-rules.mdc; old <ruleId>.mdc files are orphans.
|
|
136
|
+
cleanupLegacyCursorMdcFiles(scope);
|
|
92
137
|
if (agentSyncUpdates.size > 0) {
|
|
93
138
|
updateRuleState((current) => {
|
|
94
139
|
const agentSync = { ...current.agentSync };
|
|
@@ -106,12 +151,18 @@ export function distributeRules(_composed, options, scope) {
|
|
|
106
151
|
results,
|
|
107
152
|
};
|
|
108
153
|
}
|
|
154
|
+
// ---------------------------------------------------------------------------
|
|
155
|
+
// Public helpers
|
|
156
|
+
// ---------------------------------------------------------------------------
|
|
109
157
|
export function listUnsupportedAgents() {
|
|
110
158
|
return [...RULE_UNSUPPORTED_AGENTS];
|
|
111
159
|
}
|
|
112
160
|
export function listIndirectAgents() {
|
|
113
161
|
return [...RULE_INDIRECT_AGENTS];
|
|
114
162
|
}
|
|
163
|
+
export function listPerFileAgents() {
|
|
164
|
+
return [...RULE_PER_FILE_AGENTS];
|
|
165
|
+
}
|
|
115
166
|
export function resolveRuleFilePath(agent, scope) {
|
|
116
167
|
return resolveRuleFile(agent, scope);
|
|
117
168
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/rules/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,aAAa,EACb,YAAY,EACZ,WAAW,EACX,YAAY,EACZ,eAAe,
|
|
1
|
+
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/rules/distribution.ts"],"names":[],"mappings":"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"}
|
package/dist/rules/library.d.ts
CHANGED
|
@@ -10,6 +10,6 @@ export interface RuleSnippet {
|
|
|
10
10
|
}
|
|
11
11
|
export declare function ensureRulesDirectory(): string;
|
|
12
12
|
/**
|
|
13
|
-
* Load all rules from default library and
|
|
13
|
+
* Load all rules from default library and external sources
|
|
14
14
|
*/
|
|
15
15
|
export declare function loadRuleLibrary(): RuleSnippet[];
|
package/dist/rules/library.js
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import fs from 'node:fs';
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { getRulesDir } from '../config/paths.js';
|
|
4
|
-
import {
|
|
4
|
+
import { getSourcesRecord } from '../library/sources.js';
|
|
5
5
|
import { parseRuleMarkdown } from './parser.js';
|
|
6
6
|
function isMarkdownFile(fileName) {
|
|
7
7
|
const extension = path.extname(fileName).toLowerCase();
|
|
@@ -59,16 +59,15 @@ function loadRulesFromDirectory(directory, namespace) {
|
|
|
59
59
|
return rules;
|
|
60
60
|
}
|
|
61
61
|
/**
|
|
62
|
-
* Load all rules from default library and
|
|
62
|
+
* Load all rules from default library and external sources
|
|
63
63
|
*/
|
|
64
64
|
export function loadRuleLibrary() {
|
|
65
65
|
const rules = [];
|
|
66
66
|
// Load from default library (no namespace)
|
|
67
67
|
const defaultDir = ensureRulesDirectory();
|
|
68
68
|
rules.push(...loadRulesFromDirectory(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 rulesDir = path.join(basePath, 'rules');
|
|
73
72
|
rules.push(...loadRulesFromDirectory(rulesDir, namespace));
|
|
74
73
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/rules/library.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"library.js","sourceRoot":"","sources":["../../src/rules/library.ts"],"names":[],"mappings":"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"}
|
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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"}
|