@ethlete/agent-rules 0.1.0-next.2 → 0.1.0-next.21
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/CHANGELOG.md +275 -0
- package/README.md +350 -29
- package/THIRD-PARTY-LICENSES.md +35 -0
- package/content/git-hooks/post-checkout.sh +10 -0
- package/content/git-hooks/pre-push.sh +5 -0
- package/content/hooks/context-warning.py +766 -108
- package/content/hooks/subagent-model-policy.py +193 -0
- package/content/output-styles/ste-clarity.md +131 -0
- package/content/rules/app-styling.md +59 -0
- package/content/rules/comments.md +53 -20
- package/content/rules/lint-and-format.md +6 -5
- package/content/rules/nx-layout.md +47 -0
- package/content/rules/reactive-state.md +1 -1
- package/content/rules/styling.md +9 -7
- package/content/rules/subagent-models.md +29 -0
- package/content/skills/angular-patterns/SKILL.md +30 -7
- package/content/skills/api-source/SKILL.md +130 -0
- package/content/skills/app-testing/SKILL.md +141 -0
- package/content/skills/codex-subagent/SKILL.md +90 -0
- package/content/skills/codex-subagent/codex-agent.mjs +229 -0
- package/content/skills/design-exploration/SKILL.md +205 -0
- package/content/skills/design-exploration/check-story.mjs +139 -0
- package/content/skills/design-exploration/shoot-template.mjs +61 -0
- package/content/skills/domain-modeling/ADR-FORMAT.md +47 -0
- package/content/skills/domain-modeling/CONTEXT-FORMAT.md +60 -0
- package/content/skills/domain-modeling/SKILL.md +80 -0
- package/content/skills/figma-export/SKILL.md +191 -0
- package/content/skills/figma-export/dump-figma-layers.py +83 -0
- package/content/skills/figma-export/dump-figma-svg.py +235 -0
- package/content/skills/figma-export/measure-template.mjs +87 -0
- package/content/skills/git-commit/SKILL.md +6 -7
- package/content/skills/git-flow/SKILL.md +87 -0
- package/content/skills/grill-with-docs/SKILL.md +13 -0
- package/content/skills/grilling/SKILL.md +34 -0
- package/content/skills/handoff/SKILL.md +74 -4
- package/content/skills/query/SKILL.md +165 -64
- package/content/skills/rxjs-signals/SKILL.md +31 -4
- package/content/skills/sdk-docs/SKILL.md +50 -14
- package/content/skills/sdk-local-build/SKILL.md +30 -10
- package/content/skills/sdk-local-build/sdk-local-baseline.mjs +64 -0
- package/content/skills/sdk-source/SKILL.md +49 -21
- package/content/skills/sdk-update/SKILL.md +96 -0
- package/content/skills/story-styling/SKILL.md +10 -8
- package/content/skills/styleguide/SKILL.md +12 -7
- package/content/skills/styleguide/assets.md +54 -0
- package/content/skills/styleguide/changesets.md +17 -0
- package/content/skills/styleguide/file-structure.md +73 -0
- package/content/skills/styleguide/lint-rule-lookup.md +51 -0
- package/content/skills/styleguide/storybook-structure.md +25 -0
- package/content/skills/theming/SKILL.md +41 -28
- package/content/skills/timetrack/SKILL.md +397 -0
- package/content/skills/verify-in-app/SKILL.md +107 -0
- package/migrations/app-styling-utilities.md +63 -0
- package/migrations/list-state-query-form.md +20 -0
- package/migrations/nx-layout.md +29 -0
- package/migrations/sdk-components-over-hand-built-ui.md +27 -0
- package/migrations/search-query-field.md +52 -0
- package/migrations.json +48 -0
- package/package.json +16 -2
- package/src/index.js +63 -28
- package/src/index.js.map +1 -1
- package/src/lib/cli-args.d.ts +9 -0
- package/src/lib/cli-args.js +48 -0
- package/src/lib/cli-args.js.map +1 -0
- package/src/lib/commitlint.d.ts +10 -0
- package/src/lib/commitlint.js +51 -0
- package/src/lib/commitlint.js.map +1 -0
- package/src/lib/config.d.ts +38 -4
- package/src/lib/config.js +84 -8
- package/src/lib/config.js.map +1 -1
- package/src/lib/filter.d.ts +2 -0
- package/src/lib/filter.js +4 -4
- package/src/lib/filter.js.map +1 -1
- package/src/lib/frontmatter.d.ts +2 -0
- package/src/lib/frontmatter.js +33 -5
- package/src/lib/frontmatter.js.map +1 -1
- package/src/lib/git-flow/build.d.ts +35 -0
- package/src/lib/git-flow/build.js +24 -0
- package/src/lib/git-flow/build.js.map +1 -0
- package/src/lib/git-flow/config.d.ts +59 -0
- package/src/lib/git-flow/config.js +50 -0
- package/src/lib/git-flow/config.js.map +1 -0
- package/src/lib/git-flow/index.d.ts +6 -0
- package/src/lib/git-flow/index.js +10 -0
- package/src/lib/git-flow/index.js.map +1 -0
- package/src/lib/git-flow/parse.d.ts +49 -0
- package/src/lib/git-flow/parse.js +300 -0
- package/src/lib/git-flow/parse.js.map +1 -0
- package/src/lib/git-flow/rename.d.ts +24 -0
- package/src/lib/git-flow/rename.js +70 -0
- package/src/lib/git-flow/rename.js.map +1 -0
- package/src/lib/git-flow/start.d.ts +49 -0
- package/src/lib/git-flow/start.js +57 -0
- package/src/lib/git-flow/start.js.map +1 -0
- package/src/lib/git-flow/validate.d.ts +34 -0
- package/src/lib/git-flow/validate.js +72 -0
- package/src/lib/git-flow/validate.js.map +1 -0
- package/src/lib/git-flow-command.d.ts +4 -0
- package/src/lib/git-flow-command.js +157 -0
- package/src/lib/git-flow-command.js.map +1 -0
- package/src/lib/git-flow-repair.d.ts +17 -0
- package/src/lib/git-flow-repair.js +157 -0
- package/src/lib/git-flow-repair.js.map +1 -0
- package/src/lib/git-flow-start.d.ts +20 -0
- package/src/lib/git-flow-start.js +132 -0
- package/src/lib/git-flow-start.js.map +1 -0
- package/src/lib/git.d.ts +64 -0
- package/src/lib/git.js +131 -0
- package/src/lib/git.js.map +1 -0
- package/src/lib/gitlab.d.ts +35 -0
- package/src/lib/gitlab.js +108 -0
- package/src/lib/gitlab.js.map +1 -0
- package/src/lib/index.d.ts +2 -0
- package/src/lib/index.js +2 -0
- package/src/lib/index.js.map +1 -1
- package/src/lib/migrate.js +1 -1
- package/src/lib/migrate.js.map +1 -1
- package/src/lib/output-style-command.d.ts +3 -0
- package/src/lib/output-style-command.js +69 -0
- package/src/lib/output-style-command.js.map +1 -0
- package/src/lib/output-style.d.ts +38 -0
- package/src/lib/output-style.js +134 -0
- package/src/lib/output-style.js.map +1 -0
- package/src/lib/owned-paths.js +27 -3
- package/src/lib/owned-paths.js.map +1 -1
- package/src/lib/package-runner.d.ts +3 -0
- package/src/lib/package-runner.js +69 -0
- package/src/lib/package-runner.js.map +1 -0
- package/src/lib/plain-text.d.ts +9 -0
- package/src/lib/plain-text.js +22 -0
- package/src/lib/plain-text.js.map +1 -0
- package/src/lib/plan.d.ts +6 -6
- package/src/lib/plan.js +147 -40
- package/src/lib/plan.js.map +1 -1
- package/src/lib/prompt.d.ts +8 -0
- package/src/lib/prompt.js +27 -0
- package/src/lib/prompt.js.map +1 -0
- package/src/lib/render.d.ts +24 -2
- package/src/lib/render.js +39 -10
- package/src/lib/render.js.map +1 -1
- package/src/lib/sync.d.ts +0 -1
- package/src/lib/sync.js +23 -15
- package/src/lib/sync.js.map +1 -1
- package/src/lib/targets/agents-skills.js +1 -1
- package/src/lib/targets/agents-skills.js.map +1 -1
- package/src/lib/targets/claude-hooks.d.ts +1 -23
- package/src/lib/targets/claude-hooks.js +17 -85
- package/src/lib/targets/claude-hooks.js.map +1 -1
- package/src/lib/targets/claude.js +1 -2
- package/src/lib/targets/claude.js.map +1 -1
- package/src/lib/targets/codex-hooks.d.ts +12 -0
- package/src/lib/targets/codex-hooks.js +34 -0
- package/src/lib/targets/codex-hooks.js.map +1 -0
- package/src/lib/targets/codex.js +4 -4
- package/src/lib/targets/codex.js.map +1 -1
- package/src/lib/targets/copilot.js +3 -3
- package/src/lib/targets/copilot.js.map +1 -1
- package/src/lib/targets/cursor.js +2 -2
- package/src/lib/targets/cursor.js.map +1 -1
- package/src/lib/targets/git-hooks.d.ts +24 -0
- package/src/lib/targets/git-hooks.js +71 -0
- package/src/lib/targets/git-hooks.js.map +1 -0
- package/src/lib/targets/hooks-shared.d.ts +58 -0
- package/src/lib/targets/hooks-shared.js +128 -0
- package/src/lib/targets/hooks-shared.js.map +1 -0
- package/src/lib/targets/shared.d.ts +1 -9
- package/src/lib/targets/shared.js +4 -8
- package/src/lib/targets/shared.js.map +1 -1
- package/src/lib/timetrack-command.d.ts +11 -0
- package/src/lib/timetrack-command.js +1055 -0
- package/src/lib/timetrack-command.js.map +1 -0
- package/src/lib/timetrack-snapshot.d.ts +55 -0
- package/src/lib/timetrack-snapshot.js +120 -0
- package/src/lib/timetrack-snapshot.js.map +1 -0
- package/src/lib/timetrack.d.ts +561 -0
- package/src/lib/timetrack.js +271 -0
- package/src/lib/timetrack.js.map +1 -0
- package/content/skills/styleguide/STYLEGUIDE.md +0 -520
package/src/lib/git.js
ADDED
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.commitPathsOnDays = exports.remoteUrl = exports.defaultRemote = exports.remoteBranchExists = exports.localBranchExists = exports.isDirty = exports.projectRootsOf = exports.allBranches = exports.commitAuthorOf = 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, {
|
|
7
|
+
cwd: options.root,
|
|
8
|
+
encoding: 'utf8',
|
|
9
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
10
|
+
maxBuffer: 256 * 1024 * 1024,
|
|
11
|
+
}).trim();
|
|
12
|
+
exports.git = git;
|
|
13
|
+
/** Runs a command whose output belongs on the terminal — a push, a fetch, a branch creation. */
|
|
14
|
+
const gitLoud = (options) => (0, child_process_1.execFileSync)('git', options.args, { cwd: options.root, encoding: 'utf8', stdio: ['ignore', 'inherit', 'inherit'] });
|
|
15
|
+
exports.gitLoud = gitLoud;
|
|
16
|
+
const currentBranch = (root) => (0, exports.git)({ root, args: ['rev-parse', '--abbrev-ref', 'HEAD'] });
|
|
17
|
+
exports.currentBranch = currentBranch;
|
|
18
|
+
/**
|
|
19
|
+
* The identity a checkout commits under, which is how somebody else's commits stay out of a repair.
|
|
20
|
+
* A work checkout and a personal one are often two addresses, so this is read per checkout.
|
|
21
|
+
*/
|
|
22
|
+
const commitAuthorOf = (root) => {
|
|
23
|
+
try {
|
|
24
|
+
return (0, exports.git)({ root, args: ['config', '--get', 'user.email'] }) || undefined;
|
|
25
|
+
}
|
|
26
|
+
catch (_a) {
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
};
|
|
30
|
+
exports.commitAuthorOf = commitAuthorOf;
|
|
31
|
+
const allBranches = (root) => {
|
|
32
|
+
const refs = (0, exports.git)({ root, args: ['for-each-ref', '--format=%(refname)', 'refs/heads', 'refs/remotes'] });
|
|
33
|
+
const names = refs
|
|
34
|
+
.split('\n')
|
|
35
|
+
.filter((ref) => ref && !ref.endsWith('/HEAD'))
|
|
36
|
+
.map(git_flow_1.stripRefPrefix);
|
|
37
|
+
return [...new Set(names)].sort();
|
|
38
|
+
};
|
|
39
|
+
exports.allBranches = allBranches;
|
|
40
|
+
/**
|
|
41
|
+
* The directories a checkout declares as projects, relative to it, deepest last.
|
|
42
|
+
*
|
|
43
|
+
* A repository states its own boundaries in the files its tooling reads, and those beat any depth a
|
|
44
|
+
* rule could pick: two sibling libraries stay apart, and one library's own subdirectories fold into
|
|
45
|
+
* it. The checkout root is left out on purpose - it is the whole checkout under another name.
|
|
46
|
+
*
|
|
47
|
+
* Read through `git ls-files` rather than the filesystem, so an ignored or vendored copy under
|
|
48
|
+
* `node_modules` never counts as a project.
|
|
49
|
+
*/
|
|
50
|
+
const projectRootsOf = (root) => {
|
|
51
|
+
const out = (0, exports.git)({ root, args: ['ls-files', '--', '*/project.json', '*/package.json'] });
|
|
52
|
+
const roots = out
|
|
53
|
+
.split('\n')
|
|
54
|
+
.filter(Boolean)
|
|
55
|
+
.filter((path) => !path.includes('node_modules/'))
|
|
56
|
+
.map((path) => path.slice(0, path.lastIndexOf('/')));
|
|
57
|
+
return [...new Set(roots)].sort();
|
|
58
|
+
};
|
|
59
|
+
exports.projectRootsOf = projectRootsOf;
|
|
60
|
+
const isDirty = (root) => (0, exports.git)({ root, args: ['status', '--porcelain'] }).length > 0;
|
|
61
|
+
exports.isDirty = isDirty;
|
|
62
|
+
const refExists = (options) => {
|
|
63
|
+
try {
|
|
64
|
+
(0, exports.git)({ root: options.root, args: ['rev-parse', '--verify', '--quiet', options.ref] });
|
|
65
|
+
return true;
|
|
66
|
+
}
|
|
67
|
+
catch (_a) {
|
|
68
|
+
return false;
|
|
69
|
+
}
|
|
70
|
+
};
|
|
71
|
+
const localBranchExists = (options) => refExists({ root: options.root, ref: `refs/heads/${options.branch}` });
|
|
72
|
+
exports.localBranchExists = localBranchExists;
|
|
73
|
+
const remoteBranchExists = (options) => (0, exports.git)({ root: options.root, args: ['ls-remote', '--heads', options.remote, `refs/heads/${options.branch}`] }).length >
|
|
74
|
+
0;
|
|
75
|
+
exports.remoteBranchExists = remoteBranchExists;
|
|
76
|
+
/** `origin` when it exists, otherwise the only remote — a repo with several and no `origin` is ambiguous. */
|
|
77
|
+
const defaultRemote = (root) => {
|
|
78
|
+
const remotes = (0, exports.git)({ root, args: ['remote'] })
|
|
79
|
+
.split('\n')
|
|
80
|
+
.filter(Boolean);
|
|
81
|
+
if (remotes.includes('origin'))
|
|
82
|
+
return 'origin';
|
|
83
|
+
return remotes.length === 1 ? remotes[0] : undefined;
|
|
84
|
+
};
|
|
85
|
+
exports.defaultRemote = defaultRemote;
|
|
86
|
+
const remoteUrl = (options) => (0, exports.git)({ root: options.root, args: ['remote', 'get-url', options.remote] });
|
|
87
|
+
exports.remoteUrl = remoteUrl;
|
|
88
|
+
/**
|
|
89
|
+
* The commits of the given local days, with the files each changed.
|
|
90
|
+
*
|
|
91
|
+
* `%cd` with `--date=format-local:%F` is the day in the machine's own zone, which is the grain
|
|
92
|
+
* Timetrack keys a day by. The span is read from the days given, so one `git log` answers them all,
|
|
93
|
+
* and a commit on a day outside the list is dropped.
|
|
94
|
+
*
|
|
95
|
+
* `--branches` and the author filter must stay in step with the collector that opened the record
|
|
96
|
+
* (`gitLogArgs` in `libs/timetrack/src/lib/git/scan.ts`). Read a narrower history than the collector
|
|
97
|
+
* did and a day the record holds looks empty, which makes a repair refuse or drop it.
|
|
98
|
+
*/
|
|
99
|
+
const commitPathsOnDays = (options) => {
|
|
100
|
+
const wanted = new Set(options.days);
|
|
101
|
+
const sorted = [...wanted].sort();
|
|
102
|
+
const first = sorted[0];
|
|
103
|
+
const last = sorted[sorted.length - 1];
|
|
104
|
+
if (!first || !last)
|
|
105
|
+
return [];
|
|
106
|
+
const out = (0, exports.git)({
|
|
107
|
+
root: options.root,
|
|
108
|
+
args: [
|
|
109
|
+
'log',
|
|
110
|
+
'--branches',
|
|
111
|
+
'--name-only',
|
|
112
|
+
'--no-merges',
|
|
113
|
+
'--pretty=format:%x00%cd',
|
|
114
|
+
'--date=format-local:%F',
|
|
115
|
+
`--since=${first} 00:00`,
|
|
116
|
+
`--until=${last} 23:59:59`,
|
|
117
|
+
...(options.author ? [`--author=${options.author}`] : []),
|
|
118
|
+
],
|
|
119
|
+
});
|
|
120
|
+
return out
|
|
121
|
+
.split('\0')
|
|
122
|
+
.flatMap((block) => {
|
|
123
|
+
var _a;
|
|
124
|
+
const lines = block.split('\n').filter(Boolean);
|
|
125
|
+
const day = (_a = lines.shift()) !== null && _a !== void 0 ? _a : '';
|
|
126
|
+
return wanted.has(day) && lines.length ? { day, paths: lines } : [];
|
|
127
|
+
})
|
|
128
|
+
.reverse();
|
|
129
|
+
};
|
|
130
|
+
exports.commitPathsOnDays = commitPathsOnDays;
|
|
131
|
+
//# 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,108 @@
|
|
|
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 gitLabHosts = () => {
|
|
19
|
+
var _a, _b;
|
|
20
|
+
return [...((_a = process.env['GITLAB_HOST']) !== null && _a !== void 0 ? _a : '').split(','), (_b = process.env['CI_SERVER_HOST']) !== null && _b !== void 0 ? _b : '']
|
|
21
|
+
.map((host) => host.trim().toLowerCase())
|
|
22
|
+
.filter(Boolean);
|
|
23
|
+
};
|
|
24
|
+
const gitLabToken = () => { var _a; return ((_a = process.env['GITLAB_TOKEN']) === null || _a === void 0 ? void 0 : _a.trim()) || undefined; };
|
|
25
|
+
exports.gitLabToken = gitLabToken;
|
|
26
|
+
const TARGET_BRANCH_FIELD = 'target_branch';
|
|
27
|
+
/* eslint-enable @typescript-eslint/naming-convention */
|
|
28
|
+
const toMergeRequest = (raw) => {
|
|
29
|
+
var _a, _b, _c, _d, _e;
|
|
30
|
+
return ({
|
|
31
|
+
iid: (_a = raw.iid) !== null && _a !== void 0 ? _a : 0,
|
|
32
|
+
title: (_b = raw.title) !== null && _b !== void 0 ? _b : '',
|
|
33
|
+
sourceBranch: (_c = raw.source_branch) !== null && _c !== void 0 ? _c : '',
|
|
34
|
+
targetBranch: (_d = raw.target_branch) !== null && _d !== void 0 ? _d : '',
|
|
35
|
+
url: (_e = raw.web_url) !== null && _e !== void 0 ? _e : '',
|
|
36
|
+
});
|
|
37
|
+
};
|
|
38
|
+
const request = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
39
|
+
const { project, token, path, method, body } = options;
|
|
40
|
+
if (!gitLabHosts().includes(project.host.toLowerCase())) {
|
|
41
|
+
throw new Error(`Not sending GITLAB_TOKEN to ${project.host}: it is not a configured GitLab host. Set GITLAB_HOST=${project.host} if it is one, or pass --no-mr-check.`);
|
|
42
|
+
}
|
|
43
|
+
const base = `https://${project.host}/api/v4/projects/${encodeURIComponent(project.project)}`;
|
|
44
|
+
const response = yield fetch(`${base}${path}`, {
|
|
45
|
+
method: method !== null && method !== void 0 ? method : 'GET',
|
|
46
|
+
headers: Object.assign({ 'private-token': token, accept: 'application/json' }, (body ? { 'content-type': 'application/json' } : {})),
|
|
47
|
+
body: body ? JSON.stringify(body) : undefined,
|
|
48
|
+
redirect: 'error',
|
|
49
|
+
signal: AbortSignal.timeout(TIMEOUT_MS),
|
|
50
|
+
});
|
|
51
|
+
if (response.status === 401 || response.status === 403) {
|
|
52
|
+
throw new Error(`GitLab rejected the token (${response.status}) for ${project.project}. GITLAB_TOKEN needs the "api" scope and Developer access.`);
|
|
53
|
+
}
|
|
54
|
+
if (!response.ok) {
|
|
55
|
+
throw new Error(`GitLab responded ${response.status} ${response.statusText} for ${method !== null && method !== void 0 ? method : 'GET'} ${path}.`);
|
|
56
|
+
}
|
|
57
|
+
return { body: (yield response.json()), nextPage: response.headers.get('x-next-page') || undefined };
|
|
58
|
+
});
|
|
59
|
+
/**
|
|
60
|
+
* Follows `x-next-page` rather than reading the first page only: a rename that silently skipped a
|
|
61
|
+
* merge request on page two would leave exactly the half-finished state `repair` must never produce.
|
|
62
|
+
*/
|
|
63
|
+
const listMergeRequests = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
64
|
+
const { project, token, filter } = options;
|
|
65
|
+
const found = [];
|
|
66
|
+
let page = '1';
|
|
67
|
+
while (page) {
|
|
68
|
+
const result = yield request({
|
|
69
|
+
project,
|
|
70
|
+
token,
|
|
71
|
+
path: `/merge_requests?state=opened&per_page=100&${filter}&page=${page}`,
|
|
72
|
+
});
|
|
73
|
+
found.push(...result.body.map(toMergeRequest));
|
|
74
|
+
page = result.nextPage;
|
|
75
|
+
}
|
|
76
|
+
return found;
|
|
77
|
+
});
|
|
78
|
+
/** Open merge requests whose source **or** target is the branch — both block a rename, differently. */
|
|
79
|
+
const openMergeRequestsFor = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
80
|
+
const { project, token, branch } = options;
|
|
81
|
+
const encoded = encodeURIComponent(branch);
|
|
82
|
+
const [fromBranch, intoBranch] = yield Promise.all([
|
|
83
|
+
listMergeRequests({ project, token, filter: `source_branch=${encoded}` }),
|
|
84
|
+
listMergeRequests({ project, token, filter: `target_branch=${encoded}` }),
|
|
85
|
+
]);
|
|
86
|
+
const byIid = new Map([...fromBranch, ...intoBranch].map((mr) => [mr.iid, mr]));
|
|
87
|
+
return [...byIid.values()].sort((a, b) => a.iid - b.iid);
|
|
88
|
+
});
|
|
89
|
+
exports.openMergeRequestsFor = openMergeRequestsFor;
|
|
90
|
+
const retargetMergeRequest = (options) => tslib_1.__awaiter(void 0, void 0, void 0, function* () {
|
|
91
|
+
const { project, token, iid, target } = options;
|
|
92
|
+
yield request({
|
|
93
|
+
project,
|
|
94
|
+
token,
|
|
95
|
+
path: `/merge_requests/${iid}`,
|
|
96
|
+
method: 'PUT',
|
|
97
|
+
body: { [TARGET_BRANCH_FIELD]: target },
|
|
98
|
+
});
|
|
99
|
+
});
|
|
100
|
+
exports.retargetMergeRequest = retargetMergeRequest;
|
|
101
|
+
/**
|
|
102
|
+
* The GitLab API can change a merge request's target branch but never its source branch, so an open
|
|
103
|
+
* merge request *from* the branch cannot survive a rename — it has to be closed and reopened, which
|
|
104
|
+
* loses its discussion. `repair` reports these and refuses rather than doing that to someone.
|
|
105
|
+
*/
|
|
106
|
+
const blockingMergeRequests = (options) => options.mergeRequests.filter((mr) => mr.sourceBranch === options.branch);
|
|
107
|
+
exports.blockingMergeRequests = blockingMergeRequests;
|
|
108
|
+
//# 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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"}
|
package/src/lib/index.d.ts
CHANGED
|
@@ -3,7 +3,9 @@ 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';
|
|
8
|
+
export * from './plain-text';
|
|
7
9
|
export * from './plan';
|
|
8
10
|
export * from './render';
|
|
9
11
|
export * from './sync';
|
package/src/lib/index.js
CHANGED
|
@@ -6,7 +6,9 @@ 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);
|
|
11
|
+
tslib_1.__exportStar(require("./plain-text"), exports);
|
|
10
12
|
tslib_1.__exportStar(require("./plan"), exports);
|
|
11
13
|
tslib_1.__exportStar(require("./render"), exports);
|
|
12
14
|
tslib_1.__exportStar(require("./sync"), exports);
|
package/src/lib/index.js.map
CHANGED
|
@@ -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,uDAA6B;AAC7B,iDAAuB;AACvB,mDAAyB;AACzB,iDAAuB;AACvB,2DAAiC"}
|
package/src/lib/migrate.js
CHANGED
|
@@ -31,7 +31,7 @@ const migrateClaudeMd = (options) => {
|
|
|
31
31
|
(0, fs_1.writeFileSync)(claudePath, `@${AGENTS_MD}\n`, 'utf8');
|
|
32
32
|
return;
|
|
33
33
|
}
|
|
34
|
-
const claudeContent = (0, fs_1.readFileSync)(claudePath, 'utf8').trim();
|
|
34
|
+
const claudeContent = withoutMarkedBlock((0, fs_1.readFileSync)(claudePath, 'utf8')).trim();
|
|
35
35
|
const agentsContent = (0, fs_1.existsSync)(agentsPath) ? (0, fs_1.readFileSync)(agentsPath, 'utf8').trim() : '';
|
|
36
36
|
const merged = [claudeContent, agentsContent].filter((part) => part.length > 0).join('\n\n');
|
|
37
37
|
log(`move ${CLAUDE_MD} content into ${AGENTS_MD}`);
|
package/src/lib/migrate.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/migrate.ts"],"names":[],"mappings":";;;AAAA,2BASY;AACZ,+BAA+C;AAC/C,qCAAyD;AACzD,iCAAiD;AACjD,qCAAoD;AACpD,iCAA0C;AAE1C,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,OAA0C,EAAE,EAAE;IACrE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEzC,IAAI,IAAA,8BAAuB,EAAC,IAAI,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,UAAU,SAAS,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAE1D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,UAAU,SAAS,QAAQ,SAAS,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM;YAAE,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;QAElE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../../../libs/agent-rules/src/lib/migrate.ts"],"names":[],"mappings":";;;AAAA,2BASY;AACZ,+BAA+C;AAC/C,qCAAyD;AACzD,iCAAiD;AACjD,qCAAoD;AACpD,iCAA0C;AAE1C,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,SAAS,GAAG,WAAW,CAAC;AAC9B,MAAM,aAAa,GAAG,gBAAgB,CAAC;AACvC,MAAM,aAAa,GAAG,gBAAgB,CAAC;AAEvC,MAAM,GAAG,GAAG,CAAC,OAAe,EAAE,EAAE,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,OAAO,EAAE,CAAC,CAAC;AAE7D;;;;GAIG;AACH,MAAM,eAAe,GAAG,CAAC,OAA0C,EAAE,EAAE;IACrE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACzC,MAAM,UAAU,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAEzC,IAAI,IAAA,8BAAuB,EAAC,IAAI,CAAC,EAAE,CAAC;QAClC,GAAG,CAAC,UAAU,SAAS,sBAAsB,SAAS,EAAE,CAAC,CAAC;QAE1D,OAAO;IACT,CAAC;IAED,IAAI,CAAC,IAAA,eAAU,EAAC,UAAU,CAAC,EAAE,CAAC;QAC5B,GAAG,CAAC,UAAU,SAAS,QAAQ,SAAS,UAAU,CAAC,CAAC;QAEpD,IAAI,CAAC,MAAM;YAAE,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;QAElE,OAAO;IACT,CAAC;IAED,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;IAClF,MAAM,aAAa,GAAG,IAAA,eAAU,EAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,UAAU,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAC5F,MAAM,MAAM,GAAG,CAAC,aAAa,EAAE,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAE7F,GAAG,CAAC,UAAU,SAAS,iBAAiB,SAAS,EAAE,CAAC,CAAC;IACrD,GAAG,CAAC,UAAU,SAAS,QAAQ,SAAS,UAAU,CAAC,CAAC;IAEpD,IAAI,MAAM;QAAE,OAAO;IAEnB,IAAA,kBAAa,EAAC,UAAU,EAAE,GAAG,MAAM,IAAI,EAAE,MAAM,CAAC,CAAC;IACjD,IAAA,kBAAa,EAAC,UAAU,EAAE,IAAI,SAAS,IAAI,EAAE,MAAM,CAAC,CAAC;AACvD,CAAC,CAAC;AAEF;;;;GAIG;AACH,MAAM,aAAa,GAAG,CAAC,OAA0C,EAAE,EAAE;IACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,YAAY,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE/C,IAAI,CAAC,IAAA,eAAU,EAAC,YAAY,CAAC;QAAE,OAAO;IAEtC,KAAK,MAAM,KAAK,IAAI,IAAA,gBAAW,EAAC,YAAY,CAAC,EAAE,CAAC;QAC9C,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QAEzC,IAAI,KAAK,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,IAAA,cAAS,EAAC,MAAM,CAAC,CAAC,cAAc,EAAE,IAAI,CAAC,IAAA,cAAS,EAAC,MAAM,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC;YAC3G,SAAS;QACX,CAAC;QAED,MAAM,WAAW,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,aAAa,EAAE,KAAK,CAAC,CAAC;QAErD,IAAI,IAAA,eAAU,EAAC,WAAW,CAAC,EAAE,CAAC;YAC5B,GAAG,CAAC,UAAU,aAAa,IAAI,KAAK,MAAM,aAAa,IAAI,KAAK,iBAAiB,CAAC,CAAC;YACnF,SAAS;QACX,CAAC;QAED,GAAG,CAAC,UAAU,aAAa,IAAI,KAAK,MAAM,aAAa,IAAI,KAAK,yBAAyB,CAAC,CAAC;QAE3F,IAAI,MAAM;YAAE,SAAS;QAErB,IAAA,cAAS,EAAC,IAAA,cAAO,EAAC,WAAW,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACrD,IAAA,eAAU,EAAC,MAAM,EAAE,WAAW,CAAC,CAAC;QAEhC,IAAI,CAAC;YACH,IAAA,gBAAW,EAAC,IAAA,eAAQ,EAAC,IAAA,cAAO,EAAC,MAAM,CAAC,EAAE,WAAW,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,CAAC;QACrE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAA,eAAU,EAAC,WAAW,EAAE,MAAM,CAAC,CAAC;YAChC,GAAG,CAAC,UAAU,aAAa,IAAI,KAAK,mCAAoC,KAAe,CAAC,OAAO,GAAG,CAAC,CAAC;QACtG,CAAC;IACH,CAAC;AACH,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG;;;;;;0DAMsC,CAAC;AAE3D,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAE,EAAE;IAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,qBAAY,CAAC,CAAC;IAC5C,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,mBAAU,CAAC,CAAC;IAExC,IAAI,KAAK,KAAK,CAAC,CAAC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,KAAK;QAAE,OAAO,OAAO,CAAC;IAE9D,OAAO,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,GAAG,mBAAU,CAAC,MAAM,CAAC,CAAC;AAC1E,CAAC,CAAC;AAEF;;;GAGG;AACH,MAAM,aAAa,GAAG,CAAC,OAA0C,EAAE,EAAE;IACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACnC,MAAM,QAAQ,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,UAAU,SAAS,4BAA4B,aAAa,SAAS,CAAC,CAAC;QAE3E,OAAO;IACT,CAAC;IAED,GAAG,CAAC,UAAU,SAAS,mCAAmC,CAAC,CAAC;IAE5D,IAAI,MAAM;QAAE,OAAO;IAEnB,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,qBAAY,CAAC,CAAC;IAC7C,MAAM,QAAQ,GACZ,KAAK,KAAK,CAAC,CAAC;QACV,CAAC,CAAC,GAAG,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE,WAAW,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI;QACzF,CAAC,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,OAAO,EAAE,OAAO,WAAW,OAAO,QAAQ,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;IAE5F,IAAA,kBAAa,EAAC,IAAI,EAAE,QAAQ,EAAE,MAAM,CAAC,CAAC;AACxC,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,OAA0C,EAAE,EAAE;IACnE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC;IACjC,MAAM,IAAI,GAAG,IAAA,WAAI,EAAC,IAAI,EAAE,yBAAgB,CAAC,CAAC;IAC1C,MAAM,GAAG,GAAG,IAAA,eAAU,EAAC,IAAI,CAAC;QAC1B,CAAC,CAAE,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAI,EAAE,MAAM,CAAC,CAA6B;QACrE,CAAC,CAAC,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC;IAE/C,MAAM,OAAO,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC;IAC/B,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAE,OAAyB,CAAC,CAAC,CAAC,SAAS,CAAC;IACjF,MAAM,YAAY,GAAG,QAAQ,KAAK,SAAS,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC3E,MAAM,WAAW,GAAG,GAAG,CAAC,yBAAyB,CAAC,KAAK,IAAI,CAAC;IAE5D,IAAI,CAAC,YAAY,IAAI,CAAC,WAAW,EAAE,CAAC;QAClC,GAAG,CAAC,UAAU,yBAAgB,qBAAqB,CAAC,CAAC;QAErD,OAAO;IACT,CAAC;IAED,IAAI,YAAY,IAAI,QAAQ;QAAE,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,QAAQ,EAAE,OAAO,CAAC,CAAC;IAEtE,GAAG,CAAC,yBAAyB,CAAC,GAAG,IAAI,CAAC;IAEtC,GAAG,CAAC,UAAU,yBAAgB,2CAA2C,CAAC,CAAC;IAE3E,IAAI,CAAC,MAAM;QAAE,IAAA,kBAAa,EAAC,IAAI,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AAChF,CAAC,CAAC;AAEF;;;GAGG;AACI,MAAM,OAAO,GAAG,CAAC,OAAmB,EAAE,EAAE;IAC7C,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;IAEzC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,qDAAqD,CAAC,CAAC;IAE1G,eAAe,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAClC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;IAEhC,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,sEAAsE,CAAC,CAAC;QAEpF,OAAO,CAAC,CAAC;IACX,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAE/B,MAAM,MAAM,GAAG,IAAA,WAAI,EAAC,OAAO,CAAC,CAAC;IAE7B,OAAO,CAAC,GAAG,CACT,0HAA0H,CAC3H,CAAC;IAEF,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAzBW,QAAA,OAAO,WAyBlB"}
|
|
@@ -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,134 @@
|
|
|
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
|
+
if (!/^[A-Za-z0-9][\w.-]*$/.test(name)) {
|
|
84
|
+
throw new Error(`Invalid output style name "${name}". Use letters, digits, ".", "_" and "-".`);
|
|
85
|
+
}
|
|
86
|
+
const configDir = (0, exports.resolveClaudeConfigDir)(options.configDir);
|
|
87
|
+
const stylePath = (0, path_1.join)(configDir, CONTENT_DIR, `${name}.md`);
|
|
88
|
+
const settingsPath = (0, path_1.join)(configDir, 'settings.json');
|
|
89
|
+
const settings = readSettings(settingsPath);
|
|
90
|
+
const activeStyle = typeof settings.outputStyle === 'string' ? settings.outputStyle : null;
|
|
91
|
+
const installed = (0, fs_1.existsSync)(stylePath) ? (0, fs_1.readFileSync)(stylePath, 'utf8') : null;
|
|
92
|
+
const contentRoot = (_b = options.contentRoot) !== null && _b !== void 0 ? _b : (0, load_content_1.resolveContentRoot)();
|
|
93
|
+
const shipped = options.remove && !(0, exports.availableOutputStyles)(contentRoot).includes(name)
|
|
94
|
+
? null
|
|
95
|
+
: withMarker(readShippedStyle(name, contentRoot), name);
|
|
96
|
+
const ours = installed === null ||
|
|
97
|
+
installed.includes(MARKER_PREFIX) ||
|
|
98
|
+
(shipped !== null && normalize(installed) === normalize(shipped));
|
|
99
|
+
const plan = { name, configDir, stylePath, settingsPath, activeStyle };
|
|
100
|
+
if (!ours && !options.force) {
|
|
101
|
+
const verb = options.remove ? 'delete' : 'overwrite';
|
|
102
|
+
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.` });
|
|
103
|
+
}
|
|
104
|
+
const files = [];
|
|
105
|
+
const settingsAction = (0, fs_1.existsSync)(settingsPath) ? 'update' : 'create';
|
|
106
|
+
if (options.remove) {
|
|
107
|
+
if (installed !== null)
|
|
108
|
+
files.push({ path: stylePath, action: 'remove', contents: null });
|
|
109
|
+
if (activeStyle === name) {
|
|
110
|
+
files.push({ path: settingsPath, action: settingsAction, contents: withOutputStyle(settings, null) });
|
|
111
|
+
}
|
|
112
|
+
return Object.assign(Object.assign({}, plan), { files, conflict: null });
|
|
113
|
+
}
|
|
114
|
+
if (shipped !== null && installed !== shipped) {
|
|
115
|
+
files.push({ path: stylePath, action: installed === null ? 'create' : 'update', contents: shipped });
|
|
116
|
+
}
|
|
117
|
+
if (options.activate !== false && activeStyle !== name) {
|
|
118
|
+
files.push({ path: settingsPath, action: settingsAction, contents: withOutputStyle(settings, name) });
|
|
119
|
+
}
|
|
120
|
+
return Object.assign(Object.assign({}, plan), { files, conflict: null });
|
|
121
|
+
};
|
|
122
|
+
exports.planOutputStyle = planOutputStyle;
|
|
123
|
+
const applyOutputStylePlan = (plan) => {
|
|
124
|
+
for (const file of plan.files) {
|
|
125
|
+
if (file.contents === null) {
|
|
126
|
+
(0, fs_1.rmSync)(file.path, { force: true });
|
|
127
|
+
continue;
|
|
128
|
+
}
|
|
129
|
+
(0, fs_1.mkdirSync)((0, path_1.dirname)(file.path), { recursive: true });
|
|
130
|
+
(0, fs_1.writeFileSync)(file.path, file.contents, 'utf8');
|
|
131
|
+
}
|
|
132
|
+
};
|
|
133
|
+
exports.applyOutputStylePlan = applyOutputStylePlan;
|
|
134
|
+
//# 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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"}
|