rulesync 16.26.1 → 16.28.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 -0
- package/dist/cli/index.cjs +131 -38
- package/dist/cli/index.js +131 -38
- package/dist/cli/index.js.map +1 -1
- package/dist/{import-BNh_gCUr.js → import-CwS7XtJP.js} +275 -29
- package/dist/import-CwS7XtJP.js.map +1 -0
- package/dist/{import-LjMdFijG.cjs → import-hiWvR9cE.cjs} +291 -45
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +3 -1
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.ts +3 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/package.json +14 -14
- package/dist/import-BNh_gCUr.js.map +0 -1
|
@@ -504,7 +504,8 @@ const rulesProcessorToolTargetTuple = [
|
|
|
504
504
|
"devin",
|
|
505
505
|
"zcode",
|
|
506
506
|
"zed",
|
|
507
|
-
"zoocode"
|
|
507
|
+
"zoocode",
|
|
508
|
+
"pool"
|
|
508
509
|
];
|
|
509
510
|
const ignoreProcessorToolTargetTuple = [
|
|
510
511
|
"aiassistant",
|
|
@@ -22571,6 +22572,66 @@ const DEEPAGENTS_MCP_FILE_NAME = ".mcp.json";
|
|
|
22571
22572
|
const DEEPAGENTS_CONFIG_FILE_NAME = "config.toml";
|
|
22572
22573
|
const DEEPAGENTS_HOOKS_FILE_NAME = "hooks.json";
|
|
22573
22574
|
//#endregion
|
|
22575
|
+
//#region src/utils/deepagents.ts
|
|
22576
|
+
const DEEPAGENTS_HOME_ENV = "DEEPAGENTS_HOME";
|
|
22577
|
+
/**
|
|
22578
|
+
* The profile root dcode reads when `DEEPAGENTS_HOME` is set, or `undefined`
|
|
22579
|
+
* when the default `~/.deepagents/` applies.
|
|
22580
|
+
*
|
|
22581
|
+
* Upstream captures the variable once at launch and accepts exactly two
|
|
22582
|
+
* spellings: an absolute path, or one beginning with `~/` (expanded against the
|
|
22583
|
+
* launch home). Anything else — a bare `~`, a `~user` form, a relative path —
|
|
22584
|
+
* makes dcode refuse to start, so the same value is rejected here rather than
|
|
22585
|
+
* resolved against the working directory: there is no location such a value
|
|
22586
|
+
* could name that dcode would read.
|
|
22587
|
+
*
|
|
22588
|
+
* @see https://github.com/langchain-ai/deepagents/blob/main/libs/code/deepagents_code/_paths.py
|
|
22589
|
+
*/
|
|
22590
|
+
function getDeepagentsHome() {
|
|
22591
|
+
const configured = process.env[DEEPAGENTS_HOME_ENV]?.trim();
|
|
22592
|
+
if (!configured) return void 0;
|
|
22593
|
+
let root;
|
|
22594
|
+
if (configured.startsWith("~/")) root = resolve(getHomeDirectory(), configured.slice(2).replace(/^\/+/, ""));
|
|
22595
|
+
else if (isAbsolute(configured)) root = resolve(configured);
|
|
22596
|
+
else throw new Error(`Invalid ${DEEPAGENTS_HOME_ENV} ${JSON.stringify(configured)}: dcode accepts only an absolute path or a path beginning with "~/", so it would not start with this value. Unset it or point it at an absolute path.`);
|
|
22597
|
+
if (root === resolve(getHomeDirectory())) throw new Error(`Invalid ${DEEPAGENTS_HOME_ENV} ${JSON.stringify(configured)}: the home directory itself cannot be a profile, so dcode would not start with this value. Point it at a subdirectory such as "~/.deepagents".`);
|
|
22598
|
+
return root;
|
|
22599
|
+
}
|
|
22600
|
+
/**
|
|
22601
|
+
* Map a canonical `.deepagents/...` path constant onto the directory rulesync
|
|
22602
|
+
* actually writes in the requested scope.
|
|
22603
|
+
*
|
|
22604
|
+
* Project scope keeps the constant as-is (the project tree is `.deepagents/`
|
|
22605
|
+
* everywhere). Global scope without an override keeps it too, under the home
|
|
22606
|
+
* output root. When `DEEPAGENTS_HOME` is set, that directory *is* the profile
|
|
22607
|
+
* root, so the `.deepagents` prefix is stripped: `~/.deepagents/agent/skills`
|
|
22608
|
+
* becomes `$DEEPAGENTS_HOME/agent/skills`.
|
|
22609
|
+
*/
|
|
22610
|
+
function getDeepagentsRelativeDirPath({ global, relativeDirPath }) {
|
|
22611
|
+
if (!global || !getDeepagentsHome()) return relativeDirPath;
|
|
22612
|
+
const relativePath = relative(DEEPAGENTS_DIR, relativeDirPath);
|
|
22613
|
+
try {
|
|
22614
|
+
checkPathTraversal({
|
|
22615
|
+
relativePath: relativeDirPath,
|
|
22616
|
+
intendedRootDir: "."
|
|
22617
|
+
});
|
|
22618
|
+
checkPathTraversal({
|
|
22619
|
+
relativePath,
|
|
22620
|
+
intendedRootDir: DEEPAGENTS_DIR
|
|
22621
|
+
});
|
|
22622
|
+
} catch {
|
|
22623
|
+
throw new Error(`deepagents global path must be within ${DEEPAGENTS_DIR}: ${relativeDirPath}`);
|
|
22624
|
+
}
|
|
22625
|
+
return relativePath || ".";
|
|
22626
|
+
}
|
|
22627
|
+
function getDeepagentsRulesyncOutputRoot({ nativeOutputRoot, global }) {
|
|
22628
|
+
return getToolRulesyncOutputRoot({
|
|
22629
|
+
nativeOutputRoot,
|
|
22630
|
+
global,
|
|
22631
|
+
toolHome: getDeepagentsHome
|
|
22632
|
+
});
|
|
22633
|
+
}
|
|
22634
|
+
//#endregion
|
|
22574
22635
|
//#region src/features/hooks/deepagents-hooks.ts
|
|
22575
22636
|
function isRecord(value) {
|
|
22576
22637
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
@@ -22685,9 +22746,12 @@ var DeepagentsHooks = class DeepagentsHooks extends ToolHooks {
|
|
|
22685
22746
|
isDeletable() {
|
|
22686
22747
|
return true;
|
|
22687
22748
|
}
|
|
22688
|
-
static getSettablePaths(
|
|
22749
|
+
static getSettablePaths({ global = false } = {}) {
|
|
22689
22750
|
return {
|
|
22690
|
-
relativeDirPath:
|
|
22751
|
+
relativeDirPath: getDeepagentsRelativeDirPath({
|
|
22752
|
+
global,
|
|
22753
|
+
relativeDirPath: DEEPAGENTS_DIR
|
|
22754
|
+
}),
|
|
22691
22755
|
relativeFilePath: DEEPAGENTS_HOOKS_FILE_NAME
|
|
22692
22756
|
};
|
|
22693
22757
|
}
|
|
@@ -22699,7 +22763,8 @@ var DeepagentsHooks = class DeepagentsHooks extends ToolHooks {
|
|
|
22699
22763
|
relativeDirPath: paths.relativeDirPath,
|
|
22700
22764
|
relativeFilePath: paths.relativeFilePath,
|
|
22701
22765
|
fileContent,
|
|
22702
|
-
validate
|
|
22766
|
+
validate,
|
|
22767
|
+
global
|
|
22703
22768
|
});
|
|
22704
22769
|
}
|
|
22705
22770
|
static fromRulesyncHooks({ outputRoot = process.cwd(), rulesyncHooks, validate = true, global = false }) {
|
|
@@ -22723,10 +22788,16 @@ var DeepagentsHooks = class DeepagentsHooks extends ToolHooks {
|
|
|
22723
22788
|
}
|
|
22724
22789
|
const rawHooks = isRecord(parsed) ? parsed.hooks : void 0;
|
|
22725
22790
|
const hooks = Array.isArray(rawHooks) ? deepagentsLegacyToCanonicalHooks(rawHooks) : isRecord(rawHooks) ? deepagentsToCanonicalHooks(rawHooks) : {};
|
|
22726
|
-
return this.toRulesyncHooksDefault({
|
|
22727
|
-
|
|
22728
|
-
|
|
22729
|
-
|
|
22791
|
+
return this.toRulesyncHooksDefault({
|
|
22792
|
+
outputRoot: getDeepagentsRulesyncOutputRoot({
|
|
22793
|
+
nativeOutputRoot: this.outputRoot,
|
|
22794
|
+
global: this.global
|
|
22795
|
+
}),
|
|
22796
|
+
fileContent: JSON.stringify(buildImportedHooksConfig({
|
|
22797
|
+
hooks,
|
|
22798
|
+
overrideKey: "deepagents"
|
|
22799
|
+
}), null, 2)
|
|
22800
|
+
});
|
|
22730
22801
|
}
|
|
22731
22802
|
validate() {
|
|
22732
22803
|
return {
|
|
@@ -30074,9 +30145,12 @@ var DeepagentsMcp = class DeepagentsMcp extends ToolMcp {
|
|
|
30074
30145
|
isDeletable() {
|
|
30075
30146
|
return !this.global;
|
|
30076
30147
|
}
|
|
30077
|
-
static getSettablePaths(
|
|
30148
|
+
static getSettablePaths({ global = false } = {}) {
|
|
30078
30149
|
return {
|
|
30079
|
-
relativeDirPath:
|
|
30150
|
+
relativeDirPath: getDeepagentsRelativeDirPath({
|
|
30151
|
+
global,
|
|
30152
|
+
relativeDirPath: DEEPAGENTS_DIR
|
|
30153
|
+
}),
|
|
30080
30154
|
relativeFilePath: DEEPAGENTS_MCP_FILE_NAME
|
|
30081
30155
|
};
|
|
30082
30156
|
}
|
|
@@ -30093,7 +30167,8 @@ var DeepagentsMcp = class DeepagentsMcp extends ToolMcp {
|
|
|
30093
30167
|
relativeDirPath: paths.relativeDirPath,
|
|
30094
30168
|
relativeFilePath: paths.relativeFilePath,
|
|
30095
30169
|
fileContent: JSON.stringify(newJson, null, 2),
|
|
30096
|
-
validate
|
|
30170
|
+
validate,
|
|
30171
|
+
global
|
|
30097
30172
|
});
|
|
30098
30173
|
}
|
|
30099
30174
|
static async fromRulesyncMcp({ outputRoot = process.cwd(), rulesyncMcp, validate = true, global = false, logger }) {
|
|
@@ -30124,7 +30199,13 @@ var DeepagentsMcp = class DeepagentsMcp extends ToolMcp {
|
|
|
30124
30199
|
toRulesyncMcp() {
|
|
30125
30200
|
const servers = isRecord$1(this.json.mcpServers) ? this.json.mcpServers : {};
|
|
30126
30201
|
const mcpServers = Object.fromEntries(Object.entries(servers).map(([name, server]) => [name, isRecord$1(server) ? toRulesyncServer(server) : server]));
|
|
30127
|
-
return this.toRulesyncMcpDefault({
|
|
30202
|
+
return this.toRulesyncMcpDefault({
|
|
30203
|
+
outputRoot: getDeepagentsRulesyncOutputRoot({
|
|
30204
|
+
nativeOutputRoot: this.outputRoot,
|
|
30205
|
+
global: this.global
|
|
30206
|
+
}),
|
|
30207
|
+
fileContent: JSON.stringify({ mcpServers }, null, 2)
|
|
30208
|
+
});
|
|
30128
30209
|
}
|
|
30129
30210
|
validate() {
|
|
30130
30211
|
return {
|
|
@@ -39953,9 +40034,12 @@ var DeepagentsPermissions = class DeepagentsPermissions extends ToolPermissions
|
|
|
39953
40034
|
shouldSkipCreationWhenPayloadEmpty() {
|
|
39954
40035
|
return true;
|
|
39955
40036
|
}
|
|
39956
|
-
static getSettablePaths(
|
|
40037
|
+
static getSettablePaths({ global = false } = {}) {
|
|
39957
40038
|
return {
|
|
39958
|
-
relativeDirPath:
|
|
40039
|
+
relativeDirPath: getDeepagentsRelativeDirPath({
|
|
40040
|
+
global,
|
|
40041
|
+
relativeDirPath: DEEPAGENTS_DIR
|
|
40042
|
+
}),
|
|
39959
40043
|
relativeFilePath: DEEPAGENTS_CONFIG_FILE_NAME
|
|
39960
40044
|
};
|
|
39961
40045
|
}
|
|
@@ -40054,7 +40138,14 @@ var DeepagentsPermissions = class DeepagentsPermissions extends ToolPermissions
|
|
|
40054
40138
|
if (Object.keys(startupOverride).length > 0) deepagents.startup = startupOverride;
|
|
40055
40139
|
if (Object.keys(extensionsOverride).length > 0) deepagents.extensions = extensionsOverride;
|
|
40056
40140
|
if (Object.keys(deepagents).length > 0) result.deepagents = deepagents;
|
|
40057
|
-
return
|
|
40141
|
+
return RulesyncPermissions.fromImportedFileContent({
|
|
40142
|
+
outputRoot: getDeepagentsRulesyncOutputRoot({
|
|
40143
|
+
nativeOutputRoot: this.outputRoot,
|
|
40144
|
+
global: this.global
|
|
40145
|
+
}),
|
|
40146
|
+
sourcePath: this.getRelativePathFromCwd(),
|
|
40147
|
+
fileContent: JSON.stringify(result, null, 2)
|
|
40148
|
+
});
|
|
40058
40149
|
}
|
|
40059
40150
|
validate() {
|
|
40060
40151
|
return {
|
|
@@ -51781,7 +51872,10 @@ var DeepagentsSkill = class DeepagentsSkill extends ToolSkill {
|
|
|
51781
51872
|
}
|
|
51782
51873
|
}
|
|
51783
51874
|
static getSettablePaths({ global = false } = {}) {
|
|
51784
|
-
return { relativeDirPath:
|
|
51875
|
+
return { relativeDirPath: getDeepagentsRelativeDirPath({
|
|
51876
|
+
global,
|
|
51877
|
+
relativeDirPath: global ? DEEPAGENTS_GLOBAL_SKILLS_DIR_PATH : DEEPAGENTS_SKILLS_DIR_PATH
|
|
51878
|
+
}) };
|
|
51785
51879
|
}
|
|
51786
51880
|
getFrontmatter() {
|
|
51787
51881
|
return DeepagentsSkillFrontmatterSchema.parse(this.requireMainFileFrontmatter());
|
|
@@ -51821,7 +51915,10 @@ var DeepagentsSkill = class DeepagentsSkill extends ToolSkill {
|
|
|
51821
51915
|
...Object.keys(deepagentsBlock).length > 0 && { deepagents: deepagentsBlock }
|
|
51822
51916
|
};
|
|
51823
51917
|
return new RulesyncSkill({
|
|
51824
|
-
outputRoot:
|
|
51918
|
+
outputRoot: getDeepagentsRulesyncOutputRoot({
|
|
51919
|
+
nativeOutputRoot: this.outputRoot,
|
|
51920
|
+
global: this.global
|
|
51921
|
+
}),
|
|
51825
51922
|
relativeDirPath: RULESYNC_SKILLS_RELATIVE_DIR_PATH,
|
|
51826
51923
|
dirName: this.getDirName(),
|
|
51827
51924
|
frontmatter: rulesyncFrontmatter,
|
|
@@ -57916,7 +58013,10 @@ var DeepagentsSubagent = class DeepagentsSubagent extends ToolSubagent {
|
|
|
57916
58013
|
this.body = body;
|
|
57917
58014
|
}
|
|
57918
58015
|
static getSettablePaths({ global = false } = {}) {
|
|
57919
|
-
return { relativeDirPath:
|
|
58016
|
+
return { relativeDirPath: getDeepagentsRelativeDirPath({
|
|
58017
|
+
global,
|
|
58018
|
+
relativeDirPath: global ? DEEPAGENTS_GLOBAL_AGENTS_DIR_PATH : DEEPAGENTS_AGENTS_DIR_PATH
|
|
58019
|
+
}) };
|
|
57920
58020
|
}
|
|
57921
58021
|
getFrontmatter() {
|
|
57922
58022
|
return this.frontmatter;
|
|
@@ -57935,7 +58035,10 @@ var DeepagentsSubagent = class DeepagentsSubagent extends ToolSubagent {
|
|
|
57935
58035
|
...Object.keys(deepagentsSection).length > 0 && { deepagents: deepagentsSection }
|
|
57936
58036
|
};
|
|
57937
58037
|
return new RulesyncSubagent({
|
|
57938
|
-
outputRoot:
|
|
58038
|
+
outputRoot: getDeepagentsRulesyncOutputRoot({
|
|
58039
|
+
nativeOutputRoot: this.getOutputRoot(),
|
|
58040
|
+
global: this.global
|
|
58041
|
+
}),
|
|
57939
58042
|
frontmatter: rulesyncFrontmatter,
|
|
57940
58043
|
body: this.body,
|
|
57941
58044
|
relativeDirPath: RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH,
|
|
@@ -57978,7 +58081,8 @@ var DeepagentsSubagent = class DeepagentsSubagent extends ToolSubagent {
|
|
|
57978
58081
|
relativeDirPath: paths.relativeDirPath,
|
|
57979
58082
|
relativeFilePath: join(subagentName, DEEPAGENTS_SUBAGENT_FILE_NAME),
|
|
57980
58083
|
fileContent,
|
|
57981
|
-
validate
|
|
58084
|
+
validate,
|
|
58085
|
+
global
|
|
57982
58086
|
});
|
|
57983
58087
|
}
|
|
57984
58088
|
validate() {
|
|
@@ -58016,7 +58120,8 @@ var DeepagentsSubagent = class DeepagentsSubagent extends ToolSubagent {
|
|
|
58016
58120
|
frontmatter: result.data,
|
|
58017
58121
|
body: content.trim(),
|
|
58018
58122
|
fileContent,
|
|
58019
|
-
validate
|
|
58123
|
+
validate,
|
|
58124
|
+
global
|
|
58020
58125
|
});
|
|
58021
58126
|
}
|
|
58022
58127
|
static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath }) {
|
|
@@ -64022,7 +64127,10 @@ var DeepagentsRule = class DeepagentsRule extends ToolRule {
|
|
|
64022
64127
|
}
|
|
64023
64128
|
static getSettablePaths({ global = false } = {}) {
|
|
64024
64129
|
return { root: {
|
|
64025
|
-
relativeDirPath:
|
|
64130
|
+
relativeDirPath: getDeepagentsRelativeDirPath({
|
|
64131
|
+
global,
|
|
64132
|
+
relativeDirPath: global ? DEEPAGENTS_GLOBAL_DIR : DEEPAGENTS_DIR
|
|
64133
|
+
}),
|
|
64026
64134
|
relativeFilePath: DEEPAGENTS_RULE_FILE_NAME
|
|
64027
64135
|
} };
|
|
64028
64136
|
}
|
|
@@ -64036,17 +64144,19 @@ var DeepagentsRule = class DeepagentsRule extends ToolRule {
|
|
|
64036
64144
|
relativeFilePath: settablePaths.root.relativeFilePath,
|
|
64037
64145
|
fileContent,
|
|
64038
64146
|
validate,
|
|
64039
|
-
root: true
|
|
64147
|
+
root: true,
|
|
64148
|
+
global
|
|
64040
64149
|
});
|
|
64041
64150
|
}
|
|
64042
|
-
static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath }) {
|
|
64151
|
+
static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath, global = false }) {
|
|
64152
|
+
const isRoot = relativeFilePath === "AGENTS.md" && relativeDirPath === this.getSettablePaths({ global }).root.relativeDirPath;
|
|
64043
64153
|
return new DeepagentsRule({
|
|
64044
64154
|
outputRoot,
|
|
64045
64155
|
relativeDirPath,
|
|
64046
64156
|
relativeFilePath,
|
|
64047
64157
|
fileContent: "",
|
|
64048
64158
|
validate: false,
|
|
64049
|
-
root:
|
|
64159
|
+
root: isRoot
|
|
64050
64160
|
});
|
|
64051
64161
|
}
|
|
64052
64162
|
static fromRulesyncRule({ outputRoot = process.cwd(), rulesyncRule, validate = true, global = false }) {
|
|
@@ -65771,6 +65881,132 @@ var PiRule = class PiRule extends ToolRule {
|
|
|
65771
65881
|
}
|
|
65772
65882
|
};
|
|
65773
65883
|
//#endregion
|
|
65884
|
+
//#region src/constants/pool-paths.ts
|
|
65885
|
+
/**
|
|
65886
|
+
* Pool (Poolside's coding agent CLI) configuration-layout conventions.
|
|
65887
|
+
*
|
|
65888
|
+
* Pool reads `AGENTS.md` instruction files the same way the AGENTS.md standard
|
|
65889
|
+
* describes them: the personal `~/.config/poolside/AGENTS.md` (Pool itself
|
|
65890
|
+
* honours `XDG_CONFIG_HOME` upstream; rulesync writes only the XDG-default
|
|
65891
|
+
* path), the project-root `AGENTS.md`, and nested per-directory
|
|
65892
|
+
* `AGENTS.md` files from the repository root down through the working
|
|
65893
|
+
* directory, deeper files taking precedence. It skips ignored directories
|
|
65894
|
+
* (`.git/`, `node_modules/`, cache directories, repository ignore rules).
|
|
65895
|
+
*
|
|
65896
|
+
* @see https://docs.poolside.ai/agent-instructions
|
|
65897
|
+
* @see https://github.com/poolsideai/pool
|
|
65898
|
+
*/
|
|
65899
|
+
/** Global config directory for Pool, relative to the home directory. */
|
|
65900
|
+
const POOL_GLOBAL_DIR = join(".config", "poolside");
|
|
65901
|
+
//#endregion
|
|
65902
|
+
//#region src/features/rules/pool-rule.ts
|
|
65903
|
+
var PoolRule = class PoolRule extends ToolRule {
|
|
65904
|
+
static getSettablePaths({ global = false } = {}) {
|
|
65905
|
+
if (global) return { root: {
|
|
65906
|
+
relativeDirPath: POOL_GLOBAL_DIR,
|
|
65907
|
+
relativeFilePath: AGENTSMD_RULE_FILE_NAME
|
|
65908
|
+
} };
|
|
65909
|
+
return { root: {
|
|
65910
|
+
relativeDirPath: ".",
|
|
65911
|
+
relativeFilePath: AGENTSMD_RULE_FILE_NAME
|
|
65912
|
+
} };
|
|
65913
|
+
}
|
|
65914
|
+
/**
|
|
65915
|
+
* Pool reads personal, project, and directory-level `AGENTS.md` files: inside
|
|
65916
|
+
* a git repository it loads every `AGENTS.md` from the repository root down
|
|
65917
|
+
* through the working directory (deeper files take precedence), skipping
|
|
65918
|
+
* ignored directories. Nested files are therefore a real scoping surface, not
|
|
65919
|
+
* just the root file's overflow.
|
|
65920
|
+
*
|
|
65921
|
+
* The scan mirrors the AGENTS.md standard's nested discovery — same file
|
|
65922
|
+
* name, same exclusions, import-only, project scope — because it discovers
|
|
65923
|
+
* literally the same files.
|
|
65924
|
+
* @see https://docs.poolside.ai/agent-instructions
|
|
65925
|
+
*/
|
|
65926
|
+
static getNestedFilePatterns() {
|
|
65927
|
+
return this.buildNestedFilePatterns({ fileName: AGENTSMD_RULE_FILE_NAME });
|
|
65928
|
+
}
|
|
65929
|
+
/**
|
|
65930
|
+
* The subproject directory this rule scopes, or `undefined` for the root file
|
|
65931
|
+
* (project or global).
|
|
65932
|
+
*/
|
|
65933
|
+
getSubprojectPath() {
|
|
65934
|
+
return this.getNestedSubprojectPath({ fileName: AGENTSMD_RULE_FILE_NAME });
|
|
65935
|
+
}
|
|
65936
|
+
static async fromFile({ outputRoot = process.cwd(), relativeFilePath: _relativeFilePath, relativeDirPath: overrideDirPath, validate = true, global = false }) {
|
|
65937
|
+
const { root } = this.getSettablePaths({ global });
|
|
65938
|
+
if (overrideDirPath !== void 0 && overrideDirPath !== root.relativeDirPath && overrideDirPath !== ".") {
|
|
65939
|
+
const fileContent = await readFileContent(join(outputRoot, overrideDirPath, AGENTSMD_RULE_FILE_NAME));
|
|
65940
|
+
return new PoolRule({
|
|
65941
|
+
outputRoot,
|
|
65942
|
+
relativeDirPath: overrideDirPath,
|
|
65943
|
+
relativeFilePath: AGENTSMD_RULE_FILE_NAME,
|
|
65944
|
+
fileContent,
|
|
65945
|
+
validate,
|
|
65946
|
+
root: false
|
|
65947
|
+
});
|
|
65948
|
+
}
|
|
65949
|
+
const fileContent = await readFileContent(join(outputRoot, root.relativeDirPath, root.relativeFilePath));
|
|
65950
|
+
return new PoolRule({
|
|
65951
|
+
outputRoot,
|
|
65952
|
+
relativeDirPath: root.relativeDirPath,
|
|
65953
|
+
relativeFilePath: root.relativeFilePath,
|
|
65954
|
+
fileContent,
|
|
65955
|
+
validate,
|
|
65956
|
+
root: true
|
|
65957
|
+
});
|
|
65958
|
+
}
|
|
65959
|
+
static fromRulesyncRule({ outputRoot = process.cwd(), rulesyncRule, validate = true, global = false }) {
|
|
65960
|
+
const { root } = this.getSettablePaths({ global });
|
|
65961
|
+
const frontmatter = rulesyncRule.getFrontmatter();
|
|
65962
|
+
const isRoot = frontmatter.root ?? false;
|
|
65963
|
+
const subprojectPath = frontmatter.agentsmd?.subprojectPath;
|
|
65964
|
+
if (!global && !isRoot && subprojectPath) return new PoolRule({
|
|
65965
|
+
outputRoot,
|
|
65966
|
+
relativeDirPath: join(subprojectPath),
|
|
65967
|
+
relativeFilePath: AGENTSMD_RULE_FILE_NAME,
|
|
65968
|
+
fileContent: rulesyncRule.getBody(),
|
|
65969
|
+
validate,
|
|
65970
|
+
root: false
|
|
65971
|
+
});
|
|
65972
|
+
return new PoolRule({
|
|
65973
|
+
outputRoot,
|
|
65974
|
+
relativeDirPath: root.relativeDirPath,
|
|
65975
|
+
relativeFilePath: root.relativeFilePath,
|
|
65976
|
+
fileContent: rulesyncRule.getBody(),
|
|
65977
|
+
validate,
|
|
65978
|
+
root: isRoot
|
|
65979
|
+
});
|
|
65980
|
+
}
|
|
65981
|
+
toRulesyncRule() {
|
|
65982
|
+
const subprojectPath = this.getSubprojectPath();
|
|
65983
|
+
if (subprojectPath === void 0) return this.toRulesyncRuleDefault();
|
|
65984
|
+
return this.toRulesyncRuleNestedAgentsmd({ subprojectPath });
|
|
65985
|
+
}
|
|
65986
|
+
validate() {
|
|
65987
|
+
return {
|
|
65988
|
+
success: true,
|
|
65989
|
+
error: null
|
|
65990
|
+
};
|
|
65991
|
+
}
|
|
65992
|
+
static forDeletion({ outputRoot = process.cwd(), relativeDirPath, relativeFilePath }) {
|
|
65993
|
+
return new PoolRule({
|
|
65994
|
+
outputRoot,
|
|
65995
|
+
relativeDirPath,
|
|
65996
|
+
relativeFilePath,
|
|
65997
|
+
fileContent: "",
|
|
65998
|
+
validate: false,
|
|
65999
|
+
root: relativeFilePath === "AGENTS.md" && (relativeDirPath === "." || relativeDirPath === POOL_GLOBAL_DIR)
|
|
66000
|
+
});
|
|
66001
|
+
}
|
|
66002
|
+
static isTargetedByRulesyncRule(rulesyncRule) {
|
|
66003
|
+
return this.isTargetedByRulesyncRuleDefault({
|
|
66004
|
+
rulesyncRule,
|
|
66005
|
+
toolTarget: "pool"
|
|
66006
|
+
});
|
|
66007
|
+
}
|
|
66008
|
+
};
|
|
66009
|
+
//#endregion
|
|
65774
66010
|
//#region src/features/rules/qwencode-rule.ts
|
|
65775
66011
|
/**
|
|
65776
66012
|
* Frontmatter schema for Qwen Code path-based context rules (`.qwen/rules/*.md`).
|
|
@@ -67410,6 +67646,15 @@ const toolRuleFactories = /* @__PURE__ */ new Map([
|
|
|
67410
67646
|
supportsGlobal: true,
|
|
67411
67647
|
ruleDiscoveryMode: "auto"
|
|
67412
67648
|
}
|
|
67649
|
+
}],
|
|
67650
|
+
["pool", {
|
|
67651
|
+
class: PoolRule,
|
|
67652
|
+
meta: {
|
|
67653
|
+
extension: "md",
|
|
67654
|
+
supportsGlobal: true,
|
|
67655
|
+
ruleDiscoveryMode: "auto",
|
|
67656
|
+
collisionPolicy: "fold"
|
|
67657
|
+
}
|
|
67413
67658
|
}]
|
|
67414
67659
|
]);
|
|
67415
67660
|
const allToolTargetKeys = [...toolRuleFactories.keys()];
|
|
@@ -68488,12 +68733,13 @@ async function assertPluginRootSafe(params) {
|
|
|
68488
68733
|
//#region src/utils/tool-output-root.ts
|
|
68489
68734
|
/** The environment variable each tool reads for its profile root. */
|
|
68490
68735
|
const TOOL_HOME_ENV_VARS = {
|
|
68736
|
+
deepagents: "DEEPAGENTS_HOME",
|
|
68491
68737
|
hermesagent: "HERMES_HOME",
|
|
68492
68738
|
"kimi-code": "KIMI_CODE_HOME"
|
|
68493
68739
|
};
|
|
68494
68740
|
/**
|
|
68495
|
-
* Substitute a tool's home override (`
|
|
68496
|
-
* output root in global scope.
|
|
68741
|
+
* Substitute a tool's home override (`DEEPAGENTS_HOME`, `HERMES_HOME`,
|
|
68742
|
+
* `KIMI_CODE_HOME`) for the output root in global scope.
|
|
68497
68743
|
*
|
|
68498
68744
|
* The override wins over `--output-roots`: it names where the tool itself reads
|
|
68499
68745
|
* its profile, so writing anywhere else would produce files the tool ignores.
|
|
@@ -68508,7 +68754,7 @@ function resolveToolOutputRoot({ outputRoot, toolTarget, global }) {
|
|
|
68508
68754
|
const resolved = toolTarget === "hermesagent" ? resolveHermesagentOutputRoot({
|
|
68509
68755
|
outputRoot,
|
|
68510
68756
|
global
|
|
68511
|
-
}) : toolTarget === "kimi-code" ? getKimiCodeHome() ?? outputRoot : outputRoot;
|
|
68757
|
+
}) : toolTarget === "kimi-code" ? getKimiCodeHome() ?? outputRoot : toolTarget === "deepagents" ? getDeepagentsHome() ?? outputRoot : outputRoot;
|
|
68512
68758
|
if (resolved === outputRoot) return resolved;
|
|
68513
68759
|
try {
|
|
68514
68760
|
validateOutputRoot(resolved);
|
|
@@ -70508,4 +70754,4 @@ async function importChecksCore(params) {
|
|
|
70508
70754
|
//#endregion
|
|
70509
70755
|
export { RulesyncCheck as $, ALL_TOOL_TARGETS as $t, CLAUDECODE_SKILLS_DIR_PATH as A, RULESYNC_SOURCES_LOCK_RELATIVE_FILE_PATH as An, ensureDir as At, RulesyncSkill as B, quoteForLog as Bn, pathEscapesRoot as Bt, ChecksProcessor as C, RULESYNC_PERMISSIONS_FILE_NAME as Cn, applyFileMode as Ct, CLAUDECODE_LOCAL_RULE_FILE_NAME as D, RULESYNC_RELATIVE_DIR_PATH as Dn, checkPathTraversal as Dt, CLAUDECODE_DIR as E, RULESYNC_PERMISSIONS_SCHEMA_URL as En, assertWritablePathInsideRoot as Et, AUGMENTCODE_DIR as F, DEPRECATED_FEATURE_REPLACEMENTS as Fn, isFileSystemError as Ft, RulesyncMcp as G, removeFile as Gt, RulesyncRule as H, stripControlCharactersKeepingLineFeeds as Hn, readFileContentOrNull as Ht, AUGMENTCODE_SETTINGS_LOCAL_FILE_NAME as I, formatError as In, isSymlink as It, getRulesyncSourceCandidates as J, resolvePath as Jt, RulesyncIgnore as K, removeFileStrict as Kt, getLocalSkillDirNames as L, truncateText as Ln, listDirectoryEntryNames as Lt, FACTORYDROID_SETTINGS_LOCAL_FILE_NAME as M, parseCommaSeparatedList as Mn, getFileSize as Mt, caseFoldIdentity as N, ALL_FEATURES as Nn, getHomeDirectory as Nt, CLAUDECODE_MEMORIES_DIR_NAME as O, RULESYNC_RULES_RELATIVE_DIR_PATH as On, createTempDirectory as Ot, groupSpellingsByCaseFoldedIdentity as P, ALL_FEATURES_WITH_WILDCARD as Pn, isFileNotFoundError as Pt, RulesyncCommandFrontmatterSchema as Q, writeFileContent as Qt, RulesyncSubagent as R, hasDeceptiveHiddenCharacters as Rn, listFilePathsRecursively as Rt, QWENCODE_LOCAL_RULE_FILE_NAME as S, RULESYNC_NPM_SOURCES_LOCK_RELATIVE_FILE_PATH as Sn, ErrorCodes as St, CODEXCLI_DIR as T, RULESYNC_PERMISSIONS_RELATIVE_FILE_PATH as Tn, assertTreeContainsNoSymlinks as Tt, RulesyncRuleFrontmatterSchema as U, stripHiddenCharacters as Un, removeDirectory as Ut, RulesyncSkillFrontmatterSchema as V, stripControlCharacters as Vn, readFileContent as Vt, RulesyncPermissions as W, removeDirectoryStrict as Wt, parseJsonc as X, toPosixPath as Xt, resolveRulesyncSourceWritePath as Y, runWithDirectoryRollback as Yt, RulesyncCommand as Z, writeFileBuffer as Zt, IgnoreProcessor as _, RULESYNC_LOCAL_CONFIG_RELATIVE_FILE_PATH as _n, warnOnConflictingFlags as _t, getProcessorRegistryEntry as a, RULESYNC_AIIGNORE_FILE_NAME as an, ConfigResolver as at, CommandsProcessor as b, RULESYNC_MCP_RELATIVE_FILE_PATH as bn, withWarnOnceScope as bt, RulesProcessor as c, RULESYNC_COMMANDS_RELATIVE_DIR_PATH as cn, CONFLICTING_TARGET_PAIRS as ct, CODEBUDDY_DIR as d, RULESYNC_CURATED_RULES_RELATIVE_DIR_PATH as dn, SourceEntrySchema as dt, ALL_TOOL_TARGETS_WITH_WILDCARD as en, RulesyncCheckFrontmatterSchema as et, CODEBUDDY_LOCAL_RULE_FILE_NAME as f, RULESYNC_CURATED_SKILLS_RELATIVE_DIR_PATH as fn, findControlCharacter as ft, McpProcessor as g, RULESYNC_IGNORE_RELATIVE_FILE_PATH as gn, fallbackLogger as gt, shortenToWidth as h, RULESYNC_HOOKS_RELATIVE_FILE_PATH as hn, WarningCollectingLogger as ht, inspectInputRoots as i, MAX_FILE_SIZE as in, SKILL_FILE_NAME as it, FACTORYDROID_DIR as j, RULESYNC_SUBAGENTS_RELATIVE_DIR_PATH as jn, fileExists as jt, CLAUDECODE_SETTINGS_LOCAL_FILE_NAME as k, RULESYNC_SKILLS_RELATIVE_DIR_PATH as kn, directoryExists as kt, SubagentsProcessor as l, RULESYNC_CONFIG_RELATIVE_FILE_PATH as ln, ConfigFileSchema as lt, displayWidthOf as m, RULESYNC_HOOKS_LEGACY_FILE_NAME as mn, JsonLogger as mt, formatSourceLoadFailure as n, ToolTargetSchema as nn, loadYaml as nt, convertFromTool as o, RULESYNC_AIIGNORE_RELATIVE_FILE_PATH as on, mergeInputRootConfigs as ot, ELLIPSIS_WIDTH as p, RULESYNC_HOOKS_FILE_NAME as pn, ConsoleLogger as pt, RulesyncHooks as q, removeTempDirectory as qt, generate as r, CURATED_RULES_FEATURE_SUBDIR as rn, SHARED_USER_MANAGED_CONFIG_PATHS as rt, isPackagingToolTarget as s, RULESYNC_CHECKS_RELATIVE_DIR_PATH as sn, resolveEffectiveInputRoots as st, importFromTool as t, PACKAGING_TOOL_TARGETS as tn, stringifyFrontmatter as tt, SkillsProcessor as u, RULESYNC_CONFIG_SCHEMA_URL as un, GITIGNORE_DESTINATION_KEY as ut, CRUSH_LOCAL_RULE_FILE_NAME as v, RULESYNC_MCP_FILE_NAME as vn, withFallbackLoggerTarget as vt, CODEXCLI_BASH_RULES_FILE_NAME as w, RULESYNC_PERMISSIONS_LEGACY_FILE_NAME as wn, assertDirectoryIfExists as wt, QWENCODE_DIR as x, RULESYNC_MCP_SCHEMA_URL as xn, CLIError as xt, HooksProcessor as y, RULESYNC_MCP_LEGACY_FILE_NAME as yn, resetRunWarningState as yt, RulesyncSubagentFrontmatterSchema as z, hasEnclosingMarkOutsideKeycap as zn, listSubdirectoryNames as zt };
|
|
70510
70756
|
|
|
70511
|
-
//# sourceMappingURL=import-
|
|
70757
|
+
//# sourceMappingURL=import-CwS7XtJP.js.map
|