zigrix 0.1.0-alpha.8 → 0.1.0-alpha.9

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 (55) hide show
  1. package/LICENSE +1 -1
  2. package/README.md +248 -112
  3. package/dist/agents/registry.js +5 -2
  4. package/dist/agents/roles.d.ts +10 -0
  5. package/dist/agents/roles.js +83 -0
  6. package/dist/config/defaults.d.ts +2 -1
  7. package/dist/config/defaults.js +2 -1
  8. package/dist/config/schema.d.ts +25 -3
  9. package/dist/config/schema.js +34 -2
  10. package/dist/configure.d.ts +1 -0
  11. package/dist/configure.js +14 -1
  12. package/dist/dashboard/.next/BUILD_ID +1 -1
  13. package/dist/dashboard/.next/app-build-manifest.json +14 -14
  14. package/dist/dashboard/.next/app-path-routes-manifest.json +5 -5
  15. package/dist/dashboard/.next/build-manifest.json +2 -2
  16. package/dist/dashboard/.next/prerender-manifest.json +7 -7
  17. package/dist/dashboard/.next/server/app/_not-found/page_client-reference-manifest.js +1 -1
  18. package/dist/dashboard/.next/server/app/_not-found.html +1 -1
  19. package/dist/dashboard/.next/server/app/_not-found.rsc +1 -1
  20. package/dist/dashboard/.next/server/app/api/auth/login/route_client-reference-manifest.js +1 -1
  21. package/dist/dashboard/.next/server/app/api/auth/logout/route_client-reference-manifest.js +1 -1
  22. package/dist/dashboard/.next/server/app/api/auth/session/route_client-reference-manifest.js +1 -1
  23. package/dist/dashboard/.next/server/app/api/auth/setup/route_client-reference-manifest.js +1 -1
  24. package/dist/dashboard/.next/server/app/api/overview/route_client-reference-manifest.js +1 -1
  25. package/dist/dashboard/.next/server/app/api/stream/route_client-reference-manifest.js +1 -1
  26. package/dist/dashboard/.next/server/app/api/tasks/[taskId]/cancel/route_client-reference-manifest.js +1 -1
  27. package/dist/dashboard/.next/server/app/api/tasks/[taskId]/conversation/route_client-reference-manifest.js +1 -1
  28. package/dist/dashboard/.next/server/app/api/tasks/[taskId]/route_client-reference-manifest.js +1 -1
  29. package/dist/dashboard/.next/server/app/login/page_client-reference-manifest.js +1 -1
  30. package/dist/dashboard/.next/server/app/login.html +1 -1
  31. package/dist/dashboard/.next/server/app/login.rsc +1 -1
  32. package/dist/dashboard/.next/server/app/page_client-reference-manifest.js +1 -1
  33. package/dist/dashboard/.next/server/app/setup/page_client-reference-manifest.js +1 -1
  34. package/dist/dashboard/.next/server/app/setup.html +1 -1
  35. package/dist/dashboard/.next/server/app/setup.rsc +1 -1
  36. package/dist/dashboard/.next/server/app-paths-manifest.json +5 -5
  37. package/dist/dashboard/.next/server/functions-config-manifest.json +4 -4
  38. package/dist/dashboard/.next/server/pages/404.html +1 -1
  39. package/dist/dashboard/.next/server/pages/500.html +1 -1
  40. package/dist/index.js +5 -1
  41. package/dist/onboard.d.ts +16 -2
  42. package/dist/onboard.js +128 -9
  43. package/dist/orchestration/dispatch.d.ts +2 -1
  44. package/dist/orchestration/dispatch.js +157 -41
  45. package/dist/orchestration/evidence.js +17 -3
  46. package/dist/orchestration/finalize.js +2 -2
  47. package/dist/orchestration/report.js +6 -1
  48. package/dist/orchestration/worker.d.ts +1 -1
  49. package/dist/orchestration/worker.js +17 -2
  50. package/dist/rules/templates.js +3 -6
  51. package/dist/state/tasks.d.ts +7 -0
  52. package/package.json +1 -1
  53. package/skills/zigrix-main-agent-guide/SKILL.md +118 -0
  54. /package/dist/dashboard/.next/static/{2a4glWei05xr4Jg0Ly6cp → TlUj0t8APzTccK13DVZZW}/_buildManifest.js +0 -0
  55. /package/dist/dashboard/.next/static/{2a4glWei05xr4Jg0Ly6cp → TlUj0t8APzTccK13DVZZW}/_ssgManifest.js +0 -0
@@ -1 +1 @@
1
- globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/setup/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"470":{"*":{"id":"39508","name":"*","chunks":[],"async":false}},"622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"5554":{"*":{"id":"13932","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}},"9181":{"*":{"id":"80137","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/globals.css":{"id":3673,"name":"*","chunks":["177","static/chunks/app/layout-96206a34ff37a783.js"],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/SetupForm.tsx":{"id":470,"name":"*","chunks":["620","static/chunks/app/setup/page-a01ab6e2460293c3.js"],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/LoginForm.tsx":{"id":5554,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/DashboardClient.tsx":{"id":9181,"name":"*","chunks":["856","static/chunks/856-4671c40140d5540a.js","974","static/chunks/app/page-25f54e54e74fb3af.js"],"async":false}},"entryCSSFiles":{"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/":[],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/layout":[{"inlined":false,"path":"static/css/9f7ffdac282b0450.css"}],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/page":[{"inlined":false,"path":"static/css/94d75aff24d0c077.css"}],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/setup/page":[{"inlined":false,"path":"static/css/1f406f685b1e941e.css"}]},"rscModuleMapping":{"470":{"*":{"id":"90726","name":"*","chunks":[],"async":false}},"622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"3673":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"5554":{"*":{"id":"35894","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}},"9181":{"*":{"id":"45146","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
1
+ globalThis.__RSC_MANIFEST=(globalThis.__RSC_MANIFEST||{});globalThis.__RSC_MANIFEST["/setup/page"]={"moduleLoading":{"prefix":"/_next/"},"ssrModuleMapping":{"470":{"*":{"id":"39508","name":"*","chunks":[],"async":false}},"622":{"*":{"id":"82146","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"31603","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"75170","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"12263","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"78922","name":"*","chunks":[],"async":false}},"5554":{"*":{"id":"13932","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"54160","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"68495","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"29234","name":"*","chunks":[],"async":false}},"9181":{"*":{"id":"80137","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"77526","name":"*","chunks":[],"async":false}}},"edgeSSRModuleMapping":{},"clientModules":{"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/builtin/global-error.js":{"id":7150,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/client-page.js":{"id":1959,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/client-segment.js":{"id":7989,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/http-access-fallback/error-boundary.js":{"id":3886,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/layout-router.js":{"id":9766,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/metadata/async-metadata.js":{"id":5278,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/client/components/render-from-template-context.js":{"id":8924,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/lib/framework/boundary-components.js":{"id":4431,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/node_modules/next/dist/esm/lib/metadata/generate/icon-mark.js":{"id":622,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/globals.css":{"id":3673,"name":"*","chunks":["177","static/chunks/app/layout-96206a34ff37a783.js"],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/LoginForm.tsx":{"id":5554,"name":"*","chunks":[],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/SetupForm.tsx":{"id":470,"name":"*","chunks":["620","static/chunks/app/setup/page-a01ab6e2460293c3.js"],"async":false},"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/components/DashboardClient.tsx":{"id":9181,"name":"*","chunks":["856","static/chunks/856-4671c40140d5540a.js","974","static/chunks/app/page-25f54e54e74fb3af.js"],"async":false}},"entryCSSFiles":{"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/":[],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/layout":[{"inlined":false,"path":"static/css/9f7ffdac282b0450.css"}],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/page":[{"inlined":false,"path":"static/css/94d75aff24d0c077.css"}],"/Users/janos/.openclaw/workspace/projects/zigrix/dashboard/src/app/setup/page":[{"inlined":false,"path":"static/css/1f406f685b1e941e.css"}]},"rscModuleMapping":{"470":{"*":{"id":"90726","name":"*","chunks":[],"async":false}},"622":{"*":{"id":"51384","name":"*","chunks":[],"async":false}},"1959":{"*":{"id":"23597","name":"*","chunks":[],"async":false}},"3673":{"*":{"id":"61135","name":"*","chunks":[],"async":false}},"3886":{"*":{"id":"89748","name":"*","chunks":[],"async":false}},"4431":{"*":{"id":"73041","name":"*","chunks":[],"async":false}},"5278":{"*":{"id":"7184","name":"*","chunks":[],"async":false}},"5554":{"*":{"id":"35894","name":"*","chunks":[],"async":false}},"7150":{"*":{"id":"81170","name":"*","chunks":[],"async":false}},"7989":{"*":{"id":"36893","name":"*","chunks":[],"async":false}},"8924":{"*":{"id":"69576","name":"*","chunks":[],"async":false}},"9181":{"*":{"id":"45146","name":"*","chunks":[],"async":false}},"9766":{"*":{"id":"6060","name":"*","chunks":[],"async":false}}},"edgeRscModuleMapping":{}}
@@ -1 +1 @@
1
- <!DOCTYPE html><!--2a4glWei05xr4Jg0Ly6cp--><html lang="ko"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/9f7ffdac282b0450.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1f406f685b1e941e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1c485544eee88ef7.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-ebd51be49873d76c.js" async=""></script><script src="/_next/static/chunks/main-app-458501fc143f8dcb.js" async=""></script><script src="/_next/static/chunks/app/setup/page-a01ab6e2460293c3.js" async=""></script><title>Zigrix Dashboard</title><meta name="description" content="Zigrix task orchestration dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><main class="AuthForm_page__BW2iZ"><section class="AuthForm_card__Ksq5w"><h1 class="AuthForm_title__0zwBF">Zigrix Setup</h1><p class="AuthForm_desc__5DseA">최초 관리자 계정을 생성합니다.</p><form class="AuthForm_form__ugvBR"><label>Username<input required="" value=""/></label><label>Password (min 8)<input type="password" minLength="8" required="" value=""/></label><label>Password 확인<input type="password" minLength="8" required="" value=""/></label><button type="submit" class="AuthForm_submit__Y2aJX">관리자 계정 생성</button></form></section></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[470,[\"620\",\"static/chunks/app/setup/page-a01ab6e2460293c3.js\"],\"SetupForm\"]\n5:I[4431,[],\"OutletBoundary\"]\n7:I[5278,[],\"AsyncMetadataOutlet\"]\n9:I[4431,[],\"ViewportBoundary\"]\nb:I[4431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[7150,[],\"\"]\n:HL[\"/_next/static/css/9f7ffdac282b0450.css\",\"style\"]\n:HL[\"/_next/static/css/1f406f685b1e941e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"2a4glWei05xr4Jg0Ly6cp\",\"p\":\"\",\"c\":[\"\",\"setup\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"setup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f7ffdac282b0450.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"setup\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1f406f685b1e941e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Zigrix Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Zigrix task orchestration dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--TlUj0t8APzTccK13DVZZW--><html lang="ko"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/9f7ffdac282b0450.css" data-precedence="next"/><link rel="stylesheet" href="/_next/static/css/1f406f685b1e941e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1c485544eee88ef7.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-ebd51be49873d76c.js" async=""></script><script src="/_next/static/chunks/main-app-458501fc143f8dcb.js" async=""></script><script src="/_next/static/chunks/app/setup/page-a01ab6e2460293c3.js" async=""></script><title>Zigrix Dashboard</title><meta name="description" content="Zigrix task orchestration dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><main class="AuthForm_page__BW2iZ"><section class="AuthForm_card__Ksq5w"><h1 class="AuthForm_title__0zwBF">Zigrix Setup</h1><p class="AuthForm_desc__5DseA">최초 관리자 계정을 생성합니다.</p><form class="AuthForm_form__ugvBR"><label>Username<input required="" value=""/></label><label>Password (min 8)<input type="password" minLength="8" required="" value=""/></label><label>Password 확인<input type="password" minLength="8" required="" value=""/></label><button type="submit" class="AuthForm_submit__Y2aJX">관리자 계정 생성</button></form></section></main><!--$--><!--/$--><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[470,[\"620\",\"static/chunks/app/setup/page-a01ab6e2460293c3.js\"],\"SetupForm\"]\n5:I[4431,[],\"OutletBoundary\"]\n7:I[5278,[],\"AsyncMetadataOutlet\"]\n9:I[4431,[],\"ViewportBoundary\"]\nb:I[4431,[],\"MetadataBoundary\"]\nc:\"$Sreact.suspense\"\ne:I[7150,[],\"\"]\n:HL[\"/_next/static/css/9f7ffdac282b0450.css\",\"style\"]\n:HL[\"/_next/static/css/1f406f685b1e941e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"TlUj0t8APzTccK13DVZZW\",\"p\":\"\",\"c\":[\"\",\"setup\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"setup\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f7ffdac282b0450.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"setup\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L4\",null,{}],[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/1f406f685b1e941e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L5\",null,{\"children\":[\"$L6\",[\"$\",\"$L7\",null,{\"promise\":\"$@8\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[null,[[\"$\",\"$L9\",null,{\"children\":\"$La\"}],null],[\"$\",\"$Lb\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$c\",null,{\"fallback\":null,\"children\":\"$Ld\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$e\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"a:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n6:null\n"])</script><script>self.__next_f.push([1,"8:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Zigrix Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Zigrix task orchestration dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"d:\"$8:metadata\"\n"])</script></body></html>
@@ -10,7 +10,7 @@ c:"$Sreact.suspense"
10
10
  e:I[7150,[],""]
11
11
  :HL["/_next/static/css/9f7ffdac282b0450.css","style"]
12
12
  :HL["/_next/static/css/1f406f685b1e941e.css","style"]
13
- 0:{"P":null,"b":"2a4glWei05xr4Jg0Ly6cp","p":"","c":["","setup"],"i":false,"f":[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9f7ffdac282b0450.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"ko","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["setup",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/1f406f685b1e941e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6",["$","$L7",null,{"promise":"$@8"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L9",null,{"children":"$La"}],null],["$","$Lb",null,{"children":["$","div",null,{"hidden":true,"children":["$","$c",null,{"fallback":null,"children":"$Ld"}]}]}]]}],false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true}
13
+ 0:{"P":null,"b":"TlUj0t8APzTccK13DVZZW","p":"","c":["","setup"],"i":false,"f":[[["",{"children":["setup",{"children":["__PAGE__",{}]}]},"$undefined","$undefined",true],["",["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/9f7ffdac282b0450.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","html",null,{"lang":"ko","children":["$","body",null,{"children":["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]}]}]]}],{"children":["setup",["$","$1","c",{"children":[null,["$","$L2",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$L3",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],{"children":["__PAGE__",["$","$1","c",{"children":[["$","$L4",null,{}],[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/1f406f685b1e941e.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L5",null,{"children":["$L6",["$","$L7",null,{"promise":"$@8"}]]}]]}],{},null,false]},null,false]},null,false],["$","$1","h",{"children":[null,[["$","$L9",null,{"children":"$La"}],null],["$","$Lb",null,{"children":["$","div",null,{"hidden":true,"children":["$","$c",null,{"fallback":null,"children":"$Ld"}]}]}]]}],false]],"m":"$undefined","G":["$e",[]],"s":false,"S":true}
14
14
  a:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
15
15
  6:null
16
16
  8:{"metadata":[["$","title","0",{"children":"Zigrix Dashboard"}],["$","meta","1",{"name":"description","content":"Zigrix task orchestration dashboard"}]],"error":null,"digest":"$undefined"}
@@ -1,15 +1,15 @@
1
1
  {
2
2
  "/_not-found/page": "app/_not-found/page.js",
3
- "/api/auth/logout/route": "app/api/auth/logout/route.js",
3
+ "/api/overview/route": "app/api/overview/route.js",
4
4
  "/api/auth/session/route": "app/api/auth/session/route.js",
5
- "/api/auth/setup/route": "app/api/auth/setup/route.js",
6
5
  "/api/auth/login/route": "app/api/auth/login/route.js",
7
- "/api/overview/route": "app/api/overview/route.js",
6
+ "/api/auth/logout/route": "app/api/auth/logout/route.js",
7
+ "/api/tasks/[taskId]/route": "app/api/tasks/[taskId]/route.js",
8
8
  "/api/tasks/[taskId]/conversation/route": "app/api/tasks/[taskId]/conversation/route.js",
9
9
  "/api/tasks/[taskId]/cancel/route": "app/api/tasks/[taskId]/cancel/route.js",
10
- "/api/tasks/[taskId]/route": "app/api/tasks/[taskId]/route.js",
10
+ "/api/auth/setup/route": "app/api/auth/setup/route.js",
11
11
  "/api/stream/route": "app/api/stream/route.js",
12
- "/setup/page": "app/setup/page.js",
13
12
  "/login/page": "app/login/page.js",
13
+ "/setup/page": "app/setup/page.js",
14
14
  "/page": "app/page.js"
15
15
  }
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "version": 1,
3
3
  "functions": {
4
+ "/api/auth/logout": {},
5
+ "/api/tasks/[taskId]/conversation": {},
6
+ "/api/auth/login": {},
4
7
  "/api/auth/session": {},
5
8
  "/api/tasks/[taskId]/cancel": {},
6
9
  "/api/overview": {},
7
- "/api/auth/setup": {},
8
- "/api/auth/logout": {},
9
10
  "/api/tasks/[taskId]": {},
10
- "/api/auth/login": {},
11
- "/api/tasks/[taskId]/conversation": {},
11
+ "/api/auth/setup": {},
12
12
  "/api/stream": {},
13
13
  "/_middleware": {
14
14
  "runtime": "nodejs",
@@ -1 +1 @@
1
- <!DOCTYPE html><!--2a4glWei05xr4Jg0Ly6cp--><html lang="ko"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/9f7ffdac282b0450.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1c485544eee88ef7.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-ebd51be49873d76c.js" async=""></script><script src="/_next/static/chunks/main-app-458501fc143f8dcb.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Zigrix Dashboard</title><meta name="description" content="Zigrix task orchestration dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[4431,[],\"OutletBoundary\"]\n6:I[5278,[],\"AsyncMetadataOutlet\"]\n8:I[4431,[],\"ViewportBoundary\"]\na:I[4431,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[7150,[],\"\"]\n:HL[\"/_next/static/css/9f7ffdac282b0450.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"2a4glWei05xr4Jg0Ly6cp\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f7ffdac282b0450.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],null],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Zigrix Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Zigrix task orchestration dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script></body></html>
1
+ <!DOCTYPE html><!--TlUj0t8APzTccK13DVZZW--><html lang="ko"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/9f7ffdac282b0450.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-1c485544eee88ef7.js"/><script src="/_next/static/chunks/4bd1b696-c023c6e3521b1417.js" async=""></script><script src="/_next/static/chunks/255-ebd51be49873d76c.js" async=""></script><script src="/_next/static/chunks/main-app-458501fc143f8dcb.js" async=""></script><meta name="robots" content="noindex"/><title>404: This page could not be found.</title><title>Zigrix Dashboard</title><meta name="description" content="Zigrix task orchestration dashboard"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body><div hidden=""><!--$--><!--/$--></div><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding:0 23px 0 0;font-size:24px;font-weight:500;vertical-align:top;line-height:49px">404</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:49px;margin:0">This page could not be found.</h2></div></div></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[9766,[],\"\"]\n3:I[8924,[],\"\"]\n4:I[4431,[],\"OutletBoundary\"]\n6:I[5278,[],\"AsyncMetadataOutlet\"]\n8:I[4431,[],\"ViewportBoundary\"]\na:I[4431,[],\"MetadataBoundary\"]\nb:\"$Sreact.suspense\"\nd:I[7150,[],\"\"]\n:HL[\"/_next/static/css/9f7ffdac282b0450.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"b\":\"TlUj0t8APzTccK13DVZZW\",\"p\":\"\",\"c\":[\"\",\"_not-found\"],\"i\":false,\"f\":[[[\"\",{\"children\":[\"/_not-found\",{\"children\":[\"__PAGE__\",{}]}]},\"$undefined\",\"$undefined\",true],[\"\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/9f7ffdac282b0450.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"ko\",\"children\":[\"$\",\"body\",null,{\"children\":[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]]}],{\"children\":[\"/_not-found\",[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$L2\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L3\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],{\"children\":[\"__PAGE__\",[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],null,[\"$\",\"$L4\",null,{\"children\":[\"$L5\",[\"$\",\"$L6\",null,{\"promise\":\"$@7\"}]]}]]}],{},null,false]},null,false]},null,false],[\"$\",\"$1\",\"h\",{\"children\":[[\"$\",\"meta\",null,{\"name\":\"robots\",\"content\":\"noindex\"}],[[\"$\",\"$L8\",null,{\"children\":\"$L9\"}],null],[\"$\",\"$La\",null,{\"children\":[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$b\",null,{\"fallback\":null,\"children\":\"$Lc\"}]}]}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$d\",[]],\"s\":false,\"S\":true}\n"])</script><script>self.__next_f.push([1,"9:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n5:null\n"])</script><script>self.__next_f.push([1,"7:{\"metadata\":[[\"$\",\"title\",\"0\",{\"children\":\"Zigrix Dashboard\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Zigrix task orchestration dashboard\"}]],\"error\":null,\"digest\":\"$undefined\"}\n"])</script><script>self.__next_f.push([1,"c:\"$7:metadata\"\n"])</script></body></html>
@@ -1 +1 @@
1
- <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" defer=""></script><script src="/_next/static/chunks/framework-de98b93a850cfc71.js" defer=""></script><script src="/_next/static/chunks/main-cac4989ed66738c4.js" defer=""></script><script src="/_next/static/chunks/pages/_app-7d307437aca18ad4.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js" defer=""></script><script src="/_next/static/2a4glWei05xr4Jg0Ly6cp/_buildManifest.js" defer=""></script><script src="/_next/static/2a4glWei05xr4Jg0Ly6cp/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"2a4glWei05xr4Jg0Ly6cp","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
1
+ <!DOCTYPE html><html><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="width=device-width" data-next-head=""/><title data-next-head="">500: Internal Server Error</title><noscript data-n-css=""></noscript><script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script><script src="/_next/static/chunks/webpack-1c485544eee88ef7.js" defer=""></script><script src="/_next/static/chunks/framework-de98b93a850cfc71.js" defer=""></script><script src="/_next/static/chunks/main-cac4989ed66738c4.js" defer=""></script><script src="/_next/static/chunks/pages/_app-7d307437aca18ad4.js" defer=""></script><script src="/_next/static/chunks/pages/_error-cb2a52f75f2162e2.js" defer=""></script><script src="/_next/static/TlUj0t8APzTccK13DVZZW/_buildManifest.js" defer=""></script><script src="/_next/static/TlUj0t8APzTccK13DVZZW/_ssgManifest.js" defer=""></script></head><body><div id="__next"><div style="font-family:system-ui,&quot;Segoe UI&quot;,Roboto,Helvetica,Arial,sans-serif,&quot;Apple Color Emoji&quot;,&quot;Segoe UI Emoji&quot;;height:100vh;text-align:center;display:flex;flex-direction:column;align-items:center;justify-content:center"><div style="line-height:48px"><style>body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}</style><h1 class="next-error-h1" style="display:inline-block;margin:0 20px 0 0;padding-right:23px;font-size:24px;font-weight:500;vertical-align:top">500</h1><div style="display:inline-block"><h2 style="font-size:14px;font-weight:400;line-height:28px">Internal Server Error<!-- -->.</h2></div></div></div></div><script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{"statusCode":500}},"page":"/_error","query":{},"buildId":"TlUj0t8APzTccK13DVZZW","nextExport":true,"isFallback":false,"gip":true,"scriptLoader":[]}</script></body></html>
package/dist/index.js CHANGED
@@ -82,10 +82,12 @@ program
82
82
  .option('--yes', 'non-interactive confirmation')
83
83
  .option('--json', 'JSON output')
84
84
  .option('--project-dir <path>', 'path to project directory containing orchestration/rules/')
85
+ .option('--orchestrator-id <agentId>', 'set orchestration orchestrator agent id')
85
86
  .action(async (options) => {
86
87
  const result = await runOnboard({
87
88
  yes: Boolean(options.yes),
88
89
  projectDir: options.projectDir,
90
+ orchestratorId: options.orchestratorId,
89
91
  silent: Boolean(options.json),
90
92
  });
91
93
  printValue(result, options.json ?? true);
@@ -97,6 +99,7 @@ program
97
99
  .option('--section <section>', 'reconfigure specific section (agents|rules|workspace|path|skills), repeatable', (value, prev = []) => [...prev, value], [])
98
100
  .option('--projects-base-dir <path>', 'set projects base directory')
99
101
  .option('--project-dir <path>', 'path to project directory containing orchestration/rules/')
102
+ .option('--orchestrator-id <agentId>', 'set orchestration orchestrator agent id')
100
103
  .option('--yes', 'non-interactive confirmation')
101
104
  .option('--json', 'JSON output')
102
105
  .action(async (options) => {
@@ -105,6 +108,7 @@ program
105
108
  yes: Boolean(options.yes),
106
109
  projectDir: options.projectDir,
107
110
  projectsBaseDir: options.projectsBaseDir,
111
+ orchestratorId: options.orchestratorId,
108
112
  silent: Boolean(options.json),
109
113
  });
110
114
  printValue(result, options.json ?? true);
@@ -519,7 +523,7 @@ task
519
523
  .option('--json')
520
524
  .action((options) => {
521
525
  const loaded = loadRuntime({ baseDir: options.baseDir, config: options.config });
522
- const result = dispatchTask(loaded.paths, {
526
+ const result = dispatchTask(loaded.paths, loaded.config, {
523
527
  title: options.title,
524
528
  description: options.description,
525
529
  scale: options.scale,
package/dist/onboard.d.ts CHANGED
@@ -1,3 +1,4 @@
1
+ import { type StandardAgentRole } from './agents/roles.js';
1
2
  import type { ZigrixConfig } from './config/schema.js';
2
3
  import { type ZigrixPaths } from './state/paths.js';
3
4
  export interface OpenClawAgent {
@@ -14,6 +15,7 @@ export interface OpenClawConfig {
14
15
  list?: OpenClawAgent[];
15
16
  };
16
17
  }
18
+ export type AgentRoleAssignments = Record<string, StandardAgentRole>;
17
19
  export interface PathStabilizeResult {
18
20
  alreadyInPath: boolean;
19
21
  symlinkCreated: boolean;
@@ -50,12 +52,13 @@ export interface OnboardResult {
50
52
  export interface RunOnboardOptions {
51
53
  yes?: boolean;
52
54
  projectDir?: string;
55
+ orchestratorId?: string;
53
56
  silent?: boolean;
54
57
  }
55
58
  export declare function detectOpenClawHome(): string;
56
59
  export declare function loadOpenClawConfig(openclawHome: string): OpenClawConfig | null;
57
60
  export declare function filterAgents(agents: OpenClawAgent[]): OpenClawAgent[];
58
- export declare function registerAgents(config: ZigrixConfig, agents: OpenClawAgent[]): {
61
+ export declare function registerAgents(config: ZigrixConfig, agents: OpenClawAgent[], roleAssignments?: AgentRoleAssignments): {
59
62
  config: ZigrixConfig;
60
63
  registered: string[];
61
64
  skipped: string[];
@@ -69,7 +72,10 @@ export declare function seedRules(sourceDir: string, targetDir: string): {
69
72
  skipped: string[];
70
73
  source: string;
71
74
  };
72
- export declare function checkZigrixInPath(): boolean;
75
+ export declare const STABLE_SHELL_PATHS: string[];
76
+ export declare function checkZigrixInPath(opts?: {
77
+ _overrideStablePaths?: string[];
78
+ }): boolean;
73
79
  /**
74
80
  * Resolve the path to the zigrix CLI entry point (dist/index.js).
75
81
  * Works whether installed via npm link, npm install -g, or local checkout.
@@ -94,9 +100,11 @@ export declare function findUserBinDir(): string;
94
100
  * 2. ~/.local/bin — user-local fallback; may not be in PATH, shows warning if so
95
101
  *
96
102
  * @param opts._overrideSystemBinDir - Override system bin dir selection (for testing)
103
+ * @param opts._overrideStablePaths - Override stable paths list (for testing)
97
104
  */
98
105
  export declare function ensureZigrixInPath(opts?: {
99
106
  _overrideSystemBinDir?: string | null;
107
+ _overrideStablePaths?: string[];
100
108
  }): PathStabilizeResult;
101
109
  /**
102
110
  * Find the skills/ directory bundled with this zigrix package.
@@ -113,4 +121,10 @@ export declare function registerSkills(openclawHome: string): SkillRegistrationR
113
121
  * Space to toggle, Enter to confirm. All agents pre-selected by default.
114
122
  */
115
123
  export declare function promptAgentSelection(agents: OpenClawAgent[]): Promise<OpenClawAgent[]>;
124
+ export declare function promptAgentRoleAssignments(agents: OpenClawAgent[]): Promise<AgentRoleAssignments>;
125
+ export declare function ensureOrchestratorId(config: ZigrixConfig, preferredId?: string): {
126
+ config: ZigrixConfig;
127
+ changed: boolean;
128
+ warning?: string;
129
+ };
116
130
  export declare function runOnboard(options: RunOnboardOptions): Promise<OnboardResult>;
package/dist/onboard.js CHANGED
@@ -2,6 +2,7 @@ import fs from 'node:fs';
2
2
  import path from 'node:path';
3
3
  import { fileURLToPath } from 'node:url';
4
4
  import { addAgent } from './agents/registry.js';
5
+ import { inferStandardAgentRole, STANDARD_AGENT_ROLES } from './agents/roles.js';
5
6
  import { loadConfig, writeConfigFile, writeDefaultConfig } from './config/load.js';
6
7
  import { ensureBaseState, resolvePaths } from './state/paths.js';
7
8
  import { rebuildIndex } from './state/tasks.js';
@@ -28,7 +29,7 @@ export function filterAgents(agents) {
28
29
  return agents.filter((a) => a.id !== 'main');
29
30
  }
30
31
  // ─── Agent registration ───────────────────────────────────────────────────────
31
- export function registerAgents(config, agents) {
32
+ export function registerAgents(config, agents, roleAssignments) {
32
33
  let current = structuredClone(config);
33
34
  const registered = [];
34
35
  const skipped = [];
@@ -38,7 +39,10 @@ export function registerAgents(config, agents) {
38
39
  skipped.push(agent.id);
39
40
  continue;
40
41
  }
41
- const role = agent.identity?.theme ?? 'assistant';
42
+ const role = roleAssignments?.[agent.id] ?? inferStandardAgentRole({
43
+ agentId: agent.id,
44
+ theme: agent.identity?.theme ?? null,
45
+ });
42
46
  const result = addAgent(current, {
43
47
  id: agent.id,
44
48
  role,
@@ -102,9 +106,9 @@ export function seedRules(sourceDir, targetDir) {
102
106
  return { copied, skipped, source: effectiveSource === sourceDir ? 'external' : 'bundled' };
103
107
  }
104
108
  // ─── PATH check and stabilization ─────────────────────────────────────────────
105
- export function checkZigrixInPath() {
106
- const pathEnv = process.env.PATH ?? '';
107
- const dirs = pathEnv.split(path.delimiter).filter(Boolean);
109
+ export const STABLE_SHELL_PATHS = ['/usr/local/bin', '/usr/bin', '/bin', '/usr/sbin', '/sbin'];
110
+ export function checkZigrixInPath(opts) {
111
+ const dirs = opts?._overrideStablePaths ?? STABLE_SHELL_PATHS;
108
112
  for (const dir of dirs) {
109
113
  try {
110
114
  if (!fs.existsSync(dir))
@@ -215,9 +219,10 @@ export function findUserBinDir() {
215
219
  * 2. ~/.local/bin — user-local fallback; may not be in PATH, shows warning if so
216
220
  *
217
221
  * @param opts._overrideSystemBinDir - Override system bin dir selection (for testing)
222
+ * @param opts._overrideStablePaths - Override stable paths list (for testing)
218
223
  */
219
224
  export function ensureZigrixInPath(opts) {
220
- if (checkZigrixInPath()) {
225
+ if (checkZigrixInPath({ _overrideStablePaths: opts?._overrideStablePaths })) {
221
226
  return { alreadyInPath: true, symlinkCreated: false, symlinkPath: null, warning: null };
222
227
  }
223
228
  const binEntry = resolveZigrixBin();
@@ -249,7 +254,15 @@ export function ensureZigrixInPath(opts) {
249
254
  fs.chmodSync(symlinkPath, 0o755);
250
255
  return { alreadyInPath: false, symlinkCreated: true, symlinkPath, warning: null };
251
256
  }
252
- catch {
257
+ catch (e) {
258
+ if (e.code === 'EACCES') {
259
+ return {
260
+ alreadyInPath: false,
261
+ symlinkCreated: false,
262
+ symlinkPath: null,
263
+ warning: `Cannot write to ${systemBinDir} (permission denied). Run:\n sudo ln -sfn $(which zigrix) ${symlinkPath}`,
264
+ };
265
+ }
253
266
  // Fall through to user bin dir
254
267
  }
255
268
  }
@@ -418,6 +431,85 @@ export async function promptAgentSelection(agents) {
418
431
  return agents;
419
432
  }
420
433
  }
434
+ export async function promptAgentRoleAssignments(agents) {
435
+ const defaults = Object.fromEntries(agents.map((agent) => [agent.id, inferStandardAgentRole({ agentId: agent.id, theme: agent.identity?.theme ?? null })]));
436
+ if (agents.length === 0)
437
+ return defaults;
438
+ try {
439
+ const { checkbox } = await import('@inquirer/prompts');
440
+ const assignments = {};
441
+ for (const agent of agents) {
442
+ const suggested = defaults[agent.id];
443
+ let selected = [];
444
+ while (selected.length !== 1) {
445
+ selected = await checkbox({
446
+ message: `Assign role for ${agent.id} (space toggle + enter confirm, choose exactly one):`,
447
+ choices: STANDARD_AGENT_ROLES.map((role) => ({
448
+ name: `${role}${role === suggested ? ' (suggested)' : ''}`,
449
+ value: role,
450
+ checked: role === suggested,
451
+ })),
452
+ });
453
+ if (selected.length !== 1) {
454
+ console.log(`⚠️ Select exactly one role for ${agent.id}.`);
455
+ }
456
+ }
457
+ assignments[agent.id] = selected[0];
458
+ }
459
+ return assignments;
460
+ }
461
+ catch {
462
+ console.log('ℹ️ Non-interactive mode — inferring roles from agent ids/themes.');
463
+ return defaults;
464
+ }
465
+ }
466
+ export function ensureOrchestratorId(config, preferredId) {
467
+ const next = structuredClone(config);
468
+ const participants = new Set(next.agents.orchestration.participants);
469
+ const excluded = new Set(next.agents.orchestration.excluded);
470
+ const participantMode = participants.size > 0;
471
+ const eligible = Object.entries(next.agents.registry)
472
+ .filter(([agentId, agent]) => {
473
+ if (!agent.enabled)
474
+ return false;
475
+ if (agent.role !== 'orchestrator')
476
+ return false;
477
+ if (excluded.has(agentId))
478
+ return false;
479
+ if (participantMode && !participants.has(agentId))
480
+ return false;
481
+ return true;
482
+ })
483
+ .map(([agentId]) => agentId)
484
+ .sort();
485
+ const requested = preferredId?.trim();
486
+ const current = next.agents.orchestration.orchestratorId;
487
+ if (requested) {
488
+ if (!eligible.includes(requested)) {
489
+ return {
490
+ config: next,
491
+ changed: false,
492
+ warning: `requested orchestrator '${requested}' is not eligible (eligible: ${eligible.join(', ') || 'none'})`,
493
+ };
494
+ }
495
+ const changed = current !== requested;
496
+ next.agents.orchestration.orchestratorId = requested;
497
+ return { config: next, changed };
498
+ }
499
+ if (eligible.includes(current)) {
500
+ return { config: next, changed: false };
501
+ }
502
+ const fallback = eligible[0];
503
+ if (!fallback) {
504
+ return {
505
+ config: next,
506
+ changed: false,
507
+ warning: 'no eligible orchestrator role agent found. set one with --orchestrator-id after assigning roles.',
508
+ };
509
+ }
510
+ next.agents.orchestration.orchestratorId = fallback;
511
+ return { config: next, changed: true };
512
+ }
421
513
  // ─── Ensure config (idempotent) ───────────────────────────────────────────────
422
514
  function ensureConfig() {
423
515
  const existing = loadConfig({});
@@ -471,18 +563,45 @@ export async function runOnboard(options) {
471
563
  else {
472
564
  selectedAgents = await promptAgentSelection(allAgents);
473
565
  }
566
+ let nextConfig = loaded.config;
474
567
  if (selectedAgents.length > 0) {
475
- const result = registerAgents(loaded.config, selectedAgents);
568
+ const roleAssignments = options.yes
569
+ ? Object.fromEntries(selectedAgents.map((agent) => [agent.id, inferStandardAgentRole({ agentId: agent.id, theme: agent.identity?.theme ?? null })]))
570
+ : await promptAgentRoleAssignments(selectedAgents);
571
+ const result = registerAgents(nextConfig, selectedAgents, roleAssignments);
572
+ nextConfig = result.config;
476
573
  agentsRegistered = result.registered;
477
574
  agentsSkipped = result.skipped;
478
575
  if (agentsRegistered.length > 0) {
479
- writeConfigFile(configPath, result.config);
480
576
  log(`✅ Registered agents: ${agentsRegistered.join(', ')}`);
481
577
  }
482
578
  if (agentsSkipped.length > 0) {
483
579
  log(`⏭️ Already registered (skipped): ${agentsSkipped.join(', ')}`);
484
580
  }
485
581
  }
582
+ const orchResult = ensureOrchestratorId(nextConfig, options.orchestratorId);
583
+ nextConfig = orchResult.config;
584
+ if (orchResult.warning) {
585
+ warnings.push(orchResult.warning);
586
+ log(`⚠️ ${orchResult.warning}`);
587
+ }
588
+ if (agentsRegistered.length > 0 || orchResult.changed) {
589
+ writeConfigFile(configPath, nextConfig);
590
+ if (orchResult.changed) {
591
+ log(`✅ Orchestrator set to: ${nextConfig.agents.orchestration.orchestratorId}`);
592
+ }
593
+ }
594
+ }
595
+ if (!openclawConfig && options.orchestratorId) {
596
+ const orchResult = ensureOrchestratorId(loaded.config, options.orchestratorId);
597
+ if (orchResult.warning) {
598
+ warnings.push(orchResult.warning);
599
+ log(`⚠️ ${orchResult.warning}`);
600
+ }
601
+ if (orchResult.changed) {
602
+ writeConfigFile(configPath, orchResult.config);
603
+ log(`✅ Orchestrator set to: ${orchResult.config.agents.orchestration.orchestratorId}`);
604
+ }
486
605
  }
487
606
  // 4. Seed rules
488
607
  const projectDir = options.projectDir ?? process.cwd();
@@ -1,5 +1,6 @@
1
+ import type { ZigrixConfig } from '../config/schema.js';
1
2
  import { type ZigrixPaths } from '../state/paths.js';
2
- export declare function dispatchTask(paths: ZigrixPaths, params: {
3
+ export declare function dispatchTask(paths: ZigrixPaths, config: ZigrixConfig, params: {
3
4
  title: string;
4
5
  description: string;
5
6
  scale: string;