@ethlete/agent-rules 0.1.0-next.1 → 0.1.0-next.10

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.
Files changed (121) hide show
  1. package/CHANGELOG.md +93 -0
  2. package/README.md +296 -21
  3. package/content/git-hooks/post-checkout.sh +10 -0
  4. package/content/git-hooks/pre-push.sh +5 -0
  5. package/content/hooks/context-warning.py +284 -69
  6. package/content/output-styles/ste-clarity.md +131 -0
  7. package/content/rules/comments.md +50 -20
  8. package/content/skills/angular-patterns/SKILL.md +1 -1
  9. package/content/skills/api-source/SKILL.md +118 -0
  10. package/content/skills/figma-export/SKILL.md +193 -0
  11. package/content/skills/figma-export/dump-figma-layers.py +83 -0
  12. package/content/skills/figma-export/dump-figma-svg.py +235 -0
  13. package/content/skills/figma-export/measure-template.mjs +87 -0
  14. package/content/skills/git-commit/SKILL.md +6 -7
  15. package/content/skills/git-flow/SKILL.md +87 -0
  16. package/content/skills/handoff/SKILL.md +4 -0
  17. package/content/skills/query/SKILL.md +23 -13
  18. package/content/skills/rxjs-signals/SKILL.md +1 -1
  19. package/content/skills/sdk-docs/SKILL.md +10 -2
  20. package/content/skills/sdk-local-build/SKILL.md +115 -0
  21. package/content/skills/sdk-source/SKILL.md +133 -0
  22. package/content/skills/styleguide/STYLEGUIDE.md +2 -2
  23. package/content/skills/theming/SKILL.md +1 -1
  24. package/content/skills/timetrack/SKILL.md +66 -0
  25. package/package.json +12 -1
  26. package/src/index.js +23 -10
  27. package/src/index.js.map +1 -1
  28. package/src/lib/commitlint.d.ts +10 -0
  29. package/src/lib/commitlint.js +51 -0
  30. package/src/lib/commitlint.js.map +1 -0
  31. package/src/lib/config.d.ts +35 -6
  32. package/src/lib/config.js +26 -3
  33. package/src/lib/config.js.map +1 -1
  34. package/src/lib/git-flow/build.d.ts +35 -0
  35. package/src/lib/git-flow/build.js +24 -0
  36. package/src/lib/git-flow/build.js.map +1 -0
  37. package/src/lib/git-flow/config.d.ts +59 -0
  38. package/src/lib/git-flow/config.js +50 -0
  39. package/src/lib/git-flow/config.js.map +1 -0
  40. package/src/lib/git-flow/index.d.ts +6 -0
  41. package/src/lib/git-flow/index.js +10 -0
  42. package/src/lib/git-flow/index.js.map +1 -0
  43. package/src/lib/git-flow/parse.d.ts +49 -0
  44. package/src/lib/git-flow/parse.js +274 -0
  45. package/src/lib/git-flow/parse.js.map +1 -0
  46. package/src/lib/git-flow/rename.d.ts +24 -0
  47. package/src/lib/git-flow/rename.js +70 -0
  48. package/src/lib/git-flow/rename.js.map +1 -0
  49. package/src/lib/git-flow/start.d.ts +49 -0
  50. package/src/lib/git-flow/start.js +57 -0
  51. package/src/lib/git-flow/start.js.map +1 -0
  52. package/src/lib/git-flow/validate.d.ts +34 -0
  53. package/src/lib/git-flow/validate.js +72 -0
  54. package/src/lib/git-flow/validate.js.map +1 -0
  55. package/src/lib/git-flow-command.d.ts +4 -0
  56. package/src/lib/git-flow-command.js +157 -0
  57. package/src/lib/git-flow-command.js.map +1 -0
  58. package/src/lib/git-flow-repair.d.ts +17 -0
  59. package/src/lib/git-flow-repair.js +146 -0
  60. package/src/lib/git-flow-repair.js.map +1 -0
  61. package/src/lib/git-flow-start.d.ts +20 -0
  62. package/src/lib/git-flow-start.js +132 -0
  63. package/src/lib/git-flow-start.js.map +1 -0
  64. package/src/lib/git.d.ts +27 -0
  65. package/src/lib/git.js +49 -0
  66. package/src/lib/git.js.map +1 -0
  67. package/src/lib/gitlab.d.ts +35 -0
  68. package/src/lib/gitlab.js +98 -0
  69. package/src/lib/gitlab.js.map +1 -0
  70. package/src/lib/index.d.ts +1 -0
  71. package/src/lib/index.js +1 -0
  72. package/src/lib/index.js.map +1 -1
  73. package/src/lib/output-style-command.d.ts +3 -0
  74. package/src/lib/output-style-command.js +69 -0
  75. package/src/lib/output-style-command.js.map +1 -0
  76. package/src/lib/output-style.d.ts +38 -0
  77. package/src/lib/output-style.js +126 -0
  78. package/src/lib/output-style.js.map +1 -0
  79. package/src/lib/owned-paths.js +19 -1
  80. package/src/lib/owned-paths.js.map +1 -1
  81. package/src/lib/plan.d.ts +0 -1
  82. package/src/lib/plan.js +83 -9
  83. package/src/lib/plan.js.map +1 -1
  84. package/src/lib/prompt.d.ts +8 -0
  85. package/src/lib/prompt.js +27 -0
  86. package/src/lib/prompt.js.map +1 -0
  87. package/src/lib/render.d.ts +20 -2
  88. package/src/lib/render.js +31 -8
  89. package/src/lib/render.js.map +1 -1
  90. package/src/lib/sync.d.ts +0 -1
  91. package/src/lib/sync.js +2 -2
  92. package/src/lib/sync.js.map +1 -1
  93. package/src/lib/targets/claude-hooks.d.ts +1 -23
  94. package/src/lib/targets/claude-hooks.js +15 -84
  95. package/src/lib/targets/claude-hooks.js.map +1 -1
  96. package/src/lib/targets/claude.js +1 -1
  97. package/src/lib/targets/claude.js.map +1 -1
  98. package/src/lib/targets/codex-hooks.d.ts +12 -0
  99. package/src/lib/targets/codex-hooks.js +33 -0
  100. package/src/lib/targets/codex-hooks.js.map +1 -0
  101. package/src/lib/targets/codex.js +1 -1
  102. package/src/lib/targets/codex.js.map +1 -1
  103. package/src/lib/targets/copilot.js +1 -1
  104. package/src/lib/targets/copilot.js.map +1 -1
  105. package/src/lib/targets/cursor.js +1 -1
  106. package/src/lib/targets/cursor.js.map +1 -1
  107. package/src/lib/targets/git-hooks.d.ts +24 -0
  108. package/src/lib/targets/git-hooks.js +70 -0
  109. package/src/lib/targets/git-hooks.js.map +1 -0
  110. package/src/lib/targets/hooks-shared.d.ts +37 -0
  111. package/src/lib/targets/hooks-shared.js +95 -0
  112. package/src/lib/targets/hooks-shared.js.map +1 -0
  113. package/src/lib/targets/shared.d.ts +0 -1
  114. package/src/lib/targets/shared.js +1 -1
  115. package/src/lib/targets/shared.js.map +1 -1
  116. package/src/lib/timetrack-command.d.ts +11 -0
  117. package/src/lib/timetrack-command.js +199 -0
  118. package/src/lib/timetrack-command.js.map +1 -0
  119. package/src/lib/timetrack.d.ts +86 -0
  120. package/src/lib/timetrack.js +112 -0
  121. package/src/lib/timetrack.js.map +1 -0
package/src/lib/git.js ADDED
@@ -0,0 +1,49 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.remoteUrl = exports.defaultRemote = exports.remoteBranchExists = exports.localBranchExists = exports.isDirty = exports.allBranches = exports.currentBranch = exports.gitLoud = exports.git = void 0;
4
+ const child_process_1 = require("child_process");
5
+ const git_flow_1 = require("./git-flow");
6
+ const git = (options) => (0, child_process_1.execFileSync)('git', options.args, { cwd: options.root, encoding: 'utf8', stdio: ['ignore', 'pipe', 'pipe'] }).trim();
7
+ exports.git = git;
8
+ /** Runs a command whose output belongs on the terminal — a push, a fetch, a branch creation. */
9
+ const gitLoud = (options) => (0, child_process_1.execFileSync)('git', options.args, { cwd: options.root, encoding: 'utf8', stdio: ['ignore', 'inherit', 'inherit'] });
10
+ exports.gitLoud = gitLoud;
11
+ const currentBranch = (root) => (0, exports.git)({ root, args: ['rev-parse', '--abbrev-ref', 'HEAD'] });
12
+ exports.currentBranch = currentBranch;
13
+ const allBranches = (root) => {
14
+ const refs = (0, exports.git)({ root, args: ['for-each-ref', '--format=%(refname)', 'refs/heads', 'refs/remotes'] });
15
+ const names = refs
16
+ .split('\n')
17
+ .filter((ref) => ref && !ref.endsWith('/HEAD'))
18
+ .map(git_flow_1.stripRefPrefix);
19
+ return [...new Set(names)].sort();
20
+ };
21
+ exports.allBranches = allBranches;
22
+ const isDirty = (root) => (0, exports.git)({ root, args: ['status', '--porcelain'] }).length > 0;
23
+ exports.isDirty = isDirty;
24
+ const refExists = (options) => {
25
+ try {
26
+ (0, exports.git)({ root: options.root, args: ['rev-parse', '--verify', '--quiet', options.ref] });
27
+ return true;
28
+ }
29
+ catch (_a) {
30
+ return false;
31
+ }
32
+ };
33
+ const localBranchExists = (options) => refExists({ root: options.root, ref: `refs/heads/${options.branch}` });
34
+ exports.localBranchExists = localBranchExists;
35
+ const remoteBranchExists = (options) => (0, exports.git)({ root: options.root, args: ['ls-remote', '--heads', options.remote, options.branch] }).length > 0;
36
+ exports.remoteBranchExists = remoteBranchExists;
37
+ /** `origin` when it exists, otherwise the only remote — a repo with several and no `origin` is ambiguous. */
38
+ const defaultRemote = (root) => {
39
+ const remotes = (0, exports.git)({ root, args: ['remote'] })
40
+ .split('\n')
41
+ .filter(Boolean);
42
+ if (remotes.includes('origin'))
43
+ return 'origin';
44
+ return remotes.length === 1 ? remotes[0] : undefined;
45
+ };
46
+ exports.defaultRemote = defaultRemote;
47
+ const remoteUrl = (options) => (0, exports.git)({ root: options.root, args: ['remote', 'get-url', options.remote] });
48
+ exports.remoteUrl = remoteUrl;
49
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/git.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ export type GitLabProject = {
2
+ host: string;
3
+ project: string;
4
+ };
5
+ export type GitLabMergeRequest = {
6
+ iid: number;
7
+ title: string;
8
+ sourceBranch: string;
9
+ targetBranch: string;
10
+ url: string;
11
+ };
12
+ /** `git@host:group/sub/project.git`, `ssh://git@host:2222/group/project.git` and the https form. */
13
+ export declare const parseRemoteUrl: (url: string) => GitLabProject | undefined;
14
+ export declare const gitLabToken: () => string | undefined;
15
+ /** Open merge requests whose source **or** target is the branch — both block a rename, differently. */
16
+ export declare const openMergeRequestsFor: (options: {
17
+ project: GitLabProject;
18
+ token: string;
19
+ branch: string;
20
+ }) => Promise<GitLabMergeRequest[]>;
21
+ export declare const retargetMergeRequest: (options: {
22
+ project: GitLabProject;
23
+ token: string;
24
+ iid: number;
25
+ target: string;
26
+ }) => Promise<void>;
27
+ /**
28
+ * The GitLab API can change a merge request's target branch but never its source branch, so an open
29
+ * merge request *from* the branch cannot survive a rename — it has to be closed and reopened, which
30
+ * loses its discussion. `repair` reports these and refuses rather than doing that to someone.
31
+ */
32
+ export declare const blockingMergeRequests: (options: {
33
+ mergeRequests: GitLabMergeRequest[];
34
+ branch: string;
35
+ }) => GitLabMergeRequest[];
@@ -0,0 +1,98 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.blockingMergeRequests = exports.retargetMergeRequest = exports.openMergeRequestsFor = exports.gitLabToken = exports.parseRemoteUrl = void 0;
4
+ const tslib_1 = require("tslib");
5
+ const TIMEOUT_MS = 15000;
6
+ /** `git@host:group/sub/project.git`, `ssh://git@host:2222/group/project.git` and the https form. */
7
+ const parseRemoteUrl = (url) => {
8
+ const trimmed = url.trim();
9
+ const scp = /^[^@/\s]+@([^:/\s]+):(.+?)(?:\.git)?\/?$/.exec(trimmed);
10
+ if ((scp === null || scp === void 0 ? void 0 : scp[1]) && scp[2])
11
+ return { host: scp[1], project: scp[2] };
12
+ const withScheme = /^[a-z+]+:\/\/(?:[^@/]+@)?([^/:\s]+)(?::\d+)?\/(.+?)(?:\.git)?\/?$/.exec(trimmed);
13
+ if ((withScheme === null || withScheme === void 0 ? void 0 : withScheme[1]) && withScheme[2])
14
+ return { host: withScheme[1], project: withScheme[2] };
15
+ return undefined;
16
+ };
17
+ exports.parseRemoteUrl = parseRemoteUrl;
18
+ const gitLabToken = () => { var _a, _b; return ((_a = process.env['GITLAB_TOKEN']) === null || _a === void 0 ? void 0 : _a.trim()) || ((_b = process.env['CI_JOB_TOKEN']) === null || _b === void 0 ? void 0 : _b.trim()) || undefined; };
19
+ exports.gitLabToken = gitLabToken;
20
+ const TARGET_BRANCH_FIELD = 'target_branch';
21
+ /* eslint-enable @typescript-eslint/naming-convention */
22
+ const toMergeRequest = (raw) => {
23
+ var _a, _b, _c, _d, _e;
24
+ return ({
25
+ iid: (_a = raw.iid) !== null && _a !== void 0 ? _a : 0,
26
+ title: (_b = raw.title) !== null && _b !== void 0 ? _b : '',
27
+ sourceBranch: (_c = raw.source_branch) !== null && _c !== void 0 ? _c : '',
28
+ targetBranch: (_d = raw.target_branch) !== null && _d !== void 0 ? _d : '',
29
+ url: (_e = raw.web_url) !== null && _e !== void 0 ? _e : '',
30
+ });
31
+ };
32
+ const request = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
33
+ const { project, token, path, method, body } = options;
34
+ const base = `https://${project.host}/api/v4/projects/${encodeURIComponent(project.project)}`;
35
+ const response = yield fetch(`${base}${path}`, {
36
+ method: method !== null && method !== void 0 ? method : 'GET',
37
+ headers: Object.assign({ 'private-token': token, accept: 'application/json' }, (body ? { 'content-type': 'application/json' } : {})),
38
+ body: body ? JSON.stringify(body) : undefined,
39
+ signal: AbortSignal.timeout(TIMEOUT_MS),
40
+ });
41
+ if (response.status === 401 || response.status === 403) {
42
+ throw new Error(`GitLab rejected the token (${response.status}) for ${project.project}. GITLAB_TOKEN needs the "api" scope and Developer access.`);
43
+ }
44
+ if (!response.ok) {
45
+ throw new Error(`GitLab responded ${response.status} ${response.statusText} for ${method !== null && method !== void 0 ? method : 'GET'} ${path}.`);
46
+ }
47
+ return { body: (yield response.json()), nextPage: response.headers.get('x-next-page') || undefined };
48
+ });
49
+ /**
50
+ * Follows `x-next-page` rather than reading the first page only: a rename that silently skipped a
51
+ * merge request on page two would leave exactly the half-finished state `repair` must never produce.
52
+ */
53
+ const listMergeRequests = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
54
+ const { project, token, filter } = options;
55
+ const found = [];
56
+ let page = '1';
57
+ while (page) {
58
+ const result = yield request({
59
+ project,
60
+ token,
61
+ path: `/merge_requests?state=opened&per_page=100&${filter}&page=${page}`,
62
+ });
63
+ found.push(...result.body.map(toMergeRequest));
64
+ page = result.nextPage;
65
+ }
66
+ return found;
67
+ });
68
+ /** Open merge requests whose source **or** target is the branch — both block a rename, differently. */
69
+ const openMergeRequestsFor = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
70
+ const { project, token, branch } = options;
71
+ const encoded = encodeURIComponent(branch);
72
+ const [fromBranch, intoBranch] = yield Promise.all([
73
+ listMergeRequests({ project, token, filter: `source_branch=${encoded}` }),
74
+ listMergeRequests({ project, token, filter: `target_branch=${encoded}` }),
75
+ ]);
76
+ const byIid = new Map([...fromBranch, ...intoBranch].map((mr) => [mr.iid, mr]));
77
+ return [...byIid.values()].sort((a, b) => a.iid - b.iid);
78
+ });
79
+ exports.openMergeRequestsFor = openMergeRequestsFor;
80
+ const retargetMergeRequest = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
81
+ const { project, token, iid, target } = options;
82
+ yield request({
83
+ project,
84
+ token,
85
+ path: `/merge_requests/${iid}`,
86
+ method: 'PUT',
87
+ body: { [TARGET_BRANCH_FIELD]: target },
88
+ });
89
+ });
90
+ exports.retargetMergeRequest = retargetMergeRequest;
91
+ /**
92
+ * The GitLab API can change a merge request's target branch but never its source branch, so an open
93
+ * merge request *from* the branch cannot survive a rename — it has to be closed and reopened, which
94
+ * loses its discussion. `repair` reports these and refuses rather than doing that to someone.
95
+ */
96
+ const blockingMergeRequests = (options) => options.mergeRequests.filter((mr) => mr.sourceBranch === options.branch);
97
+ exports.blockingMergeRequests = blockingMergeRequests;
98
+ //# sourceMappingURL=gitlab.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gitlab.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/gitlab.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export * from './filter';
3
3
  export * from './frontmatter';
4
4
  export * from './load-content';
5
5
  export * from './migrate';
6
+ export * from './output-style';
6
7
  export * from './owned-paths';
7
8
  export * from './plan';
8
9
  export * from './render';
package/src/lib/index.js CHANGED
@@ -6,6 +6,7 @@ tslib_1.__exportStar(require("./filter"), exports);
6
6
  tslib_1.__exportStar(require("./frontmatter"), exports);
7
7
  tslib_1.__exportStar(require("./load-content"), exports);
8
8
  tslib_1.__exportStar(require("./migrate"), exports);
9
+ tslib_1.__exportStar(require("./output-style"), exports);
9
10
  tslib_1.__exportStar(require("./owned-paths"), exports);
10
11
  tslib_1.__exportStar(require("./plan"), exports);
11
12
  tslib_1.__exportStar(require("./render"), exports);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,mDAAyB;AACzB,wDAA8B;AAC9B,yDAA+B;AAC/B,oDAA0B;AAC1B,wDAA8B;AAC9B,iDAAuB;AACvB,mDAAyB;AACzB,iDAAuB;AACvB,2DAAiC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/index.ts"],"names":[],"mappings":";;;AAAA,mDAAyB;AACzB,mDAAyB;AACzB,wDAA8B;AAC9B,yDAA+B;AAC/B,oDAA0B;AAC1B,yDAA+B;AAC/B,wDAA8B;AAC9B,iDAAuB;AACvB,mDAAyB;AACzB,iDAAuB;AACvB,2DAAiC"}
@@ -0,0 +1,3 @@
1
+ export declare const outputStyleCommand: (options: {
2
+ argv: string[];
3
+ }) => 1 | 0;
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.outputStyleCommand = void 0;
4
+ const output_style_1 = require("./output-style");
5
+ const FLAGS_WITH_VALUE = ['--config-dir'];
6
+ const positionalArgs = (args) => args.filter((entry, index) => { var _a; return !entry.startsWith('--') && !FLAGS_WITH_VALUE.includes((_a = args[index - 1]) !== null && _a !== void 0 ? _a : ''); });
7
+ const flagValue = (args, flag) => {
8
+ const index = args.indexOf(flag);
9
+ return index === -1 ? undefined : args[index + 1];
10
+ };
11
+ const usage = () => `ethlete-agents output-style — install an Ethlete output style into Claude Code
12
+
13
+ An output style replaces Claude Code's own answer style for every session, so it is written
14
+ into the machine's Claude config rather than into a repository.
15
+
16
+ output-style [name] Install the style and switch Claude Code to it
17
+ (default: ${output_style_1.DEFAULT_OUTPUT_STYLE})
18
+
19
+ Options
20
+ --no-activate Write the file, but leave "outputStyle" in settings.json alone
21
+ --remove Delete the style file and stop using it
22
+ --force Overwrite (or delete) a style file this command did not write
23
+ --dry-run Print what would change without writing
24
+ --config-dir <path> Claude's config directory (default: $CLAUDE_CONFIG_DIR, else ~/.claude)
25
+
26
+ Ships: ${(0, output_style_1.availableOutputStyles)().join(', ') || 'nothing'}
27
+
28
+ Claude Code only. Codex has no output-style mechanism - everything it is told comes from
29
+ AGENTS.md, which \`ethlete-agents sync\` already writes.
30
+ `;
31
+ const describe = (file) => ` ${file.action.padEnd(6)} ${file.path}`;
32
+ const outputStyleCommand = (options) => {
33
+ const { argv } = options;
34
+ if (argv.includes('--help') || argv.includes('-h')) {
35
+ console.log(usage());
36
+ return 0;
37
+ }
38
+ const plan = (0, output_style_1.planOutputStyle)({
39
+ name: positionalArgs(argv)[0],
40
+ configDir: flagValue(argv, '--config-dir'),
41
+ activate: !argv.includes('--no-activate'),
42
+ remove: argv.includes('--remove'),
43
+ force: argv.includes('--force'),
44
+ });
45
+ console.log(`Style ${plan.name}`);
46
+ console.log(`Config ${plan.configDir}`);
47
+ if (plan.conflict) {
48
+ console.error(plan.conflict);
49
+ return 1;
50
+ }
51
+ if (plan.files.length === 0) {
52
+ console.log(argv.includes('--remove') ? 'It is not installed here.' : 'Already installed and in use.');
53
+ return 0;
54
+ }
55
+ plan.files.forEach((file) => console.log(describe(file)));
56
+ if (argv.includes('--dry-run')) {
57
+ console.log(`\n${plan.files.length} file(s) would change. Re-run without --dry-run to apply.`);
58
+ return 0;
59
+ }
60
+ (0, output_style_1.applyOutputStylePlan)(plan);
61
+ if (argv.includes('--remove')) {
62
+ console.log('\nRemoved. A session that is already open keeps the style until it restarts.');
63
+ return 0;
64
+ }
65
+ console.log(`\nInstalled. Start a new session, or run \`/output-style ${plan.name}\`, to use it.`);
66
+ return 0;
67
+ };
68
+ exports.outputStyleCommand = outputStyleCommand;
69
+ //# sourceMappingURL=output-style-command.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-style-command.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/output-style-command.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ export declare const DEFAULT_OUTPUT_STYLE = "ste-clarity";
2
+ /** Claude Code reads `~/.claude`, or `CLAUDE_CONFIG_DIR` when it is set; an explicit path wins over both. */
3
+ export declare const resolveClaudeConfigDir: (override?: string) => string;
4
+ export declare const availableOutputStyles: (contentRoot?: string) => string[];
5
+ /** `contents` is `null` exactly when the action is `remove`. */
6
+ export type PlannedOutputStyleFile = {
7
+ path: string;
8
+ action: 'create' | 'update' | 'remove';
9
+ contents: string | null;
10
+ };
11
+ export type OutputStylePlan = {
12
+ name: string;
13
+ configDir: string;
14
+ stylePath: string;
15
+ settingsPath: string;
16
+ /** The style Claude Code is set to now, before this plan is applied. */
17
+ activeStyle: string | null;
18
+ files: PlannedOutputStyleFile[];
19
+ /** Set when the installed file is not this command's own; nothing is planned until `force`. */
20
+ conflict: string | null;
21
+ };
22
+ export type OutputStyleOptions = {
23
+ name?: string;
24
+ configDir?: string;
25
+ /** Also point `outputStyle` in `settings.json` at the style (default). */
26
+ activate?: boolean;
27
+ remove?: boolean;
28
+ /** Overwrite or delete a style file this command did not write. */
29
+ force?: boolean;
30
+ contentRoot?: string;
31
+ };
32
+ /**
33
+ * What an install (or a `remove`) would write into Claude Code's user config, without touching
34
+ * disk. A style file that someone else wrote is reported as a conflict rather than overwritten -
35
+ * the name is a plain file name, so a hand-written style can carry it.
36
+ */
37
+ export declare const planOutputStyle: (options?: OutputStyleOptions) => OutputStylePlan;
38
+ export declare const applyOutputStylePlan: (plan: OutputStylePlan) => void;
@@ -0,0 +1,126 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.applyOutputStylePlan = exports.planOutputStyle = exports.availableOutputStyles = exports.resolveClaudeConfigDir = exports.DEFAULT_OUTPUT_STYLE = void 0;
4
+ const fs_1 = require("fs");
5
+ const os_1 = require("os");
6
+ const path_1 = require("path");
7
+ const load_content_1 = require("./load-content");
8
+ exports.DEFAULT_OUTPUT_STYLE = 'ste-clarity';
9
+ const CONTENT_DIR = 'output-styles';
10
+ const MARKER_PREFIX = '<!-- @ethlete/agent-rules output style';
11
+ const marker = (name) => `${MARKER_PREFIX} "${name}" — installed by \`ethlete-agents output-style\`. Re-run it to update; edits here are overwritten. -->`;
12
+ /** Claude Code reads `~/.claude`, or `CLAUDE_CONFIG_DIR` when it is set; an explicit path wins over both. */
13
+ const resolveClaudeConfigDir = (override) => { var _a; return (override === null || override === void 0 ? void 0 : override.trim()) || ((_a = process.env['CLAUDE_CONFIG_DIR']) === null || _a === void 0 ? void 0 : _a.trim()) || (0, path_1.join)((0, os_1.homedir)(), '.claude'); };
14
+ exports.resolveClaudeConfigDir = resolveClaudeConfigDir;
15
+ const availableOutputStyles = (contentRoot = (0, load_content_1.resolveContentRoot)()) => {
16
+ const dir = (0, path_1.join)(contentRoot, CONTENT_DIR);
17
+ if (!(0, fs_1.existsSync)(dir))
18
+ return [];
19
+ return (0, fs_1.readdirSync)(dir)
20
+ .filter((entry) => entry.endsWith('.md'))
21
+ .map((entry) => entry.slice(0, -'.md'.length))
22
+ .sort();
23
+ };
24
+ exports.availableOutputStyles = availableOutputStyles;
25
+ const FRONTMATTER = /^(---\n[\s\S]*?\n---)\n?([\s\S]*)$/;
26
+ /**
27
+ * The marker sits after the frontmatter, never before it: Claude Code only reads a style's `name`
28
+ * and `description` when the file opens with the fence.
29
+ */
30
+ const withMarker = (raw, name) => {
31
+ var _a;
32
+ const source = raw.replace(/\r\n/g, '\n').trim();
33
+ const parts = FRONTMATTER.exec(source);
34
+ if (!parts)
35
+ return `${marker(name)}\n\n${source}\n`;
36
+ return `${parts[1]}\n\n${marker(name)}\n\n${((_a = parts[2]) !== null && _a !== void 0 ? _a : '').trim()}\n`;
37
+ };
38
+ /**
39
+ * Two files count as the same style when they hold the same text in any layout, so a copy that
40
+ * predates the marker is still recognised as this command's own. Whitespace and the width of a
41
+ * table's separator row are both layout: Prettier pads both, and neither changes what Claude reads.
42
+ */
43
+ const normalize = (contents) => contents
44
+ .split('\n')
45
+ .filter((line) => !line.startsWith(MARKER_PREFIX))
46
+ .join(' ')
47
+ .replace(/-{3,}/g, '---')
48
+ .replace(/\s+/g, ' ')
49
+ .trim();
50
+ const readShippedStyle = (name, contentRoot) => {
51
+ const path = (0, path_1.join)(contentRoot, CONTENT_DIR, `${name}.md`);
52
+ if (!(0, fs_1.existsSync)(path)) {
53
+ const known = (0, exports.availableOutputStyles)(contentRoot);
54
+ throw new Error(`Unknown output style "${name}". This package ships: ${known.join(', ') || 'none'}.`);
55
+ }
56
+ return (0, fs_1.readFileSync)(path, 'utf8');
57
+ };
58
+ const readSettings = (path) => {
59
+ const raw = (0, fs_1.existsSync)(path) ? (0, fs_1.readFileSync)(path, 'utf8') : '';
60
+ try {
61
+ return JSON.parse(raw.trim() || '{}');
62
+ }
63
+ catch (_a) {
64
+ throw new Error(`${path} is not valid JSON. Fix the file, then run this again.`);
65
+ }
66
+ };
67
+ const withOutputStyle = (settings, name) => {
68
+ const next = Object.assign({}, settings);
69
+ if (name)
70
+ next.outputStyle = name;
71
+ else
72
+ delete next.outputStyle;
73
+ return `${JSON.stringify(next, null, 2)}\n`;
74
+ };
75
+ /**
76
+ * What an install (or a `remove`) would write into Claude Code's user config, without touching
77
+ * disk. A style file that someone else wrote is reported as a conflict rather than overwritten -
78
+ * the name is a plain file name, so a hand-written style can carry it.
79
+ */
80
+ const planOutputStyle = (options = {}) => {
81
+ var _a, _b;
82
+ const name = ((_a = options.name) === null || _a === void 0 ? void 0 : _a.trim()) || exports.DEFAULT_OUTPUT_STYLE;
83
+ const configDir = (0, exports.resolveClaudeConfigDir)(options.configDir);
84
+ const stylePath = (0, path_1.join)(configDir, CONTENT_DIR, `${name}.md`);
85
+ const settingsPath = (0, path_1.join)(configDir, 'settings.json');
86
+ const settings = readSettings(settingsPath);
87
+ const activeStyle = typeof settings.outputStyle === 'string' ? settings.outputStyle : null;
88
+ const installed = (0, fs_1.existsSync)(stylePath) ? (0, fs_1.readFileSync)(stylePath, 'utf8') : null;
89
+ const shipped = withMarker(readShippedStyle(name, (_b = options.contentRoot) !== null && _b !== void 0 ? _b : (0, load_content_1.resolveContentRoot)()), name);
90
+ const ours = installed === null || installed.includes(MARKER_PREFIX) || normalize(installed) === normalize(shipped);
91
+ const plan = { name, configDir, stylePath, settingsPath, activeStyle };
92
+ if (!ours && !options.force) {
93
+ const verb = options.remove ? 'delete' : 'overwrite';
94
+ return Object.assign(Object.assign({}, plan), { files: [], conflict: `${stylePath} was not written by this command. Pass --force to ${verb} it, or rename your own style.` });
95
+ }
96
+ const files = [];
97
+ const settingsAction = (0, fs_1.existsSync)(settingsPath) ? 'update' : 'create';
98
+ if (options.remove) {
99
+ if (installed !== null)
100
+ files.push({ path: stylePath, action: 'remove', contents: null });
101
+ if (activeStyle === name) {
102
+ files.push({ path: settingsPath, action: settingsAction, contents: withOutputStyle(settings, null) });
103
+ }
104
+ return Object.assign(Object.assign({}, plan), { files, conflict: null });
105
+ }
106
+ if (installed !== shipped) {
107
+ files.push({ path: stylePath, action: installed === null ? 'create' : 'update', contents: shipped });
108
+ }
109
+ if (options.activate !== false && activeStyle !== name) {
110
+ files.push({ path: settingsPath, action: settingsAction, contents: withOutputStyle(settings, name) });
111
+ }
112
+ return Object.assign(Object.assign({}, plan), { files, conflict: null });
113
+ };
114
+ exports.planOutputStyle = planOutputStyle;
115
+ const applyOutputStylePlan = (plan) => {
116
+ for (const file of plan.files) {
117
+ if (file.contents === null) {
118
+ (0, fs_1.rmSync)(file.path, { force: true });
119
+ continue;
120
+ }
121
+ (0, fs_1.mkdirSync)((0, path_1.dirname)(file.path), { recursive: true });
122
+ (0, fs_1.writeFileSync)(file.path, file.contents, 'utf8');
123
+ }
124
+ };
125
+ exports.applyOutputStylePlan = applyOutputStylePlan;
126
+ //# sourceMappingURL=output-style.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-style.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/output-style.ts"],"names":[],"mappings":"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"}
@@ -5,7 +5,7 @@ const fs_1 = require("fs");
5
5
  const path_1 = require("path");
6
6
  // `.agents/ethlete` and `.github/instructions/ethlete-*` are no longer emitted, but stay owned so
7
7
  // a sync prunes them from repos generated by older versions.
8
- const OWNED_DIRECTORIES = ['.agents/ethlete', '.claude/rules/ethlete', '.claude/hooks/ethlete'];
8
+ const OWNED_DIRECTORIES = ['.agents/ethlete', '.claude/rules/ethlete', '.claude/hooks/ethlete', '.codex/hooks/ethlete'];
9
9
  const OWNED_PARENTS = [
10
10
  { dir: '.agents/skills', match: (entry) => entry.startsWith('ethlete-') },
11
11
  { dir: '.claude/skills', match: (entry) => entry.startsWith('ethlete-') },
@@ -15,6 +15,23 @@ const OWNED_PARENTS = [
15
15
  match: (entry) => entry.startsWith('ethlete-') && entry.endsWith('.instructions.md'),
16
16
  },
17
17
  ];
18
+ /**
19
+ * Files that exist only to register hooks: once the last generated entry is removed the merge
20
+ * leaves `{}` behind, which is ours to clean up. Any hand-written entry keeps the file non-empty
21
+ * and therefore unowned.
22
+ */
23
+ const OWNED_WHEN_EMPTY = ['.codex/hooks.json'];
24
+ const isEmptyObject = (absolute) => {
25
+ if (!(0, fs_1.existsSync)(absolute))
26
+ return false;
27
+ try {
28
+ const parsed = JSON.parse((0, fs_1.readFileSync)(absolute, 'utf8'));
29
+ return typeof parsed === 'object' && parsed !== null && !Array.isArray(parsed) && Object.keys(parsed).length === 0;
30
+ }
31
+ catch (_a) {
32
+ return false;
33
+ }
34
+ };
18
35
  const walk = (root, absoluteDir) => {
19
36
  if (!(0, fs_1.existsSync)(absoluteDir))
20
37
  return [];
@@ -44,6 +61,7 @@ const collectOwnedPaths = (root) => {
44
61
  owned.push(...((0, fs_1.statSync)(absolute).isDirectory() ? walk(root, absolute) : [`${parent.dir}/${entry}`]));
45
62
  }
46
63
  }
64
+ owned.push(...OWNED_WHEN_EMPTY.filter((path) => isEmptyObject((0, path_1.join)(root, path))));
47
65
  return owned;
48
66
  };
49
67
  exports.collectOwnedPaths = collectOwnedPaths;
@@ -1 +1 @@
1
- {"version":3,"file":"owned-paths.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/owned-paths.ts"],"names":[],"mappings":";;;AAAA,2BAAuD;AACvD,+BAA2C;AAE3C,kGAAkG;AAClG,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,CAAC,iBAAiB,EAAE,uBAAuB,EAAE,uBAAuB,CAAC,CAAC;AAChG,MAAM,aAAa,GAAG;IACpB,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;IACjF,EAAE,GAAG,EAAE,gBAAgB,EAAE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE;IACjF,EAAE,GAAG,EAAE,eAAe,EAAE,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE;IAC1G;QACE,GAAG,EAAE,sBAAsB;QAC3B,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,kBAAkB,CAAC;KAC7F;CACF,CAAC;AAEF,MAAM,IAAI,GAAG,CAAC,IAAY,EAAE,WAAmB,EAAY,EAAE;IAC3D,IAAI,CAAC,IAAA,eAAU,EAAC,WAAW,CAAC;QAAE,OAAO,EAAE,CAAC;IAExC,OAAO,IAAA,gBAAW,EAAC,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;QAChD,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAE1C,IAAI,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE;YAAE,OAAO,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QAElE,OAAO,CAAC,IAAA,eAAQ,EAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,KAAK,CAAC,UAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;AACL,CAAC,CAAC;AAEF;;;;;GAKG;AACI,MAAM,iBAAiB,GAAG,CAAC,IAAY,EAAE,EAAE;IAChD,MAAM,KAAK,GAAG,iBAAiB,CAAC,OAAO,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,EAAE,IAAA,WAAI,EAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC;IAE9E,KAAK,MAAM,MAAM,IAAI,aAAa,EAAE,CAAC;QACnC,MAAM,cAAc,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAE9C,IAAI,CAAC,IAAA,eAAU,EAAC,cAAc,CAAC;YAAE,SAAS;QAE1C,KAAK,MAAM,KAAK,IAAI,IAAA,gBAAW,EAAC,cAAc,CAAC,EAAE,CAAC;YAChD,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC;gBAAE,SAAS;YAEnC,MAAM,QAAQ,GAAG,IAAA,WAAI,EAAC,cAAc,EAAE,KAAK,CAAC,CAAC;YAE7C,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,IAAA,aAAQ,EAAC,QAAQ,CAAC,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,GAAG,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;QACxG,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC,CAAC;AAlBW,QAAA,iBAAiB,qBAkB5B"}
1
+ {"version":3,"file":"owned-paths.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/owned-paths.ts"],"names":[],"mappings":"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"}
package/src/lib/plan.d.ts CHANGED
@@ -20,5 +20,4 @@ export declare const claudeMdImportsAgentsMd: (root: string) => boolean;
20
20
  */
21
21
  export declare const buildPlan: (options: {
22
22
  config: SyncConfig;
23
- version: string;
24
23
  }) => SyncPlan;