@yanglaofish/fishtools 0.1.4 → 0.3.0

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 (97) hide show
  1. package/README.md +79 -25
  2. package/manual/LICENSE +21 -0
  3. package/manual/README.md +199 -0
  4. package/manual/THIRD_PARTY_NOTICES.md +32 -0
  5. package/manual/docs/examples/action-plugin/LICENSE +21 -0
  6. package/manual/docs/examples/action-plugin/README.md +38 -0
  7. package/manual/docs/examples/action-plugin/index.js +18 -0
  8. package/manual/docs/examples/action-plugin/input.json +1 -0
  9. package/manual/docs/examples/action-plugin/package.json +9 -0
  10. package/manual/docs/examples/pipeline-reader/LICENSE +21 -0
  11. package/manual/docs/examples/pipeline-reader/index.js +14 -0
  12. package/manual/docs/examples/pipeline-reader/package.json +7 -0
  13. package/manual/docs/examples/pipeline-writer/LICENSE +21 -0
  14. package/manual/docs/examples/pipeline-writer/index.js +17 -0
  15. package/manual/docs/examples/pipeline-writer/package.json +7 -0
  16. package/manual/docs/plans/2026-10-10-workbench-ui.md +27 -0
  17. package/{docs → manual/docs}/plugin-development.md +172 -20
  18. package/{docs → manual/docs}/releases.md +32 -2
  19. package/manual/docs/research/2026-10-11-plugin-kernel-capabilities.md +167 -0
  20. package/manual/docs/roadmap.md +90 -0
  21. package/manual/docs/superpowers/plans/2026-10-09-workflow-mvp.md +115 -0
  22. package/manual/docs/superpowers/plans/2026-10-10-cordis-services.md +34 -0
  23. package/manual/docs/superpowers/plans/2026-10-10-fst-terminal.md +33 -0
  24. package/manual/docs/superpowers/plans/2026-10-10-portable-plugin-contract.md +35 -0
  25. package/manual/docs/superpowers/plans/2026-10-11-control-observation.md +77 -0
  26. package/manual/docs/superpowers/plans/2026-10-11-public-plugin-fixes.md +40 -0
  27. package/manual/docs/superpowers/plans/2026-10-11-terminal-hierarchy.md +40 -0
  28. package/manual/docs/superpowers/specs/2026-10-09-workflow-cli-design.md +377 -0
  29. package/manual/docs/superpowers/specs/2026-10-10-cordis-services-design.md +88 -0
  30. package/manual/docs/superpowers/specs/2026-10-10-portable-plugin-contract.md +31 -0
  31. package/manual/docs/superpowers/specs/2026-10-10-run-logs.md +28 -0
  32. package/manual/docs/superpowers/specs/2026-10-11-collapsed-plugin-output.md +23 -0
  33. package/manual/docs/superpowers/specs/2026-10-11-control-observation.md +37 -0
  34. package/{docs → manual/docs}/verification.md +97 -1
  35. package/manual/examples/service-plugins/README.md +20 -0
  36. package/manual/examples/service-plugins/consumer/LICENSE +21 -0
  37. package/manual/examples/service-plugins/consumer/index.js +14 -0
  38. package/manual/examples/service-plugins/consumer/package.json +1 -0
  39. package/manual/examples/service-plugins/provider/LICENSE +21 -0
  40. package/manual/examples/service-plugins/provider/index.js +19 -0
  41. package/manual/examples/service-plugins/provider/package.json +1 -0
  42. package/manual/packages/core/LICENSE +21 -0
  43. package/manual/packages/core/src/application.js +211 -0
  44. package/manual/packages/core/src/engine.js +93 -0
  45. package/manual/packages/core/src/host.js +124 -0
  46. package/manual/packages/core/src/runtime.js +135 -0
  47. package/manual/packages/core/src/terminal/run-feed.js +78 -0
  48. package/manual/packages/core/src/terminal/session.js +438 -0
  49. package/manual/packages/core/src/terminal/view.js +283 -0
  50. package/manual/packages/sdk/LICENSE +21 -0
  51. package/manual/packages/sdk/index.js +14 -0
  52. package/manual/packages/sdk/package.json +1 -0
  53. package/manual/plugins/environment/LICENSE +21 -0
  54. package/manual/plugins/environment/index.js +92 -0
  55. package/manual/plugins/environment/package.json +1 -0
  56. package/manual/plugins/examples/LICENSE +21 -0
  57. package/manual/plugins/examples/index.js +23 -0
  58. package/manual/plugins/examples/package.json +1 -0
  59. package/manual/plugins/examples/scripts/echo.py +5 -0
  60. package/manual/tests/application.test.js +75 -0
  61. package/node_modules/@mytools/core/bin/fst.js +12 -4
  62. package/node_modules/@mytools/core/src/application.js +11 -5
  63. package/node_modules/@mytools/core/src/cli-run.js +6 -0
  64. package/node_modules/@mytools/core/src/contracts.js +15 -2
  65. package/node_modules/@mytools/core/src/control.js +63 -0
  66. package/node_modules/@mytools/core/src/documentation.js +65 -0
  67. package/node_modules/@mytools/core/src/engine.js +80 -26
  68. package/node_modules/@mytools/core/src/host.js +15 -2
  69. package/node_modules/@mytools/core/src/markdown-log.js +9 -6
  70. package/node_modules/@mytools/core/src/process.js +49 -15
  71. package/node_modules/@mytools/core/src/project.js +1 -1
  72. package/node_modules/@mytools/core/src/run-logs.js +1 -1
  73. package/node_modules/@mytools/core/src/terminal/conditions.js +32 -0
  74. package/node_modules/@mytools/core/src/terminal/log-viewer.js +7 -8
  75. package/node_modules/@mytools/core/src/terminal/model.js +33 -4
  76. package/node_modules/@mytools/core/src/terminal/navigation.js +17 -0
  77. package/node_modules/@mytools/core/src/terminal/presentation.js +8 -10
  78. package/node_modules/@mytools/core/src/terminal/run-feed.js +78 -0
  79. package/node_modules/@mytools/core/src/terminal/run-presentation.js +60 -0
  80. package/node_modules/@mytools/core/src/terminal/run-viewer.js +104 -0
  81. package/node_modules/@mytools/core/src/terminal/session.js +212 -57
  82. package/node_modules/@mytools/core/src/terminal/theme.js +29 -0
  83. package/node_modules/@mytools/core/src/terminal/view.js +185 -33
  84. package/node_modules/@mytools/core/src/terminal/workflow-menu.js +50 -0
  85. package/node_modules/@mytools/core/src/validation.js +17 -4
  86. package/node_modules/@mytools/core/src/version.js +1 -1
  87. package/node_modules/@mytools/core/src/workflows.js +41 -19
  88. package/node_modules/@mytools/core/templates/control-demo.yaml +47 -0
  89. package/node_modules/@mytools/environment/index.js +14 -2
  90. package/node_modules/@mytools/pack/index.js +6 -2
  91. package/node_modules/@mytools/web/public/THIRD_PARTY_NOTICES.txt +780 -780
  92. package/node_modules/@mytools/web/public/assets/index-DT2B4tMV.js +70 -0
  93. package/node_modules/@mytools/web/public/assets/{index-BeV6IqTW.css → index-vuZvrUTT.css} +1 -1
  94. package/node_modules/@mytools/web/public/index.html +2 -2
  95. package/package.json +2 -2
  96. package/node_modules/@mytools/web/public/assets/index-TgsBnZgG.js +0 -70
  97. /package/{docs → manual/docs}/deployment.md +0 -0
@@ -1 +1 @@
1
- @font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:400;src:url(./geist-latin-400-normal-B40WzpMT.woff2)format("woff2"),url(./geist-latin-400-normal-akEymXtG.woff)format("woff")}@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:500;src:url(./geist-latin-500-normal-CTWBw9NS.woff2)format("woff2"),url(./geist-latin-500-normal-BDXIbFrL.woff)format("woff")}@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:600;src:url(./geist-latin-600-normal-CSETrqM2.woff2)format("woff2"),url(./geist-latin-600-normal-DsPlZH-9.woff)format("woff")}input:not([type=checkbox]),select,textarea{color:#304d3e;background:#fff;border:1px solid #cfdbd2;border-radius:6px;padding:9px 10px}input::placeholder,textarea::placeholder{color:#7b8d81}input:disabled{color:#68758c;background:0 0}fieldset{border:0;min-width:0;margin:0;padding:0}.rjsf{font-size:13px}.rjsf .form-group{margin-bottom:13px}.rjsf .control-label{color:#476253;margin-bottom:7px;font-size:13px;display:block}.rjsf input:not([type=checkbox]),.rjsf select,.rjsf textarea{width:100%;font-size:13px}.rjsf legend{margin:13px 0;padding:0;font-size:12px;font-weight:600}.rjsf .help-block,.rjsf .field-description{color:#657571;margin:5px 0 8px;font-size:12px;line-height:1.6}.rjsf .checkbox label{align-items:center;gap:7px;font-size:13px;display:flex}.rjsf input[type=checkbox]{accent-color:#137566}.rjsf .required{color:#c18678;margin-left:3px}.rjsf ul.error-detail{color:#b36359;padding-left:17px;font-size:12px}.rjsf .btn{color:#647799;font:inherit;cursor:pointer;background:#f5f7fb;border:1px solid #e0e6f0;border-radius:5px;padding:7px 11px}.rjsf .array-item{border:1px solid #e7ebf2;border-radius:6px;margin:8px 0;padding:10px}.rjsf .field-object{margin-bottom:10px}.rjsf .text-danger{color:#b46258}.rjsf .row{flex-wrap:wrap;display:flex}.rjsf .col-xs-9{width:75%}.rjsf .col-xs-3{width:25%}.rjsf .col-xs-12{width:100%}.rjsf .btn-group{gap:3px;display:flex}.rjsf .glyphicon-plus:before{content:"+"}.rjsf .glyphicon-remove:before{content:"×"}.rjsf .glyphicon-arrow-up:before{content:"↑"}.rjsf .glyphicon-arrow-down:before{content:"↓"}.rjsf .glyphicon-copy:before{content:"复制"}:root{color:#233734;font-synthesis:none;--ink:#233734;--muted:#657571;--line:#dce4e0;--accent:#137566;background:#f5f7f6;font-family:Geist,Segoe UI,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{margin:0;font-size:14px}button,input,select,textarea{font:inherit}button{cursor:pointer;transition:background .16s,border-color .16s,color .16s}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline-offset:3px;outline:3px solid #58ad9c}button svg{flex-shrink:0}input,select,textarea{min-width:0}p{line-height:1.75}h1,h2,h3,p{margin-top:0}button,a{-webkit-tap-highlight-color:transparent}.topbar{border-bottom:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;gap:20px;min-height:76px;padding:14px 32px;display:flex}.brand{color:var(--ink);text-align:left;background:0 0;border:0;align-items:center;gap:12px;padding:0;display:flex}.brand-mark{color:#fff;background:#153e35;border-radius:12px;place-items:center;width:42px;height:42px;display:grid}.brand strong{letter-spacing:-.6px;font-size:21px;font-weight:600}.brand strong span{letter-spacing:1px;color:var(--muted);margin-top:3px;font-size:11px;font-weight:400;display:block}.topbar-actions{align-items:center;gap:24px;display:flex}.local-label{color:var(--muted);align-items:center;gap:8px;font-size:12px;display:flex}.local-label i{background:#278772;border-radius:50%;width:6px;height:6px}.button{color:var(--ink);white-space:nowrap;background:#fff;border:1px solid #cfdad4;border-radius:8px;justify-content:center;align-items:center;gap:7px;min-height:40px;padding:10px 14px;font-size:13px;font-weight:500;display:inline-flex}.button:hover{background:#edf3f0;border-color:#aabfb4}.button.primary{color:#fff;background:var(--accent);border-color:var(--accent)}.button.primary:hover{background:#0d5b4e}.button.quiet{background:#f5f7f6;border-color:#e9eeeb}.count{color:#66796e;border-left:1px solid #d5dfd8;margin-left:3px;padding-left:9px;font-size:12px}.eyebrow{color:#58756a;letter-spacing:1px;font-size:12px;font-weight:500}.text-button{color:var(--accent);background:0 0;border:0;align-items:center;gap:6px;padding:6px 0;font-size:13px;display:inline-flex}.text-button:hover{color:#083d33}.icon{color:#61756b;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:7px;display:inline-flex}.icon:hover{color:var(--ink);background:#e7eeea}.muted{color:var(--muted);font-size:13px}.home{max-width:1240px;margin:0 auto;padding:52px 40px 28px}.welcome{border-bottom:1px solid var(--line);grid-template-columns:1.25fr 1fr;align-items:center;gap:64px;padding:4px 0 44px;display:grid}.welcome h1{letter-spacing:-1.8px;max-width:760px;margin:17px 0;font-size:clamp(32px,3.8vw,48px);font-weight:600;line-height:1.3}.welcome p{color:var(--muted);margin-bottom:0}.quick-guide{border-left:1px solid #d3dfd7;gap:23px;padding-left:26px;display:grid}.quick-guide>div{align-items:flex-start;gap:15px;display:flex}.quick-guide>div>span{color:#4f7362;border:1px solid #b6cdc0;border-radius:50%;flex-shrink:0;place-items:center;width:29px;height:29px;font-size:12px;display:grid}.quick-guide strong{font-size:14px;font-weight:600;line-height:29px}.quick-guide p{margin:3px 0 0;font-size:12px}.workflow-section{padding-top:34px}.section-heading{justify-content:space-between;align-items:center;gap:18px;margin-bottom:20px;display:flex}.section-heading h2{letter-spacing:-.4px;margin-bottom:6px;font-size:21px}.section-heading h2 span{color:#65816e;margin-left:8px;font-size:13px;font-weight:400}.section-heading p{color:var(--muted);margin-bottom:0;font-size:13px}.search{color:#7d9085;border:1px solid var(--line);background:#fff;border-radius:8px;align-items:center;gap:9px;padding:0 12px;display:flex}.search input:not([type=checkbox]){background:0 0;border:0;border-radius:0;width:100%;padding:12px 0;font-size:13px}.search input:focus-visible{outline-offset:0}.home-search{margin-bottom:20px}.home-search>span{white-space:nowrap;color:var(--muted);font-size:12px}.workflow-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-flow:dense;gap:18px;display:grid}.workflow-card{border:1px solid var(--line);background:#fff;border-radius:12px;flex-direction:column;min-width:0;padding:22px 22px 0;transition:border-color .18s,box-shadow .18s;display:flex}.workflow-card:hover,.workflow-card:focus-within{border-color:#8bb7a3;box-shadow:0 5px 20px #20392e08}.workflow-card>header{justify-content:space-between;align-items:center;margin-bottom:21px;display:flex}.workflow-icon{color:#44715a;background:#edf4ee;border-radius:10px;place-items:center;width:40px;height:40px;display:grid}.step-count{color:var(--muted);font-size:12px}.workflow-card h3{overflow-wrap:anywhere;margin-bottom:9px;font-size:17px;font-weight:600}.workflow-card>p{color:var(--muted);flex:1;margin-bottom:22px;font-size:13px}.workflow-card dl{gap:8px;margin:0 0 20px;font-size:12px;display:grid}.workflow-card dl>div{gap:13px;display:flex}.workflow-card dt{color:#758b7d;flex-shrink:0}.workflow-card dd{color:#486050;overflow-wrap:anywhere;margin:0}.card-open{width:100%;color:var(--accent);background:0 0;border:0;border-top:1px solid #e9eeeb;justify-content:space-between;align-items:center;padding:15px 0;font-weight:500;display:flex}.card-open:hover{color:#073b2b}.home-empty{text-align:center;color:var(--muted);padding:45px 15px}.home-empty h3{color:var(--ink);margin:15px 0 8px;font-size:16px}.home-footer{color:#6a7e72;justify-content:space-between;gap:18px;margin-top:36px;font-size:12px;display:flex}.home-footer span{align-items:center;gap:8px;display:inline-flex}.workspace{grid-template-columns:258px minmax(0,1fr) 320px;min-height:calc(100vh - 76px);display:grid}.library{border-right:1px solid var(--line);background:#fafcfb;min-width:0;padding:27px 18px}.library-heading h2{margin-bottom:6px;font-size:18px}.library-heading p{color:var(--muted);margin-bottom:21px;font-size:12px}.tabs{border-bottom:1px solid var(--line);gap:10px;margin:20px 0 16px;display:flex}.tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:0 0 12px;font-size:12px}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.tabs span{margin-left:4px;font-size:11px}.library-items{flex-direction:column;gap:12px;display:flex}.capability{border:1px solid var(--line);background:#fff;border-radius:9px;min-width:0;padding:15px}.capability:hover{border-color:#9dbeac}.capability-title{color:#395548;align-items:center;gap:8px;display:flex}.capability-title strong{color:var(--ink);font-size:13px;font-weight:500}.capability p{color:var(--muted);margin:11px 0 16px;font-size:12px}.capability-footer{justify-content:space-between;align-items:center;gap:10px;display:flex}.capability-footer>span{color:#728278;overflow-wrap:anywhere;min-width:0;font-size:11px}.capability-footer button{color:#14624b;white-space:nowrap;background:#eaf3ed;border:0;border-radius:5px;align-items:center;gap:3px;padding:6px 9px;font-size:12px;display:flex}.capability-footer button:hover{background:#d6e8dc}.library-open{margin-top:8px;font-size:11px}.library-note{color:#74867a;align-items:flex-start;gap:9px;padding-top:25px;font-size:11px;line-height:1.75;display:flex}.library-note svg{flex-shrink:0;margin-top:2px}.library-empty{padding:20px 0}.canvas{min-width:0;padding:0 34px 44px}.canvas-toolbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;height:65px;display:flex}.back-button{color:#5e7566;font-size:12px}.draft-tag{color:#627b6a;font-size:11px}.draft-tag.unsaved{color:#926027}.flow-heading{padding:24px 0 20px}.flow-heading input.flow-title{letter-spacing:-.8px;width:100%;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:5px;padding:6px 0;font-size:28px;font-weight:600;display:block}.flow-heading input.flow-description{width:100%;color:var(--muted);background:0 0;border:1px solid #0000;padding:6px 0;font-size:13px;display:block}.flow-heading input:hover:not(:disabled),.flow-heading input:focus-visible{border-bottom-color:#a6c3b1}.editor-guide{border-bottom:1px solid var(--line);color:#687f6e;flex-wrap:wrap;gap:10px 20px;margin-bottom:22px;padding-bottom:22px;font-size:11px;display:flex}.editor-guide span{align-items:center;gap:7px;display:inline-flex}.editor-guide b{border:1px solid #bacdc0;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10px;font-weight:500;display:grid}.flow-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:15px;margin-bottom:20px;display:flex}.flow-meta{color:#748579;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;display:flex}.flow-meta strong{color:#3f5f4e;font-size:12px;font-weight:500}.flow-meta .saved{color:#187754;align-items:center;gap:4px;display:flex}.action-group{flex-wrap:wrap;gap:7px;display:flex}.action-group .button{padding:9px 12px;font-size:12px}.step{cursor:pointer;background:#fff;border:1px solid #d6e1d9;border-radius:10px;align-items:center;gap:10px;min-width:0;padding:18px 12px;transition:border-color .18s,background .18s;display:flex;position:relative}.step:hover{border-color:#8eb89f}.step.selected{background:#fcfefd;border-color:#198260;box-shadow:0 0 0 2px #d7eae0}.step-number{color:#58725f;background:#eff4ef;border-radius:7px;flex-shrink:0;place-items:center;width:30px;height:30px;font-size:12px;display:grid}.step-text{min-width:0;color:var(--ink);text-align:left;background:0 0;border:0;flex:1;padding:3px 0}.step-text strong{font-size:14px;font-weight:500;display:block}.step-text>span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin-top:5px;font-size:12px;display:block;overflow:hidden}.step-text small{color:#2b7960;margin-top:8px;font-size:11px;display:block}.step-buttons{gap:0;display:flex}.step-buttons .icon{padding:6px}.grip{cursor:grab;touch-action:none;color:#8a9d90;padding:2px}.connector{color:#a5bcae;align-items:center;height:25px;padding-left:46px;display:flex}.step.succeeded .step-number{color:#21855a;background:#e0f1e7}.step.failed{border-color:#d09c91}.step.failed .step-number{color:#ae4937;background:#f9e8e4}.status-dot{background:#d7e4da;border-radius:50%;width:5px;height:5px}.status-dot.succeeded{background:#299a65}.status-dot.failed{background:#be6654}.status-dot.started{background:#299a65;animation:1s infinite pulse}.list-hint{color:#708576;text-align:center;padding:17px 0 4px;font-size:11px}.add-step-button{color:#397557;background:0 0;border:1px dashed #afc7b7;border-radius:8px;flex-wrap:wrap;justify-content:center;align-items:center;gap:7px;width:100%;margin:18px 0;padding:15px;font-size:13px;display:flex}.add-step-button span{color:var(--muted);margin-left:5px;font-size:11px}.add-step-button:hover{background:#edf5ef}.empty-editor{text-align:center;padding:28px 12px 18px}.empty-icon{color:#6b9476;background:#e6efe7;border-radius:12px;place-items:center;width:46px;height:46px;margin:0 auto 18px;display:grid}.empty-editor h3{margin-bottom:8px;font-size:17px}.empty-editor p{color:var(--muted);font-size:13px}.inspector{border-left:1px solid var(--line);background:#fff;min-width:0}.inspector-top{border-bottom:1px solid var(--line);justify-content:space-between;padding:24px;font-size:13px;font-weight:500;display:flex}.inspector-top span{color:var(--muted);font-size:11px;font-weight:400}.inspector-heading{padding:27px 24px 5px}.inspector-heading h2{margin:10px 0;font-size:19px;line-height:1.5}.inspector-heading p{color:var(--muted);font-size:12px}.inspector-section{border-top:1px solid #e9eeeb;padding:20px 24px}.inspector-section h3{margin-bottom:15px;font-size:13px;font-weight:500}.inspector-placeholder{text-align:center;color:#8da394;padding:80px 25px}.inspector-placeholder h3{color:#607e6a;margin:20px 0 10px;font-size:15px}.inspector-placeholder p{color:var(--muted);font-size:13px}.input-sources summary{cursor:pointer;font-size:13px}.input-sources summary span{color:var(--muted);margin:6px 0 0 14px;font-size:11px;display:block}.source-field{margin:17px 0 0;display:block}.source-field>span{justify-content:space-between;gap:10px;margin-bottom:8px;font-size:12px;display:flex}.source-field small{color:var(--muted);overflow-wrap:anywhere;font-size:10px}.source-field select{width:100%;font-size:12px}.output-field{flex-wrap:wrap;justify-content:space-between;gap:4px;margin-bottom:15px;font-size:12px;display:flex}.output-field code{color:#687f6c;background:#eef3ef;border-radius:3px;padding:2px 5px;font-size:10px}.output-field small{width:100%;color:var(--muted);font-size:10px}.workflow-outputs{border-top:1px solid var(--line);color:#4e6b59;padding:20px 0;font-size:12px}.workflow-outputs summary{cursor:pointer}.workflow-outputs summary span{color:var(--muted);margin-left:8px;font-size:11px}.output-binding{align-items:center;gap:8px;margin:14px 0;display:flex}.output-binding .output-name{width:100px}.output-binding select{flex:1;width:0;min-width:0;font-size:12px}.run-panel{border-top:1px solid var(--line);margin-top:0;padding-top:23px}.run-panel>header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.run-panel h3{margin:10px 0 0;font-size:17px;font-weight:500}.run-panel.succeeded h3{color:#197149}.run-panel.failed h3{color:#a74734}.run-events{flex-direction:column;gap:10px;display:flex}.event{color:#387f56;align-items:center;gap:8px;font-size:12px;display:flex}.event small{color:var(--muted);margin-left:auto}.event.bad{color:#aa5140}.result{margin-top:24px;font-size:12px}.result>span{color:var(--muted)}.result-value{border-left:3px solid #8fbea3;margin-top:12px;padding:4px 0 4px 14px}.result-value strong{color:#62816b;font-size:11px;font-weight:400}.result-value p{color:#254b34;white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 0;font-size:17px}.result pre,.run-error pre,.step-results pre{color:#425e4e;white-space:pre-wrap;overflow-wrap:anywhere;background:#edf2ee;border-radius:6px;max-height:260px;padding:14px;font-size:12px;line-height:1.7;overflow:auto}.run-error{color:#aa5140;overflow-wrap:anywhere;margin-top:15px;font-size:13px}.run-error summary,.step-results summary{cursor:pointer}.step-results{color:#5c7665;margin-top:22px;font-size:12px}.step-results strong{margin-top:17px;font-size:12px;font-weight:500;display:block}.run-id{color:#778c7c;overflow-wrap:anywhere;margin-top:18px;font-size:10px;display:block}.alert{border-radius:8px;align-items:center;gap:10px;padding:14px 18px;font-size:13px;line-height:1.7;display:flex}.alert.error{color:#a54a36;background:#fbeee9}.alert>span{overflow-wrap:anywhere;flex:1}.global-alert{margin:18px 30px}.loading-state{color:var(--muted);justify-content:center;gap:12px;padding:90px 20px;display:flex}.modal{width:560px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);color:var(--ink);background:#fff;border:1px solid #dce5de;border-radius:16px;padding:0;box-shadow:0 24px 100px #14271d33}.modal::backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#172c2466}.modal[open]{animation:.16s ease-out appear}.modal-content{padding:27px}.modal-content>header{justify-content:space-between;align-items:center;gap:15px;margin-bottom:22px;display:flex}.modal h2{margin:0;font-size:20px}.modal-footer{border-top:1px solid var(--line);justify-content:flex-end;gap:10px;margin-top:24px;padding-top:20px;display:flex}.modal .library-heading{display:none}.inspector-dialog{width:490px}.inspector-dialog .inspector-heading{padding:0 0 14px}.inspector-dialog .inspector-section{padding:20px 0}.plugin-list>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px 0;display:flex}.plugin-list strong{font-size:14px}.plugin-list p{color:var(--muted);overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.install-form{margin-top:25px}.install-form>label{font-size:14px;font-weight:500}.install-form>div{gap:9px;display:flex}.install-form input{flex:1;min-width:0}.danger{color:#ac503c}.check-row{align-items:center;gap:10px;padding:13px 0;font-size:13px;display:flex}.check-row input{accent-color:var(--accent);width:16px;height:16px}.check-row small{color:var(--muted);margin-left:auto}.export-options{border:1px solid var(--line);border-radius:8px;margin:20px 0;padding:5px 15px}.form-label{margin-top:20px;font-size:13px;display:block}.form-label select{width:100%;margin-top:10px;display:block}.export-status{background:#eef5f0;border-radius:8px;margin-top:20px;padding:16px;font-size:13px}.export-status p{overflow-wrap:anywhere;margin:10px 0;font-size:12px}.export-status.failed{background:#fbeee9}.field-error{overflow-wrap:anywhere;font-size:12px;line-height:1.7;display:block;color:#a34b34!important}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.4}}@keyframes appear{0%{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@media (width>=1600px){.workspace{grid-template-columns:280px minmax(0,1fr) 360px}.canvas{padding-left:60px;padding-right:60px}}@media (width<=1199px){.workspace{grid-template-columns:250px minmax(0,1fr)}.canvas{padding-left:26px;padding-right:26px}.home{padding:40px 30px 26px}.welcome{gap:35px}.workflow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.topbar{padding:14px 20px}.local-label{display:none}.home{padding:28px 20px}.welcome{grid-template-columns:1fr;gap:28px;padding-bottom:28px}.welcome h1{font-size:35px}.quick-guide{border:0;gap:18px;padding:0;display:flex}.quick-guide>div{flex:1;display:block}.quick-guide strong{margin-top:6px;font-size:12px;line-height:1.6;display:block}.quick-guide p{font-size:11px}.quick-guide>div>span{width:24px;height:24px;font-size:11px}.workspace{display:block}.workspace>.library{display:none}.canvas{padding:0 20px 30px}.home-footer{flex-direction:column;gap:8px}.step-buttons{flex-direction:column}.home-search>span{display:none}}@media (width<=480px){.workflow-grid{grid-template-columns:1fr}.workflow-card{padding:20px 20px 0}.welcome h1{font-size:32px}.welcome p{font-size:13px}.brand strong{font-size:19px}.brand strong span{display:none}.brand-mark{border-radius:9px;width:35px;height:35px}.topbar{gap:12px;min-height:64px;padding:12px 16px}.topbar .button{padding:8px 10px;font-size:12px}.topbar .count{display:none}.section-heading{align-items:flex-start}.section-heading h2{font-size:18px}.section-heading p{font-size:12px}.section-heading .button{padding:9px 11px;font-size:12px}.flow-heading input.flow-title{font-size:25px}.editor-guide{gap:10px}.editor-guide span{gap:4px;font-size:10px}.editor-guide b{width:16px;height:16px}.action-group{width:100%}.action-group .primary{flex:1}.add-step-button span{display:none}.modal-content{padding:20px}.modal h2{font-size:18px}.step{gap:7px;padding:12px 9px}.step-text>span{max-width:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}
1
+ @font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:400;src:url(./geist-latin-400-normal-B40WzpMT.woff2)format("woff2"),url(./geist-latin-400-normal-akEymXtG.woff)format("woff")}@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:500;src:url(./geist-latin-500-normal-CTWBw9NS.woff2)format("woff2"),url(./geist-latin-500-normal-BDXIbFrL.woff)format("woff")}@font-face{font-family:Geist;font-style:normal;font-display:swap;font-weight:600;src:url(./geist-latin-600-normal-CSETrqM2.woff2)format("woff2"),url(./geist-latin-600-normal-DsPlZH-9.woff)format("woff")}input:not([type=checkbox]),select,textarea{color:#304d3e;background:#fff;border:1px solid #cfdbd2;border-radius:6px;padding:9px 10px}input::placeholder,textarea::placeholder{color:#7b8d81}input:disabled{color:#68758c;background:0 0}fieldset{border:0;min-width:0;margin:0;padding:0}.rjsf{font-size:13px}.rjsf .form-group{margin-bottom:13px}.rjsf .control-label{color:#476253;margin-bottom:7px;font-size:13px;display:block}.rjsf input:not([type=checkbox]),.rjsf select,.rjsf textarea{width:100%;font-size:13px}.rjsf legend{margin:13px 0;padding:0;font-size:12px;font-weight:600}.rjsf .help-block,.rjsf .field-description{color:#657571;margin:5px 0 8px;font-size:12px;line-height:1.6}.rjsf .checkbox label{align-items:center;gap:7px;font-size:13px;display:flex}.rjsf input[type=checkbox]{accent-color:#137566}.rjsf .required{color:#c18678;margin-left:3px}.rjsf ul.error-detail{color:#b36359;padding-left:17px;font-size:12px}.rjsf .btn{color:#647799;font:inherit;cursor:pointer;background:#f5f7fb;border:1px solid #e0e6f0;border-radius:5px;padding:7px 11px}.rjsf .array-item{border:1px solid #e7ebf2;border-radius:6px;margin:8px 0;padding:10px}.rjsf .field-object{margin-bottom:10px}.rjsf .text-danger{color:#b46258}.rjsf .row{flex-wrap:wrap;display:flex}.rjsf .col-xs-9{width:75%}.rjsf .col-xs-3{width:25%}.rjsf .col-xs-12{width:100%}.rjsf .btn-group{gap:3px;display:flex}.rjsf .glyphicon-plus:before{content:"+"}.rjsf .glyphicon-remove:before{content:"×"}.rjsf .glyphicon-arrow-up:before{content:"↑"}.rjsf .glyphicon-arrow-down:before{content:"↓"}.rjsf .glyphicon-copy:before{content:"复制"}:root{color:#233734;font-synthesis:none;--ink:#233734;--muted:#657571;--line:#dce4e0;--accent:#137566;background:#f5f7f6;font-family:Geist,Segoe UI,Microsoft YaHei,sans-serif}*{box-sizing:border-box}body{margin:0;font-size:14px}button,input,select,textarea{font:inherit}button{cursor:pointer;transition:background .16s,border-color .16s,color .16s}button:disabled{cursor:not-allowed;opacity:.45}button:focus-visible,input:focus-visible,select:focus-visible,textarea:focus-visible,summary:focus-visible{outline-offset:3px;outline:3px solid #58ad9c}button svg{flex-shrink:0}input,select,textarea{min-width:0}p{line-height:1.75}h1,h2,h3,p{margin-top:0}button,a{-webkit-tap-highlight-color:transparent}.topbar{border-bottom:1px solid var(--line);background:#fff;justify-content:space-between;align-items:center;gap:20px;min-height:76px;padding:14px 32px;display:flex}.brand{color:var(--ink);text-align:left;background:0 0;border:0;align-items:center;gap:12px;padding:0;display:flex}.brand-mark{color:#fff;background:#153e35;border-radius:12px;place-items:center;width:42px;height:42px;display:grid}.brand strong{letter-spacing:-.6px;font-size:21px;font-weight:600}.brand strong span{letter-spacing:1px;color:var(--muted);margin-top:3px;font-size:11px;font-weight:400;display:block}.topbar-actions{align-items:center;gap:24px;display:flex}.local-label{color:var(--muted);align-items:center;gap:8px;font-size:12px;display:flex}.local-label i{background:#278772;border-radius:50%;width:6px;height:6px}.button{color:var(--ink);white-space:nowrap;background:#fff;border:1px solid #cfdad4;border-radius:8px;justify-content:center;align-items:center;gap:7px;min-height:40px;padding:10px 14px;font-size:13px;font-weight:500;display:inline-flex}.button:hover{background:#edf3f0;border-color:#aabfb4}.button.primary{color:#fff;background:var(--accent);border-color:var(--accent)}.button.primary:hover{background:#0d5b4e}.button.quiet{background:#f5f7f6;border-color:#e9eeeb}.count{color:#66796e;border-left:1px solid #d5dfd8;margin-left:3px;padding-left:9px;font-size:12px}.eyebrow{color:#58756a;letter-spacing:1px;font-size:12px;font-weight:500}.text-button{color:var(--accent);background:0 0;border:0;align-items:center;gap:6px;padding:6px 0;font-size:13px;display:inline-flex}.text-button:hover{color:#083d33}.icon{color:#61756b;background:0 0;border:0;border-radius:6px;justify-content:center;align-items:center;padding:7px;display:inline-flex}.icon:hover{color:var(--ink);background:#e7eeea}.muted{color:var(--muted);font-size:13px}.home{max-width:1240px;margin:0 auto;padding:52px 40px 28px}.welcome{border-bottom:1px solid var(--line);grid-template-columns:1.25fr 1fr;align-items:center;gap:64px;padding:4px 0 44px;display:grid}.welcome h1{letter-spacing:-1.8px;max-width:760px;margin:17px 0;font-size:clamp(32px,3.8vw,48px);font-weight:600;line-height:1.3}.welcome p{color:var(--muted);margin-bottom:0}.quick-guide{border-left:1px solid #d3dfd7;gap:23px;padding-left:26px;display:grid}.quick-guide>div{align-items:flex-start;gap:15px;display:flex}.quick-guide>div>span{color:#4f7362;border:1px solid #b6cdc0;border-radius:50%;flex-shrink:0;place-items:center;width:29px;height:29px;font-size:12px;display:grid}.quick-guide strong{font-size:14px;font-weight:600;line-height:29px}.quick-guide p{margin:3px 0 0;font-size:12px}.workflow-section{padding-top:34px}.section-heading{justify-content:space-between;align-items:center;gap:18px;margin-bottom:20px;display:flex}.section-heading h2{letter-spacing:-.4px;margin-bottom:6px;font-size:21px}.section-heading h2 span{color:#65816e;margin-left:8px;font-size:13px;font-weight:400}.section-heading p{color:var(--muted);margin-bottom:0;font-size:13px}.search{color:#7d9085;border:1px solid var(--line);background:#fff;border-radius:8px;align-items:center;gap:9px;padding:0 12px;display:flex}.search input:not([type=checkbox]){background:0 0;border:0;border-radius:0;width:100%;padding:12px 0;font-size:13px}.search input:focus-visible{outline-offset:0}.home-search{margin-bottom:20px}.home-search>span{white-space:nowrap;color:var(--muted);font-size:12px}.workflow-grid{grid-template-columns:repeat(3,minmax(0,1fr));grid-auto-flow:dense;gap:18px;display:grid}.workflow-card{border:1px solid var(--line);background:#fff;border-radius:12px;flex-direction:column;min-width:0;padding:22px 22px 0;transition:border-color .18s,box-shadow .18s;display:flex}.workflow-card:hover,.workflow-card:focus-within{border-color:#8bb7a3;box-shadow:0 5px 20px #20392e08}.workflow-card>header{justify-content:space-between;align-items:center;margin-bottom:21px;display:flex}.workflow-icon{color:#44715a;background:#edf4ee;border-radius:10px;place-items:center;width:40px;height:40px;display:grid}.step-count{color:var(--muted);font-size:12px}.workflow-card h3{overflow-wrap:anywhere;margin-bottom:9px;font-size:17px;font-weight:600}.workflow-card>p{color:var(--muted);flex:1;margin-bottom:22px;font-size:13px}.workflow-card dl{gap:8px;margin:0 0 20px;font-size:12px;display:grid}.workflow-card dl>div{gap:13px;display:flex}.workflow-card dt{color:#758b7d;flex-shrink:0}.workflow-card dd{color:#486050;overflow-wrap:anywhere;margin:0}.card-open{width:100%;color:var(--accent);background:0 0;border:0;border-top:1px solid #e9eeeb;justify-content:space-between;align-items:center;padding:15px 0;font-weight:500;display:flex}.card-open:hover{color:#073b2b}.home-empty{text-align:center;color:var(--muted);padding:45px 15px}.home-empty h3{color:var(--ink);margin:15px 0 8px;font-size:16px}.home-footer{color:#6a7e72;justify-content:space-between;gap:18px;margin-top:36px;font-size:12px;display:flex}.home-footer span{align-items:center;gap:8px;display:inline-flex}.workspace{grid-template-columns:258px minmax(0,1fr) 320px;min-height:calc(100vh - 76px);display:grid}.library{border-right:1px solid var(--line);background:#fafcfb;min-width:0;padding:27px 18px}.library-heading h2{margin-bottom:6px;font-size:18px}.library-heading p{color:var(--muted);margin-bottom:21px;font-size:12px}.tabs{border-bottom:1px solid var(--line);gap:10px;margin:20px 0 16px;display:flex}.tabs button{color:var(--muted);background:0 0;border:0;border-bottom:2px solid #0000;flex:1;padding:0 0 12px;font-size:12px}.tabs button.active{color:var(--accent);border-bottom-color:var(--accent);font-weight:600}.tabs span{margin-left:4px;font-size:11px}.library-items{flex-direction:column;gap:12px;display:flex}.capability{border:1px solid var(--line);background:#fff;border-radius:9px;min-width:0;padding:15px}.capability:hover{border-color:#9dbeac}.capability-title{color:#395548;align-items:center;gap:8px;display:flex}.capability-title strong{color:var(--ink);font-size:13px;font-weight:500}.capability p{color:var(--muted);margin:11px 0 16px;font-size:12px}.capability-footer{justify-content:space-between;align-items:center;gap:10px;display:flex}.capability-footer>span{color:#728278;overflow-wrap:anywhere;min-width:0;font-size:11px}.capability-footer button{color:#14624b;white-space:nowrap;background:#eaf3ed;border:0;border-radius:5px;align-items:center;gap:3px;padding:6px 9px;font-size:12px;display:flex}.capability-footer button:hover{background:#d6e8dc}.library-open{margin-top:8px;font-size:11px}.library-note{color:#74867a;align-items:flex-start;gap:9px;padding-top:25px;font-size:11px;line-height:1.75;display:flex}.library-note svg{flex-shrink:0;margin-top:2px}.library-empty{padding:20px 0}.canvas{min-width:0;padding:0 34px 44px}.canvas-toolbar{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:12px;height:65px;display:flex}.back-button{color:#5e7566;font-size:12px}.draft-tag{color:#627b6a;font-size:11px}.draft-tag.unsaved{color:#926027}.flow-heading{padding:24px 0 20px}.flow-heading input.flow-title{letter-spacing:-.8px;width:100%;color:var(--ink);background:0 0;border:1px solid #0000;border-radius:5px;padding:6px 0;font-size:28px;font-weight:600;display:block}.flow-heading input.flow-description{width:100%;color:var(--muted);background:0 0;border:1px solid #0000;padding:6px 0;font-size:13px;display:block}.flow-heading input:hover:not(:disabled),.flow-heading input:focus-visible{border-bottom-color:#a6c3b1}.editor-guide{border-bottom:1px solid var(--line);color:#687f6e;flex-wrap:wrap;gap:10px 20px;margin-bottom:22px;padding-bottom:22px;font-size:11px;display:flex}.editor-guide span{align-items:center;gap:7px;display:inline-flex}.editor-guide b{border:1px solid #bacdc0;border-radius:50%;place-items:center;width:18px;height:18px;font-size:10px;font-weight:500;display:grid}.flow-actions{flex-wrap:wrap;justify-content:space-between;align-items:center;gap:15px;margin-bottom:20px;display:flex}.flow-meta{color:#748579;flex-wrap:wrap;align-items:center;gap:8px;font-size:11px;display:flex}.flow-meta strong{color:#3f5f4e;font-size:12px;font-weight:500}.flow-meta .saved{color:#187754;align-items:center;gap:4px;display:flex}.action-group{flex-wrap:wrap;gap:7px;display:flex}.action-group .button{padding:9px 12px;font-size:12px}.step{cursor:pointer;background:#fff;border:1px solid #d6e1d9;border-radius:10px;align-items:center;gap:10px;min-width:0;padding:18px 12px;transition:border-color .18s,background .18s;display:flex;position:relative}.step:hover{border-color:#8eb89f}.step.selected{background:#fcfefd;border-color:#198260;box-shadow:0 0 0 2px #d7eae0}.step-number{color:#58725f;background:#eff4ef;border-radius:7px;flex-shrink:0;place-items:center;width:30px;height:30px;font-size:12px;display:grid}.step-text{min-width:0;color:var(--ink);text-align:left;background:0 0;border:0;flex:1;padding:3px 0}.step-text strong{font-size:14px;font-weight:500;display:block}.step-text>span{color:var(--muted);white-space:nowrap;text-overflow:ellipsis;margin-top:5px;font-size:12px;display:block;overflow:hidden}.step-text small{color:#2b7960;margin-top:8px;font-size:11px;display:block}.step-buttons{gap:0;display:flex}.step-buttons .icon{padding:6px}.grip{cursor:grab;touch-action:none;color:#8a9d90;padding:2px}.connector{color:#a5bcae;align-items:center;height:25px;padding-left:46px;display:flex}.step.succeeded .step-number{color:#21855a;background:#e0f1e7}.step.failed{border-color:#d09c91}.step.failed .step-number{color:#ae4937;background:#f9e8e4}.status-dot{background:#d7e4da;border-radius:50%;width:5px;height:5px}.status-dot.succeeded{background:#299a65}.status-dot.failed{background:#be6654}.status-dot.started{background:#299a65;animation:1s infinite pulse}.list-hint{color:#708576;text-align:center;padding:17px 0 4px;font-size:11px}.add-step-button{color:#397557;background:0 0;border:1px dashed #afc7b7;border-radius:8px;flex-wrap:wrap;justify-content:center;align-items:center;gap:7px;width:100%;margin:18px 0;padding:15px;font-size:13px;display:flex}.add-step-button span{color:var(--muted);margin-left:5px;font-size:11px}.add-step-button:hover{background:#edf5ef}.empty-editor{text-align:center;padding:28px 12px 18px}.empty-icon{color:#6b9476;background:#e6efe7;border-radius:12px;place-items:center;width:46px;height:46px;margin:0 auto 18px;display:grid}.empty-editor h3{margin-bottom:8px;font-size:17px}.empty-editor p{color:var(--muted);font-size:13px}.inspector{border-left:1px solid var(--line);background:#fff;min-width:0}.inspector-top{border-bottom:1px solid var(--line);justify-content:space-between;padding:24px;font-size:13px;font-weight:500;display:flex}.inspector-top span{color:var(--muted);font-size:11px;font-weight:400}.inspector-heading{padding:27px 24px 5px}.inspector-heading h2{margin:10px 0;font-size:19px;line-height:1.5}.inspector-heading p{color:var(--muted);font-size:12px}.inspector-section{border-top:1px solid #e9eeeb;padding:20px 24px}.inspector-section h3{margin-bottom:15px;font-size:13px;font-weight:500}.inspector-placeholder{text-align:center;color:#8da394;padding:80px 25px}.inspector-placeholder h3{color:#607e6a;margin:20px 0 10px;font-size:15px}.inspector-placeholder p{color:var(--muted);font-size:13px}.input-sources summary{cursor:pointer;font-size:13px}.input-sources summary span{color:var(--muted);margin:6px 0 0 14px;font-size:11px;display:block}.source-field{margin:17px 0 0;display:block}.source-field>span{justify-content:space-between;gap:10px;margin-bottom:8px;font-size:12px;display:flex}.source-field small{color:var(--muted);overflow-wrap:anywhere;font-size:10px}.source-field select{width:100%;font-size:12px}.output-field{flex-wrap:wrap;justify-content:space-between;gap:4px;margin-bottom:15px;font-size:12px;display:flex}.output-field code{color:#687f6c;background:#eef3ef;border-radius:3px;padding:2px 5px;font-size:10px}.output-field small{width:100%;color:var(--muted);font-size:10px}.workflow-outputs{border-top:1px solid var(--line);color:#4e6b59;padding:20px 0;font-size:12px}.workflow-outputs summary{cursor:pointer}.workflow-outputs summary span{color:var(--muted);margin-left:8px;font-size:11px}.output-binding{align-items:center;gap:8px;margin:14px 0;display:flex}.output-binding .output-name{width:100px}.output-binding select{flex:1;width:0;min-width:0;font-size:12px}.run-panel{border-top:1px solid var(--line);margin-top:0;padding-top:23px}.run-panel>header{justify-content:space-between;align-items:center;margin-bottom:16px;display:flex}.run-panel h3{margin:10px 0 0;font-size:17px;font-weight:500}.run-panel.succeeded h3{color:#197149}.run-panel.failed h3{color:#a74734}.run-events{flex-direction:column;gap:10px;display:flex}.event{color:#387f56;align-items:center;gap:8px;font-size:12px;display:flex}.event small{color:var(--muted);margin-left:auto}.event.bad{color:#aa5140}.result{margin-top:24px;font-size:12px}.result>span{color:var(--muted)}.result-value{border-left:3px solid #8fbea3;margin-top:12px;padding:4px 0 4px 14px}.result-value strong{color:#62816b;font-size:11px;font-weight:400}.result-value p{color:#254b34;white-space:pre-wrap;overflow-wrap:anywhere;margin:6px 0 0;font-size:17px}.result pre,.run-error pre,.step-results pre{color:#425e4e;white-space:pre-wrap;overflow-wrap:anywhere;background:#edf2ee;border-radius:6px;max-height:260px;padding:14px;font-size:12px;line-height:1.7;overflow:auto}.run-error{color:#aa5140;overflow-wrap:anywhere;margin-top:15px;font-size:13px}.run-error summary,.step-results summary{cursor:pointer}.step-results{color:#5c7665;margin-top:22px;font-size:12px}.step-results strong{margin-top:17px;font-size:12px;font-weight:500;display:block}.run-id{color:#778c7c;overflow-wrap:anywhere;margin-top:18px;font-size:10px;display:block}.alert{border-radius:8px;align-items:center;gap:10px;padding:14px 18px;font-size:13px;line-height:1.7;display:flex}.alert.error{color:#a54a36;background:#fbeee9}.alert>span{overflow-wrap:anywhere;flex:1}.global-alert{margin:18px 30px}.loading-state{color:var(--muted);justify-content:center;gap:12px;padding:90px 20px;display:flex}.modal{width:560px;max-width:calc(100vw - 32px);max-height:calc(100dvh - 40px);color:var(--ink);background:#fff;border:1px solid #dce5de;border-radius:16px;padding:0;box-shadow:0 24px 100px #14271d33}.modal::backdrop{-webkit-backdrop-filter:blur(3px);backdrop-filter:blur(3px);background:#172c2466}.modal[open]{animation:.16s ease-out appear}.modal-content{padding:27px}.modal-content>header{justify-content:space-between;align-items:center;gap:15px;margin-bottom:22px;display:flex}.modal h2{margin:0;font-size:20px}.modal-footer{border-top:1px solid var(--line);justify-content:flex-end;gap:10px;margin-top:24px;padding-top:20px;display:flex}.modal .library-heading{display:none}.inspector-dialog{width:490px}.inspector-dialog .inspector-heading{padding:0 0 14px}.inspector-dialog .inspector-section{padding:20px 0}.plugin-list>div{border-bottom:1px solid var(--line);justify-content:space-between;align-items:center;gap:16px;padding:18px 0;display:flex}.plugin-list strong{font-size:14px}.plugin-list p{color:var(--muted);overflow-wrap:anywhere;margin:6px 0 0;font-size:12px}.install-form{margin-top:25px}.install-form>label{font-size:14px;font-weight:500}.install-form>div{gap:9px;display:flex}.install-form input{flex:1;min-width:0}.danger{color:#ac503c}.check-row{align-items:center;gap:10px;padding:13px 0;font-size:13px;display:flex}.check-row input{accent-color:var(--accent);width:16px;height:16px}.check-row small{color:var(--muted);margin-left:auto}.export-options{border:1px solid var(--line);border-radius:8px;margin:20px 0;padding:5px 15px}.form-label{margin-top:20px;font-size:13px;display:block}.form-label select{width:100%;margin-top:10px;display:block}.export-status{background:#eef5f0;border-radius:8px;margin-top:20px;padding:16px;font-size:13px}.export-status p{overflow-wrap:anywhere;margin:10px 0;font-size:12px}.export-status.failed{background:#fbeee9}.field-error{overflow-wrap:anywhere;font-size:12px;line-height:1.7;display:block;color:#a34b34!important}.spin{animation:1s linear infinite spin}@keyframes spin{to{transform:rotate(360deg)}}@keyframes pulse{50%{opacity:.4}}@keyframes appear{0%{opacity:.5;transform:translateY(5px)}to{opacity:1;transform:translateY(0)}}@media (width>=1600px){.workspace{grid-template-columns:280px minmax(0,1fr) 360px}.canvas{padding-left:60px;padding-right:60px}}@media (width<=1199px){.workspace{grid-template-columns:250px minmax(0,1fr)}.canvas{padding-left:26px;padding-right:26px}.home{padding:40px 30px 26px}.welcome{gap:35px}.workflow-grid{grid-template-columns:repeat(2,minmax(0,1fr))}}@media (width<=760px){.topbar{padding:14px 20px}.local-label{display:none}.home{padding:28px 20px}.welcome{grid-template-columns:1fr;gap:28px;padding-bottom:28px}.welcome h1{font-size:35px}.quick-guide{border:0;gap:18px;padding:0;display:flex}.quick-guide>div{flex:1;display:block}.quick-guide strong{margin-top:6px;font-size:12px;line-height:1.6;display:block}.quick-guide p{font-size:11px}.quick-guide>div>span{width:24px;height:24px;font-size:11px}.workspace{display:block}.workspace>.library{display:none}.canvas{padding:0 20px 30px}.home-footer{flex-direction:column;gap:8px}.step-buttons{flex-direction:column}.home-search>span{display:none}}@media (width<=480px){.workflow-grid{grid-template-columns:1fr}.workflow-card{padding:20px 20px 0}.welcome h1{font-size:32px}.welcome p{font-size:13px}.brand strong{font-size:19px}.brand strong span{display:none}.brand-mark{border-radius:9px;width:35px;height:35px}.topbar{gap:12px;min-height:64px;padding:12px 16px}.topbar .button{padding:8px 10px;font-size:12px}.topbar .count{display:none}.section-heading{align-items:flex-start}.section-heading h2{font-size:18px}.section-heading p{font-size:12px}.section-heading .button{padding:9px 11px;font-size:12px}.flow-heading input.flow-title{font-size:25px}.editor-guide{gap:10px}.editor-guide span{gap:4px;font-size:10px}.editor-guide b{width:16px;height:16px}.action-group{width:100%}.action-group .primary{flex:1}.add-step-button span{display:none}.modal-content{padding:20px}.modal h2{font-size:18px}.step{gap:7px;padding:12px 9px}.step-text>span{max-width:100%}}@media (prefers-reduced-motion:reduce){*,:before,:after{scroll-behavior:auto!important;transition:none!important;animation:none!important}}.nested-steps{border-left:2px solid #bcd3c7;min-width:0;margin:10px 0 14px 15px;padding:10px 0 8px 12px}.nested-steps>header{color:#436653;justify-content:space-between;gap:10px;margin-bottom:12px;font-size:12px;display:flex}.nested-steps>header>span{color:var(--muted)}.nested-steps .empty-editor{text-align:left;padding:8px 0;font-size:12px}.nested-steps .step{flex-wrap:wrap}.nested-steps .step-buttons{margin-left:auto}.nested-steps .step-text{flex-basis:90px}.condition-editor{min-width:0}.condition-editor label{margin:10px 0;font-size:12px;display:block}.condition-editor select,.condition-editor input,.form-label>input{width:100%;margin-top:7px;font-size:12px;display:block}.condition-child{border-left:2px solid var(--line);min-width:0;margin:12px 0 10px 4px;padding:0 0 0 10px}.condition-node,.condition-operand{min-width:0}.condition-editor .muted{font-size:11px}.step.skipped{opacity:.65}.step.stopped .step-number{color:#8b5e18;background:#f8ead2}.step.cancelled .step-number{color:#657571;background:#e5e9e7}.run-reason{color:#775721;overflow-wrap:anywhere;background:#fbf1df;border-radius:7px;padding:12px}.observation-dialog{width:850px}.observation-dialog .run-panel{border:0;padding-top:0}.observation-filter{margin:12px 0 16px;font-size:12px;display:block}.observation-filter select{width:100%;margin-top:7px;font-size:12px;display:block}.run-step-list{border:1px solid var(--line);border-radius:8px;max-height:350px;overflow:auto}.run-step{border:0;border-bottom:1px solid var(--line);text-align:left;width:100%;color:var(--ink);background:#fff;justify-content:space-between;align-items:center;gap:12px;padding:12px;font-size:12px;display:flex}.run-step:hover,.run-step.selected{background:#eaf3ed}.run-step-name{min-width:0}.run-step-name strong{font-weight:500;display:block}.run-step-name small{color:var(--muted);overflow-wrap:anywhere;margin-top:4px;display:block}.run-step>span:last-child{color:var(--muted);flex-shrink:0}.run-step.succeeded>span:last-child{color:#187754}.run-step.failed>span:last-child{color:#b24b36}.run-step.started>span:last-child{color:#137566}.observation-details pre,.live-logs{white-space:pre-wrap;overflow-wrap:anywhere;background:#edf2ee;border-radius:7px;max-height:320px;padding:14px;font-size:12px;line-height:1.7;overflow:auto}.observation-details h5{margin:12px 0 6px;font-weight:500}.live-logs{color:#deeee3;scrollbar-gutter:stable;background:#142d25;height:300px}.log-toolbar{color:var(--muted);flex-wrap:wrap;justify-content:space-between;align-items:center;gap:10px;font-size:11px;display:flex}.log-path{color:#9dc4ac;font-size:10px}.log-stderr{color:#ffb5a1}@media (width<=760px){.topbar-actions{flex-wrap:wrap;justify-content:flex-end;gap:7px}.nested-steps{margin-left:4px;padding-left:8px}.nested-steps .step-buttons{flex-direction:row}.step-list .nested-steps .nested-steps .nested-steps{margin-left:0;padding-left:5px}}
@@ -1,4 +1,4 @@
1
1
  <!doctype html>
2
- <html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#f6f7f9"/><title>Fishtools · 工作流工作台</title> <script type="module" crossorigin src="./assets/index-TgsBnZgG.js"></script>
3
- <link rel="stylesheet" crossorigin href="./assets/index-BeV6IqTW.css">
2
+ <html lang="zh-CN"><head><meta charset="UTF-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><meta name="theme-color" content="#f6f7f9"/><title>Fishtools · 工作流工作台</title> <script type="module" crossorigin src="./assets/index-DT2B4tMV.js"></script>
3
+ <link rel="stylesheet" crossorigin href="./assets/index-vuZvrUTT.css">
4
4
  </head><body><div id="root"></div></body></html>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@yanglaofish/fishtools",
3
- "version": "0.1.4",
3
+ "version": "0.3.0",
4
4
  "description": "Fishtools 插件式工作流工作台",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -24,7 +24,7 @@
24
24
  },
25
25
  "files": [
26
26
  "bin",
27
- "docs"
27
+ "manual"
28
28
  ],
29
29
  "dependencies": {
30
30
  "@mytools/core": "0.1.0",