pumuki-ast-hooks 6.1.10 → 6.1.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.
package/README.md CHANGED
@@ -13,7 +13,7 @@ Portable, project‑agnostic, multi‑platform enterprise framework to govern AI
13
13
 
14
14
  ---
15
15
 
16
- ## Quick Start (30–60s)
16
+ ## Quick start (30–60s)
17
17
 
18
18
  ```bash
19
19
  git init
@@ -22,9 +22,9 @@ npx ast-install
22
22
  npx ast-hooks audit
23
23
  ```
24
24
 
25
- Default installation mode is `npm-runtime`.
25
+ Default installation mode: `npm-runtime`.
26
26
 
27
- To opt into an embedded runtime copy (`vendored` mode):
27
+ To use the embedded runtime (`vendored` mode):
28
28
 
29
29
  ```bash
30
30
  HOOK_INSTALL_MODE=vendored npx ast-install
@@ -360,30 +360,33 @@ The Git Flow cycle includes branch validation, commits, push, PR, merge (by poli
360
360
 
361
361
  ---
362
362
 
363
- ## 9. Commands Section (MANDATORY – DO NOT CHANGE)
363
+ ## 9. Commands (required)
364
364
 
365
- ### Install (dev)
365
+ ### Installation (dev)
366
366
 
367
367
  ```bash
368
368
  npm install --save-dev pumuki-ast-hooks
369
+ npx ast-install
369
370
  ```
370
371
 
371
- ### Legacy install
372
+ ### Installation (legacy)
372
373
 
373
374
  ```bash
374
375
  npm install --save-dev pumuki-ast-hooks
376
+ npx ast-install
375
377
  ```
376
378
 
377
379
  ### Update
378
380
 
379
381
  ```bash
380
382
  npm install --save-dev pumuki-ast-hooks@latest
381
- npm run install-hooks
383
+ npx ast-install
382
384
  ```
383
385
 
384
386
  ### Uninstall
385
387
 
386
388
  ```bash
389
+ npx ast-uninstall
387
390
  npm uninstall pumuki-ast-hooks
388
391
  ```
389
392
 
@@ -393,7 +396,7 @@ npm uninstall pumuki-ast-hooks
393
396
  npm run install-hooks
394
397
  ```
395
398
 
396
- ### Run interactive menu
399
+ ### Interactive menu
397
400
 
398
401
  ```bash
399
402
  npx ast-hooks
@@ -411,7 +414,7 @@ npm run ast:check-version
411
414
  npm run audit
412
415
  ```
413
416
 
414
- ### Git flow
417
+ ### Git Flow
415
418
 
416
419
  ```bash
417
420
  npm run ast:gitflow
@@ -626,7 +626,7 @@ To update:
626
626
  npm install --save-dev pumuki-ast-hooks@latest
627
627
 
628
628
  2. Re-install hooks (to get latest features):
629
- npm run install-hooks
629
+ npx ast-install
630
630
 
631
631
  What's new in 5.3.1:
632
632
  Check CHANGELOG.md: https://github.com/...
@@ -651,7 +651,7 @@ npm install --save-dev pumuki-ast-hooks@5.3.1
651
651
  **⚠️ IMPORTANT:** After updating, you MUST re-run the installer to get the latest hooks and configurations:
652
652
 
653
653
  ```bash
654
- npm run install-hooks
654
+ npx ast-install
655
655
  ```
656
656
 
657
657
  This ensures:
@@ -745,6 +745,7 @@ npm view pumuki-ast-hooks version
745
745
 
746
746
  ```bash
747
747
  # Uninstall
748
+ npx ast-uninstall
748
749
  npm uninstall pumuki-ast-hooks
749
750
 
750
751
  # Remove hooks (optional)
@@ -0,0 +1,16 @@
1
+ const fs = require('fs');
2
+ const path = require('path');
3
+
4
+ describe('pre-tool-use-evidence-validator', () => {
5
+ const filePath = path.join(__dirname, '..', 'pre-tool-use-evidence-validator.ts');
6
+
7
+ it('should exist', () => {
8
+ expect(fs.existsSync(filePath)).toBe(true);
9
+ });
10
+
11
+ it('should include auto-refresh execution of update-evidence', () => {
12
+ const content = fs.readFileSync(filePath, 'utf8');
13
+ expect(content).toMatch(/update-evidence\.sh/);
14
+ expect(content).toMatch(/--auto/);
15
+ });
16
+ });
@@ -1,6 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import { readFileSync, existsSync } from 'fs';
3
3
  import { join } from 'path';
4
+ import { execSync } from 'child_process';
4
5
  import { sendMacOSNotification } from './notify-macos.js';
5
6
 
6
7
  interface ToolInput {
@@ -34,6 +35,8 @@ interface Violation {
34
35
 
35
36
  const MAX_AGE_SECONDS = 180;
36
37
 
38
+ type ValidationResult = { valid: boolean; code?: string; error?: string };
39
+
37
40
  function utcToEpoch(timestamp: string): number {
38
41
  try {
39
42
  return Math.floor(new Date(timestamp).getTime() / 1000);
@@ -42,10 +45,11 @@ function utcToEpoch(timestamp: string): number {
42
45
  }
43
46
  }
44
47
 
45
- function validateEvidence(evidencePath: string): { valid: boolean; error?: string } {
48
+ function validateEvidence(evidencePath: string): ValidationResult {
46
49
  if (!existsSync(evidencePath)) {
47
50
  return {
48
51
  valid: false,
52
+ code: 'missing',
49
53
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Missing
50
54
 
51
55
  📋 VIOLATION:
@@ -69,6 +73,7 @@ This is enforced by pre-commit hooks and PreToolUse validation`
69
73
  } catch {
70
74
  return {
71
75
  valid: false,
76
+ code: 'invalid_json',
72
77
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Invalid JSON
73
78
 
74
79
  📋 VIOLATION:
@@ -86,6 +91,7 @@ This is enforced by pre-commit hooks and PreToolUse validation`
86
91
  if (!timestamp || typeof timestamp !== 'string') {
87
92
  return {
88
93
  valid: false,
94
+ code: 'missing_timestamp',
89
95
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Missing Timestamp
90
96
 
91
97
  📋 VIOLATION:
@@ -102,6 +108,7 @@ This is enforced by pre-commit hooks and PreToolUse validation`
102
108
  if (evidenceEpoch === 0) {
103
109
  return {
104
110
  valid: false,
111
+ code: 'invalid_timestamp',
105
112
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Invalid Timestamp Format
106
113
 
107
114
  📋 VIOLATION:
@@ -119,6 +126,7 @@ This is enforced by pre-commit hooks and PreToolUse validation`
119
126
  if (ageSeconds > MAX_AGE_SECONDS) {
120
127
  return {
121
128
  valid: false,
129
+ code: 'stale',
122
130
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Too Old
123
131
 
124
132
  📋 VIOLATION:
@@ -139,6 +147,7 @@ Evidence must be fresh to ensure rules were read and questions answered`
139
147
  if (!rulesRead || (Array.isArray(rulesRead) && rulesRead.length === 0)) {
140
148
  return {
141
149
  valid: false,
150
+ code: 'missing_rules',
142
151
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Missing Rules Read
143
152
 
144
153
  📋 VIOLATION:
@@ -155,6 +164,7 @@ Evidence must be fresh to ensure rules were read and questions answered`
155
164
  if (questionsAnswered !== true) {
156
165
  return {
157
166
  valid: false,
167
+ code: 'questions_unanswered',
158
168
  error: `⚠️ BLOCKED - .AI_EVIDENCE.json Protocol Questions Not Answered
159
169
 
160
170
  📋 VIOLATION:
@@ -181,6 +191,7 @@ Evidence must be fresh to ensure rules were read and questions answered`
181
191
 
182
192
  return {
183
193
  valid: false,
194
+ code: 'gate_blocked',
184
195
  error: `🚫 BLOCKED - AI Gate Status: BLOCKED
185
196
 
186
197
  📋 VIOLATION:
@@ -205,6 +216,45 @@ This ensures code quality standards are maintained`
205
216
  return { valid: true };
206
217
  }
207
218
 
219
+ function resolveUpdateEvidenceScript(projectDir: string): string | null {
220
+ const candidates = [
221
+ join(projectDir, 'scripts', 'hooks-system', 'bin', 'update-evidence.sh'),
222
+ join(projectDir, 'node_modules', 'pumuki-ast-hooks', 'scripts', 'hooks-system', 'bin', 'update-evidence.sh'),
223
+ join(projectDir, 'node_modules', 'pumuki-ast-hooks', 'bin', 'update-evidence.sh'),
224
+ join(projectDir, 'bin', 'update-evidence.sh')
225
+ ];
226
+
227
+ for (const candidate of candidates) {
228
+ if (existsSync(candidate)) {
229
+ return candidate;
230
+ }
231
+ }
232
+
233
+ return null;
234
+ }
235
+
236
+ function autoRefreshEvidence(projectDir: string): boolean {
237
+ const flag = String(process.env.AI_START_AUTO_REFRESH || '').trim().toLowerCase();
238
+ if (flag === '0' || flag === 'false' || flag === 'no') {
239
+ return false;
240
+ }
241
+
242
+ const scriptPath = resolveUpdateEvidenceScript(projectDir);
243
+ if (!scriptPath) {
244
+ return false;
245
+ }
246
+
247
+ try {
248
+ execSync(`bash "${scriptPath}" --auto`, {
249
+ cwd: projectDir,
250
+ stdio: 'ignore'
251
+ });
252
+ return true;
253
+ } catch {
254
+ return false;
255
+ }
256
+ }
257
+
208
258
  async function readStdin(): Promise<string> {
209
259
  return new Promise((resolve) => {
210
260
  let data = '';
@@ -225,7 +275,12 @@ async function main() {
225
275
  const projectDir = process.env.CLAUDE_PROJECT_DIR || process.cwd();
226
276
  const evidencePath = join(projectDir, '.AI_EVIDENCE.json');
227
277
 
228
- const validation = validateEvidence(evidencePath);
278
+ let validation = validateEvidence(evidencePath);
279
+ if (!validation.valid && validation.code !== 'gate_blocked') {
280
+ if (autoRefreshEvidence(projectDir)) {
281
+ validation = validateEvidence(evidencePath);
282
+ }
283
+ }
229
284
  if (!validation.valid) {
230
285
  try {
231
286
  sendMacOSNotification({
package/package.json CHANGED
@@ -1,25 +1,25 @@
1
1
  {
2
2
  "name": "pumuki-ast-hooks",
3
- "version": "6.1.10",
3
+ "version": "6.1.13",
4
4
  "description": "Enterprise-grade AST Intelligence System with multi-platform support (iOS, Android, Backend, Frontend) and Feature-First + DDD + Clean Architecture enforcement. Includes dynamic violations API for intelligent querying.",
5
5
  "main": "index.js",
6
6
  "bin": {
7
- "pumuki-ast-hooks": "./bin/pumuki-mcp-server.js",
8
- "audit": "./bin/audit",
9
- "ast-hooks": "./bin/cli.js",
10
- "ast-install": "./bin/install.js",
11
- "ast-uninstall": "./bin/uninstall.js",
12
- "ast-violations": "./bin/violations-api.js",
13
- "ast-check-version": "./bin/check-version.js",
14
- "ast-gitflow": "./scripts/hooks-system/bin/gitflow-cycle.js",
15
- "ai-commit": "./bin/ai-commit.sh",
16
- "hook-run-orchestrator": "./bin/run-orchestrator.js",
17
- "hook-watch": "./bin/watch-hooks.js",
18
- "hook-status": "./bin/hook-status.js",
19
- "hook-predict": "./bin/predictive-hooks.js",
20
- "hook-playbook": "./bin/run-playbook.js",
21
- "hook-doc-drift": "./bin/check-doc-drift.js",
22
- "hook-plan-review": "./bin/plan-review.js"
7
+ "pumuki-ast-hooks": "bin/pumuki-mcp-server.js",
8
+ "audit": "bin/audit",
9
+ "ast-hooks": "bin/cli.js",
10
+ "ast-install": "bin/install.js",
11
+ "ast-uninstall": "bin/uninstall.js",
12
+ "ast-violations": "bin/violations-api.js",
13
+ "ast-check-version": "bin/check-version.js",
14
+ "ast-gitflow": "scripts/hooks-system/bin/gitflow-cycle.js",
15
+ "ai-commit": "bin/ai-commit.sh",
16
+ "hook-run-orchestrator": "bin/run-orchestrator.js",
17
+ "hook-watch": "bin/watch-hooks.js",
18
+ "hook-status": "bin/hook-status.js",
19
+ "hook-predict": "bin/predictive-hooks.js",
20
+ "hook-playbook": "bin/run-playbook.js",
21
+ "hook-doc-drift": "bin/check-doc-drift.js",
22
+ "hook-plan-review": "bin/plan-review.js"
23
23
  },
24
24
  "scripts": {
25
25
  "install-hooks": "node bin/install.js",
@@ -81,7 +81,7 @@
81
81
  "license": "MIT",
82
82
  "repository": {
83
83
  "type": "git",
84
- "url": "https://github.com/SwiftEnProfundidad/ast-intelligence-hooks.git"
84
+ "url": "git+https://github.com/SwiftEnProfundidad/ast-intelligence-hooks.git"
85
85
  },
86
86
  "bugs": {
87
87
  "url": "https://github.com/SwiftEnProfundidad/ast-intelligence-hooks/issues"
@@ -136,4 +136,4 @@
136
136
  "./skills": "./skills/skill-rules.json",
137
137
  "./hooks": "./hooks/index.js"
138
138
  }
139
- }
139
+ }
@@ -41,3 +41,10 @@
41
41
  {"timestamp":"2026-01-15T07:49:00.777Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
42
42
  {"timestamp":"2026-01-15T09:57:40.478Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
43
43
  {"timestamp":"2026-01-15T14:53:23.342Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
44
+ {"timestamp":"2026-01-21T12:12:12.268Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
45
+ {"timestamp":"2026-01-21T13:01:11.530Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
46
+ {"timestamp":"2026-01-21T13:16:57.700Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
47
+ {"timestamp":"2026-01-21T14:08:08.597Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
48
+ {"timestamp":"2026-01-21T14:14:43.580Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
49
+ {"timestamp":"2026-01-21T14:19:14.000Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
50
+ {"timestamp":"2026-01-21T14:43:15.797Z","level":"info","component":"AutoRecovery","event":"NotificationCenterService shutdown","data":{"totalEnqueued":0,"totalSent":0,"totalDeduplicated":0,"totalCooldownSkipped":0,"totalFailed":0,"totalRetries":0,"queueSize":0,"deduplication":{"size":0},"cooldowns":{"activeCooldowns":0}},"context":{}}
@@ -174,3 +174,31 @@
174
174
  {"timestamp":"2026-01-15T14:53:23.414Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
175
175
  {"timestamp":"2026-01-15T14:53:23.415Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
176
176
  {"timestamp":"2026-01-15T14:53:23.415Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
177
+ {"timestamp":"2026-01-21T12:12:11.691Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
178
+ {"timestamp":"2026-01-21T12:12:11.709Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
179
+ {"timestamp":"2026-01-21T12:12:11.710Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
180
+ {"timestamp":"2026-01-21T12:12:11.710Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
181
+ {"timestamp":"2026-01-21T13:01:11.637Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
182
+ {"timestamp":"2026-01-21T13:01:11.652Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
183
+ {"timestamp":"2026-01-21T13:01:11.652Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
184
+ {"timestamp":"2026-01-21T13:01:11.653Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
185
+ {"timestamp":"2026-01-21T13:16:58.626Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
186
+ {"timestamp":"2026-01-21T13:16:58.641Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
187
+ {"timestamp":"2026-01-21T13:16:58.642Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
188
+ {"timestamp":"2026-01-21T13:16:58.642Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
189
+ {"timestamp":"2026-01-21T14:08:09.347Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
190
+ {"timestamp":"2026-01-21T14:08:09.372Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
191
+ {"timestamp":"2026-01-21T14:08:09.374Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
192
+ {"timestamp":"2026-01-21T14:08:09.374Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
193
+ {"timestamp":"2026-01-21T14:14:44.270Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
194
+ {"timestamp":"2026-01-21T14:14:44.277Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
195
+ {"timestamp":"2026-01-21T14:14:44.277Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
196
+ {"timestamp":"2026-01-21T14:14:44.277Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
197
+ {"timestamp":"2026-01-21T14:19:14.062Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
198
+ {"timestamp":"2026-01-21T14:19:14.069Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
199
+ {"timestamp":"2026-01-21T14:19:14.070Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
200
+ {"timestamp":"2026-01-21T14:19:14.070Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}
201
+ {"timestamp":"2026-01-21T14:43:15.954Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_START","data":{"repoRoot":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system"},"context":{}}
202
+ {"timestamp":"2026-01-21T14:43:15.961Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_CONFIG_EXISTS","data":{"configPath":"/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.hook-system/config.json"},"context":{}}
203
+ {"timestamp":"2026-01-21T14:43:15.961Z","level":"error","component":"InstallWizard","event":"INSTALL_WIZARD_SYMLINK_FAILED","data":{"error":"EEXIST: file already exists, symlink '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/scripts/hooks-system/bin/guard-supervisor.js' -> '/Users/juancarlosmerlosalbarracin/Developer/Projects/ast-intelligence-hooks/scripts/hooks-system/.git/hooks/guard-supervisor'"},"context":{}}
204
+ {"timestamp":"2026-01-21T14:43:15.961Z","level":"info","component":"InstallWizard","event":"INSTALL_WIZARD_COMPLETED","data":{},"context":{}}