opennori 0.1.8 → 0.1.9
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/.opennori/protocol.md +62 -22
- package/README.md +88 -47
- package/dist/bin/opennori.js +1 -1
- package/dist/bin/opennori.js.map +1 -1
- package/dist/src/acceptance.d.ts +2 -1
- package/dist/src/acceptance.d.ts.map +1 -1
- package/dist/src/acceptance.js +181 -3
- package/dist/src/acceptance.js.map +1 -1
- package/dist/src/architecture/report.d.ts.map +1 -1
- package/dist/src/architecture/report.js +2 -1
- package/dist/src/architecture/report.js.map +1 -1
- package/dist/src/cli/command-tree.d.ts.map +1 -1
- package/dist/src/cli/command-tree.js +9 -5
- package/dist/src/cli/command-tree.js.map +1 -1
- package/dist/src/cli/commands/acceptance/criterion.d.ts +55 -0
- package/dist/src/cli/commands/acceptance/criterion.d.ts.map +1 -1
- package/dist/src/cli/commands/acceptance/criterion.js +100 -1
- package/dist/src/cli/commands/acceptance/criterion.js.map +1 -1
- package/dist/src/cli/commands/acceptance/draft.d.ts +9 -0
- package/dist/src/cli/commands/acceptance/draft.d.ts.map +1 -1
- package/dist/src/cli/commands/acceptance/draft.js +16 -26
- package/dist/src/cli/commands/acceptance/draft.js.map +1 -1
- package/dist/src/cli/commands/acceptance/runtime-status.d.ts.map +1 -1
- package/dist/src/cli/commands/acceptance/runtime-status.js +17 -11
- package/dist/src/cli/commands/acceptance/runtime-status.js.map +1 -1
- package/dist/src/cli/commands/acceptance.d.ts +1 -1
- package/dist/src/cli/commands/acceptance.d.ts.map +1 -1
- package/dist/src/cli/commands/acceptance.js +1 -1
- package/dist/src/cli/commands/acceptance.js.map +1 -1
- package/dist/src/cli/commands/check.d.ts.map +1 -1
- package/dist/src/cli/commands/check.js +26 -11
- package/dist/src/cli/commands/check.js.map +1 -1
- package/dist/src/cli/commands/context.d.ts +17 -8
- package/dist/src/cli/commands/context.d.ts.map +1 -1
- package/dist/src/cli/commands/context.js +8 -23
- package/dist/src/cli/commands/context.js.map +1 -1
- package/dist/src/cli/commands/evidence/add.d.ts.map +1 -1
- package/dist/src/cli/commands/evidence/add.js +3 -2
- package/dist/src/cli/commands/evidence/add.js.map +1 -1
- package/dist/src/cli/commands/evidence/prune.d.ts +35 -0
- package/dist/src/cli/commands/evidence/prune.d.ts.map +1 -0
- package/dist/src/cli/commands/evidence/prune.js +57 -0
- package/dist/src/cli/commands/evidence/prune.js.map +1 -0
- package/dist/src/cli/commands/evidence.d.ts +1 -0
- package/dist/src/cli/commands/evidence.d.ts.map +1 -1
- package/dist/src/cli/commands/evidence.js +1 -0
- package/dist/src/cli/commands/evidence.js.map +1 -1
- package/dist/src/cli/commands/reporting.d.ts.map +1 -1
- package/dist/src/cli/commands/reporting.js +7 -4
- package/dist/src/cli/commands/reporting.js.map +1 -1
- package/dist/src/cli/commands/setup.d.ts +35 -0
- package/dist/src/cli/commands/setup.d.ts.map +1 -0
- package/dist/src/cli/commands/setup.js +51 -0
- package/dist/src/cli/commands/setup.js.map +1 -0
- package/dist/src/cli/init.d.ts +9 -0
- package/dist/src/cli/init.d.ts.map +1 -0
- package/dist/src/cli/init.js +111 -0
- package/dist/src/cli/init.js.map +1 -0
- package/dist/src/cli/runtime.d.ts +2 -0
- package/dist/src/cli/runtime.d.ts.map +1 -1
- package/dist/src/cli/runtime.js +15 -5
- package/dist/src/cli/runtime.js.map +1 -1
- package/dist/src/cli/setup.d.ts +9 -0
- package/dist/src/cli/setup.d.ts.map +1 -0
- package/dist/src/cli/setup.js +89 -0
- package/dist/src/cli/setup.js.map +1 -0
- package/dist/src/cli.d.ts.map +1 -1
- package/dist/src/cli.js +15 -1
- package/dist/src/cli.js.map +1 -1
- package/dist/src/core/contract.d.ts +2 -1
- package/dist/src/core/contract.d.ts.map +1 -1
- package/dist/src/core/contract.js +2 -180
- package/dist/src/core/contract.js.map +1 -1
- package/dist/src/core/evidence.d.ts +15 -4
- package/dist/src/core/evidence.d.ts.map +1 -1
- package/dist/src/core/evidence.js +146 -23
- package/dist/src/core/evidence.js.map +1 -1
- package/dist/src/core/profile.d.ts.map +1 -1
- package/dist/src/core/profile.js +10 -0
- package/dist/src/core/profile.js.map +1 -1
- package/dist/src/core/report.d.ts +9 -4
- package/dist/src/core/report.d.ts.map +1 -1
- package/dist/src/core/report.js +238 -26
- package/dist/src/core/report.js.map +1 -1
- package/dist/src/lifecycle/context-export.d.ts.map +1 -1
- package/dist/src/lifecycle/context-export.js +6 -4
- package/dist/src/lifecycle/context-export.js.map +1 -1
- package/dist/src/lifecycle/doctor/manifest-health.js +8 -8
- package/dist/src/lifecycle/doctor/manifest-health.js.map +1 -1
- package/dist/src/lifecycle/doctor/plugin-health.js +1 -1
- package/dist/src/lifecycle/doctor/plugin-health.js.map +1 -1
- package/dist/src/lifecycle/doctor/project-health.js +6 -6
- package/dist/src/lifecycle/doctor/project-health.js.map +1 -1
- package/dist/src/lifecycle/setup.d.ts +47 -0
- package/dist/src/lifecycle/setup.d.ts.map +1 -0
- package/dist/src/lifecycle/setup.js +275 -0
- package/dist/src/lifecycle/setup.js.map +1 -0
- package/dist/src/lifecycle/shared.d.ts.map +1 -1
- package/dist/src/lifecycle/shared.js +2 -1
- package/dist/src/lifecycle/shared.js.map +1 -1
- package/dist/src/lifecycle.d.ts +1 -0
- package/dist/src/lifecycle.d.ts.map +1 -1
- package/dist/src/lifecycle.js +1 -0
- package/dist/src/lifecycle.js.map +1 -1
- package/dist/src/types.d.ts +25 -1
- package/dist/src/types.d.ts.map +1 -1
- package/examples/opennori-self.json +15 -7
- package/package.json +1 -1
- package/plugins/opennori/.codex-plugin/plugin.json +5 -4
- package/plugins/opennori/skills/nori/SKILL.md +76 -25
- package/plugins/opennori/skills/nori-acceptance/SKILL.md +81 -19
- package/plugins/opennori/skills/nori-architecture-apply/SKILL.md +57 -13
- package/plugins/opennori/skills/nori-architecture-brainstorm/SKILL.md +63 -19
- package/plugins/opennori/skills/nori-architecture-challenge/SKILL.md +52 -10
- package/plugins/opennori/skills/nori-build-vs-buy/SKILL.md +61 -9
- package/plugins/opennori/skills/nori-capability-profile/SKILL.md +59 -11
- package/plugins/opennori/skills/nori-evidence/SKILL.md +65 -11
- package/plugins/opennori/skills/nori-project-health/SKILL.md +81 -31
- package/plugins/opennori/skills/nori-reporting/SKILL.md +68 -18
- package/src/acceptance.ts +223 -3
- package/src/architecture/report.ts +2 -1
- package/src/cli/command-tree.ts +9 -5
- package/src/cli/commands/acceptance/criterion.ts +104 -0
- package/src/cli/commands/acceptance/draft.ts +15 -33
- package/src/cli/commands/acceptance/runtime-status.ts +17 -11
- package/src/cli/commands/acceptance.ts +2 -0
- package/src/cli/commands/check.ts +26 -11
- package/src/cli/commands/context.ts +8 -23
- package/src/cli/commands/evidence/add.ts +3 -1
- package/src/cli/commands/evidence/prune.ts +67 -0
- package/src/cli/commands/evidence.ts +4 -0
- package/src/cli/commands/reporting.ts +7 -4
- package/src/cli/commands/setup.ts +66 -0
- package/src/cli/init.ts +152 -0
- package/src/cli/runtime.ts +17 -5
- package/src/cli/setup.ts +139 -0
- package/src/cli.ts +18 -1
- package/src/core/contract.ts +3 -185
- package/src/core/evidence.ts +154 -22
- package/src/core/profile.ts +7 -0
- package/src/core/report.ts +246 -26
- package/src/lifecycle/context-export.ts +6 -4
- package/src/lifecycle/doctor/manifest-health.ts +8 -8
- package/src/lifecycle/doctor/plugin-health.ts +1 -1
- package/src/lifecycle/doctor/project-health.ts +6 -6
- package/src/lifecycle/setup.ts +383 -0
- package/src/lifecycle/shared.ts +2 -1
- package/src/lifecycle.ts +1 -0
- package/src/types.ts +27 -0
package/.opennori/protocol.md
CHANGED
|
@@ -18,6 +18,16 @@ For non-trivial goals, OpenNori also carries an Architecture Baseline. Product A
|
|
|
18
18
|
human user must be able to accept. Architecture Baseline answers what technical architecture the
|
|
19
19
|
agent must follow while producing that outcome. These are reported together but kept separate.
|
|
20
20
|
|
|
21
|
+
OpenNori is installed and used as one agent capability bundle:
|
|
22
|
+
|
|
23
|
+
- Codex Plugin distributes and discovers packaged OpenNori Skills.
|
|
24
|
+
- Skills define the agent behavior protocols and natural-language routing.
|
|
25
|
+
- `opennori` is the deterministic state layer those Skills call.
|
|
26
|
+
- `.opennori/` is the project-local contract, evidence, profile, architecture, health, and report store.
|
|
27
|
+
|
|
28
|
+
Do not present Plugin, Skills, CLI, or `.opennori` state as separate user workflows. Direct CLI use
|
|
29
|
+
is an advanced, automation, or debugging route for the same state layer.
|
|
30
|
+
|
|
21
31
|
## Layered Acceptance Criteria v1
|
|
22
32
|
|
|
23
33
|
OpenNori itself is accepted only when it satisfies user-tool-operation acceptance criteria.
|
|
@@ -78,7 +88,7 @@ a durable workflow asset.
|
|
|
78
88
|
| ID | Tool / entrypoint | User operation | User acceptance criterion | Passing threshold |
|
|
79
89
|
| --- | --- | --- | --- | --- |
|
|
80
90
|
| AC-Z-1 | Codex Plugin / package assets | Install or inspect the OpenNori package | The user's agent can discover focused OpenNori Skills without the user memorizing CLI flags. | `.agents/plugins/marketplace.json` points to `./plugins/opennori`; `plugins/opennori/.codex-plugin/plugin.json` points to package-local `skills/`; the `nori` Skill routes natural-language work through acceptance, evidence, profile, architecture, health, and reporting. |
|
|
81
|
-
| AC-Z-2 | CLI | Run `opennori install` | The user can
|
|
91
|
+
| AC-Z-2 | CLI | Run `opennori init` or `opennori install` | The user can initialize OpenNori project state without unexpected overwrites. | Init/install shows created/skipped assets; existing user content is not overwritten by default. |
|
|
82
92
|
| AC-Z-3 | Git / PR diff | Review the agent's changes | The user can separate acceptance evidence changes from implementation noise. | Summary defaults to AC status changes, evidence changes, and user impact. |
|
|
83
93
|
| AC-Z-4 | CLI | Run `opennori list` and select a goal | The user can see multiple active goals and choose one explicitly. | Multiple active goals are listed with status, gap, and paths; `--goal` selects the target. |
|
|
84
94
|
| AC-Z-5 | CLI | Archive a completed or blocked goal | The user removes it from active work while preserving evidence and report. | Active no longer lists the goal; contract, ledger, and report remain recoverable. |
|
|
@@ -88,11 +98,13 @@ a durable workflow asset.
|
|
|
88
98
|
| AC-Z-9 | CLI | Preview install with `opennori install --dry-run` | The user can judge what OpenNori would create, skip, update, or overwrite before writing to the project. | Install plan lists action, kind, managed status, write intent, destructive flag, and reason; dry-run reports zero actual writes. |
|
|
89
99
|
| AC-Z-10 | CLI | Apply force install | The user must preview and explicitly confirm destructive install actions before files are overwritten. | Real `opennori install --force` fails without confirmation; dry-run previews destructive overwrites; confirmed force install may write. |
|
|
90
100
|
| AC-Z-11 | CLI | Preview and apply uninstall | The user can uninstall OpenNori entry assets without losing acceptance state by default. | Uninstall plan shows removals and preserved state; real uninstall requires confirmation; `.opennori` state is deleted only with `--include-state --confirm`. |
|
|
91
|
-
| AC-Z-12 | Codex Plugin / Codex Skills | Use OpenNori Plugin Skills | The agent gets focused OpenNori Skills for acceptance, evidence, Nori Profile, architecture, project health, and
|
|
101
|
+
| AC-Z-12 | Codex Plugin / Codex Skills | Use OpenNori Plugin Skills | The agent gets focused OpenNori Skills for acceptance, evidence, Nori Profile, architecture, project health, reporting, and next-loop candidates while the user keeps using natural language. | The npm package ships `.agents/plugins/marketplace.json`, `plugins/opennori/.codex-plugin/plugin.json`, and `plugins/opennori/skills/nori*/SKILL.md`; each Skill is an agent behavior protocol with trigger semantics, state reading, natural-language mapping, state write boundaries, handoffs, user reply shape, and misuse guards; install does not copy Skills into the project; manifest records `plugin`; doctor detects missing packaged Plugin Skills. |
|
|
92
102
|
| AC-Z-13 | CLI / project file browser | Establish an Architecture Baseline | The user can see what architecture the agent must follow while implementing Product AC. | `.opennori/architecture/baseline.json`, `.opennori/architecture/baseline.md`, and `.opennori/agent-guide.md` expose the baseline to agents and reviewers. |
|
|
93
103
|
| AC-Z-14 | CLI / project file browser | Add a project Architecture Profile | The user can extend built-in profiles with a reviewed project profile. | `opennori architecture profile --from <profile.json>` writes `.opennori/architecture/profiles/<id>.json`; `architecture profiles` lists it before built-ins. |
|
|
94
104
|
| AC-Z-15 | CLI / report | Challenge a baseline | The user can review evidence before an agent changes architecture. | `opennori architecture challenge` records current baseline, conflict evidence, recommendation, and user confirmation requirement. |
|
|
95
105
|
| AC-Z-16 | CLI / report | Record build-vs-buy decisions | The user can see whether existing dependencies, standard libraries, official SDKs, and mature OSS were checked before self-building infrastructure. | `opennori architecture build-vs-buy` records the decision under `.opennori/architecture/decisions/` and status/report summarize it. |
|
|
106
|
+
| AC-Z-18 | README / website / Plugin description | First read the OpenNori entry material | The user understands OpenNori as one agent capability bundle: Plugin discovery, packaged Skills, deterministic CLI state layer, and `.opennori` project state work together. | README Install/Quick Start, website Start, Plugin longDescription, and nori/project-health Skills do not present Plugin, Skills, or CLI as separate user paths; they explain that missing bundle parts should be recovered through doctor/health rather than used as a half-installed workflow. |
|
|
107
|
+
| AC-Z-19 | CLI / Codex / npm | Run `npx opennori setup`, then use `opennori init` in projects | The user installs the complete OpenNori capability bundle from one explicit setup entry and can initialize projects with the global CLI. | Setup previews Codex Plugin registration, packaged Skill availability, global CLI install, project `.opennori` initialization, and doctor; unconfirmed setup writes nothing; confirmed setup uses official `codex plugin` and npm commands plus OpenNori project initialization. |
|
|
96
108
|
|
|
97
109
|
## Required Artifact Pair
|
|
98
110
|
|
|
@@ -134,7 +146,9 @@ Each active goal has:
|
|
|
134
146
|
- Architecture Baseline, profile, challenge, build-vs-buy, and agent-readable surface state
|
|
135
147
|
- protocol capabilities exposed by this CLI
|
|
136
148
|
|
|
137
|
-
`opennori
|
|
149
|
+
`opennori init` creates project state through the same preview-first lifecycle used by install.
|
|
150
|
+
`opennori install` remains a deterministic project-asset command for agents and automation.
|
|
151
|
+
State-changing OpenNori commands refresh the manifest when
|
|
138
152
|
`.opennori/` already exists.
|
|
139
153
|
|
|
140
154
|
`opennori install --dry-run` returns an install plan. The plan uses deterministic action semantics:
|
|
@@ -159,8 +173,9 @@ directory requires both `--include-state` and `--confirm`.
|
|
|
159
173
|
|
|
160
174
|
## OpenNori Plugin Skills
|
|
161
175
|
|
|
162
|
-
OpenNori exposes Codex Skills through its Plugin and package assets.
|
|
163
|
-
|
|
176
|
+
OpenNori exposes Codex Skills through its Plugin and package assets. These Skills are agent
|
|
177
|
+
behavior protocols, not CLI manuals for users. The user should not need to remember Skill names or
|
|
178
|
+
command flags; the root `nori` Skill routes natural-language requests to focused Skills:
|
|
164
179
|
|
|
165
180
|
- `nori`: root router for OpenNori turns
|
|
166
181
|
- `nori-acceptance`: discover AC gaps, brainstorm, draft, approve, and revise human-facing ACs
|
|
@@ -171,7 +186,11 @@ remember these Skill names; the root `nori` Skill routes natural-language reques
|
|
|
171
186
|
- `nori-architecture-challenge`: raise evidence-backed requests to revise a baseline
|
|
172
187
|
- `nori-build-vs-buy`: record dependency/library/self-build decisions before infrastructure work
|
|
173
188
|
- `nori-project-health`: install, upgrade, uninstall, doctor, manifest, Plugin health, and project recoverability
|
|
174
|
-
- `nori-reporting`: status, report, current gap, user intervention, and
|
|
189
|
+
- `nori-reporting`: status, report, current gap, user intervention, changes, and context export
|
|
190
|
+
|
|
191
|
+
Each packaged Skill states its mission, starting state reads, natural-language mapping, allowed
|
|
192
|
+
state writes, handoff rules, user-facing reply shape, and misuse guards. This lets agents use
|
|
193
|
+
OpenNori from natural language while the CLI remains a deterministic state layer.
|
|
175
194
|
|
|
176
195
|
The package ships `.agents/plugins/marketplace.json` pointing to `./plugins/opennori`, where
|
|
177
196
|
`plugins/opennori/.codex-plugin/plugin.json` declares `skills: "./skills/"`. `opennori install`
|
|
@@ -180,13 +199,15 @@ The manifest records `plugin` state, and `opennori doctor` checks whether packag
|
|
|
180
199
|
present and whether the manifest Plugin state is stale.
|
|
181
200
|
|
|
182
201
|
When upgrading an existing OpenNori project, upgrade entry assets first, then run `opennori check`.
|
|
183
|
-
`check` validates active Nori
|
|
184
|
-
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
202
|
+
`check` validates active Nori Contract integrity as hard state structure, then reports
|
|
203
|
+
`acceptance_review` findings for vague or possibly implementation-centered ACs such as "modify
|
|
204
|
+
profile fields" or "show an error". These review findings are questions for the agent and user,
|
|
205
|
+
not hard protocol rejection. `check` also reports `architecture_check` warnings when the active goal
|
|
206
|
+
has no confirmed Architecture Baseline, stale agent-readable surface, or unresolved Architecture
|
|
207
|
+
Challenges. It reports `evidence_health` warnings when a complete-looking goal relies on stale,
|
|
208
|
+
broad, source-free, or non-reviewable evidence. It does not rewrite existing contracts, evidence,
|
|
209
|
+
reports, archives, brainstorms, or baselines. The user decides whether to revise affected criteria,
|
|
210
|
+
confirm assumptions, accept review risk, revise architecture, or refresh evidence.
|
|
190
211
|
|
|
191
212
|
## Nori Profile
|
|
192
213
|
|
|
@@ -209,7 +230,7 @@ Profile items have:
|
|
|
209
230
|
Completion rules:
|
|
210
231
|
|
|
211
232
|
- `must` blocks completion until satisfied or waived.
|
|
212
|
-
- `prefer`
|
|
233
|
+
- `prefer` does not block objective completion, but unknown or violated preferences become `profile_review` risk before confident completion.
|
|
213
234
|
- `avoid` blocks completion if violated.
|
|
214
235
|
|
|
215
236
|
Agents translate the user's natural-language preferences into profile records. Users should not
|
|
@@ -272,6 +293,13 @@ open-source libraries, and documented reference projects:
|
|
|
272
293
|
opennori architecture build-vs-buy --root <project> --area "<area>" --need "<need>" --recommendation <reuse|buy|self-build> --summary "<decision>" --json
|
|
273
294
|
```
|
|
274
295
|
|
|
296
|
+
Architecture state affects completion confidence, not Product AC shape. When every required Product
|
|
297
|
+
AC is `passing` or `waived` but the active goal has a missing/draft/invalid/challenged baseline,
|
|
298
|
+
stale agent-readable architecture surface, or unhealthy build-vs-buy decisions, OpenNori reports
|
|
299
|
+
`objective_complete: true` with `confidence: review-risk`. It must not create synthetic ARCH
|
|
300
|
+
acceptance criteria or replace `current_gap` unless a real Product AC or blocking Profile item is
|
|
301
|
+
still incomplete.
|
|
302
|
+
|
|
275
303
|
## Status Model
|
|
276
304
|
|
|
277
305
|
- `unknown`: no user-understandable evidence exists
|
|
@@ -282,7 +310,15 @@ opennori architecture build-vs-buy --root <project> --area "<area>" --need "<nee
|
|
|
282
310
|
|
|
283
311
|
The workflow ledger is complete only when every required criterion is `passing` or `waived`.
|
|
284
312
|
The user-facing completion answer is not confidently complete while `evidence_health` has review
|
|
285
|
-
findings,
|
|
313
|
+
findings, `profile_review` is unresolved, `architecture_review` remains, or `build_vs_buy` is
|
|
314
|
+
unhealthy, even if the ledger status is already `complete`.
|
|
315
|
+
|
|
316
|
+
When a goal is confidently complete, `next_recommendation` may include `candidate_goals`.
|
|
317
|
+
These candidates help the agent continue when the user has asked to keep going. Each candidate
|
|
318
|
+
names a possible next human-facing goal, the user value, acceptance directions, and risks.
|
|
319
|
+
Candidates are not phases, task lists, approved acceptance criteria, or completion evidence. The
|
|
320
|
+
agent must turn a selected or revised candidate into a new draft Nori Contract before using it for
|
|
321
|
+
completion judgment.
|
|
286
322
|
|
|
287
323
|
## Risk Gate
|
|
288
324
|
|
|
@@ -349,13 +385,15 @@ On every turn:
|
|
|
349
385
|
12. Before implementing an acceptance gap, read `.opennori/architecture/baseline.md` and keep Product AC separate from Architecture Checks.
|
|
350
386
|
13. Before self-building infrastructure, record a build-vs-buy decision.
|
|
351
387
|
14. If project evidence conflicts with the baseline, run `opennori architecture challenge`; do not silently replace the baseline.
|
|
352
|
-
15. If the user
|
|
353
|
-
16. If the user
|
|
354
|
-
17.
|
|
355
|
-
18.
|
|
356
|
-
19.
|
|
357
|
-
|
|
358
|
-
|
|
388
|
+
15. If the user adds a new acceptance boundary after approval, run `opennori criterion add --root <repo> --id <id> ... --json`; the new criterion becomes an evidence gap without forcing the agent to edit state files manually.
|
|
389
|
+
16. If the user revises a criterion later, run `opennori criterion update --root <repo> --criterion <id> ... --json`; old evidence for the changed criterion is cleared.
|
|
390
|
+
17. If the user asks to update an existing OpenNori project, run `opennori doctor`, use `opennori upgrade --dry-run/--confirm` for manifest/protocol/guide refreshes, then run `opennori check`; ask the user before revising any existing AC flagged by `acceptance_review`. If packaged Plugin Skills are missing, reinstall or update the OpenNori package instead of copying Skills into the project.
|
|
391
|
+
18. Run `opennori resume --root <repo>` or `opennori next --root <repo>` to recover the active goal and current acceptance gap from repository files.
|
|
392
|
+
19. Work only to produce evidence for that gap under the confirmed Architecture Baseline.
|
|
393
|
+
20. Add acceptance evidence with `opennori evidence add`; choose any suitable verification method, but record basis, sources, reviewability, confidence, and limitations. If existing evidence is invalid or obsolete, run `opennori evidence prune` first so stale proof does not occupy active context. Add profile compliance evidence with `opennori profile evidence` when profile items exist.
|
|
394
|
+
21. Run `opennori evaluate`.
|
|
395
|
+
22. Report acceptance state, profile compliance, and evidence, not implementation steps.
|
|
396
|
+
23. If the goal is complete and the user asked to continue, review `next_recommendation.candidate_goals`, choose or refine the strongest human-facing next goal, then run discovery or draft for a new Nori Contract. Do not treat candidate goals as approved AC, phases, task lists, or evidence.
|
|
359
397
|
|
|
360
398
|
Useful commands:
|
|
361
399
|
|
|
@@ -364,8 +402,10 @@ Useful commands:
|
|
|
364
402
|
- `opennori draft --goal "<goal>" --root <repo>`: create a draft Nori Contract that needs user approval.
|
|
365
403
|
- `opennori draft --from-brainstorm <brainstorm-id> --candidate <A|B|C> --root <repo>`: convert a selected brainstorm direction into a draft contract.
|
|
366
404
|
- `opennori approve --root <repo>`: mark the acceptance basis as approved so completion can be decided.
|
|
405
|
+
- `opennori criterion add --root <repo> --id <id> ...`: add a newly confirmed acceptance boundary to the active contract and ledger.
|
|
367
406
|
- `opennori criterion update --root <repo> --criterion <id> ...`: preserve a user revision as the new acceptance basis.
|
|
368
407
|
- `opennori evidence add --root <repo> --criterion <id> --kind <kind> --summary "<summary>" --result <passing|failing|blocked|waived> --basis <basis> --source '<json-or-label>' --reviewability "<how to review>" --limitations "<known limits>"`: attach user-understandable, reviewable evidence without forcing a fixed adapter.
|
|
408
|
+
- `opennori evidence prune --root <repo> --criterion <id> --reason "<reason>"`: remove invalid or obsolete evidence from an active criterion so reports and context exports only carry current proof.
|
|
369
409
|
- `opennori profile add --root <repo> --type <skill|stack|constraint> --name "<name>" --strength <must|prefer|avoid>`: record user execution preferences separately from ACs.
|
|
370
410
|
- `opennori profile evidence --root <repo> --item <item-id> --result <satisfied|violated|waived>`: record whether the agent followed the profile.
|
|
371
411
|
- `opennori profile show --root <repo>`: show profile compliance and blocking items.
|
package/README.md
CHANGED
|
@@ -14,62 +14,67 @@ plan internally, but the user-facing loop stays centered on what the user wants,
|
|
|
14
14
|
what acceptance checks define done, what evidence supports each check, and
|
|
15
15
|
whether the goal is complete.
|
|
16
16
|
|
|
17
|
-
## Install
|
|
17
|
+
## Install OpenNori Capability Bundle
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
OpenNori is one agent capability bundle, not three separate products:
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
- Codex Plugin distributes and discovers the packaged OpenNori Skills.
|
|
22
|
+
- OpenNori Skills are agent behavior protocols for natural-language work.
|
|
23
|
+
- `opennori` is the deterministic state layer those Skills call.
|
|
24
|
+
- `.opennori/` stores project contracts, evidence, profile, architecture, health, and reports.
|
|
22
25
|
|
|
23
|
-
|
|
26
|
+
First-time setup installs the complete bundle with preview and explicit
|
|
27
|
+
confirmation:
|
|
24
28
|
|
|
25
29
|
```bash
|
|
26
|
-
|
|
27
|
-
|
|
30
|
+
npx opennori setup
|
|
31
|
+
```
|
|
32
|
+
|
|
33
|
+
Setup previews the Codex Plugin registration, packaged Skill availability,
|
|
34
|
+
global `opennori` CLI installation, current project `.opennori/` initialization,
|
|
35
|
+
and final doctor check before it writes anything.
|
|
36
|
+
|
|
37
|
+
After setup, initialize any project from that project directory:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
opennori init
|
|
28
41
|
```
|
|
29
42
|
|
|
30
|
-
For local development from a checkout:
|
|
43
|
+
For local OpenNori development from a checkout:
|
|
31
44
|
|
|
32
45
|
```bash
|
|
33
46
|
codex plugin marketplace add .
|
|
34
47
|
codex plugin add opennori@opennori
|
|
35
48
|
```
|
|
36
49
|
|
|
37
|
-
After installing the
|
|
50
|
+
After installing the capability bundle, open a new Codex session and say:
|
|
38
51
|
|
|
39
52
|
```text
|
|
40
53
|
Use OpenNori for this goal.
|
|
41
54
|
```
|
|
42
55
|
|
|
43
|
-
|
|
56
|
+
For advanced recovery, the setup command is equivalent to previewing and then
|
|
57
|
+
confirming the same official Codex and npm actions:
|
|
44
58
|
|
|
45
59
|
```bash
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
### Pin the CLI to a project
|
|
50
|
-
|
|
51
|
-
```bash
|
|
52
|
-
npm install -D opennori
|
|
53
|
-
opennori
|
|
60
|
+
codex plugin marketplace add okbexx/opennori --ref main
|
|
61
|
+
codex plugin add opennori@opennori
|
|
62
|
+
npm install -g opennori@latest
|
|
54
63
|
```
|
|
55
64
|
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
contracts, record evidence, run doctor checks, and generate reports. Project
|
|
59
|
-
installs expose `opennori` through npm scripts, package-manager exec, and
|
|
60
|
-
agent/tool environments that load `node_modules/.bin`. Use `npx opennori` when
|
|
61
|
-
you want npm to resolve OpenNori for a one-off command.
|
|
65
|
+
Direct CLI use is an advanced or automation path, not a separate product path
|
|
66
|
+
from the Plugin and Skills.
|
|
62
67
|
|
|
63
68
|
## Quick Start
|
|
64
69
|
|
|
65
|
-
|
|
70
|
+
If OpenNori is already installed on this machine, run the project initializer:
|
|
66
71
|
|
|
67
72
|
```bash
|
|
68
|
-
opennori
|
|
73
|
+
opennori init
|
|
69
74
|
```
|
|
70
75
|
|
|
71
|
-
The
|
|
72
|
-
|
|
76
|
+
The initializer previews the `.opennori/` state it would create and asks before
|
|
77
|
+
writing. Agents and CI can use `--json` for deterministic machine-readable
|
|
73
78
|
output.
|
|
74
79
|
|
|
75
80
|
Then talk to your agent:
|
|
@@ -81,9 +86,8 @@ non-trivial work, and keep working from acceptance gaps until the report can
|
|
|
81
86
|
say whether it is complete.
|
|
82
87
|
```
|
|
83
88
|
|
|
84
|
-
Users do not need to memorize CLI flags
|
|
85
|
-
|
|
86
|
-
deterministic `opennori` state layer.
|
|
89
|
+
Users do not need to memorize CLI flags or Skill names. The bundled Skills map
|
|
90
|
+
natural language to the deterministic `opennori` state layer.
|
|
87
91
|
|
|
88
92
|
## What It Creates
|
|
89
93
|
|
|
@@ -125,14 +129,17 @@ A Nori Contract combines:
|
|
|
125
129
|
- current acceptance gap
|
|
126
130
|
- completion judgment
|
|
127
131
|
|
|
128
|
-
Acceptance checks describe user-visible operations and judgments, not
|
|
129
|
-
|
|
132
|
+
Acceptance checks should describe user-visible operations and judgments, not
|
|
133
|
+
implementation files, modules, tests, Skills, or technology choices. OpenNori
|
|
134
|
+
surfaces likely mistakes as review questions for the agent and user; it does
|
|
135
|
+
not reject a contract just because a heuristic sees a technical word.
|
|
130
136
|
|
|
131
137
|
### Acceptance Discovery
|
|
132
138
|
|
|
133
|
-
Nori should
|
|
134
|
-
|
|
135
|
-
|
|
139
|
+
Nori should review vague criteria such as "modify fields" or "show an error"
|
|
140
|
+
with the user instead of silently treating them as done. Before drafting or
|
|
141
|
+
claiming confident completion, OpenNori helps the agent ask the questions that
|
|
142
|
+
decide whether the user can accept the result:
|
|
136
143
|
|
|
137
144
|
- which fields can be changed
|
|
138
145
|
- what validation rules apply
|
|
@@ -153,6 +160,11 @@ project evidence conflicts with it, the agent creates an Architecture Challenge
|
|
|
153
160
|
instead of silently changing the technology stack, state model, dependency
|
|
154
161
|
policy, or directory boundary.
|
|
155
162
|
|
|
163
|
+
Missing, challenged, or stale architecture state is reported as
|
|
164
|
+
`architecture_review`: the Product AC can be objectively complete, but OpenNori
|
|
165
|
+
will not report confident completion until the agent or user reviews the
|
|
166
|
+
architecture risk.
|
|
167
|
+
|
|
156
168
|
### Evidence Record
|
|
157
169
|
|
|
158
170
|
Evidence can come from tests, screenshots, URLs, artifacts, logs, human
|
|
@@ -160,12 +172,28 @@ confirmation, waivers, or other reviewable sources. OpenNori keeps evidence
|
|
|
160
172
|
flexible, but high-risk completion should not rely only on an agent's
|
|
161
173
|
self-summary.
|
|
162
174
|
|
|
175
|
+
### Next Loop Candidates
|
|
176
|
+
|
|
177
|
+
When a goal is confidently complete, `resume`, `status`, `next`, `report`, and
|
|
178
|
+
context export include `next_recommendation.candidate_goals`. These are small
|
|
179
|
+
candidate starts for the next Nori Contract: each candidate names the goal, user
|
|
180
|
+
value, acceptance directions, and risks.
|
|
181
|
+
|
|
182
|
+
Candidate goals are not phases, task lists, approved acceptance checks, or
|
|
183
|
+
completion evidence. They help the agent continue after the user says
|
|
184
|
+
"continue" without making the user invent the next prompt from scratch.
|
|
185
|
+
|
|
163
186
|
### Nori Profile
|
|
164
187
|
|
|
165
188
|
Nori Profile records execution preferences such as required Skills, preferred
|
|
166
189
|
stacks, avoided tools, and install policy. These preferences influence
|
|
167
190
|
completion risk and blocking status, but they are not user acceptance checks.
|
|
168
191
|
|
|
192
|
+
Build-vs-buy findings work the same way. They are architecture review risks,
|
|
193
|
+
not Product AC. If self-built infrastructure lacks reuse research or a
|
|
194
|
+
self-build reason, status/report say `build_vs_buy` review is required before
|
|
195
|
+
claiming mature completion.
|
|
196
|
+
|
|
169
197
|
## Example Uses
|
|
170
198
|
|
|
171
199
|
### Frontend Feature
|
|
@@ -176,10 +204,11 @@ User prompt:
|
|
|
176
204
|
Use OpenNori for a settings page where users edit profile details.
|
|
177
205
|
```
|
|
178
206
|
|
|
179
|
-
Nori should
|
|
180
|
-
|
|
181
|
-
states, and out-of-scope boundaries
|
|
182
|
-
what the user opens, edits, saves,
|
|
207
|
+
Nori should flag vague acceptance checks like "modify fields" as
|
|
208
|
+
`acceptance_review` findings and ask which fields, validation rules, save
|
|
209
|
+
feedback, persistence behavior, failed-save states, and out-of-scope boundaries
|
|
210
|
+
matter. The final contract should describe what the user opens, edits, saves,
|
|
211
|
+
refreshes, and expects to see.
|
|
183
212
|
|
|
184
213
|
### Skill And Stack Preference
|
|
185
214
|
|
|
@@ -191,7 +220,9 @@ and avoid adding another UI framework.
|
|
|
191
220
|
```
|
|
192
221
|
|
|
193
222
|
Nori records these as Profile items, not acceptance checks. A violated `must` or
|
|
194
|
-
`avoid` item can block completion unless the user waives it.
|
|
223
|
+
`avoid` item can block completion unless the user waives it. An unknown or
|
|
224
|
+
violated `prefer` item becomes `profile_review`: objectively complete work can
|
|
225
|
+
still require user or agent review before it is reported as confidently complete.
|
|
195
226
|
|
|
196
227
|
### Architecture Baseline
|
|
197
228
|
|
|
@@ -206,6 +237,10 @@ Nori lists available architecture profiles, previews the baseline, and asks the
|
|
|
206
237
|
user to confirm before implementation. Status and report then show Product
|
|
207
238
|
decision and Architecture decision separately.
|
|
208
239
|
|
|
240
|
+
If all Product ACs pass while the Architecture Baseline is missing, challenged,
|
|
241
|
+
or build-vs-buy is unhealthy, status/report answer: objectively complete with
|
|
242
|
+
review risk, not confidently complete.
|
|
243
|
+
|
|
209
244
|
### Existing OpenNori Project
|
|
210
245
|
|
|
211
246
|
User prompt:
|
|
@@ -226,7 +261,8 @@ Users should start with natural language through an agent. These commands are
|
|
|
226
261
|
the deterministic state layer for agents and automation:
|
|
227
262
|
|
|
228
263
|
```bash
|
|
229
|
-
opennori
|
|
264
|
+
opennori setup
|
|
265
|
+
opennori init
|
|
230
266
|
opennori doctor --root .
|
|
231
267
|
opennori check --root .
|
|
232
268
|
opennori architecture profiles --root . --json
|
|
@@ -237,19 +273,21 @@ opennori draft --goal "Ship a user-visible result" --root .
|
|
|
237
273
|
opennori approve --root . --summary "User approved the acceptance checks."
|
|
238
274
|
opennori status --root .
|
|
239
275
|
opennori evidence add --root . --criterion AC-1 --kind review-result --summary "..." --result passing
|
|
276
|
+
opennori evidence prune --root . --criterion AC-1 --reason "Evidence no longer proves the current AC"
|
|
240
277
|
opennori report --root .
|
|
241
278
|
```
|
|
242
279
|
|
|
243
280
|
## Product Boundaries
|
|
244
281
|
|
|
245
|
-
- `
|
|
246
|
-
|
|
282
|
+
- `setup` is the first-time machine installer for the complete capability
|
|
283
|
+
bundle: Codex Plugin, packaged Skills, global CLI, project state, and doctor.
|
|
284
|
+
- `init` prepares or refreshes `.opennori/` state in the current project.
|
|
247
285
|
- `install`, `upgrade`, and `uninstall` support preview-first workflows;
|
|
248
286
|
destructive writes require explicit confirmation.
|
|
249
|
-
- OpenNori Plugin Skills are package
|
|
250
|
-
state, not project-local copies of OpenNori Skills.
|
|
251
|
-
- In a human terminal, `opennori`
|
|
252
|
-
non-interactive stdio
|
|
287
|
+
- OpenNori Plugin Skills are package behavior protocols for agents. Install and
|
|
288
|
+
upgrade write project state, not project-local copies of OpenNori Skills.
|
|
289
|
+
- In a human terminal, `opennori setup` and `opennori init` are interactive.
|
|
290
|
+
With `--json` or non-interactive stdio they return structured JSON.
|
|
253
291
|
- `discover` finds underspecified acceptance gaps before draft, so vague ACs
|
|
254
292
|
become user questions instead of weak contracts.
|
|
255
293
|
- `doctor` reports whether project state is `ready`, `needs-action`, or
|
|
@@ -264,6 +302,9 @@ opennori report --root .
|
|
|
264
302
|
- Context export can give review tools the current goal, checks, profile,
|
|
265
303
|
Architecture Baseline, evidence, and report, but review tools do not take over
|
|
266
304
|
the agent loop.
|
|
305
|
+
- Complete goals can expose `candidate_goals` for the next acceptance loop; the
|
|
306
|
+
agent still turns the chosen candidate into a new draft Nori Contract before
|
|
307
|
+
completion judgment begins.
|
|
267
308
|
|
|
268
309
|
## Development
|
|
269
310
|
|
package/dist/bin/opennori.js
CHANGED
|
@@ -6,7 +6,7 @@ import { main } from "../src/cli.js";
|
|
|
6
6
|
export function commandArgsFromProcessArgs(args) {
|
|
7
7
|
const firstArg = args[0];
|
|
8
8
|
return args.length === 0 || (firstArg !== undefined && firstArg.startsWith("-") && !["--help", "-h"].includes(firstArg))
|
|
9
|
-
? ["
|
|
9
|
+
? ["setup", ...args]
|
|
10
10
|
: args;
|
|
11
11
|
}
|
|
12
12
|
function printFatalError(error) {
|
package/dist/bin/opennori.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"opennori.js","sourceRoot":"","sources":["../../bin/opennori.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,UAAU,0BAA0B,CAAC,IAAc;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtH,CAAC,CAAC,CAAC,
|
|
1
|
+
{"version":3,"file":"opennori.js","sourceRoot":"","sources":["../../bin/opennori.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,IAAI,MAAM,WAAW,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AAErC,MAAM,UAAU,0BAA0B,CAAC,IAAc;IACvD,MAAM,QAAQ,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IACzB,OAAO,IAAI,CAAC,MAAM,KAAK,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,IAAI,QAAQ,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;QACtH,CAAC,CAAC,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC;QACpB,CAAC,CAAC,IAAI,CAAC;AACX,CAAC;AAED,SAAS,eAAe,CAAC,KAAc;IACrC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;QAC3B,EAAE,EAAE,KAAK;QACT,KAAK,EAAE;YACL,IAAI,EAAE,kBAAkB;YACxB,OAAO,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC;SAChE;KACF,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;AACf,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,eAAe,CAAC,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAChE,MAAM,IAAI,CAAC,0BAA0B,CAAC,IAAI,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED,SAAS,kBAAkB;IACzB,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpC,IAAI,WAAW,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAC5C,MAAM,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACnD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,KAAK,EAAE,CAAC,YAAY,CAAC,WAAW,CAAC,CAAC;IACrF,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,KAAK,WAAW,CAAC;IACnD,CAAC;AACH,CAAC;AAED,IAAI,kBAAkB,EAAE,EAAE,CAAC;IACzB,eAAe,EAAE,CAAC,KAAK,CAAC,CAAC,KAAc,EAAE,EAAE;QACzC,eAAe,CAAC,KAAK,CAAC,CAAC;QACvB,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACvB,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/src/acceptance.d.ts
CHANGED
|
@@ -5,7 +5,8 @@ export declare function discoverAcceptanceGaps(text: string, { fallback, allowed
|
|
|
5
5
|
allowedIds?: Set<string> | null | undefined;
|
|
6
6
|
}): AcceptanceDiscoveryGap[];
|
|
7
7
|
export declare function discoverAcceptance(goal: string, explicitId?: string | undefined): AcceptanceDiscovery;
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function reviewAcceptanceQuality(contract: NoriContract): AcceptanceQualityAudit;
|
|
9
|
+
export declare const auditAcceptanceQuality: typeof reviewAcceptanceQuality;
|
|
9
10
|
export declare function renderDiscoveryMarkdown(discovery: AcceptanceDiscovery): string;
|
|
10
11
|
export declare function renderBrainstormMarkdown(brainstorm: Brainstorm): string;
|
|
11
12
|
export declare function briefFromGoal(goal: string, goalId?: string | undefined): NoriBrief;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/acceptance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EAEtB,UAAU,EAEV,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAyCpB,eAAO,MAAM,gBAAgB,EAAE,mBAAmB,EAsBjD,CAAC;
|
|
1
|
+
{"version":3,"file":"acceptance.d.ts","sourceRoot":"","sources":["../../src/acceptance.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EACV,mBAAmB,EACnB,mBAAmB,EACnB,sBAAsB,EACtB,sBAAsB,EAEtB,UAAU,EAEV,SAAS,EACT,YAAY,EACb,MAAM,YAAY,CAAC;AAyCpB,eAAO,MAAM,gBAAgB,EAAE,mBAAmB,EAsBjD,CAAC;AA0MF,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAgB,EAAE,UAAuC,EAAE;;;CAAK,GAAG,sBAAsB,EAAE,CAyBjJ;AAMD,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,GAAG,SAAqB,GAAG,mBAAmB,CAkBhH;AAED,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,sBAAsB,CAsJtF;AAED,eAAO,MAAM,sBAAsB,gCAA0B,CAAC;AAE9D,wBAAgB,uBAAuB,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM,CA+B9E;AAED,wBAAgB,wBAAwB,CAAC,UAAU,EAAE,UAAU,GAAG,MAAM,CAiCvE;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,GAAE,MAAM,GAAG,SAAqB,GAAG,SAAS,CAO7F;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,MAAM,EAAE,UAAU,GAAE,MAAM,GAAG,SAAqB,GAAG,UAAU,CAUpG;AAED,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,GAAG,SAAS,CAkB1F"}
|