frago-cli 1.2.0__tar.gz โ†’ 1.3.7__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 (1448) hide show
  1. frago_cli-1.3.7/.gitignore +95 -0
  2. frago_cli-1.3.7/.import_linter_cache/.gitignore +2 -0
  3. frago_cli-1.3.7/.importlinter +143 -0
  4. frago_cli-1.3.7/PKG-INFO +304 -0
  5. frago_cli-1.3.7/README.md +247 -0
  6. frago_cli-1.3.7/README.zh-CN.md +242 -0
  7. frago_cli-1.3.7/docs/agent-cores.md +338 -0
  8. frago_cli-1.3.7/docs/agent-cores.zh-CN.md +301 -0
  9. frago_cli-1.3.7/docs/browser-support.md +346 -0
  10. frago_cli-1.3.7/docs/browser-support.zh-CN.md +296 -0
  11. frago_cli-1.3.7/docs/concepts.md +238 -0
  12. frago_cli-1.3.7/docs/concepts.zh-CN.md +228 -0
  13. frago_cli-1.3.7/docs/developer.md +43 -0
  14. frago_cli-1.3.7/docs/developer.zh-CN.md +42 -0
  15. frago_cli-1.3.7/docs/examples.md +598 -0
  16. frago_cli-1.3.7/docs/examples.zh-CN.md +595 -0
  17. frago_cli-1.3.7/docs/images/agent-os-stage.png +0 -0
  18. frago_cli-1.3.7/docs/images/etf-dashboard.png +0 -0
  19. frago_cli-1.3.7/docs/images/feedback-detail.png +0 -0
  20. frago_cli-1.3.7/docs/images/hero-workbench.png +0 -0
  21. frago_cli-1.3.7/docs/images/how-it-works.svg +67 -0
  22. frago_cli-1.3.7/docs/installation.md +160 -0
  23. frago_cli-1.3.7/docs/installation.zh-CN.md +159 -0
  24. frago_cli-1.3.7/docs/knowledge/data.js +232 -0
  25. frago_cli-1.3.7/docs/knowledge/index.html +60 -0
  26. frago_cli-1.3.7/docs/recipes.md +995 -0
  27. frago_cli-1.3.7/docs/recipes.zh-CN.md +990 -0
  28. frago_cli-1.3.7/docs/server-deployment.md +477 -0
  29. frago_cli-1.3.7/docs/user-guide.md +233 -0
  30. frago_cli-1.3.7/docs/user-guide.zh-CN.md +224 -0
  31. frago_cli-1.3.7/pyproject.toml +209 -0
  32. frago_cli-1.3.7/scripts/check_arch.sh +33 -0
  33. frago_cli-1.3.7/scripts/dev_launch_extension.py +54 -0
  34. frago_cli-1.3.7/src/frago/__init__.py +30 -0
  35. frago_cli-1.3.7/src/frago/__main__.py +19 -0
  36. frago_cli-1.3.7/src/frago/_resources/extension_bundle/README.md +59 -0
  37. frago_cli-1.3.7/src/frago/_resources/extension_bundle/background/offscreen.html +5 -0
  38. frago_cli-1.3.7/src/frago/_resources/extension_bundle/background/offscreen.js +91 -0
  39. frago_cli-1.3.7/src/frago/_resources/extension_bundle/background/service-worker-v11.js +1631 -0
  40. frago_cli-1.3.7/src/frago/_resources/extension_bundle/content/content_script.js +40 -0
  41. frago_cli-1.3.7/src/frago/_resources/extension_bundle/manifest.json +42 -0
  42. frago_cli-1.3.7/src/frago/agent_driver/__init__.py +20 -0
  43. frago_cli-1.3.7/src/frago/agent_driver/driver.py +226 -0
  44. frago_cli-1.3.7/src/frago/agent_driver/drivers/__init__.py +5 -0
  45. frago_cli-1.3.7/src/frago/agent_driver/drivers/claude.py +618 -0
  46. frago_cli-1.3.7/src/frago/agent_driver/drivers/codebuddy.py +638 -0
  47. frago_cli-1.3.7/src/frago/agent_driver/drivers/codex.py +579 -0
  48. frago_cli-1.3.7/src/frago/agent_driver/drivers/opencode.py +847 -0
  49. frago_cli-1.3.7/src/frago/agent_driver/pool.py +337 -0
  50. frago_cli-1.3.7/src/frago/agent_driver/streamer.py +101 -0
  51. frago_cli-1.3.7/src/frago/agent_driver/tmux_session.py +667 -0
  52. frago_cli-1.3.7/src/frago/agent_driver/transcript.py +96 -0
  53. frago_cli-1.3.7/src/frago/agent_driver/transcript_source.py +186 -0
  54. frago_cli-1.3.7/src/frago/autostart/linux.py +270 -0
  55. frago_cli-1.3.7/src/frago/bin/darwin-arm64/frago-core +0 -0
  56. frago_cli-1.3.7/src/frago/bin/darwin-x86_64/frago-core +0 -0
  57. frago_cli-1.3.7/src/frago/bin/linux-x86_64/frago-core +0 -0
  58. frago_cli-1.3.7/src/frago/bin/windows-x86_64/frago-core.exe +0 -0
  59. frago_cli-1.3.7/src/frago/browser/__init__.py +24 -0
  60. frago_cli-1.3.7/src/frago/browser/backends/__init__.py +27 -0
  61. frago_cli-1.3.7/src/frago/browser/backends/base.py +216 -0
  62. frago_cli-1.3.7/src/frago/browser/backends/cdp.py +342 -0
  63. frago_cli-1.3.7/src/frago/browser/backends/extension.py +779 -0
  64. frago_cli-1.3.7/src/frago/browser/cdp/__init__.py +19 -0
  65. frago_cli-1.3.7/src/frago/browser/cdp/browser_detection.py +189 -0
  66. frago_cli-1.3.7/src/frago/browser/cdp/client.py +94 -0
  67. frago_cli-1.3.7/src/frago/browser/cdp/commands/__init__.py +29 -0
  68. frago_cli-1.3.7/src/frago/browser/cdp/commands/dom.py +102 -0
  69. frago_cli-1.3.7/src/frago/browser/cdp/commands/input.py +147 -0
  70. frago_cli-1.3.7/src/frago/browser/cdp/commands/page.py +236 -0
  71. frago_cli-1.3.7/src/frago/browser/cdp/commands/runtime.py +86 -0
  72. frago_cli-1.3.7/src/frago/browser/cdp/commands/screenshot.py +71 -0
  73. frago_cli-1.3.7/src/frago/browser/cdp/commands/scroll.py +110 -0
  74. frago_cli-1.3.7/src/frago/browser/cdp/commands/status.py +91 -0
  75. frago_cli-1.3.7/src/frago/browser/cdp/commands/target.py +111 -0
  76. frago_cli-1.3.7/src/frago/browser/cdp/commands/visual_effects.py +230 -0
  77. frago_cli-1.3.7/src/frago/browser/cdp/commands/wait.py +70 -0
  78. frago_cli-1.3.7/src/frago/browser/cdp/commands/zoom.py +53 -0
  79. frago_cli-1.3.7/src/frago/browser/cdp/config.py +182 -0
  80. frago_cli-1.3.7/src/frago/browser/cdp/exceptions.py +50 -0
  81. frago_cli-1.3.7/src/frago/browser/cdp/landing.py +53 -0
  82. frago_cli-1.3.7/src/frago/browser/cdp/launcher.py +923 -0
  83. frago_cli-1.3.7/src/frago/browser/cdp/logger.py +199 -0
  84. frago_cli-1.3.7/src/frago/browser/cdp/process.py +42 -0
  85. frago_cli-1.3.7/src/frago/browser/cdp/retry.py +217 -0
  86. frago_cli-1.3.7/src/frago/browser/cdp/session.py +548 -0
  87. frago_cli-1.3.7/src/frago/browser/cdp/tab_group_manager.py +811 -0
  88. frago_cli-1.3.7/src/frago/browser/cdp/tab_manager.py +291 -0
  89. frago_cli-1.3.7/src/frago/browser/cdp/targets.py +29 -0
  90. frago_cli-1.3.7/src/frago/browser/cdp/transport.py +401 -0
  91. frago_cli-1.3.7/src/frago/browser/cdp/types.py +85 -0
  92. frago_cli-1.3.7/src/frago/browser/extension/README.md +130 -0
  93. frago_cli-1.3.7/src/frago/browser/extension/__init__.py +52 -0
  94. frago_cli-1.3.7/src/frago/browser/extension/lifecycle.py +474 -0
  95. frago_cli-1.3.7/src/frago/browser/extension/native_host.py +415 -0
  96. frago_cli-1.3.7/src/frago/browser/extension/protocol.py +102 -0
  97. frago_cli-1.3.7/src/frago/browser/profile_seed.py +130 -0
  98. frago_cli-1.3.7/src/frago/browser/proxy_detect.py +224 -0
  99. frago_cli-1.3.7/src/frago/cli/__init__.py +9 -0
  100. frago_cli-1.3.7/src/frago/cli/agent_command.py +873 -0
  101. frago_cli-1.3.7/src/frago/cli/agent_friendly.py +292 -0
  102. frago_cli-1.3.7/src/frago/cli/apps_commands.py +272 -0
  103. frago_cli-1.3.7/src/frago/cli/autostart_command.py +78 -0
  104. frago_cli-1.3.7/src/frago/cli/book_commands.py +248 -0
  105. frago_cli-1.3.7/src/frago/cli/browser_commands.py +678 -0
  106. frago_cli-1.3.7/src/frago/cli/channel_commands.py +241 -0
  107. frago_cli-1.3.7/src/frago/cli/chat.py +332 -0
  108. frago_cli-1.3.7/src/frago/cli/client_commands.py +157 -0
  109. frago_cli-1.3.7/src/frago/cli/cloud_commands.py +409 -0
  110. frago_cli-1.3.7/src/frago/cli/commands.py +2863 -0
  111. frago_cli-1.3.7/src/frago/cli/context_commands.py +166 -0
  112. frago_cli-1.3.7/src/frago/cli/daemon_commands.py +281 -0
  113. frago_cli-1.3.7/src/frago/cli/def_commands.py +286 -0
  114. frago_cli-1.3.7/src/frago/cli/deployment_agent.py +468 -0
  115. frago_cli-1.3.7/src/frago/cli/desktop_commands.py +110 -0
  116. frago_cli-1.3.7/src/frago/cli/drive_command.py +376 -0
  117. frago_cli-1.3.7/src/frago/cli/extension_commands.py +229 -0
  118. frago_cli-1.3.7/src/frago/cli/hook_rules_commands.py +713 -0
  119. frago_cli-1.3.7/src/frago/cli/init_command.py +480 -0
  120. frago_cli-1.3.7/src/frago/cli/main.py +519 -0
  121. frago_cli-1.3.7/src/frago/cli/profile_commands.py +235 -0
  122. frago_cli-1.3.7/src/frago/cli/recipe_commands.py +3752 -0
  123. frago_cli-1.3.7/src/frago/cli/remote_commands.py +345 -0
  124. frago_cli-1.3.7/src/frago/cli/reply_command.py +82 -0
  125. frago_cli-1.3.7/src/frago/cli/schedule_commands.py +393 -0
  126. frago_cli-1.3.7/src/frago/cli/server_command.py +469 -0
  127. frago_cli-1.3.7/src/frago/cli/session_commands.py +736 -0
  128. frago_cli-1.3.7/src/frago/cli/start_command.py +256 -0
  129. frago_cli-1.3.7/src/frago/cli/todo_commands.py +336 -0
  130. frago_cli-1.3.7/src/frago/cli/update_command.py +147 -0
  131. frago_cli-1.3.7/src/frago/cli/user_commands.py +381 -0
  132. frago_cli-1.3.7/src/frago/cli/view_command.py +101 -0
  133. frago_cli-1.3.7/src/frago/cli/workspace.py +838 -0
  134. frago_cli-1.3.7/src/frago/cli/workspace_commands.py +164 -0
  135. frago_cli-1.3.7/src/frago/client/index.html +186 -0
  136. frago_cli-1.3.7/src/frago/client/package-lock.json +6947 -0
  137. frago_cli-1.3.7/src/frago/client/package.json +44 -0
  138. frago_cli-1.3.7/src/frago/client/pnpm-lock.yaml +4263 -0
  139. frago_cli-1.3.7/src/frago/client/src/App.tsx +155 -0
  140. frago_cli-1.3.7/src/frago/client/src/__tests__/routes.test.ts +98 -0
  141. frago_cli-1.3.7/src/frago/client/src/api/__tests__/withMode.test.ts +85 -0
  142. frago_cli-1.3.7/src/frago/client/src/api/client.ts +1249 -0
  143. frago_cli-1.3.7/src/frago/client/src/api/index.ts +1242 -0
  144. frago_cli-1.3.7/src/frago/client/src/api/pywebview.ts +292 -0
  145. frago_cli-1.3.7/src/frago/client/src/api/websocket.ts +317 -0
  146. frago_cli-1.3.7/src/frago/client/src/assets/README.md +13 -0
  147. frago_cli-1.3.7/src/frago/client/src/assets/walker.png +0 -0
  148. frago_cli-1.3.7/src/frago/client/src/components/dataRepo/DataRepoPage.tsx +440 -0
  149. frago_cli-1.3.7/src/frago/client/src/components/dataRepo/SyncDialog.tsx +306 -0
  150. frago_cli-1.3.7/src/frago/client/src/components/dataRepo/__tests__/DataRepoPage.test.tsx +173 -0
  151. frago_cli-1.3.7/src/frago/client/src/components/github/GitHubGuardBanner.tsx +168 -0
  152. frago_cli-1.3.7/src/frago/client/src/components/github/GitHubSetupModal.tsx +539 -0
  153. frago_cli-1.3.7/src/frago/client/src/components/github/__tests__/GitHubGuardBanner.test.tsx +124 -0
  154. frago_cli-1.3.7/src/frago/client/src/components/github/__tests__/GitHubSetupModal.test.tsx +209 -0
  155. frago_cli-1.3.7/src/frago/client/src/components/init/AuthMethodStep.tsx +384 -0
  156. frago_cli-1.3.7/src/frago/client/src/components/init/CoreSelectionStep.tsx +207 -0
  157. frago_cli-1.3.7/src/frago/client/src/components/init/InitWizardModal.tsx +296 -0
  158. frago_cli-1.3.7/src/frago/client/src/components/init/InitWizardPage.tsx +301 -0
  159. frago_cli-1.3.7/src/frago/client/src/components/init/useCoreSelection.ts +46 -0
  160. frago_cli-1.3.7/src/frago/client/src/components/layout/EnvironmentModal.tsx +317 -0
  161. frago_cli-1.3.7/src/frago/client/src/components/layout/MainLayout.tsx +47 -0
  162. frago_cli-1.3.7/src/frago/client/src/components/layout/MobileTabBar.tsx +34 -0
  163. frago_cli-1.3.7/src/frago/client/src/components/layout/Sidebar.tsx +403 -0
  164. frago_cli-1.3.7/src/frago/client/src/components/layout/TmuxSessionsModal.tsx +320 -0
  165. frago_cli-1.3.7/src/frago/client/src/components/newTask/NewTaskPage.tsx +377 -0
  166. frago_cli-1.3.7/src/frago/client/src/components/recipes/CollapsibleSection.tsx +36 -0
  167. frago_cli-1.3.7/src/frago/client/src/components/recipes/CommunityRecipeList.tsx +263 -0
  168. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeDetail.tsx +92 -0
  169. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeForgeModal.tsx +123 -0
  170. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeList.tsx +356 -0
  171. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeOverview.tsx +208 -0
  172. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeParamField.tsx +84 -0
  173. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeRunModal.tsx +235 -0
  174. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeRunPanel.tsx +186 -0
  175. frago_cli-1.3.7/src/frago/client/src/components/recipes/RecipeTabs.tsx +49 -0
  176. frago_cli-1.3.7/src/frago/client/src/components/recipes/useRecipeDetail.ts +239 -0
  177. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/Composer.tsx +463 -0
  178. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/GroupPicker.tsx +142 -0
  179. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/NewSessionModal.tsx +409 -0
  180. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/RecordCard.tsx +1613 -0
  181. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/RecordStream.tsx +487 -0
  182. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/ReportPanel.tsx +521 -0
  183. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/SessionItem.tsx +414 -0
  184. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/SessionLaunchPanel.tsx +147 -0
  185. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/SessionRail.tsx +1077 -0
  186. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/SessionWorkbenchPage.tsx +197 -0
  187. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/StopRunButton.tsx +70 -0
  188. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/TokenCalendarModal.tsx +160 -0
  189. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/Composer.test.tsx +483 -0
  190. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/LanguageSwitch.test.tsx +144 -0
  191. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/NewSessionModal.test.tsx +270 -0
  192. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/RecordCard.test.tsx +474 -0
  193. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionLaunchPanel.test.tsx +71 -0
  194. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailGroups.test.tsx +283 -0
  195. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailPaging.test.tsx +231 -0
  196. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailPins.test.tsx +222 -0
  197. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailTree.test.tsx +230 -0
  198. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/SessionWorkbench.test.tsx +879 -0
  199. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/StopRunButton.test.tsx +96 -0
  200. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/__tests__/tokenCalendarUtils.test.ts +73 -0
  201. frago_cli-1.3.7/src/frago/client/src/components/sessionWorkbench/tokenCalendarUtils.ts +66 -0
  202. frago_cli-1.3.7/src/frago/client/src/components/settings/AboutSettings.tsx +51 -0
  203. frago_cli-1.3.7/src/frago/client/src/components/settings/ActiveProfileCard.tsx +97 -0
  204. frago_cli-1.3.7/src/frago/client/src/components/settings/AppearanceSettings.tsx +63 -0
  205. frago_cli-1.3.7/src/frago/client/src/components/settings/ChannelDialog.tsx +146 -0
  206. frago_cli-1.3.7/src/frago/client/src/components/settings/ChannelTable.tsx +173 -0
  207. frago_cli-1.3.7/src/frago/client/src/components/settings/ConnectionRolesCard.tsx +244 -0
  208. frago_cli-1.3.7/src/frago/client/src/components/settings/GeneralSettings.tsx +252 -0
  209. frago_cli-1.3.7/src/frago/client/src/components/settings/InitSettings.tsx +265 -0
  210. frago_cli-1.3.7/src/frago/client/src/components/settings/OfficialResourceSettings.tsx +193 -0
  211. frago_cli-1.3.7/src/frago/client/src/components/settings/ProfileForm.tsx +359 -0
  212. frago_cli-1.3.7/src/frago/client/src/components/settings/ProfileList.tsx +334 -0
  213. frago_cli-1.3.7/src/frago/client/src/components/settings/ProfileManager.tsx +90 -0
  214. frago_cli-1.3.7/src/frago/client/src/components/settings/PromptCapabilitySettings.tsx +199 -0
  215. frago_cli-1.3.7/src/frago/client/src/components/settings/SettingsPage.tsx +132 -0
  216. frago_cli-1.3.7/src/frago/client/src/components/settings/TaskIngestionPanel.tsx +127 -0
  217. frago_cli-1.3.7/src/frago/client/src/components/settings/__tests__/ConnectionRolesCard.test.tsx +244 -0
  218. frago_cli-1.3.7/src/frago/client/src/components/settings/__tests__/ProfileManager.test.tsx +284 -0
  219. frago_cli-1.3.7/src/frago/client/src/components/settings/useProfiles.ts +505 -0
  220. frago_cli-1.3.7/src/frago/client/src/components/settings/useTaskIngestion.ts +156 -0
  221. frago_cli-1.3.7/src/frago/client/src/components/skills/SkillList.tsx +49 -0
  222. frago_cli-1.3.7/src/frago/client/src/components/tasks/content/JsonContent.tsx +76 -0
  223. frago_cli-1.3.7/src/frago/client/src/components/todos/TodoDetail.tsx +150 -0
  224. frago_cli-1.3.7/src/frago/client/src/components/todos/TodoPage.tsx +315 -0
  225. frago_cli-1.3.7/src/frago/client/src/components/todos/index.ts +2 -0
  226. frago_cli-1.3.7/src/frago/client/src/components/todos/todoMeta.ts +50 -0
  227. frago_cli-1.3.7/src/frago/client/src/components/ui/AttachmentStrip.tsx +99 -0
  228. frago_cli-1.3.7/src/frago/client/src/components/ui/DirectoryAutocomplete.tsx +220 -0
  229. frago_cli-1.3.7/src/frago/client/src/components/ui/NoiseField.tsx +220 -0
  230. frago_cli-1.3.7/src/frago/client/src/components/workspace/FileBrowser.tsx +330 -0
  231. frago_cli-1.3.7/src/frago/client/src/components/workspace/WorkspacePage.tsx +124 -0
  232. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useAsync.test.ts +130 -0
  233. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useAutoRefresh.test.ts +182 -0
  234. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useSessionLaunch.test.ts +181 -0
  235. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useSessionObserver.test.ts +125 -0
  236. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useSessionPins.test.ts +177 -0
  237. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useWorkbenchRecords.test.ts +643 -0
  238. frago_cli-1.3.7/src/frago/client/src/hooks/__tests__/useWorkbenchSessions.test.ts +223 -0
  239. frago_cli-1.3.7/src/frago/client/src/hooks/useAgentClients.ts +219 -0
  240. frago_cli-1.3.7/src/frago/client/src/hooks/useAsync.ts +95 -0
  241. frago_cli-1.3.7/src/frago/client/src/hooks/useAttachments.ts +152 -0
  242. frago_cli-1.3.7/src/frago/client/src/hooks/useAutoRefresh.ts +111 -0
  243. frago_cli-1.3.7/src/frago/client/src/hooks/useClaudeUsage.ts +46 -0
  244. frago_cli-1.3.7/src/frago/client/src/hooks/useEnvironment.ts +172 -0
  245. frago_cli-1.3.7/src/frago/client/src/hooks/useHashRoute.ts +41 -0
  246. frago_cli-1.3.7/src/frago/client/src/hooks/useReportLayout.ts +143 -0
  247. frago_cli-1.3.7/src/frago/client/src/hooks/useSendToSession.ts +294 -0
  248. frago_cli-1.3.7/src/frago/client/src/hooks/useSessionGroups.ts +293 -0
  249. frago_cli-1.3.7/src/frago/client/src/hooks/useSessionLaunch.ts +192 -0
  250. frago_cli-1.3.7/src/frago/client/src/hooks/useSessionObserver.ts +145 -0
  251. frago_cli-1.3.7/src/frago/client/src/hooks/useSessionPins.ts +145 -0
  252. frago_cli-1.3.7/src/frago/client/src/hooks/useStopSessionRun.ts +193 -0
  253. frago_cli-1.3.7/src/frago/client/src/hooks/useTmuxSessions.ts +107 -0
  254. frago_cli-1.3.7/src/frago/client/src/hooks/useWorkbenchRecords.ts +688 -0
  255. frago_cli-1.3.7/src/frago/client/src/hooks/useWorkbenchSessions.ts +439 -0
  256. frago_cli-1.3.7/src/frago/client/src/i18n/locales/en.json +1490 -0
  257. frago_cli-1.3.7/src/frago/client/src/i18n/locales/zh.json +1490 -0
  258. frago_cli-1.3.7/src/frago/client/src/routes.ts +132 -0
  259. frago_cli-1.3.7/src/frago/client/src/stores/__tests__/dataStore.test.ts +195 -0
  260. frago_cli-1.3.7/src/frago/client/src/stores/__tests__/pageStore.test.ts +107 -0
  261. frago_cli-1.3.7/src/frago/client/src/stores/__tests__/uiStore.test.ts +165 -0
  262. frago_cli-1.3.7/src/frago/client/src/stores/appStore.ts +57 -0
  263. frago_cli-1.3.7/src/frago/client/src/stores/dataStore.ts +383 -0
  264. frago_cli-1.3.7/src/frago/client/src/stores/pageStore.ts +73 -0
  265. frago_cli-1.3.7/src/frago/client/src/stores/uiStore.ts +222 -0
  266. frago_cli-1.3.7/src/frago/client/src/styles/globals.css +5967 -0
  267. frago_cli-1.3.7/src/frago/client/src/styles/timeline.css +439 -0
  268. frago_cli-1.3.7/src/frago/client/src/types/api.ts +1089 -0
  269. frago_cli-1.3.7/src/frago/client/src/types/pywebview.d.ts +599 -0
  270. frago_cli-1.3.7/src/frago/client/tailwind.config.js +64 -0
  271. frago_cli-1.3.7/src/frago/client/vite.config.ts +68 -0
  272. frago_cli-1.3.7/src/frago/client/vitest.config.ts +17 -0
  273. frago_cli-1.3.7/src/frago/client/vitest.setup.ts +54 -0
  274. frago_cli-1.3.7/src/frago/compat.py +283 -0
  275. frago_cli-1.3.7/src/frago/config/__init__.py +1 -0
  276. frago_cli-1.3.7/src/frago/config/config_service.py +169 -0
  277. frago_cli-1.3.7/src/frago/context/__init__.py +53 -0
  278. frago_cli-1.3.7/src/frago/context/data_scheme.py +22 -0
  279. frago_cli-1.3.7/src/frago/context/errors.py +16 -0
  280. frago_cli-1.3.7/src/frago/context/matcher.py +162 -0
  281. frago_cli-1.3.7/src/frago/context/report.py +462 -0
  282. frago_cli-1.3.7/src/frago/context/resolver.py +79 -0
  283. frago_cli-1.3.7/src/frago/context/whole_home.py +27 -0
  284. frago_cli-1.3.7/src/frago/def_/query_engine.py +402 -0
  285. frago_cli-1.3.7/src/frago/desktop/__init__.py +26 -0
  286. frago_cli-1.3.7/src/frago/desktop/aos.py +1111 -0
  287. frago_cli-1.3.7/src/frago/desktop/assets/ansi.js +107 -0
  288. frago_cli-1.3.7/src/frago/desktop/assets/app.js +1474 -0
  289. frago_cli-1.3.7/src/frago/desktop/assets/index.html +250 -0
  290. frago_cli-1.3.7/src/frago/desktop/assets/style.css +896 -0
  291. frago_cli-1.3.7/src/frago/desktop/broker.py +5923 -0
  292. frago_cli-1.3.7/src/frago/desktop/design/broker-page-protocol.md +1136 -0
  293. frago_cli-1.3.7/src/frago/desktop/health.py +518 -0
  294. frago_cli-1.3.7/src/frago/desktop/refs.py +126 -0
  295. frago_cli-1.3.7/src/frago/desktop/registry.py +295 -0
  296. frago_cli-1.3.7/src/frago/desktop/spec.md +1509 -0
  297. frago_cli-1.3.7/src/frago/desktop/stage.py +651 -0
  298. frago_cli-1.3.7/src/frago/init/__init__.py +108 -0
  299. frago_cli-1.3.7/src/frago/init/app_control.py +72 -0
  300. frago_cli-1.3.7/src/frago/init/checker.py +269 -0
  301. frago_cli-1.3.7/src/frago/init/codex_hooks.py +268 -0
  302. frago_cli-1.3.7/src/frago/init/config_manager.py +336 -0
  303. frago_cli-1.3.7/src/frago/init/configurator.py +1021 -0
  304. frago_cli-1.3.7/src/frago/init/hook_binary.py +370 -0
  305. frago_cli-1.3.7/src/frago/init/models.py +427 -0
  306. frago_cli-1.3.7/src/frago/init/opencode_plugin.py +156 -0
  307. frago_cli-1.3.7/src/frago/init/profile_manager.py +749 -0
  308. frago_cli-1.3.7/src/frago/init/profile_target_backup.py +82 -0
  309. frago_cli-1.3.7/src/frago/init/profile_targets.py +183 -0
  310. frago_cli-1.3.7/src/frago/init/resources.py +110 -0
  311. frago_cli-1.3.7/src/frago/init/retired_artifacts.py +259 -0
  312. frago_cli-1.3.7/src/frago/init/user_resource_seed.py +286 -0
  313. frago_cli-1.3.7/src/frago/recipes/app_state.py +411 -0
  314. frago_cli-1.3.7/src/frago/recipes/background.py +103 -0
  315. frago_cli-1.3.7/src/frago/recipes/birth.py +69 -0
  316. frago_cli-1.3.7/src/frago/recipes/checks.py +336 -0
  317. frago_cli-1.3.7/src/frago/recipes/context.py +683 -0
  318. frago_cli-1.3.7/src/frago/recipes/contract.py +278 -0
  319. frago_cli-1.3.7/src/frago/recipes/data_migration.py +1119 -0
  320. frago_cli-1.3.7/src/frago/recipes/exceptions.py +82 -0
  321. frago_cli-1.3.7/src/frago/recipes/execution_store.py +329 -0
  322. frago_cli-1.3.7/src/frago/recipes/installer.py +723 -0
  323. frago_cli-1.3.7/src/frago/recipes/isolation.py +1153 -0
  324. frago_cli-1.3.7/src/frago/recipes/metadata.py +485 -0
  325. frago_cli-1.3.7/src/frago/recipes/publish.py +568 -0
  326. frago_cli-1.3.7/src/frago/recipes/registry.py +455 -0
  327. frago_cli-1.3.7/src/frago/recipes/runner.py +1290 -0
  328. frago_cli-1.3.7/src/frago/recipes/runtime/frago_recipe.py +837 -0
  329. frago_cli-1.3.7/src/frago/recipes/schedule.py +56 -0
  330. frago_cli-1.3.7/src/frago/recipes/template.py +460 -0
  331. frago_cli-1.3.7/src/frago/resources/agent-disciplines.md +44 -0
  332. frago_cli-1.3.7/src/frago/resources/book/_guidance.md +17 -0
  333. frago_cli-1.3.7/src/frago/resources/book/_identity.md +9 -0
  334. frago_cli-1.3.7/src/frago/resources/book/_index.yaml +183 -0
  335. frago_cli-1.3.7/src/frago/resources/book/_scenes.yaml +83 -0
  336. frago_cli-1.3.7/src/frago/resources/book/agent-worker-driving.md +81 -0
  337. frago_cli-1.3.7/src/frago/resources/book/better-recipe-gate.md +89 -0
  338. frago_cli-1.3.7/src/frago/resources/book/better-server-restart.md +51 -0
  339. frago_cli-1.3.7/src/frago/resources/book/better-structured-data.md +20 -0
  340. frago_cli-1.3.7/src/frago/resources/book/browser-anti-bot.md +51 -0
  341. frago_cli-1.3.7/src/frago/resources/book/browser-backend-choice.md +83 -0
  342. frago_cli-1.3.7/src/frago/resources/book/browser-startup.md +41 -0
  343. frago_cli-1.3.7/src/frago/resources/book/browser-usage.md +186 -0
  344. frago_cli-1.3.7/src/frago/resources/book/context-recall.md +80 -0
  345. frago_cli-1.3.7/src/frago/resources/book/def-knowledge.md +49 -0
  346. frago_cli-1.3.7/src/frago/resources/book/desktop-usage.md +102 -0
  347. frago_cli-1.3.7/src/frago/resources/book/domain-insights.md +44 -0
  348. frago_cli-1.3.7/src/frago/resources/book/frago-principle-extend.md +71 -0
  349. frago_cli-1.3.7/src/frago/resources/book/frago-principle-os.md +81 -0
  350. frago_cli-1.3.7/src/frago/resources/book/frago-principle-recall.md +59 -0
  351. frago_cli-1.3.7/src/frago/resources/book/frago-principle-trust.md +69 -0
  352. frago_cli-1.3.7/src/frago/resources/book/hook-rules-authoring.md +154 -0
  353. frago_cli-1.3.7/src/frago/resources/book/interactive-recipe.md +283 -0
  354. frago_cli-1.3.7/src/frago/resources/book/must-browser-fetch.md +44 -0
  355. frago_cli-1.3.7/src/frago/resources/book/must-browser-search.md +43 -0
  356. frago_cli-1.3.7/src/frago/resources/book/must-data-dir.md +104 -0
  357. frago_cli-1.3.7/src/frago/resources/book/must-execution-principles.md +63 -0
  358. frago_cli-1.3.7/src/frago/resources/book/must-explain-in-business-language.md +135 -0
  359. frago_cli-1.3.7/src/frago/resources/book/must-no-auto-memory.md +55 -0
  360. frago_cli-1.3.7/src/frago/resources/book/must-output-shape.md +132 -0
  361. frago_cli-1.3.7/src/frago/resources/book/must-recipe-data.md +290 -0
  362. frago_cli-1.3.7/src/frago/resources/book/must-system-frago.md +40 -0
  363. frago_cli-1.3.7/src/frago/resources/book/must-tool-priority.md +38 -0
  364. frago_cli-1.3.7/src/frago/resources/book/prompt-form-protocol.md +53 -0
  365. frago_cli-1.3.7/src/frago/resources/book/recipe-authoring.md +382 -0
  366. frago_cli-1.3.7/src/frago/resources/book/recipe-creation.md +333 -0
  367. frago_cli-1.3.7/src/frago/resources/book/recipe-deploy.md +319 -0
  368. frago_cli-1.3.7/src/frago/resources/book/recipe-execution.md +28 -0
  369. frago_cli-1.3.7/src/frago/resources/book/recipe-expose.md +297 -0
  370. frago_cli-1.3.7/src/frago/resources/book/recipe-fields.md +153 -0
  371. frago_cli-1.3.7/src/frago/resources/book/recipe-spec-writing.md +88 -0
  372. frago_cli-1.3.7/src/frago/resources/book/remote-frago.md +76 -0
  373. frago_cli-1.3.7/src/frago/resources/book/scene-content-creation.md +29 -0
  374. frago_cli-1.3.7/src/frago/resources/book/scene-data-extraction.md +37 -0
  375. frago_cli-1.3.7/src/frago/resources/book/scene-form-automation.md +33 -0
  376. frago_cli-1.3.7/src/frago/resources/book/scene-multi-page-workflow.md +40 -0
  377. frago_cli-1.3.7/src/frago/resources/book/scene-recipe-development.md +41 -0
  378. frago_cli-1.3.7/src/frago/resources/book/scene-web-research.md +33 -0
  379. frago_cli-1.3.7/src/frago/resources/book/schedule-tasks.md +109 -0
  380. frago_cli-1.3.7/src/frago/resources/book/session-handoff.md +90 -0
  381. frago_cli-1.3.7/src/frago/resources/book/session-search.md +62 -0
  382. frago_cli-1.3.7/src/frago/resources/book/stop-signals-authoring.md +66 -0
  383. frago_cli-1.3.7/src/frago/resources/constitution.md +22 -0
  384. frago_cli-1.3.7/src/frago/resources/frago-home-gitignore.template +164 -0
  385. frago_cli-1.3.7/src/frago/resources/guide/en/02-interface-faq.md +249 -0
  386. frago_cli-1.3.7/src/frago/resources/guide/en/05-troubleshooting.md +377 -0
  387. frago_cli-1.3.7/src/frago/resources/guide/zh-CN/02-interface-faq.md +249 -0
  388. frago_cli-1.3.7/src/frago/resources/guide/zh-CN/05-troubleshooting.md +377 -0
  389. frago_cli-1.3.7/src/frago/resources/hook/builtin-rules.json +566 -0
  390. frago_cli-1.3.7/src/frago/resources/hook/fallback.md +6 -0
  391. frago_cli-1.3.7/src/frago/resources/hook/group-assign.md +12 -0
  392. frago_cli-1.3.7/src/frago/resources/hook/group-tags.md +14 -0
  393. frago_cli-1.3.7/src/frago/resources/hook/observer.md +19 -0
  394. frago_cli-1.3.7/src/frago/resources/hook/prompt.md +34 -0
  395. frago_cli-1.3.7/src/frago/resources/hook/stop-signals.json +33 -0
  396. frago_cli-1.3.7/src/frago/resources/hook/stop.md +59 -0
  397. frago_cli-1.3.7/src/frago/resources/hook/veto.md +28 -0
  398. frago_cli-1.3.7/src/frago/resources/mascot/README.md +49 -0
  399. frago_cli-1.3.7/src/frago/resources/mascot/characters.png +0 -0
  400. frago_cli-1.3.7/src/frago/resources/mascot/walker.png +0 -0
  401. frago_cli-1.3.7/src/frago/resources/opencode/frago-hook.js +763 -0
  402. frago_cli-1.3.7/src/frago/resources/opencode/injection-markers.json +17 -0
  403. frago_cli-1.3.7/src/frago/resources/opencode/tool-name-map.json +17 -0
  404. frago_cli-1.3.7/src/frago/resources/opencode/vision-context.json +12 -0
  405. frago_cli-1.3.7/src/frago/run/context.py +216 -0
  406. frago_cli-1.3.7/src/frago/run/exceptions.py +81 -0
  407. frago_cli-1.3.7/src/frago/run/logger.py +161 -0
  408. frago_cli-1.3.7/src/frago/run/models.py +267 -0
  409. frago_cli-1.3.7/src/frago/run/perception.py +145 -0
  410. frago_cli-1.3.7/src/frago/run/run_log_adapter.py +78 -0
  411. frago_cli-1.3.7/src/frago/run/screenshot.py +83 -0
  412. frago_cli-1.3.7/src/frago/server/app.py +757 -0
  413. frago_cli-1.3.7/src/frago/server/assets/assets/index-Ckcmafpb.js +651 -0
  414. frago_cli-1.3.7/src/frago/server/assets/index.html +187 -0
  415. frago_cli-1.3.7/src/frago/server/daemon.py +828 -0
  416. frago_cli-1.3.7/src/frago/server/identity.py +1467 -0
  417. frago_cli-1.3.7/src/frago/server/launch_guard.py +172 -0
  418. frago_cli-1.3.7/src/frago/server/models.py +691 -0
  419. frago_cli-1.3.7/src/frago/server/restarter.py +221 -0
  420. frago_cli-1.3.7/src/frago/server/routes/__init__.py +58 -0
  421. frago_cli-1.3.7/src/frago/server/routes/agent.py +198 -0
  422. frago_cli-1.3.7/src/frago/server/routes/app_pages.py +513 -0
  423. frago_cli-1.3.7/src/frago/server/routes/app_run.py +454 -0
  424. frago_cli-1.3.7/src/frago/server/routes/auth.py +345 -0
  425. frago_cli-1.3.7/src/frago/server/routes/browser_dashboard.py +91 -0
  426. frago_cli-1.3.7/src/frago/server/routes/bus.py +548 -0
  427. frago_cli-1.3.7/src/frago/server/routes/claude_sessions.py +105 -0
  428. frago_cli-1.3.7/src/frago/server/routes/config.py +98 -0
  429. frago_cli-1.3.7/src/frago/server/routes/data_repo.py +192 -0
  430. frago_cli-1.3.7/src/frago/server/routes/pa.py +175 -0
  431. frago_cli-1.3.7/src/frago/server/routes/recipes.py +572 -0
  432. frago_cli-1.3.7/src/frago/server/routes/session_observer.py +21 -0
  433. frago_cli-1.3.7/src/frago/server/routes/settings.py +1557 -0
  434. frago_cli-1.3.7/src/frago/server/routes/system.py +231 -0
  435. frago_cli-1.3.7/src/frago/server/routes/todos.py +152 -0
  436. frago_cli-1.3.7/src/frago/server/routes/workbench.py +554 -0
  437. frago_cli-1.3.7/src/frago/server/routes/workspace.py +153 -0
  438. frago_cli-1.3.7/src/frago/server/runner.py +450 -0
  439. frago_cli-1.3.7/src/frago/server/security.py +1220 -0
  440. frago_cli-1.3.7/src/frago/server/services/__init__.py +34 -0
  441. frago_cli-1.3.7/src/frago/server/services/agent_knowledge.json +68 -0
  442. frago_cli-1.3.7/src/frago/server/services/agent_service.py +596 -0
  443. frago_cli-1.3.7/src/frago/server/services/base_service.py +64 -0
  444. frago_cli-1.3.7/src/frago/server/services/claude_usage_service.py +214 -0
  445. frago_cli-1.3.7/src/frago/server/services/community_recipe_service.py +467 -0
  446. frago_cli-1.3.7/src/frago/server/services/daemon_service.py +179 -0
  447. frago_cli-1.3.7/src/frago/server/services/data_repo_service.py +575 -0
  448. frago_cli-1.3.7/src/frago/server/services/environment_service.py +450 -0
  449. frago_cli-1.3.7/src/frago/server/services/environment_upgrade_service.py +328 -0
  450. frago_cli-1.3.7/src/frago/server/services/file_service.py +325 -0
  451. frago_cli-1.3.7/src/frago/server/services/gh_install_service.py +450 -0
  452. frago_cli-1.3.7/src/frago/server/services/github_service.py +718 -0
  453. frago_cli-1.3.7/src/frago/server/services/guide_service.py +306 -0
  454. frago_cli-1.3.7/src/frago/server/services/hook_review_service.py +214 -0
  455. frago_cli-1.3.7/src/frago/server/services/ingestion/scheduler.py +310 -0
  456. frago_cli-1.3.7/src/frago/server/services/init_service.py +384 -0
  457. frago_cli-1.3.7/src/frago/server/services/main_config_service.py +134 -0
  458. frago_cli-1.3.7/src/frago/server/services/orphan_recipe_cleanup_service.py +478 -0
  459. frago_cli-1.3.7/src/frago/server/services/pa_context_builder.py +215 -0
  460. frago_cli-1.3.7/src/frago/server/services/pa_outbox.py +119 -0
  461. frago_cli-1.3.7/src/frago/server/services/pa_prompts.py +520 -0
  462. frago_cli-1.3.7/src/frago/server/services/pa_tmux_runner.py +190 -0
  463. frago_cli-1.3.7/src/frago/server/services/primary/__init__.py +8 -0
  464. frago_cli-1.3.7/src/frago/server/services/primary/delivery.py +153 -0
  465. frago_cli-1.3.7/src/frago/server/services/primary/dispatcher.py +335 -0
  466. frago_cli-1.3.7/src/frago/server/services/primary/helpers.py +115 -0
  467. frago_cli-1.3.7/src/frago/server/services/primary/lifecycle.py +237 -0
  468. frago_cli-1.3.7/src/frago/server/services/primary/rendering.py +207 -0
  469. frago_cli-1.3.7/src/frago/server/services/primary/rotation.py +133 -0
  470. frago_cli-1.3.7/src/frago/server/services/primary/watcher.py +132 -0
  471. frago_cli-1.3.7/src/frago/server/services/primary_agent_service.py +666 -0
  472. frago_cli-1.3.7/src/frago/server/services/recipe_forge.py +227 -0
  473. frago_cli-1.3.7/src/frago/server/services/recipe_service.py +307 -0
  474. frago_cli-1.3.7/src/frago/server/services/recipe_supervisor.py +299 -0
  475. frago_cli-1.3.7/src/frago/server/services/routing/__init__.py +24 -0
  476. frago_cli-1.3.7/src/frago/server/services/routing/conv_key.py +80 -0
  477. frago_cli-1.3.7/src/frago/server/services/routing/thread_classifier.py +103 -0
  478. frago_cli-1.3.7/src/frago/server/services/schedule_executor.py +430 -0
  479. frago_cli-1.3.7/src/frago/server/services/scheduler_service.py +570 -0
  480. frago_cli-1.3.7/src/frago/server/services/session_observer.py +770 -0
  481. frago_cli-1.3.7/src/frago/server/services/session_send.py +203 -0
  482. frago_cli-1.3.7/src/frago/server/services/skill_service.py +83 -0
  483. frago_cli-1.3.7/src/frago/server/services/subprocess_utils.py +289 -0
  484. frago_cli-1.3.7/src/frago/server/services/sync_service.py +206 -0
  485. frago_cli-1.3.7/src/frago/server/services/system_service.py +235 -0
  486. frago_cli-1.3.7/src/frago/server/services/tab_cleanup_service.py +150 -0
  487. frago_cli-1.3.7/src/frago/server/services/task_lifecycle.py +172 -0
  488. frago_cli-1.3.7/src/frago/server/services/timeline_service.py +149 -0
  489. frago_cli-1.3.7/src/frago/server/services/tmux_sessions_service.py +478 -0
  490. frago_cli-1.3.7/src/frago/server/services/todo_compose_service.py +288 -0
  491. frago_cli-1.3.7/src/frago/server/services/ui_session_lifecycle.py +85 -0
  492. frago_cli-1.3.7/src/frago/server/services/ui_session_runner.py +248 -0
  493. frago_cli-1.3.7/src/frago/server/services/update_service.py +268 -0
  494. frago_cli-1.3.7/src/frago/server/services/version_service.py +249 -0
  495. frago_cli-1.3.7/src/frago/server/services/viewer_service.py +348 -0
  496. frago_cli-1.3.7/src/frago/server/services/virtual_os_lifecycle.py +160 -0
  497. frago_cli-1.3.7/src/frago/server/services/webui_uploads.py +201 -0
  498. frago_cli-1.3.7/src/frago/server/services/workbench_agents.py +176 -0
  499. frago_cli-1.3.7/src/frago/server/services/workbench_groups.py +598 -0
  500. frago_cli-1.3.7/src/frago/server/services/workbench_new_session.py +277 -0
  501. frago_cli-1.3.7/src/frago/server/services/workbench_pins.py +124 -0
  502. frago_cli-1.3.7/src/frago/server/services/workbench_stream_bridge.py +212 -0
  503. frago_cli-1.3.7/src/frago/server/state/broadcaster.py +69 -0
  504. frago_cli-1.3.7/src/frago/server/state/loader.py +121 -0
  505. frago_cli-1.3.7/src/frago/server/state/manager.py +389 -0
  506. frago_cli-1.3.7/src/frago/server/state/models.py +233 -0
  507. frago_cli-1.3.7/src/frago/server/websocket.py +213 -0
  508. frago_cli-1.3.7/src/frago/session/adapters/__init__.py +92 -0
  509. frago_cli-1.3.7/src/frago/session/adapters/claude_code_records.py +1667 -0
  510. frago_cli-1.3.7/src/frago/session/adapters/codex_records.py +470 -0
  511. frago_cli-1.3.7/src/frago/session/adapters/opencode_records.py +930 -0
  512. frago_cli-1.3.7/src/frago/session/claude_sessions.py +498 -0
  513. frago_cli-1.3.7/src/frago/session/codex_store.py +583 -0
  514. frago_cli-1.3.7/src/frago/session/codex_sync.py +153 -0
  515. frago_cli-1.3.7/src/frago/session/formatter.py +354 -0
  516. frago_cli-1.3.7/src/frago/session/models.py +220 -0
  517. frago_cli-1.3.7/src/frago/session/monitor.py +862 -0
  518. frago_cli-1.3.7/src/frago/session/opencode_store.py +792 -0
  519. frago_cli-1.3.7/src/frago/session/opencode_stream.py +199 -0
  520. frago_cli-1.3.7/src/frago/session/opencode_sync.py +146 -0
  521. frago_cli-1.3.7/src/frago/session/parser.py +454 -0
  522. frago_cli-1.3.7/src/frago/session/record_reader.py +362 -0
  523. frago_cli-1.3.7/src/frago/session/record_search.py +555 -0
  524. frago_cli-1.3.7/src/frago/session/search.py +800 -0
  525. frago_cli-1.3.7/src/frago/session/self_id.py +125 -0
  526. frago_cli-1.3.7/src/frago/session/session_index.py +886 -0
  527. frago_cli-1.3.7/src/frago/session/session_origin.py +457 -0
  528. frago_cli-1.3.7/src/frago/session/storage.py +848 -0
  529. frago_cli-1.3.7/src/frago/session/stream.py +299 -0
  530. frago_cli-1.3.7/src/frago/session/sync.py +354 -0
  531. frago_cli-1.3.7/src/frago/session/title_manager.py +399 -0
  532. frago_cli-1.3.7/src/frago/session/token_calendar.py +175 -0
  533. frago_cli-1.3.7/src/frago/session/transcript_completion.py +215 -0
  534. frago_cli-1.3.7/src/frago/session/unified_record.py +156 -0
  535. frago_cli-1.3.7/src/frago/telemetry/trace.py +582 -0
  536. frago_cli-1.3.7/src/frago/todo/store.py +356 -0
  537. frago_cli-1.3.7/src/frago/viewer/__init__.py +12 -0
  538. frago_cli-1.3.7/src/frago/viewer/browser.py +170 -0
  539. frago_cli-1.3.7/src/frago/watcher/__init__.py +23 -0
  540. frago_cli-1.3.7/src/frago/watcher/models.py +68 -0
  541. frago_cli-1.3.7/src/frago/watcher/service.py +266 -0
  542. frago_cli-1.3.7/src-tauri/Cargo.lock +5132 -0
  543. frago_cli-1.3.7/src-tauri/Cargo.toml +30 -0
  544. frago_cli-1.3.7/src-tauri/icons/256x256.png +0 -0
  545. frago_cli-1.3.7/src-tauri/src/commands.rs +69 -0
  546. frago_cli-1.3.7/src-tauri/src/constants.rs +20 -0
  547. frago_cli-1.3.7/src-tauri/src/installer/claude_code.rs +219 -0
  548. frago_cli-1.3.7/src-tauri/src/installer/downloader.rs +125 -0
  549. frago_cli-1.3.7/src-tauri/src/installer/frago.rs +105 -0
  550. frago_cli-1.3.7/src-tauri/src/installer/launcher.rs +102 -0
  551. frago_cli-1.3.7/src-tauri/src/installer/mod.rs +165 -0
  552. frago_cli-1.3.7/src-tauri/src/installer/process.rs +64 -0
  553. frago_cli-1.3.7/src-tauri/src/installer/uv.rs +88 -0
  554. frago_cli-1.3.7/src-tauri/src/main.rs +24 -0
  555. frago_cli-1.3.7/src-tauri/tauri.conf.json +55 -0
  556. frago_cli-1.3.7/tests/agent_driver/conftest.py +27 -0
  557. frago_cli-1.3.7/tests/agent_driver/test_claude_done_detection.py +91 -0
  558. frago_cli-1.3.7/tests/agent_driver/test_claude_driver_launch.py +107 -0
  559. frago_cli-1.3.7/tests/agent_driver/test_claude_needs_input.py +161 -0
  560. frago_cli-1.3.7/tests/agent_driver/test_claude_truly_idle.py +84 -0
  561. frago_cli-1.3.7/tests/agent_driver/test_driver_phase1.py +101 -0
  562. frago_cli-1.3.7/tests/agent_driver/test_pool.py +421 -0
  563. frago_cli-1.3.7/tests/agent_driver/test_pool_idle_eviction.py +75 -0
  564. frago_cli-1.3.7/tests/agent_driver/test_recipe_commands_passthrough.py +185 -0
  565. frago_cli-1.3.7/tests/agent_driver/test_tmux_session.py +734 -0
  566. frago_cli-1.3.7/tests/agent_driver/test_transcript.py +108 -0
  567. frago_cli-1.3.7/tests/agent_driver/test_transcript_streamer.py +235 -0
  568. frago_cli-1.3.7/tests/cli/test_agent_json_contract.py +177 -0
  569. frago_cli-1.3.7/tests/cli/test_agent_subcommands.py +349 -0
  570. frago_cli-1.3.7/tests/cli/test_agent_tmux_env.py +198 -0
  571. frago_cli-1.3.7/tests/cli/test_browser_commands.py +157 -0
  572. frago_cli-1.3.7/tests/cli/test_daemon_commands.py +185 -0
  573. frago_cli-1.3.7/tests/cli/test_recipe_open_target.py +121 -0
  574. frago_cli-1.3.7/tests/cli/test_recipe_validate_exit_code.py +101 -0
  575. frago_cli-1.3.7/tests/conftest.py +351 -0
  576. frago_cli-1.3.7/tests/extension/e2e/e2e_batch1_mock.py +185 -0
  577. frago_cli-1.3.7/tests/extension/e2e/e2e_batch2_mock.py +92 -0
  578. frago_cli-1.3.7/tests/extension/e2e/e2e_demo.py +364 -0
  579. frago_cli-1.3.7/tests/extension/e2e/e2e_mock.py +198 -0
  580. frago_cli-1.3.7/tests/extension/e2e/upwork_smoke.py +298 -0
  581. frago_cli-1.3.7/tests/extension/test_anti_bot.py +86 -0
  582. frago_cli-1.3.7/tests/extension/test_batch1_parity.py +405 -0
  583. frago_cli-1.3.7/tests/extension/test_batch2_parity.py +313 -0
  584. frago_cli-1.3.7/tests/extension/test_browser_picker.py +134 -0
  585. frago_cli-1.3.7/tests/extension/test_launch_args.py +98 -0
  586. frago_cli-1.3.7/tests/extension/test_lifecycle.py +204 -0
  587. frago_cli-1.3.7/tests/extension/test_manifest_dir.py +93 -0
  588. frago_cli-1.3.7/tests/extension/test_mvp_parity.py +238 -0
  589. frago_cli-1.3.7/tests/extension/test_profile_seed.py +102 -0
  590. frago_cli-1.3.7/tests/extension/test_proxy_detect.py +209 -0
  591. frago_cli-1.3.7/tests/extension/test_visual_effects.py +80 -0
  592. frago_cli-1.3.7/tests/fixtures/sessions/empty_session.jsonl +0 -0
  593. frago_cli-1.3.7/tests/integration/test_exposed_pages_visitor.py +221 -0
  594. frago_cli-1.3.7/tests/integration/test_session_sync_e2e.py +232 -0
  595. frago_cli-1.3.7/tests/server/test_claude_usage_service.py +61 -0
  596. frago_cli-1.3.7/tests/server/test_deliver_attachments.py +98 -0
  597. frago_cli-1.3.7/tests/server/test_pa_outbox.py +128 -0
  598. frago_cli-1.3.7/tests/server/test_pa_prompts_contract.py +59 -0
  599. frago_cli-1.3.7/tests/server/test_pa_tmux_runner_warm.py +52 -0
  600. frago_cli-1.3.7/tests/server/test_pa_transcript_watcher.py +179 -0
  601. frago_cli-1.3.7/tests/server/test_pa_warm_convs.py +156 -0
  602. frago_cli-1.3.7/tests/server/test_recipe_forge.py +121 -0
  603. frago_cli-1.3.7/tests/unit/agent_driver/conftest.py +25 -0
  604. frago_cli-1.3.7/tests/unit/agent_driver/test_claude_transcript_probe.py +323 -0
  605. frago_cli-1.3.7/tests/unit/agent_driver/test_codex_driver.py +301 -0
  606. frago_cli-1.3.7/tests/unit/agent_driver/test_opencode_driver.py +813 -0
  607. frago_cli-1.3.7/tests/unit/agent_driver/test_opencode_profile_apply.py +197 -0
  608. frago_cli-1.3.7/tests/unit/agent_driver/test_opencode_transcript_source.py +418 -0
  609. frago_cli-1.3.7/tests/unit/agent_driver/test_profile_env.py +396 -0
  610. frago_cli-1.3.7/tests/unit/browser/__init__.py +0 -0
  611. frago_cli-1.3.7/tests/unit/browser/test_group_isolation.py +410 -0
  612. frago_cli-1.3.7/tests/unit/browser/test_tab_group_expiry.py +318 -0
  613. frago_cli-1.3.7/tests/unit/cli/test_apps_commands.py +148 -0
  614. frago_cli-1.3.7/tests/unit/cli/test_browser_start_exit_code.py +120 -0
  615. frago_cli-1.3.7/tests/unit/cli/test_context_command.py +149 -0
  616. frago_cli-1.3.7/tests/unit/cli/test_expose_widening.py +158 -0
  617. frago_cli-1.3.7/tests/unit/cli/test_hook_rules_stats.py +128 -0
  618. frago_cli-1.3.7/tests/unit/cli/test_no_command_shadowing.py +67 -0
  619. frago_cli-1.3.7/tests/unit/cli/test_publish_identity.py +132 -0
  620. frago_cli-1.3.7/tests/unit/cli/test_remote_commands.py +163 -0
  621. frago_cli-1.3.7/tests/unit/cli/test_server_command_reinstall.py +381 -0
  622. frago_cli-1.3.7/tests/unit/cli/test_todo_commands.py +221 -0
  623. frago_cli-1.3.7/tests/unit/cli/test_user_commands.py +383 -0
  624. frago_cli-1.3.7/tests/unit/context/__init__.py +0 -0
  625. frago_cli-1.3.7/tests/unit/context/test_data_scheme.py +103 -0
  626. frago_cli-1.3.7/tests/unit/context/test_matcher.py +121 -0
  627. frago_cli-1.3.7/tests/unit/context/test_report.py +306 -0
  628. frago_cli-1.3.7/tests/unit/context/test_whole_home.py +75 -0
  629. frago_cli-1.3.7/tests/unit/desktop/__init__.py +0 -0
  630. frago_cli-1.3.7/tests/unit/desktop/test_assets.py +53 -0
  631. frago_cli-1.3.7/tests/unit/desktop/test_desktop.py +1437 -0
  632. frago_cli-1.3.7/tests/unit/init/__init__.py +0 -0
  633. frago_cli-1.3.7/tests/unit/init/test_app_control.py +118 -0
  634. frago_cli-1.3.7/tests/unit/init/test_codex_hooks.py +145 -0
  635. frago_cli-1.3.7/tests/unit/init/test_hook_binary.py +198 -0
  636. frago_cli-1.3.7/tests/unit/init/test_opencode_plugin.py +198 -0
  637. frago_cli-1.3.7/tests/unit/init/test_opencode_vision_bridge.py +294 -0
  638. frago_cli-1.3.7/tests/unit/init/test_retired_artifacts.py +314 -0
  639. frago_cli-1.3.7/tests/unit/init/test_user_resource_seed.py +323 -0
  640. frago_cli-1.3.7/tests/unit/recipes/test_access_levels.py +234 -0
  641. frago_cli-1.3.7/tests/unit/recipes/test_context.py +601 -0
  642. frago_cli-1.3.7/tests/unit/recipes/test_data_custody.py +121 -0
  643. frago_cli-1.3.7/tests/unit/recipes/test_data_migration.py +926 -0
  644. frago_cli-1.3.7/tests/unit/recipes/test_expose_checks.py +188 -0
  645. frago_cli-1.3.7/tests/unit/recipes/test_isolation.py +627 -0
  646. frago_cli-1.3.7/tests/unit/recipes/test_publish.py +178 -0
  647. frago_cli-1.3.7/tests/unit/recipes/test_publish_allow.py +186 -0
  648. frago_cli-1.3.7/tests/unit/recipes/test_recipe_data_paths.py +366 -0
  649. frago_cli-1.3.7/tests/unit/recipes/test_strict_params.py +131 -0
  650. frago_cli-1.3.7/tests/unit/recipes/test_visitor_isolation.py +148 -0
  651. frago_cli-1.3.7/tests/unit/run/__init__.py +0 -0
  652. frago_cli-1.3.7/tests/unit/server/services/ingestion/__init__.py +0 -0
  653. frago_cli-1.3.7/tests/unit/server/services/ingestion/test_recipe_supervisor.py +213 -0
  654. frago_cli-1.3.7/tests/unit/server/services/test_agent_service.py +186 -0
  655. frago_cli-1.3.7/tests/unit/server/services/test_base_service.py +65 -0
  656. frago_cli-1.3.7/tests/unit/server/services/test_claude_sessions.py +431 -0
  657. frago_cli-1.3.7/tests/unit/server/services/test_community_recipe_service.py +313 -0
  658. frago_cli-1.3.7/tests/unit/server/services/test_config_service.py +270 -0
  659. frago_cli-1.3.7/tests/unit/server/services/test_conv_key.py +43 -0
  660. frago_cli-1.3.7/tests/unit/server/services/test_daemon_service.py +137 -0
  661. frago_cli-1.3.7/tests/unit/server/services/test_data_repo_service.py +303 -0
  662. frago_cli-1.3.7/tests/unit/server/services/test_file_service.py +423 -0
  663. frago_cli-1.3.7/tests/unit/server/services/test_gh_install_service.py +198 -0
  664. frago_cli-1.3.7/tests/unit/server/services/test_github_rate_limit.py +94 -0
  665. frago_cli-1.3.7/tests/unit/server/services/test_github_service.py +303 -0
  666. frago_cli-1.3.7/tests/unit/server/services/test_guide_service.py +54 -0
  667. frago_cli-1.3.7/tests/unit/server/services/test_init_service.py +307 -0
  668. frago_cli-1.3.7/tests/unit/server/services/test_main_config_service.py +55 -0
  669. frago_cli-1.3.7/tests/unit/server/services/test_orphan_recipe_cleanup_service.py +426 -0
  670. frago_cli-1.3.7/tests/unit/server/services/test_pa_tmux_activation.py +421 -0
  671. frago_cli-1.3.7/tests/unit/server/services/test_pa_validators.py +88 -0
  672. frago_cli-1.3.7/tests/unit/server/services/test_primary_agent_service.py +205 -0
  673. frago_cli-1.3.7/tests/unit/server/services/test_recipe_secrets_service.py +91 -0
  674. frago_cli-1.3.7/tests/unit/server/services/test_recipe_service.py +259 -0
  675. frago_cli-1.3.7/tests/unit/server/services/test_resume_inbox.py +101 -0
  676. frago_cli-1.3.7/tests/unit/server/services/test_schedule_executor.py +212 -0
  677. frago_cli-1.3.7/tests/unit/server/services/test_scheduler_service.py +181 -0
  678. frago_cli-1.3.7/tests/unit/server/services/test_skill_service.py +114 -0
  679. frago_cli-1.3.7/tests/unit/server/services/test_subprocess_utils.py +212 -0
  680. frago_cli-1.3.7/tests/unit/server/services/test_system_service.py +184 -0
  681. frago_cli-1.3.7/tests/unit/server/services/test_system_service_os.py +86 -0
  682. frago_cli-1.3.7/tests/unit/server/services/test_tab_cleanup_service.py +294 -0
  683. frago_cli-1.3.7/tests/unit/server/services/test_timeline_service.py +147 -0
  684. frago_cli-1.3.7/tests/unit/server/services/test_tmux_sessions_service.py +206 -0
  685. frago_cli-1.3.7/tests/unit/server/services/test_token_calendar_api.py +108 -0
  686. frago_cli-1.3.7/tests/unit/server/services/test_trace_schema.py +341 -0
  687. frago_cli-1.3.7/tests/unit/server/services/test_transcript_completion.py +208 -0
  688. frago_cli-1.3.7/tests/unit/server/services/test_ui_session_lifecycle.py +483 -0
  689. frago_cli-1.3.7/tests/unit/server/services/test_ui_session_runner.py +133 -0
  690. frago_cli-1.3.7/tests/unit/server/services/test_update_service.py +177 -0
  691. frago_cli-1.3.7/tests/unit/server/services/test_version_service.py +53 -0
  692. frago_cli-1.3.7/tests/unit/server/services/test_viewer_service.py +304 -0
  693. frago_cli-1.3.7/tests/unit/server/state/test_broadcaster.py +79 -0
  694. frago_cli-1.3.7/tests/unit/server/state/test_loader.py +60 -0
  695. frago_cli-1.3.7/tests/unit/server/test_agent_core_preference.py +278 -0
  696. frago_cli-1.3.7/tests/unit/server/test_allow_list_boundary.py +182 -0
  697. frago_cli-1.3.7/tests/unit/server/test_app_pages.py +817 -0
  698. frago_cli-1.3.7/tests/unit/server/test_app_run.py +596 -0
  699. frago_cli-1.3.7/tests/unit/server/test_auth_routes.py +148 -0
  700. frago_cli-1.3.7/tests/unit/server/test_bus_edge_ledger.py +149 -0
  701. frago_cli-1.3.7/tests/unit/server/test_bus_frago.py +138 -0
  702. frago_cli-1.3.7/tests/unit/server/test_bus_publish_identity.py +139 -0
  703. frago_cli-1.3.7/tests/unit/server/test_daemon_health.py +49 -0
  704. frago_cli-1.3.7/tests/unit/server/test_daemon_start_reporting.py +147 -0
  705. frago_cli-1.3.7/tests/unit/server/test_data_failures_are_not_cached.py +59 -0
  706. frago_cli-1.3.7/tests/unit/server/test_data_repo_routes.py +148 -0
  707. frago_cli-1.3.7/tests/unit/server/test_gh_quota_visibility.py +113 -0
  708. frago_cli-1.3.7/tests/unit/server/test_gh_setup_routes.py +164 -0
  709. frago_cli-1.3.7/tests/unit/server/test_identity.py +412 -0
  710. frago_cli-1.3.7/tests/unit/server/test_identity_zone.py +168 -0
  711. frago_cli-1.3.7/tests/unit/server/test_launch_guard.py +46 -0
  712. frago_cli-1.3.7/tests/unit/server/test_password_reset.py +224 -0
  713. frago_cli-1.3.7/tests/unit/server/test_phase1_e2e.py +238 -0
  714. frago_cli-1.3.7/tests/unit/server/test_profile_routes.py +349 -0
  715. frago_cli-1.3.7/tests/unit/server/test_public_boundary.py +605 -0
  716. frago_cli-1.3.7/tests/unit/server/test_reachable_pages.py +171 -0
  717. frago_cli-1.3.7/tests/unit/server/test_security.py +604 -0
  718. frago_cli-1.3.7/tests/unit/server/test_session_observer.py +311 -0
  719. frago_cli-1.3.7/tests/unit/server/test_shared_reading.py +202 -0
  720. frago_cli-1.3.7/tests/unit/server/test_sign_in_redirect.py +187 -0
  721. frago_cli-1.3.7/tests/unit/server/test_todo_compose.py +290 -0
  722. frago_cli-1.3.7/tests/unit/server/test_todo_routes.py +121 -0
  723. frago_cli-1.3.7/tests/unit/server/test_user_root_migration.py +176 -0
  724. frago_cli-1.3.7/tests/unit/server/test_virtual_os_lifecycle.py +145 -0
  725. frago_cli-1.3.7/tests/unit/server/test_workbench_agents.py +265 -0
  726. frago_cli-1.3.7/tests/unit/server/test_workbench_groups.py +406 -0
  727. frago_cli-1.3.7/tests/unit/server/test_workbench_new_session.py +205 -0
  728. frago_cli-1.3.7/tests/unit/server/test_workbench_pins.py +139 -0
  729. frago_cli-1.3.7/tests/unit/server/test_workbench_routes.py +315 -0
  730. frago_cli-1.3.7/tests/unit/server/test_workbench_send.py +242 -0
  731. frago_cli-1.3.7/tests/unit/server/test_workbench_stop.py +91 -0
  732. frago_cli-1.3.7/tests/unit/server/test_workbuddy_models_route.py +53 -0
  733. frago_cli-1.3.7/tests/unit/session/test_claude_code_records.py +1603 -0
  734. frago_cli-1.3.7/tests/unit/session/test_codex_records.py +345 -0
  735. frago_cli-1.3.7/tests/unit/session/test_codex_store.py +331 -0
  736. frago_cli-1.3.7/tests/unit/session/test_models.py +213 -0
  737. frago_cli-1.3.7/tests/unit/session/test_opencode_records.py +943 -0
  738. frago_cli-1.3.7/tests/unit/session/test_opencode_store.py +469 -0
  739. frago_cli-1.3.7/tests/unit/session/test_opencode_sync.py +377 -0
  740. frago_cli-1.3.7/tests/unit/session/test_parser.py +651 -0
  741. frago_cli-1.3.7/tests/unit/session/test_record_search.py +240 -0
  742. frago_cli-1.3.7/tests/unit/session/test_search.py +496 -0
  743. frago_cli-1.3.7/tests/unit/session/test_self_id.py +82 -0
  744. frago_cli-1.3.7/tests/unit/session/test_session_index.py +807 -0
  745. frago_cli-1.3.7/tests/unit/session/test_session_origin.py +265 -0
  746. frago_cli-1.3.7/tests/unit/session/test_storage.py +247 -0
  747. frago_cli-1.3.7/tests/unit/session/test_stream.py +238 -0
  748. frago_cli-1.3.7/tests/unit/session/test_sync.py +159 -0
  749. frago_cli-1.3.7/tests/unit/session/test_token_calendar.py +169 -0
  750. frago_cli-1.3.7/tests/unit/session/test_unified_record.py +507 -0
  751. frago_cli-1.3.7/tests/unit/test_config_roundtrip.py +95 -0
  752. frago_cli-1.3.7/tests/unit/test_deployment_agent.py +464 -0
  753. frago_cli-1.3.7/tests/unit/test_launcher_profile_dir.py +231 -0
  754. frago_cli-1.3.7/tests/unit/test_profile_activation_e2e.py +155 -0
  755. frago_cli-1.3.7/tests/unit/test_profile_frago_core_roles.py +239 -0
  756. frago_cli-1.3.7/tests/unit/test_profile_manager.py +608 -0
  757. frago_cli-1.3.7/tests/unit/test_profile_role_bindings.py +227 -0
  758. frago_cli-1.3.7/tests/unit/test_profile_targets.py +99 -0
  759. frago_cli-1.3.7/tests/unit/test_real_data_guard.py +112 -0
  760. frago_cli-1.3.7/tests/unit/test_workspace.py +789 -0
  761. frago_cli-1.3.7/tests/unit/todo/__init__.py +0 -0
  762. frago_cli-1.3.7/uv.lock +1344 -0
  763. frago_cli-1.2.0/.github/scripts/validate_recipe.py +0 -242
  764. frago_cli-1.2.0/.github/workflows/validate-recipes.yml +0 -53
  765. frago_cli-1.2.0/.gitignore +0 -94
  766. frago_cli-1.2.0/PKG-INFO +0 -120
  767. frago_cli-1.2.0/README.md +0 -65
  768. frago_cli-1.2.0/README.zh-CN.md +0 -65
  769. frago_cli-1.2.0/community-recipes/CONTRIBUTING.md +0 -183
  770. frago_cli-1.2.0/community-recipes/README.md +0 -53
  771. frago_cli-1.2.0/community-recipes/SECURITY.md +0 -175
  772. frago_cli-1.2.0/community-recipes/recipes/.gitkeep +0 -1
  773. frago_cli-1.2.0/community-recipes/recipes/arxiv_search_papers/recipe.md +0 -135
  774. frago_cli-1.2.0/community-recipes/recipes/arxiv_search_papers/recipe.py +0 -135
  775. frago_cli-1.2.0/community-recipes/recipes/bilibili_download_video/recipe.md +0 -132
  776. frago_cli-1.2.0/community-recipes/recipes/bilibili_download_video/recipe.sh +0 -173
  777. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/recipe.md +0 -91
  778. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/recipe.py +0 -937
  779. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/spec.md +0 -159
  780. frago_cli-1.2.0/community-recipes/recipes/feishu_broadcast_message/recipe.md +0 -88
  781. frago_cli-1.2.0/community-recipes/recipes/feishu_broadcast_message/recipe.py +0 -273
  782. frago_cli-1.2.0/community-recipes/recipes/feishu_check_messages/recipe.md +0 -57
  783. frago_cli-1.2.0/community-recipes/recipes/feishu_check_messages/recipe.py +0 -713
  784. frago_cli-1.2.0/community-recipes/recipes/feishu_send_message/recipe.md +0 -103
  785. frago_cli-1.2.0/community-recipes/recipes/feishu_send_message/recipe.py +0 -408
  786. frago_cli-1.2.0/community-recipes/recipes/feishu_stream_messages/recipe.md +0 -54
  787. frago_cli-1.2.0/community-recipes/recipes/feishu_stream_messages/recipe.py +0 -549
  788. frago_cli-1.2.0/community-recipes/recipes/lark_send_message/recipe.md +0 -103
  789. frago_cli-1.2.0/community-recipes/recipes/lark_send_message/recipe.py +0 -411
  790. frago_cli-1.2.0/community-recipes/recipes/lark_stream_messages/recipe.md +0 -54
  791. frago_cli-1.2.0/community-recipes/recipes/lark_stream_messages/recipe.py +0 -511
  792. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio/recipe.md +0 -183
  793. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio/recipe.py +0 -188
  794. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/app.js +0 -1190
  795. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/index.html +0 -124
  796. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/style.css +0 -900
  797. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/recipe.md +0 -96
  798. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/recipe.sh +0 -31
  799. frago_cli-1.2.0/community-recipes/recipes/volcengine_tts_with_emotion/recipe.md +0 -204
  800. frago_cli-1.2.0/community-recipes/recipes/volcengine_tts_with_emotion/recipe.py +0 -259
  801. frago_cli-1.2.0/community-recipes/recipes/youtube_download_video_ytdlp/recipe.md +0 -174
  802. frago_cli-1.2.0/community-recipes/recipes/youtube_download_video_ytdlp/recipe.sh +0 -194
  803. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_subtitles_ytdlp/recipe.md +0 -152
  804. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_subtitles_ytdlp/recipe.sh +0 -158
  805. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_video_transcript/recipe.js +0 -61
  806. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_video_transcript/recipe.md +0 -115
  807. frago_cli-1.2.0/docs/browser-support.md +0 -290
  808. frago_cli-1.2.0/docs/browser-support.zh-CN.md +0 -290
  809. frago_cli-1.2.0/docs/concepts.md +0 -191
  810. frago_cli-1.2.0/docs/concepts.zh-CN.md +0 -191
  811. frago_cli-1.2.0/docs/developer.md +0 -37
  812. frago_cli-1.2.0/docs/developer.zh-CN.md +0 -37
  813. frago_cli-1.2.0/docs/examples.md +0 -588
  814. frago_cli-1.2.0/docs/examples.zh-CN.md +0 -512
  815. frago_cli-1.2.0/docs/installation.md +0 -154
  816. frago_cli-1.2.0/docs/installation.zh-CN.md +0 -154
  817. frago_cli-1.2.0/docs/knowledge/data.js +0 -232
  818. frago_cli-1.2.0/docs/knowledge/index.html +0 -56
  819. frago_cli-1.2.0/docs/recipes.md +0 -951
  820. frago_cli-1.2.0/docs/recipes.zh-CN.md +0 -944
  821. frago_cli-1.2.0/docs/user-guide.md +0 -189
  822. frago_cli-1.2.0/docs/user-guide.zh-CN.md +0 -189
  823. frago_cli-1.2.0/pyproject.toml +0 -187
  824. frago_cli-1.2.0/scripts/dev_launch_extension.py +0 -54
  825. frago_cli-1.2.0/src/frago/__init__.py +0 -30
  826. frago_cli-1.2.0/src/frago/_resources/extension_bundle/README.md +0 -59
  827. frago_cli-1.2.0/src/frago/_resources/extension_bundle/background/service_worker.js +0 -783
  828. frago_cli-1.2.0/src/frago/_resources/extension_bundle/content/content_script.js +0 -16
  829. frago_cli-1.2.0/src/frago/_resources/extension_bundle/manifest.json +0 -37
  830. frago_cli-1.2.0/src/frago/autostart/linux.py +0 -264
  831. frago_cli-1.2.0/src/frago/bin/darwin-arm64/frago-hook +0 -0
  832. frago_cli-1.2.0/src/frago/bin/darwin-x86_64/frago-hook +0 -0
  833. frago_cli-1.2.0/src/frago/bin/linux-x86_64/frago-hook +0 -0
  834. frago_cli-1.2.0/src/frago/bin/windows-x86_64/frago-hook.exe +0 -0
  835. frago_cli-1.2.0/src/frago/chrome/__init__.py +0 -17
  836. frago_cli-1.2.0/src/frago/chrome/backends/__init__.py +0 -27
  837. frago_cli-1.2.0/src/frago/chrome/backends/base.py +0 -172
  838. frago_cli-1.2.0/src/frago/chrome/backends/cdp.py +0 -255
  839. frago_cli-1.2.0/src/frago/chrome/backends/extension.py +0 -459
  840. frago_cli-1.2.0/src/frago/chrome/cdp/__init__.py +0 -19
  841. frago_cli-1.2.0/src/frago/chrome/cdp/client.py +0 -95
  842. frago_cli-1.2.0/src/frago/chrome/cdp/commands/__init__.py +0 -29
  843. frago_cli-1.2.0/src/frago/chrome/cdp/commands/chrome.py +0 -1001
  844. frago_cli-1.2.0/src/frago/chrome/cdp/commands/dom.py +0 -102
  845. frago_cli-1.2.0/src/frago/chrome/cdp/commands/input.py +0 -147
  846. frago_cli-1.2.0/src/frago/chrome/cdp/commands/page.py +0 -236
  847. frago_cli-1.2.0/src/frago/chrome/cdp/commands/runtime.py +0 -86
  848. frago_cli-1.2.0/src/frago/chrome/cdp/commands/screenshot.py +0 -71
  849. frago_cli-1.2.0/src/frago/chrome/cdp/commands/scroll.py +0 -67
  850. frago_cli-1.2.0/src/frago/chrome/cdp/commands/status.py +0 -91
  851. frago_cli-1.2.0/src/frago/chrome/cdp/commands/target.py +0 -111
  852. frago_cli-1.2.0/src/frago/chrome/cdp/commands/visual_effects.py +0 -230
  853. frago_cli-1.2.0/src/frago/chrome/cdp/commands/wait.py +0 -71
  854. frago_cli-1.2.0/src/frago/chrome/cdp/commands/zoom.py +0 -54
  855. frago_cli-1.2.0/src/frago/chrome/cdp/config.py +0 -182
  856. frago_cli-1.2.0/src/frago/chrome/cdp/exceptions.py +0 -50
  857. frago_cli-1.2.0/src/frago/chrome/cdp/logger.py +0 -200
  858. frago_cli-1.2.0/src/frago/chrome/cdp/retry.py +0 -215
  859. frago_cli-1.2.0/src/frago/chrome/cdp/session.py +0 -842
  860. frago_cli-1.2.0/src/frago/chrome/cdp/tab_group_manager.py +0 -544
  861. frago_cli-1.2.0/src/frago/chrome/cdp/tab_manager.py +0 -292
  862. frago_cli-1.2.0/src/frago/chrome/cdp/transport.py +0 -55
  863. frago_cli-1.2.0/src/frago/chrome/cdp/types.py +0 -88
  864. frago_cli-1.2.0/src/frago/chrome/extension/README.md +0 -129
  865. frago_cli-1.2.0/src/frago/chrome/extension/__init__.py +0 -52
  866. frago_cli-1.2.0/src/frago/chrome/extension/lifecycle.py +0 -426
  867. frago_cli-1.2.0/src/frago/chrome/extension/native_host.py +0 -420
  868. frago_cli-1.2.0/src/frago/chrome/extension/protocol.py +0 -103
  869. frago_cli-1.2.0/src/frago/cli/__init__.py +0 -9
  870. frago_cli-1.2.0/src/frago/cli/agent_command.py +0 -665
  871. frago_cli-1.2.0/src/frago/cli/agent_friendly.py +0 -193
  872. frago_cli-1.2.0/src/frago/cli/autostart_command.py +0 -78
  873. frago_cli-1.2.0/src/frago/cli/book_commands.py +0 -161
  874. frago_cli-1.2.0/src/frago/cli/channel_commands.py +0 -242
  875. frago_cli-1.2.0/src/frago/cli/chat.py +0 -278
  876. frago_cli-1.2.0/src/frago/cli/chrome_commands.py +0 -381
  877. frago_cli-1.2.0/src/frago/cli/client_commands.py +0 -157
  878. frago_cli-1.2.0/src/frago/cli/cloud_commands.py +0 -409
  879. frago_cli-1.2.0/src/frago/cli/commands.py +0 -2846
  880. frago_cli-1.2.0/src/frago/cli/def_commands.py +0 -283
  881. frago_cli-1.2.0/src/frago/cli/extension_commands.py +0 -230
  882. frago_cli-1.2.0/src/frago/cli/hook_rules_commands.py +0 -518
  883. frago_cli-1.2.0/src/frago/cli/init_command.py +0 -469
  884. frago_cli-1.2.0/src/frago/cli/main.py +0 -480
  885. frago_cli-1.2.0/src/frago/cli/recipe_commands.py +0 -1903
  886. frago_cli-1.2.0/src/frago/cli/reply_command.py +0 -82
  887. frago_cli-1.2.0/src/frago/cli/run_commands.py +0 -1019
  888. frago_cli-1.2.0/src/frago/cli/schedule_commands.py +0 -284
  889. frago_cli-1.2.0/src/frago/cli/server_command.py +0 -198
  890. frago_cli-1.2.0/src/frago/cli/session_commands.py +0 -502
  891. frago_cli-1.2.0/src/frago/cli/start_command.py +0 -256
  892. frago_cli-1.2.0/src/frago/cli/task_commands.py +0 -416
  893. frago_cli-1.2.0/src/frago/cli/timeline_commands.py +0 -413
  894. frago_cli-1.2.0/src/frago/cli/todo_commands.py +0 -203
  895. frago_cli-1.2.0/src/frago/cli/update_command.py +0 -148
  896. frago_cli-1.2.0/src/frago/cli/view_command.py +0 -102
  897. frago_cli-1.2.0/src/frago/cli/workspace_commands.py +0 -161
  898. frago_cli-1.2.0/src/frago/client/index.html +0 -132
  899. frago_cli-1.2.0/src/frago/client/package-lock.json +0 -2778
  900. frago_cli-1.2.0/src/frago/client/package.json +0 -33
  901. frago_cli-1.2.0/src/frago/client/pnpm-lock.yaml +0 -2635
  902. frago_cli-1.2.0/src/frago/client/src/App.tsx +0 -144
  903. frago_cli-1.2.0/src/frago/client/src/api/client.ts +0 -1321
  904. frago_cli-1.2.0/src/frago/client/src/api/index.ts +0 -973
  905. frago_cli-1.2.0/src/frago/client/src/api/pywebview.ts +0 -297
  906. frago_cli-1.2.0/src/frago/client/src/api/websocket.ts +0 -309
  907. frago_cli-1.2.0/src/frago/client/src/components/claudeSessions/ClaudeSessionsPage.tsx +0 -437
  908. frago_cli-1.2.0/src/frago/client/src/components/init/AuthMethodStep.tsx +0 -368
  909. frago_cli-1.2.0/src/frago/client/src/components/init/CoreSelectionStep.tsx +0 -150
  910. frago_cli-1.2.0/src/frago/client/src/components/init/InitWizardModal.tsx +0 -288
  911. frago_cli-1.2.0/src/frago/client/src/components/init/InitWizardPage.tsx +0 -293
  912. frago_cli-1.2.0/src/frago/client/src/components/layout/BottomDock.tsx +0 -65
  913. frago_cli-1.2.0/src/frago/client/src/components/layout/MainLayout.tsx +0 -39
  914. frago_cli-1.2.0/src/frago/client/src/components/layout/Sidebar.tsx +0 -76
  915. frago_cli-1.2.0/src/frago/client/src/components/layout/TopBar.tsx +0 -31
  916. frago_cli-1.2.0/src/frago/client/src/components/layout/VersionBanner.tsx +0 -96
  917. frago_cli-1.2.0/src/frago/client/src/components/newTask/NewTaskPage.tsx +0 -376
  918. frago_cli-1.2.0/src/frago/client/src/components/recipes/CommunityRecipeList.tsx +0 -256
  919. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeDetail.tsx +0 -696
  920. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeList.tsx +0 -341
  921. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeRunModal.tsx +0 -234
  922. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeTabs.tsx +0 -52
  923. frago_cli-1.2.0/src/frago/client/src/components/settings/AboutSettings.tsx +0 -23
  924. frago_cli-1.2.0/src/frago/client/src/components/settings/ActiveProfileCard.tsx +0 -86
  925. frago_cli-1.2.0/src/frago/client/src/components/settings/AppearanceSettings.tsx +0 -130
  926. frago_cli-1.2.0/src/frago/client/src/components/settings/AuthStatusCard.tsx +0 -89
  927. frago_cli-1.2.0/src/frago/client/src/components/settings/GeneralSettings.tsx +0 -216
  928. frago_cli-1.2.0/src/frago/client/src/components/settings/InitSettings.tsx +0 -216
  929. frago_cli-1.2.0/src/frago/client/src/components/settings/OfficialResourceSettings.tsx +0 -181
  930. frago_cli-1.2.0/src/frago/client/src/components/settings/ProfileManager.tsx +0 -639
  931. frago_cli-1.2.0/src/frago/client/src/components/settings/ProfilesPanel.tsx +0 -105
  932. frago_cli-1.2.0/src/frago/client/src/components/settings/SettingsPage.tsx +0 -106
  933. frago_cli-1.2.0/src/frago/client/src/components/settings/TaskIngestionPanel.tsx +0 -496
  934. frago_cli-1.2.0/src/frago/client/src/components/skills/SkillList.tsx +0 -49
  935. frago_cli-1.2.0/src/frago/client/src/components/tasks/content/JsonContent.tsx +0 -76
  936. frago_cli-1.2.0/src/frago/client/src/components/ui/DirectoryAutocomplete.tsx +0 -219
  937. frago_cli-1.2.0/src/frago/client/src/components/update/UpdateModal.tsx +0 -130
  938. frago_cli-1.2.0/src/frago/client/src/components/workspace/FileBrowser.tsx +0 -329
  939. frago_cli-1.2.0/src/frago/client/src/components/workspace/WorkspacePage.tsx +0 -119
  940. frago_cli-1.2.0/src/frago/client/src/i18n/locales/en.json +0 -723
  941. frago_cli-1.2.0/src/frago/client/src/i18n/locales/zh.json +0 -723
  942. frago_cli-1.2.0/src/frago/client/src/stores/appStore.ts +0 -624
  943. frago_cli-1.2.0/src/frago/client/src/styles/globals.css +0 -3669
  944. frago_cli-1.2.0/src/frago/client/src/styles/timeline.css +0 -409
  945. frago_cli-1.2.0/src/frago/client/src/types/pywebview.d.ts +0 -593
  946. frago_cli-1.2.0/src/frago/client/tailwind.config.js +0 -37
  947. frago_cli-1.2.0/src/frago/client/vite.config.ts +0 -60
  948. frago_cli-1.2.0/src/frago/compat.py +0 -253
  949. frago_cli-1.2.0/src/frago/def_/query_engine.py +0 -375
  950. frago_cli-1.2.0/src/frago/init/__init__.py +0 -101
  951. frago_cli-1.2.0/src/frago/init/checker.py +0 -258
  952. frago_cli-1.2.0/src/frago/init/config_manager.py +0 -316
  953. frago_cli-1.2.0/src/frago/init/configurator.py +0 -867
  954. frago_cli-1.2.0/src/frago/init/hook_binary.py +0 -250
  955. frago_cli-1.2.0/src/frago/init/launcher_detector.py +0 -132
  956. frago_cli-1.2.0/src/frago/init/models.py +0 -301
  957. frago_cli-1.2.0/src/frago/init/profile_manager.py +0 -244
  958. frago_cli-1.2.0/src/frago/init/resources.py +0 -220
  959. frago_cli-1.2.0/src/frago/init/runtime_state.py +0 -108
  960. frago_cli-1.2.0/src/frago/recipes/background.py +0 -39
  961. frago_cli-1.2.0/src/frago/recipes/exceptions.py +0 -77
  962. frago_cli-1.2.0/src/frago/recipes/execution_store.py +0 -298
  963. frago_cli-1.2.0/src/frago/recipes/installer.py +0 -715
  964. frago_cli-1.2.0/src/frago/recipes/metadata.py +0 -248
  965. frago_cli-1.2.0/src/frago/recipes/registry.py +0 -454
  966. frago_cli-1.2.0/src/frago/recipes/runner.py +0 -817
  967. frago_cli-1.2.0/src/frago/resources/book/_guidance.md +0 -15
  968. frago_cli-1.2.0/src/frago/resources/book/_identity.md +0 -9
  969. frago_cli-1.2.0/src/frago/resources/book/_index.yaml +0 -119
  970. frago_cli-1.2.0/src/frago/resources/book/_scenes.yaml +0 -93
  971. frago_cli-1.2.0/src/frago/resources/book/better-server-restart.md +0 -38
  972. frago_cli-1.2.0/src/frago/resources/book/better-structured-data.md +0 -21
  973. frago_cli-1.2.0/src/frago/resources/book/chrome-anti-bot.md +0 -59
  974. frago_cli-1.2.0/src/frago/resources/book/chrome-backend-choice.md +0 -55
  975. frago_cli-1.2.0/src/frago/resources/book/chrome-startup.md +0 -70
  976. frago_cli-1.2.0/src/frago/resources/book/chrome-usage.md +0 -86
  977. frago_cli-1.2.0/src/frago/resources/book/def-knowledge.md +0 -49
  978. frago_cli-1.2.0/src/frago/resources/book/domain-insights.md +0 -71
  979. frago_cli-1.2.0/src/frago/resources/book/frago-principle-extend.md +0 -71
  980. frago_cli-1.2.0/src/frago/resources/book/frago-principle-os.md +0 -32
  981. frago_cli-1.2.0/src/frago/resources/book/frago-principle-trust.md +0 -69
  982. frago_cli-1.2.0/src/frago/resources/book/hook-rules-authoring.md +0 -108
  983. frago_cli-1.2.0/src/frago/resources/book/interactive-recipe.md +0 -126
  984. frago_cli-1.2.0/src/frago/resources/book/must-browser-fetch.md +0 -21
  985. frago_cli-1.2.0/src/frago/resources/book/must-browser-search.md +0 -20
  986. frago_cli-1.2.0/src/frago/resources/book/must-execution-principles.md +0 -63
  987. frago_cli-1.2.0/src/frago/resources/book/must-no-auto-memory.md +0 -55
  988. frago_cli-1.2.0/src/frago/resources/book/must-projects-dir.md +0 -81
  989. frago_cli-1.2.0/src/frago/resources/book/must-tool-priority.md +0 -37
  990. frago_cli-1.2.0/src/frago/resources/book/recipe-authoring.md +0 -339
  991. frago_cli-1.2.0/src/frago/resources/book/recipe-creation.md +0 -85
  992. frago_cli-1.2.0/src/frago/resources/book/recipe-execution.md +0 -22
  993. frago_cli-1.2.0/src/frago/resources/book/recipe-fields.md +0 -147
  994. frago_cli-1.2.0/src/frago/resources/book/recipe-spec-writing.md +0 -88
  995. frago_cli-1.2.0/src/frago/resources/book/run-logging.md +0 -82
  996. frago_cli-1.2.0/src/frago/resources/book/scene-content-creation.md +0 -32
  997. frago_cli-1.2.0/src/frago/resources/book/scene-data-extraction.md +0 -37
  998. frago_cli-1.2.0/src/frago/resources/book/scene-form-automation.md +0 -33
  999. frago_cli-1.2.0/src/frago/resources/book/scene-multi-page-workflow.md +0 -34
  1000. frago_cli-1.2.0/src/frago/resources/book/scene-recipe-development.md +0 -36
  1001. frago_cli-1.2.0/src/frago/resources/book/scene-web-research.md +0 -36
  1002. frago_cli-1.2.0/src/frago/resources/frago-home-gitignore.template +0 -124
  1003. frago_cli-1.2.0/src/frago/resources/guide/en/02-interface-faq.md +0 -249
  1004. frago_cli-1.2.0/src/frago/resources/guide/en/05-troubleshooting.md +0 -377
  1005. frago_cli-1.2.0/src/frago/resources/guide/zh-CN/02-interface-faq.md +0 -249
  1006. frago_cli-1.2.0/src/frago/resources/guide/zh-CN/05-troubleshooting.md +0 -377
  1007. frago_cli-1.2.0/src/frago/resources/hooks/_manifest.json +0 -3
  1008. frago_cli-1.2.0/src/frago/run/context.py +0 -216
  1009. frago_cli-1.2.0/src/frago/run/exceptions.py +0 -81
  1010. frago_cli-1.2.0/src/frago/run/logger.py +0 -196
  1011. frago_cli-1.2.0/src/frago/run/models.py +0 -271
  1012. frago_cli-1.2.0/src/frago/run/screenshot.py +0 -83
  1013. frago_cli-1.2.0/src/frago/server/app.py +0 -558
  1014. frago_cli-1.2.0/src/frago/server/assets/assets/index-Bb6IO_Qa.js +0 -498
  1015. frago_cli-1.2.0/src/frago/server/assets/index.html +0 -133
  1016. frago_cli-1.2.0/src/frago/server/daemon.py +0 -847
  1017. frago_cli-1.2.0/src/frago/server/models.py +0 -498
  1018. frago_cli-1.2.0/src/frago/server/restarter.py +0 -216
  1019. frago_cli-1.2.0/src/frago/server/routes/__init__.py +0 -50
  1020. frago_cli-1.2.0/src/frago/server/routes/agent.py +0 -196
  1021. frago_cli-1.2.0/src/frago/server/routes/chrome_dashboard.py +0 -88
  1022. frago_cli-1.2.0/src/frago/server/routes/claude_sessions.py +0 -38
  1023. frago_cli-1.2.0/src/frago/server/routes/config.py +0 -93
  1024. frago_cli-1.2.0/src/frago/server/routes/pa.py +0 -84
  1025. frago_cli-1.2.0/src/frago/server/routes/recipes.py +0 -518
  1026. frago_cli-1.2.0/src/frago/server/routes/settings.py +0 -1052
  1027. frago_cli-1.2.0/src/frago/server/routes/system.py +0 -71
  1028. frago_cli-1.2.0/src/frago/server/routes/workspace.py +0 -135
  1029. frago_cli-1.2.0/src/frago/server/runner.py +0 -425
  1030. frago_cli-1.2.0/src/frago/server/services/__init__.py +0 -32
  1031. frago_cli-1.2.0/src/frago/server/services/agent_knowledge.json +0 -68
  1032. frago_cli-1.2.0/src/frago/server/services/agent_service.py +0 -712
  1033. frago_cli-1.2.0/src/frago/server/services/base.py +0 -253
  1034. frago_cli-1.2.0/src/frago/server/services/claude_sessions.py +0 -443
  1035. frago_cli-1.2.0/src/frago/server/services/community_recipe_service.py +0 -409
  1036. frago_cli-1.2.0/src/frago/server/services/config_service.py +0 -175
  1037. frago_cli-1.2.0/src/frago/server/services/executor.py +0 -1042
  1038. frago_cli-1.2.0/src/frago/server/services/file_service.py +0 -330
  1039. frago_cli-1.2.0/src/frago/server/services/github_service.py +0 -616
  1040. frago_cli-1.2.0/src/frago/server/services/guide_service.py +0 -306
  1041. frago_cli-1.2.0/src/frago/server/services/ingestion/scheduler.py +0 -430
  1042. frago_cli-1.2.0/src/frago/server/services/init_service.py +0 -373
  1043. frago_cli-1.2.0/src/frago/server/services/main_config_service.py +0 -73
  1044. frago_cli-1.2.0/src/frago/server/services/pa_context_builder.py +0 -362
  1045. frago_cli-1.2.0/src/frago/server/services/pa_prompts.py +0 -796
  1046. frago_cli-1.2.0/src/frago/server/services/pa_validators.py +0 -260
  1047. frago_cli-1.2.0/src/frago/server/services/primary_agent_service.py +0 -1666
  1048. frago_cli-1.2.0/src/frago/server/services/recipe_service.py +0 -296
  1049. frago_cli-1.2.0/src/frago/server/services/reflection_tick.py +0 -146
  1050. frago_cli-1.2.0/src/frago/server/services/scheduler_service.py +0 -399
  1051. frago_cli-1.2.0/src/frago/server/services/skill_service.py +0 -83
  1052. frago_cli-1.2.0/src/frago/server/services/sync_service.py +0 -155
  1053. frago_cli-1.2.0/src/frago/server/services/system_service.py +0 -142
  1054. frago_cli-1.2.0/src/frago/server/services/tab_cleanup_service.py +0 -143
  1055. frago_cli-1.2.0/src/frago/server/services/task_lifecycle.py +0 -505
  1056. frago_cli-1.2.0/src/frago/server/services/taskboard/__init__.py +0 -75
  1057. frago_cli-1.2.0/src/frago/server/services/taskboard/applier.py +0 -41
  1058. frago_cli-1.2.0/src/frago/server/services/taskboard/board.py +0 -1240
  1059. frago_cli-1.2.0/src/frago/server/services/taskboard/decision_applier.py +0 -207
  1060. frago_cli-1.2.0/src/frago/server/services/taskboard/execution_applier.py +0 -102
  1061. frago_cli-1.2.0/src/frago/server/services/taskboard/fold.py +0 -70
  1062. frago_cli-1.2.0/src/frago/server/services/taskboard/ingestor.py +0 -96
  1063. frago_cli-1.2.0/src/frago/server/services/taskboard/migration.py +0 -292
  1064. frago_cli-1.2.0/src/frago/server/services/taskboard/models.py +0 -264
  1065. frago_cli-1.2.0/src/frago/server/services/taskboard/resume_applier.py +0 -142
  1066. frago_cli-1.2.0/src/frago/server/services/taskboard/thread_classifier.py +0 -281
  1067. frago_cli-1.2.0/src/frago/server/services/taskboard/timeline.py +0 -124
  1068. frago_cli-1.2.0/src/frago/server/services/taskboard/vacuum.py +0 -278
  1069. frago_cli-1.2.0/src/frago/server/services/timeline_service.py +0 -339
  1070. frago_cli-1.2.0/src/frago/server/services/trace.py +0 -567
  1071. frago_cli-1.2.0/src/frago/server/services/update_service.py +0 -271
  1072. frago_cli-1.2.0/src/frago/server/services/version_service.py +0 -255
  1073. frago_cli-1.2.0/src/frago/server/services/viewer_service.py +0 -349
  1074. frago_cli-1.2.0/src/frago/server/state/manager.py +0 -483
  1075. frago_cli-1.2.0/src/frago/server/state/models.py +0 -236
  1076. frago_cli-1.2.0/src/frago/server/websocket.py +0 -207
  1077. frago_cli-1.2.0/src/frago/session/formatter.py +0 -355
  1078. frago_cli-1.2.0/src/frago/session/models.py +0 -231
  1079. frago_cli-1.2.0/src/frago/session/monitor.py +0 -725
  1080. frago_cli-1.2.0/src/frago/session/parser.py +0 -456
  1081. frago_cli-1.2.0/src/frago/session/storage.py +0 -847
  1082. frago_cli-1.2.0/src/frago/session/sync.py +0 -550
  1083. frago_cli-1.2.0/src/frago/session/title_manager.py +0 -397
  1084. frago_cli-1.2.0/src/frago/todo/store.py +0 -296
  1085. frago_cli-1.2.0/src/frago/tools/deployment_agent.py +0 -468
  1086. frago_cli-1.2.0/src/frago/tools/os_message.py +0 -70
  1087. frago_cli-1.2.0/src/frago/tools/workspace.py +0 -840
  1088. frago_cli-1.2.0/src/frago/viewer/__init__.py +0 -12
  1089. frago_cli-1.2.0/src/frago/viewer/chrome.py +0 -148
  1090. frago_cli-1.2.0/src-tauri/Cargo.lock +0 -5215
  1091. frago_cli-1.2.0/src-tauri/Cargo.toml +0 -30
  1092. frago_cli-1.2.0/src-tauri/src/commands.rs +0 -747
  1093. frago_cli-1.2.0/src-tauri/src/main.rs +0 -22
  1094. frago_cli-1.2.0/src-tauri/tauri.conf.json +0 -55
  1095. frago_cli-1.2.0/tests/conftest.py +0 -181
  1096. frago_cli-1.2.0/tests/extension/e2e/e2e_batch1_mock.py +0 -185
  1097. frago_cli-1.2.0/tests/extension/e2e/e2e_batch2_mock.py +0 -92
  1098. frago_cli-1.2.0/tests/extension/e2e/e2e_demo.py +0 -364
  1099. frago_cli-1.2.0/tests/extension/e2e/e2e_mock.py +0 -198
  1100. frago_cli-1.2.0/tests/extension/e2e/upwork_smoke.py +0 -298
  1101. frago_cli-1.2.0/tests/extension/test_anti_bot.py +0 -86
  1102. frago_cli-1.2.0/tests/extension/test_batch1_parity.py +0 -363
  1103. frago_cli-1.2.0/tests/extension/test_batch2_parity.py +0 -250
  1104. frago_cli-1.2.0/tests/extension/test_browser_picker.py +0 -106
  1105. frago_cli-1.2.0/tests/extension/test_lifecycle.py +0 -223
  1106. frago_cli-1.2.0/tests/extension/test_manifest_dir.py +0 -93
  1107. frago_cli-1.2.0/tests/extension/test_mvp_parity.py +0 -173
  1108. frago_cli-1.2.0/tests/extension/test_visual_effects.py +0 -80
  1109. frago_cli-1.2.0/tests/integration/test_phase0_session_domain_e2e.py +0 -96
  1110. frago_cli-1.2.0/tests/integration/test_session_sync_e2e.py +0 -120
  1111. frago_cli-1.2.0/tests/server/test_pa_per_conversation_routing.py +0 -389
  1112. frago_cli-1.2.0/tests/server/test_reflection_tick.py +0 -62
  1113. frago_cli-1.2.0/tests/server/test_repeat_response_production_path.py +0 -228
  1114. frago_cli-1.2.0/tests/server/test_resume_hot_injection.py +0 -150
  1115. frago_cli-1.2.0/tests/server/test_task_lifecycle_recovery.py +0 -156
  1116. frago_cli-1.2.0/tests/server/test_taskboard_applier_invariants.py +0 -162
  1117. frago_cli-1.2.0/tests/server/test_taskboard_conversation_thread.py +0 -272
  1118. frago_cli-1.2.0/tests/server/test_taskboard_decision_applier.py +0 -448
  1119. frago_cli-1.2.0/tests/server/test_taskboard_executor_api.py +0 -269
  1120. frago_cli-1.2.0/tests/server/test_taskboard_fold.py +0 -209
  1121. frago_cli-1.2.0/tests/server/test_taskboard_migration.py +0 -137
  1122. frago_cli-1.2.0/tests/server/test_taskboard_models.py +0 -104
  1123. frago_cli-1.2.0/tests/server/test_taskboard_repeat_response_regression.py +0 -182
  1124. frago_cli-1.2.0/tests/server/test_taskboard_resume_applier.py +0 -257
  1125. frago_cli-1.2.0/tests/server/test_taskboard_session_binding.py +0 -199
  1126. frago_cli-1.2.0/tests/server/test_taskboard_vacuum_fold.py +0 -427
  1127. frago_cli-1.2.0/tests/server/test_timeline_query_perf.py +0 -146
  1128. frago_cli-1.2.0/tests/unit/cli/test_run_commands_insights.py +0 -249
  1129. frago_cli-1.2.0/tests/unit/cli/test_todo_commands.py +0 -126
  1130. frago_cli-1.2.0/tests/unit/init/test_launcher_detector.py +0 -173
  1131. frago_cli-1.2.0/tests/unit/init/test_runtime_state.py +0 -119
  1132. frago_cli-1.2.0/tests/unit/recipes/test_migrate_runs_to_domains.py +0 -282
  1133. frago_cli-1.2.0/tests/unit/run/test_insight_domain_funnel.py +0 -44
  1134. frago_cli-1.2.0/tests/unit/server/services/test_agent_service.py +0 -323
  1135. frago_cli-1.2.0/tests/unit/server/services/test_base.py +0 -172
  1136. frago_cli-1.2.0/tests/unit/server/services/test_community_recipe_service.py +0 -264
  1137. frago_cli-1.2.0/tests/unit/server/services/test_config_service.py +0 -260
  1138. frago_cli-1.2.0/tests/unit/server/services/test_executor.py +0 -459
  1139. frago_cli-1.2.0/tests/unit/server/services/test_executor_resume.py +0 -147
  1140. frago_cli-1.2.0/tests/unit/server/services/test_file_service.py +0 -427
  1141. frago_cli-1.2.0/tests/unit/server/services/test_github_service.py +0 -213
  1142. frago_cli-1.2.0/tests/unit/server/services/test_init_service.py +0 -308
  1143. frago_cli-1.2.0/tests/unit/server/services/test_pa_validators.py +0 -233
  1144. frago_cli-1.2.0/tests/unit/server/services/test_primary_agent_service.py +0 -246
  1145. frago_cli-1.2.0/tests/unit/server/services/test_recipe_service.py +0 -257
  1146. frago_cli-1.2.0/tests/unit/server/services/test_skill_service.py +0 -116
  1147. frago_cli-1.2.0/tests/unit/server/services/test_system_service.py +0 -185
  1148. frago_cli-1.2.0/tests/unit/server/services/test_timeline_service.py +0 -147
  1149. frago_cli-1.2.0/tests/unit/server/services/test_trace_schema.py +0 -266
  1150. frago_cli-1.2.0/tests/unit/server/services/test_viewer_service.py +0 -307
  1151. frago_cli-1.2.0/tests/unit/session/test_models.py +0 -213
  1152. frago_cli-1.2.0/tests/unit/session/test_parser.py +0 -654
  1153. frago_cli-1.2.0/tests/unit/session/test_storage.py +0 -240
  1154. frago_cli-1.2.0/tests/unit/session/test_sync.py +0 -156
  1155. frago_cli-1.2.0/tests/unit/test_deployment_agent.py +0 -469
  1156. frago_cli-1.2.0/tests/unit/test_profile_manager.py +0 -309
  1157. frago_cli-1.2.0/tests/unit/test_workspace.py +0 -794
  1158. frago_cli-1.2.0/uv.lock +0 -1125
  1159. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/.gitattributes +0 -0
  1160. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/.github/FUNDING.yml +0 -0
  1161. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/.github/workflows/build-client.yml +0 -0
  1162. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/CODE_OF_CONDUCT.md +0 -0
  1163. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/CONTRIBUTING.md +0 -0
  1164. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/DESIGN_PRINCIPLE.md +0 -0
  1165. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/LICENSE +0 -0
  1166. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/dist/.gitignore +0 -0
  1167. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/docs/images/concepts-diagram-en_20251209_132837_0.jpg +0 -0
  1168. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/docs/images/concepts-diagram-zh_20251209_133008_0.jpg +0 -0
  1169. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/docs/images/frago-env-priority.jpg +0 -0
  1170. {frago_cli-1.2.0/src-tauri/bootstrap โ†’ frago_cli-1.3.7/docs/images}/logo.png +0 -0
  1171. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/docs/knowledge/app.js +0 -0
  1172. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/docs/knowledge/styles.css +0 -0
  1173. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/htmlcov/.gitignore +0 -0
  1174. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/install.ps1 +0 -0
  1175. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/install.sh +0 -0
  1176. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/local_install.ps1 +0 -0
  1177. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/local_install.sh +0 -0
  1178. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/scripts/configure-claude-endpoints.sh +0 -0
  1179. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/scripts/generate_extension_id.py +0 -0
  1180. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/scripts/install/test-docker.sh +0 -0
  1181. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/scripts/install/test-reset.ps1 +0 -0
  1182. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/scripts/install/test-reset.sh +0 -0
  1183. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/_resources/extension_bundle/keys/.gitignore +0 -0
  1184. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/_resources/extension_bundle/keys/README.md +0 -0
  1185. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/_resources/extension_bundle/keys/public.der +0 -0
  1186. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/_resources/extension_bundle/popup/index.html +0 -0
  1187. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/_resources/extension_bundle/popup/popup.js +0 -0
  1188. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/autostart/__init__.py +0 -0
  1189. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/autostart/base.py +0 -0
  1190. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/autostart/macos.py +0 -0
  1191. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/autostart/windows.py +0 -0
  1192. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/bin/darwin-arm64/.gitkeep +0 -0
  1193. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/bin/darwin-x86_64/.gitkeep +0 -0
  1194. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/bin/windows-x86_64/.gitkeep +0 -0
  1195. {frago_cli-1.2.0/src/frago/chrome โ†’ frago_cli-1.3.7/src/frago/browser}/cdp/stealth.js +0 -0
  1196. {frago_cli-1.2.0/src/frago/tools โ†’ frago_cli-1.3.7/src/frago/cli}/git_utils.py +0 -0
  1197. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cli/serve_command.py +0 -0
  1198. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cli/skill_commands.py +0 -0
  1199. {frago_cli-1.2.0/src/frago/client/node_modules/.pnpm/node_modules/resolve/test/resolver/symlinked/_/symlink_target โ†’ frago_cli-1.3.7/src/frago/client/node_modules/.ignored/tailwindcss/types/generated}/.gitkeep +0 -0
  1200. {frago_cli-1.2.0/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/types/generated โ†’ frago_cli-1.3.7/src/frago/client/node_modules/.pnpm/jsdom@29.1.1/node_modules/undici/lib/llhttp}/.gitkeep +0 -0
  1201. /frago_cli-1.2.0/src/frago/todo/__init__.py โ†’ /frago_cli-1.3.7/src/frago/client/node_modules/.pnpm/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep +0 -0
  1202. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/stubs/.gitignore +0 -0
  1203. /frago_cli-1.2.0/src/frago/tools/__init__.py โ†’ /frago_cli-1.3.7/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/types/generated/.gitkeep +0 -0
  1204. /frago_cli-1.2.0/tests/extension/__init__.py โ†’ /frago_cli-1.3.7/src/frago/client/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep +0 -0
  1205. /frago_cli-1.2.0/tests/fixtures/sessions/empty_session.jsonl โ†’ /frago_cli-1.3.7/src/frago/client/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  1206. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/postcss.config.js +0 -0
  1207. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/public/icons/logo-128.png +0 -0
  1208. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/public/icons/logo-32.png +0 -0
  1209. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/public/icons/logo-64.png +0 -0
  1210. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/public/icons/logo.png +0 -0
  1211. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/guide/GuidePage.tsx +0 -0
  1212. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/guide/index.ts +0 -0
  1213. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/init/AuthStep.tsx +0 -0
  1214. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/init/CompleteStep.tsx +0 -0
  1215. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/init/DependencyStep.tsx +0 -0
  1216. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/init/ResourceStep.tsx +0 -0
  1217. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/init/index.ts +0 -0
  1218. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/layout/PixelLogo.tsx +0 -0
  1219. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/layout/StatusBar.tsx +0 -0
  1220. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/newTask/NewTaskControls.tsx +0 -0
  1221. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/newTask/NewTaskInput.tsx +0 -0
  1222. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/recipes/CommunityRecipeCard.tsx +0 -0
  1223. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/recipes/RecipeAppCard.tsx +0 -0
  1224. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/recipes/RecipeAppsGrid.tsx +0 -0
  1225. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/recipes/RecipeSecretsModal.tsx +0 -0
  1226. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/shared/MessageCard.tsx +0 -0
  1227. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/shared/MessageList.tsx +0 -0
  1228. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/shared/index.ts +0 -0
  1229. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/BashContent.tsx +0 -0
  1230. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/CollapsibleContent.tsx +0 -0
  1231. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/FileContent.tsx +0 -0
  1232. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/PairedToolStep.tsx +0 -0
  1233. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/PreformattedContent.tsx +0 -0
  1234. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/StepContent.tsx +0 -0
  1235. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/tasks/content/index.ts +0 -0
  1236. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/Accordion.tsx +0 -0
  1237. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/ConnectionStatus.tsx +0 -0
  1238. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/EmptyState.tsx +0 -0
  1239. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/LoadingSpinner.tsx +0 -0
  1240. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/MarkdownContent.tsx +0 -0
  1241. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/Modal.tsx +0 -0
  1242. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/StarButton.tsx +0 -0
  1243. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/ui/Toast.tsx +0 -0
  1244. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/workspace/ProjectList.tsx +0 -0
  1245. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/components/workspace/index.ts +0 -0
  1246. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/hooks/useConfig.ts +0 -0
  1247. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/hooks/useDataSync.ts +0 -0
  1248. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/hooks/usePlatform.ts +0 -0
  1249. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/hooks/usePolling.ts +0 -0
  1250. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/hooks/useWebSocket.ts +0 -0
  1251. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/i18n/index.ts +0 -0
  1252. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/main.tsx +0 -0
  1253. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/types/console.ts +0 -0
  1254. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/types/message.ts +0 -0
  1255. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/utils/recentDirectories.ts +0 -0
  1256. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/utils/time.ts +0 -0
  1257. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/utils/toolDisplayConfig.ts +0 -0
  1258. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/src/vite-env.d.ts +0 -0
  1259. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client/tsconfig.json +0 -0
  1260. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/client_manager.py +0 -0
  1261. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/__init__.py +0 -0
  1262. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/auth.py +0 -0
  1263. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/client.py +0 -0
  1264. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/config.py +0 -0
  1265. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/installer.py +0 -0
  1266. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/cloud/market.py +0 -0
  1267. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/def_/__init__.py +0 -0
  1268. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/def_/registry.py +0 -0
  1269. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/def_/schema_validator.py +0 -0
  1270. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/channel_wizard.py +0 -0
  1271. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/claude_installer.py +0 -0
  1272. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/exceptions.py +0 -0
  1273. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/formatter.py +0 -0
  1274. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/installer.py +0 -0
  1275. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/recovery.py +0 -0
  1276. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/init/ui.py +0 -0
  1277. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/__init__.py +0 -0
  1278. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/env_loader.py +0 -0
  1279. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/execution.py +0 -0
  1280. {frago_cli-1.2.0/src/frago/server/services โ†’ frago_cli-1.3.7/src/frago/recipes}/github_rate_limit.py +0 -0
  1281. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/lookup.py +0 -0
  1282. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/output_handler.py +0 -0
  1283. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/recipes/usage_tracker.py +0 -0
  1284. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/__init__.py +0 -0
  1285. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/book/better-git-checkout.md +0 -0
  1286. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/book/frago-principle-rigor.md +0 -0
  1287. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/book/frago-principle-supreme.md +0 -0
  1288. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/__init__.py +0 -0
  1289. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/en/01-getting-started.md +0 -0
  1290. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/en/03-configuration.md +0 -0
  1291. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/en/04-usage-tips.md +0 -0
  1292. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/meta.json +0 -0
  1293. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/zh-CN/01-getting-started.md +0 -0
  1294. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/zh-CN/03-configuration.md +0 -0
  1295. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/guide/zh-CN/04-usage-tips.md +0 -0
  1296. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/highlight.min.js +0 -0
  1297. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/atom-one-dark.min.css +0 -0
  1298. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/atom-one-light.min.css +0 -0
  1299. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/github-dark.min.css +0 -0
  1300. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/github.min.css +0 -0
  1301. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/monokai.min.css +0 -0
  1302. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/highlight/styles/vs2015.min.css +0 -0
  1303. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/mermaid/mermaid.min.js +0 -0
  1304. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/pdfjs/pdf.min.mjs +0 -0
  1305. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/pdfjs/pdf.worker.min.mjs +0 -0
  1306. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/three/addons/controls/OrbitControls.js +0 -0
  1307. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/three/addons/loaders/GLTFLoader.js +0 -0
  1308. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/three/addons/utils/BufferGeometryUtils.js +0 -0
  1309. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/resources/viewer/three/three.module.min.js +0 -0
  1310. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/__init__.py +0 -0
  1311. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/constants.py +0 -0
  1312. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/discovery.py +0 -0
  1313. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/domain_dict.py +0 -0
  1314. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/insights.py +0 -0
  1315. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/manager.py +0 -0
  1316. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/run/utils.py +0 -0
  1317. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/__init__.py +0 -0
  1318. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/assets/icons/logo-128.png +0 -0
  1319. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/assets/icons/logo-32.png +0 -0
  1320. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/assets/icons/logo-64.png +0 -0
  1321. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/assets/icons/logo.png +0 -0
  1322. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/files.py +0 -0
  1323. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/github_star.py +0 -0
  1324. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/guide.py +0 -0
  1325. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/init.py +0 -0
  1326. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/skills.py +0 -0
  1327. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/routes/viewer.py +0 -0
  1328. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/services/env_service.py +0 -0
  1329. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/services/ingestion/__init__.py +0 -0
  1330. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/services/official_resource_sync_service.py +0 -0
  1331. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/services/recipe_secrets_service.py +0 -0
  1332. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/services/resume_inbox.py +0 -0
  1333. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/state/__init__.py +0 -0
  1334. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/server/utils.py +0 -0
  1335. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/session/__init__.py +0 -0
  1336. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/skills/__init__.py +0 -0
  1337. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/skills/registry.py +0 -0
  1338. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/telemetry/__init__.py +0 -0
  1339. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/telemetry/client.py +0 -0
  1340. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/telemetry/config.py +0 -0
  1341. {frago_cli-1.2.0/tests/unit/init โ†’ frago_cli-1.3.7/src/frago/todo}/__init__.py +0 -0
  1342. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/viewer/modes/__init__.py +0 -0
  1343. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/viewer/modes/document.py +0 -0
  1344. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/viewer/modes/media.py +0 -0
  1345. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src/frago/viewer/modes/present.py +0 -0
  1346. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/bootstrap/index.html +0 -0
  1347. /frago_cli-1.2.0/src-tauri/icons/256x256.png โ†’ /frago_cli-1.3.7/src-tauri/bootstrap/logo.png +0 -0
  1348. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/build.rs +0 -0
  1349. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/capabilities/default.json +0 -0
  1350. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/128x128.png +0 -0
  1351. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/128x128@2x.png +0 -0
  1352. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/32x32.png +0 -0
  1353. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/48x48.png +0 -0
  1354. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/64x64.png +0 -0
  1355. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square107x107Logo.png +0 -0
  1356. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square142x142Logo.png +0 -0
  1357. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square150x150Logo.png +0 -0
  1358. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square284x284Logo.png +0 -0
  1359. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square30x30Logo.png +0 -0
  1360. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square310x310Logo.png +0 -0
  1361. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square44x44Logo.png +0 -0
  1362. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square71x71Logo.png +0 -0
  1363. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/Square89x89Logo.png +0 -0
  1364. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/StoreLogo.png +0 -0
  1365. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  1366. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png +0 -0
  1367. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  1368. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png +0 -0
  1369. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png +0 -0
  1370. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  1371. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png +0 -0
  1372. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png +0 -0
  1373. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  1374. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png +0 -0
  1375. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
  1376. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  1377. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  1378. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
  1379. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  1380. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  1381. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/android/values/ic_launcher_background.xml +0 -0
  1382. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/icon.icns +0 -0
  1383. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/icon.ico +0 -0
  1384. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/icon.png +0 -0
  1385. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-20x20@1x.png +0 -0
  1386. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-20x20@2x-1.png +0 -0
  1387. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-20x20@2x.png +0 -0
  1388. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-20x20@3x.png +0 -0
  1389. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-29x29@1x.png +0 -0
  1390. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-29x29@2x-1.png +0 -0
  1391. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-29x29@2x.png +0 -0
  1392. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-29x29@3x.png +0 -0
  1393. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-40x40@1x.png +0 -0
  1394. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-40x40@2x-1.png +0 -0
  1395. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-40x40@2x.png +0 -0
  1396. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-40x40@3x.png +0 -0
  1397. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-512@2x.png +0 -0
  1398. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-60x60@2x.png +0 -0
  1399. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-60x60@3x.png +0 -0
  1400. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-76x76@1x.png +0 -0
  1401. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-76x76@2x.png +0 -0
  1402. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png +0 -0
  1403. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/package.json +0 -0
  1404. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/src-tauri/pnpm-lock.yaml +0 -0
  1405. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/__init__.py +0 -0
  1406. {frago_cli-1.2.0/tests/unit/run โ†’ frago_cli-1.3.7/tests/agent_driver}/__init__.py +0 -0
  1407. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/arch/test_import_contracts.py +0 -0
  1408. {frago_cli-1.2.0/tests/unit/server/services/ingestion โ†’ frago_cli-1.3.7/tests/cli}/__init__.py +0 -0
  1409. {frago_cli-1.2.0/tests/unit/todo โ†’ frago_cli-1.3.7/tests/extension}/__init__.py +0 -0
  1410. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/__init__.py +0 -0
  1411. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/legacy_config_with_sync_repo_url.json +0 -0
  1412. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/recipes/__init__.py +0 -0
  1413. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/sessions/__init__.py +0 -0
  1414. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/sessions/valid_session.jsonl +0 -0
  1415. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/fixtures/skills/__init__.py +0 -0
  1416. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/integration/__init__.py +0 -0
  1417. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/integration/conftest.py +0 -0
  1418. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/integration/test_monitor_session_isolation.py +0 -0
  1419. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/integration/test_recipe_registry_e2e.py +0 -0
  1420. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/server/test_agent_session_prefix_provider.py +0 -0
  1421. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/server/test_task_lifecycle_reply_msg_id.py +0 -0
  1422. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/__init__.py +0 -0
  1423. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/cli/test_reply_command.py +0 -0
  1424. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/conftest.py +0 -0
  1425. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/__init__.py +0 -0
  1426. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_background.py +0 -0
  1427. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_execution.py +0 -0
  1428. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_execution_store.py +0 -0
  1429. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_registry.py +0 -0
  1430. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_runner_async.py +0 -0
  1431. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/recipes/test_runner_cancel.py +0 -0
  1432. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/run/test_domain_dict.py +0 -0
  1433. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/run/test_domain_layout.py +0 -0
  1434. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/run/test_insights.py +0 -0
  1435. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/run/test_session_domain_persistence.py +0 -0
  1436. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/__init__.py +0 -0
  1437. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/services/__init__.py +0 -0
  1438. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/services/test_official_resource_sync_service.py +0 -0
  1439. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/services/test_sync_service.py +0 -0
  1440. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/state/__init__.py +0 -0
  1441. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/state/test_manager.py +0 -0
  1442. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/server/test_pa_domain_bootstrap.py +0 -0
  1443. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/session/__init__.py +0 -0
  1444. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/skills/__init__.py +0 -0
  1445. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/skills/test_registry.py +0 -0
  1446. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/test_compat.py +0 -0
  1447. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/test_recipe_usage_tracker.py +0 -0
  1448. {frago_cli-1.2.0 โ†’ frago_cli-1.3.7}/tests/unit/todo/test_store.py +0 -0
@@ -0,0 +1,95 @@
1
+ # ====================
2
+ # Catch-all: ignore all dotfiles/dotdirs
3
+ # ====================
4
+ .*
5
+ # ็™ฝๅๅ•๏ผšๅฟ…้กปๅฏ่ง็š„็‚นๆ–‡ไปถ/็›ฎๅฝ•
6
+ !.gitignore
7
+ !.gitattributes
8
+ !.github/
9
+ !.gitkeep
10
+ !.env.example
11
+ !.env.cdpREADME.pdf
12
+ !.importlinter
13
+
14
+ # ====================
15
+ # Python
16
+ # ====================
17
+ venv/
18
+ venv3/
19
+ env/
20
+ __pycache__/
21
+ *.pyc
22
+ *.pyo
23
+ *.egg
24
+ *.egg-info/
25
+ dist/
26
+ build/
27
+ *deprecated*/
28
+ src/frago/resources/_commands/
29
+
30
+ # ====================
31
+ # Testing
32
+ # ====================
33
+ tests/results/
34
+ tests/*.log
35
+ coverage/
36
+ htmlcov/
37
+
38
+ # ====================
39
+ # IDE & Editor
40
+ # ====================
41
+ *.swp
42
+ *.bak
43
+ *~
44
+
45
+ # ====================
46
+ # OS Generated
47
+ # ====================
48
+ Thumbs.db
49
+ nul
50
+
51
+ # ====================
52
+ # Frago Runtime
53
+ # ====================
54
+ browser_profile/*
55
+ projects/
56
+
57
+ # Chromium spellcheck dictionaries downloaded by Chrome automation
58
+ *.bdic
59
+ Dictionaries/
60
+ examples/
61
+
62
+ # ====================
63
+ # Temporary & Working Files
64
+ # ====================
65
+ *.log
66
+ *.tmp
67
+ *.backup
68
+ workdir/
69
+ tmp/
70
+
71
+ # ====================
72
+ # Frontend Build
73
+ # ====================
74
+ # assets/ ๆ˜ฏๆž„ๅปบไบง็‰ฉ๏ผŒ้œ€่ฆๆ‰“ๅŒ…ๅˆฐ wheel
75
+ src/frago/gui_deprecated/assets_legacy/
76
+ node_modules/
77
+
78
+ # ====================
79
+ # Tauri Build
80
+ # ====================
81
+ src-tauri/target/
82
+ src-tauri/WixTools/
83
+ src-tauri/gen/
84
+
85
+ # ====================
86
+ # Internal Development (not for public)
87
+ # ====================
88
+ pre-publish-checklist.md
89
+ STEALTH_MODE.md
90
+ test_stealth.html
91
+
92
+ # ====================
93
+ # Design Files (local only)
94
+ # ====================
95
+ pencil-files/
@@ -0,0 +1,2 @@
1
+ # Automatically created by Grimp.
2
+ *
@@ -0,0 +1,143 @@
1
+ # import-linter contracts โ€” executable encoding of .claude/FRAGO.md IMPORT_RULES (L102-127).
2
+ #
3
+ # Phase 0: REPORT-ONLY baseline.
4
+ # The codebase currently violates several of these contracts (known dependency
5
+ # cycles maintained via lazy imports). Running `lint-imports` will report a
6
+ # non-zero violation count โ€” this is EXPECTED. The violation count is the
7
+ # technical-debt baseline, not a CI gate. See scripts/check_arch.sh, which runs
8
+ # the linter with `|| true` so CI does not fail on the baseline. Phase 7 will
9
+ # flip this to enforced once the cycles are surgically removed.
10
+ #
11
+ # Source-of-truth: .claude/FRAGO.md "### ๆจกๅ—่พน็•Œ" IMPORT_RULES dict.
12
+
13
+ [importlinter]
14
+ root_package = frago
15
+
16
+ # --- browser/ subsystem boundaries -------------------------------------------
17
+
18
+ [importlinter:contract:browser-root]
19
+ name = browser/ NEVER imports server/, cli/, recipes/
20
+ type = forbidden
21
+ source_modules =
22
+ frago.browser
23
+ forbidden_modules =
24
+ frago.server
25
+ frago.cli
26
+ frago.recipes
27
+
28
+ [importlinter:contract:browser-cdp]
29
+ name = browser/cdp/ NEVER imports server/, cli/, recipes/, browser/extension/
30
+ type = forbidden
31
+ source_modules =
32
+ frago.browser.cdp
33
+ forbidden_modules =
34
+ frago.server
35
+ frago.cli
36
+ frago.recipes
37
+ frago.browser.extension
38
+
39
+ [importlinter:contract:browser-extension]
40
+ name = browser/extension/ NEVER imports server/, cli/, browser/cdp/, browser/backends/
41
+ type = forbidden
42
+ source_modules =
43
+ frago.browser.extension
44
+ forbidden_modules =
45
+ frago.server
46
+ frago.cli
47
+ frago.browser.cdp
48
+ frago.browser.backends
49
+
50
+ [importlinter:contract:browser-backends]
51
+ name = browser/backends/ NEVER imports server/, cli/, recipes/
52
+ type = forbidden
53
+ source_modules =
54
+ frago.browser.backends
55
+ forbidden_modules =
56
+ frago.server
57
+ frago.cli
58
+ frago.recipes
59
+
60
+ # --- recipes/ ----------------------------------------------------------------
61
+ # Split from the former single bundled `recipes` contract into two independent
62
+ # contracts so each edge can be judged KEPT/BROKEN on its own:
63
+ # - recipes-server: the reverse cycle to be removed (KEPT once Phase 3 lands).
64
+ # - recipes-browser: the open_url runtime lazy import โ€” a PERMANENT known
65
+ # exception per FRAGO.md, long-term BROKEN/tolerated, NOT a cycle-removal goal.
66
+
67
+ [importlinter:contract:recipes-server]
68
+ name = recipes/ NEVER imports server/, cli/ (reverse cycle, removed by Phase 3)
69
+ type = forbidden
70
+ source_modules =
71
+ frago.recipes
72
+ forbidden_modules =
73
+ frago.server
74
+ frago.cli
75
+
76
+ [importlinter:contract:recipes-browser]
77
+ name = recipes/ NEVER imports browser/ (open_url runtime lazy โ€” permanent known exception, tolerated long-term)
78
+ type = forbidden
79
+ source_modules =
80
+ frago.recipes
81
+ forbidden_modules =
82
+ frago.browser
83
+
84
+ # --- agent_driver/ -----------------------------------------------------------
85
+ # agent_driver โ†” server is an invisible pure-lazy bidirectional cycle (both
86
+ # directions have zero top-level imports, kept alive only by function-body lazy
87
+ # imports). This contract makes that hidden cycle visible. Initially BROKEN
88
+ # (baseline expansion, report-only); becomes KEPT after Phase 4 lands.
89
+
90
+ [importlinter:contract:agent_driver]
91
+ name = agent_driver/ NEVER imports server/, cli/ (pure-lazy cycle with server, removed by Phase 4)
92
+ type = forbidden
93
+ source_modules =
94
+ frago.agent_driver
95
+ forbidden_modules =
96
+ frago.server
97
+ frago.cli
98
+
99
+ # --- viewer/ -----------------------------------------------------------------
100
+ # viewer is a server-dependent frontend feature layer (analogous to cli):
101
+ # viewerโ†’server is a LEGAL forward dependency, so NO forbiddenโ†’server contract is
102
+ # set for it. Only the reverse-to-cli edge is forbidden (expected KEPT).
103
+
104
+ [importlinter:contract:viewer]
105
+ name = viewer/ NEVER imports cli/ (viewerโ†’server is legal, not forbidden)
106
+ type = forbidden
107
+ source_modules =
108
+ frago.viewer
109
+ forbidden_modules =
110
+ frago.cli
111
+
112
+ # --- lower layers: session/, init/ -------------------------------------------
113
+
114
+ [importlinter:contract:session]
115
+ name = session/ NEVER imports server/, cli/ (pure lower layer โ€” eager, zero reverse imports)
116
+ type = forbidden
117
+ source_modules =
118
+ frago.session
119
+ forbidden_modules =
120
+ frago.server
121
+ frago.cli
122
+
123
+ [importlinter:contract:init]
124
+ name = init/ NEVER imports server/, cli/
125
+ type = forbidden
126
+ source_modules =
127
+ frago.init
128
+ forbidden_modules =
129
+ frago.server
130
+ frago.cli
131
+
132
+ # --- big-picture direction: only what FRAGO.md actually states ---------------
133
+ # FRAGO.md ๆ˜Ž็กฎ่ง„ๅฎš็š„ๆ–นๅ‘ๅชๆœ‰ cli > server๏ผˆcli ๅฏ import server๏ผŒๅๅ‘็ฆๆญข๏ผ‰ใ€‚
134
+ # ไธ‹ๅฑ‚๏ผˆrecipes/session/init๏ผ‰ๅฝผๆญค็š„็›ธๅฏน้กบๅบ FRAGO.md ๆœชๅฎšไน‰๏ผŒๆ•… NEVER ๅœจๆญค
135
+ # ๅผบๅŠ ๅ…จๅบโ€”โ€”ๅฎƒไปฌๅฏน server/cli ็š„"็ฆๆญขๅๅ‘"ๅทฒ็”ฑไธŠ้ขๅ„ forbidden ๅฅ‘็บฆ่ฆ†็›–ใ€‚
136
+ # ๅœจ FRAGO.md ่กฅๅ‡บไธ‹ๅฑ‚ๆŽ’ๅบไน‹ๅ‰๏ผŒ่ฟ™้‡Œไธ็ผ–็ ๆœชๅฃฐๆ˜Ž็š„่ง„ๅˆ™๏ผˆ้ฟๅ…ๆŠŠ"ๆœชๅฎš่ง„ๅˆ™"ไผช่ฃ…ๆˆๅ€บๅŠก๏ผ‰ใ€‚
137
+
138
+ [importlinter:contract:layers]
139
+ name = Layered dependency direction (cli > server, per FRAGO.md)
140
+ type = layers
141
+ layers =
142
+ frago.cli
143
+ frago.server
@@ -0,0 +1,304 @@
1
+ Metadata-Version: 2.5
2
+ Name: frago-cli
3
+ Version: 1.3.7
4
+ Summary: frago - Agent OS for AI agents: runtime, resource management, environment sync, and GUI for non-technical users
5
+ Project-URL: Homepage, https://frago.ai
6
+ Project-URL: Documentation, https://docs.frago.ai
7
+ Project-URL: Repository, https://github.com/tsaijamey/frago.git
8
+ Project-URL: Issues, https://github.com/tsaijamey/frago/issues
9
+ Author-email: Jamey Tsai <caijia@frago.ai>
10
+ License: AGPL-3.0-or-later
11
+ License-File: LICENSE
12
+ Keywords: agent-os,ai-agent,automation,browser,cdp,recipe
13
+ Classifier: Development Status :: 3 - Alpha
14
+ Classifier: Intended Audience :: Developers
15
+ Classifier: License :: OSI Approved :: GNU Affero General Public License v3 or later (AGPLv3+)
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Libraries :: Python Modules
19
+ Classifier: Topic :: Software Development :: Testing
20
+ Requires-Python: >=3.13
21
+ Requires-Dist: arxiv>=2.3.1
22
+ Requires-Dist: certifi>=2025.11.12
23
+ Requires-Dist: charset-normalizer>=3.4.4
24
+ Requires-Dist: click>=8.1.0
25
+ Requires-Dist: croniter>=1.3.0
26
+ Requires-Dist: fastapi>=0.100.0
27
+ Requires-Dist: idna>=3.11
28
+ Requires-Dist: json-repair>=0.30.0
29
+ Requires-Dist: markdown>=3.4.0
30
+ Requires-Dist: obsws-python>=1.8.0
31
+ Requires-Dist: pillow>=10.0.0
32
+ Requires-Dist: psutil>=7.1.3
33
+ Requires-Dist: pydantic>=2.0.0
34
+ Requires-Dist: pyperclip>=1.8.0
35
+ Requires-Dist: pypinyin>=0.51.0
36
+ Requires-Dist: python-dotenv>=1.0.0
37
+ Requires-Dist: python-frontmatter>=1.0.0
38
+ Requires-Dist: python-slugify>=8.0.0
39
+ Requires-Dist: pyyaml>=6.0.0
40
+ Requires-Dist: questionary>=2.1.0
41
+ Requires-Dist: rapidfuzz>=3.0.0
42
+ Requires-Dist: requests>=2.32.5
43
+ Requires-Dist: urllib3>=2.5.0
44
+ Requires-Dist: uvicorn[standard]>=0.23.0
45
+ Requires-Dist: watchdog>=3.0.0
46
+ Requires-Dist: websocket-client>=1.9.0
47
+ Provides-Extra: dev
48
+ Requires-Dist: black>=23.0.0; extra == 'dev'
49
+ Requires-Dist: import-linter>=2.0; extra == 'dev'
50
+ Requires-Dist: isort>=5.12.0; extra == 'dev'
51
+ Requires-Dist: mypy>=1.5.0; extra == 'dev'
52
+ Requires-Dist: pytest-asyncio>=0.21.0; extra == 'dev'
53
+ Requires-Dist: pytest-cov>=4.1.0; extra == 'dev'
54
+ Requires-Dist: pytest>=7.4.0; extra == 'dev'
55
+ Requires-Dist: ruff>=0.1.0; extra == 'dev'
56
+ Description-Content-Type: text/markdown
57
+
58
+ <div align="center">
59
+
60
+ <img src="docs/images/logo.png" width="72" alt="frago" />
61
+
62
+ # frago
63
+
64
+ **Turn your computer into an operating system for AI agents**
65
+
66
+ English ยท [็ฎ€ไฝ“ไธญๆ–‡](README.zh-CN.md) ยท [User Guide](docs/user-guide.md) ยท [Recipes](docs/recipes.md) ยท [Discussions](https://github.com/tsaijamey/frago/discussions)
67
+
68
+ [![Release](https://img.shields.io/github/v/release/tsaijamey/frago?style=flat-square&color=12a150)](https://github.com/tsaijamey/frago/releases/latest)
69
+ [![License](https://img.shields.io/badge/license-AGPL--3.0-12a150?style=flat-square)](LICENSE)
70
+ [![Stars](https://img.shields.io/github/stars/tsaijamey/frago?style=flat-square&color=12a150)](https://github.com/tsaijamey/frago/stargazers)
71
+ [![Platform](https://img.shields.io/badge/macOS%20ยท%20Windows%20ยท%20Linux-12a150?style=flat-square)](https://github.com/tsaijamey/frago/releases/latest)
72
+
73
+ <img src="docs/images/hero-workbench.png" width="880" alt="The frago session workbench: a thousand sessions on the left, the agent's live receipts in the middle" />
74
+
75
+ </div>
76
+
77
+ > frago is not affiliated with OpenClaw. frago predates OpenClaw by approximately one month.
78
+
79
+ ## Why frago
80
+
81
+ CLI agents are genuinely good, up to a point โ€” and not nearly as convenient as they look, especially for ordinary people.
82
+
83
+ For an agent, a CLI may well be the best possible form: it makes driving the system easy. **For a human, it isn't.**
84
+
85
+ And almost no CLI agent can use the browser you've already signed into โ€” Twitter, say โ€” so even though they can drive *a* browser, they can't go read Twitter for you on their own.
86
+
87
+ They also do nothing on their own account for several agents driving a browser at once, so two jobs end up stepping on each other's tabs.
88
+
89
+ As it turns out, **what most people are short of today isn't options โ€” it's** a prepared agent OS, something that lets them install any capable CLI and **get going as quickly as with ordinary software.**
90
+
91
+ As it stands, once you've set up a CLI agent on your machine you still spend hours on more configuration, and when you switch computers it all starts over. That drag does nothing for making money or getting faster with AI.
92
+
93
+ ## frago in one line
94
+
95
+ Is frago another OpenClaw, another Hermes?
96
+
97
+ No.
98
+
99
+ Say you and your agent, working together, are Tony Stark. frago is the Iron Man suit.
100
+
101
+ Stark on his own is just an extremely clever man. But to fly, to go a round with the Hulk, to save the world โ€” clever isn't enough. He has to put the suit on first.
102
+
103
+ ## What frago does for the agent
104
+
105
+ This half the agent uses itself. You never see most of it.
106
+
107
+ | Subsystem / command | What it gives you |
108
+ |---|---|
109
+ | **Recipes**<br>`frago recipe` | Lets the agent learn to *build tools for itself* instead of waiting for you to configure more tools. frago covers the standard and the dependencies: packages are declared at the top of the script and installed into an isolated environment at run time, secrets are injected by the framework, and recipes call each other over a fixed JSON contract โ€” the agent just writes the script, and what it writes is a tool it can re-run |
110
+ | **Banking experience as it goes**<br>`frago def <domain>` | It saves what it learned while working, instead of leaving it for "spare time" and another agent with half the context |
111
+ | **Built-in ground rules**<br>`frago book` | Most setups expect you to write your own agent.md, which isn't friendly. frago ships with a body of pitfall-avoiding knowledge that's there the moment you install |
112
+ | **Browser**<br>`frago browser` | There are plenty of projects that let an agent drive a browser, and they're all complicated โ€” a pile of things to install. frago ships a lightweight extension instead: all you need is Edge (which you go on using yourself), and the agent handles everything browser-side through frago's infrastructure โ€” in the browser you're already signed into, each agent in its own tab group, never stepping on each other |
113
+ | **Session companion**<br>`frago hook-rules` | Learns you from the way you put things โ€” what's allowed, what isn't โ€” and does its best not to make the same mistake twice |
114
+ | **Agent OS && frago desktop**<br>`frago desktop` | A desktop that looks exactly like macOS/Linux, built for the agent. It started as a way to have the agent drive an interface and record video by itself; then it turned out that an agent always having a window it *can show you* is a fine thing in its own right. There's more to find here |
115
+ | **Delegating on your behalf**<br>`frago agent` | Orchestration is a hollow idea โ€” ten agents aren't ten times smarter than one, just ten times messier. frago's position: one agent that talks with you in real time understands what you want, and then issues the work on your behalf. Trust that an agent writes a better, more precise prompt than a person does |
116
+ | **Finding things**<br>`frago context` | Where output belongs, where last time's ended up โ€” the agent looks it up instead of asking you |
117
+ | **External intake**<br>`frago channel` ยท `frago reply` | Takes tasks in from outside channels and sends results back, so the agent isn't limited to working while you watch |
118
+
119
+ ## What frago does for you
120
+
121
+ This half is the human's window.
122
+
123
+ | Subsystem / command | What it gives you |
124
+ |---|---|
125
+ | **Server && WebUI**<br>`frago start` ยท `frago server` | Supports the mainstream CLI agents, and lets you manage sessions from a web page |
126
+ | **Providers**<br>`frago profile` | Manages several providers for people who don't live in a CLI, while the agent knows from built-in knowledge how to use them |
127
+ | **Session search**<br>`frago session search` | Searches past sessions by meaning across Claude Code and opencode, instead of relying on remembering a keyword |
128
+ | **Scheduling & daemons**<br>`frago schedule` ยท `frago daemon` | Recipes run on a clock and long jobs sit in the background without you watching |
129
+ | **Recipe market**<br>`frago market` ยท `frago recipe share` | Publish your recipes, install other people's |
130
+ | **Install & upkeep**<br>`frago client` ยท `frago update` ยท `frago autostart` | Desktop client, self-update, start on boot โ€” a new computer doesn't mean starting over |
131
+
132
+ ## What you can do with it
133
+
134
+ Those were commands. These are scenarios โ€” all carried by recipes, and the recipes are written by your agent on the spot:
135
+
136
+ - **You stop needing Office**, because you can simply have the agent build you one to a recipe's spec
137
+ - **You stop reshooting a tutorial video for the seventh time** โ€” perform it once on the virtual stage and the recording is the deliverable
138
+ - **You stop handing meeting audio to a third party** โ€” transcription, key points and action items all happen on your own machine
139
+ - **You stop copy-pasting between five websites** โ€” the agent walks it in one pass, in the browser you're already signed into
140
+ - **You stop hand-collating research** โ€” fetch, dedupe, write up and file it in one recipe
141
+ - **You stop having to remember how you did it last time** โ€” once it works, it's code you can re-run
142
+
143
+ ### ๐Ÿ–ฅ The agent lives in a terminal. frago moves it into a web page.
144
+
145
+ #### Task: "Open this site and read me the title and the first sentence"
146
+
147
+ <p align="center"><img src="docs/images/feedback-detail.png" width="780" alt="One tool call, fully accounted for: command, success badge, timestamp, return value" /></p>
148
+
149
+ First, what frago does *not* do: the command, the `success`, the timestamp and the return value
150
+ are **produced by whichever cli-agent you run**. This machine runs Claude Code and opencode side
151
+ by side; the session above happens to be the former. They already emit all of that โ€” it just
152
+ scrolls past in their own terminal windows, which makes it hard to manage.
153
+
154
+ frago doesn't produce receipts, and **it doesn't pick a side**. It reads **every** agent's records,
155
+ normalizes them into one shape, and turns them into one web page.
156
+
157
+ | | In a terminal | In frago |
158
+ |---|---|---|
159
+ | **Past sessions** | A resume-style picker that's awkward to use | 1,299 sessions in one list, searchable by title, directory or session id |
160
+ | **Switching cli-agent** | Each one keeps its own records, in its own format | Normalized into one shape, merged into one list (above: 1,201 Claude Code + 98 opencode) |
161
+ | **Reading a session back** | Page up, screen by screen | Laid out card by card, bucketed as `running / done / stopped / errored` |
162
+ | **Continuing the conversation** | Find that terminal window again | Type on the page |
163
+ | **Usage** | Count it yourself | A usage calendar |
164
+
165
+ For people who live in a CLI, this is a convenience.
166
+ For people who don't, it's **the line between using an agent and not**.
167
+
168
+ (Those two `PreToolUse:Bash` rows above are the session companion stepping in โ€” one reporting the receipt, one adding context. More below.)
169
+
170
+ This next layer is the part frago does itself:
171
+
172
+ | Layer | What frago does | What you get |
173
+ |---|---|---|
174
+ | **Logins** | Drives your browser's **own real profile** | Sites you're already signed into just work |
175
+ | **Anti-bot** | It *is* a real browser, not a simulation | Checks pass on their own |
176
+ | **Concurrency** | Each agent stays in its own real tab group | Two agents work at once without collision; the tab strip shows whose pages are whose |
177
+
178
+ ### ๐Ÿ›  Once it works, the agent builds itself a tool
179
+
180
+ #### Task: "I want to re-run this backtest myself and tweak the parameters"
181
+
182
+ <p align="center"><img src="docs/images/etf-dashboard.png" width="800" alt="ETF backtest dashboard: parameter panel, equity curve, per-trade P&L" /></p>
183
+
184
+ <p align="center"><sub>A <b>simulated</b> backtest on ยฅ100,000 of virtual capital, shown to illustrate the interface. Not investment advice.</sub></p>
185
+
186
+ > **This is just one of them.** That screenshot is one of **317 personal recipes** on a single
187
+ > development machine, picked because it photographs well. frago is not a trading tool โ€” other
188
+ > recipes on that same machine cut video, draft articles, transcribe meetings, pull arXiv papers,
189
+ > scrape public neuroscience datasets, synthesize speech, generate storyboards, keep a ledger of
190
+ > past sessions, and pick universities. **What your recipes look like depends on what you keep
191
+ > asking an agent to do.**
192
+
193
+ This is the real difference between frago and "an agent that's good at things": the path that
194
+ worked doesn't rot in a chat log. It freezes into a **Recipe** โ€” real, deterministic Python or shell.
195
+
196
+ | | The first time | Every time after |
197
+ |---|---|---|
198
+ | **Who does it** | The agent works it out step by step | A piece of deterministic code |
199
+ | **Model involved** | Yes | **No** |
200
+ | **Result** | This way today, maybe another way tomorrow | Identical to last time |
201
+ | **Tokens** | Burned | **None** |
202
+
203
+ **A Recipe is a tool the agent builds for itself, not documentation for humans.**
204
+
205
+ | | The agent-facing side | The human-facing side |
206
+ |---|---|---|
207
+ | **Form** | `recipe.md` + deterministic code | A page at `/app/<name>` |
208
+ | **How it's used** | `recipe list --format json` to discover ยท `run` ยท `schedule` | Open it, tune parameters, read results |
209
+ | **Required?** | Yes โ€” this *is* the recipe | **No** โ€” plenty of recipes have no UI at all and are complete software anyway |
210
+
211
+ Only when a person genuinely needs to look โ€” as with the backtest above, where a human tunes the
212
+ parameters and reads the curve โ€” does a recipe hang an interface off the side. The UI is the
213
+ optional layer, not the point.
214
+
215
+ ### ๐ŸŽฌ And when you need to show it, there's a stage
216
+
217
+ #### Task: "Record what you just did as a tutorial video"
218
+
219
+ <p align="center"><img src="docs/images/agent-os-stage.png" width="760" alt="The agent_os stage: a fake macOS desktop inside a browser, with a real terminal and real pages underneath" /></p>
220
+
221
+ It looks like a macOS desktop; underneath it is all real. That terminal is a real tmux
222
+ session, that browser window is a real tab, and the mouse movement and clicks are reproducible.
223
+ Perform once, record it, replay it whenever โ€” instead of reshooting your screen a seventh time.
224
+
225
+ ## How it works
226
+
227
+ <p align="center"><img src="docs/images/how-it-works.svg" width="860" alt="How frago works: you say something โ†’ the agent works on real browser, files and screen, receipting each step โ†’ what worked freezes into a Recipe โ†’ optionally a window for humans; the session companion runs underneath the whole time" /></p>
228
+
229
+ The band across the bottom is the **session companion**, the layer most people underrate.
230
+ It comes in two:
231
+
232
+ | Layer | What it is | Model? | Match speed | Cost |
233
+ |---|---|---|---|---|
234
+ | **frago-core** | Static rules compiled into a 3 MB native binary | **No** | 34โ€“961 ms measured on this machine, scaling with payload size | **Zero** |
235
+ | **Lightweight AI** | Adds one line of context at the right moment, to *your* standards | Yes, but only a short prompt | One call | Negligible |
236
+
237
+ Its only job is to keep the agent from drifting:
238
+
239
+ | A common drift | What the companion does |
240
+ |---|---|
241
+ | Guessing from memory when it should open the browser | Stops it there and points it at the real browser |
242
+ | Inventing a new directory for output | Points it at the place that already exists |
243
+ | Repeating a mistake you corrected once | Reminds it next time the same situation comes up |
244
+
245
+ Because the static layer is free and the AI layer only ever runs a short prompt,
246
+ **it's cheap enough to leave on permanently**. The settings page shows the live state of both
247
+ layers, in plain language.
248
+
249
+ ## Examples: recipes I built for myself
250
+
251
+ **Illustration only.** These are **not built into frago and don't ship with it**, and they are not a
252
+ recommended list โ€” they're private recipes on my own machine, grown around my own life and work.
253
+ They're here to answer one question: what can a recipe look like?
254
+
255
+ frago installs blank. Your recipes grow out of **your** agent doing **your** repetitive work,
256
+ and will most likely have nothing to do with any of these.
257
+
258
+ | Recipe | What the agent does | What a person sees |
259
+ |--------|--------------------|--------------------|
260
+ | `agent_os` | Reassembles a real tmux session and a real browser tab into a scriptable virtual macOS desktop | The live stage at `/app/agent_os` |
261
+ | `etf_backtest_dashboard_v5` | Runs zero-parameter backtests of A-share / cross-border ETF strategies, one set after another | Parameter sliders, net-value curves, per-trade P&L |
262
+ | `etf_kdj_ths_auto_trade` | Watches 5-minute KDJ signals and places orders in the Tonghuashun client | Trade receipts and position checks (no LLM in the loop) |
263
+ | `gaokao_henan_volunteer_analysis` | Converts score to province rank, matches universities to a family's budget and region, and flags disguised-private or overpriced programs | A report with a verification checklist, plus a web view |
264
+ | `meeting_copilot` | Transcribes a live meeting, extracts points, questions and actions from local materials, and can voice-clone a reply onto the mic | A scrolling transcript and question list |
265
+ | `article_studio` | One persistent editor agent per article โ€” interviews you, rewrites in your voice, writes back into HTML | Article list on the left, reading and writing panes on the right |
266
+
267
+ ## Install
268
+
269
+ | Platform | Download |
270
+ |----------|----------|
271
+ | **macOS (Apple Silicon)** | [.dmg](https://github.com/tsaijamey/frago/releases/latest) |
272
+ | **macOS (Intel)** | [.dmg](https://github.com/tsaijamey/frago/releases/latest) |
273
+ | **Windows** | [.msi](https://github.com/tsaijamey/frago/releases/latest) |
274
+ | **Linux** | [.deb](https://github.com/tsaijamey/frago/releases/latest) ยท [.rpm](https://github.com/tsaijamey/frago/releases/latest) ยท [.AppImage](https://github.com/tsaijamey/frago/releases/latest) |
275
+
276
+ > All downloads on the [Releases page](https://github.com/tsaijamey/frago/releases/latest). Current release: **v1.2.101**.
277
+
278
+ Install, open, configure one model profile, and go. The desktop app checks and installs everything it needs โ€” no terminal, no environment setup, no dependencies to manage yourself.
279
+
280
+ ## Documentation
281
+
282
+ - [User Guide](docs/user-guide.md) โ€” getting started after install
283
+ - [Concepts](docs/concepts.md) โ€” how Recipes, Runs, Sessions and prompting work together
284
+ - [Recipe System](docs/recipes.md) โ€” the recipe command surface, end to end
285
+ - [Examples](docs/examples.md) โ€” practical Run + Recipe + browser workflows
286
+ - [Agent Cores](docs/agent-cores.md) โ€” Claude Code / codex / opencode compared: equivalent, unique, and how usage differs
287
+ - [Browser Support](docs/browser-support.md) โ€” backends, ports, tab groups, the desktop stage
288
+ - [Developer Docs](docs/developer.md) โ€” CLI, architecture, development setup
289
+
290
+ Inside the product, `frago book` reads the shipped knowledge base โ€” the canonical operational manual that stays in sync with the code.
291
+
292
+ ## License
293
+
294
+ AGPL-3.0 โ€” see [LICENSE](LICENSE)
295
+
296
+ ## Contributing
297
+
298
+ - [Submit an Issue](https://github.com/tsaijamey/frago/issues)
299
+ - [Discussions](https://github.com/tsaijamey/frago/discussions)
300
+ - [Community recipes](https://github.com/tsaijamey/frago-recipe-community) โ€” public recipes live in their own repository
301
+
302
+ ---
303
+
304
+ <div align="center"><sub>Created with Claude Code</sub></div>