interlatch 0.23.2__tar.gz → 0.23.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.23.2 → interlatch-0.23.4}/.pre-commit-config.yaml +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/CHANGELOG.md +27 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/CONTRIBUTING.md +2 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/PKG-INFO +4 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/README.ja.md +3 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/README.md +3 -2
- interlatch-0.23.4/changelog.d/codex-cloud-error-log.md +2 -0
- interlatch-0.23.4/changelog.d/friction-order.md +2 -0
- interlatch-0.23.4/changelog.d/project-needs-you.md +4 -0
- interlatch-0.23.4/changelog.d/project-page.md +5 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/dev.sh +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/README.md +1 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/analysis.md +2 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/dashboard.md +44 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/demo/make_demo.py +2 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/demo/record_demo.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/development.md +57 -10
- interlatch-0.23.4/docs/faq.md +124 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/README.md +1 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/dashboard.md +37 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/development.md +55 -8
- interlatch-0.23.4/docs/ja/faq.md +119 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/privacy.md +5 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/privacy.md +5 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/sources.md +3 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/mkdocs.yml +2 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/README.md +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/render.py +2 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/Interlatch.spec +7 -7
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/icon-blueprint-prompt.md +2 -2
- interlatch-0.23.2/packaging/macos/chronicle_app.py → interlatch-0.23.4/packaging/macos/interlatch_app.py +2 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/make_icon.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/pyproject.toml +3 -3
- interlatch-0.23.4/src/chronicle/__init__.py +8 -0
- interlatch-0.23.4/src/chronicle/__main__.py +3 -0
- interlatch-0.23.4/src/chronicle/windows.py +11 -0
- interlatch-0.23.4/src/interlatch/__main__.py +3 -0
- interlatch-0.23.4/src/interlatch/analysis/__init__.py +2 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/analysis}/digest.py +3 -3
- interlatch-0.23.4/src/interlatch/analysis/language.py +22 -0
- interlatch-0.23.4/src/interlatch/analysis/queue.py +132 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/__init__.py +2 -0
- interlatch-0.23.2/src/chronicle/providers.py → interlatch-0.23.4/src/interlatch/analysis/runners/api.py +15 -134
- interlatch-0.23.4/src/interlatch/analysis/runners/base.py +148 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/bob.py +121 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/claude.py +89 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/codex.py +127 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/factory.py +25 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/process.py +67 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/replies.py +38 -0
- interlatch-0.23.4/src/interlatch/analysis/runners/settings.py +131 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/analysis}/screen.py +7 -5
- interlatch-0.23.2/src/chronicle/analyze.py → interlatch-0.23.4/src/interlatch/analysis/session.py +12 -10
- interlatch-0.23.4/src/interlatch/analysis/worker.py +116 -0
- interlatch-0.23.4/src/interlatch/application/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/application/records.py +54 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/application}/search.py +6 -6
- interlatch-0.23.4/src/interlatch/application/workflows.py +180 -0
- interlatch-0.23.4/src/interlatch/artifacts/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/artifacts/files.py +123 -0
- interlatch-0.23.4/src/interlatch/artifacts/queries.py +183 -0
- interlatch-0.23.4/src/interlatch/cli.py +4 -0
- interlatch-0.23.4/src/interlatch/core/__init__.py +2 -0
- interlatch-0.23.2/src/chronicle/artifacts.py → interlatch-0.23.4/src/interlatch/core/artifact_records.py +5 -296
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/core}/config.py +4 -4
- interlatch-0.23.4/src/interlatch/core/diagrams.py +124 -0
- interlatch-0.23.2/src/chronicle/i18n.py → interlatch-0.23.4/src/interlatch/core/i18n/__init__.py +1 -1
- interlatch-0.23.4/src/interlatch/core/machine.py +54 -0
- interlatch-0.23.4/src/interlatch/core/paths.py +86 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/core}/pricing.py +51 -0
- interlatch-0.23.4/src/interlatch/core/process.py +20 -0
- interlatch-0.23.4/src/interlatch/core/sessions.py +238 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/core}/util.py +0 -79
- interlatch-0.23.4/src/interlatch/ingestion/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/ingestion/analyses.py +75 -0
- interlatch-0.23.4/src/interlatch/ingestion/archive.py +176 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/ingestion}/chat_import.py +17 -37
- interlatch-0.23.4/src/interlatch/ingestion/deletion.py +76 -0
- interlatch-0.23.4/src/interlatch/ingestion/history.py +66 -0
- interlatch-0.23.4/src/interlatch/ingestion/memory.py +150 -0
- interlatch-0.23.4/src/interlatch/ingestion/persistence.py +274 -0
- interlatch-0.23.4/src/interlatch/ingestion/report.py +30 -0
- interlatch-0.23.4/src/interlatch/ingestion/service.py +485 -0
- interlatch-0.23.4/src/interlatch/interfaces/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/__init__.py +3 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/archive.py +311 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/knowledge.py +599 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/operations.py +259 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/recording.py +312 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/setup.py +679 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/commands/sharing.py +913 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/common.py +85 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/main.py +52 -0
- interlatch-0.23.4/src/interlatch/interfaces/cli/parser.py +45 -0
- interlatch-0.23.4/src/interlatch/interfaces/exports/__init__.py +1 -0
- interlatch-0.23.2/src/chronicle/diagram.py → interlatch-0.23.4/src/interlatch/interfaces/exports/diagrams.py +13 -129
- interlatch-0.23.2/src/chronicle/views.py → interlatch-0.23.4/src/interlatch/interfaces/exports/markdown.py +5 -85
- interlatch-0.23.2/src/chronicle/session_export.py → interlatch-0.23.4/src/interlatch/interfaces/exports/sessions.py +7 -6
- interlatch-0.23.2/src/chronicle/export_md.py → interlatch-0.23.4/src/interlatch/interfaces/exports/vault.py +9 -7
- interlatch-0.23.2/src/chronicle/mcp_server.py → interlatch-0.23.4/src/interlatch/interfaces/mcp.py +19 -17
- interlatch-0.23.4/src/interlatch/interfaces/web/__init__.py +3 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/__init__.py +18 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/artifacts.py +55 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/common.py +141 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/devices.py +235 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/hub_admin.py +222 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/knowledge.py +312 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/leaderboard.py +80 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/projects.py +305 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/sessions.py +211 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/settings.py +204 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/sources.py +111 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/status.py +330 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/storage.py +116 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/api/team.py +144 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/app.py +80 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/assets.py +37 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/context.py +45 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/handler.py +519 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/jobs.py +51 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/routes.py +372 -0
- interlatch-0.23.4/src/interlatch/interfaces/web/server.py +106 -0
- interlatch-0.23.4/src/interlatch/knowledge/__init__.py +2 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/cases.py +3 -3
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/friction.py +7 -5
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/glossary.py +12 -10
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/instructions.py +8 -8
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/ladder.py +2 -2
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/learning.py +3 -3
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/reviews.py +7 -5
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/suggest.py +4 -4
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/knowledge}/synthesize.py +8 -6
- interlatch-0.23.4/src/interlatch/projects/__init__.py +2 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/projects}/groups.py +4 -4
- interlatch-0.23.4/src/interlatch/projects/labels.py +17 -0
- interlatch-0.23.4/src/interlatch/projects/progress.py +315 -0
- interlatch-0.23.4/src/interlatch/projects/routing.py +201 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/projects}/systems.py +2 -6
- interlatch-0.23.4/src/interlatch/runtime/__init__.py +2 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/connectors.py +14 -36
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/container.py +20 -18
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/hooks.py +11 -22
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/install.py +18 -17
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/migrate.py +12 -10
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/notify.py +3 -3
- interlatch-0.23.4/src/interlatch/runtime/platforms/__init__.py +2 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime/platforms}/desktop.py +21 -19
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime/platforms}/menubar.py +21 -18
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime/platforms}/windows.py +11 -9
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/statusline.py +4 -4
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/update.py +7 -7
- interlatch-0.23.4/src/interlatch/sharing/__init__.py +20 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/sharing}/access.py +2 -2
- interlatch-0.23.4/src/interlatch/sharing/client.py +400 -0
- interlatch-0.23.4/src/interlatch/sharing/identity.py +91 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/sharing}/leaderboard.py +5 -5
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/sharing}/news.py +7 -7
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/sharing}/people.py +5 -4
- interlatch-0.23.4/src/interlatch/sharing/projects.py +370 -0
- interlatch-0.23.4/src/interlatch/sharing/protocol.py +111 -0
- interlatch-0.23.4/src/interlatch/sharing/pull.py +162 -0
- interlatch-0.23.4/src/interlatch/sharing/push.py +320 -0
- interlatch-0.23.4/src/interlatch/sharing/receiver.py +620 -0
- interlatch-0.23.4/src/interlatch/sources/__init__.py +2 -0
- interlatch-0.23.2/src/chronicle/antigravity_parser.py → interlatch-0.23.4/src/interlatch/sources/antigravity.py +6 -6
- interlatch-0.23.2/src/chronicle/bob_parser.py → interlatch-0.23.4/src/interlatch/sources/bob.py +10 -10
- interlatch-0.23.4/src/interlatch/sources/builder.py +179 -0
- interlatch-0.23.2/src/chronicle/chatgpt_export.py → interlatch-0.23.4/src/interlatch/sources/chatgpt.py +4 -4
- interlatch-0.23.4/src/interlatch/sources/chats.py +33 -0
- interlatch-0.23.4/src/interlatch/sources/claude/__init__.py +1 -0
- interlatch-0.23.2/src/chronicle/claude_export.py → interlatch-0.23.4/src/interlatch/sources/claude/export.py +7 -7
- interlatch-0.23.4/src/interlatch/sources/claude/files.py +71 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/sources/claude}/parser.py +13 -245
- interlatch-0.23.4/src/interlatch/sources/codex/__init__.py +1 -0
- interlatch-0.23.2/src/chronicle/codex_cloud.py → interlatch-0.23.4/src/interlatch/sources/codex/cloud.py +10 -8
- interlatch-0.23.2/src/chronicle/codex_parser.py → interlatch-0.23.4/src/interlatch/sources/codex/parser.py +10 -21
- interlatch-0.23.2/src/chronicle/copilot_parser.py → interlatch-0.23.4/src/interlatch/sources/copilot.py +9 -179
- interlatch-0.23.4/src/interlatch/sources/discovery.py +39 -0
- interlatch-0.23.4/src/interlatch/sources/prompts.py +23 -0
- interlatch-0.23.4/src/interlatch/storage/__init__.py +2 -0
- interlatch-0.23.4/src/interlatch/storage/fts.py +21 -0
- interlatch-0.23.4/src/interlatch/storage/kv.py +17 -0
- interlatch-0.23.4/src/interlatch/storage/migrations.py +66 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/storage}/mirror.py +8 -7
- interlatch-0.23.2/src/chronicle/pg.py → interlatch-0.23.4/src/interlatch/storage/postgres.py +1 -1
- interlatch-0.23.2/src/chronicle/db.py → interlatch-0.23.4/src/interlatch/storage/schema.py +4 -115
- interlatch-0.23.4/src/interlatch/storage/sqlite.py +33 -0
- interlatch-0.23.2/src/chronicle/team_store.py → interlatch-0.23.4/src/interlatch/storage/team.py +6 -6
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/app.css +84 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/app.js +294 -28
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/ja.js +72 -1
- interlatch-0.23.4/src/interlatch/windows.py +10 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/conftest.py +5 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/friction_fixture.py +5 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/parsers/antigravity.json +4 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_analysis.py +31 -25
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_antigravity.py +7 -7
- interlatch-0.23.4/tests/test_architecture.py +165 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_artifacts.py +34 -30
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_bob_analysis.py +19 -16
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_boot_web.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_case_files.py +10 -8
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_cases.py +8 -7
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_chat_import.py +10 -7
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_cli_pins.py +4 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_codex.py +6 -6
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_codex_analysis.py +14 -10
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_codex_cloud.py +25 -6
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_container.py +13 -10
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_copilot_bob.py +11 -11
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_dedicated_hub.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_dedupe.py +3 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_desktop.py +11 -11
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_diagram.py +6 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_ee_boundary.py +5 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_friction.py +40 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_glossary.py +13 -12
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_group_sharing.py +38 -31
- interlatch-0.23.4/tests/test_home_agents.py +60 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub.py +106 -94
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_accept.py +7 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_news.py +17 -13
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_projects.py +44 -36
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_projects_listed.py +17 -15
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_purge.py +24 -18
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_hub_sharing_race.py +25 -19
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_i18n_web.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_ingest.py +9 -7
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_instructions.py +9 -9
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_integration.py +43 -42
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_ladder.py +7 -6
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_language.py +40 -29
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_leaderboard.py +8 -7
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_learning_glance.py +5 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_learning_interests.py +7 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_learning_web.py +1 -1
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_leave_project.py +42 -34
- interlatch-0.23.4/tests/test_legacy_package.py +39 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_map_goldens.py +5 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_menubar.py +44 -36
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_migrate.py +21 -20
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_mirror.py +8 -8
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_notify.py +11 -11
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_parser.py +19 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_parser_goldens.py +7 -6
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_people.py +2 -2
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_people_hub.py +59 -54
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_people_web.py +12 -9
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_project_groups.py +16 -14
- interlatch-0.23.4/tests/test_project_progress.py +249 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_providers.py +26 -22
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_queue.py +15 -14
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_regressions.py +10 -9
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_release.py +3 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_route_matrix.py +43 -21
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_screen.py +6 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_security.py +56 -49
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_setup.py +26 -26
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_statusline.py +10 -9
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_suggest.py +5 -4
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_suggest_cli.py +10 -9
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_systems.py +4 -3
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_team.py +37 -30
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_team_home.py +6 -5
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_update.py +14 -12
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/test_windows.py +37 -31
- interlatch-0.23.2/changelog.d/agent-icons.md +0 -3
- interlatch-0.23.2/changelog.d/devices-admin-only.md +0 -3
- interlatch-0.23.2/changelog.d/windows-polish.md +0 -5
- interlatch-0.23.2/src/chronicle/__main__.py +0 -3
- interlatch-0.23.2/src/chronicle/cli.py +0 -3058
- interlatch-0.23.2/src/chronicle/hub.py +0 -2308
- interlatch-0.23.2/src/chronicle/ingest.py +0 -1190
- interlatch-0.23.2/src/chronicle/llm.py +0 -577
- interlatch-0.23.2/src/chronicle/server.py +0 -3151
- interlatch-0.23.2/src/chronicle/worker.py +0 -390
- {interlatch-0.23.2 → interlatch-0.23.4}/.github/dependabot.yml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.github/workflows/changelog.yml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.github/workflows/ci.yml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.github/workflows/docs.yml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.github/workflows/release.yml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.gitignore +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/.python-version +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/LICENSE +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/ROADMAP.ja.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/ROADMAP.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/SECURITY.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/changelog.d/README.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/.dockerignore +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/.env.example +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/Caddyfile +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/Dockerfile +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/compose.yaml +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docker/wheels/.gitignore +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/_site/hooks.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/cli.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/configuration.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/design/ja/learning.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/design/learning.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/devices.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/diagrams/analysis.excalidraw.svg +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/diagrams/architecture.excalidraw.svg +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/docker.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/images/demo.gif +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/images/home.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/images/map.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/images/palette.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/images/session.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/install.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/analysis.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/cli.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/configuration.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/devices.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/docker.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/install.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/join-a-hub.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/mcp.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/moving-from-chronicle.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/postgres.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/sources.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/suggestions.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/troubleshooting.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/ja/vscode.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/join-a-hub.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/mcp.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/moving-from-chronicle.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/postgres.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/suggestions.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/troubleshooting.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/docs/vscode.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/.firebaserc +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/.gitignore +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/README.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/firebase.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/firestore.indexes.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/leaderboard/firestore.rules +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/art.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/filing.html +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/loops.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/loops.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/members.js +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/render.html +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/scenes-more.js +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/icons3d/scenes.html +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/Chronicle.icns +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/build.sh +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/entitlements.plist +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/icon-3d.webp +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/icon-blueprint.webp +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/macos/icon.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/packaging/release.py +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/__init__.py +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/core}/agents.py +0 -0
- /interlatch-0.23.2/src/chronicle/i18n_ja.py → /interlatch-0.23.4/src/interlatch/core/i18n/ja.py +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/core}/redact.py +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch/runtime}/tailnet.py +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/AGENT-ICONS.txt +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/PLEX-OFL.txt +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-antigravity.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-bob.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-chatgpt.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-claude-ai.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-claude.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-codex.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/agent-copilot.svg +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-book.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-camera.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-chip.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-clock.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-cloud.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-coins.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-container.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-dashboard.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-dex.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-document.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-flag.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-folder.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-gateway.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-gears.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-glitch.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-globe.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-laptop.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-log.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-lumi.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-magnifier.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-pip.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-plug.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-rack.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/art-tink.webp +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/boot.js +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/favicon.png +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/i18n.js +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/icon-180.png +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/icon-192.png +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/icon-512.png +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/icon.png +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/index.html +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/learning.js +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/manifest.webmanifest +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/panel.css +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/panel.html +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/panel.js +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-mono-400.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-mono-500.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-mono-600.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-sans-400.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-sans-500.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-sans-600.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/plex-sans-700.woff2 +0 -0
- {interlatch-0.23.2/src/chronicle → interlatch-0.23.4/src/interlatch}/web/rough.js +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/antigravity_fixture.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/codex_fixture.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/copilot_fixture.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/golden.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/cli.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/diagram.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/parsers/bob.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/parsers/claude_code.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/parsers/codex.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/parsers/copilot.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/goldens/systems.json +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/tests/windows_smoke.py +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/uv.lock +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/.vscodeignore +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/LICENSE +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/README.md +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/extension.js +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/media/icon.png +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/media/interlatch.svg +0 -0
- {interlatch-0.23.2 → interlatch-0.23.4}/vscode-extension/package.json +0 -0
|
@@ -3,6 +3,33 @@
|
|
|
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.3 (2026-10-14)
|
|
7
|
+
|
|
8
|
+
- **`python -m interlatch`:** Interlatch's Python package is now `interlatch` too, so it runs as `python -m interlatch`.
|
|
9
|
+
Hooks, background tasks and MCP servers set up with `python -m chronicle` keep working, as does the `chronicle`
|
|
10
|
+
command.
|
|
11
|
+
- **Agents on Home:** a table with one row per coding agent: whether it is connected (or imported, or has issues),
|
|
12
|
+
when it was last used, and its sessions, active time, prompts, tool calls, lines changed, tokens, est. cost and
|
|
13
|
+
knowledge for the period, each with an inline bar. A dash marks what an agent doesn't record (a ChatGPT export has
|
|
14
|
+
no tokens); click a row to see only that agent, or its status to open it in **Sources**.
|
|
15
|
+
- **Gemini costs:** Google Antigravity sessions, and GitHub Copilot sessions on Gemini models, now show an estimated
|
|
16
|
+
cost at Google's Gemini API list prices instead of $0 ([Sources](docs/sources.md)). The next sync re-prices the
|
|
17
|
+
sessions already recorded. Analysis through an OpenAI-compatible provider on a Gemini model is priced the same way.
|
|
18
|
+
|
|
19
|
+
## 0.23.2 (2026-10-14)
|
|
20
|
+
|
|
21
|
+
- **Hub computers stay with admins:** on a hub with people, a member or read-only person no longer receives the hub's
|
|
22
|
+
computers, its team store's database, host and status, or its allowed sign-ins; only admins (and the hub computer
|
|
23
|
+
itself) do.
|
|
24
|
+
- **Agent logos:** the Sessions list and its agent filter, Sources, MCP and the menu-bar panel mark each session and
|
|
25
|
+
source with its agent's own logo (Claude Code, Codex, GitHub Copilot, IBM Bob, Google Antigravity, claude.ai,
|
|
26
|
+
ChatGPT) instead of a colour dot.
|
|
27
|
+
- **Windows polish:** The dashboard can show an Interlatch icon in the notification area (turn on the menu-bar icon
|
|
28
|
+
under **Status › Recording**, or run `interlatch ui --menu-bar`): click it to open the dashboard, right-click for Sync
|
|
29
|
+
Now and Quit, which stops the dashboard until you next sign in. Release notifications show as Windows toasts. The VS
|
|
30
|
+
Code extension's file history and folder list, hub folders and projects, and a person's projects now match Windows
|
|
31
|
+
paths however they're spelled (`C:\work\app`, `c:/work/app`).
|
|
32
|
+
|
|
6
33
|
## 0.23.1 (2026-10-13)
|
|
7
34
|
|
|
8
35
|
- **`agents-chronicle` is retired:** Interlatch is published only as `interlatch` now, and `agents-chronicle` is no
|
|
@@ -4,9 +4,9 @@ Thanks for helping. Interlatch is a small Python project with no build step for
|
|
|
4
4
|
|
|
5
5
|
1. `uv sync && uv run pytest -q` runs the tests in about 40 seconds. They use a fake `claude` binary and synthetic
|
|
6
6
|
Codex, Copilot, Bob and Antigravity stores, so they never touch your real data or spend tokens.
|
|
7
|
-
2. `uv run python -m
|
|
7
|
+
2. `uv run python -m interlatch ui --port 8799` serves the dashboard from your checkout. To work on it without your
|
|
8
8
|
own sessions, build the demo home first (see [Demo data](docs/development.md#demo-data)).
|
|
9
|
-
3. `uv run --extra app python -m
|
|
9
|
+
3. `uv run --extra app python -m interlatch app` runs the macOS app from the checkout.
|
|
10
10
|
4. `uvx pre-commit install` checks each commit the way CI does: secrets, `ruff check`, the lockfile, the workflows
|
|
11
11
|
([Pre-commit hooks](docs/development.md#pre-commit-hooks)).
|
|
12
12
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: interlatch
|
|
3
|
-
Version: 0.23.
|
|
3
|
+
Version: 0.23.4
|
|
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/
|
|
@@ -201,7 +201,8 @@ team's hub also runs [in Docker](https://github.com/Chatixia-AI/interlatch/blob/
|
|
|
201
201
|
**How do I remove it?** `interlatch uninstall` removes the hooks, background agents and MCP registrations and keeps
|
|
202
202
|
your data; add `--purge` to delete the data too.
|
|
203
203
|
|
|
204
|
-
|
|
204
|
+
More questions, on privacy, cost, teams and updating, are answered in the [FAQ](https://github.com/Chatixia-AI/interlatch/blob/main/docs/faq.md). Something not
|
|
205
|
+
working? See [Troubleshooting](https://github.com/Chatixia-AI/interlatch/blob/main/docs/troubleshooting.md).
|
|
205
206
|
|
|
206
207
|
## Documentation
|
|
207
208
|
|
|
@@ -211,7 +212,7 @@ Something not working? See [Troubleshooting](https://github.com/Chatixia-AI/inte
|
|
|
211
212
|
[Joining your team's hub](https://github.com/Chatixia-AI/interlatch/blob/main/docs/join-a-hub.md) · [A copy in Postgres](https://github.com/Chatixia-AI/interlatch/blob/main/docs/postgres.md) ·
|
|
212
213
|
[What gets recorded and how analysis works](https://github.com/Chatixia-AI/interlatch/blob/main/docs/analysis.md) ·
|
|
213
214
|
[Configuration](https://github.com/Chatixia-AI/interlatch/blob/main/docs/configuration.md) · [Data and privacy](https://github.com/Chatixia-AI/interlatch/blob/main/docs/privacy.md) ·
|
|
214
|
-
[Troubleshooting](https://github.com/Chatixia-AI/interlatch/blob/main/docs/troubleshooting.md) · [Moving from Chronicle](https://github.com/Chatixia-AI/interlatch/blob/main/docs/moving-from-chronicle.md) ·
|
|
215
|
+
[FAQ](https://github.com/Chatixia-AI/interlatch/blob/main/docs/faq.md) · [Troubleshooting](https://github.com/Chatixia-AI/interlatch/blob/main/docs/troubleshooting.md) · [Moving from Chronicle](https://github.com/Chatixia-AI/interlatch/blob/main/docs/moving-from-chronicle.md) ·
|
|
215
216
|
[Development](https://github.com/Chatixia-AI/interlatch/blob/main/docs/development.md)
|
|
216
217
|
|
|
217
218
|
## Contributing
|
|
@@ -164,7 +164,8 @@ Windows のコンピューターからのチームのハブへの参加はまだ
|
|
|
164
164
|
**削除するには?** `interlatch uninstall` でフック、バックグラウンドのエージェント、MCP の登録を削除します(データは残ります)。
|
|
165
165
|
データも消すには `--purge` を付けます。
|
|
166
166
|
|
|
167
|
-
|
|
167
|
+
プライバシー、費用、チーム、アップデートなど、ほかの質問は[よくある質問](docs/ja/faq.md)にあります。うまく動かないときは
|
|
168
|
+
[トラブルシューティング](docs/ja/troubleshooting.md)を参照してください。
|
|
168
169
|
|
|
169
170
|
## ドキュメント
|
|
170
171
|
|
|
@@ -173,7 +174,7 @@ Windows のコンピューターからのチームのハブへの参加はまだ
|
|
|
173
174
|
[スマートフォンとほかのコンピューター](docs/ja/devices.md) · [Docker でハブを動かす](docs/ja/docker.md) ·
|
|
174
175
|
[チームのハブに参加する](docs/ja/join-a-hub.md) · [Postgres へのコピー](docs/ja/postgres.md) ·
|
|
175
176
|
[記録内容と分析の仕組み](docs/ja/analysis.md) · [設定](docs/ja/configuration.md) ·
|
|
176
|
-
[データとプライバシー](docs/ja/privacy.md) · [トラブルシューティング](docs/ja/troubleshooting.md) ·
|
|
177
|
+
[データとプライバシー](docs/ja/privacy.md) · [よくある質問](docs/ja/faq.md) · [トラブルシューティング](docs/ja/troubleshooting.md) ·
|
|
177
178
|
[Chronicle からの移行](docs/ja/moving-from-chronicle.md) · [開発](docs/ja/development.md)
|
|
178
179
|
|
|
179
180
|
## コントリビュート
|
|
@@ -166,7 +166,8 @@ team's hub also runs [in Docker](docs/docker.md).
|
|
|
166
166
|
**How do I remove it?** `interlatch uninstall` removes the hooks, background agents and MCP registrations and keeps
|
|
167
167
|
your data; add `--purge` to delete the data too.
|
|
168
168
|
|
|
169
|
-
|
|
169
|
+
More questions, on privacy, cost, teams and updating, are answered in the [FAQ](docs/faq.md). Something not
|
|
170
|
+
working? See [Troubleshooting](docs/troubleshooting.md).
|
|
170
171
|
|
|
171
172
|
## Documentation
|
|
172
173
|
|
|
@@ -176,7 +177,7 @@ Something not working? See [Troubleshooting](docs/troubleshooting.md).
|
|
|
176
177
|
[Joining your team's hub](docs/join-a-hub.md) · [A copy in Postgres](docs/postgres.md) ·
|
|
177
178
|
[What gets recorded and how analysis works](docs/analysis.md) ·
|
|
178
179
|
[Configuration](docs/configuration.md) · [Data and privacy](docs/privacy.md) ·
|
|
179
|
-
[Troubleshooting](docs/troubleshooting.md) · [Moving from Chronicle](docs/moving-from-chronicle.md) ·
|
|
180
|
+
[FAQ](docs/faq.md) · [Troubleshooting](docs/troubleshooting.md) · [Moving from Chronicle](docs/moving-from-chronicle.md) ·
|
|
180
181
|
[Development](docs/development.md)
|
|
181
182
|
|
|
182
183
|
## Contributing
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
- **What needs you, and where the project is going:** a project's page now starts with **Needs you**: changes not
|
|
2
|
+
committed and commits on no remote, each with how long it has waited, and the decisions and open questions the last
|
|
3
|
+
sessions left to you (amber after two days). Beside it, the project's own `ROADMAP.md`, `BACKLOG.md` or `TODO.md`
|
|
4
|
+
by section, or else a backlog of its to-do items and open threads ([A project's page](docs/dashboard.md#a-projects-page)).
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
- **A project's page tells you where you left off:** it opens on the last session's goal and what it left open, the
|
|
2
|
+
sessions before it, the project folder's git state (branch, uncommitted changes, last commit, other worktrees) and
|
|
3
|
+
the work week by week with the pull requests and commits it made. The knowledge base, lessons, sessions, artifacts
|
|
4
|
+
and usage numbers move into tabs. On a hub with people it shows whose each session is
|
|
5
|
+
([A project's page](docs/dashboard.md#a-projects-page)).
|
|
@@ -39,7 +39,7 @@ while [ $# -gt 0 ]; do
|
|
|
39
39
|
shift
|
|
40
40
|
done
|
|
41
41
|
|
|
42
|
-
[ -f "$TREE/pyproject.toml" ] && [ -d "$TREE/src/chronicle" ] || { echo "dev.sh: $TREE is not an Interlatch checkout" >&2; exit 1; }
|
|
42
|
+
[ -f "$TREE/pyproject.toml" ] && { [ -d "$TREE/src/interlatch" ] || [ -d "$TREE/src/chronicle" ]; } || { echo "dev.sh: $TREE is not an Interlatch checkout" >&2; exit 1; }
|
|
43
43
|
|
|
44
44
|
listening() { lsof -nP -iTCP:"$1" -sTCP:LISTEN >/dev/null 2>&1; }
|
|
45
45
|
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
| [What gets recorded and how analysis works](analysis.md) | Session data, knowledge kinds, the analysis pipeline and its cost |
|
|
19
19
|
| [Configuration](configuration.md) | Every `config.toml` setting |
|
|
20
20
|
| [Data and privacy](privacy.md) | What is stored where, and what leaves your machine |
|
|
21
|
+
| [FAQ](faq.md) | Short answers to the questions people ask most: privacy, cost, agents, teams, updating |
|
|
21
22
|
| [Troubleshooting](troubleshooting.md) | Known issues and common problems |
|
|
22
23
|
| [Moving from Chronicle](moving-from-chronicle.md) | Interlatch was called Chronicle: what moves by itself when you update, and what keeps working |
|
|
23
24
|
| [Development](development.md) | Tests, building the app, releasing, demo data, code layout |
|
|
@@ -198,7 +198,8 @@ interlatch config set analysis.backend openai
|
|
|
198
198
|
`max_output_tokens`. Anthropic and Bedrock calls send `effort` and allow 32,000 output tokens by default.
|
|
199
199
|
|
|
200
200
|
Cost: with a provider, the cost is what the API reports (OpenRouter) or an estimate from the token counts at
|
|
201
|
-
Anthropic's or
|
|
201
|
+
Anthropic's, OpenAI's or Google's list prices (Anthropic, Bedrock, OpenAI, and Gemini models on an OpenAI-compatible
|
|
202
|
+
server); Azure, Ollama and other models show tokens only. Otherwise,
|
|
202
203
|
analysis runs through your own Claude Code or Codex login, or your Bob API key (Bob reports what each analysis cost).
|
|
203
204
|
With Claude, the reported cost is the API
|
|
204
205
|
list-price equivalent: sessions averaged about $0.38 each with Sonnet (digests average ~150k characters), and
|
|
@@ -71,9 +71,11 @@ There is no overdue counter or required backlog. Changed lesson material receive
|
|
|
71
71
|
in progress are excluded.
|
|
72
72
|
|
|
73
73
|
Pages: Home (active-time headline with active days and longest run; stat tiles with sparklines and a per-day rate
|
|
74
|
-
until a full prior period exists to compare against;
|
|
75
|
-
|
|
76
|
-
|
|
74
|
+
until a full prior period exists to compare against; an **Agents** table with each agent's status from Sources, when
|
|
75
|
+
it was last used and its numbers for the period as inline bars, a dash where an agent doesn't record a metric (a chat
|
|
76
|
+
export has no tokens or cost), and a click on a row filtering Home to that agent; daily chart with a 7-day average;
|
|
77
|
+
outcome breakdown; activity calendar with streaks; busiest hour; projects, tools with failed calls and models), a sortable, filterable
|
|
78
|
+
session list, project cards with 12 weeks of activity (in [your own groups](#project-groups)), [project pages](#a-projects-page), the [Systems map](#systems-map), session pages (headline figures, the summary and the knowledge
|
|
77
79
|
it produced up top, then **Details**, where a session opens: goal, highlights, open threads, the knowledge items,
|
|
78
80
|
context-window chart with compactions, tools, files, subagents, and the [artifacts](#artifacts) the session made; or
|
|
79
81
|
**Transcript**, where a search result opens: the conversation with one-line tool calls that expand to their input and
|
|
@@ -94,6 +96,45 @@ there with the terms still marked. Glossary
|
|
|
94
96
|
terms are underlined wherever they appear (transcripts, knowledge, summaries): hover for the definition, click for
|
|
95
97
|
the entry. Every chart has a table view; light and dark themes.
|
|
96
98
|
|
|
99
|
+
## A project's page
|
|
100
|
+
|
|
101
|
+
A project's page is for coming back to a project. Under its name: whether it is **Active** (a session in the last
|
|
102
|
+
week), **Quiet** (in the last month) or **Dormant**, when the last session was, and its sessions, active time, tokens
|
|
103
|
+
and estimated API cost. Below that, the overview from its knowledge base says what the project is.
|
|
104
|
+
|
|
105
|
+
**Overview** shows where things stand, read from your sessions and git, with nothing written by a model:
|
|
106
|
+
|
|
107
|
+
- **Needs you,** shown only when something waits:
|
|
108
|
+
- **Not saved in git yet:** tracked files changed but not committed, with the date of the oldest edit, and commits
|
|
109
|
+
on no remote branch, with the oldest one's date (none counted in a repository without remotes). New, untracked
|
|
110
|
+
files are only counted, since build output and scratch files stay there for good.
|
|
111
|
+
- **Decisions and open questions:** what the last three analyzed sessions left open that waits on a person (a
|
|
112
|
+
decision, an approval, an answer), picked by how the session's analysis worded it, so check it before acting.
|
|
113
|
+
- Anything waiting more than two days turns amber. Nothing turns red.
|
|
114
|
+
- **Roadmap:** when the folder, or its repository's root, has a `ROADMAP.md`, `BACKLOG.md`, `TODO.md` or `TODOS.md`
|
|
115
|
+
(there or in `docs/`, in any case): its first three `##` sections with their items (each top-level bullet by its
|
|
116
|
+
bold lead or first words, or else its `###` headings), how many checkboxes are open and done, and when the file was
|
|
117
|
+
last committed. Without one, **Backlog** lists the project's to-do items (**Done** dismisses one) and the knowledge
|
|
118
|
+
base's open threads, as of its last update.
|
|
119
|
+
- **Where you left off:** the last session's goal, how it ended and what it left open, then the four sessions before
|
|
120
|
+
it, each opening to its own goal and open threads. These are what each session left open when it ended: a later
|
|
121
|
+
session, or work you did outside one, may have dealt with them since.
|
|
122
|
+
- **The folder now:** the folder's git branch and how far it is from its upstream, how many changes aren't committed,
|
|
123
|
+
the last commit and the repository's other worktrees. It shows only in a browser on the computer the folder is on.
|
|
124
|
+
Git only reads: it takes no lock, and the repository's own hooks and fsmonitor don't run.
|
|
125
|
+
- **Week by week:** each week with sessions, newest first, with its sessions and their outcomes, the pull requests
|
|
126
|
+
they opened and the commits they made (each counted once), and the quiet weeks between marked.
|
|
127
|
+
|
|
128
|
+
The other tabs hold the rest: **Working here** (the knowledge base, its [architecture sketch](#architecture-sketch)
|
|
129
|
+
and the glossary), **Knowledge**, **Sessions**, **Artifacts** and **Usage** (the totals and the most edited files).
|
|
130
|
+
The tab you pick stays in the address, so a link or a reload opens it again.
|
|
131
|
+
|
|
132
|
+
The git rows and the roadmap file are read only in a browser on the computer the folder is on. On a hub with people,
|
|
133
|
+
the cards are **Needs attention** and **Where the team left off**, and each session shows whose it is. Pull requests come
|
|
134
|
+
from the transcripts computers send (`share = "everything"`), or from the links a session lists when a computer shares
|
|
135
|
+
knowledge; commits only from transcripts. Someone limited to some projects sees the sessions, not their pull requests,
|
|
136
|
+
as on a session's page.
|
|
137
|
+
|
|
97
138
|
## Project groups
|
|
98
139
|
|
|
99
140
|
Put related projects under one heading, such as **Aktio** for every Aktio repository, on the Projects page and in
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Build a demo Interlatch home from made-up sessions, for screenshots and trying the dashboard without your own data.
|
|
2
2
|
|
|
3
3
|
uv run python docs/demo/make_demo.py /tmp/interlatch-demo
|
|
4
|
-
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m
|
|
4
|
+
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m interlatch ui --port 8898 --open
|
|
5
5
|
|
|
6
6
|
It writes synthetic Claude Code transcripts for a fictional developer (five projects, about six weeks), then runs the
|
|
7
7
|
real pipeline over them: sync, analysis, knowledge bases, glossary and weekly reviews. The only stand-in is `claude`:
|
|
@@ -529,7 +529,7 @@ def main() -> None:
|
|
|
529
529
|
for w in range(1, WEEKS_REVIEWED + 1):
|
|
530
530
|
week = (now - timedelta(weeks=w)).strftime("%G-W%V")
|
|
531
531
|
chronicle("review", week)
|
|
532
|
-
print(f"\nDemo ready. Open it with:\n INTERLATCH_HOME={home} uv run python -m
|
|
532
|
+
print(f"\nDemo ready. Open it with:\n INTERLATCH_HOME={home} uv run python -m interlatch ui --port 8898 --open")
|
|
533
533
|
|
|
534
534
|
|
|
535
535
|
if __name__ == "__main__":
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""Record the README demo video: a scripted walk through the dashboard on the demo data.
|
|
2
2
|
|
|
3
3
|
uv run python docs/demo/make_demo.py /tmp/interlatch-demo
|
|
4
|
-
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m
|
|
4
|
+
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m interlatch ui --port 8898
|
|
5
5
|
uv run --with playwright python docs/demo/record_demo.py --port 8898
|
|
6
6
|
|
|
7
7
|
It drives headless Chromium through Home, a session (a glossary hover, an expanded tool call), the ⌘K palette, the
|
|
@@ -116,19 +116,66 @@ Excalidraw VS Code extension (`pomdtr.excalidraw-editor`) or on excalidraw.com;
|
|
|
116
116
|
|
|
117
117
|
## Code layout
|
|
118
118
|
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
`
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
119
|
+
The code is the `interlatch` package in `src/interlatch/` (`src/chronicle/` only forwards `python -m chronicle`,
|
|
120
|
+
which installs from before the rename still run):
|
|
121
|
+
|
|
122
|
+
- `core/`: configuration, session records, paths, translations, agent names, pricing, redaction, this computer's
|
|
123
|
+
identity, and what counts as an artifact a session made
|
|
124
|
+
- `storage/`: the SQLite archive (schema, migrations, connections) and the optional Postgres stores
|
|
125
|
+
- `sources/`: where each agent keeps its files (`discovery.py`), a reader per agent (`claude/`, `codex/`, `copilot.py`, `bob.py`, `antigravity.py`) and per chat export
|
|
126
|
+
(`claude/export.py`, `chatgpt.py`)
|
|
127
|
+
- `artifacts/`: what sessions made, where each stands, and opening it
|
|
128
|
+
- `ingestion/`: syncing every source (`service.py`): the raw-file archive, storing parsed sessions, chat imports,
|
|
129
|
+
agent memory and history, forgetting
|
|
130
|
+
- `analysis/`: condensing a transcript (`digest.py`), asking a model for its lessons (`session.py`), screening
|
|
131
|
+
imported chats, the queue and the worker; `analysis/runners/` asks the model, through an agent's CLI or a
|
|
132
|
+
provider's API
|
|
133
|
+
- `knowledge/`: per-project knowledge bases (`synthesize.py`), the maturity ladder, glossaries, case files, learning
|
|
134
|
+
topics, friction, suggestions, instruction files, the weekly review
|
|
135
|
+
- `projects/`: folders that belong together, project names, which project another computer's folder belongs to
|
|
136
|
+
(`routing.py`), the systems map
|
|
137
|
+
- `sharing/`: a hub and the computers that join it: the protocol, tokens, the client and what it pushes and pulls,
|
|
138
|
+
the hub's receiver, projects on the hub, people and what each may see, the Team page's news, the leaderboard
|
|
139
|
+
- `application/`: what a worker run does from start to finish (`workflows.py`), session records and search, which
|
|
140
|
+
span the features
|
|
141
|
+
- `interfaces/`: the MCP server (`mcp.py`) and the files Interlatch exports (`exports/`: the Markdown vault, session
|
|
142
|
+
exports, Excalidraw diagrams)
|
|
143
|
+
- `runtime/`: Interlatch on this computer: installing it (hooks, MCP servers, background jobs), connecting agents
|
|
144
|
+
(`connectors.py`), the status line, moving from Chronicle, updates, notifications, the hub in a container;
|
|
145
|
+
`runtime/platforms/`: Windows (Task Scheduler, the notification area), the macOS app and its menu-bar icon
|
|
146
|
+
- `interfaces/cli/`: the command line: `parser.py` assembles the commands, and each module in `commands/` holds a
|
|
147
|
+
group of them (recording, archive, knowledge, setup, sharing, operations), each command's options beside its code;
|
|
148
|
+
`cli.py` at the top is the entry point the `interlatch` command runs
|
|
149
|
+
- `interfaces/web/`: the dashboard: `server.py` starts it, `handler.py` checks who asks, `routes.py` lists every route
|
|
150
|
+
with who may call it and what answers it, mostly a function in `api/`, where each page's reads and actions are
|
|
151
|
+
functions of a `Context` (the config, this request's connection, the jobs), one module per feature; `app.py` holds
|
|
152
|
+
what lives as long as the dashboard; `assets.py` serves the page from `web/`; `packaging/macos/` builds the app
|
|
153
|
+
|
|
154
|
+
Each layer imports only the ones below it: `core`, then `storage` and `sources`, then the features (`ingestion`,
|
|
155
|
+
`analysis`, `knowledge`, `projects`, `artifacts`, `sharing`), then `application`, then `interfaces`; `runtime` starts
|
|
156
|
+
the dashboard only from the modules that compose it. `tests/test_architecture.py` checks every import against this.
|
|
157
|
+
|
|
158
|
+
Where to add:
|
|
159
|
+
|
|
160
|
+
- **a source** (another coding agent or chat export): a reader in `sources/` that returns `ParsedSession`s
|
|
161
|
+
(`core/sessions.py`; `sources/builder.py` builds one for any agent that isn't Claude Code), where it keeps its files
|
|
162
|
+
in `sources/discovery.py`, its sync in `ingestion/service.py`, connecting it in `runtime/connectors.py`
|
|
163
|
+
- **an analysis backend**: a `Runner` in `analysis/runners/` (`base.py` is the contract), named in `factory.py`; a
|
|
164
|
+
model provider's API is a `Provider` in `analysis/runners/settings.py`
|
|
165
|
+
- **a dashboard endpoint**: a function of a `Context` in the feature's module in `interfaces/web/api/`, its route and
|
|
166
|
+
who may call it in `interfaces/web/routes.py`, and its row in `ROUTES` in `tests/test_route_matrix.py` (a route
|
|
167
|
+
without one fails the suite)
|
|
168
|
+
- **a command**: `add_<command>` and `cmd_<command>` in the fitting group in `interfaces/cli/commands/`, and the
|
|
169
|
+
command in `COMMANDS` in `interfaces/cli/parser.py`, whose order is `interlatch --help`'s; `tests/goldens/cli.json`
|
|
170
|
+
pins it (rerun with `UPDATE_GOLDENS=1`)
|
|
171
|
+
- **an MCP tool**: `TOOLS` in `interfaces/mcp.py`
|
|
172
|
+
|
|
173
|
+
The dashboard page runs under a Content-Security-Policy (`PAGE_CSP` in `interfaces/web/assets.py`) that allows scripts and styles
|
|
127
174
|
from its own files only. Add no inline `<script>` or `on…=` attribute to `index.html`, and give `h()` a style as an
|
|
128
175
|
object (`style: { "--h": "40px" }`), never a string: a string becomes a style attribute the policy refuses.
|
|
129
176
|
`tests/test_security.py` checks both.
|
|
130
177
|
|
|
131
|
-
`ee/` is Interlatch Enterprise: its own package (`
|
|
178
|
+
`ee/` is Interlatch Enterprise: its own package (`interlatch_ee`) under the [Interlatch Enterprise License](../ee/LICENSE),
|
|
132
179
|
left out of the MIT wheel and sdist. The core never imports it; [ee/README.md](../ee/README.md) says what belongs there.
|
|
133
180
|
|
|
134
181
|
## Trying a change
|
|
@@ -155,7 +202,7 @@ come from it.
|
|
|
155
202
|
|
|
156
203
|
```bash
|
|
157
204
|
uv run python docs/demo/make_demo.py /tmp/interlatch-demo
|
|
158
|
-
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m
|
|
205
|
+
INTERLATCH_HOME=/tmp/interlatch-demo/home uv run python -m interlatch ui --port 8898 --open
|
|
159
206
|
```
|
|
160
207
|
|
|
161
208
|
The README's GIF and tour video come from it too. With that dashboard running, `docs/demo/record_demo.py` drives
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
# FAQ
|
|
2
|
+
|
|
3
|
+
[← Interlatch](../README.md) · [Docs index](README.md)
|
|
4
|
+
|
|
5
|
+
Short answers to the questions people ask most, each linking to the page with the details. Something not working?
|
|
6
|
+
See [Troubleshooting](troubleshooting.md).
|
|
7
|
+
|
|
8
|
+
## Getting started
|
|
9
|
+
|
|
10
|
+
**What does Interlatch do that my agent's own memory doesn't?** An agent's memory (`CLAUDE.md`, `AGENTS.md`, its
|
|
11
|
+
memory notes) is what you or that agent wrote down, for that agent. Interlatch records every session from every agent
|
|
12
|
+
you use, keeps the transcripts after Claude Code deletes them (at 30 days), pulls out what was learned with a link to
|
|
13
|
+
the session it came from, and gives it to all your agents through one [MCP server](mcp.md). It can also propose
|
|
14
|
+
lines for your instruction files, which it writes only when you approve them ([Suggestions](suggestions.md)).
|
|
15
|
+
|
|
16
|
+
**Which agents does it record?** Claude Code, Codex, Codex Cloud, GitHub Copilot (the CLI and Copilot Chat in VS
|
|
17
|
+
Code), IBM Bob and Google Antigravity, plus chats you import from claude.ai and ChatGPT ([Sources](sources.md)).
|
|
18
|
+
Claude Desktop, Cursor, Windsurf and Gemini CLI aren't recorded, but they can use Interlatch's tools
|
|
19
|
+
([MCP server](mcp.md#connecting-a-client)).
|
|
20
|
+
|
|
21
|
+
**Do I need Claude Code?** No. Analysis runs through Claude Code, Codex or IBM Bob, or a model provider's API with
|
|
22
|
+
your own key: Anthropic, Amazon Bedrock, OpenAI, Azure OpenAI, OpenRouter, any OpenAI-compatible server, or Ollama on
|
|
23
|
+
your own computer. Pick one in **Status › Analysis** or with `interlatch config set analysis.backend <name>`
|
|
24
|
+
([Model providers](analysis.md#model-providers)). Recording and browsing work either way; with none set up, sessions
|
|
25
|
+
are archived and wait in the analysis queue.
|
|
26
|
+
|
|
27
|
+
**The desktop app or the command line?** The app (Apple silicon, macOS 13+) lives in the menu bar and runs its own
|
|
28
|
+
background sync. The command-line install (`uv tool install interlatch`, then `interlatch install`) runs the sync
|
|
29
|
+
and the dashboard as background agents, and is the one for an Intel Mac, Windows or Linux. Both use the same data in
|
|
30
|
+
`~/.interlatch` and can run side by side ([Install](install.md)).
|
|
31
|
+
|
|
32
|
+
**Windows or Linux?** The desktop app is macOS only. On Windows, `uv tool install interlatch` and `interlatch install`
|
|
33
|
+
work as on a Mac, with Task Scheduler running the sync and the dashboard ([Windows](install.md#windows)); a Windows
|
|
34
|
+
computer joining a team hub is untested yet. On Linux, `interlatch install` runs the sync and the dashboard as systemd user
|
|
35
|
+
units, so a Linux box can be the [hub](devices.md#a-linux-hub) for your other computers. A team's hub also runs
|
|
36
|
+
[in Docker](docker.md).
|
|
37
|
+
|
|
38
|
+
**Will it slow down my agent?** No. The session-end hook hands off to a detached process and returns in
|
|
39
|
+
milliseconds; analysis runs later in the background.
|
|
40
|
+
|
|
41
|
+
**What about the sessions I had before installing?** `interlatch install` imports the past sessions still on disk and
|
|
42
|
+
offers to analyze them: all of them, the newest 20, or later in the background. For Claude Code sessions older than
|
|
43
|
+
30 days, whose transcripts are gone, it recovers the prompts from `~/.claude/history.jsonl`. Set
|
|
44
|
+
`analysis.backfill = false` to analyze only sessions from after the install ([Configuration](configuration.md#analysis)).
|
|
45
|
+
|
|
46
|
+
## Privacy and cost
|
|
47
|
+
|
|
48
|
+
**What leaves my machine?** Only a condensed digest of each session, with secrets redacted, sent to whatever you
|
|
49
|
+
chose for analysis, through your own login or key (with Ollama, not even that). No telemetry, and nothing goes to
|
|
50
|
+
Interlatch's authors unless you join the leaderboard (below). The update check asks pypi.org for the latest version number only when you click it, unless
|
|
51
|
+
you turn on a daily check ([Data and privacy](privacy.md)).
|
|
52
|
+
|
|
53
|
+
**What does analysis cost?** Through Claude Code or Codex, analysis draws from your Claude or ChatGPT plan like any
|
|
54
|
+
other use of the agent; Bob and model providers bill your own account, and Ollama costs nothing. With Claude, in API
|
|
55
|
+
terms it averages about $0.38 per session with Sonnet. `interlatch analyze --pending --dry-run` sizes a backlog
|
|
56
|
+
before you spend anything, and `analysis.auto = false` stops automatic analysis
|
|
57
|
+
([How analysis works](analysis.md#how-analysis-works)).
|
|
58
|
+
|
|
59
|
+
**Does it change my `CLAUDE.md` or `AGENTS.md`?** Only when you approve a suggestion. It backs the file up first,
|
|
60
|
+
writes only inside its own block, and every change can be undone ([Suggestions](suggestions.md#what-interlatch-never-does)).
|
|
61
|
+
|
|
62
|
+
**Can I keep a project or a session out?** Add the project to `sources.exclude_projects` in the
|
|
63
|
+
[configuration](configuration.md); it is then never recorded, analyzed or sent to a hub. Remove a single session for
|
|
64
|
+
good with `interlatch forget <id>`.
|
|
65
|
+
|
|
66
|
+
**What is the leaderboard, and does it send my usage?** The **Leaderboard** page compares your hours, sessions and
|
|
67
|
+
tokens with other people's. Nothing is sent until you sign in there with Google. From then on, each sync sends your
|
|
68
|
+
totals for the last 7, 30 and 90 days, with the name and picture you show: no email, project, prompt or title.
|
|
69
|
+
`interlatch leaderboard leave` deletes your row and stops sending.
|
|
70
|
+
|
|
71
|
+
**Is it open source?** Yes, under the MIT license, the hub included. Only `ee/`, the features a company needs to roll
|
|
72
|
+
it out across teams (single sign-on, policies, audit export), is under the
|
|
73
|
+
[Interlatch Enterprise License](../ee/README.md).
|
|
74
|
+
|
|
75
|
+
## Your agents
|
|
76
|
+
|
|
77
|
+
**How do my agents use what it learned?** Through the MCP server, `interlatch mcp`, which `interlatch install`
|
|
78
|
+
registers with each agent you connect. It runs as a local process over stdio, and its tools only read your archive.
|
|
79
|
+
Ask an agent *"have we hit this error before?"* or *"how is billing-api deployed?"* ([MCP server](mcp.md)).
|
|
80
|
+
|
|
81
|
+
**Does it write in Japanese?** Set `[analysis] language = "ja"` (or pick it in **Status › Analysis**) and summaries,
|
|
82
|
+
knowledge, glossary and weekly reviews are written in Japanese from then on. The dashboard's own language is chosen
|
|
83
|
+
per browser in **Settings › Appearance** ([Language](analysis.md#language)).
|
|
84
|
+
|
|
85
|
+
**Does it read Slack?** No. Interlatch reads only what your coding agents write on your computer, and the chats you
|
|
86
|
+
import. When a session published a Slack canvas, the session's [Artifacts](dashboard.md#artifacts) keep its link.
|
|
87
|
+
|
|
88
|
+
## Several computers and teams
|
|
89
|
+
|
|
90
|
+
**Can I use it on my phone or across several computers?** Yes. One computer is the hub: it records, analyzes and
|
|
91
|
+
serves the dashboard, and your other computers send it their sessions. Your phone opens the hub's dashboard
|
|
92
|
+
([Phone and other computers](devices.md)).
|
|
93
|
+
|
|
94
|
+
**Do I need Tailscale?** No. Tailscale is the quickest way between your own devices, but a hub works just as well on
|
|
95
|
+
a company network or VPN behind an HTTPS proxy
|
|
96
|
+
([Reaching the hub without Tailscale](devices.md#reaching-the-hub-without-tailscale)).
|
|
97
|
+
|
|
98
|
+
**What do my teammates see of my sessions?** With `--share knowledge`, the hub gets each analyzed session's summary
|
|
99
|
+
and project lessons, never your prompts, transcripts or files. A computer that joins without it sends its
|
|
100
|
+
transcripts, so an admin can make the hub take knowledge only ([Joining your team's hub](join-a-hub.md#what-is-shared),
|
|
101
|
+
[A hub that takes knowledge only](devices.md#a-hub-that-takes-knowledge-only)).
|
|
102
|
+
|
|
103
|
+
**Can I sync `~/.interlatch` with Dropbox or iCloud?** No: a SQLite database copied while it is in use can be
|
|
104
|
+
corrupted. Use a hub, or sync the agents' session folders with Syncthing instead
|
|
105
|
+
([Without a hub](devices.md#without-a-hub-syncthing)).
|
|
106
|
+
|
|
107
|
+
**Can I keep my data in Postgres?** Interlatch keeps its own database in SQLite and can keep a copy of it in a
|
|
108
|
+
Postgres database you choose, for SQL and BI tools ([A copy in Postgres](postgres.md)).
|
|
109
|
+
|
|
110
|
+
## Updating and removing
|
|
111
|
+
|
|
112
|
+
**How do I update?** **Settings › Status › Updates** updates Interlatch the way it was installed, and restarts the
|
|
113
|
+
dashboard. From a terminal, `uv tool upgrade interlatch`. For the app, download the new release
|
|
114
|
+
([Updating](install.md#updating)).
|
|
115
|
+
|
|
116
|
+
**I used Chronicle. What happens?** Interlatch was called Chronicle. Updating moves your install and data over by
|
|
117
|
+
itself, and the `chronicle` command keeps working ([Moving from Chronicle](moving-from-chronicle.md)).
|
|
118
|
+
|
|
119
|
+
**Is the dashboard at 11524 or 8765?** New installs use <http://127.0.0.1:11524/>. Installs made before 11524 became
|
|
120
|
+
the default stay on 8765 (`[server] port` in `config.toml`), and the app picks a free port when 11524 is taken
|
|
121
|
+
([Troubleshooting](troubleshooting.md#install-and-the-app)).
|
|
122
|
+
|
|
123
|
+
**How do I remove it?** `interlatch uninstall` removes the hooks, background agents and MCP registrations and keeps
|
|
124
|
+
your data; add `--purge` to delete the data too. With the app, also turn off **Open at Login** and delete it.
|
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
| [記録される内容と分析の仕組み](analysis.md) | セッションのデータ、ナレッジの種類、分析の流れとその費用 |
|
|
19
19
|
| [設定](configuration.md) | `config.toml` のすべての設定 |
|
|
20
20
|
| [データとプライバシー](privacy.md) | 何がどこに保存され、何がマシンの外に送られるか |
|
|
21
|
+
| [よくある質問](faq.md) | よく聞かれる質問への短い答え:プライバシー、費用、エージェント、チーム、アップデート |
|
|
21
22
|
| [トラブルシューティング](troubleshooting.md) | 既知の問題とよくあるトラブル |
|
|
22
23
|
| [Chronicle からの移行](moving-from-chronicle.md) | Interlatch の以前の名前は Chronicle:アップデートで自動的に移行されるものと、そのまま使えるもの |
|
|
23
24
|
| [開発](development.md) | テスト、アプリのビルド、リリース、デモデータ、コードの構成 |
|
|
@@ -33,7 +33,7 @@ macOS 以外では ⌘ の代わりに Ctrl を使います。macOS アプリで
|
|
|
33
33
|
|
|
34
34
|
ページ:ホーム(稼働時間の見出しと稼働日数・最長連続日数、スパークライン付きの統計タイル(比較できる前の期間がそろうまでは
|
|
35
35
|
1 日あたりの値)、7 日平均付きの日次グラフ、結果の内訳、連続記録付きのアクティビティカレンダー、最も忙しい時間帯、プロジェクト、
|
|
36
|
-
失敗した呼び出しを含むツール、モデル、エージェント)、並べ替え・絞り込みできるセッション一覧、12 週間の活動を示すプロジェクトカード([自分で作るグループ](#プロジェクトのグループ)ごと)、[システムマップ](#システムマップ)、
|
|
36
|
+
失敗した呼び出しを含むツール、モデル、エージェント)、並べ替え・絞り込みできるセッション一覧、12 週間の活動を示すプロジェクトカード([自分で作るグループ](#プロジェクトのグループ)ごと)、[プロジェクトのページ](#プロジェクトのページ)、[システムマップ](#システムマップ)、
|
|
37
37
|
セッションページ(上部に主要な数値、要約、そこから得られたナレッジ。その下で**詳細**(目的、ハイライト、未解決の事項、ナレッジ、コンパクションを含む
|
|
38
38
|
コンテキストウインドウのグラフ、ツール、ファイル、サブエージェント、そのセッションが作った[成果物](#成果物)。セッションを開くと最初に表示)と**トランスクリプト**
|
|
39
39
|
(入力と出力を開ける 1 行のツール呼び出しとサブエージェントのスレッドを含む会話。検索結果から開くとこちら)を切り替えます。幅の広いウインドウでは、プロンプト、
|
|
@@ -48,6 +48,42 @@ macOS 以外では ⌘ の代わりに Ctrl を使います。macOS アプリで
|
|
|
48
48
|
その位置のトランスクリプトが語句をハイライトしたまま開きます。用語集の用語は、表示される場所(トランスクリプト、ナレッジ、要約)ではどこでも下線付きになり、
|
|
49
49
|
ホバーで定義、クリックで項目を表示します。すべてのグラフに表形式の表示があり、ライトとダークのテーマに対応しています。
|
|
50
50
|
|
|
51
|
+
## プロジェクトのページ
|
|
52
|
+
|
|
53
|
+
プロジェクトのページは、しばらく離れていたプロジェクトに戻るためのものです。名前の下には、**進行中**(1 週間以内にセッションあり)、
|
|
54
|
+
**小休止**(1 か月以内)、**休止中**のどれか、最後のセッションの時期、セッション数、稼働時間、トークン数、推定 API 費用が並びます。
|
|
55
|
+
その下に、ナレッジベースの概要がプロジェクトの説明として出ます。
|
|
56
|
+
|
|
57
|
+
**概要**タブには、セッションと git から読み取った現状を表示します。モデルが書いたものは含みません。
|
|
58
|
+
|
|
59
|
+
- **あなたの対応待ち**(待っているものがあるときだけ表示):
|
|
60
|
+
- **まだ git に保存されていないもの:** コミットしていない変更ファイル(最も古い編集の日時つき)と、どのリモートブランチにもない
|
|
61
|
+
コミット(最も古いものの日時つき。リモートのないリポジトリでは数えません)。git にない新規ファイルは数だけを示します。
|
|
62
|
+
ビルドの出力や作業用のファイルはずっとそこにあるためです。
|
|
63
|
+
- **決めることと未解決の問い:** 直近の分析済みセッション 3 つが残した事項のうち、人の判断・承認・回答を待っているもの。
|
|
64
|
+
セッションの分析での言い回しで選んでいるので、対応する前に確かめてください。
|
|
65
|
+
- 2 日より長く待っているものは琥珀色になります。赤にはなりません。
|
|
66
|
+
- **ロードマップ:** フォルダーかそのリポジトリのルートに `ROADMAP.md`、`BACKLOG.md`、`TODO.md`、`TODOS.md` のどれか
|
|
67
|
+
(そこか `docs/` の中。大文字小文字は問いません)があれば、最初の 3 つの `##` セクションとその項目(各トップレベルの箇条書きの
|
|
68
|
+
太字の見出しか冒頭、箇条書きがなければ `###` 見出し)、チェックボックスの未完了と完了の数、ファイルの最後のコミット日時を表示します。
|
|
69
|
+
ない場合は**バックログ**に、プロジェクトの「やること」(**Done** で却下)とナレッジベースの未解決の事項を、その更新時点のものとして出します。
|
|
70
|
+
- **中断したところ:** 最後のセッションの目的、終わり方、残っていること。その前の 4 つのセッションは、開くとそれぞれの目的と
|
|
71
|
+
残っていることが出ます。どれもセッションが終了した時点で残っていたことなので、その後のセッションやセッション外の作業で
|
|
72
|
+
片付いているかもしれません。
|
|
73
|
+
- **フォルダーの現在:** フォルダーの git のブランチと上流との差、未コミットの変更の数、最後のコミット、リポジトリのほかの
|
|
74
|
+
ワークツリー。フォルダーがあるコンピューター上のブラウザーでだけ表示します。git は読み取るだけでロックを取らず、
|
|
75
|
+
リポジトリのフックや fsmonitor も動きません。
|
|
76
|
+
- **週ごと:** セッションのあった週を新しい順に、その週のセッションと結果、作成したプルリクエストとコミット(それぞれ 1 回だけ
|
|
77
|
+
数えます)とともに表示し、間のセッションのない週も示します。
|
|
78
|
+
|
|
79
|
+
ほかのタブ:**作業の手引き**(ナレッジベース、[アーキテクチャ図](#アーキテクチャ図)、用語集)、**ナレッジ**、**セッション**、
|
|
80
|
+
**成果物**、**使用量**(合計と編集の多いファイル)。選んだタブはアドレスに残るので、リンクや再読み込みでも同じタブが開きます。
|
|
81
|
+
|
|
82
|
+
git の行とロードマップのファイルは、フォルダーがあるコンピューター上のブラウザーでだけ読み取ります。人のいるハブでは、カードは
|
|
83
|
+
**要対応**と**チームが中断したところ**になり、各セッションに誰のものかが出ます。プルリクエストは、コンピューターが送る
|
|
84
|
+
トランスクリプト(`share = "everything"`)から、ナレッジを共有するコンピューターではセッションが記録しているリンクから表示します。
|
|
85
|
+
コミットはトランスクリプトからだけです。一部のプロジェクトだけを見られる人には、セッションのページと同じく、プルリクエストは表示しません。
|
|
86
|
+
|
|
51
87
|
## プロジェクトのグループ
|
|
52
88
|
|
|
53
89
|
関連するプロジェクトを、Aktio のリポジトリをまとめた **Aktio** のように 1 つの見出しの下に置けます(プロジェクトページとそのサイドバー)。
|