frago-cli 1.2.0__tar.gz โ†’ 1.3.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1431) hide show
  1. frago_cli-1.3.0/.gitignore +95 -0
  2. frago_cli-1.3.0/.import_linter_cache/.gitignore +2 -0
  3. frago_cli-1.3.0/.importlinter +143 -0
  4. frago_cli-1.3.0/PKG-INFO +304 -0
  5. frago_cli-1.3.0/README.md +247 -0
  6. frago_cli-1.3.0/README.zh-CN.md +242 -0
  7. frago_cli-1.3.0/docs/agent-cores.md +338 -0
  8. frago_cli-1.3.0/docs/agent-cores.zh-CN.md +301 -0
  9. frago_cli-1.3.0/docs/browser-support.md +346 -0
  10. frago_cli-1.3.0/docs/browser-support.zh-CN.md +296 -0
  11. frago_cli-1.3.0/docs/concepts.md +238 -0
  12. frago_cli-1.3.0/docs/concepts.zh-CN.md +228 -0
  13. frago_cli-1.3.0/docs/developer.md +43 -0
  14. frago_cli-1.3.0/docs/developer.zh-CN.md +42 -0
  15. frago_cli-1.3.0/docs/examples.md +598 -0
  16. frago_cli-1.3.0/docs/examples.zh-CN.md +595 -0
  17. frago_cli-1.3.0/docs/images/agent-os-stage.png +0 -0
  18. frago_cli-1.3.0/docs/images/etf-dashboard.png +0 -0
  19. frago_cli-1.3.0/docs/images/feedback-detail.png +0 -0
  20. frago_cli-1.3.0/docs/images/hero-workbench.png +0 -0
  21. frago_cli-1.3.0/docs/images/how-it-works.svg +67 -0
  22. frago_cli-1.3.0/docs/installation.md +160 -0
  23. frago_cli-1.3.0/docs/installation.zh-CN.md +159 -0
  24. frago_cli-1.3.0/docs/knowledge/data.js +232 -0
  25. frago_cli-1.3.0/docs/knowledge/index.html +60 -0
  26. frago_cli-1.3.0/docs/recipes.md +995 -0
  27. frago_cli-1.3.0/docs/recipes.zh-CN.md +990 -0
  28. frago_cli-1.3.0/docs/server-deployment.md +477 -0
  29. frago_cli-1.3.0/docs/user-guide.md +233 -0
  30. frago_cli-1.3.0/docs/user-guide.zh-CN.md +224 -0
  31. frago_cli-1.3.0/pyproject.toml +209 -0
  32. frago_cli-1.3.0/scripts/check_arch.sh +33 -0
  33. frago_cli-1.3.0/scripts/dev_launch_extension.py +54 -0
  34. frago_cli-1.3.0/src/frago/__init__.py +30 -0
  35. frago_cli-1.3.0/src/frago/__main__.py +19 -0
  36. frago_cli-1.3.0/src/frago/_resources/extension_bundle/README.md +59 -0
  37. frago_cli-1.3.0/src/frago/_resources/extension_bundle/background/offscreen.html +5 -0
  38. frago_cli-1.3.0/src/frago/_resources/extension_bundle/background/offscreen.js +91 -0
  39. frago_cli-1.3.0/src/frago/_resources/extension_bundle/background/service-worker-v11.js +1631 -0
  40. frago_cli-1.3.0/src/frago/_resources/extension_bundle/content/content_script.js +40 -0
  41. frago_cli-1.3.0/src/frago/_resources/extension_bundle/manifest.json +42 -0
  42. frago_cli-1.3.0/src/frago/agent_driver/__init__.py +20 -0
  43. frago_cli-1.3.0/src/frago/agent_driver/driver.py +226 -0
  44. frago_cli-1.3.0/src/frago/agent_driver/drivers/__init__.py +5 -0
  45. frago_cli-1.3.0/src/frago/agent_driver/drivers/claude.py +618 -0
  46. frago_cli-1.3.0/src/frago/agent_driver/drivers/codebuddy.py +638 -0
  47. frago_cli-1.3.0/src/frago/agent_driver/drivers/codex.py +579 -0
  48. frago_cli-1.3.0/src/frago/agent_driver/drivers/opencode.py +847 -0
  49. frago_cli-1.3.0/src/frago/agent_driver/pool.py +337 -0
  50. frago_cli-1.3.0/src/frago/agent_driver/streamer.py +101 -0
  51. frago_cli-1.3.0/src/frago/agent_driver/tmux_session.py +667 -0
  52. frago_cli-1.3.0/src/frago/agent_driver/transcript.py +96 -0
  53. frago_cli-1.3.0/src/frago/agent_driver/transcript_source.py +186 -0
  54. frago_cli-1.3.0/src/frago/autostart/linux.py +270 -0
  55. frago_cli-1.3.0/src/frago/bin/darwin-arm64/frago-core +0 -0
  56. frago_cli-1.3.0/src/frago/bin/darwin-x86_64/frago-core +0 -0
  57. frago_cli-1.3.0/src/frago/bin/linux-x86_64/frago-core +0 -0
  58. frago_cli-1.3.0/src/frago/bin/windows-x86_64/frago-core.exe +0 -0
  59. frago_cli-1.3.0/src/frago/browser/__init__.py +24 -0
  60. frago_cli-1.3.0/src/frago/browser/backends/__init__.py +27 -0
  61. frago_cli-1.3.0/src/frago/browser/backends/base.py +216 -0
  62. frago_cli-1.3.0/src/frago/browser/backends/cdp.py +342 -0
  63. frago_cli-1.3.0/src/frago/browser/backends/extension.py +779 -0
  64. frago_cli-1.3.0/src/frago/browser/cdp/__init__.py +19 -0
  65. frago_cli-1.3.0/src/frago/browser/cdp/browser_detection.py +189 -0
  66. frago_cli-1.3.0/src/frago/browser/cdp/client.py +94 -0
  67. frago_cli-1.3.0/src/frago/browser/cdp/commands/__init__.py +29 -0
  68. frago_cli-1.3.0/src/frago/browser/cdp/commands/dom.py +102 -0
  69. frago_cli-1.3.0/src/frago/browser/cdp/commands/input.py +147 -0
  70. frago_cli-1.3.0/src/frago/browser/cdp/commands/page.py +236 -0
  71. frago_cli-1.3.0/src/frago/browser/cdp/commands/runtime.py +86 -0
  72. frago_cli-1.3.0/src/frago/browser/cdp/commands/screenshot.py +71 -0
  73. frago_cli-1.3.0/src/frago/browser/cdp/commands/scroll.py +110 -0
  74. frago_cli-1.3.0/src/frago/browser/cdp/commands/status.py +91 -0
  75. frago_cli-1.3.0/src/frago/browser/cdp/commands/target.py +111 -0
  76. frago_cli-1.3.0/src/frago/browser/cdp/commands/visual_effects.py +230 -0
  77. frago_cli-1.3.0/src/frago/browser/cdp/commands/wait.py +70 -0
  78. frago_cli-1.3.0/src/frago/browser/cdp/commands/zoom.py +53 -0
  79. frago_cli-1.3.0/src/frago/browser/cdp/config.py +182 -0
  80. frago_cli-1.3.0/src/frago/browser/cdp/exceptions.py +50 -0
  81. frago_cli-1.3.0/src/frago/browser/cdp/landing.py +53 -0
  82. frago_cli-1.3.0/src/frago/browser/cdp/launcher.py +923 -0
  83. frago_cli-1.3.0/src/frago/browser/cdp/logger.py +199 -0
  84. frago_cli-1.3.0/src/frago/browser/cdp/process.py +42 -0
  85. frago_cli-1.3.0/src/frago/browser/cdp/retry.py +217 -0
  86. frago_cli-1.3.0/src/frago/browser/cdp/session.py +548 -0
  87. frago_cli-1.3.0/src/frago/browser/cdp/tab_group_manager.py +811 -0
  88. frago_cli-1.3.0/src/frago/browser/cdp/tab_manager.py +291 -0
  89. frago_cli-1.3.0/src/frago/browser/cdp/targets.py +29 -0
  90. frago_cli-1.3.0/src/frago/browser/cdp/transport.py +401 -0
  91. frago_cli-1.3.0/src/frago/browser/cdp/types.py +85 -0
  92. frago_cli-1.3.0/src/frago/browser/extension/README.md +130 -0
  93. frago_cli-1.3.0/src/frago/browser/extension/__init__.py +52 -0
  94. frago_cli-1.3.0/src/frago/browser/extension/lifecycle.py +474 -0
  95. frago_cli-1.3.0/src/frago/browser/extension/native_host.py +415 -0
  96. frago_cli-1.3.0/src/frago/browser/extension/protocol.py +102 -0
  97. frago_cli-1.3.0/src/frago/browser/profile_seed.py +130 -0
  98. frago_cli-1.3.0/src/frago/browser/proxy_detect.py +224 -0
  99. frago_cli-1.3.0/src/frago/cli/__init__.py +9 -0
  100. frago_cli-1.3.0/src/frago/cli/agent_command.py +873 -0
  101. frago_cli-1.3.0/src/frago/cli/agent_friendly.py +292 -0
  102. frago_cli-1.3.0/src/frago/cli/apps_commands.py +272 -0
  103. frago_cli-1.3.0/src/frago/cli/autostart_command.py +78 -0
  104. frago_cli-1.3.0/src/frago/cli/book_commands.py +248 -0
  105. frago_cli-1.3.0/src/frago/cli/browser_commands.py +678 -0
  106. frago_cli-1.3.0/src/frago/cli/channel_commands.py +241 -0
  107. frago_cli-1.3.0/src/frago/cli/chat.py +332 -0
  108. frago_cli-1.3.0/src/frago/cli/client_commands.py +157 -0
  109. frago_cli-1.3.0/src/frago/cli/cloud_commands.py +409 -0
  110. frago_cli-1.3.0/src/frago/cli/commands.py +2863 -0
  111. frago_cli-1.3.0/src/frago/cli/context_commands.py +166 -0
  112. frago_cli-1.3.0/src/frago/cli/daemon_commands.py +281 -0
  113. frago_cli-1.3.0/src/frago/cli/def_commands.py +286 -0
  114. frago_cli-1.3.0/src/frago/cli/deployment_agent.py +468 -0
  115. frago_cli-1.3.0/src/frago/cli/desktop_commands.py +110 -0
  116. frago_cli-1.3.0/src/frago/cli/drive_command.py +376 -0
  117. frago_cli-1.3.0/src/frago/cli/extension_commands.py +229 -0
  118. frago_cli-1.3.0/src/frago/cli/hook_rules_commands.py +713 -0
  119. frago_cli-1.3.0/src/frago/cli/init_command.py +480 -0
  120. frago_cli-1.3.0/src/frago/cli/main.py +519 -0
  121. frago_cli-1.3.0/src/frago/cli/profile_commands.py +235 -0
  122. frago_cli-1.3.0/src/frago/cli/recipe_commands.py +3752 -0
  123. frago_cli-1.3.0/src/frago/cli/remote_commands.py +345 -0
  124. frago_cli-1.3.0/src/frago/cli/reply_command.py +82 -0
  125. frago_cli-1.3.0/src/frago/cli/schedule_commands.py +393 -0
  126. frago_cli-1.3.0/src/frago/cli/server_command.py +469 -0
  127. frago_cli-1.3.0/src/frago/cli/session_commands.py +736 -0
  128. frago_cli-1.3.0/src/frago/cli/start_command.py +256 -0
  129. frago_cli-1.3.0/src/frago/cli/todo_commands.py +336 -0
  130. frago_cli-1.3.0/src/frago/cli/update_command.py +147 -0
  131. frago_cli-1.3.0/src/frago/cli/user_commands.py +381 -0
  132. frago_cli-1.3.0/src/frago/cli/view_command.py +101 -0
  133. frago_cli-1.3.0/src/frago/cli/workspace.py +838 -0
  134. frago_cli-1.3.0/src/frago/cli/workspace_commands.py +164 -0
  135. frago_cli-1.3.0/src/frago/client/index.html +186 -0
  136. frago_cli-1.3.0/src/frago/client/package-lock.json +6947 -0
  137. frago_cli-1.3.0/src/frago/client/package.json +44 -0
  138. frago_cli-1.3.0/src/frago/client/pnpm-lock.yaml +4263 -0
  139. frago_cli-1.3.0/src/frago/client/src/App.tsx +155 -0
  140. frago_cli-1.3.0/src/frago/client/src/__tests__/routes.test.ts +98 -0
  141. frago_cli-1.3.0/src/frago/client/src/api/__tests__/withMode.test.ts +85 -0
  142. frago_cli-1.3.0/src/frago/client/src/api/client.ts +1236 -0
  143. frago_cli-1.3.0/src/frago/client/src/api/index.ts +1233 -0
  144. frago_cli-1.3.0/src/frago/client/src/api/pywebview.ts +292 -0
  145. frago_cli-1.3.0/src/frago/client/src/api/websocket.ts +315 -0
  146. frago_cli-1.3.0/src/frago/client/src/assets/README.md +13 -0
  147. frago_cli-1.3.0/src/frago/client/src/assets/walker.png +0 -0
  148. frago_cli-1.3.0/src/frago/client/src/components/dataRepo/DataRepoPage.tsx +440 -0
  149. frago_cli-1.3.0/src/frago/client/src/components/dataRepo/SyncDialog.tsx +306 -0
  150. frago_cli-1.3.0/src/frago/client/src/components/dataRepo/__tests__/DataRepoPage.test.tsx +173 -0
  151. frago_cli-1.3.0/src/frago/client/src/components/github/GitHubGuardBanner.tsx +168 -0
  152. frago_cli-1.3.0/src/frago/client/src/components/github/GitHubSetupModal.tsx +539 -0
  153. frago_cli-1.3.0/src/frago/client/src/components/github/__tests__/GitHubGuardBanner.test.tsx +124 -0
  154. frago_cli-1.3.0/src/frago/client/src/components/github/__tests__/GitHubSetupModal.test.tsx +209 -0
  155. frago_cli-1.3.0/src/frago/client/src/components/init/AuthMethodStep.tsx +384 -0
  156. frago_cli-1.3.0/src/frago/client/src/components/init/CoreSelectionStep.tsx +207 -0
  157. frago_cli-1.3.0/src/frago/client/src/components/init/InitWizardModal.tsx +296 -0
  158. frago_cli-1.3.0/src/frago/client/src/components/init/InitWizardPage.tsx +301 -0
  159. frago_cli-1.3.0/src/frago/client/src/components/init/useCoreSelection.ts +46 -0
  160. frago_cli-1.3.0/src/frago/client/src/components/layout/EnvironmentModal.tsx +257 -0
  161. frago_cli-1.3.0/src/frago/client/src/components/layout/MainLayout.tsx +46 -0
  162. frago_cli-1.3.0/src/frago/client/src/components/layout/MobileTabBar.tsx +34 -0
  163. frago_cli-1.3.0/src/frago/client/src/components/layout/Sidebar.tsx +403 -0
  164. frago_cli-1.3.0/src/frago/client/src/components/layout/TmuxSessionsModal.tsx +320 -0
  165. frago_cli-1.3.0/src/frago/client/src/components/newTask/NewTaskPage.tsx +377 -0
  166. frago_cli-1.3.0/src/frago/client/src/components/recipes/CollapsibleSection.tsx +36 -0
  167. frago_cli-1.3.0/src/frago/client/src/components/recipes/CommunityRecipeList.tsx +263 -0
  168. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeDetail.tsx +92 -0
  169. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeForgeModal.tsx +123 -0
  170. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeList.tsx +356 -0
  171. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeOverview.tsx +208 -0
  172. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeParamField.tsx +84 -0
  173. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeRunModal.tsx +235 -0
  174. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeRunPanel.tsx +186 -0
  175. frago_cli-1.3.0/src/frago/client/src/components/recipes/RecipeTabs.tsx +49 -0
  176. frago_cli-1.3.0/src/frago/client/src/components/recipes/useRecipeDetail.ts +239 -0
  177. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/Composer.tsx +463 -0
  178. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/NewSessionModal.tsx +409 -0
  179. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/RecordCard.tsx +1613 -0
  180. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/RecordStream.tsx +487 -0
  181. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/ReportPanel.tsx +140 -0
  182. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/SessionItem.tsx +394 -0
  183. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/SessionLaunchPanel.tsx +147 -0
  184. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/SessionRail.tsx +750 -0
  185. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/SessionWorkbenchPage.tsx +188 -0
  186. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/StopRunButton.tsx +70 -0
  187. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/TokenCalendarModal.tsx +160 -0
  188. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/Composer.test.tsx +483 -0
  189. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/LanguageSwitch.test.tsx +144 -0
  190. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/NewSessionModal.test.tsx +270 -0
  191. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/RecordCard.test.tsx +474 -0
  192. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/SessionLaunchPanel.test.tsx +71 -0
  193. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailPaging.test.tsx +231 -0
  194. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailPins.test.tsx +222 -0
  195. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/SessionRailTree.test.tsx +230 -0
  196. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/SessionWorkbench.test.tsx +765 -0
  197. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/StopRunButton.test.tsx +96 -0
  198. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/__tests__/tokenCalendarUtils.test.ts +73 -0
  199. frago_cli-1.3.0/src/frago/client/src/components/sessionWorkbench/tokenCalendarUtils.ts +66 -0
  200. frago_cli-1.3.0/src/frago/client/src/components/settings/AboutSettings.tsx +51 -0
  201. frago_cli-1.3.0/src/frago/client/src/components/settings/ActiveProfileCard.tsx +97 -0
  202. frago_cli-1.3.0/src/frago/client/src/components/settings/AppearanceSettings.tsx +63 -0
  203. frago_cli-1.3.0/src/frago/client/src/components/settings/ChannelDialog.tsx +146 -0
  204. frago_cli-1.3.0/src/frago/client/src/components/settings/ChannelTable.tsx +173 -0
  205. frago_cli-1.3.0/src/frago/client/src/components/settings/ConnectionRolesCard.tsx +183 -0
  206. frago_cli-1.3.0/src/frago/client/src/components/settings/GeneralSettings.tsx +252 -0
  207. frago_cli-1.3.0/src/frago/client/src/components/settings/InitSettings.tsx +265 -0
  208. frago_cli-1.3.0/src/frago/client/src/components/settings/OfficialResourceSettings.tsx +193 -0
  209. frago_cli-1.3.0/src/frago/client/src/components/settings/ProfileForm.tsx +299 -0
  210. frago_cli-1.3.0/src/frago/client/src/components/settings/ProfileList.tsx +323 -0
  211. frago_cli-1.3.0/src/frago/client/src/components/settings/ProfileManager.tsx +90 -0
  212. frago_cli-1.3.0/src/frago/client/src/components/settings/PromptCapabilitySettings.tsx +199 -0
  213. frago_cli-1.3.0/src/frago/client/src/components/settings/SettingsPage.tsx +132 -0
  214. frago_cli-1.3.0/src/frago/client/src/components/settings/TaskIngestionPanel.tsx +127 -0
  215. frago_cli-1.3.0/src/frago/client/src/components/settings/__tests__/ConnectionRolesCard.test.tsx +162 -0
  216. frago_cli-1.3.0/src/frago/client/src/components/settings/__tests__/ProfileManager.test.tsx +284 -0
  217. frago_cli-1.3.0/src/frago/client/src/components/settings/useProfiles.ts +473 -0
  218. frago_cli-1.3.0/src/frago/client/src/components/settings/useTaskIngestion.ts +156 -0
  219. frago_cli-1.3.0/src/frago/client/src/components/skills/SkillList.tsx +49 -0
  220. frago_cli-1.3.0/src/frago/client/src/components/tasks/content/JsonContent.tsx +76 -0
  221. frago_cli-1.3.0/src/frago/client/src/components/todos/TodoDetail.tsx +150 -0
  222. frago_cli-1.3.0/src/frago/client/src/components/todos/TodoPage.tsx +315 -0
  223. frago_cli-1.3.0/src/frago/client/src/components/todos/index.ts +2 -0
  224. frago_cli-1.3.0/src/frago/client/src/components/todos/todoMeta.ts +50 -0
  225. frago_cli-1.3.0/src/frago/client/src/components/ui/AttachmentStrip.tsx +99 -0
  226. frago_cli-1.3.0/src/frago/client/src/components/ui/DirectoryAutocomplete.tsx +220 -0
  227. frago_cli-1.3.0/src/frago/client/src/components/ui/NoiseField.tsx +220 -0
  228. frago_cli-1.3.0/src/frago/client/src/components/workspace/FileBrowser.tsx +330 -0
  229. frago_cli-1.3.0/src/frago/client/src/components/workspace/WorkspacePage.tsx +124 -0
  230. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useAsync.test.ts +130 -0
  231. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useAutoRefresh.test.ts +182 -0
  232. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useSessionLaunch.test.ts +181 -0
  233. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useSessionPins.test.ts +177 -0
  234. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useWorkbenchRecords.test.ts +643 -0
  235. frago_cli-1.3.0/src/frago/client/src/hooks/__tests__/useWorkbenchSessions.test.ts +223 -0
  236. frago_cli-1.3.0/src/frago/client/src/hooks/useAgentClients.ts +219 -0
  237. frago_cli-1.3.0/src/frago/client/src/hooks/useAsync.ts +95 -0
  238. frago_cli-1.3.0/src/frago/client/src/hooks/useAttachments.ts +152 -0
  239. frago_cli-1.3.0/src/frago/client/src/hooks/useAutoRefresh.ts +111 -0
  240. frago_cli-1.3.0/src/frago/client/src/hooks/useClaudeUsage.ts +46 -0
  241. frago_cli-1.3.0/src/frago/client/src/hooks/useEnvironment.ts +172 -0
  242. frago_cli-1.3.0/src/frago/client/src/hooks/useHashRoute.ts +41 -0
  243. frago_cli-1.3.0/src/frago/client/src/hooks/useSendToSession.ts +294 -0
  244. frago_cli-1.3.0/src/frago/client/src/hooks/useSessionLaunch.ts +192 -0
  245. frago_cli-1.3.0/src/frago/client/src/hooks/useSessionPins.ts +145 -0
  246. frago_cli-1.3.0/src/frago/client/src/hooks/useStopSessionRun.ts +193 -0
  247. frago_cli-1.3.0/src/frago/client/src/hooks/useTmuxSessions.ts +107 -0
  248. frago_cli-1.3.0/src/frago/client/src/hooks/useWorkbenchRecords.ts +688 -0
  249. frago_cli-1.3.0/src/frago/client/src/hooks/useWorkbenchSessions.ts +439 -0
  250. frago_cli-1.3.0/src/frago/client/src/i18n/locales/en.json +1431 -0
  251. frago_cli-1.3.0/src/frago/client/src/i18n/locales/zh.json +1431 -0
  252. frago_cli-1.3.0/src/frago/client/src/routes.ts +132 -0
  253. frago_cli-1.3.0/src/frago/client/src/stores/__tests__/dataStore.test.ts +195 -0
  254. frago_cli-1.3.0/src/frago/client/src/stores/__tests__/pageStore.test.ts +107 -0
  255. frago_cli-1.3.0/src/frago/client/src/stores/__tests__/uiStore.test.ts +165 -0
  256. frago_cli-1.3.0/src/frago/client/src/stores/appStore.ts +57 -0
  257. frago_cli-1.3.0/src/frago/client/src/stores/dataStore.ts +383 -0
  258. frago_cli-1.3.0/src/frago/client/src/stores/pageStore.ts +73 -0
  259. frago_cli-1.3.0/src/frago/client/src/stores/uiStore.ts +222 -0
  260. frago_cli-1.3.0/src/frago/client/src/styles/globals.css +6105 -0
  261. frago_cli-1.3.0/src/frago/client/src/styles/timeline.css +439 -0
  262. frago_cli-1.3.0/src/frago/client/src/types/api.ts +1057 -0
  263. frago_cli-1.3.0/src/frago/client/src/types/pywebview.d.ts +599 -0
  264. frago_cli-1.3.0/src/frago/client/tailwind.config.js +64 -0
  265. frago_cli-1.3.0/src/frago/client/vite.config.ts +68 -0
  266. frago_cli-1.3.0/src/frago/client/vitest.config.ts +17 -0
  267. frago_cli-1.3.0/src/frago/client/vitest.setup.ts +54 -0
  268. frago_cli-1.3.0/src/frago/compat.py +283 -0
  269. frago_cli-1.3.0/src/frago/config/__init__.py +1 -0
  270. frago_cli-1.3.0/src/frago/config/config_service.py +169 -0
  271. frago_cli-1.3.0/src/frago/context/__init__.py +53 -0
  272. frago_cli-1.3.0/src/frago/context/data_scheme.py +22 -0
  273. frago_cli-1.3.0/src/frago/context/errors.py +16 -0
  274. frago_cli-1.3.0/src/frago/context/matcher.py +162 -0
  275. frago_cli-1.3.0/src/frago/context/report.py +462 -0
  276. frago_cli-1.3.0/src/frago/context/resolver.py +79 -0
  277. frago_cli-1.3.0/src/frago/context/whole_home.py +27 -0
  278. frago_cli-1.3.0/src/frago/def_/query_engine.py +402 -0
  279. frago_cli-1.3.0/src/frago/desktop/__init__.py +26 -0
  280. frago_cli-1.3.0/src/frago/desktop/aos.py +1111 -0
  281. frago_cli-1.3.0/src/frago/desktop/assets/ansi.js +107 -0
  282. frago_cli-1.3.0/src/frago/desktop/assets/app.js +1474 -0
  283. frago_cli-1.3.0/src/frago/desktop/assets/index.html +250 -0
  284. frago_cli-1.3.0/src/frago/desktop/assets/style.css +896 -0
  285. frago_cli-1.3.0/src/frago/desktop/broker.py +5923 -0
  286. frago_cli-1.3.0/src/frago/desktop/design/broker-page-protocol.md +1136 -0
  287. frago_cli-1.3.0/src/frago/desktop/health.py +518 -0
  288. frago_cli-1.3.0/src/frago/desktop/refs.py +126 -0
  289. frago_cli-1.3.0/src/frago/desktop/registry.py +295 -0
  290. frago_cli-1.3.0/src/frago/desktop/spec.md +1509 -0
  291. frago_cli-1.3.0/src/frago/desktop/stage.py +651 -0
  292. frago_cli-1.3.0/src/frago/init/__init__.py +108 -0
  293. frago_cli-1.3.0/src/frago/init/app_control.py +72 -0
  294. frago_cli-1.3.0/src/frago/init/checker.py +269 -0
  295. frago_cli-1.3.0/src/frago/init/codex_hooks.py +268 -0
  296. frago_cli-1.3.0/src/frago/init/config_manager.py +336 -0
  297. frago_cli-1.3.0/src/frago/init/configurator.py +1021 -0
  298. frago_cli-1.3.0/src/frago/init/hook_binary.py +370 -0
  299. frago_cli-1.3.0/src/frago/init/models.py +427 -0
  300. frago_cli-1.3.0/src/frago/init/opencode_plugin.py +156 -0
  301. frago_cli-1.3.0/src/frago/init/profile_manager.py +577 -0
  302. frago_cli-1.3.0/src/frago/init/profile_target_backup.py +82 -0
  303. frago_cli-1.3.0/src/frago/init/profile_targets.py +183 -0
  304. frago_cli-1.3.0/src/frago/init/resources.py +110 -0
  305. frago_cli-1.3.0/src/frago/init/retired_artifacts.py +259 -0
  306. frago_cli-1.3.0/src/frago/init/user_resource_seed.py +106 -0
  307. frago_cli-1.3.0/src/frago/recipes/app_state.py +411 -0
  308. frago_cli-1.3.0/src/frago/recipes/background.py +103 -0
  309. frago_cli-1.3.0/src/frago/recipes/birth.py +69 -0
  310. frago_cli-1.3.0/src/frago/recipes/checks.py +336 -0
  311. frago_cli-1.3.0/src/frago/recipes/context.py +683 -0
  312. frago_cli-1.3.0/src/frago/recipes/contract.py +278 -0
  313. frago_cli-1.3.0/src/frago/recipes/data_migration.py +1119 -0
  314. frago_cli-1.3.0/src/frago/recipes/exceptions.py +82 -0
  315. frago_cli-1.3.0/src/frago/recipes/execution_store.py +329 -0
  316. frago_cli-1.3.0/src/frago/recipes/installer.py +723 -0
  317. frago_cli-1.3.0/src/frago/recipes/isolation.py +1153 -0
  318. frago_cli-1.3.0/src/frago/recipes/metadata.py +485 -0
  319. frago_cli-1.3.0/src/frago/recipes/publish.py +568 -0
  320. frago_cli-1.3.0/src/frago/recipes/registry.py +455 -0
  321. frago_cli-1.3.0/src/frago/recipes/runner.py +1290 -0
  322. frago_cli-1.3.0/src/frago/recipes/runtime/frago_recipe.py +837 -0
  323. frago_cli-1.3.0/src/frago/recipes/schedule.py +56 -0
  324. frago_cli-1.3.0/src/frago/recipes/template.py +460 -0
  325. frago_cli-1.3.0/src/frago/resources/agent-disciplines.md +29 -0
  326. frago_cli-1.3.0/src/frago/resources/book/_guidance.md +17 -0
  327. frago_cli-1.3.0/src/frago/resources/book/_identity.md +9 -0
  328. frago_cli-1.3.0/src/frago/resources/book/_index.yaml +183 -0
  329. frago_cli-1.3.0/src/frago/resources/book/_scenes.yaml +83 -0
  330. frago_cli-1.3.0/src/frago/resources/book/agent-worker-driving.md +81 -0
  331. frago_cli-1.3.0/src/frago/resources/book/better-recipe-gate.md +89 -0
  332. frago_cli-1.3.0/src/frago/resources/book/better-server-restart.md +51 -0
  333. frago_cli-1.3.0/src/frago/resources/book/better-structured-data.md +20 -0
  334. frago_cli-1.3.0/src/frago/resources/book/browser-anti-bot.md +51 -0
  335. frago_cli-1.3.0/src/frago/resources/book/browser-backend-choice.md +83 -0
  336. frago_cli-1.3.0/src/frago/resources/book/browser-startup.md +41 -0
  337. frago_cli-1.3.0/src/frago/resources/book/browser-usage.md +186 -0
  338. frago_cli-1.3.0/src/frago/resources/book/context-recall.md +80 -0
  339. frago_cli-1.3.0/src/frago/resources/book/def-knowledge.md +49 -0
  340. frago_cli-1.3.0/src/frago/resources/book/desktop-usage.md +102 -0
  341. frago_cli-1.3.0/src/frago/resources/book/domain-insights.md +44 -0
  342. frago_cli-1.3.0/src/frago/resources/book/frago-principle-extend.md +71 -0
  343. frago_cli-1.3.0/src/frago/resources/book/frago-principle-os.md +81 -0
  344. frago_cli-1.3.0/src/frago/resources/book/frago-principle-recall.md +59 -0
  345. frago_cli-1.3.0/src/frago/resources/book/frago-principle-trust.md +69 -0
  346. frago_cli-1.3.0/src/frago/resources/book/hook-rules-authoring.md +154 -0
  347. frago_cli-1.3.0/src/frago/resources/book/interactive-recipe.md +283 -0
  348. frago_cli-1.3.0/src/frago/resources/book/must-browser-fetch.md +44 -0
  349. frago_cli-1.3.0/src/frago/resources/book/must-browser-search.md +43 -0
  350. frago_cli-1.3.0/src/frago/resources/book/must-data-dir.md +104 -0
  351. frago_cli-1.3.0/src/frago/resources/book/must-execution-principles.md +63 -0
  352. frago_cli-1.3.0/src/frago/resources/book/must-explain-in-business-language.md +135 -0
  353. frago_cli-1.3.0/src/frago/resources/book/must-no-auto-memory.md +55 -0
  354. frago_cli-1.3.0/src/frago/resources/book/must-output-shape.md +132 -0
  355. frago_cli-1.3.0/src/frago/resources/book/must-recipe-data.md +290 -0
  356. frago_cli-1.3.0/src/frago/resources/book/must-system-frago.md +40 -0
  357. frago_cli-1.3.0/src/frago/resources/book/must-tool-priority.md +38 -0
  358. frago_cli-1.3.0/src/frago/resources/book/prompt-form-protocol.md +53 -0
  359. frago_cli-1.3.0/src/frago/resources/book/recipe-authoring.md +382 -0
  360. frago_cli-1.3.0/src/frago/resources/book/recipe-creation.md +333 -0
  361. frago_cli-1.3.0/src/frago/resources/book/recipe-deploy.md +319 -0
  362. frago_cli-1.3.0/src/frago/resources/book/recipe-execution.md +28 -0
  363. frago_cli-1.3.0/src/frago/resources/book/recipe-expose.md +297 -0
  364. frago_cli-1.3.0/src/frago/resources/book/recipe-fields.md +153 -0
  365. frago_cli-1.3.0/src/frago/resources/book/recipe-spec-writing.md +88 -0
  366. frago_cli-1.3.0/src/frago/resources/book/remote-frago.md +76 -0
  367. frago_cli-1.3.0/src/frago/resources/book/scene-content-creation.md +29 -0
  368. frago_cli-1.3.0/src/frago/resources/book/scene-data-extraction.md +37 -0
  369. frago_cli-1.3.0/src/frago/resources/book/scene-form-automation.md +33 -0
  370. frago_cli-1.3.0/src/frago/resources/book/scene-multi-page-workflow.md +40 -0
  371. frago_cli-1.3.0/src/frago/resources/book/scene-recipe-development.md +41 -0
  372. frago_cli-1.3.0/src/frago/resources/book/scene-web-research.md +33 -0
  373. frago_cli-1.3.0/src/frago/resources/book/schedule-tasks.md +109 -0
  374. frago_cli-1.3.0/src/frago/resources/book/session-handoff.md +90 -0
  375. frago_cli-1.3.0/src/frago/resources/book/session-search.md +62 -0
  376. frago_cli-1.3.0/src/frago/resources/book/stop-signals-authoring.md +66 -0
  377. frago_cli-1.3.0/src/frago/resources/constitution.md +22 -0
  378. frago_cli-1.3.0/src/frago/resources/frago-home-gitignore.template +159 -0
  379. frago_cli-1.3.0/src/frago/resources/guide/en/02-interface-faq.md +249 -0
  380. frago_cli-1.3.0/src/frago/resources/guide/en/05-troubleshooting.md +377 -0
  381. frago_cli-1.3.0/src/frago/resources/guide/zh-CN/02-interface-faq.md +249 -0
  382. frago_cli-1.3.0/src/frago/resources/guide/zh-CN/05-troubleshooting.md +377 -0
  383. frago_cli-1.3.0/src/frago/resources/hook/builtin-rules.json +566 -0
  384. frago_cli-1.3.0/src/frago/resources/hook/fallback.md +6 -0
  385. frago_cli-1.3.0/src/frago/resources/hook/prompt.md +34 -0
  386. frago_cli-1.3.0/src/frago/resources/hook/stop-signals.json +33 -0
  387. frago_cli-1.3.0/src/frago/resources/hook/stop.md +59 -0
  388. frago_cli-1.3.0/src/frago/resources/hook/veto.md +28 -0
  389. frago_cli-1.3.0/src/frago/resources/mascot/README.md +49 -0
  390. frago_cli-1.3.0/src/frago/resources/mascot/characters.png +0 -0
  391. frago_cli-1.3.0/src/frago/resources/mascot/walker.png +0 -0
  392. frago_cli-1.3.0/src/frago/resources/opencode/frago-hook.js +763 -0
  393. frago_cli-1.3.0/src/frago/resources/opencode/injection-markers.json +17 -0
  394. frago_cli-1.3.0/src/frago/resources/opencode/tool-name-map.json +17 -0
  395. frago_cli-1.3.0/src/frago/resources/opencode/vision-context.json +12 -0
  396. frago_cli-1.3.0/src/frago/run/context.py +216 -0
  397. frago_cli-1.3.0/src/frago/run/exceptions.py +81 -0
  398. frago_cli-1.3.0/src/frago/run/logger.py +161 -0
  399. frago_cli-1.3.0/src/frago/run/models.py +267 -0
  400. frago_cli-1.3.0/src/frago/run/perception.py +145 -0
  401. frago_cli-1.3.0/src/frago/run/run_log_adapter.py +78 -0
  402. frago_cli-1.3.0/src/frago/run/screenshot.py +83 -0
  403. frago_cli-1.3.0/src/frago/server/app.py +744 -0
  404. frago_cli-1.3.0/src/frago/server/assets/assets/index-An_4YmjR.js +646 -0
  405. frago_cli-1.3.0/src/frago/server/assets/index.html +187 -0
  406. frago_cli-1.3.0/src/frago/server/daemon.py +828 -0
  407. frago_cli-1.3.0/src/frago/server/identity.py +1467 -0
  408. frago_cli-1.3.0/src/frago/server/launch_guard.py +172 -0
  409. frago_cli-1.3.0/src/frago/server/models.py +688 -0
  410. frago_cli-1.3.0/src/frago/server/restarter.py +221 -0
  411. frago_cli-1.3.0/src/frago/server/routes/__init__.py +58 -0
  412. frago_cli-1.3.0/src/frago/server/routes/agent.py +198 -0
  413. frago_cli-1.3.0/src/frago/server/routes/app_pages.py +513 -0
  414. frago_cli-1.3.0/src/frago/server/routes/app_run.py +454 -0
  415. frago_cli-1.3.0/src/frago/server/routes/auth.py +345 -0
  416. frago_cli-1.3.0/src/frago/server/routes/browser_dashboard.py +91 -0
  417. frago_cli-1.3.0/src/frago/server/routes/bus.py +548 -0
  418. frago_cli-1.3.0/src/frago/server/routes/claude_sessions.py +105 -0
  419. frago_cli-1.3.0/src/frago/server/routes/config.py +98 -0
  420. frago_cli-1.3.0/src/frago/server/routes/data_repo.py +192 -0
  421. frago_cli-1.3.0/src/frago/server/routes/pa.py +175 -0
  422. frago_cli-1.3.0/src/frago/server/routes/recipes.py +572 -0
  423. frago_cli-1.3.0/src/frago/server/routes/settings.py +1501 -0
  424. frago_cli-1.3.0/src/frago/server/routes/system.py +231 -0
  425. frago_cli-1.3.0/src/frago/server/routes/todos.py +152 -0
  426. frago_cli-1.3.0/src/frago/server/routes/workbench.py +479 -0
  427. frago_cli-1.3.0/src/frago/server/routes/workspace.py +153 -0
  428. frago_cli-1.3.0/src/frago/server/runner.py +450 -0
  429. frago_cli-1.3.0/src/frago/server/security.py +1220 -0
  430. frago_cli-1.3.0/src/frago/server/services/__init__.py +34 -0
  431. frago_cli-1.3.0/src/frago/server/services/agent_knowledge.json +68 -0
  432. frago_cli-1.3.0/src/frago/server/services/agent_service.py +596 -0
  433. frago_cli-1.3.0/src/frago/server/services/base_service.py +64 -0
  434. frago_cli-1.3.0/src/frago/server/services/claude_usage_service.py +214 -0
  435. frago_cli-1.3.0/src/frago/server/services/community_recipe_service.py +467 -0
  436. frago_cli-1.3.0/src/frago/server/services/daemon_service.py +179 -0
  437. frago_cli-1.3.0/src/frago/server/services/data_repo_service.py +575 -0
  438. frago_cli-1.3.0/src/frago/server/services/environment_service.py +450 -0
  439. frago_cli-1.3.0/src/frago/server/services/environment_upgrade_service.py +321 -0
  440. frago_cli-1.3.0/src/frago/server/services/file_service.py +325 -0
  441. frago_cli-1.3.0/src/frago/server/services/gh_install_service.py +450 -0
  442. frago_cli-1.3.0/src/frago/server/services/github_service.py +718 -0
  443. frago_cli-1.3.0/src/frago/server/services/guide_service.py +306 -0
  444. frago_cli-1.3.0/src/frago/server/services/hook_review_service.py +214 -0
  445. frago_cli-1.3.0/src/frago/server/services/ingestion/scheduler.py +310 -0
  446. frago_cli-1.3.0/src/frago/server/services/init_service.py +384 -0
  447. frago_cli-1.3.0/src/frago/server/services/main_config_service.py +134 -0
  448. frago_cli-1.3.0/src/frago/server/services/orphan_recipe_cleanup_service.py +478 -0
  449. frago_cli-1.3.0/src/frago/server/services/pa_context_builder.py +215 -0
  450. frago_cli-1.3.0/src/frago/server/services/pa_outbox.py +119 -0
  451. frago_cli-1.3.0/src/frago/server/services/pa_prompts.py +520 -0
  452. frago_cli-1.3.0/src/frago/server/services/pa_tmux_runner.py +190 -0
  453. frago_cli-1.3.0/src/frago/server/services/primary/__init__.py +8 -0
  454. frago_cli-1.3.0/src/frago/server/services/primary/delivery.py +153 -0
  455. frago_cli-1.3.0/src/frago/server/services/primary/dispatcher.py +335 -0
  456. frago_cli-1.3.0/src/frago/server/services/primary/helpers.py +115 -0
  457. frago_cli-1.3.0/src/frago/server/services/primary/lifecycle.py +237 -0
  458. frago_cli-1.3.0/src/frago/server/services/primary/rendering.py +207 -0
  459. frago_cli-1.3.0/src/frago/server/services/primary/rotation.py +133 -0
  460. frago_cli-1.3.0/src/frago/server/services/primary/watcher.py +132 -0
  461. frago_cli-1.3.0/src/frago/server/services/primary_agent_service.py +666 -0
  462. frago_cli-1.3.0/src/frago/server/services/recipe_forge.py +227 -0
  463. frago_cli-1.3.0/src/frago/server/services/recipe_service.py +307 -0
  464. frago_cli-1.3.0/src/frago/server/services/recipe_supervisor.py +299 -0
  465. frago_cli-1.3.0/src/frago/server/services/routing/__init__.py +24 -0
  466. frago_cli-1.3.0/src/frago/server/services/routing/conv_key.py +80 -0
  467. frago_cli-1.3.0/src/frago/server/services/routing/thread_classifier.py +103 -0
  468. frago_cli-1.3.0/src/frago/server/services/schedule_executor.py +430 -0
  469. frago_cli-1.3.0/src/frago/server/services/scheduler_service.py +570 -0
  470. frago_cli-1.3.0/src/frago/server/services/session_send.py +203 -0
  471. frago_cli-1.3.0/src/frago/server/services/skill_service.py +83 -0
  472. frago_cli-1.3.0/src/frago/server/services/subprocess_utils.py +289 -0
  473. frago_cli-1.3.0/src/frago/server/services/sync_service.py +206 -0
  474. frago_cli-1.3.0/src/frago/server/services/system_service.py +235 -0
  475. frago_cli-1.3.0/src/frago/server/services/tab_cleanup_service.py +150 -0
  476. frago_cli-1.3.0/src/frago/server/services/task_lifecycle.py +172 -0
  477. frago_cli-1.3.0/src/frago/server/services/timeline_service.py +149 -0
  478. frago_cli-1.3.0/src/frago/server/services/tmux_sessions_service.py +478 -0
  479. frago_cli-1.3.0/src/frago/server/services/todo_compose_service.py +288 -0
  480. frago_cli-1.3.0/src/frago/server/services/ui_session_lifecycle.py +85 -0
  481. frago_cli-1.3.0/src/frago/server/services/ui_session_runner.py +248 -0
  482. frago_cli-1.3.0/src/frago/server/services/update_service.py +268 -0
  483. frago_cli-1.3.0/src/frago/server/services/version_service.py +249 -0
  484. frago_cli-1.3.0/src/frago/server/services/viewer_service.py +348 -0
  485. frago_cli-1.3.0/src/frago/server/services/virtual_os_lifecycle.py +160 -0
  486. frago_cli-1.3.0/src/frago/server/services/webui_uploads.py +201 -0
  487. frago_cli-1.3.0/src/frago/server/services/workbench_agents.py +176 -0
  488. frago_cli-1.3.0/src/frago/server/services/workbench_new_session.py +277 -0
  489. frago_cli-1.3.0/src/frago/server/services/workbench_pins.py +124 -0
  490. frago_cli-1.3.0/src/frago/server/services/workbench_stream_bridge.py +188 -0
  491. frago_cli-1.3.0/src/frago/server/state/broadcaster.py +69 -0
  492. frago_cli-1.3.0/src/frago/server/state/loader.py +121 -0
  493. frago_cli-1.3.0/src/frago/server/state/manager.py +389 -0
  494. frago_cli-1.3.0/src/frago/server/state/models.py +233 -0
  495. frago_cli-1.3.0/src/frago/server/websocket.py +211 -0
  496. frago_cli-1.3.0/src/frago/session/adapters/__init__.py +92 -0
  497. frago_cli-1.3.0/src/frago/session/adapters/claude_code_records.py +1667 -0
  498. frago_cli-1.3.0/src/frago/session/adapters/codex_records.py +470 -0
  499. frago_cli-1.3.0/src/frago/session/adapters/opencode_records.py +930 -0
  500. frago_cli-1.3.0/src/frago/session/claude_sessions.py +498 -0
  501. frago_cli-1.3.0/src/frago/session/codex_store.py +583 -0
  502. frago_cli-1.3.0/src/frago/session/codex_sync.py +153 -0
  503. frago_cli-1.3.0/src/frago/session/formatter.py +354 -0
  504. frago_cli-1.3.0/src/frago/session/models.py +220 -0
  505. frago_cli-1.3.0/src/frago/session/monitor.py +862 -0
  506. frago_cli-1.3.0/src/frago/session/opencode_store.py +792 -0
  507. frago_cli-1.3.0/src/frago/session/opencode_stream.py +199 -0
  508. frago_cli-1.3.0/src/frago/session/opencode_sync.py +146 -0
  509. frago_cli-1.3.0/src/frago/session/parser.py +454 -0
  510. frago_cli-1.3.0/src/frago/session/record_reader.py +362 -0
  511. frago_cli-1.3.0/src/frago/session/record_search.py +555 -0
  512. frago_cli-1.3.0/src/frago/session/search.py +800 -0
  513. frago_cli-1.3.0/src/frago/session/self_id.py +125 -0
  514. frago_cli-1.3.0/src/frago/session/session_index.py +886 -0
  515. frago_cli-1.3.0/src/frago/session/session_origin.py +457 -0
  516. frago_cli-1.3.0/src/frago/session/storage.py +848 -0
  517. frago_cli-1.3.0/src/frago/session/stream.py +299 -0
  518. frago_cli-1.3.0/src/frago/session/sync.py +354 -0
  519. frago_cli-1.3.0/src/frago/session/title_manager.py +399 -0
  520. frago_cli-1.3.0/src/frago/session/token_calendar.py +175 -0
  521. frago_cli-1.3.0/src/frago/session/transcript_completion.py +215 -0
  522. frago_cli-1.3.0/src/frago/session/unified_record.py +156 -0
  523. frago_cli-1.3.0/src/frago/telemetry/trace.py +582 -0
  524. frago_cli-1.3.0/src/frago/todo/store.py +356 -0
  525. frago_cli-1.3.0/src/frago/viewer/__init__.py +12 -0
  526. frago_cli-1.3.0/src/frago/viewer/browser.py +170 -0
  527. frago_cli-1.3.0/src/frago/watcher/__init__.py +23 -0
  528. frago_cli-1.3.0/src/frago/watcher/models.py +68 -0
  529. frago_cli-1.3.0/src/frago/watcher/service.py +266 -0
  530. frago_cli-1.3.0/src-tauri/Cargo.lock +5132 -0
  531. frago_cli-1.3.0/src-tauri/Cargo.toml +30 -0
  532. frago_cli-1.3.0/src-tauri/icons/256x256.png +0 -0
  533. frago_cli-1.3.0/src-tauri/src/commands.rs +69 -0
  534. frago_cli-1.3.0/src-tauri/src/constants.rs +20 -0
  535. frago_cli-1.3.0/src-tauri/src/installer/claude_code.rs +219 -0
  536. frago_cli-1.3.0/src-tauri/src/installer/downloader.rs +125 -0
  537. frago_cli-1.3.0/src-tauri/src/installer/frago.rs +105 -0
  538. frago_cli-1.3.0/src-tauri/src/installer/launcher.rs +102 -0
  539. frago_cli-1.3.0/src-tauri/src/installer/mod.rs +165 -0
  540. frago_cli-1.3.0/src-tauri/src/installer/process.rs +64 -0
  541. frago_cli-1.3.0/src-tauri/src/installer/uv.rs +88 -0
  542. frago_cli-1.3.0/src-tauri/src/main.rs +24 -0
  543. frago_cli-1.3.0/src-tauri/tauri.conf.json +55 -0
  544. frago_cli-1.3.0/tests/agent_driver/conftest.py +27 -0
  545. frago_cli-1.3.0/tests/agent_driver/test_claude_done_detection.py +91 -0
  546. frago_cli-1.3.0/tests/agent_driver/test_claude_driver_launch.py +107 -0
  547. frago_cli-1.3.0/tests/agent_driver/test_claude_needs_input.py +161 -0
  548. frago_cli-1.3.0/tests/agent_driver/test_claude_truly_idle.py +84 -0
  549. frago_cli-1.3.0/tests/agent_driver/test_driver_phase1.py +101 -0
  550. frago_cli-1.3.0/tests/agent_driver/test_pool.py +421 -0
  551. frago_cli-1.3.0/tests/agent_driver/test_pool_idle_eviction.py +75 -0
  552. frago_cli-1.3.0/tests/agent_driver/test_recipe_commands_passthrough.py +185 -0
  553. frago_cli-1.3.0/tests/agent_driver/test_tmux_session.py +734 -0
  554. frago_cli-1.3.0/tests/agent_driver/test_transcript.py +108 -0
  555. frago_cli-1.3.0/tests/agent_driver/test_transcript_streamer.py +235 -0
  556. frago_cli-1.3.0/tests/cli/test_agent_json_contract.py +177 -0
  557. frago_cli-1.3.0/tests/cli/test_agent_subcommands.py +349 -0
  558. frago_cli-1.3.0/tests/cli/test_agent_tmux_env.py +198 -0
  559. frago_cli-1.3.0/tests/cli/test_browser_commands.py +157 -0
  560. frago_cli-1.3.0/tests/cli/test_daemon_commands.py +185 -0
  561. frago_cli-1.3.0/tests/cli/test_recipe_open_target.py +121 -0
  562. frago_cli-1.3.0/tests/cli/test_recipe_validate_exit_code.py +101 -0
  563. frago_cli-1.3.0/tests/conftest.py +351 -0
  564. frago_cli-1.3.0/tests/extension/e2e/e2e_batch1_mock.py +185 -0
  565. frago_cli-1.3.0/tests/extension/e2e/e2e_batch2_mock.py +92 -0
  566. frago_cli-1.3.0/tests/extension/e2e/e2e_demo.py +364 -0
  567. frago_cli-1.3.0/tests/extension/e2e/e2e_mock.py +198 -0
  568. frago_cli-1.3.0/tests/extension/e2e/upwork_smoke.py +298 -0
  569. frago_cli-1.3.0/tests/extension/test_anti_bot.py +86 -0
  570. frago_cli-1.3.0/tests/extension/test_batch1_parity.py +405 -0
  571. frago_cli-1.3.0/tests/extension/test_batch2_parity.py +313 -0
  572. frago_cli-1.3.0/tests/extension/test_browser_picker.py +134 -0
  573. frago_cli-1.3.0/tests/extension/test_launch_args.py +98 -0
  574. frago_cli-1.3.0/tests/extension/test_lifecycle.py +204 -0
  575. frago_cli-1.3.0/tests/extension/test_manifest_dir.py +93 -0
  576. frago_cli-1.3.0/tests/extension/test_mvp_parity.py +238 -0
  577. frago_cli-1.3.0/tests/extension/test_profile_seed.py +102 -0
  578. frago_cli-1.3.0/tests/extension/test_proxy_detect.py +209 -0
  579. frago_cli-1.3.0/tests/extension/test_visual_effects.py +80 -0
  580. frago_cli-1.3.0/tests/fixtures/sessions/empty_session.jsonl +0 -0
  581. frago_cli-1.3.0/tests/integration/test_exposed_pages_visitor.py +221 -0
  582. frago_cli-1.3.0/tests/integration/test_session_sync_e2e.py +232 -0
  583. frago_cli-1.3.0/tests/server/test_claude_usage_service.py +61 -0
  584. frago_cli-1.3.0/tests/server/test_deliver_attachments.py +98 -0
  585. frago_cli-1.3.0/tests/server/test_pa_outbox.py +128 -0
  586. frago_cli-1.3.0/tests/server/test_pa_prompts_contract.py +59 -0
  587. frago_cli-1.3.0/tests/server/test_pa_tmux_runner_warm.py +52 -0
  588. frago_cli-1.3.0/tests/server/test_pa_transcript_watcher.py +179 -0
  589. frago_cli-1.3.0/tests/server/test_pa_warm_convs.py +156 -0
  590. frago_cli-1.3.0/tests/server/test_recipe_forge.py +121 -0
  591. frago_cli-1.3.0/tests/unit/agent_driver/conftest.py +25 -0
  592. frago_cli-1.3.0/tests/unit/agent_driver/test_claude_transcript_probe.py +323 -0
  593. frago_cli-1.3.0/tests/unit/agent_driver/test_codex_driver.py +301 -0
  594. frago_cli-1.3.0/tests/unit/agent_driver/test_opencode_driver.py +813 -0
  595. frago_cli-1.3.0/tests/unit/agent_driver/test_opencode_profile_apply.py +197 -0
  596. frago_cli-1.3.0/tests/unit/agent_driver/test_opencode_transcript_source.py +418 -0
  597. frago_cli-1.3.0/tests/unit/agent_driver/test_profile_env.py +396 -0
  598. frago_cli-1.3.0/tests/unit/browser/__init__.py +0 -0
  599. frago_cli-1.3.0/tests/unit/browser/test_group_isolation.py +410 -0
  600. frago_cli-1.3.0/tests/unit/browser/test_tab_group_expiry.py +318 -0
  601. frago_cli-1.3.0/tests/unit/cli/test_apps_commands.py +148 -0
  602. frago_cli-1.3.0/tests/unit/cli/test_browser_start_exit_code.py +120 -0
  603. frago_cli-1.3.0/tests/unit/cli/test_context_command.py +149 -0
  604. frago_cli-1.3.0/tests/unit/cli/test_expose_widening.py +158 -0
  605. frago_cli-1.3.0/tests/unit/cli/test_hook_rules_stats.py +128 -0
  606. frago_cli-1.3.0/tests/unit/cli/test_no_command_shadowing.py +67 -0
  607. frago_cli-1.3.0/tests/unit/cli/test_publish_identity.py +132 -0
  608. frago_cli-1.3.0/tests/unit/cli/test_remote_commands.py +163 -0
  609. frago_cli-1.3.0/tests/unit/cli/test_server_command_reinstall.py +381 -0
  610. frago_cli-1.3.0/tests/unit/cli/test_todo_commands.py +221 -0
  611. frago_cli-1.3.0/tests/unit/cli/test_user_commands.py +383 -0
  612. frago_cli-1.3.0/tests/unit/context/__init__.py +0 -0
  613. frago_cli-1.3.0/tests/unit/context/test_data_scheme.py +103 -0
  614. frago_cli-1.3.0/tests/unit/context/test_matcher.py +121 -0
  615. frago_cli-1.3.0/tests/unit/context/test_report.py +306 -0
  616. frago_cli-1.3.0/tests/unit/context/test_whole_home.py +75 -0
  617. frago_cli-1.3.0/tests/unit/desktop/__init__.py +0 -0
  618. frago_cli-1.3.0/tests/unit/desktop/test_assets.py +53 -0
  619. frago_cli-1.3.0/tests/unit/desktop/test_desktop.py +1437 -0
  620. frago_cli-1.3.0/tests/unit/init/__init__.py +0 -0
  621. frago_cli-1.3.0/tests/unit/init/test_app_control.py +118 -0
  622. frago_cli-1.3.0/tests/unit/init/test_codex_hooks.py +145 -0
  623. frago_cli-1.3.0/tests/unit/init/test_hook_binary.py +198 -0
  624. frago_cli-1.3.0/tests/unit/init/test_opencode_plugin.py +198 -0
  625. frago_cli-1.3.0/tests/unit/init/test_opencode_vision_bridge.py +294 -0
  626. frago_cli-1.3.0/tests/unit/init/test_retired_artifacts.py +314 -0
  627. frago_cli-1.3.0/tests/unit/recipes/test_access_levels.py +234 -0
  628. frago_cli-1.3.0/tests/unit/recipes/test_context.py +601 -0
  629. frago_cli-1.3.0/tests/unit/recipes/test_data_custody.py +121 -0
  630. frago_cli-1.3.0/tests/unit/recipes/test_data_migration.py +926 -0
  631. frago_cli-1.3.0/tests/unit/recipes/test_expose_checks.py +188 -0
  632. frago_cli-1.3.0/tests/unit/recipes/test_isolation.py +627 -0
  633. frago_cli-1.3.0/tests/unit/recipes/test_publish.py +178 -0
  634. frago_cli-1.3.0/tests/unit/recipes/test_publish_allow.py +186 -0
  635. frago_cli-1.3.0/tests/unit/recipes/test_recipe_data_paths.py +366 -0
  636. frago_cli-1.3.0/tests/unit/recipes/test_strict_params.py +131 -0
  637. frago_cli-1.3.0/tests/unit/recipes/test_visitor_isolation.py +148 -0
  638. frago_cli-1.3.0/tests/unit/run/__init__.py +0 -0
  639. frago_cli-1.3.0/tests/unit/server/services/ingestion/__init__.py +0 -0
  640. frago_cli-1.3.0/tests/unit/server/services/ingestion/test_recipe_supervisor.py +213 -0
  641. frago_cli-1.3.0/tests/unit/server/services/test_agent_service.py +186 -0
  642. frago_cli-1.3.0/tests/unit/server/services/test_base_service.py +65 -0
  643. frago_cli-1.3.0/tests/unit/server/services/test_claude_sessions.py +431 -0
  644. frago_cli-1.3.0/tests/unit/server/services/test_community_recipe_service.py +313 -0
  645. frago_cli-1.3.0/tests/unit/server/services/test_config_service.py +270 -0
  646. frago_cli-1.3.0/tests/unit/server/services/test_conv_key.py +43 -0
  647. frago_cli-1.3.0/tests/unit/server/services/test_daemon_service.py +137 -0
  648. frago_cli-1.3.0/tests/unit/server/services/test_data_repo_service.py +303 -0
  649. frago_cli-1.3.0/tests/unit/server/services/test_file_service.py +423 -0
  650. frago_cli-1.3.0/tests/unit/server/services/test_gh_install_service.py +198 -0
  651. frago_cli-1.3.0/tests/unit/server/services/test_github_rate_limit.py +94 -0
  652. frago_cli-1.3.0/tests/unit/server/services/test_github_service.py +303 -0
  653. frago_cli-1.3.0/tests/unit/server/services/test_guide_service.py +54 -0
  654. frago_cli-1.3.0/tests/unit/server/services/test_init_service.py +307 -0
  655. frago_cli-1.3.0/tests/unit/server/services/test_main_config_service.py +55 -0
  656. frago_cli-1.3.0/tests/unit/server/services/test_orphan_recipe_cleanup_service.py +426 -0
  657. frago_cli-1.3.0/tests/unit/server/services/test_pa_tmux_activation.py +421 -0
  658. frago_cli-1.3.0/tests/unit/server/services/test_pa_validators.py +88 -0
  659. frago_cli-1.3.0/tests/unit/server/services/test_primary_agent_service.py +205 -0
  660. frago_cli-1.3.0/tests/unit/server/services/test_recipe_secrets_service.py +91 -0
  661. frago_cli-1.3.0/tests/unit/server/services/test_recipe_service.py +259 -0
  662. frago_cli-1.3.0/tests/unit/server/services/test_resume_inbox.py +101 -0
  663. frago_cli-1.3.0/tests/unit/server/services/test_schedule_executor.py +212 -0
  664. frago_cli-1.3.0/tests/unit/server/services/test_scheduler_service.py +181 -0
  665. frago_cli-1.3.0/tests/unit/server/services/test_skill_service.py +114 -0
  666. frago_cli-1.3.0/tests/unit/server/services/test_subprocess_utils.py +212 -0
  667. frago_cli-1.3.0/tests/unit/server/services/test_system_service.py +184 -0
  668. frago_cli-1.3.0/tests/unit/server/services/test_system_service_os.py +86 -0
  669. frago_cli-1.3.0/tests/unit/server/services/test_tab_cleanup_service.py +294 -0
  670. frago_cli-1.3.0/tests/unit/server/services/test_timeline_service.py +147 -0
  671. frago_cli-1.3.0/tests/unit/server/services/test_tmux_sessions_service.py +206 -0
  672. frago_cli-1.3.0/tests/unit/server/services/test_token_calendar_api.py +108 -0
  673. frago_cli-1.3.0/tests/unit/server/services/test_trace_schema.py +341 -0
  674. frago_cli-1.3.0/tests/unit/server/services/test_transcript_completion.py +208 -0
  675. frago_cli-1.3.0/tests/unit/server/services/test_ui_session_lifecycle.py +483 -0
  676. frago_cli-1.3.0/tests/unit/server/services/test_ui_session_runner.py +133 -0
  677. frago_cli-1.3.0/tests/unit/server/services/test_update_service.py +177 -0
  678. frago_cli-1.3.0/tests/unit/server/services/test_version_service.py +53 -0
  679. frago_cli-1.3.0/tests/unit/server/services/test_viewer_service.py +304 -0
  680. frago_cli-1.3.0/tests/unit/server/state/test_broadcaster.py +79 -0
  681. frago_cli-1.3.0/tests/unit/server/state/test_loader.py +60 -0
  682. frago_cli-1.3.0/tests/unit/server/test_agent_core_preference.py +278 -0
  683. frago_cli-1.3.0/tests/unit/server/test_allow_list_boundary.py +182 -0
  684. frago_cli-1.3.0/tests/unit/server/test_app_pages.py +817 -0
  685. frago_cli-1.3.0/tests/unit/server/test_app_run.py +596 -0
  686. frago_cli-1.3.0/tests/unit/server/test_auth_routes.py +148 -0
  687. frago_cli-1.3.0/tests/unit/server/test_bus_edge_ledger.py +149 -0
  688. frago_cli-1.3.0/tests/unit/server/test_bus_frago.py +138 -0
  689. frago_cli-1.3.0/tests/unit/server/test_bus_publish_identity.py +139 -0
  690. frago_cli-1.3.0/tests/unit/server/test_daemon_health.py +49 -0
  691. frago_cli-1.3.0/tests/unit/server/test_daemon_start_reporting.py +147 -0
  692. frago_cli-1.3.0/tests/unit/server/test_data_failures_are_not_cached.py +59 -0
  693. frago_cli-1.3.0/tests/unit/server/test_data_repo_routes.py +148 -0
  694. frago_cli-1.3.0/tests/unit/server/test_gh_quota_visibility.py +113 -0
  695. frago_cli-1.3.0/tests/unit/server/test_gh_setup_routes.py +164 -0
  696. frago_cli-1.3.0/tests/unit/server/test_identity.py +412 -0
  697. frago_cli-1.3.0/tests/unit/server/test_identity_zone.py +168 -0
  698. frago_cli-1.3.0/tests/unit/server/test_launch_guard.py +46 -0
  699. frago_cli-1.3.0/tests/unit/server/test_password_reset.py +224 -0
  700. frago_cli-1.3.0/tests/unit/server/test_phase1_e2e.py +238 -0
  701. frago_cli-1.3.0/tests/unit/server/test_profile_routes.py +342 -0
  702. frago_cli-1.3.0/tests/unit/server/test_public_boundary.py +605 -0
  703. frago_cli-1.3.0/tests/unit/server/test_reachable_pages.py +171 -0
  704. frago_cli-1.3.0/tests/unit/server/test_security.py +604 -0
  705. frago_cli-1.3.0/tests/unit/server/test_shared_reading.py +202 -0
  706. frago_cli-1.3.0/tests/unit/server/test_sign_in_redirect.py +187 -0
  707. frago_cli-1.3.0/tests/unit/server/test_todo_compose.py +290 -0
  708. frago_cli-1.3.0/tests/unit/server/test_todo_routes.py +121 -0
  709. frago_cli-1.3.0/tests/unit/server/test_user_root_migration.py +176 -0
  710. frago_cli-1.3.0/tests/unit/server/test_virtual_os_lifecycle.py +145 -0
  711. frago_cli-1.3.0/tests/unit/server/test_workbench_agents.py +265 -0
  712. frago_cli-1.3.0/tests/unit/server/test_workbench_new_session.py +205 -0
  713. frago_cli-1.3.0/tests/unit/server/test_workbench_pins.py +139 -0
  714. frago_cli-1.3.0/tests/unit/server/test_workbench_routes.py +315 -0
  715. frago_cli-1.3.0/tests/unit/server/test_workbench_send.py +242 -0
  716. frago_cli-1.3.0/tests/unit/server/test_workbench_stop.py +91 -0
  717. frago_cli-1.3.0/tests/unit/session/test_claude_code_records.py +1603 -0
  718. frago_cli-1.3.0/tests/unit/session/test_codex_records.py +345 -0
  719. frago_cli-1.3.0/tests/unit/session/test_codex_store.py +331 -0
  720. frago_cli-1.3.0/tests/unit/session/test_models.py +213 -0
  721. frago_cli-1.3.0/tests/unit/session/test_opencode_records.py +943 -0
  722. frago_cli-1.3.0/tests/unit/session/test_opencode_store.py +469 -0
  723. frago_cli-1.3.0/tests/unit/session/test_opencode_sync.py +377 -0
  724. frago_cli-1.3.0/tests/unit/session/test_parser.py +651 -0
  725. frago_cli-1.3.0/tests/unit/session/test_record_search.py +240 -0
  726. frago_cli-1.3.0/tests/unit/session/test_search.py +496 -0
  727. frago_cli-1.3.0/tests/unit/session/test_self_id.py +82 -0
  728. frago_cli-1.3.0/tests/unit/session/test_session_index.py +807 -0
  729. frago_cli-1.3.0/tests/unit/session/test_session_origin.py +265 -0
  730. frago_cli-1.3.0/tests/unit/session/test_storage.py +247 -0
  731. frago_cli-1.3.0/tests/unit/session/test_stream.py +238 -0
  732. frago_cli-1.3.0/tests/unit/session/test_sync.py +159 -0
  733. frago_cli-1.3.0/tests/unit/session/test_token_calendar.py +169 -0
  734. frago_cli-1.3.0/tests/unit/session/test_unified_record.py +507 -0
  735. frago_cli-1.3.0/tests/unit/test_config_roundtrip.py +95 -0
  736. frago_cli-1.3.0/tests/unit/test_deployment_agent.py +464 -0
  737. frago_cli-1.3.0/tests/unit/test_launcher_profile_dir.py +231 -0
  738. frago_cli-1.3.0/tests/unit/test_profile_activation_e2e.py +155 -0
  739. frago_cli-1.3.0/tests/unit/test_profile_manager.py +608 -0
  740. frago_cli-1.3.0/tests/unit/test_profile_role_bindings.py +227 -0
  741. frago_cli-1.3.0/tests/unit/test_profile_targets.py +99 -0
  742. frago_cli-1.3.0/tests/unit/test_real_data_guard.py +112 -0
  743. frago_cli-1.3.0/tests/unit/test_workspace.py +789 -0
  744. frago_cli-1.3.0/tests/unit/todo/__init__.py +0 -0
  745. frago_cli-1.3.0/uv.lock +1344 -0
  746. frago_cli-1.2.0/.github/scripts/validate_recipe.py +0 -242
  747. frago_cli-1.2.0/.github/workflows/validate-recipes.yml +0 -53
  748. frago_cli-1.2.0/.gitignore +0 -94
  749. frago_cli-1.2.0/PKG-INFO +0 -120
  750. frago_cli-1.2.0/README.md +0 -65
  751. frago_cli-1.2.0/README.zh-CN.md +0 -65
  752. frago_cli-1.2.0/community-recipes/CONTRIBUTING.md +0 -183
  753. frago_cli-1.2.0/community-recipes/README.md +0 -53
  754. frago_cli-1.2.0/community-recipes/SECURITY.md +0 -175
  755. frago_cli-1.2.0/community-recipes/recipes/.gitkeep +0 -1
  756. frago_cli-1.2.0/community-recipes/recipes/arxiv_search_papers/recipe.md +0 -135
  757. frago_cli-1.2.0/community-recipes/recipes/arxiv_search_papers/recipe.py +0 -135
  758. frago_cli-1.2.0/community-recipes/recipes/bilibili_download_video/recipe.md +0 -132
  759. frago_cli-1.2.0/community-recipes/recipes/bilibili_download_video/recipe.sh +0 -173
  760. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/recipe.md +0 -91
  761. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/recipe.py +0 -937
  762. frago_cli-1.2.0/community-recipes/recipes/diagnose_timeline_pa/spec.md +0 -159
  763. frago_cli-1.2.0/community-recipes/recipes/feishu_broadcast_message/recipe.md +0 -88
  764. frago_cli-1.2.0/community-recipes/recipes/feishu_broadcast_message/recipe.py +0 -273
  765. frago_cli-1.2.0/community-recipes/recipes/feishu_check_messages/recipe.md +0 -57
  766. frago_cli-1.2.0/community-recipes/recipes/feishu_check_messages/recipe.py +0 -713
  767. frago_cli-1.2.0/community-recipes/recipes/feishu_send_message/recipe.md +0 -103
  768. frago_cli-1.2.0/community-recipes/recipes/feishu_send_message/recipe.py +0 -408
  769. frago_cli-1.2.0/community-recipes/recipes/feishu_stream_messages/recipe.md +0 -54
  770. frago_cli-1.2.0/community-recipes/recipes/feishu_stream_messages/recipe.py +0 -549
  771. frago_cli-1.2.0/community-recipes/recipes/lark_send_message/recipe.md +0 -103
  772. frago_cli-1.2.0/community-recipes/recipes/lark_send_message/recipe.py +0 -411
  773. frago_cli-1.2.0/community-recipes/recipes/lark_stream_messages/recipe.md +0 -54
  774. frago_cli-1.2.0/community-recipes/recipes/lark_stream_messages/recipe.py +0 -511
  775. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio/recipe.md +0 -183
  776. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio/recipe.py +0 -188
  777. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/app.js +0 -1190
  778. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/index.html +0 -124
  779. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/assets/style.css +0 -900
  780. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/recipe.md +0 -96
  781. frago_cli-1.2.0/community-recipes/recipes/video_cut_studio_ui/recipe.sh +0 -31
  782. frago_cli-1.2.0/community-recipes/recipes/volcengine_tts_with_emotion/recipe.md +0 -204
  783. frago_cli-1.2.0/community-recipes/recipes/volcengine_tts_with_emotion/recipe.py +0 -259
  784. frago_cli-1.2.0/community-recipes/recipes/youtube_download_video_ytdlp/recipe.md +0 -174
  785. frago_cli-1.2.0/community-recipes/recipes/youtube_download_video_ytdlp/recipe.sh +0 -194
  786. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_subtitles_ytdlp/recipe.md +0 -152
  787. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_subtitles_ytdlp/recipe.sh +0 -158
  788. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_video_transcript/recipe.js +0 -61
  789. frago_cli-1.2.0/community-recipes/recipes/youtube_extract_video_transcript/recipe.md +0 -115
  790. frago_cli-1.2.0/docs/browser-support.md +0 -290
  791. frago_cli-1.2.0/docs/browser-support.zh-CN.md +0 -290
  792. frago_cli-1.2.0/docs/concepts.md +0 -191
  793. frago_cli-1.2.0/docs/concepts.zh-CN.md +0 -191
  794. frago_cli-1.2.0/docs/developer.md +0 -37
  795. frago_cli-1.2.0/docs/developer.zh-CN.md +0 -37
  796. frago_cli-1.2.0/docs/examples.md +0 -588
  797. frago_cli-1.2.0/docs/examples.zh-CN.md +0 -512
  798. frago_cli-1.2.0/docs/installation.md +0 -154
  799. frago_cli-1.2.0/docs/installation.zh-CN.md +0 -154
  800. frago_cli-1.2.0/docs/knowledge/data.js +0 -232
  801. frago_cli-1.2.0/docs/knowledge/index.html +0 -56
  802. frago_cli-1.2.0/docs/recipes.md +0 -951
  803. frago_cli-1.2.0/docs/recipes.zh-CN.md +0 -944
  804. frago_cli-1.2.0/docs/user-guide.md +0 -189
  805. frago_cli-1.2.0/docs/user-guide.zh-CN.md +0 -189
  806. frago_cli-1.2.0/pyproject.toml +0 -187
  807. frago_cli-1.2.0/scripts/dev_launch_extension.py +0 -54
  808. frago_cli-1.2.0/src/frago/__init__.py +0 -30
  809. frago_cli-1.2.0/src/frago/_resources/extension_bundle/README.md +0 -59
  810. frago_cli-1.2.0/src/frago/_resources/extension_bundle/background/service_worker.js +0 -783
  811. frago_cli-1.2.0/src/frago/_resources/extension_bundle/content/content_script.js +0 -16
  812. frago_cli-1.2.0/src/frago/_resources/extension_bundle/manifest.json +0 -37
  813. frago_cli-1.2.0/src/frago/autostart/linux.py +0 -264
  814. frago_cli-1.2.0/src/frago/bin/darwin-arm64/frago-hook +0 -0
  815. frago_cli-1.2.0/src/frago/bin/darwin-x86_64/frago-hook +0 -0
  816. frago_cli-1.2.0/src/frago/bin/linux-x86_64/frago-hook +0 -0
  817. frago_cli-1.2.0/src/frago/bin/windows-x86_64/frago-hook.exe +0 -0
  818. frago_cli-1.2.0/src/frago/chrome/__init__.py +0 -17
  819. frago_cli-1.2.0/src/frago/chrome/backends/__init__.py +0 -27
  820. frago_cli-1.2.0/src/frago/chrome/backends/base.py +0 -172
  821. frago_cli-1.2.0/src/frago/chrome/backends/cdp.py +0 -255
  822. frago_cli-1.2.0/src/frago/chrome/backends/extension.py +0 -459
  823. frago_cli-1.2.0/src/frago/chrome/cdp/__init__.py +0 -19
  824. frago_cli-1.2.0/src/frago/chrome/cdp/client.py +0 -95
  825. frago_cli-1.2.0/src/frago/chrome/cdp/commands/__init__.py +0 -29
  826. frago_cli-1.2.0/src/frago/chrome/cdp/commands/chrome.py +0 -1001
  827. frago_cli-1.2.0/src/frago/chrome/cdp/commands/dom.py +0 -102
  828. frago_cli-1.2.0/src/frago/chrome/cdp/commands/input.py +0 -147
  829. frago_cli-1.2.0/src/frago/chrome/cdp/commands/page.py +0 -236
  830. frago_cli-1.2.0/src/frago/chrome/cdp/commands/runtime.py +0 -86
  831. frago_cli-1.2.0/src/frago/chrome/cdp/commands/screenshot.py +0 -71
  832. frago_cli-1.2.0/src/frago/chrome/cdp/commands/scroll.py +0 -67
  833. frago_cli-1.2.0/src/frago/chrome/cdp/commands/status.py +0 -91
  834. frago_cli-1.2.0/src/frago/chrome/cdp/commands/target.py +0 -111
  835. frago_cli-1.2.0/src/frago/chrome/cdp/commands/visual_effects.py +0 -230
  836. frago_cli-1.2.0/src/frago/chrome/cdp/commands/wait.py +0 -71
  837. frago_cli-1.2.0/src/frago/chrome/cdp/commands/zoom.py +0 -54
  838. frago_cli-1.2.0/src/frago/chrome/cdp/config.py +0 -182
  839. frago_cli-1.2.0/src/frago/chrome/cdp/exceptions.py +0 -50
  840. frago_cli-1.2.0/src/frago/chrome/cdp/logger.py +0 -200
  841. frago_cli-1.2.0/src/frago/chrome/cdp/retry.py +0 -215
  842. frago_cli-1.2.0/src/frago/chrome/cdp/session.py +0 -842
  843. frago_cli-1.2.0/src/frago/chrome/cdp/tab_group_manager.py +0 -544
  844. frago_cli-1.2.0/src/frago/chrome/cdp/tab_manager.py +0 -292
  845. frago_cli-1.2.0/src/frago/chrome/cdp/transport.py +0 -55
  846. frago_cli-1.2.0/src/frago/chrome/cdp/types.py +0 -88
  847. frago_cli-1.2.0/src/frago/chrome/extension/README.md +0 -129
  848. frago_cli-1.2.0/src/frago/chrome/extension/__init__.py +0 -52
  849. frago_cli-1.2.0/src/frago/chrome/extension/lifecycle.py +0 -426
  850. frago_cli-1.2.0/src/frago/chrome/extension/native_host.py +0 -420
  851. frago_cli-1.2.0/src/frago/chrome/extension/protocol.py +0 -103
  852. frago_cli-1.2.0/src/frago/cli/__init__.py +0 -9
  853. frago_cli-1.2.0/src/frago/cli/agent_command.py +0 -665
  854. frago_cli-1.2.0/src/frago/cli/agent_friendly.py +0 -193
  855. frago_cli-1.2.0/src/frago/cli/autostart_command.py +0 -78
  856. frago_cli-1.2.0/src/frago/cli/book_commands.py +0 -161
  857. frago_cli-1.2.0/src/frago/cli/channel_commands.py +0 -242
  858. frago_cli-1.2.0/src/frago/cli/chat.py +0 -278
  859. frago_cli-1.2.0/src/frago/cli/chrome_commands.py +0 -381
  860. frago_cli-1.2.0/src/frago/cli/client_commands.py +0 -157
  861. frago_cli-1.2.0/src/frago/cli/cloud_commands.py +0 -409
  862. frago_cli-1.2.0/src/frago/cli/commands.py +0 -2846
  863. frago_cli-1.2.0/src/frago/cli/def_commands.py +0 -283
  864. frago_cli-1.2.0/src/frago/cli/extension_commands.py +0 -230
  865. frago_cli-1.2.0/src/frago/cli/hook_rules_commands.py +0 -518
  866. frago_cli-1.2.0/src/frago/cli/init_command.py +0 -469
  867. frago_cli-1.2.0/src/frago/cli/main.py +0 -480
  868. frago_cli-1.2.0/src/frago/cli/recipe_commands.py +0 -1903
  869. frago_cli-1.2.0/src/frago/cli/reply_command.py +0 -82
  870. frago_cli-1.2.0/src/frago/cli/run_commands.py +0 -1019
  871. frago_cli-1.2.0/src/frago/cli/schedule_commands.py +0 -284
  872. frago_cli-1.2.0/src/frago/cli/server_command.py +0 -198
  873. frago_cli-1.2.0/src/frago/cli/session_commands.py +0 -502
  874. frago_cli-1.2.0/src/frago/cli/start_command.py +0 -256
  875. frago_cli-1.2.0/src/frago/cli/task_commands.py +0 -416
  876. frago_cli-1.2.0/src/frago/cli/timeline_commands.py +0 -413
  877. frago_cli-1.2.0/src/frago/cli/todo_commands.py +0 -203
  878. frago_cli-1.2.0/src/frago/cli/update_command.py +0 -148
  879. frago_cli-1.2.0/src/frago/cli/view_command.py +0 -102
  880. frago_cli-1.2.0/src/frago/cli/workspace_commands.py +0 -161
  881. frago_cli-1.2.0/src/frago/client/index.html +0 -132
  882. frago_cli-1.2.0/src/frago/client/package-lock.json +0 -2778
  883. frago_cli-1.2.0/src/frago/client/package.json +0 -33
  884. frago_cli-1.2.0/src/frago/client/pnpm-lock.yaml +0 -2635
  885. frago_cli-1.2.0/src/frago/client/src/App.tsx +0 -144
  886. frago_cli-1.2.0/src/frago/client/src/api/client.ts +0 -1321
  887. frago_cli-1.2.0/src/frago/client/src/api/index.ts +0 -973
  888. frago_cli-1.2.0/src/frago/client/src/api/pywebview.ts +0 -297
  889. frago_cli-1.2.0/src/frago/client/src/api/websocket.ts +0 -309
  890. frago_cli-1.2.0/src/frago/client/src/components/claudeSessions/ClaudeSessionsPage.tsx +0 -437
  891. frago_cli-1.2.0/src/frago/client/src/components/init/AuthMethodStep.tsx +0 -368
  892. frago_cli-1.2.0/src/frago/client/src/components/init/CoreSelectionStep.tsx +0 -150
  893. frago_cli-1.2.0/src/frago/client/src/components/init/InitWizardModal.tsx +0 -288
  894. frago_cli-1.2.0/src/frago/client/src/components/init/InitWizardPage.tsx +0 -293
  895. frago_cli-1.2.0/src/frago/client/src/components/layout/BottomDock.tsx +0 -65
  896. frago_cli-1.2.0/src/frago/client/src/components/layout/MainLayout.tsx +0 -39
  897. frago_cli-1.2.0/src/frago/client/src/components/layout/Sidebar.tsx +0 -76
  898. frago_cli-1.2.0/src/frago/client/src/components/layout/TopBar.tsx +0 -31
  899. frago_cli-1.2.0/src/frago/client/src/components/newTask/NewTaskPage.tsx +0 -376
  900. frago_cli-1.2.0/src/frago/client/src/components/recipes/CommunityRecipeList.tsx +0 -256
  901. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeDetail.tsx +0 -696
  902. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeList.tsx +0 -341
  903. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeRunModal.tsx +0 -234
  904. frago_cli-1.2.0/src/frago/client/src/components/recipes/RecipeTabs.tsx +0 -52
  905. frago_cli-1.2.0/src/frago/client/src/components/settings/AboutSettings.tsx +0 -23
  906. frago_cli-1.2.0/src/frago/client/src/components/settings/ActiveProfileCard.tsx +0 -86
  907. frago_cli-1.2.0/src/frago/client/src/components/settings/AppearanceSettings.tsx +0 -130
  908. frago_cli-1.2.0/src/frago/client/src/components/settings/AuthStatusCard.tsx +0 -89
  909. frago_cli-1.2.0/src/frago/client/src/components/settings/GeneralSettings.tsx +0 -216
  910. frago_cli-1.2.0/src/frago/client/src/components/settings/InitSettings.tsx +0 -216
  911. frago_cli-1.2.0/src/frago/client/src/components/settings/OfficialResourceSettings.tsx +0 -181
  912. frago_cli-1.2.0/src/frago/client/src/components/settings/ProfileManager.tsx +0 -639
  913. frago_cli-1.2.0/src/frago/client/src/components/settings/ProfilesPanel.tsx +0 -105
  914. frago_cli-1.2.0/src/frago/client/src/components/settings/SettingsPage.tsx +0 -106
  915. frago_cli-1.2.0/src/frago/client/src/components/settings/TaskIngestionPanel.tsx +0 -496
  916. frago_cli-1.2.0/src/frago/client/src/components/skills/SkillList.tsx +0 -49
  917. frago_cli-1.2.0/src/frago/client/src/components/tasks/content/JsonContent.tsx +0 -76
  918. frago_cli-1.2.0/src/frago/client/src/components/ui/DirectoryAutocomplete.tsx +0 -219
  919. frago_cli-1.2.0/src/frago/client/src/components/workspace/FileBrowser.tsx +0 -329
  920. frago_cli-1.2.0/src/frago/client/src/components/workspace/WorkspacePage.tsx +0 -119
  921. frago_cli-1.2.0/src/frago/client/src/i18n/locales/en.json +0 -723
  922. frago_cli-1.2.0/src/frago/client/src/i18n/locales/zh.json +0 -723
  923. frago_cli-1.2.0/src/frago/client/src/stores/appStore.ts +0 -624
  924. frago_cli-1.2.0/src/frago/client/src/styles/globals.css +0 -3669
  925. frago_cli-1.2.0/src/frago/client/src/styles/timeline.css +0 -409
  926. frago_cli-1.2.0/src/frago/client/src/types/pywebview.d.ts +0 -593
  927. frago_cli-1.2.0/src/frago/client/tailwind.config.js +0 -37
  928. frago_cli-1.2.0/src/frago/client/vite.config.ts +0 -60
  929. frago_cli-1.2.0/src/frago/compat.py +0 -253
  930. frago_cli-1.2.0/src/frago/def_/query_engine.py +0 -375
  931. frago_cli-1.2.0/src/frago/init/__init__.py +0 -101
  932. frago_cli-1.2.0/src/frago/init/checker.py +0 -258
  933. frago_cli-1.2.0/src/frago/init/config_manager.py +0 -316
  934. frago_cli-1.2.0/src/frago/init/configurator.py +0 -867
  935. frago_cli-1.2.0/src/frago/init/hook_binary.py +0 -250
  936. frago_cli-1.2.0/src/frago/init/launcher_detector.py +0 -132
  937. frago_cli-1.2.0/src/frago/init/models.py +0 -301
  938. frago_cli-1.2.0/src/frago/init/profile_manager.py +0 -244
  939. frago_cli-1.2.0/src/frago/init/resources.py +0 -220
  940. frago_cli-1.2.0/src/frago/init/runtime_state.py +0 -108
  941. frago_cli-1.2.0/src/frago/recipes/background.py +0 -39
  942. frago_cli-1.2.0/src/frago/recipes/exceptions.py +0 -77
  943. frago_cli-1.2.0/src/frago/recipes/execution_store.py +0 -298
  944. frago_cli-1.2.0/src/frago/recipes/installer.py +0 -715
  945. frago_cli-1.2.0/src/frago/recipes/metadata.py +0 -248
  946. frago_cli-1.2.0/src/frago/recipes/registry.py +0 -454
  947. frago_cli-1.2.0/src/frago/recipes/runner.py +0 -817
  948. frago_cli-1.2.0/src/frago/resources/book/_guidance.md +0 -15
  949. frago_cli-1.2.0/src/frago/resources/book/_identity.md +0 -9
  950. frago_cli-1.2.0/src/frago/resources/book/_index.yaml +0 -119
  951. frago_cli-1.2.0/src/frago/resources/book/_scenes.yaml +0 -93
  952. frago_cli-1.2.0/src/frago/resources/book/better-server-restart.md +0 -38
  953. frago_cli-1.2.0/src/frago/resources/book/better-structured-data.md +0 -21
  954. frago_cli-1.2.0/src/frago/resources/book/chrome-anti-bot.md +0 -59
  955. frago_cli-1.2.0/src/frago/resources/book/chrome-backend-choice.md +0 -55
  956. frago_cli-1.2.0/src/frago/resources/book/chrome-startup.md +0 -70
  957. frago_cli-1.2.0/src/frago/resources/book/chrome-usage.md +0 -86
  958. frago_cli-1.2.0/src/frago/resources/book/def-knowledge.md +0 -49
  959. frago_cli-1.2.0/src/frago/resources/book/domain-insights.md +0 -71
  960. frago_cli-1.2.0/src/frago/resources/book/frago-principle-extend.md +0 -71
  961. frago_cli-1.2.0/src/frago/resources/book/frago-principle-os.md +0 -32
  962. frago_cli-1.2.0/src/frago/resources/book/frago-principle-trust.md +0 -69
  963. frago_cli-1.2.0/src/frago/resources/book/hook-rules-authoring.md +0 -108
  964. frago_cli-1.2.0/src/frago/resources/book/interactive-recipe.md +0 -126
  965. frago_cli-1.2.0/src/frago/resources/book/must-browser-fetch.md +0 -21
  966. frago_cli-1.2.0/src/frago/resources/book/must-browser-search.md +0 -20
  967. frago_cli-1.2.0/src/frago/resources/book/must-execution-principles.md +0 -63
  968. frago_cli-1.2.0/src/frago/resources/book/must-no-auto-memory.md +0 -55
  969. frago_cli-1.2.0/src/frago/resources/book/must-projects-dir.md +0 -81
  970. frago_cli-1.2.0/src/frago/resources/book/must-tool-priority.md +0 -37
  971. frago_cli-1.2.0/src/frago/resources/book/recipe-authoring.md +0 -339
  972. frago_cli-1.2.0/src/frago/resources/book/recipe-creation.md +0 -85
  973. frago_cli-1.2.0/src/frago/resources/book/recipe-execution.md +0 -22
  974. frago_cli-1.2.0/src/frago/resources/book/recipe-fields.md +0 -147
  975. frago_cli-1.2.0/src/frago/resources/book/recipe-spec-writing.md +0 -88
  976. frago_cli-1.2.0/src/frago/resources/book/run-logging.md +0 -82
  977. frago_cli-1.2.0/src/frago/resources/book/scene-content-creation.md +0 -32
  978. frago_cli-1.2.0/src/frago/resources/book/scene-data-extraction.md +0 -37
  979. frago_cli-1.2.0/src/frago/resources/book/scene-form-automation.md +0 -33
  980. frago_cli-1.2.0/src/frago/resources/book/scene-multi-page-workflow.md +0 -34
  981. frago_cli-1.2.0/src/frago/resources/book/scene-recipe-development.md +0 -36
  982. frago_cli-1.2.0/src/frago/resources/book/scene-web-research.md +0 -36
  983. frago_cli-1.2.0/src/frago/resources/frago-home-gitignore.template +0 -124
  984. frago_cli-1.2.0/src/frago/resources/guide/en/02-interface-faq.md +0 -249
  985. frago_cli-1.2.0/src/frago/resources/guide/en/05-troubleshooting.md +0 -377
  986. frago_cli-1.2.0/src/frago/resources/guide/zh-CN/02-interface-faq.md +0 -249
  987. frago_cli-1.2.0/src/frago/resources/guide/zh-CN/05-troubleshooting.md +0 -377
  988. frago_cli-1.2.0/src/frago/resources/hooks/_manifest.json +0 -3
  989. frago_cli-1.2.0/src/frago/run/context.py +0 -216
  990. frago_cli-1.2.0/src/frago/run/exceptions.py +0 -81
  991. frago_cli-1.2.0/src/frago/run/logger.py +0 -196
  992. frago_cli-1.2.0/src/frago/run/models.py +0 -271
  993. frago_cli-1.2.0/src/frago/run/screenshot.py +0 -83
  994. frago_cli-1.2.0/src/frago/server/app.py +0 -558
  995. frago_cli-1.2.0/src/frago/server/assets/assets/index-Bb6IO_Qa.js +0 -498
  996. frago_cli-1.2.0/src/frago/server/assets/index.html +0 -133
  997. frago_cli-1.2.0/src/frago/server/daemon.py +0 -847
  998. frago_cli-1.2.0/src/frago/server/models.py +0 -498
  999. frago_cli-1.2.0/src/frago/server/restarter.py +0 -216
  1000. frago_cli-1.2.0/src/frago/server/routes/__init__.py +0 -50
  1001. frago_cli-1.2.0/src/frago/server/routes/agent.py +0 -196
  1002. frago_cli-1.2.0/src/frago/server/routes/chrome_dashboard.py +0 -88
  1003. frago_cli-1.2.0/src/frago/server/routes/claude_sessions.py +0 -38
  1004. frago_cli-1.2.0/src/frago/server/routes/config.py +0 -93
  1005. frago_cli-1.2.0/src/frago/server/routes/pa.py +0 -84
  1006. frago_cli-1.2.0/src/frago/server/routes/recipes.py +0 -518
  1007. frago_cli-1.2.0/src/frago/server/routes/settings.py +0 -1052
  1008. frago_cli-1.2.0/src/frago/server/routes/system.py +0 -71
  1009. frago_cli-1.2.0/src/frago/server/routes/workspace.py +0 -135
  1010. frago_cli-1.2.0/src/frago/server/runner.py +0 -425
  1011. frago_cli-1.2.0/src/frago/server/services/__init__.py +0 -32
  1012. frago_cli-1.2.0/src/frago/server/services/agent_knowledge.json +0 -68
  1013. frago_cli-1.2.0/src/frago/server/services/agent_service.py +0 -712
  1014. frago_cli-1.2.0/src/frago/server/services/base.py +0 -253
  1015. frago_cli-1.2.0/src/frago/server/services/claude_sessions.py +0 -443
  1016. frago_cli-1.2.0/src/frago/server/services/community_recipe_service.py +0 -409
  1017. frago_cli-1.2.0/src/frago/server/services/config_service.py +0 -175
  1018. frago_cli-1.2.0/src/frago/server/services/executor.py +0 -1042
  1019. frago_cli-1.2.0/src/frago/server/services/file_service.py +0 -330
  1020. frago_cli-1.2.0/src/frago/server/services/github_service.py +0 -616
  1021. frago_cli-1.2.0/src/frago/server/services/guide_service.py +0 -306
  1022. frago_cli-1.2.0/src/frago/server/services/ingestion/scheduler.py +0 -430
  1023. frago_cli-1.2.0/src/frago/server/services/init_service.py +0 -373
  1024. frago_cli-1.2.0/src/frago/server/services/main_config_service.py +0 -73
  1025. frago_cli-1.2.0/src/frago/server/services/pa_context_builder.py +0 -362
  1026. frago_cli-1.2.0/src/frago/server/services/pa_prompts.py +0 -796
  1027. frago_cli-1.2.0/src/frago/server/services/pa_validators.py +0 -260
  1028. frago_cli-1.2.0/src/frago/server/services/primary_agent_service.py +0 -1666
  1029. frago_cli-1.2.0/src/frago/server/services/recipe_service.py +0 -296
  1030. frago_cli-1.2.0/src/frago/server/services/reflection_tick.py +0 -146
  1031. frago_cli-1.2.0/src/frago/server/services/scheduler_service.py +0 -399
  1032. frago_cli-1.2.0/src/frago/server/services/skill_service.py +0 -83
  1033. frago_cli-1.2.0/src/frago/server/services/sync_service.py +0 -155
  1034. frago_cli-1.2.0/src/frago/server/services/system_service.py +0 -142
  1035. frago_cli-1.2.0/src/frago/server/services/tab_cleanup_service.py +0 -143
  1036. frago_cli-1.2.0/src/frago/server/services/task_lifecycle.py +0 -505
  1037. frago_cli-1.2.0/src/frago/server/services/taskboard/__init__.py +0 -75
  1038. frago_cli-1.2.0/src/frago/server/services/taskboard/applier.py +0 -41
  1039. frago_cli-1.2.0/src/frago/server/services/taskboard/board.py +0 -1240
  1040. frago_cli-1.2.0/src/frago/server/services/taskboard/decision_applier.py +0 -207
  1041. frago_cli-1.2.0/src/frago/server/services/taskboard/execution_applier.py +0 -102
  1042. frago_cli-1.2.0/src/frago/server/services/taskboard/fold.py +0 -70
  1043. frago_cli-1.2.0/src/frago/server/services/taskboard/ingestor.py +0 -96
  1044. frago_cli-1.2.0/src/frago/server/services/taskboard/migration.py +0 -292
  1045. frago_cli-1.2.0/src/frago/server/services/taskboard/models.py +0 -264
  1046. frago_cli-1.2.0/src/frago/server/services/taskboard/resume_applier.py +0 -142
  1047. frago_cli-1.2.0/src/frago/server/services/taskboard/thread_classifier.py +0 -281
  1048. frago_cli-1.2.0/src/frago/server/services/taskboard/timeline.py +0 -124
  1049. frago_cli-1.2.0/src/frago/server/services/taskboard/vacuum.py +0 -278
  1050. frago_cli-1.2.0/src/frago/server/services/timeline_service.py +0 -339
  1051. frago_cli-1.2.0/src/frago/server/services/trace.py +0 -567
  1052. frago_cli-1.2.0/src/frago/server/services/update_service.py +0 -271
  1053. frago_cli-1.2.0/src/frago/server/services/version_service.py +0 -255
  1054. frago_cli-1.2.0/src/frago/server/services/viewer_service.py +0 -349
  1055. frago_cli-1.2.0/src/frago/server/state/manager.py +0 -483
  1056. frago_cli-1.2.0/src/frago/server/state/models.py +0 -236
  1057. frago_cli-1.2.0/src/frago/server/websocket.py +0 -207
  1058. frago_cli-1.2.0/src/frago/session/formatter.py +0 -355
  1059. frago_cli-1.2.0/src/frago/session/models.py +0 -231
  1060. frago_cli-1.2.0/src/frago/session/monitor.py +0 -725
  1061. frago_cli-1.2.0/src/frago/session/parser.py +0 -456
  1062. frago_cli-1.2.0/src/frago/session/storage.py +0 -847
  1063. frago_cli-1.2.0/src/frago/session/sync.py +0 -550
  1064. frago_cli-1.2.0/src/frago/session/title_manager.py +0 -397
  1065. frago_cli-1.2.0/src/frago/todo/store.py +0 -296
  1066. frago_cli-1.2.0/src/frago/tools/deployment_agent.py +0 -468
  1067. frago_cli-1.2.0/src/frago/tools/os_message.py +0 -70
  1068. frago_cli-1.2.0/src/frago/tools/workspace.py +0 -840
  1069. frago_cli-1.2.0/src/frago/viewer/__init__.py +0 -12
  1070. frago_cli-1.2.0/src/frago/viewer/chrome.py +0 -148
  1071. frago_cli-1.2.0/src-tauri/Cargo.lock +0 -5215
  1072. frago_cli-1.2.0/src-tauri/Cargo.toml +0 -30
  1073. frago_cli-1.2.0/src-tauri/src/commands.rs +0 -747
  1074. frago_cli-1.2.0/src-tauri/src/main.rs +0 -22
  1075. frago_cli-1.2.0/src-tauri/tauri.conf.json +0 -55
  1076. frago_cli-1.2.0/tests/conftest.py +0 -181
  1077. frago_cli-1.2.0/tests/extension/e2e/e2e_batch1_mock.py +0 -185
  1078. frago_cli-1.2.0/tests/extension/e2e/e2e_batch2_mock.py +0 -92
  1079. frago_cli-1.2.0/tests/extension/e2e/e2e_demo.py +0 -364
  1080. frago_cli-1.2.0/tests/extension/e2e/e2e_mock.py +0 -198
  1081. frago_cli-1.2.0/tests/extension/e2e/upwork_smoke.py +0 -298
  1082. frago_cli-1.2.0/tests/extension/test_anti_bot.py +0 -86
  1083. frago_cli-1.2.0/tests/extension/test_batch1_parity.py +0 -363
  1084. frago_cli-1.2.0/tests/extension/test_batch2_parity.py +0 -250
  1085. frago_cli-1.2.0/tests/extension/test_browser_picker.py +0 -106
  1086. frago_cli-1.2.0/tests/extension/test_lifecycle.py +0 -223
  1087. frago_cli-1.2.0/tests/extension/test_manifest_dir.py +0 -93
  1088. frago_cli-1.2.0/tests/extension/test_mvp_parity.py +0 -173
  1089. frago_cli-1.2.0/tests/extension/test_visual_effects.py +0 -80
  1090. frago_cli-1.2.0/tests/integration/test_phase0_session_domain_e2e.py +0 -96
  1091. frago_cli-1.2.0/tests/integration/test_session_sync_e2e.py +0 -120
  1092. frago_cli-1.2.0/tests/server/test_pa_per_conversation_routing.py +0 -389
  1093. frago_cli-1.2.0/tests/server/test_reflection_tick.py +0 -62
  1094. frago_cli-1.2.0/tests/server/test_repeat_response_production_path.py +0 -228
  1095. frago_cli-1.2.0/tests/server/test_resume_hot_injection.py +0 -150
  1096. frago_cli-1.2.0/tests/server/test_task_lifecycle_recovery.py +0 -156
  1097. frago_cli-1.2.0/tests/server/test_taskboard_applier_invariants.py +0 -162
  1098. frago_cli-1.2.0/tests/server/test_taskboard_conversation_thread.py +0 -272
  1099. frago_cli-1.2.0/tests/server/test_taskboard_decision_applier.py +0 -448
  1100. frago_cli-1.2.0/tests/server/test_taskboard_executor_api.py +0 -269
  1101. frago_cli-1.2.0/tests/server/test_taskboard_fold.py +0 -209
  1102. frago_cli-1.2.0/tests/server/test_taskboard_migration.py +0 -137
  1103. frago_cli-1.2.0/tests/server/test_taskboard_models.py +0 -104
  1104. frago_cli-1.2.0/tests/server/test_taskboard_repeat_response_regression.py +0 -182
  1105. frago_cli-1.2.0/tests/server/test_taskboard_resume_applier.py +0 -257
  1106. frago_cli-1.2.0/tests/server/test_taskboard_session_binding.py +0 -199
  1107. frago_cli-1.2.0/tests/server/test_taskboard_vacuum_fold.py +0 -427
  1108. frago_cli-1.2.0/tests/server/test_timeline_query_perf.py +0 -146
  1109. frago_cli-1.2.0/tests/unit/cli/test_run_commands_insights.py +0 -249
  1110. frago_cli-1.2.0/tests/unit/cli/test_todo_commands.py +0 -126
  1111. frago_cli-1.2.0/tests/unit/init/test_launcher_detector.py +0 -173
  1112. frago_cli-1.2.0/tests/unit/init/test_runtime_state.py +0 -119
  1113. frago_cli-1.2.0/tests/unit/recipes/test_migrate_runs_to_domains.py +0 -282
  1114. frago_cli-1.2.0/tests/unit/run/test_insight_domain_funnel.py +0 -44
  1115. frago_cli-1.2.0/tests/unit/server/services/test_agent_service.py +0 -323
  1116. frago_cli-1.2.0/tests/unit/server/services/test_base.py +0 -172
  1117. frago_cli-1.2.0/tests/unit/server/services/test_community_recipe_service.py +0 -264
  1118. frago_cli-1.2.0/tests/unit/server/services/test_config_service.py +0 -260
  1119. frago_cli-1.2.0/tests/unit/server/services/test_executor.py +0 -459
  1120. frago_cli-1.2.0/tests/unit/server/services/test_executor_resume.py +0 -147
  1121. frago_cli-1.2.0/tests/unit/server/services/test_file_service.py +0 -427
  1122. frago_cli-1.2.0/tests/unit/server/services/test_github_service.py +0 -213
  1123. frago_cli-1.2.0/tests/unit/server/services/test_init_service.py +0 -308
  1124. frago_cli-1.2.0/tests/unit/server/services/test_pa_validators.py +0 -233
  1125. frago_cli-1.2.0/tests/unit/server/services/test_primary_agent_service.py +0 -246
  1126. frago_cli-1.2.0/tests/unit/server/services/test_recipe_service.py +0 -257
  1127. frago_cli-1.2.0/tests/unit/server/services/test_skill_service.py +0 -116
  1128. frago_cli-1.2.0/tests/unit/server/services/test_system_service.py +0 -185
  1129. frago_cli-1.2.0/tests/unit/server/services/test_timeline_service.py +0 -147
  1130. frago_cli-1.2.0/tests/unit/server/services/test_trace_schema.py +0 -266
  1131. frago_cli-1.2.0/tests/unit/server/services/test_viewer_service.py +0 -307
  1132. frago_cli-1.2.0/tests/unit/session/test_models.py +0 -213
  1133. frago_cli-1.2.0/tests/unit/session/test_parser.py +0 -654
  1134. frago_cli-1.2.0/tests/unit/session/test_storage.py +0 -240
  1135. frago_cli-1.2.0/tests/unit/session/test_sync.py +0 -156
  1136. frago_cli-1.2.0/tests/unit/test_deployment_agent.py +0 -469
  1137. frago_cli-1.2.0/tests/unit/test_profile_manager.py +0 -309
  1138. frago_cli-1.2.0/tests/unit/test_workspace.py +0 -794
  1139. frago_cli-1.2.0/uv.lock +0 -1125
  1140. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/.gitattributes +0 -0
  1141. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/.github/FUNDING.yml +0 -0
  1142. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/.github/workflows/build-client.yml +0 -0
  1143. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/CODE_OF_CONDUCT.md +0 -0
  1144. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/CONTRIBUTING.md +0 -0
  1145. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/DESIGN_PRINCIPLE.md +0 -0
  1146. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/LICENSE +0 -0
  1147. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/dist/.gitignore +0 -0
  1148. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/docs/images/concepts-diagram-en_20251209_132837_0.jpg +0 -0
  1149. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/docs/images/concepts-diagram-zh_20251209_133008_0.jpg +0 -0
  1150. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/docs/images/frago-env-priority.jpg +0 -0
  1151. {frago_cli-1.2.0/src-tauri/bootstrap โ†’ frago_cli-1.3.0/docs/images}/logo.png +0 -0
  1152. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/docs/knowledge/app.js +0 -0
  1153. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/docs/knowledge/styles.css +0 -0
  1154. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/htmlcov/.gitignore +0 -0
  1155. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/install.ps1 +0 -0
  1156. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/install.sh +0 -0
  1157. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/local_install.ps1 +0 -0
  1158. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/local_install.sh +0 -0
  1159. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/scripts/configure-claude-endpoints.sh +0 -0
  1160. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/scripts/generate_extension_id.py +0 -0
  1161. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/scripts/install/test-docker.sh +0 -0
  1162. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/scripts/install/test-reset.ps1 +0 -0
  1163. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/scripts/install/test-reset.sh +0 -0
  1164. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/_resources/extension_bundle/keys/.gitignore +0 -0
  1165. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/_resources/extension_bundle/keys/README.md +0 -0
  1166. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/_resources/extension_bundle/keys/public.der +0 -0
  1167. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/_resources/extension_bundle/popup/index.html +0 -0
  1168. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/_resources/extension_bundle/popup/popup.js +0 -0
  1169. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/autostart/__init__.py +0 -0
  1170. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/autostart/base.py +0 -0
  1171. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/autostart/macos.py +0 -0
  1172. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/autostart/windows.py +0 -0
  1173. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/bin/darwin-arm64/.gitkeep +0 -0
  1174. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/bin/darwin-x86_64/.gitkeep +0 -0
  1175. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/bin/windows-x86_64/.gitkeep +0 -0
  1176. {frago_cli-1.2.0/src/frago/chrome โ†’ frago_cli-1.3.0/src/frago/browser}/cdp/stealth.js +0 -0
  1177. {frago_cli-1.2.0/src/frago/tools โ†’ frago_cli-1.3.0/src/frago/cli}/git_utils.py +0 -0
  1178. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cli/serve_command.py +0 -0
  1179. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cli/skill_commands.py +0 -0
  1180. {frago_cli-1.2.0/src/frago/client/node_modules/.pnpm/node_modules/resolve/test/resolver/symlinked/_/symlink_target โ†’ frago_cli-1.3.0/src/frago/client/node_modules/.ignored/tailwindcss/types/generated}/.gitkeep +0 -0
  1181. {frago_cli-1.2.0/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/types/generated โ†’ frago_cli-1.3.0/src/frago/client/node_modules/.pnpm/jsdom@29.1.1/node_modules/undici/lib/llhttp}/.gitkeep +0 -0
  1182. /frago_cli-1.2.0/src/frago/todo/__init__.py โ†’ /frago_cli-1.3.0/src/frago/client/node_modules/.pnpm/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep +0 -0
  1183. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/stubs/.gitignore +0 -0
  1184. /frago_cli-1.2.0/src/frago/tools/__init__.py โ†’ /frago_cli-1.3.0/src/frago/client/node_modules/.pnpm/tailwindcss@3.4.18/node_modules/tailwindcss/types/generated/.gitkeep +0 -0
  1185. /frago_cli-1.2.0/tests/extension/__init__.py โ†’ /frago_cli-1.3.0/src/frago/client/node_modules/resolve/test/resolver/symlinked/_/symlink_target/.gitkeep +0 -0
  1186. /frago_cli-1.2.0/tests/fixtures/sessions/empty_session.jsonl โ†’ /frago_cli-1.3.0/src/frago/client/node_modules/undici/lib/llhttp/.gitkeep +0 -0
  1187. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/postcss.config.js +0 -0
  1188. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/public/icons/logo-128.png +0 -0
  1189. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/public/icons/logo-32.png +0 -0
  1190. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/public/icons/logo-64.png +0 -0
  1191. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/public/icons/logo.png +0 -0
  1192. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/guide/GuidePage.tsx +0 -0
  1193. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/guide/index.ts +0 -0
  1194. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/init/AuthStep.tsx +0 -0
  1195. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/init/CompleteStep.tsx +0 -0
  1196. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/init/DependencyStep.tsx +0 -0
  1197. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/init/ResourceStep.tsx +0 -0
  1198. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/init/index.ts +0 -0
  1199. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/layout/PixelLogo.tsx +0 -0
  1200. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/layout/StatusBar.tsx +0 -0
  1201. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/layout/VersionBanner.tsx +0 -0
  1202. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/newTask/NewTaskControls.tsx +0 -0
  1203. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/newTask/NewTaskInput.tsx +0 -0
  1204. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/recipes/CommunityRecipeCard.tsx +0 -0
  1205. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/recipes/RecipeAppCard.tsx +0 -0
  1206. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/recipes/RecipeAppsGrid.tsx +0 -0
  1207. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/recipes/RecipeSecretsModal.tsx +0 -0
  1208. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/shared/MessageCard.tsx +0 -0
  1209. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/shared/MessageList.tsx +0 -0
  1210. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/shared/index.ts +0 -0
  1211. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/BashContent.tsx +0 -0
  1212. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/CollapsibleContent.tsx +0 -0
  1213. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/FileContent.tsx +0 -0
  1214. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/PairedToolStep.tsx +0 -0
  1215. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/PreformattedContent.tsx +0 -0
  1216. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/StepContent.tsx +0 -0
  1217. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/tasks/content/index.ts +0 -0
  1218. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/Accordion.tsx +0 -0
  1219. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/ConnectionStatus.tsx +0 -0
  1220. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/EmptyState.tsx +0 -0
  1221. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/LoadingSpinner.tsx +0 -0
  1222. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/MarkdownContent.tsx +0 -0
  1223. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/Modal.tsx +0 -0
  1224. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/StarButton.tsx +0 -0
  1225. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/ui/Toast.tsx +0 -0
  1226. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/update/UpdateModal.tsx +0 -0
  1227. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/workspace/ProjectList.tsx +0 -0
  1228. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/components/workspace/index.ts +0 -0
  1229. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/hooks/useConfig.ts +0 -0
  1230. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/hooks/useDataSync.ts +0 -0
  1231. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/hooks/usePlatform.ts +0 -0
  1232. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/hooks/usePolling.ts +0 -0
  1233. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/hooks/useWebSocket.ts +0 -0
  1234. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/i18n/index.ts +0 -0
  1235. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/main.tsx +0 -0
  1236. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/types/console.ts +0 -0
  1237. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/types/message.ts +0 -0
  1238. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/utils/recentDirectories.ts +0 -0
  1239. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/utils/time.ts +0 -0
  1240. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/utils/toolDisplayConfig.ts +0 -0
  1241. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/src/vite-env.d.ts +0 -0
  1242. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client/tsconfig.json +0 -0
  1243. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/client_manager.py +0 -0
  1244. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/__init__.py +0 -0
  1245. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/auth.py +0 -0
  1246. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/client.py +0 -0
  1247. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/config.py +0 -0
  1248. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/installer.py +0 -0
  1249. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/cloud/market.py +0 -0
  1250. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/def_/__init__.py +0 -0
  1251. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/def_/registry.py +0 -0
  1252. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/def_/schema_validator.py +0 -0
  1253. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/channel_wizard.py +0 -0
  1254. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/claude_installer.py +0 -0
  1255. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/exceptions.py +0 -0
  1256. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/formatter.py +0 -0
  1257. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/installer.py +0 -0
  1258. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/recovery.py +0 -0
  1259. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/init/ui.py +0 -0
  1260. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/__init__.py +0 -0
  1261. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/env_loader.py +0 -0
  1262. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/execution.py +0 -0
  1263. {frago_cli-1.2.0/src/frago/server/services โ†’ frago_cli-1.3.0/src/frago/recipes}/github_rate_limit.py +0 -0
  1264. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/lookup.py +0 -0
  1265. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/output_handler.py +0 -0
  1266. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/recipes/usage_tracker.py +0 -0
  1267. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/__init__.py +0 -0
  1268. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/book/better-git-checkout.md +0 -0
  1269. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/book/frago-principle-rigor.md +0 -0
  1270. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/book/frago-principle-supreme.md +0 -0
  1271. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/__init__.py +0 -0
  1272. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/en/01-getting-started.md +0 -0
  1273. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/en/03-configuration.md +0 -0
  1274. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/en/04-usage-tips.md +0 -0
  1275. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/meta.json +0 -0
  1276. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/zh-CN/01-getting-started.md +0 -0
  1277. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/zh-CN/03-configuration.md +0 -0
  1278. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/guide/zh-CN/04-usage-tips.md +0 -0
  1279. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/highlight.min.js +0 -0
  1280. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/atom-one-dark.min.css +0 -0
  1281. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/atom-one-light.min.css +0 -0
  1282. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/github-dark.min.css +0 -0
  1283. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/github.min.css +0 -0
  1284. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/monokai.min.css +0 -0
  1285. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/highlight/styles/vs2015.min.css +0 -0
  1286. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/mermaid/mermaid.min.js +0 -0
  1287. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/pdfjs/pdf.min.mjs +0 -0
  1288. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/pdfjs/pdf.worker.min.mjs +0 -0
  1289. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/three/addons/controls/OrbitControls.js +0 -0
  1290. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/three/addons/loaders/GLTFLoader.js +0 -0
  1291. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/three/addons/utils/BufferGeometryUtils.js +0 -0
  1292. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/resources/viewer/three/three.module.min.js +0 -0
  1293. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/__init__.py +0 -0
  1294. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/constants.py +0 -0
  1295. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/discovery.py +0 -0
  1296. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/domain_dict.py +0 -0
  1297. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/insights.py +0 -0
  1298. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/manager.py +0 -0
  1299. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/run/utils.py +0 -0
  1300. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/__init__.py +0 -0
  1301. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/assets/icons/logo-128.png +0 -0
  1302. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/assets/icons/logo-32.png +0 -0
  1303. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/assets/icons/logo-64.png +0 -0
  1304. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/assets/icons/logo.png +0 -0
  1305. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/files.py +0 -0
  1306. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/github_star.py +0 -0
  1307. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/guide.py +0 -0
  1308. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/init.py +0 -0
  1309. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/skills.py +0 -0
  1310. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/routes/viewer.py +0 -0
  1311. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/services/env_service.py +0 -0
  1312. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/services/ingestion/__init__.py +0 -0
  1313. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/services/official_resource_sync_service.py +0 -0
  1314. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/services/recipe_secrets_service.py +0 -0
  1315. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/services/resume_inbox.py +0 -0
  1316. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/state/__init__.py +0 -0
  1317. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/server/utils.py +0 -0
  1318. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/session/__init__.py +0 -0
  1319. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/skills/__init__.py +0 -0
  1320. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/skills/registry.py +0 -0
  1321. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/telemetry/__init__.py +0 -0
  1322. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/telemetry/client.py +0 -0
  1323. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/telemetry/config.py +0 -0
  1324. {frago_cli-1.2.0/tests/unit/init โ†’ frago_cli-1.3.0/src/frago/todo}/__init__.py +0 -0
  1325. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/viewer/modes/__init__.py +0 -0
  1326. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/viewer/modes/document.py +0 -0
  1327. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/viewer/modes/media.py +0 -0
  1328. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src/frago/viewer/modes/present.py +0 -0
  1329. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/bootstrap/index.html +0 -0
  1330. /frago_cli-1.2.0/src-tauri/icons/256x256.png โ†’ /frago_cli-1.3.0/src-tauri/bootstrap/logo.png +0 -0
  1331. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/build.rs +0 -0
  1332. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/capabilities/default.json +0 -0
  1333. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/128x128.png +0 -0
  1334. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/128x128@2x.png +0 -0
  1335. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/32x32.png +0 -0
  1336. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/48x48.png +0 -0
  1337. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/64x64.png +0 -0
  1338. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square107x107Logo.png +0 -0
  1339. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square142x142Logo.png +0 -0
  1340. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square150x150Logo.png +0 -0
  1341. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square284x284Logo.png +0 -0
  1342. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square30x30Logo.png +0 -0
  1343. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square310x310Logo.png +0 -0
  1344. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square44x44Logo.png +0 -0
  1345. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square71x71Logo.png +0 -0
  1346. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/Square89x89Logo.png +0 -0
  1347. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/StoreLogo.png +0 -0
  1348. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-anydpi-v26/ic_launcher.xml +0 -0
  1349. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-hdpi/ic_launcher.png +0 -0
  1350. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_foreground.png +0 -0
  1351. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-hdpi/ic_launcher_round.png +0 -0
  1352. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-mdpi/ic_launcher.png +0 -0
  1353. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_foreground.png +0 -0
  1354. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-mdpi/ic_launcher_round.png +0 -0
  1355. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher.png +0 -0
  1356. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_foreground.png +0 -0
  1357. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xhdpi/ic_launcher_round.png +0 -0
  1358. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher.png +0 -0
  1359. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_foreground.png +0 -0
  1360. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxhdpi/ic_launcher_round.png +0 -0
  1361. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher.png +0 -0
  1362. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_foreground.png +0 -0
  1363. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
  1364. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/android/values/ic_launcher_background.xml +0 -0
  1365. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/icon.icns +0 -0
  1366. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/icon.ico +0 -0
  1367. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/icon.png +0 -0
  1368. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-20x20@1x.png +0 -0
  1369. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-20x20@2x-1.png +0 -0
  1370. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-20x20@2x.png +0 -0
  1371. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-20x20@3x.png +0 -0
  1372. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-29x29@1x.png +0 -0
  1373. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-29x29@2x-1.png +0 -0
  1374. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-29x29@2x.png +0 -0
  1375. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-29x29@3x.png +0 -0
  1376. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-40x40@1x.png +0 -0
  1377. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-40x40@2x-1.png +0 -0
  1378. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-40x40@2x.png +0 -0
  1379. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-40x40@3x.png +0 -0
  1380. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-512@2x.png +0 -0
  1381. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-60x60@2x.png +0 -0
  1382. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-60x60@3x.png +0 -0
  1383. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-76x76@1x.png +0 -0
  1384. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-76x76@2x.png +0 -0
  1385. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/icons/ios/AppIcon-83.5x83.5@2x.png +0 -0
  1386. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/package.json +0 -0
  1387. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/src-tauri/pnpm-lock.yaml +0 -0
  1388. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/__init__.py +0 -0
  1389. {frago_cli-1.2.0/tests/unit/run โ†’ frago_cli-1.3.0/tests/agent_driver}/__init__.py +0 -0
  1390. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/arch/test_import_contracts.py +0 -0
  1391. {frago_cli-1.2.0/tests/unit/server/services/ingestion โ†’ frago_cli-1.3.0/tests/cli}/__init__.py +0 -0
  1392. {frago_cli-1.2.0/tests/unit/todo โ†’ frago_cli-1.3.0/tests/extension}/__init__.py +0 -0
  1393. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/__init__.py +0 -0
  1394. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/legacy_config_with_sync_repo_url.json +0 -0
  1395. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/recipes/__init__.py +0 -0
  1396. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/sessions/__init__.py +0 -0
  1397. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/sessions/valid_session.jsonl +0 -0
  1398. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/fixtures/skills/__init__.py +0 -0
  1399. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/integration/__init__.py +0 -0
  1400. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/integration/conftest.py +0 -0
  1401. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/integration/test_monitor_session_isolation.py +0 -0
  1402. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/integration/test_recipe_registry_e2e.py +0 -0
  1403. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/server/test_agent_session_prefix_provider.py +0 -0
  1404. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/server/test_task_lifecycle_reply_msg_id.py +0 -0
  1405. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/__init__.py +0 -0
  1406. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/cli/test_reply_command.py +0 -0
  1407. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/conftest.py +0 -0
  1408. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/__init__.py +0 -0
  1409. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_background.py +0 -0
  1410. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_execution.py +0 -0
  1411. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_execution_store.py +0 -0
  1412. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_registry.py +0 -0
  1413. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_runner_async.py +0 -0
  1414. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/recipes/test_runner_cancel.py +0 -0
  1415. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/run/test_domain_dict.py +0 -0
  1416. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/run/test_domain_layout.py +0 -0
  1417. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/run/test_insights.py +0 -0
  1418. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/run/test_session_domain_persistence.py +0 -0
  1419. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/__init__.py +0 -0
  1420. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/services/__init__.py +0 -0
  1421. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/services/test_official_resource_sync_service.py +0 -0
  1422. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/services/test_sync_service.py +0 -0
  1423. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/state/__init__.py +0 -0
  1424. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/state/test_manager.py +0 -0
  1425. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/server/test_pa_domain_bootstrap.py +0 -0
  1426. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/session/__init__.py +0 -0
  1427. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/skills/__init__.py +0 -0
  1428. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/skills/test_registry.py +0 -0
  1429. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/test_compat.py +0 -0
  1430. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/tests/unit/test_recipe_usage_tracker.py +0 -0
  1431. {frago_cli-1.2.0 โ†’ frago_cli-1.3.0}/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.0
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>