interlatch 0.28.1__tar.gz → 0.28.3__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.
Files changed (504) hide show
  1. {interlatch-0.28.1 → interlatch-0.28.3}/CHANGELOG.md +40 -0
  2. {interlatch-0.28.1 → interlatch-0.28.3}/PKG-INFO +1 -1
  3. interlatch-0.28.3/changelog.d/hubs-page.md +4 -0
  4. {interlatch-0.28.1 → interlatch-0.28.3}/docs/README.md +1 -1
  5. {interlatch-0.28.1 → interlatch-0.28.3}/docs/cli.md +3 -3
  6. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/README.md +1 -1
  7. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/cli.md +3 -3
  8. interlatch-0.28.3/docs/ja/profiles.md +112 -0
  9. interlatch-0.28.3/docs/profiles.md +147 -0
  10. {interlatch-0.28.1 → interlatch-0.28.3}/mkdocs.yml +2 -2
  11. interlatch-0.28.3/src/interlatch/application/profiles.py +586 -0
  12. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/config.py +1 -1
  13. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/i18n/ja.py +1 -0
  14. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/profiles.py +28 -15
  15. interlatch-0.28.3/src/interlatch/interfaces/cli/commands/hubs.py +341 -0
  16. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/sharing.py +8 -5
  17. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/main.py +10 -10
  18. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/parser.py +5 -4
  19. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/mcp.py +5 -4
  20. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/__init__.py +1 -0
  21. interlatch-0.28.3/src/interlatch/interfaces/web/api/hubs.py +141 -0
  22. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/projects.py +33 -5
  23. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/status.py +26 -4
  24. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/routes.py +15 -1
  25. interlatch-0.28.3/src/interlatch/projects/hubgroups.py +69 -0
  26. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/owners.py +1 -1
  27. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/client.py +37 -1
  28. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/membership.py +1 -1
  29. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/protocol.py +4 -0
  30. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/push.py +41 -4
  31. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/receiver.py +39 -1
  32. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/app.css +15 -0
  33. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/app.js +231 -23
  34. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/ja.js +62 -0
  35. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/cli.json +236 -121
  36. interlatch-0.28.3/tests/hubs_fixture.py +22 -0
  37. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_cli_pins.py +3 -1
  38. interlatch-0.28.3/tests/test_hub_groups.py +229 -0
  39. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_instructions.py +4 -2
  40. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_profile_hubs.py +95 -1
  41. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_profile_scope.py +4 -3
  42. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_profiles.py +115 -38
  43. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_project_groups.py +1 -1
  44. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_route_matrix.py +2 -0
  45. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_security.py +7 -0
  46. interlatch-0.28.1/changelog.d/opencode-analysis.md +0 -4
  47. interlatch-0.28.1/changelog.d/profiles-agents.md +0 -4
  48. interlatch-0.28.1/changelog.d/profiles-hubs.md +0 -4
  49. interlatch-0.28.1/changelog.d/profiles.md +0 -4
  50. interlatch-0.28.1/changelog.d/record-only.md +0 -3
  51. interlatch-0.28.1/docs/ja/profiles.md +0 -108
  52. interlatch-0.28.1/docs/profiles.md +0 -146
  53. interlatch-0.28.1/src/interlatch/application/profiles.py +0 -386
  54. interlatch-0.28.1/src/interlatch/interfaces/cli/commands/profiles.py +0 -193
  55. {interlatch-0.28.1 → interlatch-0.28.3}/.github/dependabot.yml +0 -0
  56. {interlatch-0.28.1 → interlatch-0.28.3}/.github/windows-ja-qa/driver.ps1 +0 -0
  57. {interlatch-0.28.1 → interlatch-0.28.3}/.github/windows-ja-qa/ja_check.py +0 -0
  58. {interlatch-0.28.1 → interlatch-0.28.3}/.github/windows-ja-qa/report.py +0 -0
  59. {interlatch-0.28.1 → interlatch-0.28.3}/.github/windows-ja-qa/shots.py +0 -0
  60. {interlatch-0.28.1 → interlatch-0.28.3}/.github/windows-ja-qa/user.ps1 +0 -0
  61. {interlatch-0.28.1 → interlatch-0.28.3}/.github/workflows/changelog.yml +0 -0
  62. {interlatch-0.28.1 → interlatch-0.28.3}/.github/workflows/ci.yml +0 -0
  63. {interlatch-0.28.1 → interlatch-0.28.3}/.github/workflows/docs.yml +0 -0
  64. {interlatch-0.28.1 → interlatch-0.28.3}/.github/workflows/release.yml +0 -0
  65. {interlatch-0.28.1 → interlatch-0.28.3}/.github/workflows/windows-ja-qa.yml +0 -0
  66. {interlatch-0.28.1 → interlatch-0.28.3}/.gitignore +0 -0
  67. {interlatch-0.28.1 → interlatch-0.28.3}/.pre-commit-config.yaml +0 -0
  68. {interlatch-0.28.1 → interlatch-0.28.3}/.python-version +0 -0
  69. {interlatch-0.28.1 → interlatch-0.28.3}/CONTRIBUTING.md +0 -0
  70. {interlatch-0.28.1 → interlatch-0.28.3}/LICENSE +0 -0
  71. {interlatch-0.28.1 → interlatch-0.28.3}/README.ja.md +0 -0
  72. {interlatch-0.28.1 → interlatch-0.28.3}/README.md +0 -0
  73. {interlatch-0.28.1 → interlatch-0.28.3}/ROADMAP.ja.md +0 -0
  74. {interlatch-0.28.1 → interlatch-0.28.3}/ROADMAP.md +0 -0
  75. {interlatch-0.28.1 → interlatch-0.28.3}/SECURITY.md +0 -0
  76. {interlatch-0.28.1 → interlatch-0.28.3}/careers/README.md +0 -0
  77. {interlatch-0.28.1 → interlatch-0.28.3}/careers/boards.json +0 -0
  78. {interlatch-0.28.1 → interlatch-0.28.3}/careers/pipeline.py +0 -0
  79. {interlatch-0.28.1 → interlatch-0.28.3}/changelog.d/README.md +0 -0
  80. {interlatch-0.28.1 → interlatch-0.28.3}/dev.sh +0 -0
  81. {interlatch-0.28.1 → interlatch-0.28.3}/docker/.dockerignore +0 -0
  82. {interlatch-0.28.1 → interlatch-0.28.3}/docker/.env.example +0 -0
  83. {interlatch-0.28.1 → interlatch-0.28.3}/docker/Caddyfile +0 -0
  84. {interlatch-0.28.1 → interlatch-0.28.3}/docker/Dockerfile +0 -0
  85. {interlatch-0.28.1 → interlatch-0.28.3}/docker/compose.yaml +0 -0
  86. {interlatch-0.28.1 → interlatch-0.28.3}/docker/wheels/.gitignore +0 -0
  87. {interlatch-0.28.1 → interlatch-0.28.3}/docs/_site/hooks.py +0 -0
  88. {interlatch-0.28.1 → interlatch-0.28.3}/docs/analysis.md +0 -0
  89. {interlatch-0.28.1 → interlatch-0.28.3}/docs/configuration.md +0 -0
  90. {interlatch-0.28.1 → interlatch-0.28.3}/docs/dashboard.md +0 -0
  91. {interlatch-0.28.1 → interlatch-0.28.3}/docs/demo/make_demo.py +0 -0
  92. {interlatch-0.28.1 → interlatch-0.28.3}/docs/demo/record_demo.py +0 -0
  93. {interlatch-0.28.1 → interlatch-0.28.3}/docs/design/innerlatch.md +0 -0
  94. {interlatch-0.28.1 → interlatch-0.28.3}/docs/design/ja/innerlatch.md +0 -0
  95. {interlatch-0.28.1 → interlatch-0.28.3}/docs/design/ja/learning.md +0 -0
  96. {interlatch-0.28.1 → interlatch-0.28.3}/docs/design/learning.md +0 -0
  97. {interlatch-0.28.1 → interlatch-0.28.3}/docs/development.md +0 -0
  98. {interlatch-0.28.1 → interlatch-0.28.3}/docs/devices.md +0 -0
  99. {interlatch-0.28.1 → interlatch-0.28.3}/docs/diagrams/analysis.excalidraw.svg +0 -0
  100. {interlatch-0.28.1 → interlatch-0.28.3}/docs/diagrams/architecture.excalidraw.svg +0 -0
  101. {interlatch-0.28.1 → interlatch-0.28.3}/docs/docker.md +0 -0
  102. {interlatch-0.28.1 → interlatch-0.28.3}/docs/faq.md +0 -0
  103. {interlatch-0.28.1 → interlatch-0.28.3}/docs/images/demo.gif +0 -0
  104. {interlatch-0.28.1 → interlatch-0.28.3}/docs/images/home.png +0 -0
  105. {interlatch-0.28.1 → interlatch-0.28.3}/docs/images/map.png +0 -0
  106. {interlatch-0.28.1 → interlatch-0.28.3}/docs/images/palette.png +0 -0
  107. {interlatch-0.28.1 → interlatch-0.28.3}/docs/images/session.png +0 -0
  108. {interlatch-0.28.1 → interlatch-0.28.3}/docs/install.md +0 -0
  109. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/analysis.md +0 -0
  110. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/configuration.md +0 -0
  111. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/dashboard.md +0 -0
  112. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/development.md +0 -0
  113. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/devices.md +0 -0
  114. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/docker.md +0 -0
  115. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/faq.md +0 -0
  116. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/install.md +0 -0
  117. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/join-a-hub.md +0 -0
  118. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/mcp.md +0 -0
  119. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/moving-from-chronicle.md +0 -0
  120. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/party.md +0 -0
  121. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/postgres.md +0 -0
  122. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/privacy.md +0 -0
  123. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/sources.md +0 -0
  124. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/suggestions.md +0 -0
  125. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/troubleshooting.md +0 -0
  126. {interlatch-0.28.1 → interlatch-0.28.3}/docs/ja/vscode.md +0 -0
  127. {interlatch-0.28.1 → interlatch-0.28.3}/docs/join-a-hub.md +0 -0
  128. {interlatch-0.28.1 → interlatch-0.28.3}/docs/mcp.md +0 -0
  129. {interlatch-0.28.1 → interlatch-0.28.3}/docs/moving-from-chronicle.md +0 -0
  130. {interlatch-0.28.1 → interlatch-0.28.3}/docs/party.md +0 -0
  131. {interlatch-0.28.1 → interlatch-0.28.3}/docs/postgres.md +0 -0
  132. {interlatch-0.28.1 → interlatch-0.28.3}/docs/privacy.md +0 -0
  133. {interlatch-0.28.1 → interlatch-0.28.3}/docs/sources.md +0 -0
  134. {interlatch-0.28.1 → interlatch-0.28.3}/docs/suggestions.md +0 -0
  135. {interlatch-0.28.1 → interlatch-0.28.3}/docs/troubleshooting.md +0 -0
  136. {interlatch-0.28.1 → interlatch-0.28.3}/docs/vscode.md +0 -0
  137. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/.firebaserc +0 -0
  138. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/.gitignore +0 -0
  139. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/README.md +0 -0
  140. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/firebase.json +0 -0
  141. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/firestore.indexes.json +0 -0
  142. {interlatch-0.28.1 → interlatch-0.28.3}/leaderboard/firestore.rules +0 -0
  143. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/README.md +0 -0
  144. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/art.json +0 -0
  145. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/filing.html +0 -0
  146. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/loops.json +0 -0
  147. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/loops.py +0 -0
  148. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/members.js +0 -0
  149. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/render.html +0 -0
  150. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/render.py +0 -0
  151. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/scenes-more.js +0 -0
  152. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/icons3d/scenes.html +0 -0
  153. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/Chronicle.icns +0 -0
  154. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/Interlatch.spec +0 -0
  155. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/build.sh +0 -0
  156. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/entitlements.plist +0 -0
  157. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/icon-3d.webp +0 -0
  158. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/icon-blueprint-prompt.md +0 -0
  159. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/icon-blueprint.webp +0 -0
  160. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/icon.png +0 -0
  161. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/interlatch_app.py +0 -0
  162. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/macos/make_icon.py +0 -0
  163. {interlatch-0.28.1 → interlatch-0.28.3}/packaging/release.py +0 -0
  164. {interlatch-0.28.1 → interlatch-0.28.3}/pyproject.toml +0 -0
  165. {interlatch-0.28.1 → interlatch-0.28.3}/src/chronicle/__init__.py +0 -0
  166. {interlatch-0.28.1 → interlatch-0.28.3}/src/chronicle/__main__.py +0 -0
  167. {interlatch-0.28.1 → interlatch-0.28.3}/src/chronicle/windows.py +0 -0
  168. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/__init__.py +0 -0
  169. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/__main__.py +0 -0
  170. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/__init__.py +0 -0
  171. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/digest.py +0 -0
  172. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/language.py +0 -0
  173. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/queue.py +0 -0
  174. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/__init__.py +0 -0
  175. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/api.py +0 -0
  176. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/base.py +0 -0
  177. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/bob.py +0 -0
  178. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/claude.py +0 -0
  179. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/codex.py +0 -0
  180. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/factory.py +0 -0
  181. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/off.py +0 -0
  182. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/opencode.py +0 -0
  183. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/process.py +0 -0
  184. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/replies.py +0 -0
  185. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/runners/settings.py +0 -0
  186. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/screen.py +0 -0
  187. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/session.py +0 -0
  188. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/analysis/worker.py +0 -0
  189. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/application/__init__.py +0 -0
  190. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/application/records.py +0 -0
  191. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/application/search.py +0 -0
  192. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/application/workflows.py +0 -0
  193. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/artifacts/__init__.py +0 -0
  194. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/artifacts/files.py +0 -0
  195. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/artifacts/queries.py +0 -0
  196. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/cli.py +0 -0
  197. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/__init__.py +0 -0
  198. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/agents.py +0 -0
  199. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/artifact_records.py +0 -0
  200. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/diagrams.py +0 -0
  201. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/i18n/__init__.py +0 -0
  202. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/machine.py +0 -0
  203. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/paths.py +0 -0
  204. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/pricing.py +0 -0
  205. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/process.py +0 -0
  206. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/redact.py +0 -0
  207. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/sessions.py +0 -0
  208. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/core/util.py +0 -0
  209. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/__init__.py +0 -0
  210. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/analyses.py +0 -0
  211. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/archive.py +0 -0
  212. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/chat_import.py +0 -0
  213. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/deletion.py +0 -0
  214. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/history.py +0 -0
  215. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/memory.py +0 -0
  216. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/persistence.py +0 -0
  217. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/report.py +0 -0
  218. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/ingestion/service.py +0 -0
  219. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/__init__.py +0 -0
  220. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/__init__.py +0 -0
  221. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/__init__.py +0 -0
  222. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/archive.py +0 -0
  223. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/knowledge.py +0 -0
  224. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/operations.py +0 -0
  225. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/recording.py +0 -0
  226. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/commands/setup.py +0 -0
  227. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/cli/common.py +0 -0
  228. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/exports/__init__.py +0 -0
  229. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/exports/diagrams.py +0 -0
  230. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/exports/markdown.py +0 -0
  231. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/exports/sessions.py +0 -0
  232. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/exports/vault.py +0 -0
  233. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/__init__.py +0 -0
  234. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/artifacts.py +0 -0
  235. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/common.py +0 -0
  236. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/devices.py +0 -0
  237. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/hub_admin.py +0 -0
  238. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/knowledge.py +0 -0
  239. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/leaderboard.py +0 -0
  240. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/party.py +0 -0
  241. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/sessions.py +0 -0
  242. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/settings.py +0 -0
  243. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/sources.py +0 -0
  244. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/storage.py +0 -0
  245. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/api/team.py +0 -0
  246. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/app.py +0 -0
  247. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/assets.py +0 -0
  248. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/context.py +0 -0
  249. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/handler.py +0 -0
  250. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/jobs.py +0 -0
  251. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/interfaces/web/server.py +0 -0
  252. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/__init__.py +0 -0
  253. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/arena.py +0 -0
  254. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/bag.py +0 -0
  255. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/cases.py +0 -0
  256. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/formation.py +0 -0
  257. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/friction.py +0 -0
  258. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/glossary.py +0 -0
  259. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/group_graph.py +0 -0
  260. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/instructions.py +0 -0
  261. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/ladder.py +0 -0
  262. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/learning.py +0 -0
  263. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/market.json +0 -0
  264. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/party.py +0 -0
  265. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/reviews.py +0 -0
  266. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/roadmap.json +0 -0
  267. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/study.py +0 -0
  268. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/suggest.py +0 -0
  269. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/synthesize.py +0 -0
  270. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/knowledge/weekly.py +0 -0
  271. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/__init__.py +0 -0
  272. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/groups.py +0 -0
  273. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/labels.py +0 -0
  274. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/progress.py +0 -0
  275. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/routing.py +0 -0
  276. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/scope.py +0 -0
  277. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/projects/systems.py +0 -0
  278. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/__init__.py +0 -0
  279. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/connectors.py +0 -0
  280. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/container.py +0 -0
  281. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/hooks.py +0 -0
  282. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/install.py +0 -0
  283. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/migrate.py +0 -0
  284. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/notify.py +0 -0
  285. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/platforms/__init__.py +0 -0
  286. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/platforms/desktop.py +0 -0
  287. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/platforms/menubar.py +0 -0
  288. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/platforms/windows.py +0 -0
  289. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/statusline.py +0 -0
  290. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/tailnet.py +0 -0
  291. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/runtime/update.py +0 -0
  292. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/__init__.py +0 -0
  293. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/access.py +0 -0
  294. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/arena.py +0 -0
  295. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/identity.py +0 -0
  296. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/leaderboard.py +0 -0
  297. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/market.py +0 -0
  298. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/news.py +0 -0
  299. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/people.py +0 -0
  300. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/projects.py +0 -0
  301. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sharing/pull.py +0 -0
  302. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/__init__.py +0 -0
  303. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/antigravity.py +0 -0
  304. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/bob.py +0 -0
  305. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/builder.py +0 -0
  306. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/chatgpt.py +0 -0
  307. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/chats.py +0 -0
  308. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/claude/__init__.py +0 -0
  309. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/claude/export.py +0 -0
  310. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/claude/files.py +0 -0
  311. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/claude/parser.py +0 -0
  312. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/codex/__init__.py +0 -0
  313. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/codex/cloud.py +0 -0
  314. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/codex/parser.py +0 -0
  315. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/copilot.py +0 -0
  316. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/discovery.py +0 -0
  317. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/opencode.py +0 -0
  318. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/sources/prompts.py +0 -0
  319. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/__init__.py +0 -0
  320. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/fts.py +0 -0
  321. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/kv.py +0 -0
  322. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/migrations.py +0 -0
  323. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/mirror.py +0 -0
  324. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/postgres.py +0 -0
  325. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/schema.py +0 -0
  326. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/sqlite.py +0 -0
  327. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/storage/team.py +0 -0
  328. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/AGENT-ICONS.txt +0 -0
  329. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/PLEX-OFL.txt +0 -0
  330. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/adventure.js +0 -0
  331. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-antigravity.svg +0 -0
  332. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-bob.svg +0 -0
  333. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-chatgpt.svg +0 -0
  334. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-claude-ai.svg +0 -0
  335. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-claude.svg +0 -0
  336. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-codex.svg +0 -0
  337. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-copilot.svg +0 -0
  338. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/agent-opencode.svg +0 -0
  339. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-book.webp +0 -0
  340. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-camera.webp +0 -0
  341. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-chip.webp +0 -0
  342. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-clock.webp +0 -0
  343. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-cloud.webp +0 -0
  344. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-coins.webp +0 -0
  345. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-container.webp +0 -0
  346. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-dashboard.webp +0 -0
  347. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-dex.webp +0 -0
  348. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-document.webp +0 -0
  349. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-flag.webp +0 -0
  350. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-folder.webp +0 -0
  351. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-gateway.webp +0 -0
  352. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-gears.webp +0 -0
  353. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-glitch.webp +0 -0
  354. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-globe.webp +0 -0
  355. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-laptop.webp +0 -0
  356. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-log.webp +0 -0
  357. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-lumi.webp +0 -0
  358. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-magnifier.webp +0 -0
  359. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-pip.webp +0 -0
  360. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-plug.webp +0 -0
  361. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-rack.webp +0 -0
  362. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/art-tink.webp +0 -0
  363. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/battle.js +0 -0
  364. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/boot.js +0 -0
  365. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/favicon.png +0 -0
  366. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/field.js +0 -0
  367. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/i18n.js +0 -0
  368. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/icon-180.png +0 -0
  369. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/icon-192.png +0 -0
  370. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/icon-512.png +0 -0
  371. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/icon.png +0 -0
  372. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/index.html +0 -0
  373. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/innerlatch.css +0 -0
  374. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/innerlatch.js +0 -0
  375. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/learning.js +0 -0
  376. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/manifest.webmanifest +0 -0
  377. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/panel.css +0 -0
  378. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/panel.html +0 -0
  379. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/panel.js +0 -0
  380. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-mono-400.woff2 +0 -0
  381. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-mono-500.woff2 +0 -0
  382. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-mono-600.woff2 +0 -0
  383. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-sans-400.woff2 +0 -0
  384. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-sans-500.woff2 +0 -0
  385. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-sans-600.woff2 +0 -0
  386. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/plex-sans-700.woff2 +0 -0
  387. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/rough.js +0 -0
  388. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/scene.js +0 -0
  389. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/web/sprites.js +0 -0
  390. {interlatch-0.28.1 → interlatch-0.28.3}/src/interlatch/windows.py +0 -0
  391. {interlatch-0.28.1 → interlatch-0.28.3}/tests/antigravity_fixture.py +0 -0
  392. {interlatch-0.28.1 → interlatch-0.28.3}/tests/codex_fixture.py +0 -0
  393. {interlatch-0.28.1 → interlatch-0.28.3}/tests/conftest.py +0 -0
  394. {interlatch-0.28.1 → interlatch-0.28.3}/tests/copilot_fixture.py +0 -0
  395. {interlatch-0.28.1 → interlatch-0.28.3}/tests/friction_fixture.py +0 -0
  396. {interlatch-0.28.1 → interlatch-0.28.3}/tests/golden.py +0 -0
  397. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/diagram.json +0 -0
  398. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/antigravity.json +0 -0
  399. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/bob.json +0 -0
  400. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/claude_code.json +0 -0
  401. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/codex.json +0 -0
  402. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/copilot.json +0 -0
  403. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/parsers/opencode.json +0 -0
  404. {interlatch-0.28.1 → interlatch-0.28.3}/tests/goldens/systems.json +0 -0
  405. {interlatch-0.28.1 → interlatch-0.28.3}/tests/opencode_fixture.py +0 -0
  406. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_adventure_web.py +0 -0
  407. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_analysis.py +0 -0
  408. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_antigravity.py +0 -0
  409. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_architecture.py +0 -0
  410. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_arena.py +0 -0
  411. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_artifacts.py +0 -0
  412. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_bag.py +0 -0
  413. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_battle_web.py +0 -0
  414. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_bob_analysis.py +0 -0
  415. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_boot_web.py +0 -0
  416. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_careers.py +0 -0
  417. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_case_files.py +0 -0
  418. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_cases.py +0 -0
  419. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_chat_import.py +0 -0
  420. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_codex.py +0 -0
  421. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_codex_analysis.py +0 -0
  422. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_codex_cloud.py +0 -0
  423. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_container.py +0 -0
  424. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_copilot_bob.py +0 -0
  425. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_dedicated_hub.py +0 -0
  426. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_dedupe.py +0 -0
  427. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_desktop.py +0 -0
  428. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_diagram.py +0 -0
  429. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_ee_boundary.py +0 -0
  430. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_field_web.py +0 -0
  431. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_fix_effect.py +0 -0
  432. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_formation.py +0 -0
  433. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_friction.py +0 -0
  434. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_game_mode.py +0 -0
  435. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_glossary.py +0 -0
  436. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_group_graph.py +0 -0
  437. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_group_sharing.py +0 -0
  438. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_guidance.py +0 -0
  439. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_home_agents.py +0 -0
  440. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub.py +0 -0
  441. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_accept.py +0 -0
  442. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_cookie.py +0 -0
  443. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_inventory_scope.py +0 -0
  444. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_leave_join.py +0 -0
  445. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_news.py +0 -0
  446. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_payload_privacy.py +0 -0
  447. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_projects.py +0 -0
  448. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_projects_listed.py +0 -0
  449. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_purge.py +0 -0
  450. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_send_problems.py +0 -0
  451. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_hub_sharing_race.py +0 -0
  452. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_i18n_web.py +0 -0
  453. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_ingest.py +0 -0
  454. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_integration.py +0 -0
  455. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_ladder.py +0 -0
  456. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_language.py +0 -0
  457. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_leaderboard.py +0 -0
  458. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_learning_glance.py +0 -0
  459. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_learning_interests.py +0 -0
  460. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_learning_web.py +0 -0
  461. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_leave_project.py +0 -0
  462. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_legacy_package.py +0 -0
  463. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_map_goldens.py +0 -0
  464. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_market.py +0 -0
  465. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_menubar.py +0 -0
  466. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_migrate.py +0 -0
  467. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_mirror.py +0 -0
  468. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_notify.py +0 -0
  469. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_opencode.py +0 -0
  470. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_opencode_analysis.py +0 -0
  471. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_parser.py +0 -0
  472. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_parser_goldens.py +0 -0
  473. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_party.py +0 -0
  474. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_party_map.py +0 -0
  475. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_people.py +0 -0
  476. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_people_hub.py +0 -0
  477. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_people_web.py +0 -0
  478. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_project_progress.py +0 -0
  479. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_providers.py +0 -0
  480. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_queue.py +0 -0
  481. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_regressions.py +0 -0
  482. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_release.py +0 -0
  483. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_roadmap_catalog.py +0 -0
  484. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_screen.py +0 -0
  485. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_setup.py +0 -0
  486. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_statusline.py +0 -0
  487. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_study.py +0 -0
  488. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_suggest.py +0 -0
  489. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_suggest_cli.py +0 -0
  490. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_systems.py +0 -0
  491. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_team.py +0 -0
  492. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_team_home.py +0 -0
  493. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_update.py +0 -0
  494. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_weekly_reanalysis.py +0 -0
  495. {interlatch-0.28.1 → interlatch-0.28.3}/tests/test_windows.py +0 -0
  496. {interlatch-0.28.1 → interlatch-0.28.3}/tests/windows_smoke.py +0 -0
  497. {interlatch-0.28.1 → interlatch-0.28.3}/uv.lock +0 -0
  498. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/.vscodeignore +0 -0
  499. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/LICENSE +0 -0
  500. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/README.md +0 -0
  501. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/extension.js +0 -0
  502. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/media/icon.png +0 -0
  503. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/media/interlatch.svg +0 -0
  504. {interlatch-0.28.1 → interlatch-0.28.3}/vscode-extension/package.json +0 -0
@@ -3,6 +3,46 @@
3
3
  <!-- Don't add lines here: a pull request puts its line in a new file in changelog.d/ (see changelog.d/README.md),
4
4
  and each release moves the files it took into a dated section below. -->
5
5
 
6
+ ## 0.28.2 (2026-10-20)
7
+
8
+ - **Several hubs: connect your groups.** `interlatch profile` became `interlatch hubs` and `interlatch group`: add a
9
+ hub (`interlatch hubs add Acme <address> --code <code>`), then connect a group of projects to it
10
+ (`interlatch group connect "Acme work" Acme`). What the group holds goes to that hub, and changing the group on the
11
+ dashboard's Projects page moves its sessions with it. A project taken out of a connected group waits for you
12
+ instead of going back to Personal. `--profile` is now `--hub`; the old name still works
13
+ ([Several hubs on one computer](docs/profiles.md)).
14
+ - **Several hubs on the dashboard.** Settings › Devices › Hubs lists this computer's hubs and their groups, adds and
15
+ joins one, and settles folders that wait for you; a group's page has **Goes to**, which connects the group to a hub
16
+ ([Several hubs on one computer](docs/profiles.md)).
17
+ - **Moving a folder takes its sessions back from the hub that had them.** When a group, a project or a waiting folder
18
+ moves to another hub (or a group is disconnected), the hub it left takes back the sessions this computer sent it,
19
+ before anything goes to the new one. One that can't be reached takes them back at the next send. Home now shows
20
+ folders that wait for you to choose a hub under **Needs you**
21
+ ([Moving takes sessions back](docs/profiles.md#moving-takes-sessions-back)). Update your hubs too: an older hub
22
+ can't take sessions back.
23
+
24
+ ## 0.28.1 (2026-10-19)
25
+
26
+ - **Profiles, first stage:** `interlatch profile create Acme --owns ~/work/acme` makes a named profile that owns a
27
+ folder (or repositories by git remote, `--remotes`). Its sessions stay off your Personal hub, a folder two profiles
28
+ could claim waits for you (`profile waiting`, `profile choose`), and `interlatch --profile Acme <command>` runs any
29
+ command for it. Sharing with each profile's own hub comes next ([Profiles](docs/profiles.md)).
30
+ - **Profiles: agents see only their profile.** With named profiles, the MCP server and the notes at session start
31
+ show an agent only what its folder's profile owns, and nothing in a folder that waits for you to choose. Lines
32
+ proposed for your user-level CLAUDE.md and AGENTS.md come only from Personal's lessons
33
+ ([What agents see](docs/profiles.md#what-agents-see)).
34
+ - **Profiles: one computer, several hubs.** A named profile joins a hub of its own
35
+ (`interlatch --profile Acme hub join …`) and sends it only the sessions it owns, read from your one archive, with its
36
+ own token and computer ID. Teammates' lessons from each hub reach only that profile's folders, and `interlatch push`
37
+ and the background job send for every hub ([Connect a profile to its hub](docs/profiles.md#connect-a-profile-to-its-hub)).
38
+ - **OpenCode analyzes sessions:** pick OpenCode as the analyzer (`interlatch install`, `--backend opencode`, or
39
+ **Status › Analysis**) and it runs `opencode run` headless with no tools, through the providers you set up in
40
+ OpenCode, with the model you choose as `provider/model`. Install asks for the model and offers a test call. The CLI
41
+ inside the OpenCode desktop app is found too ([Analysis](docs/analysis.md)).
42
+ - **Record only:** `interlatch install --no-analysis` (or **Record only** in install's list, or **Off** in
43
+ **Status › Analysis**) records sessions and never analyzes them: no model is called and nothing is sent anywhere for
44
+ analysis. Pick an analyzer later to analyze what was recorded ([Analysis](docs/analysis.md)).
45
+
6
46
  ## 0.28.0 (2026-10-19)
7
47
 
8
48
  - **Sharing knowledge only sends only what is about the project:** a computer with `share = "knowledge"` used to send
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: interlatch
3
- Version: 0.28.1
3
+ Version: 0.28.3
4
4
  Summary: Shared memory for your coding agents: records every session (Claude Code, Codex, Copilot, Bob, Antigravity, OpenCode) locally and keeps what they learned, each lesson linked to the session it came from.
5
5
  Project-URL: Homepage, https://interlatch.com
6
6
  Project-URL: Documentation, https://interlatch.com/docs/
@@ -0,0 +1,4 @@
1
+ - **Settings › Hubs.** Each hub this computer sends to has its own card: whether sending works, the last share,
2
+ **Share now**, its dashboard (signed in as that hub's link), joining and leaving it. The Projects sidebar names the
3
+ hub each group goes to and lists folders waiting for a hub first, and the status bar names every hub
4
+ ([Several hubs on one computer](docs/profiles.md)).
@@ -14,7 +14,7 @@
14
14
  | [VS Code extension](vscode.md) | The sessions behind the open file and every file agents worked on, in VS Code's Explorer |
15
15
  | [Phone and other computers](devices.md) | The dashboard on your phone through Tailscale, and one archive for several computers (a hub) |
16
16
  | [A hub in Docker](docker.md) | Setting up a team's hub on a server, step by step: Azure, the first admin, projects, inviting the team, troubleshooting |
17
- | [Profiles: one computer, several hubs](profiles.md) | Several teams with their own hubs on one computer: which folders each profile owns, waiting folders, moving folders in and out |
17
+ | [Several hubs on one computer](profiles.md) | Several teams with their own hubs on one computer: connect your groups of projects to the hub each belongs to, waiting folders, what agents see |
18
18
  | [Joining your team's hub](join-a-hub.md) | For teammates: join with the code your admin sent, add your project folder, get teammates' lessons back |
19
19
  | [A copy in Postgres](postgres.md) | Keep a copy of your archive in a Postgres database you choose (on this computer, in Docker, or in the cloud) for SQL and BI tools |
20
20
  | [What gets recorded and how analysis works](analysis.md) | Session data, knowledge kinds, the analysis pipeline and its cost |
@@ -46,9 +46,9 @@
46
46
  | `interlatch hub people` / `hub role <email\|id> <role>` / `hub remove <email\|id>` / `hub shared-token on\|off` | On the hub: everyone with their role, the projects they see and their computers; change a role; remove someone; allow or refuse the shared token ([People and roles](devices.md#people-and-roles)) |
47
47
  | `interlatch hub add-folder <folder> --project <name>` / `hub remove-folder <folder>` / `hub folders [--list]` | On a computer that joined a hub: file a folder's sessions under a project on the hub, take a folder added by mistake back out, or show what goes where (`--list`: the hub's projects) ([Same project, different folders](devices.md#same-project-different-folders)). Sharing knowledge, `remove-folder` also has the hub delete what the computer shared from that folder ([Leaving](devices.md#leaving)) |
48
48
  | `interlatch hub leave --project <name>` / `hub rejoin --project <name>` | On a computer that shares knowledge: stop sharing to one of the hub's projects and getting its teammates' lessons, keeping what it already shared there; or start again ([Leaving](devices.md#leaving)) |
49
- | `interlatch profile create <name> [--owns <folder>]… [--remotes <pattern>]…` / `profile list` / `profile where <folder>` | Named profiles, each with its own hub: make one owning folders and repositories (their sessions so far move to it), list them, say who owns a folder and why ([Profiles](profiles.md)) |
50
- | `interlatch profile own <folder> <profile>` / `disown <folder>` / `waiting` / `choose <folder> <profile\|personal>` / `remove <profile> [--delete-data]` | Move a folder into a profile with its history, take it out (its sessions wait), list and settle waiting folders, remove a profile. `--dry-run` shows what would move; `--leave-on-hub` moves sessions Personal's hub already has |
51
- | `interlatch --profile <name> hub … \| push \| config …` | Run a hub command for a named profile: join its own hub, push its sessions, change its settings ([Connect a profile to its hub](profiles.md#connect-a-profile-to-its-hub)). Recording and analysis are Personal's. `interlatch push` sends for Personal's hub and then each profile's |
49
+ | `interlatch hubs` / `hubs add <name> [<address> --code <code>] [--all-folders]` / `hubs remove <name> [--delete-data]` | The hubs this computer sends to besides Personal's, with the groups connected to each; add one (and join it), remove one ([Several hubs on one computer](profiles.md)) |
50
+ | `interlatch group list` / `create <name> --folder <folder>…` / `add-folder` / `remove-folder <group> <folder>` / `connect <group> <hub>` / `disconnect <group>` / `where <folder>` / `waiting` / `choose <folder> <hub\|personal>` / `remove <group>` | Your groups of projects and the hub each goes to: connecting one moves its sessions so far to that hub; taking a project out of a connected group, or disconnecting it, makes it wait for you. `--dry-run` shows what would move; a hub that has sessions that move takes them back first; `--leave-on-hub` moves them even if it can't now |
51
+ | `interlatch --hub <name> hub … \| push \| config …` | Run a hub command for another of this computer's hubs: join it, push its sessions, change its settings. Recording and analysis are Personal's. `interlatch push` sends to Personal's hub and then each other one |
52
52
  | `interlatch push` | On a computer that joined a hub: send its new sessions now (the hook and the background sync do this) |
53
53
  | `interlatch container` | What the hub's Docker image runs: set the hub up from `INTERLATCH_*` variables, then serve the dashboard and sync every 15 minutes ([A hub in Docker](docker.md)) |
54
54
  | `interlatch config [edit]` | Show or edit `~/.interlatch/config.toml` |
@@ -14,7 +14,7 @@
14
14
  | [VS Code 拡張機能](vscode.md) | 開いているファイルと、エージェントが作業したすべてのファイルの背後にあるセッションを、VS Code のエクスプローラーに表示 |
15
15
  | [スマートフォンとほかのコンピューター](devices.md) | Tailscale 経由でスマートフォンからダッシュボードを開く、複数のコンピューターで 1 つのアーカイブ(ハブ) |
16
16
  | [Docker でハブを動かす](docker.md) | サーバーでチームのハブを用意する手順:Azure、最初の管理者、プロジェクト、チームの招待、トラブルシューティング |
17
- | [プロファイル:1 台のコンピューターで複数のハブ](profiles.md) | それぞれにハブがある複数のチームを 1 台で:各プロファイルが持つフォルダー、選択を待つフォルダー、フォルダーの移し方 |
17
+ | [1 台のコンピューターで複数のハブ](profiles.md) | それぞれにハブがある複数のチームを 1 台で:プロジェクトのグループをそれぞれのハブにつなぐ、選択を待つフォルダー、エージェントに見えるもの |
18
18
  | [チームのハブに参加する](join-a-hub.md) | チームメイト向け:管理者から届いたコードで参加し、プロジェクトのフォルダーを加え、チームメイトのナレッジを受け取る |
19
19
  | [Postgres へのコピー](postgres.md) | アーカイブのコピーを、選んだ Postgres データベース(このコンピューター、Docker、クラウド)に置いて SQL や BI ツールで使う |
20
20
  | [記録される内容と分析の仕組み](analysis.md) | セッションのデータ、ナレッジの種類、分析の流れとその費用 |
@@ -46,9 +46,9 @@
46
46
  | `interlatch hub people` / `hub role <email\|id> <role>` / `hub remove <email\|id>` / `hub shared-token on\|off` | ハブで:全員のロール、見えるプロジェクト、コンピューターの一覧/ロールを変える/人を外す/共有トークンを許すか拒むか([利用者とロール](devices.md#利用者とロール)) |
47
47
  | `interlatch hub add-folder <folder> --project <name>` / `hub remove-folder <folder>` / `hub folders [--list]` | ハブに参加したコンピューターで:フォルダーのセッションをハブのプロジェクトに入れる/間違えて追加したフォルダーを外す/どこに入るかを表示(`--list`:ハブのプロジェクト一覧)([同じプロジェクト、別のフォルダー](devices.md#同じプロジェクト別のフォルダー))。ナレッジを共有しているときは、`remove-folder` でそのフォルダーから共有したものもハブが削除します([やめるとき](devices.md#やめるとき)) |
48
48
  | `interlatch hub leave --project <name>` / `hub rejoin --project <name>` | ナレッジを共有するコンピューターで:ハブのプロジェクトの一つへの共有とチームメイトのナレッジの受け取りをやめる(すでに共有したものは残る)、または再開する([やめるとき](devices.md#やめるとき)) |
49
- | `interlatch profile create <name> [--owns <folder>]… [--remotes <pattern>]…` / `profile list` / `profile where <folder>` | それぞれにハブを持つ名前付きプロファイル:フォルダーとリポジトリを持つプロファイルを作る(これまでのセッションも移る)、一覧する、フォルダーの持ち主とその理由を表示する([プロファイル](profiles.md)) |
50
- | `interlatch profile own <folder> <profile>` / `disown <folder>` / `waiting` / `choose <folder> <profile\|personal>` / `remove <profile> [--delete-data]` | フォルダーをこれまでのセッションごとプロファイルに移す、外す(セッションは選択待ちに)、選択待ちのフォルダーを一覧して決める、プロファイルを削除する。`--dry-run` は移るものの表示だけ、`--leave-on-hub` は Personal のハブがすでに持つセッションも移す |
51
- | `interlatch --profile <name> hub … \| push \| config …` | 名前付きプロファイルのハブのコマンドを実行する:自分のハブに参加する、セッションを送る、設定を変える([プロファイルをハブにつなぐ](profiles.md#プロファイルをハブにつなぐ))。記録と分析は Personal が行います。`interlatch push` は Personal のハブ、次に各プロファイルのハブへ送ります |
49
+ | `interlatch hubs` / `hubs add <name> [<address> --code <code>] [--all-folders]` / `hubs remove <name> [--delete-data]` | Personal 以外にこのコンピューターが送るハブと、それぞれにつないだグループの一覧。追加する(参加もする)、削除する([1 台のコンピューターで複数のハブ](profiles.md)) |
50
+ | `interlatch group list` / `create <name> --folder <folder>…` / `add-folder` / `remove-folder <group> <folder>` / `connect <group> <hub>` / `disconnect <group>` / `where <folder>` / `waiting` / `choose <folder> <hub\|personal>` / `remove <group>` | プロジェクトのグループと、それぞれの送り先のハブ:つなぐと、これまでのセッションもそのハブに移る。つないだグループからプロジェクトを外す、または接続を外すと、あなたの選択を待つ。`--dry-run` は移るものの表示だけ、移るセッションを持つハブは先にそれを取り下げる。`--leave-on-hub` は今取り下げられなくても移す |
51
+ | `interlatch --hub <name> hub … \| push \| config …` | このコンピューターのほかのハブでハブのコマンドを実行する:参加する、セッションを送る、設定を変える。記録と分析は Personal が行います。`interlatch push` は Personal のハブ、次にほかの各ハブへ送ります |
52
52
  | `interlatch push` | ハブに参加したコンピューターで:新しいセッションを今すぐ送る(フックとバックグラウンド同期も送ります) |
53
53
  | `interlatch container` | ハブの Docker イメージが実行するコマンド:`INTERLATCH_*` 変数からハブを設定し、ダッシュボードを提供して 15 分ごとに同期([Docker でハブを動かす](docker.md)) |
54
54
  | `interlatch config [edit]` | `~/.interlatch/config.toml` を表示または編集 |
@@ -0,0 +1,112 @@
1
+ # 1 台のコンピューターで複数のハブ
2
+
3
+ [← Interlatch](../../README.ja.md) · [ドキュメント一覧](README.md)
4
+
5
+ コンピューターが参加できるハブは一つです。自分のプロジェクトと取引先のプロジェクトのように、それぞれにハブがある複数のチームで働くときは、**プロジェクトのグループ**を、それぞれが属するハブにつなぎます。そうすると、各フォルダーのセッションは一つのハブにだけ届き、そこで作業するエージェントにはそのハブのものだけが見えます。
6
+
7
+ - **Personal**(`~/.interlatch`)は、これまでどおり、すべてのエージェントのすべてのセッションを記録・分析します。このコンピューターにあるすべてのものの元のコピーで、自分のハブに送ることもできます。
8
+ - **ほかのハブ**には、ここでの名前(たとえば Acme)を付けます。そのハブにつないだグループのセッションが届きます。読むのは Personal のアーカイブで、コピーは作らず、分析も二度しません。
9
+
10
+ ## ハブを追加してグループをつなぐ
11
+
12
+ 1. ハブの管理者から受け取った招待コードでハブを追加します([チームのハブに参加する](join-a-hub.md))。
13
+
14
+ ```bash
15
+ interlatch hubs add Acme https://hub.acme.example --code XXXX-XXXX-XXXX
16
+ ```
17
+
18
+ 2. そのハブに属するフォルダーのグループを作ります。ダッシュボードの「プロジェクト」ページにあるグループも使えます。
19
+
20
+ ```bash
21
+ interlatch group create "Acme work" --folder ~/work/acme --folder ~/clients/acme-site
22
+ ```
23
+
24
+ 3. グループをハブにつなぎます。
25
+
26
+ ```bash
27
+ interlatch group connect "Acme work" Acme
28
+ ```
29
+
30
+ グループのフォルダーですでに記録されたセッションは Acme に移り、それ以降は Acme のハブに送られます。Personal のハブがすでに持っているものは、先にそのハブが取り下げます([移すとハブから取り下げる](#moving-takes-sessions-back))。`--dry-run` を付けると、何も変えずに、移るものと、そのうちハブが持っている数を表示します。
31
+
32
+ **ダッシュボードでは:** **設定 › ハブ**に、ハブごとのカードがあります。送信がうまくいっているか、最後に送った時刻、**今すぐ共有**、ハブのダッシュボード、参加と脱退です。ハブの追加(名前、アドレス、招待コード)もここで行います。グループのページの**送り先**で、そのグループのセッションを送るハブを選びます。**プロジェクト**のサイドバーでは、ハブにつないだグループにそのハブの名前が表示され、選択を待つフォルダーが先頭に並びます。
33
+
34
+ ほかのコンピューターと同じく、ハブに送られるのは、そのハブのプロジェクトに追加したフォルダーのものだけです(`interlatch --hub Acme hub add-folder ~/work/acme/app --project App`)。`--all-folders` を付けて参加した場合は別です。
35
+
36
+ ## グループで決まる
37
+
38
+ つないだグループに入っているものが、そのハブに送られます。グループのフォルダーとその下のすべて、そして「プロジェクト」ページで手で入れたプロジェクトです。グループを変えると、これまでのセッションも含めてハブがそれに従います。
39
+
40
+ | すること | そこにあるセッション |
41
+ | --- | --- |
42
+ | つないだグループにフォルダーを加える、プロジェクトを入れる | そのハブに移る |
43
+ | つないだグループからプロジェクトを外す | あなたの選択を待つ(下記)。勝手に Personal には戻らない |
44
+ | つないだグループのフォルダーの中に、どのハブにもつながないグループを作る | あなたの選択を待つ |
45
+ | つないだグループのフォルダーの中のグループを、別のハブにつなぐ | そのハブに移る。狭いほうのグループが優先 |
46
+ | グループの接続を外す(`interlatch group disconnect "Acme work"`) | あなたの選択を待つ |
47
+
48
+ <a id="moving-takes-sessions-back"></a>
49
+
50
+ ### 移すとハブから取り下げる
51
+
52
+ セッションが置かれるハブは一度に一つです。変更でセッションがあるハブから離れるとき(別のハブへ、またはあなたの選択待ちへ)、そのハブは、このコンピューターが送ったものを取り下げます。要約とナレッジが、そのハブとチームストアから消えます。これは新しいハブに何かを送る前に行います。あとでそのハブに戻すと、もう一度送られます。
53
+
54
+ ハブに届かないとき、またはこのコンピューターがまだそのハブに送っている最中のときは、何も変えず、理由を表示します(ダッシュボードでも同じ)。あとでやり直すか、そのまま移してください(`--leave-on-hub`、またはダッシュボードの確認で **OK**)。その場合、次にこのコンピューターがそのハブに送るときに取り下げます。このバージョンより古いハブは取り下げができません。ハブを更新するか、そのまま移してください。そのハブのコピーは残ります。
55
+
56
+ ハブの削除(`interlatch hubs remove`)では何も取り下げません。先にそのハブから抜けてください。
57
+
58
+ 一つのフォルダーが属せるハブは一つです。二つのハブのグループを同じフォルダーにつなぐことはできません。
59
+
60
+ ## 選択を待つフォルダー
61
+
62
+ 複数のハブのものになりうるフォルダーや、グループが手放したフォルダーは**選択を待ちます**。Personal は記録・分析を続けますが、あなたが選ぶまで、どのハブにも送られず、どのエージェントにも見えません。
63
+
64
+ ```bash
65
+ interlatch group waiting
66
+ interlatch group choose ~/work/acme/notes Acme # または personal
67
+ interlatch group where ~/work/acme/app # フォルダーがどのハブに行くか、その理由
68
+ ```
69
+
70
+ **設定 › ハブ**にも一覧があり、それぞれに**選ぶ**ボタンがあります。**ホーム**の**あなたの対応待ち**にも表示されます。あるフォルダーが選択待ちにしているプロジェクト(つないだグループの中にある、どのハブにもつないでいないグループ)は、そのフォルダーの下にまとめて表示します。
71
+
72
+ ## エージェントに見えるもの
73
+
74
+ Interlatch がエージェントに渡すもの([MCP サーバー](mcp.md)のツールと、セッション開始時のメモ)は、エージェントが動くフォルダーで決まります。
75
+
76
+ - **ハブにつないだグループのフォルダーでは:** そのハブのセッション、ナレッジ、ナレッジベース、チームメイトのナレッジだけ。
77
+ - **それ以外の場所では:** Personal のものだけ。
78
+ - **選択を待つフォルダーでは:** 何もありません。MCP のツールは、そのフォルダーがあなたの選択を待っていると伝えます。
79
+
80
+ すべてのプロジェクトをまとめて作るもの(全体のプレイブック、ほかのハブのプロジェクトにも出てくる用語集の用語、テーマ、週次レビュー)は、ほかのハブがある間はエージェントに見せません。ダッシュボードには引き続きすべて表示されます。
81
+
82
+ すべてのフォルダーでエージェントが読むユーザーレベルの指示ファイル(`~/.claude/CLAUDE.md`、`~/.codex/AGENTS.md`)に Interlatch が提案する行は、Personal のナレッジからだけ作ります。ほかのハブのセッションで得たナレッジは、そのプロジェクト自身のファイルに提案します([提案](suggestions.md))。
83
+
84
+ ## コマンド
85
+
86
+ | 目的 | 実行するコマンド |
87
+ | --- | --- |
88
+ | ハブとそのグループの一覧 | `interlatch hubs` |
89
+ | ハブを追加して参加する | `interlatch hubs add <name> [<address> --code <code>] [--all-folders]` |
90
+ | ハブを削除する | `interlatch hubs remove <name> [--delete-data]`(先に抜けておく:`interlatch --hub <name> hub leave`) |
91
+ | グループと送り先の一覧 | `interlatch group list` |
92
+ | グループを作る、フォルダーを変える | `interlatch group create <name> --folder <folder>…`、`group add-folder` / `remove-folder <group> <folder>` |
93
+ | グループをつなぐ、外す | `interlatch group connect <group> <hub>`、`group disconnect <group>` |
94
+ | ほかのハブのハブコマンドを実行する | `interlatch --hub <name> hub …` / `push` / `config …` |
95
+
96
+ `interlatch push` とバックグラウンドの処理は、Personal のハブ、次にほかの各ハブへ送ります。記録、分析、ダッシュボードは Personal が行います。`--hub` を付けて実行できるのは `hub`、`push`、`config` だけです。
97
+
98
+ ## 複数のハブとの共有
99
+
100
+ - **ナレッジだけ。** どのハブにも、要約とプロジェクトのナレッジだけを送り、トランスクリプトは送りません。トランスクリプトを送るとすべてのハブのセッションが含まれてしまうため、ほかのハブがある間は Personal もトランスクリプトを送りません:`interlatch config set hub.share knowledge`。
101
+ - **各ハブに一度だけ。** このコンピューターがすでに送っているハブへの参加は、何も送る前に断られます。
102
+ - **自分の ID。** ハブごとにトークンとコンピューターの ID が別なので、二つのハブが ID でこのコンピューターを突き合わせることはできません。ただし、どのハブにもコンピューターの名前は表示されます。ハブに見せる名前は `~/.interlatch/profiles/<id>/machine.json` で変えられます。
103
+ - **自分のチームメイト。** ハブから届いたチームメイトのナレッジはそのハブのものとして保存し、エージェントにはそのフォルダーでだけ見せます。一つのハブから抜けても(`interlatch --hub Acme hub leave`)、消えるのはそのハブのものだけです。
104
+ - **Personal のハブ**には Personal のセッションだけが届きます。ハブへのあいさつで伝えるリポジトリやフォルダーにも、ほかのハブのものは含まれません。
105
+
106
+ ## 保存場所
107
+
108
+ `~/.interlatch/profiles.toml` に、ほかのハブ、それぞれにつないだグループ、そこから決まるフォルダー、あなたの選択が入ります。読めるのはあなただけです。このファイルが読めないときは、直すまでどのハブにも何も共有しません。ハブごとに専用のフォルダー `~/.interlatch/profiles/<id>` があり、トークン、コンピューターの ID、共有の状態が入ります。
109
+
110
+ 最初にほかのハブを追加すると、Personal のアーカイブに各セッションの属するハブを記録する `session_owner` テーブルができます。ほかのハブのないアーカイブは変更されません。
111
+
112
+ **0.28.1 から:** `interlatch profile` は `interlatch hubs` と `interlatch group` になり、`--profile` は `--hub` になりました(古い名前も使えます)。`--owns` でプロファイルに与えたフォルダーは、そのハブのものとして残ります。
@@ -0,0 +1,147 @@
1
+ # Several hubs on one computer
2
+
3
+ [← Interlatch](../README.md) · [Docs index](README.md)
4
+
5
+ A computer joins one hub. If you work for more than one team, such as your own projects and a client's, each with
6
+ its own hub, connect your **groups of projects** to the hub each one belongs to. Each folder's sessions then reach one
7
+ hub only, and agents working there see only what belongs to it.
8
+
9
+ - **Personal** (`~/.interlatch`) records and analyzes every session from every agent, as always. It's the master copy
10
+ of everything on this computer, and it may send to a hub of its own.
11
+ - **Another hub** has a name here, such as Acme. It gets the sessions in the groups you connect to it, read from
12
+ Personal's archive: no second copy, and nothing analyzed twice.
13
+
14
+ <a id="connect-a-profile-to-its-hub"></a>
15
+
16
+ ## Add a hub and connect a group
17
+
18
+ 1. Add the hub, with the invite code its admin sent ([Joining your team's hub](join-a-hub.md)):
19
+
20
+ ```bash
21
+ interlatch hubs add Acme https://hub.acme.example --code XXXX-XXXX-XXXX
22
+ ```
23
+
24
+ 2. Make a group of the folders that belong to it, or use one you already have on the dashboard's **Projects** page:
25
+
26
+ ```bash
27
+ interlatch group create "Acme work" --folder ~/work/acme --folder ~/clients/acme-site
28
+ ```
29
+
30
+ 3. Connect the group to the hub:
31
+
32
+ ```bash
33
+ interlatch group connect "Acme work" Acme
34
+ ```
35
+
36
+ The sessions already recorded in the group's folders move to Acme, and go to Acme's hub from then on. Any that
37
+ Personal's hub already has, it takes back first (see [Moving takes sessions back](#moving-takes-sessions-back)).
38
+ `--dry-run` shows what would move, and how many of them a hub has, without changing anything.
39
+
40
+ **On the dashboard:** **Settings › Hubs** has a card for each hub: whether sending to it works, when it last got
41
+ something, **Share now**, its dashboard, and joining or leaving it. It also adds a hub (its name, address and invite
42
+ code). A group's page has **Goes to**, where you pick the hub its sessions go to. In the **Projects** sidebar, a group
43
+ connected to a hub shows that hub's name, and folders waiting for you are listed first.
44
+
45
+ As on any computer, a hub gets only the folders added to one of its projects
46
+ (`interlatch --hub Acme hub add-folder ~/work/acme/app --project App`), unless you joined with `--all-folders`.
47
+
48
+ ## Groups decide
49
+
50
+ What a connected group holds goes to its hub: its folders and everything below them, and projects you put in it by
51
+ hand on the **Projects** page. Change the group and its hub follows, sessions so far included:
52
+
53
+ | You | The sessions there |
54
+ | --- | --- |
55
+ | Add a folder to a connected group, or put a project in it | Move to its hub |
56
+ | Take a project out of a connected group | Wait for you (below), never back to Personal on their own |
57
+ | Make a group inside a connected group's folder, connected to no hub | Wait for you |
58
+ | Connect a group to another hub inside a connected group's folder | Go to that hub: the narrower group wins |
59
+ | Disconnect a group (`interlatch group disconnect "Acme work"`) | Wait for you |
60
+
61
+ <a id="moving-takes-sessions-back"></a>
62
+
63
+ ### Moving takes sessions back
64
+
65
+ A session is on one hub at a time. When a change moves sessions away from a hub (to another hub, or to wait for
66
+ you), that hub takes back the ones this computer sent it: their summaries and lessons go, there and in its team
67
+ store. This happens before anything goes to the new hub. A session chosen for that hub again is simply sent again.
68
+
69
+ If the hub can't be reached, or this computer is still sending to it, nothing changes, on the dashboard too, and
70
+ you're told why. Try again later, or move them anyway (`--leave-on-hub`, or **OK** on the dashboard's question): the
71
+ hub takes them back the next time this computer sends to it. A hub older than this version can't take sessions back.
72
+ Update it, or move them anyway and its copies stay there.
73
+
74
+ Removing a hub (`interlatch hubs remove`) takes nothing back: leave it first.
75
+
76
+ A folder can belong to one hub: connecting two hubs' groups to the same folder is refused.
77
+
78
+ ## Waiting folders
79
+
80
+ A folder that could belong to more than one hub, or that a group let go, **waits**. Personal still records and
81
+ analyzes its sessions, but no hub gets them and no agent sees them until you choose:
82
+
83
+ ```bash
84
+ interlatch group waiting
85
+ interlatch group choose ~/work/acme/notes Acme # or: personal
86
+ interlatch group where ~/work/acme/app # who gets a folder, and why
87
+ ```
88
+
89
+ **Settings › Hubs** lists them too, with a **Choose** for each, and **Home** shows them under **Needs you**. Projects a folder holds waiting (a group
90
+ connected to no hub inside a connected one) are listed once, under that folder.
91
+
92
+ ## What agents see
93
+
94
+ What Interlatch gives an agent depends on the folder it runs in: the [MCP server](mcp.md)'s tools and the notes at
95
+ the start of each session.
96
+
97
+ - **In a folder of a group connected to a hub:** that hub's sessions, lessons, knowledge bases and teammates' lessons
98
+ only.
99
+ - **Anywhere else:** Personal's only.
100
+ - **In a waiting folder:** nothing. The MCP tools say the folder waits for you to choose.
101
+
102
+ What is made from every project at once (the global playbook, glossary terms seen in another hub's projects, themes
103
+ and weekly reviews) isn't shown to agents while you have another hub. The dashboard still shows everything.
104
+
105
+ Lines Interlatch proposes for your user-level instruction files (`~/.claude/CLAUDE.md`, `~/.codex/AGENTS.md`), which
106
+ agents read in every folder, come only from Personal's lessons. A lesson another hub's sessions taught is proposed for
107
+ that project's own files instead ([Suggestions](suggestions.md)).
108
+
109
+ ## Commands
110
+
111
+ | To | Run |
112
+ | --- | --- |
113
+ | List the hubs and their groups | `interlatch hubs` |
114
+ | Add a hub, and join it | `interlatch hubs add <name> [<address> --code <code>] [--all-folders]` |
115
+ | Remove a hub | `interlatch hubs remove <name> [--delete-data]` (leave it first: `interlatch --hub <name> hub leave`) |
116
+ | List your groups and where each goes | `interlatch group list` |
117
+ | Make a group, change its folders | `interlatch group create <name> --folder <folder>…`, `group add-folder` / `remove-folder <group> <folder>` |
118
+ | Connect a group, or disconnect it | `interlatch group connect <group> <hub>`, `group disconnect <group>` |
119
+ | Run a hub command for another hub | `interlatch --hub <name> hub …` / `push` / `config …` |
120
+
121
+ `interlatch push` and the background job send to Personal's hub, then each other hub. Recording, analysis and the
122
+ dashboard are Personal's: with `--hub`, only `hub`, `push` and `config` run.
123
+
124
+ ## Sharing with several hubs
125
+
126
+ - **Knowledge only.** Every hub gets summaries and project lessons, never transcripts. A transcript upload would
127
+ carry every hub's sessions, so while you have another hub, Personal won't send transcripts:
128
+ `interlatch config set hub.share knowledge`.
129
+ - **Each hub once.** Joining a hub that this computer already sends to is refused before anything is sent.
130
+ - **Its own identity.** Each hub gets its own token and computer ID, so two hubs can't match this computer by its ID.
131
+ Each hub still shows the computer's name: change the name a hub sees in `~/.interlatch/profiles/<id>/machine.json`.
132
+ - **Its own teammates.** Teammates' lessons a hub sends are kept for that hub, and agents see them only in its
133
+ folders. Leaving one hub (`interlatch --hub Acme hub leave`) removes only that hub's.
134
+ - **Personal's hub** gets only Personal's sessions. The repositories and folders its hello names leave out what the
135
+ other hubs own.
136
+
137
+ ## Where it's kept
138
+
139
+ `~/.interlatch/profiles.toml` lists the other hubs, the groups connected to each, the folders that follows from, and
140
+ your choices. Only you can read it. If it can't be read, nothing is shared with any hub until it's fixed. Each hub
141
+ also has a folder of its own, `~/.interlatch/profiles/<id>`, with its token, computer ID and sharing state.
142
+
143
+ Personal's archive gets a `session_owner` table, the hub each session belongs to, once the first other hub is added.
144
+ An archive without one is never changed.
145
+
146
+ **From 0.28.1:** `interlatch profile` became `interlatch hubs` and `interlatch group`, and `--profile` is now `--hub`
147
+ (the old name still works). Folders a profile was given with `--owns` stay that hub's.
@@ -75,7 +75,7 @@ nav:
75
75
  - Phone and other computers: devices.md
76
76
  - A hub in Docker: docker.md
77
77
  - Joining your team's hub: join-a-hub.md
78
- - Profiles, one computer and several hubs: profiles.md
78
+ - Several hubs on one computer: profiles.md
79
79
  - A copy in Postgres: postgres.md
80
80
  - Reference:
81
81
  - What gets recorded and how analysis works: analysis.md
@@ -98,7 +98,7 @@ nav:
98
98
  - スマートフォンとほかのコンピューター: ja/devices.md
99
99
  - Docker でハブを動かす: ja/docker.md
100
100
  - チームのハブに参加する: ja/join-a-hub.md
101
- - プロファイル(複数のハブ): ja/profiles.md
101
+ - 1 台のコンピューターで複数のハブ: ja/profiles.md
102
102
  - Postgres へのコピー: ja/postgres.md
103
103
  - 記録される内容と分析の仕組み: ja/analysis.md
104
104
  - 設定: ja/configuration.md