nexu 0.2.5__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (56) hide show
  1. nexu-0.2.5/.gitignore +24 -0
  2. nexu-0.2.5/.idea/.gitignore +5 -0
  3. nexu-0.2.5/.idea/workspace.xml +155 -0
  4. nexu-0.2.5/CHANGELOG.md +68 -0
  5. nexu-0.2.5/LICENSE +16 -0
  6. nexu-0.2.5/Makefile +7 -0
  7. nexu-0.2.5/PKG-INFO +162 -0
  8. nexu-0.2.5/README.md +129 -0
  9. nexu-0.2.5/VERSION +1 -0
  10. nexu-0.2.5/docs/README.md +14 -0
  11. nexu-0.2.5/docs/architecture.md +43 -0
  12. nexu-0.2.5/docs/capsule-format.md +63 -0
  13. nexu-0.2.5/docs/commands.md +107 -0
  14. nexu-0.2.5/docs/examples.md +43 -0
  15. nexu-0.2.5/docs/getting-started.md +70 -0
  16. nexu-0.2.5/docs/intent-contracts.md +22 -0
  17. nexu-0.2.5/docs/roadmap.md +52 -0
  18. nexu-0.2.5/docs/verification.md +42 -0
  19. nexu-0.2.5/examples/backend_service/README.md +3 -0
  20. nexu-0.2.5/examples/backend_service/app/users.py +8 -0
  21. nexu-0.2.5/examples/frontend_view/README.md +3 -0
  22. nexu-0.2.5/examples/frontend_view/fixtures/menu_items.yaml +7 -0
  23. nexu-0.2.5/examples/frontend_view/src/menu_icons.py +24 -0
  24. nexu-0.2.5/examples/run_examples.py +64 -0
  25. nexu-0.2.5/examples/vertical_slice/README.md +3 -0
  26. nexu-0.2.5/examples/vertical_slice/src/flow.py +9 -0
  27. nexu-0.2.5/goal.yaml +512 -0
  28. nexu-0.2.5/project.sh +50 -0
  29. nexu-0.2.5/pyproject.toml +83 -0
  30. nexu-0.2.5/src/vico/__init__.py +5 -0
  31. nexu-0.2.5/src/vico/__main__.py +4 -0
  32. nexu-0.2.5/src/vico/blueprint.py +73 -0
  33. nexu-0.2.5/src/vico/capsule.py +122 -0
  34. nexu-0.2.5/src/vico/cli.py +219 -0
  35. nexu-0.2.5/src/vico/diff.py +35 -0
  36. nexu-0.2.5/src/vico/drift.py +36 -0
  37. nexu-0.2.5/src/vico/export_prompt.py +100 -0
  38. nexu-0.2.5/src/vico/files.py +51 -0
  39. nexu-0.2.5/src/vico/freeze.py +26 -0
  40. nexu-0.2.5/src/vico/git.py +22 -0
  41. nexu-0.2.5/src/vico/hashing.py +16 -0
  42. nexu-0.2.5/src/vico/init_project.py +62 -0
  43. nexu-0.2.5/src/vico/intract.py +125 -0
  44. nexu-0.2.5/src/vico/iterate.py +44 -0
  45. nexu-0.2.5/src/vico/models.py +154 -0
  46. nexu-0.2.5/src/vico/paths.py +35 -0
  47. nexu-0.2.5/src/vico/promote.py +31 -0
  48. nexu-0.2.5/src/vico/status.py +35 -0
  49. nexu-0.2.5/src/vico/verify.py +236 -0
  50. nexu-0.2.5/tests/test_capsule_flow.py +25 -0
  51. nexu-0.2.5/tests/test_capsule_next_stage.py +58 -0
  52. nexu-0.2.5/tests/test_intract.py +11 -0
  53. nexu-0.2.5/tests/test_models.py +14 -0
  54. nexu-0.2.5/tests/test_vico.py +11 -0
  55. nexu-0.2.5/tree.sh +1 -0
  56. nexu-0.2.5/uv.lock +3636 -0
nexu-0.2.5/.gitignore ADDED
@@ -0,0 +1,24 @@
1
+ .idea/nexu.iml
2
+ .idea/pyProjectModel.xml
3
+ .idea/misc.xml
4
+ .env.example
5
+ .idea/inspectionProfiles/Project_Default.xml
6
+ .idea/inspectionProfiles/profiles_settings.xml
7
+ .idea/modules.xml
8
+ .idea/vcs.xml
9
+ .idea/vico.iml
10
+ __pycache__/
11
+ *.py[cod]
12
+ .pytest_cache/
13
+ .ruff_cache/
14
+ .mypy_cache/
15
+ .venv/
16
+ venv/
17
+ dist/
18
+ build/
19
+ *.egg-info/
20
+ .coverage
21
+ htmlcov/
22
+
23
+ # Environment variables
24
+ .env
@@ -0,0 +1,5 @@
1
+ # Default ignored files
2
+ /shelf/
3
+ /workspace.xml
4
+ # Editor-based HTTP Client requests
5
+ /httpRequests/
@@ -0,0 +1,155 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+ <project version="4">
3
+ <component name="AutoImportSettings">
4
+ <option name="autoReloadType" value="SELECTIVE" />
5
+ </component>
6
+ <component name="ChangeListManager">
7
+ <list default="true" id="d6578b4a-a4c2-4076-bba1-42ee09a831d5" name="Changes" comment="">
8
+ <change beforePath="$PROJECT_DIR$/pyproject.toml" beforeDir="false" afterPath="$PROJECT_DIR$/pyproject.toml" afterDir="false" />
9
+ </list>
10
+ <option name="SHOW_DIALOG" value="false" />
11
+ <option name="HIGHLIGHT_CONFLICTS" value="true" />
12
+ <option name="HIGHLIGHT_NON_ACTIVE_CHANGELIST" value="false" />
13
+ <option name="LAST_RESOLUTION" value="IGNORE" />
14
+ </component>
15
+ <component name="ChangesViewManager">
16
+ <option name="groupingKeys">
17
+ <option value="directory" />
18
+ <option value="repository" />
19
+ </option>
20
+ </component>
21
+ <component name="EmbeddingIndexingInfo">
22
+ <option name="cachedIndexableFilesCount" value="65" />
23
+ <option name="fileBasedEmbeddingIndicesEnabled" value="true" />
24
+ </component>
25
+ <component name="Git.Settings">
26
+ <option name="RECENT_GIT_ROOT_PATH" value="$PROJECT_DIR$" />
27
+ </component>
28
+ <component name="GitHubPullRequestSearchHistory"><![CDATA[{
29
+ "lastFilter": {
30
+ "state": "OPEN",
31
+ "assignee": "tom-sapletta-com"
32
+ }
33
+ }]]></component>
34
+ <component name="GithubPullRequestsUISettings"><![CDATA[{
35
+ "selectedUrlAndAccountId": {
36
+ "url": "git@github.com:semcod/vico.git",
37
+ "accountId": "b26609e8-3115-4862-a267-55cedfdb14bb"
38
+ }
39
+ }]]></component>
40
+ <component name="McpProjectServerCommands">
41
+ <commands />
42
+ <urls />
43
+ </component>
44
+ <component name="NextEditCompletionFeaturesState">
45
+ <decayedCancelled>
46
+ <entry key="MS100" value="1.000000062898032" />
47
+ <entry key="MS500" value="1.1029466047308847" />
48
+ <entry key="S2" value="2.5963335556772167" />
49
+ <entry key="S5" value="3.7692254290316294" />
50
+ <entry key="S10" value="4.329749576774056" />
51
+ <entry key="S30" value="5.114106888875041" />
52
+ <entry key="S60" value="6.302837674181121" />
53
+ <entry key="M2" value="8.220943940018103" />
54
+ <entry key="M5" value="11.149919160624908" />
55
+ <entry key="M10" value="13.204089594609442" />
56
+ <entry key="M15" value="14.36089495737726" />
57
+ <entry key="M30" value="16.107056328331147" />
58
+ <entry key="H1" value="17.35765299817043" />
59
+ <entry key="H2" value="18.121051695991305" />
60
+ <entry key="H4" value="18.544800600698565" />
61
+ <entry key="D1" value="18.92183095293997" />
62
+ <entry key="W1" value="18.988774992217735" />
63
+ </decayedCancelled>
64
+ <decayedSelected>
65
+ <entry key="MS100" value="0.0" />
66
+ <entry key="MS500" value="0.0" />
67
+ <entry key="S2" value="0.0" />
68
+ <entry key="S5" value="0.0" />
69
+ <entry key="S10" value="0.0" />
70
+ <entry key="S30" value="0.0" />
71
+ <entry key="S60" value="0.0" />
72
+ <entry key="M2" value="0.0" />
73
+ <entry key="M5" value="0.0" />
74
+ <entry key="M10" value="0.0" />
75
+ <entry key="M15" value="0.0" />
76
+ <entry key="M30" value="0.0" />
77
+ <entry key="H1" value="0.0" />
78
+ <entry key="H2" value="0.0" />
79
+ <entry key="H4" value="0.0" />
80
+ <entry key="D1" value="0.0" />
81
+ <entry key="W1" value="0.0" />
82
+ </decayedSelected>
83
+ <decayedShown>
84
+ <entry key="MS100" value="0.9794203590556573" />
85
+ <entry key="MS500" value="1.0983293227111324" />
86
+ <entry key="S2" value="2.5934928533336956" />
87
+ <entry key="S5" value="3.7675609844256748" />
88
+ <entry key="S10" value="4.328791119054477" />
89
+ <entry key="S30" value="5.113719136711925" />
90
+ <entry key="S60" value="6.302582198552924" />
91
+ <entry key="M2" value="8.2207593976687" />
92
+ <entry key="M5" value="11.149803608335493" />
93
+ <entry key="M10" value="13.204005506235976" />
94
+ <entry key="M15" value="14.36082382411727" />
95
+ <entry key="M30" value="16.107006691794044" />
96
+ <entry key="H1" value="17.357622487370417" />
97
+ <entry key="H2" value="18.121034612225742" />
98
+ <entry key="H4" value="18.544791539568454" />
99
+ <entry key="D1" value="18.921829364722782" />
100
+ <entry key="W1" value="18.9887747633369" />
101
+ </decayedShown>
102
+ </component>
103
+ <component name="ProjectColorInfo">{
104
+ &quot;associatedIndex&quot;: 0,
105
+ &quot;fromUser&quot;: false
106
+ }</component>
107
+ <component name="ProjectId" id="3EPL5mtMuK2XSqut5C82Jr7mQTL" />
108
+ <component name="ProjectViewState">
109
+ <option name="autoscrollFromSource" value="true" />
110
+ <option name="autoscrollToSource" value="true" />
111
+ <option name="hideEmptyMiddlePackages" value="true" />
112
+ <option name="showLibraryContents" value="true" />
113
+ </component>
114
+ <component name="PropertiesComponent"><![CDATA[{
115
+ "keyToString": {
116
+ "ModuleVcsDetector.initialDetectionPerformed": "true",
117
+ "RunOnceActivity.MCP Project settings loaded": "true",
118
+ "RunOnceActivity.ShowReadmeOnStart": "true",
119
+ "RunOnceActivity.TerminalTabsStorage.copyFrom.TerminalArrangementManager.252": "true",
120
+ "RunOnceActivity.git.unshallow": "true",
121
+ "RunOnceActivity.typescript.service.memoryLimit.init": "true",
122
+ "codeWithMe.voiceChat.enabledByDefault": "false",
123
+ "git-widget-placeholder": "main",
124
+ "last_opened_file_path": "/home/tom/github/semcod/nexu",
125
+ "node.js.detected.package.eslint": "true",
126
+ "node.js.selected.package.eslint": "(autodetect)",
127
+ "nodejs_package_manager_path": "npm"
128
+ }
129
+ }]]></component>
130
+ <component name="RecentsManager">
131
+ <key name="CopyFile.RECENT_KEYS">
132
+ <recent name="$PROJECT_DIR$" />
133
+ </key>
134
+ </component>
135
+ <component name="SharedIndexes">
136
+ <attachedChunks>
137
+ <set>
138
+ <option value="bundled-python-sdk-c59985aa861c-c2ffad84badb-com.jetbrains.pycharm.pro.sharedIndexes.bundled-PY-261.24374.152" />
139
+ </set>
140
+ </attachedChunks>
141
+ </component>
142
+ <component name="TaskManager">
143
+ <task active="true" id="Default" summary="Default task">
144
+ <changelist id="d6578b4a-a4c2-4076-bba1-42ee09a831d5" name="Changes" comment="" />
145
+ <created>1780075077718</created>
146
+ <option name="number" value="Default" />
147
+ <option name="presentableId" value="Default" />
148
+ <updated>1780075077718</updated>
149
+ </task>
150
+ <servers />
151
+ </component>
152
+ <component name="TypeScriptGeneratedFilesManager">
153
+ <option name="version" value="3" />
154
+ </component>
155
+ </project>
@@ -0,0 +1,68 @@
1
+ # Changelog
2
+
3
+ ## [Unreleased]
4
+
5
+ ## [0.2.5] - 2026-05-29
6
+
7
+ ### Docs
8
+ - Update README.md
9
+
10
+ ### Test
11
+ - Update tests/test_vico.py
12
+
13
+ ### Other
14
+ - Update .idea/nexu.iml
15
+ - Update .idea/pyProjectModel.xml
16
+
17
+ ## [0.2.4] - 2026-05-29
18
+
19
+ ### Other
20
+ - Update .idea/misc.xml
21
+ - Update uv.lock
22
+
23
+ ## [0.2.3] - 2026-05-29
24
+
25
+ ### Docs
26
+ - Update README.md
27
+
28
+ ## [0.2.2] - 2026-05-29
29
+
30
+ ### Docs
31
+ - Update README.md
32
+
33
+ ## [0.2.1] - 2026-05-29
34
+
35
+ ### Docs
36
+ - Update CHANGELOG.md
37
+ - Update README.md
38
+ - Update docs/architecture.md
39
+ - Update docs/capsule-format.md
40
+ - Update docs/commands.md
41
+ - Update docs/examples.md
42
+ - Update docs/getting-started.md
43
+ - Update docs/roadmap.md
44
+ - Update docs/verification.md
45
+
46
+ ### Test
47
+ - Update tests/test_capsule_next_stage.py
48
+
49
+ ### Other
50
+ - Update VERSION
51
+ - Update examples/run_examples.py
52
+ - Update uv.lock
53
+
54
+
55
+ ## 0.2.0
56
+
57
+ - Added capsule baseline hash lock.
58
+ - Added `capsule status`.
59
+ - Added `capsule blueprint`.
60
+ - Added `capsule export-prompt`.
61
+ - Added `capsule diff`.
62
+ - Added `capsule drift`.
63
+ - Improved verification gates and evidence output.
64
+
65
+ ## 0.1.0
66
+
67
+ - Initial project skeleton.
68
+ - Added freeze, capsule create, iterate, verify and promote dry-run.
nexu-0.2.5/LICENSE ADDED
@@ -0,0 +1,16 @@
1
+ Apache License
2
+ Version 2.0, January 2004
3
+
4
+ Copyright 2026 Vico contributors
5
+
6
+ Licensed under the Apache License, Version 2.0 (the "License");
7
+ you may not use this file except in compliance with the License.
8
+ You may obtain a copy of the License at
9
+
10
+ http://www.apache.org/licenses/LICENSE-2.0
11
+
12
+ Unless required by applicable law or agreed to in writing, software
13
+ distributed under the License is distributed on an "AS IS" BASIS,
14
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15
+ See the License for the specific language governing permissions and
16
+ limitations under the License.
nexu-0.2.5/Makefile ADDED
@@ -0,0 +1,7 @@
1
+ .PHONY: test examples
2
+
3
+ test:
4
+ pytest -q
5
+
6
+ examples:
7
+ python examples/run_examples.py
nexu-0.2.5/PKG-INFO ADDED
@@ -0,0 +1,162 @@
1
+ Metadata-Version: 2.4
2
+ Name: nexu
3
+ Version: 0.2.5
4
+ Summary: Visual Intent Contract Orchestrator: freeze project slices, evolve capsules, verify intent contracts.
5
+ Author-email: Tom Sapletta <tom@sapletta.com>
6
+ License-Expression: Apache-2.0
7
+ License-File: LICENSE
8
+ Keywords: capsule,contracts,intent,llm,mock,static-analysis,workflow
9
+ Classifier: Development Status :: 3 - Alpha
10
+ Classifier: Environment :: Console
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: Programming Language :: Python :: 3
13
+ Classifier: Programming Language :: Python :: 3.10
14
+ Classifier: Programming Language :: Python :: 3.11
15
+ Classifier: Programming Language :: Python :: 3.12
16
+ Classifier: Topic :: Software Development :: Quality Assurance
17
+ Requires-Python: >=3.10
18
+ Requires-Dist: pyyaml>=6.0
19
+ Requires-Dist: rich>=13.0
20
+ Requires-Dist: typer>=0.12.0
21
+ Provides-Extra: dev
22
+ Requires-Dist: costs>=0.1.20; extra == 'dev'
23
+ Requires-Dist: goal>=2.1.0; extra == 'dev'
24
+ Requires-Dist: mypy>=1.8; extra == 'dev'
25
+ Requires-Dist: pfix>=0.1.60; extra == 'dev'
26
+ Requires-Dist: pytest>=7.0; extra == 'dev'
27
+ Requires-Dist: ruff>=0.4; extra == 'dev'
28
+ Provides-Extra: llm
29
+ Requires-Dist: litellm>=1.0; extra == 'llm'
30
+ Provides-Extra: watch
31
+ Requires-Dist: watchdog>=4.0; extra == 'watch'
32
+ Description-Content-Type: text/markdown
33
+
34
+ # Vico
35
+
36
+
37
+ ## AI Cost Tracking
38
+
39
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.5-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
40
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.51-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-2.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
41
+
42
+ - 🤖 **LLM usage:** $0.5133 (5 commits)
43
+ - 👤 **Human dev:** ~$231 (2.3h @ $100/h, 30min dedup)
44
+
45
+ Generated on 2026-05-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
46
+
47
+ ---
48
+
49
+ **Vico** — **Visual Intent Contract Orchestrator**.
50
+
51
+ Vico is a Python package and CLI for creating small, isolated project capsules from a large codebase.
52
+ It helps you freeze a baseline, extract a slice of code/data/contracts, evolve that slice through multiple
53
+ LLM or human iterations, and verify the result against formal intent contracts before promoting it back.
54
+
55
+ The core workflow is:
56
+
57
+ ```text
58
+ freeze → capsule create → blueprint → iterate → export-prompt → verify → promote
59
+ ```
60
+
61
+ Vico is designed to work with **Intract**-style intent contracts, but it can run as a standalone prototype.
62
+ The goal is not to make an LLM magically correct. The goal is to keep the LLM inside a small, versioned,
63
+ contract-bound sandbox and detect when its output diverges from declared intent.
64
+
65
+ ## What changed in 0.2.0
66
+
67
+ The second iteration adds the missing practical loop around capsules:
68
+
69
+ - baseline hash lock per capsule,
70
+ - capsule diff against the frozen slice,
71
+ - source drift check against the original files,
72
+ - generated UI/API/test blueprint,
73
+ - LLM-ready prompt export,
74
+ - capsule status command,
75
+ - richer verification with evidence for outputs, forbidden effects, required intents and secret-like values.
76
+
77
+ ## Why Vico?
78
+
79
+ Long-running IDE prompting has a common failure mode:
80
+
81
+ ```text
82
+ large repo + vague task + many steps = context drift and hallucinated implementation
83
+ ```
84
+
85
+ Vico changes the operating model:
86
+
87
+ ```text
88
+ large repo
89
+ ↓ freeze baseline
90
+ small capsule
91
+ ↓ evolve only this capsule
92
+ verified result
93
+ ↓ promote to the real project
94
+ ```
95
+
96
+ ## Install locally
97
+
98
+ ```bash
99
+ python -m venv .venv
100
+ . .venv/bin/activate
101
+ pip install -e .[dev]
102
+ vico --help
103
+ ```
104
+
105
+ ## First run
106
+
107
+ ```bash
108
+ vico init .
109
+ vico freeze . --name baseline
110
+ vico capsule create . --name menu-icons --domain menu --include "examples/frontend_view/src/**" --route /menu-icons
111
+ vico capsule blueprint menu-icons --print
112
+ vico capsule iterate menu-icons --steps 3 --goal "Add preview, confidence and reason fields"
113
+ vico capsule export-prompt menu-icons
114
+ vico capsule verify menu-icons
115
+ vico capsule diff menu-icons
116
+ vico capsule drift menu-icons
117
+ vico capsule promote menu-icons --dry-run
118
+ ```
119
+
120
+ ## Important folders
121
+
122
+ ```text
123
+ src/vico/ Python package
124
+ docs/ documentation
125
+ examples/ runnable example projects
126
+ tests/ unit tests
127
+ ```
128
+
129
+ ## Documentation
130
+
131
+ Start here:
132
+
133
+ - [Docs index](docs/README.md)
134
+ - [Getting started](docs/getting-started.md)
135
+ - [Architecture](docs/architecture.md)
136
+ - [Commands](docs/commands.md)
137
+ - [Capsule format](docs/capsule-format.md)
138
+ - [Intent contracts](docs/intent-contracts.md)
139
+ - [Verification model](docs/verification.md)
140
+ - [Examples](docs/examples.md)
141
+ - [Roadmap](docs/roadmap.md)
142
+
143
+ ## Main commands
144
+
145
+ ```bash
146
+ vico init .
147
+ vico freeze . --name baseline
148
+ vico capsule create . --name my-slice --include "src/my_module/**"
149
+ vico capsule list
150
+ vico capsule status my-slice
151
+ vico capsule blueprint my-slice
152
+ vico capsule iterate my-slice --steps 10 --goal "Evolve final screen"
153
+ vico capsule export-prompt my-slice
154
+ vico capsule diff my-slice
155
+ vico capsule drift my-slice
156
+ vico capsule verify my-slice
157
+ vico capsule promote my-slice --dry-run
158
+ ```
159
+
160
+ ## License
161
+
162
+ Licensed under Apache-2.0.
nexu-0.2.5/README.md ADDED
@@ -0,0 +1,129 @@
1
+ # Vico
2
+
3
+
4
+ ## AI Cost Tracking
5
+
6
+ ![PyPI](https://img.shields.io/badge/pypi-costs-blue) ![Version](https://img.shields.io/badge/version-0.2.5-blue) ![Python](https://img.shields.io/badge/python-3.9+-blue) ![License](https://img.shields.io/badge/license-Apache--2.0-green)
7
+ ![AI Cost](https://img.shields.io/badge/AI%20Cost-$0.51-orange) ![Human Time](https://img.shields.io/badge/Human%20Time-2.3h-blue) ![Model](https://img.shields.io/badge/Model-openrouter%2Fqwen%2Fqwen3--coder--next-lightgrey)
8
+
9
+ - 🤖 **LLM usage:** $0.5133 (5 commits)
10
+ - 👤 **Human dev:** ~$231 (2.3h @ $100/h, 30min dedup)
11
+
12
+ Generated on 2026-05-29 using [openrouter/qwen/qwen3-coder-next](https://openrouter.ai/qwen/qwen3-coder-next)
13
+
14
+ ---
15
+
16
+ **Vico** — **Visual Intent Contract Orchestrator**.
17
+
18
+ Vico is a Python package and CLI for creating small, isolated project capsules from a large codebase.
19
+ It helps you freeze a baseline, extract a slice of code/data/contracts, evolve that slice through multiple
20
+ LLM or human iterations, and verify the result against formal intent contracts before promoting it back.
21
+
22
+ The core workflow is:
23
+
24
+ ```text
25
+ freeze → capsule create → blueprint → iterate → export-prompt → verify → promote
26
+ ```
27
+
28
+ Vico is designed to work with **Intract**-style intent contracts, but it can run as a standalone prototype.
29
+ The goal is not to make an LLM magically correct. The goal is to keep the LLM inside a small, versioned,
30
+ contract-bound sandbox and detect when its output diverges from declared intent.
31
+
32
+ ## What changed in 0.2.0
33
+
34
+ The second iteration adds the missing practical loop around capsules:
35
+
36
+ - baseline hash lock per capsule,
37
+ - capsule diff against the frozen slice,
38
+ - source drift check against the original files,
39
+ - generated UI/API/test blueprint,
40
+ - LLM-ready prompt export,
41
+ - capsule status command,
42
+ - richer verification with evidence for outputs, forbidden effects, required intents and secret-like values.
43
+
44
+ ## Why Vico?
45
+
46
+ Long-running IDE prompting has a common failure mode:
47
+
48
+ ```text
49
+ large repo + vague task + many steps = context drift and hallucinated implementation
50
+ ```
51
+
52
+ Vico changes the operating model:
53
+
54
+ ```text
55
+ large repo
56
+ ↓ freeze baseline
57
+ small capsule
58
+ ↓ evolve only this capsule
59
+ verified result
60
+ ↓ promote to the real project
61
+ ```
62
+
63
+ ## Install locally
64
+
65
+ ```bash
66
+ python -m venv .venv
67
+ . .venv/bin/activate
68
+ pip install -e .[dev]
69
+ vico --help
70
+ ```
71
+
72
+ ## First run
73
+
74
+ ```bash
75
+ vico init .
76
+ vico freeze . --name baseline
77
+ vico capsule create . --name menu-icons --domain menu --include "examples/frontend_view/src/**" --route /menu-icons
78
+ vico capsule blueprint menu-icons --print
79
+ vico capsule iterate menu-icons --steps 3 --goal "Add preview, confidence and reason fields"
80
+ vico capsule export-prompt menu-icons
81
+ vico capsule verify menu-icons
82
+ vico capsule diff menu-icons
83
+ vico capsule drift menu-icons
84
+ vico capsule promote menu-icons --dry-run
85
+ ```
86
+
87
+ ## Important folders
88
+
89
+ ```text
90
+ src/vico/ Python package
91
+ docs/ documentation
92
+ examples/ runnable example projects
93
+ tests/ unit tests
94
+ ```
95
+
96
+ ## Documentation
97
+
98
+ Start here:
99
+
100
+ - [Docs index](docs/README.md)
101
+ - [Getting started](docs/getting-started.md)
102
+ - [Architecture](docs/architecture.md)
103
+ - [Commands](docs/commands.md)
104
+ - [Capsule format](docs/capsule-format.md)
105
+ - [Intent contracts](docs/intent-contracts.md)
106
+ - [Verification model](docs/verification.md)
107
+ - [Examples](docs/examples.md)
108
+ - [Roadmap](docs/roadmap.md)
109
+
110
+ ## Main commands
111
+
112
+ ```bash
113
+ vico init .
114
+ vico freeze . --name baseline
115
+ vico capsule create . --name my-slice --include "src/my_module/**"
116
+ vico capsule list
117
+ vico capsule status my-slice
118
+ vico capsule blueprint my-slice
119
+ vico capsule iterate my-slice --steps 10 --goal "Evolve final screen"
120
+ vico capsule export-prompt my-slice
121
+ vico capsule diff my-slice
122
+ vico capsule drift my-slice
123
+ vico capsule verify my-slice
124
+ vico capsule promote my-slice --dry-run
125
+ ```
126
+
127
+ ## License
128
+
129
+ Licensed under Apache-2.0.
nexu-0.2.5/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.2.5
@@ -0,0 +1,14 @@
1
+ # Vico documentation
2
+
3
+ Vico is a capsule-based orchestration layer for safe LLM-assisted iteration.
4
+
5
+ Read in this order:
6
+
7
+ 1. [Getting started](getting-started.md)
8
+ 2. [Architecture](architecture.md)
9
+ 3. [Commands](commands.md)
10
+ 4. [Capsule format](capsule-format.md)
11
+ 5. [Intent contracts](intent-contracts.md)
12
+ 6. [Verification model](verification.md)
13
+ 7. [Examples](examples.md)
14
+ 8. [Roadmap](roadmap.md)
@@ -0,0 +1,43 @@
1
+ # Architecture
2
+
3
+ Vico is a thin orchestration layer around isolated project capsules.
4
+
5
+ ```text
6
+ source project
7
+ -> freeze snapshot
8
+ -> capsule selection
9
+ -> baseline lock
10
+ -> capsule src + fixtures + contracts
11
+ -> blueprint / prompt / iteration state
12
+ -> verification evidence
13
+ -> promotion plan
14
+ ```
15
+
16
+ ## Core modules
17
+
18
+ - `models.py` — dataclasses for snapshots, capsules, diffs, prompt exports and verification reports.
19
+ - `freeze.py` — creates lightweight file-hash snapshots.
20
+ - `capsule.py` — creates and loads isolated capsules.
21
+ - `blueprint.py` — generates UI/API/test blueprint from capsule metadata and contracts.
22
+ - `iterate.py` — creates S1..Sn iteration folders and prompts.
23
+ - `export_prompt.py` — exports an LLM-ready prompt constrained by Intract contracts.
24
+ - `diff.py` — compares capsule state with baseline lock.
25
+ - `drift.py` — checks whether original source files changed after capsule creation.
26
+ - `verify.py` — builds evidence-based verification reports.
27
+ - `promote.py` — produces a dry-run promotion plan.
28
+
29
+ ## Intract boundary
30
+
31
+ Vico does not replace Intract. Intract remains the intent-contract layer. Vico uses `@intract.v1` and `intract.yaml` as its formal input and converts them into prompts, blueprints, gates and evidence maps.
32
+
33
+ ## Anti-hallucination principle
34
+
35
+ LLM output is not trusted directly. It must pass gates based on:
36
+
37
+ - frozen baseline,
38
+ - selected file scope,
39
+ - declared intent contracts,
40
+ - forbidden effects,
41
+ - required outputs,
42
+ - source drift,
43
+ - verification evidence.