gl-life-claude-zen 1.0.3 → 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 _0x27d7b4=_0x3d97;(function(_0x570c74,_0xd5c80f){var _0xc70f8b=_0x3d97,_0x5babbd=_0x570c74();while(!![]){try{var _0x585045=-parseInt(_0xc70f8b(0x1df))/0x1+-parseInt(_0xc70f8b(0x1ed))/0x2*(parseInt(_0xc70f8b(0x1e7))/0x3)+-parseInt(_0xc70f8b(0x1fa))/0x4+-parseInt(_0xc70f8b(0x1e9))/0x5*(parseInt(_0xc70f8b(0x1fe))/0x6)+-parseInt(_0xc70f8b(0x1e3))/0x7*(-parseInt(_0xc70f8b(0x1ef))/0x8)+parseInt(_0xc70f8b(0x1f9))/0x9+parseInt(_0xc70f8b(0x1ea))/0xa*(parseInt(_0xc70f8b(0x1e8))/0xb);if(_0x585045===_0xd5c80f)break;else _0x5babbd['push'](_0x5babbd['shift']());}catch(_0x1c6b89){_0x5babbd['push'](_0x5babbd['shift']());}}}(_0x3c58,0x5822c));var _0x55c671=(function(){var _0xd876df=_0x3d97,_0x5cba1f={};_0x5cba1f[_0xd876df(0x1e1)]=function(_0x43cddc,_0x1ae235){return _0x43cddc===_0x1ae235;},_0x5cba1f[_0xd876df(0x200)]=_0xd876df(0x1f1);var _0x1d54f3=_0x5cba1f,_0x1a94b1=!![];return function(_0x1e3406,_0x136c7d){var _0x347ae7=_0x1a94b1?function(){var _0x667959=_0x3d97;if(_0x1d54f3['GQUcs'](_0x1d54f3['ZZEGv'],_0x1d54f3['ZZEGv'])){if(_0x136c7d){var _0x49eb88=_0x136c7d[_0x667959(0x1f4)](_0x1e3406,arguments);return _0x136c7d=null,_0x49eb88;}}else{if(_0x537dbb){var _0x33d3bf=_0xc7d1cf[_0x667959(0x1f4)](_0x9a02c3,arguments);return _0x75f116=null,_0x33d3bf;}}}:function(){};return _0x1a94b1=![],_0x347ae7;};}()),_0x4b0564=_0x55c671(this,function(){var _0x2d61f3=_0x3d97,_0x3ea002={};_0x3ea002[_0x2d61f3(0x1fc)]=_0x2d61f3(0x1fd);var _0x546ca7=_0x3ea002;return _0x4b0564[_0x2d61f3(0x201)]()[_0x2d61f3(0x1eb)](_0x546ca7['fdIwr'])[_0x2d61f3(0x201)]()[_0x2d61f3(0x1f2)](_0x4b0564)['search'](_0x546ca7[_0x2d61f3(0x1fc)]);});_0x4b0564();function _0x3d97(_0x4d78fb,_0x5b7c95){_0x4d78fb=_0x4d78fb-0x1db;var _0x518ba8=_0x3c58();var _0x4b0564=_0x518ba8[_0x4d78fb];return _0x4b0564;}var r=(_0x5b1999=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x5b1999,{'get':(_0x241d3f,_0x37eb5a)=>(typeof require<'u'?require:_0x241d3f)[_0x37eb5a]}):_0x5b1999)(function(_0x26c511){var _0x42d501=_0x3d97,_0x1a6c27={'eNDXd':function(_0x1956fc,_0x13eee8){return _0x1956fc<_0x13eee8;},'Fkbnd':function(_0x50684b,_0x12d3e6){return _0x50684b(_0x12d3e6);},'tLiTC':function(_0x19f778,_0x6c6e31){return _0x19f778+_0x6c6e31;},'IYycC':_0x42d501(0x1de),'cgwgS':_0x42d501(0x1f6)};if(_0x1a6c27[_0x42d501(0x1f0)](typeof require,'u'))return require['apply'](this,arguments);throw _0x1a6c27[_0x42d501(0x1e5)](Error,_0x1a6c27[_0x42d501(0x1ec)](_0x1a6c27[_0x42d501(0x1f3)],_0x26c511)+_0x1a6c27['cgwgS']);}),{execSync:e}=r('child_process'),i=r('fs'),c=process[_0x27d7b4(0x1e2)][0x2]||'{}',a=JSON[_0x27d7b4(0x1dd)](c),t=a[_0x27d7b4(0x1f8)]?.[_0x27d7b4(0x202)];function _0x3c58(){var _0x33071e=['stdio','\x22\x20is\x20not\x20supported','Warning:\x20Could\x20not\x20format\x20','tool_input','1211229acjDUU','470868PzZjQO','ignore','fdIwr','(((.+)+)+)+$','420iVsoZM','npx\x20prettier\x20--write\x20\x22','ZZEGv','toString','file_path','log','match','npx\x20prettier\x20--version','parse','Dynamic\x20require\x20of\x20\x22','230747RKGLBc','Formatted:\x20','GQUcs','argv','266UohoDa','exit','Fkbnd','existsSync','27nFpKDp','11LAxJuL','45280QdtUsR','16186580eTSHmQ','search','tLiTC','119882hBQXNt','python\x20-m\x20black\x20--version','27288DlLGVm','eNDXd','thRXQ','constructor','IYycC','apply'];_0x3c58=function(){return _0x33071e;};return _0x3c58();}(!t||!i[_0x27d7b4(0x1e6)](t))&&process[_0x27d7b4(0x1e4)](0x0);try{if(t[_0x27d7b4(0x1db)](/\.(ts|tsx|js|jsx|json)$/))try{var _0x477f11={};_0x477f11['stdio']=_0x27d7b4(0x1fb);var _0x13c94b={};_0x13c94b[_0x27d7b4(0x1f5)]=_0x27d7b4(0x1fb),(e(_0x27d7b4(0x1dc),_0x477f11),e(_0x27d7b4(0x1ff)+t+'\x22',_0x13c94b),console['log'](_0x27d7b4(0x1e0)+t));}catch{}else{if(t[_0x27d7b4(0x1db)](/\.py$/))try{var _0x319a47={};_0x319a47['stdio']=_0x27d7b4(0x1fb);var _0x1de411={};_0x1de411[_0x27d7b4(0x1f5)]='ignore',(e(_0x27d7b4(0x1ee),_0x319a47),e('python\x20-m\x20black\x20\x22'+t+'\x22',_0x1de411),console[_0x27d7b4(0x203)](_0x27d7b4(0x1e0)+t));}catch{}}}catch{console['warn'](_0x27d7b4(0x1f7)+t);}process[_0x27d7b4(0x1e4)](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 _0x423695=_0x40a3;(function(_0x2ba13a,_0x54f7ae){var _0x2c214d=_0x40a3,_0x474241=_0x2ba13a();while(!![]){try{var _0x36a39b=parseInt(_0x2c214d(0x1fc))/0x1*(parseInt(_0x2c214d(0x208))/0x2)+parseInt(_0x2c214d(0x202))/0x3*(parseInt(_0x2c214d(0x1b9))/0x4)+-parseInt(_0x2c214d(0x201))/0x5*(-parseInt(_0x2c214d(0x204))/0x6)+parseInt(_0x2c214d(0x1c8))/0x7*(parseInt(_0x2c214d(0x1db))/0x8)+-parseInt(_0x2c214d(0x1ed))/0x9+-parseInt(_0x2c214d(0x1f7))/0xa+-parseInt(_0x2c214d(0x1d7))/0xb*(parseInt(_0x2c214d(0x1fa))/0xc);if(_0x36a39b===_0x54f7ae)break;else _0x474241['push'](_0x474241['shift']());}catch(_0x396b46){_0x474241['push'](_0x474241['shift']());}}}(_0x3153,0x22962));var _0x4e4d11=(function(){var _0x400159=_0x40a3,_0x55d6ba={};_0x55d6ba[_0x400159(0x1cc)]=_0x400159(0x1b1),_0x55d6ba[_0x400159(0x1f6)]=function(_0x48310c,_0x59c64a){return _0x48310c!==_0x59c64a;},_0x55d6ba[_0x400159(0x1dc)]=_0x400159(0x1d1);var _0x18bcef=_0x55d6ba,_0x52ab4e=!![];return function(_0x5d7742,_0x3616bb){var _0x4dbfc2=_0x400159;if(_0x18bcef[_0x4dbfc2(0x1f6)](_0x18bcef[_0x4dbfc2(0x1dc)],_0x18bcef['wjSnw']))return _0x46f69d[_0x4dbfc2(0x1f9)]()[_0x4dbfc2(0x1b5)](_0x18bcef[_0x4dbfc2(0x1cc)])[_0x4dbfc2(0x1f9)]()[_0x4dbfc2(0x1ce)](_0xf037f5)[_0x4dbfc2(0x1b5)](_0x18bcef[_0x4dbfc2(0x1cc)]);else{var _0x52067f=_0x52ab4e?function(){var _0x2ba1d4=_0x4dbfc2;if(_0x3616bb){var _0x258df3=_0x3616bb[_0x2ba1d4(0x1af)](_0x5d7742,arguments);return _0x3616bb=null,_0x258df3;}}:function(){};return _0x52ab4e=![],_0x52067f;}};}()),_0x215695=_0x4e4d11(this,function(){var _0x50ad77=_0x40a3,_0x3a8c9f={};_0x3a8c9f[_0x50ad77(0x1e1)]=_0x50ad77(0x1b1);var _0x16cc09=_0x3a8c9f;return _0x215695[_0x50ad77(0x1f9)]()['search'](_0x16cc09[_0x50ad77(0x1e1)])[_0x50ad77(0x1f9)]()[_0x50ad77(0x1ce)](_0x215695)['search'](_0x16cc09[_0x50ad77(0x1e1)]);});_0x215695();var i=(_0x47ffa0=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x47ffa0,{'get':(_0x3a196a,_0x3274a6)=>(typeof require<'u'?require:_0x3a196a)[_0x3274a6]}):_0x47ffa0)(function(_0x3cfe35){var _0xd5b44e=_0x40a3,_0x59e6b0={'eIrJJ':function(_0x38ddb2,_0x58044c){return _0x38ddb2<_0x58044c;},'akQFl':function(_0x442192,_0x406a9d){return _0x442192(_0x406a9d);},'jHGQa':_0xd5b44e(0x1e5)};if(_0x59e6b0[_0xd5b44e(0x1ff)](typeof require,'u'))return require['apply'](this,arguments);throw _0x59e6b0[_0xd5b44e(0x1c3)](Error,_0x59e6b0['jHGQa']+_0x3cfe35+_0xd5b44e(0x1b3));}),n=i('fs'),d=i(_0x423695(0x1fb)),a=process[_0x423695(0x1fe)][0x2];a||(console['error']('\x0a❌\x20ERROR:\x20Task\x20ID\x20required'),console[_0x423695(0x1fd)](_0x423695(0x1da)),process[_0x423695(0x203)](0x1));var p=_0x423695(0x1f1);n[_0x423695(0x1d3)](p)||(console[_0x423695(0x1fd)]('\x0a❌\x20ERROR:\x20No\x20active\x20plan\x20found'),console[_0x423695(0x1fd)](_0x423695(0x1f5)),process[_0x423695(0x203)](0x1));var u=n[_0x423695(0x1eb)](p,_0x423695(0x206))[_0x423695(0x1bd)](),k=d[_0x423695(0x1be)](_0x423695(0x1ee),u),r=d[_0x423695(0x1be)](k,_0x423695(0x1d8)),l=d[_0x423695(0x1be)](k,_0x423695(0x1de),a+_0x423695(0x1c1));function _0x40a3(_0x18b40b,_0x1e9045){_0x18b40b=_0x18b40b-0x1ae;var _0x20bd81=_0x3153();var _0x215695=_0x20bd81[_0x18b40b];return _0x215695;}n[_0x423695(0x1d3)](r)||(console['error'](_0x423695(0x1d5)),console[_0x423695(0x1fd)](_0x423695(0x1c9)+u),console['error']('Initialize\x20first:\x20npm\x20run\x20plan:init\x0a'),process[_0x423695(0x203)](0x1)),n['existsSync'](l)||(console['error'](_0x423695(0x205)+l+'\x0a'),process[_0x423695(0x203)](0x1));var e=JSON[_0x423695(0x1ef)](n[_0x423695(0x1eb)](r,_0x423695(0x206))),s=JSON[_0x423695(0x1ef)](n[_0x423695(0x1eb)](l,_0x423695(0x206))),f=s['status']===_0x423695(0x1cb);if(f){console[_0x423695(0x1bb)]('\x0a✅\x20Task\x20'+a+_0x423695(0x1cf)),console[_0x423695(0x1bb)](_0x423695(0x1c4));let t=e['taskFiles'][_0x423695(0x1c2)](_0x1c5c81=>_0x1c5c81['id']===a);t&&t[_0x423695(0x1b4)]!==_0x423695(0x1cb)?(t['status']=_0x423695(0x1cb),e[_0x423695(0x1e0)]={'totalTasks':e[_0x423695(0x1e9)]['length'],'pending':e[_0x423695(0x1e9)][_0x423695(0x1f0)](_0x24d52e=>_0x24d52e[_0x423695(0x1b4)]===_0x423695(0x1d9))['length'],'inProgress':e['taskFiles'][_0x423695(0x1f0)](_0x77128f=>_0x77128f['status']===_0x423695(0x1ec))[_0x423695(0x1dd)],'completed':e[_0x423695(0x1e9)]['filter'](_0xed3052=>_0xed3052[_0x423695(0x1b4)]===_0x423695(0x1cb))[_0x423695(0x1dd)],'blocked':e[_0x423695(0x1e9)]['filter'](_0x3bf229=>_0x3bf229['status']===_0x423695(0x200))[_0x423695(0x1dd)]},e[_0x423695(0x1e3)]=null,e['lastUpdated']=new Date()[_0x423695(0x1bc)](),n[_0x423695(0x1d6)](r,JSON[_0x423695(0x1b6)](e,null,0x2)),console[_0x423695(0x1bb)](_0x423695(0x1c6))):console[_0x423695(0x1bb)](_0x423695(0x1e8)),process[_0x423695(0x203)](0x0);}var {execSync:S}=i('child_process');try{var _0x39f54f={};_0x39f54f[_0x423695(0x1ba)]=_0x423695(0x206);let t=S(_0x423695(0x1d2),_0x39f54f);t[_0x423695(0x1bd)]()&&(console[_0x423695(0x1fd)]('\x0a❌\x20ERROR:\x20You\x20have\x20uncommitted\x20changes'),console[_0x423695(0x1fd)]('\x0aUncommitted\x20files:'),console[_0x423695(0x1fd)](t),console[_0x423695(0x1fd)](_0x423695(0x1ca)),console[_0x423695(0x1fd)]('\x20\x20git\x20add\x20.'),console[_0x423695(0x1fd)]('\x20\x20git\x20commit\x20-m\x20\x22['+a+']\x20Description\x20of\x20changes\x22'),console[_0x423695(0x1fd)](''),process['exit'](0x1));}catch{console[_0x423695(0x1e2)](_0x423695(0x1b2)),console[_0x423695(0x1e2)](_0x423695(0x207));}s[_0x423695(0x1b4)]=_0x423695(0x1cb),s['completedAt']=new Date()[_0x423695(0x1bc)]();if(s[_0x423695(0x1b7)]){let t=new Date(s[_0x423695(0x1b7)]),o=new Date(s[_0x423695(0x1f3)]);s[_0x423695(0x1c5)]=Math[_0x423695(0x1d4)]((o-t)/(0x3e8*0x3c*0x3c)*0xa)/0xa;}n['writeFileSync'](l,JSON[_0x423695(0x1b6)](s,null,0x2)),e['activeTask']=null,e[_0x423695(0x1f2)]=new Date()[_0x423695(0x1bc)]();var g=e[_0x423695(0x1e9)]['find'](_0x361c8c=>_0x361c8c['id']===a);g&&(g[_0x423695(0x1b4)]=_0x423695(0x1cb)),e[_0x423695(0x1e0)]={'totalTasks':e['taskFiles']['length'],'pending':e[_0x423695(0x1e9)][_0x423695(0x1f0)](_0x27d37c=>_0x27d37c[_0x423695(0x1b4)]===_0x423695(0x1d9))[_0x423695(0x1dd)],'inProgress':e[_0x423695(0x1e9)][_0x423695(0x1f0)](_0x2dfdc5=>_0x2dfdc5[_0x423695(0x1b4)]===_0x423695(0x1ec))[_0x423695(0x1dd)],'completed':e[_0x423695(0x1e9)][_0x423695(0x1f0)](_0x76c401=>_0x76c401[_0x423695(0x1b4)]===_0x423695(0x1cb))['length'],'blocked':e[_0x423695(0x1e9)][_0x423695(0x1f0)](_0xadc9f0=>_0xadc9f0[_0x423695(0x1b4)]===_0x423695(0x200))[_0x423695(0x1dd)]},n[_0x423695(0x1d6)](r,JSON[_0x423695(0x1b6)](e,null,0x2)),console['log'](_0x423695(0x1f8)+a),console[_0x423695(0x1bb)](_0x423695(0x1ea)+u+'\x0a'),console[_0x423695(0x1bb)]('📌\x20'+s[_0x423695(0x1f4)]),s[_0x423695(0x1c5)]&&console[_0x423695(0x1bb)](_0x423695(0x1bf)+s[_0x423695(0x1c5)]+_0x423695(0x209));if(s[_0x423695(0x1df)]&&s[_0x423695(0x1c5)]){let t=((s['actualHours']-s[_0x423695(0x1df)])/s['estimatedHours']*0x64)[_0x423695(0x1cd)](0x1);console[_0x423695(0x1bb)](_0x423695(0x1d0)+s[_0x423695(0x1df)]+_0x423695(0x1e7)+t+'%');}var h=(e[_0x423695(0x1e0)]['completed']/e[_0x423695(0x1e0)][_0x423695(0x1c0)]*0x64)[_0x423695(0x1cd)](0x1);console['log'](_0x423695(0x1e4)+e['statistics'][_0x423695(0x1cb)]+'/'+e['statistics'][_0x423695(0x1c0)]+_0x423695(0x1b8)+h+_0x423695(0x1e6));function _0x3153(){var _0xbc1098=['254480HMBJND','12Oqgpsy','exit','6XJIEkA','\x0a❌\x20ERROR:\x20Task\x20file\x20not\x20found:\x20','utf8','Make\x20sure\x20all\x20changes\x20are\x20committed!\x0a','6070jqGYeW','\x20hours','\x20\x20Start:\x20npm\x20run\x20task:next\x0a','apply','📌\x20Next\x20task\x20available:','(((.+)+)+)+$','\x0a⚠️\x20\x20WARNING:\x20Could\x20not\x20check\x20git\x20status','\x22\x20is\x20not\x20supported','status','search','stringify','startedAt','\x20tasks\x20(','232784tuGpTX','encoding','log','toISOString','trim','join','⏱️\x20\x20Time\x20taken:\x20','totalTasks','.json','find','akQFl','Syncing\x20tracker\x20status...\x0a','actualHours','✅\x20Tracker\x20synchronized\x0a','🎉\x20ALL\x20TASKS\x20COMPLETED!\x20Project\x20finished.\x0a','1235759DHLubW','Plan:\x20','\x0aCommit\x20all\x20changes\x20before\x20completing\x20task:','completed','VrpDl','toFixed','constructor','\x20is\x20already\x20completed','📊\x20Estimated:\x20','SCPGh','git\x20status\x20--porcelain','existsSync','round','\x0a❌\x20ERROR:\x20Task\x20tracker\x20not\x20found','writeFileSync','11PYYEQp','TASK-TRACKER.json','pending','Usage:\x20npm\x20run\x20task:done\x20TASK-001\x0a','8UOpdCa','wjSnw','length','tasks','estimatedHours','statistics','qenSL','warn','activeTask','\x0a📈\x20Project\x20progress:\x20','Dynamic\x20require\x20of\x20\x22','%)\x0a','h\x20|\x20Variance:\x20','✅\x20Tracker\x20already\x20synchronized\x0a','taskFiles','📋\x20Plan:\x20','readFileSync','in_progress','792009EFBWJQ','.claude/plans','parse','filter','.claude/ACTIVE-PLAN','lastUpdated','completedAt','title','Set\x20active\x20plan\x20first:\x20npm\x20run\x20plan:manager\x0a','dcrIT','1735210pcqzyk','\x0a✅\x20Completed\x20task:\x20','toString','3452268BdNJUJ','path','76wafwJd','error','argv','eIrJJ','blocked'];_0x3153=function(){return _0xbc1098;};return _0x3153();}var c=e[_0x423695(0x1e9)][_0x423695(0x1c2)](_0x2ef2da=>_0x2ef2da['status']===_0x423695(0x1d9));c?(console[_0x423695(0x1bb)](_0x423695(0x1b0)),console['log']('\x20\x20'+c['id']+':\x20'+c['title']),console[_0x423695(0x1bb)](_0x423695(0x1ae))):e['statistics'][_0x423695(0x1cb)]===e['statistics'][_0x423695(0x1c0)]&&console['log'](_0x423695(0x1c7)),process[_0x423695(0x203)](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 _0x2eb9e2=_0x2443;(function(_0x5c982a,_0x40083e){var _0x3d0182=_0x2443,_0x4bc483=_0x5c982a();while(!![]){try{var _0x1394e9=-parseInt(_0x3d0182(0x1b1))/0x1+-parseInt(_0x3d0182(0x1df))/0x2*(-parseInt(_0x3d0182(0x1c3))/0x3)+parseInt(_0x3d0182(0x1bc))/0x4+parseInt(_0x3d0182(0x1e0))/0x5*(-parseInt(_0x3d0182(0x1b8))/0x6)+parseInt(_0x3d0182(0x1b3))/0x7+parseInt(_0x3d0182(0x1cc))/0x8+parseInt(_0x3d0182(0x1c5))/0x9;if(_0x1394e9===_0x40083e)break;else _0x4bc483['push'](_0x4bc483['shift']());}catch(_0x55a8bd){_0x4bc483['push'](_0x4bc483['shift']());}}}(_0x41b3,0x6f229));var _0x6b04df=(function(){var _0x592e70=!![];return function(_0x92d569,_0x3d570d){if('AHWlH'==='AHWlH'){var _0x1bf39f=_0x592e70?function(){var _0x15a297=_0x2443;if(_0x3d570d){var _0x2aba1f=_0x3d570d[_0x15a297(0x1c1)](_0x92d569,arguments);return _0x3d570d=null,_0x2aba1f;}}:function(){};return _0x592e70=![],_0x1bf39f;}else{var _0x46e5d9=_0x2c90cc?function(){if(_0x3c68b3){var _0x34df99=_0xe36368['apply'](_0x576ba3,arguments);return _0x4ffe71=null,_0x34df99;}}:function(){};return _0x30552b=![],_0x46e5d9;}};}()),_0x21aed7=_0x6b04df(this,function(){var _0x14591a=_0x2443,_0x58e31e={};_0x58e31e[_0x14591a(0x1dc)]='(((.+)+)+)+$';var _0x40bb30=_0x58e31e;return _0x21aed7[_0x14591a(0x1ad)]()[_0x14591a(0x1bb)](_0x40bb30[_0x14591a(0x1dc)])['toString']()['constructor'](_0x21aed7)[_0x14591a(0x1bb)](_0x40bb30[_0x14591a(0x1dc)]);});_0x21aed7();function _0x41b3(){var _0x5e3d58=['NODE_ENV','path','sJwsP','Fix\x20migration\x20errors\x20before\x20proceeding','parse','TfYwH','command','forEach','BLOCKED:\x20Migration\x20execution\x20failed','\x20\x20\x20\x20\x202.\x20Verify\x20all\x20tests\x20pass\x20with\x20new\x20schema','\x20\x20✅\x20Migration\x20rollback\x20successful\x0a','BydCA','error','Database\x20may\x20be\x20in\x20inconsistent\x20state','27248wmEsUH','4580BIIKzG','git\x20status\x20--short','\x0a🔄\x20MIGRATION\x20WORKFLOW\x20VALIDATION\x0a','toString','\x20\x20Environment:\x20','env','\x20\x20\x20\x20\x204.\x20Test\x20rollback:\x20npm\x20run\x20migrate:down\x20(or\x20equivalent)\x0a','543141NepXzz','length','672917PrXwnS','\x20\x20\x20\x20\x201.\x20Run:\x20npm\x20test','child_process','push','Check\x20database\x20logs\x20for\x20details','2634DJaQAt','\x22\x20is\x20not\x20supported','production','search','181800scFSkZ','test','development','warn','argv','apply','tool_output','189RKGbpo','Manual\x20intervention\x20required','3361599LaPfZT','match','Migrations\x20must\x20be\x20tested\x20in\x20development/staging\x20first','vAAlr','log','BLOCKED:\x20Migration\x20rollback\x20failed','After\x20migration,\x20run\x20npm\x20test\x20to\x20verify\x20schema\x20compatibility','216560pTlyGL','\x0a❌\x20MIGRATION\x20WORKFLOW\x20FAILED\x0a','Uncommitted\x20migration\x20files\x20detected','encoding','exit'];_0x41b3=function(){return _0x5e3d58;};return _0x41b3();}var e=(_0x1fca5d=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x1fca5d,{'get':(_0xba7f54,_0x5abe9b)=>(typeof require<'u'?require:_0xba7f54)[_0x5abe9b]}):_0x1fca5d)(function(_0x58d0ec){var _0x5b4293=_0x2443,_0x138b9a={'IsOVh':function(_0x191be4,_0x1c36e0){return _0x191be4<_0x1c36e0;},'sJwsP':function(_0x2dec64,_0x56f90f){return _0x2dec64(_0x56f90f);},'vAAlr':function(_0x3c8d27,_0x147e71){return _0x3c8d27+_0x147e71;},'TfYwH':'Dynamic\x20require\x20of\x20\x22','CjStu':_0x5b4293(0x1b9)};if(_0x138b9a['IsOVh'](typeof require,'u'))return require[_0x5b4293(0x1c1)](this,arguments);throw _0x138b9a[_0x5b4293(0x1d3)](Error,_0x138b9a[_0x5b4293(0x1c8)](_0x138b9a[_0x5b4293(0x1d6)]+_0x58d0ec,_0x138b9a['CjStu']));}),p=e('fs'),h=e(_0x2eb9e2(0x1d2)),{execSync:l}=e(_0x2eb9e2(0x1b5)),u=process[_0x2eb9e2(0x1c0)][0x2]||'{}',s=JSON[_0x2eb9e2(0x1d5)](u),i=s['tool_input']?.[_0x2eb9e2(0x1d7)]||'';i[_0x2eb9e2(0x1c6)](/migrate|migration/i)||process['exit'](0x0);var n=[],t=[],a=s[_0x2eb9e2(0x1c2)]||'';function _0x2443(_0x48e01f,_0xb6e109){_0x48e01f=_0x48e01f-0x1ac;var _0x9f711a=_0x41b3();var _0x21aed7=_0x9f711a[_0x48e01f];return _0x21aed7;}console['log'](_0x2eb9e2(0x1ac));try{let o=process[_0x2eb9e2(0x1af)][_0x2eb9e2(0x1d1)]||_0x2eb9e2(0x1be);console['log'](_0x2eb9e2(0x1ae)+o),o===_0x2eb9e2(0x1ba)&&(n[_0x2eb9e2(0x1b6)]('BLOCKED:\x20Cannot\x20run\x20migrations\x20directly\x20in\x20production'),n['push'](_0x2eb9e2(0x1c7)),n[_0x2eb9e2(0x1b6)]('Use\x20deployment\x20pipeline\x20to\x20run\x20production\x20migrations'));}catch{}try{var _0x2b7478={};_0x2b7478[_0x2eb9e2(0x1cf)]='utf8',l(_0x2eb9e2(0x1e1),_0x2b7478)[_0x2eb9e2(0x1c6)](/migrations?\//)&&(t['push'](_0x2eb9e2(0x1ce)),t[_0x2eb9e2(0x1b6)]('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[_0x2eb9e2(0x1bd)](a)){n[_0x2eb9e2(0x1b6)](_0x2eb9e2(0x1d9)),n[_0x2eb9e2(0x1b6)](_0x2eb9e2(0x1d4)),n['push'](_0x2eb9e2(0x1b7));break;}i[_0x2eb9e2(0x1c6)](/migrate.*up|migration.*run/i)&&(console[_0x2eb9e2(0x1c9)]('\x20\x20⚠️\x20\x20After\x20running\x20migrations,\x20you\x20MUST:\x0a'),console[_0x2eb9e2(0x1c9)](_0x2eb9e2(0x1b4)),console['log'](_0x2eb9e2(0x1da)),console[_0x2eb9e2(0x1c9)]('\x20\x20\x20\x20\x203.\x20Check\x20for\x20type\x20errors:\x20npm\x20run\x20build'),console[_0x2eb9e2(0x1c9)](_0x2eb9e2(0x1b0)),t[_0x2eb9e2(0x1b6)](_0x2eb9e2(0x1cb))),i[_0x2eb9e2(0x1c6)](/migrate.*down|migration.*rollback/i)&&(console['log']('\x20\x20🔙\x20Rolling\x20back\x20migration...\x0a'),a['match'](/error|failed/i)?(n['push'](_0x2eb9e2(0x1ca)),n['push'](_0x2eb9e2(0x1de)),n['push'](_0x2eb9e2(0x1c4))):console[_0x2eb9e2(0x1c9)](_0x2eb9e2(0x1db))),n[_0x2eb9e2(0x1b2)]>0x0&&(console[_0x2eb9e2(0x1dd)](_0x2eb9e2(0x1cd)),n[_0x2eb9e2(0x1d8)](_0x332a2e=>console[_0x2eb9e2(0x1dd)]('\x20\x20'+_0x332a2e)),console[_0x2eb9e2(0x1dd)]('\x0a'),process[_0x2eb9e2(0x1d0)](0x2)),t[_0x2eb9e2(0x1b2)]>0x0&&(console['warn']('\x0a⚠️\x20\x20MIGRATION\x20WORKFLOW\x20WARNINGS\x0a'),t[_0x2eb9e2(0x1d8)](_0x43ab27=>console[_0x2eb9e2(0x1bf)]('\x20\x20'+_0x43ab27)),console[_0x2eb9e2(0x1bf)]('\x0a')),process[_0x2eb9e2(0x1d0)](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);