codemble 0.3.1__tar.gz → 0.4.0__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.
- {codemble-0.3.1 → codemble-0.4.0}/.github/workflows/ci.yml +4 -4
- {codemble-0.3.1 → codemble-0.4.0}/.github/workflows/pages.yml +4 -4
- {codemble-0.3.1 → codemble-0.4.0}/.gitignore +6 -0
- {codemble-0.3.1 → codemble-0.4.0}/CHANGELOG.md +114 -0
- {codemble-0.3.1 → codemble-0.4.0}/CLAUDE.md +50 -5
- {codemble-0.3.1 → codemble-0.4.0}/PKG-INFO +119 -16
- {codemble-0.3.1 → codemble-0.4.0}/README.md +118 -15
- {codemble-0.3.1 → codemble-0.4.0}/TESTING.md +7 -1
- {codemble-0.3.1 → codemble-0.4.0}/codemble/__init__.py +1 -1
- {codemble-0.3.1 → codemble-0.4.0}/codemble/checks/service.py +56 -12
- {codemble-0.3.1 → codemble-0.4.0}/codemble/graph/__init__.py +3 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/graph/finalize.py +8 -7
- {codemble-0.3.1 → codemble-0.4.0}/codemble/graph/layout.py +82 -23
- codemble-0.4.0/codemble/graph/mapview.py +315 -0
- codemble-0.4.0/codemble/lens/javascript_typescript.py +112 -0
- codemble-0.4.0/codemble/lens/python.py +95 -0
- codemble-0.4.0/codemble/llm/local_status.py +66 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/llm/providers.py +91 -1
- codemble-0.4.0/codemble/llm/structural.py +127 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/llm/study.py +114 -34
- {codemble-0.3.1 → codemble-0.4.0}/codemble/progress/store.py +44 -7
- {codemble-0.3.1 → codemble-0.4.0}/codemble/server/app.py +100 -1
- {codemble-0.3.1 → codemble-0.4.0}/codemble/server/runtime.py +9 -1
- codemble-0.4.0/codemble/web_dist/assets/index-BHcmQpjd.css +1 -0
- codemble-0.4.0/codemble/web_dist/assets/index-DKTfLRbf.js +5352 -0
- codemble-0.4.0/codemble/web_dist/index.html +28 -0
- codemble-0.4.0/docs/plans/2026-07-19-audience-modes-and-local-narration-design.md +292 -0
- codemble-0.4.0/docs/plans/2026-07-19-audience-modes-backend-plan.md +1701 -0
- codemble-0.4.0/docs/plans/2026-07-19-audience-modes-frontend-plan.md +539 -0
- codemble-0.4.0/docs/releases/checklist.md +35 -0
- codemble-0.4.0/docs/releases/v0.4.0.md +118 -0
- codemble-0.4.0/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-a.md +3480 -0
- codemble-0.4.0/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-b.md +3556 -0
- codemble-0.4.0/docs/superpowers/plans/2026-07-19-galaxy-ux-phase-c.md +3905 -0
- codemble-0.4.0/docs/superpowers/plans/2026-07-19-galaxy-ux-shared-contract.md +105 -0
- codemble-0.4.0/docs/superpowers/specs/2026-07-19-galaxy-ux-overhaul-design.md +352 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/astro.config.mjs +2 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/package.json +1 -1
- codemble-0.4.0/docs-site/public/brand/icons/asterism.svg +6 -0
- codemble-0.4.0/docs-site/public/brand/icons/install.svg +5 -0
- codemble-0.4.0/docs-site/public/shots/easy-mode.png +0 -0
- codemble-0.4.0/docs-site/public/shots/galaxy-lit.png +0 -0
- codemble-0.4.0/docs-site/public/shots/galaxy.png +0 -0
- codemble-0.4.0/docs-site/public/shots/map-architecture.png +0 -0
- codemble-0.4.0/docs-site/public/shots/map-workflow.png +0 -0
- codemble-0.4.0/docs-site/public/shots/study-panel.png +0 -0
- codemble-0.4.0/docs-site/public/shots/system.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/architecture.md +7 -1
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/checks-and-lighting.md +20 -1
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/early-testing.md +7 -1
- codemble-0.4.0/docs-site/src/content/docs/installation.md +127 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/introduction.md +12 -8
- codemble-0.4.0/docs-site/src/content/docs/progress/m12-galaxy-look.md +60 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/quickstart.md +34 -10
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/roadmap.md +3 -1
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/star-chart.md +5 -0
- codemble-0.4.0/docs-site/src/content/docs/study-panel.md +74 -0
- codemble-0.4.0/docs-site/src/content/docs/the-galaxy.md +129 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/pages/index.astro +56 -9
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/styles/custom.css +70 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/styles/landing.css +61 -0
- {codemble-0.3.1 → codemble-0.4.0}/pyproject.toml +1 -1
- codemble-0.4.0/tests/conftest.py +30 -0
- codemble-0.4.0/tests/fixtures/repeated_calls.py +9 -0
- codemble-0.4.0/tests/test_checks.py +306 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_graph_finalization.py +39 -0
- codemble-0.4.0/tests/test_mapview.py +262 -0
- codemble-0.4.0/tests/test_providers.py +260 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_python_ast.py +82 -2
- codemble-0.4.0/tests/test_server.py +689 -0
- codemble-0.4.0/tests/test_structural.py +121 -0
- codemble-0.4.0/tests/test_study.py +537 -0
- codemble-0.4.0/web/index.html +27 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/package-lock.json +2 -2
- {codemble-0.3.1 → codemble-0.4.0}/web/package.json +1 -1
- codemble-0.4.0/web/scripts/check_graph_data.mjs +149 -0
- codemble-0.4.0/web/scripts/check_learner_session.mjs +1779 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/src/App.jsx +379 -230
- codemble-0.4.0/web/src/GalaxyCanvas.jsx +459 -0
- codemble-0.4.0/web/src/GuidanceLayer.jsx +92 -0
- codemble-0.4.0/web/src/MapView.jsx +279 -0
- codemble-0.4.0/web/src/ModeControl.jsx +112 -0
- codemble-0.4.0/web/src/StudyPanel.jsx +390 -0
- codemble-0.4.0/web/src/galaxyEffects.js +122 -0
- codemble-0.4.0/web/src/galaxyMaterials.js +199 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/src/graphData.js +70 -18
- codemble-0.4.0/web/src/learnerSession.js +1272 -0
- codemble-0.4.0/web/src/main.jsx +58 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/src/styles.css +648 -21
- codemble-0.4.0/web/src/tokens.css +45 -0
- codemble-0.3.1/codemble/lens/javascript_typescript.py +0 -82
- codemble-0.3.1/codemble/lens/python.py +0 -71
- codemble-0.3.1/codemble/web_dist/assets/index-DOBVd_-M.css +0 -1
- codemble-0.3.1/codemble/web_dist/assets/index-cIG6GGIB.js +0 -5238
- codemble-0.3.1/codemble/web_dist/index.html +0 -18
- codemble-0.3.1/docs/releases/checklist.md +0 -14
- codemble-0.3.1/docs-site/src/content/docs/installation.md +0 -69
- codemble-0.3.1/docs-site/src/content/docs/the-galaxy.md +0 -44
- codemble-0.3.1/tests/test_checks.py +0 -103
- codemble-0.3.1/tests/test_server.py +0 -323
- codemble-0.3.1/tests/test_study.py +0 -229
- codemble-0.3.1/web/index.html +0 -17
- codemble-0.3.1/web/scripts/check_graph_data.mjs +0 -77
- codemble-0.3.1/web/scripts/check_learner_session.mjs +0 -417
- codemble-0.3.1/web/src/GalaxyCanvas.jsx +0 -235
- codemble-0.3.1/web/src/learnerSession.js +0 -681
- codemble-0.3.1/web/src/main.jsx +0 -20
- codemble-0.3.1/web/src/tokens.css +0 -23
- {codemble-0.3.1 → codemble-0.4.0}/.env.example +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.gitattributes +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/ISSUE_TEMPLATE/early_tester.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/dependabot.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/.github/workflows/publish-pypi.yml +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/AGENTS.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/CODE_OF_CONDUCT.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/CONTRIBUTING.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/LICENSE +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/NOTICE +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/SECURITY.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/assets/demo.gif +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/base.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/discovery.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/project.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/python_ast.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/adapters/typescript_tree_sitter.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/checks/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/cli.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/lens/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/llm/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/progress/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/server/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-6-qcROiO.woff +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/jetbrains-mono-latin-400-normal-V6pRDFza.woff2 +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-BWZEU5yA.woff2 +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/jetbrains-mono-latin-500-normal-CJOVTJB7.woff +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/shippori-mincho-latin-500-normal-C-QwvIb3.woff +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/shippori-mincho-latin-500-normal-XI1O8euf.woff2 +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/shippori-mincho-latin-700-normal-CkoCYOiI.woff +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/shippori-mincho-latin-700-normal-DHcmzUO5.woff2 +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-BEdayliK.woff2 +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/codemble/web_dist/assets/zen-kaku-gothic-new-latin-400-normal-CPSmNJAU.woff +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/adr/README.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/plans/2026-07-19-install-ux-folder-picker-design.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/plans/2026-07-19-install-ux-folder-picker-plan.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/plans/README.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/plans/phase-1.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/releases/v0.1.0.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/releases/v0.2.0.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs/research/README.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/.gitignore +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/design.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/favicon-16.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/favicon-32.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/icon-180.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/icon-192.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/icon-512.png +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/icon.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/mark-animated.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/mark.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/hero-chart.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/hero-field.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/hero-gold.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/kasumi-rule.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/plate-galaxy.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/plate-study.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/plate-system.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/brand/plates/seal.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/public/favicon.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/scripts/build-plates.mjs +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/assets/codemble-mark-dark.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/assets/codemble-mark-light.svg +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/components/Search.astro +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/components/Tatebanko.astro +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/build-from-source.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/contributing.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/correctness.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m1-parser.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m10-polyglot-release.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m2-galaxy.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m3-study.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m4-lens.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m5-checks.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m6-release.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m8-typescript.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content/docs/progress/m9-typescript-lens.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/content.config.ts +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/docs-site/src/styles/tokens.css +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/scripts/dev.sh +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/scripts/record_demo.sh +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/concepts_sample.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/python_worker.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/broken.ts +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/legacy.js +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/local.js +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/main.ts +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/reexport.ts +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/util.ts +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/polyglot/src/widget.tsx +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/.gitignore +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/ambiguous.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/api.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/app.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/broken.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/cli.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/pkg/__init__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/pkg/helpers.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/pkg/service.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/pkg/util.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/runner/__main__.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/fixtures/sampleproj/shared.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_progress.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_project_parser.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_smoke.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/tests/test_typescript_tree_sitter.py +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/README.md +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/scripts/record_demo.mjs +0 -0
- {codemble-0.3.1 → codemble-0.4.0}/web/vite.config.js +0 -0
|
@@ -10,7 +10,7 @@ jobs:
|
|
|
10
10
|
runs-on: ubuntu-latest
|
|
11
11
|
steps:
|
|
12
12
|
- uses: actions/checkout@v7
|
|
13
|
-
- uses: actions/setup-python@
|
|
13
|
+
- uses: actions/setup-python@v6
|
|
14
14
|
with:
|
|
15
15
|
python-version: "3.11"
|
|
16
16
|
- name: Install
|
|
@@ -23,7 +23,7 @@ jobs:
|
|
|
23
23
|
runs-on: ubuntu-latest
|
|
24
24
|
steps:
|
|
25
25
|
- uses: actions/checkout@v7
|
|
26
|
-
- uses: actions/setup-node@
|
|
26
|
+
- uses: actions/setup-node@v7
|
|
27
27
|
with:
|
|
28
28
|
node-version: "22"
|
|
29
29
|
- name: astro check
|
|
@@ -35,7 +35,7 @@ jobs:
|
|
|
35
35
|
runs-on: ubuntu-latest
|
|
36
36
|
steps:
|
|
37
37
|
- uses: actions/checkout@v7
|
|
38
|
-
- uses: actions/setup-node@
|
|
38
|
+
- uses: actions/setup-node@v7
|
|
39
39
|
with:
|
|
40
40
|
node-version: "22"
|
|
41
41
|
- name: build web app
|
|
@@ -47,7 +47,7 @@ jobs:
|
|
|
47
47
|
runs-on: ubuntu-latest
|
|
48
48
|
steps:
|
|
49
49
|
- uses: actions/checkout@v7
|
|
50
|
-
- uses: actions/setup-python@
|
|
50
|
+
- uses: actions/setup-python@v6
|
|
51
51
|
with:
|
|
52
52
|
python-version: "3.11"
|
|
53
53
|
- name: Build wheel and verify packaged SPA
|
|
@@ -22,16 +22,16 @@ jobs:
|
|
|
22
22
|
runs-on: ubuntu-latest
|
|
23
23
|
steps:
|
|
24
24
|
- uses: actions/checkout@v7
|
|
25
|
-
- uses: actions/setup-node@
|
|
25
|
+
- uses: actions/setup-node@v7
|
|
26
26
|
with:
|
|
27
27
|
node-version: "22"
|
|
28
|
-
- uses: actions/configure-pages@
|
|
28
|
+
- uses: actions/configure-pages@v6
|
|
29
29
|
- name: Build Astro site
|
|
30
30
|
run: |
|
|
31
31
|
cd docs-site
|
|
32
32
|
npm install
|
|
33
33
|
npm run build
|
|
34
|
-
- uses: actions/upload-pages-artifact@
|
|
34
|
+
- uses: actions/upload-pages-artifact@v5
|
|
35
35
|
with:
|
|
36
36
|
path: docs-site/dist
|
|
37
37
|
deploy:
|
|
@@ -42,4 +42,4 @@ jobs:
|
|
|
42
42
|
url: ${{ steps.deployment.outputs.page_url }}
|
|
43
43
|
steps:
|
|
44
44
|
- id: deployment
|
|
45
|
-
uses: actions/deploy-pages@
|
|
45
|
+
uses: actions/deploy-pages@v5
|
|
@@ -5,6 +5,120 @@ Format: [Keep a Changelog](https://keepachangelog.com/en/1.1.0/) · Versioning:
|
|
|
5
5
|
|
|
6
6
|
## [Unreleased]
|
|
7
7
|
|
|
8
|
+
## [0.4.0] - 2026-07-20
|
|
9
|
+
|
|
10
|
+
The galaxy read as flat spheres on a plain background, connections were hard to
|
|
11
|
+
follow at any zoom level, and once a project was bound the only way to open a
|
|
12
|
+
different one was killing the server. This release lands the redesign, adds a
|
|
13
|
+
second way to look at the same graph, and puts what the parser already knew on
|
|
14
|
+
screen.
|
|
15
|
+
|
|
16
|
+
### Added
|
|
17
|
+
- A second **Map** layer beside the galaxy, switchable from the header. Its
|
|
18
|
+
*Architecture* tab lays modules out as boxes grouped by directory and layered
|
|
19
|
+
by import distance from Home; its *Workflow* tab walks the call tree from your
|
|
20
|
+
entrypoint, where the first hop is the `defines` relation the parser recorded
|
|
21
|
+
and deeper hops are `calls`. Both layouts are computed by the parser-backed
|
|
22
|
+
graph layer and served by a new `GET /api/map`, so the map and the galaxy can
|
|
23
|
+
never disagree.
|
|
24
|
+
- The Map layer is plain SVG and needs no WebGL, so a machine that cannot draw
|
|
25
|
+
the galaxy can still read the project.
|
|
26
|
+
- The study panel now shows what the parser knows before any model is asked: a
|
|
27
|
+
structural summary rendered from parser facts through fixed templates, with no
|
|
28
|
+
key, no network, and no provider involved.
|
|
29
|
+
- Grounded narration finally reaches the panel. The explanation endpoint had
|
|
30
|
+
shipped but was never called, so the narration block always rendered empty.
|
|
31
|
+
- A Connections section lists every parser relationship into and out of the
|
|
32
|
+
selected structure, grouped inbound and outbound, each row stating direction,
|
|
33
|
+
certainty, and a `file:line` citation for where that structure is defined —
|
|
34
|
+
plus a small SVG diagram of callers, this structure, and callees. Clicking a
|
|
35
|
+
row opens that structure's study.
|
|
36
|
+
- Local narration through Ollama, so a learner with no API key can still get
|
|
37
|
+
grounded prose without their source leaving the machine. It is explicit
|
|
38
|
+
opt-in (`CODEMBLE_PROVIDER=ollama`, or `provider = "ollama"` in
|
|
39
|
+
`~/.codemble/config`) with no auto-detection, the host is refused at
|
|
40
|
+
construction unless it is plain `http` on loopback, no credential is ever
|
|
41
|
+
sent, and the output passes exactly the same grounding validation as a cloud
|
|
42
|
+
provider. Honest caveat: that validation catches an invented identifier, not
|
|
43
|
+
a wrong claim about a real one, and smaller local models make the second kind
|
|
44
|
+
of mistake more often.
|
|
45
|
+
- Guidance when no model is configured, including the local Ollama path, driven
|
|
46
|
+
by whether a loopback Ollama is actually reachable and which models it has.
|
|
47
|
+
- An Easy/Expert audience toggle in the header. Easy uses plain language for
|
|
48
|
+
narration, check questions, panel labels, Lens notes, and the legend; Expert
|
|
49
|
+
keeps full terminology. The choice persists per project and never changes
|
|
50
|
+
graph truth, coordinates, progress, or how a check is scored.
|
|
51
|
+
- Easy mode opens on the Map, hides galaxy links unrelated to the selected
|
|
52
|
+
structure, and shows a hint chip naming the nearest unlit region to Home. The
|
|
53
|
+
hint is counted in import-route hops over the graph; no model chooses it.
|
|
54
|
+
- Switch project: a header control releases the current project and returns to
|
|
55
|
+
the picker, so a second project no longer needs a terminal.
|
|
56
|
+
- Change Home: the entrypoint picker can be reopened whenever the parser ranked
|
|
57
|
+
at least one candidate, and the Home you select is remembered for the next run
|
|
58
|
+
of the same project.
|
|
59
|
+
- Edge arrowheads below the galaxy level, hover tooltips on every edge naming
|
|
60
|
+
both structures, the relationship, its certainty and the line it was seen on,
|
|
61
|
+
and hover/selection highlighting.
|
|
62
|
+
- First-run coach-marks explain what you see, how to move, and what lights
|
|
63
|
+
stars. Dismissing them is a local UI preference, not progress.
|
|
64
|
+
- A clickable breadcrumb, and a legend naming dim, amber-understood, unchartable
|
|
65
|
+
syntax-error files, certain versus possible relationships, and one swatch per
|
|
66
|
+
language. It describes only the encodings the layer on screen actually draws:
|
|
67
|
+
size and brightness are galaxy-only, language tint appears at galaxy level and
|
|
68
|
+
on the Architecture tab, and the possible-relationship swatch dashes on the Map
|
|
69
|
+
to match the SVG while staying colour-only for the galaxy.
|
|
70
|
+
- Correct check answers now get an affirmation, not just silence.
|
|
71
|
+
- A `<noscript>` message and a React error boundary, so a render failure
|
|
72
|
+
explains itself and offers a reload instead of showing a blank page.
|
|
73
|
+
|
|
74
|
+
### Changed
|
|
75
|
+
- The galaxy gained depth: nodes carry a canvas-generated halo, an
|
|
76
|
+
`UnrealBloomPass` is tuned so lit amber blooms hard while the unlit ramp
|
|
77
|
+
barely registers, and a background starfield is seeded by hashing the
|
|
78
|
+
project's own file hashes — the same code always produces the same sky.
|
|
79
|
+
- At galaxy level, Python, JavaScript and TypeScript systems sit in a faint
|
|
80
|
+
language-tinted nebula. A system in any other language renders no fog rather
|
|
81
|
+
than borrowing another language's hue.
|
|
82
|
+
- Keyboard focus in the galaxy now carries a visible reticle as well as its
|
|
83
|
+
live text readout.
|
|
84
|
+
- Passing a region's checks plays a 1.2s "nebula dawn" the next time you are at
|
|
85
|
+
galaxy level: amber washes across that system's halo and fog and recedes. The
|
|
86
|
+
lit state is already committed before it runs, so the animation celebrates a
|
|
87
|
+
fact rather than delivering it. `prefers-reduced-motion` skips it entirely and
|
|
88
|
+
goes straight to the finished lit state.
|
|
89
|
+
- System orbits are laid out by call depth instead of by member index, so an
|
|
90
|
+
inner ring means "this runs first". Ring 1 is what the module's entry node
|
|
91
|
+
calls directly plus every member no sibling calls; members no certain call
|
|
92
|
+
reaches keep the outermost ring rather than being placed by guesswork. Only
|
|
93
|
+
certain calls decide placement. Layout coordinates changed once; saved
|
|
94
|
+
progress is unaffected because region signatures derive from file hashes, not
|
|
95
|
+
coordinates.
|
|
96
|
+
- Drifting particles mark **certain** call edges only, at system and study
|
|
97
|
+
level. A possible call stays still, so motion can never imply proof.
|
|
98
|
+
`prefers-reduced-motion` stops them too.
|
|
99
|
+
- Centrality now counts the distinct structures that call a node, not the call
|
|
100
|
+
sites they contain, so a helper hammered from one loop no longer outshines a
|
|
101
|
+
shared utility. The study panel's label follows: "Callers", not "Calls in".
|
|
102
|
+
- The study panel leads with the structural summary and narration, then
|
|
103
|
+
connections, then source and lens notes.
|
|
104
|
+
- The study level keeps the selected structure's connections visible instead of
|
|
105
|
+
dimming the whole scene.
|
|
106
|
+
- A region with no safe check now explains that Codemble refuses to ask a
|
|
107
|
+
question the graph cannot answer, rather than only stating that none exists.
|
|
108
|
+
- The zero-candidate Home screen no longer tells you to restart with a CLI
|
|
109
|
+
flag; every option is in the app.
|
|
110
|
+
- The star chart labels studied counts "this session", which is what they have
|
|
111
|
+
always measured.
|
|
112
|
+
|
|
113
|
+
### Fixed
|
|
114
|
+
- The partial-parse notice rode a code path that never executed; it now renders
|
|
115
|
+
with the narration block, and the structural summary states it as well.
|
|
116
|
+
- A failed graph load offered only "Restart Codemble and reload this page"; it
|
|
117
|
+
now retries in place.
|
|
118
|
+
- Contributors only: pinned the docs site back to TypeScript 6.x. An automated
|
|
119
|
+
7.0.2 bump had broken the `astro check` CI gate, because TypeScript's native
|
|
120
|
+
7.x compiler does not yet expose the programmatic API that check relies on.
|
|
121
|
+
|
|
8
122
|
## [0.3.1] - 2026-07-19
|
|
9
123
|
|
|
10
124
|
### Changed
|
|
@@ -167,7 +167,7 @@ Polish, then the coordinated launch (Show HN / X; lit-galaxy GIF as hero).
|
|
|
167
167
|
|
|
168
168
|
## Current State **[AGENT-MAINTAINED]**
|
|
169
169
|
|
|
170
|
-
**Current milestone: Phase 1 tester evidence** · Last updated: 2026-07-
|
|
170
|
+
**Current milestone: Phase 1 tester evidence** · Last updated: 2026-07-20 ·
|
|
171
171
|
Session note: architecture-deepening maintenance is complete after the verified
|
|
172
172
|
v0.2.0 release; all four report recommendations are merged in phases while issue
|
|
173
173
|
#13 remains open for human tester evidence. The public site was then redesigned
|
|
@@ -182,10 +182,21 @@ repository were affected and no region lost a check. The root README was then
|
|
|
182
182
|
restructured around the learning loop, fast tester setup, correctness, and the
|
|
183
183
|
local/AI boundary. Its top mark now uses self-contained, GitHub-safe motion with
|
|
184
184
|
a static reduced-motion state; no product or app behavior changed. Bare
|
|
185
|
-
`codemble` now serves
|
|
185
|
+
`codemble` now serves an in-app project picker (home-jailed browse +
|
|
186
186
|
recents, Host-header allowlisted) instead of the current directory; README,
|
|
187
187
|
docs-site, the changelog, and a new PyPI release checklist now lead with
|
|
188
|
-
`uvx codemble` ahead of the pending first PyPI publish.
|
|
188
|
+
`uvx codemble` ahead of the pending first PyPI publish. A galaxy UX overhaul
|
|
189
|
+
design was then interviewed and approved (spec
|
|
190
|
+
`docs/superpowers/specs/2026-07-19-galaxy-ux-overhaul-design.md`): three phases —
|
|
191
|
+
light up the shipped-but-inert narration/mode/connections surface plus project
|
|
192
|
+
switching, then the "living cosmos" visual overhaul with a 2D Map layer, then
|
|
193
|
+
~1,000-file scale with staged parse progress; four Decision Log entries record
|
|
194
|
+
the approved Non-Goal and binding relaxations. Phase A (the narration/mode/
|
|
195
|
+
connections surface and project switching) and Phase B (M12: call-depth
|
|
196
|
+
orbits, the 2D Map layer, and the living-cosmos visual overhaul) have both
|
|
197
|
+
since shipped. Phase C (~1,000-file scale with staged parse progress) has not
|
|
198
|
+
started — there is still no threaded parse or parse-progress screen, and the
|
|
199
|
+
scale cap remains ~300 files.
|
|
189
200
|
|
|
190
201
|
### M0 — Repo, docs & website scaffold ✅ (2026-07-19)
|
|
191
202
|
- [x] Root: README, LICENSE (Apache-2.0), CoC, SECURITY, CONTRIBUTING,
|
|
@@ -309,6 +320,30 @@ intake avoids repeated discovery; learner transitions are tested above local HTT
|
|
|
309
320
|
JS/TS certainty and concept evidence remain parser-proven through the unchanged
|
|
310
321
|
`LanguageAdapter` interface.
|
|
311
322
|
|
|
323
|
+
### M12 — Living cosmos + 2D map (galaxy UX overhaul, Phase B) ✅ (2026-07-20)
|
|
324
|
+
- [x] System orbits by call depth from the region's entry node, hash-seeded and
|
|
325
|
+
deterministic; layout coordinates changed once, saved progress did not
|
|
326
|
+
- [x] `GET /api/map`: deterministic Architecture and Workflow 2D layouts
|
|
327
|
+
computed in `codemble/graph/`, reading the same graph as `GET /api/graph`
|
|
328
|
+
- [x] A 2D Map layer (Architecture + Workflow tabs) switchable from the header,
|
|
329
|
+
plain SVG, no WebGL dependency
|
|
330
|
+
- [x] Canvas-generated halos, language-tinted nebulae, a hash-seeded starfield,
|
|
331
|
+
composited bloom, and drifting particles on certain call edges only
|
|
332
|
+
- [x] The ~1.2s nebula-dawn light-up moment, with an instantly finished lit
|
|
333
|
+
state under reduced motion
|
|
334
|
+
- [x] Easy mode defaults to the Map with reduced edge density and a
|
|
335
|
+
graph-derived hint chip; Expert defaults to the galaxy; an explicit
|
|
336
|
+
layer choice always beats the mode default
|
|
337
|
+
- [x] First-run coach-marks, a clickable breadcrumb, and a language-tint
|
|
338
|
+
legend key
|
|
339
|
+
|
|
340
|
+
**Acceptance:** the map and the galaxy read one graph and cannot disagree;
|
|
341
|
+
uncertainty renders distinctly in both — colour-only in the 3D galaxy (no
|
|
342
|
+
line-dash support there), genuinely dashed in the 2D map; region signatures
|
|
343
|
+
hash file content, never coordinates, so the orbit relayout did not re-dim any
|
|
344
|
+
region; reduced motion always yields the finished lit state with zero
|
|
345
|
+
animation.
|
|
346
|
+
|
|
312
347
|
## Decision Log **[AGENT-MAINTAINED — append only]**
|
|
313
348
|
|
|
314
349
|
| Date | Decision | Why |
|
|
@@ -360,14 +395,24 @@ JS/TS certainty and concept evidence remain parser-proven through the unchanged
|
|
|
360
395
|
| 2026-07-19 | The root README uses a self-contained animated ensō mark; app icons and favicons remain static | GitHub strips page-level scripting, so motion belongs inside the referenced SVG. The loop is restrained to illumination, transforms, and opacity, and reduced-motion users receive the finished lit state |
|
|
361
396
|
| 2026-07-19 | Bare `codemble` serves a one-shot in-app project picker (browse + recents) on a single two-phase server; binding is one-shot and the API is home-jailed with a Host-header allowlist | Approved by UD this session: easiest possible run flow for learners without a second server, without free filesystem enumeration, and without changing the one-graph app model |
|
|
362
397
|
| 2026-07-19 | Codemble publishes to PyPI from the next tagged release; install collapses to `uvx codemble` | Approved by UD this session: the git+tag install was the biggest onboarding hurdle for the target learner |
|
|
398
|
+
| 2026-07-19 | Local models (Ollama) are now allowed, reversing the 2026-07-18 Non-Goal; guardrails: loopback-and-`http`-only enforced at construction, explicit opt-in with no auto-detection, the same grounding validation applied to every provider, and the deterministic Tier 0 summary always available as a floor | Approved by UD this session. Residual risk stated honestly: grounding validation catches an invented identifier, not a wrong claim about a real one, and small local models make that second kind of error more often |
|
|
399
|
+
| 2026-07-19 | A 2D Map layer (architecture + workflow-tree tabs) joins the 3D galaxy behind one switcher, superseding the "no second 2D renderer in v1" Non-Goal; layouts are computed deterministically in the graph layer and React stays a pure SVG renderer | Approved by UD in the galaxy UX overhaul interview (spec `docs/superpowers/specs/2026-07-19-galaxy-ux-overhaul-design.md`); beginners read flat maps more easily and the render-ready graph rule makes the second view cheap and truthful |
|
|
400
|
+
| 2026-07-19 | Scale target raised to ~1,000 supported files with a worker-thread parse, polled staged progress, and an honest loading screen; the subdirectory prompt moves to the new cap | Approved by UD: a deliberate partial pull-forward of Phase 2 scale work; full LOD/clustering stays in Phase 2 |
|
|
401
|
+
| 2026-07-19 | One-shot project binding relaxed to an explicit in-app reset (`POST /api/picker/reset`); home jail and Host allowlist unchanged | Approved by UD: learners must be able to switch projects without killing the server; per-project progress makes switching safe |
|
|
402
|
+
| 2026-07-19 | App art direction is "living cosmos" within the Formal Edo palette: halo sprites, bloom, hash-seeded starfield, language-tinted nebulae, call-depth system orbits (layout bytes change once, still deterministic), and an Easy/Expert UI toggle riding the shipped audience-mode backend | Approved by UD section-by-section; amber keeps its monopoly on understanding, uncertainty stays dashed in both layers, and Easy-mode guidance is graph-deterministic (nearest unlit region by route hops), never model-decided |
|
|
403
|
+
| 2026-07-20 | System orbits are call depth from the module's entry node, with the seed widened to include members no sibling calls | A module node makes no intra-project calls, so the spec's literal seed was always empty and stranded every member in the outermost ring. Both spec rules are preserved: the entry's callees are ring 1, and unreachable members take the outermost ring by node id |
|
|
404
|
+
| 2026-07-20 | The workflow tree's first hop is labelled `defines`, not `calls` | The selected entrypoint is usually a module, and the parser observed no call from a module to its own function. Containment is real parser truth (`Node.region`); relabelling it a call would have invented an edge |
|
|
405
|
+
| 2026-07-20 | Nebula tints ship lighter than the values in the design spec | The spec's starting values measured 3.19–4.46:1 against `--cm-ground-2` and failed the 4.5:1 legend floor. Hue is held; only lightness moved, and all three stay below `--cm-ink-2` so amber's monopoly is intact |
|
|
406
|
+
| 2026-07-20 | Bloom resolution is capped with `composer.setPixelRatio(1)`, not the `UnrealBloomPass` constructor | `EffectComposer.setSize` forwards the canvas size to every pass on resize, overwriting the constructor's `resolution`. The pixel ratio is the cap that survives |
|
|
407
|
+
| 2026-07-20 | **Corrects the row above**: bloom is capped by wrapping the bloom pass's own `setSize`, and the composer keeps the renderer's pixel ratio | The pixel ratio *did* cap bloom, but `EffectComposer.setSize` multiplies it into `renderTarget1/2` and every pass, so the whole scene rendered at 1x and upscaled — measured 1280x611 scene passes on a 2560x1221 buffer at dpr 2. Wrapping the one pass caps the one expensive thing: scene now 2560x1221, bloom mip 0 800x382 (1280x611 uncapped), `?benchmark` at 951 nodes unchanged at 928.8 → 961.5 fps median |
|
|
408
|
+
| 2026-07-20 | **Corrects "binding is one-shot"** (2026-07-19 picker row): binding is one-*at-a-time*. `serve_project` attaches `PickerConfig(browse_root=Path.home())` too, so a `codemble <path>` run also exposes the picker endpoints after a reset, and browse then enumerates non-hidden directories under `$HOME` | The Switch project control has to work without a process restart, which is what that config is for — but the earlier row still claimed a permanent 409 for the path-opened flow, and this file is the source of truth. The home jail and the Host-header allowlist are unchanged; only the "one-shot" claim was false. An app built with no `PickerConfig` at all remains genuinely one-shot and refuses reset |
|
|
363
409
|
|
|
364
410
|
## Non-Goals — do NOT build (point here when asked)
|
|
365
411
|
|
|
366
412
|
- ❌ Free-flight 3D navigation — semantic zoom only
|
|
367
413
|
- ❌ XP, streaks, levels, leaderboards
|
|
368
|
-
- ❌ A second 2D renderer/toggle in v1
|
|
414
|
+
- ❌ ~~A second 2D renderer/toggle in v1~~ — superseded 2026-07-19: the 2D Map layer is approved (see Decision Log); free-form/client-computed 2D layouts remain out
|
|
369
415
|
- ❌ Accounts, cloud hosting, multi-user; share link waits for Phase 3
|
|
370
|
-
- ❌ Local models (Ollama)
|
|
371
416
|
- ❌ Extra quest types before Phase 3
|
|
372
417
|
- ❌ GitHub-URL ingestion in v1
|
|
373
418
|
- ❌ Elaborate game art before the loop teaches well
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: codemble
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.4.0
|
|
4
4
|
Summary: A learning game that turns the code AI wrote for you into a galaxy you light up by understanding it.
|
|
5
5
|
Project-URL: Homepage, https://udhawan97.github.io/Codemble/
|
|
6
6
|
Project-URL: Repository, https://github.com/udhawan97/Codemble
|
|
@@ -43,8 +43,9 @@ Description-Content-Type: text/markdown
|
|
|
43
43
|
|
|
44
44
|
<p align="center">
|
|
45
45
|
Codemble is a local-first learning game for projects built with Claude Code,
|
|
46
|
-
Codex, and other coding agents. It maps real parser evidence into a 3D galaxy
|
|
47
|
-
then lights each region only after you prove you
|
|
46
|
+
Codex, and other coding agents. It maps real parser evidence into a 3D galaxy
|
|
47
|
+
and a flat architecture map, then lights each region only after you prove you
|
|
48
|
+
understand it.
|
|
48
49
|
</p>
|
|
49
50
|
|
|
50
51
|
<p align="center"><strong>Your project · Your key · Your machine · No invented structure</strong></p>
|
|
@@ -65,9 +66,15 @@ Description-Content-Type: text/markdown
|
|
|
65
66
|
</p>
|
|
66
67
|
|
|
67
68
|
<p align="center">
|
|
68
|
-
<img src="https://github.com/udhawan97/Codemble/raw/main/
|
|
69
|
+
<img src="https://github.com/udhawan97/Codemble/raw/main/docs-site/public/shots/galaxy.png" alt="Codemble at galaxy level: eighty dim star systems parsed from real source, with a legend, language focus buttons, and a notice that two files are unchartable because their parser reported a syntax error" width="960">
|
|
69
70
|
</p>
|
|
70
71
|
|
|
72
|
+
<p align="center"><sub>
|
|
73
|
+
Galaxy level. Every system is one module; size is lines of code, brightness is
|
|
74
|
+
how many distinct structures call it. Files the parser could not read stay
|
|
75
|
+
visible and say so.
|
|
76
|
+
</sub></p>
|
|
77
|
+
|
|
71
78
|
> [!IMPORTANT]
|
|
72
79
|
> **Codemble is in its Phase 1 tester release.** It maps Python,
|
|
73
80
|
> JavaScript, TypeScript, and mixed projects in one parser-proven galaxy,
|
|
@@ -77,22 +84,52 @@ Description-Content-Type: text/markdown
|
|
|
77
84
|
|
|
78
85
|
## Quick start
|
|
79
86
|
|
|
87
|
+
Two steps. The first is once per machine; the second is how you run Codemble
|
|
88
|
+
from then on.
|
|
89
|
+
|
|
90
|
+
| | Step | Command |
|
|
91
|
+
| :---: | --- | --- |
|
|
92
|
+
| <img src="https://github.com/udhawan97/Codemble/raw/main/docs-site/public/brand/icons/install.svg" width="22" height="22" alt=""> | **1 · Install uv** — the runner that fetches Codemble on demand | `brew install uv` |
|
|
93
|
+
| <img src="https://github.com/udhawan97/Codemble/raw/main/docs-site/public/brand/icons/asterism.svg" width="22" height="22" alt=""> | **2 · Chart your project** — nothing to install, nothing left behind | `uvx codemble` |
|
|
94
|
+
|
|
95
|
+
<details>
|
|
96
|
+
<summary><strong>Installing uv without Homebrew</strong></summary>
|
|
97
|
+
|
|
80
98
|
```bash
|
|
81
|
-
|
|
99
|
+
# macOS · Linux
|
|
100
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
101
|
+
|
|
102
|
+
# Windows (PowerShell)
|
|
103
|
+
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"
|
|
82
104
|
```
|
|
83
105
|
|
|
106
|
+
Already have `pipx`? You can skip uv entirely: `pipx install codemble`, then run
|
|
107
|
+
`codemble`. Plain `pip install codemble` works too. uv is the recommended path
|
|
108
|
+
because `uvx` runs the current release without adding anything to your system
|
|
109
|
+
Python.
|
|
110
|
+
|
|
111
|
+
</details>
|
|
112
|
+
|
|
84
113
|
Codemble opens your browser — pick your project folder there. To skip the
|
|
85
114
|
picker, pass a path: `codemble ./your-ai-built-project`.
|
|
86
115
|
|
|
87
116
|
The wheel already contains the web app, so Node.js is not required. No API key
|
|
88
|
-
is needed for the galaxy,
|
|
89
|
-
saved progress. Add your own Anthropic or
|
|
90
|
-
prose explanations:
|
|
117
|
+
is needed for the galaxy, the map, the structural summary, source viewer,
|
|
118
|
+
language Lens, checks, lighting, or saved progress. Add your own Anthropic or
|
|
119
|
+
OpenAI key only if you want grounded prose explanations:
|
|
91
120
|
|
|
92
121
|
```bash
|
|
93
122
|
export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY=sk-...
|
|
94
123
|
```
|
|
95
124
|
|
|
125
|
+
Prefer to send nothing anywhere? Point Codemble at a local
|
|
126
|
+
[Ollama](https://ollama.com) instead — same grounding validation, loopback only,
|
|
127
|
+
never automatic:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
ollama pull gemma4:12b && export CODEMBLE_PROVIDER=ollama
|
|
131
|
+
```
|
|
132
|
+
|
|
96
133
|
[Installation, configuration, and troubleshooting →](https://udhawan97.github.io/Codemble/installation/)
|
|
97
134
|
|
|
98
135
|
## How the learning loop works
|
|
@@ -100,7 +137,7 @@ export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY=sk-...
|
|
|
100
137
|
| Step | What Codemble does | What you gain |
|
|
101
138
|
| --- | --- | --- |
|
|
102
139
|
| **1. Chart** | Parses your project without running its code or package scripts | A deterministic map made from source evidence |
|
|
103
|
-
| **2. Navigate** |
|
|
140
|
+
| **2. Navigate** | Two layers over one graph: a 3D galaxy on scripted camera rails, and a flat map of architecture and workflow | Orientation without getting lost in free flight |
|
|
104
141
|
| **3. Study** | Shows the real source, exact line numbers, neighbors, and parser-detected language idioms | Context tied to code you can inspect |
|
|
105
142
|
| **4. Prove** | Generates and scores checks from the graph—never from the model | A region lights only when understanding is demonstrated |
|
|
106
143
|
| **5. Return** | Saves progress locally; changing one file re-dims only its module | A living map that stays honest as the project changes |
|
|
@@ -108,6 +145,59 @@ export ANTHROPIC_API_KEY=sk-ant-... # or OPENAI_API_KEY=sk-...
|
|
|
108
145
|
No XP. No streaks. No leaderboard. The visible reward is the useful one: more
|
|
109
146
|
of your own code becomes a sky you understand.
|
|
110
147
|
|
|
148
|
+
## What it looks like
|
|
149
|
+
|
|
150
|
+
<p align="center">
|
|
151
|
+
<img src="https://github.com/udhawan97/Codemble/raw/main/docs-site/public/shots/system.png" alt="A single star system, codemble.server.app, showing its functions and classes in orbits with call edges and a keyboard focus reticle" width="900">
|
|
152
|
+
</p>
|
|
153
|
+
|
|
154
|
+
<p align="center"><sub>
|
|
155
|
+
System level. Members orbit by call depth, so the inner ring runs first.
|
|
156
|
+
</sub></p>
|
|
157
|
+
|
|
158
|
+
<p align="center">
|
|
159
|
+
<img src="https://github.com/udhawan97/Codemble/raw/main/docs-site/public/shots/study-panel.png" alt="The study panel for create_app, showing kind, span, 36 callers, a structural summary marked no model needed, guidance for configuring a provider or a local Ollama, and a parser connections diagram with an inbound call citing a real file and line" width="900">
|
|
160
|
+
</p>
|
|
161
|
+
|
|
162
|
+
<p align="center"><sub>
|
|
163
|
+
Study. Everything on this panel except the narration comes from the parser —
|
|
164
|
+
and this one has no model configured at all.
|
|
165
|
+
</sub></p>
|
|
166
|
+
|
|
167
|
+
## Two layers over one graph
|
|
168
|
+
|
|
169
|
+
Codemble draws the same parser evidence two ways, switchable in the header. The
|
|
170
|
+
map cannot show you a relationship the galaxy does not have — both layouts are
|
|
171
|
+
computed in the graph layer and served as data.
|
|
172
|
+
|
|
173
|
+
| Layer | What it is | When it helps |
|
|
174
|
+
| --- | --- | --- |
|
|
175
|
+
| **Galaxy** | 3D, camera on rails through galaxy → system → study | Orientation, and the shape of the whole project |
|
|
176
|
+
| **Map · Architecture** | Modules as boxes, grouped by folder, layered by import distance from Home | Seeing how the project fits together |
|
|
177
|
+
| **Map · Workflow** | The call tree from your entrypoint, depth by depth | Seeing what runs first |
|
|
178
|
+
|
|
179
|
+
The Map is plain SVG, so it still works on a machine that cannot draw WebGL.
|
|
180
|
+
|
|
181
|
+
## Open a structure, read what the parser knows first
|
|
182
|
+
|
|
183
|
+
The study panel builds itself outward from the most certain evidence: a
|
|
184
|
+
structural summary written from parser facts alone — no key, no network, no
|
|
185
|
+
model — then grounded narration if you configured a provider, then every
|
|
186
|
+
connection into and out of the structure with its direction, its certainty, and
|
|
187
|
+
a `file:line` you can click, then the real source and the language Lens notes.
|
|
188
|
+
|
|
189
|
+
Sections other than the narration never involve a model at all.
|
|
190
|
+
|
|
191
|
+
## Easy or Expert
|
|
192
|
+
|
|
193
|
+
A header toggle changes how Codemble talks to you and how much it puts on
|
|
194
|
+
screen: plain language, larger type, the Map by default, and a hint chip naming
|
|
195
|
+
the nearest unlit region to Home — counted in import hops over the graph, not
|
|
196
|
+
chosen by a model. It never changes graph truth, coordinates, progress, or how a
|
|
197
|
+
check is scored.
|
|
198
|
+
|
|
199
|
+
You can also switch project or change Home without leaving the app.
|
|
200
|
+
|
|
111
201
|
## Read the galaxy
|
|
112
202
|
|
|
113
203
|
| In the galaxy | In your project |
|
|
@@ -117,9 +207,18 @@ of your own code becomes a sky you understand.
|
|
|
117
207
|
| The Home system | The selected parser-ranked entrypoint |
|
|
118
208
|
| A route or edge | An import or call; approximate calls are labeled **possible** |
|
|
119
209
|
| Size | Lines of code |
|
|
120
|
-
| Brightness |
|
|
210
|
+
| Brightness and glow | How many **distinct** structures call it |
|
|
211
|
+
| Nebula tint | Language, at galaxy level |
|
|
212
|
+
| Orbit ring | Call depth — the inner ring runs first |
|
|
213
|
+
| Drifting particles | A call the parser proved; a possible call stays still |
|
|
121
214
|
| Dim → lit | Not yet proven → understood |
|
|
122
215
|
|
|
216
|
+
Understanding owns the top of the brightness range: the unlit ramp stops below
|
|
217
|
+
the amber a lit star uses, so a busy module you have not proven can never
|
|
218
|
+
outshine one you have. Pass a region's checks and that system plays a short
|
|
219
|
+
amber "nebula dawn" — after the light is already saved, so the animation marks
|
|
220
|
+
a fact rather than delivering one.
|
|
221
|
+
|
|
123
222
|
Python-only, JavaScript-only, TypeScript-only, and mixed projects share the same
|
|
124
223
|
graph contract. Language focus changes only what you are looking at; it never
|
|
125
224
|
changes coordinates, progress, or parser truth.
|
|
@@ -134,7 +233,9 @@ mistake. Accuracy therefore outranks spectacle:
|
|
|
134
233
|
identifiers and relationships.
|
|
135
234
|
- Language Lens notes appear only where a parser detected the construct.
|
|
136
235
|
- Check answers come from the graph, never an LLM.
|
|
137
|
-
- Approximate relationships stay visibly uncertain
|
|
236
|
+
- Approximate relationships stay visibly uncertain — a distinct colour and no
|
|
237
|
+
drifting particles in the 3D galaxy, a genuinely dashed line in the 2D map,
|
|
238
|
+
and the legend swatch follows whichever layer is on screen.
|
|
138
239
|
- Provider output that fails grounding validation is withheld instead of being
|
|
139
240
|
softened into a guess.
|
|
140
241
|
|
|
@@ -146,12 +247,13 @@ A wrong explanation is a highest-severity bug—[report it without mercy](https:
|
|
|
146
247
|
| Stays on your machine | Leaves only when you ask |
|
|
147
248
|
| --- | --- |
|
|
148
249
|
| Project discovery and parsing | The bounded Study context sent to your configured provider |
|
|
149
|
-
| Graph, language Lens, and checks | A request triggered only when you open Study |
|
|
250
|
+
| Graph, structural summary, language Lens, and checks | A request triggered only when you open Study |
|
|
150
251
|
| Local server and packaged web app | Nothing in the background |
|
|
151
252
|
| Progress and explanation cache in `~/.codemble/` | No accounts, telemetry, or Codemble cloud |
|
|
253
|
+
| Narration too, if you choose a local Ollama | Nothing at all in that case |
|
|
152
254
|
|
|
153
|
-
No
|
|
154
|
-
the optional prose narration is unavailable.
|
|
255
|
+
No model at all? Codemble remains a complete parser-backed map and learning
|
|
256
|
+
game; only the optional prose narration is unavailable.
|
|
155
257
|
|
|
156
258
|
## Boundaries that keep the map truthful
|
|
157
259
|
|
|
@@ -164,8 +266,9 @@ the optional prose narration is unavailable.
|
|
|
164
266
|
`--entrypoint NODE_ID`.
|
|
165
267
|
- **Broken source:** syntax errors remain visible; Codemble maps safe partial
|
|
166
268
|
evidence instead of crashing or inventing the missing structure.
|
|
167
|
-
- **Rendering:**
|
|
168
|
-
|
|
269
|
+
- **Rendering:** the 3D galaxy needs WebGL. If your machine cannot draw it, the
|
|
270
|
+
Map layer still works — it is plain SVG over the same parser evidence, not a
|
|
271
|
+
degraded guess.
|
|
169
272
|
|
|
170
273
|
## Help test the release
|
|
171
274
|
|