rulesync 16.37.0 → 16.38.0
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 +1 -1
- package/dist/cli/index.cjs +4 -4
- package/dist/cli/index.js +4 -4
- package/dist/cli/index.js.map +1 -1
- package/dist/{import-BnF2J75x.js → import-BiyWNVZY.js} +394 -36
- package/dist/import-BiyWNVZY.js.map +1 -0
- package/dist/{import-xo5me5dm.cjs → import-DKBaTqsY.cjs} +410 -52
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +1 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +1 -1
- package/dist/import-BnF2J75x.js.map +0 -1
|
@@ -444,36 +444,36 @@ const isFeatureValueEnabled = (value) => {
|
|
|
444
444
|
const parseCommaSeparatedList = (value) => value.split(",").map((s) => s.trim()).filter(Boolean);
|
|
445
445
|
//#endregion
|
|
446
446
|
//#region src/constants/rulesync-paths.ts
|
|
447
|
-
const { join: join$
|
|
447
|
+
const { join: join$351 } = node_path.posix;
|
|
448
448
|
const RULESYNC_CONFIG_RELATIVE_FILE_PATH = "rulesync.jsonc";
|
|
449
449
|
const RULESYNC_LOCAL_CONFIG_RELATIVE_FILE_PATH = "rulesync.local.jsonc";
|
|
450
450
|
const RULESYNC_USER_CONFIG_DIR_NAME = "rulesync";
|
|
451
451
|
const RULESYNC_XDG_CONFIG_HOME_DEFAULT_DIR_NAME = ".config";
|
|
452
452
|
const RULESYNC_RELATIVE_DIR_PATH = ".rulesync";
|
|
453
453
|
const RULES_FEATURE_SUBDIR = "rules";
|
|
454
|
-
const CURATED_RULES_FEATURE_SUBDIR = join$
|
|
454
|
+
const CURATED_RULES_FEATURE_SUBDIR = join$351(RULES_FEATURE_SUBDIR, ".curated");
|
|
455
455
|
const COMMANDS_FEATURE_SUBDIR = "commands";
|
|
456
456
|
const SUBAGENTS_FEATURE_SUBDIR = "subagents";
|
|
457
457
|
const CHECKS_FEATURE_SUBDIR = "checks";
|
|
458
458
|
const SKILLS_FEATURE_SUBDIR = "skills";
|
|
459
|
-
const CURATED_SKILLS_FEATURE_SUBDIR = join$
|
|
460
|
-
const RULESYNC_RULES_RELATIVE_DIR_PATH = join$
|
|
461
|
-
const RULESYNC_CURATED_RULES_RELATIVE_DIR_PATH = join$
|
|
462
|
-
const RULESYNC_COMMANDS_RELATIVE_DIR_PATH = join$
|
|
463
|
-
const RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH = join$
|
|
464
|
-
const RULESYNC_CHECKS_RELATIVE_DIR_PATH = join$
|
|
465
|
-
const RULESYNC_MCP_RELATIVE_FILE_PATH = join$
|
|
466
|
-
const RULESYNC_HOOKS_RELATIVE_FILE_PATH = join$
|
|
467
|
-
const RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH = join$
|
|
468
|
-
join$
|
|
469
|
-
const RULESYNC_HOOKS_LEGACY_RELATIVE_FILE_PATH = join$
|
|
470
|
-
const RULESYNC_PERMISSIONS_LEGACY_RELATIVE_FILE_PATH = join$
|
|
459
|
+
const CURATED_SKILLS_FEATURE_SUBDIR = join$351(SKILLS_FEATURE_SUBDIR, ".curated");
|
|
460
|
+
const RULESYNC_RULES_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, RULES_FEATURE_SUBDIR);
|
|
461
|
+
const RULESYNC_CURATED_RULES_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, CURATED_RULES_FEATURE_SUBDIR);
|
|
462
|
+
const RULESYNC_COMMANDS_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, COMMANDS_FEATURE_SUBDIR);
|
|
463
|
+
const RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, SUBAGENTS_FEATURE_SUBDIR);
|
|
464
|
+
const RULESYNC_CHECKS_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, CHECKS_FEATURE_SUBDIR);
|
|
465
|
+
const RULESYNC_MCP_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, "mcp.jsonc");
|
|
466
|
+
const RULESYNC_HOOKS_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, "hooks.jsonc");
|
|
467
|
+
const RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, "permissions.jsonc");
|
|
468
|
+
join$351(RULESYNC_RELATIVE_DIR_PATH, "mcp.json");
|
|
469
|
+
const RULESYNC_HOOKS_LEGACY_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, "hooks.json");
|
|
470
|
+
const RULESYNC_PERMISSIONS_LEGACY_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, "permissions.json");
|
|
471
471
|
const RULESYNC_AIIGNORE_FILE_NAME = ".aiignore";
|
|
472
|
-
const RULESYNC_AIIGNORE_RELATIVE_FILE_PATH = join$
|
|
472
|
+
const RULESYNC_AIIGNORE_RELATIVE_FILE_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, ".aiignore");
|
|
473
473
|
const RULESYNC_IGNORE_RELATIVE_FILE_PATH = ".rulesyncignore";
|
|
474
474
|
const RULESYNC_OVERVIEW_FILE_NAME = "overview.md";
|
|
475
|
-
const RULESYNC_SKILLS_RELATIVE_DIR_PATH = join$
|
|
476
|
-
const RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH = join$
|
|
475
|
+
const RULESYNC_SKILLS_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, SKILLS_FEATURE_SUBDIR);
|
|
476
|
+
const RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH = join$351(RULESYNC_RELATIVE_DIR_PATH, CURATED_SKILLS_FEATURE_SUBDIR);
|
|
477
477
|
const RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH = "rulesync.lock";
|
|
478
478
|
const RULESYNC_NPM_SOURCES_LOCK_RELATIVE_FILE_PATH = "rulesync-npm.lock.json";
|
|
479
479
|
const RULESYNC_MCP_FILE_NAME = "mcp.jsonc";
|
|
@@ -616,6 +616,7 @@ const mcpProcessorToolTargetTuple = [
|
|
|
616
616
|
"junie",
|
|
617
617
|
"musecode",
|
|
618
618
|
"opencode",
|
|
619
|
+
"pool",
|
|
619
620
|
"qwencode",
|
|
620
621
|
"reasonix",
|
|
621
622
|
"roo",
|
|
@@ -3329,6 +3330,8 @@ const SHARED_USER_MANAGED_CONFIG_PATHS = [
|
|
|
3329
3330
|
".grok/config.toml",
|
|
3330
3331
|
".rovodev/config.yml",
|
|
3331
3332
|
".rovodev/mcp.json",
|
|
3333
|
+
".poolside/settings.yaml",
|
|
3334
|
+
".config/poolside/settings.yaml",
|
|
3332
3335
|
".tabnine/agent/settings.json",
|
|
3333
3336
|
".vibe/config.toml",
|
|
3334
3337
|
".zcode/config.json",
|
|
@@ -4378,7 +4381,7 @@ const PI_HOOK_EVENTS = [
|
|
|
4378
4381
|
* adapter. Amp's `agent.start` / `agent.end` events describe the main agent
|
|
4379
4382
|
* turn, not a subagent lifecycle, so they map to `beforeSubmitPrompt` / `stop`.
|
|
4380
4383
|
*
|
|
4381
|
-
* @see https://ampcode.com/
|
|
4384
|
+
* @see https://ampcode.com/docs/plugin-api
|
|
4382
4385
|
*/
|
|
4383
4386
|
const AMP_HOOK_EVENTS = [
|
|
4384
4387
|
"sessionStart",
|
|
@@ -6223,6 +6226,7 @@ const McpServerSchema = zod_mini.z.looseObject({
|
|
|
6223
6226
|
crushOauthClientSecret: zod_mini.z.optional(zod_mini.z.string()),
|
|
6224
6227
|
crushOauthCallbackPort: zod_mini.z.optional(zod_mini.z.int()),
|
|
6225
6228
|
crushSessionless: zod_mini.z.optional(zod_mini.z.boolean()),
|
|
6229
|
+
poolAllow: zod_mini.z.optional(zod_mini.z.array(zod_mini.z.string())),
|
|
6226
6230
|
headers: zod_mini.z.optional(zod_mini.z.record(zod_mini.z.string(), zod_mini.z.string())),
|
|
6227
6231
|
/**
|
|
6228
6232
|
* The canonical per-server tool allowlist.
|
|
@@ -6654,6 +6658,7 @@ var RulesyncMcp = class RulesyncMcp extends RulesyncFile {
|
|
|
6654
6658
|
"crushOauthClientSecret",
|
|
6655
6659
|
"crushOauthCallbackPort",
|
|
6656
6660
|
"crushSessionless",
|
|
6661
|
+
"poolAllow",
|
|
6657
6662
|
"oauth_client_id",
|
|
6658
6663
|
"oauth_client_secret",
|
|
6659
6664
|
"oauth_callback_port",
|
|
@@ -8341,7 +8346,7 @@ const PERMISSION_OVERRIDE_KEY_ALIASES = {
|
|
|
8341
8346
|
* them; treating a segment that carries one as static could name a directory
|
|
8342
8347
|
* that no matched file actually lives under.
|
|
8343
8348
|
*/
|
|
8344
|
-
const GLOB_METACHARACTERS = /[*?[\]{}()!]/;
|
|
8349
|
+
const GLOB_METACHARACTERS$1 = /[*?[\]{}()!]/;
|
|
8345
8350
|
/**
|
|
8346
8351
|
* The directory every file matched by `glob` lives under, or `undefined` when
|
|
8347
8352
|
* the pattern pins down no such directory.
|
|
@@ -8374,7 +8379,7 @@ function getGlobStaticPrefix(glob) {
|
|
|
8374
8379
|
const lastIndex = segments.length - 1;
|
|
8375
8380
|
const prefix = [];
|
|
8376
8381
|
for (const [index, segment] of segments.entries()) {
|
|
8377
|
-
if (segment === "" || GLOB_METACHARACTERS.test(segment)) break;
|
|
8382
|
+
if (segment === "" || GLOB_METACHARACTERS$1.test(segment)) break;
|
|
8378
8383
|
if (segment === ".") continue;
|
|
8379
8384
|
if (index === lastIndex) break;
|
|
8380
8385
|
prefix.push(segment);
|
|
@@ -12949,6 +12954,8 @@ const KIMI_CODE_HOME_CONFIG_SHARED_FILE_KEY = "config.toml";
|
|
|
12949
12954
|
const REASONIX_PROJECT_CONFIG_SHARED_FILE_KEY = "reasonix.toml";
|
|
12950
12955
|
const REASONIX_GLOBAL_CONFIG_SHARED_FILE_KEY = ".reasonix/config.toml";
|
|
12951
12956
|
const ROVODEV_CONFIG_SHARED_FILE_KEY = ".rovodev/config.yml";
|
|
12957
|
+
const POOL_PROJECT_SETTINGS_SHARED_FILE_KEY = ".poolside/settings.yaml";
|
|
12958
|
+
const POOL_GLOBAL_SETTINGS_SHARED_FILE_KEY = ".config/poolside/settings.yaml";
|
|
12952
12959
|
/**
|
|
12953
12960
|
* Build the `SHARED_CONFIG_OWNERSHIP` lookup key from a tool's settable paths.
|
|
12954
12961
|
* Mirrors `sharedFileKey` in `src/lib/shared-file-derive.ts` (kept separate so
|
|
@@ -13030,6 +13037,20 @@ const KIMI_CODE_CONFIG_DECLARATION = {
|
|
|
13030
13037
|
}
|
|
13031
13038
|
};
|
|
13032
13039
|
/**
|
|
13040
|
+
* Pool settings (`.poolside/settings.yaml` / `~/.config/poolside/settings.yaml`):
|
|
13041
|
+
* the user's primary Pool settings file, so an unparseable root fails closed
|
|
13042
|
+
* rather than being replaced with generated output. `mcp_servers` is owned as
|
|
13043
|
+
* a whole key because the MCP writer emits the complete server map.
|
|
13044
|
+
*/
|
|
13045
|
+
const POOL_SETTINGS_DECLARATION = {
|
|
13046
|
+
format: "yaml",
|
|
13047
|
+
invalidRootPolicy: "error",
|
|
13048
|
+
features: { mcp: {
|
|
13049
|
+
kind: "replace-owned-keys",
|
|
13050
|
+
ownedKeys: ["mcp_servers"]
|
|
13051
|
+
} }
|
|
13052
|
+
};
|
|
13053
|
+
/**
|
|
13033
13054
|
* ZCode's settings file, which also carries model/theme/permission keys
|
|
13034
13055
|
* rulesync does not own. Both copies are the user's primary ZCode config, so
|
|
13035
13056
|
* every writer refuses to read-modify-write a file it could not parse rather
|
|
@@ -13134,6 +13155,8 @@ const SHARED_CONFIG_OWNERSHIP = {
|
|
|
13134
13155
|
[HERMES_CONFIG_SHARED_FILE_KEY]: HERMES_CONFIG_DECLARATION,
|
|
13135
13156
|
[HERMES_WIN32_CONFIG_SHARED_FILE_KEY]: HERMES_CONFIG_DECLARATION,
|
|
13136
13157
|
[HERMES_HOME_CONFIG_SHARED_FILE_KEY]: HERMES_CONFIG_DECLARATION,
|
|
13158
|
+
[POOL_PROJECT_SETTINGS_SHARED_FILE_KEY]: POOL_SETTINGS_DECLARATION,
|
|
13159
|
+
[POOL_GLOBAL_SETTINGS_SHARED_FILE_KEY]: POOL_SETTINGS_DECLARATION,
|
|
13137
13160
|
[TAKT_CONFIG_SHARED_FILE_KEY]: {
|
|
13138
13161
|
format: "yaml",
|
|
13139
13162
|
invalidRootPolicy: "error",
|
|
@@ -37119,6 +37142,363 @@ var OpencodeMcp = class OpencodeMcp extends ToolMcp {
|
|
|
37119
37142
|
}
|
|
37120
37143
|
};
|
|
37121
37144
|
//#endregion
|
|
37145
|
+
//#region src/constants/pool-paths.ts
|
|
37146
|
+
/**
|
|
37147
|
+
* Pool (Poolside's coding agent CLI) configuration-layout conventions.
|
|
37148
|
+
*
|
|
37149
|
+
* Pool reads `AGENTS.md` instruction files the same way the AGENTS.md standard
|
|
37150
|
+
* describes them: the personal `~/.config/poolside/AGENTS.md` (Pool itself
|
|
37151
|
+
* honours `XDG_CONFIG_HOME` upstream; rulesync writes only the XDG-default
|
|
37152
|
+
* path), the project-root `AGENTS.md`, and nested per-directory
|
|
37153
|
+
* `AGENTS.md` files from the repository root down through the working
|
|
37154
|
+
* directory, deeper files taking precedence. It skips ignored directories
|
|
37155
|
+
* (`.git/`, `node_modules/`, cache directories, repository ignore rules).
|
|
37156
|
+
*
|
|
37157
|
+
* Skills follow the Agent Skills format (`<name>/SKILL.md` bundles). Pool
|
|
37158
|
+
* scans `.poolside/skills/` (project) and `~/.config/poolside/skills/`
|
|
37159
|
+
* (global) plus the shared `.agents/skills/` / `~/.agents/skills/` roots and
|
|
37160
|
+
* the skill directories of other Agent Skills tools; rulesync writes only the
|
|
37161
|
+
* Pool-specific roots and leaves the shared ones to their own targets.
|
|
37162
|
+
*
|
|
37163
|
+
* @see https://docs.poolside.ai/agent-instructions
|
|
37164
|
+
* @see https://docs.poolside.ai/skills
|
|
37165
|
+
* @see https://github.com/poolsideai/pool
|
|
37166
|
+
*/
|
|
37167
|
+
/** Project-scoped `.poolside/` directory at the project root. */
|
|
37168
|
+
const POOL_DIR = ".poolside";
|
|
37169
|
+
/** Global config directory for Pool, relative to the home directory. */
|
|
37170
|
+
const POOL_GLOBAL_DIR = (0, node_path.join)(".config", "poolside");
|
|
37171
|
+
/** Project skills root, relative to the project root. */
|
|
37172
|
+
const POOL_SKILLS_DIR_PATH = (0, node_path.join)(POOL_DIR, "skills");
|
|
37173
|
+
/** Global skills root, relative to the home directory. */
|
|
37174
|
+
const POOL_GLOBAL_SKILLS_DIR_PATH = (0, node_path.join)(POOL_GLOBAL_DIR, "skills");
|
|
37175
|
+
/**
|
|
37176
|
+
* Pool's settings file name. MCP servers live under the top-level
|
|
37177
|
+
* `mcp_servers` key of `.poolside/settings.yaml` (project, committed) and
|
|
37178
|
+
* `~/.config/poolside/settings.yaml` (global); the untracked
|
|
37179
|
+
* `.poolside/settings.local.yaml` overlay is left to the user.
|
|
37180
|
+
*
|
|
37181
|
+
* @see https://docs.poolside.ai/mcp-servers
|
|
37182
|
+
* @see https://docs.poolside.ai/settings-file-reference
|
|
37183
|
+
*/
|
|
37184
|
+
const POOL_SETTINGS_FILE_NAME = "settings.yaml";
|
|
37185
|
+
/** Top-level key of Pool's settings file that holds the MCP server map. */
|
|
37186
|
+
const POOL_MCP_SERVERS_KEY = "mcp_servers";
|
|
37187
|
+
//#endregion
|
|
37188
|
+
//#region src/features/mcp/pool-mcp.ts
|
|
37189
|
+
/**
|
|
37190
|
+
* Single spelling of the settings.yaml codec/policy, matching the
|
|
37191
|
+
* `SHARED_CONFIG_OWNERSHIP` declaration for both scopes: fail closed on an
|
|
37192
|
+
* unparseable root rather than replacing the user's primary Pool settings with
|
|
37193
|
+
* generated output.
|
|
37194
|
+
*/
|
|
37195
|
+
function parsePoolSettings(fileContent, filePath) {
|
|
37196
|
+
return parseSharedConfig({
|
|
37197
|
+
format: "yaml",
|
|
37198
|
+
fileContent,
|
|
37199
|
+
filePath,
|
|
37200
|
+
invalidRootPolicy: "error"
|
|
37201
|
+
});
|
|
37202
|
+
}
|
|
37203
|
+
/**
|
|
37204
|
+
* The remote transports Pool's `transport.type` accepts. `streamable-http` is
|
|
37205
|
+
* the canonical rulesync name for what Pool calls `http`; everything else is
|
|
37206
|
+
* left to the caller to reject.
|
|
37207
|
+
*
|
|
37208
|
+
* @see https://docs.poolside.ai/mcp-servers
|
|
37209
|
+
*/
|
|
37210
|
+
function asPoolRemoteType(stated, url) {
|
|
37211
|
+
if (stated === "sse") return "sse";
|
|
37212
|
+
if (stated === "http" || stated === "streamable-http") return "http";
|
|
37213
|
+
if (stated === void 0) return /^wss?:\/\//i.test(url) ? void 0 : "http";
|
|
37214
|
+
}
|
|
37215
|
+
/**
|
|
37216
|
+
* Pool spells remote headers as a list of `"Name: value"` strings rather than
|
|
37217
|
+
* a map, so the canonical record is flattened at generate time and split back
|
|
37218
|
+
* at the first `:` on import. A list entry without a `:` names no header and
|
|
37219
|
+
* is dropped with a warning — silently losing what may be a mistyped auth
|
|
37220
|
+
* header would leave the canonical file short of one without a trace.
|
|
37221
|
+
*/
|
|
37222
|
+
function headersRecordToPoolList(headers) {
|
|
37223
|
+
return Object.entries(headers).map(([name, value]) => `${name}: ${value}`);
|
|
37224
|
+
}
|
|
37225
|
+
function poolHeadersListToRecord(serverName, headers) {
|
|
37226
|
+
if (!isStringArray$2(headers)) return void 0;
|
|
37227
|
+
const result = {};
|
|
37228
|
+
for (const entry of headers) {
|
|
37229
|
+
const separator = entry.indexOf(":");
|
|
37230
|
+
const name = separator > 0 ? entry.slice(0, separator).trim() : "";
|
|
37231
|
+
if (name === "" || PROTOTYPE_POLLUTION_KEYS.has(name)) {
|
|
37232
|
+
warnWithFallback(void 0, `Ignored malformed header ${quoteValueForWarning(entry)} in Pool MCP server ${quoteValueForWarning(serverName)}: expected "Name: value"`);
|
|
37233
|
+
continue;
|
|
37234
|
+
}
|
|
37235
|
+
result[name] = entry.slice(separator + 1).trim();
|
|
37236
|
+
}
|
|
37237
|
+
return Object.keys(result).length > 0 ? result : void 0;
|
|
37238
|
+
}
|
|
37239
|
+
/**
|
|
37240
|
+
* Pool's `deny`/`enabled_tools` entries are glob patterns, while the canonical
|
|
37241
|
+
* `enabledTools`/`disabledTools` lists are literal tool names that the other
|
|
37242
|
+
* targets match verbatim. A pattern therefore imports as a name that matches
|
|
37243
|
+
* nothing elsewhere — a `deny` that quietly stops denying is the case worth
|
|
37244
|
+
* calling out — so it is copied as-is but warned about. `allow` is exempt: it
|
|
37245
|
+
* imports to the Pool-only `poolAllow`, where globs are exactly what Pool
|
|
37246
|
+
* expects and no other tool ever reads them.
|
|
37247
|
+
*/
|
|
37248
|
+
const GLOB_METACHARACTERS = /[*?[]/;
|
|
37249
|
+
/** Patterns named in the glob warning before the rest collapse to `(+N more)`. */
|
|
37250
|
+
const MAX_LISTED_GLOB_PATTERNS = 10;
|
|
37251
|
+
function importPoolToolList({ serverName, poolKey, value, warnOnGlobs }) {
|
|
37252
|
+
if (!isStringArray$2(value)) {
|
|
37253
|
+
warnWithFallback(void 0, `Ignored malformed value for ${poolKey} in Pool MCP server ${quoteValueForWarning(serverName)}: expected a list of strings`);
|
|
37254
|
+
return;
|
|
37255
|
+
}
|
|
37256
|
+
if (!warnOnGlobs) return value;
|
|
37257
|
+
const patterns = value.filter((entry) => GLOB_METACHARACTERS.test(entry));
|
|
37258
|
+
if (patterns.length > 0) {
|
|
37259
|
+
const listed = patterns.slice(0, MAX_LISTED_GLOB_PATTERNS).map(quoteValueForWarning);
|
|
37260
|
+
const overflow = patterns.length - listed.length;
|
|
37261
|
+
const shown = overflow > 0 ? `${listed.join(", ")} (+${overflow} more)` : listed.join(", ");
|
|
37262
|
+
warnWithFallback(void 0, `${poolKey} in Pool MCP server ${quoteValueForWarning(serverName)} contains glob patterns (${shown}); other tools match the imported tool names literally`);
|
|
37263
|
+
}
|
|
37264
|
+
return value;
|
|
37265
|
+
}
|
|
37266
|
+
/**
|
|
37267
|
+
* Pool's `transport` block for a remote server, or `null` (after a warning)
|
|
37268
|
+
* when the server has no url or names a transport Pool cannot reach.
|
|
37269
|
+
*/
|
|
37270
|
+
function toPoolTransport(name, config, logger) {
|
|
37271
|
+
const url = resolveRemoteMcpUrl(config);
|
|
37272
|
+
if (!url) return warnAndSkipMcpServer({
|
|
37273
|
+
toolName: "Pool",
|
|
37274
|
+
serverName: name,
|
|
37275
|
+
reason: "a remote transport without a url",
|
|
37276
|
+
logger
|
|
37277
|
+
});
|
|
37278
|
+
const stated = config.type ?? config.transport;
|
|
37279
|
+
const type = asPoolRemoteType(stated, url);
|
|
37280
|
+
if (type === void 0) return warnAndSkipMcpServer({
|
|
37281
|
+
toolName: "Pool",
|
|
37282
|
+
serverName: name,
|
|
37283
|
+
reason: stated === void 0 ? "a WebSocket url, which Pool's remote transports (http and sse) cannot reach" : `the "${stated}" transport, which Pool does not offer for remote servers (only http and sse)`,
|
|
37284
|
+
logger
|
|
37285
|
+
});
|
|
37286
|
+
const transport = {
|
|
37287
|
+
type,
|
|
37288
|
+
url
|
|
37289
|
+
};
|
|
37290
|
+
if (config.headers && Object.keys(config.headers).length > 0) transport.headers = headersRecordToPoolList(config.headers);
|
|
37291
|
+
return transport;
|
|
37292
|
+
}
|
|
37293
|
+
/**
|
|
37294
|
+
* The transport-specific part of a Pool server entry: a `transport` block for
|
|
37295
|
+
* remote servers, `command`/`args`/`cwd` for stdio ones. `null` (after a
|
|
37296
|
+
* warning) when the server cannot be written.
|
|
37297
|
+
*/
|
|
37298
|
+
function toPoolTransportFields(name, config, logger) {
|
|
37299
|
+
if (isRemoteMcpServer(config)) {
|
|
37300
|
+
const transport = toPoolTransport(name, config, logger);
|
|
37301
|
+
return transport === null ? null : { transport };
|
|
37302
|
+
}
|
|
37303
|
+
const [command, ...args] = resolveLocalMcpCommand(config);
|
|
37304
|
+
if (!command) return warnAndSkipMcpServer({
|
|
37305
|
+
toolName: "Pool",
|
|
37306
|
+
serverName: name,
|
|
37307
|
+
reason: "a stdio transport without a command",
|
|
37308
|
+
logger
|
|
37309
|
+
});
|
|
37310
|
+
const fields = {
|
|
37311
|
+
command,
|
|
37312
|
+
args
|
|
37313
|
+
};
|
|
37314
|
+
if (config.cwd) fields.cwd = config.cwd;
|
|
37315
|
+
return fields;
|
|
37316
|
+
}
|
|
37317
|
+
/**
|
|
37318
|
+
* The fields shared by stdio and remote entries. Tool filters map onto Pool's
|
|
37319
|
+
* own switches — `enabledTools` becomes `enabled_tools` (the tools Pool
|
|
37320
|
+
* exposes at all) and `disabledTools` becomes `deny` (patterns agents may
|
|
37321
|
+
* never use); the Pool-only approval allowlist is authored as `poolAllow` and
|
|
37322
|
+
* written as `allow`. `disabled: true` is spelled the same on both sides.
|
|
37323
|
+
*/
|
|
37324
|
+
function toPoolCommonFields(config) {
|
|
37325
|
+
const fields = {};
|
|
37326
|
+
if (config.env && Object.keys(config.env).length > 0) fields.env = config.env;
|
|
37327
|
+
if (config.enabledTools && config.enabledTools.length > 0) fields.enabled_tools = config.enabledTools;
|
|
37328
|
+
if (config.poolAllow && config.poolAllow.length > 0) fields.allow = config.poolAllow;
|
|
37329
|
+
if (config.disabledTools && config.disabledTools.length > 0) fields.deny = config.disabledTools;
|
|
37330
|
+
if (config.disabled === true) fields.disabled = true;
|
|
37331
|
+
return fields;
|
|
37332
|
+
}
|
|
37333
|
+
/**
|
|
37334
|
+
* Convert canonical rulesync servers to Pool's native `mcp_servers` shape:
|
|
37335
|
+
* stdio servers carry `command`/`args`/`cwd`/`env`, remote servers carry a
|
|
37336
|
+
* `transport` block (`type` of `http` or `sse`, `url`, optional `headers`
|
|
37337
|
+
* list) plus optional `env`; see `toPoolCommonFields` for the tool filters.
|
|
37338
|
+
*
|
|
37339
|
+
* @see https://docs.poolside.ai/mcp-servers
|
|
37340
|
+
*/
|
|
37341
|
+
function convertToPoolFormat(mcpServers, logger) {
|
|
37342
|
+
const result = {};
|
|
37343
|
+
for (const [name, config] of Object.entries(mcpServers)) {
|
|
37344
|
+
if (PROTOTYPE_POLLUTION_KEYS.has(name)) continue;
|
|
37345
|
+
if (!isRecord$1(config)) continue;
|
|
37346
|
+
if (declaresNoTransport(config)) {
|
|
37347
|
+
warnAndSkipMcpServer({
|
|
37348
|
+
toolName: "Pool",
|
|
37349
|
+
serverName: name,
|
|
37350
|
+
reason: "no transport",
|
|
37351
|
+
logger
|
|
37352
|
+
});
|
|
37353
|
+
continue;
|
|
37354
|
+
}
|
|
37355
|
+
const transportFields = toPoolTransportFields(name, config, logger);
|
|
37356
|
+
if (transportFields === null) continue;
|
|
37357
|
+
result[name] = {
|
|
37358
|
+
...transportFields,
|
|
37359
|
+
...toPoolCommonFields(config)
|
|
37360
|
+
};
|
|
37361
|
+
}
|
|
37362
|
+
return result;
|
|
37363
|
+
}
|
|
37364
|
+
const POOL_TO_CANONICAL_TOOL_LIST_KEYS = {
|
|
37365
|
+
enabled_tools: "enabledTools",
|
|
37366
|
+
deny: "disabledTools",
|
|
37367
|
+
allow: "poolAllow"
|
|
37368
|
+
};
|
|
37369
|
+
/**
|
|
37370
|
+
* Convert Pool's native `mcp_servers` shape back to canonical rulesync
|
|
37371
|
+
* servers: the `transport` block is flattened to `type`/`url`/`headers`,
|
|
37372
|
+
* `enabled_tools` maps back to `enabledTools`, `deny` to `disabledTools` and
|
|
37373
|
+
* `allow` to the namespaced `poolAllow` (see `McpServerSchema`). Unknown keys
|
|
37374
|
+
* pass through untouched so an import keeps whatever a hand-authored entry
|
|
37375
|
+
* declared; generation back out is a whitelist, so only the keys
|
|
37376
|
+
* `convertToPoolFormat` writes are re-emitted.
|
|
37377
|
+
*/
|
|
37378
|
+
function convertFromPoolFormat(poolServers) {
|
|
37379
|
+
const result = {};
|
|
37380
|
+
for (const [name, config] of Object.entries(poolServers)) {
|
|
37381
|
+
if (PROTOTYPE_POLLUTION_KEYS.has(name) || !isRecord$1(config)) continue;
|
|
37382
|
+
const converted = {};
|
|
37383
|
+
for (const [key, value] of Object.entries(config)) {
|
|
37384
|
+
if (PROTOTYPE_POLLUTION_KEYS.has(key)) continue;
|
|
37385
|
+
if (key === "transport") {
|
|
37386
|
+
if (!isRecord$1(value)) continue;
|
|
37387
|
+
if (typeof value.type === "string") converted.type = value.type;
|
|
37388
|
+
if (typeof value.url === "string") converted.url = value.url;
|
|
37389
|
+
const headers = poolHeadersListToRecord(name, value.headers);
|
|
37390
|
+
if (headers) converted.headers = headers;
|
|
37391
|
+
continue;
|
|
37392
|
+
}
|
|
37393
|
+
const canonicalKey = Object.hasOwn(POOL_TO_CANONICAL_TOOL_LIST_KEYS, key) ? POOL_TO_CANONICAL_TOOL_LIST_KEYS[key] : void 0;
|
|
37394
|
+
if (canonicalKey) {
|
|
37395
|
+
const list = importPoolToolList({
|
|
37396
|
+
serverName: name,
|
|
37397
|
+
poolKey: key,
|
|
37398
|
+
value,
|
|
37399
|
+
warnOnGlobs: canonicalKey !== "poolAllow"
|
|
37400
|
+
});
|
|
37401
|
+
if (list) converted[canonicalKey] = list;
|
|
37402
|
+
continue;
|
|
37403
|
+
}
|
|
37404
|
+
converted[key] = value;
|
|
37405
|
+
}
|
|
37406
|
+
result[name] = converted;
|
|
37407
|
+
}
|
|
37408
|
+
return result;
|
|
37409
|
+
}
|
|
37410
|
+
/**
|
|
37411
|
+
* Pool MCP servers.
|
|
37412
|
+
*
|
|
37413
|
+
* Pool reads MCP servers from the `mcp_servers` block of its settings file:
|
|
37414
|
+
* `<project>/.poolside/settings.yaml` at project scope (shared and committed)
|
|
37415
|
+
* and `~/.config/poolside/settings.yaml` at user scope. The untracked
|
|
37416
|
+
* `.poolside/settings.local.yaml` overlay, which Pool layers on top of both,
|
|
37417
|
+
* is left to the user. Every other top-level settings key is preserved and
|
|
37418
|
+
* the file is never deleted.
|
|
37419
|
+
*
|
|
37420
|
+
* @see https://docs.poolside.ai/mcp-servers
|
|
37421
|
+
* @see https://docs.poolside.ai/settings-file-reference
|
|
37422
|
+
*/
|
|
37423
|
+
var PoolMcp = class PoolMcp extends ToolMcp {
|
|
37424
|
+
settings;
|
|
37425
|
+
constructor(params) {
|
|
37426
|
+
super(params);
|
|
37427
|
+
this.settings = parsePoolSettings(this.fileContent ?? "", (0, node_path.join)(this.relativeDirPath, this.relativeFilePath));
|
|
37428
|
+
}
|
|
37429
|
+
getSettings() {
|
|
37430
|
+
return this.settings;
|
|
37431
|
+
}
|
|
37432
|
+
isDeletable() {
|
|
37433
|
+
return false;
|
|
37434
|
+
}
|
|
37435
|
+
static getSettablePaths({ global = false } = {}) {
|
|
37436
|
+
return {
|
|
37437
|
+
relativeDirPath: global ? POOL_GLOBAL_DIR : POOL_DIR,
|
|
37438
|
+
relativeFilePath: POOL_SETTINGS_FILE_NAME
|
|
37439
|
+
};
|
|
37440
|
+
}
|
|
37441
|
+
static async fromFile({ outputRoot = process.cwd(), validate = true, global = false }) {
|
|
37442
|
+
const paths = this.getSettablePaths({ global });
|
|
37443
|
+
const fileContent = await readFileContentOrNull((0, node_path.join)(outputRoot, paths.relativeDirPath, paths.relativeFilePath)) ?? "";
|
|
37444
|
+
return new PoolMcp({
|
|
37445
|
+
outputRoot,
|
|
37446
|
+
relativeDirPath: paths.relativeDirPath,
|
|
37447
|
+
relativeFilePath: paths.relativeFilePath,
|
|
37448
|
+
fileContent,
|
|
37449
|
+
validate,
|
|
37450
|
+
global
|
|
37451
|
+
});
|
|
37452
|
+
}
|
|
37453
|
+
static async fromRulesyncMcp({ outputRoot = process.cwd(), rulesyncMcp, validate = true, global = false, logger }) {
|
|
37454
|
+
const paths = this.getSettablePaths({ global });
|
|
37455
|
+
const filePath = (0, node_path.join)(outputRoot, paths.relativeDirPath, paths.relativeFilePath);
|
|
37456
|
+
const existingContent = await readFileContentOrNull(filePath) ?? "";
|
|
37457
|
+
const converted = convertToPoolFormat(Object.fromEntries(Object.entries(rulesyncMcp.getMcpServers()).map(([serverName, serverConfig]) => {
|
|
37458
|
+
const rawServer = rulesyncMcp.getRawMcpServer(serverName);
|
|
37459
|
+
const poolAllow = isRecord$1(rawServer) ? rawServer.poolAllow : void 0;
|
|
37460
|
+
return [serverName, {
|
|
37461
|
+
...serverConfig,
|
|
37462
|
+
...isStringArray$2(poolAllow) && { poolAllow }
|
|
37463
|
+
}];
|
|
37464
|
+
})), logger);
|
|
37465
|
+
return new PoolMcp({
|
|
37466
|
+
outputRoot,
|
|
37467
|
+
relativeDirPath: paths.relativeDirPath,
|
|
37468
|
+
relativeFilePath: paths.relativeFilePath,
|
|
37469
|
+
fileContent: applySharedConfigPatch({
|
|
37470
|
+
fileKey: sharedConfigFileKey(paths),
|
|
37471
|
+
feature: "mcp",
|
|
37472
|
+
existingContent,
|
|
37473
|
+
patch: { [POOL_MCP_SERVERS_KEY]: converted },
|
|
37474
|
+
filePath
|
|
37475
|
+
}),
|
|
37476
|
+
validate,
|
|
37477
|
+
global
|
|
37478
|
+
});
|
|
37479
|
+
}
|
|
37480
|
+
toRulesyncMcp() {
|
|
37481
|
+
const converted = convertFromPoolFormat(isRecord$1(this.settings["mcp_servers"]) ? this.settings[POOL_MCP_SERVERS_KEY] : {});
|
|
37482
|
+
return this.toRulesyncMcpDefault({ fileContent: JSON.stringify({ mcpServers: converted }, null, 2) });
|
|
37483
|
+
}
|
|
37484
|
+
validate() {
|
|
37485
|
+
return {
|
|
37486
|
+
success: true,
|
|
37487
|
+
error: null
|
|
37488
|
+
};
|
|
37489
|
+
}
|
|
37490
|
+
static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath, global = false }) {
|
|
37491
|
+
return new PoolMcp({
|
|
37492
|
+
outputRoot,
|
|
37493
|
+
relativeDirPath,
|
|
37494
|
+
relativeFilePath,
|
|
37495
|
+
fileContent: "",
|
|
37496
|
+
validate: false,
|
|
37497
|
+
global
|
|
37498
|
+
});
|
|
37499
|
+
}
|
|
37500
|
+
};
|
|
37501
|
+
//#endregion
|
|
37122
37502
|
//#region src/features/mcp/qwencode-mcp.ts
|
|
37123
37503
|
/**
|
|
37124
37504
|
* Map rulesync's canonical per-server tool filters to Qwen Code's field names.
|
|
@@ -39566,6 +39946,15 @@ const toolMcpFactories = /* @__PURE__ */ new Map([
|
|
|
39566
39946
|
supportsDisabledTools: true
|
|
39567
39947
|
}
|
|
39568
39948
|
}],
|
|
39949
|
+
["pool", {
|
|
39950
|
+
class: PoolMcp,
|
|
39951
|
+
meta: {
|
|
39952
|
+
supportsProject: true,
|
|
39953
|
+
supportsGlobal: true,
|
|
39954
|
+
supportsEnabledTools: true,
|
|
39955
|
+
supportsDisabledTools: true
|
|
39956
|
+
}
|
|
39957
|
+
}],
|
|
39569
39958
|
["qwencode", {
|
|
39570
39959
|
class: QwencodeMcp,
|
|
39571
39960
|
meta: {
|
|
@@ -56787,7 +57176,7 @@ const AmpSkillFrontmatterSchema = zod_mini.z.looseObject({
|
|
|
56787
57176
|
* Amp natively reads Agent Skills following the open standard: a directory with a
|
|
56788
57177
|
* `SKILL.md` carrying `name`/`description` frontmatter, scoped to the project
|
|
56789
57178
|
* (`.agents/skills/`) and user-wide (`~/.config/agents/skills/`).
|
|
56790
|
-
* @see https://ampcode.com/
|
|
57179
|
+
* @see https://ampcode.com/docs/customize/skills
|
|
56791
57180
|
*/
|
|
56792
57181
|
var AmpSkill = class AmpSkill extends ToolSkill {
|
|
56793
57182
|
constructor({ outputRoot = process.cwd(), relativeDirPath = AMP_SKILLS_PROJECT_DIR, dirName, frontmatter, body, otherFiles = [], validate = true, global = false }) {
|
|
@@ -61756,37 +62145,6 @@ var PiSkill = class PiSkill extends ToolSkill {
|
|
|
61756
62145
|
}
|
|
61757
62146
|
};
|
|
61758
62147
|
//#endregion
|
|
61759
|
-
//#region src/constants/pool-paths.ts
|
|
61760
|
-
/**
|
|
61761
|
-
* Pool (Poolside's coding agent CLI) configuration-layout conventions.
|
|
61762
|
-
*
|
|
61763
|
-
* Pool reads `AGENTS.md` instruction files the same way the AGENTS.md standard
|
|
61764
|
-
* describes them: the personal `~/.config/poolside/AGENTS.md` (Pool itself
|
|
61765
|
-
* honours `XDG_CONFIG_HOME` upstream; rulesync writes only the XDG-default
|
|
61766
|
-
* path), the project-root `AGENTS.md`, and nested per-directory
|
|
61767
|
-
* `AGENTS.md` files from the repository root down through the working
|
|
61768
|
-
* directory, deeper files taking precedence. It skips ignored directories
|
|
61769
|
-
* (`.git/`, `node_modules/`, cache directories, repository ignore rules).
|
|
61770
|
-
*
|
|
61771
|
-
* Skills follow the Agent Skills format (`<name>/SKILL.md` bundles). Pool
|
|
61772
|
-
* scans `.poolside/skills/` (project) and `~/.config/poolside/skills/`
|
|
61773
|
-
* (global) plus the shared `.agents/skills/` / `~/.agents/skills/` roots and
|
|
61774
|
-
* the skill directories of other Agent Skills tools; rulesync writes only the
|
|
61775
|
-
* Pool-specific roots and leaves the shared ones to their own targets.
|
|
61776
|
-
*
|
|
61777
|
-
* @see https://docs.poolside.ai/agent-instructions
|
|
61778
|
-
* @see https://docs.poolside.ai/skills
|
|
61779
|
-
* @see https://github.com/poolsideai/pool
|
|
61780
|
-
*/
|
|
61781
|
-
/** Project-scoped `.poolside/` directory at the project root. */
|
|
61782
|
-
const POOL_DIR = ".poolside";
|
|
61783
|
-
/** Global config directory for Pool, relative to the home directory. */
|
|
61784
|
-
const POOL_GLOBAL_DIR = (0, node_path.join)(".config", "poolside");
|
|
61785
|
-
/** Project skills root, relative to the project root. */
|
|
61786
|
-
const POOL_SKILLS_DIR_PATH = (0, node_path.join)(POOL_DIR, "skills");
|
|
61787
|
-
/** Global skills root, relative to the home directory. */
|
|
61788
|
-
const POOL_GLOBAL_SKILLS_DIR_PATH = (0, node_path.join)(POOL_GLOBAL_DIR, "skills");
|
|
61789
|
-
//#endregion
|
|
61790
62148
|
//#region src/features/skills/pool-skill.ts
|
|
61791
62149
|
const PoolSkillFrontmatterSchema = zod_mini.z.looseObject({
|
|
61792
62150
|
name: zod_mini.z.string(),
|
package/dist/index.cjs
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
2
|
-
const require_import = require("./import-
|
|
2
|
+
const require_import = require("./import-DKBaTqsY.cjs");
|
|
3
3
|
//#region src/index.ts
|
|
4
4
|
async function generate(options = {}) {
|
|
5
5
|
const { silent = true, verbose = false, ...rest } = options;
|
package/dist/index.d.cts
CHANGED
|
@@ -14,7 +14,7 @@ declare const FeatureSchema: z.ZodMiniUnion<readonly [z.ZodMiniEnum<{
|
|
|
14
14
|
type Feature = z.infer<typeof FeatureSchema>;
|
|
15
15
|
//#endregion
|
|
16
16
|
//#region src/types/tool-target-tuples.d.ts
|
|
17
|
-
declare const ALL_TOOL_TARGET_TUPLES: readonly [readonly ["agentsmd", "aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "augmentcode-legacy", "bob", "claudecode", "claudecode-legacy", "cline", "codebuddy", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "junie", "kilo", "kimi-code", "kiro", "kiro-cli", "kiro-ide", "musecode", "opencode", "pi", "pool", "qwencode", "reasonix", "replit", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode", "dsh"], readonly ["aiassistant", "antigravity-cli", "augmentcode", "bob", "claudecode", "claudecode-legacy", "cline", "continue", "crush", "cursor", "hermesagent", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "qwencode", "reasonix", "roo", "tabnine", "devin", "vibe", "warp", "zed", "zoocode"], readonly ["aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "kilo", "kiro", "kiro-cli", "kiro-ide", "junie", "musecode", "opencode", "qwencode", "reasonix", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode"], readonly ["agentsmd", "antigravity-cli", "antigravity-ide", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "cursor", "factorydroid", "goose", "grokcli", "hermesagent", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "opencode", "pi", "qwencode", "reasonix", "roo", "zoocode", "rovodev", "tabnine", "takt", "devin", "warp", "zcode"], readonly ["kilo", "agentsmd", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "copilot", "copilotcli", "cortexcode", "cursor", "deepagents", "devin", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kiro", "kiro-cli", "kiro-ide", "opencode", "qwencode", "reasonix", "roo", "zoocode", "rovodev", "tabnine", "takt", "vibe", "zcode"], readonly ["agentsmd", "agentsskills", "aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "musecode", "opencode", "pi", "pool", "qwencode", "reasonix", "replit", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode", "dsh"], readonly ["amp", "cline", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "kilo", "cursor", "claudecode", "claudecode-plugin", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "opencode", "pi", "factorydroid", "goose", "hermesagent", "kimi-code", "deepagents", "kiro", "kiro-cli", "kiro-ide", "devin", "augmentcode", "bob", "junie", "vibe", "qwencode", "reasonix", "tabnine", "grokcli", "zcode"], readonly ["amp", "antigravity-cli", "antigravity-ide", "augmentcode", "claudecode", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "crush", "cursor", "deepagents", "devin", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "opencode", "pi", "qwencode", "reasonix", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "zed", "zoocode"], readonly ["amp", "augmentcode", "cursor", "factorydroid", "hermesagent", "rovodev", "takt"]];
|
|
17
|
+
declare const ALL_TOOL_TARGET_TUPLES: readonly [readonly ["agentsmd", "aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "augmentcode-legacy", "bob", "claudecode", "claudecode-legacy", "cline", "codebuddy", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "junie", "kilo", "kimi-code", "kiro", "kiro-cli", "kiro-ide", "musecode", "opencode", "pi", "pool", "qwencode", "reasonix", "replit", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode", "dsh"], readonly ["aiassistant", "antigravity-cli", "augmentcode", "bob", "claudecode", "claudecode-legacy", "cline", "continue", "crush", "cursor", "hermesagent", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "qwencode", "reasonix", "roo", "tabnine", "devin", "vibe", "warp", "zed", "zoocode"], readonly ["aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "kilo", "kiro", "kiro-cli", "kiro-ide", "junie", "musecode", "opencode", "pool", "qwencode", "reasonix", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode"], readonly ["agentsmd", "antigravity-cli", "antigravity-ide", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "cursor", "factorydroid", "goose", "grokcli", "hermesagent", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "opencode", "pi", "qwencode", "reasonix", "roo", "zoocode", "rovodev", "tabnine", "takt", "devin", "warp", "zcode"], readonly ["kilo", "agentsmd", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "copilot", "copilotcli", "cortexcode", "cursor", "deepagents", "devin", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kiro", "kiro-cli", "kiro-ide", "opencode", "qwencode", "reasonix", "roo", "zoocode", "rovodev", "tabnine", "takt", "vibe", "zcode"], readonly ["agentsmd", "agentsskills", "aiassistant", "amp", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "augmentcode", "bob", "claudecode", "claudecode-plugin", "claudecode-legacy", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "cursor", "deepagents", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "musecode", "opencode", "pi", "pool", "qwencode", "reasonix", "replit", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "devin", "zcode", "zed", "zoocode", "dsh"], readonly ["amp", "cline", "antigravity-cli", "antigravity-ide", "antigravity-plugin", "kilo", "cursor", "claudecode", "claudecode-plugin", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "cortexcode", "crush", "opencode", "pi", "factorydroid", "goose", "hermesagent", "kimi-code", "deepagents", "kiro", "kiro-cli", "kiro-ide", "devin", "augmentcode", "bob", "junie", "vibe", "qwencode", "reasonix", "tabnine", "grokcli", "zcode"], readonly ["amp", "antigravity-cli", "antigravity-ide", "augmentcode", "claudecode", "cline", "codexcli", "commandcode", "continue", "copilot", "copilotcli", "crush", "cursor", "deepagents", "devin", "factorydroid", "goose", "grokcli", "hermesagent", "kimi-code", "junie", "kilo", "kiro", "kiro-cli", "kiro-ide", "opencode", "pi", "qwencode", "reasonix", "roo", "rovodev", "tabnine", "takt", "vibe", "warp", "zed", "zoocode"], readonly ["amp", "augmentcode", "cursor", "factorydroid", "hermesagent", "rovodev", "takt"]];
|
|
18
18
|
//#endregion
|
|
19
19
|
//#region src/types/tool-targets.d.ts
|
|
20
20
|
type AllToolTarget = (typeof ALL_TOOL_TARGET_TUPLES)[number][number];
|
package/dist/index.d.cts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/features.ts","../src/types/tool-target-tuples.ts","../src/types/tool-targets.ts","../src/lib/convert.ts","../src/types/ai-dir.ts","../src/features/skills/rulesync-skill.ts","../src/lib/generate.ts","../src/lib/import.ts","../src/index.ts"],"mappings":";;qBAaa;cA+BP,eAAa,EAAA,uBAAA,EAAA;;;;;;;;;IAAoE,EAAA;KAE3E,UAAU,EAAE,aAAa;;;
|
|
1
|
+
{"version":3,"file":"index.d.cts","names":[],"sources":["../src/types/features.ts","../src/types/tool-target-tuples.ts","../src/types/tool-targets.ts","../src/lib/convert.ts","../src/types/ai-dir.ts","../src/features/skills/rulesync-skill.ts","../src/lib/generate.ts","../src/lib/import.ts","../src/index.ts"],"mappings":";;qBAaa;cA+BP,eAAa,EAAA,uBAAA,EAAA;;;;;;;;;IAAoE,EAAA;KAE3E,UAAU,EAAE,aAAa;;;cCuTxB;;;KC3VR,wBAAwB;qBAEhB,4BAA4B,kBAAkB;cAM9C,kBAAgB,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;KAEjB,aAAa,EAAE,aAAa;;;KCH5B;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;KCWU;EAEN;EACA;;EAGA;EACA,OAAO;;KAqBD;EACV;EACA,YAAY;;;;;;;;EAQZ;;;;;;;EAOA;;KAmnBU;EACV;EACA;EACA;EACA;IACE;IACA;IACA,cAAc;;EAEhB,aAAa;EACb;;KAGU,qBAAqB,KAC/B;uBAIoB;;;;qBAID;;;;qBAKA;;;;qBAKA;;;;YAKT;IACR;IACA;IACA,cAAc;;;;;YAMN,YAAY;;;;qBAKH;EAEnB,cACE,YACA,iBACA,SACA,UACA,YACA,UACC;SAyBU,QAAQ,SAAS,qBAAqB,QAAQ;EAI3D;EAIA;EAIA;;;;;;;;;;;;;;;;;;;;;EAwBA;;;;;;;;;;;;;EAgBA;EAqBA;EAqBA;IAEM;IACA;IACA,cAAc;;EAMpB,iBAAiB;;;;EAOjB;EAIA;EAIA,YAAY,cAAc,cAAc,cAAc;;;;;;;;;;iBAajC;;iBAWN;;;;;;iBASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAkCA;iBA8CM;;;;;iBA6GN;;;;;;;iBAsDM;;;;;;;;;;;;;;;;;;;;;;;;;;mBA+FE,kBACrB,oBACA,yBACA,iBACA,0BACC,QAAQ;WAwGF,YAAY;;;;cC70CjB,wCAAsC,EAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsX1C,EAAA,KAAA;KAMU;EACV;EACA;EACA;EACA;EACA;EACA;EACA,yBAAyB;EACzB,WAAW;EACX;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ;IACR;IACA;IACA;IACA;IACA;IACA;IACA,yBAAyB;IACzB,WAAW;;EAEb;IACE;IACA;IACA;;EAEF;IACE;IACA,WAAW;IACX;IACA;;EAEF;IACE;IACA;MACE;MACA;MACA;MACA;MACA;MACA;;IAEF;MACE;;IAEF;MACE,QAAQ;QACN;QACA;QACA;QACA;QACA;;;;EAIN;IACE;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;;EAEF;IACE;IACA,yBAAyB;IACzB,WAAW;;EAEb;IACE;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA,yBAAyB;IACzB,WAAW;;EAEb;IACE;;EAEF;IACE;IACA;IACA,yBAAyB;IACzB,WAAW;;EAEb,MAAM;EACN,MAAM;EACN,QAAQ;EACR,MAAM;EACN;IACE;IACA;IACA;IACA;IACA;IACA,cAAc;IACd;;EAEF;IACE;IACA;IACA;IACA;IACA;IACA;IACA,QAAQ;IACR;IACA;;EAEF;IACE;IACA;IACA,yBAAyB;IACzB,WAAW;;EAEb;IACE;IACA;IACA;IACA;IACA;IACA,WAAW;;EAEb;IACE;IACA;IACA;IACA;IACA;IACA;IACA;IACA;;EAEF;IACE;IACA;IACA;IACA;;EAEF;IACE;IACA,yBAAyB;IACzB,WAAW;IACX;;EAEF,cAAc;EACd;IACE;IACA,yBAAyB;IACzB,WAAW;IACX;IACA;;EAEF,cAAc;EACd,aAAa;EACb,WAAW;EACX,UAAU;EACV;IACE;IACA;;EAEF;IACE;IACA;IACA;IACA,yBAAyB;IACzB,WAAW;;EAEb;IACE;IACA;IACA,WAAW;;;KAKH,2BAA2B,EAAE,aAAa;KAO1C;EACV;EACA;EACA;EACA,aAAa;EACb;EACA,aAAa;EACb;EACA;;KAGU;EACV;;KAGU;EACV;EACA;EACA;EACA;;;;;;cAOW,sBAAsB;EACjC,cACE,YACA,iBACA,SACA,aACA,MACA,YACA,UACA,UACC;SAsBI,oBAAoB;EAU3B,kBAAkB;EAQlB;EAIA,YAAY;SAcC,UACX,YACA,iBACA,SACA,UACC,6BAA6B,QAAQ;;;;KCvqB9B;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA,QAAQ;EACR;;;;;;EAMA;;;;;EAKA,0BAA0B;;KA0ZhB;;;KCrbA;EACV;EACA;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;;;KC/CG;EACH;EACA;EACA;EACA;;YAGU,kBAAkB;EAC5B,UAAU;EACV,WAAW;EACX;;;;;;;;;;;;;EAaA;;;;;;;;EAQA;EACA;EACA;EACA;EACA;EACA;EACA;;YAGU,gBAAgB;EAC1B,QAAQ;EACR,WAAW;;YAGD,iBAAiB;EAC3B,MAAM;EACN,IAAI;EACJ,WAAW;EACX;;wBAGoB,SAAS,UAAS,kBAAuB,QAAQ;wBAyBjD,eAAe,SAAS,gBAAgB,QAAQ;wBAehD,gBAAgB,SAAS,iBAAiB,QAAQ"}
|