@codemarc/blt 1.4.7 → 1.4.8
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 +92 -0
- package/dist/blt +2 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/init/config-templates.d.ts +18 -0
- package/dist/commands/init/config-templates.d.ts.map +1 -0
- package/dist/commands/init/config-templates.js +74 -0
- package/dist/commands/init/config-templates.js.map +1 -0
- package/dist/commands/init/config.d.ts +9 -0
- package/dist/commands/init/config.d.ts.map +1 -0
- package/dist/commands/init/config.js +92 -0
- package/dist/commands/init/config.js.map +1 -0
- package/dist/commands/pdf.js +1 -1
- package/dist/commands/wai/config-templates.d.ts +18 -0
- package/dist/commands/wai/config-templates.d.ts.map +1 -0
- package/dist/commands/wai/config-templates.js +136 -0
- package/dist/commands/wai/config-templates.js.map +1 -0
- package/dist/commands/wai/config.d.ts +9 -0
- package/dist/commands/wai/config.d.ts.map +1 -0
- package/dist/commands/wai/config.js +144 -0
- package/dist/commands/wai/config.js.map +1 -0
- package/dist/commands/wai.d.ts +7 -0
- package/dist/commands/wai.d.ts.map +1 -0
- package/dist/commands/wai.js +208 -0
- package/dist/commands/wai.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
- **Image**: WebP conversion, sharpening, color manipulation, and enhancement
|
|
10
10
|
- **PDF**: Combine PDFs (binder), create folios with page numbers and table of contents
|
|
11
11
|
- **Version**: Update and manage `version.json`, format version strings, generate version SQL
|
|
12
|
+
- **Init**: Clone repo script for BLT repositories
|
|
13
|
+
- **WAI**: AI config templates (Claude + Codex: AGENTS.md, skills, rules, commands, settings, MCP, PLAN, IMPLEMENT) — bltwai.com
|
|
12
14
|
- **Build**: Build schema from DDL files, build data from instance directory
|
|
13
15
|
- **Deploy**: Deploy schema/data from SQL files, run a single SQL file
|
|
14
16
|
- **Bucket**: Supabase storage — list buckets, list/upload/download files, get URLs
|
|
@@ -57,6 +59,8 @@ blt deploy schema
|
|
|
57
59
|
| `blt image` | Convert, sharpen, enhance, recolor |
|
|
58
60
|
| `blt pdf` | Binder (combine), folio (TOC + pages)|
|
|
59
61
|
| `blt version` | Update, string, sql |
|
|
62
|
+
| `blt init` | Clone script for BLT repos |
|
|
63
|
+
| `blt wai` | Claude Code config (claude, agents, skills, rules, commands, settings, mcp) |
|
|
60
64
|
| `blt build` | Schema (DDL), data (instance) |
|
|
61
65
|
| `blt deploy` | Schema, data, sql file |
|
|
62
66
|
| `blt workflow`| list, show, delete, reload, deploy |
|
|
@@ -319,6 +323,94 @@ blt deploy sql ./migrations/001_init.sql
|
|
|
319
323
|
|
|
320
324
|
---
|
|
321
325
|
|
|
326
|
+
## Init Commands
|
|
327
|
+
|
|
328
|
+
### `blt init [options]`
|
|
329
|
+
|
|
330
|
+
Create a shell script to clone or pull all BLT repositories.
|
|
331
|
+
|
|
332
|
+
```bash
|
|
333
|
+
blt init
|
|
334
|
+
blt init -w -c
|
|
335
|
+
./getblt.sh
|
|
336
|
+
```
|
|
337
|
+
|
|
338
|
+
**Options:**
|
|
339
|
+
|
|
340
|
+
- `-o, --output <path>` — Output path for the script (default: ./getblt.sh)
|
|
341
|
+
- `-s, --ssh` — Use SSH URLs instead of HTTPS
|
|
342
|
+
- `-w, --workspace` — Also generate blt.code-workspace with folder entries
|
|
343
|
+
- `-c, --connections` — Add sqltools.connections from .env (requires -w)
|
|
344
|
+
|
|
345
|
+
---
|
|
346
|
+
|
|
347
|
+
## WAI Commands (bltwai.com)
|
|
348
|
+
|
|
349
|
+
AI and agent configuration templates. Templates are pulled from the tools repo; uses built-in fallback if offline.
|
|
350
|
+
|
|
351
|
+
### `blt wai claude`
|
|
352
|
+
|
|
353
|
+
Create `CLAUDE.md` — primary project memory loaded every session.
|
|
354
|
+
|
|
355
|
+
### `blt wai agents`
|
|
356
|
+
|
|
357
|
+
Create `AGENTS.md` — open standard for AI agent config.
|
|
358
|
+
|
|
359
|
+
### `blt wai claude-local`
|
|
360
|
+
|
|
361
|
+
Create `CLAUDE.local.md` — local-only instructions (add to `.gitignore`).
|
|
362
|
+
|
|
363
|
+
### `blt wai skill <name>`
|
|
364
|
+
|
|
365
|
+
Create `.claude/skills/<name>/SKILL.md` — reusable workflow.
|
|
366
|
+
|
|
367
|
+
### `blt wai rule <name>`
|
|
368
|
+
|
|
369
|
+
Create `.claude/rules/<name>.md` — scoped instructions.
|
|
370
|
+
|
|
371
|
+
### `blt wai command <name>`
|
|
372
|
+
|
|
373
|
+
Create `.claude/commands/<name>.md` — legacy slash command.
|
|
374
|
+
|
|
375
|
+
### `blt wai settings`
|
|
376
|
+
|
|
377
|
+
Create `.claude/settings.json` — project settings.
|
|
378
|
+
|
|
379
|
+
### `blt wai settings-local`
|
|
380
|
+
|
|
381
|
+
Create `.claude/settings.local.json` — local overrides (add to .gitignore).
|
|
382
|
+
|
|
383
|
+
### `blt wai mcp`
|
|
384
|
+
|
|
385
|
+
Create `.mcp.json` — MCP server config (Jira, Slack, etc.).
|
|
386
|
+
|
|
387
|
+
### Codex equivalents (OpenAI Codex CLI)
|
|
388
|
+
|
|
389
|
+
- `blt wai agents-override` — AGENTS.override.md (local overrides, add to .gitignore)
|
|
390
|
+
- `blt wai plan` — PLAN.md (multi-step strategy)
|
|
391
|
+
- `blt wai implement` — IMPLEMENT.md (runbook)
|
|
392
|
+
- `blt wai codex` — CODEX.md (legacy)
|
|
393
|
+
|
|
394
|
+
```bash
|
|
395
|
+
blt wai claude
|
|
396
|
+
blt wai agents
|
|
397
|
+
blt wai claude-local
|
|
398
|
+
blt wai skill my-skill
|
|
399
|
+
blt wai rule typescript
|
|
400
|
+
blt wai command review
|
|
401
|
+
blt wai settings
|
|
402
|
+
blt wai mcp
|
|
403
|
+
blt wai agents-override
|
|
404
|
+
blt wai plan
|
|
405
|
+
blt wai implement
|
|
406
|
+
```
|
|
407
|
+
|
|
408
|
+
**Options (all types):** `--overwrite`, `--branch <ref>`, `--output <path>`, `--claude-dir`
|
|
409
|
+
|
|
410
|
+
**Shared standard:** AGENTS.md works across Claude Code, Codex, and Cursor. Codex uses AGENTS.override.md for local overrides (similar to CLAUDE.local.md).
|
|
411
|
+
|
|
412
|
+
---
|
|
413
|
+
|
|
322
414
|
## Workflow Commands (GitHub Actions)
|
|
323
415
|
|
|
324
416
|
Manage deploy GitHub Actions workflows in the `bltcore-com/deploy` repository. **Requires:** [GitHub CLI (`gh`)](https://cli.github.com/) installed and authenticated.
|
package/dist/blt
CHANGED
|
@@ -10,6 +10,7 @@ import versionCommand from "./commands/version";
|
|
|
10
10
|
import showCommand from "./commands/show";
|
|
11
11
|
import cleanupCommand from "./commands/cleanup";
|
|
12
12
|
import workflowCommand from "./commands/workflow";
|
|
13
|
+
import waiCommand from "./commands/wai";
|
|
13
14
|
import { join, dirname } from "node:path";
|
|
14
15
|
import { readFileSync } from "node:fs";
|
|
15
16
|
import { fileURLToPath } from "node:url";
|
|
@@ -33,6 +34,7 @@ bucketCommand(program);
|
|
|
33
34
|
showCommand(program);
|
|
34
35
|
cleanupCommand(program);
|
|
35
36
|
workflowCommand(program);
|
|
37
|
+
waiCommand(program);
|
|
36
38
|
// If no command is provided, show help
|
|
37
39
|
const args = process.argv.slice(2);
|
|
38
40
|
if (args.length === 0) {
|
package/dist/blt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAsBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
|
package/dist/blt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,eAAe,MAAM,qBAAqB,CAAC;AAClD,OAAO,UAAU,MAAM,gBAAgB,CAAC;AAExC,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,eAAe,CAAC,OAAO,CAAC,CAAC;AACzB,UAAU,CAAC,OAAO,CAAC,CAAC;AAEtB,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code–aligned config template registry.
|
|
3
|
+
* Templates are fetched from the bltcore-com/tools repo at runtime.
|
|
4
|
+
*/
|
|
5
|
+
export interface ConfigTypeDef {
|
|
6
|
+
filename: string;
|
|
7
|
+
sourceFile: string;
|
|
8
|
+
needsName: boolean;
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const CONFIG_TYPES: Record<string, ConfigTypeDef>;
|
|
12
|
+
export declare function getTemplateUrl(type: string, branch: string, name?: string): string;
|
|
13
|
+
export declare function getOutputPath(type: string, cwd: string, options: {
|
|
14
|
+
output?: string;
|
|
15
|
+
claudeDir?: boolean;
|
|
16
|
+
}, name?: string): string;
|
|
17
|
+
export declare function fetchTemplate(url: string): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=config-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.d.ts","sourceRoot":"","sources":["../../../src/commands/init/config-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CA+BtD,CAAC;AAEF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAMR;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACjD,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAsBR;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code–aligned config template registry.
|
|
3
|
+
* Templates are fetched from the bltcore-com/tools repo at runtime.
|
|
4
|
+
*/
|
|
5
|
+
const TOOLS_REPO = "bltcore-com/tools";
|
|
6
|
+
const TEMPLATE_BASE = "cli/.trailz";
|
|
7
|
+
export const CONFIG_TYPES = {
|
|
8
|
+
claude: {
|
|
9
|
+
filename: "CLAUDE.md",
|
|
10
|
+
sourceFile: "CLAUDE.md",
|
|
11
|
+
needsName: false,
|
|
12
|
+
description: "Primary project memory (loaded every session)",
|
|
13
|
+
},
|
|
14
|
+
agents: {
|
|
15
|
+
filename: "AGENTS.md",
|
|
16
|
+
sourceFile: "AGENTS.md",
|
|
17
|
+
needsName: false,
|
|
18
|
+
description: "Open standard for AI agent config",
|
|
19
|
+
},
|
|
20
|
+
"claude-local": {
|
|
21
|
+
filename: "CLAUDE.local.md",
|
|
22
|
+
sourceFile: "CLAUDE.local.md",
|
|
23
|
+
needsName: false,
|
|
24
|
+
description: "Local-only instructions (add to .gitignore)",
|
|
25
|
+
},
|
|
26
|
+
skill: {
|
|
27
|
+
filename: "SKILL.md",
|
|
28
|
+
sourceFile: "SKILL.md",
|
|
29
|
+
needsName: true,
|
|
30
|
+
description: "Reusable workflow in .claude/skills/<name>/SKILL.md",
|
|
31
|
+
},
|
|
32
|
+
rule: {
|
|
33
|
+
filename: "<name>.md",
|
|
34
|
+
sourceFile: "rule-template.md",
|
|
35
|
+
needsName: true,
|
|
36
|
+
description: "Scoped instructions in .claude/rules/<name>.md",
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
export function getTemplateUrl(type, branch, name) {
|
|
40
|
+
const def = CONFIG_TYPES[type];
|
|
41
|
+
if (!def)
|
|
42
|
+
throw new Error(`Unknown config type: ${type}`);
|
|
43
|
+
const sourceFile = def.sourceFile;
|
|
44
|
+
return `https://raw.githubusercontent.com/${TOOLS_REPO}/${branch}/${TEMPLATE_BASE}/${sourceFile}`;
|
|
45
|
+
}
|
|
46
|
+
export function getOutputPath(type, cwd, options, name) {
|
|
47
|
+
if (options.output) {
|
|
48
|
+
return options.output.startsWith("/")
|
|
49
|
+
? options.output
|
|
50
|
+
: `${cwd}/${options.output}`.replace(/\/+/g, "/");
|
|
51
|
+
}
|
|
52
|
+
const def = CONFIG_TYPES[type];
|
|
53
|
+
if (!def)
|
|
54
|
+
throw new Error(`Unknown config type: ${type}`);
|
|
55
|
+
// skill and rule always live under .claude/
|
|
56
|
+
if (def.needsName && name) {
|
|
57
|
+
if (type === "skill") {
|
|
58
|
+
return `${cwd}/.claude/skills/${name}/SKILL.md`.replace(/\/+/g, "/");
|
|
59
|
+
}
|
|
60
|
+
if (type === "rule") {
|
|
61
|
+
return `${cwd}/.claude/rules/${name}.md`.replace(/\/+/g, "/");
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
const base = options.claudeDir ? ".claude" : ".";
|
|
65
|
+
return `${cwd}/${base}/${def.filename}`.replace(/\/+/g, "/");
|
|
66
|
+
}
|
|
67
|
+
export async function fetchTemplate(url) {
|
|
68
|
+
const res = await fetch(url);
|
|
69
|
+
if (!res.ok) {
|
|
70
|
+
throw new Error(`Failed to fetch template (${res.status}): ${url}\n${await res.text().catch(() => "")}`);
|
|
71
|
+
}
|
|
72
|
+
return res.text();
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=config-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.js","sourceRoot":"","sources":["../../../src/commands/init/config-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,MAAM,UAAU,GAAG,mBAAmB,CAAC;AACvC,MAAM,aAAa,GAAG,aAAa,CAAC;AASpC,MAAM,CAAC,MAAM,YAAY,GAAkC;IACzD,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,+CAA+C;KAC7D;IACD,MAAM,EAAE;QACN,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,WAAW;QACvB,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,mCAAmC;KACjD;IACD,cAAc,EAAE;QACd,QAAQ,EAAE,iBAAiB;QAC3B,UAAU,EAAE,iBAAiB;QAC7B,SAAS,EAAE,KAAK;QAChB,WAAW,EAAE,6CAA6C;KAC3D;IACD,KAAK,EAAE;QACL,QAAQ,EAAE,UAAU;QACpB,UAAU,EAAE,UAAU;QACtB,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,qDAAqD;KACnE;IACD,IAAI,EAAE;QACJ,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,kBAAkB;QAC9B,SAAS,EAAE,IAAI;QACf,WAAW,EAAE,gDAAgD;KAC9D;CACF,CAAC;AAEF,MAAM,UAAU,cAAc,CAC5B,IAAY,EACZ,MAAc,EACd,IAAa;IAEb,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAE1D,MAAM,UAAU,GAAG,GAAG,CAAC,UAAU,CAAC;IAClC,OAAO,qCAAqC,UAAU,IAAI,MAAM,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;AACpG,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,IAAY,EACZ,GAAW,EACX,OAAiD,EACjD,IAAa;IAEb,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,OAAO,OAAO,CAAC,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC;YACnC,CAAC,CAAC,OAAO,CAAC,MAAM;YAChB,CAAC,CAAC,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,CAAC,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,EAAE,CAAC,CAAC;IAE1D,4CAA4C;IAC5C,IAAI,GAAG,CAAC,SAAS,IAAI,IAAI,EAAE,CAAC;QAC1B,IAAI,IAAI,KAAK,OAAO,EAAE,CAAC;YACrB,OAAO,GAAG,GAAG,mBAAmB,IAAI,WAAW,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QACvE,CAAC;QACD,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YACpB,OAAO,GAAG,GAAG,kBAAkB,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAChE,CAAC;IACH,CAAC;IAED,MAAM,IAAI,GAAG,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC;IACjD,OAAO,GAAG,GAAG,IAAI,IAAI,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAC/D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,GAAW;IAC7C,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,CAAC,CAAC;IAC7B,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,6BAA6B,GAAG,CAAC,MAAM,MAAM,GAAG,KAAK,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,CACxF,CAAC;IACJ,CAAC;IACD,OAAO,GAAG,CAAC,IAAI,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
export interface InitConfigOptions {
|
|
3
|
+
overwrite: boolean;
|
|
4
|
+
branch: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
claudeDir: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function initConfig(type: string, name: string | undefined, options: InitConfigOptions, logger: Logger): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/init/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA2D5C,MAAM,WAAW,iBAAiB;IAChC,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,UAAU,CAC9B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,iBAAiB,EAC1B,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { CONFIG_TYPES, fetchTemplate, getOutputPath, getTemplateUrl, } from "./config-templates";
|
|
4
|
+
const DEFAULT_BRANCH = "main";
|
|
5
|
+
/** Fallback templates when GitHub fetch fails (e.g. before push, offline) */
|
|
6
|
+
const FALLBACK_TEMPLATES = {
|
|
7
|
+
"CLAUDE.md": `# Project Memory (CLAUDE.md)
|
|
8
|
+
|
|
9
|
+
Primary project context loaded at the start of every session.
|
|
10
|
+
|
|
11
|
+
## About This Project
|
|
12
|
+
|
|
13
|
+
## Build & Run
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
## Coding Standards
|
|
18
|
+
`,
|
|
19
|
+
"AGENTS.md": `# AGENTS.md
|
|
20
|
+
|
|
21
|
+
Open standard for AI agent configuration.
|
|
22
|
+
|
|
23
|
+
## Project Context
|
|
24
|
+
|
|
25
|
+
## Conventions
|
|
26
|
+
|
|
27
|
+
## Key Commands
|
|
28
|
+
`,
|
|
29
|
+
"CLAUDE.local.md": `# CLAUDE.local.md
|
|
30
|
+
|
|
31
|
+
Local-only instructions. Add to .gitignore. Do not commit.
|
|
32
|
+
`,
|
|
33
|
+
"SKILL.md": `---
|
|
34
|
+
name: Skill Name
|
|
35
|
+
description: What this skill does
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
# Skill
|
|
39
|
+
|
|
40
|
+
Reusable multi-step workflow. Add steps and notes below.
|
|
41
|
+
`,
|
|
42
|
+
"rule-template.md": `# Rule
|
|
43
|
+
|
|
44
|
+
Scoped instructions for specific file types or paths.
|
|
45
|
+
|
|
46
|
+
## Applies To
|
|
47
|
+
|
|
48
|
+
## Instructions
|
|
49
|
+
`,
|
|
50
|
+
};
|
|
51
|
+
export async function initConfig(type, name, options, logger) {
|
|
52
|
+
const def = CONFIG_TYPES[type];
|
|
53
|
+
if (!def) {
|
|
54
|
+
logger.error(`Unknown config type: '${type}'. Valid: ${Object.keys(CONFIG_TYPES).join(", ")}`);
|
|
55
|
+
process.exit(1);
|
|
56
|
+
}
|
|
57
|
+
if (def.needsName && !name?.trim()) {
|
|
58
|
+
logger.error(`Type '${type}' requires a name. Example: blt init config ${type} my-name`);
|
|
59
|
+
process.exit(1);
|
|
60
|
+
}
|
|
61
|
+
const cwd = process.cwd();
|
|
62
|
+
const targetPath = getOutputPath(type, cwd, options, name);
|
|
63
|
+
if (existsSync(targetPath) && !options.overwrite) {
|
|
64
|
+
logger.warn(`File already exists: ${targetPath}`);
|
|
65
|
+
logger.warn("Use --overwrite to replace it.");
|
|
66
|
+
return;
|
|
67
|
+
}
|
|
68
|
+
const branch = options.branch || DEFAULT_BRANCH;
|
|
69
|
+
const sourceFile = def.sourceFile;
|
|
70
|
+
let content;
|
|
71
|
+
try {
|
|
72
|
+
const url = getTemplateUrl(type, branch, name);
|
|
73
|
+
content = await fetchTemplate(url);
|
|
74
|
+
}
|
|
75
|
+
catch (err) {
|
|
76
|
+
const fallback = FALLBACK_TEMPLATES[sourceFile];
|
|
77
|
+
if (fallback) {
|
|
78
|
+
logger.warn("Could not fetch from GitHub, using built-in template. Push templates to the tools repo for the latest versions.");
|
|
79
|
+
content = fallback;
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
83
|
+
logger.error(`Failed to fetch template: ${msg}`);
|
|
84
|
+
process.exit(1);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
const dir = dirname(targetPath);
|
|
88
|
+
mkdirSync(dir, { recursive: true });
|
|
89
|
+
await Bun.write(targetPath, content);
|
|
90
|
+
logger.info(`Created: ${targetPath}`);
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/init/config.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/pdf.js
CHANGED
|
@@ -15,7 +15,7 @@ Available operations:
|
|
|
15
15
|
Run 'blt pdf <operation> --help' for more information on a specific command.
|
|
16
16
|
`;
|
|
17
17
|
program
|
|
18
|
-
.command("pdf", "
|
|
18
|
+
.command("pdf", "pdf manipulation")
|
|
19
19
|
.help(pdfHelpText)
|
|
20
20
|
.action(() => {
|
|
21
21
|
console.log(pdfHelpText);
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code–aligned config template registry for blt wai.
|
|
3
|
+
* Templates are fetched from the bltcore-com/tools repo at runtime.
|
|
4
|
+
*/
|
|
5
|
+
export interface ConfigTypeDef {
|
|
6
|
+
filename: string;
|
|
7
|
+
sourceFile: string;
|
|
8
|
+
needsName: boolean;
|
|
9
|
+
description: string;
|
|
10
|
+
}
|
|
11
|
+
export declare const WAI_TYPES: Record<string, ConfigTypeDef>;
|
|
12
|
+
export declare function getTemplateUrl(type: string, branch: string, name?: string): string;
|
|
13
|
+
export declare function getOutputPath(type: string, cwd: string, options: {
|
|
14
|
+
output?: string;
|
|
15
|
+
claudeDir?: boolean;
|
|
16
|
+
}, name?: string): string;
|
|
17
|
+
export declare function fetchTemplate(url: string): Promise<string>;
|
|
18
|
+
//# sourceMappingURL=config-templates.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.d.ts","sourceRoot":"","sources":["../../../src/commands/wai/config-templates.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,MAAM,WAAW,aAAa;IAC5B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAgFnD,CAAC;AAEF,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAMR;AAED,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,MAAM,EACX,OAAO,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,OAAO,CAAA;CAAE,EACjD,IAAI,CAAC,EAAE,MAAM,GACZ,MAAM,CAqCR;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAQhE"}
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Claude Code–aligned config template registry for blt wai.
|
|
3
|
+
* Templates are fetched from the bltcore-com/tools repo at runtime.
|
|
4
|
+
*/
|
|
5
|
+
const TOOLS_REPO = "bltcore-com/tools";
|
|
6
|
+
const TEMPLATE_BASE = "cli/.trailz";
|
|
7
|
+
export const WAI_TYPES = {
|
|
8
|
+
claude: {
|
|
9
|
+
filename: "CLAUDE.md",
|
|
10
|
+
sourceFile: "CLAUDE.md",
|
|
11
|
+
needsName: false,
|
|
12
|
+
description: "Primary project memory (loaded every session)",
|
|
13
|
+
},
|
|
14
|
+
agents: {
|
|
15
|
+
filename: "AGENTS.md",
|
|
16
|
+
sourceFile: "AGENTS.md",
|
|
17
|
+
needsName: false,
|
|
18
|
+
description: "Open standard for AI agent config",
|
|
19
|
+
},
|
|
20
|
+
"claude-local": {
|
|
21
|
+
filename: "CLAUDE.local.md",
|
|
22
|
+
sourceFile: "CLAUDE.local.md",
|
|
23
|
+
needsName: false,
|
|
24
|
+
description: "Local-only instructions (add to .gitignore)",
|
|
25
|
+
},
|
|
26
|
+
skill: {
|
|
27
|
+
filename: "SKILL.md",
|
|
28
|
+
sourceFile: "SKILL.md",
|
|
29
|
+
needsName: true,
|
|
30
|
+
description: "Reusable workflow in .claude/skills/<name>/SKILL.md",
|
|
31
|
+
},
|
|
32
|
+
rule: {
|
|
33
|
+
filename: "<name>.md",
|
|
34
|
+
sourceFile: "rule-template.md",
|
|
35
|
+
needsName: true,
|
|
36
|
+
description: "Scoped instructions in .claude/rules/<name>.md",
|
|
37
|
+
},
|
|
38
|
+
command: {
|
|
39
|
+
filename: "<name>.md",
|
|
40
|
+
sourceFile: "command-template.md",
|
|
41
|
+
needsName: true,
|
|
42
|
+
description: "Legacy slash command in .claude/commands/<name>.md",
|
|
43
|
+
},
|
|
44
|
+
settings: {
|
|
45
|
+
filename: "settings.json",
|
|
46
|
+
sourceFile: "settings.json",
|
|
47
|
+
needsName: false,
|
|
48
|
+
description: "Project settings in .claude/settings.json",
|
|
49
|
+
},
|
|
50
|
+
"settings-local": {
|
|
51
|
+
filename: "settings.local.json",
|
|
52
|
+
sourceFile: "settings.local.json",
|
|
53
|
+
needsName: false,
|
|
54
|
+
description: "Local project overrides in .claude/settings.local.json (add to .gitignore)",
|
|
55
|
+
},
|
|
56
|
+
mcp: {
|
|
57
|
+
filename: ".mcp.json",
|
|
58
|
+
sourceFile: "mcp.json",
|
|
59
|
+
needsName: false,
|
|
60
|
+
description: "MCP server config in project root",
|
|
61
|
+
},
|
|
62
|
+
// Codex equivalents (OpenAI Codex CLI)
|
|
63
|
+
"agents-override": {
|
|
64
|
+
filename: "AGENTS.override.md",
|
|
65
|
+
sourceFile: "AGENTS.override.md",
|
|
66
|
+
needsName: false,
|
|
67
|
+
description: "Codex local overrides (like CLAUDE.local.md; add to .gitignore)",
|
|
68
|
+
},
|
|
69
|
+
plan: {
|
|
70
|
+
filename: "PLAN.md",
|
|
71
|
+
sourceFile: "PLAN.md",
|
|
72
|
+
needsName: false,
|
|
73
|
+
description: "Codex multi-step implementation strategy",
|
|
74
|
+
},
|
|
75
|
+
implement: {
|
|
76
|
+
filename: "IMPLEMENT.md",
|
|
77
|
+
sourceFile: "IMPLEMENT.md",
|
|
78
|
+
needsName: false,
|
|
79
|
+
description: "Codex runbook referencing PLAN.md",
|
|
80
|
+
},
|
|
81
|
+
codex: {
|
|
82
|
+
filename: "CODEX.md",
|
|
83
|
+
sourceFile: "CODEX.md",
|
|
84
|
+
needsName: false,
|
|
85
|
+
description: "Legacy Codex repo instructions (superseded by AGENTS.md in 0.27+)",
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
export function getTemplateUrl(type, branch, name) {
|
|
89
|
+
const def = WAI_TYPES[type];
|
|
90
|
+
if (!def)
|
|
91
|
+
throw new Error(`Unknown type: ${type}`);
|
|
92
|
+
const sourceFile = def.sourceFile;
|
|
93
|
+
return `https://raw.githubusercontent.com/${TOOLS_REPO}/${branch}/${TEMPLATE_BASE}/${sourceFile}`;
|
|
94
|
+
}
|
|
95
|
+
export function getOutputPath(type, cwd, options, name) {
|
|
96
|
+
if (options.output) {
|
|
97
|
+
return options.output.startsWith("/")
|
|
98
|
+
? options.output
|
|
99
|
+
: `${cwd}/${options.output}`.replace(/\/+/g, "/");
|
|
100
|
+
}
|
|
101
|
+
const def = WAI_TYPES[type];
|
|
102
|
+
if (!def)
|
|
103
|
+
throw new Error(`Unknown type: ${type}`);
|
|
104
|
+
if (def.needsName && name) {
|
|
105
|
+
if (type === "skill") {
|
|
106
|
+
return `${cwd}/.claude/skills/${name}/SKILL.md`.replace(/\/+/g, "/");
|
|
107
|
+
}
|
|
108
|
+
if (type === "rule") {
|
|
109
|
+
return `${cwd}/.claude/rules/${name}.md`.replace(/\/+/g, "/");
|
|
110
|
+
}
|
|
111
|
+
if (type === "command") {
|
|
112
|
+
return `${cwd}/.claude/commands/${name}.md`.replace(/\/+/g, "/");
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// settings, settings-local, mcp always go to .claude/ or project root
|
|
116
|
+
if (type === "settings" || type === "settings-local") {
|
|
117
|
+
return `${cwd}/.claude/${def.filename}`.replace(/\/+/g, "/");
|
|
118
|
+
}
|
|
119
|
+
if (type === "mcp") {
|
|
120
|
+
return `${cwd}/.mcp.json`.replace(/\/+/g, "/");
|
|
121
|
+
}
|
|
122
|
+
// Codex files go to project root
|
|
123
|
+
if (type === "agents-override" || type === "plan" || type === "implement" || type === "codex") {
|
|
124
|
+
return `${cwd}/${def.filename}`.replace(/\/+/g, "/");
|
|
125
|
+
}
|
|
126
|
+
const base = options.claudeDir ? ".claude" : ".";
|
|
127
|
+
return `${cwd}/${base}/${def.filename}`.replace(/\/+/g, "/");
|
|
128
|
+
}
|
|
129
|
+
export async function fetchTemplate(url) {
|
|
130
|
+
const res = await fetch(url);
|
|
131
|
+
if (!res.ok) {
|
|
132
|
+
throw new Error(`Failed to fetch template (${res.status}): ${url}\n${await res.text().catch(() => "")}`);
|
|
133
|
+
}
|
|
134
|
+
return res.text();
|
|
135
|
+
}
|
|
136
|
+
//# sourceMappingURL=config-templates.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-templates.js","sourceRoot":"","sources":["../../../src/commands/wai/config-templates.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
export interface WaiConfigOptions {
|
|
3
|
+
overwrite: boolean;
|
|
4
|
+
branch: string;
|
|
5
|
+
output?: string;
|
|
6
|
+
claudeDir: boolean;
|
|
7
|
+
}
|
|
8
|
+
export declare function runWaiConfig(type: string, name: string | undefined, options: WaiConfigOptions, logger: Logger): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=config.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/commands/wai/config.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA+G5C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,OAAO,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,GAAG,SAAS,EACxB,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,IAAI,CAAC,CA+Cf"}
|
|
@@ -0,0 +1,144 @@
|
|
|
1
|
+
import { existsSync, mkdirSync } from "node:fs";
|
|
2
|
+
import { dirname } from "node:path";
|
|
3
|
+
import { fetchTemplate, getOutputPath, getTemplateUrl, WAI_TYPES, } from "./config-templates";
|
|
4
|
+
const DEFAULT_BRANCH = "main";
|
|
5
|
+
/** Fallback templates when GitHub fetch fails (e.g. before push, offline) */
|
|
6
|
+
const FALLBACK_TEMPLATES = {
|
|
7
|
+
"CLAUDE.md": `# Project Memory (CLAUDE.md)
|
|
8
|
+
|
|
9
|
+
Primary project context loaded at the start of every session.
|
|
10
|
+
|
|
11
|
+
## About This Project
|
|
12
|
+
|
|
13
|
+
## Build & Run
|
|
14
|
+
|
|
15
|
+
## Architecture
|
|
16
|
+
|
|
17
|
+
## Coding Standards
|
|
18
|
+
`,
|
|
19
|
+
"AGENTS.md": `# AGENTS.md
|
|
20
|
+
|
|
21
|
+
Open standard for AI agent configuration.
|
|
22
|
+
|
|
23
|
+
## Project Context
|
|
24
|
+
|
|
25
|
+
## Conventions
|
|
26
|
+
|
|
27
|
+
## Key Commands
|
|
28
|
+
`,
|
|
29
|
+
"CLAUDE.local.md": `# CLAUDE.local.md
|
|
30
|
+
|
|
31
|
+
Local-only instructions. Add to .gitignore. Do not commit.
|
|
32
|
+
`,
|
|
33
|
+
"SKILL.md": `---
|
|
34
|
+
name: Skill Name
|
|
35
|
+
description: What this skill does
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
# Skill
|
|
39
|
+
|
|
40
|
+
Reusable multi-step workflow. Add steps and notes below.
|
|
41
|
+
`,
|
|
42
|
+
"rule-template.md": `# Rule
|
|
43
|
+
|
|
44
|
+
Scoped instructions for specific file types or paths.
|
|
45
|
+
|
|
46
|
+
## Applies To
|
|
47
|
+
|
|
48
|
+
## Instructions
|
|
49
|
+
`,
|
|
50
|
+
"command-template.md": `# Slash Command
|
|
51
|
+
|
|
52
|
+
Legacy slash command. Define the workflow and instructions.
|
|
53
|
+
|
|
54
|
+
## Usage
|
|
55
|
+
|
|
56
|
+
## Steps
|
|
57
|
+
`,
|
|
58
|
+
"settings.json": `{
|
|
59
|
+
"$schema": "https://claude.com/schemas/settings.json"
|
|
60
|
+
}
|
|
61
|
+
`,
|
|
62
|
+
"settings.local.json": `{
|
|
63
|
+
"$schema": "https://claude.com/schemas/settings.json"
|
|
64
|
+
}
|
|
65
|
+
`,
|
|
66
|
+
"mcp.json": `{
|
|
67
|
+
"mcpServers": {}
|
|
68
|
+
}
|
|
69
|
+
`,
|
|
70
|
+
// Codex equivalents
|
|
71
|
+
"AGENTS.override.md": `# AGENTS.override.md
|
|
72
|
+
|
|
73
|
+
Codex local overrides. Add to .gitignore. Do not commit.
|
|
74
|
+
Personal or local instructions that override project-wide AGENTS.md.
|
|
75
|
+
`,
|
|
76
|
+
"PLAN.md": `# PLAN.md
|
|
77
|
+
|
|
78
|
+
Codex multi-step implementation strategy.
|
|
79
|
+
Draft and iterate on implementation approaches before writing code.
|
|
80
|
+
|
|
81
|
+
## Goal
|
|
82
|
+
|
|
83
|
+
## Steps
|
|
84
|
+
|
|
85
|
+
## Notes
|
|
86
|
+
`,
|
|
87
|
+
"IMPLEMENT.md": `# IMPLEMENT.md
|
|
88
|
+
|
|
89
|
+
Codex runbook. Execution instructions referencing PLAN.md.
|
|
90
|
+
|
|
91
|
+
## References
|
|
92
|
+
|
|
93
|
+
- See PLAN.md for the implementation strategy.
|
|
94
|
+
|
|
95
|
+
## Runbook
|
|
96
|
+
`,
|
|
97
|
+
"CODEX.md": `# CODEX.md
|
|
98
|
+
|
|
99
|
+
Legacy Codex repository instructions.
|
|
100
|
+
In Codex 0.27+, AGENTS.md is preferred.
|
|
101
|
+
`,
|
|
102
|
+
};
|
|
103
|
+
export async function runWaiConfig(type, name, options, logger) {
|
|
104
|
+
const def = WAI_TYPES[type];
|
|
105
|
+
if (!def) {
|
|
106
|
+
logger.error(`Unknown type: '${type}'. Valid: ${Object.keys(WAI_TYPES).join(", ")}`);
|
|
107
|
+
process.exit(1);
|
|
108
|
+
}
|
|
109
|
+
if (def.needsName && !name?.trim()) {
|
|
110
|
+
logger.error(`Type '${type}' requires a name. Example: blt wai ${type} my-name`);
|
|
111
|
+
process.exit(1);
|
|
112
|
+
}
|
|
113
|
+
const cwd = process.cwd();
|
|
114
|
+
const targetPath = getOutputPath(type, cwd, options, name);
|
|
115
|
+
if (existsSync(targetPath) && !options.overwrite) {
|
|
116
|
+
logger.warn(`File already exists: ${targetPath}`);
|
|
117
|
+
logger.warn("Use --overwrite to replace it.");
|
|
118
|
+
return;
|
|
119
|
+
}
|
|
120
|
+
const branch = options.branch || DEFAULT_BRANCH;
|
|
121
|
+
const sourceFile = def.sourceFile;
|
|
122
|
+
let content;
|
|
123
|
+
try {
|
|
124
|
+
const url = getTemplateUrl(type, branch, name);
|
|
125
|
+
content = await fetchTemplate(url);
|
|
126
|
+
}
|
|
127
|
+
catch (err) {
|
|
128
|
+
const fallback = FALLBACK_TEMPLATES[sourceFile];
|
|
129
|
+
if (fallback) {
|
|
130
|
+
logger.warn("Could not fetch from GitHub, using built-in template. Push templates to the tools repo for the latest versions.");
|
|
131
|
+
content = fallback;
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
135
|
+
logger.error(`Failed to fetch template: ${msg}`);
|
|
136
|
+
process.exit(1);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
const dir = dirname(targetPath);
|
|
140
|
+
mkdirSync(dir, { recursive: true });
|
|
141
|
+
await Bun.write(targetPath, content);
|
|
142
|
+
logger.info(`Created: ${targetPath}`);
|
|
143
|
+
}
|
|
144
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/commands/wai/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wai.d.ts","sourceRoot":"","sources":["../../src/commands/wai.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAyB,MAAM,eAAe,CAAC;AAGpE;;;GAGG;AACH,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QA+PlD"}
|
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
import { runWaiConfig } from "./wai/config";
|
|
2
|
+
/**
|
|
3
|
+
* Register wai command with the CLI program.
|
|
4
|
+
* WAI = BLT WAI (bltwai.com) — AI/agent config templates.
|
|
5
|
+
*/
|
|
6
|
+
export default function waiCommand(program) {
|
|
7
|
+
const waiHelpText = `
|
|
8
|
+
bltwai.com is our main domain name and stands for
|
|
9
|
+
Beyond Limited Thinking with Artificial Intelligence
|
|
10
|
+
|
|
11
|
+
blt wai — AI and agent configuration templates
|
|
12
|
+
|
|
13
|
+
Usage:
|
|
14
|
+
blt wai <type> [name] [options]
|
|
15
|
+
|
|
16
|
+
Types:
|
|
17
|
+
claude CLAUDE.md — primary project memory (loaded every session)
|
|
18
|
+
agents AGENTS.md — open standard for AI agent config
|
|
19
|
+
claude-local CLAUDE.local.md — local-only (add to .gitignore)
|
|
20
|
+
skill <name> .claude/skills/<name>/SKILL.md — reusable workflow
|
|
21
|
+
rule <name> .claude/rules/<name>.md — scoped instructions
|
|
22
|
+
command <name> .claude/commands/<name>.md — legacy slash command
|
|
23
|
+
settings .claude/settings.json — project settings
|
|
24
|
+
settings-local .claude/settings.local.json — local overrides (add to .gitignore)
|
|
25
|
+
mcp .mcp.json — MCP server config
|
|
26
|
+
agents-override AGENTS.override.md — Codex local overrides (add to .gitignore)
|
|
27
|
+
plan PLAN.md — Codex multi-step strategy
|
|
28
|
+
implement IMPLEMENT.md — Codex runbook
|
|
29
|
+
codex CODEX.md — Legacy Codex instructions
|
|
30
|
+
|
|
31
|
+
Examples:
|
|
32
|
+
blt wai claude
|
|
33
|
+
blt wai agents
|
|
34
|
+
blt wai claude-local
|
|
35
|
+
blt wai skill my-skill
|
|
36
|
+
blt wai rule typescript
|
|
37
|
+
blt wai command review
|
|
38
|
+
blt wai settings
|
|
39
|
+
blt wai mcp
|
|
40
|
+
blt wai agents-override
|
|
41
|
+
blt wai plan
|
|
42
|
+
blt wai implement
|
|
43
|
+
|
|
44
|
+
Templates are fetched from the tools repo. Uses built-in fallback when offline.
|
|
45
|
+
`;
|
|
46
|
+
program
|
|
47
|
+
.command("wai", "ai and agent configuration")
|
|
48
|
+
.help(waiHelpText)
|
|
49
|
+
.action(() => {
|
|
50
|
+
console.log(waiHelpText);
|
|
51
|
+
});
|
|
52
|
+
program
|
|
53
|
+
.command("wai claude", "Create CLAUDE.md — project memory")
|
|
54
|
+
.hide()
|
|
55
|
+
.help("Create CLAUDE.md — primary project memory for Claude Code.\n\n" +
|
|
56
|
+
"Loaded at the start of every session. Use for coding standards, build commands,\n" +
|
|
57
|
+
"architectural decisions, and domain context. Place in project root, or use\n" +
|
|
58
|
+
"--claude-dir to write to .claude/CLAUDE.md instead.")
|
|
59
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
60
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
61
|
+
.option("--output <path>", "Override output path", {})
|
|
62
|
+
.option("--claude-dir", "Write to .claude/ subdirectory", { default: false })
|
|
63
|
+
.action(waiAction("claude"));
|
|
64
|
+
program
|
|
65
|
+
.command("wai agents", "Create AGENTS.md — open standard config")
|
|
66
|
+
.hide()
|
|
67
|
+
.help("Create AGENTS.md — emerging open standard for AI agent configuration.\n\n" +
|
|
68
|
+
"Shared across Claude Code, Codex, and Cursor. Use when you want a single file\n" +
|
|
69
|
+
"that works with multiple AI assistants, avoiding duplicated rules. Complements\n" +
|
|
70
|
+
"or replaces CLAUDE.md for cross-tool projects.")
|
|
71
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
72
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
73
|
+
.option("--output <path>", "Override output path", {})
|
|
74
|
+
.option("--claude-dir", "Write to .claude/ subdirectory", { default: false })
|
|
75
|
+
.action(waiAction("agents"));
|
|
76
|
+
program
|
|
77
|
+
.command("wai claude-local", "Create CLAUDE.local.md — local only")
|
|
78
|
+
.hide()
|
|
79
|
+
.help("Create CLAUDE.local.md — local-only instructions for Claude Code.\n\n" +
|
|
80
|
+
"Personal preferences, local paths, or instructions you don't want to share.\n" +
|
|
81
|
+
"Add to .gitignore so it is never committed. Claude loads this after CLAUDE.md.")
|
|
82
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
83
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
84
|
+
.option("--output <path>", "Override output path", {})
|
|
85
|
+
.option("--claude-dir", "Write to .claude/ subdirectory", { default: false })
|
|
86
|
+
.action(waiAction("claude-local"));
|
|
87
|
+
program
|
|
88
|
+
.command("wai skill", "Create .claude/skills/<name>/SKILL.md")
|
|
89
|
+
.hide()
|
|
90
|
+
.help("Create a Skill — reusable multi-step workflow for Claude Code.\n\n" +
|
|
91
|
+
"Skills use YAML frontmatter (name, description) plus markdown instructions.\n" +
|
|
92
|
+
"Claude can invoke them automatically or via slash command. Use for common\n" +
|
|
93
|
+
"tasks like code review, refactoring patterns, or deployment checklists.")
|
|
94
|
+
.argument("<name>", "Skill name")
|
|
95
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
96
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
97
|
+
.option("--output <path>", "Override output path", {})
|
|
98
|
+
.action(waiAction("skill"));
|
|
99
|
+
program
|
|
100
|
+
.command("wai rule", "Create .claude/rules/<name>.md")
|
|
101
|
+
.hide()
|
|
102
|
+
.help("Create a Rule — scoped instructions for file types or paths.\n\n" +
|
|
103
|
+
"Rules let you attach specific guidance to certain files or directories (e.g.\n" +
|
|
104
|
+
"typescript.md for .ts files). Keeps the main CLAUDE.md concise. Claude loads\n" +
|
|
105
|
+
"rules when working in matching paths.")
|
|
106
|
+
.argument("<name>", "Rule name")
|
|
107
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
108
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
109
|
+
.option("--output <path>", "Override output path", {})
|
|
110
|
+
.action(waiAction("rule"));
|
|
111
|
+
program
|
|
112
|
+
.command("wai command", "Create .claude/commands/<name>.md — legacy slash command")
|
|
113
|
+
.hide()
|
|
114
|
+
.help("Create a legacy slash command in .claude/commands/.\n\n" +
|
|
115
|
+
"Pre-SKILL.md format. Similar to skills but stored in .claude/commands/.\n" +
|
|
116
|
+
"Still recognized by Claude Code. Use for simple slash-triggered workflows\n" +
|
|
117
|
+
"or when migrating from older setups.")
|
|
118
|
+
.argument("<name>", "Command name")
|
|
119
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
120
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
121
|
+
.option("--output <path>", "Override output path", {})
|
|
122
|
+
.action(waiAction("command"));
|
|
123
|
+
program
|
|
124
|
+
.command("wai settings", "Create .claude/settings.json")
|
|
125
|
+
.hide()
|
|
126
|
+
.help("Create .claude/settings.json — Claude Code project settings.\n\n" +
|
|
127
|
+
"Shared project configuration (model preferences, approval policy, etc.).\n" +
|
|
128
|
+
"Commit this file to version control so the whole team gets the same setup.")
|
|
129
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
130
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
131
|
+
.option("--output <path>", "Override output path", {})
|
|
132
|
+
.action(waiAction("settings"));
|
|
133
|
+
program
|
|
134
|
+
.command("wai settings-local", "Create .claude/settings.local.json")
|
|
135
|
+
.hide()
|
|
136
|
+
.help("Create .claude/settings.local.json — personal Claude Code overrides.\n\n" +
|
|
137
|
+
"Personal project settings that override the shared settings.json. Add to\n" +
|
|
138
|
+
".gitignore so it is never committed. Use for local paths or preferences.")
|
|
139
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
140
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
141
|
+
.option("--output <path>", "Override output path", {})
|
|
142
|
+
.action(waiAction("settings-local"));
|
|
143
|
+
program
|
|
144
|
+
.command("wai mcp", "Create .mcp.json — MCP server config")
|
|
145
|
+
.hide()
|
|
146
|
+
.help("Create .mcp.json — Model Context Protocol server configuration.\n\n" +
|
|
147
|
+
"Connects Claude to external data sources (Jira, Slack, Google Drive, etc.).\n" +
|
|
148
|
+
"Placed in project root. Define mcpServers with endpoints and credentials.")
|
|
149
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
150
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
151
|
+
.option("--output <path>", "Override output path", {})
|
|
152
|
+
.action(waiAction("mcp"));
|
|
153
|
+
program
|
|
154
|
+
.command("wai agents-override", "Create AGENTS.override.md — Codex local overrides")
|
|
155
|
+
.hide()
|
|
156
|
+
.help("Create AGENTS.override.md — Codex local overrides (OpenAI Codex CLI).\n\n" +
|
|
157
|
+
"Codex equivalent of CLAUDE.local.md. Personal or local instructions that\n" +
|
|
158
|
+
"override project-wide AGENTS.md without changing the shared file. Add to\n" +
|
|
159
|
+
".gitignore. Codex merges overrides when walking from repo root.")
|
|
160
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
161
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
162
|
+
.option("--output <path>", "Override output path", {})
|
|
163
|
+
.action(waiAction("agents-override"));
|
|
164
|
+
program
|
|
165
|
+
.command("wai plan", "Create PLAN.md — Codex multi-step strategy")
|
|
166
|
+
.hide()
|
|
167
|
+
.help("Create PLAN.md — Codex multi-step implementation strategy.\n\n" +
|
|
168
|
+
"Codex uses this to draft and iterate on implementation approaches before\n" +
|
|
169
|
+
"writing code. Use for complex or long-horizon tasks. Reference from IMPLEMENT.md\n" +
|
|
170
|
+
"to keep the agent on track during execution.")
|
|
171
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
172
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
173
|
+
.option("--output <path>", "Override output path", {})
|
|
174
|
+
.action(waiAction("plan"));
|
|
175
|
+
program
|
|
176
|
+
.command("wai implement", "Create IMPLEMENT.md — Codex runbook")
|
|
177
|
+
.hide()
|
|
178
|
+
.help("Create IMPLEMENT.md — Codex runbook for execution.\n\n" +
|
|
179
|
+
"Acts as a runbook with specific execution instructions. References PLAN.md\n" +
|
|
180
|
+
"so Codex stays aligned with the strategy while working. Use with PLAN.md\n" +
|
|
181
|
+
"for structured multi-step implementation.")
|
|
182
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
183
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
184
|
+
.option("--output <path>", "Override output path", {})
|
|
185
|
+
.action(waiAction("implement"));
|
|
186
|
+
program
|
|
187
|
+
.command("wai codex", "Create CODEX.md — legacy Codex instructions")
|
|
188
|
+
.hide()
|
|
189
|
+
.help("Create CODEX.md — legacy OpenAI Codex repository instructions.\n\n" +
|
|
190
|
+
"Historically used for repo-specific guidance. In Codex 0.27+, AGENTS.md is\n" +
|
|
191
|
+
"preferred. Use only when maintaining projects on older Codex versions.")
|
|
192
|
+
.option("--overwrite", "Replace existing file", { default: false })
|
|
193
|
+
.option("--branch <branch>", "GitHub branch for templates", { default: "main" })
|
|
194
|
+
.option("--output <path>", "Override output path", {})
|
|
195
|
+
.action(waiAction("codex"));
|
|
196
|
+
function waiAction(type) {
|
|
197
|
+
return async ({ args, options, logger, }) => {
|
|
198
|
+
const name = args.name;
|
|
199
|
+
await runWaiConfig(type, name, {
|
|
200
|
+
overwrite: options.overwrite,
|
|
201
|
+
branch: options.branch,
|
|
202
|
+
output: options.output,
|
|
203
|
+
claudeDir: options.claudeDir ?? false,
|
|
204
|
+
}, logger);
|
|
205
|
+
};
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
//# sourceMappingURL=wai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wai.js","sourceRoot":"","sources":["../../src/commands/wai.ts"],"names":[],"mappings":"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"}
|