@everydaydevopsio/ballast 3.0.4 → 3.2.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 +35 -10
- package/agents/cicd/templates/codex-header.md +7 -0
- package/agents/linting/templates/codex-header.md +7 -0
- package/agents/local-dev/content-badges.md +83 -0
- package/agents/local-dev/content-env.md +189 -0
- package/agents/local-dev/content-license.md +94 -0
- package/agents/local-dev/content-mcp.md +64 -0
- package/agents/local-dev/templates/claude-header-badges.md +5 -0
- package/agents/local-dev/templates/claude-header-license.md +5 -0
- package/agents/local-dev/templates/claude-header-mcp.md +5 -0
- package/agents/local-dev/templates/claude-header.md +1 -1
- package/agents/local-dev/templates/codex-header-badges.md +7 -0
- package/agents/local-dev/templates/codex-header-license.md +7 -0
- package/agents/local-dev/templates/codex-header-mcp.md +7 -0
- package/agents/local-dev/templates/codex-header.md +7 -0
- package/agents/local-dev/templates/cursor-frontmatter-badges.yaml +8 -0
- package/agents/local-dev/templates/cursor-frontmatter-env.yaml +11 -0
- package/agents/local-dev/templates/cursor-frontmatter-license.yaml +10 -0
- package/agents/local-dev/templates/cursor-frontmatter-mcp.yaml +10 -0
- package/agents/local-dev/templates/opencode-frontmatter-badges.yaml +16 -0
- package/agents/local-dev/templates/opencode-frontmatter-license.yaml +16 -0
- package/agents/local-dev/templates/opencode-frontmatter-mcp.yaml +16 -0
- package/agents/logging/content.md +423 -0
- package/agents/logging/templates/claude-header.md +5 -0
- package/agents/logging/templates/codex-header.md +7 -0
- package/agents/logging/templates/cursor-frontmatter.yaml +11 -0
- package/agents/logging/templates/opencode-frontmatter.yaml +22 -0
- package/agents/observability/templates/codex-header.md +7 -0
- package/dist/agents.d.ts +1 -1
- package/dist/agents.d.ts.map +1 -1
- package/dist/agents.js +2 -1
- package/dist/agents.js.map +1 -1
- package/dist/build.d.ts +27 -11
- package/dist/build.d.ts.map +1 -1
- package/dist/build.js +162 -26
- package/dist/build.js.map +1 -1
- package/dist/cli.js +1 -1
- package/dist/config.d.ts +1 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/install.d.ts +7 -0
- package/dist/install.d.ts.map +1 -1
- package/dist/install.js +58 -16
- package/dist/install.js.map +1 -1
- package/package.json +13 -10
- package/agents/local-dev/content.md +0 -17
package/dist/build.js
CHANGED
|
@@ -3,34 +3,84 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.listRuleSuffixes = listRuleSuffixes;
|
|
6
7
|
exports.getContent = getContent;
|
|
7
8
|
exports.getTemplate = getTemplate;
|
|
8
9
|
exports.buildCursorFormat = buildCursorFormat;
|
|
9
10
|
exports.buildClaudeFormat = buildClaudeFormat;
|
|
10
11
|
exports.buildOpenCodeFormat = buildOpenCodeFormat;
|
|
12
|
+
exports.buildCodexFormat = buildCodexFormat;
|
|
13
|
+
exports.extractDescriptionFromFrontmatter = extractDescriptionFromFrontmatter;
|
|
14
|
+
exports.getCodexRuleDescription = getCodexRuleDescription;
|
|
15
|
+
exports.buildCodexAgentsMd = buildCodexAgentsMd;
|
|
11
16
|
exports.buildContent = buildContent;
|
|
12
17
|
exports.getDestination = getDestination;
|
|
18
|
+
exports.getCodexAgentsMdPath = getCodexAgentsMdPath;
|
|
13
19
|
exports.listTargets = listTargets;
|
|
14
20
|
const fs_1 = __importDefault(require("fs"));
|
|
15
21
|
const path_1 = __importDefault(require("path"));
|
|
22
|
+
const yaml_1 = __importDefault(require("yaml"));
|
|
16
23
|
const agents_1 = require("./agents");
|
|
17
|
-
const TARGETS = ['cursor', 'claude', 'opencode'];
|
|
24
|
+
const TARGETS = ['cursor', 'claude', 'opencode', 'codex'];
|
|
25
|
+
/** Rule file convention: content.md (main) and content-<suffix>.md (e.g. content-mcp.md) */
|
|
26
|
+
const CONTENT_PREFIX = 'content';
|
|
27
|
+
const CONTENT_MAIN = `${CONTENT_PREFIX}.md`;
|
|
18
28
|
/**
|
|
19
|
-
*
|
|
29
|
+
* List rule suffixes for an agent. content.md → suffix ''; content-<suffix>.md → suffix.
|
|
30
|
+
* At least one of content.md or content-*.md must exist.
|
|
20
31
|
*/
|
|
21
|
-
function
|
|
32
|
+
function listRuleSuffixes(agentId) {
|
|
22
33
|
const dir = (0, agents_1.getAgentDir)(agentId);
|
|
23
|
-
|
|
34
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
35
|
+
throw new Error(`Agent "${agentId}" has no content.md or content-*.md`);
|
|
36
|
+
}
|
|
37
|
+
const suffixes = [];
|
|
38
|
+
if (fs_1.default.existsSync(path_1.default.join(dir, CONTENT_MAIN))) {
|
|
39
|
+
suffixes.push('');
|
|
40
|
+
}
|
|
41
|
+
const entries = fs_1.default.readdirSync(dir, { withFileTypes: true });
|
|
42
|
+
for (const e of entries) {
|
|
43
|
+
if (!e.isFile() ||
|
|
44
|
+
!e.name.startsWith(CONTENT_PREFIX + '-') ||
|
|
45
|
+
!e.name.endsWith('.md'))
|
|
46
|
+
continue;
|
|
47
|
+
const stem = e.name.slice(0, -3);
|
|
48
|
+
const suffix = stem.slice(CONTENT_PREFIX.length + 1);
|
|
49
|
+
if (suffix)
|
|
50
|
+
suffixes.push(suffix);
|
|
51
|
+
}
|
|
52
|
+
if (suffixes.length === 0) {
|
|
53
|
+
throw new Error(`Agent "${agentId}" has no content.md or content-*.md`);
|
|
54
|
+
}
|
|
55
|
+
return suffixes;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Read agent content for a rule. ruleSuffix '' or undefined = content.md; else content-<suffix>.md.
|
|
59
|
+
*/
|
|
60
|
+
function getContent(agentId, ruleSuffix) {
|
|
61
|
+
const dir = (0, agents_1.getAgentDir)(agentId);
|
|
62
|
+
const basename = ruleSuffix
|
|
63
|
+
? `${CONTENT_PREFIX}-${ruleSuffix}.md`
|
|
64
|
+
: CONTENT_MAIN;
|
|
65
|
+
const file = path_1.default.join(dir, basename);
|
|
24
66
|
if (!fs_1.default.existsSync(file)) {
|
|
25
|
-
throw new Error(`Agent "${agentId}" has no
|
|
67
|
+
throw new Error(`Agent "${agentId}" has no ${basename}`);
|
|
26
68
|
}
|
|
27
69
|
return fs_1.default.readFileSync(file, 'utf8');
|
|
28
70
|
}
|
|
29
71
|
/**
|
|
30
|
-
* Read agent template file
|
|
72
|
+
* Read agent template file. Tries rule-specific template first (e.g. cursor-frontmatter-mcp.yaml).
|
|
31
73
|
*/
|
|
32
|
-
function getTemplate(agentId, filename) {
|
|
74
|
+
function getTemplate(agentId, filename, ruleSuffix) {
|
|
33
75
|
const dir = (0, agents_1.getAgentDir)(agentId);
|
|
76
|
+
const base = filename.replace(/\.[^.]+$/, '');
|
|
77
|
+
const ext = path_1.default.extname(filename);
|
|
78
|
+
if (ruleSuffix) {
|
|
79
|
+
const ruleFile = path_1.default.join(dir, 'templates', `${base}-${ruleSuffix}${ext}`);
|
|
80
|
+
if (fs_1.default.existsSync(ruleFile)) {
|
|
81
|
+
return fs_1.default.readFileSync(ruleFile, 'utf8');
|
|
82
|
+
}
|
|
83
|
+
}
|
|
34
84
|
const file = path_1.default.join(dir, 'templates', filename);
|
|
35
85
|
if (!fs_1.default.existsSync(file)) {
|
|
36
86
|
throw new Error(`Agent "${agentId}" missing template: ${filename}`);
|
|
@@ -40,67 +90,153 @@ function getTemplate(agentId, filename) {
|
|
|
40
90
|
/**
|
|
41
91
|
* Build content for Cursor (.mdc = frontmatter + content)
|
|
42
92
|
*/
|
|
43
|
-
function buildCursorFormat(agentId) {
|
|
44
|
-
const frontmatter = getTemplate(agentId, 'cursor-frontmatter.yaml');
|
|
45
|
-
const content = getContent(agentId);
|
|
93
|
+
function buildCursorFormat(agentId, ruleSuffix) {
|
|
94
|
+
const frontmatter = getTemplate(agentId, 'cursor-frontmatter.yaml', ruleSuffix);
|
|
95
|
+
const content = getContent(agentId, ruleSuffix);
|
|
46
96
|
return frontmatter + '\n' + content;
|
|
47
97
|
}
|
|
48
98
|
/**
|
|
49
99
|
* Build content for Claude (header + content)
|
|
50
100
|
*/
|
|
51
|
-
function buildClaudeFormat(agentId) {
|
|
52
|
-
const header = getTemplate(agentId, 'claude-header.md');
|
|
53
|
-
const content = getContent(agentId);
|
|
101
|
+
function buildClaudeFormat(agentId, ruleSuffix) {
|
|
102
|
+
const header = getTemplate(agentId, 'claude-header.md', ruleSuffix);
|
|
103
|
+
const content = getContent(agentId, ruleSuffix);
|
|
54
104
|
return header + content;
|
|
55
105
|
}
|
|
56
106
|
/**
|
|
57
107
|
* Build content for OpenCode (YAML frontmatter + content)
|
|
58
108
|
*/
|
|
59
|
-
function buildOpenCodeFormat(agentId) {
|
|
60
|
-
const frontmatter = getTemplate(agentId, 'opencode-frontmatter.yaml');
|
|
61
|
-
const content = getContent(agentId);
|
|
109
|
+
function buildOpenCodeFormat(agentId, ruleSuffix) {
|
|
110
|
+
const frontmatter = getTemplate(agentId, 'opencode-frontmatter.yaml', ruleSuffix);
|
|
111
|
+
const content = getContent(agentId, ruleSuffix);
|
|
62
112
|
return frontmatter + '\n' + content;
|
|
63
113
|
}
|
|
114
|
+
function getCodexHeader(agentId, ruleSuffix) {
|
|
115
|
+
let codexError;
|
|
116
|
+
try {
|
|
117
|
+
return getTemplate(agentId, 'codex-header.md', ruleSuffix);
|
|
118
|
+
}
|
|
119
|
+
catch (err) {
|
|
120
|
+
codexError = err;
|
|
121
|
+
}
|
|
122
|
+
try {
|
|
123
|
+
return getTemplate(agentId, 'claude-header.md', ruleSuffix);
|
|
124
|
+
}
|
|
125
|
+
catch (claudeError) {
|
|
126
|
+
const codexMsg = codexError instanceof Error ? codexError.message : String(codexError);
|
|
127
|
+
const claudeMsg = claudeError instanceof Error ? claudeError.message : String(claudeError);
|
|
128
|
+
throw new Error(`Agent "${agentId}" missing Codex header: tried codex-header.md (${codexMsg}) and fallback claude-header.md (${claudeMsg})`, { cause: claudeError });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Build content for Codex (header + content)
|
|
133
|
+
*/
|
|
134
|
+
function buildCodexFormat(agentId, ruleSuffix) {
|
|
135
|
+
const header = getCodexHeader(agentId, ruleSuffix);
|
|
136
|
+
const content = getContent(agentId, ruleSuffix);
|
|
137
|
+
return header + content;
|
|
138
|
+
}
|
|
139
|
+
function extractDescriptionFromFrontmatter(frontmatter) {
|
|
140
|
+
try {
|
|
141
|
+
// Extract content between --- delimiters to avoid multi-document parse error
|
|
142
|
+
const match = frontmatter.match(/^---\r?\n([\s\S]*?)\r?\n---/);
|
|
143
|
+
const yamlContent = match ? match[1] : frontmatter;
|
|
144
|
+
const parsed = yaml_1.default.parse(yamlContent);
|
|
145
|
+
const description = parsed?.description;
|
|
146
|
+
if (typeof description === 'string') {
|
|
147
|
+
const trimmed = description.trim();
|
|
148
|
+
return trimmed || null;
|
|
149
|
+
}
|
|
150
|
+
return null;
|
|
151
|
+
}
|
|
152
|
+
catch {
|
|
153
|
+
return null;
|
|
154
|
+
}
|
|
155
|
+
}
|
|
156
|
+
function getCodexRuleDescription(agentId, ruleSuffix) {
|
|
157
|
+
try {
|
|
158
|
+
const frontmatter = getTemplate(agentId, 'cursor-frontmatter.yaml', ruleSuffix);
|
|
159
|
+
return extractDescriptionFromFrontmatter(frontmatter);
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
function buildCodexAgentsMd(agents) {
|
|
166
|
+
const lines = [];
|
|
167
|
+
lines.push('# AGENTS.md');
|
|
168
|
+
lines.push('');
|
|
169
|
+
lines.push('This file provides guidance to Codex (CLI and app) for working in this repository.');
|
|
170
|
+
lines.push('');
|
|
171
|
+
lines.push('## Installed agent rules');
|
|
172
|
+
lines.push('');
|
|
173
|
+
lines.push('Read and follow these rule files in `.codex/rules/` when they apply:');
|
|
174
|
+
lines.push('');
|
|
175
|
+
for (const agentId of agents) {
|
|
176
|
+
const suffixes = listRuleSuffixes(agentId);
|
|
177
|
+
for (const ruleSuffix of suffixes) {
|
|
178
|
+
const basename = ruleSuffix ? `${agentId}-${ruleSuffix}` : agentId;
|
|
179
|
+
const description = getCodexRuleDescription(agentId, ruleSuffix) ?? `Rules for ${basename}`;
|
|
180
|
+
lines.push(`- \`.codex/rules/${basename}.md\` — ${description}`);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
lines.push('');
|
|
184
|
+
return lines.join('\n');
|
|
185
|
+
}
|
|
64
186
|
/**
|
|
65
|
-
* Build content for the given agent and
|
|
187
|
+
* Build content for the given agent, target, and optional rule suffix
|
|
66
188
|
*/
|
|
67
|
-
function buildContent(agentId, target) {
|
|
189
|
+
function buildContent(agentId, target, ruleSuffix) {
|
|
68
190
|
switch (target) {
|
|
69
191
|
case 'cursor':
|
|
70
|
-
return buildCursorFormat(agentId);
|
|
192
|
+
return buildCursorFormat(agentId, ruleSuffix);
|
|
71
193
|
case 'claude':
|
|
72
|
-
return buildClaudeFormat(agentId);
|
|
194
|
+
return buildClaudeFormat(agentId, ruleSuffix);
|
|
73
195
|
case 'opencode':
|
|
74
|
-
return buildOpenCodeFormat(agentId);
|
|
196
|
+
return buildOpenCodeFormat(agentId, ruleSuffix);
|
|
197
|
+
case 'codex':
|
|
198
|
+
return buildCodexFormat(agentId, ruleSuffix);
|
|
75
199
|
default:
|
|
76
200
|
throw new Error(`Unknown target: ${target}`);
|
|
77
201
|
}
|
|
78
202
|
}
|
|
79
203
|
/**
|
|
80
|
-
* Get destination path for installed agent file
|
|
204
|
+
* Get destination path for installed agent file. ruleSuffix '' or undefined = main rule; else <agentId>-<suffix>.
|
|
81
205
|
*/
|
|
82
|
-
function getDestination(agentId, target, projectRoot) {
|
|
206
|
+
function getDestination(agentId, target, projectRoot, ruleSuffix) {
|
|
83
207
|
const root = path_1.default.resolve(projectRoot);
|
|
208
|
+
const basename = ruleSuffix ? `${agentId}-${ruleSuffix}` : agentId;
|
|
84
209
|
switch (target) {
|
|
85
210
|
case 'cursor': {
|
|
86
211
|
const dir = path_1.default.join(root, '.cursor', 'rules');
|
|
87
|
-
const file = path_1.default.join(dir, `${
|
|
212
|
+
const file = path_1.default.join(dir, `${basename}.mdc`);
|
|
88
213
|
return { dir, file };
|
|
89
214
|
}
|
|
90
215
|
case 'claude': {
|
|
91
216
|
const dir = path_1.default.join(root, '.claude', 'rules');
|
|
92
|
-
const file = path_1.default.join(dir, `${
|
|
217
|
+
const file = path_1.default.join(dir, `${basename}.md`);
|
|
93
218
|
return { dir, file };
|
|
94
219
|
}
|
|
95
220
|
case 'opencode': {
|
|
96
221
|
const dir = path_1.default.join(root, '.opencode');
|
|
97
|
-
const file = path_1.default.join(dir, `${
|
|
222
|
+
const file = path_1.default.join(dir, `${basename}.md`);
|
|
223
|
+
return { dir, file };
|
|
224
|
+
}
|
|
225
|
+
case 'codex': {
|
|
226
|
+
const dir = path_1.default.join(root, '.codex', 'rules');
|
|
227
|
+
const file = path_1.default.join(dir, `${basename}.md`);
|
|
98
228
|
return { dir, file };
|
|
99
229
|
}
|
|
100
230
|
default:
|
|
101
231
|
throw new Error(`Unknown target: ${target}`);
|
|
102
232
|
}
|
|
103
233
|
}
|
|
234
|
+
/**
|
|
235
|
+
* Get destination for Codex AGENTS.md
|
|
236
|
+
*/
|
|
237
|
+
function getCodexAgentsMdPath(projectRoot) {
|
|
238
|
+
return path_1.default.join(path_1.default.resolve(projectRoot), 'AGENTS.md');
|
|
239
|
+
}
|
|
104
240
|
/**
|
|
105
241
|
* List supported targets
|
|
106
242
|
*/
|
package/dist/build.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"build.js","sourceRoot":"","sources":["../src/build.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.js
CHANGED
|
@@ -63,7 +63,7 @@ Commands:
|
|
|
63
63
|
install Install agent rules for the chosen AI platform (default)
|
|
64
64
|
|
|
65
65
|
Options:
|
|
66
|
-
--target, -t <platform> AI platform: cursor, claude, opencode
|
|
66
|
+
--target, -t <platform> AI platform: cursor, claude, opencode, codex
|
|
67
67
|
--agent, -a <agents> Agent(s): linting, local-dev, cicd, observability (comma-separated)
|
|
68
68
|
--all Install all agents
|
|
69
69
|
--force, -f Overwrite existing rule files
|
package/dist/config.d.ts
CHANGED
package/dist/config.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,gBAAgB,kBAAkB,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AAGA,QAAA,MAAM,gBAAgB,kBAAkB,CAAC;AAEzC,MAAM,MAAM,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,UAAU,GAAG,OAAO,CAAC;AAEhE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,GAAG,GAAE,MAAsB,GAAG,MAAM,CAanE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAqBnE;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAQ1E;AAED;;GAEG;AACH,wBAAgB,QAAQ,IAAI,OAAO,CAQlC;AAED,OAAO,EAAE,gBAAgB,EAAE,CAAC"}
|
package/dist/install.d.ts
CHANGED
|
@@ -21,7 +21,14 @@ export interface InstallOptions {
|
|
|
21
21
|
}
|
|
22
22
|
export interface InstallResult {
|
|
23
23
|
installed: string[];
|
|
24
|
+
/** Per-rule: which (agent, ruleSuffix) files were written (ruleSuffix '' = main) */
|
|
25
|
+
installedRules: Array<{
|
|
26
|
+
agentId: string;
|
|
27
|
+
ruleSuffix: string;
|
|
28
|
+
}>;
|
|
29
|
+
installedSupportFiles: string[];
|
|
24
30
|
skipped: string[];
|
|
31
|
+
skippedSupportFiles: string[];
|
|
25
32
|
errors: Array<{
|
|
26
33
|
agent: string;
|
|
27
34
|
error: string;
|
package/dist/install.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAYA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AAkDvC,MAAM,WAAW,6BAA6B;IAC5C,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC3B,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,wBAAsB,sBAAsB,CAC1C,OAAO,GAAE,6BAAkC,GAC1C,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,IAAI,CAAC,CA2BtD;AAED,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,oFAAoF;IACpF,cAAc,EAAE,KAAK,CAAC;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC/D,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,mBAAmB,EAAE,MAAM,EAAE,CAAC;IAC9B,MAAM,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACjD;AAED;;GAEG;AACH,wBAAgB,OAAO,CAAC,OAAO,EAAE,cAAc,GAAG,aAAa,CA8E9D;AAED,MAAM,WAAW,iBAAiB;IAChC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;IAClB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,OAAO,GAAE,iBAAsB,GAC9B,OAAO,CAAC,MAAM,CAAC,CA4EjB"}
|
package/dist/install.js
CHANGED
|
@@ -24,7 +24,7 @@ function prompt(question) {
|
|
|
24
24
|
});
|
|
25
25
|
}
|
|
26
26
|
/**
|
|
27
|
-
* Interactive: ask for target (cursor | claude | opencode)
|
|
27
|
+
* Interactive: ask for target (cursor | claude | opencode | codex)
|
|
28
28
|
*/
|
|
29
29
|
async function promptTarget() {
|
|
30
30
|
const targets = (0, build_1.listTargets)();
|
|
@@ -83,8 +83,12 @@ async function resolveTargetAndAgents(options = {}) {
|
|
|
83
83
|
function install(options) {
|
|
84
84
|
const { projectRoot, target, agents, force = false, saveConfig: persist } = options;
|
|
85
85
|
const installed = [];
|
|
86
|
+
const installedRules = [];
|
|
87
|
+
const installedSupportFiles = [];
|
|
86
88
|
const skipped = [];
|
|
89
|
+
const skippedSupportFiles = [];
|
|
87
90
|
const errors = [];
|
|
91
|
+
const processedAgentIds = new Set();
|
|
88
92
|
if (persist) {
|
|
89
93
|
(0, config_1.saveConfig)({ target, agents }, projectRoot);
|
|
90
94
|
}
|
|
@@ -93,18 +97,29 @@ function install(options) {
|
|
|
93
97
|
errors.push({ agent: agentId, error: 'Unknown agent' });
|
|
94
98
|
continue;
|
|
95
99
|
}
|
|
100
|
+
processedAgentIds.add(agentId);
|
|
101
|
+
let agentInstalled = false;
|
|
102
|
+
let agentSkipped = false;
|
|
96
103
|
try {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
+
const suffixes = (0, build_1.listRuleSuffixes)(agentId);
|
|
105
|
+
for (const ruleSuffix of suffixes) {
|
|
106
|
+
const { dir, file } = (0, build_1.getDestination)(agentId, target, projectRoot, ruleSuffix || undefined);
|
|
107
|
+
if (fs_1.default.existsSync(file) && !force) {
|
|
108
|
+
agentSkipped = true;
|
|
109
|
+
continue;
|
|
110
|
+
}
|
|
111
|
+
if (!fs_1.default.existsSync(dir)) {
|
|
112
|
+
fs_1.default.mkdirSync(dir, { recursive: true });
|
|
113
|
+
}
|
|
114
|
+
const content = (0, build_1.buildContent)(agentId, target, ruleSuffix || undefined);
|
|
115
|
+
fs_1.default.writeFileSync(file, content, 'utf8');
|
|
116
|
+
installedRules.push({ agentId, ruleSuffix: ruleSuffix || '' });
|
|
117
|
+
agentInstalled = true;
|
|
104
118
|
}
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
119
|
+
if (agentInstalled)
|
|
120
|
+
installed.push(agentId);
|
|
121
|
+
if (agentSkipped && !agentInstalled)
|
|
122
|
+
skipped.push(agentId);
|
|
108
123
|
}
|
|
109
124
|
catch (err) {
|
|
110
125
|
errors.push({
|
|
@@ -113,7 +128,25 @@ function install(options) {
|
|
|
113
128
|
});
|
|
114
129
|
}
|
|
115
130
|
}
|
|
116
|
-
|
|
131
|
+
if (target === 'codex') {
|
|
132
|
+
const agentsMdPath = (0, build_1.getCodexAgentsMdPath)(projectRoot);
|
|
133
|
+
if (fs_1.default.existsSync(agentsMdPath) && !force) {
|
|
134
|
+
skippedSupportFiles.push(agentsMdPath);
|
|
135
|
+
}
|
|
136
|
+
else {
|
|
137
|
+
const content = (0, build_1.buildCodexAgentsMd)(Array.from(processedAgentIds));
|
|
138
|
+
fs_1.default.writeFileSync(agentsMdPath, content, 'utf8');
|
|
139
|
+
installedSupportFiles.push(agentsMdPath);
|
|
140
|
+
}
|
|
141
|
+
}
|
|
142
|
+
return {
|
|
143
|
+
installed,
|
|
144
|
+
installedRules,
|
|
145
|
+
installedSupportFiles,
|
|
146
|
+
skipped,
|
|
147
|
+
skippedSupportFiles,
|
|
148
|
+
errors
|
|
149
|
+
};
|
|
117
150
|
}
|
|
118
151
|
/**
|
|
119
152
|
* Run install flow: resolve target/agents (interactive or from config/flags), then install.
|
|
@@ -148,16 +181,25 @@ async function runInstall(options = {}) {
|
|
|
148
181
|
});
|
|
149
182
|
return 1;
|
|
150
183
|
}
|
|
151
|
-
if (result.
|
|
184
|
+
if (result.installedRules.length > 0) {
|
|
152
185
|
console.log(`Installed for ${target}: ${result.installed.join(', ')}`);
|
|
153
|
-
result.
|
|
154
|
-
const { file } = (0, build_1.getDestination)(agentId, target, projectRoot);
|
|
155
|
-
|
|
186
|
+
result.installedRules.forEach(({ agentId, ruleSuffix }) => {
|
|
187
|
+
const { file } = (0, build_1.getDestination)(agentId, target, projectRoot, ruleSuffix || undefined);
|
|
188
|
+
const label = ruleSuffix ? `${agentId}-${ruleSuffix}` : agentId;
|
|
189
|
+
console.log(` ${label} -> ${file}`);
|
|
190
|
+
});
|
|
191
|
+
}
|
|
192
|
+
if (result.installedSupportFiles.length > 0) {
|
|
193
|
+
result.installedSupportFiles.forEach((file) => {
|
|
194
|
+
console.log(` AGENTS.md -> ${file}`);
|
|
156
195
|
});
|
|
157
196
|
}
|
|
158
197
|
if (result.skipped.length > 0) {
|
|
159
198
|
console.log(`Skipped (already present; use --force to overwrite): ${result.skipped.join(', ')}`);
|
|
160
199
|
}
|
|
200
|
+
if (result.skippedSupportFiles.length > 0) {
|
|
201
|
+
console.log(`Skipped support files (already present; use --force to overwrite): ${result.skippedSupportFiles.join(', ')}`);
|
|
202
|
+
}
|
|
161
203
|
if (result.installed.length === 0 &&
|
|
162
204
|
result.skipped.length === 0 &&
|
|
163
205
|
result.errors.length === 0) {
|
package/dist/install.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@everydaydevopsio/ballast",
|
|
3
|
-
"version": "3.0
|
|
4
|
-
"description": "CLI to install TypeScript AI agent rules (linting, local-dev, CI/CD, observability) for Cursor, Claude Code, and OpenCode",
|
|
3
|
+
"version": "3.2.0",
|
|
4
|
+
"description": "CLI to install TypeScript AI agent rules (linting, local-dev, CI/CD, observability, logging) for Cursor, Claude Code, and OpenCode",
|
|
5
5
|
"main": "dist/cli.js",
|
|
6
6
|
"bin": {
|
|
7
7
|
"ballast": "bin/ballast.js"
|
|
@@ -23,22 +23,22 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@eslint/js": "^9.39.2",
|
|
26
|
-
"@types/jest": "^
|
|
27
|
-
"@types/node": "^
|
|
28
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
29
|
-
"@typescript-eslint/parser": "^8.
|
|
26
|
+
"@types/jest": "^30.0.0",
|
|
27
|
+
"@types/node": "^25.2.0",
|
|
28
|
+
"@typescript-eslint/eslint-plugin": "^8.54.0",
|
|
29
|
+
"@typescript-eslint/parser": "^8.54.0",
|
|
30
30
|
"eslint": "^9.39.2",
|
|
31
31
|
"eslint-config-prettier": "^10.1.8",
|
|
32
32
|
"eslint-plugin-prettier": "^5.5.4",
|
|
33
|
-
"globals": "^
|
|
33
|
+
"globals": "^17.3.0",
|
|
34
34
|
"husky": "^9.1.7",
|
|
35
|
-
"jest": "^
|
|
35
|
+
"jest": "^30.2.0",
|
|
36
36
|
"lint-staged": "^16.2.7",
|
|
37
|
-
"prettier": "^3.
|
|
37
|
+
"prettier": "^3.8.1",
|
|
38
38
|
"ts-jest": "^29.2.5",
|
|
39
39
|
"tsc-files": "^1.1.4",
|
|
40
40
|
"typescript": "^5.9.3",
|
|
41
|
-
"typescript-eslint": "^8.
|
|
41
|
+
"typescript-eslint": "^8.54.0"
|
|
42
42
|
},
|
|
43
43
|
"lint-staged": {
|
|
44
44
|
"**/*.js": [
|
|
@@ -54,6 +54,9 @@
|
|
|
54
54
|
"prettier --write"
|
|
55
55
|
]
|
|
56
56
|
},
|
|
57
|
+
"dependencies": {
|
|
58
|
+
"yaml": "^2.8.2"
|
|
59
|
+
},
|
|
57
60
|
"scripts": {
|
|
58
61
|
"build": "tsc",
|
|
59
62
|
"test": "jest",
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# Local Development Environment Agent
|
|
2
|
-
|
|
3
|
-
You are a local development environment specialist for TypeScript/JavaScript projects.
|
|
4
|
-
|
|
5
|
-
## Goals
|
|
6
|
-
|
|
7
|
-
- **Reproducible environments**: Help set up and document local dev setup (Node version, env vars, Docker Compose, dev scripts) so anyone can run the project with minimal friction.
|
|
8
|
-
- **Developer experience**: Recommend and configure tooling (debugging, hot reload, env validation) and conventions (branch naming, commit hooks) that keep local dev fast and consistent.
|
|
9
|
-
- **Documentation**: Keep README and runbooks (e.g. "Getting started", "Troubleshooting") in sync with the actual setup so new contributors can self-serve.
|
|
10
|
-
|
|
11
|
-
## Scope
|
|
12
|
-
|
|
13
|
-
- Local run scripts, env files (.env.example), and optional containerized dev (e.g. Docker Compose for services).
|
|
14
|
-
- Version managers (nvm, volta) and required Node/npm versions.
|
|
15
|
-
- Pre-commit or pre-push hooks that run tests/lint locally before pushing.
|
|
16
|
-
|
|
17
|
-
_This agent is a placeholder; full instructions will be expanded in a future release._
|