aiblueprint-cli 1.4.11 → 1.4.13

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 (55) hide show
  1. package/claude-code-config/scripts/.claude/commands/fix-on-my-computer.md +87 -0
  2. package/claude-code-config/scripts/command-validator/CLAUDE.md +112 -0
  3. package/claude-code-config/scripts/command-validator/src/__tests__/validator.test.ts +62 -111
  4. package/claude-code-config/scripts/command-validator/src/cli.ts +5 -3
  5. package/claude-code-config/scripts/command-validator/src/lib/security-rules.ts +3 -4
  6. package/claude-code-config/scripts/command-validator/src/lib/types.ts +1 -0
  7. package/claude-code-config/scripts/command-validator/src/lib/validator.ts +47 -317
  8. package/claude-code-config/scripts/statusline/CLAUDE.md +29 -7
  9. package/claude-code-config/scripts/statusline/README.md +89 -1
  10. package/claude-code-config/scripts/statusline/defaults.json +75 -0
  11. package/claude-code-config/scripts/statusline/src/index.ts +101 -24
  12. package/claude-code-config/scripts/statusline/src/lib/config-types.ts +100 -0
  13. package/claude-code-config/scripts/statusline/src/lib/config.ts +21 -0
  14. package/claude-code-config/scripts/statusline/src/lib/context.ts +32 -11
  15. package/claude-code-config/scripts/statusline/src/lib/formatters.ts +360 -22
  16. package/claude-code-config/scripts/statusline/src/lib/git.ts +100 -0
  17. package/claude-code-config/scripts/statusline/src/lib/render-pure.ts +177 -0
  18. package/claude-code-config/scripts/statusline/src/lib/types.ts +11 -0
  19. package/claude-code-config/scripts/statusline/statusline.config.json +93 -0
  20. package/claude-code-config/skills/claude-memory/SKILL.md +689 -0
  21. package/claude-code-config/skills/claude-memory/references/comprehensive-example.md +175 -0
  22. package/claude-code-config/skills/claude-memory/references/project-patterns.md +334 -0
  23. package/claude-code-config/skills/claude-memory/references/prompting-techniques.md +411 -0
  24. package/claude-code-config/skills/claude-memory/references/section-templates.md +347 -0
  25. package/claude-code-config/skills/create-slash-commands/SKILL.md +1110 -0
  26. package/claude-code-config/skills/create-slash-commands/references/arguments.md +273 -0
  27. package/claude-code-config/skills/create-slash-commands/references/patterns.md +947 -0
  28. package/claude-code-config/skills/create-slash-commands/references/prompt-examples.md +656 -0
  29. package/claude-code-config/skills/create-slash-commands/references/tool-restrictions.md +389 -0
  30. package/claude-code-config/skills/create-subagents/SKILL.md +425 -0
  31. package/claude-code-config/skills/create-subagents/references/context-management.md +567 -0
  32. package/claude-code-config/skills/create-subagents/references/debugging-agents.md +714 -0
  33. package/claude-code-config/skills/create-subagents/references/error-handling-and-recovery.md +502 -0
  34. package/claude-code-config/skills/create-subagents/references/evaluation-and-testing.md +374 -0
  35. package/claude-code-config/skills/create-subagents/references/orchestration-patterns.md +591 -0
  36. package/claude-code-config/skills/create-subagents/references/subagents.md +599 -0
  37. package/claude-code-config/skills/create-subagents/references/writing-subagent-prompts.md +513 -0
  38. package/dist/cli.js +20 -3
  39. package/package.json +1 -1
  40. package/claude-code-config/commands/apex.md +0 -109
  41. package/claude-code-config/commands/tasks/run-task.md +0 -220
  42. package/claude-code-config/commands/utils/watch-ci.md +0 -47
  43. package/claude-code-config/scripts/command-validator/biome.json +0 -29
  44. package/claude-code-config/scripts/command-validator/bun.lockb +0 -0
  45. package/claude-code-config/scripts/command-validator/package.json +0 -27
  46. package/claude-code-config/scripts/command-validator/vitest.config.ts +0 -7
  47. package/claude-code-config/scripts/hook-post-file.ts +0 -162
  48. package/claude-code-config/scripts/statusline/biome.json +0 -34
  49. package/claude-code-config/scripts/statusline/bun.lockb +0 -0
  50. package/claude-code-config/scripts/statusline/fixtures/test-input.json +0 -25
  51. package/claude-code-config/scripts/statusline/package.json +0 -19
  52. package/claude-code-config/scripts/statusline/statusline.config.ts +0 -25
  53. package/claude-code-config/scripts/statusline/test.ts +0 -20
  54. package/claude-code-config/scripts/validate-command.js +0 -712
  55. package/claude-code-config/scripts/validate-command.readme.md +0 -283
@@ -1,220 +0,0 @@
1
- ---
2
- allowed-tools: Bash(gh :*), Bash(git :*)
3
- argument-hint: <issue-number|issue-url|file-path>
4
- description: Execute GitHub issues or task files with full EPCT workflow and PR creation
5
- ---
6
-
7
- <objective>
8
- Execute #$ARGUMENTS using adaptive APEX workflow (Analyze → Plan → Execute → eXamine) with automatic PR creation.
9
-
10
- This command handles any task input: GitHub issues, file paths, or direct descriptions. It adapts complexity based on task size - lightweight for bug fixes, comprehensive for features. Optimized for CI/automated environments.
11
- </objective>
12
-
13
- <context>
14
- Current branch: !`git branch --show-current`
15
- Git status: !`git status --short`
16
- Recent commits: !`git log --oneline -5 2>/dev/null || echo "No commits yet"`
17
- </context>
18
-
19
- <process>
20
-
21
- ## 0. INITIALIZE
22
-
23
- **Parse input and setup environment:**
24
-
25
- 1. **Detect input type** from #$ARGUMENTS:
26
- - **Issue number** (e.g., `123`): Fetch with `gh issue view 123`
27
- - **Issue URL** (e.g., `https://github.com/.../issues/123`): Extract number, fetch with `gh issue view`
28
- - **File path** (e.g., `tasks/feature.md`): Read file content
29
- - **Direct description**: Use as-is
30
-
31
- 2. **For GitHub issues**:
32
- - Add processing label: `gh issue edit <number> --add-label "in-progress"`
33
- - Extract: title, description, labels, comments
34
-
35
- 3. **Assess task complexity** (determines workflow depth):
36
- - **Simple** (typo, config change, small fix): Skip to Execute phase
37
- - **Medium** (bug fix, small feature): Light exploration + execute
38
- - **Complex** (new feature, refactor): Full APEX workflow
39
-
40
- 4. **Setup branch**:
41
- - If on `main`/`master`: Create branch `git checkout -b feat/<task-slug>`
42
- - If on feature branch with uncommitted changes: Ask to continue or stash
43
- - If on feature branch with commits: Ask to continue or create new branch
44
-
45
- ## 1. ANALYZE (skip for simple tasks)
46
-
47
- **Goal**: Gather context efficiently
48
-
49
- - Launch **parallel** `explore-codebase` agents for:
50
- - Related files and patterns
51
- - Similar implementations to use as examples
52
- - Test file locations
53
- - Use `explore-docs` agent if external library knowledge needed
54
- - Use `websearch` agent only if truly necessary
55
-
56
- **Output**: Mental map of files to modify and patterns to follow
57
-
58
- ## 2. PLAN (skip for simple tasks)
59
-
60
- **Goal**: Define implementation strategy
61
-
62
- 1. Create concise implementation plan:
63
- - Files to modify/create
64
- - Key changes per file
65
- - Test approach
66
-
67
- 2. **For GitHub issues**: Post plan as comment
68
-
69
- ```
70
- gh issue comment <number> --body "## Implementation Plan
71
-
72
- - [ ] Change 1
73
- - [ ] Change 2
74
- - [ ] Tests
75
-
76
- Starting implementation..."
77
- ```
78
-
79
- 3. **If ambiguity exists**: Ask user ONE focused question, then proceed
80
-
81
- ## 3. EXECUTE
82
-
83
- **Goal**: Implement changes following codebase patterns
84
-
85
- 1. **Create TodoWrite** with specific tasks (1 per file change)
86
-
87
- 2. **For each change**:
88
- - Read target file first
89
- - Match existing code style exactly
90
- - Use clear names over comments
91
- - Stay strictly in scope
92
-
93
- 3. **Code quality rules**:
94
- - NO comments unless truly necessary
95
- - NO refactoring beyond task scope
96
- - NO extra features
97
- - Run formatters after changes
98
-
99
- ## 4. EXAMINE
100
-
101
- **Goal**: Validate implementation
102
-
103
- 1. **Check package.json** for available scripts
104
-
105
- 2. **Run validation** (in order, stop on failure):
106
-
107
- ```bash
108
- npm run format 2>/dev/null || true
109
- npm run lint
110
- npm run typecheck
111
- ```
112
-
113
- 3. **Run relevant tests only**:
114
- - Find test file for modified code
115
- - Run: `npm test -- --testPathPattern="<pattern>"` or equivalent
116
- - Don't run full suite unless necessary
117
-
118
- 4. **If validation fails**:
119
- - Fix errors immediately
120
- - Re-run validation
121
- - If stuck after 2 attempts: report blocker to user
122
-
123
- ## 5. FINALIZE (always execute)
124
-
125
- **Goal**: Create PR and update tracking
126
-
127
- 1. **Stage and commit**:
128
-
129
- ```bash
130
- git add -A
131
- git commit -m "<type>(<scope>): <description>
132
-
133
- <body if needed>
134
-
135
- Closes #<issue-number>"
136
- ```
137
-
138
- Commit types: `feat`, `fix`, `refactor`, `docs`, `test`, `chore`
139
-
140
- 2. **Push and create PR**:
141
-
142
- ```bash
143
- git push -u origin HEAD
144
- gh pr create --fill --body "## Summary
145
- <what was done>
146
-
147
- ## Changes
148
- - <change 1>
149
- - <change 2>
150
-
151
- ## Test Plan
152
- - [x] Lint passes
153
- - [x] Types pass
154
- - [x] Relevant tests pass
155
-
156
- Closes #<issue-number>"
157
- ```
158
-
159
- 3. **Update GitHub issue** (if applicable):
160
-
161
- ```bash
162
- gh issue comment <number> --body "✅ Implementation complete
163
-
164
- **PR**: <pr-url>
165
- **Changes**: <brief summary>
166
-
167
- Ready for review."
168
- ```
169
-
170
- 4. **Return PR URL** to user
171
-
172
- </process>
173
-
174
- <adaptive_behavior>
175
- **Task size detection heuristics:**
176
-
177
- | Signal | Likely Simple | Likely Complex |
178
- | ------------------ | ------------------------------- | -------------------------------------- |
179
- | Keywords | "typo", "rename", "update text" | "implement", "add feature", "refactor" |
180
- | Scope | Single file mentioned | Multiple components |
181
- | Issue labels | `bug`, `docs`, `chore` | `feature`, `enhancement` |
182
- | Description length | < 100 chars | > 500 chars |
183
-
184
- **Workflow adaptation:**
185
-
186
- - Simple: Initialize → Execute → Examine → Finalize
187
- - Medium: Initialize → Light Analyze → Execute → Examine → Finalize
188
- - Complex: Full workflow with all phases
189
- </adaptive_behavior>
190
-
191
- <error_handling>
192
- **Common blockers and responses:**
193
-
194
- - **Lint/type errors**: Fix immediately, max 3 attempts
195
- - **Test failures**: Debug, fix, document if unfixable
196
- - **Merge conflicts**: Report to user, don't auto-resolve
197
- - **Missing context**: Use explore agents, ask user if still unclear
198
- - **CI blocked**: Wait and retry once, then report
199
-
200
- **If blocked**: Report clearly what's blocking and what's needed
201
- </error_handling>
202
-
203
- <success_criteria>
204
-
205
- - Task requirements fully addressed
206
- - Code passes lint, typecheck, relevant tests
207
- - PR created with clear description
208
- - GitHub issue updated (if applicable)
209
- - PR URL returned to user
210
- </success_criteria>
211
-
212
- <execution_rules>
213
-
214
- - **ULTRA THINK** at phase transitions
215
- - **Parallel execution** for speed (agents, independent commands)
216
- - **Stay in scope** - implement exactly what's requested
217
- - **Always create PR** - even for small fixes
218
- - **Priority**: Correctness > Completeness > Speed
219
- - **Automated-friendly**: Minimize user prompts, proceed with sensible defaults
220
- </execution_rules>
@@ -1,47 +0,0 @@
1
- ---
2
- allowed-tools: Bash(gh :*), Bash(git :*), Bash(sleep :*)
3
- description: Monitor CI pipeline and automatically fix failures until green
4
- ---
5
-
6
- You are a CI monitoring specialist. Watch pipelines and fix failures automatically until all checks pass.
7
-
8
- ## Workflow
9
-
10
- 1. **WAIT**: `sleep 30` - Give GitHub Actions time to start
11
-
12
- 2. **FIND RUN**: Get latest workflow run
13
- - `gh run list --branch $(git branch --show-current) --limit 1`
14
- - Extract run ID from output
15
-
16
- 3. **MONITOR**: Watch run until completion
17
- - `gh run watch <run-id>` - Monitor in real-time
18
- - Check status with `gh run view <run-id>`
19
-
20
- 4. **ON FAILURE**: Fix and retry
21
- - **Analyze**: `gh run view <run-id> --log-failed` to get error logs
22
- - **Identify**: Parse errors to understand root cause
23
- - **Download**: `gh run download <run-id>` if artifacts needed
24
- - **Fix**: Make targeted code changes
25
- - **Commit**: Stage and push fixes with descriptive message
26
- - **Loop**: Return to step 1 (max 3 attempts)
27
-
28
- 5. **ON SUCCESS**: Report completion
29
- - Clean up any downloaded artifacts
30
- - Display final status: `gh run view <run-id>`
31
- - List all commits made during fixing
32
-
33
- ## Execution Rules
34
-
35
- - **STAY IN SCOPE**: Only fix CI-related errors
36
- - Max 3 fix attempts before requesting help
37
- - Commit messages must describe the CI fix
38
- - Always verify fix worked before moving on
39
- - Clean up artifacts after completion
40
-
41
- ## Priority
42
-
43
- Fix accuracy > Speed > Minimal commits. Ensure CI is truly green.
44
-
45
- ---
46
-
47
- User: #$ARGUMENTS
@@ -1,29 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/2.3.4/schema.json",
3
- "vcs": {
4
- "enabled": false,
5
- "clientKind": "git",
6
- "useIgnoreFile": false
7
- },
8
- "files": {
9
- "ignoreUnknown": false
10
- },
11
- "formatter": {
12
- "enabled": true,
13
- "indentStyle": "tab"
14
- },
15
- "linter": {
16
- "enabled": true,
17
- "rules": {
18
- "recommended": true,
19
- "suspicious": {
20
- "noControlCharactersInRegex": "off"
21
- }
22
- }
23
- },
24
- "javascript": {
25
- "formatter": {
26
- "quoteStyle": "double"
27
- }
28
- }
29
- }
@@ -1,27 +0,0 @@
1
- {
2
- "name": "command-validator",
3
- "version": "1.0.0",
4
- "type": "module",
5
- "exports": {
6
- ".": "./src/lib/validator.ts",
7
- "./types": "./src/lib/types.ts",
8
- "./security-rules": "./src/lib/security-rules.ts"
9
- },
10
- "bin": {
11
- "validate-command": "./src/cli.ts"
12
- },
13
- "scripts": {
14
- "test": "vitest",
15
- "test:ui": "vitest --ui",
16
- "lint": "biome check --write .",
17
- "format": "biome format --write ."
18
- },
19
- "devDependencies": {
20
- "@biomejs/biome": "^2.3.2",
21
- "@types/bun": "latest",
22
- "vitest": "^2.1.8"
23
- },
24
- "peerDependencies": {
25
- "typescript": "^5.0.0"
26
- }
27
- }
@@ -1,7 +0,0 @@
1
- import { defineConfig } from "vitest/config";
2
-
3
- export default defineConfig({
4
- test: {
5
- globals: true,
6
- },
7
- });
@@ -1,162 +0,0 @@
1
- #!/usr/bin/env bun
2
- // @ts-nocheck
3
-
4
- interface HookInput {
5
- session_id: string;
6
- transcript_path: string;
7
- cwd: string;
8
- hook_event_name: string;
9
- tool_name: string;
10
- tool_input: {
11
- file_path: string;
12
- content: string;
13
- };
14
- tool_response: {
15
- filePath: string;
16
- success: boolean;
17
- };
18
- }
19
-
20
- interface HookOutput {
21
- hookSpecificOutput: {
22
- hookEventName: string;
23
- additionalContext: string;
24
- };
25
- }
26
-
27
- // Check for debug mode
28
- const DEBUG = process.argv.includes("--debug");
29
-
30
- function log(message: string, ...args: unknown[]) {
31
- if (DEBUG) {
32
- console.log(message, ...args);
33
- }
34
- }
35
-
36
- async function runCommand(
37
- command: string[],
38
- ): Promise<{ stdout: string; stderr: string; success: boolean }> {
39
- try {
40
- const proc = Bun.spawn(command, {
41
- stdout: "pipe",
42
- stderr: "pipe",
43
- });
44
-
45
- const stdout = await new Response(proc.stdout).text();
46
- const stderr = await new Response(proc.stderr).text();
47
- const success = (await proc.exited) === 0;
48
-
49
- return { stdout, stderr, success };
50
- } catch (error) {
51
- return { stdout: "", stderr: String(error), success: false };
52
- }
53
- }
54
-
55
- async function main() {
56
- log("Hook started for file processing");
57
-
58
- // Lire l'input JSON depuis stdin
59
- const input = await Bun.stdin.text();
60
- log("Input received, length:", input.length);
61
-
62
- let hookData: HookInput;
63
- try {
64
- hookData = JSON.parse(input);
65
- } catch (error) {
66
- log("Error parsing JSON input:", error);
67
- process.exit(0);
68
- }
69
-
70
- const filePath = hookData.tool_input?.file_path;
71
- if (!filePath) {
72
- log("Unable to extract file path from input");
73
- process.exit(0);
74
- }
75
-
76
- // Vérifier que c'est un fichier .ts ou .tsx uniquement
77
- if (!filePath.endsWith(".ts") && !filePath.endsWith(".tsx")) {
78
- log(`Skipping ${filePath}: not a TypeScript file`);
79
- process.exit(0);
80
- }
81
-
82
- log("Processing file:", filePath);
83
-
84
- // Vérifier que le fichier existe
85
- const file = Bun.file(filePath);
86
- if (!(await file.exists())) {
87
- log("File not found:", filePath);
88
- process.exit(1);
89
- }
90
-
91
- // 1. Exécuter Prettier
92
- log("Running Prettier formatting");
93
- const prettierResult = await runCommand([
94
- "bun",
95
- "x",
96
- "prettier",
97
- "--write",
98
- filePath,
99
- ]);
100
- if (!prettierResult.success) {
101
- log("Prettier failed:", prettierResult.stderr);
102
- }
103
-
104
- // 2. ESLint --fix
105
- log("Running ESLint --fix");
106
- await runCommand(["bun", "x", "eslint", "--fix", filePath]);
107
-
108
- // 3. Run ESLint check and TypeScript check in parallel
109
- log("Running ESLint and TypeScript checks in parallel");
110
- const [eslintCheckResult, tscResult] = await Promise.all([
111
- runCommand(["bun", "x", "eslint", filePath]),
112
- runCommand(["bun", "x", "tsc", "--noEmit", "--pretty", "false"]),
113
- ]);
114
-
115
- const eslintErrors = (
116
- eslintCheckResult.stdout + eslintCheckResult.stderr
117
- ).trim();
118
-
119
- const tsErrors = tscResult.stderr
120
- .split("\n")
121
- .filter((line) => line.includes(filePath))
122
- .join("\n");
123
-
124
- // Construire le message d'erreurs
125
- let errorMessage = "";
126
-
127
- if (tsErrors || eslintErrors) {
128
- errorMessage = `Fix NOW the following errors AND warning detected in ${filePath
129
- .split("/")
130
- .pop()}:\\n`;
131
-
132
- if (tsErrors) {
133
- errorMessage += `\\n TypeScript errors:\\n${tsErrors}\\n`;
134
- }
135
-
136
- if (eslintErrors) {
137
- errorMessage += `\\n ESLint errors:\\n${eslintErrors}\\n`;
138
- }
139
- }
140
-
141
- log("Error message", errorMessage);
142
-
143
- // Sortir le résultat
144
- if (errorMessage) {
145
- const output: HookOutput = {
146
- hookSpecificOutput: {
147
- hookEventName: "PostToolUse",
148
- additionalContext: errorMessage,
149
- },
150
- };
151
-
152
- log("Output", JSON.stringify(output, null, 2));
153
- console.log(JSON.stringify(output, null, 2));
154
- } else {
155
- console.error(`No errors detected in ${filePath.split("/").pop()}`);
156
- }
157
- }
158
-
159
- main().catch((error) => {
160
- log("Error in hook:", error);
161
- process.exit(1);
162
- });
@@ -1,34 +0,0 @@
1
- {
2
- "$schema": "https://biomejs.dev/schemas/2.3.2/schema.json",
3
- "vcs": {
4
- "enabled": true,
5
- "clientKind": "git",
6
- "useIgnoreFile": true
7
- },
8
- "files": {
9
- "ignoreUnknown": false
10
- },
11
- "formatter": {
12
- "enabled": true,
13
- "indentStyle": "tab"
14
- },
15
- "linter": {
16
- "enabled": true,
17
- "rules": {
18
- "recommended": true
19
- }
20
- },
21
- "javascript": {
22
- "formatter": {
23
- "quoteStyle": "double"
24
- }
25
- },
26
- "assist": {
27
- "enabled": true,
28
- "actions": {
29
- "source": {
30
- "organizeImports": "on"
31
- }
32
- }
33
- }
34
- }
@@ -1,25 +0,0 @@
1
- {
2
- "session_id": "06a7b019-03f8-4083-a9db-410d95cb01e6",
3
- "transcript_path": "/Users/melvynx/.claude/projects/-Users-melvynx--claude/06a7b019-03f8-4083-a9db-410d95cb01e6.jsonl",
4
- "cwd": "/Users/melvynx/.claude",
5
- "model": {
6
- "id": "claude-sonnet-4-5-20250929",
7
- "display_name": "Sonnet 4.5"
8
- },
9
- "workspace": {
10
- "current_dir": "/Users/melvynx/.claude",
11
- "project_dir": "/Users/melvynx/.claude"
12
- },
13
- "version": "2.0.31",
14
- "output_style": {
15
- "name": "default"
16
- },
17
- "cost": {
18
- "total_cost_usd": 0.17468000000000003,
19
- "total_duration_ms": 385160,
20
- "total_api_duration_ms": 252694,
21
- "total_lines_added": 185,
22
- "total_lines_removed": 75
23
- },
24
- "exceeds_200k_tokens": false
25
- }
@@ -1,19 +0,0 @@
1
- {
2
- "name": "statusline",
3
- "version": "2.0.0",
4
- "module": "src/index.ts",
5
- "type": "module",
6
- "scripts": {
7
- "start": "bun run src/index.ts",
8
- "test": "bun run test.ts",
9
- "lint": "biome check --write .",
10
- "format": "biome format --write ."
11
- },
12
- "devDependencies": {
13
- "@biomejs/biome": "^2.3.2",
14
- "@types/bun": "latest"
15
- },
16
- "peerDependencies": {
17
- "typescript": "^5.0.0"
18
- }
19
- }
@@ -1,25 +0,0 @@
1
- export interface StatuslineConfig {
2
- oneLine: boolean;
3
- pathDisplayMode: "full";
4
- separator: "•";
5
- session: {
6
- showTokens: boolean;
7
- showPercentage: boolean;
8
- };
9
- context: {
10
- maxContextTokens: 200000;
11
- };
12
- }
13
-
14
- export const defaultConfig: StatuslineConfig = {
15
- oneLine: true,
16
- pathDisplayMode: "full",
17
- separator: "•",
18
- session: {
19
- showTokens: true,
20
- showPercentage: true,
21
- },
22
- context: {
23
- maxContextTokens: 200000,
24
- },
25
- };
@@ -1,20 +0,0 @@
1
- #!/usr/bin/env bun
2
-
3
- import { join } from "node:path";
4
- import { $ } from "bun";
5
-
6
- const fixtureFile = process.argv[2] || "fixtures/test-input.json";
7
- const fixtureFullPath = join(import.meta.dir, fixtureFile);
8
-
9
- console.log(`\n📝 Testing with fixture: ${fixtureFile}\n`);
10
-
11
- try {
12
- const content = await Bun.file(fixtureFullPath).text();
13
- const result = await $`echo ${content} | bun run src/index.ts`.text();
14
-
15
- console.log(result);
16
- console.log("\n✅ Test completed successfully!\n");
17
- } catch (error) {
18
- console.error("❌ Test failed:", error);
19
- process.exit(1);
20
- }