interlatch 0.25.0__tar.gz → 0.26.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (457) hide show
  1. {interlatch-0.25.0 → interlatch-0.26.0}/CHANGELOG.md +9 -0
  2. {interlatch-0.25.0 → interlatch-0.26.0}/PKG-INFO +3 -2
  3. {interlatch-0.25.0 → interlatch-0.26.0}/README.md +2 -1
  4. interlatch-0.26.0/changelog.d/adventure.md +5 -0
  5. interlatch-0.26.0/changelog.d/group-page.md +7 -0
  6. interlatch-0.26.0/changelog.d/hub-join-http-client.md +2 -0
  7. interlatch-0.26.0/changelog.d/install-choose-analyzer.md +4 -0
  8. interlatch-0.26.0/changelog.d/town-and-gear.md +5 -0
  9. {interlatch-0.25.0 → interlatch-0.26.0}/docs/cli.md +1 -1
  10. {interlatch-0.25.0 → interlatch-0.26.0}/docs/dashboard.md +16 -2
  11. {interlatch-0.25.0 → interlatch-0.26.0}/docs/faq.md +2 -1
  12. {interlatch-0.25.0 → interlatch-0.26.0}/docs/install.md +13 -5
  13. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/dashboard.md +14 -2
  14. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/party.md +31 -12
  15. {interlatch-0.25.0 → interlatch-0.26.0}/docs/party.md +34 -13
  16. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/api.py +9 -3
  17. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/base.py +6 -0
  18. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/artifacts/queries.py +8 -5
  19. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/i18n/ja.py +23 -0
  20. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/setup.py +217 -6
  21. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/exports/diagrams.py +52 -6
  22. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/artifacts.py +1 -1
  23. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/party.py +79 -0
  24. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/projects.py +178 -1
  25. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/settings.py +1 -3
  26. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/handler.py +4 -2
  27. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/routes.py +40 -3
  28. interlatch-0.26.0/src/interlatch/knowledge/bag.py +453 -0
  29. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/party.py +153 -3
  30. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/groups.py +3 -2
  31. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/progress.py +24 -14
  32. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/systems.py +43 -0
  33. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/access.py +2 -1
  34. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/client.py +1 -1
  35. interlatch-0.26.0/src/interlatch/storage/kv.py +41 -0
  36. interlatch-0.26.0/src/interlatch/web/adventure.js +2136 -0
  37. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/app.css +36 -2
  38. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/app.js +368 -54
  39. interlatch-0.26.0/src/interlatch/web/battle.js +1729 -0
  40. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/innerlatch.css +317 -18
  41. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/innerlatch.js +483 -126
  42. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/ja.js +256 -22
  43. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/scene.js +64 -24
  44. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/cli.json +27 -0
  45. interlatch-0.26.0/tests/test_adventure_web.py +182 -0
  46. interlatch-0.26.0/tests/test_bag.py +422 -0
  47. interlatch-0.26.0/tests/test_battle_web.py +454 -0
  48. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_diagram.py +24 -1
  49. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub.py +16 -0
  50. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_i18n_web.py +2 -2
  51. interlatch-0.26.0/tests/test_party_map.py +237 -0
  52. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_project_progress.py +76 -0
  53. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_route_matrix.py +22 -0
  54. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_setup.py +95 -1
  55. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_systems.py +37 -0
  56. interlatch-0.25.0/changelog.d/innerlatch.md +0 -6
  57. interlatch-0.25.0/src/interlatch/storage/kv.py +0 -17
  58. {interlatch-0.25.0 → interlatch-0.26.0}/.github/dependabot.yml +0 -0
  59. {interlatch-0.25.0 → interlatch-0.26.0}/.github/workflows/changelog.yml +0 -0
  60. {interlatch-0.25.0 → interlatch-0.26.0}/.github/workflows/ci.yml +0 -0
  61. {interlatch-0.25.0 → interlatch-0.26.0}/.github/workflows/docs.yml +0 -0
  62. {interlatch-0.25.0 → interlatch-0.26.0}/.github/workflows/release.yml +0 -0
  63. {interlatch-0.25.0 → interlatch-0.26.0}/.gitignore +0 -0
  64. {interlatch-0.25.0 → interlatch-0.26.0}/.pre-commit-config.yaml +0 -0
  65. {interlatch-0.25.0 → interlatch-0.26.0}/.python-version +0 -0
  66. {interlatch-0.25.0 → interlatch-0.26.0}/CONTRIBUTING.md +0 -0
  67. {interlatch-0.25.0 → interlatch-0.26.0}/LICENSE +0 -0
  68. {interlatch-0.25.0 → interlatch-0.26.0}/README.ja.md +0 -0
  69. {interlatch-0.25.0 → interlatch-0.26.0}/ROADMAP.ja.md +0 -0
  70. {interlatch-0.25.0 → interlatch-0.26.0}/ROADMAP.md +0 -0
  71. {interlatch-0.25.0 → interlatch-0.26.0}/SECURITY.md +0 -0
  72. {interlatch-0.25.0 → interlatch-0.26.0}/careers/README.md +0 -0
  73. {interlatch-0.25.0 → interlatch-0.26.0}/careers/boards.json +0 -0
  74. {interlatch-0.25.0 → interlatch-0.26.0}/careers/pipeline.py +0 -0
  75. {interlatch-0.25.0 → interlatch-0.26.0}/changelog.d/README.md +0 -0
  76. {interlatch-0.25.0 → interlatch-0.26.0}/dev.sh +0 -0
  77. {interlatch-0.25.0 → interlatch-0.26.0}/docker/.dockerignore +0 -0
  78. {interlatch-0.25.0 → interlatch-0.26.0}/docker/.env.example +0 -0
  79. {interlatch-0.25.0 → interlatch-0.26.0}/docker/Caddyfile +0 -0
  80. {interlatch-0.25.0 → interlatch-0.26.0}/docker/Dockerfile +0 -0
  81. {interlatch-0.25.0 → interlatch-0.26.0}/docker/compose.yaml +0 -0
  82. {interlatch-0.25.0 → interlatch-0.26.0}/docker/wheels/.gitignore +0 -0
  83. {interlatch-0.25.0 → interlatch-0.26.0}/docs/README.md +0 -0
  84. {interlatch-0.25.0 → interlatch-0.26.0}/docs/_site/hooks.py +0 -0
  85. {interlatch-0.25.0 → interlatch-0.26.0}/docs/analysis.md +0 -0
  86. {interlatch-0.25.0 → interlatch-0.26.0}/docs/configuration.md +0 -0
  87. {interlatch-0.25.0 → interlatch-0.26.0}/docs/demo/make_demo.py +0 -0
  88. {interlatch-0.25.0 → interlatch-0.26.0}/docs/demo/record_demo.py +0 -0
  89. {interlatch-0.25.0 → interlatch-0.26.0}/docs/design/ja/learning.md +0 -0
  90. {interlatch-0.25.0 → interlatch-0.26.0}/docs/design/learning.md +0 -0
  91. {interlatch-0.25.0 → interlatch-0.26.0}/docs/development.md +0 -0
  92. {interlatch-0.25.0 → interlatch-0.26.0}/docs/devices.md +0 -0
  93. {interlatch-0.25.0 → interlatch-0.26.0}/docs/diagrams/analysis.excalidraw.svg +0 -0
  94. {interlatch-0.25.0 → interlatch-0.26.0}/docs/diagrams/architecture.excalidraw.svg +0 -0
  95. {interlatch-0.25.0 → interlatch-0.26.0}/docs/docker.md +0 -0
  96. {interlatch-0.25.0 → interlatch-0.26.0}/docs/images/demo.gif +0 -0
  97. {interlatch-0.25.0 → interlatch-0.26.0}/docs/images/home.png +0 -0
  98. {interlatch-0.25.0 → interlatch-0.26.0}/docs/images/map.png +0 -0
  99. {interlatch-0.25.0 → interlatch-0.26.0}/docs/images/palette.png +0 -0
  100. {interlatch-0.25.0 → interlatch-0.26.0}/docs/images/session.png +0 -0
  101. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/README.md +0 -0
  102. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/analysis.md +0 -0
  103. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/cli.md +0 -0
  104. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/configuration.md +0 -0
  105. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/development.md +0 -0
  106. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/devices.md +0 -0
  107. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/docker.md +0 -0
  108. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/faq.md +0 -0
  109. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/install.md +0 -0
  110. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/join-a-hub.md +0 -0
  111. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/mcp.md +0 -0
  112. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/moving-from-chronicle.md +0 -0
  113. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/postgres.md +0 -0
  114. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/privacy.md +0 -0
  115. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/sources.md +0 -0
  116. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/suggestions.md +0 -0
  117. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/troubleshooting.md +0 -0
  118. {interlatch-0.25.0 → interlatch-0.26.0}/docs/ja/vscode.md +0 -0
  119. {interlatch-0.25.0 → interlatch-0.26.0}/docs/join-a-hub.md +0 -0
  120. {interlatch-0.25.0 → interlatch-0.26.0}/docs/mcp.md +0 -0
  121. {interlatch-0.25.0 → interlatch-0.26.0}/docs/moving-from-chronicle.md +0 -0
  122. {interlatch-0.25.0 → interlatch-0.26.0}/docs/postgres.md +0 -0
  123. {interlatch-0.25.0 → interlatch-0.26.0}/docs/privacy.md +0 -0
  124. {interlatch-0.25.0 → interlatch-0.26.0}/docs/sources.md +0 -0
  125. {interlatch-0.25.0 → interlatch-0.26.0}/docs/suggestions.md +0 -0
  126. {interlatch-0.25.0 → interlatch-0.26.0}/docs/troubleshooting.md +0 -0
  127. {interlatch-0.25.0 → interlatch-0.26.0}/docs/vscode.md +0 -0
  128. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/.firebaserc +0 -0
  129. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/.gitignore +0 -0
  130. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/README.md +0 -0
  131. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/firebase.json +0 -0
  132. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/firestore.indexes.json +0 -0
  133. {interlatch-0.25.0 → interlatch-0.26.0}/leaderboard/firestore.rules +0 -0
  134. {interlatch-0.25.0 → interlatch-0.26.0}/mkdocs.yml +0 -0
  135. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/README.md +0 -0
  136. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/art.json +0 -0
  137. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/filing.html +0 -0
  138. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/loops.json +0 -0
  139. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/loops.py +0 -0
  140. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/members.js +0 -0
  141. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/render.html +0 -0
  142. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/render.py +0 -0
  143. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/scenes-more.js +0 -0
  144. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/icons3d/scenes.html +0 -0
  145. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/Chronicle.icns +0 -0
  146. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/Interlatch.spec +0 -0
  147. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/build.sh +0 -0
  148. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/entitlements.plist +0 -0
  149. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/icon-3d.webp +0 -0
  150. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/icon-blueprint-prompt.md +0 -0
  151. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/icon-blueprint.webp +0 -0
  152. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/icon.png +0 -0
  153. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/interlatch_app.py +0 -0
  154. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/macos/make_icon.py +0 -0
  155. {interlatch-0.25.0 → interlatch-0.26.0}/packaging/release.py +0 -0
  156. {interlatch-0.25.0 → interlatch-0.26.0}/pyproject.toml +0 -0
  157. {interlatch-0.25.0 → interlatch-0.26.0}/src/chronicle/__init__.py +0 -0
  158. {interlatch-0.25.0 → interlatch-0.26.0}/src/chronicle/__main__.py +0 -0
  159. {interlatch-0.25.0 → interlatch-0.26.0}/src/chronicle/windows.py +0 -0
  160. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/__init__.py +0 -0
  161. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/__main__.py +0 -0
  162. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/__init__.py +0 -0
  163. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/digest.py +0 -0
  164. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/language.py +0 -0
  165. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/queue.py +0 -0
  166. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/__init__.py +0 -0
  167. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/bob.py +0 -0
  168. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/claude.py +0 -0
  169. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/codex.py +0 -0
  170. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/factory.py +0 -0
  171. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/process.py +0 -0
  172. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/replies.py +0 -0
  173. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/runners/settings.py +0 -0
  174. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/screen.py +0 -0
  175. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/session.py +0 -0
  176. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/analysis/worker.py +0 -0
  177. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/application/__init__.py +0 -0
  178. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/application/records.py +0 -0
  179. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/application/search.py +0 -0
  180. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/application/workflows.py +0 -0
  181. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/artifacts/__init__.py +0 -0
  182. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/artifacts/files.py +0 -0
  183. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/cli.py +0 -0
  184. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/__init__.py +0 -0
  185. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/agents.py +0 -0
  186. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/artifact_records.py +0 -0
  187. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/config.py +0 -0
  188. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/diagrams.py +0 -0
  189. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/i18n/__init__.py +0 -0
  190. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/machine.py +0 -0
  191. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/paths.py +0 -0
  192. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/pricing.py +0 -0
  193. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/process.py +0 -0
  194. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/redact.py +0 -0
  195. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/sessions.py +0 -0
  196. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/core/util.py +0 -0
  197. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/__init__.py +0 -0
  198. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/analyses.py +0 -0
  199. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/archive.py +0 -0
  200. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/chat_import.py +0 -0
  201. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/deletion.py +0 -0
  202. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/history.py +0 -0
  203. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/memory.py +0 -0
  204. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/persistence.py +0 -0
  205. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/report.py +0 -0
  206. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/ingestion/service.py +0 -0
  207. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/__init__.py +0 -0
  208. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/__init__.py +0 -0
  209. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/__init__.py +0 -0
  210. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/archive.py +0 -0
  211. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/knowledge.py +0 -0
  212. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/operations.py +0 -0
  213. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/recording.py +0 -0
  214. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/commands/sharing.py +0 -0
  215. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/common.py +0 -0
  216. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/main.py +0 -0
  217. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/cli/parser.py +0 -0
  218. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/exports/__init__.py +0 -0
  219. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/exports/markdown.py +0 -0
  220. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/exports/sessions.py +0 -0
  221. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/exports/vault.py +0 -0
  222. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/mcp.py +0 -0
  223. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/__init__.py +0 -0
  224. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/__init__.py +0 -0
  225. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/common.py +0 -0
  226. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/devices.py +0 -0
  227. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/hub_admin.py +0 -0
  228. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/knowledge.py +0 -0
  229. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/leaderboard.py +0 -0
  230. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/sessions.py +0 -0
  231. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/sources.py +0 -0
  232. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/status.py +0 -0
  233. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/storage.py +0 -0
  234. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/api/team.py +0 -0
  235. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/app.py +0 -0
  236. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/assets.py +0 -0
  237. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/context.py +0 -0
  238. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/jobs.py +0 -0
  239. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/interfaces/web/server.py +0 -0
  240. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/__init__.py +0 -0
  241. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/arena.py +0 -0
  242. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/cases.py +0 -0
  243. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/friction.py +0 -0
  244. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/glossary.py +0 -0
  245. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/instructions.py +0 -0
  246. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/ladder.py +0 -0
  247. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/learning.py +0 -0
  248. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/market.json +0 -0
  249. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/reviews.py +0 -0
  250. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/roadmap.json +0 -0
  251. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/suggest.py +0 -0
  252. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/knowledge/synthesize.py +0 -0
  253. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/__init__.py +0 -0
  254. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/labels.py +0 -0
  255. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/projects/routing.py +0 -0
  256. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/__init__.py +0 -0
  257. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/connectors.py +0 -0
  258. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/container.py +0 -0
  259. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/hooks.py +0 -0
  260. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/install.py +0 -0
  261. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/migrate.py +0 -0
  262. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/notify.py +0 -0
  263. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/platforms/__init__.py +0 -0
  264. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/platforms/desktop.py +0 -0
  265. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/platforms/menubar.py +0 -0
  266. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/platforms/windows.py +0 -0
  267. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/statusline.py +0 -0
  268. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/tailnet.py +0 -0
  269. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/runtime/update.py +0 -0
  270. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/__init__.py +0 -0
  271. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/arena.py +0 -0
  272. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/identity.py +0 -0
  273. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/leaderboard.py +0 -0
  274. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/market.py +0 -0
  275. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/news.py +0 -0
  276. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/people.py +0 -0
  277. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/projects.py +0 -0
  278. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/protocol.py +0 -0
  279. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/pull.py +0 -0
  280. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/push.py +0 -0
  281. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sharing/receiver.py +0 -0
  282. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/__init__.py +0 -0
  283. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/antigravity.py +0 -0
  284. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/bob.py +0 -0
  285. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/builder.py +0 -0
  286. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/chatgpt.py +0 -0
  287. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/chats.py +0 -0
  288. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/claude/__init__.py +0 -0
  289. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/claude/export.py +0 -0
  290. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/claude/files.py +0 -0
  291. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/claude/parser.py +0 -0
  292. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/codex/__init__.py +0 -0
  293. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/codex/cloud.py +0 -0
  294. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/codex/parser.py +0 -0
  295. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/copilot.py +0 -0
  296. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/discovery.py +0 -0
  297. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/opencode.py +0 -0
  298. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/sources/prompts.py +0 -0
  299. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/__init__.py +0 -0
  300. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/fts.py +0 -0
  301. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/migrations.py +0 -0
  302. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/mirror.py +0 -0
  303. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/postgres.py +0 -0
  304. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/schema.py +0 -0
  305. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/sqlite.py +0 -0
  306. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/storage/team.py +0 -0
  307. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/AGENT-ICONS.txt +0 -0
  308. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/PLEX-OFL.txt +0 -0
  309. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-antigravity.svg +0 -0
  310. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-bob.svg +0 -0
  311. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-chatgpt.svg +0 -0
  312. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-claude-ai.svg +0 -0
  313. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-claude.svg +0 -0
  314. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-codex.svg +0 -0
  315. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-copilot.svg +0 -0
  316. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/agent-opencode.svg +0 -0
  317. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-book.webp +0 -0
  318. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-camera.webp +0 -0
  319. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-chip.webp +0 -0
  320. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-clock.webp +0 -0
  321. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-cloud.webp +0 -0
  322. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-coins.webp +0 -0
  323. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-container.webp +0 -0
  324. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-dashboard.webp +0 -0
  325. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-dex.webp +0 -0
  326. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-document.webp +0 -0
  327. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-flag.webp +0 -0
  328. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-folder.webp +0 -0
  329. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-gateway.webp +0 -0
  330. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-gears.webp +0 -0
  331. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-glitch.webp +0 -0
  332. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-globe.webp +0 -0
  333. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-laptop.webp +0 -0
  334. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-log.webp +0 -0
  335. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-lumi.webp +0 -0
  336. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-magnifier.webp +0 -0
  337. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-pip.webp +0 -0
  338. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-plug.webp +0 -0
  339. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-rack.webp +0 -0
  340. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/art-tink.webp +0 -0
  341. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/boot.js +0 -0
  342. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/favicon.png +0 -0
  343. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/i18n.js +0 -0
  344. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/icon-180.png +0 -0
  345. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/icon-192.png +0 -0
  346. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/icon-512.png +0 -0
  347. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/icon.png +0 -0
  348. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/index.html +0 -0
  349. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/learning.js +0 -0
  350. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/manifest.webmanifest +0 -0
  351. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/panel.css +0 -0
  352. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/panel.html +0 -0
  353. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/panel.js +0 -0
  354. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-mono-400.woff2 +0 -0
  355. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-mono-500.woff2 +0 -0
  356. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-mono-600.woff2 +0 -0
  357. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-sans-400.woff2 +0 -0
  358. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-sans-500.woff2 +0 -0
  359. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-sans-600.woff2 +0 -0
  360. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/plex-sans-700.woff2 +0 -0
  361. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/rough.js +0 -0
  362. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/web/sprites.js +0 -0
  363. {interlatch-0.25.0 → interlatch-0.26.0}/src/interlatch/windows.py +0 -0
  364. {interlatch-0.25.0 → interlatch-0.26.0}/tests/antigravity_fixture.py +0 -0
  365. {interlatch-0.25.0 → interlatch-0.26.0}/tests/codex_fixture.py +0 -0
  366. {interlatch-0.25.0 → interlatch-0.26.0}/tests/conftest.py +0 -0
  367. {interlatch-0.25.0 → interlatch-0.26.0}/tests/copilot_fixture.py +0 -0
  368. {interlatch-0.25.0 → interlatch-0.26.0}/tests/friction_fixture.py +0 -0
  369. {interlatch-0.25.0 → interlatch-0.26.0}/tests/golden.py +0 -0
  370. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/diagram.json +0 -0
  371. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/antigravity.json +0 -0
  372. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/bob.json +0 -0
  373. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/claude_code.json +0 -0
  374. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/codex.json +0 -0
  375. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/copilot.json +0 -0
  376. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/parsers/opencode.json +0 -0
  377. {interlatch-0.25.0 → interlatch-0.26.0}/tests/goldens/systems.json +0 -0
  378. {interlatch-0.25.0 → interlatch-0.26.0}/tests/opencode_fixture.py +0 -0
  379. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_analysis.py +0 -0
  380. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_antigravity.py +0 -0
  381. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_architecture.py +0 -0
  382. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_arena.py +0 -0
  383. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_artifacts.py +0 -0
  384. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_bob_analysis.py +0 -0
  385. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_boot_web.py +0 -0
  386. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_careers.py +0 -0
  387. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_case_files.py +0 -0
  388. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_cases.py +0 -0
  389. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_chat_import.py +0 -0
  390. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_cli_pins.py +0 -0
  391. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_codex.py +0 -0
  392. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_codex_analysis.py +0 -0
  393. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_codex_cloud.py +0 -0
  394. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_container.py +0 -0
  395. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_copilot_bob.py +0 -0
  396. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_dedicated_hub.py +0 -0
  397. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_dedupe.py +0 -0
  398. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_desktop.py +0 -0
  399. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_ee_boundary.py +0 -0
  400. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_friction.py +0 -0
  401. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_glossary.py +0 -0
  402. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_group_sharing.py +0 -0
  403. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_home_agents.py +0 -0
  404. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_accept.py +0 -0
  405. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_news.py +0 -0
  406. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_projects.py +0 -0
  407. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_projects_listed.py +0 -0
  408. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_purge.py +0 -0
  409. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_hub_sharing_race.py +0 -0
  410. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_ingest.py +0 -0
  411. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_instructions.py +0 -0
  412. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_integration.py +0 -0
  413. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_ladder.py +0 -0
  414. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_language.py +0 -0
  415. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_leaderboard.py +0 -0
  416. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_learning_glance.py +0 -0
  417. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_learning_interests.py +0 -0
  418. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_learning_web.py +0 -0
  419. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_leave_project.py +0 -0
  420. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_legacy_package.py +0 -0
  421. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_map_goldens.py +0 -0
  422. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_market.py +0 -0
  423. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_menubar.py +0 -0
  424. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_migrate.py +0 -0
  425. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_mirror.py +0 -0
  426. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_notify.py +0 -0
  427. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_opencode.py +0 -0
  428. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_parser.py +0 -0
  429. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_parser_goldens.py +0 -0
  430. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_party.py +0 -0
  431. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_people.py +0 -0
  432. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_people_hub.py +0 -0
  433. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_people_web.py +0 -0
  434. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_project_groups.py +0 -0
  435. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_providers.py +0 -0
  436. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_queue.py +0 -0
  437. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_regressions.py +0 -0
  438. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_release.py +0 -0
  439. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_roadmap_catalog.py +0 -0
  440. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_screen.py +0 -0
  441. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_security.py +0 -0
  442. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_statusline.py +0 -0
  443. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_suggest.py +0 -0
  444. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_suggest_cli.py +0 -0
  445. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_team.py +0 -0
  446. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_team_home.py +0 -0
  447. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_update.py +0 -0
  448. {interlatch-0.25.0 → interlatch-0.26.0}/tests/test_windows.py +0 -0
  449. {interlatch-0.25.0 → interlatch-0.26.0}/tests/windows_smoke.py +0 -0
  450. {interlatch-0.25.0 → interlatch-0.26.0}/uv.lock +0 -0
  451. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/.vscodeignore +0 -0
  452. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/LICENSE +0 -0
  453. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/README.md +0 -0
  454. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/extension.js +0 -0
  455. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/media/icon.png +0 -0
  456. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/media/interlatch.svg +0 -0
  457. {interlatch-0.25.0 → interlatch-0.26.0}/vscode-extension/package.json +0 -0
@@ -3,6 +3,15 @@
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.25.0 (2026-10-15)
7
+
8
+ - **Innerlatch:** the Party, the Leaderboard, the Arena and their Google sign-in moved out of the dashboard into
9
+ Innerlatch, an area of its own drawn in violet. The door icon at the bottom of the rail brings up a large door: click
10
+ it to go through, or, signed out, sign in with Google and it opens by itself. Leaving, it shuts behind you. The
11
+ Journey strip leads the Party page instead of Home, the Arena is a page of its own, and old `#/party` and
12
+ `#/leaderboard` links still open. **Settings › Appearance › The door** hides the icon
13
+ ([Party](docs/party.md#getting-there)).
14
+
6
15
  ## 0.24.1 (2026-10-15)
7
16
 
8
17
  - **OpenCode is a source:** `interlatch connect opencode` (or the Sources page) records OpenCode sessions, from the
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: interlatch
3
- Version: 0.25.0
3
+ Version: 0.26.0
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/
@@ -186,7 +186,8 @@ milliseconds; analysis runs later in the background.
186
186
 
187
187
  **Do I need Claude Code?** No. Analysis runs through Claude Code, Codex or IBM Bob, or a model provider's API with your
188
188
  own key: Anthropic, Amazon Bedrock, OpenAI, Azure OpenAI, OpenRouter, any OpenAI-compatible server, or Ollama on your own
189
- computer. Pick one in **Status › Analysis** or with `interlatch config set analysis.backend <name>`
189
+ computer. Pick one when you run `interlatch install`, in **Status › Analysis**, or with
190
+ `interlatch config set analysis.backend <name>`
190
191
  ([Model providers](https://github.com/Chatixia-AI/interlatch/blob/main/docs/analysis.md#model-providers)). Recording and browsing work either way; with none set up,
191
192
  sessions are archived and wait in the analysis queue.
192
193
 
@@ -151,7 +151,8 @@ milliseconds; analysis runs later in the background.
151
151
 
152
152
  **Do I need Claude Code?** No. Analysis runs through Claude Code, Codex or IBM Bob, or a model provider's API with your
153
153
  own key: Anthropic, Amazon Bedrock, OpenAI, Azure OpenAI, OpenRouter, any OpenAI-compatible server, or Ollama on your own
154
- computer. Pick one in **Status › Analysis** or with `interlatch config set analysis.backend <name>`
154
+ computer. Pick one when you run `interlatch install`, in **Status › Analysis**, or with
155
+ `interlatch config set analysis.backend <name>`
155
156
  ([Model providers](docs/analysis.md#model-providers)). Recording and browsing work either way; with none set up,
156
157
  sessions are archived and wait in the analysis queue.
157
158
 
@@ -0,0 +1,5 @@
1
+ - **Adventure:** a new page in Innerlatch puts every lesson that counts on a pixel world map, one region per attribute
2
+ and one territory per roadmap module, fogged where no lesson reached yet. Click a monster for a turn-based battle
3
+ (Attack, Skill, Defend, Run) led by the agent that taught it; a win marks it cleared, and battles never change
4
+ levels. The Party page keeps the characters and quests, and a lesson link anywhere in Innerlatch now opens the lesson
5
+ in a window over the page instead of leaving for the dashboard ([Party](docs/party.md#adventure)).
@@ -0,0 +1,7 @@
1
+ - **A group's page:** **Analyze** on a project group's heading on the Projects page (or **The whole group** in the
2
+ sidebar) reads the group's projects as one big project. It shows each project's share of the group's time, cost and
3
+ knowledge, what waits on you across all of them, where their last sessions left off, each folder in git, their
4
+ roadmaps and their work week by week, with every item named by its project. A **Map** draws the projects and the
5
+ services and platforms they use, hand-drawn, with the ones they share easy to spot and an Excalidraw download; Usage
6
+ charts each project's time week by week. Each project's knowledge base and architecture sketch sit beside the
7
+ others, and the glossary terms the projects share come first ([Project groups](docs/dashboard.md#project-groups)).
@@ -0,0 +1,2 @@
1
+ - **Joining a hub works again:** `interlatch hub join` no longer stops with "module 'http' has no attribute 'client'"
2
+ on a fresh install.
@@ -0,0 +1,4 @@
1
+ - **Choose what analyzes sessions at install:** `interlatch install` now lists every choice (Claude Code, Codex,
2
+ IBM Bob and the model providers' APIs, Ollama included) with whether each is ready, and sets up the one you pick:
3
+ its endpoint, API key and model, then one test call. `--backend <name>` chooses without asking
4
+ ([Install](docs/install.md#command-line)).
@@ -0,0 +1,5 @@
1
+ - **Towns and gear:** each Adventure region has a town whose shop sells gear for its roadmap modules (a weapon, armor
2
+ and charm per module, in three tiers that open as your agents reach Lv 1, 3 and 5 in that skill) and battle supplies.
3
+ A lesson's first win pays gold and may drop loot of its kind; battles gain an **Item** command, and each agent
4
+ wears three slots, changed on its page or in the new **Bag**. Gear only changes battle numbers, never levels
5
+ ([Party](docs/party.md#towns-and-gear)).
@@ -4,7 +4,7 @@
4
4
 
5
5
  | Command | |
6
6
  | --- | --- |
7
- | `interlatch install [--yes] [--analyze all\|N\|later] [--[no-]notify-updates] [--[no-]menu-bar] [--dry-run]` | Setup: lists the agents found, asks which to record, imports them, offers to analyze them now with progress (which builds the Glossary and the Map), starts the dashboard, and on macOS asks once whether to show [the menu-bar icon](install.md#the-menu-bar-icon) (off unless you say yes) ([Install](install.md#command-line)) |
7
+ | `interlatch install [--yes] [--backend NAME] [--analyze all\|N\|later] [--[no-]notify-updates] [--[no-]menu-bar] [--dry-run]` | Setup: asks what analyzes sessions (`--backend` answers it: a coding agent or a [model provider](analysis.md#model-providers), set up on the spot), lists the agents found, asks which to record, imports them, offers to analyze them now with progress (which builds the Glossary and the Map), starts the dashboard, and on macOS asks once whether to show [the menu-bar icon](install.md#the-menu-bar-icon) (off unless you say yes) ([Install](install.md#command-line)) |
8
8
  | `interlatch app` | The desktop app (window + menu bar); needs the `app` extra |
9
9
  | `interlatch ui [--open] [--menu-bar]` | Dashboard (also always running at :11524 after install; if it is, `interlatch ui` says so and `--open` opens it). On macOS the one that runs at login also shows [the menu-bar icon](install.md#the-menu-bar-icon) if you turned it on at install; `--menu-bar`/`--no-menu-bar` overrides that. Sessions, Knowledge, Projects and Glossary switch between Cards and List (a sortable table; click a row for details), remembered per page |
10
10
  | `interlatch sessions [-p project] [--since 7d]` | List sessions |
@@ -141,7 +141,7 @@ as on a session's page.
141
141
  ## Project groups
142
142
 
143
143
  Put related projects under one heading, such as **Aktio** for every Aktio repository, on the Projects page and in
144
- its sidebar. Groups are one level deep, and only change how projects are listed: each project keeps its own
144
+ its sidebar, and read them as one on the group's page. Groups are one level deep: each project keeps its own
145
145
  sessions, knowledge base and hub sharing.
146
146
 
147
147
  - **Make one:** **New group** on the Projects page, or **New group…** in a project's group menu (the folder button on
@@ -157,7 +157,21 @@ sessions, knowledge base and hub sharing.
157
157
  projects; they go back to what the other groups' rules say.
158
158
  - Each group folds away, on the page and in the sidebar, and stays folded in that browser. On **Sessions**, the project
159
159
  filter lists projects under their groups, with **All of *group*** to see every session in a group. A project's page
160
- shows its group in the breadcrumb.
160
+ shows its group in the breadcrumb, which opens the group's page.
161
+ - **The group's page:** **Analyze** on a group's heading (or **The whole group** in the sidebar) reads its projects as
162
+ one big project. **By project** puts them side by side with each one's share of the group's active time, its
163
+ sessions, estimated cost, knowledge and when it was last worked on. Below come the project page's cards over all of
164
+ them, each item named by its project: **Needs you** (each folder's uncommitted and unpushed work, and the decisions
165
+ each project's last sessions left open), **Where you left off**, **The folders now**, each project's roadmap file,
166
+ the backlog and **Week by week**. **Map** draws the projects and the services and platforms they use, hand-drawn
167
+ like an architecture sketch: a service many lines meet (a Langfuse, a database, a cloud) is one the projects share,
168
+ and dashed arcs are the links the [Systems map](#systems-map) found between the projects themselves (one edits the
169
+ other's files, or its glossary names it). Click a part or a line to see where it was found, in manifests or in the
170
+ commands sessions ran, and **Excalidraw** downloads it to edit. **Knowledge bases** shows each project's own side by
171
+ side, with each one's architecture sketch where it has one (nothing is written for the group as a whole), and the
172
+ glossary terms more than one project uses first. The Knowledge, Sessions, Artifacts and Usage tabs cover every
173
+ project in the group; Usage adds each project's active time week by week and the group's activity calendar. As on a
174
+ project's page, git and roadmap files are read only when you open the page on this computer.
161
175
 
162
176
  Groups are kept in this computer's archive and never go to a hub. On a hub with people, admins see and change the
163
177
  hub's groups; someone limited to some projects sees none. On a computer that sends to a hub, a whole group can be
@@ -20,7 +20,8 @@ Claude Desktop, Cursor, Windsurf and Gemini CLI aren't recorded, but they can us
20
20
 
21
21
  **Do I need Claude Code?** No. Analysis runs through Claude Code, Codex or IBM Bob, or a model provider's API with
22
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>`
23
+ your own computer. Pick one when you run `interlatch install`, in **Status › Analysis**, or with
24
+ `interlatch config set analysis.backend <name>`
24
25
  ([Model providers](analysis.md#model-providers)). Recording and browsing work either way; with none set up, sessions
25
26
  are archived and wait in the analysis queue.
26
27
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  [← Interlatch](../README.md) · [Docs index](README.md)
4
4
 
5
- Interlatch runs on macOS and [Windows](#windows) and needs something to analyze sessions: a logged-in [Claude Code](https://claude.com/claude-code) (`claude`) or [Codex](https://github.com/openai/codex) (`codex`), IBM Bob with a Bob API key, or a model provider's API with your own key ([Model providers](analysis.md#model-providers)). Setup uses Claude Code when it is installed and offers Codex when it is not; switch any time in **Status › Analysis** or with `interlatch config set analysis.backend codex`. There are two ways to run it; both use the same data in `~/.interlatch` and can coexist.
5
+ Interlatch runs on macOS and [Windows](#windows) and needs something to analyze sessions: a logged-in [Claude Code](https://claude.com/claude-code) (`claude`) or [Codex](https://github.com/openai/codex) (`codex`), IBM Bob with a Bob API key, or a model provider's API with your own key ([Model providers](analysis.md#model-providers)). Setup lists them all and asks which to use (Claude Code when it is installed, unless you pick another); switch any time in **Status › Analysis**, with `interlatch install --backend <name>` or with `interlatch config set analysis.backend <name>`. There are two ways to run it; both use the same data in `~/.interlatch` and can coexist.
6
6
 
7
7
  Interlatch was called Chronicle. To update from Chronicle, see [Moving from Chronicle](moving-from-chronicle.md).
8
8
 
@@ -52,8 +52,15 @@ run `uv tool install --python 3.13 .` in it.
52
52
 
53
53
  `interlatch install` (also `interlatch setup`) walks through setup:
54
54
 
55
- 1. Checks the agent that analyzes sessions (Claude Code by default). If it is missing and Codex is installed, offers
56
- to analyze with Codex instead; with neither, sessions are recorded but not analyzed until one is installed.
55
+ 1. Asks what analyzes sessions. It lists every choice with whether it is ready: Claude Code, Codex and IBM Bob
56
+ (through your own login and plan), and the model providers' APIs (Anthropic, Amazon Bedrock, OpenAI, Azure
57
+ OpenAI, OpenRouter, Ollama on this computer, any OpenAI-compatible server). Enter keeps the one marked (Claude
58
+ Code when it is installed). Pick one that isn't set up and it asks for what it still needs (an endpoint, an API
59
+ key, kept in `~/.interlatch/provider-keys.json` readable by you only, and a model, with the ones the provider
60
+ offers listed), then offers one small test call. Leave a question blank to go back to the list. Asked on the
61
+ first install only, and again while the chosen one can't run; `--backend <name>` answers without asking (and,
62
+ without a terminal, says which `interlatch config` commands finish setting it up). With nothing ready,
63
+ sessions are recorded but not analyzed until one is set up.
57
64
  2. Lists the coding agents on this Mac (Claude Code, Codex, GitHub Copilot, IBM Bob, Google Antigravity, OpenCode) and the MCP-only clients it
58
65
  finds (Claude Desktop, Cursor, Windsurf, Gemini CLI), with how many sessions each has on disk.
59
66
  3. Asks, for each one found and not yet connected, whether to record it (default yes), and whether to give each
@@ -67,8 +74,9 @@ run `uv tool install --python 3.13 .` in it.
67
74
  agents run; `--no-launchd --no-ui` turns them off. With the background sync on, it also asks once whether to
68
75
  show a desktop notification when a new version of Interlatch is out (`--notify-updates` or
69
76
  `--no-notify-updates` answers without asking).
70
- 6. Explains analysis: each past session is read through your Claude Code (or Codex) login, which counts toward
71
- your plan's usage (or through IBM Bob or the model provider you chose), and the knowledge it yields builds each
77
+ 6. Explains analysis: each past session is read through your Claude Code, Codex or IBM Bob login, which counts
78
+ toward your plan's usage (or through the model provider you chose, billed to your key, or Ollama on this
79
+ computer), and the knowledge it yields builds each
72
80
  project's knowledge base, then the **Glossary**, then the **Map**. Until sessions are analyzed, those two stay empty. It says how many sessions are waiting and how
73
81
  long the background takes over them (6 every 15 minutes), then asks whether to analyze them now with a
74
82
  progress bar per stage (sessions, knowledge bases, glossary, map themes): all of them, or the newest 20 for a
@@ -89,7 +89,7 @@ git の行とロードマップのファイルは、フォルダーがあるコ
89
89
  ## プロジェクトのグループ
90
90
 
91
91
  関連するプロジェクトを、Aktio のリポジトリをまとめた **Aktio** のように 1 つの見出しの下に置けます(プロジェクトページとそのサイドバー)。
92
- グループは 1 階層だけで、変わるのはプロジェクトの並び方だけです。各プロジェクトのセッション、ナレッジベース、ハブでの共有はそのままです。
92
+ グループのページでは、それらを 1 つのプロジェクトとして見られます。グループは 1 階層だけで、各プロジェクトのセッション、ナレッジベース、ハブでの共有はそのままです。
93
93
 
94
94
  - **作る:** プロジェクトページの **New group**、またはプロジェクトのグループメニュー(カードのフォルダーのボタン、一覧では行の末尾)の
95
95
  **New group…**。入れるプロジェクトにチェックを付けると、それらが共有するフォルダーをフォルダーのルールとして提案し(コンピューターごとに 1 つ。
@@ -101,7 +101,19 @@ git の行とロードマップのファイルは、フォルダーがあるコ
101
101
  - グループの見出しの **Edit** で、名前、ルール、プロジェクトの変更や削除ができます。グループを削除してもプロジェクトは残り、
102
102
  ほかのグループのルールどおりの場所に戻ります。
103
103
  - グループはページでもサイドバーでも折りたため、そのブラウザーでは折りたたんだままになります。**Sessions** のプロジェクトの絞り込みでは
104
- プロジェクトがグループごとに並び、**All of *グループ*** でグループのすべてのセッションを表示できます。プロジェクトのページでは、パンくずリストにグループが出ます。
104
+ プロジェクトがグループごとに並び、**All of *グループ*** でグループのすべてのセッションを表示できます。プロジェクトのページでは、パンくずリストにグループが出て、
105
+ そこからグループのページを開けます。
106
+ - **グループのページ:** グループの見出しの **Analyze**(サイドバーでは **The whole group**)で、グループのプロジェクトを 1 つの大きなプロジェクトとして見られます。
107
+ **By project** ではプロジェクトを並べ、グループのアクティブ時間に占める割合、セッション数、推定費用、ナレッジ、最後に作業した日を示します。その下には
108
+ プロジェクトのページと同じカードがすべてのプロジェクトをまとめて並び、各項目にプロジェクト名が付きます:**Needs you**(各フォルダーのコミット・プッシュしていない作業と、
109
+ 各プロジェクトの最近のセッションが残した判断)、**Where you left off**、**The folders now**、各プロジェクトのロードマップ、バックログ、**Week by week**。
110
+ **Map** では、プロジェクトと使っているサービス・プラットフォームを構成図と同じ手描き風で描きます。多くの線が集まるサービス(Langfuse、データベース、クラウドなど)は
111
+ プロジェクト間で共有しているもので、点線の弧は[システムマップ](#システムマップ)がプロジェクト同士の間に見つけたつながり(相手のファイルを編集した、用語集が相手の名前を挙げている)です。
112
+ 要素や線をクリックすると、マニフェストやセッションで実行したコマンドのどこで見つかったかを表示し、**Excalidraw** で編集用にダウンロードできます。
113
+ **Knowledge bases** では各プロジェクトのナレッジベースを、構成図があればそれも含めて並べて表示し(グループ全体のために何かを書き起こすことはしません)、
114
+ 複数のプロジェクトで使う用語集の用語を先に示します。Knowledge、Sessions、Artifacts、Usage のタブはグループのすべてのプロジェクトを対象にし、
115
+ Usage には各プロジェクトの週ごとのアクティブ時間とグループのアクティビティカレンダーが加わります。プロジェクトのページと同じく、git とロードマップのファイルは
116
+ このコンピューターでページを開いたときだけ読みます。
105
117
 
106
118
  グループはこのコンピューターのアーカイブに保存され、ハブには送られません。人を登録したハブでは管理者がハブのグループを見て変更でき、
107
119
  一部のプロジェクトだけを見られる人にはグループは表示されません。ハブに送っているコンピューターでは、グループ全体をハブの 1 つの
@@ -14,11 +14,12 @@ Claude Code、Codex、GitHub Copilot、IBM Bob、Google Antigravity、OpenCode
14
14
  サインインしていなければ扉には鍵がかかっていて、Google でのサインインを求められ、済めばひとりでに開きます。いったん入れば、
15
15
  ページを再読み込みしても出るまで中にいます。
16
16
 
17
- 中では、レールに Innerlatch のセクション(**パーティー**、**リーダーボード**、**アリーナ**)が並びます。
17
+ 中では、レールに Innerlatch のセクション(**パーティー**、**冒険**、**リーダーボード**、**アリーナ**)が並びます。
18
18
  レールの下の扉(**Interlatch に戻る**)でもとのページに戻り、扉は背後で閉まります。リーダーボードとアリーナが出るのは、Interlatch を動かしているコンピューターだけです。専用のハブや、
19
19
  一部のプロジェクトに限られたハブの人には出ません。
20
20
 
21
- パーティーのアドレスは `#/innerlatch` です。以前の `#/party` や `#/leaderboard` のリンクもそのまま使え、Innerlatch のどのアドレスもまず扉を通ります。扉のアイコンを隠すには、
21
+ パーティーのアドレスは `#/innerlatch` です。以前の `#/party` や `#/leaderboard` のリンクもそのまま使え、Innerlatch のどのアドレスもまず扉を通ります。Innerlatch の中で教訓のリンクを押すと、教訓がページの上のウィンドウに開き、
22
+ ロードマップのモジュールと、事例なら場面・問い・答えが出ます。**Interlatch でセッションを開く**でダッシュボードのセッションのページに移ります。扉のアイコンを隠すには、
22
23
  **設定 › 外観 › 扉**を**非表示**にします(このブラウザーだけ)。Innerlatch はアドレスから開けます。
23
24
 
24
25
  ## サインイン
@@ -55,16 +56,34 @@ Innerlatch の扉は、Google でサインインするまで開きません。
55
56
  クラスが変わったとき、あなたがクエストを完了したときです。各エージェントのレベルの推移もグラフで見られます。1 つの教訓で
56
57
  いくつものスキルが上がったときは 1 行にまとめます。加入、レベル、クラス、クエストはすべて残り、スキルアップは新しい 120 件が残ります。
57
58
 
58
- ## パーティーのページの旅
59
-
60
- サインインすると、**パーティー**のページの上部で放置ゲームのようにパーティーが進みます。6 人のキャラクターは、今週いちばんレベルを上げた
61
- スキル領域に合わせたブループリントの景色を歩き、今週の教訓と戦います。教訓 1 件が 1 体のモンスターで(修正はバグの Glitch、
62
- 落とし穴は Mal の壺、など)、その教訓を生んだセッションのエージェントが倒し、得た経験値が表示されます。1 週間をウェーブごとに
63
- 繰り返し、実際のレベルアップの時点ではバナーが出ます。証拠の候補があるメインクエストのマイルストーンは最後にボスとして現れ、
64
- クエストを完了にするまで倒せません。モンスターにポインターを置くと教訓が、クリックするとセッションが開きます。右上のボタンで
65
- 折りたためます。見えないときは止まり、アニメーションをオフにすると静止画になります(**設定 › 外観**)。
66
- サインインする前から、パーティーのページではサインインのカードの上に今週の教訓が灰色で並び、パーティーが眠っている間も待っています。
67
- ポインターを置くと教訓が、クリックするとそのセッションが開きます。
59
+ ## 冒険
60
+
61
+ **冒険**は、数えられる教訓をすべて載せたワールドマップです。6 つの属性がそれぞれ地方になり(技巧は鍛冶の町、データは湖と運河、
62
+ 運用は山とサーバーの塔、守護は城壁と砦、秘術は魔法使いの塔、伝承は図書館のある古い森)、ロードマップのモジュールはその地方の
63
+ 領地になります。教訓は、いちばんよく当てはまるモジュールの領地に、種類ごとのモンスターとして立っています(修正はバグの
64
+ Glitch、落とし穴は Mal、など)。まだ教訓が届いていない領地は霧に包まれています。パーティーはいちばん新しい教訓を学んだ場所に
65
+ 立ち、メインクエストのマイルストーンはボスとして地方の門を守ります。ドラッグで見回し、スクロールかピンチで拡大縮小し、
66
+ ミニマップやサイドバーの地方で移動します。**リスト**では同じ遭遇を一覧にして、地方、種類、エージェントで絞り込めます。
67
+
68
+ モンスターをクリックすると、ターン制の戦闘になります。その教訓を学んだエージェントが先頭に立ち、ほかに最大 2 人が加わります。
69
+ 毎ターン**たたかう**、**スキル**(教訓のロードマップのモジュールのひとつ。そのエージェントのレベルが高いほど強い)、**ぼうぎょ**、
70
+ **にげる**から選びます。モンスターの強さは教訓の経験値と信頼の段階で決まります。勝つと遭遇はクリア済みになり、マップの旗に
71
+ 変わります(このパーティーのアーカイブに記録されます)。負けても**もう一度**でサイコロを振り直せます。戦闘でレベルや経験値が
72
+ 変わることはありません。それらは教訓からだけ得られます。ボスとも戦えますが、倒れるのは**クエスト**でそのマイルストーンを
73
+ 完了にしたときだけです。
74
+
75
+ ## 町と装備
76
+
77
+ マップの各地方には**町**があります(冒険のサイドバーにも並びます)。町の店では、その地方のロードマップのモジュールに合わせた
78
+ **装備**を売っています。モジュールごとに武器、防具、お守りがあり、それぞれ 3 段階です。エージェントのだれかがそのスキルで
79
+ Lv 1 に達すると I 段階、Lv 3 で II 段階、Lv 5 で III 段階が店に並びます。買えるものは、エージェントの教訓が実際に扱っている
80
+ 範囲に沿って増えていきます。どの町でも戦闘用の**道具**(ポーション、エーテル、フェニックスの尾、煙玉)を売っています。
81
+
82
+ **ゴールド**は、教訓ごとの最初の勝利で手に入ります(定着した教訓や確立した教訓ほど多く、同じ教訓では二度と手に入らず、
83
+ ボスからは出ません)。最初の勝利では、教訓の種類に応じた**戦利品**(修正からはパッチ、判断からは ADR の巻物など)が
84
+ 落ちることもあります。道具と戦利品は戦闘の**どうぐ**コマンドで使います。エージェントはそれぞれ武器、防具、お守りの 3 つを
85
+ 身につけます。エージェントのページか**バッグ**で付け替え、バッグでは要らないものを売れます。装備で変わるのは戦闘の数値だけで、
86
+ レベルや経験値は教訓からだけ得られます。
68
87
 
69
88
  ## アリーナ
70
89
 
@@ -14,13 +14,15 @@ the rail brings up a large door: click it to go through. Innerlatch opens only t
14
14
  out, the door is locked and asks you to sign in with Google, then opens by itself once you have. Once through, you stay
15
15
  in until you leave, even if you reload the page.
16
16
 
17
- Inside, the rail shows Innerlatch's sections: **Party**, **Leaderboard** and **Arena**, and the door at the bottom of
17
+ Inside, the rail shows Innerlatch's sections: **Party**, **Adventure**, **Leaderboard** and **Arena**, and the door at the bottom of
18
18
  the rail (**Back to Interlatch**) leads back to the page you came from, and the door shuts behind you. The Leaderboard
19
19
  and the Arena show only on the computer that runs Interlatch: not on a dedicated hub, and not for hub people limited to
20
20
  some projects.
21
21
 
22
22
  The Party's address is `#/innerlatch`; old `#/party` and `#/leaderboard` links still work, and every address in
23
- Innerlatch meets the door first. To hide the door icon, set **Settings › Appearance › The door** to **Hidden** (this
23
+ Innerlatch meets the door first. A lesson link anywhere in Innerlatch opens the lesson in a window over the page, with
24
+ its roadmap modules and, for a case file, the scene, question and answer; **Open the session in Interlatch** leaves for
25
+ the dashboard's session page. To hide the door icon, set **Settings › Appearance › The door** to **Hidden** (this
24
26
  browser only). Innerlatch still opens from its address.
25
27
 
26
28
  ## Signing in
@@ -62,17 +64,36 @@ person's review before a milestone counts.
62
64
  and when you completed a quest, with a chart of each agent's level over time. A lesson that lifted several skills at
63
65
  once is one line. Every join, level, class and quest stays on the list; of the skill-ups, the newest 120 do.
64
66
 
65
- ## The journey on the Party page
66
-
67
- Once you're signed in, the top of the **Party** page shows your party on the move, in the style of an idle game. The six
68
- characters walk across a blueprint landscape that matches the skill area they levelled most this week, and fight this
69
- week's lessons: each lesson is a monster (a fix is Glitch the bug, a gotcha is Mal's pot, and so on), beaten by the
70
- agent whose session taught it, for the XP it earned. The week replays wave by wave; when it passes one of your real
71
- level-ups, a banner says so. Main-quest milestones with possible evidence stand at the end as bosses the party can't
72
- beat until you mark the quest done. Point at a monster to see its lesson, click it to open the session, and fold the
73
- strip away with the button in its corner. It pauses when it's out of sight, and stays still when animations are off
74
- (**Settings › Appearance**). Before you sign in, the Party page already shows this week's lessons in grey above the
75
- sign-in card, waiting while your party sleeps; point at one to see it, click it to open its session.
67
+ ## Adventure
68
+
69
+ **Adventure** is a world map with every lesson that counts on it. Each of the six attributes is a region (Craft a forge
70
+ town, Data lakes and canals, Ops mountains and server towers, Guard walls and a keep, Arcana a wizard tower, Lore an old
71
+ forest with a library), and each roadmap module is a territory in its region. Every lesson stands in the territory of
72
+ its best-matching module as a monster of its kind (a fix is Glitch the bug, a gotcha is Mal, and so on). Territories no
73
+ lesson has reached yet lie under fog. Your party stands where the newest lesson was learned, and the main quest's
74
+ milestones guard their region's gate as bosses. Drag to look around, scroll or pinch to zoom, and use the minimap or the
75
+ sidebar's regions to jump; **List** shows the same encounters as a list you can filter by region, kind and agent.
76
+
77
+ Click a monster to battle it, turn by turn: the agent that taught the lesson leads, with up to two others. Each turn
78
+ choose **Attack**, **Skill** (one of the lesson's roadmap modules, stronger the higher that agent's level in it),
79
+ **Defend** or **Run**; the monster's strength comes from the lesson's XP and trust stage. Win, and the encounter is
80
+ cleared: it becomes a flag on the map, kept in your archive for this party. Lose, and **Retry** rolls new dice.
81
+ Battles never change levels or XP: those come only from the lessons. A boss can be fought, but it only falls when you
82
+ mark its milestone done under **Quests**.
83
+
84
+ ## Towns and gear
85
+
86
+ Each region has a **town** on the map (also listed in the Adventure sidebar). Its shop sells **gear** for that region's
87
+ roadmap modules: a weapon, an armor and a charm for each module, in three tiers. A piece opens in the shop when one of
88
+ your agents reaches its level in that skill: Lv 1 for tier I, Lv 3 for tier II, Lv 5 for tier III. So what you can buy
89
+ follows what your agents' lessons actually cover. Every town also sells **supplies** for battles: Potion, Ether,
90
+ Phoenix Down and Smoke Bomb.
91
+
92
+ **Gold** comes from the first win over each lesson (more for an established or canonical one; never again for the same
93
+ lesson, and bosses pay none). A first win can also drop **loot** of the lesson's kind, such as a Patch from a fix or an
94
+ ADR Scroll from a decision. Use supplies and loot from the **Item** command in a battle. Each agent wears three slots
95
+ (weapon, armor, charm): change them on the agent's page or in the **Bag**, where you can also sell what you don't need.
96
+ Gear only changes battle numbers: levels and XP still come from lessons alone.
76
97
 
77
98
  ## The arena
78
99
 
@@ -288,14 +288,20 @@ class ApiRunner(Runner):
288
288
  return "entra" if _tool("az") else ""
289
289
  return "" if self.spec.needs_key else "none"
290
290
 
291
+ def missing(self) -> list[str]:
292
+ """What it still needs before it can run, of "endpoint", "model" and "key" (in that order)."""
293
+ return [what for what, have in (("endpoint", self.base_url), ("model", self._models()[0]),
294
+ ("key", self._credentials())) if not have]
295
+
291
296
  def unavailable_reason(self) -> str:
292
297
  from ...core.i18n import tr
293
298
 
294
- if not self.base_url:
299
+ missing = self.missing()
300
+ if "endpoint" in missing:
295
301
  return tr("{label}: set its endpoint (providers.{name}.base_url)", label=self.label, name=self.name)
296
- if not self._models()[0]:
302
+ if "model" in missing:
297
303
  return tr("{label}: choose a model (providers.{name}.model)", label=self.label, name=self.name)
298
- if not self._credentials():
304
+ if "key" in missing:
299
305
  return tr("{label}: add an API key", label=self.label)
300
306
  return ""
301
307
 
@@ -144,5 +144,11 @@ class Runner:
144
144
  res.data = data
145
145
  return res
146
146
 
147
+ def check(self) -> LLMResult:
148
+ """One small call with the main model: do the endpoint, the key and the model work? Raises LLMError."""
149
+ return self.run('Reply with {"ok": true}.', {"type": "object", "properties": {"ok": {"type": "boolean"}},
150
+ "required": ["ok"]},
151
+ system="You check that a connection works.", effort="low", timeout=120)
152
+
147
153
 
148
154
  CLAUDE_MODEL = re.compile(r"^(claude|sonnet|opus|haiku|fable)", re.I)
@@ -55,17 +55,20 @@ def status_of(row: dict, local_machine: str | None = None) -> str:
55
55
  return "present" if _HASHES[key] == row["sha256"] else "changed"
56
56
 
57
57
 
58
- def query(conn, *, kind: str | None = None, project: str | None = None, agent: str | None = None, q: str | None = None,
59
- session_id: str | None = None, local_machine: str | None = None) -> tuple[list[dict], dict[str, int]]:
58
+ def query(conn, *, kind: str | None = None, project: str | list[str] | None = None, agent: str | None = None,
59
+ q: str | None = None, session_id: str | None = None,
60
+ local_machine: str | None = None) -> tuple[list[dict], dict[str, int]]:
60
61
  """Artifacts newest first, with where each stands now, and the count of each kind (before the kind filter).
61
- Across sessions the same file, link or commit is one item (its latest version) that knows how many sessions made it."""
62
+ Across sessions the same file, link or commit is one item (its latest version) that knows how many sessions made it.
63
+ project: one project's path, or a group's paths (a list)."""
62
64
  where, params = [], []
63
65
  if session_id:
64
66
  where.append("a.session_id = ?")
65
67
  params.append(session_id)
66
68
  if project:
67
- where.append("s.project_path = ?")
68
- params.append(project)
69
+ paths = [project] if isinstance(project, str) else project
70
+ where.append(f"s.project_path IN ({','.join('?' * len(paths))})")
71
+ params += paths
69
72
  if agent:
70
73
  where.append("s.agent = ?")
71
74
  params.append(agent)
@@ -356,6 +356,29 @@ JA: dict[str, str] = {
356
356
  "sign in to see your party": "パーティーを見るにはサインインしてください",
357
357
  "no such quest": "そのクエストはありません",
358
358
  "no such track": "そのトラックはありません",
359
+ "no such lesson": "その教訓はありません",
360
+ # ---- the Town & gear (bag.py)
361
+ "no such item": "その道具はありません",
362
+ "this isn't sold here": "これはここでは売っていません",
363
+ "this is still locked: the party's skill in its module isn't high enough yet":
364
+ "まだロックされています。そのモジュールでのパーティーのスキルがまだ足りません",
365
+ "not enough gold": "ゴールドが足りません",
366
+ "you can carry at most 99 of each item": "同じ道具は 99 個までしか持てません",
367
+ "the number must be a whole number from 1 to 99": "数は 1 から 99 までの整数にしてください",
368
+ "you don't have that": "それを持っていません",
369
+ "you don't have that many": "そんなに持っていません",
370
+ "take it off before selling it": "売る前に装備を外してください",
371
+ "no such agent": "そのエージェントはいません",
372
+ "no such slot": "その装備欄はありません",
373
+ "that doesn't go in this slot": "それはこの装備欄には付けられません",
374
+ "only consumables and loot can be used": "使えるのは消耗品と戦利品だけです",
375
+ "none left": "もう残っていません",
376
+ "{tier} {noun} of {module}": "{tier}の{noun}({module})",
377
+ "+{atk} attack, and +{skill} to the {module} skill, in battle only": "攻撃 +{atk}、{module} のスキル +{skill}(戦闘中のみ)",
378
+ "+{hp} HP, and {cut}% less damage taken, in battle only": "HP +{hp}、受けるダメージ {cut}% 減(戦闘中のみ)",
379
+ "+{mp} MP, and +{skill} to the {module} skill, in battle only": "MP +{mp}、{module} のスキル +{skill}(戦闘中のみ)",
380
+ "Lv {level} in {module}": "{module} で Lv {level}",
381
+ "{name} town": "{name}の町",
359
382
  "this computer is not a hub": "このコンピューターはハブではありません",
360
383
  "Could not sign in": "サインインできませんでした",
361
384
  "Ask an admin of this hub for a new invite, or open the hub's dashboard again from your own Interlatch "