@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.
Files changed (45) hide show
  1. package/README.md +35 -10
  2. package/agents/cicd/templates/codex-header.md +7 -0
  3. package/agents/linting/templates/codex-header.md +7 -0
  4. package/agents/local-dev/content-badges.md +83 -0
  5. package/agents/local-dev/content-env.md +189 -0
  6. package/agents/local-dev/content-license.md +94 -0
  7. package/agents/local-dev/content-mcp.md +64 -0
  8. package/agents/local-dev/templates/claude-header-badges.md +5 -0
  9. package/agents/local-dev/templates/claude-header-license.md +5 -0
  10. package/agents/local-dev/templates/claude-header-mcp.md +5 -0
  11. package/agents/local-dev/templates/claude-header.md +1 -1
  12. package/agents/local-dev/templates/codex-header-badges.md +7 -0
  13. package/agents/local-dev/templates/codex-header-license.md +7 -0
  14. package/agents/local-dev/templates/codex-header-mcp.md +7 -0
  15. package/agents/local-dev/templates/codex-header.md +7 -0
  16. package/agents/local-dev/templates/cursor-frontmatter-badges.yaml +8 -0
  17. package/agents/local-dev/templates/cursor-frontmatter-env.yaml +11 -0
  18. package/agents/local-dev/templates/cursor-frontmatter-license.yaml +10 -0
  19. package/agents/local-dev/templates/cursor-frontmatter-mcp.yaml +10 -0
  20. package/agents/local-dev/templates/opencode-frontmatter-badges.yaml +16 -0
  21. package/agents/local-dev/templates/opencode-frontmatter-license.yaml +16 -0
  22. package/agents/local-dev/templates/opencode-frontmatter-mcp.yaml +16 -0
  23. package/agents/logging/content.md +423 -0
  24. package/agents/logging/templates/claude-header.md +5 -0
  25. package/agents/logging/templates/codex-header.md +7 -0
  26. package/agents/logging/templates/cursor-frontmatter.yaml +11 -0
  27. package/agents/logging/templates/opencode-frontmatter.yaml +22 -0
  28. package/agents/observability/templates/codex-header.md +7 -0
  29. package/dist/agents.d.ts +1 -1
  30. package/dist/agents.d.ts.map +1 -1
  31. package/dist/agents.js +2 -1
  32. package/dist/agents.js.map +1 -1
  33. package/dist/build.d.ts +27 -11
  34. package/dist/build.d.ts.map +1 -1
  35. package/dist/build.js +162 -26
  36. package/dist/build.js.map +1 -1
  37. package/dist/cli.js +1 -1
  38. package/dist/config.d.ts +1 -1
  39. package/dist/config.d.ts.map +1 -1
  40. package/dist/install.d.ts +7 -0
  41. package/dist/install.d.ts.map +1 -1
  42. package/dist/install.js +58 -16
  43. package/dist/install.js.map +1 -1
  44. package/package.json +13 -10
  45. 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
- * Read agent content.md
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 getContent(agentId) {
32
+ function listRuleSuffixes(agentId) {
22
33
  const dir = (0, agents_1.getAgentDir)(agentId);
23
- const file = path_1.default.join(dir, 'content.md');
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 content.md`);
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 target
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, `${agentId}.mdc`);
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, `${agentId}.md`);
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, `${agentId}.md`);
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":";;;;;AAUA,gCAOC;AAKD,kCAOC;AAKD,8CAIC;AAKD,8CAIC;AAKD,kDAIC;AAKD,oCAWC;AAKD,wCAyBC;AAKD,kCAEC;AA7GD,4CAAoB;AACpB,gDAAwB;AACxB,qCAAuC;AAGvC,MAAM,OAAO,GAAa,CAAC,QAAQ,EAAE,QAAQ,EAAE,UAAU,CAAC,CAAC;AAE3D;;GAEG;AACH,SAAgB,UAAU,CAAC,OAAe;IACxC,MAAM,GAAG,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,qBAAqB,CAAC,CAAC;IAC1D,CAAC;IACD,OAAO,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW,CAAC,OAAe,EAAE,QAAgB;IAC3D,MAAM,GAAG,GAAG,IAAA,oBAAW,EAAC,OAAO,CAAC,CAAC;IACjC,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,WAAW,EAAE,QAAQ,CAAC,CAAC;IACnD,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,MAAM,IAAI,KAAK,CAAC,UAAU,OAAO,uBAAuB,QAAQ,EAAE,CAAC,CAAC;IACtE,CAAC;IACD,OAAO,YAAE,CAAC,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;AACvC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,yBAAyB,CAAC,CAAC;IACpE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,iBAAiB,CAAC,OAAe;IAC/C,MAAM,MAAM,GAAG,WAAW,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IACxD,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,MAAM,GAAG,OAAO,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,SAAgB,mBAAmB,CAAC,OAAe;IACjD,MAAM,WAAW,GAAG,WAAW,CAAC,OAAO,EAAE,2BAA2B,CAAC,CAAC;IACtE,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,CAAC,CAAC;IACpC,OAAO,WAAW,GAAG,IAAI,GAAG,OAAO,CAAC;AACtC,CAAC;AAED;;GAEG;AACH,SAAgB,YAAY,CAAC,OAAe,EAAE,MAAc;IAC1D,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,QAAQ;YACX,OAAO,iBAAiB,CAAC,OAAO,CAAC,CAAC;QACpC,KAAK,UAAU;YACb,OAAO,mBAAmB,CAAC,OAAO,CAAC,CAAC;QACtC;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,cAAc,CAC5B,OAAe,EACf,MAAc,EACd,WAAmB;IAEnB,MAAM,IAAI,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACvC,QAAQ,MAAM,EAAE,CAAC;QACf,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,MAAM,CAAC,CAAC;YAC9C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,QAAQ,CAAC,CAAC,CAAC;YACd,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;YAChD,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,cAAI,CAAC,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC,CAAC;YACzC,MAAM,IAAI,GAAG,cAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,KAAK,CAAC,CAAC;YAC7C,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;QACvB,CAAC;QACD;YACE,MAAM,IAAI,KAAK,CAAC,mBAAmB,MAAM,EAAE,CAAC,CAAC;IACjD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAgB,WAAW;IACzB,OAAO,OAAO,CAAC,KAAK,EAAE,CAAC;AACzB,CAAC"}
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
@@ -1,5 +1,5 @@
1
1
  declare const RULESRC_FILENAME = ".rulesrc.json";
2
- export type Target = 'cursor' | 'claude' | 'opencode';
2
+ export type Target = 'cursor' | 'claude' | 'opencode' | 'codex';
3
3
  export interface RulesConfig {
4
4
  target: Target;
5
5
  agents: string[];
@@ -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;AAEtD,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"}
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;
@@ -1 +1 @@
1
- {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"AAKA,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,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,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,CA0C9D;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,CA0DjB"}
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 { dir, file } = (0, build_1.getDestination)(agentId, target, projectRoot);
98
- if (fs_1.default.existsSync(file) && !force) {
99
- skipped.push(agentId);
100
- continue;
101
- }
102
- if (!fs_1.default.existsSync(dir)) {
103
- fs_1.default.mkdirSync(dir, { recursive: true });
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
- const content = (0, build_1.buildContent)(agentId, target);
106
- fs_1.default.writeFileSync(file, content, 'utf8');
107
- installed.push(agentId);
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
- return { installed, skipped, errors };
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.installed.length > 0) {
184
+ if (result.installedRules.length > 0) {
152
185
  console.log(`Installed for ${target}: ${result.installed.join(', ')}`);
153
- result.installed.forEach((agentId) => {
154
- const { file } = (0, build_1.getDestination)(agentId, target, projectRoot);
155
- console.log(` ${agentId} -> ${file}`);
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) {
@@ -1 +1 @@
1
- {"version":3,"file":"install.js","sourceRoot":"","sources":["../src/install.ts"],"names":[],"mappings":"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"}
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",
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": "^29.5.14",
27
- "@types/node": "^22.10.1",
28
- "@typescript-eslint/eslint-plugin": "^8.50.1",
29
- "@typescript-eslint/parser": "^8.50.1",
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": "^16.5.0",
33
+ "globals": "^17.3.0",
34
34
  "husky": "^9.1.7",
35
- "jest": "^29.7.0",
35
+ "jest": "^30.2.0",
36
36
  "lint-staged": "^16.2.7",
37
- "prettier": "^3.7.4",
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.53.1"
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._