gl-life-claude-zen 1.0.2 → 1.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/CHANGELOG.md +213 -0
  2. package/README.md +165 -0
  3. package/dist/hooks/auto-format.js +1 -1
  4. package/dist/hooks/complete-task.js +1 -1
  5. package/dist/hooks/enforce-migration-workflow.js +1 -1
  6. package/dist/hooks/enforce-structured-development.js +1 -1
  7. package/dist/hooks/enforce-test-pyramid.js +1 -1
  8. package/dist/hooks/init-task-tracker.js +1 -1
  9. package/dist/hooks/start-task.js +1 -1
  10. package/dist/hooks/task-status.js +1 -1
  11. package/dist/hooks/validate-database-changes.js +1 -1
  12. package/dist/hooks/validate-e2e-coverage.js +1 -1
  13. package/dist/hooks/validate-git-workflow.js +1 -1
  14. package/dist/hooks/validate-integration-site.js +2 -0
  15. package/dist/hooks/validate-migration-impact.js +1 -1
  16. package/dist/hooks/validate-task-completion.js +1 -1
  17. package/dist/hooks/validate-test-quality.js +1 -1
  18. package/dist/hooks/validate-test-results.js +1 -1
  19. package/dist/hooks/validate-ui-integration.js +1 -1
  20. package/dist/scripts/help.js +1 -1
  21. package/dist/scripts/plan-amend.js +1 -1
  22. package/dist/scripts/plan-create.js +1 -1
  23. package/dist/scripts/plan-help.js +1 -1
  24. package/dist/scripts/plan-init.js +1 -1
  25. package/dist/scripts/plan-manager.js +1 -1
  26. package/dist/scripts/setup-git-hooks.js +1 -1
  27. package/dist/scripts/task-done.js +1 -1
  28. package/dist/scripts/task-merge.js +1 -1
  29. package/dist/scripts/task-next.js +1 -1
  30. package/dist/scripts/task-start.js +1 -1
  31. package/dist/scripts/task-status.js +1 -1
  32. package/lib/init.js +9 -1
  33. package/package.json +6 -2
  34. package/templates/.claude/CLAUDE.md +196 -0
  35. package/templates/.claude/settings.json +40 -0
  36. package/templates/test-site/README.md +271 -0
  37. package/templates/test-site/index.html +13 -0
  38. package/templates/test-site/package.json +25 -0
  39. package/templates/test-site/server.js +125 -0
  40. package/templates/test-site/src/App.css +130 -0
  41. package/templates/test-site/src/App.jsx +78 -0
  42. package/templates/test-site/src/index.css +39 -0
  43. package/templates/test-site/src/main.jsx +10 -0
  44. package/templates/test-site/vite.config.js +12 -0
package/CHANGELOG.md CHANGED
@@ -57,6 +57,217 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
57
57
  - Git integration optional
58
58
  - Cross-platform support (Windows, macOS, Linux)
59
59
 
60
+ ## [1.1.0] - 2025-12-19
61
+
62
+ ### Added
63
+ - **Strict UI Testing Enforcement** with configurable requirements
64
+ - Global `strictMode` toggle (true = blocks, false = warnings only)
65
+ - Per-requirement configuration for props, events, API mocking, state, forms, conditionals
66
+ - Hard requirements (test file, import, render) always enforced
67
+ - Integration test website requirement for stakeholder validation
68
+ - **New Hook: `validate-integration-site.js`**
69
+ - Validates integration test website exists when UI components are modified
70
+ - Checks for package.json, dev script, and component imports
71
+ - Configurable via `testing.ui.integrationSiteDir` setting
72
+ - **Integration Test Website Template** (`test-site/`)
73
+ - Vite + React development environment
74
+ - Dev server with hot reload (`npm run dev`)
75
+ - Production build system (`npm run build`)
76
+ - GitHub Pages deployment (`npm run deploy`)
77
+ - Comprehensive README with migration guides for Vue/Svelte/Angular
78
+ - 9 template files included (.gitignore, index.html, package.json, README, vite.config.js, App.jsx, App.css, index.css, main.jsx)
79
+ - **Configuration System** for UI testing
80
+ - `testing.ui.strictMode` - Global enforcement toggle
81
+ - `testing.ui.requireTestFile` - Require test file exists (hard requirement)
82
+ - `testing.ui.requireImport` - Require test imports component (hard requirement)
83
+ - `testing.ui.requireRender` - Require test renders component (hard requirement)
84
+ - `testing.ui.requireProps` - Require test provides required props
85
+ - `testing.ui.requireEventTests` - Require event simulation tests
86
+ - `testing.ui.requireApiMocking` - Require API call mocking
87
+ - `testing.ui.requireStateTests` - Require state validation tests
88
+ - `testing.ui.requireFormTests` - Require form submission tests
89
+ - `testing.ui.requireConditionalTests` - Require conditional branch coverage
90
+ - `testing.ui.requireIntegrationSite` - Require integration test website
91
+ - `testing.ui.integrationSiteDir` - Custom test site directory (default: "test-site")
92
+ - `testing.ui.conditionalThreshold` - Minimum conditionals before validation (default: 3)
93
+ - **Updated Documentation**
94
+ - README.md: Added "UI Testing Configuration" section with examples
95
+ - CLAUDE.md template: Added "Integration Test Website" section (195 lines)
96
+ - Deployment guides for GitHub Pages, Netlify, Vercel
97
+ - Best practices for component integration testing
98
+
99
+ ### Changed
100
+ - **validate-ui-integration.js** hook now supports configuration
101
+ - Reads settings from `.claude/settings.json`
102
+ - Falls back to strict defaults if no config found
103
+ - Uses `shouldBlock()` helper to determine error vs warning
104
+ - All 6 configurable validations updated to respect settings
105
+
106
+ ### Fixed
107
+ - Shebang duplication issue resolved in bundling process
108
+ - esbuild config now strips existing shebangs before bundling
109
+ - Single `#!/usr/bin/env node` preserved on all hooks
110
+
111
+ ### Technical Details
112
+ - Total hooks bundled: 17 (16 enforcement + 1 new integration-site)
113
+ - validate-ui-integration.js: 14,291 bytes (includes config system)
114
+ - validate-integration-site.js: 12,848 bytes (new hook)
115
+ - test-site template: 9 files, production-ready
116
+ - Backward compatible: Existing projects work without configuration changes
117
+
118
+ ## [1.2.0] - 2025-12-20
119
+
120
+ ### Added
121
+ - **UI Verification System** - Automated multi-stage validation for UI components
122
+ - **Syntax Validation Hook** (`validate-ui-syntax.js`) - TypeScript/JSX compilation and import resolution
123
+ - Validates TypeScript compilation with `tsc --noEmit`
124
+ - Checks import resolution (local files and npm packages)
125
+ - Detects missing dependencies in package.json
126
+ - Supports .tsx, .jsx, .vue, .svelte files
127
+ - **Runtime Validation Hook** (`validate-ui-runtime.js`) - Browser-based error detection
128
+ - Uses Playwright for headless browser testing
129
+ - Captures console errors, runtime exceptions, React errors
130
+ - Auto-starts dev server on allocated port
131
+ - Graceful cleanup with port release
132
+ - **Visual Validation Hook** (`validate-ui-visual.js`) - AI-powered appearance analysis
133
+ - Claude Vision API integration for screenshot analysis
134
+ - Detects broken layouts, missing elements, CSS issues
135
+ - Uses component contracts for visual expectations
136
+ - Saves screenshots to `.claude/screenshots/`
137
+ - **Contract Validation Hook** (`validate-component-contract.js`) - Contract compliance checking
138
+ - Validates required props, events, state, DOM structure
139
+ - Loads `.contract.json` files alongside components
140
+ - Errors for missing props/events/DOM, warnings for missing state
141
+ - Supports hierarchical contract schemas
142
+
143
+ - **Port Management System** - Fixed port allocation with auto-cleanup
144
+ - **PortManager Utility** (`utils/port-manager.js`) - Cross-platform port management
145
+ - Fixed port ranges: Vite (3000-3009), UI validation (3010-3019), Custom (3020-3029)
146
+ - Auto-cleanup kills stale processes before allocation
147
+ - Graceful shutdown (SIGTERM) with force kill fallback (SIGKILL)
148
+ - Configuration persistence in `.claude/port-config.json`
149
+ - Cross-platform support (Windows: netstat/taskkill, macOS/Linux: lsof/kill)
150
+ - **Test Site Integration** - Port-managed dev server for test-site
151
+ - `test-site/server.js` with PortManager integration
152
+ - Auto-allocates port 3000-3009 with conflict resolution
153
+ - `npm run dev` uses port management, `npm run dev:simple` bypasses it
154
+ - Graceful shutdown releases port on Ctrl+C
155
+
156
+ - **Component Contracts** - Formal component specifications
157
+ - **Contract Schema** - Comprehensive component definition format
158
+ - Props (required/optional with types and validation)
159
+ - State (variables with initial values and update triggers)
160
+ - Events (triggers, payloads, required status)
161
+ - DOM structure (required elements with selectors and attributes)
162
+ - Visual expectations (layout, critical elements, spacing, breakpoints)
163
+ - Behavior (user interactions, state changes, side effects)
164
+ - Test cases (setup, steps, assertions, expected outcomes)
165
+ - **Contract Examples** - Reference implementations
166
+ - `LoginForm.contract.json` - Form with email/password validation
167
+ - `UserCard.contract.json` - Data display component
168
+ - `DataTable.contract.json` - Complex interactive component
169
+
170
+ - **Comprehensive Documentation** - Three new guides
171
+ - **UI-VERIFICATION-GUIDE.md** - Complete validation system documentation
172
+ - Quick start and configuration
173
+ - Detailed hook documentation with examples
174
+ - Troubleshooting guide
175
+ - Best practices
176
+ - **PORT-MANAGEMENT.md** - Port allocation and management guide
177
+ - API reference with TypeScript types
178
+ - Integration examples (Vite, Express, Webpack)
179
+ - Cross-platform behavior details
180
+ - Troubleshooting guide
181
+ - **COMPONENT-CONTRACTS.md** - Contract schema reference
182
+ - Complete schema documentation
183
+ - Validation rules
184
+ - Contract evolution guide
185
+ - Best practices and examples
186
+
187
+ - **E2E Testing** - Comprehensive end-to-end validation tests
188
+ - 19 E2E tests for UI verification system
189
+ - Tests verify hook execution order (syntax → runtime → visual → contract)
190
+ - Tests validate blocking conditions and passing scenarios
191
+ - Integration tests verify full validation chain
192
+
193
+ - **Integration Testing** - Component test suite additions
194
+ - 35 tests for port management integration
195
+ - 17 tests for settings.json hooks integration
196
+ - Test site server validation
197
+
198
+ ### Changed
199
+ - **settings.json Template** - Updated with new hooks and configuration
200
+ - Added 4 UI verification hooks to PostToolUse section
201
+ - Execution order: enforce-structured-development → auto-format → validate-ui-syntax → validate-ui-runtime → validate-ui-visual → validate-component-contract → validate-test-quality → validate-ui-integration → validate-integration-site → validate-database-changes → validate-migration-impact
202
+ - Added `testing.ui.requireVisualCheck` (default: true)
203
+ - Added `testing.ui.requireContract` (default: false)
204
+
205
+ - **README.md** - Updated with new features
206
+ - Added UI Verification System to features list
207
+ - Added Port Management feature
208
+ - Added Component Contracts feature
209
+ - Added Integration Test Site feature
210
+ - Added new "UI Verification System" section with documentation links
211
+
212
+ - **Test Site** - Enhanced with port management
213
+ - Updated `package.json` with `dev` and `dev:simple` scripts
214
+ - Enhanced README with port management documentation
215
+ - Server auto-allocates ports and cleans up on restart
216
+
217
+ ### Technical Details
218
+ - **Total Hooks**: 20 (16 original + 4 new UI verification hooks)
219
+ - validate-ui-syntax.js: Syntax validation
220
+ - validate-ui-runtime.js: Runtime validation
221
+ - validate-ui-visual.js: Visual validation
222
+ - validate-component-contract.js: Contract validation
223
+ - **Total Tests**: 193 tests across unit, integration, and E2E
224
+ - Syntax validation: 24 tests
225
+ - Runtime validation: 17 tests
226
+ - Visual validation: 17 tests
227
+ - Contract validation: 35 tests
228
+ - Port management: 35 tests + integration tests
229
+ - E2E tests: 19 tests
230
+ - Settings integration: 17 tests
231
+ - **Dependencies**: Optional Playwright and @anthropic-ai/sdk for full functionality
232
+ - **Port Ranges**:
233
+ - Vite dev servers: 3000-3009
234
+ - UI validation: 3010-3019
235
+ - Custom services: 3020-3029
236
+ - **Cross-Platform**: Full Windows/macOS/Linux support for port management
237
+ - **Backward Compatible**: All features opt-in via configuration
238
+
239
+ ### Performance
240
+ - Syntax validation: <3 seconds (no external dependencies)
241
+ - Runtime validation: 10-30 seconds (Playwright startup overhead)
242
+ - Visual validation: 5-15 seconds (screenshot + AI analysis)
243
+ - Contract validation: <1 second (static analysis)
244
+
245
+ ## [1.3.0] - 2025-12-20
246
+
247
+ ### Changed
248
+ - **BREAKING: All UI Testing Requirements Now Hard Requirements**
249
+ - All 10 UI testing validations now always block commits (cannot be disabled)
250
+ - Previously soft requirements (controlled by strictMode):
251
+ - requireProps - Tests must provide required props
252
+ - requireEventTests - Tests must simulate user events
253
+ - requireApiMocking - Tests must mock API calls
254
+ - requireStateTests - Tests must validate state changes
255
+ - requireFormTests - Tests must validate form submission
256
+ - requireConditionalTests - Tests must cover conditional branches
257
+ - requireIntegrationSite - Components must be in test-site/
258
+ - These join existing hard requirements (requireTestFile, requireImport, requireRender)
259
+ - Rationale: Zero-compromise quality - ensures production-ready UI components
260
+ - Migration: All projects must now meet full UI testing standards (no opt-out)
261
+ - Updated validate-ui-integration.js hook to enforce all requirements
262
+ - Updated README.md with "Hard Requirements" section
263
+ - Updated settings.json template with warning comment
264
+
265
+ ### Technical Details
266
+ - Updated hook: validate-ui-integration.js (16KB bundled)
267
+ - All 10 requirements enforced in shouldBlock() function
268
+ - No configuration options to disable requirements
269
+ - Breaking change for projects relying on soft requirement warnings
270
+
60
271
  ## [Unreleased]
61
272
 
62
273
  ### Planned
@@ -65,6 +276,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
65
276
  - Custom hook support
66
277
  - Plugin system
67
278
  - Web dashboard for progress visualization
279
+ - Contract generator CLI tool
280
+ - Visual regression testing
68
281
 
69
282
  ---
70
283
 
package/README.md CHANGED
@@ -8,9 +8,13 @@ A project generator that sets up a structured development environment with Claud
8
8
 
9
9
  - **Interactive CLI** - Guided project setup with prompts
10
10
  - **Structured Development** - Enforced task-based workflow with plan tracking
11
+ - **UI Verification System** - Automated validation: syntax, runtime, visual, contracts
12
+ - **Port Management** - Fixed port allocation with auto-cleanup (3000-3009 range)
13
+ - **Component Contracts** - Define and enforce component specifications
11
14
  - **Protected Scripts** - Minified, bundled scripts and hooks (27% smaller than source)
12
15
  - **Git Integration** - Automatic repository initialization with structured commits
13
16
  - **Hook System** - Pre/post tool-use hooks for code quality and workflow enforcement
17
+ - **Integration Test Site** - Hot-reloading site for stakeholder validation
14
18
  - **Zero Configuration** - Works out of the box with sensible defaults
15
19
 
16
20
  ## Installation
@@ -178,6 +182,23 @@ Configure Claude Code behavior:
178
182
  "ask": ["Edit(./package.json)"],
179
183
  "deny": ["Edit(**/*.md)", "Bash(rm -rf*)"]
180
184
  },
185
+ "testing": {
186
+ "ui": {
187
+ "strictMode": true,
188
+ "requireTestFile": true,
189
+ "requireImport": true,
190
+ "requireRender": true,
191
+ "requireProps": true,
192
+ "requireEventTests": true,
193
+ "requireApiMocking": true,
194
+ "requireStateTests": true,
195
+ "requireFormTests": true,
196
+ "requireConditionalTests": true,
197
+ "requireIntegrationSite": true,
198
+ "integrationSiteDir": "test-site",
199
+ "conditionalThreshold": 3
200
+ }
201
+ },
181
202
  "hooks": {
182
203
  "PreToolUse": [...],
183
204
  "PostToolUse": [...]
@@ -185,6 +206,150 @@ Configure Claude Code behavior:
185
206
  }
186
207
  ```
187
208
 
209
+ ### UI Verification System
210
+
211
+ The framework includes automated UI component validation with four validation stages:
212
+
213
+ 1. **Syntax Validation** - TypeScript/JSX compilation and import resolution
214
+ 2. **Runtime Validation** - Browser-based runtime error detection (requires Playwright)
215
+ 3. **Visual Validation** - AI-powered visual appearance analysis (requires Claude Vision API)
216
+ 4. **Contract Validation** - Component contract compliance checking
217
+
218
+ **Quick Configuration:**
219
+
220
+ ```json
221
+ {
222
+ "testing": {
223
+ "ui": {
224
+ "strictMode": true,
225
+ "requireVisualCheck": true,
226
+ "requireContract": false
227
+ }
228
+ }
229
+ }
230
+ ```
231
+
232
+ **Documentation:**
233
+ - [UI Verification Guide](./docs/UI-VERIFICATION-GUIDE.md) - Complete validation system guide
234
+ - [Port Management](./docs/PORT-MANAGEMENT.md) - Fixed port allocation and auto-cleanup
235
+ - [Component Contracts](./docs/COMPONENT-CONTRACTS.md) - Contract schema reference
236
+
237
+ ### UI Testing Configuration
238
+
239
+ The framework enforces strict UI testing requirements by default. Configure these in `.claude/settings.json`:
240
+
241
+ #### Global Strict Mode
242
+
243
+ ```json
244
+ {
245
+ "testing": {
246
+ "ui": {
247
+ "strictMode": true // false = warnings only, true = blocks commits
248
+ }
249
+ }
250
+ }
251
+ ```
252
+
253
+ #### Per-Requirement Controls
254
+
255
+ ```json
256
+ {
257
+ "testing": {
258
+ "ui": {
259
+ "strictMode": true,
260
+ "requireProps": true, // Tests must provide required props
261
+ "requireEventTests": true, // Tests must simulate user events
262
+ "requireApiMocking": true, // Tests must mock API calls
263
+ "requireStateTests": true, // Tests must validate state changes
264
+ "requireFormTests": true, // Tests must validate form submission
265
+ "requireConditionalTests": true,// Tests must cover conditional branches
266
+ "requireIntegrationSite": true // Components must be in test-site/
267
+ }
268
+ }
269
+ }
270
+ ```
271
+
272
+ #### UI Testing Requirements (Hard Requirements - Always Enforced)
273
+
274
+ All UI testing requirements are **hard requirements** that **always block** commits if violated:
275
+
276
+ - **requireTestFile** - UI component must have test file
277
+ - **requireImport** - Test must import the component
278
+ - **requireRender** - Test must render the component
279
+ - **requireProps** - Tests must provide required props (validates prop passing)
280
+ - **requireEventTests** - Tests must simulate user events (validates user interactions)
281
+ - **requireApiMocking** - Tests must mock API calls (validates async behavior)
282
+ - **requireStateTests** - Tests must validate state changes (validates state management)
283
+ - **requireFormTests** - Tests must validate form submission (validates form behavior)
284
+ - **requireConditionalTests** - Tests must cover conditional branches (validates logic paths)
285
+ - **requireIntegrationSite** - Components must be in test-site/ (validates stakeholder preview)
286
+
287
+ **Important Notes:**
288
+ - ⚠️ **These requirements CANNOT be disabled** - They always enforce strict UI testing standards
289
+ - 🚫 **Commits will be blocked** if any requirement is violated
290
+ - ✅ **Zero compromise on quality** - All UI components must have comprehensive tests
291
+ - 🎯 **Best practice enforcement** - Ensures production-ready components
292
+
293
+ **Configuration (for reference only):**
294
+
295
+ ```json
296
+ {
297
+ "testing": {
298
+ "ui": {
299
+ "strictMode": true, // Always true (hard requirement)
300
+ "requireTestFile": true, // Cannot disable
301
+ "requireImport": true, // Cannot disable
302
+ "requireRender": true, // Cannot disable
303
+ "requireProps": true, // Cannot disable
304
+ "requireEventTests": true, // Cannot disable
305
+ "requireApiMocking": true, // Cannot disable
306
+ "requireStateTests": true, // Cannot disable
307
+ "requireFormTests": true, // Cannot disable
308
+ "requireConditionalTests": true, // Cannot disable
309
+ "requireIntegrationSite": true // Cannot disable
310
+ }
311
+ }
312
+ }
313
+ ```
314
+
315
+ **Why Hard Requirements?**
316
+
317
+ This framework enforces production-grade quality standards:
318
+ - **No shortcuts** - Every UI component gets proper test coverage
319
+ - **Stakeholder confidence** - Integration site ensures visual validation
320
+ - **Maintainability** - Comprehensive tests prevent regressions
321
+ - **Professional standards** - Enforces industry best practices
322
+
323
+ #### Integration Test Website
324
+
325
+ UI components must be added to the `test-site/` directory for stakeholder validation:
326
+
327
+ ```bash
328
+ cd test-site
329
+ npm install
330
+ npm run dev # Runs at http://localhost:3000
331
+ ```
332
+
333
+ **Deploy to stakeholders:**
334
+ ```bash
335
+ cd test-site
336
+ npm run deploy # Deploys to GitHub Pages
337
+ ```
338
+
339
+ **Configuration:**
340
+ ```json
341
+ {
342
+ "testing": {
343
+ "ui": {
344
+ "requireIntegrationSite": true,
345
+ "integrationSiteDir": "test-site" // Or custom directory
346
+ }
347
+ }
348
+ }
349
+ ```
350
+
351
+ See `test-site/README.md` for full integration testing guide.
352
+
188
353
  ### CLAUDE.md
189
354
 
190
355
  Project-specific development guidelines and rules. Customize for your team's workflow.
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var _0x50d730=_0xbb34;(function(_0x22a0f8,_0x3422d2){var _0x10d9bd=_0xbb34,_0x38b5da=_0x22a0f8();while(!![]){try{var _0x2dcb08=parseInt(_0x10d9bd(0x1f9))/0x1*(parseInt(_0x10d9bd(0x208))/0x2)+-parseInt(_0x10d9bd(0x1ee))/0x3*(parseInt(_0x10d9bd(0x1e2))/0x4)+parseInt(_0x10d9bd(0x20b))/0x5+-parseInt(_0x10d9bd(0x20c))/0x6*(parseInt(_0x10d9bd(0x204))/0x7)+-parseInt(_0x10d9bd(0x200))/0x8*(-parseInt(_0x10d9bd(0x207))/0x9)+parseInt(_0x10d9bd(0x1eb))/0xa+-parseInt(_0x10d9bd(0x201))/0xb*(parseInt(_0x10d9bd(0x1f7))/0xc);if(_0x2dcb08===_0x3422d2)break;else _0x38b5da['push'](_0x38b5da['shift']());}catch(_0xeeb44a){_0x38b5da['push'](_0x38b5da['shift']());}}}(_0x35de,0xf07a8));var _0x436f3b=(function(){var _0x28373e=_0xbb34,_0x287358={};_0x287358[_0x28373e(0x1f6)]=function(_0x195496,_0x74bc07){return _0x195496!==_0x74bc07;},_0x287358[_0x28373e(0x1f4)]='sDYvZ';var _0x349c1d=_0x287358,_0x3e50eb=!![];return function(_0x2f8b57,_0x3592ea){var _0x8d950=_0x28373e,_0x560451={'vqhUY':function(_0x6fb72a,_0x42166b){var _0x53ea75=_0xbb34;return _0x349c1d[_0x53ea75(0x1f6)](_0x6fb72a,_0x42166b);},'WMgGy':_0x349c1d[_0x8d950(0x1f4)]},_0x3da720=_0x3e50eb?function(){var _0x6e86a0=_0x8d950;if(_0x3592ea){if(_0x560451[_0x6e86a0(0x1ff)](_0x6e86a0(0x20a),_0x560451[_0x6e86a0(0x1ed)])){if(_0x4f0a50){var _0x4e67db=_0x8580b4[_0x6e86a0(0x209)](_0x2fa7ed,arguments);return _0x47ff11=null,_0x4e67db;}}else{var _0x512e79=_0x3592ea['apply'](_0x2f8b57,arguments);return _0x3592ea=null,_0x512e79;}}}:function(){};return _0x3e50eb=![],_0x3da720;};}()),_0x4330f5=_0x436f3b(this,function(){var _0x3f220b=_0xbb34,_0x44a366={};_0x44a366[_0x3f220b(0x1ec)]=_0x3f220b(0x1f3);var _0x3e6d26=_0x44a366;return _0x4330f5[_0x3f220b(0x1f8)]()[_0x3f220b(0x203)](_0x3e6d26[_0x3f220b(0x1ec)])[_0x3f220b(0x1f8)]()[_0x3f220b(0x1f2)](_0x4330f5)[_0x3f220b(0x203)](_0x3e6d26[_0x3f220b(0x1ec)]);});_0x4330f5();function _0xbb34(_0x344138,_0x39b7d6){_0x344138=_0x344138-0x1e2;var _0x4d3cf8=_0x35de();var _0x4330f5=_0x4d3cf8[_0x344138];return _0x4330f5;}function _0x35de(){var _0x4691bc=['warn','WMNQM','17387622nToPOP','1366MriGTY','apply','sDYvZ','4212670KsTOAa','3248148sBDJJT','existsSync','97404oUANip','argv','python\x20-m\x20black\x20\x22','match','log','python\x20-m\x20black\x20--version','Formatted:\x20','ignore','file_path','1585040SEjuKm','AyBgV','WMgGy','21OhOgHg','tool_input','\x22\x20is\x20not\x20supported','child_process','constructor','(((.+)+)+)+$','mTnlO','stdio','HzTJF','153684zgVFoO','toString','14TWiwxZ','npx\x20prettier\x20--write\x20\x22','Warning:\x20Could\x20not\x20format\x20','npx\x20prettier\x20--version','Dynamic\x20require\x20of\x20\x22','exit','vqhUY','8OcyPNG','605EMBROV','olFNM','search','14FEDsXX'];_0x35de=function(){return _0x4691bc;};return _0x35de();}var r=(_0x1d264f=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x1d264f,{'get':(_0x1436ad,_0x41c347)=>(typeof require<'u'?require:_0x1436ad)[_0x41c347]}):_0x1d264f)(function(_0x4f204c){var _0x3fec7f=_0xbb34,_0x2c00c5={'esXRY':function(_0xf5461a,_0x2d202a){return _0xf5461a(_0x2d202a);},'WMNQM':function(_0x18abb9,_0x4c4bb3){return _0x18abb9+_0x4c4bb3;},'olFNM':_0x3fec7f(0x1fd)};if(typeof require<'u')return require[_0x3fec7f(0x209)](this,arguments);throw _0x2c00c5['esXRY'](Error,_0x2c00c5[_0x3fec7f(0x206)](_0x2c00c5[_0x3fec7f(0x202)],_0x4f204c)+_0x3fec7f(0x1f0));}),{execSync:e}=r(_0x50d730(0x1f1)),i=r('fs'),c=process[_0x50d730(0x1e3)][0x2]||'{}',a=JSON['parse'](c),t=a[_0x50d730(0x1ef)]?.[_0x50d730(0x1ea)];(!t||!i[_0x50d730(0x20d)](t))&&process[_0x50d730(0x1fe)](0x0);try{if(t[_0x50d730(0x1e5)](/\.(ts|tsx|js|jsx|json)$/))try{var _0x44061f={};_0x44061f[_0x50d730(0x1f5)]=_0x50d730(0x1e9);var _0x386954={};_0x386954[_0x50d730(0x1f5)]=_0x50d730(0x1e9),(e(_0x50d730(0x1fc),_0x44061f),e(_0x50d730(0x1fa)+t+'\x22',_0x386954),console[_0x50d730(0x1e6)](_0x50d730(0x1e8)+t));}catch{}else{if(t[_0x50d730(0x1e5)](/\.py$/))try{var _0x3de176={};_0x3de176[_0x50d730(0x1f5)]=_0x50d730(0x1e9);var _0x42625e={};_0x42625e[_0x50d730(0x1f5)]='ignore',(e(_0x50d730(0x1e7),_0x3de176),e(_0x50d730(0x1e4)+t+'\x22',_0x42625e),console[_0x50d730(0x1e6)](_0x50d730(0x1e8)+t));}catch{}}}catch{console[_0x50d730(0x205)](_0x50d730(0x1fb)+t);}process[_0x50d730(0x1fe)](0x0);
2
+ var _0x1e448f=_0x5f4d;function _0x47be(){var _0x1bd032=['Mwshs','match','stdio','Warning:\x20Could\x20not\x20format\x20','ZaVrf','(((.+)+)+)+$','1931800hcNVwA','parse','fELwD','Formatted:\x20','MLheR','NyLcs','npx\x20prettier\x20--write\x20\x22','python\x20-m\x20black\x20--version','237885tqchVf','constructor','131684zPhEhu','XOIaf','vhlIe','WzQFD','TDHXS','log','apply','183494wVSXRf','file_path','PQvPx','taNPm','existsSync','ignore','wpOet','6qCGEfN','search','python\x20-m\x20black\x20\x22','child_process','8LEOPvQ','2764629SyZzeV','TfOQP','56553vYLgDK','WDQgB','842820yTLYLB','warn','fklKo','exit','npx\x20prettier\x20--version','NPheL','4QRvQtT','\x22\x20is\x20not\x20supported'];_0x47be=function(){return _0x1bd032;};return _0x47be();}function _0x5f4d(_0x3ba3af,_0x2d8d7e){_0x3ba3af=_0x3ba3af-0x12f;var _0x2b7ef6=_0x47be();var _0x27dac2=_0x2b7ef6[_0x3ba3af];return _0x27dac2;}(function(_0x3b4e4a,_0x2e76cf){var _0x5de888=_0x5f4d,_0x2e2a26=_0x3b4e4a();while(!![]){try{var _0x15a58c=parseInt(_0x5de888(0x143))/0x1+-parseInt(_0x5de888(0x13c))/0x2+-parseInt(_0x5de888(0x13a))/0x3*(parseInt(_0x5de888(0x159))/0x4)+parseInt(_0x5de888(0x132))/0x5*(parseInt(_0x5de888(0x14a))/0x6)+-parseInt(_0x5de888(0x151))/0x7+parseInt(_0x5de888(0x14e))/0x8*(-parseInt(_0x5de888(0x14f))/0x9)+parseInt(_0x5de888(0x153))/0xa;if(_0x15a58c===_0x2e76cf)break;else _0x2e2a26['push'](_0x2e2a26['shift']());}catch(_0x54c63c){_0x2e2a26['push'](_0x2e2a26['shift']());}}}(_0x47be,0x2f4cb));var _0x54df33=(function(){var _0x5db676=_0x5f4d,_0x579104={};_0x579104[_0x5db676(0x137)]='npx\x20prettier\x20--version',_0x579104[_0x5db676(0x13e)]=_0x5db676(0x148),_0x579104[_0x5db676(0x158)]=_0x5db676(0x145),_0x579104['WDQgB']=function(_0x4f0598,_0x33d7a9){return _0x4f0598!==_0x33d7a9;},_0x579104['MLheR']='wxndk';var _0x53e3c2=_0x579104,_0x46e6c2=!![];return function(_0x207acd,_0x1e252f){var _0xe6027=_0x5db676,_0x2dd66b={};_0x2dd66b[_0xe6027(0x134)]=_0x53e3c2[_0xe6027(0x137)],_0x2dd66b[_0xe6027(0x149)]=_0x53e3c2[_0xe6027(0x13e)],_0x2dd66b['TfOQP']=function(_0x58d375,_0x161e73){return _0x58d375!==_0x161e73;},_0x2dd66b['ZaVrf']=_0x53e3c2[_0xe6027(0x158)];var _0x459a26=_0x2dd66b;if(_0x53e3c2[_0xe6027(0x152)](_0x53e3c2['MLheR'],_0x53e3c2[_0xe6027(0x136)])){var _0xd40d78=_0x9b5412[_0xe6027(0x142)](_0x1e7f6a,arguments);return _0x18207e=null,_0xd40d78;}else{var _0x43e010=_0x46e6c2?function(){var _0xc99660=_0xe6027,_0x31b078={'WzQFD':_0x459a26['fELwD'],'Mwshs':_0x459a26['wpOet'],'taNPm':function(_0x2babe5,_0x49c8b1,_0x238cfc){return _0x2babe5(_0x49c8b1,_0x238cfc);}};if(_0x1e252f){if(_0x459a26[_0xc99660(0x150)](_0xc99660(0x145),_0x459a26[_0xc99660(0x130)]))_0x14ab71(_0x31b078[_0xc99660(0x13f)],{'stdio':_0x31b078['Mwshs']}),_0x31b078[_0xc99660(0x146)](_0xb4f8db,'npx\x20prettier\x20--write\x20\x22'+_0x3a7e05+'\x22',{'stdio':_0x31b078[_0xc99660(0x15b)]}),_0x1c8d4[_0xc99660(0x141)](_0xc99660(0x135)+_0xcc2758);else{var _0x3c6610=_0x1e252f[_0xc99660(0x142)](_0x207acd,arguments);return _0x1e252f=null,_0x3c6610;}}}:function(){};return _0x46e6c2=![],_0x43e010;}};}()),_0x27dac2=_0x54df33(this,function(){var _0x31cd9e=_0x5f4d,_0x43ba21={};_0x43ba21[_0x31cd9e(0x13d)]=_0x31cd9e(0x131);var _0x2a63c7=_0x43ba21;return _0x27dac2['toString']()[_0x31cd9e(0x14b)]('(((.+)+)+)+$')['toString']()[_0x31cd9e(0x13b)](_0x27dac2)[_0x31cd9e(0x14b)](_0x2a63c7['XOIaf']);});_0x27dac2();var r=(_0x2f17d2=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x2f17d2,{'get':(_0x2167e8,_0x228e44)=>(typeof require<'u'?require:_0x2167e8)[_0x228e44]}):_0x2f17d2)(function(_0x3ba5fa){var _0x3b85ba=_0x5f4d,_0x5e4b05={};_0x5e4b05[_0x3b85ba(0x155)]=function(_0x7c9779,_0xa0643d){return _0x7c9779<_0xa0643d;},_0x5e4b05[_0x3b85ba(0x140)]=function(_0x4e1811,_0x4cdd07){return _0x4e1811+_0x4cdd07;};var _0x5c241b=_0x5e4b05;if(_0x5c241b[_0x3b85ba(0x155)](typeof require,'u'))return require[_0x3b85ba(0x142)](this,arguments);throw Error(_0x5c241b['TDHXS'](_0x5c241b[_0x3b85ba(0x140)]('Dynamic\x20require\x20of\x20\x22',_0x3ba5fa),_0x3b85ba(0x15a)));}),{execSync:e}=r(_0x1e448f(0x14d)),i=r('fs'),c=process['argv'][0x2]||'{}',a=JSON[_0x1e448f(0x133)](c),t=a['tool_input']?.[_0x1e448f(0x144)];(!t||!i[_0x1e448f(0x147)](t))&&process[_0x1e448f(0x156)](0x0);try{if(t[_0x1e448f(0x15c)](/\.(ts|tsx|js|jsx|json)$/))try{var _0x135ef9={};_0x135ef9[_0x1e448f(0x15d)]=_0x1e448f(0x148);var _0x4489d0={};_0x4489d0['stdio']=_0x1e448f(0x148),(e(_0x1e448f(0x157),_0x135ef9),e(_0x1e448f(0x138)+t+'\x22',_0x4489d0),console[_0x1e448f(0x141)](_0x1e448f(0x135)+t));}catch{}else{if(t[_0x1e448f(0x15c)](/\.py$/))try{var _0x4aa679={};_0x4aa679[_0x1e448f(0x15d)]='ignore';var _0x1e4de5={};_0x1e4de5[_0x1e448f(0x15d)]=_0x1e448f(0x148),(e(_0x1e448f(0x139),_0x4aa679),e(_0x1e448f(0x14c)+t+'\x22',_0x1e4de5),console[_0x1e448f(0x141)](_0x1e448f(0x135)+t));}catch{}}}catch{console[_0x1e448f(0x154)](_0x1e448f(0x12f)+t);}process['exit'](0x0);
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var _0x3d0fa0=_0x5a43;(function(_0x2db5a3,_0x5b3802){var _0x5db443=_0x5a43,_0x2b87ee=_0x2db5a3();while(!![]){try{var _0x149344=parseInt(_0x5db443(0x117))/0x1*(parseInt(_0x5db443(0x12e))/0x2)+-parseInt(_0x5db443(0x11e))/0x3*(parseInt(_0x5db443(0x143))/0x4)+-parseInt(_0x5db443(0x152))/0x5*(parseInt(_0x5db443(0x137))/0x6)+-parseInt(_0x5db443(0x132))/0x7+parseInt(_0x5db443(0x14a))/0x8+-parseInt(_0x5db443(0x156))/0x9*(parseInt(_0x5db443(0x120))/0xa)+-parseInt(_0x5db443(0x119))/0xb*(-parseInt(_0x5db443(0x154))/0xc);if(_0x149344===_0x5b3802)break;else _0x2b87ee['push'](_0x2b87ee['shift']());}catch(_0x49e715){_0x2b87ee['push'](_0x2b87ee['shift']());}}}(_0x42d0,0x43ee2));var _0x36dafe=(function(){var _0x51bf9a=_0x5a43,_0x160059={};_0x160059[_0x51bf9a(0x105)]=function(_0xffa76,_0x45a96a){return _0xffa76*_0x45a96a;},_0x160059[_0x51bf9a(0x108)]=function(_0x338c96,_0x595cfb){return _0x338c96!==_0x595cfb;};var _0x32f533=_0x160059,_0x2b52c0=!![];return function(_0x2f55ed,_0x5a7552){var _0x3349fd=_0x2b52c0?function(){var _0x11b320=_0x5a43,_0x2b8834={'SNkgz':function(_0xaa4c9f,_0x3c8904){var _0x2e0dfe=_0x5a43;return _0x32f533[_0x2e0dfe(0x105)](_0xaa4c9f,_0x3c8904);},'RcElI':function(_0xc6ac49,_0x48e720){return _0xc6ac49/_0x48e720;},'mAcAr':function(_0x185a80,_0x2c159c){return _0x185a80-_0x2c159c;}};if(_0x5a7552){if(_0x32f533[_0x11b320(0x108)]('mToKw',_0x11b320(0x140))){let _0x1471a8=_0x2b8834[_0x11b320(0x14b)](_0x2b8834[_0x11b320(0x15a)](_0x2b8834['mAcAr'](_0x2d2852[_0x11b320(0x157)],_0xdec98[_0x11b320(0x103)]),_0x40bb28[_0x11b320(0x103)]),0x64)[_0x11b320(0x149)](0x1);_0x491bf5['log'](_0x11b320(0x127)+_0x289dbc['estimatedHours']+_0x11b320(0x125)+_0x1471a8+'%');}else{var _0x424726=_0x5a7552[_0x11b320(0x10a)](_0x2f55ed,arguments);return _0x5a7552=null,_0x424726;}}}:function(){};return _0x2b52c0=![],_0x3349fd;};}()),_0x504215=_0x36dafe(this,function(){var _0xedb2ca=_0x5a43,_0x5b02e6={};_0x5b02e6[_0xedb2ca(0x112)]=_0xedb2ca(0x121);var _0x4fd5d7=_0x5b02e6;return _0x504215[_0xedb2ca(0x10c)]()[_0xedb2ca(0x13c)](_0xedb2ca(0x121))['toString']()[_0xedb2ca(0x114)](_0x504215)[_0xedb2ca(0x13c)](_0x4fd5d7[_0xedb2ca(0x112)]);});_0x504215();var i=(_0x231fc8=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x231fc8,{'get':(_0x202c3a,_0x216edd)=>(typeof require<'u'?require:_0x202c3a)[_0x216edd]}):_0x231fc8)(function(_0x360a1c){var _0x27cb2f=_0x5a43,_0x5c9027={'AkiAn':function(_0x10420e,_0x38881c){return _0x10420e<_0x38881c;},'BjRPU':function(_0x16a66b,_0x378420){return _0x16a66b(_0x378420);},'YoxRq':function(_0x4d1f0b,_0x433eb0){return _0x4d1f0b+_0x433eb0;},'pNAzC':function(_0x3a02f1,_0x5d38c2){return _0x3a02f1+_0x5d38c2;},'BxOnW':_0x27cb2f(0x14e),'cRJVu':'\x22\x20is\x20not\x20supported'};if(_0x5c9027['AkiAn'](typeof require,'u'))return require['apply'](this,arguments);throw _0x5c9027[_0x27cb2f(0x141)](Error,_0x5c9027[_0x27cb2f(0x14d)](_0x5c9027['pNAzC'](_0x5c9027[_0x27cb2f(0x153)],_0x360a1c),_0x5c9027[_0x27cb2f(0x113)]));}),n=i('fs'),d=i(_0x3d0fa0(0x107)),a=process[_0x3d0fa0(0x142)][0x2];function _0x42d0(){var _0x13929c=['5437668WhyUhX','.claude/ACTIVE-PLAN','9oGyaCK','actualHours','stringify','\x20\x20git\x20commit\x20-m\x20\x22[','RcElI','✅\x20Tracker\x20already\x20synchronized\x0a','existsSync','completedAt','title','estimatedHours','toISOString','FFHyi','\x0aCommit\x20all\x20changes\x20before\x20completing\x20task:','path','LHkzM','\x0a✅\x20Task\x20','apply',']\x20Description\x20of\x20changes\x22','toString','exit','completed','lastUpdated','📌\x20','startedAt','dZTeN','cRJVu','constructor','find','git\x20status\x20--porcelain','1kmDZzc','Set\x20active\x20plan\x20first:\x20npm\x20run\x20plan:manager\x0a','11aEGZSh','\x0a❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes','.claude/plans','error','writeFileSync','30xZrfnZ','round','3483930KosDBZ','(((.+)+)+)+$','taskFiles','Initialize\x20first:\x20npm\x20run\x20plan:init\x0a','\x20\x20Start:\x20npm\x20run\x20task:next\x0a','h\x20|\x20Variance:\x20','🎉\x20ALL\x20TASKS\x20COMPLETED!\x20Project\x20finished.\x0a','📊\x20Estimated:\x20','status','.json','Plan:\x20','✅\x20Tracker\x20synchronized\x0a','\x0a📈\x20Project\x20progress:\x20','utf8','941382mUToRw','pending','length','\x0a❌\x20ERROR:\x20No\x20active\x20plan\x20found','2743979nUXLJY','encoding','\x0a❌\x20ERROR:\x20Task\x20ID\x20required','trim','statistics','132RcPXnh','📋\x20Plan:\x20','\x0aUncommitted\x20files:','TASK-TRACKER.json','join','search','warn','\x0a❌\x20ERROR:\x20Task\x20file\x20not\x20found:\x20','Syncing\x20tracker\x20status...\x0a','mToKw','BjRPU','argv','50960ldXVac','activeTask','blocked','log','filter','readFileSync','toFixed','1898176KxbdPo','SNkgz','totalTasks','YoxRq','Dynamic\x20require\x20of\x20\x22','%)\x0a','\x0a✅\x20Completed\x20task:\x20','in_progress','3425FRczfE','BxOnW'];_0x42d0=function(){return _0x13929c;};return _0x42d0();}function _0x5a43(_0xd31837,_0x158765){_0xd31837=_0xd31837-0x101;var _0x5afba2=_0x42d0();var _0x504215=_0x5afba2[_0xd31837];return _0x504215;}a||(console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x134)),console['error']('Usage:\x20npm\x20run\x20task:done\x20TASK-001\x0a'),process[_0x3d0fa0(0x10d)](0x1));var p=_0x3d0fa0(0x155);n[_0x3d0fa0(0x15c)](p)||(console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x131)),console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x118)),process[_0x3d0fa0(0x10d)](0x1));var u=n[_0x3d0fa0(0x148)](p,_0x3d0fa0(0x12d))[_0x3d0fa0(0x135)](),k=d[_0x3d0fa0(0x13b)](_0x3d0fa0(0x11b),u),r=d[_0x3d0fa0(0x13b)](k,_0x3d0fa0(0x13a)),l=d[_0x3d0fa0(0x13b)](k,'tasks',a+_0x3d0fa0(0x129));n[_0x3d0fa0(0x15c)](r)||(console[_0x3d0fa0(0x11c)]('\x0a❌\x20ERROR:\x20Task\x20tracker\x20not\x20found'),console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x12a)+u),console['error'](_0x3d0fa0(0x123)),process[_0x3d0fa0(0x10d)](0x1)),n[_0x3d0fa0(0x15c)](l)||(console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x13e)+l+'\x0a'),process[_0x3d0fa0(0x10d)](0x1));var e=JSON['parse'](n[_0x3d0fa0(0x148)](r,_0x3d0fa0(0x12d))),s=JSON['parse'](n[_0x3d0fa0(0x148)](l,_0x3d0fa0(0x12d))),f=s['status']==='completed';if(f){console[_0x3d0fa0(0x146)](_0x3d0fa0(0x109)+a+'\x20is\x20already\x20completed'),console[_0x3d0fa0(0x146)](_0x3d0fa0(0x13f));let t=e[_0x3d0fa0(0x122)]['find'](_0x1c815e=>_0x1c815e['id']===a);t&&t[_0x3d0fa0(0x128)]!==_0x3d0fa0(0x10e)?(t[_0x3d0fa0(0x128)]='completed',e[_0x3d0fa0(0x136)]={'totalTasks':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x130)],'pending':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x26bc8c=>_0x26bc8c[_0x3d0fa0(0x128)]===_0x3d0fa0(0x12f))[_0x3d0fa0(0x130)],'inProgress':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x2289ab=>_0x2289ab[_0x3d0fa0(0x128)]===_0x3d0fa0(0x151))[_0x3d0fa0(0x130)],'completed':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x2f178f=>_0x2f178f[_0x3d0fa0(0x128)]===_0x3d0fa0(0x10e))[_0x3d0fa0(0x130)],'blocked':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x4130ab=>_0x4130ab[_0x3d0fa0(0x128)]===_0x3d0fa0(0x145))['length']},e['activeTask']=null,e[_0x3d0fa0(0x10f)]=new Date()[_0x3d0fa0(0x104)](),n[_0x3d0fa0(0x11d)](r,JSON[_0x3d0fa0(0x158)](e,null,0x2)),console[_0x3d0fa0(0x146)](_0x3d0fa0(0x12b))):console[_0x3d0fa0(0x146)](_0x3d0fa0(0x15b)),process[_0x3d0fa0(0x10d)](0x0);}var {execSync:S}=i('child_process');try{var _0x4b5307={};_0x4b5307[_0x3d0fa0(0x133)]=_0x3d0fa0(0x12d);let t=S(_0x3d0fa0(0x116),_0x4b5307);t[_0x3d0fa0(0x135)]()&&(console['error'](_0x3d0fa0(0x11a)),console['error'](_0x3d0fa0(0x139)),console['error'](t),console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x106)),console[_0x3d0fa0(0x11c)]('\x20\x20git\x20add\x20.'),console[_0x3d0fa0(0x11c)](_0x3d0fa0(0x159)+a+_0x3d0fa0(0x10b)),console[_0x3d0fa0(0x11c)](''),process['exit'](0x1));}catch{console['warn']('\x0a⚠️\x20\x20WARNING:\x20Could\x20not\x20check\x20git\x20status'),console[_0x3d0fa0(0x13d)]('Make\x20sure\x20all\x20changes\x20are\x20committed!\x0a');}s[_0x3d0fa0(0x128)]=_0x3d0fa0(0x10e),s[_0x3d0fa0(0x101)]=new Date()[_0x3d0fa0(0x104)]();if(s['startedAt']){let t=new Date(s[_0x3d0fa0(0x111)]),o=new Date(s[_0x3d0fa0(0x101)]);s[_0x3d0fa0(0x157)]=Math[_0x3d0fa0(0x11f)]((o-t)/(0x3e8*0x3c*0x3c)*0xa)/0xa;}n[_0x3d0fa0(0x11d)](l,JSON['stringify'](s,null,0x2)),e[_0x3d0fa0(0x144)]=null,e['lastUpdated']=new Date()[_0x3d0fa0(0x104)]();var g=e['taskFiles'][_0x3d0fa0(0x115)](_0x6359b6=>_0x6359b6['id']===a);g&&(g[_0x3d0fa0(0x128)]=_0x3d0fa0(0x10e)),e[_0x3d0fa0(0x136)]={'totalTasks':e['taskFiles'][_0x3d0fa0(0x130)],'pending':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x40802e=>_0x40802e[_0x3d0fa0(0x128)]==='pending')['length'],'inProgress':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x50faa4=>_0x50faa4[_0x3d0fa0(0x128)]===_0x3d0fa0(0x151))[_0x3d0fa0(0x130)],'completed':e[_0x3d0fa0(0x122)][_0x3d0fa0(0x147)](_0x2c8e46=>_0x2c8e46[_0x3d0fa0(0x128)]==='completed')[_0x3d0fa0(0x130)],'blocked':e['taskFiles']['filter'](_0x38233a=>_0x38233a[_0x3d0fa0(0x128)]===_0x3d0fa0(0x145))['length']},n[_0x3d0fa0(0x11d)](r,JSON['stringify'](e,null,0x2)),console['log'](_0x3d0fa0(0x150)+a),console['log'](_0x3d0fa0(0x138)+u+'\x0a'),console[_0x3d0fa0(0x146)](_0x3d0fa0(0x110)+s[_0x3d0fa0(0x102)]),s[_0x3d0fa0(0x157)]&&console[_0x3d0fa0(0x146)]('⏱️\x20\x20Time\x20taken:\x20'+s['actualHours']+'\x20hours');if(s[_0x3d0fa0(0x103)]&&s[_0x3d0fa0(0x157)]){let t=((s[_0x3d0fa0(0x157)]-s[_0x3d0fa0(0x103)])/s[_0x3d0fa0(0x103)]*0x64)[_0x3d0fa0(0x149)](0x1);console[_0x3d0fa0(0x146)](_0x3d0fa0(0x127)+s['estimatedHours']+_0x3d0fa0(0x125)+t+'%');}var h=(e[_0x3d0fa0(0x136)][_0x3d0fa0(0x10e)]/e['statistics']['totalTasks']*0x64)[_0x3d0fa0(0x149)](0x1);console[_0x3d0fa0(0x146)](_0x3d0fa0(0x12c)+e[_0x3d0fa0(0x136)][_0x3d0fa0(0x10e)]+'/'+e[_0x3d0fa0(0x136)]['totalTasks']+'\x20tasks\x20('+h+_0x3d0fa0(0x14f));var c=e[_0x3d0fa0(0x122)][_0x3d0fa0(0x115)](_0xb6ec8=>_0xb6ec8[_0x3d0fa0(0x128)]==='pending');c?(console[_0x3d0fa0(0x146)]('📌\x20Next\x20task\x20available:'),console[_0x3d0fa0(0x146)]('\x20\x20'+c['id']+':\x20'+c[_0x3d0fa0(0x102)]),console['log'](_0x3d0fa0(0x124))):e['statistics'][_0x3d0fa0(0x10e)]===e[_0x3d0fa0(0x136)][_0x3d0fa0(0x14c)]&&console[_0x3d0fa0(0x146)](_0x3d0fa0(0x126)),process['exit'](0x0);
2
+ var _0x5e04e6=_0x4bbd;function _0x4bbd(_0x30e729,_0x29a3d6){_0x30e729=_0x30e729-0x198;var _0x23e92d=_0x34a5();var _0x55579e=_0x23e92d[_0x30e729];return _0x55579e;}(function(_0x2ba039,_0x5d2a85){var _0x15eafd=_0x4bbd,_0x591ddf=_0x2ba039();while(!![]){try{var _0x1a0979=-parseInt(_0x15eafd(0x1e0))/0x1*(parseInt(_0x15eafd(0x1c1))/0x2)+parseInt(_0x15eafd(0x1d2))/0x3+-parseInt(_0x15eafd(0x1a3))/0x4+parseInt(_0x15eafd(0x1cf))/0x5+-parseInt(_0x15eafd(0x1d4))/0x6+parseInt(_0x15eafd(0x1e9))/0x7+parseInt(_0x15eafd(0x1b3))/0x8;if(_0x1a0979===_0x5d2a85)break;else _0x591ddf['push'](_0x591ddf['shift']());}catch(_0x20b35e){_0x591ddf['push'](_0x591ddf['shift']());}}}(_0x34a5,0xd3dd6));var _0x6dbc9b=(function(){var _0x142815=_0x4bbd,_0x5ee09f={};_0x5ee09f[_0x142815(0x19e)]=_0x142815(0x1ae),_0x5ee09f[_0x142815(0x19d)]=_0x142815(0x1af),_0x5ee09f[_0x142815(0x19f)]='utf8',_0x5ee09f['FDGWZ']=_0x142815(0x1df);var _0x5bef35=_0x5ee09f,_0x37d2ad=!![];return function(_0x343246,_0x3d70fc){var _0x4be59d=_0x142815,_0x10e063={'YEqOV':function(_0x4612ae,_0xe969f4,_0x490385){return _0x4612ae(_0xe969f4,_0x490385);},'PLYVR':_0x5bef35['Cqsub'],'Vhtwv':_0x5bef35[_0x4be59d(0x19f)],'QtblS':_0x5bef35['FDGWZ']},_0x143490=_0x37d2ad?function(){var _0x5f4de3=_0x4be59d;if(_0x3d70fc){if(_0x5bef35['YtZfc']!==_0x5bef35[_0x5f4de3(0x19e)]){let _0x513613=_0x10e063['YEqOV'](_0x31cb54,_0x10e063['PLYVR'],{'encoding':_0x10e063[_0x5f4de3(0x1e1)]});_0x513613[_0x5f4de3(0x1f2)]()&&(_0x5ac9e3['error']('\x0a❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes'),_0x158c4b[_0x5f4de3(0x1bb)](_0x5f4de3(0x1ea)),_0x48cc50[_0x5f4de3(0x1bb)](_0x513613),_0x34cbca['error'](_0x5f4de3(0x1b4)),_0x214f6d[_0x5f4de3(0x1bb)](_0x10e063[_0x5f4de3(0x1db)]),_0x165349[_0x5f4de3(0x1bb)](_0x5f4de3(0x1a4)+_0x44a21e+_0x5f4de3(0x1b2)),_0x580569[_0x5f4de3(0x1bb)](''),_0x1783b9[_0x5f4de3(0x1ef)](0x1));}else{var _0x4dec73=_0x3d70fc[_0x5f4de3(0x1ec)](_0x343246,arguments);return _0x3d70fc=null,_0x4dec73;}}}:function(){};return _0x37d2ad=![],_0x143490;};}()),_0x55579e=_0x6dbc9b(this,function(){var _0x522834=_0x4bbd,_0x1eafb1={};_0x1eafb1[_0x522834(0x1c7)]=_0x522834(0x1cb);var _0x5243a1=_0x1eafb1;return _0x55579e['toString']()['search'](_0x5243a1[_0x522834(0x1c7)])[_0x522834(0x1c5)]()[_0x522834(0x1d6)](_0x55579e)[_0x522834(0x1ce)](_0x5243a1[_0x522834(0x1c7)]);});_0x55579e();var i=(_0x103d1a=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x103d1a,{'get':(_0x52719b,_0x470757)=>(typeof require<'u'?require:_0x52719b)[_0x470757]}):_0x103d1a)(function(_0x2e8211){var _0x3141ae=_0x4bbd,_0x522d3b={'iQaQi':function(_0x4fde4a,_0x31a666){return _0x4fde4a<_0x31a666;},'cUMVd':function(_0x552a3a,_0x4c2d10){return _0x552a3a(_0x4c2d10);},'FdhGc':function(_0x575232,_0x425827){return _0x575232+_0x425827;},'RtMOl':_0x3141ae(0x1f0),'BRyfW':_0x3141ae(0x1ed)};if(_0x522d3b[_0x3141ae(0x1be)](typeof require,'u'))return require[_0x3141ae(0x1ec)](this,arguments);throw _0x522d3b[_0x3141ae(0x1e4)](Error,_0x522d3b[_0x3141ae(0x1a8)](_0x522d3b[_0x3141ae(0x1f3)],_0x2e8211)+_0x522d3b['BRyfW']);}),n=i('fs'),d=i(_0x5e04e6(0x19c)),a=process[_0x5e04e6(0x1a7)][0x2];a||(console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1ad)),console['error'](_0x5e04e6(0x1e3)),process[_0x5e04e6(0x1ef)](0x1));var p=_0x5e04e6(0x1bf);n[_0x5e04e6(0x198)](p)||(console[_0x5e04e6(0x1bb)]('\x0a❌\x20ERROR:\x20No\x20active\x20plan\x20found'),console[_0x5e04e6(0x1bb)]('Set\x20active\x20plan\x20first:\x20npm\x20run\x20plan:manager\x0a'),process[_0x5e04e6(0x1ef)](0x1));var u=n[_0x5e04e6(0x1d7)](p,_0x5e04e6(0x1c2))['trim'](),k=d[_0x5e04e6(0x1ab)](_0x5e04e6(0x1bd),u),r=d[_0x5e04e6(0x1ab)](k,_0x5e04e6(0x1c8)),l=d[_0x5e04e6(0x1ab)](k,'tasks',a+_0x5e04e6(0x1b5));n[_0x5e04e6(0x198)](r)||(console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1c4)),console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1b0)+u),console[_0x5e04e6(0x1bb)](_0x5e04e6(0x19a)),process['exit'](0x1)),n[_0x5e04e6(0x198)](l)||(console[_0x5e04e6(0x1bb)]('\x0a❌\x20ERROR:\x20Task\x20file\x20not\x20found:\x20'+l+'\x0a'),process[_0x5e04e6(0x1ef)](0x1));var e=JSON[_0x5e04e6(0x1c9)](n[_0x5e04e6(0x1d7)](r,_0x5e04e6(0x1c2))),s=JSON[_0x5e04e6(0x1c9)](n[_0x5e04e6(0x1d7)](l,_0x5e04e6(0x1c2))),f=s[_0x5e04e6(0x1c3)]==='completed';if(f){console['log'](_0x5e04e6(0x1a5)+a+_0x5e04e6(0x1eb)),console[_0x5e04e6(0x1d9)]('Syncing\x20tracker\x20status...\x0a');let t=e[_0x5e04e6(0x1cc)][_0x5e04e6(0x1d0)](_0x2aeafb=>_0x2aeafb['id']===a);t&&t[_0x5e04e6(0x1c3)]!==_0x5e04e6(0x1e5)?(t[_0x5e04e6(0x1c3)]='completed',e[_0x5e04e6(0x1b8)]={'totalTasks':e[_0x5e04e6(0x1cc)]['length'],'pending':e[_0x5e04e6(0x1cc)][_0x5e04e6(0x1d3)](_0x19deec=>_0x19deec[_0x5e04e6(0x1c3)]===_0x5e04e6(0x1e2))[_0x5e04e6(0x1c0)],'inProgress':e['taskFiles'][_0x5e04e6(0x1d3)](_0x1acf1c=>_0x1acf1c['status']==='in_progress')[_0x5e04e6(0x1c0)],'completed':e[_0x5e04e6(0x1cc)][_0x5e04e6(0x1d3)](_0x129968=>_0x129968['status']===_0x5e04e6(0x1e5))[_0x5e04e6(0x1c0)],'blocked':e[_0x5e04e6(0x1cc)]['filter'](_0x55b73b=>_0x55b73b[_0x5e04e6(0x1c3)]===_0x5e04e6(0x1e8))[_0x5e04e6(0x1c0)]},e[_0x5e04e6(0x1ac)]=null,e['lastUpdated']=new Date()[_0x5e04e6(0x1e6)](),n[_0x5e04e6(0x1a0)](r,JSON['stringify'](e,null,0x2)),console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1b1))):console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1aa)),process[_0x5e04e6(0x1ef)](0x0);}var {execSync:S}=i('child_process');try{var _0x1f0d37={};_0x1f0d37[_0x5e04e6(0x1a2)]=_0x5e04e6(0x1c2);let t=S('git\x20status\x20--porcelain',_0x1f0d37);t[_0x5e04e6(0x1f2)]()&&(console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1ee)),console[_0x5e04e6(0x1bb)]('\x0aUncommitted\x20files:'),console['error'](t),console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1b4)),console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1df)),console[_0x5e04e6(0x1bb)](_0x5e04e6(0x1a4)+a+_0x5e04e6(0x1b2)),console[_0x5e04e6(0x1bb)](''),process[_0x5e04e6(0x1ef)](0x1));}catch{console['warn'](_0x5e04e6(0x1a9)),console[_0x5e04e6(0x1d5)]('Make\x20sure\x20all\x20changes\x20are\x20committed!\x0a');}s[_0x5e04e6(0x1c3)]=_0x5e04e6(0x1e5),s[_0x5e04e6(0x199)]=new Date()['toISOString']();if(s['startedAt']){let t=new Date(s[_0x5e04e6(0x1b9)]),o=new Date(s[_0x5e04e6(0x199)]);s[_0x5e04e6(0x1d1)]=Math[_0x5e04e6(0x1ba)]((o-t)/(0x3e8*0x3c*0x3c)*0xa)/0xa;}n[_0x5e04e6(0x1a0)](l,JSON['stringify'](s,null,0x2)),e[_0x5e04e6(0x1ac)]=null,e['lastUpdated']=new Date()[_0x5e04e6(0x1e6)]();var g=e[_0x5e04e6(0x1cc)]['find'](_0x22a4e7=>_0x22a4e7['id']===a);g&&(g['status']=_0x5e04e6(0x1e5)),e[_0x5e04e6(0x1b8)]={'totalTasks':e['taskFiles'][_0x5e04e6(0x1c0)],'pending':e[_0x5e04e6(0x1cc)][_0x5e04e6(0x1d3)](_0x5509a7=>_0x5509a7[_0x5e04e6(0x1c3)]===_0x5e04e6(0x1e2))[_0x5e04e6(0x1c0)],'inProgress':e[_0x5e04e6(0x1cc)]['filter'](_0x4de949=>_0x4de949['status']===_0x5e04e6(0x1d8))[_0x5e04e6(0x1c0)],'completed':e['taskFiles'][_0x5e04e6(0x1d3)](_0xe8ec46=>_0xe8ec46['status']===_0x5e04e6(0x1e5))[_0x5e04e6(0x1c0)],'blocked':e[_0x5e04e6(0x1cc)]['filter'](_0x110c82=>_0x110c82['status']===_0x5e04e6(0x1e8))[_0x5e04e6(0x1c0)]},n[_0x5e04e6(0x1a0)](r,JSON[_0x5e04e6(0x1f1)](e,null,0x2)),console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1b6)+a),console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1ca)+u+'\x0a'),console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1a1)+s[_0x5e04e6(0x1cd)]),s[_0x5e04e6(0x1d1)]&&console[_0x5e04e6(0x1d9)](_0x5e04e6(0x19b)+s['actualHours']+_0x5e04e6(0x1da));if(s[_0x5e04e6(0x1de)]&&s[_0x5e04e6(0x1d1)]){let t=((s[_0x5e04e6(0x1d1)]-s[_0x5e04e6(0x1de)])/s['estimatedHours']*0x64)[_0x5e04e6(0x1b7)](0x1);console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1dc)+s['estimatedHours']+_0x5e04e6(0x1bc)+t+'%');}var h=(e[_0x5e04e6(0x1b8)]['completed']/e[_0x5e04e6(0x1b8)][_0x5e04e6(0x1dd)]*0x64)[_0x5e04e6(0x1b7)](0x1);console[_0x5e04e6(0x1d9)]('\x0a📈\x20Project\x20progress:\x20'+e[_0x5e04e6(0x1b8)][_0x5e04e6(0x1e5)]+'/'+e[_0x5e04e6(0x1b8)][_0x5e04e6(0x1dd)]+_0x5e04e6(0x1e7)+h+_0x5e04e6(0x1a6));var c=e[_0x5e04e6(0x1cc)]['find'](_0x2adfc1=>_0x2adfc1['status']===_0x5e04e6(0x1e2));function _0x34a5(){var _0x5283c7=['2251855kwdpec','find','actualHours','34809NUGpdJ','filter','9987042cOqPQN','warn','constructor','readFileSync','in_progress','log','\x20hours','QtblS','📊\x20Estimated:\x20','totalTasks','estimatedHours','\x20\x20git\x20add\x20.','14lEGdGe','Vhtwv','pending','Usage:\x20npm\x20run\x20task:done\x20TASK-001\x0a','cUMVd','completed','toISOString','\x20tasks\x20(','blocked','448980XbJbXY','\x0aUncommitted\x20files:','\x20is\x20already\x20completed','apply','\x22\x20is\x20not\x20supported','\x0a❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes','exit','Dynamic\x20require\x20of\x20\x22','stringify','trim','RtMOl','existsSync','completedAt','Initialize\x20first:\x20npm\x20run\x20plan:init\x0a','⏱️\x20\x20Time\x20taken:\x20','path','Cqsub','YtZfc','WfjJh','writeFileSync','📌\x20','encoding','6690988pMKTjZ','\x20\x20git\x20commit\x20-m\x20\x22[','\x0a✅\x20Task\x20','%)\x0a','argv','FdhGc','\x0a⚠️\x20\x20WARNING:\x20Could\x20not\x20check\x20git\x20status','✅\x20Tracker\x20already\x20synchronized\x0a','join','activeTask','\x0a❌\x20ERROR:\x20Task\x20ID\x20required','wKRID','git\x20status\x20--porcelain','Plan:\x20','✅\x20Tracker\x20synchronized\x0a',']\x20Description\x20of\x20changes\x22','30813584UZIWSx','\x0aCommit\x20all\x20changes\x20before\x20completing\x20task:','.json','\x0a✅\x20Completed\x20task:\x20','toFixed','statistics','startedAt','round','error','h\x20|\x20Variance:\x20','.claude/plans','iQaQi','.claude/ACTIVE-PLAN','length','24680GrJYgh','utf8','status','\x0a❌\x20ERROR:\x20Task\x20tracker\x20not\x20found','toString','🎉\x20ALL\x20TASKS\x20COMPLETED!\x20Project\x20finished.\x0a','iTzQS','TASK-TRACKER.json','parse','📋\x20Plan:\x20','(((.+)+)+)+$','taskFiles','title','search'];_0x34a5=function(){return _0x5283c7;};return _0x34a5();}c?(console['log']('📌\x20Next\x20task\x20available:'),console[_0x5e04e6(0x1d9)]('\x20\x20'+c['id']+':\x20'+c[_0x5e04e6(0x1cd)]),console[_0x5e04e6(0x1d9)]('\x20\x20Start:\x20npm\x20run\x20task:next\x0a')):e[_0x5e04e6(0x1b8)][_0x5e04e6(0x1e5)]===e['statistics'][_0x5e04e6(0x1dd)]&&console[_0x5e04e6(0x1d9)](_0x5e04e6(0x1c6)),process[_0x5e04e6(0x1ef)](0x0);
@@ -1,2 +1,2 @@
1
1
  #!/usr/bin/env node
2
- var _0x2233a0=_0x5891;(function(_0x5d4a20,_0x56a910){var _0x71f51d=_0x5891,_0x3a4201=_0x5d4a20();while(!![]){try{var _0x578e38=-parseInt(_0x71f51d(0x175))/0x1*(parseInt(_0x71f51d(0x14d))/0x2)+parseInt(_0x71f51d(0x160))/0x3*(parseInt(_0x71f51d(0x13b))/0x4)+-parseInt(_0x71f51d(0x13c))/0x5*(-parseInt(_0x71f51d(0x16f))/0x6)+parseInt(_0x71f51d(0x14b))/0x7*(-parseInt(_0x71f51d(0x156))/0x8)+-parseInt(_0x71f51d(0x173))/0x9*(parseInt(_0x71f51d(0x15e))/0xa)+-parseInt(_0x71f51d(0x177))/0xb+-parseInt(_0x71f51d(0x133))/0xc*(-parseInt(_0x71f51d(0x170))/0xd);if(_0x578e38===_0x56a910)break;else _0x3a4201['push'](_0x3a4201['shift']());}catch(_0x2cbe3a){_0x3a4201['push'](_0x3a4201['shift']());}}}(_0xcdca,0x462cc));var _0x3c3be5=(function(){var _0x40407a=_0x5891,_0x3904ed={'HFUwp':_0x40407a(0x13e),'elnky':function(_0x59fc19,_0x1c91f6,_0x3733b5){return _0x59fc19(_0x1c91f6,_0x3733b5);},'sdEVK':_0x40407a(0x142),'CKjpc':_0x40407a(0x152),'yDfhq':_0x40407a(0x140),'YJmtH':_0x40407a(0x13d),'eSuOt':function(_0x388daa,_0xc3a51c){return _0x388daa!==_0xc3a51c;},'iZRtS':_0x40407a(0x163)},_0x1ae91a=!![];return function(_0x27ddeb,_0x35789f){var _0xb799a7=_0x40407a,_0x3aa293={'LTLPb':function(_0x560426,_0x3b4754,_0x590e35){var _0x4ab496=_0x5891;return _0x3904ed[_0x4ab496(0x14e)](_0x560426,_0x3b4754,_0x590e35);},'uWnDN':_0x3904ed[_0xb799a7(0x139)],'OXUBx':_0x3904ed['CKjpc'],'QGLjo':'Uncommitted\x20migration\x20files\x20detected','Ybbhp':_0x3904ed[_0xb799a7(0x16c)],'zhNcr':function(_0x18ef14,_0x34420a){return _0x18ef14===_0x34420a;},'aUklu':_0x3904ed[_0xb799a7(0x168)],'XphvK':'NqgZZ'};if(_0x3904ed['eSuOt'](_0x3904ed['iZRtS'],_0xb799a7(0x163)))return _0x58dca2['toString']()[_0xb799a7(0x15f)](_0x3904ed[_0xb799a7(0x16b)])['toString']()[_0xb799a7(0x154)](_0x4dc7f3)[_0xb799a7(0x15f)](_0x3904ed['HFUwp']);else{var _0x1f581b=_0x1ae91a?function(){var _0x877a63=_0xb799a7;if(_0x3aa293[_0x877a63(0x15b)](_0x3aa293['aUklu'],_0x3aa293[_0x877a63(0x14a)]))_0x3aa293['LTLPb'](_0x592b04,_0x3aa293[_0x877a63(0x132)],{'encoding':_0x3aa293['OXUBx']})[_0x877a63(0x174)](/migrations?\//)&&(_0x1c655e[_0x877a63(0x144)](_0x3aa293[_0x877a63(0x169)]),_0x311237[_0x877a63(0x144)](_0x3aa293['Ybbhp']));else{if(_0x35789f){var _0x311c16=_0x35789f['apply'](_0x27ddeb,arguments);return _0x35789f=null,_0x311c16;}}}:function(){};return _0x1ae91a=![],_0x1f581b;}};}()),_0x363c43=_0x3c3be5(this,function(){var _0xfa3ee1=_0x5891,_0x277e24={};_0x277e24[_0xfa3ee1(0x157)]=_0xfa3ee1(0x13e);var _0x5bf00c=_0x277e24;return _0x363c43[_0xfa3ee1(0x171)]()[_0xfa3ee1(0x15f)](_0x5bf00c[_0xfa3ee1(0x157)])[_0xfa3ee1(0x171)]()[_0xfa3ee1(0x154)](_0x363c43)['search'](_0x5bf00c[_0xfa3ee1(0x157)]);});_0x363c43();var e=(_0xbd9a72=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0xbd9a72,{'get':(_0xe36960,_0x52f07c)=>(typeof require<'u'?require:_0xe36960)[_0x52f07c]}):_0xbd9a72)(function(_0x33c203){var _0x3df656=_0x5891,_0x3cd86a={'GRsnw':function(_0x346584,_0x596680){return _0x346584(_0x596680);},'QgXRY':function(_0x354199,_0x16eee1){return _0x354199+_0x16eee1;},'aImxJ':'\x22\x20is\x20not\x20supported'};if(typeof require<'u')return require['apply'](this,arguments);throw _0x3cd86a[_0x3df656(0x134)](Error,_0x3cd86a[_0x3df656(0x162)](_0x3df656(0x147),_0x33c203)+_0x3cd86a[_0x3df656(0x148)]);}),p=e('fs'),h=e(_0x2233a0(0x14f)),{execSync:l}=e(_0x2233a0(0x149)),u=process[_0x2233a0(0x15c)][0x2]||'{}',s=JSON[_0x2233a0(0x141)](u),i=s[_0x2233a0(0x138)]?.[_0x2233a0(0x13a)]||'';function _0x5891(_0x553188,_0x4f1d85){_0x553188=_0x553188-0x132;var _0x1188eb=_0xcdca();var _0x363c43=_0x1188eb[_0x553188];return _0x363c43;}i['match'](/migrate|migration/i)||process['exit'](0x0);var n=[],t=[],a=s[_0x2233a0(0x135)]||'';function _0xcdca(){var _0x4f1ca8=['path','\x0a⚠️\x20\x20MIGRATION\x20WORKFLOW\x20WARNINGS\x0a','length','utf8','\x0a❌\x20MIGRATION\x20WORKFLOW\x20FAILED\x0a','constructor','warn','408032FtbMIN','IROUG','BLOCKED:\x20Migration\x20execution\x20failed','\x20\x20\x20\x20\x203.\x20Check\x20for\x20type\x20errors:\x20npm\x20run\x20build','Use\x20deployment\x20pipeline\x20to\x20run\x20production\x20migrations','zhNcr','argv','Fix\x20migration\x20errors\x20before\x20proceeding','10fYtmMA','search','831qFEHif','\x0a🔄\x20MIGRATION\x20WORKFLOW\x20VALIDATION\x0a','QgXRY','pxhqT','error','production','BLOCKED:\x20Cannot\x20run\x20migrations\x20directly\x20in\x20production','After\x20migration,\x20run\x20npm\x20test\x20to\x20verify\x20schema\x20compatibility','YJmtH','QGLjo','\x20\x20✅\x20Migration\x20rollback\x20successful\x0a','HFUwp','yDfhq','log','Uncommitted\x20migration\x20files\x20detected','1264782dKZazl','26dYtswq','toString','\x20\x20\x20\x20\x204.\x20Test\x20rollback:\x20npm\x20run\x20migrate:down\x20(or\x20equivalent)\x0a','4049307txkseB','match','503IFVxqU','\x20\x20\x20\x20\x202.\x20Verify\x20all\x20tests\x20pass\x20with\x20new\x20schema','555049qjFlpV','uWnDN','5166036aCKzei','GRsnw','tool_output','forEach','test','tool_input','sdEVK','command','4516LqfYqF','10HvrcNh','tovRu','(((.+)+)+)+$','Database\x20may\x20be\x20in\x20inconsistent\x20state','Commit\x20migrations\x20to\x20version\x20control\x20before\x20running\x20them','parse','git\x20status\x20--short','NODE_ENV','push','\x20\x20⚠️\x20\x20After\x20running\x20migrations,\x20you\x20MUST:\x0a','\x20\x20Environment:\x20','Dynamic\x20require\x20of\x20\x22','aImxJ','child_process','XphvK','42SeMNZd','exit','1994Gwdike','elnky'];_0xcdca=function(){return _0x4f1ca8;};return _0xcdca();}console['log'](_0x2233a0(0x161));try{let o=process['env'][_0x2233a0(0x143)]||'development';console['log'](_0x2233a0(0x146)+o),o===_0x2233a0(0x165)&&(n[_0x2233a0(0x144)](_0x2233a0(0x166)),n['push']('Migrations\x20must\x20be\x20tested\x20in\x20development/staging\x20first'),n[_0x2233a0(0x144)](_0x2233a0(0x15a)));}catch{}try{var _0x28dd81={};_0x28dd81['encoding']=_0x2233a0(0x152),l('git\x20status\x20--short',_0x28dd81)[_0x2233a0(0x174)](/migrations?\//)&&(t[_0x2233a0(0x144)](_0x2233a0(0x16e)),t['push']('Commit\x20migrations\x20to\x20version\x20control\x20before\x20running\x20them'));}catch{}var g=[/error/i,/failed/i,/exception/i,/syntax error/i,/constraint/i];for(let o of g)if(o[_0x2233a0(0x137)](a)){n[_0x2233a0(0x144)](_0x2233a0(0x158)),n[_0x2233a0(0x144)](_0x2233a0(0x15d)),n[_0x2233a0(0x144)]('Check\x20database\x20logs\x20for\x20details');break;}i[_0x2233a0(0x174)](/migrate.*up|migration.*run/i)&&(console[_0x2233a0(0x16d)](_0x2233a0(0x145)),console[_0x2233a0(0x16d)]('\x20\x20\x20\x20\x201.\x20Run:\x20npm\x20test'),console[_0x2233a0(0x16d)](_0x2233a0(0x176)),console[_0x2233a0(0x16d)](_0x2233a0(0x159)),console['log'](_0x2233a0(0x172)),t[_0x2233a0(0x144)](_0x2233a0(0x167))),i[_0x2233a0(0x174)](/migrate.*down|migration.*rollback/i)&&(console[_0x2233a0(0x16d)]('\x20\x20🔙\x20Rolling\x20back\x20migration...\x0a'),a['match'](/error|failed/i)?(n[_0x2233a0(0x144)]('BLOCKED:\x20Migration\x20rollback\x20failed'),n[_0x2233a0(0x144)](_0x2233a0(0x13f)),n[_0x2233a0(0x144)]('Manual\x20intervention\x20required')):console[_0x2233a0(0x16d)](_0x2233a0(0x16a))),n[_0x2233a0(0x151)]>0x0&&(console[_0x2233a0(0x164)](_0x2233a0(0x153)),n[_0x2233a0(0x136)](_0x350960=>console[_0x2233a0(0x164)]('\x20\x20'+_0x350960)),console[_0x2233a0(0x164)]('\x0a'),process['exit'](0x2)),t[_0x2233a0(0x151)]>0x0&&(console[_0x2233a0(0x155)](_0x2233a0(0x150)),t[_0x2233a0(0x136)](_0x1f2b60=>console['warn']('\x20\x20'+_0x1f2b60)),console[_0x2233a0(0x155)]('\x0a')),process[_0x2233a0(0x14c)](0x0);
2
+ var _0x1bcf99=_0x287a;(function(_0x4ee6e1,_0x7da514){var _0x410bb9=_0x287a,_0x181bef=_0x4ee6e1();while(!![]){try{var _0x3fb984=parseInt(_0x410bb9(0x229))/0x1*(-parseInt(_0x410bb9(0x200))/0x2)+parseInt(_0x410bb9(0x1f7))/0x3*(-parseInt(_0x410bb9(0x233))/0x4)+-parseInt(_0x410bb9(0x21d))/0x5*(parseInt(_0x410bb9(0x20a))/0x6)+-parseInt(_0x410bb9(0x21c))/0x7*(parseInt(_0x410bb9(0x22b))/0x8)+parseInt(_0x410bb9(0x231))/0x9*(-parseInt(_0x410bb9(0x210))/0xa)+-parseInt(_0x410bb9(0x236))/0xb+parseInt(_0x410bb9(0x232))/0xc;if(_0x3fb984===_0x7da514)break;else _0x181bef['push'](_0x181bef['shift']());}catch(_0x116e68){_0x181bef['push'](_0x181bef['shift']());}}}(_0x278d,0xd442b));var _0x33deb4=(function(){var _0x7db972=_0x287a,_0x5c6417={'aanSK':function(_0x159343,_0x26f21c){return _0x159343<_0x26f21c;},'dgpEv':function(_0x1d1ba1,_0x1a9ea4){return _0x1d1ba1(_0x1a9ea4);},'wxHgK':function(_0x578e27,_0x5cad56){return _0x578e27+_0x5cad56;},'JyPTO':_0x7db972(0x1f0),'BwpNj':'\x22\x20is\x20not\x20supported','Lxiak':function(_0x4392f6,_0x568c6d){return _0x4392f6===_0x568c6d;},'jCBLE':_0x7db972(0x223),'wJiYE':'Migrations\x20must\x20be\x20tested\x20in\x20development/staging\x20first','JHZwu':_0x7db972(0x21a),'BMaKk':'BbELI','oKvry':_0x7db972(0x20f),'ErjOz':_0x7db972(0x1ff),'IykRH':_0x7db972(0x201)},_0xb073ba=!![];return function(_0x1661cc,_0x4f5d80){var _0x832593=_0x7db972,_0x4f0e5f={'wxMfl':function(_0x1bb361,_0x4f4358){return _0x5c6417['Lxiak'](_0x1bb361,_0x4f4358);},'TVyKX':_0x5c6417['jCBLE'],'zEePa':_0x832593(0x230),'lvRzJ':_0x5c6417['wJiYE'],'MVqYD':_0x5c6417[_0x832593(0x206)],'Wszrn':function(_0x2a796c,_0x5c1e40){return _0x2a796c===_0x5c1e40;},'IweYn':_0x5c6417[_0x832593(0x212)],'IJyVF':_0x5c6417[_0x832593(0x228)]};if(_0x5c6417['ErjOz']===_0x5c6417['IykRH']){if(_0x5c6417[_0x832593(0x20e)](typeof _0x483672,'u'))return _0x26785c['apply'](this,arguments);throw _0x5c6417[_0x832593(0x23a)](_0x5cd4a7,_0x5c6417[_0x832593(0x21f)](_0x5c6417[_0x832593(0x21f)](_0x5c6417[_0x832593(0x224)],_0x1210dd),_0x5c6417[_0x832593(0x21e)]));}else{var _0x54b973=_0xb073ba?function(){var _0x3fb457=_0x832593;if(_0x4f0e5f['wxMfl'](_0x3fb457(0x22d),_0x4f0e5f[_0x3fb457(0x1ed)])){var _0x2aefcb=_0x576c59?function(){var _0x5149f1=_0x3fb457;if(_0x3f3bf5){var _0x423e3f=_0x7418df[_0x5149f1(0x1fb)](_0x3ac63a,arguments);return _0x4a8f8f=null,_0x423e3f;}}:function(){};return _0x35fe4e=![],_0x2aefcb;}else{if(_0x4f5d80){if(_0x4f0e5f[_0x3fb457(0x1eb)](_0x4f0e5f[_0x3fb457(0x222)],_0x4f0e5f[_0x3fb457(0x203)])){let _0x41e73e=_0x2c440c[_0x3fb457(0x208)]['NODE_ENV']||_0x3fb457(0x213);_0x2369d4[_0x3fb457(0x239)]('\x20\x20Environment:\x20'+_0x41e73e),_0x4f0e5f[_0x3fb457(0x22a)](_0x41e73e,_0x4f0e5f['TVyKX'])&&(_0x5719e1['push'](_0x4f0e5f[_0x3fb457(0x1f3)]),_0xc410d0[_0x3fb457(0x214)](_0x4f0e5f[_0x3fb457(0x237)]),_0xfd1901[_0x3fb457(0x214)](_0x3fb457(0x20d)));}else{var _0x51aa4a=_0x4f5d80[_0x3fb457(0x1fb)](_0x1661cc,arguments);return _0x4f5d80=null,_0x51aa4a;}}}}:function(){};return _0xb073ba=![],_0x54b973;}};}()),_0x55206c=_0x33deb4(this,function(){var _0x24b3d3=_0x287a,_0x5a5d44={};_0x5a5d44['Alagz']=_0x24b3d3(0x1fd);var _0x53e8b9=_0x5a5d44;return _0x55206c[_0x24b3d3(0x225)]()[_0x24b3d3(0x20b)](_0x53e8b9[_0x24b3d3(0x220)])['toString']()[_0x24b3d3(0x1fe)](_0x55206c)[_0x24b3d3(0x20b)](_0x53e8b9[_0x24b3d3(0x220)]);});_0x55206c();var e=(_0x496356=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x496356,{'get':(_0x2fd53a,_0x442392)=>(typeof require<'u'?require:_0x2fd53a)[_0x442392]}):_0x496356)(function(_0x2a87d6){var _0x167e6f=_0x287a,_0x526ce9={'kvPbK':function(_0x19ec8f,_0x5435e8){return _0x19ec8f<_0x5435e8;},'cISTZ':function(_0x499b07,_0x1cc35f){return _0x499b07(_0x1cc35f);},'clDSN':function(_0xbe7a22,_0x5508d0){return _0xbe7a22+_0x5508d0;},'WjJbk':_0x167e6f(0x1f1)};if(_0x526ce9[_0x167e6f(0x1fc)](typeof require,'u'))return require[_0x167e6f(0x1fb)](this,arguments);throw _0x526ce9[_0x167e6f(0x1ee)](Error,_0x526ce9['clDSN'](_0x526ce9[_0x167e6f(0x1f4)](_0x167e6f(0x1f0),_0x2a87d6),_0x526ce9[_0x167e6f(0x235)]));}),p=e('fs'),h=e(_0x1bcf99(0x1ea)),{execSync:l}=e('child_process'),u=process[_0x1bcf99(0x22c)][0x2]||'{}',s=JSON['parse'](u),i=s[_0x1bcf99(0x1f6)]?.[_0x1bcf99(0x23b)]||'';i['match'](/migrate|migration/i)||process[_0x1bcf99(0x211)](0x0);function _0x287a(_0x161874,_0x227417){_0x161874=_0x161874-0x1ea;var _0x4573d7=_0x278d();var _0x55206c=_0x4573d7[_0x161874];return _0x55206c;}var n=[],t=[],a=s[_0x1bcf99(0x238)]||'';console[_0x1bcf99(0x239)](_0x1bcf99(0x227));try{let o=process['env'][_0x1bcf99(0x226)]||'development';console[_0x1bcf99(0x239)](_0x1bcf99(0x207)+o),o==='production'&&(n[_0x1bcf99(0x214)]('BLOCKED:\x20Cannot\x20run\x20migrations\x20directly\x20in\x20production'),n[_0x1bcf99(0x214)](_0x1bcf99(0x23c)),n[_0x1bcf99(0x214)](_0x1bcf99(0x20d)));}catch{}try{var _0x2202b9={};_0x2202b9[_0x1bcf99(0x217)]='utf8',l('git\x20status\x20--short',_0x2202b9)[_0x1bcf99(0x1f9)](/migrations?\//)&&(t['push'](_0x1bcf99(0x216)),t[_0x1bcf99(0x214)](_0x1bcf99(0x20c)));}catch{}function _0x278d(){var _0x485d15=['oKSZR','\x20\x20🔙\x20Rolling\x20back\x20migration...\x0a','42SrtoIe','1146135wIWkgh','BwpNj','wxHgK','Alagz','BLOCKED:\x20Migration\x20rollback\x20failed','IweYn','production','JyPTO','toString','NODE_ENV','\x0a🔄\x20MIGRATION\x20WORKFLOW\x20VALIDATION\x0a','oKvry','187970njQLfh','wxMfl','1893352YCrQLE','argv','JyzuF','Check\x20database\x20logs\x20for\x20details','\x20\x20\x20\x20\x203.\x20Check\x20for\x20type\x20errors:\x20npm\x20run\x20build','BLOCKED:\x20Cannot\x20run\x20migrations\x20directly\x20in\x20production','106560fWdJtq','89157180LAkBwK','1431992HmqAdQ','Fix\x20migration\x20errors\x20before\x20proceeding','WjJbk','15298646jvlxDi','lvRzJ','tool_output','log','dgpEv','command','Migrations\x20must\x20be\x20tested\x20in\x20development/staging\x20first','path','Wszrn','BLOCKED:\x20Migration\x20execution\x20failed','MVqYD','cISTZ','\x20\x20⚠️\x20\x20After\x20running\x20migrations,\x20you\x20MUST:\x0a','Dynamic\x20require\x20of\x20\x22','\x22\x20is\x20not\x20supported','forEach','zEePa','clDSN','length','tool_input','3AkxlPW','\x0a⚠️\x20\x20MIGRATION\x20WORKFLOW\x20WARNINGS\x0a','match','Manual\x20intervention\x20required','apply','kvPbK','(((.+)+)+)+$','constructor','XFYVG','16JIarTI','VatfY','\x20\x20\x20\x20\x202.\x20Verify\x20all\x20tests\x20pass\x20with\x20new\x20schema','IJyVF','\x0a❌\x20MIGRATION\x20WORKFLOW\x20FAILED\x0a','error','JHZwu','\x20\x20Environment:\x20','env','\x20\x20\x20\x20\x204.\x20Test\x20rollback:\x20npm\x20run\x20migrate:down\x20(or\x20equivalent)\x0a','24nTDfxY','search','Commit\x20migrations\x20to\x20version\x20control\x20before\x20running\x20them','Use\x20deployment\x20pipeline\x20to\x20run\x20production\x20migrations','aanSK','GAvqr','820ysTJSP','exit','BMaKk','development','push','After\x20migration,\x20run\x20npm\x20test\x20to\x20verify\x20schema\x20compatibility','Uncommitted\x20migration\x20files\x20detected','encoding','test','warn'];_0x278d=function(){return _0x485d15;};return _0x278d();}var g=[/error/i,/failed/i,/exception/i,/syntax error/i,/constraint/i];for(let o of g)if(o[_0x1bcf99(0x218)](a)){n[_0x1bcf99(0x214)](_0x1bcf99(0x1ec)),n[_0x1bcf99(0x214)](_0x1bcf99(0x234)),n[_0x1bcf99(0x214)](_0x1bcf99(0x22e));break;}i[_0x1bcf99(0x1f9)](/migrate.*up|migration.*run/i)&&(console[_0x1bcf99(0x239)](_0x1bcf99(0x1ef)),console[_0x1bcf99(0x239)]('\x20\x20\x20\x20\x201.\x20Run:\x20npm\x20test'),console[_0x1bcf99(0x239)](_0x1bcf99(0x202)),console[_0x1bcf99(0x239)](_0x1bcf99(0x22f)),console[_0x1bcf99(0x239)](_0x1bcf99(0x209)),t[_0x1bcf99(0x214)](_0x1bcf99(0x215))),i['match'](/migrate.*down|migration.*rollback/i)&&(console[_0x1bcf99(0x239)](_0x1bcf99(0x21b)),a[_0x1bcf99(0x1f9)](/error|failed/i)?(n[_0x1bcf99(0x214)](_0x1bcf99(0x221)),n['push']('Database\x20may\x20be\x20in\x20inconsistent\x20state'),n[_0x1bcf99(0x214)](_0x1bcf99(0x1fa))):console['log']('\x20\x20✅\x20Migration\x20rollback\x20successful\x0a')),n['length']>0x0&&(console[_0x1bcf99(0x205)](_0x1bcf99(0x204)),n[_0x1bcf99(0x1f2)](_0x4992b0=>console['error']('\x20\x20'+_0x4992b0)),console[_0x1bcf99(0x205)]('\x0a'),process[_0x1bcf99(0x211)](0x2)),t[_0x1bcf99(0x1f5)]>0x0&&(console[_0x1bcf99(0x219)](_0x1bcf99(0x1f8)),t['forEach'](_0x2da80e=>console[_0x1bcf99(0x219)]('\x20\x20'+_0x2da80e)),console[_0x1bcf99(0x219)]('\x0a')),process['exit'](0x0);