@agentic15.com/agentic15-claude-zen 1.0.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.
- package/CHANGELOG.md +45 -0
- package/LICENSE +201 -0
- package/README.md +204 -0
- package/bin/create-agentic15-claude-zen.js +201 -0
- package/dist/hooks/auto-format.js +2 -0
- package/dist/hooks/check-pending-reviews.js +2 -0
- package/dist/hooks/complete-task.js +2 -0
- package/dist/hooks/detect-pending-reviews.js +2 -0
- package/dist/hooks/enforce-hard-requirements.js +2 -0
- package/dist/hooks/enforce-migration-workflow.js +2 -0
- package/dist/hooks/enforce-plan-template.js +2 -0
- package/dist/hooks/enforce-structured-development.js +2 -0
- package/dist/hooks/enforce-test-pyramid.js +2 -0
- package/dist/hooks/init-task-tracker.js +2 -0
- package/dist/hooks/performance-cache.js +2 -0
- package/dist/hooks/prevent-read-bypass.js +2 -0
- package/dist/hooks/session-start-context.js +2 -0
- package/dist/hooks/start-task.js +2 -0
- package/dist/hooks/task-status.js +2 -0
- package/dist/hooks/validate-component-contract.js +2 -0
- package/dist/hooks/validate-database-changes.js +2 -0
- package/dist/hooks/validate-e2e-coverage.js +2 -0
- package/dist/hooks/validate-git-workflow.js +2 -0
- package/dist/hooks/validate-integration-site.js +2 -0
- package/dist/hooks/validate-migration-impact.js +2 -0
- package/dist/hooks/validate-task-completion.js +2 -0
- package/dist/hooks/validate-test-quality.js +2 -0
- package/dist/hooks/validate-test-results.js +2 -0
- package/dist/hooks/validate-ui-integration.js +2 -0
- package/dist/hooks/validate-ui-runtime.js +2 -0
- package/dist/hooks/validate-ui-syntax.js +2 -0
- package/dist/hooks/validate-ui-visual-native.js +2 -0
- package/dist/hooks/validate-ui-visual.js +2 -0
- package/dist/hooks/validate-visual-regression.js +2 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +7 -0
- package/dist/scripts/add-version-headers.js +2 -0
- package/dist/scripts/help.js +2 -0
- package/dist/scripts/plan-amend.js +2 -0
- package/dist/scripts/plan-create.js +2 -0
- package/dist/scripts/plan-generate.js +2 -0
- package/dist/scripts/plan-help.js +2 -0
- package/dist/scripts/plan-init.js +2 -0
- package/dist/scripts/plan-manager.js +2 -0
- package/dist/scripts/pre-publish-checklist.js +2 -0
- package/dist/scripts/production-test.js +2 -0
- package/dist/scripts/profile-hooks.js +2 -0
- package/dist/scripts/setup-git-hooks.js +2 -0
- package/dist/scripts/task-done.js +2 -0
- package/dist/scripts/task-merge.js +2 -0
- package/dist/scripts/task-next.js +2 -0
- package/dist/scripts/task-start.js +2 -0
- package/dist/scripts/task-status.js +2 -0
- package/dist/scripts/verify-hooks.js +2 -0
- package/package.json +61 -0
- package/src/core/DependencyInstaller.js +41 -0
- package/src/core/GitInitializer.js +45 -0
- package/src/core/HookInstaller.js +54 -0
- package/src/core/ProjectInitializer.js +105 -0
- package/src/core/TemplateManager.js +159 -0
- package/src/index.js +56 -0
- package/templates/.babelrc +6 -0
- package/templates/.claude/CLAUDE.md +408 -0
- package/templates/.claude/ONBOARDING.md +723 -0
- package/templates/.claude/PLAN-SCHEMA.json +240 -0
- package/templates/.claude/POST-INSTALL.md +248 -0
- package/templates/.claude/PROJECT-PLAN-TEMPLATE.json +223 -0
- package/templates/.claude/hooks/enforce-plan-template.js +106 -0
- package/templates/.claude/hooks/session-start-context.js +130 -0
- package/templates/.claude/hooks/validate-git-workflow.js +74 -0
- package/templates/.claude/settings.json +262 -0
- package/templates/.gitignore +14 -0
- package/templates/Agent/.gitkeep +3 -0
- package/templates/README.md +76 -0
- package/templates/__mocks__/fileMock.js +9 -0
- package/templates/jest.config.js +48 -0
- package/templates/jest.setup.js +13 -0
- package/templates/package.json +40 -0
- package/templates/scripts/.gitkeep +3 -0
- package/templates/test-site/README.md +271 -0
- package/templates/test-site/index.html +13 -0
- package/templates/test-site/package.json +25 -0
- package/templates/test-site/server.js +125 -0
- package/templates/test-site/src/App.css +130 -0
- package/templates/test-site/src/App.jsx +78 -0
- package/templates/test-site/src/index.css +39 -0
- package/templates/test-site/src/main.jsx +10 -0
- package/templates/test-site/vite.config.js +12 -0
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
|
+
|
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
|
+
|
|
8
|
+
## [1.0.0] - 2025-12-24
|
|
9
|
+
|
|
10
|
+
### Added
|
|
11
|
+
- Initial release of Agentic15 Claude Zen framework
|
|
12
|
+
- Structured project planning with hierarchical organization (Project ā Subproject ā Milestone ā Task)
|
|
13
|
+
- Automated quality enforcement through Git hooks
|
|
14
|
+
- Smart testing that runs only changed files during commits
|
|
15
|
+
- UI component workflow enforcement (component + test + integration site)
|
|
16
|
+
- Framework-agnostic support (React, Vue, Angular, Svelte)
|
|
17
|
+
- Complete Jest + Babel configuration for testing
|
|
18
|
+
- Token-optimized prompts with caching support
|
|
19
|
+
- Minified and bundled hooks for fast execution
|
|
20
|
+
- Comprehensive documentation and examples
|
|
21
|
+
- Post-install guide for quick setup
|
|
22
|
+
- Task management scripts (start, done, next, status)
|
|
23
|
+
- Plan management scripts (generate, init, amend)
|
|
24
|
+
- Integration testing site for UI previews
|
|
25
|
+
- Dependency tracking and validation
|
|
26
|
+
- Progress monitoring and time estimation
|
|
27
|
+
|
|
28
|
+
### Features
|
|
29
|
+
- **Pre-commit hooks** validate tests, code quality, and UI components
|
|
30
|
+
- **Smart testing** runs only changed files during commits (scales to 43,000+ line codebases)
|
|
31
|
+
- **Test quality validation** blocks empty tests and missing assertions
|
|
32
|
+
- **UI integration validation** enforces complete component workflow
|
|
33
|
+
- **Immutable plans** with audit trail for amendments
|
|
34
|
+
- **SOLID architecture** with clean separation of concerns
|
|
35
|
+
|
|
36
|
+
### Documentation
|
|
37
|
+
- Getting Started guide
|
|
38
|
+
- User Workflows documentation
|
|
39
|
+
- Agent Workflows documentation
|
|
40
|
+
- Plan Management guide
|
|
41
|
+
- Task Management guide
|
|
42
|
+
- Test Execution strategies
|
|
43
|
+
- Architecture documentation with SOLID principles
|
|
44
|
+
|
|
45
|
+
[1.0.0]: https://github.com/agentic15/claude-zen/releases/tag/v1.0.0
|
package/LICENSE
ADDED
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
Apache License
|
|
2
|
+
Version 2.0, January 2004
|
|
3
|
+
http://www.apache.org/licenses/
|
|
4
|
+
|
|
5
|
+
TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
|
|
6
|
+
|
|
7
|
+
1. Definitions.
|
|
8
|
+
|
|
9
|
+
"License" shall mean the terms and conditions for use, reproduction,
|
|
10
|
+
and distribution as defined by Sections 1 through 9 of this document.
|
|
11
|
+
|
|
12
|
+
"Licensor" shall mean the copyright owner or entity authorized by
|
|
13
|
+
the copyright owner that is granting the License.
|
|
14
|
+
|
|
15
|
+
"Legal Entity" shall mean the union of the acting entity and all
|
|
16
|
+
other entities that control, are controlled by, or are under common
|
|
17
|
+
control with that entity. For the purposes of this definition,
|
|
18
|
+
"control" means (i) the power, direct or indirect, to cause the
|
|
19
|
+
direction or management of such entity, whether by contract or
|
|
20
|
+
otherwise, or (ii) ownership of fifty percent (50%) or more of the
|
|
21
|
+
outstanding shares, or (iii) beneficial ownership of such entity.
|
|
22
|
+
|
|
23
|
+
"You" (or "Your") shall mean an individual or Legal Entity
|
|
24
|
+
exercising permissions granted by this License.
|
|
25
|
+
|
|
26
|
+
"Source" form shall mean the preferred form for making modifications,
|
|
27
|
+
including but not limited to software source code, documentation
|
|
28
|
+
source, and configuration files.
|
|
29
|
+
|
|
30
|
+
"Object" form shall mean any form resulting from mechanical
|
|
31
|
+
transformation or translation of a Source form, including but
|
|
32
|
+
not limited to compiled object code, generated documentation,
|
|
33
|
+
and conversions to other media types.
|
|
34
|
+
|
|
35
|
+
"Work" shall mean the work of authorship, whether in Source or
|
|
36
|
+
Object form, made available under the License, as indicated by a
|
|
37
|
+
copyright notice that is included in or attached to the work
|
|
38
|
+
(an example is provided in the Appendix below).
|
|
39
|
+
|
|
40
|
+
"Derivative Works" shall mean any work, whether in Source or Object
|
|
41
|
+
form, that is based on (or derived from) the Work and for which the
|
|
42
|
+
editorial revisions, annotations, elaborations, or other modifications
|
|
43
|
+
represent, as a whole, an original work of authorship. For the purposes
|
|
44
|
+
of this License, Derivative Works shall not include works that remain
|
|
45
|
+
separable from, or merely link (or bind by name) to the interfaces of,
|
|
46
|
+
the Work and Derivative Works thereof.
|
|
47
|
+
|
|
48
|
+
"Contribution" shall mean any work of authorship, including
|
|
49
|
+
the original version of the Work and any modifications or additions
|
|
50
|
+
to that Work or Derivative Works thereof, that is intentionally
|
|
51
|
+
submitted to Licensor for inclusion in the Work by the copyright owner
|
|
52
|
+
or by an individual or Legal Entity authorized to submit on behalf of
|
|
53
|
+
the copyright owner. For the purposes of this definition, "submitted"
|
|
54
|
+
means any form of electronic, verbal, or written communication sent
|
|
55
|
+
to the Licensor or its representatives, including but not limited to
|
|
56
|
+
communication on electronic mailing lists, source code control systems,
|
|
57
|
+
and issue tracking systems that are managed by, or on behalf of, the
|
|
58
|
+
Licensor for the purpose of discussing and improving the Work, but
|
|
59
|
+
excluding communication that is conspicuously marked or otherwise
|
|
60
|
+
designated in writing by the copyright owner as "Not a Contribution."
|
|
61
|
+
|
|
62
|
+
"Contributor" shall mean Licensor and any individual or Legal Entity
|
|
63
|
+
on behalf of whom a Contribution has been received by Licensor and
|
|
64
|
+
subsequently incorporated within the Work.
|
|
65
|
+
|
|
66
|
+
2. Grant of Copyright License. Subject to the terms and conditions of
|
|
67
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
68
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
69
|
+
copyright license to reproduce, prepare Derivative Works of,
|
|
70
|
+
publicly display, publicly perform, sublicense, and distribute the
|
|
71
|
+
Work and such Derivative Works in Source or Object form.
|
|
72
|
+
|
|
73
|
+
3. Grant of Patent License. Subject to the terms and conditions of
|
|
74
|
+
this License, each Contributor hereby grants to You a perpetual,
|
|
75
|
+
worldwide, non-exclusive, no-charge, royalty-free, irrevocable
|
|
76
|
+
(except as stated in this section) patent license to make, have made,
|
|
77
|
+
use, offer to sell, sell, import, and otherwise transfer the Work,
|
|
78
|
+
where such license applies only to those patent claims licensable
|
|
79
|
+
by such Contributor that are necessarily infringed by their
|
|
80
|
+
Contribution(s) alone or by combination of their Contribution(s)
|
|
81
|
+
with the Work to which such Contribution(s) was submitted. If You
|
|
82
|
+
institute patent litigation against any entity (including a
|
|
83
|
+
cross-claim or counterclaim in a lawsuit) alleging that the Work
|
|
84
|
+
or a Contribution incorporated within the Work constitutes direct
|
|
85
|
+
or contributory patent infringement, then any patent licenses
|
|
86
|
+
granted to You under this License for that Work shall terminate
|
|
87
|
+
as of the date such litigation is filed.
|
|
88
|
+
|
|
89
|
+
4. Redistribution. You may reproduce and distribute copies of the
|
|
90
|
+
Work or Derivative Works thereof in any medium, with or without
|
|
91
|
+
modifications, and in Source or Object form, provided that You
|
|
92
|
+
meet the following conditions:
|
|
93
|
+
|
|
94
|
+
(a) You must give any other recipients of the Work or
|
|
95
|
+
Derivative Works a copy of this License; and
|
|
96
|
+
|
|
97
|
+
(b) You must cause any modified files to carry prominent notices
|
|
98
|
+
stating that You changed the files; and
|
|
99
|
+
|
|
100
|
+
(c) You must retain, in the Source form of any Derivative Works
|
|
101
|
+
that You distribute, all copyright, patent, trademark, and
|
|
102
|
+
attribution notices from the Source form of the Work,
|
|
103
|
+
excluding those notices that do not pertain to any part of
|
|
104
|
+
the Derivative Works; and
|
|
105
|
+
|
|
106
|
+
(d) If the Work includes a "NOTICE" file as part of its
|
|
107
|
+
distribution, then any Derivative Works that You distribute must
|
|
108
|
+
include a readable copy of the attribution notices contained
|
|
109
|
+
within such NOTICE file, excluding those notices that do not
|
|
110
|
+
pertain to any part of the Derivative Works, in at least one
|
|
111
|
+
of the following places: within a NOTICE text file distributed
|
|
112
|
+
as part of the Derivative Works; within the Source form or
|
|
113
|
+
documentation, if provided along with the Derivative Works; or,
|
|
114
|
+
within a display generated by the Derivative Works, if and
|
|
115
|
+
wherever such third-party notices normally appear. The contents
|
|
116
|
+
of the NOTICE file are for informational purposes only and
|
|
117
|
+
do not modify the License. You may add Your own attribution
|
|
118
|
+
notices within Derivative Works that You distribute, alongside
|
|
119
|
+
or as an addendum to the NOTICE text from the Work, provided
|
|
120
|
+
that such additional attribution notices cannot be construed
|
|
121
|
+
as modifying the License.
|
|
122
|
+
|
|
123
|
+
You may add Your own copyright statement to Your modifications and
|
|
124
|
+
may provide additional or different license terms and conditions
|
|
125
|
+
for use, reproduction, or distribution of Your modifications, or
|
|
126
|
+
for any such Derivative Works as a whole, provided Your use,
|
|
127
|
+
reproduction, and distribution of the Work otherwise complies with
|
|
128
|
+
the conditions stated in this License.
|
|
129
|
+
|
|
130
|
+
5. Submission of Contributions. Unless You explicitly state otherwise,
|
|
131
|
+
any Contribution intentionally submitted for inclusion in the Work
|
|
132
|
+
by You to the Licensor shall be under the terms and conditions of
|
|
133
|
+
this License, without any additional terms or conditions.
|
|
134
|
+
Notwithstanding the above, nothing herein shall supersede or modify
|
|
135
|
+
the terms of any separate license agreement you may have executed
|
|
136
|
+
with Licensor regarding such Contributions.
|
|
137
|
+
|
|
138
|
+
6. Trademarks. This License does not grant permission to use the trade
|
|
139
|
+
names, trademarks, service marks, or product names of the Licensor,
|
|
140
|
+
except as required for reasonable and customary use in describing the
|
|
141
|
+
origin of the Work and reproducing the content of the NOTICE file.
|
|
142
|
+
|
|
143
|
+
7. Disclaimer of Warranty. Unless required by applicable law or
|
|
144
|
+
agreed to in writing, Licensor provides the Work (and each
|
|
145
|
+
Contributor provides its Contributions) on an "AS IS" BASIS,
|
|
146
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
|
|
147
|
+
implied, including, without limitation, any warranties or conditions
|
|
148
|
+
of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
|
|
149
|
+
PARTICULAR PURPOSE. You are solely responsible for determining the
|
|
150
|
+
appropriateness of using or redistributing the Work and assume any
|
|
151
|
+
risks associated with Your exercise of permissions under this License.
|
|
152
|
+
|
|
153
|
+
8. Limitation of Liability. In no event and under no legal theory,
|
|
154
|
+
whether in tort (including negligence), contract, or otherwise,
|
|
155
|
+
unless required by applicable law (such as deliberate and grossly
|
|
156
|
+
negligent acts) or agreed to in writing, shall any Contributor be
|
|
157
|
+
liable to You for damages, including any direct, indirect, special,
|
|
158
|
+
incidental, or consequential damages of any character arising as a
|
|
159
|
+
result of this License or out of the use or inability to use the
|
|
160
|
+
Work (including but not limited to damages for loss of goodwill,
|
|
161
|
+
work stoppage, computer failure or malfunction, or any and all
|
|
162
|
+
other commercial damages or losses), even if such Contributor
|
|
163
|
+
has been advised of the possibility of such damages.
|
|
164
|
+
|
|
165
|
+
9. Accepting Warranty or Additional Liability. While redistributing
|
|
166
|
+
the Work or Derivative Works thereof, You may choose to offer,
|
|
167
|
+
and charge a fee for, acceptance of support, warranty, indemnity,
|
|
168
|
+
or other liability obligations and/or rights consistent with this
|
|
169
|
+
License. However, in accepting such obligations, You may act only
|
|
170
|
+
on Your own behalf and on Your sole responsibility, not on behalf
|
|
171
|
+
of any other Contributor, and only if You agree to indemnify,
|
|
172
|
+
defend, and hold each Contributor harmless for any liability
|
|
173
|
+
incurred by, or claims asserted against, such Contributor by reason
|
|
174
|
+
of your accepting any such warranty or additional liability.
|
|
175
|
+
|
|
176
|
+
END OF TERMS AND CONDITIONS
|
|
177
|
+
|
|
178
|
+
APPENDIX: How to apply the Apache License to your work.
|
|
179
|
+
|
|
180
|
+
To apply the Apache License to your work, attach the following
|
|
181
|
+
boilerplate notice, with the fields enclosed by brackets "[]"
|
|
182
|
+
replaced with your own identifying information. (Don't include
|
|
183
|
+
the brackets!) The text should be enclosed in the appropriate
|
|
184
|
+
comment syntax for the file format. We also recommend that a
|
|
185
|
+
file or class name and description of purpose be included on the
|
|
186
|
+
same "printed page" as the copyright notice for easier
|
|
187
|
+
identification within third-party archives.
|
|
188
|
+
|
|
189
|
+
Copyright 2024-2025 Agentic15
|
|
190
|
+
|
|
191
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
192
|
+
you may not use this file except in compliance with the License.
|
|
193
|
+
You may obtain a copy of the License at
|
|
194
|
+
|
|
195
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
196
|
+
|
|
197
|
+
Unless required by applicable law or agreed to in writing, software
|
|
198
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
199
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
200
|
+
See the License for the specific language governing permissions and
|
|
201
|
+
limitations under the License.
|
package/README.md
ADDED
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
# Agentic15 Claude Zen
|
|
2
|
+
|
|
3
|
+
> **Code with Intelligence, Ship with Confidence**
|
|
4
|
+
|
|
5
|
+
[](https://opensource.org/licenses/Apache-2.0)
|
|
6
|
+
[](https://www.npmjs.com/package/@agentic15.com/agentic15-claude-zen)
|
|
7
|
+
[](https://github.com/agentic15/claude-zen/stargazers)
|
|
8
|
+
|
|
9
|
+
**Agentic15 Claude Zen** is a professional, enterprise-grade framework for structured AI-assisted software development with Claude Code. It enforces quality standards, automates testing, and ensures every commit meets production requirements.
|
|
10
|
+
|
|
11
|
+
## šÆ What is Agentic15 Claude Zen?
|
|
12
|
+
|
|
13
|
+
A comprehensive development framework that transforms Claude Code into a disciplined, production-ready development environment through:
|
|
14
|
+
|
|
15
|
+
- **Structured Project Management**: Hierarchical plans, task tracking, and progress monitoring
|
|
16
|
+
- **Automated Quality Enforcement**: Git hooks that validate tests, code quality, and UI components
|
|
17
|
+
- **Smart Testing**: Only test changed files (perfect for 43,000+ line codebases)
|
|
18
|
+
- **UI Component Workflows**: Enforced 3-file pattern (component, test, integration site)
|
|
19
|
+
- **Framework Agnostic**: Works with React, Vue, Angular, Svelte, and more
|
|
20
|
+
|
|
21
|
+
## š Quick Start
|
|
22
|
+
|
|
23
|
+
```bash
|
|
24
|
+
# Create a new project
|
|
25
|
+
npx @agentic15.com/agentic15-claude-zen my-project
|
|
26
|
+
|
|
27
|
+
# Navigate to project
|
|
28
|
+
cd my-project
|
|
29
|
+
|
|
30
|
+
# Read the post-install guide
|
|
31
|
+
cat .claude/POST-INSTALL.md
|
|
32
|
+
|
|
33
|
+
# Start developing
|
|
34
|
+
npm run plan:generate "Build a todo app with React"
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
## š Documentation
|
|
38
|
+
|
|
39
|
+
Comprehensive documentation is available in the [GitHub repository](https://github.com/agentic15/claude-zen):
|
|
40
|
+
|
|
41
|
+
- **[Getting Started](https://github.com/agentic15/claude-zen/blob/main/docs/getting-started/README.md)** - Installation, configuration, quick start
|
|
42
|
+
- **[User Workflows](https://github.com/agentic15/claude-zen/blob/main/docs/workflows/user-workflow.md)** - How humans interact with the framework
|
|
43
|
+
- **[Agent Workflows](https://github.com/agentic15/claude-zen/blob/main/docs/workflows/agent-workflow.md)** - How Claude Code operates within the framework
|
|
44
|
+
- **[Plan Management](https://github.com/agentic15/claude-zen/blob/main/docs/workflows/plan-management.md)** - Creating, locking, and amending plans
|
|
45
|
+
- **[Task Management](https://github.com/agentic15/claude-zen/blob/main/docs/workflows/task-management.md)** - Starting, tracking, and completing tasks
|
|
46
|
+
- **[Test Execution](https://github.com/agentic15/claude-zen/blob/main/docs/workflows/test-execution.md)** - Smart testing strategies for all project sizes
|
|
47
|
+
- **[Architecture](https://github.com/agentic15/claude-zen/blob/main/docs/architecture/README.md)** - Design principles, SOLID patterns, directory structure
|
|
48
|
+
|
|
49
|
+
## ⨠Key Features
|
|
50
|
+
|
|
51
|
+
### š Structured Development
|
|
52
|
+
- Hierarchical project planning (Project ā Subproject ā Milestone ā Task)
|
|
53
|
+
- Immutable plans with audit trail for amendments
|
|
54
|
+
- Dependency tracking and validation
|
|
55
|
+
- Progress monitoring and time estimation
|
|
56
|
+
|
|
57
|
+
### š Quality Enforcement
|
|
58
|
+
- **Pre-commit hooks** validate tests, code quality, and UI components
|
|
59
|
+
- **Smart testing** runs only changed files during commits
|
|
60
|
+
- **Test quality validation** blocks empty tests, missing assertions
|
|
61
|
+
- **UI integration validation** enforces component + test + integration site pattern
|
|
62
|
+
|
|
63
|
+
### ā” Performance
|
|
64
|
+
- Token-optimized with prompt caching
|
|
65
|
+
- Smart file change detection for testing
|
|
66
|
+
- Minified and bundled hooks for fast execution
|
|
67
|
+
- Scales to projects with 43,000+ lines of code
|
|
68
|
+
|
|
69
|
+
### šØ UI Development
|
|
70
|
+
- Framework-agnostic (React, Vue, Angular, Svelte)
|
|
71
|
+
- Complete Jest + Babel configuration included
|
|
72
|
+
- Testing Library integration
|
|
73
|
+
- Integration site for stakeholder previews
|
|
74
|
+
|
|
75
|
+
## šļø Directory Structure
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
your-project/
|
|
79
|
+
āāā .claude/ # Framework configuration (DO NOT EDIT)
|
|
80
|
+
ā āāā hooks/ # Git hooks for enforcement
|
|
81
|
+
ā āāā plans/ # Project plans and task tracking
|
|
82
|
+
ā āāā CLAUDE.md # Instructions for Claude Code
|
|
83
|
+
ā āāā POST-INSTALL.md # Setup guide
|
|
84
|
+
ā āāā settings.json # Claude Code hook configuration
|
|
85
|
+
āāā Agent/ # Your workspace (EDIT HERE)
|
|
86
|
+
ā āāā src/ # Source code
|
|
87
|
+
ā āāā tests/ # Test files
|
|
88
|
+
ā āāā db/ # Database scripts
|
|
89
|
+
āāā scripts/ # Build and deployment scripts
|
|
90
|
+
āāā test-site/ # Integration testing site (UI projects)
|
|
91
|
+
āāā jest.config.js # Test configuration
|
|
92
|
+
āāā .babelrc # Transpiler configuration
|
|
93
|
+
āāā package.json # Project dependencies
|
|
94
|
+
```
|
|
95
|
+
|
|
96
|
+
## š§ Core Workflows
|
|
97
|
+
|
|
98
|
+
### For Project Owners (Humans)
|
|
99
|
+
|
|
100
|
+
1. **Create a plan**: `npm run plan:generate "Your project description"`
|
|
101
|
+
2. **Review and approve**: Claude creates `PROJECT-PLAN.json`
|
|
102
|
+
3. **Lock the plan**: `npm run plan:init`
|
|
103
|
+
4. **Start a task**: `npm run task:start TASK-001`
|
|
104
|
+
5. **Monitor progress**: `npm run task:status`
|
|
105
|
+
6. **Complete task**: `npm run task:done TASK-001`
|
|
106
|
+
|
|
107
|
+
### For AI Agents (Claude Code)
|
|
108
|
+
|
|
109
|
+
1. **Read task requirements**: `.claude/plans/*/tasks/TASK-XXX.json`
|
|
110
|
+
2. **Write code** in `Agent/` directory
|
|
111
|
+
3. **Write tests** with real assertions
|
|
112
|
+
4. **Run tests**: `npm test` (must pass)
|
|
113
|
+
5. **Commit**: Git hooks validate automatically
|
|
114
|
+
6. **Mark complete**: After all criteria met
|
|
115
|
+
|
|
116
|
+
## š§Ŗ Smart Testing
|
|
117
|
+
|
|
118
|
+
**Problem**: Large codebases with 43,000+ lines take too long to test on every commit.
|
|
119
|
+
|
|
120
|
+
**Solution**: Git hooks test ONLY changed files:
|
|
121
|
+
|
|
122
|
+
- Detects staged files
|
|
123
|
+
- Maps source files to test files
|
|
124
|
+
- Runs related tests only
|
|
125
|
+
- Manual `npm test` still runs full suite
|
|
126
|
+
|
|
127
|
+
```bash
|
|
128
|
+
# During git commit (fast - changed files only)
|
|
129
|
+
git commit -m "Fix bug"
|
|
130
|
+
# ā Tests 3 files in 2 seconds
|
|
131
|
+
|
|
132
|
+
# Manual full test suite (slower - all files)
|
|
133
|
+
npm test
|
|
134
|
+
# ā Tests 500 files in 45 seconds
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
## šØ UI Component Workflow
|
|
138
|
+
|
|
139
|
+
Every UI component requires 3 files:
|
|
140
|
+
|
|
141
|
+
1. **Component**: `Agent/src/components/Button.jsx`
|
|
142
|
+
2. **Test**: `Agent/tests/components/Button.test.jsx`
|
|
143
|
+
3. **Integration**: `test-site/src/components/Button.jsx`
|
|
144
|
+
|
|
145
|
+
Git hooks BLOCK commits missing any of these files.
|
|
146
|
+
|
|
147
|
+
## š¤ Contributing
|
|
148
|
+
|
|
149
|
+
We welcome contributions! Please see [CONTRIBUTING.md](https://github.com/agentic15/claude-zen/blob/main/CONTRIBUTING.md) for guidelines.
|
|
150
|
+
|
|
151
|
+
### Development Setup
|
|
152
|
+
|
|
153
|
+
```bash
|
|
154
|
+
# Clone the repository
|
|
155
|
+
git clone https://github.com/agentic15/claude-zen.git
|
|
156
|
+
cd claude-zen
|
|
157
|
+
|
|
158
|
+
# Install dependencies
|
|
159
|
+
npm install
|
|
160
|
+
|
|
161
|
+
# Run tests
|
|
162
|
+
npm test
|
|
163
|
+
|
|
164
|
+
# Build package
|
|
165
|
+
npm run build
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## š Security
|
|
169
|
+
|
|
170
|
+
For security vulnerabilities, please email security@agentic15.com
|
|
171
|
+
|
|
172
|
+
See [SECURITY.md](https://github.com/agentic15/claude-zen/blob/main/SECURITY.md) for our security policy.
|
|
173
|
+
|
|
174
|
+
## š License
|
|
175
|
+
|
|
176
|
+
Copyright 2024-2025 Agentic15
|
|
177
|
+
|
|
178
|
+
Licensed under the Apache License, Version 2.0 (the "License");
|
|
179
|
+
you may not use this file except in compliance with the License.
|
|
180
|
+
You may obtain a copy of the License at
|
|
181
|
+
|
|
182
|
+
http://www.apache.org/licenses/LICENSE-2.0
|
|
183
|
+
|
|
184
|
+
Unless required by applicable law or agreed to in writing, software
|
|
185
|
+
distributed under the License is distributed on an "AS IS" BASIS,
|
|
186
|
+
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
187
|
+
See the License for the specific language governing permissions and
|
|
188
|
+
limitations under the License.
|
|
189
|
+
|
|
190
|
+
See [LICENSE](https://github.com/agentic15/claude-zen/blob/main/LICENSE) for full text.
|
|
191
|
+
|
|
192
|
+
## š¢ About Agentic15
|
|
193
|
+
|
|
194
|
+
**Agentic15** is a software development company specializing in AI-assisted development tools and frameworks.
|
|
195
|
+
|
|
196
|
+
- **Website**: https://agentic15.com
|
|
197
|
+
- **Documentation**: https://docs.agentic15.com
|
|
198
|
+
- **GitHub**: https://github.com/agentic15
|
|
199
|
+
- **Twitter**: https://twitter.com/agentic15
|
|
200
|
+
- **Email**: hello@agentic15.com
|
|
201
|
+
|
|
202
|
+
---
|
|
203
|
+
|
|
204
|
+
**"Code with Intelligence, Ship with Confidence"** - Agentic15
|
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Copyright 2024-2025 Agentic15
|
|
5
|
+
*
|
|
6
|
+
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
7
|
+
* you may not use this file except in compliance with the License.
|
|
8
|
+
* You may obtain a copy of the License at
|
|
9
|
+
*
|
|
10
|
+
* http://www.apache.org/licenses/LICENSE-2.0
|
|
11
|
+
*
|
|
12
|
+
* Unless required by applicable law or agreed to in writing, software
|
|
13
|
+
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
14
|
+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
15
|
+
* See the License for the specific language governing permissions and
|
|
16
|
+
* limitations under the License.
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* create-agentic15-claude-zen
|
|
21
|
+
*
|
|
22
|
+
* CLI entry point for creating new projects with Agentic15 Claude Zen framework
|
|
23
|
+
*
|
|
24
|
+
* Usage: npx create-agentic15-claude-zen [project-name]
|
|
25
|
+
* npx create-agentic15-claude-zen (interactive mode)
|
|
26
|
+
*/
|
|
27
|
+
|
|
28
|
+
import { fileURLToPath } from 'url';
|
|
29
|
+
import { dirname, join } from 'path';
|
|
30
|
+
import { existsSync, readFileSync } from 'fs';
|
|
31
|
+
import { createInterface } from 'readline';
|
|
32
|
+
|
|
33
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
34
|
+
const __dirname = dirname(__filename);
|
|
35
|
+
|
|
36
|
+
// Get package version
|
|
37
|
+
function getVersion() {
|
|
38
|
+
const pkgPath = join(__dirname, '..', 'package.json');
|
|
39
|
+
const pkg = JSON.parse(readFileSync(pkgPath, 'utf8'));
|
|
40
|
+
return pkg.version;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
// Show help message
|
|
44
|
+
function showHelp() {
|
|
45
|
+
const version = getVersion();
|
|
46
|
+
console.log(`
|
|
47
|
+
Agentic15 Claude Zen Project Generator v${version}
|
|
48
|
+
"Code with Intelligence, Ship with Confidence"
|
|
49
|
+
|
|
50
|
+
Usage:
|
|
51
|
+
npx create-agentic15-claude-zen [project-name] [options]
|
|
52
|
+
|
|
53
|
+
Options:
|
|
54
|
+
--help, -h Show this help message
|
|
55
|
+
--version, -v Show version number
|
|
56
|
+
|
|
57
|
+
Examples:
|
|
58
|
+
npx create-agentic15-claude-zen my-project Create project with defaults
|
|
59
|
+
npx create-agentic15-claude-zen Interactive mode with prompts
|
|
60
|
+
|
|
61
|
+
Interactive Mode:
|
|
62
|
+
When run without a project name, you will be prompted for:
|
|
63
|
+
- Project name (lowercase, numbers, hyphens, underscores)
|
|
64
|
+
- Git initialization (Y/n)
|
|
65
|
+
- Install dependencies (Y/n)
|
|
66
|
+
|
|
67
|
+
Framework Features:
|
|
68
|
+
- Structured task-based development workflow
|
|
69
|
+
- Git workflow enforcement with hooks
|
|
70
|
+
- Smart testing (tests only changed files)
|
|
71
|
+
- Pre-commit validation and auto-formatting
|
|
72
|
+
- Task tracking with dependencies
|
|
73
|
+
- Immutable project plan management
|
|
74
|
+
- UI component workflow (Agent + test-site)
|
|
75
|
+
|
|
76
|
+
For more information: https://github.com/agentic15/claude-zen
|
|
77
|
+
`);
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
// Helper: Create readline interface
|
|
81
|
+
function createPrompt() {
|
|
82
|
+
return createInterface({
|
|
83
|
+
input: process.stdin,
|
|
84
|
+
output: process.stdout
|
|
85
|
+
});
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
// Helper: Prompt user for input
|
|
89
|
+
function question(rl, query) {
|
|
90
|
+
return new Promise(resolve => rl.question(query, resolve));
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
// Helper: Validate project name
|
|
94
|
+
function isValidProjectName(name) {
|
|
95
|
+
return /^[a-z0-9-_]+$/.test(name);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
// Main execution
|
|
99
|
+
async function main() {
|
|
100
|
+
const args = process.argv.slice(2);
|
|
101
|
+
|
|
102
|
+
// Handle --help flag
|
|
103
|
+
if (args.includes('--help') || args.includes('-h')) {
|
|
104
|
+
showHelp();
|
|
105
|
+
process.exit(0);
|
|
106
|
+
}
|
|
107
|
+
|
|
108
|
+
// Handle --version flag
|
|
109
|
+
if (args.includes('--version') || args.includes('-v')) {
|
|
110
|
+
console.log(getVersion());
|
|
111
|
+
process.exit(0);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
let projectName = args[0];
|
|
115
|
+
let initGit = true;
|
|
116
|
+
let installDeps = true;
|
|
117
|
+
|
|
118
|
+
console.log('\nš Agentic15 Claude Zen Project Generator');
|
|
119
|
+
console.log(' "Code with Intelligence, Ship with Confidence"\n');
|
|
120
|
+
|
|
121
|
+
// Interactive mode if no project name provided
|
|
122
|
+
if (!projectName) {
|
|
123
|
+
const rl = createPrompt();
|
|
124
|
+
|
|
125
|
+
// Ask for project name
|
|
126
|
+
while (!projectName || !isValidProjectName(projectName)) {
|
|
127
|
+
projectName = await question(rl, 'š Project name (lowercase, numbers, hyphens, underscores): ');
|
|
128
|
+
projectName = projectName.trim();
|
|
129
|
+
|
|
130
|
+
if (!projectName) {
|
|
131
|
+
console.log('ā Project name is required');
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
if (!isValidProjectName(projectName)) {
|
|
136
|
+
console.log('ā Invalid name. Use only lowercase letters, numbers, hyphens, and underscores');
|
|
137
|
+
projectName = null;
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
// Ask about git initialization
|
|
142
|
+
const gitAnswer = await question(rl, '\nš§ Initialize git repository? (Y/n): ');
|
|
143
|
+
initGit = !gitAnswer.trim() || gitAnswer.toLowerCase() === 'y';
|
|
144
|
+
|
|
145
|
+
// Ask about npm install
|
|
146
|
+
const depsAnswer = await question(rl, 'š¦ Install dependencies after creation? (Y/n): ');
|
|
147
|
+
installDeps = !depsAnswer.trim() || depsAnswer.toLowerCase() === 'y';
|
|
148
|
+
|
|
149
|
+
rl.close();
|
|
150
|
+
console.log('');
|
|
151
|
+
}
|
|
152
|
+
|
|
153
|
+
// Validate project name
|
|
154
|
+
if (!isValidProjectName(projectName)) {
|
|
155
|
+
console.error('ā ERROR: Invalid project name\n');
|
|
156
|
+
console.log('Project name must:');
|
|
157
|
+
console.log(' - Use only lowercase letters, numbers, hyphens, and underscores');
|
|
158
|
+
console.log(' - Not contain spaces or special characters\n');
|
|
159
|
+
console.log('Example: my-app, my_app, myapp123\n');
|
|
160
|
+
process.exit(1);
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
// Check if directory already exists
|
|
164
|
+
const targetDir = join(process.cwd(), projectName);
|
|
165
|
+
if (existsSync(targetDir)) {
|
|
166
|
+
console.error(`ā ERROR: Directory "${projectName}" already exists\n`);
|
|
167
|
+
console.log('Please choose a different name or remove the existing directory.\n');
|
|
168
|
+
process.exit(1);
|
|
169
|
+
}
|
|
170
|
+
|
|
171
|
+
console.log('š Creating new project with Agentic15 Claude Zen framework...\n');
|
|
172
|
+
console.log(`š Project: ${projectName}`);
|
|
173
|
+
console.log(`š Location: ${targetDir}`);
|
|
174
|
+
console.log(`š§ Git: ${initGit ? 'Yes' : 'No'}`);
|
|
175
|
+
console.log(`š¦ Install deps: ${installDeps ? 'Yes' : 'No'}\n`);
|
|
176
|
+
|
|
177
|
+
// Import and run initialization
|
|
178
|
+
try {
|
|
179
|
+
const { initializeProject } = await import('../dist/index.js');
|
|
180
|
+
await initializeProject(projectName, targetDir, { initGit, installDeps });
|
|
181
|
+
|
|
182
|
+
console.log('\nā
Project created successfully!\n');
|
|
183
|
+
console.log('Next steps:');
|
|
184
|
+
console.log(` cd ${projectName}`);
|
|
185
|
+
if (!installDeps) {
|
|
186
|
+
console.log(' npm install');
|
|
187
|
+
}
|
|
188
|
+
console.log(' cat .claude/POST-INSTALL.md\n');
|
|
189
|
+
|
|
190
|
+
} catch (error) {
|
|
191
|
+
console.error('\nā ERROR: Failed to create project\n');
|
|
192
|
+
console.error(error.message);
|
|
193
|
+
if (error.stack) {
|
|
194
|
+
console.error('\nStack trace:');
|
|
195
|
+
console.error(error.stack);
|
|
196
|
+
}
|
|
197
|
+
process.exit(1);
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
|
|
201
|
+
main();
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
function _0x3c64(_0x302c1a,_0x9eef54){_0x302c1a=_0x302c1a-0x94;var _0x44d243=_0x226f();var _0x3e1e5a=_0x44d243[_0x302c1a];return _0x3e1e5a;}var _0x4791ea=_0x3c64;(function(_0x31064e,_0x12b6a5){var _0x4704fc=_0x3c64,_0x4e83f9=_0x31064e();while(!![]){try{var _0x178d75=parseInt(_0x4704fc(0xb0))/0x1*(parseInt(_0x4704fc(0xa5))/0x2)+parseInt(_0x4704fc(0x9d))/0x3*(parseInt(_0x4704fc(0xbf))/0x4)+-parseInt(_0x4704fc(0x9e))/0x5*(-parseInt(_0x4704fc(0xa2))/0x6)+parseInt(_0x4704fc(0xab))/0x7+parseInt(_0x4704fc(0xc3))/0x8+-parseInt(_0x4704fc(0x9c))/0x9*(-parseInt(_0x4704fc(0x95))/0xa)+-parseInt(_0x4704fc(0xad))/0xb*(parseInt(_0x4704fc(0xae))/0xc);if(_0x178d75===_0x12b6a5)break;else _0x4e83f9['push'](_0x4e83f9['shift']());}catch(_0x419a83){_0x4e83f9['push'](_0x4e83f9['shift']());}}}(_0x226f,0xe30d7));var _0x322c2d=(function(){var _0x420116=_0x3c64,_0x8458f6={};_0x8458f6['vymdq']=_0x420116(0x9f),_0x8458f6['kEGvH']='PmtNV',_0x8458f6[_0x420116(0xa6)]=function(_0x2f523d,_0x1a746a){return _0x2f523d!==_0x1a746a;},_0x8458f6[_0x420116(0xc0)]=_0x420116(0xa0);var _0x2a54f0=_0x8458f6,_0x5ec5bb=!![];return function(_0x41d288,_0x10ef5b){var _0x1657c0=_0x420116,_0x4bbe1c={};_0x4bbe1c['udesG']=_0x2a54f0[_0x1657c0(0x94)],_0x4bbe1c['tcNlY']=_0x2a54f0[_0x1657c0(0xb8)];var _0x5a434b=_0x4bbe1c;if(_0x2a54f0['YiaAD'](_0x2a54f0[_0x1657c0(0xc0)],_0x2a54f0['CHYHZ']))return _0x337223[_0x1657c0(0x9a)]()[_0x1657c0(0xc1)](_0x5a434b[_0x1657c0(0xa3)])[_0x1657c0(0x9a)]()[_0x1657c0(0xbc)](_0xec7b82)[_0x1657c0(0xc1)](_0x5a434b['udesG']);else{var _0x3121f6=_0x5ec5bb?function(){var _0x223ede=_0x1657c0;if(_0x5a434b[_0x223ede(0xa7)]===_0x223ede(0xb7))_0x1b8d76[_0x223ede(0xa1)](_0x223ede(0xb5)+_0x187d5f);else{if(_0x10ef5b){var _0x471eee=_0x10ef5b[_0x223ede(0xaf)](_0x41d288,arguments);return _0x10ef5b=null,_0x471eee;}}}:function(){};return _0x5ec5bb=![],_0x3121f6;}};}()),_0x3e1e5a=_0x322c2d(this,function(){var _0x165b39=_0x3c64,_0x407316={};_0x407316[_0x165b39(0xb1)]=_0x165b39(0x9f);var _0x3b8086=_0x407316;return _0x3e1e5a[_0x165b39(0x9a)]()[_0x165b39(0xc1)](_0x3b8086[_0x165b39(0xb1)])[_0x165b39(0x9a)]()[_0x165b39(0xbc)](_0x3e1e5a)[_0x165b39(0xc1)](_0x3b8086[_0x165b39(0xb1)]);});function _0x226f(){var _0x42c162=['kEGvH','llesW','python\x20-m\x20black\x20--version','file_path','constructor','\x22\x20is\x20not\x20supported','HkdLj','12ZTFWzp','CHYHZ','search','child_process','9877328zXkfkg','vymdq','80QzZlPu','Dynamic\x20require\x20of\x20\x22','tool_input','ignore','match','toString','existsSync','1432071iXABub','234147MJoLtJ','60890ZXVOAV','(((.+)+)+)+$','DkNTk','warn','438VASfZQ','udesG','stdio','188554oaxsFC','YiaAD','tcNlY','npx\x20prettier\x20--version','argv','Formatted:\x20','11908463wojzaP','XXIdb','22xWZCLm','29240076sgWHxi','apply','5EZjVuf','gFnuB','exit','VSLAx','log','Warning:\x20Could\x20not\x20format\x20','parse','JOXHM'];_0x226f=function(){return _0x42c162;};return _0x226f();}_0x3e1e5a();var r=(_0x2f8d52=>typeof require<'u'?require:typeof Proxy<'u'?new Proxy(_0x2f8d52,{'get':(_0x43f87f,_0x54da00)=>(typeof require<'u'?require:_0x43f87f)[_0x54da00]}):_0x2f8d52)(function(_0x32112d){var _0x2c7494=_0x3c64,_0x3d681f={'XXIdb':function(_0x25c6a9,_0xdbc220){return _0x25c6a9<_0xdbc220;},'GKkIG':function(_0x2b101c,_0x37e673){return _0x2b101c(_0x37e673);},'llesW':function(_0x41b022,_0x4487a5){return _0x41b022+_0x4487a5;},'HkdLj':function(_0x1e9bc5,_0x14ca8f){return _0x1e9bc5+_0x14ca8f;},'VSLAx':_0x2c7494(0x96)};if(_0x3d681f[_0x2c7494(0xac)](typeof require,'u'))return require[_0x2c7494(0xaf)](this,arguments);throw _0x3d681f['GKkIG'](Error,_0x3d681f[_0x2c7494(0xb9)](_0x3d681f[_0x2c7494(0xbe)](_0x3d681f[_0x2c7494(0xb3)],_0x32112d),_0x2c7494(0xbd)));}),{execSync:e}=r(_0x4791ea(0xc2)),i=r('fs'),c=process[_0x4791ea(0xa9)][0x2]||'{}',a=JSON[_0x4791ea(0xb6)](c),t=a[_0x4791ea(0x97)]?.[_0x4791ea(0xbb)];(!t||!i[_0x4791ea(0x9b)](t))&&process['exit'](0x0);try{if(t['match'](/\.(ts|tsx|js|jsx|json)$/))try{var _0x247836={};_0x247836[_0x4791ea(0xa4)]='ignore';var _0xfc8130={};_0xfc8130[_0x4791ea(0xa4)]=_0x4791ea(0x98),(e(_0x4791ea(0xa8),_0x247836),e('npx\x20prettier\x20--write\x20\x22'+t+'\x22',_0xfc8130),console[_0x4791ea(0xb4)](_0x4791ea(0xaa)+t));}catch{}else{if(t[_0x4791ea(0x99)](/\.py$/))try{var _0x3fe97f={};_0x3fe97f['stdio']=_0x4791ea(0x98);var _0x3299d4={};_0x3299d4[_0x4791ea(0xa4)]=_0x4791ea(0x98),(e(_0x4791ea(0xba),_0x3fe97f),e('python\x20-m\x20black\x20\x22'+t+'\x22',_0x3299d4),console[_0x4791ea(0xb4)](_0x4791ea(0xaa)+t));}catch{}}}catch{console[_0x4791ea(0xa1)]('Warning:\x20Could\x20not\x20format\x20'+t);}process[_0x4791ea(0xb2)](0x0);
|