@nova286/nova-workflow 2.1.1 → 2.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.
- package/README.md +113 -36
- package/dist/cli/commands/init.js +3 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/index.js +6 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli-core/__tests__/adapters.test.js +25 -0
- package/dist/cli-core/__tests__/adapters.test.js.map +1 -1
- package/dist/cli-core/__tests__/context-generator.test.js +31 -0
- package/dist/cli-core/__tests__/context-generator.test.js.map +1 -1
- package/dist/cli-core/__tests__/dispatcher.test.js +22 -0
- package/dist/cli-core/__tests__/dispatcher.test.js.map +1 -1
- package/dist/cli-core/__tests__/guard.test.js +41 -1
- package/dist/cli-core/__tests__/guard.test.js.map +1 -1
- package/dist/cli-core/__tests__/init-manager.test.js +118 -21
- package/dist/cli-core/__tests__/init-manager.test.js.map +1 -1
- package/dist/cli-core/__tests__/pipeline.test.js +22 -0
- package/dist/cli-core/__tests__/pipeline.test.js.map +1 -1
- package/dist/cli-core/adapters/claude-code.d.ts +5 -3
- package/dist/cli-core/adapters/claude-code.js +130 -50
- package/dist/cli-core/adapters/claude-code.js.map +1 -1
- package/dist/cli-core/adapters/codex.js +25 -19
- package/dist/cli-core/adapters/codex.js.map +1 -1
- package/dist/cli-core/adapters/hermes-agent.js +25 -19
- package/dist/cli-core/adapters/hermes-agent.js.map +1 -1
- package/dist/cli-core/adapters/openclaw.js +25 -19
- package/dist/cli-core/adapters/openclaw.js.map +1 -1
- package/dist/cli-core/adapters/opencode.js +25 -19
- package/dist/cli-core/adapters/opencode.js.map +1 -1
- package/dist/cli-core/context-generator.js +44 -2
- package/dist/cli-core/context-generator.js.map +1 -1
- package/dist/cli-core/guard.js +4 -0
- package/dist/cli-core/guard.js.map +1 -1
- package/dist/cli-core/init-manager.d.ts +4 -0
- package/dist/cli-core/init-manager.js +72 -6
- package/dist/cli-core/init-manager.js.map +1 -1
- package/dist/cli-core/quality-check.d.ts +1 -0
- package/dist/cli-core/quality-check.js +23 -0
- package/dist/cli-core/quality-check.js.map +1 -1
- package/dist/cli-core/types.d.ts +57 -1
- package/package.json +1 -1
- package/templates/docs/design.md +4 -0
- package/templates/docs/verification-report.md +21 -0
package/README.md
CHANGED
|
@@ -14,36 +14,40 @@
|
|
|
14
14
|
## What is Nova?
|
|
15
15
|
|
|
16
16
|
Nova adds **process discipline** to AI-assisted development without restricting
|
|
17
|
-
what your AI can do. It sequences
|
|
18
|
-
|
|
19
|
-
your AI tools, ensuring nothing gets skipped and everything gets
|
|
17
|
+
what your AI can do. It sequences specification, planning, implementation, and
|
|
18
|
+
review through a structured workflow — think of it as a state machine that sits
|
|
19
|
+
between you and your AI tools, ensuring nothing gets skipped and everything gets
|
|
20
|
+
recorded.
|
|
20
21
|
|
|
21
22
|
### The Core Insight
|
|
22
23
|
|
|
23
24
|
AI coding tools are powerful but undisciplined. Developers jump straight to
|
|
24
|
-
implementation,
|
|
25
|
-
**restricting** your AI skills
|
|
25
|
+
implementation, lose the original requirement, and review too late. Nova fixes
|
|
26
|
+
this not by **restricting** your AI skills, but by **orchestrating** three roles:
|
|
27
|
+
OpenSpec-compatible specs define the contract, Superpowers-compatible methods
|
|
28
|
+
drive planning and TDD, and ECC-compatible review judges quality.
|
|
26
29
|
|
|
27
30
|
| Old Way (V1) | New Way (V2) |
|
|
28
31
|
|---|---|
|
|
29
|
-
| "You are forbidden to write code" (HTML comment) | "
|
|
30
|
-
|
|
|
31
|
-
|
|
|
32
|
-
| Remember slash commands for each phase | Just say "
|
|
32
|
+
| "You are forbidden to write code" (HTML comment) | "This task must satisfy these spec refs and acceptance refs" |
|
|
33
|
+
| Proposal/design docs as loose markdown | OpenSpec-compatible change artifacts as the requirement contract |
|
|
34
|
+
| TDD/review as optional vibes | Superpowers/ECC-compatible gates recorded as evidence |
|
|
35
|
+
| Remember slash commands for each phase | Just say "continue" — or type `/nova` |
|
|
33
36
|
|
|
34
37
|
### How It Feels to Use
|
|
35
38
|
|
|
36
39
|
```
|
|
37
40
|
You: "帮我设计一下用户登录模块"
|
|
38
|
-
Nova: →
|
|
39
|
-
→
|
|
41
|
+
Nova: → Creates an OpenSpec-compatible change → explores requirements
|
|
42
|
+
→ records spec refs and acceptance criteria → "Change specified."
|
|
40
43
|
|
|
41
44
|
You: "继续实现"
|
|
42
|
-
Nova: →
|
|
43
|
-
→
|
|
45
|
+
Nova: → Reads the next task's spec refs → runs the Superpowers-compatible method
|
|
46
|
+
→ records tests, changed files, traceId, and evidence → "4/6 done."
|
|
44
47
|
|
|
45
48
|
You: "审查一下代码"
|
|
46
|
-
Nova: →
|
|
49
|
+
Nova: → ECC-compatible code review + security review + spec conformance review
|
|
50
|
+
→ Report with file:line references and pass/fix verdicts
|
|
47
51
|
```
|
|
48
52
|
|
|
49
53
|
**No slash commands needed.** Nova understands phase context from `.nova.yaml` and
|
|
@@ -78,13 +82,44 @@ Then, inside Claude Code:
|
|
|
78
82
|
|
|
79
83
|
---
|
|
80
84
|
|
|
85
|
+
## Methodology Integrations
|
|
86
|
+
|
|
87
|
+
Nova does **not** require OpenSpec, Superpowers, or ECC to be installed. It does
|
|
88
|
+
require their workflow model: specification contract, disciplined execution, and
|
|
89
|
+
independent review. Each integration can run in one of three modes:
|
|
90
|
+
|
|
91
|
+
| Mode | Meaning |
|
|
92
|
+
|------|---------|
|
|
93
|
+
| `native` | The real tool or skill pack is available and Nova should use it |
|
|
94
|
+
| `compatible` | Nova writes compatible artifacts and uses built-in prompts/checklists |
|
|
95
|
+
| `disabled` | The user explicitly opted out |
|
|
96
|
+
|
|
97
|
+
Default `nova init` starts in compatible mode:
|
|
98
|
+
|
|
99
|
+
```yaml
|
|
100
|
+
integrations:
|
|
101
|
+
openspec: { mode: compatible }
|
|
102
|
+
superpowers: { mode: compatible }
|
|
103
|
+
ecc: { mode: compatible }
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
If native integrations are present, Nova can use them for a stronger experience.
|
|
107
|
+
The product promise stays the same: open the box and it works; add the three
|
|
108
|
+
methodologies and it gets sharper.
|
|
109
|
+
|
|
110
|
+
---
|
|
111
|
+
|
|
81
112
|
## The Five Phases
|
|
82
113
|
|
|
83
114
|
```
|
|
84
115
|
propose ──→ design ──→ implement ──→ verify ──→ archive
|
|
85
116
|
│ │ │ │ │
|
|
86
|
-
│
|
|
87
|
-
│
|
|
117
|
+
│ │ │ │ │
|
|
118
|
+
│ │ │ │ └─ archive OpenSpec-compatible change
|
|
119
|
+
│ │ │ └─ ECC-compatible code/security/spec review
|
|
120
|
+
│ │ └─ spec-bound execution with tests and evidence
|
|
121
|
+
│ └─ Superpowers-compatible planning from the spec contract
|
|
122
|
+
└─ OpenSpec-compatible change proposal and spec delta
|
|
88
123
|
│
|
|
89
124
|
└── /nova-iterate ←── can roll back from any phase
|
|
90
125
|
```
|
|
@@ -102,10 +137,10 @@ And you can always iterate back — real development is not a waterfall.
|
|
|
102
137
|
| Command | What it does |
|
|
103
138
|
|---------|-------------|
|
|
104
139
|
| `/nova` | **One entry point.** Shows progress, suggests next action. |
|
|
105
|
-
| `/nova-propose` |
|
|
106
|
-
| `/nova-design` |
|
|
107
|
-
| `/nova-implement` | Execute tasks with
|
|
108
|
-
| `/nova-verify` |
|
|
140
|
+
| `/nova-propose` | Specify an OpenSpec-compatible change contract |
|
|
141
|
+
| `/nova-design` | Build a Superpowers-compatible plan and task graph from the spec |
|
|
142
|
+
| `/nova-implement` | Execute spec-bound tasks with method, tests, and evidence |
|
|
143
|
+
| `/nova-verify` | Run ECC-compatible code, security, and spec-conformance review |
|
|
109
144
|
| `/nova-iterate` | Roll back to a previous phase for iteration |
|
|
110
145
|
|
|
111
146
|
### CLI Commands (in terminal)
|
|
@@ -124,9 +159,13 @@ And you can always iterate back — real development is not a waterfall.
|
|
|
124
159
|
|
|
125
160
|
### 1. Orchestrate, Don't Replace
|
|
126
161
|
|
|
127
|
-
Nova does not
|
|
128
|
-
|
|
129
|
-
|
|
162
|
+
Nova does not replace the methodologies. It coordinates them. OpenSpec-compatible
|
|
163
|
+
artifacts own "what must be true", Superpowers-compatible plans own "how to work",
|
|
164
|
+
and ECC-compatible reviews own "whether this is acceptable".
|
|
165
|
+
|
|
166
|
+
**Methodologies are semantic dependencies, not install-time dependencies.** Nova
|
|
167
|
+
works in compatible mode without external tools. Native OpenSpec, Superpowers,
|
|
168
|
+
and ECC installations make the same workflow more capable.
|
|
130
169
|
|
|
131
170
|
### 2. Structured Handoff, Not Natural Language
|
|
132
171
|
|
|
@@ -138,24 +177,40 @@ break down. Nova solves this with `TaskContext` — a structured JSON contract:
|
|
|
138
177
|
"taskId": "build-login",
|
|
139
178
|
"title": "Implement login endpoint",
|
|
140
179
|
"taskType": "implementation",
|
|
180
|
+
"change": {
|
|
181
|
+
"activeChange": "add-login",
|
|
182
|
+
"artifacts": {
|
|
183
|
+
"openspecChange": ".openspec/changes/add-login",
|
|
184
|
+
"implementationPlan": "docs/superpowers/plans/add-login.md"
|
|
185
|
+
}
|
|
186
|
+
},
|
|
187
|
+
"implementation": {
|
|
188
|
+
"method": "tdd",
|
|
189
|
+
"specRefs": ["auth.requirements.valid-credential-login"],
|
|
190
|
+
"acceptanceRefs": ["auth.acceptance.valid-login-returns-token"]
|
|
191
|
+
},
|
|
141
192
|
"input": {
|
|
142
193
|
"files": [{ "path": "src/login.ts", "action": "create" }],
|
|
143
194
|
"environment": { "language": "TypeScript", "framework": "Express.js" }
|
|
144
195
|
},
|
|
196
|
+
"verification": {
|
|
197
|
+
"commands": ["npm test -- login", "npx tsc --noEmit"]
|
|
198
|
+
},
|
|
145
199
|
"acceptanceCriteria": ["Returns JWT on success"],
|
|
146
200
|
"guardConditions": { "requireReview": true, "requireTests": true }
|
|
147
201
|
}
|
|
148
202
|
```
|
|
149
203
|
|
|
150
204
|
No ambiguity. No "I think the designer meant...". The implement phase knows exactly
|
|
151
|
-
|
|
205
|
+
which spec contract it is satisfying, which files to touch, how to prove it, and
|
|
206
|
+
what "done" looks like.
|
|
152
207
|
|
|
153
208
|
### 3. State Machine, Not Wishful Thinking
|
|
154
209
|
|
|
155
210
|
```
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
211
|
+
propose ──[change specified]──→ design ──[plan ready]──→ implement
|
|
212
|
+
implement ──[evidence recorded]──→ verify ──[reviews passed]──→ archive
|
|
213
|
+
implement ←──[iterate]── design verify ←──[iterate]── implement
|
|
159
214
|
```
|
|
160
215
|
|
|
161
216
|
Forward transitions are **gated** — the guard system enforces preconditions.
|
|
@@ -169,10 +224,10 @@ of truth — atomic writes, mutex-guarded, crash-safe.
|
|
|
169
224
|
|
|
170
225
|
### 5. Convention, Not Coercion
|
|
171
226
|
|
|
172
|
-
Role separation comes from **
|
|
173
|
-
|
|
174
|
-
pretending to be access control. No skill neutering. Just clear
|
|
175
|
-
machine that keeps you honest.
|
|
227
|
+
Role separation comes from **artifact ownership**, not from fake security
|
|
228
|
+
boundaries. Specs own requirements, plans own execution, reviews own judgment.
|
|
229
|
+
No HTML comments pretending to be access control. No skill neutering. Just clear
|
|
230
|
+
goals and a state machine that keeps you honest.
|
|
176
231
|
|
|
177
232
|
---
|
|
178
233
|
|
|
@@ -202,16 +257,38 @@ src/
|
|
|
202
257
|
|
|
203
258
|
## State File
|
|
204
259
|
|
|
205
|
-
|
|
260
|
+
Runtime state and artifact references live in `.nova.yaml`. Detailed
|
|
261
|
+
requirements, plans, and reports live in the referenced files:
|
|
206
262
|
|
|
207
263
|
```yaml
|
|
208
|
-
version:
|
|
264
|
+
version: 1
|
|
209
265
|
project: my-app
|
|
210
266
|
environment: [claude-code]
|
|
267
|
+
activeChange: add-login
|
|
268
|
+
integrations:
|
|
269
|
+
openspec: { mode: compatible }
|
|
270
|
+
superpowers: { mode: compatible }
|
|
271
|
+
ecc: { mode: compatible }
|
|
272
|
+
artifacts:
|
|
273
|
+
openspecChange: .openspec/changes/add-login
|
|
274
|
+
proposal: .openspec/changes/add-login/proposal.md
|
|
275
|
+
specDelta: .openspec/changes/add-login/specs/auth/spec.md
|
|
276
|
+
implementationPlan: docs/superpowers/plans/add-login.md
|
|
277
|
+
verificationReport: docs/reports/add-login-verification.md
|
|
211
278
|
phases:
|
|
212
|
-
|
|
279
|
+
propose: { status: done, proposal: docs/proposals/proposal.md }
|
|
213
280
|
design: { status: done, designDoc: docs/designs/design.md, tasks: [...] }
|
|
214
|
-
|
|
281
|
+
implement:
|
|
282
|
+
status: in-progress
|
|
283
|
+
tasks:
|
|
284
|
+
implement-login:
|
|
285
|
+
status: done
|
|
286
|
+
specRefs: [auth.requirements.valid-credential-login]
|
|
287
|
+
acceptanceRefs: [auth.acceptance.valid-login-returns-token]
|
|
288
|
+
evidence:
|
|
289
|
+
tests: [npm test -- login]
|
|
290
|
+
filesChanged: [src/auth/login.ts]
|
|
291
|
+
traceIds: [nova-xxx]
|
|
215
292
|
verify: { status: pending }
|
|
216
293
|
archive: { status: pending }
|
|
217
294
|
metadata:
|
|
@@ -219,7 +296,7 @@ metadata:
|
|
|
219
296
|
lastModified: "2026-05-28T12:00:00.000Z"
|
|
220
297
|
history:
|
|
221
298
|
- { version: 8, change: "Task login-impl completed" }
|
|
222
|
-
- { version: 10, change: "Iterated
|
|
299
|
+
- { version: 10, change: "Iterated implement→design: component split needs rethinking" }
|
|
223
300
|
```
|
|
224
301
|
|
|
225
302
|
---
|
|
@@ -6,9 +6,11 @@ const init_manager_1 = require("../../cli-core/init-manager");
|
|
|
6
6
|
const error_handler_1 = require("../error-handler");
|
|
7
7
|
exports.initCommand = (0, error_handler_1.withErrorHandling)(async (options) => {
|
|
8
8
|
ui_1.ui.step('Welcome to Nova! Initializing your project...');
|
|
9
|
+
const skillsDir = options.skillsDir === 'project' ? 'project' : options.skillsDir === 'user' ? 'user' : undefined;
|
|
9
10
|
const manager = new init_manager_1.InitManager(process.cwd(), {
|
|
10
11
|
eccPath: options.withEcc,
|
|
11
|
-
force: options.force
|
|
12
|
+
force: options.force,
|
|
13
|
+
skillsDir
|
|
12
14
|
});
|
|
13
15
|
try {
|
|
14
16
|
await manager.run();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;AAAA,8BAA2B;AAC3B,8DAA0D;AAC1D,oDAAqD;AAExC,QAAA,WAAW,GAAG,IAAA,iCAAiB,EAAC,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"init.js","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":";;;AAAA,8BAA2B;AAC3B,8DAA0D;AAC1D,oDAAqD;AAExC,QAAA,WAAW,GAAG,IAAA,iCAAiB,EAAC,KAAK,EAAE,OAAkE,EAAE,EAAE;IACxH,OAAE,CAAC,IAAI,CAAC,+CAA+C,CAAC,CAAC;IACzD,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,KAAK,MAAM,CAAC,CAAC,CAAC,MAAe,CAAC,CAAC,CAAC,SAAS,CAAC;IACpI,MAAM,OAAO,GAAG,IAAI,0BAAW,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;QAC7C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS;KACV,CAAC,CAAC;IACH,IAAI,CAAC;QACH,MAAM,OAAO,CAAC,GAAG,EAAE,CAAC;QACpB,OAAE,CAAC,OAAO,CAAC,gCAAgC,CAAC,CAAC;IAC/C,CAAC;IAAC,OAAO,GAAQ,EAAE,CAAC;QAClB,OAAE,CAAC,KAAK,CAAC,0BAA0B,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;QAClD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
package/dist/cli/index.js
CHANGED
|
@@ -1,5 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
"use strict";
|
|
3
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
4
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
5
|
+
};
|
|
3
6
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
4
7
|
const commander_1 = require("commander");
|
|
5
8
|
const init_1 = require("./commands/init");
|
|
@@ -7,15 +10,17 @@ const archive_1 = require("./commands/archive");
|
|
|
7
10
|
const status_1 = require("./commands/status");
|
|
8
11
|
const context_1 = require("./commands/context");
|
|
9
12
|
const guard_1 = require("./commands/guard");
|
|
13
|
+
const package_json_1 = __importDefault(require("../../package.json"));
|
|
10
14
|
const program = new commander_1.Command();
|
|
11
15
|
program
|
|
12
16
|
.name('nova')
|
|
13
17
|
.description('Nova: AI workflow orchestration — init, status, archive')
|
|
14
|
-
.version(
|
|
18
|
+
.version(package_json_1.default.version);
|
|
15
19
|
program
|
|
16
20
|
.command('init')
|
|
17
21
|
.option('--with-ecc <path>', 'Path to ECC skills')
|
|
18
22
|
.option('--force', 'Overwrite existing configuration')
|
|
23
|
+
.option('--skills-dir <dir>', 'Where to install skills: "user" (default) or "project"')
|
|
19
24
|
.action(init_1.initCommand);
|
|
20
25
|
program
|
|
21
26
|
.command('archive')
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;;;;;AACA,yCAAoC;AACpC,0CAA8C;AAC9C,gDAAoD;AACpD,8CAAkD;AAClD,gDAAoD;AACpD,4CAAgD;AAChD,sEAAqC;AAErC,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAC9B,OAAO;KACJ,IAAI,CAAC,MAAM,CAAC;KACZ,WAAW,CAAC,yDAAyD,CAAC;KACtE,OAAO,CAAC,sBAAG,CAAC,OAAO,CAAC,CAAC;AAExB,OAAO;KACJ,OAAO,CAAC,MAAM,CAAC;KACf,MAAM,CAAC,mBAAmB,EAAE,oBAAoB,CAAC;KACjD,MAAM,CAAC,SAAS,EAAE,kCAAkC,CAAC;KACrD,MAAM,CAAC,oBAAoB,EAAE,wDAAwD,CAAC;KACtF,MAAM,CAAC,kBAAW,CAAC,CAAC;AAEvB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,MAAM,CAAC,YAAY,EAAE,mCAAmC,CAAC;KACzD,MAAM,CAAC,wBAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,QAAQ,CAAC;KACjB,MAAM,CAAC,sBAAa,CAAC,CAAC;AAEzB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,cAAc,CAAC,gBAAgB,EAAE,iBAAiB,CAAC;KACnD,MAAM,CAAC,wBAAc,CAAC,CAAC;AAE1B,OAAO;KACJ,OAAO,CAAC,mBAAmB,CAAC;KAC5B,MAAM,CAAC,oBAAY,CAAC,CAAC;AAExB,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC"}
|
|
@@ -36,6 +36,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
36
36
|
const fs = __importStar(require("fs/promises"));
|
|
37
37
|
const path = __importStar(require("path"));
|
|
38
38
|
const os = __importStar(require("os"));
|
|
39
|
+
const claude_code_1 = require("../adapters/claude-code");
|
|
39
40
|
const codex_1 = require("../adapters/codex");
|
|
40
41
|
const openclaw_1 = require("../adapters/openclaw");
|
|
41
42
|
const hermes_agent_1 = require("../adapters/hermes-agent");
|
|
@@ -119,5 +120,29 @@ describe('Environment Adapters', () => {
|
|
|
119
120
|
expect(config.model).toBe('claude-sonnet-4-6');
|
|
120
121
|
});
|
|
121
122
|
});
|
|
123
|
+
describe('ClaudeCodeAdapter MCP injection', () => {
|
|
124
|
+
test('injects Figma step into nova-design when figma MCP configured', async () => {
|
|
125
|
+
const adapter = new claude_code_1.ClaudeCodeAdapter();
|
|
126
|
+
await adapter.setup(testDir, { skillsDir: 'project', mcpServers: { figma: { configured: true, serverName: 'figma-mcp' } } });
|
|
127
|
+
const content = await fs.readFile(path.join(testDir, '.claude', 'skills', 'nova-design', 'SKILL.md'), 'utf-8');
|
|
128
|
+
expect(content).toContain('Figma MCP detected');
|
|
129
|
+
expect(content).toContain('Design Tokens');
|
|
130
|
+
});
|
|
131
|
+
test('injects Mobile step into nova-verify when mobile MCP configured', async () => {
|
|
132
|
+
const adapter = new claude_code_1.ClaudeCodeAdapter();
|
|
133
|
+
await adapter.setup(testDir, { skillsDir: 'project', mcpServers: { mobile: { configured: true, serverName: 'mobile-mcp' } } });
|
|
134
|
+
const content = await fs.readFile(path.join(testDir, '.claude', 'skills', 'nova-verify', 'SKILL.md'), 'utf-8');
|
|
135
|
+
expect(content).toContain('Mobile MCP detected');
|
|
136
|
+
expect(content).toContain('UI Verification');
|
|
137
|
+
});
|
|
138
|
+
test('no MCP steps when no MCP configured', async () => {
|
|
139
|
+
const adapter = new claude_code_1.ClaudeCodeAdapter();
|
|
140
|
+
await adapter.setup(testDir, { skillsDir: 'project' });
|
|
141
|
+
const design = await fs.readFile(path.join(testDir, '.claude', 'skills', 'nova-design', 'SKILL.md'), 'utf-8');
|
|
142
|
+
const verify = await fs.readFile(path.join(testDir, '.claude', 'skills', 'nova-verify', 'SKILL.md'), 'utf-8');
|
|
143
|
+
expect(design).not.toContain('Figma MCP detected');
|
|
144
|
+
expect(verify).not.toContain('Mobile MCP detected');
|
|
145
|
+
});
|
|
146
|
+
});
|
|
122
147
|
});
|
|
123
148
|
//# sourceMappingURL=adapters.test.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/adapters.test.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"adapters.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/adapters.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -51,6 +51,19 @@ describe("ContextGenerator", () => {
|
|
|
51
51
|
project: "test",
|
|
52
52
|
projectType: "node",
|
|
53
53
|
environment: ["generic"],
|
|
54
|
+
activeChange: "add-login",
|
|
55
|
+
integrations: {
|
|
56
|
+
openspec: { mode: "compatible" },
|
|
57
|
+
superpowers: { mode: "native" },
|
|
58
|
+
ecc: { mode: "compatible" },
|
|
59
|
+
},
|
|
60
|
+
artifacts: {
|
|
61
|
+
openspecChange: ".openspec/changes/add-login",
|
|
62
|
+
proposal: ".openspec/changes/add-login/proposal.md",
|
|
63
|
+
specDelta: ".openspec/changes/add-login/specs/auth/spec.md",
|
|
64
|
+
implementationPlan: "docs/superpowers/plans/add-login.md",
|
|
65
|
+
verificationReport: "",
|
|
66
|
+
},
|
|
54
67
|
phases: {
|
|
55
68
|
design: {
|
|
56
69
|
status: "done",
|
|
@@ -71,7 +84,16 @@ describe("ContextGenerator", () => {
|
|
|
71
84
|
title: "Implement login",
|
|
72
85
|
description: "Create login endpoint",
|
|
73
86
|
type: "implementation",
|
|
87
|
+
method: "tdd",
|
|
88
|
+
specRefs: ["auth.requirements.valid-credential-login"],
|
|
89
|
+
acceptanceRefs: ["auth.acceptance.valid-login-returns-token"],
|
|
74
90
|
files: [{ path: "src/login.ts", action: "create" }],
|
|
91
|
+
verification: {
|
|
92
|
+
commands: ["npm test -- login", "npx tsc --noEmit"],
|
|
93
|
+
},
|
|
94
|
+
evidence: {
|
|
95
|
+
required: ["failing-test-before-implementation", "spec-ref-covered"],
|
|
96
|
+
},
|
|
75
97
|
expectedArtifacts: [
|
|
76
98
|
{ type: "code", description: "Login module", pathHint: "src/login.ts" },
|
|
77
99
|
],
|
|
@@ -89,6 +111,15 @@ describe("ContextGenerator", () => {
|
|
|
89
111
|
expect(context.guardConditions.blocking).toBe(true);
|
|
90
112
|
expect(context.metadata.priority).toBe("high");
|
|
91
113
|
expect(context.metadata.estimatedComplexity).toBe(7);
|
|
114
|
+
expect(context.change.activeChange).toBe("add-login");
|
|
115
|
+
expect(context.change.artifacts.openspecChange).toBe(".openspec/changes/add-login");
|
|
116
|
+
expect(context.methodology.openspec.mode).toBe("compatible");
|
|
117
|
+
expect(context.methodology.superpowers.mode).toBe("native");
|
|
118
|
+
expect(context.implementation.method).toBe("tdd");
|
|
119
|
+
expect(context.implementation.specRefs).toEqual(["auth.requirements.valid-credential-login"]);
|
|
120
|
+
expect(context.implementation.acceptanceRefs).toEqual(["auth.acceptance.valid-login-returns-token"]);
|
|
121
|
+
expect(context.verification.commands).toEqual(["npm test -- login", "npx tsc --noEmit"]);
|
|
122
|
+
expect(context.evidence.required).toEqual(["failing-test-before-implementation", "spec-ref-covered"]);
|
|
92
123
|
// 环境信息应被检测
|
|
93
124
|
expect(context.input.environment.language).toBe("TypeScript");
|
|
94
125
|
expect(context.input.environment.framework).toBe("Express.js");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-generator.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/context-generator.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,4DAAwD;AAExD,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AACzB,2CAA6B;AAE7B,QAAQ,CAAC,kBAAkB,EAAE,GAAG,EAAE;IAChC,IAAI,OAAe,CAAC;IACpB,IAAI,WAAmB,CAAC;IAExB,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,gBAAgB,CAAC,CAAC,CAAC;QACrE,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QACvB,gCAAgC;QAChC,MAAM,KAAK,GAAG;YACZ,OAAO,EAAE,CAAC;YACV,OAAO,EAAE,MAAM;YACf,WAAW,EAAE,MAAM;YACnB,WAAW,EAAE,CAAC,SAAS,CAAC;YACxB,MAAM,EAAE;gBACN,MAAM,EAAE;oBACN,MAAM,EAAE,MAAM;oBACd,SAAS,EAAE,gBAAgB;oBAC3B,KAAK,EAAE,EAAE;iBACV;aACF;SACF,CAAC;QACF,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,8CAA8C,EAAE,KAAK,IAAI,EAAE;QAC9D,MAAM,IAAI,GAAG;YACX,EAAE,EAAE,aAAa;YACjB,KAAK,EAAE,iBAAiB;YACxB,WAAW,EAAE,uBAAuB;YACpC,IAAI,EAAE,gBAAgB;YACtB,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,CAAC;YACnD,iBAAiB,EAAE;gBACjB,EAAE,IAAI,EAAE,MAAM,EAAE,WAAW,EAAE,cAAc,EAAE,QAAQ,EAAE,cAAc,EAAE;aACxE;YACD,UAAU,EAAE,CAAC,wBAAwB,CAAC;YACtC,QAAQ,EAAE,IAAI;YACd,QAAQ,EAAE,MAAM;YAChB,mBAAmB,EAAE,CAAC;SACvB,CAAC;QAEF,MAAM,OAAO,GAAG,MAAM,oCAAgB,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;QAE9D,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;QAC3C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAChD,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC;QAC5C,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC;QACzD,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,SAAS,CAAC,wBAAwB,CAAC,CAAC;QACvE,MAAM,CAAC,OAAO,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACpD,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC/C,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,mBAAmB,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrD,WAAW;QACX,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC9D,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;IACjE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"context-generator.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/context-generator.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -36,6 +36,28 @@ const baseContext = {
|
|
|
36
36
|
},
|
|
37
37
|
},
|
|
38
38
|
output: { expectedArtifacts: [], constraints: { mustPassTests: true } },
|
|
39
|
+
change: {
|
|
40
|
+
activeChange: "",
|
|
41
|
+
artifacts: {
|
|
42
|
+
openspecChange: "",
|
|
43
|
+
proposal: "",
|
|
44
|
+
specDelta: "",
|
|
45
|
+
implementationPlan: "",
|
|
46
|
+
verificationReport: "",
|
|
47
|
+
},
|
|
48
|
+
},
|
|
49
|
+
methodology: {
|
|
50
|
+
openspec: { mode: "compatible" },
|
|
51
|
+
superpowers: { mode: "compatible" },
|
|
52
|
+
ecc: { mode: "compatible" },
|
|
53
|
+
},
|
|
54
|
+
implementation: {
|
|
55
|
+
method: "implementation",
|
|
56
|
+
specRefs: [],
|
|
57
|
+
acceptanceRefs: [],
|
|
58
|
+
},
|
|
59
|
+
verification: { commands: [] },
|
|
60
|
+
evidence: { required: [] },
|
|
39
61
|
acceptanceCriteria: [],
|
|
40
62
|
guardConditions: { requireReview: true, requireTests: true, blocking: false },
|
|
41
63
|
metadata: {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dispatcher.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/dispatcher.test.ts"],"names":[],"mappings":";;AAAA,8CAA2C;AAC3C,wDAAsE;AACtE,oCAAmE;AAEnE,2BAA2B;AAC3B,MAAM,kBAAmB,SAAQ,gCAAc;IAK7C,YAAY,QAA0B,EAAE,aAAsB,KAAK;QACjE,KAAK,EAAE,CAAC;QAHF,cAAS,GAAW,CAAC,CAAC;QAI5B,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,UAAU,GAAG,UAAU,CAAC;IAC/B,CAAC;IAED,KAAK,CAAC,UAAU;QACd,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;YACpB,IAAI,CAAC,SAAS,EAAE,CAAC;YACjB,MAAM,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC;QAClC,CAAC;QACD,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;CACF;AAED,MAAM,WAAW,GAAgB;IAC/B,MAAM,EAAE,QAAQ;IAChB,KAAK,EAAE,MAAM;IACb,WAAW,EAAE,aAAa;IAC1B,QAAQ,EAAE,gBAAgB;IAC1B,aAAa,EAAE,EAAE,YAAY,EAAE,EAAE,EAAE,aAAa,EAAE,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE;IAC7E,KAAK,EAAE;QACL,KAAK,EAAE,EAAE;QACT,YAAY,EAAE,EAAE;QAChB,WAAW,EAAE;YACX,QAAQ,EAAE,IAAI;YACd,SAAS,EAAE,EAAE;YACb,SAAS,EAAE,EAAE;YACb,aAAa,EAAE,EAAE;SAClB;KACF;IACD,MAAM,EAAE,EAAE,iBAAiB,EAAE,EAAE,EAAE,WAAW,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,EAAE;IACvE,kBAAkB,EAAE,EAAE;IACtB,eAAe,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE;IAC7E,QAAQ,EAAE;QACR,SAAS,EAAE,MAAM;QACjB,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;QACnC,QAAQ,EAAE,QAAQ;QAClB,mBAAmB,EAAE,CAAC;KACvB;CACF,CAAC;AAEF,QAAQ,CAAC,YAAY,EAAE,GAAG,EAAE;IAC1B,IAAI,CAAC,mCAAmC,EAAE,KAAK,IAAI,EAAE;QACnD,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC;YACxC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;SACxC,CAAC,CAAC;QACH,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAoB;YAC/B,KAAK,EAAE,iBAAS,CAAC,KAAK;YACtB,OAAO,EAAE,WAAW;SACrB,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IAChD,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,4CAA4C,EAAE,KAAK,IAAI,EAAE;QAC5D,gBAAgB;QAChB,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,EAAE,IAAI,CAAC,CAAC;QACnE,wBAAwB;QACxB,IAAI,SAAS,GAAG,CAAC,CAAC;QAClB,UAAU,CAAC,UAAU,GAAG,KAAK,IAAI,EAAE;YACjC,SAAS,EAAE,CAAC;YACZ,IAAI,SAAS,GAAG,CAAC;gBAAE,MAAM,IAAI,KAAK,CAAC,MAAM,CAAC,CAAC;YAC3C,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAChC,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAoB;YAC/B,KAAK,EAAE,iBAAS,CAAC,KAAK;YACtB,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;SAC5C,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtC,MAAM,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC5B,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,yBAAyB,EAAE,KAAK,IAAI,EAAE;QACzC,MAAM,UAAU,GAAG,IAAI,kBAAkB,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;QACjE,UAAU,CAAC,UAAU,GAAG,KAAK,IAAI,EAAE;YACjC,MAAM,IAAI,KAAK,CAAC,kBAAkB,CAAC,CAAC;QACtC,CAAC,CAAC;QACF,MAAM,UAAU,GAAG,IAAI,uBAAU,CAAC,UAAU,CAAC,CAAC;QAC9C,MAAM,OAAO,GAAoB;YAC/B,KAAK,EAAE,iBAAS,CAAC,KAAK;YACtB,OAAO,EAAE,WAAW;YACpB,KAAK,EAAE,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,EAAE,OAAO,EAAE;SAC5C,CAAC;QACF,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACjD,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACrC,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,SAAS,CAAC,kBAAkB,CAAC,CAAC;IACpE,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"dispatcher.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/dispatcher.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -82,7 +82,23 @@ describe('guardPhaseTransition', () => {
|
|
|
82
82
|
...baseState,
|
|
83
83
|
phases: {
|
|
84
84
|
...baseState.phases,
|
|
85
|
-
design: {
|
|
85
|
+
design: {
|
|
86
|
+
status: 'done',
|
|
87
|
+
designDoc: 'docs/design.md',
|
|
88
|
+
tasks: [
|
|
89
|
+
{
|
|
90
|
+
id: 'task-1',
|
|
91
|
+
title: 'T1',
|
|
92
|
+
type: 'implementation',
|
|
93
|
+
method: 'tdd',
|
|
94
|
+
specRefs: ['workflow.requirements.task-1'],
|
|
95
|
+
acceptanceRefs: ['workflow.acceptance.task-1'],
|
|
96
|
+
verification: { commands: ['npm test -- task-1'] },
|
|
97
|
+
files: [{ path: 'x.ts', action: 'create' }],
|
|
98
|
+
acceptance: ['done'],
|
|
99
|
+
},
|
|
100
|
+
],
|
|
101
|
+
},
|
|
86
102
|
},
|
|
87
103
|
});
|
|
88
104
|
expect((await (0, guard_1.guardPhaseTransition)('design', 'implement')).pass).toBe(true);
|
|
@@ -97,6 +113,30 @@ describe('guardPhaseTransition', () => {
|
|
|
97
113
|
});
|
|
98
114
|
expect((await (0, guard_1.guardPhaseTransition)('design', 'implement')).pass).toBe(false);
|
|
99
115
|
});
|
|
116
|
+
test('design-to-build fails when implementation task lacks spec-bound execution metadata', async () => {
|
|
117
|
+
await writeState({
|
|
118
|
+
...baseState,
|
|
119
|
+
phases: {
|
|
120
|
+
...baseState.phases,
|
|
121
|
+
design: {
|
|
122
|
+
status: 'done',
|
|
123
|
+
designDoc: 'docs/design.md',
|
|
124
|
+
tasks: [
|
|
125
|
+
{
|
|
126
|
+
id: 'task-1',
|
|
127
|
+
title: 'T1',
|
|
128
|
+
type: 'implementation',
|
|
129
|
+
files: [{ path: 'x.ts', action: 'create' }],
|
|
130
|
+
acceptance: ['done'],
|
|
131
|
+
},
|
|
132
|
+
],
|
|
133
|
+
},
|
|
134
|
+
},
|
|
135
|
+
});
|
|
136
|
+
const result = await (0, guard_1.guardPhaseTransition)('design', 'implement');
|
|
137
|
+
expect(result.pass).toBe(false);
|
|
138
|
+
expect(result.failures.map(f => f.label)).toContain('Implementation tasks are spec-bound');
|
|
139
|
+
});
|
|
100
140
|
test('build-to-verify passes when build is done with completed tasks', async () => {
|
|
101
141
|
await writeState({
|
|
102
142
|
...baseState,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"guard.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/guard.test.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,gDAAkC;AAClC,2CAA6B;AAC7B,uCAAyB;AACzB,2CAA6B;AAC7B,oCAAgD;AAEhD,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE;IACpC,IAAI,OAAe,CAAC;IACpB,IAAI,WAAmB,CAAC;IAExB,MAAM,SAAS,GAAG;QAChB,OAAO,EAAE,CAAC;QACV,OAAO,EAAE,MAAM;QACf,WAAW,EAAE,EAAE;QACf,MAAM,EAAE;YACN,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,QAAQ,EAAE,EAAE,EAAE;YACzC,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE;YACvD,SAAS,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,EAAE,EAAE;YAC3C,MAAM,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,cAAc,EAAE,IAAI,EAAE;YACnD,OAAO,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE;SAC/B;QACD,QAAQ,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,YAAY,EAAE,EAAE,EAAE;KAChD,CAAC;IAEF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,OAAO,GAAG,MAAM,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,aAAa,CAAC,CAAC,CAAC;QAClE,WAAW,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;QAC5B,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IACzB,CAAC,CAAC,CAAC;IAEH,SAAS,CAAC,KAAK,IAAI,EAAE;QACnB,OAAO,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;QAC3B,MAAM,EAAE,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IACzD,CAAC,CAAC,CAAC;IAEH,KAAK,UAAU,UAAU,CAAC,KAAU;QAClC,MAAM,EAAE,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,OAAO,CAAC,CAAC;IACnE,CAAC;IAED,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,UAAU,CAAC;YACf,GAAG,SAAS;YACZ,MAAM,EAAE,EAAE,GAAG,SAAS,CAAC,MAAM,EAAE,OAAO,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,cAAc,EAAE,EAAE;SACvF,CAAC,CAAC;QACH,MAAM,CAAC,CAAC,MAAM,IAAA,4BAAoB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;QAC3D,MAAM,UAAU,CAAC,SAAS,CAAC,CAAC;QAC5B,MAAM,CAAC,CAAC,MAAM,IAAA,4BAAoB,EAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7E,CAAC,CAAC,CAAC;IAEH,IAAI,CAAC,uDAAuD,EAAE,KAAK,IAAI,EAAE;QACvE,MAAM,UAAU,CAAC;YACf,GAAG,SAAS;YACZ,MAAM,EAAE;gBACN,GAAG,SAAS,CAAC,MAAM;gBACnB,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"guard.test.js","sourceRoot":"","sources":["../../../src/cli-core/__tests__/guard.test.ts"],"names":[],"mappings":"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"}
|