@tyyyho/treg 1.0.2 → 1.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md
CHANGED
|
@@ -1,151 +1,25 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Package Moved
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
version](https://img.shields.io/npm/v/%40tyyyho%2Ftreg)](https://www.npmjs.com/package/%40tyyyho%2Ftreg)
|
|
5
|
-
[](https://www.npmjs.com/package/%40tyyyho%2Ftreg)
|
|
7
|
-
[](https://www.npmjs.com/package/%40tyyyho%2Ftreg)
|
|
8
|
-

|
|
3
|
+
`@tyyyho/treg` has moved to:
|
|
9
4
|
|
|
10
|
-
##
|
|
5
|
+
## `@tylercore/treg`
|
|
11
6
|
|
|
12
|
-
|
|
7
|
+
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
8
|
+
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
13
9
|
|
|
14
|
-
|
|
15
|
-
accumulate inconsistent tooling, style drift, and fragile workflows.\
|
|
16
|
-
`Treg` helps maintain balance by establishing a clean and consistent
|
|
17
|
-
development baseline.
|
|
18
|
-
|
|
19
|
-
It focuses only on **infrastructure setup**, not application logic.
|
|
20
|
-
|
|
21
|
-
---
|
|
22
|
-
|
|
23
|
-
## Features
|
|
24
|
-
|
|
25
|
-
`Treg` can configure:
|
|
26
|
-
|
|
27
|
-
- **TypeScript**
|
|
28
|
-
- **ESLint**
|
|
29
|
-
- **Prettier / Oxfmt**
|
|
30
|
-
- **Jest / Vitest**
|
|
31
|
-
- **Husky git hooks**
|
|
32
|
-
- **AI skill guidance**
|
|
33
|
-
|
|
34
|
-
These guardrails help maintain long‑term code health during fast
|
|
35
|
-
iteration.
|
|
36
|
-
|
|
37
|
-
---
|
|
38
|
-
|
|
39
|
-
## Quick Start
|
|
40
|
-
|
|
41
|
-
Initialize a project interactively:
|
|
10
|
+
Use the new package:
|
|
42
11
|
|
|
43
12
|
```bash
|
|
44
|
-
npx @
|
|
13
|
+
npx @tylercore/treg init
|
|
45
14
|
```
|
|
46
15
|
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
```bash
|
|
50
|
-
npx @tyyyho/treg init --dry-run
|
|
51
|
-
```
|
|
52
|
-
|
|
53
|
-
---
|
|
54
|
-
|
|
55
|
-
## Commands
|
|
56
|
-
|
|
57
|
-
Command Description
|
|
58
|
-
|
|
59
|
-
---
|
|
60
|
-
|
|
61
|
-
`init` Initialize project with interactive setup
|
|
62
|
-
`add` Add selected features
|
|
63
|
-
`list` Show supported frameworks and tools
|
|
64
|
-
|
|
65
|
-
---
|
|
66
|
-
|
|
67
|
-
## Common Usage
|
|
68
|
-
|
|
69
|
-
Add lint and format:
|
|
70
|
-
|
|
71
|
-
```bash
|
|
72
|
-
npx @tyyyho/treg add --features lint,format
|
|
73
|
-
```
|
|
74
|
-
|
|
75
|
-
Add format with `oxfmt`:
|
|
76
|
-
|
|
77
|
-
```bash
|
|
78
|
-
npx @tyyyho/treg add --features format --formatter oxfmt
|
|
79
|
-
```
|
|
80
|
-
|
|
81
|
-
Add test with `vitest`:
|
|
82
|
-
|
|
83
|
-
```bash
|
|
84
|
-
npx @tyyyho/treg add --features test --test-runner vitest
|
|
85
|
-
```
|
|
86
|
-
|
|
87
|
-
---
|
|
88
|
-
|
|
89
|
-
## Defaults
|
|
90
|
-
|
|
91
|
-
Framework detection order:
|
|
92
|
-
|
|
93
|
-
nuxt -> next -> react -> vue -> svelte -> node
|
|
94
|
-
|
|
95
|
-
Default test runner:
|
|
96
|
-
|
|
97
|
-
- `vue` / `nuxt`: `vitest`
|
|
98
|
-
- others: `jest`
|
|
99
|
-
|
|
100
|
-
Default formatter:
|
|
101
|
-
|
|
102
|
-
prettier
|
|
103
|
-
|
|
104
|
-
---
|
|
105
|
-
|
|
106
|
-
## AI Skills
|
|
107
|
-
|
|
108
|
-
`Treg` can update AI guidance files for development tools.
|
|
109
|
-
|
|
110
|
-
Tool File
|
|
111
|
-
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
Claude `CLAUDE.md`
|
|
115
|
-
Codex `AGENTS.md`
|
|
116
|
-
Gemini `GEMINI.md`
|
|
117
|
-
|
|
118
|
-
Behavior:
|
|
119
|
-
|
|
120
|
-
- only selected tools are updated
|
|
121
|
-
- missing files are created automatically
|
|
122
|
-
- updates occur in the repository root
|
|
123
|
-
|
|
124
|
-
---
|
|
125
|
-
|
|
126
|
-
## Philosophy
|
|
127
|
-
|
|
128
|
-
`Treg` is intentionally minimal.
|
|
129
|
-
|
|
130
|
-
It does not generate application architecture.\
|
|
131
|
-
It focuses only on establishing the engineering infrastructure that
|
|
132
|
-
keeps repositories healthy during rapid development.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Release
|
|
16
|
+
or install:
|
|
137
17
|
|
|
138
18
|
```bash
|
|
139
|
-
npm
|
|
19
|
+
npm i -D @tylercore/treg
|
|
140
20
|
```
|
|
141
21
|
|
|
142
|
-
|
|
22
|
+
Migration target:
|
|
143
23
|
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
major
|
|
147
|
-
prepatch
|
|
148
|
-
preminor
|
|
149
|
-
premajor
|
|
150
|
-
prerelease
|
|
151
|
-
x.y.z
|
|
24
|
+
- npm: https://www.npmjs.com/package/@tylercore/treg
|
|
25
|
+
- repo: https://github.com/tylercore/treg
|
package/README.npm.md
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @tylercore/treg
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
5
5
|
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
7
|
+
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
8
8
|

|
|
9
9
|
|
|
10
10
|
## Overview
|
|
@@ -29,7 +29,7 @@ It focuses only on **infrastructure setup**, not application logic.
|
|
|
29
29
|
- **Prettier / Oxfmt**
|
|
30
30
|
- **Jest / Vitest**
|
|
31
31
|
- **Husky git hooks**
|
|
32
|
-
- **AI
|
|
32
|
+
- **AI rules guidance**
|
|
33
33
|
|
|
34
34
|
These guardrails help maintain long‑term code health during fast
|
|
35
35
|
iteration.
|
|
@@ -41,13 +41,13 @@ iteration.
|
|
|
41
41
|
Initialize a project interactively:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
|
-
npx @
|
|
44
|
+
npx @tylercore/treg init
|
|
45
45
|
```
|
|
46
46
|
|
|
47
47
|
Preview changes:
|
|
48
48
|
|
|
49
49
|
```bash
|
|
50
|
-
npx @
|
|
50
|
+
npx @tylercore/treg init --dry-run
|
|
51
51
|
```
|
|
52
52
|
|
|
53
53
|
---
|
|
@@ -69,19 +69,19 @@ Command Description
|
|
|
69
69
|
Add lint and format:
|
|
70
70
|
|
|
71
71
|
```bash
|
|
72
|
-
npx @
|
|
72
|
+
npx @tylercore/treg add --features lint,format
|
|
73
73
|
```
|
|
74
74
|
|
|
75
75
|
Add format with `oxfmt`:
|
|
76
76
|
|
|
77
77
|
```bash
|
|
78
|
-
npx @
|
|
78
|
+
npx @tylercore/treg add --features format --formatter oxfmt
|
|
79
79
|
```
|
|
80
80
|
|
|
81
81
|
Add test with `vitest`:
|
|
82
82
|
|
|
83
83
|
```bash
|
|
84
|
-
npx @
|
|
84
|
+
npx @tylercore/treg add --features test --test-runner vitest
|
|
85
85
|
```
|
|
86
86
|
|
|
87
87
|
---
|
|
@@ -103,7 +103,7 @@ Default formatter:
|
|
|
103
103
|
|
|
104
104
|
---
|
|
105
105
|
|
|
106
|
-
## AI
|
|
106
|
+
## AI Rules
|
|
107
107
|
|
|
108
108
|
`Treg` can update AI guidance files for development tools.
|
|
109
109
|
|
|
@@ -130,22 +130,3 @@ Behavior:
|
|
|
130
130
|
It does not generate application architecture.\
|
|
131
131
|
It focuses only on establishing the engineering infrastructure that
|
|
132
132
|
keeps repositories healthy during rapid development.
|
|
133
|
-
|
|
134
|
-
---
|
|
135
|
-
|
|
136
|
-
## Release
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
npm run release -- patch
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
Supported targets:
|
|
143
|
-
|
|
144
|
-
patch
|
|
145
|
-
minor
|
|
146
|
-
major
|
|
147
|
-
prepatch
|
|
148
|
-
preminor
|
|
149
|
-
premajor
|
|
150
|
-
prerelease
|
|
151
|
-
x.y.z
|
package/README.zh-hant.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
<img src="https://capsule-render.vercel.app/api?type=waving&color=0:0F172A,30:1D4ED8,70:7C3AED,100:22C55E&height=260§ion=header&text=Treg&fontSize=72&fontColor=ffffff&animation=fadeIn&fontAlignY=38&desc=Inject%20an%20immune%20system%20into%20your%20codebase&descSize=20&descAlignY=58" width="100%" />
|
|
4
4
|
|
|
5
|
-
# @
|
|
5
|
+
# @tylercore/treg(繁體中文)
|
|
6
6
|
|
|
7
|
-
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
8
|
+
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
9
|
+
[](https://www.npmjs.com/package/%40tylercore%2Ftreg)
|
|
10
10
|

|
|
11
11
|

|
|
12
12
|
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
- **Formatting**(Prettier 或 Oxfmt)
|
|
55
55
|
- **Testing**(Jest 或 Vitest)
|
|
56
56
|
- **Git hooks**(Husky)
|
|
57
|
-
- **AI
|
|
57
|
+
- **AI rules guidance**(支援的 AI 工具說明)
|
|
58
58
|
|
|
59
59
|
這能穩定專案品質,同時不強制你採用特定產品架構。
|
|
60
60
|
|
|
@@ -65,19 +65,19 @@
|
|
|
65
65
|
互動式初始化:
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
npx @
|
|
68
|
+
npx @tylercore/treg init
|
|
69
69
|
```
|
|
70
70
|
|
|
71
71
|
只預覽變更:
|
|
72
72
|
|
|
73
73
|
```bash
|
|
74
|
-
npx @
|
|
74
|
+
npx @tylercore/treg init --dry-run
|
|
75
75
|
```
|
|
76
76
|
|
|
77
77
|
為既有專案補上指定功能:
|
|
78
78
|
|
|
79
79
|
```bash
|
|
80
|
-
npx @
|
|
80
|
+
npx @tylercore/treg add --features lint,format
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
---
|
|
@@ -105,7 +105,7 @@ npx @tyyyho/treg add --features lint,format
|
|
|
105
105
|
- TypeScript
|
|
106
106
|
- test
|
|
107
107
|
- husky
|
|
108
|
-
- AI
|
|
108
|
+
- AI rules guidance
|
|
109
109
|
|
|
110
110
|
3. **Test runner**(僅在選到 `test` 時詢問)
|
|
111
111
|
- `jest`
|
|
@@ -116,7 +116,7 @@ npx @tyyyho/treg add --features lint,format
|
|
|
116
116
|
- `prettier`
|
|
117
117
|
- `oxfmt`
|
|
118
118
|
|
|
119
|
-
5. **AI tools**(僅在選到 AI
|
|
119
|
+
5. **AI tools**(僅在選到 AI rules guidance 時詢問)
|
|
120
120
|
- Claude
|
|
121
121
|
- Codex
|
|
122
122
|
- Gemini
|
|
@@ -128,31 +128,31 @@ npx @tyyyho/treg add --features lint,format
|
|
|
128
128
|
初始化專案:
|
|
129
129
|
|
|
130
130
|
```bash
|
|
131
|
-
npx @
|
|
131
|
+
npx @tylercore/treg init
|
|
132
132
|
```
|
|
133
133
|
|
|
134
134
|
只預覽 init 計畫:
|
|
135
135
|
|
|
136
136
|
```bash
|
|
137
|
-
npx @
|
|
137
|
+
npx @tylercore/treg init --dry-run
|
|
138
138
|
```
|
|
139
139
|
|
|
140
140
|
只加入 lint + format:
|
|
141
141
|
|
|
142
142
|
```bash
|
|
143
|
-
npx @
|
|
143
|
+
npx @tylercore/treg add --features lint,format
|
|
144
144
|
```
|
|
145
145
|
|
|
146
146
|
format 使用 `oxfmt`:
|
|
147
147
|
|
|
148
148
|
```bash
|
|
149
|
-
npx @
|
|
149
|
+
npx @tylercore/treg add --features format --formatter oxfmt
|
|
150
150
|
```
|
|
151
151
|
|
|
152
152
|
test 使用 `vitest`:
|
|
153
153
|
|
|
154
154
|
```bash
|
|
155
|
-
npx @
|
|
155
|
+
npx @tylercore/treg add --features test --test-runner vitest
|
|
156
156
|
```
|
|
157
157
|
|
|
158
158
|
---
|
|
@@ -203,7 +203,7 @@ nuxt -> next -> react -> vue -> svelte -> node
|
|
|
203
203
|
|
|
204
204
|
---
|
|
205
205
|
|
|
206
|
-
## AI
|
|
206
|
+
## AI Rules 行為
|
|
207
207
|
|
|
208
208
|
`Treg` 可更新所選 AI 工具的說明文件:
|
|
209
209
|
|
|
@@ -234,27 +234,6 @@ nuxt -> next -> react -> vue -> svelte -> node
|
|
|
234
234
|
|
|
235
235
|
---
|
|
236
236
|
|
|
237
|
-
## 發布
|
|
238
|
-
|
|
239
|
-
```bash
|
|
240
|
-
npm run release -- patch
|
|
241
|
-
```
|
|
242
|
-
|
|
243
|
-
支援目標:
|
|
244
|
-
|
|
245
|
-
```text
|
|
246
|
-
patch
|
|
247
|
-
minor
|
|
248
|
-
major
|
|
249
|
-
prepatch
|
|
250
|
-
preminor
|
|
251
|
-
premajor
|
|
252
|
-
prerelease
|
|
253
|
-
x.y.z
|
|
254
|
-
```
|
|
255
|
-
|
|
256
|
-
---
|
|
257
|
-
|
|
258
237
|
<div align="center">
|
|
259
238
|
<sub>Built to regulate chaotic iteration and protect long-term codebase health.</sub>
|
|
260
239
|
<br />
|
|
@@ -19,7 +19,7 @@ const AI_TOOL_CHOICES = [
|
|
|
19
19
|
{ value: "claude", label: "Claude" },
|
|
20
20
|
{ value: "codex", label: "Codex" },
|
|
21
21
|
{ value: "gemini", label: "Gemini" },
|
|
22
|
-
{ value: "skip", label: "skip (disable AI
|
|
22
|
+
{ value: "skip", label: "skip (disable AI rules guidance)" },
|
|
23
23
|
];
|
|
24
24
|
const FEATURE_CHOICES = [
|
|
25
25
|
{ value: "lint", label: "lint" },
|
|
@@ -27,7 +27,7 @@ const FEATURE_CHOICES = [
|
|
|
27
27
|
{ value: "typescript", label: "TypeScript" },
|
|
28
28
|
{ value: "test", label: "test" },
|
|
29
29
|
{ value: "husky", label: "husky" },
|
|
30
|
-
{ value: "skills", label: "AI
|
|
30
|
+
{ value: "skills", label: "AI rules guidance" },
|
|
31
31
|
];
|
|
32
32
|
let promptsModulePromise = null;
|
|
33
33
|
function toFeatureSelection(selected) {
|
|
@@ -142,11 +142,11 @@ export async function collectInitPrompts(defaults) {
|
|
|
142
142
|
skills = aiToolSelection.skills;
|
|
143
143
|
aiTools = aiToolSelection.aiTools;
|
|
144
144
|
if (!skills) {
|
|
145
|
-
console.log("AI
|
|
145
|
+
console.log("AI rules guidance disabled by selection: skip");
|
|
146
146
|
}
|
|
147
147
|
}
|
|
148
148
|
else {
|
|
149
|
-
console.log("5) AI tools skipped (AI
|
|
149
|
+
console.log("5) AI tools skipped (AI rules guidance not selected)");
|
|
150
150
|
}
|
|
151
151
|
return {
|
|
152
152
|
pm,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { existsSync } from "node:fs";
|
|
2
2
|
import { promises as fs } from "node:fs";
|
|
3
3
|
import path from "node:path";
|
|
4
|
-
const SKILL_SECTION_HEADING = "## Treg AI
|
|
4
|
+
const SKILL_SECTION_HEADING = "## Treg AI Rules";
|
|
5
|
+
const LEGACY_SKILL_SECTION_HEADINGS = ["## Treg AI Guide", "## Treg AI Skills"];
|
|
5
6
|
const SKILLS_BASE_DIR = "skills";
|
|
6
7
|
const AI_TOOL_DOCS = {
|
|
7
8
|
claude: "CLAUDE.md",
|
|
@@ -126,7 +127,17 @@ async function ensureSkillFiles(projectDir, enabled, testRunner, dryRun) {
|
|
|
126
127
|
function buildSkillSection(context) {
|
|
127
128
|
const { enabledFeatures, testRunner } = context;
|
|
128
129
|
const enabled = getEnabledFeatures(enabledFeatures);
|
|
129
|
-
const lines = [
|
|
130
|
+
const lines = [
|
|
131
|
+
SKILL_SECTION_HEADING,
|
|
132
|
+
"",
|
|
133
|
+
"### Git rules",
|
|
134
|
+
"",
|
|
135
|
+
"1. Never use --no-verify",
|
|
136
|
+
"2. Unless the user asks, never relax TypeScript, lint, or format constraints, and never skip tests.",
|
|
137
|
+
"",
|
|
138
|
+
"### Steps and Skill Mapping",
|
|
139
|
+
"",
|
|
140
|
+
];
|
|
130
141
|
if (enabled.length === 0) {
|
|
131
142
|
lines.push("1. No features are enabled in this run, so no skill call is required.");
|
|
132
143
|
lines.push("");
|
|
@@ -153,7 +164,10 @@ function upsertSkillSection(content, nextSection) {
|
|
|
153
164
|
const rebuilt = `${before}\n\n${nextSection.trim()}\n`;
|
|
154
165
|
return after ? `${rebuilt}\n${after}\n` : `${rebuilt}`;
|
|
155
166
|
};
|
|
156
|
-
const headingStart =
|
|
167
|
+
const headingStart = [SKILL_SECTION_HEADING, ...LEGACY_SKILL_SECTION_HEADINGS]
|
|
168
|
+
.map(heading => content.indexOf(heading))
|
|
169
|
+
.filter(index => index !== -1)
|
|
170
|
+
.sort((a, b) => a - b)[0] ?? -1;
|
|
157
171
|
if (headingStart !== -1) {
|
|
158
172
|
const nextHeading = content.indexOf("\n## ", headingStart + 1);
|
|
159
173
|
const sectionEnd = nextHeading === -1 ? content.length : nextHeading + 1;
|
|
@@ -164,7 +178,7 @@ function upsertSkillSection(content, nextSection) {
|
|
|
164
178
|
}
|
|
165
179
|
return `${content.trimEnd()}\n\n${nextSection.trim()}\n`;
|
|
166
180
|
}
|
|
167
|
-
export async function
|
|
181
|
+
export async function runAiRulesRule(context) {
|
|
168
182
|
const { projectDir, dryRun, aiTools } = context;
|
|
169
183
|
const targetFiles = resolveSkillsDocs(projectDir, aiTools);
|
|
170
184
|
const enabled = getEnabledFeatures(context.enabledFeatures);
|
|
@@ -173,7 +187,7 @@ export async function runAiSkillsRule(context) {
|
|
|
173
187
|
for (const targetFile of targetFiles) {
|
|
174
188
|
if (dryRun) {
|
|
175
189
|
const action = existsSync(targetFile) ? "update" : "create";
|
|
176
|
-
console.log(`[dry-run] Would ${action} ${path.basename(targetFile)} with AI
|
|
190
|
+
console.log(`[dry-run] Would ${action} ${path.basename(targetFile)} with AI rules content`);
|
|
177
191
|
continue;
|
|
178
192
|
}
|
|
179
193
|
const exists = existsSync(targetFile);
|
|
@@ -182,10 +196,10 @@ export async function runAiSkillsRule(context) {
|
|
|
182
196
|
if (updated !== current) {
|
|
183
197
|
await fs.mkdir(path.dirname(targetFile), { recursive: true });
|
|
184
198
|
await fs.writeFile(targetFile, updated, "utf8");
|
|
185
|
-
console.log(`${exists ? "Updated" : "Created"} ${path.basename(targetFile)} with AI
|
|
199
|
+
console.log(`${exists ? "Updated" : "Created"} ${path.basename(targetFile)} with AI rules content`);
|
|
186
200
|
continue;
|
|
187
201
|
}
|
|
188
|
-
console.log(`${path.basename(targetFile)} already contains latest AI
|
|
202
|
+
console.log(`${path.basename(targetFile)} already contains latest AI rules content`);
|
|
189
203
|
}
|
|
190
204
|
}
|
|
191
205
|
export const __testables__ = {
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { runAiRulesRule } from "./ai-rules.js";
|
|
2
2
|
import { runFormatRule } from "./format.js";
|
|
3
3
|
import { runHuskyRule } from "./husky.js";
|
|
4
4
|
import { runLintRule } from "./lint.js";
|
|
@@ -28,6 +28,6 @@ export async function runFeatureRules(context) {
|
|
|
28
28
|
await runHuskyRule(context);
|
|
29
29
|
}
|
|
30
30
|
if (skills) {
|
|
31
|
-
await
|
|
31
|
+
await runAiRulesRule(context);
|
|
32
32
|
}
|
|
33
33
|
}
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tyyyho/treg",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.5",
|
|
4
4
|
"description": "Treg is a CLI tool that injects an engineering immune system into existing projects.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"repository": {
|
|
7
7
|
"type": "git",
|
|
8
|
-
"url": "https://github.com/
|
|
8
|
+
"url": "https://github.com/tyyyho/treg.git"
|
|
9
9
|
},
|
|
10
10
|
"bin": {
|
|
11
11
|
"treg": "dist/init-project.js"
|