machinaos 0.0.76 → 0.0.78

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 (393) hide show
  1. package/README.md +143 -107
  2. package/client/dist/assets/ActionBar-Du2MSFSz.js +1 -0
  3. package/client/dist/assets/ApiKeyInput-k2LBmBjb.js +1 -0
  4. package/client/dist/assets/ApiKeyPanel-C_bV9U0X.js +1 -0
  5. package/client/dist/assets/ApiUsageSection-CmVfwZzL.js +1 -0
  6. package/client/dist/assets/EmailPanel-CeKIMGu-.js +1 -0
  7. package/client/dist/assets/OAuthPanel-KA3t3Q2K.js +1 -0
  8. package/client/dist/assets/QrPairingPanel-NgNpJNuk.js +1 -0
  9. package/client/dist/assets/RateLimitSection-Du5YNVIA.js +1 -0
  10. package/client/dist/assets/StatusCard-DNLyayXc.js +1 -0
  11. package/client/dist/assets/index-DQ0nwhec.js +257 -0
  12. package/client/dist/assets/index-DxmbVskS.css +1 -0
  13. package/client/dist/assets/vendor-flow-CZmBvHRo.js +1 -0
  14. package/client/dist/assets/vendor-icons-CVrPjN2Q.js +22 -0
  15. package/client/dist/assets/vendor-markdown-CRou3yQ5.js +62 -0
  16. package/client/dist/assets/vendor-misc-C4VxKHs5.js +1 -0
  17. package/client/dist/assets/vendor-query-SzWcOU0G.js +1 -0
  18. package/client/dist/assets/vendor-radix-Dnos29jG.js +56 -0
  19. package/client/dist/assets/vendor-react-DvWIbVx0.js +1 -0
  20. package/client/dist/index.html +37 -3
  21. package/client/index.html +28 -1
  22. package/client/package.json +44 -40
  23. package/client/src/App.tsx +2 -0
  24. package/client/src/Dashboard.tsx +157 -45
  25. package/client/src/ParameterPanel.tsx +3 -5
  26. package/client/src/adapters/nodeSpecToDescription.ts +1 -0
  27. package/client/src/assets/icons/NodeIcon.tsx +32 -0
  28. package/client/src/assets/icons/index.ts +4 -0
  29. package/client/src/assets/icons/stripe.svg +1 -0
  30. package/client/src/assets/icons/themedGlyphs.ts +404 -0
  31. package/client/src/components/AIAgentNode.tsx +77 -53
  32. package/client/src/components/GenericNode.tsx +34 -52
  33. package/client/src/components/OutputPanel.tsx +64 -147
  34. package/client/src/components/ParameterRenderer.tsx +5 -3
  35. package/client/src/components/SkillEditorModal.tsx +9 -18
  36. package/client/src/components/SquareNode.tsx +97 -115
  37. package/client/src/components/StartNode.tsx +32 -42
  38. package/client/src/components/SvgFilterDefs.tsx +54 -0
  39. package/client/src/components/TeamMonitorNode.tsx +12 -14
  40. package/client/src/components/ToolkitNode.tsx +35 -60
  41. package/client/src/components/TriggerNode.tsx +43 -77
  42. package/client/src/components/__tests__/CredentialsModal.test.tsx +49 -45
  43. package/client/src/components/credentials/CredentialsModal.tsx +98 -30
  44. package/client/src/components/credentials/CredentialsPalette.tsx +73 -5
  45. package/client/src/components/credentials/catalogueAdapter.ts +17 -1
  46. package/client/src/components/credentials/panels/ApiKeyPanel.tsx +102 -37
  47. package/client/src/components/credentials/panels/EmailPanel.tsx +7 -19
  48. package/client/src/components/credentials/panels/OAuthPanel.tsx +5 -1
  49. package/client/src/components/credentials/panels/QrPairingPanel.tsx +1 -3
  50. package/client/src/components/credentials/primitives/ActionBar.tsx +7 -11
  51. package/client/src/components/credentials/primitives/OAuthConnect.tsx +19 -28
  52. package/client/src/components/credentials/sections/ProviderDefaultsSection.tsx +24 -3
  53. package/client/src/components/credentials/types.ts +12 -2
  54. package/client/src/components/credentials/useCredentialPanel.ts +43 -19
  55. package/client/src/components/icons/AIProviderIcons.tsx +16 -0
  56. package/client/src/components/onboarding/OnboardingWizard.tsx +23 -63
  57. package/client/src/components/onboarding/nodeRoleClasses.ts +23 -0
  58. package/client/src/components/onboarding/steps/CanvasStep.tsx +15 -21
  59. package/client/src/components/onboarding/steps/ConceptsStep.tsx +2 -11
  60. package/client/src/components/onboarding/steps/GetStartedStep.tsx +2 -10
  61. package/client/src/components/parameterPanel/InputSection.tsx +9 -7
  62. package/client/src/components/parameterPanel/MasterSkillEditor.tsx +84 -198
  63. package/client/src/components/parameterPanel/MiddleSection.tsx +57 -80
  64. package/client/src/components/parameterPanel/ToolSchemaEditor.tsx +31 -25
  65. package/client/src/components/parameterPanel/__tests__/InputSection.test.tsx +7 -2
  66. package/client/src/components/ui/AIResultModal.tsx +1 -1
  67. package/client/src/components/ui/CollapsibleSection.tsx +9 -5
  68. package/client/src/components/ui/CommandPalette.tsx +147 -0
  69. package/client/src/components/ui/CommandPaletteHost.tsx +189 -0
  70. package/client/src/components/ui/ComponentItem.tsx +13 -7
  71. package/client/src/components/ui/ComponentPalette.tsx +24 -13
  72. package/client/src/components/ui/ConsolePanel.tsx +19 -11
  73. package/client/src/components/ui/DropCap.tsx +28 -0
  74. package/client/src/components/ui/EditableNodeLabel.tsx +10 -2
  75. package/client/src/components/ui/InputNodesPanel.tsx +1 -1
  76. package/client/src/components/ui/Modal.tsx +38 -6
  77. package/client/src/components/ui/OutputDisplayPanel.tsx +1 -1
  78. package/client/src/components/ui/SettingsPanel.tsx +42 -13
  79. package/client/src/components/ui/StatusBar.tsx +108 -0
  80. package/client/src/components/ui/ThemeSwitcher.tsx +109 -0
  81. package/client/src/components/ui/TopToolbar.tsx +42 -25
  82. package/client/src/components/ui/WorkflowSidebar.tsx +32 -16
  83. package/client/src/components/ui/action-button.tsx +40 -15
  84. package/client/src/components/ui/button.tsx +24 -1
  85. package/client/src/components/ui/dropdown-menu.tsx +24 -2
  86. package/client/src/components/ui/input.tsx +19 -2
  87. package/client/src/components/ui/select.tsx +15 -0
  88. package/client/src/components/ui/textarea.tsx +15 -2
  89. package/client/src/contexts/AuthContext.tsx +148 -109
  90. package/client/src/contexts/ThemeContext.tsx +93 -17
  91. package/client/src/contexts/WebSocketContext.tsx +373 -206
  92. package/client/src/contexts/__tests__/AuthContext.test.tsx +221 -0
  93. package/client/src/hooks/__tests__/useDragVariable.test.ts +7 -1
  94. package/client/src/hooks/__tests__/useWorkflowOpsListener.test.ts +142 -0
  95. package/client/src/hooks/useAppTheme.ts +209 -7
  96. package/client/src/hooks/useAutoSkillEdges.ts +7 -2
  97. package/client/src/hooks/useCatalogueQuery.ts +67 -1
  98. package/client/src/hooks/useDragVariable.ts +1 -1
  99. package/client/src/hooks/useNodeAllowlist.ts +115 -8
  100. package/client/src/hooks/useOnboarding.ts +20 -8
  101. package/client/src/hooks/useParameterPanel.ts +2 -1
  102. package/client/src/hooks/useReactFlowNodes.ts +2 -1
  103. package/client/src/hooks/useSound.ts +185 -0
  104. package/client/src/hooks/useWorkflowManagement.ts +6 -8
  105. package/client/src/hooks/useWorkflowOpsListener.ts +90 -0
  106. package/client/src/index.css +65 -3
  107. package/client/src/lib/__tests__/connectionConfig.test.ts +91 -0
  108. package/client/src/lib/aiModelProviders.ts +8 -0
  109. package/client/src/lib/connectionConfig.ts +107 -0
  110. package/client/src/lib/queryPersist.ts +13 -5
  111. package/client/src/lib/sound.ts +393 -0
  112. package/client/src/main.tsx +20 -0
  113. package/client/src/store/useAppStore.ts +26 -0
  114. package/client/src/styles/canvasAnimations.ts +37 -36
  115. package/client/src/styles/theme.ts +36 -20
  116. package/client/src/test/setup.ts +1 -0
  117. package/client/src/themes/atomic.css +253 -0
  118. package/client/src/themes/base.css +373 -0
  119. package/client/src/themes/cyber.css +890 -0
  120. package/client/src/themes/dark.css +70 -0
  121. package/client/src/themes/edo.css +246 -0
  122. package/client/src/themes/greek.css +293 -0
  123. package/client/src/themes/light.css +78 -0
  124. package/client/src/themes/plague.css +253 -0
  125. package/client/src/themes/renaissance.css +727 -0
  126. package/client/src/themes/rot.css +249 -0
  127. package/client/src/themes/steampunk.css +272 -0
  128. package/client/src/themes/surveillance.css +289 -0
  129. package/client/src/themes/wasteland.css +250 -0
  130. package/client/src/types/INodeProperties.ts +5 -0
  131. package/client/src/types/NodeTypes.ts +11 -1
  132. package/client/src/types/__tests__/cloudEvents.test.ts +99 -0
  133. package/client/src/types/cloudEvents.ts +78 -0
  134. package/client/src/vite-env.d.ts +7 -0
  135. package/client/tsconfig.json +1 -1
  136. package/client/vite.config.js +62 -2
  137. package/install.ps1 +1 -1
  138. package/install.sh +1 -1
  139. package/machina/commands/build.py +51 -7
  140. package/machina/pyproject.toml +4 -0
  141. package/machina/supervisor.py +12 -2
  142. package/machina/tree.py +71 -21
  143. package/package.json +4 -4
  144. package/scripts/install.js +16 -1
  145. package/server/config/ai_cli_providers.json +54 -0
  146. package/server/config/credential_providers.json +109 -2
  147. package/server/config/llm_defaults.json +24 -0
  148. package/server/config/model_registry.json +338 -499
  149. package/server/config/node_allowlist.json +16 -1
  150. package/server/config/pricing.json +8 -0
  151. package/server/constants.py +38 -15
  152. package/server/core/container.py +2 -2
  153. package/server/core/credentials_database.py +35 -2
  154. package/server/core/logging.py +4 -3
  155. package/server/main.py +99 -13
  156. package/server/models/node_metadata.py +1 -0
  157. package/server/nodejs/package.json +8 -6
  158. package/server/nodejs/src/index.ts +22 -5
  159. package/server/nodes/README.md +31 -4
  160. package/server/nodes/agent/_inline.py +2 -0
  161. package/server/nodes/agent/_specialized.py +6 -3
  162. package/server/nodes/agent/ai_agent.py +13 -3
  163. package/server/nodes/agent/chat_agent.py +6 -3
  164. package/server/nodes/agent/claude_code_agent.py +287 -75
  165. package/server/nodes/agent/codex_agent.py +239 -0
  166. package/server/nodes/agent/deep_agent.py +3 -3
  167. package/server/nodes/agent/rlm_agent.py +3 -3
  168. package/server/nodes/android/__init__.py +31 -1
  169. package/server/nodes/android/_base.py +9 -5
  170. package/server/{services/android_service.py → nodes/android/_dispatcher.py} +2 -2
  171. package/server/nodes/android/_handlers.py +154 -0
  172. package/server/nodes/android/_option_loaders.py +44 -0
  173. package/server/nodes/android/_refresh.py +127 -0
  174. package/server/{services/android → nodes/android/_relay}/client.py +4 -4
  175. package/server/{routers/android.py → nodes/android/_router.py} +27 -8
  176. package/server/nodes/browser/browser.py +2 -2
  177. package/server/nodes/code/_base.py +6 -2
  178. package/server/nodes/code/_claude_code.py +134 -0
  179. package/server/nodes/document/embedding_generator.py +3 -3
  180. package/server/nodes/document/http_scraper.py +3 -3
  181. package/server/nodes/document/vector_store.py +5 -5
  182. package/server/nodes/email/__init__.py +11 -1
  183. package/server/nodes/email/_filters.py +21 -0
  184. package/server/{services/himalaya_service.py → nodes/email/_himalaya.py} +6 -10
  185. package/server/{services/email_service.py → nodes/email/_service.py} +9 -13
  186. package/server/nodes/email/email_read.py +1 -1
  187. package/server/nodes/email/email_receive.py +54 -5
  188. package/server/nodes/email/email_send.py +1 -1
  189. package/server/nodes/filesystem/shell.py +24 -1
  190. package/server/nodes/google/__init__.py +55 -1
  191. package/server/{services/handlers/google_auth.py → nodes/google/_auth_helper.py} +8 -5
  192. package/server/nodes/google/_base.py +2 -2
  193. package/server/nodes/google/_credentials.py +5 -5
  194. package/server/nodes/google/_filters.py +25 -0
  195. package/server/nodes/google/_handlers.py +57 -0
  196. package/server/{services/google_oauth.py → nodes/google/_oauth.py} +195 -162
  197. package/server/nodes/google/_option_loaders.py +107 -0
  198. package/server/nodes/google/_refresh.py +66 -0
  199. package/server/nodes/google/_router.py +131 -0
  200. package/server/nodes/google/gmail_receive.py +41 -4
  201. package/server/nodes/groups.py +1 -0
  202. package/server/nodes/location/_credentials.py +45 -1
  203. package/server/{services/maps.py → nodes/location/_service.py} +18 -3
  204. package/server/nodes/location/gmaps_create.py +4 -4
  205. package/server/nodes/location/gmaps_locations.py +4 -4
  206. package/server/nodes/location/gmaps_nearby_places.py +4 -4
  207. package/server/nodes/model/_base.py +8 -3
  208. package/server/nodes/model/_credentials.py +96 -8
  209. package/server/nodes/model/_local_validator.py +345 -0
  210. package/server/nodes/model/lmstudio_chat_model.py +23 -0
  211. package/server/nodes/model/ollama_chat_model.py +25 -0
  212. package/server/nodes/proxy/_usage.py +2 -2
  213. package/server/nodes/proxy/proxy_config.py +14 -14
  214. package/server/nodes/proxy/proxy_request.py +4 -4
  215. package/server/nodes/scraper/_credentials.py +29 -1
  216. package/server/nodes/scraper/apify_actor.py +9 -9
  217. package/server/nodes/scraper/crawlee_scraper.py +5 -5
  218. package/server/nodes/search/brave_search.py +4 -0
  219. package/server/nodes/search/perplexity_search.py +9 -0
  220. package/server/nodes/search/serper_search.py +3 -0
  221. package/server/nodes/skill/simple_memory.py +12 -0
  222. package/server/nodes/social/_base.py +2 -2
  223. package/server/nodes/stripe/__init__.py +46 -0
  224. package/server/nodes/stripe/_credentials.py +33 -0
  225. package/server/nodes/stripe/_handlers.py +270 -0
  226. package/server/nodes/stripe/_install.py +127 -0
  227. package/server/nodes/stripe/_source.py +174 -0
  228. package/server/nodes/stripe/stripe_action.py +81 -0
  229. package/server/nodes/stripe/stripe_receive.py +92 -0
  230. package/server/nodes/telegram/_credentials.py +52 -1
  231. package/server/nodes/telegram/_handlers.py +19 -18
  232. package/server/nodes/telegram/_service.py +134 -32
  233. package/server/nodes/telegram/telegram_send.py +5 -6
  234. package/server/nodes/text/file_handler.py +2 -2
  235. package/server/nodes/text/text_generator.py +2 -2
  236. package/server/nodes/tool/agent_builder.py +630 -0
  237. package/server/nodes/tool/task_manager.py +144 -2
  238. package/server/nodes/twitter/__init__.py +38 -1
  239. package/server/nodes/twitter/_base.py +7 -7
  240. package/server/nodes/twitter/_credentials.py +1 -1
  241. package/server/nodes/twitter/_filters.py +37 -0
  242. package/server/nodes/twitter/_handlers.py +77 -0
  243. package/server/nodes/twitter/_oauth.py +124 -0
  244. package/server/nodes/twitter/_refresh.py +78 -0
  245. package/server/nodes/twitter/_router.py +29 -0
  246. package/server/nodes/twitter/twitter_receive.py +4 -0
  247. package/server/nodes/visuals.json +64 -19
  248. package/server/nodes/whatsapp/__init__.py +45 -5
  249. package/server/nodes/whatsapp/_base.py +3 -3
  250. package/server/nodes/whatsapp/_filters.py +137 -0
  251. package/server/nodes/whatsapp/_handlers.py +167 -0
  252. package/server/nodes/whatsapp/_option_loaders.py +68 -0
  253. package/server/nodes/whatsapp/_refresh.py +62 -0
  254. package/server/nodes/whatsapp/_runtime.py +1 -1
  255. package/server/pyproject.toml +29 -7
  256. package/server/routers/schemas.py +2 -2
  257. package/server/routers/webhook.py +26 -9
  258. package/server/routers/websocket.py +149 -810
  259. package/server/services/ai.py +89 -8
  260. package/server/services/auth.py +220 -43
  261. package/server/services/claude_oauth.py +126 -100
  262. package/server/services/cli_agent/__init__.py +78 -0
  263. package/server/services/cli_agent/_handlers.py +237 -0
  264. package/server/services/cli_agent/config.py +112 -0
  265. package/server/services/cli_agent/factory.py +48 -0
  266. package/server/services/cli_agent/lockfile.py +141 -0
  267. package/server/services/cli_agent/mcp_server.py +482 -0
  268. package/server/services/cli_agent/protocol.py +173 -0
  269. package/server/services/cli_agent/providers/__init__.py +9 -0
  270. package/server/services/cli_agent/providers/anthropic_claude.py +419 -0
  271. package/server/services/cli_agent/providers/google_gemini.py +80 -0
  272. package/server/services/cli_agent/providers/openai_codex.py +310 -0
  273. package/server/services/cli_agent/service.py +607 -0
  274. package/server/services/cli_agent/session.py +618 -0
  275. package/server/services/cli_agent/types.py +227 -0
  276. package/server/services/cli_agent/workflow_tools.py +233 -0
  277. package/server/services/credential_registry.py +26 -1
  278. package/server/services/deployment/manager.py +26 -145
  279. package/server/services/deployment/poll_registry.py +59 -0
  280. package/server/services/event_waiter.py +76 -246
  281. package/server/services/events/__init__.py +54 -0
  282. package/server/services/events/cli.py +78 -0
  283. package/server/services/events/daemon.py +163 -0
  284. package/server/services/events/envelope.py +281 -0
  285. package/server/services/events/lifecycle.py +99 -0
  286. package/server/services/events/oauth_lifecycle.py +534 -0
  287. package/server/services/events/polling.py +60 -0
  288. package/server/services/events/push.py +36 -0
  289. package/server/services/events/source.py +63 -0
  290. package/server/services/events/triggers.py +118 -0
  291. package/server/services/events/verifiers/__init__.py +25 -0
  292. package/server/services/events/verifiers/base.py +28 -0
  293. package/server/services/events/verifiers/github.py +25 -0
  294. package/server/services/events/verifiers/hmac_basic.py +32 -0
  295. package/server/services/events/verifiers/standard_webhooks.py +47 -0
  296. package/server/services/events/verifiers/stripe.py +42 -0
  297. package/server/services/events/webhook.py +105 -0
  298. package/server/services/handlers/tools.py +28 -186
  299. package/server/services/llm/config.py +7 -0
  300. package/server/services/llm/factory.py +8 -2
  301. package/server/services/memory/__init__.py +52 -0
  302. package/server/services/memory/jsonl.py +80 -0
  303. package/server/services/memory/markdown.py +65 -0
  304. package/server/services/memory/state.py +112 -0
  305. package/server/services/memory/vector_store.py +40 -0
  306. package/server/services/model_registry.py +76 -0
  307. package/server/services/node_allowlist.py +71 -15
  308. package/server/services/node_executor.py +2 -2
  309. package/server/services/node_output_schemas.py +21 -10
  310. package/server/services/node_spec.py +1 -1
  311. package/server/services/oauth_utils.py +1 -1
  312. package/server/services/plugin/__init__.py +2 -0
  313. package/server/services/plugin/base.py +44 -2
  314. package/server/services/plugin/credential.py +288 -1
  315. package/server/services/plugin/deps.py +105 -0
  316. package/server/services/plugin/edge_walker.py +12 -4
  317. package/server/services/plugin/oauth.py +381 -0
  318. package/server/services/plugin/polling.py +247 -0
  319. package/server/services/plugin/registry.py +145 -0
  320. package/server/services/plugin/singleton.py +65 -0
  321. package/server/services/plugin/ws.py +81 -0
  322. package/server/services/process_service.py +31 -2
  323. package/server/services/status_broadcaster.py +155 -238
  324. package/server/services/temporal/workflow.py +7 -7
  325. package/server/services/workflow.py +21 -3
  326. package/server/services/ws_handler_registry.py +111 -28
  327. package/server/skills/GUIDE.md +16 -1
  328. package/server/skills/assistant/agent-builder-skill/SKILL.md +166 -0
  329. package/server/skills/payments_agent/stripe-skill/SKILL.md +306 -0
  330. package/server/tests/credentials/test_auth_service.py +16 -9
  331. package/server/tests/credentials/test_credential_broadcasts.py +219 -0
  332. package/server/tests/credentials/test_google_oauth.py +6 -6
  333. package/server/tests/credentials/test_oauth_utils.py +1 -1
  334. package/server/tests/credentials/test_twitter_oauth.py +2 -2
  335. package/server/tests/credentials/test_websocket_handlers.py +44 -20
  336. package/server/tests/llm/test_factory.py +1 -0
  337. package/server/tests/llm/test_wiring.py +5 -1
  338. package/server/tests/nodes/_compat.py +24 -24
  339. package/server/tests/nodes/test_agent_builder.py +439 -0
  340. package/server/tests/nodes/test_ai_tools.py +18 -14
  341. package/server/tests/nodes/test_code_fs_process.py +17 -8
  342. package/server/tests/nodes/test_email.py +10 -9
  343. package/server/tests/nodes/test_google_workspace.py +2 -2
  344. package/server/tests/nodes/test_specialized_agents.py +100 -53
  345. package/server/tests/nodes/test_stripe_plugin.py +293 -0
  346. package/server/tests/nodes/test_telegram_social.py +4 -4
  347. package/server/tests/nodes/test_twitter.py +1 -1
  348. package/server/tests/nodes/test_web_automation.py +2 -2
  349. package/server/tests/nodes/test_whatsapp.py +9 -9
  350. package/server/tests/services/cli_agent/__init__.py +0 -0
  351. package/server/tests/services/cli_agent/test_mcp_server.py +432 -0
  352. package/server/tests/services/cli_agent/test_providers.py +358 -0
  353. package/server/tests/services/cli_agent/test_service.py +298 -0
  354. package/server/tests/services/memory/__init__.py +0 -0
  355. package/server/tests/services/memory/test_jsonl.py +188 -0
  356. package/server/tests/services/test_events.py +333 -0
  357. package/server/tests/test_node_spec.py +56 -16
  358. package/server/tests/test_plugin_helpers.py +116 -0
  359. package/server/tests/test_plugin_self_containment.py +486 -0
  360. package/server/tests/test_status_broadcasts.py +425 -0
  361. package/workflows/{AI Assistant_workflow-1777421105154-0m4snkzjf.json → AI Assistant_workflow-1778504793388-ou1m1tz2x.json } +70 -266
  362. package/workflows/{AI Employee_workflow-1777720598005-u4cm858dv.json → AI Employee_example_workflow-1777720598005-u4cm858dv.json } +112 -112
  363. package/workflows/Claude Assistant_workflow-1778380124051-mdibn807c.json +709 -0
  364. package/client/dist/assets/ActionBar-vzPpSR77.js +0 -1
  365. package/client/dist/assets/ApiKeyInput-Ds7AKFe8.js +0 -1
  366. package/client/dist/assets/ApiKeyPanel-gfblELep.js +0 -1
  367. package/client/dist/assets/ApiUsageSection-BMNWTe2r.js +0 -1
  368. package/client/dist/assets/EmailPanel-B1Om64p5.js +0 -1
  369. package/client/dist/assets/OAuthPanel-CXyQYGBz.js +0 -1
  370. package/client/dist/assets/QrPairingPanel-BgNuI1we.js +0 -1
  371. package/client/dist/assets/RateLimitSection-YYK8sx1T.js +0 -1
  372. package/client/dist/assets/StatusCard-DuYA5hJR.js +0 -1
  373. package/client/dist/assets/index-D9tZfgvi.js +0 -363
  374. package/client/dist/assets/index-al7snTkG.css +0 -1
  375. package/client/src/components/credentials/providers.tsx +0 -177
  376. package/server/routers/google.py +0 -277
  377. package/server/routers/maps.py +0 -142
  378. package/server/routers/twitter.py +0 -365
  379. package/server/services/claude_code_service.py +0 -106
  380. package/server/services/memory.py +0 -159
  381. package/server/services/node_option_loaders/__init__.py +0 -77
  382. package/server/services/node_option_loaders/android_loaders.py +0 -55
  383. package/server/services/node_option_loaders/google_loaders.py +0 -97
  384. package/server/services/node_option_loaders/whatsapp_loaders.py +0 -69
  385. package/server/services/twitter_oauth.py +0 -411
  386. package/server/services/websocket_client.py +0 -29
  387. /package/server/{services/android → nodes/android/_relay}/__init__.py +0 -0
  388. /package/server/{services/android → nodes/android/_relay}/broadcaster.py +0 -0
  389. /package/server/{services/android → nodes/android/_relay}/manager.py +0 -0
  390. /package/server/{services/android → nodes/android/_relay}/protocol.py +0 -0
  391. /package/server/{services/browser_service.py → nodes/browser/_service.py} +0 -0
  392. /package/server/{services/whatsapp_service.py → nodes/whatsapp/_service.py} +0 -0
  393. /package/server/skills/{task_agent → assistant}/write-todos-skill/SKILL.md +0 -0
@@ -0,0 +1,70 @@
1
+ /* ============================================================================
2
+ * themes/dark.css — dark theme new-contract tokens.
3
+ *
4
+ * Scoped to BOTH `.dark` (so existing Tailwind `dark:` variants and the
5
+ * legacy `<html class="dark">` toggle continue to work) AND
6
+ * `:root[data-theme="dark"]` (the explicit theme name).
7
+ *
8
+ * Mirrors the existing `.dark` block in index.css for shadcn HSL-triplet
9
+ * tokens; this file only adds the new full-colour contract.
10
+ *
11
+ * Source palette: Solarized dark + Dracula accents (matches existing
12
+ * dark theme in client/src/styles/theme.ts).
13
+ * ============================================================================ */
14
+
15
+ .dark,
16
+ :root[data-theme="dark"] {
17
+ /* Surfaces — Solarized dark base + Dracula highlights */
18
+ --bg-app: #002b36; /* base03 */
19
+ --bg-panel: #073642; /* base02 */
20
+ --bg-canvas: #002b36;
21
+ --bg-elevated: #0d1f2d;
22
+ --bg-input: #073642;
23
+ --bg-hover: rgba(248, 248, 242, 0.06);
24
+ --bg-active: rgba(189, 147, 249, 0.18);
25
+ --bg-overlay: rgba(0, 0, 0, 0.7);
26
+
27
+ /* Borders */
28
+ --border-default: #586e75; /* base01 */
29
+ --border-strong: #93a1a1;
30
+ --border-focus: #268bd2; /* solarized blue */
31
+ --ornament-frame: none;
32
+
33
+ /* Foreground — Dracula light foreground for readability over Solarized dark */
34
+ --fg-default: #f8f8f2;
35
+ --fg-muted: #6272a4; /* dracula comment */
36
+ --fg-faint: #586e75;
37
+ --fg-on-accent: #002b36;
38
+ --fg-on-success: #002b36;
39
+ --fg-on-danger: #f8f8f2;
40
+ --fg-on-warning: #002b36;
41
+
42
+ /* Type — same as light (system stack) */
43
+ --font-display: 'Geist Variable', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
44
+ --font-body: 'Geist Variable', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
45
+ --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, Consolas, monospace;
46
+ --type-scale-base: 14px;
47
+ --type-tracking-display: 0;
48
+ --type-uppercase: none;
49
+
50
+ /* Geometry — same scale as light */
51
+ --radius-sm: 4px;
52
+ --radius-md: 6px;
53
+ --radius-lg: 8px;
54
+ --radius-pill: 999px;
55
+
56
+ /* Motion */
57
+ --dur-fast: 90ms;
58
+ --dur-default: 180ms;
59
+ --dur-slow: 320ms;
60
+ --ease-default: cubic-bezier(0.2, 0.7, 0.3, 1);
61
+ --ease-emphasis: cubic-bezier(0.6, -0.05, 0.3, 1.4);
62
+ --motion-style: smooth;
63
+ --sound-pack: terminal;
64
+
65
+ /* Cursor + scrollbar */
66
+ --cursor-default: auto;
67
+ --cursor-pointer: pointer;
68
+ --scrollbar-track: #073642;
69
+ --scrollbar-thumb: #586e75;
70
+ }
@@ -0,0 +1,246 @@
1
+ /* ============================================================================
2
+ * themes/edo.css — washi paper, sumi-e ink, vermillion hanko seal.
3
+ *
4
+ * Quiet, asymmetric, lots of negative space. Reads like an ink-painting on
5
+ * rice paper. Ported from design_handoff_machinaos_themes/themes/edo.css.
6
+ * ============================================================================ */
7
+
8
+ :root[data-theme="edo"] {
9
+ --bg-app: #f4ecd8;
10
+ --bg-panel: #faf3e0;
11
+ --bg-canvas: #ede4ca;
12
+ --bg-elevated: #fdf8ea;
13
+ --bg-input: #fdf8ea;
14
+ --bg-hover: rgba(180, 30, 30, 0.06);
15
+ --bg-active: rgba(180, 30, 30, 0.14);
16
+ --bg-overlay: rgba(40, 30, 20, 0.55);
17
+
18
+ --border-default: #c8b890;
19
+ --border-strong: #1a1410;
20
+ --border-focus: #b41e1e;
21
+ --ornament-frame: none;
22
+
23
+ --fg-default: #1a1410;
24
+ --fg-muted: #6a5e48;
25
+ --fg-faint: #a89a78;
26
+ --fg-on-accent: #fdf8ea;
27
+ --fg-on-success: #fdf8ea;
28
+ --fg-on-danger: #fdf8ea;
29
+ --fg-on-warning: #1a1410;
30
+
31
+ --sumi: #1a1410;
32
+ --sakura: #e89aa8;
33
+ --bamboo: #4a6a3a;
34
+ --tea: #8a6a3a;
35
+ --vermillion: #b41e1e;
36
+
37
+ --font-display: 'Shippori Mincho', 'Sawarabi Mincho', 'Noto Serif JP', serif;
38
+ --font-body: 'Shippori Mincho', 'Sawarabi Mincho', 'Noto Serif JP', serif;
39
+ --font-mono: 'JetBrains Mono', monospace;
40
+ --type-scale-base: 14px;
41
+ --type-tracking-display: 0.06em;
42
+ --type-uppercase: none;
43
+
44
+ --radius-sm: 0px;
45
+ --radius-md: 0px;
46
+ --radius-lg: 0px;
47
+ --radius-pill: 0px;
48
+
49
+ --dur-fast: 90ms;
50
+ --dur-default: 220ms;
51
+ --dur-slow: 520ms;
52
+ --ease-default: cubic-bezier(0.4, 0, 0.2, 1);
53
+ --ease-emphasis: cubic-bezier(0.7, -0.1, 0.3, 1.2);
54
+ --motion-style: organic;
55
+ --sound-pack: ink;
56
+
57
+ /* Wave 30: vermillion pulse — matches hanko seal + reads against
58
+ * washi paper background. */
59
+ --node-pulse-color: hsl(var(--accent));
60
+
61
+ --cursor-default: auto;
62
+ --cursor-pointer: pointer;
63
+ --scrollbar-track: #f4ecd8;
64
+ --scrollbar-thumb: #c8b890;
65
+
66
+ /* Shadcn HSL bridge */
67
+ --background: 41 56% 90%;
68
+ --foreground: 24 25% 8%;
69
+ --card: 44 80% 96%;
70
+ --card-foreground: 24 25% 8%;
71
+ --popover: 44 80% 96%;
72
+ --popover-foreground: 24 25% 8%;
73
+
74
+ --primary: 0 71% 41%; /* vermillion */
75
+ --primary-foreground: 44 80% 96%;
76
+ --secondary: 44 71% 93%;
77
+ --secondary-foreground: 24 25% 8%;
78
+ --muted: 44 71% 93%;
79
+ --muted-foreground: 36 19% 35%;
80
+ --accent: 0 71% 41%;
81
+ --accent-foreground: 44 80% 96%;
82
+
83
+ --destructive: 0 71% 41%;
84
+ --destructive-foreground: 44 80% 96%;
85
+ --success: 100 29% 32%; /* bamboo */
86
+ --warning: 41 60% 49%;
87
+ --info: 24 25% 8%; /* sumi black for info */
88
+
89
+ --border: 24 25% 8%;
90
+ --input: 40 35% 67%;
91
+ --ring: 0 71% 41%;
92
+
93
+ /* Action role bridge */
94
+ --action-run: 100 29% 32%;
95
+ --action-run-soft: 100 29% 32% / 0.14;
96
+ --action-run-hover: 100 29% 32% / 0.26;
97
+ --action-run-border: 100 29% 32% / 0.7;
98
+
99
+ --action-stop: 0 71% 41%;
100
+ --action-stop-soft: 0 71% 41% / 0.14;
101
+ --action-stop-hover: 0 71% 41% / 0.28;
102
+ --action-stop-border: 0 71% 41% / 0.7;
103
+
104
+ --action-save: 0 71% 41%;
105
+ --action-save-soft: 0 71% 41% / 0.16;
106
+ --action-save-hover: 0 71% 41% / 0.30;
107
+ --action-save-border: 0 71% 41% / 0.7;
108
+
109
+ --action-config: 41 60% 49%;
110
+ --action-config-soft: 41 60% 49% / 0.16;
111
+ --action-config-hover: 41 60% 49% / 0.28;
112
+ --action-config-border: 41 60% 49% / 0.6;
113
+
114
+ --action-secret: 24 25% 8%;
115
+ --action-secret-soft: 24 25% 8% / 0.10;
116
+ --action-secret-hover: 24 25% 8% / 0.20;
117
+ --action-secret-border: 24 25% 8% / 0.5;
118
+
119
+ --action-tools: 100 29% 32%;
120
+ --action-tools-soft: 100 29% 32% / 0.14;
121
+ --action-tools-hover: 100 29% 32% / 0.26;
122
+ --action-tools-border: 100 29% 32% / 0.6;
123
+
124
+ --tint-soft: 10%;
125
+ --tint-border: 30%;
126
+ }
127
+
128
+ /* Body washi texture */
129
+ :root[data-theme="edo"] body {
130
+ background:
131
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='w'><feTurbulence baseFrequency='0.85' numOctaves='1'/><feColorMatrix values='0 0 0 0 0.65 0 0 0 0 0.55 0 0 0 0 0.35 0 0 0 0.06 0'/></filter><rect width='300' height='300' filter='url(%23w)'/></svg>"),
132
+ var(--bg-app);
133
+ }
134
+
135
+ :root[data-theme="edo"] ::selection {
136
+ background: rgba(180, 30, 30, 0.30);
137
+ color: #1a1410;
138
+ }
139
+
140
+ /* Edo scrollbars — square corners (woodblock-print geometry) */
141
+ :root[data-theme="edo"] ::-webkit-scrollbar {
142
+ width: 12px;
143
+ height: 12px;
144
+ }
145
+ :root[data-theme="edo"] ::-webkit-scrollbar-track {
146
+ background: var(--scrollbar-track);
147
+ }
148
+ :root[data-theme="edo"] ::-webkit-scrollbar-thumb {
149
+ background: var(--scrollbar-thumb);
150
+ border-radius: 0;
151
+ }
152
+ :root[data-theme="edo"] ::-webkit-scrollbar-thumb:hover {
153
+ background: color-mix(in srgb, var(--scrollbar-thumb) 80%, white);
154
+ }
155
+
156
+ /* ── Per-component decorations (Wave 16 port from handoff) ─────────────── */
157
+
158
+ :root[data-theme="edo"] .toolbar,
159
+ :root[data-theme="edo"] .sidebar,
160
+ :root[data-theme="edo"] .palette,
161
+ :root[data-theme="edo"] .chat {
162
+ background:
163
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='300' height='300'><filter id='w'><feTurbulence baseFrequency='0.95' numOctaves='1'/><feColorMatrix values='0 0 0 0 0.65 0 0 0 0 0.55 0 0 0 0 0.35 0 0 0 0.05 0'/></filter><rect width='300' height='300' filter='url(%23w)'/></svg>"),
164
+ var(--bg-panel);
165
+ }
166
+ :root[data-theme="edo"] .toolbar { border-bottom: 1px solid var(--sumi); }
167
+ :root[data-theme="edo"] .sidebar { border-right: 1px solid var(--sumi); }
168
+ :root[data-theme="edo"] .palette { border-left: 1px solid var(--sumi); }
169
+ :root[data-theme="edo"] .chat { border-top: 1px solid var(--sumi); }
170
+
171
+ /* Canvas — empty rice paper with one ink-wash mountain */
172
+ :root[data-theme="edo"] .canvas {
173
+ background:
174
+ radial-gradient(ellipse 600px 200px at 80% 90%, rgba(26,20,16,0.10), transparent 60%),
175
+ var(--bg-canvas);
176
+ }
177
+
178
+ /* Typography — light, generous, asymmetric */
179
+ :root[data-theme="edo"] body { font-family: var(--font-body); color: var(--fg-default); }
180
+ :root[data-theme="edo"] h1, :root[data-theme="edo"] h2, :root[data-theme="edo"] h3,
181
+ :root[data-theme="edo"] .v-display { font-family: var(--font-display); font-weight: 400; letter-spacing: 0.04em; }
182
+
183
+ /* Square node — hanko seal + ink calligraphy */
184
+ :root[data-theme="edo"] .sq-node-box {
185
+ background: var(--bg-elevated);
186
+ border: 1px solid var(--sumi); border-radius: 0;
187
+ box-shadow: none;
188
+ color: var(--sumi);
189
+ position: relative;
190
+ }
191
+ :root[data-theme="edo"] .sq-node.selected .sq-node-box {
192
+ border: 2px solid hsl(var(--accent));
193
+ background: var(--bg-elevated);
194
+ /* Wave 29: outer halo so selection reads at any zoom level. */
195
+ box-shadow: 0 0 0 2px hsl(var(--accent) / 0.5), 0 4px 14px hsl(var(--accent) / 0.3);
196
+ }
197
+ :root[data-theme="edo"] .sq-node.selected .sq-node-box::before {
198
+ content: ''; position: absolute; top: 4px; right: 4px; width: 14px; height: 14px;
199
+ background: hsl(var(--accent)); transform: rotate(8deg);
200
+ }
201
+ :root[data-theme="edo"] .sq-node-pip { border-radius: 0; }
202
+ :root[data-theme="edo"] .sq-node-gear { background: hsl(var(--accent)); color: white; border-radius: 0; border: none; }
203
+ :root[data-theme="edo"] .sq-node-handle { border-radius: 0; }
204
+ :root[data-theme="edo"] .sq-node-label { font-family: var(--font-display); font-weight: 500; font-size: 11px; letter-spacing: 0.04em; }
205
+
206
+ /* Actions — minimal */
207
+ :root[data-theme="edo"] .action-btn {
208
+ border-radius: 0; font-family: var(--font-display); font-size: 12px; letter-spacing: 0.06em; font-weight: 500;
209
+ border-width: 1px;
210
+ }
211
+ :root[data-theme="edo"] .action-run { background: transparent; color: var(--bamboo); border-color: var(--bamboo); }
212
+ :root[data-theme="edo"] .action-deploy { background: transparent; color: hsl(var(--accent)); border-color: hsl(var(--accent)); }
213
+ :root[data-theme="edo"] .action-save { background: hsl(var(--accent)); color: var(--fg-on-accent); border-color: hsl(var(--accent)); }
214
+
215
+ /* Cards / panels — minimal lines */
216
+ :root[data-theme="edo"] .wf-card,
217
+ :root[data-theme="edo"] .cat,
218
+ :root[data-theme="edo"] .comp,
219
+ :root[data-theme="edo"] .settings-section,
220
+ :root[data-theme="edo"] .cred-card {
221
+ border-radius: 0; background: var(--bg-elevated); border: 1px solid var(--border-default);
222
+ }
223
+ :root[data-theme="edo"] .wf-card.selected { border-left: 3px solid hsl(var(--accent)); }
224
+ :root[data-theme="edo"] .cat-tile { background: transparent; border: 1px solid var(--sumi); color: var(--sumi); border-radius: 0; }
225
+ :root[data-theme="edo"] .comp-ico { background: transparent; border: 1px solid var(--border-default); color: var(--sumi); border-radius: 0; }
226
+
227
+ /* Chat */
228
+ :root[data-theme="edo"] .chat-msg { border-radius: 0; }
229
+ :root[data-theme="edo"] .chat-msg-user { background: transparent; border: 1px solid hsl(var(--accent)); }
230
+ :root[data-theme="edo"] .chat-msg-bot { background: var(--bg-elevated); border-left: 3px solid var(--sumi); border-top: none; border-right: none; border-bottom: none; }
231
+
232
+ /* Status bar */
233
+ :root[data-theme="edo"] .statusbar {
234
+ background: var(--bg-panel); border-top: 1px solid var(--sumi);
235
+ font-family: var(--font-mono); color: var(--fg-muted);
236
+ }
237
+ :root[data-theme="edo"] .statusbar .pip { background: var(--bamboo); border-radius: 0; }
238
+
239
+ /* Modal */
240
+ :root[data-theme="edo"] .modal { background: var(--bg-elevated); border: 1px solid var(--sumi); border-radius: 0; }
241
+ :root[data-theme="edo"] .modal-head { border-bottom: 1px solid var(--sumi); }
242
+ :root[data-theme="edo"] .modal-title { font-family: var(--font-display); color: hsl(var(--accent)); }
243
+
244
+ /* CMDK */
245
+ :root[data-theme="edo"] .cmdk { background: var(--bg-elevated); border: 1px solid var(--sumi); border-radius: 0; }
246
+ :root[data-theme="edo"] .cmdk-item.active { background: var(--bg-active); border-left: 3px solid hsl(var(--accent)); }
@@ -0,0 +1,293 @@
1
+ /* ============================================================================
2
+ * themes/greek.css — sun-bleached marble agora.
3
+ *
4
+ * Lapis blue + oxblood + gold meander on cracked Aegean marble.
5
+ * Ported from design_handoff_machinaos_themes/themes/greek.css.
6
+ *
7
+ * Decorative class-targeted rules (.toolbar, .sidebar, .canvas, .modal,
8
+ * .cmdk, etc.) activate once Wave 2 adds those structural classes to
9
+ * the React tree. Token block alone retints existing chrome via the
10
+ * shadcn HSL bridge.
11
+ * ============================================================================ */
12
+
13
+ :root[data-theme="greek"] {
14
+ /* ── New contract ─────────────────────────────────────────────────── */
15
+
16
+ --bg-app: #ede5d0;
17
+ --bg-panel: #f5efde;
18
+ --bg-canvas: #e6dcc2;
19
+ --bg-elevated: #faf6e9;
20
+ --bg-input: #faf6e9;
21
+ --bg-hover: rgba(40, 75, 130, 0.08);
22
+ --bg-active: rgba(40, 75, 130, 0.16);
23
+ --bg-overlay: rgba(60, 50, 30, 0.55);
24
+
25
+ --border-default: #b8a878;
26
+ --border-strong: #4a3818;
27
+ --border-focus: #284b82;
28
+ --ornament-frame: none;
29
+
30
+ --fg-default: #2a2415;
31
+ --fg-muted: #6a5d3c;
32
+ --fg-faint: #998c64;
33
+ --fg-on-accent: #faf6e9;
34
+ --fg-on-success: #faf6e9;
35
+ --fg-on-danger: #faf6e9;
36
+ --fg-on-warning: #2a2415;
37
+
38
+ --accent: #284b82;
39
+ --accent-hover: #3a5fa0;
40
+ --marble-vein: #d8c89a;
41
+ --oxblood: #7a1a18;
42
+ --olive: #6a7a32;
43
+ --gold: #c8a040;
44
+
45
+ --font-display: 'Cinzel', 'Trajan Pro', serif;
46
+ --font-body: 'Cormorant Garamond', 'Times New Roman', serif;
47
+ --font-mono: 'Courier Prime', 'Courier New', monospace;
48
+ --type-scale-base: 14px;
49
+ --type-tracking-display: 0.18em;
50
+ --type-uppercase: uppercase;
51
+
52
+ --radius-sm: 0px;
53
+ --radius-md: 0px;
54
+ --radius-lg: 2px;
55
+ --radius-pill: 0px;
56
+
57
+ --dur-fast: 120ms;
58
+ --dur-default: 240ms;
59
+ --dur-slow: 460ms;
60
+ --ease-default: cubic-bezier(0.3, 0.7, 0.4, 1);
61
+ --ease-emphasis: cubic-bezier(0.6, -0.05, 0.3, 1.4);
62
+ --motion-style: smooth;
63
+ --sound-pack: marble;
64
+
65
+ /* Wave 30: lapis-accent pulse — high-contrast against marble +
66
+ * matches the temple-floor selection halo. */
67
+ --node-pulse-color: hsl(var(--accent));
68
+
69
+ --cursor-default: auto;
70
+ --cursor-pointer: pointer;
71
+ --scrollbar-track: #ede5d0;
72
+ --scrollbar-thumb: #b8a878;
73
+
74
+ /* ── Shadcn HSL bridge ────────────────────────────────────────────── */
75
+
76
+ --background: 42 38% 87%;
77
+ --foreground: 38 33% 12%;
78
+ --card: 46 71% 95%;
79
+ --card-foreground: 38 33% 12%;
80
+ --popover: 46 71% 95%;
81
+ --popover-foreground: 38 33% 12%;
82
+
83
+ --primary: 217 53% 33%; /* lapis */
84
+ --primary-foreground: 46 71% 95%;
85
+ --secondary: 44 60% 91%;
86
+ --secondary-foreground: 38 33% 12%;
87
+ --muted: 44 60% 91%;
88
+ --muted-foreground: 40 28% 33%;
89
+ --accent: 41 56% 52%; /* gold for shadcn accent (overrides new-contract --accent string above for HSL only — Tailwind utilities) */
90
+ --accent-foreground: 38 33% 12%;
91
+
92
+ --destructive: 1 66% 29%; /* oxblood */
93
+ --destructive-foreground: 46 71% 95%;
94
+ --success: 71 41% 33%; /* olive */
95
+ --warning: 41 56% 52%; /* gold */
96
+ --info: 217 53% 33%; /* lapis */
97
+
98
+ --border: 33 51% 19%; /* border-strong drives the visible borders */
99
+ --input: 40 33% 60%;
100
+ --ring: 217 53% 33%;
101
+
102
+ /* ── Action role bridge ───────────────────────────────────────────── */
103
+
104
+ --action-run: 71 41% 33%;
105
+ --action-run-soft: 71 41% 33% / 0.18;
106
+ --action-run-hover: 71 41% 33% / 0.30;
107
+ --action-run-border: 71 41% 33% / 0.7;
108
+
109
+ --action-stop: 1 66% 29%;
110
+ --action-stop-soft: 1 66% 29% / 0.16;
111
+ --action-stop-hover: 1 66% 29% / 0.28;
112
+ --action-stop-border: 1 66% 29% / 0.7;
113
+
114
+ --action-save: 41 56% 52%;
115
+ --action-save-soft: 41 56% 52% / 0.20;
116
+ --action-save-hover: 41 56% 52% / 0.35;
117
+ --action-save-border: 41 56% 52% / 0.7;
118
+
119
+ --action-config: 41 56% 52%;
120
+ --action-config-soft: 41 56% 52% / 0.18;
121
+ --action-config-hover: 41 56% 52% / 0.30;
122
+ --action-config-border: 41 56% 52% / 0.6;
123
+
124
+ --action-secret: 217 53% 33%;
125
+ --action-secret-soft: 217 53% 33% / 0.14;
126
+ --action-secret-hover: 217 53% 33% / 0.26;
127
+ --action-secret-border: 217 53% 33% / 0.7;
128
+
129
+ --action-tools: 217 53% 33%;
130
+ --action-tools-soft: 217 53% 33% / 0.14;
131
+ --action-tools-hover: 217 53% 33% / 0.26;
132
+ --action-tools-border: 217 53% 33% / 0.7;
133
+
134
+ --tint-soft: 14%;
135
+ --tint-border: 35%;
136
+
137
+ /* Canvas backplane — temple-floor key meander (80x80 tile, faint ink) */
138
+ --canvas-grid:
139
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='80' height='80'><g fill='none' stroke='%234a3818' stroke-width='0.4' opacity='0.18'><path d='M0 40 H10 V20 H30 V60 H50 V20 H70 V40 H80'/></g></svg>");
140
+ --canvas-grid-opacity: 1;
141
+ }
142
+
143
+ /* ── Body marble texture ──────────────────────────────────────────────── */
144
+
145
+ :root[data-theme="greek"] body {
146
+ background:
147
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='400' height='400'><filter id='m'><feTurbulence baseFrequency='0.012 0.04' numOctaves='2' seed='3'/><feColorMatrix values='0 0 0 0 0.85 0 0 0 0 0.78 0 0 0 0 0.61 0 0 0 0.18 0'/></filter><rect width='400' height='400' filter='url(%23m)'/></svg>"),
148
+ var(--bg-app);
149
+ }
150
+
151
+ /* ── Decorative rules (activate after Wave 2 wrappers land) ──────────── */
152
+
153
+ :root[data-theme="greek"] .toolbar,
154
+ :root[data-theme="greek"] .sidebar,
155
+ :root[data-theme="greek"] .palette,
156
+ :root[data-theme="greek"] .chat {
157
+ background:
158
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='400' height='400'><filter id='m'><feTurbulence baseFrequency='0.014 0.05' numOctaves='2' seed='7'/><feColorMatrix values='0 0 0 0 0.85 0 0 0 0 0.78 0 0 0 0 0.61 0 0 0 0.14 0'/></filter><rect width='400' height='400' filter='url(%23m)'/></svg>"),
159
+ var(--bg-panel);
160
+ }
161
+
162
+ :root[data-theme="greek"] .canvas-host {
163
+ background:
164
+ url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='80' height='80'><g fill='none' stroke='%234a3818' stroke-width='0.4' opacity='0.18'><path d='M0 40 H10 V20 H30 V60 H50 V20 H70 V40 H80'/></g></svg>"),
165
+ var(--bg-canvas);
166
+ }
167
+
168
+ :root[data-theme="greek"] .modal-frame {
169
+ border: 4px double var(--border-strong) !important;
170
+ }
171
+
172
+ ::selection {}
173
+ :root[data-theme="greek"] ::selection {
174
+ background: rgba(40, 75, 130, 0.4);
175
+ color: #2a2415;
176
+ }
177
+
178
+ /* Greek scrollbars — sandstone thumb on linen (chiseled-marble feel) */
179
+ :root[data-theme="greek"] ::-webkit-scrollbar {
180
+ width: 12px;
181
+ height: 12px;
182
+ }
183
+ :root[data-theme="greek"] ::-webkit-scrollbar-track {
184
+ background: var(--scrollbar-track);
185
+ }
186
+ :root[data-theme="greek"] ::-webkit-scrollbar-thumb {
187
+ background: var(--scrollbar-thumb);
188
+ border-radius: var(--radius-sm, 0);
189
+ }
190
+ :root[data-theme="greek"] ::-webkit-scrollbar-thumb:hover {
191
+ background: color-mix(in srgb, var(--scrollbar-thumb) 80%, white);
192
+ }
193
+
194
+ /* ── Per-component decorations (Wave 16 port from handoff) ─────────────── */
195
+
196
+ :root[data-theme="greek"] .toolbar { border-bottom: 3px solid var(--border-strong); position: relative; }
197
+ :root[data-theme="greek"] .toolbar::after {
198
+ content: ''; position: absolute; left: 0; right: 0; bottom: -8px; height: 5px;
199
+ background: url("data:image/svg+xml;utf8,<svg xmlns='http://www.w3.org/2000/svg' width='40' height='5' viewBox='0 0 40 5'><path d='M0 0 H40 V5 H0 Z M2 1 H6 V3 H4 V2 H8 V4 H2 Z M12 1 H16 V3 H14 V2 H18 V4 H12 Z M22 1 H26 V3 H24 V2 H28 V4 H22 Z M32 1 H36 V3 H34 V2 H38 V4 H32 Z' fill='%234a3818'/></svg>") repeat-x;
200
+ pointer-events: none;
201
+ }
202
+ :root[data-theme="greek"] .sidebar { border-right: 3px solid var(--border-strong); }
203
+ :root[data-theme="greek"] .palette { border-left: 3px solid var(--border-strong); }
204
+ :root[data-theme="greek"] .chat { border-top: 3px solid var(--border-strong); }
205
+
206
+ /* Typography */
207
+ :root[data-theme="greek"] body { font-family: var(--font-body); color: var(--fg-default); font-size: 14px; line-height: 1.5; }
208
+ :root[data-theme="greek"] h1, :root[data-theme="greek"] h2, :root[data-theme="greek"] h3,
209
+ :root[data-theme="greek"] .v-display {
210
+ font-family: var(--font-display);
211
+ letter-spacing: 0.18em;
212
+ text-transform: uppercase;
213
+ color: var(--fg-default);
214
+ }
215
+
216
+ /* Square node — temple stelae */
217
+ :root[data-theme="greek"] .sq-node-box {
218
+ background: linear-gradient(180deg, var(--bg-elevated), var(--marble-vein));
219
+ border: 2px solid var(--border-strong);
220
+ border-radius: 0;
221
+ box-shadow: 0 3px 0 var(--border-strong), inset 0 0 0 1px var(--gold);
222
+ color: hsl(var(--accent));
223
+ }
224
+ :root[data-theme="greek"] .sq-node.selected .sq-node-box {
225
+ border-color: hsl(var(--accent)); box-shadow: 0 0 0 3px hsl(var(--info) / 0.25), 0 3px 0 var(--border-strong), inset 0 0 0 1px var(--gold);
226
+ }
227
+ :root[data-theme="greek"] .sq-node-pip { border-radius: 0; box-shadow: 0 0 0 1px var(--border-strong); }
228
+ :root[data-theme="greek"] .sq-node-gear { background: var(--gold); color: var(--border-strong); border: 1px solid var(--border-strong); border-radius: 0; }
229
+ :root[data-theme="greek"] .sq-node-handle { border-radius: 0; }
230
+ :root[data-theme="greek"] .sq-node-handle.out { background: var(--oxblood); }
231
+ :root[data-theme="greek"] .sq-node-label {
232
+ font-family: var(--font-display); letter-spacing: 0.14em; font-size: 10px; color: var(--fg-default);
233
+ text-transform: uppercase;
234
+ }
235
+
236
+ /* Toolbar actions — stamped */
237
+ :root[data-theme="greek"] .action-btn {
238
+ border-radius: 0; font-family: var(--font-display); letter-spacing: 0.12em; text-transform: uppercase; font-size: 11px;
239
+ border-width: 2px;
240
+ }
241
+ :root[data-theme="greek"] .action-run { background: hsl(var(--success-soft)); color: hsl(var(--success)); border-color: hsl(var(--success)); }
242
+ :root[data-theme="greek"] .action-deploy { background: hsl(var(--info-soft)); color: hsl(var(--accent)); border-color: hsl(var(--accent)); }
243
+ :root[data-theme="greek"] .action-save { background: hsl(var(--warning-soft)); color: var(--oxblood); border-color: var(--gold); }
244
+
245
+ /* Panels */
246
+ :root[data-theme="greek"] .palette h2,
247
+ :root[data-theme="greek"] .sidebar-head h3 {
248
+ font-family: var(--font-display); letter-spacing: 0.20em; color: var(--fg-default);
249
+ border-bottom: 2px solid var(--border-strong); padding-bottom: 6px;
250
+ }
251
+
252
+ /* Workflow cards */
253
+ :root[data-theme="greek"] .wf-card { background: var(--bg-elevated); border: 2px solid var(--border-default); border-radius: 0; }
254
+ :root[data-theme="greek"] .wf-card.selected { border-color: hsl(var(--accent)); background: hsl(var(--info-soft)); }
255
+ :root[data-theme="greek"] .wf-card-name { font-family: var(--font-display); letter-spacing: 0.10em; }
256
+
257
+ /* Palette categories */
258
+ :root[data-theme="greek"] .cat { background: var(--bg-elevated); border: 2px solid var(--border-default); border-radius: 0; }
259
+ :root[data-theme="greek"] .cat-tile { background: var(--gold); border: 1px solid var(--border-strong); border-radius: 0; color: var(--border-strong); }
260
+ :root[data-theme="greek"] .cat-name { font-family: var(--font-display); letter-spacing: 0.16em; color: hsl(var(--accent)); }
261
+ :root[data-theme="greek"] .cat-count { background: var(--bg-active); border: 1px solid var(--border-default); border-radius: 0; }
262
+
263
+ /* Comp items */
264
+ :root[data-theme="greek"] .comp { background: var(--bg-panel); border: 1px solid var(--border-default); border-radius: 0; }
265
+ :root[data-theme="greek"] .comp:hover { border-color: hsl(var(--accent)); }
266
+ :root[data-theme="greek"] .comp-ico { background: var(--bg-elevated); border: 1px solid var(--border-default); color: hsl(var(--accent)); border-radius: 0; }
267
+ :root[data-theme="greek"] .comp-name { font-family: var(--font-display); font-size: 12px; letter-spacing: 0.10em; }
268
+
269
+ /* Chat */
270
+ :root[data-theme="greek"] .chat-msg { border-radius: 0; }
271
+ :root[data-theme="greek"] .chat-msg-user { background: hsl(var(--info-soft)); border: 2px solid hsl(var(--accent)); }
272
+ :root[data-theme="greek"] .chat-msg-bot { background: var(--bg-elevated); border: 2px solid var(--border-default); }
273
+
274
+ /* Status bar */
275
+ :root[data-theme="greek"] .statusbar {
276
+ background: var(--bg-panel); border-top: 2px solid var(--border-strong);
277
+ font-family: var(--font-mono); color: var(--fg-muted); letter-spacing: 0.06em;
278
+ }
279
+ :root[data-theme="greek"] .statusbar .pip { background: hsl(var(--success)); border-radius: 0; }
280
+
281
+ /* Modal — temple inscription */
282
+ :root[data-theme="greek"] .modal {
283
+ background: var(--bg-elevated); border: 4px double var(--border-strong); border-radius: 0;
284
+ box-shadow: 0 30px 80px rgba(60, 50, 30, 0.4);
285
+ }
286
+ :root[data-theme="greek"] .modal-head { border-bottom: 3px solid var(--border-strong); }
287
+ :root[data-theme="greek"] .modal-title { font-family: var(--font-display); letter-spacing: 0.18em; color: hsl(var(--accent)); }
288
+
289
+ /* Command palette */
290
+ :root[data-theme="greek"] .cmdk { background: var(--bg-elevated); border: 4px double var(--border-strong); border-radius: 0; }
291
+ :root[data-theme="greek"] .cmdk input { font-family: var(--font-display); letter-spacing: 0.12em; }
292
+ :root[data-theme="greek"] .cmdk-item.active { background: hsl(var(--info-soft)); color: hsl(var(--accent)); }
293
+ :root[data-theme="greek"] .cmdk-item.active::before { content: '◆ '; color: var(--gold); }
@@ -0,0 +1,78 @@
1
+ /* ============================================================================
2
+ * themes/light.css — light theme new-contract tokens.
3
+ *
4
+ * Mirrors the existing :root block in index.css (which still owns the
5
+ * shadcn HSL-triplet tokens). This file ADDS the new full-colour
6
+ * contract — surface / foreground / accent / typography / motion —
7
+ * scoped to `:root[data-theme="light"]` AND the unscoped `:root` so
8
+ * the contract is satisfied even when no data-theme attribute is set.
9
+ *
10
+ * Existing Tailwind utilities (bg-card, text-foreground, border-border,
11
+ * bg-action-save-soft, etc.) keep working unchanged because the shadcn
12
+ * tokens stay live in index.css.
13
+ *
14
+ * New utilities exposed by index.css `@theme inline`:
15
+ * bg-bg-app, bg-bg-panel, bg-bg-elevated, bg-bg-canvas, bg-bg-input,
16
+ * bg-bg-hover, bg-bg-active, bg-bg-overlay,
17
+ * text-fg-default, text-fg-muted, text-fg-faint, text-fg-on-accent,
18
+ * border-default, border-strong, border-focus,
19
+ * font-display, font-body (font-mono comes from index.css),
20
+ * tracking-display, rounded-pill.
21
+ * ============================================================================ */
22
+
23
+ :root,
24
+ :root[data-theme="light"] {
25
+ /* Surfaces (light mode — light grey palette consistent with existing values) */
26
+ --bg-app: #f5f7fa;
27
+ --bg-panel: #fafbfc;
28
+ --bg-canvas: #ffffff;
29
+ --bg-elevated: #ffffff;
30
+ --bg-input: #ffffff;
31
+ --bg-hover: rgba(0, 0, 0, 0.04);
32
+ --bg-active: rgba(0, 0, 0, 0.06);
33
+ --bg-overlay: rgba(0, 0, 0, 0.45);
34
+
35
+ /* Borders */
36
+ --border-default: #d1d5db;
37
+ --border-strong: #9ca3af;
38
+ --border-focus: #3b82f6;
39
+ --ornament-frame: none;
40
+
41
+ /* Foreground */
42
+ --fg-default: #1a1d21;
43
+ --fg-muted: #4b5563;
44
+ --fg-faint: #9ca3af;
45
+ --fg-on-accent: #ffffff;
46
+ --fg-on-success: #ffffff;
47
+ --fg-on-danger: #ffffff;
48
+ --fg-on-warning: #1a1d21;
49
+
50
+ /* Type — system stack for light/dark; Renaissance + Cyber override */
51
+ --font-display: 'Geist Variable', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
52
+ --font-body: 'Geist Variable', system-ui, -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
53
+ --font-mono: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, Monaco, Consolas, monospace;
54
+ --type-scale-base: 14px;
55
+ --type-tracking-display: 0;
56
+ --type-uppercase: none;
57
+
58
+ /* Geometry — match existing shadcn radius (0.5rem / 8px) */
59
+ --radius-sm: 4px;
60
+ --radius-md: 6px;
61
+ --radius-lg: 8px;
62
+ --radius-pill: 999px;
63
+
64
+ /* Motion — match base defaults (smooth) */
65
+ --dur-fast: 90ms;
66
+ --dur-default: 180ms;
67
+ --dur-slow: 320ms;
68
+ --ease-default: cubic-bezier(0.2, 0.7, 0.3, 1);
69
+ --ease-emphasis: cubic-bezier(0.6, -0.05, 0.3, 1.4);
70
+ --motion-style: smooth;
71
+ --sound-pack: parchment;
72
+
73
+ /* Cursor + scrollbar */
74
+ --cursor-default: auto;
75
+ --cursor-pointer: pointer;
76
+ --scrollbar-track: #eef1f5;
77
+ --scrollbar-thumb: #d1d5db;
78
+ }