interlatch 0.28.3__tar.gz → 0.28.4__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.
- {interlatch-0.28.3 → interlatch-0.28.4}/CHANGELOG.md +7 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/PKG-INFO +1 -1
- interlatch-0.28.4/changelog.d/hub-pages.md +4 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/devices.md +10 -10
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/docker.md +1 -1
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/devices.md +11 -11
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/docker.md +1 -1
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/join-a-hub.md +5 -5
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/profiles.md +1 -1
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/troubleshooting.md +1 -1
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/join-a-hub.md +5 -5
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/profiles.md +5 -4
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/troubleshooting.md +1 -1
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/i18n/ja.py +2 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/devices.py +2 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/hubs.py +40 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/routes.py +19 -4
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/app.js +51 -29
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/ja.js +10 -4
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_profile_hubs.py +54 -0
- interlatch-0.28.3/changelog.d/hubs-page.md +0 -4
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/dependabot.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/windows-ja-qa/driver.ps1 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/windows-ja-qa/ja_check.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/windows-ja-qa/report.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/windows-ja-qa/shots.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/windows-ja-qa/user.ps1 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/workflows/changelog.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/workflows/ci.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/workflows/docs.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/workflows/release.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.github/workflows/windows-ja-qa.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.gitignore +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.pre-commit-config.yaml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/.python-version +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/CONTRIBUTING.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/LICENSE +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/README.ja.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/ROADMAP.ja.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/ROADMAP.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/SECURITY.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/careers/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/careers/boards.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/careers/pipeline.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/changelog.d/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/dev.sh +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/.dockerignore +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/.env.example +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/Caddyfile +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/Dockerfile +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/compose.yaml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docker/wheels/.gitignore +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/_site/hooks.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/analysis.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/cli.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/configuration.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/dashboard.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/demo/make_demo.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/demo/record_demo.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/design/innerlatch.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/design/ja/innerlatch.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/design/ja/learning.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/design/learning.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/development.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/diagrams/analysis.excalidraw.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/diagrams/architecture.excalidraw.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/faq.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/images/demo.gif +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/images/home.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/images/map.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/images/palette.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/images/session.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/install.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/analysis.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/cli.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/configuration.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/dashboard.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/development.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/faq.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/install.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/mcp.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/moving-from-chronicle.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/party.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/postgres.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/privacy.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/sources.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/suggestions.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/ja/vscode.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/mcp.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/moving-from-chronicle.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/party.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/postgres.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/privacy.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/sources.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/suggestions.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/docs/vscode.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/.firebaserc +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/.gitignore +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/firebase.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/firestore.indexes.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/leaderboard/firestore.rules +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/mkdocs.yml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/art.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/filing.html +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/loops.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/loops.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/members.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/render.html +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/render.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/scenes-more.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/icons3d/scenes.html +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/Chronicle.icns +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/Interlatch.spec +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/build.sh +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/entitlements.plist +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/icon-3d.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/icon-blueprint-prompt.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/icon-blueprint.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/icon.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/interlatch_app.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/macos/make_icon.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/packaging/release.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/pyproject.toml +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/chronicle/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/chronicle/__main__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/chronicle/windows.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/__main__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/digest.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/language.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/queue.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/api.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/base.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/bob.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/claude.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/codex.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/factory.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/off.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/opencode.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/process.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/replies.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/runners/settings.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/screen.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/session.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/analysis/worker.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/application/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/application/profiles.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/application/records.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/application/search.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/application/workflows.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/artifacts/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/artifacts/files.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/artifacts/queries.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/cli.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/agents.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/artifact_records.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/config.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/diagrams.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/i18n/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/machine.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/paths.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/pricing.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/process.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/profiles.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/redact.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/sessions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/core/util.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/analyses.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/archive.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/chat_import.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/deletion.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/history.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/memory.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/persistence.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/report.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/ingestion/service.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/archive.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/hubs.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/knowledge.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/operations.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/recording.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/setup.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/commands/sharing.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/common.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/main.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/cli/parser.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/exports/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/exports/diagrams.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/exports/markdown.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/exports/sessions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/exports/vault.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/mcp.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/artifacts.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/common.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/hub_admin.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/knowledge.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/leaderboard.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/party.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/projects.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/sessions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/settings.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/sources.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/status.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/storage.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/api/team.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/app.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/assets.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/context.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/handler.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/jobs.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/interfaces/web/server.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/arena.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/bag.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/cases.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/formation.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/friction.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/glossary.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/group_graph.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/instructions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/ladder.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/learning.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/market.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/party.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/reviews.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/roadmap.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/study.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/suggest.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/synthesize.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/knowledge/weekly.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/groups.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/hubgroups.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/labels.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/owners.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/progress.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/routing.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/scope.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/projects/systems.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/connectors.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/container.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/hooks.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/install.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/migrate.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/notify.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/platforms/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/platforms/desktop.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/platforms/menubar.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/platforms/windows.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/statusline.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/tailnet.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/runtime/update.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/access.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/arena.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/client.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/identity.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/leaderboard.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/market.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/membership.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/news.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/people.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/projects.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/protocol.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/pull.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/push.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sharing/receiver.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/antigravity.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/bob.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/builder.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/chatgpt.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/chats.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/claude/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/claude/export.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/claude/files.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/claude/parser.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/codex/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/codex/cloud.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/codex/parser.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/copilot.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/discovery.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/opencode.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/sources/prompts.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/__init__.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/fts.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/kv.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/migrations.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/mirror.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/postgres.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/schema.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/sqlite.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/storage/team.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/AGENT-ICONS.txt +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/PLEX-OFL.txt +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/adventure.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-antigravity.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-bob.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-chatgpt.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-claude-ai.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-claude.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-codex.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-copilot.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/agent-opencode.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/app.css +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-book.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-camera.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-chip.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-clock.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-cloud.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-coins.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-container.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-dashboard.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-dex.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-document.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-flag.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-folder.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-gateway.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-gears.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-glitch.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-globe.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-laptop.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-log.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-lumi.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-magnifier.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-pip.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-plug.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-rack.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/art-tink.webp +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/battle.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/boot.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/favicon.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/field.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/i18n.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/icon-180.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/icon-192.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/icon-512.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/icon.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/index.html +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/innerlatch.css +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/innerlatch.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/learning.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/manifest.webmanifest +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/panel.css +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/panel.html +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/panel.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-mono-400.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-mono-500.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-mono-600.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-sans-400.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-sans-500.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-sans-600.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/plex-sans-700.woff2 +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/rough.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/scene.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/web/sprites.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/src/interlatch/windows.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/antigravity_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/codex_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/conftest.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/copilot_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/friction_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/golden.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/cli.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/diagram.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/antigravity.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/bob.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/claude_code.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/codex.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/copilot.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/parsers/opencode.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/goldens/systems.json +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/hubs_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/opencode_fixture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_adventure_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_analysis.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_antigravity.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_architecture.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_arena.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_artifacts.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_bag.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_battle_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_bob_analysis.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_boot_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_careers.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_case_files.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_cases.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_chat_import.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_cli_pins.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_codex.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_codex_analysis.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_codex_cloud.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_container.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_copilot_bob.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_dedicated_hub.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_dedupe.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_desktop.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_diagram.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_ee_boundary.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_field_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_fix_effect.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_formation.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_friction.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_game_mode.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_glossary.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_group_graph.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_group_sharing.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_guidance.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_home_agents.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_accept.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_cookie.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_groups.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_inventory_scope.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_leave_join.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_news.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_payload_privacy.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_projects.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_projects_listed.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_purge.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_send_problems.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_hub_sharing_race.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_i18n_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_ingest.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_instructions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_integration.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_ladder.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_language.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_leaderboard.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_learning_glance.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_learning_interests.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_learning_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_leave_project.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_legacy_package.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_map_goldens.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_market.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_menubar.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_migrate.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_mirror.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_notify.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_opencode.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_opencode_analysis.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_parser.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_parser_goldens.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_party.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_party_map.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_people.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_people_hub.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_people_web.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_profile_scope.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_profiles.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_project_groups.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_project_progress.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_providers.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_queue.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_regressions.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_release.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_roadmap_catalog.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_route_matrix.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_screen.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_security.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_setup.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_statusline.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_study.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_suggest.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_suggest_cli.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_systems.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_team.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_team_home.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_update.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_weekly_reanalysis.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/test_windows.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/tests/windows_smoke.py +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/uv.lock +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/.vscodeignore +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/LICENSE +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/README.md +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/extension.js +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/media/icon.png +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/media/interlatch.svg +0 -0
- {interlatch-0.28.3 → interlatch-0.28.4}/vscode-extension/package.json +0 -0
|
@@ -3,6 +3,13 @@
|
|
|
3
3
|
<!-- Don't add lines here: a pull request puts its line in a new file in changelog.d/ (see changelog.d/README.md),
|
|
4
4
|
and each release moves the files it took into a dated section below. -->
|
|
5
5
|
|
|
6
|
+
## 0.28.3 (2026-10-20)
|
|
7
|
+
|
|
8
|
+
- **Settings › Hubs.** Each hub this computer sends to has its own card: whether sending works, the last share,
|
|
9
|
+
**Share now**, its dashboard (signed in as that hub's link), joining and leaving it. The Projects sidebar names the
|
|
10
|
+
hub each group goes to and lists folders waiting for a hub first, and the status bar names every hub
|
|
11
|
+
([Several hubs on one computer](docs/profiles.md)).
|
|
12
|
+
|
|
6
13
|
## 0.28.2 (2026-10-20)
|
|
7
14
|
|
|
8
15
|
- **Several hubs: connect your groups.** `interlatch profile` became `interlatch hubs` and `interlatch group`: add a
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: interlatch
|
|
3
|
-
Version: 0.28.
|
|
3
|
+
Version: 0.28.4
|
|
4
4
|
Summary: Shared memory for your coding agents: records every session (Claude Code, Codex, Copilot, Bob, Antigravity, OpenCode) locally and keeps what they learned, each lesson linked to the session it came from.
|
|
5
5
|
Project-URL: Homepage, https://interlatch.com
|
|
6
6
|
Project-URL: Documentation, https://interlatch.com/docs/
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
- **Every hub has the same page.** Settings › Hubs lists each hub, Personal's too, and each one opens a page of its own
|
|
2
|
+
with how sending goes, **Projects on the hub** (join a project with a folder here, add or remove a folder, leave or
|
|
3
|
+
rejoin) and what this computer shares with it. Settings › Devices is about this computer and your phone again
|
|
4
|
+
([Several hubs on one computer](docs/profiles.md)).
|
|
@@ -69,7 +69,7 @@ then on:
|
|
|
69
69
|
- **Analysis runs only on the hub.** If the computer already analyzed sessions with its own Interlatch, it hands
|
|
70
70
|
those analyses over when it joins, so the hub does not pay to analyze them again.
|
|
71
71
|
- **That computer's own dashboard and MCP tools stop updating.** They keep what they had; open the hub's dashboard
|
|
72
|
-
instead (**Settings ›
|
|
72
|
+
instead (**Settings › Hubs** has a link).
|
|
73
73
|
|
|
74
74
|
### Same project, different folders
|
|
75
75
|
|
|
@@ -93,7 +93,7 @@ matching project of its own:
|
|
|
93
93
|
already on the hub: they move with their knowledge, and both projects' knowledge bases are rebuilt. The more
|
|
94
94
|
specific match wins, so a repository inside the folder whose git remote the hub knows still follows its remote. A
|
|
95
95
|
folder inside a repository the hub files under another project is refused, because a repository belongs to one
|
|
96
|
-
project. `interlatch hub folders` shows what goes where. **Settings ›
|
|
96
|
+
project. `interlatch hub folders` shows what goes where. **Settings › Hubs › (the hub) › Projects on the hub** does the same
|
|
97
97
|
from the dashboard: **Join a project** picks one of the hub's projects and a folder here. To take back a folder
|
|
98
98
|
added by mistake, see [Leaving](#leaving). The hub's **Team › Computers** lists the folders each computer added.
|
|
99
99
|
On this computer's **Projects** page and sidebar, the hub's projects that folders here go to come first, under
|
|
@@ -126,7 +126,7 @@ projects there from its next push, as if you had added each of their folders to
|
|
|
126
126
|
above. A project recorded on another computer (such as `server:/root/app`) can't go from here.
|
|
127
127
|
|
|
128
128
|
The project must already be on the hub (a member's computer can't make one), and the choice is made on this computer
|
|
129
|
-
itself, not from another device. **Settings ›
|
|
129
|
+
itself, not from another device. **Settings › Hubs › (the hub) › Projects on the hub** shows the group under that project, and
|
|
130
130
|
the Projects page and sidebar list the group's projects under that project as well as in the group.
|
|
131
131
|
|
|
132
132
|
### What is sent
|
|
@@ -153,7 +153,7 @@ A computer can keep its transcripts and still add to the hub's knowledge. Join w
|
|
|
153
153
|
interlatch hub join https://pc.tail1234.ts.net --token … --share knowledge
|
|
154
154
|
```
|
|
155
155
|
|
|
156
|
-
(or, on a computer that already joined, `interlatch config set hub.share knowledge`, or **Settings ›
|
|
156
|
+
(or, on a computer that already joined, `interlatch config set hub.share knowledge`, or **Settings › Hubs › (the hub) › What this
|
|
157
157
|
computer sends** in its dashboard). That computer then works like a
|
|
158
158
|
standalone Interlatch: it records its own sessions, analyzes them itself (with its own Claude Code or Codex login,
|
|
159
159
|
Bob API key or model provider), and keeps its dashboard and MCP tools up to date. After each analysis it sends the hub only:
|
|
@@ -169,7 +169,7 @@ It does that only for sessions the hub files under one of its projects: those in
|
|
|
169
169
|
computer, and its push counts them as "kept here". A hub that has never run a session in a repository itself doesn't
|
|
170
170
|
know its remote, as with a hub in Docker or on a server, so add your folder for each project there. To share
|
|
171
171
|
sessions from every folder, join with `--all-folders`, run `interlatch config set hub.all_folders true`, or choose
|
|
172
|
-
**Every folder** under **Settings ›
|
|
172
|
+
**Every folder** under **Settings › Hubs › (the hub) › What this computer sends**.
|
|
173
173
|
|
|
174
174
|
Prompts, shell commands, file paths, transcripts and lessons about you (global ones and preferences) never leave
|
|
175
175
|
the computer. Sessions from GitHub Copilot, IBM Bob, Google Antigravity and OpenCode are shared too; imported chats are not.
|
|
@@ -238,13 +238,13 @@ unless the connection works, the password is never shown again, and only an admi
|
|
|
238
238
|
- **Teammates' lessons come back.** Each time it shares, a computer that shares knowledge gets its teammates' lessons
|
|
239
239
|
for the repositories it has clones of, the projects it shared sessions in, and those it added folders to. It shares
|
|
240
240
|
after each analysis (when a session ends, and every 15 minutes with the background agent from `interlatch install`),
|
|
241
|
-
and at once with `interlatch push` or **Share now** in **Settings ›
|
|
241
|
+
and at once with `interlatch push` or **Share now** in **Settings › Hubs**. They are
|
|
242
242
|
kept read-only in its own database, under its own folder for that repository, where its MCP tools answer with them
|
|
243
243
|
(marked as teammates') and the start-of-session notes list them under **From teammates' sessions**. Its dashboard
|
|
244
244
|
shows them on project pages and in **All knowledge**, marked **from** the computers whose sessions stated them;
|
|
245
|
-
the source **From teammates** there lists only them, and **Read them** in **Settings ›
|
|
245
|
+
the source **From teammates** there lists only them, and **Read them** in **Settings › Hubs** opens that list.
|
|
246
246
|
Lessons it stated itself are not sent back. One it dismisses stays dismissed; one the team no longer has disappears.
|
|
247
|
-
`interlatch hub status` and its **Settings ›
|
|
247
|
+
`interlatch hub status` and its **Settings › Hubs** show how many it holds; **Share now** there
|
|
248
248
|
pushes at once.
|
|
249
249
|
- **Only the hub connects to the database.** Computers never get its address or password, so it can sit on a
|
|
250
250
|
network only the hub reaches. Its tables live in the schema `team`, with an audit log of every push and pull
|
|
@@ -269,7 +269,7 @@ Devices › Projects on the hub**, each project has these buttons:
|
|
|
269
269
|
command line: `interlatch hub remove-folder <folder>`. A computer that sends transcripts keeps them on the hub: the
|
|
270
270
|
hub files them by their git remote or their own folder again.
|
|
271
271
|
|
|
272
|
-
`interlatch hub leave`, or **Leave the hub…** in **Settings ›
|
|
272
|
+
`interlatch hub leave`, or **Leave the hub…** in **Settings › Hubs**, makes the computer record and analyze its own
|
|
273
273
|
sessions again; the hub keeps what it was sent. It also removes the teammates' lessons that came from the hub, and
|
|
274
274
|
puts aside what the computer had for that hub (its folders, the projects it left, and its groups shared there) in
|
|
275
275
|
`~/.interlatch/hub-left/`, so a different hub joined later never gets any of it. Whether it shares knowledge only
|
|
@@ -361,7 +361,7 @@ or the id the refused join printed. That code joins that computer only.
|
|
|
361
361
|
|
|
362
362
|
### Opening the hub's dashboard
|
|
363
363
|
|
|
364
|
-
- **From your own Interlatch.** On a computer that joined, **Settings ›
|
|
364
|
+
- **From your own Interlatch.** On a computer that joined, **Settings › Hubs › (the hub) › Open the hub's dashboard** asks the
|
|
365
365
|
hub for a sign-in link, valid for 5 minutes, and opens it in your browser. There is no password.
|
|
366
366
|
- **With the invite link.** Opening `…/signin?code=…` shows who the code signs in as; **Sign in** signs that browser
|
|
367
367
|
in. You can also paste the code on the hub's sign-in screen. Use this for a phone, or for someone with no computer
|
|
@@ -199,7 +199,7 @@ docker compose exec hub interlatch hub invite "Yuma" --email yuma@example.com --
|
|
|
199
199
|
|
|
200
200
|
Send them the `interlatch hub join …` line, not the link, with [Joining your team's hub](join-a-hub.md), which
|
|
201
201
|
walks them through the rest. The code works once, so don't send both. Once their computer has joined, they open the
|
|
202
|
-
dashboard from their own Interlatch: **Settings ›
|
|
202
|
+
dashboard from their own Interlatch: **Settings › Hubs › (the hub) › Open the hub's dashboard**, or `interlatch hub signin`. For
|
|
203
203
|
a phone, or someone who only views the dashboard, make a new code with
|
|
204
204
|
`docker compose exec hub interlatch hub invite yuma@example.com` (or **New invite** on their row in **Team › People**)
|
|
205
205
|
and send its **link**.
|
|
@@ -68,7 +68,7 @@ interlatch hub join https://pc.tail1234.ts.net --token …
|
|
|
68
68
|
- **分析はハブだけで行います。** そのコンピューターが自分の Interlatch ですでに分析していたセッションは、参加するときにその結果を
|
|
69
69
|
ハブに引き渡すので、ハブがもう一度費用をかけて分析することはありません。
|
|
70
70
|
- **そのコンピューター自身のダッシュボードと MCP ツールは更新されなくなります。** それまでの内容は残ります。代わりにハブの
|
|
71
|
-
ダッシュボードを開いてください(**Settings ›
|
|
71
|
+
ダッシュボードを開いてください(**Settings › Hubs** にリンクがあります)。
|
|
72
72
|
|
|
73
73
|
### 同じプロジェクト、別のフォルダー
|
|
74
74
|
|
|
@@ -90,7 +90,7 @@ interlatch hub join https://pc.tail1234.ts.net --token …
|
|
|
90
90
|
両方のプロジェクトのナレッジベースが作り直されます。より具体的な指定が優先されるので、フォルダーの中にあってもハブが
|
|
91
91
|
git リモートを知っているリポジトリはそのリモートに従います。ハブが別のプロジェクトに入れているリポジトリの中のフォルダーは追加できません
|
|
92
92
|
(1 つのリポジトリは 1 つのプロジェクトに属します)。`interlatch hub folders` でどこに入るかを確認できます。
|
|
93
|
-
ダッシュボードの **Settings ›
|
|
93
|
+
ダッシュボードの **Settings › Hubs › (the hub) › Projects on the hub** でも同じことができ、**Join a project** でハブの
|
|
94
94
|
プロジェクトとこのコンピューターのフォルダーを選びます。間違えて追加したフォルダーを外すには[やめるとき](#やめるとき)を
|
|
95
95
|
見てください。ハブの **Team › Computers** に、各コンピューターが追加したフォルダーが表示されます。
|
|
96
96
|
このコンピューターの **Projects** ページとサイドバーでは、ここのフォルダーの送り先になっているハブのプロジェクトが
|
|
@@ -123,7 +123,7 @@ interlatch hub join https://pc.tail1234.ts.net --token …
|
|
|
123
123
|
別のコンピューターで記録されたプロジェクト(`server:/root/app` など)は、ここからは送れません。
|
|
124
124
|
|
|
125
125
|
プロジェクトはハブにすでにある必要があり(メンバーのコンピューターでは作れません)、選ぶのはこのコンピューター自身で、ほかの
|
|
126
|
-
デバイスからはできません。**Settings ›
|
|
126
|
+
デバイスからはできません。**Settings › Hubs › (the hub) › Projects on the hub** ではそのプロジェクトの下にグループが表示され、グループの
|
|
127
127
|
プロジェクトは Projects ページとサイドバーで、グループの中に加えてそのプロジェクトの下にも並びます。
|
|
128
128
|
|
|
129
129
|
### 送られるもの
|
|
@@ -147,7 +147,7 @@ interlatch hub join https://pc.tail1234.ts.net --token …
|
|
|
147
147
|
interlatch hub join https://pc.tail1234.ts.net --token … --share knowledge
|
|
148
148
|
```
|
|
149
149
|
|
|
150
|
-
(参加済みのコンピューターでは `interlatch config set hub.share knowledge`、またはそのダッシュボードの **Settings ›
|
|
150
|
+
(参加済みのコンピューターでは `interlatch config set hub.share knowledge`、またはそのダッシュボードの **Settings › Hubs › (the hub) ›
|
|
151
151
|
What this computer sends**)。そのコンピューターは単独の Interlatch と同じように
|
|
152
152
|
動きます。自分のセッションを記録し、自分で分析し(自分の Claude Code か Codex のログイン、Bob API キー、または
|
|
153
153
|
モデルプロバイダーで)、ダッシュボードと MCP ツールも更新され続けます。分析のたびにハブへ送るのは次のものだけです。
|
|
@@ -162,7 +162,7 @@ What this computer sends**)。そのコンピューターは単独の Interlat
|
|
|
162
162
|
それ以外のフォルダーのセッションはコンピューターに残り、送信の結果には「kept here」として数えられます。Docker やサーバー上の
|
|
163
163
|
ハブのように、ハブ自身がそのリポジトリでセッションを実行したことがなければ、ハブはその git リモートを知りません。その場合は
|
|
164
164
|
プロジェクトごとに自分のフォルダーを追加してください。すべてのフォルダーのセッションを共有するには、`--all-folders` を付けて
|
|
165
|
-
参加するか、`interlatch config set hub.all_folders true` を実行するか、**Settings ›
|
|
165
|
+
参加するか、`interlatch config set hub.all_folders true` を実行するか、**Settings › Hubs › (the hub) › What this computer sends** で
|
|
166
166
|
**すべてのフォルダー** を選びます。
|
|
167
167
|
|
|
168
168
|
プロンプト、シェルのコマンド、ファイルのパス、トランスクリプト、あなた自身についてのナレッジ(全体のものと好み)は
|
|
@@ -219,12 +219,12 @@ interlatch hub store # 接続し、テーブルを用
|
|
|
219
219
|
- **チームメイトのナレッジが戻ってきます。** ナレッジを共有しているコンピューターは、共有するたびに、クローンを持っている
|
|
220
220
|
リポジトリ、セッションを共有したプロジェクト、フォルダーを追加したプロジェクトについて、チームメイトのナレッジを受け取り
|
|
221
221
|
ます。共有するのは分析のたび(セッションが終わったとき、`interlatch install` のバックグラウンドエージェントがあれば
|
|
222
|
-
15 分ごと)と、`interlatch push` または **Settings ›
|
|
222
|
+
15 分ごと)と、`interlatch push` または **Settings › Hubs** の **Share now** を使ったときです。自分のデータベースに読み取り専用で、そのリポジトリの自分のフォルダーの下に保存されます。MCP ツールはそれも
|
|
223
223
|
(チームメイトのものと示して)答えに使い、セッション開始時のメモは **From teammates' sessions** の下に並べます。
|
|
224
224
|
ダッシュボードでも、プロジェクトのページと **All knowledge** に、それを述べたセッションのコンピューター名を **from** で
|
|
225
|
-
示して表示します。そこで取得元に **From teammates** を選ぶとそれだけが並び、**Settings ›
|
|
225
|
+
示して表示します。そこで取得元に **From teammates** を選ぶとそれだけが並び、**Settings › Hubs** の **Read them** で
|
|
226
226
|
その一覧が開きます。自分が述べたナレッジは返ってきません。却下したものは却下されたまま残り、チームから消えたものは消えます。持っている数は
|
|
227
|
-
`interlatch hub status` とそのコンピューターの **Settings ›
|
|
227
|
+
`interlatch hub status` とそのコンピューターの **Settings › Hubs** で分かり、そこの **Share now** ですぐに
|
|
228
228
|
プッシュできます。
|
|
229
229
|
- **データベースにつなぐのはハブだけです。** 各コンピューターはそのアドレスもパスワードも知らないので、ハブだけが届く
|
|
230
230
|
ネットワークに置けます。テーブルはスキーマ `team` にあり、プッシュとプルごとの監査ログ(件数のみ)も残ります。更新の
|
|
@@ -236,7 +236,7 @@ interlatch hub store # 接続し、テーブルを用
|
|
|
236
236
|
|
|
237
237
|
### やめるとき
|
|
238
238
|
|
|
239
|
-
ナレッジを共有するコンピューターは、ハブのプロジェクトのうち一つから抜けて、ほかには残れます。**Settings ›
|
|
239
|
+
ナレッジを共有するコンピューターは、ハブのプロジェクトのうち一つから抜けて、ほかには残れます。**Settings › Hubs › (the hub) ›
|
|
240
240
|
Projects on the hub** で、プロジェクトごとに次のボタンがあります。
|
|
241
241
|
|
|
242
242
|
- **Leave**:このコンピューターはそこへのセッションの共有と、そのプロジェクトのチームメイトのナレッジの受け取りを
|
|
@@ -249,7 +249,7 @@ Projects on the hub** で、プロジェクトごとに次のボタンがあり
|
|
|
249
249
|
`interlatch hub remove-folder <folder>` です。トランスクリプトを送るコンピューターでは、ハブにトランスクリプトが残り、
|
|
250
250
|
ハブは git リモートか元のフォルダーで振り分け直します。
|
|
251
251
|
|
|
252
|
-
`interlatch hub leave`、または **Settings ›
|
|
252
|
+
`interlatch hub leave`、または **Settings › Hubs** の **Leave the hub…** で、そのコンピューターは再び自分でセッションを
|
|
253
253
|
記録・分析します。ハブは受け取ったものを残します。そのハブから来たチームメイトのナレッジも削除し、そのハブのための設定
|
|
254
254
|
(フォルダー、抜けたプロジェクト、そこに共有したグループ)は `~/.interlatch/hub-left/` に保存するので、
|
|
255
255
|
あとで参加するほかのハブには渡りません。ナレッジだけを共有するかどうか(`[hub] share`)はそのままです。再び参加するには新しい招待が必要です。同じハブにもう一度参加すると、それらを
|
|
@@ -339,7 +339,7 @@ interlatch hub join https://interlatch.example.internal --code K7PQ-M2XD-9HNA --
|
|
|
339
339
|
|
|
340
340
|
### ハブのダッシュボードを開く
|
|
341
341
|
|
|
342
|
-
- **自分の Interlatch から。** 参加したコンピューターで **Settings ›
|
|
342
|
+
- **自分の Interlatch から。** 参加したコンピューターで **Settings › Hubs › (the hub) › Open the hub's dashboard** を押すと、ハブから
|
|
343
343
|
5 分間有効なサインインリンクを受け取り、ブラウザーで開きます。パスワードはありません。
|
|
344
344
|
- **招待リンクで。** `…/signin?code=…` を開くと、そのコードでだれとしてサインインするかが表示され、**サインイン** を押すと
|
|
345
345
|
そのブラウザーがサインインします。ハブのサインイン画面にコードを貼り付けても同じです。スマートフォンや、ハブに参加した
|
|
@@ -198,7 +198,7 @@ docker compose exec hub interlatch hub invite "Yuma" --email yuma@example.com --
|
|
|
198
198
|
|
|
199
199
|
リンクではなく `interlatch hub join …` の行を、[チームのハブに参加する](join-a-hub.md)と一緒に送ってください。
|
|
200
200
|
残りの手順はそのページが案内します。コードは一度しか使えないので、両方は送らないでください。コンピューターが参加したあとは、
|
|
201
|
-
本人の Interlatch からダッシュボードを開けます:**Settings ›
|
|
201
|
+
本人の Interlatch からダッシュボードを開けます:**Settings › Hubs › (the hub) › Open the hub's dashboard**、または
|
|
202
202
|
`interlatch hub signin`。スマートフォン用や、ダッシュボードを見るだけの人には、
|
|
203
203
|
`docker compose exec hub interlatch hub invite yuma@example.com`(または **Team › People** のその人の行の **New invite**)で
|
|
204
204
|
新しいコードを作り、その**リンク**を送ります。
|
|
@@ -69,7 +69,7 @@ interlatch hub add-folder ~/code/website --project Website
|
|
|
69
69
|
これで、そこで分析済みのものが送られます。ハブがすでに知っている git リポジトリのクローンは、この手順がなくても
|
|
70
70
|
そのプロジェクトに入りますが、実行しても問題ありません。
|
|
71
71
|
|
|
72
|
-
ダッシュボードでも同じことができます:**Settings ›
|
|
72
|
+
ダッシュボードでも同じことができます:**Settings › Hubs › (the hub) › Projects on the hub › Join a project** で、
|
|
73
73
|
プロジェクトとあなたのフォルダーを選びます。
|
|
74
74
|
|
|
75
75
|
ハブにそのプロジェクトがないと言われたり、**Join a project** が「一致するものはありません。」となったりしたら、
|
|
@@ -83,21 +83,21 @@ interlatch hub status
|
|
|
83
83
|
```
|
|
84
84
|
|
|
85
85
|
ハブのアドレス、最後に送った時刻、受け取ったチームメイトのナレッジの数が表示されます。ダッシュボードの
|
|
86
|
-
**Settings ›
|
|
86
|
+
**Settings › Hubs** にも同じものが表示されます。そこの **Open the hub's dashboard** で、あなたのプロジェクトが
|
|
87
87
|
見えるハブのダッシュボードにサインインできます。
|
|
88
88
|
|
|
89
89
|
## その後
|
|
90
90
|
|
|
91
91
|
- **分析のたびに、** あなたのコンピューターはプロジェクトの新しい要約とナレッジを送ります。今すぐ送るには
|
|
92
|
-
`interlatch push`、または **Settings ›
|
|
92
|
+
`interlatch push`、または **Settings › Hubs** の **Share now** を使います。
|
|
93
93
|
- **送るたびに、** チームメイトがそのプロジェクトで学んだことが返ってきます。エージェントは Interlatch の MCP
|
|
94
94
|
ツールを通じて、チームメイトのものと分かる形でそのナレッジを使えます。セッション開始時のメモを有効にしている場合
|
|
95
95
|
(`interlatch install --inject-context`)、新しいセッションの "From teammates' sessions" にも並びます。
|
|
96
96
|
- **あなたのダッシュボード**には、これまでどおりあなた自身のセッションが表示されます。チームメイトのナレッジは、
|
|
97
|
-
プロジェクトのページと **All knowledge** に、どのコンピューターから来たかを示して並びます。**Settings ›
|
|
97
|
+
プロジェクトのページと **All knowledge** に、どのコンピューターから来たかを示して並びます。**Settings › Hubs** の
|
|
98
98
|
**Read them** でそれだけの一覧が開きます。
|
|
99
99
|
|
|
100
|
-
一つのプロジェクトへの共有をやめるには、**Settings ›
|
|
100
|
+
一つのプロジェクトへの共有をやめるには、**Settings › Hubs** でその横の **Leave** を選びます(または
|
|
101
101
|
`interlatch hub leave --project <name>`)。そこで共有したものはハブに残ります。間違ったフォルダーを追加したときは、
|
|
102
102
|
その横の **Remove** でフォルダーを外すと、あなたのコンピューターがそこから共有したものをハブが削除します。送るのを
|
|
103
103
|
すべてやめるには **Leave the hub…** を選びます(または `interlatch hub leave`)。すでに送ったものはハブに残ります。
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
グループのフォルダーですでに記録されたセッションは Acme に移り、それ以降は Acme のハブに送られます。Personal のハブがすでに持っているものは、先にそのハブが取り下げます([移すとハブから取り下げる](#moving-takes-sessions-back))。`--dry-run` を付けると、何も変えずに、移るものと、そのうちハブが持っている数を表示します。
|
|
31
31
|
|
|
32
|
-
**ダッシュボードでは:** **設定 ›
|
|
32
|
+
**ダッシュボードでは:** **設定 › ハブ**に Personal のものを含むすべてのハブが並び、ハブの追加(名前、アドレス、招待コード)もここで行います。ハブごとに同じ構成のページがあります。送信がうまくいっているか、**今すぐ共有**、ハブのダッシュボード、**ハブのプロジェクト**(ここのフォルダーでハブのプロジェクトに参加する、抜ける)、そのハブと何を共有するか、です。グループのページの**送り先**で、そのグループのセッションを送るハブを選びます。**プロジェクト**のサイドバーでは、ハブにつないだグループにそのハブの名前が表示され、選択を待つフォルダーが先頭に並びます。
|
|
33
33
|
|
|
34
34
|
ほかのコンピューターと同じく、ハブに送られるのは、そのハブのプロジェクトに追加したフォルダーのものだけです(`interlatch --hub Acme hub add-folder ~/work/acme/app --project App`)。`--all-folders` を付けて参加した場合は別です。
|
|
35
35
|
|
|
@@ -87,7 +87,7 @@ Codex にはセッション終了フックがないため、Codex のセッシ
|
|
|
87
87
|
ID でそのコンピューター専用の招待を作り(`interlatch hub invite <名前> --computer <ID>`)、そのコードで参加してください
|
|
88
88
|
([コンピューターを参加させる](devices.md#コンピューターを参加させる))。
|
|
89
89
|
|
|
90
|
-
**ステータスバーに「ハブに送信できていません」と表示される。** クリックすると **設定 ›
|
|
90
|
+
**ステータスバーに「ハブに送信できていません」と表示される。** クリックすると **設定 › ハブ** に理由が出ます。
|
|
91
91
|
「ハブがこのコンピューターを受け付けていません」と出る場合は、ハブがこのコンピューターのトークンを受け付けなくなったため、ここで学んだことが
|
|
92
92
|
ハブに届いていません。多くの場合、管理者が **チーム › 利用者** でそのコンピューターを取り消したか置き換えています。管理者にこのコンピューター
|
|
93
93
|
用の新しい招待を頼み、そのコードをハブのカードの **参加し直す** に貼り付けてください(`interlatch hub join <ハブのアドレス> --code <コード>`
|
|
@@ -67,7 +67,7 @@ Use your folder for the project and the project's name from step 2. This sends w
|
|
|
67
67
|
analyzed there. A clone of a git repository the hub already knows is filed under its project without this step,
|
|
68
68
|
but running it does no harm.
|
|
69
69
|
|
|
70
|
-
Your dashboard can do the same: **Settings ›
|
|
70
|
+
Your dashboard can do the same: **Settings › Hubs › (the hub) › Projects on the hub › Join a project**, then pick the project
|
|
71
71
|
and your folder.
|
|
72
72
|
|
|
73
73
|
If the hub says it has no such project, or **Join a project** answers "Nothing matches.", you don't see that
|
|
@@ -81,21 +81,21 @@ interlatch hub status
|
|
|
81
81
|
```
|
|
82
82
|
|
|
83
83
|
It shows the hub's address, when your computer last sent, and how many of your teammates' lessons it holds. Your
|
|
84
|
-
dashboard's **Settings ›
|
|
84
|
+
dashboard's **Settings › Hubs** shows the same. **Open the hub's dashboard** there signs you in to the hub's
|
|
85
85
|
dashboard, where you see your projects.
|
|
86
86
|
|
|
87
87
|
## From then on
|
|
88
88
|
|
|
89
89
|
- **After each analysis,** your computer sends the project's new summaries and lessons. `interlatch push`, or
|
|
90
|
-
**Share now** in **Settings ›
|
|
90
|
+
**Share now** in **Settings › Hubs**, sends right away.
|
|
91
91
|
- **Each time it sends,** it gets back what your teammates learned in the project. Your agents find those lessons
|
|
92
92
|
through Interlatch's MCP tools, marked as teammates'. With start-of-session notes on (`interlatch install
|
|
93
93
|
--inject-context`), new sessions also list them under "From teammates' sessions".
|
|
94
94
|
- **Your own dashboard** keeps showing your own sessions, as before. Your teammates' lessons appear on its project
|
|
95
|
-
pages and in **All knowledge**, marked with the computers they came from; **Read them** in **Settings ›
|
|
95
|
+
pages and in **All knowledge**, marked with the computers they came from; **Read them** in **Settings › Hubs**
|
|
96
96
|
lists only those.
|
|
97
97
|
|
|
98
|
-
To stop sharing to one project, choose **Leave** next to it in **Settings ›
|
|
98
|
+
To stop sharing to one project, choose **Leave** next to it in **Settings › Hubs** (or run `interlatch hub leave
|
|
99
99
|
--project <name>`). What you shared there stays on the hub. Added the wrong folder? **Remove** next to it takes the
|
|
100
100
|
folder back, and the hub deletes what your computer shared from it. To stop sending altogether, choose **Leave the
|
|
101
101
|
hub…** (or run `interlatch hub leave`). What you already sent stays on the hub. Your teammates' lessons from it are
|
|
@@ -37,10 +37,11 @@ The sessions already recorded in the group's folders move to Acme, and go to Acm
|
|
|
37
37
|
Personal's hub already has, it takes back first (see [Moving takes sessions back](#moving-takes-sessions-back)).
|
|
38
38
|
`--dry-run` shows what would move, and how many of them a hub has, without changing anything.
|
|
39
39
|
|
|
40
|
-
**On the dashboard:** **Settings › Hubs**
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
40
|
+
**On the dashboard:** **Settings › Hubs** lists every hub, Personal's too, and adds one (its name, address and
|
|
41
|
+
invite code). Each hub has a page of its own, the same for every hub: whether sending to it works, **Share now**, its
|
|
42
|
+
dashboard, **Projects on the hub** (join one of its projects with a folder here, or leave one) and what this computer
|
|
43
|
+
shares with it. A group's page has **Goes to**, where you pick the hub its sessions go to. In the **Projects** sidebar,
|
|
44
|
+
a group connected to a hub shows that hub's name, and folders waiting for you are listed first.
|
|
44
45
|
|
|
45
46
|
As on any computer, a hub gets only the folders added to one of its projects
|
|
46
47
|
(`interlatch --hub Acme hub add-folder ~/work/acme/app --project App`), unless you joined with `--all-folders`.
|
|
@@ -92,7 +92,7 @@ computer sent to the hub before, and the hub has no key on record from it, or an
|
|
|
92
92
|
for that computer, with the id the message shows: `interlatch hub invite <name> --computer <id>`; join with that code
|
|
93
93
|
([Joining a computer](devices.md#joining-a-computer)).
|
|
94
94
|
|
|
95
|
-
**The status bar says "Not sending to the hub".** Click it: **Settings ›
|
|
95
|
+
**The status bar says "Not sending to the hub".** Click it: **Settings › Hubs** says why. "The hub no longer
|
|
96
96
|
accepts this computer" means the hub turned this computer's token away, so nothing it learns reaches the hub. Usually
|
|
97
97
|
an admin revoked or replaced that computer in **Team › People**. Ask an admin for a new invite for this computer, then
|
|
98
98
|
paste the code into **Join again** in the Hub card, or run `interlatch hub join <hub address> --code <code>`. The
|
|
@@ -483,4 +483,6 @@ JA: dict[str, str] = {
|
|
|
483
483
|
"This computer doesn't send to a hub.": "このコンピューターはハブに送っていません。",
|
|
484
484
|
"Chronicle is now Interlatch. Updating moves this install from the agents-chronicle package to interlatch; the chronicle command keeps working.": "Chronicle は Interlatch になりました。更新すると、このインストールは agents-chronicle パッケージから interlatch に移ります。chronicle コマンドはそのまま使えます。",
|
|
485
485
|
"{hub} hasn't joined a hub yet.": "{hub} はまだハブに参加していません。",
|
|
486
|
+
"Change this on the computer itself, not from another device.": "別のデバイスからではなく、このコンピューターで変更してください。",
|
|
487
|
+
"With several hubs, every hub but Personal's gets summaries and lessons only.": "複数のハブがあるときは、Personal 以外のハブには要約とナレッジだけを送ります。",
|
|
486
488
|
}
|
|
@@ -220,6 +220,8 @@ def action_share_mode(ctx: Context, share: str) -> dict:
|
|
|
220
220
|
return {"error": tr("this computer has not joined a hub")}
|
|
221
221
|
if share not in SHARE_MODES:
|
|
222
222
|
return {"error": tr("unknown share mode {share!r}", share=share)}
|
|
223
|
+
if share != "knowledge" and ctx.cfg.owner != "personal": # its transcripts would carry every hub's sessions
|
|
224
|
+
return {"error": tr("With several hubs, every hub but Personal's gets summaries and lessons only.")}
|
|
223
225
|
set_config_value(ctx.cfg, "hub", "share", json.dumps(share))
|
|
224
226
|
ctx.cfg = load_config(ctx.cfg.home)
|
|
225
227
|
return {"ok": True, "share": ctx.cfg.hub_share}
|
|
@@ -32,6 +32,46 @@ def hubs(ctx: Context) -> dict:
|
|
|
32
32
|
return {"hubs": hubs, "groups": gs, "waiting": _waiting(waiting(ctx.conn), reg)}
|
|
33
33
|
|
|
34
34
|
|
|
35
|
+
class HubView:
|
|
36
|
+
"""The dashboard as one of this computer's hubs sees it: that hub's config (Personal's, or another's own folder,
|
|
37
|
+
which reads Personal's archive), the same archive, jobs and state. What a device action writes back to its config
|
|
38
|
+
stays with that hub; only Personal's replaces the dashboard's."""
|
|
39
|
+
|
|
40
|
+
def __init__(self, ctx: Context, cfg):
|
|
41
|
+
self._ctx = ctx
|
|
42
|
+
self._cfg = cfg
|
|
43
|
+
|
|
44
|
+
@property
|
|
45
|
+
def cfg(self):
|
|
46
|
+
return self._cfg
|
|
47
|
+
|
|
48
|
+
@cfg.setter
|
|
49
|
+
def cfg(self, cfg) -> None:
|
|
50
|
+
self._cfg = cfg
|
|
51
|
+
if cfg.owner == "personal":
|
|
52
|
+
self._ctx.cfg = cfg
|
|
53
|
+
|
|
54
|
+
def __getattr__(self, name):
|
|
55
|
+
return getattr(self._ctx, name)
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
def for_hub(ctx: Context, key) -> tuple[object, str | None]:
|
|
59
|
+
"""(the dashboard as hub `key` sees it, None), or (None, why not). No key, or "personal": Personal's, as before."""
|
|
60
|
+
from ....application.profiles import ProfileError, find_profile
|
|
61
|
+
from ....core.config import load_config
|
|
62
|
+
|
|
63
|
+
key = str(key or "").strip()
|
|
64
|
+
if not key or key.casefold() == "personal":
|
|
65
|
+
return ctx, None
|
|
66
|
+
try:
|
|
67
|
+
p = find_profile(ctx.cfg.home, key)
|
|
68
|
+
except ProfileError as exc:
|
|
69
|
+
return None, str(exc)
|
|
70
|
+
if not (p.home / "config.toml").exists():
|
|
71
|
+
return None, tr("{hub} hasn't joined a hub yet.", hub=p.label)
|
|
72
|
+
return HubView(ctx, load_config(p.home, create=False)), None
|
|
73
|
+
|
|
74
|
+
|
|
35
75
|
def _hub_cfg(ctx: Context, hub_id: str, reg):
|
|
36
76
|
"""The config that sends to hub `hub_id`: Personal's, or that hub's own folder's (None: no such hub)."""
|
|
37
77
|
from ....core.config import load_config
|
|
@@ -189,13 +189,26 @@ def _system(h, ctx, m, q):
|
|
|
189
189
|
return h._json(found) if found else h._json({"error": tr("not found")}, 404)
|
|
190
190
|
|
|
191
191
|
|
|
192
|
+
def _as_hub(fn):
|
|
193
|
+
"""A Settings › Hubs action for the hub its body (or query) names, Personal's by default: every hub's page offers
|
|
194
|
+
the same ones (api.hubs.for_hub)."""
|
|
195
|
+
def run(h, ctx, m, body):
|
|
196
|
+
key = (body or {}).get("hub") if isinstance(body, dict) else None
|
|
197
|
+
if key and str(key).strip().casefold() != "personal" and not h._from_here(): # another hub: only from here
|
|
198
|
+
return h._json({"error": tr("Change this on the computer itself, not from another device.")}, 403)
|
|
199
|
+
view, problem = api.hubs.for_hub(ctx, key)
|
|
200
|
+
return h._json({"error": problem}, 400) if problem else fn(h, view, m, body)
|
|
201
|
+
return run
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
@_as_hub
|
|
192
205
|
def _devices(h, ctx, m, q):
|
|
193
206
|
dv = api.devices.devices(ctx)
|
|
194
207
|
if h.viewer is not None and not h._can_admin(): # computers, keys and the team store: admins'
|
|
195
208
|
dv = {**dv, "this": {"name": dv["this"]["name"]}, "machines": [], "store": None,
|
|
196
209
|
"allowed_hosts": [], "allowed_users": [], "path_map": {}, "folders": [], "projects": [],
|
|
197
210
|
"team": None, "last_push": None}
|
|
198
|
-
return h._json({**dv, "here": h._from_here(), **h._me()})
|
|
211
|
+
return h._json({**dv, "here": h._from_here(), **h._me(), "hub_key": None if ctx.cfg.owner == "personal" else (q or {}).get("hub")})
|
|
199
212
|
|
|
200
213
|
|
|
201
214
|
def _unseen_suggestions(h, ctx, m, q):
|
|
@@ -378,12 +391,14 @@ def _hub_signin(h, ctx, m, body):
|
|
|
378
391
|
return h._json({"error": tr(str(exc))}, 400)
|
|
379
392
|
|
|
380
393
|
|
|
394
|
+
@_as_hub
|
|
381
395
|
def _share(h, ctx, m, body):
|
|
382
396
|
if "all_folders" in body:
|
|
383
397
|
return h._json(api.devices.action_share_folders(ctx, body.get("all_folders")))
|
|
384
398
|
return h._json(api.devices.action_share_mode(ctx, str(body.get("share") or "")))
|
|
385
399
|
|
|
386
400
|
|
|
401
|
+
@_as_hub
|
|
387
402
|
def _hub_project(h, ctx, m, body):
|
|
388
403
|
if m.group(1) == "choices":
|
|
389
404
|
return h._json(api.devices.hub_project_choices(ctx))
|
|
@@ -431,8 +446,8 @@ POST: list[Route] = [
|
|
|
431
446
|
Route("/api/devices/hub-signin", HERE, _hub_signin),
|
|
432
447
|
# what leaves this computer, and for which projects: only from here
|
|
433
448
|
Route(r"/api/devices/projects/(choices|add|remove|leave|rejoin)", HERE, _hub_project),
|
|
434
|
-
Route("/api/devices/leave-hub", HERE, lambda h, ctx, m, b: h._json(api.devices.action_leave_hub(ctx))),
|
|
435
|
-
Route("/api/devices/rejoin-hub", HERE, lambda h, ctx, m, b: h._json(*api.devices.action_rejoin_hub(ctx, b))),
|
|
449
|
+
Route("/api/devices/leave-hub", HERE, _as_hub(lambda h, ctx, m, b: h._json(api.devices.action_leave_hub(ctx)))),
|
|
450
|
+
Route("/api/devices/rejoin-hub", HERE, _as_hub(lambda h, ctx, m, b: h._json(*api.devices.action_rejoin_hub(ctx, b)))),
|
|
436
451
|
Route("/api/team/settings", ADMIN,
|
|
437
452
|
lambda h, ctx, m, b: h._json(*api.hub_admin.action_hub_settings(ctx, _body(b), h.viewer))),
|
|
438
453
|
# what leaves this computer (its sessions go to the team store): only from here, or a dedicated hub's admin
|
|
@@ -450,7 +465,7 @@ POST: list[Route] = [
|
|
|
450
465
|
# what this hub takes from the computers that send to it
|
|
451
466
|
Route("/api/team/accept", ADMIN,
|
|
452
467
|
lambda h, ctx, m, b: h._json(*api.devices.action_accept(ctx, str(b.get("accept") or ""), h.viewer))),
|
|
453
|
-
Route("/api/devices/push", ANYONE, lambda h, ctx, m, b: h._json({"started": api.devices.action_push(ctx)})),
|
|
468
|
+
Route("/api/devices/push", ANYONE, _as_hub(lambda h, ctx, m, b: h._json({"started": api.devices.action_push(ctx)}))),
|
|
454
469
|
# a POST: with the daily check off, the dashboard's only call to PyPI
|
|
455
470
|
Route("/api/update/check", ANYONE, lambda h, ctx, m, b: h._json(api.settings.update_info(ctx, remote=True))),
|
|
456
471
|
Route("/api/analysis/backend", ANYONE,
|