interlatch 0.23.0__tar.gz → 0.23.2__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.23.0 → interlatch-0.23.2}/.github/workflows/release.yml +8 -66
- {interlatch-0.23.0 → interlatch-0.23.2}/CHANGELOG.md +41 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/PKG-INFO +3 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/README.ja.md +2 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/README.md +2 -2
- interlatch-0.23.2/changelog.d/agent-icons.md +3 -0
- interlatch-0.23.2/changelog.d/devices-admin-only.md +3 -0
- interlatch-0.23.2/changelog.d/windows-polish.md +5 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/development.md +2 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/devices.md +3 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/install.md +12 -5
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/development.md +2 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/devices.md +2 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/install.md +11 -4
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/moving-from-chronicle.md +3 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/moving-from-chronicle.md +4 -4
- {interlatch-0.23.0 → interlatch-0.23.2}/leaderboard/README.md +9 -5
- interlatch-0.23.2/leaderboard/firebase.json +8 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/cli.py +4 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/config.py +11 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/copilot_parser.py +8 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/hub.py +37 -20
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/install.py +2 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/leaderboard.py +3 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/menubar.py +18 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/migrate.py +2 -1
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/notify.py +57 -1
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/people.py +3 -3
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/server.py +55 -28
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/util.py +73 -0
- interlatch-0.23.2/src/chronicle/web/AGENT-ICONS.txt +29 -0
- interlatch-0.23.2/src/chronicle/web/agent-antigravity.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-bob.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-chatgpt.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-claude-ai.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-claude.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-codex.svg +1 -0
- interlatch-0.23.2/src/chronicle/web/agent-copilot.svg +1 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/app.css +22 -2
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/app.js +48 -6
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/panel.css +5 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/panel.js +7 -2
- interlatch-0.23.2/src/chronicle/windows.py +569 -0
- interlatch-0.23.2/tests/golden.py +33 -0
- interlatch-0.23.2/tests/goldens/cli.json +2786 -0
- interlatch-0.23.2/tests/goldens/diagram.json +3077 -0
- interlatch-0.23.2/tests/goldens/parsers/antigravity.json +564 -0
- interlatch-0.23.2/tests/goldens/parsers/bob.json +604 -0
- interlatch-0.23.2/tests/goldens/parsers/claude_code.json +557 -0
- interlatch-0.23.2/tests/goldens/parsers/codex.json +1400 -0
- interlatch-0.23.2/tests/goldens/parsers/copilot.json +445 -0
- interlatch-0.23.2/tests/goldens/systems.json +1019 -0
- interlatch-0.23.2/tests/test_cli_pins.py +191 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_projects.py +7 -9
- interlatch-0.23.2/tests/test_map_goldens.py +66 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_notify.py +29 -0
- interlatch-0.23.2/tests/test_parser_goldens.py +151 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_people_web.py +5 -0
- interlatch-0.23.2/tests/test_route_matrix.py +508 -0
- interlatch-0.23.2/tests/test_windows.py +465 -0
- interlatch-0.23.0/changelog.d/docs-review.md +0 -4
- interlatch-0.23.0/changelog.d/interlatch-vscode.md +0 -4
- interlatch-0.23.0/changelog.d/leaderboard.md +0 -4
- interlatch-0.23.0/changelog.d/move-keeps-commands.md +0 -4
- interlatch-0.23.0/changelog.d/restart-animation.md +0 -5
- interlatch-0.23.0/changelog.d/vscode-marketplace.md +0 -2
- interlatch-0.23.0/changelog.d/windows.md +0 -3
- interlatch-0.23.0/leaderboard/firebase.json +0 -23
- interlatch-0.23.0/leaderboard/public/signin.html +0 -151
- interlatch-0.23.0/packaging/agents-chronicle-farewell/README.md +0 -24
- interlatch-0.23.0/packaging/agents-chronicle-farewell/pyproject.toml +0 -42
- interlatch-0.23.0/src/chronicle/windows.py +0 -266
- interlatch-0.23.0/tests/test_windows.py +0 -203
- {interlatch-0.23.0 → interlatch-0.23.2}/.github/dependabot.yml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.github/workflows/changelog.yml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.github/workflows/ci.yml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.github/workflows/docs.yml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.gitignore +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.pre-commit-config.yaml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/.python-version +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/CONTRIBUTING.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/LICENSE +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/ROADMAP.ja.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/ROADMAP.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/SECURITY.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/changelog.d/README.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/dev.sh +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/.dockerignore +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/.env.example +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/Caddyfile +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/Dockerfile +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/compose.yaml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docker/wheels/.gitignore +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/README.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/_site/hooks.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/analysis.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/cli.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/configuration.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/dashboard.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/demo/make_demo.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/demo/record_demo.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/design/ja/learning.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/design/learning.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/diagrams/analysis.excalidraw.svg +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/diagrams/architecture.excalidraw.svg +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/docker.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/images/demo.gif +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/images/home.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/images/map.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/images/palette.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/images/session.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/README.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/analysis.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/cli.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/configuration.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/dashboard.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/docker.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/join-a-hub.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/mcp.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/postgres.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/privacy.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/sources.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/suggestions.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/troubleshooting.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/ja/vscode.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/join-a-hub.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/mcp.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/postgres.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/privacy.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/sources.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/suggestions.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/troubleshooting.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/docs/vscode.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/leaderboard/.firebaserc +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/leaderboard/.gitignore +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/leaderboard/firestore.indexes.json +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/leaderboard/firestore.rules +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/mkdocs.yml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/README.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/art.json +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/filing.html +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/loops.json +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/loops.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/members.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/render.html +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/render.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/scenes-more.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/icons3d/scenes.html +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/Chronicle.icns +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/Interlatch.spec +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/build.sh +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/chronicle_app.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/entitlements.plist +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/icon-3d.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/icon-blueprint-prompt.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/icon-blueprint.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/icon.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/macos/make_icon.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/packaging/release.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/pyproject.toml +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/__init__.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/__main__.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/access.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/agents.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/analyze.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/antigravity_parser.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/artifacts.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/bob_parser.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/cases.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/chat_import.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/chatgpt_export.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/claude_export.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/codex_cloud.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/codex_parser.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/connectors.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/container.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/db.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/desktop.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/diagram.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/digest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/export_md.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/friction.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/glossary.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/groups.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/hooks.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/i18n.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/i18n_ja.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/ingest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/instructions.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/ladder.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/learning.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/llm.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/mcp_server.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/mirror.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/news.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/parser.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/pg.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/pricing.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/providers.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/redact.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/reviews.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/screen.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/search.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/session_export.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/statusline.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/suggest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/synthesize.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/systems.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/tailnet.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/team_store.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/update.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/views.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/PLEX-OFL.txt +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-book.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-camera.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-chip.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-clock.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-cloud.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-coins.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-container.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-dashboard.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-dex.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-document.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-flag.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-folder.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-gateway.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-gears.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-glitch.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-globe.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-laptop.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-log.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-lumi.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-magnifier.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-pip.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-plug.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-rack.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/art-tink.webp +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/boot.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/favicon.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/i18n.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/icon-180.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/icon-192.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/icon-512.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/icon.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/index.html +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/ja.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/learning.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/manifest.webmanifest +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/panel.html +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-mono-400.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-mono-500.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-mono-600.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-sans-400.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-sans-500.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-sans-600.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/plex-sans-700.woff2 +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/web/rough.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/src/chronicle/worker.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/antigravity_fixture.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/codex_fixture.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/conftest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/copilot_fixture.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/friction_fixture.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_analysis.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_antigravity.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_artifacts.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_bob_analysis.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_boot_web.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_case_files.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_cases.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_chat_import.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_codex.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_codex_analysis.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_codex_cloud.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_container.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_copilot_bob.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_dedicated_hub.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_dedupe.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_desktop.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_diagram.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_ee_boundary.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_friction.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_glossary.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_group_sharing.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_accept.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_news.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_projects_listed.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_purge.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_hub_sharing_race.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_i18n_web.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_ingest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_instructions.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_integration.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_ladder.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_language.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_leaderboard.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_learning_glance.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_learning_interests.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_learning_web.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_leave_project.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_menubar.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_migrate.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_mirror.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_parser.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_people.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_people_hub.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_project_groups.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_providers.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_queue.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_regressions.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_release.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_screen.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_security.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_setup.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_statusline.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_suggest.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_suggest_cli.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_systems.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_team.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_team_home.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/test_update.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/tests/windows_smoke.py +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/uv.lock +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/.vscodeignore +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/LICENSE +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/README.md +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/extension.js +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/media/icon.png +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/media/interlatch.svg +0 -0
- {interlatch-0.23.0 → interlatch-0.23.2}/vscode-extension/package.json +0 -0
|
@@ -3,18 +3,17 @@ name: Release
|
|
|
3
3
|
# Releasing is one button: Actions → Release → Run workflow on main, and pick patch, minor or major. The version
|
|
4
4
|
# lives in the git tags (hatch-vcs), so nothing is committed first. The run works out the next version from the
|
|
5
5
|
# latest vX.Y.Z tag, runs the tests, creates the tag and the GitHub release (its notes are the changelog.d/ files
|
|
6
|
-
# added since the previous tag), publishes interlatch to PyPI (trusted publishing, no token)
|
|
7
|
-
#
|
|
8
|
-
#
|
|
9
|
-
#
|
|
10
|
-
#
|
|
11
|
-
#
|
|
12
|
-
# file merged after the tag is simply new since it.
|
|
6
|
+
# added since the previous tag), publishes interlatch to PyPI (trusted publishing, no token), publishes the hub's
|
|
7
|
+
# image ghcr.io/chatixia-ai/interlatch-hub (docker/, built from that PyPI release; also as chronicle-hub, its name
|
|
8
|
+
# before the rename), attaches Interlatch-X.Y.Z-arm64.dmg, publishes the VS Code extension when its own version went
|
|
9
|
+
# up (the vscode job says what it needs), and opens a pull request that moves those files' lines into CHANGELOG.md
|
|
10
|
+
# under "## X.Y.Z (date)". The next release doesn't wait for that pull request: a file merged after the tag is
|
|
11
|
+
# simply new since it.
|
|
13
12
|
# "dry run" (the default) runs the tests and keeps the DMG as a workflow artifact, publishing nothing.
|
|
14
13
|
# Publishing a release tagged vX.Y.Z on GitHub by hand runs the same tests, PyPI and DMG jobs.
|
|
15
14
|
#
|
|
16
|
-
# PyPI takes
|
|
17
|
-
# environment pypi,
|
|
15
|
+
# PyPI takes interlatch only from the trusted publisher it lists for it: this repository, release.yml and the
|
|
16
|
+
# environment pypi. (agents-chronicle, the name before the rename, is no longer on PyPI.)
|
|
18
17
|
#
|
|
19
18
|
# The DMG is signed and notarized when these repository secrets exist, otherwise it is ad-hoc signed:
|
|
20
19
|
# MACOS_CERT_P12 base64 of the "Developer ID Application" certificate + key (.p12)
|
|
@@ -89,8 +88,6 @@ jobs:
|
|
|
89
88
|
with:
|
|
90
89
|
enable-cache: false # a release never restores a cache another run could have written
|
|
91
90
|
- run: uv run --locked pytest -q
|
|
92
|
-
- name: agents-chronicle builds (the farewell job publishes it)
|
|
93
|
-
run: uv build --wheel packaging/agents-chronicle-farewell -o "$RUNNER_TEMP/farewell"
|
|
94
91
|
|
|
95
92
|
release:
|
|
96
93
|
needs: [plan, test]
|
|
@@ -144,61 +141,6 @@ jobs:
|
|
|
144
141
|
fi
|
|
145
142
|
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
146
143
|
|
|
147
|
-
farewell:
|
|
148
|
-
# agents-chronicle, Interlatch's name before the rename, at the same version: it installs interlatch, so a copy
|
|
149
|
-
# installed under that name keeps updating, and one from before the rename (which asks PyPI about agents-chronicle)
|
|
150
|
-
# sees the release. Published after interlatch, so it never names a version PyPI doesn't have. It carries the same
|
|
151
|
-
# chronicle/ files as interlatch, which pip needs (packaging/agents-chronicle-farewell/pyproject.toml): a wheel only.
|
|
152
|
-
needs: [plan, pypi]
|
|
153
|
-
if: ${{ !cancelled() && needs.pypi.result == 'success' }}
|
|
154
|
-
runs-on: ubuntu-latest
|
|
155
|
-
environment: pypi
|
|
156
|
-
permissions:
|
|
157
|
-
contents: read # checkout
|
|
158
|
-
id-token: write # OIDC for PyPI trusted publishing
|
|
159
|
-
env:
|
|
160
|
-
VERSION: ${{ needs.plan.outputs.version }}
|
|
161
|
-
steps:
|
|
162
|
-
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
163
|
-
with:
|
|
164
|
-
ref: v${{ needs.plan.outputs.version }}
|
|
165
|
-
persist-credentials: false
|
|
166
|
-
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
167
|
-
with:
|
|
168
|
-
enable-cache: false # a release never restores a cache another run could have written
|
|
169
|
-
- name: Wait until PyPI serves interlatch
|
|
170
|
-
run: |
|
|
171
|
-
for _ in $(seq 1 30); do
|
|
172
|
-
if python3 -m pip download --quiet --no-deps --no-cache-dir --dest "$RUNNER_TEMP/probe" \
|
|
173
|
-
"interlatch==$VERSION"; then
|
|
174
|
-
exit 0
|
|
175
|
-
fi
|
|
176
|
-
sleep 10
|
|
177
|
-
done
|
|
178
|
-
echo "::error::PyPI does not serve interlatch $VERSION after 5 minutes"
|
|
179
|
-
exit 1
|
|
180
|
-
- name: Build agents-chronicle at the release's version, pinned to the same interlatch
|
|
181
|
-
run: |
|
|
182
|
-
sed -i "s/0\.0\.0/$VERSION/g" packaging/agents-chronicle-farewell/pyproject.toml
|
|
183
|
-
uv build --wheel packaging/agents-chronicle-farewell -o dist
|
|
184
|
-
ls dist
|
|
185
|
-
if [ ! -f "dist/agents_chronicle-$VERSION-py3-none-any.whl" ]; then
|
|
186
|
-
echo "::error::The build is not version $VERSION"
|
|
187
|
-
exit 1
|
|
188
|
-
fi
|
|
189
|
-
- name: Check it carries the chronicle/ files of the interlatch on PyPI
|
|
190
|
-
run: |
|
|
191
|
-
python3 - "$RUNNER_TEMP/probe/interlatch-$VERSION-py3-none-any.whl" "dist/agents_chronicle-$VERSION-py3-none-any.whl" <<'EOF'
|
|
192
|
-
import sys, zipfile
|
|
193
|
-
def files(wheel): # chronicle/ path -> hash, from the wheel's RECORD
|
|
194
|
-
z = zipfile.ZipFile(wheel)
|
|
195
|
-
record = next(n for n in z.namelist() if n.endswith(".dist-info/RECORD"))
|
|
196
|
-
return {r.split(",")[0]: r.split(",")[1] for r in z.read(record).decode().splitlines() if r.startswith("chronicle/")}
|
|
197
|
-
if not files(sys.argv[1]) or files(sys.argv[1]) != files(sys.argv[2]):
|
|
198
|
-
sys.exit("::error::agents-chronicle's chronicle/ files differ from interlatch's")
|
|
199
|
-
EOF
|
|
200
|
-
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
201
|
-
|
|
202
144
|
image:
|
|
203
145
|
needs: [plan, pypi]
|
|
204
146
|
if: ${{ !cancelled() && needs.pypi.result == 'success' }}
|
|
@@ -3,6 +3,47 @@
|
|
|
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.23.1 (2026-10-13)
|
|
7
|
+
|
|
8
|
+
- **`agents-chronicle` is retired:** Interlatch is published only as `interlatch` now, and `agents-chronicle` is no
|
|
9
|
+
longer on PyPI. An install under the old name gets no more updates: **Update** in the dashboard still moves it to
|
|
10
|
+
`interlatch`, or see [Moving from Chronicle](docs/moving-from-chronicle.md) for the commands.
|
|
11
|
+
|
|
12
|
+
## 0.23.0 (2026-10-13)
|
|
13
|
+
|
|
14
|
+
- **Leaderboard:** sign in with Google and compare your hours of agent time, sessions and tokens over 7, 30 or 90
|
|
15
|
+
days with everyone else who joined, under **Leaderboard** in the dashboard (`interlatch leaderboard` shows where
|
|
16
|
+
you stand). Only the totals from this computer's coding-agent sessions are sent, with your first name (rename it
|
|
17
|
+
any time) and your Google picture. No email, projects, prompts or titles. **Leave** deletes your row.
|
|
18
|
+
|
|
19
|
+
## 0.22.1 (2026-10-11)
|
|
20
|
+
|
|
21
|
+
This release never reached PyPI (its upload failed after the repository's rename); these changes first shipped
|
|
22
|
+
there in 0.23.0.
|
|
23
|
+
|
|
24
|
+
- **Docs:** the quick links atop the docs home (Docs, 日本語, English) open their pages instead of a 404, Install
|
|
25
|
+
lists every way to analyze sessions (Claude Code, Codex, IBM Bob with a Bob API key, or a model provider's API with
|
|
26
|
+
your own key), and links, **What's new** and **Download** under **Status › Updates** among them, point at the
|
|
27
|
+
repository's new name, [Chatixia-AI/interlatch](https://github.com/Chatixia-AI/interlatch).
|
|
28
|
+
- **Moving from Chronicle keeps the commands:** **Update** on an `agents-chronicle` install no longer leaves it
|
|
29
|
+
without the `interlatch` and `chronicle` commands, which kept the dashboard from coming back and stopped the
|
|
30
|
+
background sync, the session hooks and the MCP server. Already hit by it? [Troubleshooting](docs/troubleshooting.md#moving-from-chronicle)
|
|
31
|
+
has the two commands that put it right.
|
|
32
|
+
- **Restarting, animated:** while the dashboard restarts after an update, its dialog turns the arrows inside a ring
|
|
33
|
+
that swells and fades, with a sweep along its foot (with animations off they turn slowly and the rest holds still).
|
|
34
|
+
The last places that still said Chronicle say Interlatch: the diagrams in the docs, the log file's lines, the
|
|
35
|
+
Postgres quick start, and the names the dashboard and menu-bar panel use for their requests and what the browser
|
|
36
|
+
remembers. Settings a browser kept under the old names carry over, and a sign-in to a hub from before stays valid.
|
|
37
|
+
- **Windows:** `uv tool install interlatch` and `interlatch install` now work on Windows 10 and 11. Task Scheduler runs
|
|
38
|
+
the 15-minute sync and keeps the dashboard up, without a window, and the hooks run in Git Bash and in PowerShell
|
|
39
|
+
([Windows](docs/install.md#windows)). A Windows computer can't join a team hub yet.
|
|
40
|
+
- **The VS Code extension is now Interlatch:** a new extension, `Chatixia-AI.interlatch` 0.3.0, with the sections
|
|
41
|
+
**Interlatch: This File** and **Interlatch: Files in Workspace**. Your `chronicle.*` settings still apply until you
|
|
42
|
+
set their `interlatch.*` counterparts. Uninstall the Chronicle extension after installing it; Interlatch offers to,
|
|
43
|
+
once ([VS Code extension](docs/vscode.md)).
|
|
44
|
+
- **The VS Code extension on the Marketplace:** install **Interlatch** from VS Code's Extensions view
|
|
45
|
+
([VS Code extension](docs/vscode.md#install)). Releases publish it whenever its own version goes up.
|
|
46
|
+
|
|
6
47
|
## 0.22.0 (2026-10-10)
|
|
7
48
|
|
|
8
49
|
- **Your Chronicle setup moves over by itself:** the first time the dashboard or the background sync starts,
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: interlatch
|
|
3
|
-
Version: 0.23.
|
|
3
|
+
Version: 0.23.2
|
|
4
4
|
Summary: Shared memory for your coding agents: records every session (Claude Code, Codex, Copilot, Bob, Antigravity) 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/
|
|
@@ -46,7 +46,7 @@ claude.ai and ChatGPT chats, recorded on your own machine, and every lesson in t
|
|
|
46
46
|
<img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11+">
|
|
47
47
|
<img src="https://img.shields.io/badge/macOS-app%20%2B%20CLI-lightgrey?logo=apple" alt="macOS app and CLI">
|
|
48
48
|
<a href="https://github.com/Chatixia-AI/interlatch/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license"></a>
|
|
49
|
-
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%
|
|
49
|
+
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%2Finterlatch%2Finterlatch-hub.json&query=%24.downloads&logo=docker&label=hub%20image%20pulls" alt="Hub Docker image pulls"></a>
|
|
50
50
|
</p>
|
|
51
51
|
<p align="center">
|
|
52
52
|
<a href="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml"><img src="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
|
|
@@ -191,7 +191,7 @@ sessions are archived and wait in the analysis queue.
|
|
|
191
191
|
|
|
192
192
|
**Windows or Linux?** The desktop app is macOS only. On Windows, `uv tool install interlatch` and `interlatch install`
|
|
193
193
|
work as on a Mac, with Task Scheduler running the sync and the dashboard ([Windows](https://github.com/Chatixia-AI/interlatch/blob/main/docs/install.md#windows)); a
|
|
194
|
-
Windows computer
|
|
194
|
+
Windows computer joining a team hub is untested yet. On Linux, `interlatch install` runs the sync and the dashboard
|
|
195
195
|
as systemd user units, so a Linux box can be the [hub](https://github.com/Chatixia-AI/interlatch/blob/main/docs/devices.md#a-linux-hub) for your other computers. A
|
|
196
196
|
team's hub also runs [in Docker](https://github.com/Chatixia-AI/interlatch/blob/main/docs/docker.md).
|
|
197
197
|
|
|
@@ -11,7 +11,7 @@ claude.ai・ChatGPT のチャットを自分のマシンの中で記録し、そ
|
|
|
11
11
|
<img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11 以上">
|
|
12
12
|
<img src="https://img.shields.io/badge/macOS-app%20%2B%20CLI-lightgrey?logo=apple" alt="macOS アプリと CLI">
|
|
13
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT ライセンス"></a>
|
|
14
|
-
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%
|
|
14
|
+
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%2Finterlatch%2Finterlatch-hub.json&query=%24.downloads&logo=docker&label=hub%20image%20pulls" alt="ハブの Docker イメージの pull 数"></a>
|
|
15
15
|
</p>
|
|
16
16
|
<p align="center">
|
|
17
17
|
<a href="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml"><img src="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
|
|
@@ -154,7 +154,7 @@ Ollama。**Status › Analysis** または `interlatch config set analysis.backe
|
|
|
154
154
|
|
|
155
155
|
**Windows や Linux は?** デスクトップアプリは macOS 専用です。Windows では `uv tool install interlatch` と `interlatch install` が
|
|
156
156
|
Mac と同じように使え、同期とダッシュボードはタスク スケジューラが動かします([Windows](docs/ja/install.md#windows))。
|
|
157
|
-
Windows
|
|
157
|
+
Windows のコンピューターからのチームのハブへの参加はまだ未検証です。Linux では `interlatch install` が同期とダッシュボードを systemd の
|
|
158
158
|
ユーザーユニットとして動かすので、Linux マシンをほかのコンピューターの[ハブ](docs/ja/devices.md#linux-のハブ)にできます。
|
|
159
159
|
チームのハブは [Docker](docs/ja/docker.md) でも動かせます。
|
|
160
160
|
|
|
@@ -11,7 +11,7 @@ claude.ai and ChatGPT chats, recorded on your own machine, and every lesson in t
|
|
|
11
11
|
<img src="https://img.shields.io/badge/python-3.11%2B-blue" alt="Python 3.11+">
|
|
12
12
|
<img src="https://img.shields.io/badge/macOS-app%20%2B%20CLI-lightgrey?logo=apple" alt="macOS app and CLI">
|
|
13
13
|
<a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-green" alt="MIT license"></a>
|
|
14
|
-
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%
|
|
14
|
+
<a href="https://github.com/Chatixia-AI/interlatch/pkgs/container/interlatch-hub"><img src="https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fgithub.com%2Fipitio%2Fbackage%2Fraw%2Findex%2FChatixia-AI%2Finterlatch%2Finterlatch-hub.json&query=%24.downloads&logo=docker&label=hub%20image%20pulls" alt="Hub Docker image pulls"></a>
|
|
15
15
|
</p>
|
|
16
16
|
<p align="center">
|
|
17
17
|
<a href="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml"><img src="https://github.com/Chatixia-AI/interlatch/actions/workflows/ci.yml/badge.svg?branch=main" alt="CI"></a>
|
|
@@ -156,7 +156,7 @@ sessions are archived and wait in the analysis queue.
|
|
|
156
156
|
|
|
157
157
|
**Windows or Linux?** The desktop app is macOS only. On Windows, `uv tool install interlatch` and `interlatch install`
|
|
158
158
|
work as on a Mac, with Task Scheduler running the sync and the dashboard ([Windows](docs/install.md#windows)); a
|
|
159
|
-
Windows computer
|
|
159
|
+
Windows computer joining a team hub is untested yet. On Linux, `interlatch install` runs the sync and the dashboard
|
|
160
160
|
as systemd user units, so a Linux box can be the [hub](docs/devices.md#a-linux-hub) for your other computers. A
|
|
161
161
|
team's hub also runs [in Docker](docs/docker.md).
|
|
162
162
|
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
- **Windows polish:** The dashboard can show an Interlatch icon in the notification area (turn on the menu-bar icon
|
|
2
|
+
under **Status › Recording**, or run `interlatch ui --menu-bar`): click it to open the dashboard, right-click for Sync
|
|
3
|
+
Now and Quit, which stops the dashboard until you next sign in. Release notifications show as Windows toasts. The VS
|
|
4
|
+
Code extension's file history and folder list, hub folders and projects, and a person's projects now match Windows
|
|
5
|
+
paths however they're spelled (`C:\work\app`, `c:/work/app`).
|
|
@@ -84,9 +84,8 @@ confirm the icon is in the menu bar of every display:
|
|
|
84
84
|
### One-time setup before the first release
|
|
85
85
|
|
|
86
86
|
1. On PyPI, add a *pending publisher* (Account → Publishing): project `interlatch`, owner
|
|
87
|
-
`Chatixia-AI`, repository `interlatch`, workflow `release.yml`, environment `pypi
|
|
88
|
-
|
|
89
|
-
repository by its name, so after renaming the repository, update both publishers there.
|
|
87
|
+
`Chatixia-AI`, repository `interlatch`, workflow `release.yml`, environment `pypi`. PyPI matches the
|
|
88
|
+
repository by its name, so after renaming the repository, update the publisher there.
|
|
90
89
|
2. In the GitHub repository, create an environment named `pypi` (Settings → Environments).
|
|
91
90
|
3. To ship a signed, notarized DMG (Apple Developer Program membership): export the *Developer ID Application*
|
|
92
91
|
certificate with its key as a `.p12`, and add the secrets `MACOS_CERT_P12` (base64 of the file),
|
|
@@ -602,5 +602,6 @@ corrupted.
|
|
|
602
602
|
your phone, so the hub's tailnet address is out of their reach. Claude Code's Remote Control, from the phone into
|
|
603
603
|
a session on the hub, does have Interlatch's tools.
|
|
604
604
|
- **A copy to read offline** on the other computers.
|
|
605
|
-
- **A Windows computer in a hub.** Interlatch runs on Windows on its own ([Windows](install.md#windows)),
|
|
606
|
-
|
|
605
|
+
- **A Windows computer in a hub.** Interlatch runs on Windows on its own ([Windows](install.md#windows)), and the hub
|
|
606
|
+
matches Windows folders however they're spelled (`C:\work\app`, `c:/work/app`), but joining one from Windows is
|
|
607
|
+
untested.
|
|
@@ -117,7 +117,7 @@ launchd agents do not run alongside it (harmless, but redundant).
|
|
|
117
117
|
|
|
118
118
|
## Windows
|
|
119
119
|
|
|
120
|
-
On Windows 10 and 11 Interlatch is the command-line install; there is no desktop app
|
|
120
|
+
On Windows 10 and 11 Interlatch is the command-line install; there is no desktop app. In PowerShell:
|
|
121
121
|
|
|
122
122
|
```powershell
|
|
123
123
|
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv, if you don't have it yet
|
|
@@ -141,13 +141,20 @@ The hooks it adds to Claude Code run `C:/Users/<you>/.local/bin/interlatch.exe h
|
|
|
141
141
|
hook in Git Bash, or in PowerShell without Git for Windows, and forward slashes read the same in both. A folder with
|
|
142
142
|
a space in its name is written in its short form (`C:/Users/ADALOV~1/…`).
|
|
143
143
|
|
|
144
|
-
Interlatch reads and writes text in UTF-8, as the coding agents write it, whatever language Windows is set to.
|
|
144
|
+
Interlatch reads and writes text in UTF-8, as the coding agents write it, whatever language Windows is set to. It
|
|
145
|
+
matches a Windows path however an agent or VS Code spells it (`C:\work\app`, `c:/work/app`), so the
|
|
146
|
+
[VS Code extension](vscode.md)'s file history and folder list work there too.
|
|
147
|
+
|
|
148
|
+
The **Menu-bar icon** switch under **Settings › Status › Recording** puts Interlatch's icon in the notification area
|
|
149
|
+
(by the clock) while the Dashboard task runs the dashboard; `interlatch ui --menu-bar` shows it from a terminal. Click
|
|
150
|
+
it to open the dashboard, or right-click for **Sync Now** and **Quit Interlatch**. Quit stops the dashboard and the icon
|
|
151
|
+
until you next sign in, run `interlatch install`, or run `interlatch ui`; the Sync task keeps recording. A new
|
|
152
|
+
version's [notification](#updating) (`[updates] notify`) shows as a Windows notification.
|
|
145
153
|
|
|
146
154
|
Not on Windows yet:
|
|
147
155
|
|
|
148
|
-
- **Joining a team hub
|
|
149
|
-
|
|
150
|
-
- **Desktop notifications** of a new version, and the menu-bar icon.
|
|
156
|
+
- **Joining a team hub** is untested from Windows: the hub matches Windows folders however they're spelled, but no
|
|
157
|
+
team has run one with a Windows computer yet.
|
|
151
158
|
|
|
152
159
|
## The menu-bar icon
|
|
153
160
|
|
|
@@ -84,9 +84,8 @@ GitHub で `v<version>` タグのリリースを手動で公開する方法も
|
|
|
84
84
|
### 最初のリリースの前に一度だけ必要な設定
|
|
85
85
|
|
|
86
86
|
1. PyPI で *pending publisher* を追加します(Account → Publishing):プロジェクト `interlatch`、オーナー
|
|
87
|
-
`Chatixia-AI`、リポジトリ `interlatch`、ワークフロー `release.yml`、環境 `pypi
|
|
88
|
-
|
|
89
|
-
照合するので、リポジトリの名前を変えたら、PyPI 側で両方のパブリッシャーを更新してください。
|
|
87
|
+
`Chatixia-AI`、リポジトリ `interlatch`、ワークフロー `release.yml`、環境 `pypi`。PyPI はリポジトリを名前で
|
|
88
|
+
照合するので、リポジトリの名前を変えたら、PyPI 側でパブリッシャーを更新してください。
|
|
90
89
|
2. GitHub リポジトリで `pypi` という名前の環境を作成します(Settings → Environments)。
|
|
91
90
|
3. 署名・公証済みの DMG を配布するには(Apple Developer Program への加入が必要):*Developer ID Application*
|
|
92
91
|
証明書を鍵ごと `.p12` として書き出し、シークレット `MACOS_CERT_P12`(ファイルの base64)、
|
|
@@ -598,5 +598,5 @@ sudo tailscale set --operator=$USER # `interlatch tailnet on` が Tailscale
|
|
|
598
598
|
接続するので、ハブの tailnet 内のアドレスには届きません。スマートフォンから Claude Code の Remote Control でハブのセッションを
|
|
599
599
|
操作すれば、Interlatch のツールを使えます。
|
|
600
600
|
- **ほかのコンピューターでオフラインで読めるコピー。**
|
|
601
|
-
- **ハブに参加する Windows のコンピューター。** Interlatch は Windows
|
|
602
|
-
|
|
601
|
+
- **ハブに参加する Windows のコンピューター。** Interlatch は Windows 単体では動き([Windows](install.md#windows))、
|
|
602
|
+
ハブは Windows のフォルダーを書き方(`C:\work\app`、`c:/work/app`)にかかわらず照合しますが、Windows からの参加は未検証です。
|
|
@@ -113,7 +113,7 @@ Claude Code と Mac 本体には、次の 4 つを設定します(それぞれ
|
|
|
113
113
|
|
|
114
114
|
## Windows
|
|
115
115
|
|
|
116
|
-
Windows 10 と 11 では、Interlatch
|
|
116
|
+
Windows 10 と 11 では、Interlatch はコマンドライン版を使います。デスクトップアプリはありません。PowerShell で:
|
|
117
117
|
|
|
118
118
|
```powershell
|
|
119
119
|
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex" # uv, if you don't have it yet
|
|
@@ -138,12 +138,19 @@ Claude Code に追加するフックは `C:/Users/<you>/.local/bin/interlatch.ex
|
|
|
138
138
|
名前に空白を含むフォルダーは短い形式(`C:/Users/ADALOV~1/…`)で書きます。
|
|
139
139
|
|
|
140
140
|
Interlatch は、Windows の表示言語にかかわらず、コーディングエージェントが書くのと同じ UTF-8 でテキストを読み書きします。
|
|
141
|
+
Windows のパスは、エージェントや VS Code の書き方(`C:\work\app`、`c:/work/app`)にかかわらず同じものとして扱うので、
|
|
142
|
+
[VS Code 拡張](vscode.md)のファイル履歴とフォルダーの一覧も使えます。
|
|
143
|
+
|
|
144
|
+
**Settings › Status › Recording** の **Menu-bar icon** スイッチをオンにすると、Dashboard タスクがダッシュボードを動かしている間、
|
|
145
|
+
通知領域(時計の横)に Interlatch のアイコンが出ます。ターミナルからは `interlatch ui --menu-bar` で表示できます。クリックで
|
|
146
|
+
ダッシュボードを開き、右クリックで **Sync Now** と **Quit Interlatch** を選べます。Quit すると、次にサインインするか、
|
|
147
|
+
`interlatch install` か `interlatch ui` を実行するまで、ダッシュボードとアイコンは止まります(Sync タスクは記録を続けます)。
|
|
148
|
+
新しいバージョンの[通知](#アップデート)(`[updates] notify`)は Windows の通知として表示されます。
|
|
141
149
|
|
|
142
150
|
Windows ではまだできないこと:
|
|
143
151
|
|
|
144
|
-
-
|
|
145
|
-
|
|
146
|
-
- 新しいバージョンの**デスクトップ通知**と、メニューバーアイコン。
|
|
152
|
+
- **チームのハブへの参加**は Windows から未検証です。ハブは Windows のフォルダーを書き方にかかわらず照合しますが、
|
|
153
|
+
Windows のコンピューターを含むチームではまだ運用されていません。
|
|
147
154
|
|
|
148
155
|
## メニューバーアイコン
|
|
149
156
|
|
|
@@ -17,9 +17,9 @@ uv tool uninstall agents-chronicle
|
|
|
17
17
|
uv tool install --python 3.13 'interlatch[app]' # デスクトップアプリが不要なら interlatch だけ
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
pipx では `pipx uninstall agents-chronicle` のあとに `pipx install interlatch`
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
pipx では `pipx uninstall agents-chronicle` のあとに `pipx install interlatch` です。`agents-chronicle` は
|
|
21
|
+
PyPI からなくなったので、`uv tool upgrade agents-chronicle` では何も更新されず、名前が変わる前のバージョンには
|
|
22
|
+
新しいリリースが通知されません。上のコマンドで切り替えてください。チェックアウトや git の URL からのインストールは、ボタンでは切り替わりません。
|
|
23
23
|
アンインストールしてから、同じ方法で `interlatch` をインストールしてください。
|
|
24
24
|
|
|
25
25
|
**デスクトップアプリの場合:** [最新リリース](https://github.com/Chatixia-AI/interlatch/releases/latest)から
|
|
@@ -17,10 +17,10 @@ uv tool uninstall agents-chronicle
|
|
|
17
17
|
uv tool install --python 3.13 'interlatch[app]' # or plain interlatch, without the desktop app
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
With pipx it is `pipx uninstall agents-chronicle`, then `pipx install interlatch`.
|
|
21
|
-
`uv tool upgrade agents-chronicle`
|
|
22
|
-
|
|
23
|
-
`interlatch` the same way.
|
|
20
|
+
With pipx it is `pipx uninstall agents-chronicle`, then `pipx install interlatch`. `agents-chronicle` is no longer
|
|
21
|
+
on PyPI, so `uv tool upgrade agents-chronicle` gets nothing new, and a version from before the rename doesn't hear of
|
|
22
|
+
new releases: switch with the commands above. An install from a checkout or a git URL is not switched by the button:
|
|
23
|
+
uninstall it and install `interlatch` the same way.
|
|
24
24
|
|
|
25
25
|
**The desktop app:** download `Interlatch-<version>-arm64.dmg` from the
|
|
26
26
|
[latest release](https://github.com/Chatixia-AI/interlatch/releases/latest), drag **Interlatch** into
|
|
@@ -7,11 +7,15 @@ over REST.
|
|
|
7
7
|
- `firestore.rules`: anyone may read the board (100 rows per query at most). A signed-in Google (or GitHub) user may
|
|
8
8
|
write only their own row, `players/{uid}`, with a fixed set of bounded fields and `at` set to the server time. Their
|
|
9
9
|
provider id must be the one in the sign-in token.
|
|
10
|
-
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
10
|
+
- The sign-in page, `https://interlatch.firebaseapp.com/signin.html`, lives in
|
|
11
|
+
[Chatixia-AI/chronicle-site](https://github.com/Chatixia-AI/chronicle-site) (`public/signin.html`). interlatch.com is
|
|
12
|
+
served from the same Firebase Hosting site, and a Hosting deploy replaces the whole site, so only that repository
|
|
13
|
+
deploys Hosting. The dashboard opens the page with its own loopback address and a one-time state. The page signs in
|
|
14
|
+
with Google through Firebase Auth (in memory only), then goes back to that dashboard with the refresh token in the
|
|
15
|
+
URL fragment. The dashboard keeps the token only if the state matches the one it made. The page accepts only
|
|
16
|
+
`http://127.0.0.1`, `localhost` or `[::1]` as the address to return to.
|
|
17
|
+
- Deploy the rules from this folder: `firebase deploy --only firestore`. Never deploy Hosting from here: it would
|
|
18
|
+
replace interlatch.com with nothing.
|
|
15
19
|
|
|
16
20
|
Setup that lives outside this repository: Google is turned on under Authentication › Sign-in method. Firebase creates
|
|
17
21
|
the OAuth client itself, and `interlatch.firebaseapp.com` is an authorized domain by default. The web app
|
|
@@ -2364,6 +2364,7 @@ def _hub_leave_project(cfg, console, args) -> int:
|
|
|
2364
2364
|
from pathlib import Path
|
|
2365
2365
|
|
|
2366
2366
|
from . import hub
|
|
2367
|
+
from .util import normalize_project_path
|
|
2367
2368
|
|
|
2368
2369
|
if not cfg.is_spoke:
|
|
2369
2370
|
console.print("This computer has not joined a hub.")
|
|
@@ -2376,14 +2377,15 @@ def _hub_leave_project(cfg, console, args) -> int:
|
|
|
2376
2377
|
known = hub.handshake(cfg).get("projects") or []
|
|
2377
2378
|
except hub.HubError:
|
|
2378
2379
|
known = (hub.last_folders(cfg) or {}).get("projects") or []
|
|
2379
|
-
known += [{"path": x, "name": Path(x).name} for x in cfg.hub_left
|
|
2380
|
+
known += [{"path": x, "name": Path(x).name} for x in cfg.hub_left
|
|
2381
|
+
if x not in {normalize_project_path(k.get("path")) for k in known}]
|
|
2380
2382
|
project, problem = _pick_project(known, wanted)
|
|
2381
2383
|
if problem:
|
|
2382
2384
|
console.print(problem, highlight=False)
|
|
2383
2385
|
return 1
|
|
2384
2386
|
name = project.get("name") or Path(project["path"]).name
|
|
2385
2387
|
if args.action == "rejoin":
|
|
2386
|
-
if project["path"] not in cfg.hub_left:
|
|
2388
|
+
if normalize_project_path(project["path"]) not in cfg.hub_left:
|
|
2387
2389
|
console.print(f"This computer hasn't left {name}.", highlight=False)
|
|
2388
2390
|
return 0
|
|
2389
2391
|
cfg = hub.rejoin_project(cfg, project["path"])
|
|
@@ -11,6 +11,8 @@ from collections.abc import Mapping
|
|
|
11
11
|
from dataclasses import dataclass, field
|
|
12
12
|
from pathlib import Path
|
|
13
13
|
|
|
14
|
+
from .util import is_abs_path, normalize_project_path, path_kind
|
|
15
|
+
|
|
14
16
|
DEFAULT_CONFIG_TOML = """\
|
|
15
17
|
# Interlatch configuration.
|
|
16
18
|
# Edit freely; changes apply on the next sync / worker run.
|
|
@@ -441,6 +443,12 @@ def _pick(cls, values: dict):
|
|
|
441
443
|
return cls(**{k: v for k, v in values.items() if k in allowed})
|
|
442
444
|
|
|
443
445
|
|
|
446
|
+
def _map_path(path: str) -> str:
|
|
447
|
+
"""A [hub] path_map side: a Windows folder as normalize_project_path spells it; a POSIX one without a trailing /
|
|
448
|
+
("/" becomes "", which maps every path)."""
|
|
449
|
+
return normalize_project_path(path) if path_kind(path) in ("drive", "unc") else path.rstrip("/")
|
|
450
|
+
|
|
451
|
+
|
|
444
452
|
def load_config(home: Path | None = None, *, create: bool = True) -> Config:
|
|
445
453
|
home = (home or chronicle_home()).expanduser()
|
|
446
454
|
path = home / "config.toml"
|
|
@@ -498,12 +506,12 @@ def load_config(home: Path | None = None, *, create: bool = True) -> Config:
|
|
|
498
506
|
server_menu_bar=bool(server.get("menu_bar", False)),
|
|
499
507
|
server_trusted_proxies=[str(x).strip() for x in server.get("trusted_proxies", ["127.0.0.1", "::1"]) or [] if str(x).strip()],
|
|
500
508
|
hub_url=str(hub.get("url") or "").strip().rstrip("/"),
|
|
501
|
-
hub_path_map={str(k)
|
|
502
|
-
hub_folders={str(Path(str(k)).expanduser())
|
|
509
|
+
hub_path_map={_map_path(str(k)): _map_path(str(v)) for k, v in path_map.items()} if isinstance(path_map, dict) else {},
|
|
510
|
+
hub_folders={normalize_project_path(str(Path(str(k)).expanduser())): normalize_project_path(str(v)) for k, v in folders.items()
|
|
503
511
|
if str(k).strip() and str(v).strip()} if isinstance(folders, dict) else {},
|
|
504
512
|
hub_share=share if share in SHARE_MODES else "everything",
|
|
505
513
|
hub_all_folders=hub.get("all_folders") is True, # only an explicit true shares every folder
|
|
506
|
-
hub_left=sorted({str(x)
|
|
514
|
+
hub_left=sorted({normalize_project_path(str(x)) for x in hub.get("left") or [] if is_abs_path(str(x))})
|
|
507
515
|
if isinstance(hub.get("left"), list) else [],
|
|
508
516
|
hub_accept="everything" if accept == "everything" else "knowledge", # a typo never lets transcripts in
|
|
509
517
|
hub_store=store if store in STORES else "",
|
|
@@ -47,12 +47,17 @@ def shift_iso(ts: str | None, ms: float) -> str | None:
|
|
|
47
47
|
return (dt + timedelta(milliseconds=ms)).isoformat(timespec="milliseconds").replace("+00:00", "Z") if dt else ts
|
|
48
48
|
|
|
49
49
|
|
|
50
|
+
_URI_DRIVE = re.compile(r"/[A-Za-z]:(?:/|$)") # a Windows drive as a URI's path spells it
|
|
51
|
+
|
|
52
|
+
|
|
50
53
|
def uri_path(uri) -> str | None:
|
|
51
|
-
"""file:///Users/x or a VS Code URI object -> /Users/x."""
|
|
54
|
+
"""file:///Users/x or a VS Code URI object -> /Users/x. On Windows file:///c%3A/x -> c:/x, not /c:/x."""
|
|
52
55
|
if isinstance(uri, dict):
|
|
53
|
-
|
|
56
|
+
p = uri.get("fsPath") or uri.get("path")
|
|
57
|
+
return p[1:] if isinstance(p, str) and _URI_DRIVE.match(p) else p
|
|
54
58
|
if isinstance(uri, str) and uri.startswith("file:"):
|
|
55
|
-
|
|
59
|
+
p = unquote(urlparse(uri).path)
|
|
60
|
+
return (p[1:] if _URI_DRIVE.match(p) else p) or None
|
|
56
61
|
if isinstance(uri, str) and uri.startswith("vscode-remote:"): # vscode-remote://ssh-remote+host/path -> host:/path
|
|
57
62
|
u = urlparse(uri)
|
|
58
63
|
host = unquote(u.netloc).split("+", 1)[-1]
|