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.
- package/README.md +37 -11
- package/dist/commands/distribution.js +2 -2
- package/dist/commands/distribution.js.map +1 -1
- package/dist/commands/library.d.ts +1 -1
- package/dist/commands/library.js +5 -6
- package/dist/commands/library.js.map +1 -1
- package/dist/config/application-config.d.ts +37 -0
- package/dist/config/application-config.js +83 -0
- package/dist/config/application-config.js.map +1 -0
- package/dist/config/layered-config.js +43 -2
- package/dist/config/layered-config.js.map +1 -1
- package/dist/config/paths.d.ts +13 -2
- package/dist/config/paths.js +21 -3
- package/dist/config/paths.js.map +1 -1
- package/dist/config/schemas.d.ts +408 -43
- package/dist/config/schemas.js +32 -22
- package/dist/config/schemas.js.map +1 -1
- package/dist/config/switchboard-config.d.ts +3 -6
- package/dist/config/switchboard-config.js +3 -6
- package/dist/config/switchboard-config.js.map +1 -1
- package/dist/hooks/distribution.d.ts +27 -0
- package/dist/hooks/distribution.js +235 -0
- package/dist/hooks/distribution.js.map +1 -0
- package/dist/hooks/library.d.ts +40 -0
- package/dist/hooks/library.js +143 -0
- package/dist/hooks/library.js.map +1 -0
- package/dist/hooks/schema.d.ts +542 -0
- package/dist/hooks/schema.js +49 -0
- package/dist/hooks/schema.js.map +1 -0
- package/dist/index.js +708 -168
- package/dist/index.js.map +1 -1
- package/dist/library/fs.d.ts +1 -3
- package/dist/library/fs.js +24 -7
- package/dist/library/fs.js.map +1 -1
- package/dist/library/schema.d.ts +1 -1
- package/dist/library/schema.js +1 -1
- package/dist/library/sources.d.ts +75 -0
- package/dist/library/sources.js +285 -0
- package/dist/library/sources.js.map +1 -0
- package/dist/library/state.d.ts +4 -5
- package/dist/library/state.js +15 -31
- package/dist/library/state.js.map +1 -1
- package/dist/marketplace/plugin-loader.d.ts +30 -0
- package/dist/marketplace/plugin-loader.js +178 -0
- package/dist/marketplace/plugin-loader.js.map +1 -0
- package/dist/marketplace/reader.d.ts +36 -0
- package/dist/marketplace/reader.js +90 -0
- package/dist/marketplace/reader.js.map +1 -0
- package/dist/marketplace/schemas.d.ts +467 -0
- package/dist/marketplace/schemas.js +57 -0
- package/dist/marketplace/schemas.js.map +1 -0
- package/dist/marketplace/source-loader.d.ts +32 -0
- package/dist/marketplace/source-loader.js +45 -0
- package/dist/marketplace/source-loader.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/composer.d.ts +2 -2
- package/dist/rules/composer.js +5 -5
- package/dist/rules/composer.js.map +1 -1
- package/dist/rules/distribution.js +48 -112
- 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/distribution.js +6 -6
- package/dist/skills/distribution.js.map +1 -1
- package/dist/skills/library.d.ts +1 -2
- package/dist/skills/library.js +6 -7
- package/dist/skills/library.js.map +1 -1
- package/dist/subagents/distribution.d.ts +1 -1
- package/dist/subagents/distribution.js +319 -20
- package/dist/subagents/distribution.js.map +1 -1
- package/dist/subagents/importer.d.ts +1 -1
- package/dist/subagents/importer.js +61 -1
- package/dist/subagents/importer.js.map +1 -1
- package/dist/subagents/inventory.js +3 -3
- package/dist/subagents/inventory.js.map +1 -1
- package/dist/subagents/library.d.ts +2 -2
- package/dist/subagents/library.js +14 -20
- package/dist/subagents/library.js.map +1 -1
- package/dist/ui/hook-ui.d.ts +8 -0
- package/dist/ui/hook-ui.js +17 -0
- package/dist/ui/hook-ui.js.map +1 -0
- package/dist/ui/library-selector.d.ts +1 -1
- package/dist/ui/subagent-ui.js +3 -3
- package/dist/ui/subagent-ui.js.map +1 -1
- package/dist/util/cli.d.ts +20 -0
- package/dist/util/cli.js +107 -14
- package/dist/util/cli.js.map +1 -1
- package/package.json +3 -2
- package/dist/config/agent-config.d.ts +0 -35
- package/dist/config/agent-config.js +0 -88
- package/dist/config/agent-config.js.map +0 -1
- package/dist/library/subscriptions.d.ts +0 -42
- package/dist/library/subscriptions.js +0 -116
- package/dist/library/subscriptions.js.map +0 -1
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marketplace-aware source loading. For each configured source, detects whether
|
|
3
|
+
* it's a Claude Code marketplace or a flat library directory, and loads the
|
|
4
|
+
* appropriate components from each.
|
|
5
|
+
*/
|
|
6
|
+
import type { CommandEntry } from '../commands/library.js';
|
|
7
|
+
import type { HookEntry } from '../hooks/library.js';
|
|
8
|
+
import type { SubagentEntry } from '../subagents/library.js';
|
|
9
|
+
import { type SkillEntryFromPlugin } from './plugin-loader.js';
|
|
10
|
+
export interface MarketplaceSourceEntries {
|
|
11
|
+
commands: CommandEntry[];
|
|
12
|
+
agents: SubagentEntry[];
|
|
13
|
+
skills: SkillEntryFromPlugin[];
|
|
14
|
+
hooks: HookEntry[];
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Load library entries from all configured sources, handling both flat directory
|
|
18
|
+
* sources and marketplace sources transparently.
|
|
19
|
+
*
|
|
20
|
+
* For flat sources: returns `{ namespace, basePath, isMarketplace: false }` so the
|
|
21
|
+
* caller can load from `basePath/<type>/`.
|
|
22
|
+
*
|
|
23
|
+
* For marketplace sources: parses the marketplace, loads all plugin components,
|
|
24
|
+
* and returns them directly.
|
|
25
|
+
*/
|
|
26
|
+
export declare function loadEntriesFromSources(): {
|
|
27
|
+
flatSources: Array<{
|
|
28
|
+
namespace: string;
|
|
29
|
+
basePath: string;
|
|
30
|
+
}>;
|
|
31
|
+
marketplaceEntries: MarketplaceSourceEntries;
|
|
32
|
+
};
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Marketplace-aware source loading. For each configured source, detects whether
|
|
3
|
+
* it's a Claude Code marketplace or a flat library directory, and loads the
|
|
4
|
+
* appropriate components from each.
|
|
5
|
+
*/
|
|
6
|
+
import { getSourcesRecord } from '../library/sources.js';
|
|
7
|
+
import { loadPluginComponents } from './plugin-loader.js';
|
|
8
|
+
import { isMarketplace, readMarketplace } from './reader.js';
|
|
9
|
+
/**
|
|
10
|
+
* Load library entries from all configured sources, handling both flat directory
|
|
11
|
+
* sources and marketplace sources transparently.
|
|
12
|
+
*
|
|
13
|
+
* For flat sources: returns `{ namespace, basePath, isMarketplace: false }` so the
|
|
14
|
+
* caller can load from `basePath/<type>/`.
|
|
15
|
+
*
|
|
16
|
+
* For marketplace sources: parses the marketplace, loads all plugin components,
|
|
17
|
+
* and returns them directly.
|
|
18
|
+
*/
|
|
19
|
+
export function loadEntriesFromSources() {
|
|
20
|
+
const sources = getSourcesRecord();
|
|
21
|
+
const flatSources = [];
|
|
22
|
+
const marketplaceEntries = {
|
|
23
|
+
commands: [],
|
|
24
|
+
agents: [],
|
|
25
|
+
skills: [],
|
|
26
|
+
hooks: [],
|
|
27
|
+
};
|
|
28
|
+
for (const [namespace, basePath] of Object.entries(sources)) {
|
|
29
|
+
if (isMarketplace(basePath)) {
|
|
30
|
+
const result = readMarketplace(basePath);
|
|
31
|
+
for (const plugin of result.plugins) {
|
|
32
|
+
const components = loadPluginComponents(plugin);
|
|
33
|
+
marketplaceEntries.commands.push(...components.commands);
|
|
34
|
+
marketplaceEntries.agents.push(...components.agents);
|
|
35
|
+
marketplaceEntries.skills.push(...components.skills);
|
|
36
|
+
marketplaceEntries.hooks.push(...components.hooks);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
flatSources.push({ namespace, basePath });
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return { flatSources, marketplaceEntries };
|
|
44
|
+
}
|
|
45
|
+
//# sourceMappingURL=source-loader.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"source-loader.js","sourceRoot":"","sources":["../../src/marketplace/source-loader.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,OAAO,EAAE,oBAAoB,EAA6B,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAS7D;;;;;;;;;GASG;AACH,MAAM,UAAU,sBAAsB;IAIpC,MAAM,OAAO,GAAG,gBAAgB,EAAE,CAAC;IACnC,MAAM,WAAW,GAAmD,EAAE,CAAC;IACvE,MAAM,kBAAkB,GAA6B;QACnD,QAAQ,EAAE,EAAE;QACZ,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,EAAE;QACV,KAAK,EAAE,EAAE;KACV,CAAC;IAEF,KAAK,MAAM,CAAC,SAAS,EAAE,QAAQ,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5D,IAAI,aAAa,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC5B,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,CAAC;YACzC,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpC,MAAM,UAAU,GAAG,oBAAoB,CAAC,MAAM,CAAC,CAAC;gBAChD,kBAAkB,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACzD,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBACrD,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC;gBACrD,kBAAkB,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;YACrD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,WAAW,CAAC,IAAI,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;QAC5C,CAAC;IACH,CAAC;IAED,OAAO,EAAE,WAAW,EAAE,kBAAkB,EAAE,CAAC;AAC7C,CAAC"}
|
package/dist/rules/agents.d.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
/** Agents that receive a single composed rules file (CLAUDE.md / AGENTS.md) */
|
|
2
|
-
export declare const RULE_SUPPORTED_AGENTS: readonly ["claude-code", "codex", "gemini", "opencode"];
|
|
3
|
-
/** Agents that receive individual
|
|
4
|
-
export declare const RULE_PER_FILE_AGENTS: readonly [
|
|
1
|
+
/** Agents that receive a single composed rules file (CLAUDE.md / AGENTS.md / .mdc) */
|
|
2
|
+
export declare const RULE_SUPPORTED_AGENTS: readonly ["claude-code", "codex", "cursor", "gemini", "opencode"];
|
|
3
|
+
/** Agents that receive individual per-rule files */
|
|
4
|
+
export declare const RULE_PER_FILE_AGENTS: readonly [];
|
|
5
5
|
export declare const RULE_INDIRECT_AGENTS: readonly [];
|
|
6
6
|
export declare const RULE_UNSUPPORTED_AGENTS: readonly ["claude-desktop"];
|
|
7
7
|
export type RuleSupportedAgent = (typeof RULE_SUPPORTED_AGENTS)[number];
|
package/dist/rules/agents.js
CHANGED
|
@@ -1,7 +1,13 @@
|
|
|
1
|
-
/** Agents that receive a single composed rules file (CLAUDE.md / AGENTS.md) */
|
|
2
|
-
export const RULE_SUPPORTED_AGENTS = [
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
/** Agents that receive a single composed rules file (CLAUDE.md / AGENTS.md / .mdc) */
|
|
2
|
+
export const RULE_SUPPORTED_AGENTS = [
|
|
3
|
+
'claude-code',
|
|
4
|
+
'codex',
|
|
5
|
+
'cursor',
|
|
6
|
+
'gemini',
|
|
7
|
+
'opencode',
|
|
8
|
+
];
|
|
9
|
+
/** Agents that receive individual per-rule files */
|
|
10
|
+
export const RULE_PER_FILE_AGENTS = [];
|
|
5
11
|
export const RULE_INDIRECT_AGENTS = [];
|
|
6
12
|
export const RULE_UNSUPPORTED_AGENTS = ['claude-desktop'];
|
|
7
13
|
//# sourceMappingURL=agents.js.map
|
package/dist/rules/agents.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/rules/agents.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../src/rules/agents.ts"],"names":[],"mappings":"AAAA,sFAAsF;AACtF,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,aAAa;IACb,OAAO;IACP,QAAQ;IACR,QAAQ;IACR,UAAU;CACF,CAAC;AAEX,oDAAoD;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAW,CAAC;AAEhD,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAW,CAAC;AAEhD,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,gBAAgB,CAAU,CAAC"}
|
package/dist/rules/composer.d.ts
CHANGED
|
@@ -16,7 +16,7 @@ interface ComposeOptions {
|
|
|
16
16
|
export declare function composeRules(activeIds: string[], rules: RuleSnippet[], options?: ComposeOptions): ComposedRules;
|
|
17
17
|
export declare function composeActiveRules(scope?: ConfigScope): ComposedRules;
|
|
18
18
|
/**
|
|
19
|
-
* Compose active rules for a specific
|
|
19
|
+
* Compose active rules for a specific application, applying per-application overrides
|
|
20
20
|
*/
|
|
21
|
-
export declare function
|
|
21
|
+
export declare function composeActiveRulesForApplication(appId: string, scope?: ConfigScope): ComposedRules;
|
|
22
22
|
export {};
|
package/dist/rules/composer.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { createHash } from 'node:crypto';
|
|
2
|
-
import {
|
|
2
|
+
import { resolveApplicationSectionConfig } from '../config/application-config.js';
|
|
3
3
|
import { loadSwitchboardConfig } from '../config/switchboard-config.js';
|
|
4
4
|
import { loadRuleLibrary } from './library.js';
|
|
5
5
|
import { loadRuleState } from './state.js';
|
|
@@ -76,11 +76,11 @@ export function composeActiveRules(scope) {
|
|
|
76
76
|
});
|
|
77
77
|
}
|
|
78
78
|
/**
|
|
79
|
-
* Compose active rules for a specific
|
|
79
|
+
* Compose active rules for a specific application, applying per-application overrides
|
|
80
80
|
*/
|
|
81
|
-
export function
|
|
81
|
+
export function composeActiveRulesForApplication(appId, scope) {
|
|
82
82
|
const rules = loadRuleLibrary();
|
|
83
|
-
const
|
|
83
|
+
const appConfig = resolveApplicationSectionConfig('rules', appId, scope);
|
|
84
84
|
const loadOptions = scope
|
|
85
85
|
? {
|
|
86
86
|
profile: scope.profile ?? undefined,
|
|
@@ -88,7 +88,7 @@ export function composeActiveRulesForAgent(agentId, scope) {
|
|
|
88
88
|
}
|
|
89
89
|
: undefined;
|
|
90
90
|
const config = loadSwitchboardConfig(loadOptions);
|
|
91
|
-
return composeRules(
|
|
91
|
+
return composeRules(appConfig.active, rules, {
|
|
92
92
|
includeDelimiters: config.rules?.includeDelimiters === true,
|
|
93
93
|
});
|
|
94
94
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/rules/composer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"composer.js","sourceRoot":"","sources":["../../src/rules/composer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,+BAA+B,EAAE,MAAM,iCAAiC,CAAC;AAElF,OAAO,EAAE,qBAAqB,EAAE,MAAM,iCAAiC,CAAC;AAExE,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAC/C,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAkB3C,SAAS,oBAAoB,CAAC,OAAe;IAC3C,MAAM,IAAI,GAAG,OAAO,CAAC,OAAO,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,EAAE,CAAC;IACZ,CAAC;IACD,OAAO,GAAG,OAAO,IAAI,CAAC;AACxB,CAAC;AAED,SAAS,aAAa,CAAC,IAAiB;IACtC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,KAAK,EAAE,IAAI,CAAC,QAAQ,CAAC,KAAK,IAAI,IAAI;QAClC,OAAO,EAAE,oBAAoB,CAAC,IAAI,CAAC,OAAO,CAAC;KAC5C,CAAC;AACJ,CAAC;AAED,SAAS,WAAW,CAAC,OAAe;IAClC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED,MAAM,UAAU,YAAY,CAC1B,SAAmB,EACnB,KAAoB,EACpB,OAAwB;IAExB,IAAI,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3B,OAAO;YACL,OAAO,EAAE,EAAE;YACX,IAAI,EAAE,WAAW,CAAC,EAAE,CAAC;YACrB,QAAQ,EAAE,EAAE;SACb,CAAC;IACJ,CAAC;IAED,MAAM,iBAAiB,GAAG,OAAO,EAAE,iBAAiB,KAAK,IAAI,CAAC;IAE9D,MAAM,OAAO,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9D,MAAM,QAAQ,GAAkB,EAAE,CAAC;IACnC,MAAM,MAAM,GAAa,EAAE,CAAC;IAE5B,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,MAAM,IAAI,KAAK,CAAC,gBAAgB,EAAE,gCAAgC,CAAC,CAAC;QACtE,CAAC;QAED,MAAM,OAAO,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC;QACpC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAEvB,IAAI,iBAAiB,EAAE,CAAC;YACtB,MAAM,cAAc,GAAG,QAAQ,EAAE,YAAY,CAAC;YAC9C,MAAM,YAAY,GAAG,QAAQ,EAAE,UAAU,CAAC;YAC1C,IAAI,KAAK,GAAG,GAAG,cAAc,IAAI,CAAC;YAClC,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBAC/B,KAAK,IAAI,OAAO,CAAC,OAAO,CAAC;YAC3B,CAAC;YACD,KAAK,IAAI,GAAG,YAAY,IAAI,CAAC;YAC7B,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACrB,CAAC;aAAM,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACtC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAC/B,CAAC;IACH,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAElC,OAAO;QACL,OAAO;QACP,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC;QAC1B,QAAQ;KACT,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAmB;IACpD,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC;YACE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;YACnC,WAAW,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;SACxC;QACH,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,KAAK,EAAE;QACvC,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;KAC5D,CAAC,CAAC;AACL,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gCAAgC,CAC9C,KAAa,EACb,KAAmB;IAEnB,MAAM,KAAK,GAAG,eAAe,EAAE,CAAC;IAChC,MAAM,SAAS,GAAG,+BAA+B,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACzE,MAAM,WAAW,GAAG,KAAK;QACvB,CAAC,CAAC;YACE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;YACnC,WAAW,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS;SACxC;QACH,CAAC,CAAC,SAAS,CAAC;IACd,MAAM,MAAM,GAAG,qBAAqB,CAAC,WAAW,CAAC,CAAC;IAClD,OAAO,YAAY,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE;QAC3C,iBAAiB,EAAE,MAAM,CAAC,KAAK,EAAE,iBAAiB,KAAK,IAAI;KAC5D,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -1,10 +1,8 @@
|
|
|
1
|
-
import { createHash } from 'node:crypto';
|
|
2
1
|
import fs from 'node:fs';
|
|
3
2
|
import path from 'node:path';
|
|
4
|
-
import { resolveAgentSectionConfig } from '../config/agent-config.js';
|
|
5
3
|
import { getAgentsHome, getClaudeDir, getCodexDir, getCursorDir, getGeminiDir, getOpencodePath, getProjectCursorDir, } from '../config/paths.js';
|
|
6
4
|
import { RULE_INDIRECT_AGENTS, RULE_PER_FILE_AGENTS, RULE_SUPPORTED_AGENTS, RULE_UNSUPPORTED_AGENTS, } from './agents.js';
|
|
7
|
-
import {
|
|
5
|
+
import { composeActiveRulesForApplication } from './composer.js';
|
|
8
6
|
import { loadRuleLibrary } from './library.js';
|
|
9
7
|
import { updateRuleState } from './state.js';
|
|
10
8
|
function resolveRuleFile(agent, scope) {
|
|
@@ -29,6 +27,11 @@ function resolveRuleFile(agent, scope) {
|
|
|
29
27
|
return path.join(path.resolve(projectRoot), 'AGENTS.md');
|
|
30
28
|
}
|
|
31
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');
|
|
32
35
|
case 'opencode':
|
|
33
36
|
// OpenCode supports project-level AGENTS.md at repository root; otherwise use global.
|
|
34
37
|
if (projectRoot && projectRoot.length > 0) {
|
|
@@ -45,6 +48,41 @@ function ensureDirectory(filePath) {
|
|
|
45
48
|
fs.mkdirSync(dir, { recursive: true });
|
|
46
49
|
}
|
|
47
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
|
+
}
|
|
48
86
|
export function distributeRules(_composed, options, scope) {
|
|
49
87
|
const results = [];
|
|
50
88
|
const timestamp = new Date().toISOString();
|
|
@@ -54,11 +92,12 @@ export function distributeRules(_composed, options, scope) {
|
|
|
54
92
|
let firstComposed = null;
|
|
55
93
|
for (const agent of RULE_SUPPORTED_AGENTS) {
|
|
56
94
|
// Compose rules for this specific agent (applies per-agent overrides)
|
|
57
|
-
const document =
|
|
95
|
+
const document = composeActiveRulesForApplication(agent, scope);
|
|
58
96
|
if (!firstComposed) {
|
|
59
97
|
firstComposed = document;
|
|
60
98
|
}
|
|
61
99
|
const filePath = resolveRuleFile(agent, scope);
|
|
100
|
+
const finalContent = agent === 'cursor' ? wrapMdcFrontmatter(document.content) : document.content;
|
|
62
101
|
let existingContent = null;
|
|
63
102
|
try {
|
|
64
103
|
if (fs.existsSync(filePath)) {
|
|
@@ -69,7 +108,7 @@ export function distributeRules(_composed, options, scope) {
|
|
|
69
108
|
existingContent = null;
|
|
70
109
|
}
|
|
71
110
|
const hadExistingFile = existingContent !== null;
|
|
72
|
-
const contentMatches = existingContent !== null && existingContent ===
|
|
111
|
+
const contentMatches = existingContent !== null && existingContent === finalContent;
|
|
73
112
|
if (!forceRewrite && contentMatches) {
|
|
74
113
|
results.push({
|
|
75
114
|
agent,
|
|
@@ -83,7 +122,7 @@ export function distributeRules(_composed, options, scope) {
|
|
|
83
122
|
const reason = hadExistingFile ? (contentMatches ? 'refreshed' : 'updated') : 'created';
|
|
84
123
|
try {
|
|
85
124
|
ensureDirectory(filePath);
|
|
86
|
-
fs.writeFileSync(filePath,
|
|
125
|
+
fs.writeFileSync(filePath, finalContent, 'utf-8');
|
|
87
126
|
agentSyncUpdates.set(agent, { hash: document.hash, updatedAt: timestamp });
|
|
88
127
|
results.push({ agent, filePath, status: 'written', reason });
|
|
89
128
|
}
|
|
@@ -92,12 +131,9 @@ export function distributeRules(_composed, options, scope) {
|
|
|
92
131
|
results.push({ agent, filePath, status: 'error', error: message });
|
|
93
132
|
}
|
|
94
133
|
}
|
|
95
|
-
//
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
for (const [agent, update] of perFileResults.syncUpdates.entries()) {
|
|
99
|
-
agentSyncUpdates.set(agent, update);
|
|
100
|
-
}
|
|
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);
|
|
101
137
|
if (agentSyncUpdates.size > 0) {
|
|
102
138
|
updateRuleState((current) => {
|
|
103
139
|
const agentSync = { ...current.agentSync };
|
|
@@ -116,106 +152,6 @@ export function distributeRules(_composed, options, scope) {
|
|
|
116
152
|
};
|
|
117
153
|
}
|
|
118
154
|
// ---------------------------------------------------------------------------
|
|
119
|
-
// Cursor .mdc per-file distribution
|
|
120
|
-
// ---------------------------------------------------------------------------
|
|
121
|
-
function resolveCursorRulesDir(scope) {
|
|
122
|
-
const projectRoot = scope?.project?.trim();
|
|
123
|
-
if (projectRoot && projectRoot.length > 0) {
|
|
124
|
-
return path.join(getProjectCursorDir(projectRoot), 'rules');
|
|
125
|
-
}
|
|
126
|
-
return path.join(getCursorDir(), 'rules');
|
|
127
|
-
}
|
|
128
|
-
function renderMdcRule(rule) {
|
|
129
|
-
const extras = rule.metadata.extras;
|
|
130
|
-
const cursorExtras = (extras?.cursor ?? {});
|
|
131
|
-
const description = typeof cursorExtras.description === 'string'
|
|
132
|
-
? cursorExtras.description
|
|
133
|
-
: (rule.metadata.description ?? rule.metadata.title ?? rule.id);
|
|
134
|
-
const alwaysApply = typeof cursorExtras.alwaysApply === 'boolean' ? cursorExtras.alwaysApply : true;
|
|
135
|
-
const lines = ['---', `description: ${description}`, `alwaysApply: ${alwaysApply}`];
|
|
136
|
-
if (typeof cursorExtras.globs === 'string' && cursorExtras.globs.length > 0) {
|
|
137
|
-
lines.push(`globs: ${cursorExtras.globs}`);
|
|
138
|
-
}
|
|
139
|
-
lines.push('---', '');
|
|
140
|
-
const body = rule.content.replace(/\r\n/g, '\n').replace(/\s+$/u, '');
|
|
141
|
-
if (body.length > 0) {
|
|
142
|
-
lines.push(body);
|
|
143
|
-
lines.push('');
|
|
144
|
-
}
|
|
145
|
-
return lines.join('\n');
|
|
146
|
-
}
|
|
147
|
-
function distributeCursorRules(forceRewrite, scope) {
|
|
148
|
-
const results = [];
|
|
149
|
-
const syncUpdates = new Map();
|
|
150
|
-
const timestamp = new Date().toISOString();
|
|
151
|
-
for (const agent of RULE_PER_FILE_AGENTS) {
|
|
152
|
-
const agentConfig = resolveAgentSectionConfig('rules', agent, scope);
|
|
153
|
-
const activeIds = new Set(agentConfig.active);
|
|
154
|
-
const rules = loadRuleLibrary();
|
|
155
|
-
const ruleMap = new Map(rules.map((r) => [r.id, r]));
|
|
156
|
-
const libraryIds = new Set(rules.map((r) => r.id));
|
|
157
|
-
const targetDir = resolveCursorRulesDir(scope);
|
|
158
|
-
const hashes = [];
|
|
159
|
-
let hadError = false;
|
|
160
|
-
for (const id of agentConfig.active) {
|
|
161
|
-
const rule = ruleMap.get(id);
|
|
162
|
-
if (!rule)
|
|
163
|
-
continue;
|
|
164
|
-
const filePath = path.join(targetDir, `${id}.mdc`);
|
|
165
|
-
const content = renderMdcRule(rule);
|
|
166
|
-
hashes.push(createHash('sha256').update(content).digest('hex'));
|
|
167
|
-
let existing = null;
|
|
168
|
-
try {
|
|
169
|
-
if (fs.existsSync(filePath))
|
|
170
|
-
existing = fs.readFileSync(filePath, 'utf-8');
|
|
171
|
-
}
|
|
172
|
-
catch {
|
|
173
|
-
existing = null;
|
|
174
|
-
}
|
|
175
|
-
if (!forceRewrite && existing === content) {
|
|
176
|
-
results.push({ agent, filePath, status: 'skipped', reason: 'up-to-date' });
|
|
177
|
-
continue;
|
|
178
|
-
}
|
|
179
|
-
try {
|
|
180
|
-
ensureDirectory(filePath);
|
|
181
|
-
fs.writeFileSync(filePath, content, 'utf-8');
|
|
182
|
-
results.push({
|
|
183
|
-
agent,
|
|
184
|
-
filePath,
|
|
185
|
-
status: 'written',
|
|
186
|
-
reason: existing !== null ? 'updated' : 'created',
|
|
187
|
-
});
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
hadError = true;
|
|
191
|
-
const message = error instanceof Error ? error.message : String(error);
|
|
192
|
-
results.push({ agent, filePath, status: 'error', error: message });
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
// Cleanup orphan .mdc files: files in target dir whose ID is in the library but not active
|
|
196
|
-
if (fs.existsSync(targetDir)) {
|
|
197
|
-
for (const file of fs.readdirSync(targetDir)) {
|
|
198
|
-
if (!file.endsWith('.mdc'))
|
|
199
|
-
continue;
|
|
200
|
-
const fileId = file.slice(0, -4);
|
|
201
|
-
if (libraryIds.has(fileId) && !activeIds.has(fileId)) {
|
|
202
|
-
try {
|
|
203
|
-
fs.unlinkSync(path.join(targetDir, file));
|
|
204
|
-
}
|
|
205
|
-
catch {
|
|
206
|
-
// best-effort cleanup
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
if (!hadError) {
|
|
212
|
-
const combinedHash = createHash('sha256').update(hashes.join(':')).digest('hex');
|
|
213
|
-
syncUpdates.set(agent, { hash: combinedHash, updatedAt: timestamp });
|
|
214
|
-
}
|
|
215
|
-
}
|
|
216
|
-
return { results, syncUpdates };
|
|
217
|
-
}
|
|
218
|
-
// ---------------------------------------------------------------------------
|
|
219
155
|
// Public helpers
|
|
220
156
|
// ---------------------------------------------------------------------------
|
|
221
157
|
export function listUnsupportedAgents() {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/rules/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,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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"}
|
|
@@ -2,7 +2,7 @@ import fs from 'node:fs';
|
|
|
2
2
|
import path from 'node:path';
|
|
3
3
|
import { getClaudeDir, getCodexDir, getCodexSkillsDir, getCursorDir, getGeminiDir, getOpencodeRoot, getProjectClaudeDir, getProjectCodexSkillsDir, getProjectCursorDir, getProjectGeminiDir, getProjectOpencodeRoot, } from '../config/paths.js';
|
|
4
4
|
import { distributeBundle, } from '../library/distribute-bundle.js';
|
|
5
|
-
import {
|
|
5
|
+
import { loadLibraryStateSectionForApplication } from '../library/state.js';
|
|
6
6
|
import { listSkillFiles, loadSkillLibrary } from './library.js';
|
|
7
7
|
export const SKILL_PLATFORMS = [
|
|
8
8
|
'claude-code',
|
|
@@ -22,7 +22,7 @@ const AGENTS_TARGET_PLATFORMS = ['codex', 'gemini', 'opencode'];
|
|
|
22
22
|
* cleanup of orphan `.cursor/skills/` directories still executes).
|
|
23
23
|
*/
|
|
24
24
|
function shouldDedupCursorSkills(scope) {
|
|
25
|
-
const claudeState =
|
|
25
|
+
const claudeState = loadLibraryStateSectionForApplication('skills', 'claude-code', scope);
|
|
26
26
|
return claudeState.active.length > 0;
|
|
27
27
|
}
|
|
28
28
|
/**
|
|
@@ -109,21 +109,21 @@ function distributeAgentsMode(entries, scope) {
|
|
|
109
109
|
if (target === 'cursor') {
|
|
110
110
|
if (shouldDedupCursorSkills(scope))
|
|
111
111
|
return [];
|
|
112
|
-
const state =
|
|
112
|
+
const state = loadLibraryStateSectionForApplication('skills', target, scope);
|
|
113
113
|
const activeIds = new Set(state.active);
|
|
114
114
|
return allEntries.filter((e) => activeIds.has(e.id));
|
|
115
115
|
}
|
|
116
116
|
if (target === 'agents') {
|
|
117
117
|
const unionIds = new Set();
|
|
118
118
|
for (const agentId of AGENTS_TARGET_PLATFORMS) {
|
|
119
|
-
const state =
|
|
119
|
+
const state = loadLibraryStateSectionForApplication('skills', agentId, scope);
|
|
120
120
|
for (const id of state.active) {
|
|
121
121
|
unionIds.add(id);
|
|
122
122
|
}
|
|
123
123
|
}
|
|
124
124
|
return allEntries.filter((e) => unionIds.has(e.id));
|
|
125
125
|
}
|
|
126
|
-
const state =
|
|
126
|
+
const state = loadLibraryStateSectionForApplication('skills', target, scope);
|
|
127
127
|
const activeIds = new Set(state.active);
|
|
128
128
|
return allEntries.filter((e) => activeIds.has(e.id));
|
|
129
129
|
};
|
|
@@ -177,7 +177,7 @@ function distributeLegacyMode(entries, scope) {
|
|
|
177
177
|
if (shouldDedupCursorSkills(scope))
|
|
178
178
|
return [];
|
|
179
179
|
}
|
|
180
|
-
const state =
|
|
180
|
+
const state = loadLibraryStateSectionForApplication('skills', target, scope);
|
|
181
181
|
const activeIds = new Set(state.active);
|
|
182
182
|
return allEntries.filter((e) => activeIds.has(e.id));
|
|
183
183
|
};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/skills/distribution.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EACL,YAAY,EACZ,WAAW,EACX,iBAAiB,EACjB,YAAY,EACZ,YAAY,EACZ,eAAe,EACf,mBAAmB,EACnB,wBAAwB,EACxB,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,GACvB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAIL,gBAAgB,GACjB,MAAM,iCAAiC,CAAC;AACzC,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"distribution.js","sourceRoot":"","sources":["../../src/skills/distribution.ts"],"names":[],"mappings":"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"}
|
package/dist/skills/library.d.ts
CHANGED
|
@@ -25,8 +25,7 @@ export interface BundleFile {
|
|
|
25
25
|
}
|
|
26
26
|
export declare function ensureSkillsDirectory(): string;
|
|
27
27
|
/**
|
|
28
|
-
* Load all skills from default library and
|
|
29
|
-
* Each skill is a directory containing a SKILL.md file.
|
|
28
|
+
* Load all skills from default library, flat sources, and marketplace sources.
|
|
30
29
|
*/
|
|
31
30
|
export declare function loadSkillLibrary(): SkillEntry[];
|
|
32
31
|
/**
|