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.
- nexu-0.2.5/.gitignore +24 -0
- nexu-0.2.5/.idea/.gitignore +5 -0
- nexu-0.2.5/.idea/workspace.xml +155 -0
- nexu-0.2.5/CHANGELOG.md +68 -0
- nexu-0.2.5/LICENSE +16 -0
- nexu-0.2.5/Makefile +7 -0
- nexu-0.2.5/PKG-INFO +162 -0
- nexu-0.2.5/README.md +129 -0
- nexu-0.2.5/VERSION +1 -0
- nexu-0.2.5/docs/README.md +14 -0
- nexu-0.2.5/docs/architecture.md +43 -0
- nexu-0.2.5/docs/capsule-format.md +63 -0
- nexu-0.2.5/docs/commands.md +107 -0
- nexu-0.2.5/docs/examples.md +43 -0
- nexu-0.2.5/docs/getting-started.md +70 -0
- nexu-0.2.5/docs/intent-contracts.md +22 -0
- nexu-0.2.5/docs/roadmap.md +52 -0
- nexu-0.2.5/docs/verification.md +42 -0
- nexu-0.2.5/examples/backend_service/README.md +3 -0
- nexu-0.2.5/examples/backend_service/app/users.py +8 -0
- nexu-0.2.5/examples/frontend_view/README.md +3 -0
- nexu-0.2.5/examples/frontend_view/fixtures/menu_items.yaml +7 -0
- nexu-0.2.5/examples/frontend_view/src/menu_icons.py +24 -0
- nexu-0.2.5/examples/run_examples.py +64 -0
- nexu-0.2.5/examples/vertical_slice/README.md +3 -0
- nexu-0.2.5/examples/vertical_slice/src/flow.py +9 -0
- nexu-0.2.5/goal.yaml +512 -0
- nexu-0.2.5/project.sh +50 -0
- nexu-0.2.5/pyproject.toml +83 -0
- nexu-0.2.5/src/vico/__init__.py +5 -0
- nexu-0.2.5/src/vico/__main__.py +4 -0
- nexu-0.2.5/src/vico/blueprint.py +73 -0
- nexu-0.2.5/src/vico/capsule.py +122 -0
- nexu-0.2.5/src/vico/cli.py +219 -0
- nexu-0.2.5/src/vico/diff.py +35 -0
- nexu-0.2.5/src/vico/drift.py +36 -0
- nexu-0.2.5/src/vico/export_prompt.py +100 -0
- nexu-0.2.5/src/vico/files.py +51 -0
- nexu-0.2.5/src/vico/freeze.py +26 -0
- nexu-0.2.5/src/vico/git.py +22 -0
- nexu-0.2.5/src/vico/hashing.py +16 -0
- nexu-0.2.5/src/vico/init_project.py +62 -0
- nexu-0.2.5/src/vico/intract.py +125 -0
- nexu-0.2.5/src/vico/iterate.py +44 -0
- nexu-0.2.5/src/vico/models.py +154 -0
- nexu-0.2.5/src/vico/paths.py +35 -0
- nexu-0.2.5/src/vico/promote.py +31 -0
- nexu-0.2.5/src/vico/status.py +35 -0
- nexu-0.2.5/src/vico/verify.py +236 -0
- nexu-0.2.5/tests/test_capsule_flow.py +25 -0
- nexu-0.2.5/tests/test_capsule_next_stage.py +58 -0
- nexu-0.2.5/tests/test_intract.py +11 -0
- nexu-0.2.5/tests/test_models.py +14 -0
- nexu-0.2.5/tests/test_vico.py +11 -0
- nexu-0.2.5/tree.sh +1 -0
- 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,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
|
+
"associatedIndex": 0,
|
|
105
|
+
"fromUser": 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>
|
nexu-0.2.5/CHANGELOG.md
ADDED
|
@@ -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
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
|
+
   
|
|
40
|
+
  
|
|
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
|
+
   
|
|
7
|
+
  
|
|
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.
|