aitable-workflow-cli 0.1.13-beta.1

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 (675) hide show
  1. package/README.md +101 -0
  2. package/bin/aitable-workflow.mjs +21 -0
  3. package/dist/chunk-EI7MMDWY.js +1 -0
  4. package/dist/chunk-QUKPCNJA.js +38 -0
  5. package/dist/chunk-U773UWB7.js +1 -0
  6. package/dist/cli.js +69 -0
  7. package/dist/config-command-EPY7IOF2.js +1 -0
  8. package/dist/config-ui-server-JQMJSJHD.js +9 -0
  9. package/dist/pid-file-HPTFI54H.js +1 -0
  10. package/dist/web/assets/index-Dk4AmuGi.css +1 -0
  11. package/dist/web/assets/index-lH_EMWyt.js +318 -0
  12. package/dist/web/index.html +14 -0
  13. package/package.json +31 -0
  14. package/templates/aitable-handoff/.env.example +17 -0
  15. package/templates/aitable-handoff/aitable-workflow.config.yml +64 -0
  16. package/templates/aitable-handoff/coding-agents.config.json +17 -0
  17. package/templates/aitable-handoff/npmrc +1 -0
  18. package/templates/aitable-handoff/package.json +16 -0
  19. package/templates/aitable-handoff/roles/config-syncer.role.yml +4 -0
  20. package/templates/aitable-handoff/roles/daily-review.role.yml +4 -0
  21. package/templates/aitable-handoff/roles/faq-support.role.yml +9 -0
  22. package/templates/aitable-handoff/roles/faq-troubleshooter.role.yml +17 -0
  23. package/templates/aitable-handoff/roles/kb-editor.role.yml +19 -0
  24. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/6/350/212/202/350/257/276/345/270/246/344/275/240/345/277/253/351/200/237/344/270/212/346/211/213AI/350/241/250/346/240/274.md +43 -0
  25. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/AI/350/241/250/346/240/274/350/241/214/346/225/260/350/257/264/346/230/216.md +85 -0
  26. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//344/275/277/347/224/250/345/277/253/346/215/267/351/224/256.md +34 -0
  27. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/260/206Excel/346/226/207/344/273/266/345/257/274/345/205/245AI/350/241/250/346/240/274.md +48 -0
  28. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/270/270/350/247/201/351/227/256/351/242/230.md +88 -0
  29. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//346/250/241/346/235/277/344/270/255/345/277/203.md +59 -0
  30. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/270/270/350/247/201/344/270/212/351/231/220.md +181 -0
  31. package/templates/aitable-handoff/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/277/253/351/200/237/344/270/212/346/211/213.md +177 -0
  32. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234/AI/350/241/250/346/240/274/347/232/204/345/257/274/345/207/272.md +27 -0
  33. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/210/206/347/273/204.md +67 -0
  34. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/241/253/350/211/262.md +99 -0
  35. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/346/216/222/345/272/217.md +66 -0
  36. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/347/255/233/351/200/211/345/222/214/347/255/233/351/200/211/346/235/241/344/273/266/347/273/204.md +104 -0
  37. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//346/237/245/347/234/213/345/216/206/345/217/262/350/256/260/345/275/225.md +79 -0
  38. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257.md +94 -0
  39. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/345/220/215/347/247/260.md +35 -0
  40. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/350/257/246/346/203/205/351/241/265/345/222/214/345/241/253/345/206/231/351/241/265.md +141 -0
  41. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/345/210/227/345/256/275.md +42 -0
  42. package/templates/aitable-handoff/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/350/241/214/351/253/230.md +40 -0
  43. package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//344/270/272/350/241/250/346/240/274/346/267/273/345/212/240/345/255/227/346/256/265.md +188 -0
  44. package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/215/225/351/200/211/345/244/232/351/200/211/345/255/227/346/256/265/345/220/214/346/255/245/345/205/266/344/273/226/350/241/250/351/200/211/351/241/271.md +142 -0
  45. package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/256/241/347/220/206.md +44 -0
  46. package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/261/273/345/236/213/345/210/227/350/241/250.md +95 -0
  47. package/templates/aitable-handoff/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/274/226/347/273/204.md +138 -0
  48. package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/221/250/346/234/237/345/210/206/350/241/250.md +42 -0
  49. package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/237/272/347/241/200/346/223/215/344/275/234.md +344 -0
  50. package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/346/230/216/347/273/206/350/241/250-/344/270/200/346/254/241/345/241/253/345/206/231/345/244/232/346/235/241/346/217/220/344/272/244.md +174 -0
  51. package/templates/aitable-handoff/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/351/242/204/345/241/253/351/273/230/350/256/244/345/200/274.md +97 -0
  52. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250AI/347/224/237/346/210/220/345/205/254/345/274/217.md +26 -0
  53. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/207/275/346/225/260/345/270/270/350/247/201/351/227/256/351/242/230.md +179 -0
  54. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/255/227/346/256/265.md +81 -0
  55. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/207/275/346/225/260.md +21 -0
  56. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/345/207/275/346/225/260/345/244/247/345/205/250.md +433 -0
  57. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/346/224/257/346/214/201/346/230/276/347/244/272/346/240/274/345/274/217.md +126 -0
  58. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/351/224/231/350/257/257/344/273/243/347/240/201/345/210/227/350/241/250.md +30 -0
  59. package/templates/aitable-handoff/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/207/275/346/225/260/345/256/236/350/267/265.md +13 -0
  60. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203.md +169 -0
  61. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//347/273/204/347/273/207/345/206/205/345/205/261/344/272/253/346/225/260/346/215/256/346/272/220.md +106 -0
  62. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +176 -0
  63. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211AI/345/220/254/350/256/260/346/225/260/346/215/256/345/220/214/346/255/245.md +100 -0
  64. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211OA/345/256/241/346/211/271/346/225/260/346/215/256/345/220/214/346/255/245.md +194 -0
  65. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/345/276/205/345/212/236/346/225/260/346/215/256/345/220/214/346/255/245.md +87 -0
  66. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/346/227/245/347/250/213/346/225/260/346/215/256/345/220/214/346/255/245.md +92 -0
  67. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/200/203/345/213/244/346/211/223/345/215/241/346/225/260/346/215/256/345/220/214/346/255/245.md +129 -0
  68. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +229 -0
  69. package/templates/aitable-handoff/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/351/200/232/350/256/257/345/275/225/346/225/260/346/215/256/345/220/214/346/255/245.md +120 -0
  70. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//344/275/277/347/224/250AI/350/241/250/346/240/274/350/247/206/345/233/276.md +219 -0
  71. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//345/210/206/344/272/253/350/247/206/345/233/276.md +71 -0
  72. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/225/260/346/215/256/350/241/250/345/222/214/350/247/206/345/233/276/347/232/204/345/205/263/347/263/273.md +48 -0
  73. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/227/245/345/216/206/350/247/206/345/233/276.md +89 -0
  74. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/237/245/350/257/242/351/241/265/351/235/242.md +116 -0
  75. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/230/347/211/271/345/233/276.md +135 -0
  76. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/273/345/206/214/350/247/206/345/233/276.md +28 -0
  77. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/234/213/346/235/277/350/247/206/345/233/276.md +35 -0
  78. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//350/241/250/346/240/274/350/247/206/345/233/276.md +116 -0
  79. package/templates/aitable-handoff/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//351/200/217/350/247/206/350/241/250/350/247/206/345/233/276.md +123 -0
  80. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230/TOP_N/345/210/206/346/236/220.md +78 -0
  81. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/344/270/255/346/267/273/345/212/240/345/244/232/344/270/252/346/225/260/346/215/256/346/272/220.md +129 -0
  82. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/215/225/345/233/276/350/241/250/345/222/214AI/350/247/243/350/257/273/345/206/205/345/256/271/345/210/206/344/272/253.md +104 -0
  83. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/270/270/350/247/201/351/227/256/351/242/230.md +31 -0
  84. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/346/231/272/350/203/275/346/200/273/347/273/223/345/210/206/346/236/220.md +57 -0
  85. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/347/273/204/344/273/266.md +47 -0
  86. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250AI/350/241/250/346/240/274/344/273/252/350/241/250/347/233/230.md +226 -0
  87. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/346/265/201/347/250/213/345/217/221/351/200/201/344/273/252/350/241/250/347/233/230.md +49 -0
  88. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/210/206/344/272/253/344/273/252/350/241/250/347/233/230.md +74 -0
  89. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/234/250/344/273/252/350/241/250/347/233/230/344/270/255/347/255/233/351/200/211/346/225/260/346/215/256.md +65 -0
  90. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/207/252/345/256/232/344/271/211/344/273/252/350/241/250/347/233/230/344/270/255/345/277/203.md +93 -0
  91. package/templates/aitable-handoff/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/267/237/351/232/217/350/256/277/351/227/256/350/200/205/346/235/203/351/231/220/347/273/237/350/256/241.md +48 -0
  92. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/205/250/346/226/260/345/272/224/347/224/250/346/250/241/345/274/217.md +155 -0
  93. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/210/227/350/241/250/347/273/204/344/273/266.md +228 -0
  94. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/233/276/347/211/207.md +93 -0
  95. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/214/211/351/222/256.md +86 -0
  96. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/240/207/347/255/276/351/241/265.md +97 -0
  97. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/247/206/345/233/276/347/273/204/344/273/266.md +125 -0
  98. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/277/207/346/273/244/345/231/250.md +110 -0
  99. package/templates/aitable-handoff/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//351/200/217/350/247/206/350/241/250/347/273/204/344/273/266.md +142 -0
  100. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201/Webhook/345/217/202/346/225/260/347/232/204/350/257/246/347/273/206/350/257/264/346/230/216.md +76 -0
  101. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/270/200/350/241/250/344/270/200/345/217/267Agent/346/224/257/346/214/201/347/276/244/346/224/266/351/233/206.md +150 -0
  102. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250webhook/350/247/246/345/217/221/350/207/252/345/212/250/345/214/226.md +163 -0
  103. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/344/270/215/345/220/214/350/272/253/344/273/275/345/217/221/351/200/201/351/222/211/351/222/211/346/266/210/346/201/257.md +60 -0
  104. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201.md +219 -0
  105. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/276/252/347/216/257/350/212/202/347/202/271.md +63 -0
  106. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/265/201/347/250/213/344/270/255/344/275/277/347/224/250AI/351/227/256/347/255/224.md +69 -0
  107. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/266/210/346/201/257/345/215/241/347/211/207/344/270/212/346/267/273/345/212/240/346/214/211/351/222/256.md +93 -0
  108. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/345/217/230/351/207/217/350/247/243/351/207/212/344/270/216/345/270/270/350/247/201/346/212/245/351/224/231.md +158 -0
  109. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/350/247/246/345/217/221/346/235/241/344/273/266/344/270/216/346/211/247/350/241/214/345/212/250/344/275/234/344/270/200/350/247/210.md +310 -0
  110. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257-/350/207/252/345/212/250/345/214/226.md +129 -0
  111. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250/346/237/245/346/211/276/350/256/260/345/275/225/345/217/221/351/200/201/347/273/204/345/220/210/345/255/227/346/256/265/351/200/232/347/237/245.md +66 -0
  112. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/210/233/345/273/272/351/222/211/351/222/211/345/276/205/345/212/236/346/210/226/346/227/245/347/250/213.md +84 -0
  113. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267AI/347/224/265/350/257/235/345/244/226/345/221/274.md +322 -0
  114. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267OA/345/256/241/346/211/271.md +93 -0
  115. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/351/200/201HTTP/350/257/267/346/261/202.md +168 -0
  116. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/270/270/350/247/201/351/227/256/351/242/230.md +83 -0
  117. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/211/271/351/207/217/345/217/221/351/202/256/344/273/266.md +79 -0
  118. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/224/257/346/214/201/346/217/222/345/205/245/345/223/252/344/272/233/345/217/230/351/207/217/345/206/205/345/256/271.md +80 -0
  119. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/233/264/345/244/232/346/211/247/350/241/214/345/212/250/344/275/234/344/275/277/347/224/250/346/214/207/345/215/227.md +21 -0
  120. package/templates/aitable-handoff/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/260/203/347/224/250/344/270/211/346/226/271/345/267/245/344/275/234/346/265/201/345/272/224/347/224/250.md +161 -0
  121. package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/274/230/345/205/210/344/275/277/347/224/250/347/224/263/350/257/267.md +67 -0
  122. package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/275/277/347/224/250/350/257/264/346/230/216.md +63 -0
  123. package/templates/aitable-handoff/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/345/212/251/347/220/206.md +107 -0
  124. package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//344/275/277/347/224/250AI/350/241/250/346/240/274/351/253/230/347/272/247/346/235/203/351/231/220.md +194 -0
  125. package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//350/241/214/345/210/227/346/235/203/351/231/220/350/256/276/347/275/256/345/217/212/351/253/230/347/272/247/346/235/203/351/231/220/345/257/271/350/241/250/345/215/225/345/205/254/345/274/217/347/232/204/345/275/261/345/223/215.md +32 -0
  126. package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/242/204/350/247/210/351/253/230/347/272/247/346/235/203/351/231/220/347/273/223/346/236/234.md +43 -0
  127. package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/345/270/270/350/247/201/351/227/256/351/242/230.md +47 -0
  128. package/templates/aitable-handoff/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/347/232/204/351/273/230/350/256/244/350/247/222/350/211/262.md +36 -0
  129. package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/344/270/211/346/226/271/346/217/222/344/273/266/344/275/277/347/224/250/346/216/210/346/235/203.md +19 -0
  130. package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/204/232/346/234/254/346/217/222/344/273/266.md +42 -0
  131. package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/207/252/345/256/232/344/271/211/346/217/222/344/273/266.md +51 -0
  132. package/templates/aitable-handoff/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266/344/270/255/345/277/203-/344/275/277/347/224/250/346/214/207/345/215/227.md +97 -0
  133. package/templates/aitable-handoff/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//344/275/277/347/224/250/346/225/260/346/215/256/350/257/264/346/230/216.md +82 -0
  134. package/templates/aitable-handoff/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//346/235/203/347/233/212/346/225/260/346/215/256/350/257/264/346/230/216.md +111 -0
  135. package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265/AI/350/241/250/346/240/274/350/257/257/345/210/240/346/201/242/345/244/215/346/214/207/345/215/227.md +37 -0
  136. package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//345/234/250/350/241/250/346/240/274/344/270/255/346/240/207/350/256/260/351/207/215/345/244/215/345/206/205/345/256/271.md +43 -0
  137. package/templates/aitable-handoff/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//347/233/264/346/222/255/345/205/254/345/274/200/347/263/273/345/210/227/350/257/276.md +21 -0
  138. package/templates/aitable-handoff/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/344/273/230/350/264/271/346/235/203/347/233/212.md +144 -0
  139. package/templates/aitable-handoff/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/346/220/255/345/273/272/346/234/215/345/212/241.md +95 -0
  140. package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/346/216/222/347/211/210/346/211/223/345/215/260/345/215/207/347/272/247/350/257/264/346/230/216.md +40 -0
  141. package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/347/211/210/346/234/254/345/215/207/347/272/247/351/200/232/347/237/245.md +21 -0
  142. package/templates/aitable-handoff/wiki/faq-support/17-/345/205/254/345/221/212//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245/350/260/203/346/225/264/350/257/264/346/230/216.md +55 -0
  143. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI /350/241/250/346/240/274/346/217/222/344/273/266 - /344/274/201/344/270/232/345/206/205/346/217/222/344/273/266/345/217/221/345/270/203/346/214/207/345/215/227.md" +159 -0
  144. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210FaaS/347/211/210/357/274/211.md" +1362 -0
  145. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/345/205/254/345/274/217/347/211/210/357/274/211.md" +556 -0
  146. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227.md" +15 -0
  147. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/AI /350/241/250/346/240/274 AI /345/255/227/346/256/265/345/270/270/350/247/201/346/212/245/351/224/231/350/257/264/346/230/216.md" +649 -0
  148. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/Dify/346/231/272/350/203/275/344/275/223.md" +55 -0
  149. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/GPTPro /345/255/227/346/256/265/346/215/267/345/276/204 /345/257/206/351/222/245/350/216/267/345/217/226/346/214/207/345/215/227.md" +23 -0
  150. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/OpenClaw /345/260/217/351/276/231/350/231/276/345/212/251/346/211/213/351/205/215/347/275/256/346/225/231/347/250/213.md" +27 -0
  151. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/233/275/345/206/205/345/244/226/345/277/253/351/200/222/347/211/251/346/265/201/344/277/241/346/201/257/346/237/245/350/257/242/344/275/277/347/224/250/346/214/207/345/215/227.md" +907 -0
  152. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/277/253/351/200/222/347/211/251/346/265/201/346/237/245/350/257/242/345/212/251/346/211/213/344/275/277/347/224/250/346/214/207/345/215/227.md" +1 -0
  153. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/AI/350/241/250/346/240/274JSAPI /347/261/273/345/236/213/346/217/217/350/277/260.xlsx +0 -0
  154. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Base /346/250/241/345/235/227.md" +391 -0
  155. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AttachmentField /351/231/204/344/273/266/345/255/227/346/256/265.md" +200 -0
  156. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AutoNumberField /350/207/252/345/212/250/347/274/226/345/217/267/345/255/227/346/256/265.md" +75 -0
  157. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BarcodeField /346/235/241/347/240/201/345/255/227/346/256/265.md" +95 -0
  158. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BidirectionalLinkField /345/217/214/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +294 -0
  159. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CheckboxField /345/244/215/351/200/211/346/241/206/345/255/227/346/256/265.md" +95 -0
  160. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CreatedTimeField /345/210/233/345/273/272/346/227/266/351/227/264/345/255/227/346/256/265.md" +134 -0
  161. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CurrencyField /350/264/247/345/270/201/345/255/227/346/256/265.md" +260 -0
  162. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DateField /346/227/245/346/234/237/345/255/227/346/256/265.md" +183 -0
  163. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DepartmentField /351/203/250/351/227/250/345/255/227/346/256/265.md" +111 -0
  164. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/EmailField /351/202/256/347/256/261/345/255/227/346/256/265.md" +99 -0
  165. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FilterUpField /346/237/245/346/211/276/345/274/225/347/224/250/345/255/227/346/256/265.md" +73 -0
  166. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FormulaField /345/205/254/345/274/217/345/255/227/346/256/265.md" +109 -0
  167. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GeoLocationField /345/234/260/347/220/206/344/275/215/347/275/256/345/255/227/346/256/265.md" +33 -0
  168. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GroupField /347/276/244/347/273/204/345/255/227/346/256/265.md" +111 -0
  169. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LastModifiedTimeField /346/234/200/345/220/216/346/233/264/346/226/260/346/227/266/351/227/264/345/255/227/346/256/265.md" +134 -0
  170. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LookupField /345/205/263/350/201/224/345/274/225/347/224/250/345/255/227/346/256/265.md" +71 -0
  171. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/MultiSelectField /345/244/232/351/200/211/345/255/227/346/256/265.md" +349 -0
  172. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/NumberField /346/225/260/345/255/227/345/255/227/346/256/265.md" +175 -0
  173. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/PrimaryField /344/270/273/351/224/256/346/226/207/346/241/243/345/255/227/346/256/265.md" +91 -0
  174. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/ProgressField /350/277/233/345/272/246/345/255/227/346/256/265.md" +324 -0
  175. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RatingField /350/257/204/345/210/206/345/255/227/346/256/265.md" +320 -0
  176. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RichTextField /345/257/214/346/226/207/346/234/254/345/255/227/346/256/265.md" +45 -0
  177. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/SingleSelectField /345/215/225/351/200/211/345/255/227/346/256/265.md" +336 -0
  178. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TelephoneField /347/224/265/350/257/235/345/255/227/346/256/265.md" +99 -0
  179. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TextField /346/226/207/346/234/254/345/255/227/346/256/265.md" +93 -0
  180. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UnidirectionalLinkFields /345/215/225/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +295 -0
  181. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UrlField /351/223/276/346/216/245/345/255/227/346/256/265.md" +163 -0
  182. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UserField /344/272/272/345/221/230/345/255/227/346/256/265.md" +266 -0
  183. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227.md" +379 -0
  184. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Record /346/250/241/345/235/227.md" +277 -0
  185. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Sheet /346/250/241/345/235/227.md" +1013 -0
  186. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/UI /346/250/241/345/235/227.md" +472 -0
  187. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227/GridView /350/241/250/346/240/274/350/247/206/345/233/276.md" +835 -0
  188. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227.md" +203 -0
  189. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md +65 -0
  190. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//350/257/273/345/206/231AI /350/241/250/346/240/274/346/250/241/345/236/213.md" +29 -0
  191. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/346/225/260/346/215/256/346/272/220 /345/274/200/345/217/221/346/214/207/345/215/227.md" +607 -0
  192. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +391 -0
  193. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +379 -0
  194. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Input/346/250/241/345/235/227.md" +331 -0
  195. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Output/346/250/241/345/235/227.md" +197 -0
  196. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +277 -0
  197. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +1013 -0
  198. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +472 -0
  199. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +203 -0
  200. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +65 -0
  201. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +142 -0
  202. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +391 -0
  203. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Event/344/272/213/344/273/266/346/250/241/345/235/227.md" +182 -0
  204. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +379 -0
  205. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +277 -0
  206. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +1013 -0
  207. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +472 -0
  208. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +203 -0
  209. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/205/266/344/273/226/346/216/245/345/217/243.md" +146 -0
  210. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +65 -0
  211. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//346/240/270/345/277/203/347/237/245/350/257/206.md" +54 -0
  212. package/templates/aitable-handoff/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +192 -0
  213. package/templates/aitable-handoff/wiki/faq-support//351/222/211/351/222/211AI/350/241/250/346/240/274FAQ.md +611 -0
  214. package/templates/aitable-handoff/workflows/admin-kb-update/recipes/kb-refine.recipe.ts +131 -0
  215. package/templates/aitable-handoff/workflows/admin-kb-update/recipes/kb_sync_handler.recipe.ts +130 -0
  216. package/templates/aitable-handoff/workflows/admin-kb-update/workflow.yml +125 -0
  217. package/templates/aitable-handoff/workflows/config-sync/recipes/config_sync.recipe.ts +448 -0
  218. package/templates/aitable-handoff/workflows/config-sync/recipes/config_sync_handler.recipe.ts +16 -0
  219. package/templates/aitable-handoff/workflows/config-sync/workflow.yml +73 -0
  220. package/templates/aitable-handoff/workflows/daily-review/recipes/daily_review.recipe.ts +529 -0
  221. package/templates/aitable-handoff/workflows/daily-review/recipes/daily_review_handler.recipe.ts +26 -0
  222. package/templates/aitable-handoff/workflows/daily-review/recipes/memory-events.ts +56 -0
  223. package/templates/aitable-handoff/workflows/daily-review/workflow.yml +92 -0
  224. package/templates/aitable-handoff/workflows/group-qa/error-replies.json +53 -0
  225. package/templates/aitable-handoff/workflows/group-qa/recipes/answer.recipe.ts +197 -0
  226. package/templates/aitable-handoff/workflows/group-qa/recipes/conversation_handler.recipe.ts +294 -0
  227. package/templates/aitable-handoff/workflows/group-qa/recipes/issue-classifier.ts +120 -0
  228. package/templates/aitable-handoff/workflows/group-qa/recipes/known-error-match.recipe.ts +75 -0
  229. package/templates/aitable-handoff/workflows/group-qa/recipes/memory-events.ts +55 -0
  230. package/templates/aitable-handoff/workflows/group-qa/recipes/reply-to-group.recipe.ts +132 -0
  231. package/templates/aitable-handoff/workflows/group-qa/recipes/troubleshoot-issue.recipe.ts +195 -0
  232. package/templates/aitable-handoff/workflows/group-qa/workflow.yml +210 -0
  233. package/templates/aitable-handoff/workspaces/daily-review/AGENTS.md +189 -0
  234. package/templates/aitable-handoff/workspaces/faq-support/AGENTS.md +448 -0
  235. package/templates/aitable-handoff/workspaces/faq-support/contacts.json +14 -0
  236. package/templates/aitable-handoff/workspaces/faq-support/owner-map.json +18 -0
  237. package/templates/aitable-handoff/workspaces/faq-support/skills/bug-triage/SKILL.md +130 -0
  238. package/templates/aitable-handoff/workspaces/faq-troubleshooter/AGENTS.md +53 -0
  239. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/SKILL.md +58 -0
  240. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/aitable-import-troubleshooter/SKILL.md +485 -0
  241. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/aitable-openapi-troubleshooter/SKILL.md +183 -0
  242. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/import-openapi-e2e-troubleshooter/SKILL.md +459 -0
  243. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/notable-datasource-troubleshooter/SKILL.md +1286 -0
  244. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/notable-field-troubleshooter/SKILL.md +673 -0
  245. package/templates/aitable-handoff/workspaces/faq-troubleshooter/skills/troubleshooting/spreadsheet-datasync-troubleshooter/SKILL.md +322 -0
  246. package/templates/aitable-handoff/workspaces/kb-editor/AGENTS.md +32 -0
  247. package/templates/support-qa/.env.example +18 -0
  248. package/templates/support-qa/aitable-workflow.config.yml +46 -0
  249. package/templates/support-qa/coding-agents.config.json +17 -0
  250. package/templates/support-qa/lib/action-dispatch.ts +262 -0
  251. package/templates/support-qa/lib/assemble-cli.ts +30 -0
  252. package/templates/support-qa/lib/assemble.ts +279 -0
  253. package/templates/support-qa/lib/contract.ts +253 -0
  254. package/templates/support-qa/lib/echo-guard.ts +50 -0
  255. package/templates/support-qa/lib/fastpath.ts +227 -0
  256. package/templates/support-qa/lib/memory-events.ts +94 -0
  257. package/templates/support-qa/lib/owner-mention.ts +140 -0
  258. package/templates/support-qa/lib/owner-resolver.ts +94 -0
  259. package/templates/support-qa/lib/profile-guard.ts +55 -0
  260. package/templates/support-qa/lib/profile.ts +51 -0
  261. package/templates/support-qa/lib/send-failure-guard.ts +59 -0
  262. package/templates/support-qa/lib/troubleshoot.ts +236 -0
  263. package/templates/support-qa/npmrc +1 -0
  264. package/templates/support-qa/package.json +19 -0
  265. package/templates/support-qa/profiles/aitable/profile/escalation/contacts.json +37 -0
  266. package/templates/support-qa/profiles/aitable/profile/escalation/owner-map.json +18 -0
  267. package/templates/support-qa/profiles/aitable/profile/fastpath/known-answers.yml +570 -0
  268. package/templates/support-qa/profiles/aitable/profile/profile.yml +156 -0
  269. package/templates/support-qa/profiles/aitable/profile/prompts/kb-editor.md +3 -0
  270. package/templates/support-qa/profiles/aitable/profile/prompts/persona.md +49 -0
  271. package/templates/support-qa/profiles/aitable/profile/prompts/troubleshooter.md +5 -0
  272. package/templates/support-qa/profiles/aitable/profile/troubleshoot/classifiers.yml +36 -0
  273. package/templates/support-qa/profiles/aitable/skills/troubleshooting/SKILL.md +58 -0
  274. package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-import-troubleshooter/SKILL.md +485 -0
  275. package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-openapi-troubleshooter/SKILL.md +183 -0
  276. package/templates/support-qa/profiles/aitable/skills/troubleshooting/import-openapi-e2e-troubleshooter/SKILL.md +459 -0
  277. package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-datasource-troubleshooter/SKILL.md +1286 -0
  278. package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-field-troubleshooter/SKILL.md +673 -0
  279. package/templates/support-qa/profiles/aitable/skills/troubleshooting/spreadsheet-datasync-troubleshooter/SKILL.md +322 -0
  280. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/state.json +202 -0
  281. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/_compile-report.json +8 -0
  282. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/_index.md +197 -0
  283. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274-/346/216/222/347/211/210/346/211/223/345/215/260/345/215/207/347/272/247/350/257/264/346/230/216.md +53 -0
  284. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274-/347/211/210/346/234/254/345/215/207/347/272/247/351/200/232/347/237/245.md +36 -0
  285. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/274/230/345/205/210/344/275/277/347/224/250/347/224/263/350/257/267.md +51 -0
  286. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/275/277/347/224/250/350/257/264/346/230/216.md +51 -0
  287. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/344/270/211/346/226/271/346/217/222/344/273/266/344/275/277/347/224/250/346/216/210/346/235/203.md +37 -0
  288. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/345/212/251/347/220/206.md +107 -0
  289. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/204/232/346/234/254/346/217/222/344/273/266.md +59 -0
  290. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/207/252/345/256/232/344/271/211/346/217/222/344/273/266.md +63 -0
  291. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/TOP_N/345/210/206/346/236/220.md +82 -0
  292. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts/_index.md +60 -0
  293. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/270/200/350/241/250/344/270/200/345/217/267Agent/346/224/257/346/214/201/347/276/244/346/224/266/351/233/206.md +119 -0
  294. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/273/252/350/241/250/347/233/230/346/231/272/350/203/275/346/200/273/347/273/223/345/210/206/346/236/220.md +71 -0
  295. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/275/277/347/224/250AI/347/224/237/346/210/220/345/205/254/345/274/217.md +31 -0
  296. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/275/277/347/224/250/344/270/215/345/220/214/350/272/253/344/273/275/345/217/221/351/200/201/351/222/211/351/222/211/346/266/210/346/201/257.md +65 -0
  297. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/276/252/347/216/257/350/212/202/347/202/271.md +68 -0
  298. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/346/265/201/347/250/213/345/217/221/351/200/201/344/273/252/350/241/250/347/233/230.md +58 -0
  299. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/205/254/345/274/217/346/224/257/346/214/201/346/230/276/347/244/272/346/240/274/345/274/217.md +96 -0
  300. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/210/206/344/272/253/344/273/252/350/241/250/347/233/230.md +82 -0
  301. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/210/206/344/272/253/350/247/206/345/233/276.md +73 -0
  302. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/210/227/350/241/250/347/273/204/344/273/266.md +124 -0
  303. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/233/276/347/211/207.md +77 -0
  304. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/234/250/344/273/252/350/241/250/347/233/230/344/270/255/347/255/233/351/200/211/346/225/260/346/215/256.md +70 -0
  305. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//345/255/227/346/256/265/347/274/226/347/273/204.md +94 -0
  306. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/214/211/351/222/256.md +67 -0
  307. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/225/260/346/215/256/350/241/250/345/222/214/350/247/206/345/233/276/347/232/204/345/205/263/347/263/273.md +56 -0
  308. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/227/245/345/216/206/350/247/206/345/233/276.md +74 -0
  309. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/237/245/350/257/242/351/241/265/351/235/242.md +97 -0
  310. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/240/207/347/255/276/351/241/265.md +80 -0
  311. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/240/270/345/277/203/347/237/245/350/257/206.md +74 -0
  312. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//346/250/241/346/235/277/344/270/255/345/277/203.md +66 -0
  313. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//347/224/230/347/211/271/345/233/276.md +99 -0
  314. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//347/224/273/345/206/214/350/247/206/345/233/276.md +39 -0
  315. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//347/234/213/346/235/277/350/247/206/345/233/276.md +47 -0
  316. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//347/273/204/347/273/207/345/206/205/345/205/261/344/272/253/346/225/260/346/215/256/346/272/220.md +79 -0
  317. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/207/252/345/256/232/344/271/211/344/273/252/350/241/250/347/233/230/344/270/255/345/277/203.md +77 -0
  318. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/241/214/345/210/227/346/235/203/351/231/220/350/256/276/347/275/256/345/217/212/351/253/230/347/272/247/346/235/203/351/231/220/345/257/271/350/241/250/345/215/225/345/205/254/345/274/217/347/232/204/345/275/261/345/223/215.md +60 -0
  319. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/241/250/345/215/225/345/221/250/346/234/237/345/210/206/350/241/250.md +51 -0
  320. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/241/250/345/215/225/346/230/216/347/273/206/350/241/250-/344/270/200/346/254/241/345/241/253/345/206/231/345/244/232/346/235/241/346/217/220/344/272/244.md +99 -0
  321. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/241/250/345/215/225/351/242/204/345/241/253/351/273/230/350/256/244/345/200/274.md +81 -0
  322. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/241/250/346/240/274/350/247/206/345/233/276.md +86 -0
  323. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/247/206/345/233/276/347/273/204/344/273/266.md +84 -0
  324. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/257/273/345/206/231AI /350/241/250/346/240/274/346/250/241/345/236/213.md" +68 -0
  325. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/267/237/351/232/217/350/256/277/351/227/256/350/200/205/346/235/203/351/231/220/347/273/237/350/256/241.md +59 -0
  326. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +104 -0
  327. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245/350/260/203/346/225/264/350/257/264/346/230/216.md +62 -0
  328. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//350/277/207/346/273/244/345/231/250.md +79 -0
  329. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//351/200/217/350/247/206/350/241/250/347/273/204/344/273/266.md +99 -0
  330. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//351/200/217/350/247/206/350/241/250/350/247/206/345/233/276.md +95 -0
  331. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//351/222/211/351/222/211AI/345/220/254/350/256/260/346/225/260/346/215/256/345/220/214/346/255/245.md +92 -0
  332. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//351/242/204/350/247/210/351/253/230/347/272/247/346/235/203/351/231/220/347/273/223/346/236/234.md +51 -0
  333. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/concepts//351/253/230/347/272/247/346/235/203/351/231/220/347/232/204/351/273/230/350/256/244/350/247/222/350/211/262.md +50 -0
  334. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/log.md +4 -0
  335. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/AI /350/241/250/346/240/274 AI /345/255/227/346/256/265/345/270/270/350/247/201/346/212/245/351/224/231/350/257/264/346/230/216.md" +223 -0
  336. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/AI/350/241/250/346/240/274/350/241/214/346/225/260/350/257/264/346/230/216.md +95 -0
  337. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/AttachmentField /351/231/204/344/273/266/345/255/227/346/256/265.md" +65 -0
  338. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/AutoNumberField /350/207/252/345/212/250/347/274/226/345/217/267/345/255/227/346/256/265.md" +47 -0
  339. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/BarcodeField /346/235/241/347/240/201/345/255/227/346/256/265.md" +55 -0
  340. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Base /346/250/241/345/235/227.md" +158 -0
  341. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/BidirectionalLinkField /345/217/214/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +69 -0
  342. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/CheckboxField /345/244/215/351/200/211/346/241/206/345/255/227/346/256/265.md" +51 -0
  343. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/CreatedTimeField /345/210/233/345/273/272/346/227/266/351/227/264/345/255/227/346/256/265.md" +55 -0
  344. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/CurrencyField /350/264/247/345/270/201/345/255/227/346/256/265.md" +66 -0
  345. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/DateField /346/227/245/346/234/237/345/255/227/346/256/265.md" +63 -0
  346. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/DepartmentField /351/203/250/351/227/250/345/255/227/346/256/265.md" +60 -0
  347. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/EmailField /351/202/256/347/256/261/345/255/227/346/256/265.md" +54 -0
  348. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Event/344/272/213/344/273/266/346/250/241/345/235/227.md +113 -0
  349. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Field /346/250/241/345/235/227.md" +116 -0
  350. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/FilterUpField /346/237/245/346/211/276/345/274/225/347/224/250/345/255/227/346/256/265.md" +82 -0
  351. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/FormulaField /345/205/254/345/274/217/345/255/227/346/256/265.md" +92 -0
  352. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/GeoLocationField /345/234/260/347/220/206/344/275/215/347/275/256/345/255/227/346/256/265.md" +62 -0
  353. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/GridView /350/241/250/346/240/274/350/247/206/345/233/276.md" +138 -0
  354. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/GroupField /347/276/244/347/273/204/345/255/227/346/256/265.md" +86 -0
  355. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Input/346/250/241/345/235/227.md +110 -0
  356. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/LastModifiedTimeField /346/234/200/345/220/216/346/233/264/346/226/260/346/227/266/351/227/264/345/255/227/346/256/265.md" +96 -0
  357. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/LookupField /345/205/263/350/201/224/345/274/225/347/224/250/345/255/227/346/256/265.md" +72 -0
  358. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/MultiSelectField /345/244/232/351/200/211/345/255/227/346/256/265.md" +127 -0
  359. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/NumberField /346/225/260/345/255/227/345/255/227/346/256/265.md" +97 -0
  360. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Output/346/250/241/345/235/227.md +97 -0
  361. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/PrimaryField /344/270/273/351/224/256/346/226/207/346/241/243/345/255/227/346/256/265.md" +78 -0
  362. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/ProgressField /350/277/233/345/272/246/345/255/227/346/256/265.md" +80 -0
  363. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/RatingField /350/257/204/345/210/206/345/255/227/346/256/265.md" +89 -0
  364. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Record /346/250/241/345/235/227.md" +100 -0
  365. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/RichTextField /345/257/214/346/226/207/346/234/254/345/255/227/346/256/265.md" +62 -0
  366. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Sheet /346/250/241/345/235/227.md" +222 -0
  367. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/SingleSelectField /345/215/225/351/200/211/345/255/227/346/256/265.md" +106 -0
  368. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/TelephoneField /347/224/265/350/257/235/345/255/227/346/256/265.md" +65 -0
  369. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/TextField /346/226/207/346/234/254/345/255/227/346/256/265.md" +64 -0
  370. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/UI /346/250/241/345/235/227.md" +169 -0
  371. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/UnidirectionalLinkFields /345/215/225/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +99 -0
  372. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/UrlField /351/223/276/346/216/245/345/255/227/346/256/265.md" +86 -0
  373. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/UserField /344/272/272/345/221/230/345/255/227/346/256/265.md" +103 -0
  374. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/View /346/250/241/345/235/227.md" +112 -0
  375. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/Webhook/345/217/202/346/225/260/347/232/204/350/257/246/347/273/206/350/257/264/346/230/216.md +77 -0
  376. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references/_index.md +75 -0
  377. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//344/273/252/350/241/250/347/233/230/345/270/270/350/247/201/351/227/256/351/242/230.md +44 -0
  378. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//344/273/252/350/241/250/347/233/230/347/273/204/344/273/266.md +48 -0
  379. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//344/275/277/347/224/250/345/207/275/346/225/260.md +36 -0
  380. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//344/275/277/347/224/250/345/277/253/346/215/267/351/224/256.md +53 -0
  381. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//344/275/277/347/224/250/346/225/260/346/215/256/350/257/264/346/230/216.md +63 -0
  382. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/205/254/345/274/217/345/207/275/346/225/260/345/244/247/345/205/250.md +147 -0
  383. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/205/254/345/274/217/351/224/231/350/257/257/344/273/243/347/240/201/345/210/227/350/241/250.md +41 -0
  384. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/205/266/344/273/226/346/216/245/345/217/243.md +124 -0
  385. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/207/275/346/225/260/345/256/236/350/267/265.md +33 -0
  386. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/233/275/345/206/205/345/244/226/345/277/253/351/200/222/347/211/251/346/265/201/344/277/241/346/201/257/346/237/245/350/257/242/344/275/277/347/224/250/346/214/207/345/215/227.md +84 -0
  387. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md +175 -0
  388. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/255/227/346/256/265/347/261/273/345/236/213/345/210/227/350/241/250.md +56 -0
  389. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//345/270/270/350/247/201/351/227/256/351/242/230.md +90 -0
  390. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//346/235/203/347/233/212/346/225/260/346/215/256/350/257/264/346/230/216.md +90 -0
  391. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//346/265/201/347/250/213/345/217/230/351/207/217/350/247/243/351/207/212/344/270/216/345/270/270/350/247/201/346/212/245/351/224/231.md +149 -0
  392. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//346/265/201/347/250/213/350/247/246/345/217/221/346/235/241/344/273/266/344/270/216/346/211/247/350/241/214/345/212/250/344/275/234/344/270/200/350/247/210.md +147 -0
  393. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257-/350/207/252/345/212/250/345/214/226.md +105 -0
  394. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//347/233/264/346/222/255/345/205/254/345/274/200/347/263/273/345/210/227/350/257/276.md +35 -0
  395. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//350/207/252/345/212/250/345/214/226/345/270/270/350/247/201/351/227/256/351/242/230.md +118 -0
  396. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//350/207/252/345/212/250/345/214/226/346/224/257/346/214/201/346/217/222/345/205/245/345/223/252/344/272/233/345/217/230/351/207/217/345/206/205/345/256/271.md +82 -0
  397. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//350/207/252/345/212/250/345/214/226/346/233/264/345/244/232/346/211/247/350/241/214/345/212/250/344/275/234/344/275/277/347/224/250/346/214/207/345/215/227.md +36 -0
  398. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//351/222/211/351/222/211AI/350/241/250/346/240/274/344/273/230/350/264/271/346/235/203/347/233/212.md +133 -0
  399. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//351/222/211/351/222/211AI/350/241/250/346/240/274/345/270/270/350/247/201/344/270/212/351/231/220.md +110 -0
  400. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/references//351/253/230/347/272/247/346/235/203/351/231/220/345/270/270/350/247/201/351/227/256/351/242/230.md +63 -0
  401. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/6/350/212/202/350/257/276/345/270/246/344/275/240/345/277/253/351/200/237/344/270/212/346/211/213AI/350/241/250/346/240/274.md +62 -0
  402. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI /350/241/250/346/240/274/346/217/222/344/273/266 - /344/274/201/344/270/232/345/206/205/346/217/222/344/273/266/345/217/221/345/270/203/346/214/207/345/215/227.md" +137 -0
  403. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227.md" +37 -0
  404. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210FaaS/347/211/210/357/274/211.md" +215 -0
  405. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/345/205/254/345/274/217/347/211/210/357/274/211.md" +131 -0
  406. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/346/217/222/344/273/266/344/270/255/345/277/203-/344/275/277/347/224/250/346/214/207/345/215/227.md +106 -0
  407. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/346/225/260/346/215/256/346/272/220 /345/274/200/345/217/221/346/214/207/345/215/227.md" +162 -0
  408. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/347/232/204/345/257/274/345/207/272.md +35 -0
  409. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +114 -0
  410. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/350/257/257/345/210/240/346/201/242/345/244/215/346/214/207/345/215/227.md +57 -0
  411. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +145 -0
  412. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/Dify/346/231/272/350/203/275/344/275/223.md +73 -0
  413. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/GPTPro /345/255/227/346/256/265/346/215/267/345/276/204 /345/257/206/351/222/245/350/216/267/345/217/226/346/214/207/345/215/227.md" +47 -0
  414. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/OpenClaw /345/260/217/351/276/231/350/231/276/345/212/251/346/211/213/351/205/215/347/275/256/346/225/231/347/250/213.md" +89 -0
  415. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics/_index.md +70 -0
  416. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/270/272/350/241/250/346/240/274/346/267/273/345/212/240/345/255/227/346/256/265.md +147 -0
  417. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/273/252/350/241/250/347/233/230/344/270/255/346/267/273/345/212/240/345/244/232/344/270/252/346/225/260/346/215/256/346/272/220.md +95 -0
  418. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/273/252/350/241/250/347/233/230/345/215/225/345/233/276/350/241/250/345/222/214AI/350/247/243/350/257/273/345/206/205/345/256/271/345/210/206/344/272/253.md +77 -0
  419. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250AI/350/241/250/346/240/274/344/273/252/350/241/250/347/233/230.md +124 -0
  420. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250AI/350/241/250/346/240/274/350/247/206/345/233/276.md +142 -0
  421. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250AI/350/241/250/346/240/274/351/253/230/347/272/247/346/235/203/351/231/220.md +127 -0
  422. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250webhook/350/247/246/345/217/221/350/207/252/345/212/250/345/214/226.md +115 -0
  423. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/345/205/254/345/274/217/345/207/275/346/225/260/345/270/270/350/247/201/351/227/256/351/242/230.md +114 -0
  424. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/345/205/254/345/274/217/345/255/227/346/256/265.md +75 -0
  425. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/345/210/206/347/273/204.md +70 -0
  426. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/345/241/253/350/211/262.md +80 -0
  427. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/346/216/222/345/272/217.md +69 -0
  428. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/347/255/233/351/200/211/345/222/214/347/255/233/351/200/211/346/235/241/344/273/266/347/273/204.md +90 -0
  429. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201.md +145 -0
  430. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/205/250/346/226/260/345/272/224/347/224/250/346/250/241/345/274/217.md +104 -0
  431. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/215/225/351/200/211/345/244/232/351/200/211/345/255/227/346/256/265/345/220/214/346/255/245/345/205/266/344/273/226/350/241/250/351/200/211/351/241/271.md +90 -0
  432. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/234/250/346/265/201/347/250/213/344/270/255/344/275/277/347/224/250AI/351/227/256/347/255/224.md +68 -0
  433. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/234/250/346/266/210/346/201/257/345/215/241/347/211/207/344/270/212/346/267/273/345/212/240/346/214/211/351/222/256.md +79 -0
  434. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/234/250/350/241/250/346/240/274/344/270/255/346/240/207/350/256/260/351/207/215/345/244/215/345/206/205/345/256/271.md +63 -0
  435. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/255/227/346/256/265/347/256/241/347/220/206.md +55 -0
  436. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/260/206Excel/346/226/207/344/273/266/345/257/274/345/205/245AI/350/241/250/346/240/274.md +59 -0
  437. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//345/277/253/351/200/222/347/211/251/346/265/201/346/237/245/350/257/242/345/212/251/346/211/213/344/275/277/347/224/250/346/214/207/345/215/227.md +26 -0
  438. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203.md +99 -0
  439. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//346/237/245/347/234/213/345/216/206/345/217/262/350/256/260/345/275/225.md +81 -0
  440. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257.md +84 -0
  441. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//347/224/250/346/237/245/346/211/276/350/256/260/345/275/225/345/217/221/351/200/201/347/273/204/345/220/210/345/255/227/346/256/265/351/200/232/347/237/245.md +64 -0
  442. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/212/250/345/214/226/345/210/233/345/273/272/351/222/211/351/222/211/345/276/205/345/212/236/346/210/226/346/227/245/347/250/213.md +76 -0
  443. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267AI/347/224/265/350/257/235/345/244/226/345/221/274.md +90 -0
  444. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267OA/345/256/241/346/211/271.md +96 -0
  445. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/212/250/345/214/226/345/217/221/351/200/201HTTP/350/257/267/346/261/202.md +111 -0
  446. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/212/250/345/214/226/346/211/271/351/207/217/345/217/221/351/202/256/344/273/266.md +85 -0
  447. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/345/220/215/347/247/260.md +45 -0
  448. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/350/257/246/346/203/205/351/241/265/345/222/214/345/241/253/345/206/231/351/241/265.md +130 -0
  449. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/241/250/345/215/225/345/237/272/347/241/200/346/223/215/344/275/234.md +149 -0
  450. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/260/203/346/225/264/345/210/227/345/256/275.md +54 -0
  451. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/260/203/346/225/264/350/241/214/351/253/230.md +45 -0
  452. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//350/260/203/347/224/250/344/270/211/346/226/271/345/267/245/344/275/234/346/265/201/345/272/224/347/224/250.md +116 -0
  453. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211AI/350/241/250/346/240/274FAQ.md +284 -0
  454. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211AI/350/241/250/346/240/274/345/277/253/351/200/237/344/270/212/346/211/213.md +134 -0
  455. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211AI/350/241/250/346/240/274/346/220/255/345/273/272/346/234/215/345/212/241.md +93 -0
  456. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211OA/345/256/241/346/211/271/346/225/260/346/215/256/345/220/214/346/255/245.md +140 -0
  457. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211/345/276/205/345/212/236/346/225/260/346/215/256/345/220/214/346/255/245.md +90 -0
  458. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211/346/227/245/347/250/213/346/225/260/346/215/256/345/220/214/346/255/245.md +88 -0
  459. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211/350/200/203/345/213/244/346/211/223/345/215/241/346/225/260/346/215/256/345/220/214/346/255/245.md +106 -0
  460. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +111 -0
  461. package/templates/support-qa/profiles/aitable/wiki/faq-support/.kb/wiki/topics//351/222/211/351/222/211/351/200/232/350/256/257/345/275/225/346/225/260/346/215/256/345/220/214/346/255/245.md +109 -0
  462. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/6/350/212/202/350/257/276/345/270/246/344/275/240/345/277/253/351/200/237/344/270/212/346/211/213AI/350/241/250/346/240/274.md +43 -0
  463. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250/AI/350/241/250/346/240/274/350/241/214/346/225/260/350/257/264/346/230/216.md +85 -0
  464. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//344/275/277/347/224/250/345/277/253/346/215/267/351/224/256.md +34 -0
  465. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/260/206Excel/346/226/207/344/273/266/345/257/274/345/205/245AI/350/241/250/346/240/274.md +48 -0
  466. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//345/270/270/350/247/201/351/227/256/351/242/230.md +88 -0
  467. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//346/250/241/346/235/277/344/270/255/345/277/203.md +59 -0
  468. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/270/270/350/247/201/344/270/212/351/231/220.md +181 -0
  469. package/templates/support-qa/profiles/aitable/wiki/faq-support/01-/345/277/253/351/200/237/345/205/245/351/227/250//351/222/211/351/222/211AI/350/241/250/346/240/274/345/277/253/351/200/237/344/270/212/346/211/213.md +177 -0
  470. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234/AI/350/241/250/346/240/274/347/232/204/345/257/274/345/207/272.md +27 -0
  471. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/210/206/347/273/204.md +67 -0
  472. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/345/241/253/350/211/262.md +99 -0
  473. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/346/216/222/345/272/217.md +66 -0
  474. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//344/275/277/347/224/250/347/255/233/351/200/211/345/222/214/347/255/233/351/200/211/346/235/241/344/273/266/347/273/204.md +104 -0
  475. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//346/237/245/347/234/213/345/216/206/345/217/262/350/256/260/345/275/225.md +79 -0
  476. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257.md +94 -0
  477. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/345/220/215/347/247/260.md +35 -0
  478. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/207/252/345/256/232/344/271/211/350/256/260/345/275/225/350/257/246/346/203/205/351/241/265/345/222/214/345/241/253/345/206/231/351/241/265.md +141 -0
  479. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/345/210/227/345/256/275.md +42 -0
  480. package/templates/support-qa/profiles/aitable/wiki/faq-support/02-/345/237/272/347/241/200/346/223/215/344/275/234//350/260/203/346/225/264/350/241/214/351/253/230.md +40 -0
  481. package/templates/support-qa/profiles/aitable/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//344/270/272/350/241/250/346/240/274/346/267/273/345/212/240/345/255/227/346/256/265.md +188 -0
  482. package/templates/support-qa/profiles/aitable/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/215/225/351/200/211/345/244/232/351/200/211/345/255/227/346/256/265/345/220/214/346/255/245/345/205/266/344/273/226/350/241/250/351/200/211/351/241/271.md +142 -0
  483. package/templates/support-qa/profiles/aitable/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/256/241/347/220/206.md +44 -0
  484. package/templates/support-qa/profiles/aitable/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/261/273/345/236/213/345/210/227/350/241/250.md +95 -0
  485. package/templates/support-qa/profiles/aitable/wiki/faq-support/03-/344/275/277/347/224/250/345/255/227/346/256/265//345/255/227/346/256/265/347/274/226/347/273/204.md +138 -0
  486. package/templates/support-qa/profiles/aitable/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/221/250/346/234/237/345/210/206/350/241/250.md +42 -0
  487. package/templates/support-qa/profiles/aitable/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/345/237/272/347/241/200/346/223/215/344/275/234.md +344 -0
  488. package/templates/support-qa/profiles/aitable/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/346/230/216/347/273/206/350/241/250-/344/270/200/346/254/241/345/241/253/345/206/231/345/244/232/346/235/241/346/217/220/344/272/244.md +174 -0
  489. package/templates/support-qa/profiles/aitable/wiki/faq-support/04-/344/275/277/347/224/250/350/241/250/345/215/225//350/241/250/345/215/225/351/242/204/345/241/253/351/273/230/350/256/244/345/200/274.md +97 -0
  490. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250AI/347/224/237/346/210/220/345/205/254/345/274/217.md +26 -0
  491. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/207/275/346/225/260/345/270/270/350/247/201/351/227/256/351/242/230.md +179 -0
  492. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/205/254/345/274/217/345/255/227/346/256/265.md +81 -0
  493. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//344/275/277/347/224/250/345/207/275/346/225/260.md +21 -0
  494. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/345/207/275/346/225/260/345/244/247/345/205/250.md +433 -0
  495. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/346/224/257/346/214/201/346/230/276/347/244/272/346/240/274/345/274/217.md +126 -0
  496. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/205/254/345/274/217/351/224/231/350/257/257/344/273/243/347/240/201/345/210/227/350/241/250.md +30 -0
  497. package/templates/support-qa/profiles/aitable/wiki/faq-support/05-/345/205/254/345/274/217/345/207/275/346/225/260//345/207/275/346/225/260/345/256/236/350/267/265.md +13 -0
  498. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203.md +169 -0
  499. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//347/273/204/347/273/207/345/206/205/345/205/261/344/272/253/346/225/260/346/215/256/346/272/220.md +106 -0
  500. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +176 -0
  501. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211AI/345/220/254/350/256/260/346/225/260/346/215/256/345/220/214/346/255/245.md +100 -0
  502. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211OA/345/256/241/346/211/271/346/225/260/346/215/256/345/220/214/346/255/245.md +194 -0
  503. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/345/276/205/345/212/236/346/225/260/346/215/256/345/220/214/346/255/245.md +87 -0
  504. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/346/227/245/347/250/213/346/225/260/346/215/256/345/220/214/346/255/245.md +92 -0
  505. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/200/203/345/213/244/346/211/223/345/215/241/346/225/260/346/215/256/345/220/214/346/255/245.md +129 -0
  506. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245.md +229 -0
  507. package/templates/support-qa/profiles/aitable/wiki/faq-support/06-/346/225/260/346/215/256/350/277/236/346/216/245/344/270/255/345/277/203//351/222/211/351/222/211/351/200/232/350/256/257/345/275/225/346/225/260/346/215/256/345/220/214/346/255/245.md +120 -0
  508. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//344/275/277/347/224/250AI/350/241/250/346/240/274/350/247/206/345/233/276.md +219 -0
  509. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//345/210/206/344/272/253/350/247/206/345/233/276.md +71 -0
  510. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/225/260/346/215/256/350/241/250/345/222/214/350/247/206/345/233/276/347/232/204/345/205/263/347/263/273.md +48 -0
  511. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/227/245/345/216/206/350/247/206/345/233/276.md +89 -0
  512. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//346/237/245/350/257/242/351/241/265/351/235/242.md +116 -0
  513. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/230/347/211/271/345/233/276.md +135 -0
  514. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/224/273/345/206/214/350/247/206/345/233/276.md +28 -0
  515. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//347/234/213/346/235/277/350/247/206/345/233/276.md +35 -0
  516. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//350/241/250/346/240/274/350/247/206/345/233/276.md +116 -0
  517. package/templates/support-qa/profiles/aitable/wiki/faq-support/07-/344/275/277/347/224/250/350/247/206/345/233/276//351/200/217/350/247/206/350/241/250/350/247/206/345/233/276.md +123 -0
  518. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230/TOP_N/345/210/206/346/236/220.md +78 -0
  519. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/344/270/255/346/267/273/345/212/240/345/244/232/344/270/252/346/225/260/346/215/256/346/272/220.md +129 -0
  520. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/215/225/345/233/276/350/241/250/345/222/214AI/350/247/243/350/257/273/345/206/205/345/256/271/345/210/206/344/272/253.md +104 -0
  521. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/345/270/270/350/247/201/351/227/256/351/242/230.md +31 -0
  522. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/346/231/272/350/203/275/346/200/273/347/273/223/345/210/206/346/236/220.md +57 -0
  523. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/273/252/350/241/250/347/233/230/347/273/204/344/273/266.md +47 -0
  524. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250AI/350/241/250/346/240/274/344/273/252/350/241/250/347/233/230.md +226 -0
  525. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/346/265/201/347/250/213/345/217/221/351/200/201/344/273/252/350/241/250/347/233/230.md +49 -0
  526. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/210/206/344/272/253/344/273/252/350/241/250/347/233/230.md +74 -0
  527. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//345/234/250/344/273/252/350/241/250/347/233/230/344/270/255/347/255/233/351/200/211/346/225/260/346/215/256.md +65 -0
  528. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/207/252/345/256/232/344/271/211/344/273/252/350/241/250/347/233/230/344/270/255/345/277/203.md +93 -0
  529. package/templates/support-qa/profiles/aitable/wiki/faq-support/08-/344/275/277/347/224/250/344/273/252/350/241/250/347/233/230//350/267/237/351/232/217/350/256/277/351/227/256/350/200/205/346/235/203/351/231/220/347/273/237/350/256/241.md +48 -0
  530. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/205/250/346/226/260/345/272/224/347/224/250/346/250/241/345/274/217.md +155 -0
  531. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/210/227/350/241/250/347/273/204/344/273/266.md +228 -0
  532. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//345/233/276/347/211/207.md +93 -0
  533. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/214/211/351/222/256.md +86 -0
  534. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//346/240/207/347/255/276/351/241/265.md +97 -0
  535. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/247/206/345/233/276/347/273/204/344/273/266.md +125 -0
  536. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//350/277/207/346/273/244/345/231/250.md +110 -0
  537. package/templates/support-qa/profiles/aitable/wiki/faq-support/09-/345/272/224/347/224/250/346/250/241/345/274/217//351/200/217/350/247/206/350/241/250/347/273/204/344/273/266.md +142 -0
  538. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201/Webhook/345/217/202/346/225/260/347/232/204/350/257/246/347/273/206/350/257/264/346/230/216.md +76 -0
  539. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/270/200/350/241/250/344/270/200/345/217/267Agent/346/224/257/346/214/201/347/276/244/346/224/266/351/233/206.md +150 -0
  540. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250webhook/350/247/246/345/217/221/350/207/252/345/212/250/345/214/226.md +163 -0
  541. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/344/270/215/345/220/214/350/272/253/344/273/275/345/217/221/351/200/201/351/222/211/351/222/211/346/266/210/346/201/257.md +60 -0
  542. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201.md +219 -0
  543. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//344/275/277/347/224/250/350/207/252/345/212/250/345/214/226/345/276/252/347/216/257/350/212/202/347/202/271.md +63 -0
  544. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/265/201/347/250/213/344/270/255/344/275/277/347/224/250AI/351/227/256/347/255/224.md +69 -0
  545. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//345/234/250/346/266/210/346/201/257/345/215/241/347/211/207/344/270/212/346/267/273/345/212/240/346/214/211/351/222/256.md +93 -0
  546. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/345/217/230/351/207/217/350/247/243/351/207/212/344/270/216/345/270/270/350/247/201/346/212/245/351/224/231.md +158 -0
  547. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//346/265/201/347/250/213/350/247/246/345/217/221/346/235/241/344/273/266/344/270/216/346/211/247/350/241/214/345/212/250/344/275/234/344/270/200/350/247/210.md +310 -0
  548. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250AI/350/241/250/346/240/274/344/270/200/350/241/250/344/270/200/345/212/251/347/220/206/345/217/221/346/266/210/346/201/257-/350/207/252/345/212/250/345/214/226.md +129 -0
  549. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//347/224/250/346/237/245/346/211/276/350/256/260/345/275/225/345/217/221/351/200/201/347/273/204/345/220/210/345/255/227/346/256/265/351/200/232/347/237/245.md +66 -0
  550. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/210/233/345/273/272/351/222/211/351/222/211/345/276/205/345/212/236/346/210/226/346/227/245/347/250/213.md +84 -0
  551. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267AI/347/224/265/350/257/235/345/244/226/345/221/274.md +322 -0
  552. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/350/265/267OA/345/256/241/346/211/271.md +93 -0
  553. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/217/221/351/200/201HTTP/350/257/267/346/261/202.md +168 -0
  554. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/345/270/270/350/247/201/351/227/256/351/242/230.md +83 -0
  555. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/211/271/351/207/217/345/217/221/351/202/256/344/273/266.md +79 -0
  556. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/224/257/346/214/201/346/217/222/345/205/245/345/223/252/344/272/233/345/217/230/351/207/217/345/206/205/345/256/271.md +80 -0
  557. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/207/252/345/212/250/345/214/226/346/233/264/345/244/232/346/211/247/350/241/214/345/212/250/344/275/234/344/275/277/347/224/250/346/214/207/345/215/227.md +21 -0
  558. package/templates/support-qa/profiles/aitable/wiki/faq-support/10-/350/207/252/345/212/250/345/214/226/345/267/245/344/275/234/346/265/201//350/260/203/347/224/250/344/270/211/346/226/271/345/267/245/344/275/234/346/265/201/345/272/224/347/224/250.md +161 -0
  559. package/templates/support-qa/profiles/aitable/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/274/230/345/205/210/344/275/277/347/224/250/347/224/263/350/257/267.md +67 -0
  560. package/templates/support-qa/profiles/aitable/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/344/270/207/350/203/275/350/264/264/344/275/277/347/224/250/350/257/264/346/230/216.md +63 -0
  561. package/templates/support-qa/profiles/aitable/wiki/faq-support/11-AI/350/241/250/346/240/274/345/212/251/347/220/206/AI/350/241/250/346/240/274/345/212/251/347/220/206.md +107 -0
  562. package/templates/support-qa/profiles/aitable/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//344/275/277/347/224/250AI/350/241/250/346/240/274/351/253/230/347/272/247/346/235/203/351/231/220.md +194 -0
  563. package/templates/support-qa/profiles/aitable/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//350/241/214/345/210/227/346/235/203/351/231/220/350/256/276/347/275/256/345/217/212/351/253/230/347/272/247/346/235/203/351/231/220/345/257/271/350/241/250/345/215/225/345/205/254/345/274/217/347/232/204/345/275/261/345/223/215.md +32 -0
  564. package/templates/support-qa/profiles/aitable/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/242/204/350/247/210/351/253/230/347/272/247/346/235/203/351/231/220/347/273/223/346/236/234.md +43 -0
  565. package/templates/support-qa/profiles/aitable/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/345/270/270/350/247/201/351/227/256/351/242/230.md +47 -0
  566. package/templates/support-qa/profiles/aitable/wiki/faq-support/12-/351/253/230/347/272/247/346/235/203/351/231/220//351/253/230/347/272/247/346/235/203/351/231/220/347/232/204/351/273/230/350/256/244/350/247/222/350/211/262.md +36 -0
  567. package/templates/support-qa/profiles/aitable/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/344/270/211/346/226/271/346/217/222/344/273/266/344/275/277/347/224/250/346/216/210/346/235/203.md +19 -0
  568. package/templates/support-qa/profiles/aitable/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/204/232/346/234/254/346/217/222/344/273/266.md +42 -0
  569. package/templates/support-qa/profiles/aitable/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266-/350/207/252/345/256/232/344/271/211/346/217/222/344/273/266.md +51 -0
  570. package/templates/support-qa/profiles/aitable/wiki/faq-support/13-/346/217/222/344/273/266/344/270/255/345/277/203/AI/350/241/250/346/240/274/346/217/222/344/273/266/344/270/255/345/277/203-/344/275/277/347/224/250/346/214/207/345/215/227.md +97 -0
  571. package/templates/support-qa/profiles/aitable/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//344/275/277/347/224/250/346/225/260/346/215/256/350/257/264/346/230/216.md +82 -0
  572. package/templates/support-qa/profiles/aitable/wiki/faq-support/14-/347/256/241/347/220/206/345/220/216/345/217/260//346/235/203/347/233/212/346/225/260/346/215/256/350/257/264/346/230/216.md +111 -0
  573. package/templates/support-qa/profiles/aitable/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265/AI/350/241/250/346/240/274/350/257/257/345/210/240/346/201/242/345/244/215/346/214/207/345/215/227.md +37 -0
  574. package/templates/support-qa/profiles/aitable/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//345/234/250/350/241/250/346/240/274/344/270/255/346/240/207/350/256/260/351/207/215/345/244/215/345/206/205/345/256/271.md +43 -0
  575. package/templates/support-qa/profiles/aitable/wiki/faq-support/15-/345/234/272/346/231/257/345/256/236/350/267/265//347/233/264/346/222/255/345/205/254/345/274/200/347/263/273/345/210/227/350/257/276.md +21 -0
  576. package/templates/support-qa/profiles/aitable/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/344/273/230/350/264/271/346/235/203/347/233/212.md +144 -0
  577. package/templates/support-qa/profiles/aitable/wiki/faq-support/16-/344/273/230/350/264/271/346/235/203/347/233/212//351/222/211/351/222/211AI/350/241/250/346/240/274/346/220/255/345/273/272/346/234/215/345/212/241.md +95 -0
  578. package/templates/support-qa/profiles/aitable/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/346/216/222/347/211/210/346/211/223/345/215/260/345/215/207/347/272/247/350/257/264/346/230/216.md +40 -0
  579. package/templates/support-qa/profiles/aitable/wiki/faq-support/17-/345/205/254/345/221/212/AI/350/241/250/346/240/274-/347/211/210/346/234/254/345/215/207/347/272/247/351/200/232/347/237/245.md +21 -0
  580. package/templates/support-qa/profiles/aitable/wiki/faq-support/17-/345/205/254/345/221/212//350/267/250AI/350/241/250/346/240/274/346/225/260/346/215/256/345/220/214/346/255/245/350/260/203/346/225/264/350/257/264/346/230/216.md +55 -0
  581. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI /350/241/250/346/240/274/346/217/222/344/273/266 - /344/274/201/344/270/232/345/206/205/346/217/222/344/273/266/345/217/221/345/270/203/346/214/207/345/215/227.md" +159 -0
  582. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210FaaS/347/211/210/357/274/211.md" +1362 -0
  583. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265/345/274/200/345/217/221/346/214/207/345/215/227/357/274/210/345/205/254/345/274/217/347/211/210/357/274/211.md" +556 -0
  584. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274 AI /345/255/227/346/256/265 /345/274/200/345/217/221/346/214/207/345/215/227.md" +15 -0
  585. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/AI /350/241/250/346/240/274 AI /345/255/227/346/256/265/345/270/270/350/247/201/346/212/245/351/224/231/350/257/264/346/230/216.md" +649 -0
  586. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/Dify/346/231/272/350/203/275/344/275/223.md" +55 -0
  587. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/GPTPro /345/255/227/346/256/265/346/215/267/345/276/204 /345/257/206/351/222/245/350/216/267/345/217/226/346/214/207/345/215/227.md" +23 -0
  588. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227/OpenClaw /345/260/217/351/276/231/350/231/276/345/212/251/346/211/213/351/205/215/347/275/256/346/225/231/347/250/213.md" +27 -0
  589. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/233/275/345/206/205/345/244/226/345/277/253/351/200/222/347/211/251/346/265/201/344/277/241/346/201/257/346/237/245/350/257/242/344/275/277/347/224/250/346/214/207/345/215/227.md" +907 -0
  590. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/255/227/346/256/265/346/250/241/347/211/210 /344/275/277/347/224/250/346/214/207/345/215/227//345/277/253/351/200/222/347/211/251/346/265/201/346/237/245/350/257/242/345/212/251/346/211/213/344/275/277/347/224/250/346/214/207/345/215/227.md" +1 -0
  591. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/AI/350/241/250/346/240/274JSAPI /347/261/273/345/236/213/346/217/217/350/277/260.xlsx +0 -0
  592. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Base /346/250/241/345/235/227.md" +391 -0
  593. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AttachmentField /351/231/204/344/273/266/345/255/227/346/256/265.md" +200 -0
  594. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/AutoNumberField /350/207/252/345/212/250/347/274/226/345/217/267/345/255/227/346/256/265.md" +75 -0
  595. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BarcodeField /346/235/241/347/240/201/345/255/227/346/256/265.md" +95 -0
  596. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/BidirectionalLinkField /345/217/214/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +294 -0
  597. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CheckboxField /345/244/215/351/200/211/346/241/206/345/255/227/346/256/265.md" +95 -0
  598. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CreatedTimeField /345/210/233/345/273/272/346/227/266/351/227/264/345/255/227/346/256/265.md" +134 -0
  599. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/CurrencyField /350/264/247/345/270/201/345/255/227/346/256/265.md" +260 -0
  600. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DateField /346/227/245/346/234/237/345/255/227/346/256/265.md" +183 -0
  601. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/DepartmentField /351/203/250/351/227/250/345/255/227/346/256/265.md" +111 -0
  602. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/EmailField /351/202/256/347/256/261/345/255/227/346/256/265.md" +99 -0
  603. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FilterUpField /346/237/245/346/211/276/345/274/225/347/224/250/345/255/227/346/256/265.md" +73 -0
  604. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/FormulaField /345/205/254/345/274/217/345/255/227/346/256/265.md" +109 -0
  605. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GeoLocationField /345/234/260/347/220/206/344/275/215/347/275/256/345/255/227/346/256/265.md" +33 -0
  606. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/GroupField /347/276/244/347/273/204/345/255/227/346/256/265.md" +111 -0
  607. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LastModifiedTimeField /346/234/200/345/220/216/346/233/264/346/226/260/346/227/266/351/227/264/345/255/227/346/256/265.md" +134 -0
  608. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/LookupField /345/205/263/350/201/224/345/274/225/347/224/250/345/255/227/346/256/265.md" +71 -0
  609. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/MultiSelectField /345/244/232/351/200/211/345/255/227/346/256/265.md" +349 -0
  610. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/NumberField /346/225/260/345/255/227/345/255/227/346/256/265.md" +175 -0
  611. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/PrimaryField /344/270/273/351/224/256/346/226/207/346/241/243/345/255/227/346/256/265.md" +91 -0
  612. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/ProgressField /350/277/233/345/272/246/345/255/227/346/256/265.md" +324 -0
  613. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RatingField /350/257/204/345/210/206/345/255/227/346/256/265.md" +320 -0
  614. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/RichTextField /345/257/214/346/226/207/346/234/254/345/255/227/346/256/265.md" +45 -0
  615. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/SingleSelectField /345/215/225/351/200/211/345/255/227/346/256/265.md" +336 -0
  616. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TelephoneField /347/224/265/350/257/235/345/255/227/346/256/265.md" +99 -0
  617. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/TextField /346/226/207/346/234/254/345/255/227/346/256/265.md" +93 -0
  618. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UnidirectionalLinkFields /345/215/225/345/220/221/345/205/263/350/201/224/345/255/227/346/256/265.md" +295 -0
  619. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UrlField /351/223/276/346/216/245/345/255/227/346/256/265.md" +163 -0
  620. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227/UserField /344/272/272/345/221/230/345/255/227/346/256/265.md" +266 -0
  621. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Field /346/250/241/345/235/227.md" +379 -0
  622. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Record /346/250/241/345/235/227.md" +277 -0
  623. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/Sheet /346/250/241/345/235/227.md" +1013 -0
  624. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/UI /346/250/241/345/235/227.md" +472 -0
  625. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227/GridView /350/241/250/346/240/274/350/247/206/345/233/276.md" +835 -0
  626. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243/View /346/250/241/345/235/227.md" +203 -0
  627. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md +65 -0
  628. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/345/257/271/350/261/241/346/250/241/345/236/213API/345/217/202/350/200/203/346/226/207/346/241/243//350/257/273/345/206/231AI /350/241/250/346/240/274/346/250/241/345/236/213.md" +29 -0
  629. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/346/225/260/346/215/256/346/272/220 /345/274/200/345/217/221/346/214/207/345/215/227.md" +607 -0
  630. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +391 -0
  631. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +379 -0
  632. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Input/346/250/241/345/235/227.md" +331 -0
  633. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Output/346/250/241/345/235/227.md" +197 -0
  634. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +277 -0
  635. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +1013 -0
  636. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +472 -0
  637. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +203 -0
  638. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +65 -0
  639. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/204/232/346/234/254/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +142 -0
  640. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Base /346/250/241/345/235/227.md" +391 -0
  641. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Event/344/272/213/344/273/266/346/250/241/345/235/227.md" +182 -0
  642. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Field /346/250/241/345/235/227.md" +379 -0
  643. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Record /346/250/241/345/235/227.md" +277 -0
  644. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/Sheet /346/250/241/345/235/227.md" +1013 -0
  645. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/UI /346/250/241/345/235/227.md" +472 -0
  646. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227/View /346/250/241/345/235/227.md" +203 -0
  647. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/205/266/344/273/226/346/216/245/345/217/243.md" +146 -0
  648. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//345/255/227/346/256/265/346/225/260/346/215/256/347/273/223/346/236/204.md" +65 -0
  649. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227//346/240/270/345/277/203/347/237/245/350/257/206.md" +54 -0
  650. package/templates/support-qa/profiles/aitable/wiki/faq-support/18-/345/274/200/345/217/221/350/200/205/346/214/207/345/215/227/AI/350/241/250/346/240/274/350/276/271/346/240/217/346/217/222/344/273/266 /345/274/200/345/217/221/346/214/207/345/215/227.md" +192 -0
  651. package/templates/support-qa/profiles/aitable/wiki/faq-support//351/222/211/351/222/211AI/350/241/250/346/240/274FAQ.md +593 -0
  652. package/templates/support-qa/profiles/default/profile/fastpath/known-answers.yml +32 -0
  653. package/templates/support-qa/profiles/default/profile/profile.yml +206 -0
  654. package/templates/support-qa/profiles/default/profile/troubleshoot/classifiers.yml +37 -0
  655. package/templates/support-qa/profiles/default/wiki/support//345/270/270/350/247/201/351/227/256/351/242/230.md +10 -0
  656. package/templates/support-qa/workflows/admin-kb-update/recipes/kb-refine.recipe.ts +137 -0
  657. package/templates/support-qa/workflows/admin-kb-update/recipes/kb_sync_handler.recipe.ts +119 -0
  658. package/templates/support-qa/workflows/admin-kb-update/workflow.yml +96 -0
  659. package/templates/support-qa/workflows/config-sync/recipes/config_sync.recipe.ts +569 -0
  660. package/templates/support-qa/workflows/config-sync/recipes/config_sync_handler.recipe.ts +16 -0
  661. package/templates/support-qa/workflows/config-sync/workflow.yml +62 -0
  662. package/templates/support-qa/workflows/daily-review/recipes/daily_review.recipe.ts +667 -0
  663. package/templates/support-qa/workflows/daily-review/recipes/daily_review_handler.recipe.ts +26 -0
  664. package/templates/support-qa/workflows/daily-review/workflow.yml +65 -0
  665. package/templates/support-qa/workflows/group-qa/recipes/answer.recipe.ts +223 -0
  666. package/templates/support-qa/workflows/group-qa/recipes/conversation_handler.recipe.ts +269 -0
  667. package/templates/support-qa/workflows/group-qa/recipes/fastpath.recipe.ts +78 -0
  668. package/templates/support-qa/workflows/group-qa/recipes/on-action.recipe.ts +156 -0
  669. package/templates/support-qa/workflows/group-qa/recipes/reply-to-group.recipe.ts +174 -0
  670. package/templates/support-qa/workflows/group-qa/recipes/troubleshoot.recipe.ts +278 -0
  671. package/templates/support-qa/workflows/group-qa/workflow.yml +258 -0
  672. package/templates/support-qa/workspaces/daily-review/AGENTS.md +233 -0
  673. package/templates/support-qa/workspaces/kb-editor/AGENTS.md +32 -0
  674. package/templates/support-qa/workspaces/support/AGENTS.md +148 -0
  675. package/templates/support-qa/workspaces/troubleshooter/AGENTS.md +71 -0
package/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # aitable-workflow-cli
2
+
3
+ `aitable-workflow` 命令行工具 —— 配置驱动的 AI 表格工作流自动化引擎的入口。用 YAML 描述业务流程,AI 逐步执行并把结果回写钉钉 AI 表格。
4
+
5
+ ## 能做什么
6
+
7
+ - **配置即流程** —— 用一份配置描述业务流程,无需写编排代码
8
+ - **自动推进** —— 引擎轮询 AI 表格,按流程逐步执行并回写结果
9
+ - **人工可介入** —— 需要人工确认的步骤自动暂停,审核通过后继续
10
+ - **过程可观测** —— 每步记录 AI 调用的输入/输出/耗时,可随时回看
11
+ - **本地 Web 台面** —— `serve` 一键起本地 API + 前端页面
12
+
13
+ ## 前置条件
14
+
15
+ | 依赖 | 用途 |
16
+ |------|------|
17
+ | Node.js ≥ 20.19 | 运行时 |
18
+ | dws CLI | 与钉钉 AI 表格交互(`aitable-workflow init` 会自动检查/安装) |
19
+ | 钉钉 AI 表格 | 数据存储,需要 base_id;`dws auth login` 且账号有权限 |
20
+ | Coding Agent(claude / codex 等) | `design` 阶段生成工作流所需 |
21
+ | LLM API Key | AI 推理(IdeaLab / DashScope / OpenAI 任一),配在环境变量 |
22
+
23
+ ## 安装
24
+
25
+ ```bash
26
+ npm i -g aitable-workflow-cli
27
+ ```
28
+
29
+ > 安装后即可全局使用 `aitable-workflow` 命令。
30
+
31
+ ## 快速开始
32
+
33
+ 确保上面「前置条件」已就绪(可调用的 Coding Agent、真实 AI 表格 + dws 登录、LLM Key)。然后:
34
+
35
+ ```bash
36
+ # 1. 生成项目配置骨架(交互式向导:填场景、base_id、Agent、LLM)
37
+ aitable-workflow init
38
+
39
+ # 2. 由 Coding Agent 依据场景生成工作流与 recipes
40
+ aitable-workflow design
41
+
42
+ # 3. 校验并补齐配置(含 Coding Agent 选择),再在 AI 表格创建字段/状态选项并编译知识库
43
+ aitable-workflow setup
44
+
45
+ # 4. 在 AI 表格手动建一条工单,状态选「待处理」
46
+
47
+ # 5. 启动引擎,自动轮询推进(Ctrl+C 优雅退出)
48
+ aitable-workflow run
49
+ ```
50
+
51
+ `init` 生成的是**配置骨架**(`aitable-workflow.config.yml`、`coding-agents.config.json`、空 `recipes/`);`workflow.yml` 由 `design` 生成。也可以用内置模板直接脚手架一个可运行项目:
52
+
53
+ ```bash
54
+ aitable-workflow init --template support-qa --profile aitable
55
+ ```
56
+
57
+
58
+ ## 命令总览
59
+
60
+ 所有项目类命令支持 `-c, --config <path>` 指定配置目录;全局 `-d, --debug` 输出 debug 级别日志。
61
+
62
+ ### 项目工作流
63
+
64
+ | 命令 | 说明 |
65
+ |------|------|
66
+ | `aitable-workflow init` | 交互式向导,生成项目配置骨架;`--template <name>` 从内置模板脚手架 |
67
+ | `aitable-workflow design` | 调 Coding Agent 生成 `workflow.yml` 与 `recipes/` |
68
+ | `aitable-workflow setup` | 先交互式校验/补齐配置(含 Coding Agent 选择),再在 AI 表格创建字段、状态选项并编译知识库;`--skip-config` 跳过前置校验(CI 用),`--no-kb` / `--kb-full` 控制知识库 |
69
+ | `aitable-workflow run` | 启动编排引擎,轮询并推进工单 |
70
+ | `aitable-workflow validate` | 校验配置与工作流模板,输出步骤链摘要 |
71
+ | `aitable-workflow config` | 单独校验项目配置完整性并交互式修改参数(`--json` / `--no-interactive`);`setup` 已内置该步骤,通常无需单跑 |
72
+ | `aitable-workflow sync` | 检测配置与表结构的偏差(字段类型/选项 drift),给出修复建议 |
73
+ | `aitable-workflow agents` | 列出支持的 Coding Agent 适配器,标注本机已安装的 |
74
+ | `aitable-workflow inspect [recordId]` | 查看工单每步的 AI 调用 trace;`--recipes` / `--validate` 校验 recipe schema |
75
+
76
+ ### 本地服务
77
+
78
+ | 命令 | 说明 |
79
+ |------|------|
80
+ | `aitable-workflow serve` | 启动本地 HTTP API 并托管 Web 前端页面(local 模式自动打开浏览器) |
81
+
82
+ 常用旗标:`-p, --port`(默认 8787)、`--host`(默认 127.0.0.1)、`--mode local\|relay`、`--no-open`。
83
+
84
+
85
+ ## 配置速览
86
+
87
+ 一份最小 `aitable-workflow.config.yml` 的关键块:
88
+
89
+ ```yaml
90
+ tracker:
91
+ base_id: "YOUR_BASE_ID" # AI 表格 Base ID
92
+ table_id: "YOUR_TABLE_ID" # 表 ID
93
+ workflow:
94
+ template: "./workflow.yml" # 由 design 生成
95
+ recipe_dir: "./recipes"
96
+ recipe:
97
+ llm:
98
+ provider: idealab
99
+ model: Qwen3.7-Max
100
+ api_key: ${env.IDEALAB_API_KEY}
101
+ ```
@@ -0,0 +1,21 @@
1
+ #!/usr/bin/env node
2
+ import { existsSync } from "node:fs";
3
+ import { dirname, resolve } from "node:path";
4
+ import { fileURLToPath, pathToFileURL } from "node:url";
5
+
6
+ const dir = dirname(fileURLToPath(import.meta.url));
7
+ const srcEntry = resolve(dir, "../src/cli.ts");
8
+
9
+ // config/setup/run 都会动态加载用户项目中的 .recipe.ts。发布物没有 src/,也必须
10
+ // 在载入 dist/cli.js 前注册 tsx,不能只依赖源码开发分支或外部 NODE_OPTIONS。
11
+ const tsxApi = await import("tsx/esm/api");
12
+ tsxApi.register?.();
13
+
14
+ if (existsSync(srcEntry)) {
15
+ // 本地开发:core/server 的 exports 在开发态指向各自 src,
16
+ // 故改任意包的源码都即时生效,无需构建。
17
+ await import(pathToFileURL(srcEntry).href);
18
+ } else {
19
+ // 发布物不含 src/ → 跑构建产物(依赖的 core/server 也被 publishConfig 切到 dist)。
20
+ await import(pathToFileURL(resolve(dir, "../dist/cli.js")).href);
21
+ }
@@ -0,0 +1 @@
1
+ var c=Object.defineProperty;var d=(a,b)=>c(a,"name",{value:b,configurable:!0});export{d as a};
@@ -0,0 +1,38 @@
1
+ import{a as l}from"./chunk-EI7MMDWY.js";import{readdir as ee,readFile as S,mkdir as te}from"fs/promises";import w from"path";import U from"yaml";import{checkbox as V,input as T,password as Y,confirm as h,select as P}from"@inquirer/prompts";import{runCheck as $,ingest as ne,detectCodingEngines as oe,engineToAgent as se,ENGINE_TO_AGENT as re,writeBack as D,writeJsonFile as ie}from"aitable-workflow-core";var M={name:"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u5C42",value:null};async function Ne(e){let n=e.configPath;e.json||console.log(`
2
+ \u{1F50D} \u6B63\u5728\u6821\u9A8C\u9879\u76EE\u914D\u7F6E: ${n}
3
+ `);let t=await $({configPath:n,workflowId:e.workflowId});if(e.json&&(process.stdout.write(JSON.stringify(t,null,2)+`
4
+ `),process.exit(t.ok?0:1)),x(t),!e.interactive){if(e.noExit)return t;process.exit(t.ok?0:1)}let r=await Z(n),o=le(t);if(e.offerSkipToBuild&&o.every(s=>v(s))){let s=new Set(o.map(d=>d.key));for(let d of q(t))s.add(d.key);let i=s.size;if(await h({message:i>0?`\u5FC5\u586B\u914D\u7F6E\u5DF2\u5C31\u7EEA\uFF0C\u5269\u4F59 ${i} \u9879\u5747\u4E3A\u5EFA\u8BAE\u914D\u7F6E\u3002\u662F\u5426\u8DF3\u8FC7\u914D\u7F6E\uFF0C\u76F4\u63A5\u5F00\u59CB\u642D\u5EFA\uFF1F`:"\u5FC5\u586B\u914D\u7F6E\u5DF2\u5C31\u7EEA\u3002\u662F\u5426\u8DF3\u8FC7\u914D\u7F6E\uFF0C\u76F4\u63A5\u5F00\u59CB\u642D\u5EFA\uFF1F",default:!0}))return console.log(`
5
+ \u21B7 \u5DF2\u8DF3\u8FC7\u914D\u7F6E\u73AF\u8282\uFF0C\u7EE7\u7EED setup \u642D\u5EFA\u6D41\u7A0B\uFF08\u5EFA\u8BAE\u9879\u53EF\u968F\u65F6\u7528 config \u547D\u4EE4\u8865\u914D\uFF09\u3002
6
+ `),t}return o.length>0&&(t=await fe(o,r,n,e.workflowId,ce(t))),t=await ge(t,r,n,e.workflowId),t=await Te(t,r,n,e.workflowId),await me(t,n,e.workflowId),t}l(Ne,"runConfigCommand");function x(e){for(let i of e.modules)ae(i);console.log("\u2501".repeat(56)),console.log();let{passedModules:n,totalModules:t,errors:r,warnings:o,suggestions:s}=e.summary;if(e.ok)console.log("\u2705 \u6821\u9A8C\u901A\u8FC7 \u2014 \u6240\u6709\u914D\u7F6E\u5B8C\u6574\uFF0C\u9879\u76EE\u53EF\u8FD0\u884C\u3002");else{let i=[`${n}/${t} \u6A21\u5757\u901A\u8FC7`];r>0&&i.push(`${r} \u9879\u963B\u65AD`),o>0&&i.push(`${o} \u9879\u8B66\u544A`),console.log(`\u{1F4CA} \u6821\u9A8C\u7ED3\u679C: ${i.join(", ")}`)}s>0&&console.log(`\u{1F4A1} ${s} \u9879\u5EFA\u8BAE\u914D\u7F6E\uFF08\u975E\u5FC5\u987B\uFF0C\u4F46\u63A8\u8350\u586B\u5199\uFF09`),console.log()}l(x,"printReport");function ae(e){if(console.log(`\u2501\u2501 ${B(e)} \u2501${"\u2501".repeat(Math.max(0,50-B(e).length))}`),e.workflows&&e.workflows.length>0)for(let o=0;o<e.workflows.length;o++){let s=e.workflows[o];console.log(`
7
+ \u2500 ${o+1}. \u5DE5\u4F5C\u6D41: ${s.name} (${s.id})`);for(let g of s.items)N(g," ");let i=s.ok?"\u2713":"\u2717";console.log(` ${i} ${s.id} \u914D\u7F6E${s.ok?"\u5B8C\u6574":"\u4E0D\u5B8C\u6574"}`)}else{e.id==="env"&&e.items.length>1&&console.log(` \u5F15\u7528\u4E86 ${e.items.length} \u4E2A\u73AF\u5883\u53D8\u91CF:`);for(let o of e.items)N(o," ")}let n=e.id==="workflow"&&e.workflows?e.workflows.reduce((o,s)=>o+s.items.filter(i=>i.status==="error").length,0):e.items.filter(o=>o.status==="error").length,t=e.ok?"\u2713":"\u2717",r=e.ok?`${e.name}\u5B8C\u6574`:`${e.name}\u4E0D\u5B8C\u6574 \u2014 ${n} \u9879\u5F85\u8865\u9F50`;console.log(` ${t} ${r}`),console.log()}l(ae,"printModuleReport");function N(e,n){let r={ok:"\u2713",error:"\u2717",warn:"\u26A0",suggestion:"\u{1F4A1}"}[e.status]??"?",o=e.status==="error"?" \u2190 \u5FC5\u987B\u586B\u5199":e.status==="suggestion"?" \u2190 \u5EFA\u8BAE\u914D\u7F6E":"",s=e.message?e.message.startsWith(e.key)?e.message:`${e.key}: ${e.message}`:e.key;console.log(`${n}${r} ${s}${o}`)}l(N,"printCheckItem");function B(e){return{project:"1. \u9879\u76EE\u7EA7\u914D\u7F6E (aitable-workflow.config.yml)",coding_agent:"2. Coding Agent",workflow:"3. \u5DE5\u4F5C\u6D41\u7EA7\u914D\u7F6E",roles:"4. \u89D2\u8272\u914D\u7F6E (roles/)",env:"5. \u73AF\u5883\u53D8\u91CF (.env)"}[e.id]??e.name}l(B,"moduleTitle");function Be(e){return W(e,n=>n.status==="error")}l(Be,"collectErrorItems");function q(e){return W(e,n=>n.status==="suggestion")}l(q,"collectSuggestionItems");function le(e){return W(e,n=>n.status==="error"||v(n)&&n.status!=="ok")}l(le,"collectPromptItems");function W(e,n){let t=[];for(let r of e.modules)if(r.workflows)for(let o of r.workflows)for(let s of o.items){let i=I(s);n(s)&&i&&t.push({...s,writeTarget:i})}else for(let o of r.items){let s=I(o);n(o)&&s&&t.push({...o,writeTarget:s})}return t}l(W,"collectPromptableItems");function v(e){return I(e)?e.surface?e.surface.allowEmpty:e.status==="warn":!1}l(v,"isOptionalPromptItem");function I(e){return e.writeTarget??e.surface?.writeTarget}l(I,"normalizedWriteTarget");function ce(e){let n=new Map;for(let t of e.modules){let r=t.workflows?t.workflows.flatMap(o=>o.items):t.items;for(let o of r)typeof o.value=="string"&&A(o)&&!n.has(C(o))&&z(o,o.value,n)}return n}l(ce,"collectPromptDefaults");function ue(e,n){if(e.key==="coding_agent.engine"&&typeof e.value=="string")return e.value;if(A(e)){if(typeof e.value=="string"&&e.value.trim())return e.value;let t=n.get(C(e));if(t)return t}if(typeof e.value=="boolean")return e.value?"true":"false";if(e.status==="warn"&&typeof e.value=="string")return e.value}l(ue,"promptDefaultForItem");function z(e,n,t){let r=n.trim();r&&A(e)&&t.set(C(e),r)}l(z,"rememberPromptValue");async function fe(e,n,t,r,o=new Map){if(e.length===0)return $({configPath:t,workflowId:r});let s=e.filter(u=>!v(u)).length,i=e.length-s,g=[`${s} \u9879\u7F3A\u5931\u914D\u7F6E`];i>0&&g.push(`${i} \u9879\u5EFA\u8BAE\u914D\u7F6E`),console.log(`
8
+ \u53D1\u73B0 ${g.join("\uFF0C")}:
9
+ `);let d=e.map((u,a)=>({name:`[${v(u)?"\u5EFA\u8BAE":Q(u.writeTarget)}] ${u.key} \u2014 ${u.surface?.description??u.message??""}`,value:a,checked:!0})),c=await V({message:"\u9009\u62E9\u8981\u8865\u9F50\u7684\u9879\uFF08\u2191\u2193 \u79FB\u52A8, Space \u9009\u62E9, Enter \u786E\u8BA4, A \u5168\u9009\uFF09",choices:d});if(c.length===0)return console.log(`
10
+ \u672A\u9009\u62E9\u4EFB\u4F55\u9879\uFF0C\u8DF3\u8FC7\u8865\u9F50\u3002
11
+ `),$({configPath:t,workflowId:r});for(let u=0;u<c.length;u++){let a=e[c[u]];if(await he(a,n)){console.log(`
12
+ \u21B7 ${a.key} \u5DF2\u5728\u9009\u62E9 Coding Agent \u65F6\u81EA\u52A8\u542F\u7528\uFF0C\u8DF3\u8FC7`);continue}console.log(`
13
+ \u2501\u2501 \u914D\u7F6E\u9879 (${u+1}/${c.length}) \u2501${"\u2501".repeat(30)}`),console.log(` \u914D\u7F6E\u9879: ${a.key}`),a.surface?.description&&console.log(` \u8BF4\u660E: ${a.surface?.description}`),a.writeTarget&&console.log(` \u6587\u4EF6: ${b(a.writeTarget)}`),a.writeTarget?.type==="yaml"&&a.writeTarget.valueType==="string[]"&&console.log(" \u63D0\u793A: \u591A\u4E2A\u503C\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF08\u5982 cidAAA==,cidBBB==\uFF09");let p=v(a);p&&console.log(" \u63D0\u793A: \u76F4\u63A5\u56DE\u8F66\u7559\u7A7A\u5373\u53EF\uFF0Csetup \u9636\u6BB5\u4F1A\u81EA\u52A8\u521B\u5EFA\u8868\u683C\u5E76\u56DE\u586B\u5230\u914D\u7F6E\u6587\u4EF6\u3002"),console.log();let k=ue(a,o),y=await K(a,a.writeTarget,k,p);if(p&&y.trim().length===0){console.log(` \u21B7 \u5DF2\u4FDD\u7559\u4E3A\u7A7A\uFF0Csetup \u9636\u6BB5\u5C06\u81EA\u52A8\u521B\u5EFA\u8868\u683C\u5E76\u56DE\u586B\u5230 ${b(a.writeTarget)}`);continue}await D(a.writeTarget,y,n),await F(a,y,n),z(a,y,o),console.log(` \u2713 \u5DF2\u66F4\u65B0 ${b(a.writeTarget)}`)}console.log(`
14
+ \u2705 \u5DF2\u5904\u7406 ${c.length} \u9879\u914D\u7F6E\u3002\u91CD\u65B0\u6821\u9A8C...
15
+ `);let f=await $({configPath:t,workflowId:r});return x(f),f}l(fe,"promptFixMissing");async function ge(e,n,t,r){let o=q(e);if(o.length===0)return e;console.log(`
16
+ \u{1F4A1} \u53D1\u73B0 ${o.length} \u9879\u5EFA\u8BAE\u914D\u7F6E:
17
+ `);for(let d of o)console.log(` - ${d.key}: ${d.surface?.description??d.message??"\u5EFA\u8BAE\u914D\u7F6E"}`);if(console.log(),!await h({message:"\u662F\u5426\u73B0\u5728\u914D\u7F6E\u8FD9\u4E9B\u5EFA\u8BAE\u9879\uFF1F",default:!1}))return e;let i=await de({items:o,configDir:n,originalResult:e,title:"\u586B\u5199\u5EFA\u8BAE\u914D\u7F6E",heading:"\u53EF\u914D\u7F6E\u7684\u5EFA\u8BAE\u9879:",selectMessage:"\u9009\u62E9\u8981\u914D\u7F6E\u7684\u5EFA\u8BAE\u9879\uFF08\u2191\u2193 \u79FB\u52A8, Space \u9009\u62E9, Enter \u786E\u8BA4, A \u5168\u9009\uFF09",selectedMessage:"\u672A\u9009\u62E9\u4EFB\u4F55\u5EFA\u8BAE\u9879\uFF0C\u8DF3\u8FC7\u3002"});if(i===0)return e;console.log(`
18
+ \u2705 \u5DF2\u586B\u5199 ${i} \u9879\u5EFA\u8BAE\u914D\u7F6E\u3002\u91CD\u65B0\u6821\u9A8C...
19
+ `);let g=await $({configPath:t,workflowId:r});return x(g),g}l(ge,"promptConfigureSuggestions");async function de(e){let{items:n,configDir:t,originalResult:r,title:o,heading:s,selectMessage:i,selectedMessage:g}=e;if(n.length===0)return 0;console.log(`
20
+ ${s}
21
+ `);let d=new Map;r&&je(r,d);let c=n.map((u,a)=>({name:`[${Q(u.writeTarget)}] ${u.key} \u2014 ${u.surface?.description??u.message??""}`,value:a,checked:!0})),f=await V({message:i,choices:c});if(f.length===0)return console.log(`
22
+ ${g}
23
+ `),0;for(let u=0;u<f.length;u++){let a=n[f[u]];console.log(`
24
+ \u2501\u2501 ${o} (${u+1}/${f.length}) \u2501${"\u2501".repeat(30)}`),console.log(` \u914D\u7F6E\u9879: ${a.key}`),a.surface?.description&&console.log(` \u8BF4\u660E: ${a.surface?.description}`),a.writeTarget&&console.log(` \u6587\u4EF6: ${b(a.writeTarget)}`),a.writeTarget?.type==="yaml"&&a.writeTarget.valueType==="string[]"&&console.log(" \u63D0\u793A: \u591A\u4E2A\u503C\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF08\u5982 cidAAA==,cidBBB==\uFF09"),console.log();let p=xe(a,d),k=p?`\uFF08\u5EFA\u8BAE\u503C: ${Re(p)}\uFF0C\u76F4\u63A5\u56DE\u8F66\u4F7F\u7528\uFF09`:"",y=await K(a,a.writeTarget,p,v(a));await D(a.writeTarget,y,t),await F(a,y,t),console.log(` \u2713 \u5DF2\u66F4\u65B0 ${b(a.writeTarget)}`)}return f.length}l(de,"promptFillItems");async function me(e,n,t){let r=e.summary.suggestions;if(!await h({message:r>0?"\u662F\u5426\u8FD8\u9700\u8981\u4FEE\u6539\u5176\u4ED6\u914D\u7F6E\uFF1F":"\u662F\u5426\u9700\u8981\u4FEE\u6539\u914D\u7F6E\uFF1F",default:!1}))return;let s=await Z(n);for(;;){let i=await P({message:"\u9009\u62E9\u8981\u4FEE\u6539\u7684\u914D\u7F6E\u7C7B\u522B:",choices:[{name:"1. \u9879\u76EE\u7EA7\u914D\u7F6E (agent \u5F15\u64CE / \u8F6E\u8BE2 / SLA)",value:"project"},{name:"2. \u5DE5\u4F5C\u6D41\u7EA7\u914D\u7F6E (tracker / toolkit / event source / handler / \u6B65\u9AA4\u53C2\u6570)",value:"workflow"},{name:"3. \u89D2\u8272\u914D\u7F6E",value:"roles"},{name:"4. \u73AF\u5883\u53D8\u91CF",value:"env"},M]});if(i===null)break;let g=e.modules.find(m=>m.id===i);if(!g){console.log(` \u8BE5\u6A21\u5757\u65E0\u53EF\u4FEE\u6539\u9879
25
+ `);continue}let d=await we(g,s);if(d.length===0){console.log(` \u8BE5\u6A21\u5757\u65E0\u53EF\u4FEE\u6539\u9879
26
+ `);continue}console.log(` \u53EF\u4FEE\u6539 ${d.length} \u9879\uFF08\u4EC5\u5C55\u793A CLI \u53EF\u5B89\u5168\u5199\u56DE\u7684\u914D\u7F6E\u9879\uFF09
27
+ `);let c=await P({message:"\u9009\u62E9\u8981\u4FEE\u6539\u7684\u914D\u7F6E\u9879:",choices:[...d.map(m=>({name:`${m.label} (\u5F53\u524D: ${Pe(m.item)})`,value:m})),M]});if(!c)continue;let f=c.item,u=c.label,a=await K(f,f.writeTarget,Ae(f),v(f),u);f.writeTarget&&(await D(f.writeTarget,a,s),await F(f,a,s),console.log(` \u2713 \u5DF2\u66F4\u65B0 ${b(f.writeTarget)}
28
+ `)),e=await $({configPath:n,workflowId:t})}}l(me,"promptBrowseAndEdit");async function K(e,n,t,r,o){let s=o??e.key,i=n?.valueType==="boolean",g=n?.type==="yaml"&&n.valueType==="string[]";if(e.key==="coding_agent.engine")return ye(t);if(e.surface?.envJsonSpec)return pe(e,e.surface.envJsonSpec,s,t);if(i){let d=t?t.toLowerCase()==="true":!0;return await h({message:`\u662F\u5426\u542F\u7528 ${s}\uFF1F`,default:d})?"true":"false"}return e.sensitive?await Y({message:`\u8BF7\u8F93\u5165 ${s}:`}):await T({message:`\u8BF7\u8F93\u5165 ${s}${g?"\uFF08\u9017\u53F7\u5206\u9694\uFF09":""}${t?`\uFF08\u9ED8\u8BA4: ${t}\uFF09`:""}:`,default:t,validate:l(d=>Ee(e,n,d,r),"validate")})}l(K,"promptForValue");async function pe(e,n,t,r){let o=n.keyLabel??"\u540D\u79F0",s=/secret|token|password|api_key/i,i=new Map,g=r??(typeof e.value=="string"?e.value:"");try{let c=JSON.parse(g);if(c&&typeof c=="object"&&!Array.isArray(c))for(let[f,u]of Object.entries(c)){let a={};for(let[m,p]of Object.entries(u??{}))a[m]=p==null?"":String(p);i.set(f,a)}}catch{}console.log(`
29
+ ${t} \u6309\u9879\u586B\u5199\uFF1A\u6BCF\u9879\u4E00\u4E2A\u300C${o}\u300D\uFF0C\u4E0B\u8BBE ${n.valueFields.join(" / ")} \u5B57\u6BB5\u3002`),n.example&&console.log(` \u683C\u5F0F\u53C2\u8003: ${n.example}`);let d=l(async c=>{let f=i.get(c)??{},u={...f},a=[...n.valueFields];for(let m of Object.keys(f))a.includes(m)||a.push(m);for(let m of a){let p=s.test(m)?Y:T,k=f[m]?`\uFF08\u5F53\u524D: ${s.test(m)?"***":f[m]}\uFF0C\u56DE\u8F66\u4FDD\u7559\uFF09`:"",y=await p({message:` ${c}.${m}${k}:`});(y.trim()||!f[m])&&(u[m]=y.trim())}i.set(c,u)},"promptEntryFields");for(;;){let c=[...i.keys()],f=c.length>0?`\u5DF2\u914D ${c.length} \u9879: ${c.join(", ")}`:"\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u9879",u=await P({message:`${t}\uFF08${f}\uFF09:`,choices:[{name:`\u2795 \u6DFB\u52A0\u4E00\u9879\uFF08\u5148\u586B ${o}\uFF0C\u518D\u9010\u5B57\u6BB5\u586B\u503C\uFF09`,value:"add"},...c.map(a=>({name:`\u270F\uFE0F \u7F16\u8F91 ${a}`,value:`edit:${a}`})),...c.map(a=>({name:`\u{1F5D1} \u5220\u9664 ${a}`,value:`del:${a}`})),{name:"\u2705 \u5B8C\u6210\u5E76\u4FDD\u5B58",value:"done"}]});if(u==="done"){if(c.length===0&&!await h({message:"\u5F53\u524D\u6CA1\u6709\u4EFB\u4F55\u6761\u76EE\uFF0C\u786E\u5B9A\u4FDD\u5B58\u7A7A\u914D\u7F6E\uFF1F",default:!1}))continue;break}if(u==="add"){let a=await T({message:` \u65B0\u589E\u9879\u7684 ${o}:`,validate:l(m=>{let p=m.trim();return p?i.has(p)?`${o} \u5DF2\u5B58\u5728: ${p}`:!0:`${o} \u4E0D\u80FD\u4E3A\u7A7A`},"validate")});await d(a.trim());continue}if(u.startsWith("edit:")){await d(u.slice(5));continue}if(u.startsWith("del:")){i.delete(u.slice(4));continue}}return JSON.stringify(Object.fromEntries(i))}l(pe,"promptJsonMapValue");async function ye(e){let n=oe(),t=new Set(n.available.map(s=>String(s.engine))),r=[];for(let s of n.available){let i=s.engine===n.recommendedEngine?" (\u63A8\u8350)":"",g=s.version?` ${s.version}`:"";r.push({name:`${s.engine} \u2014 \u672C\u673A\u53EF\u7528 (${s.cmd}${g})${i}`,value:String(s.engine)})}for(let s of Object.keys(re))t.has(s)||r.push({name:`${s} \u2014 \u672C\u673A\u672A\u68C0\u6D4B\u5230 CLI`,value:s});r.push({name:"llm_only \u2014 \u4E0D\u542F\u7528 coding agent\uFF08\u964D\u7EA7\uFF09",value:"llm_only"}),n.available.length===0&&console.log(" \u672A\u68C0\u6D4B\u5230\u672C\u673A Coding Agent CLI\uFF1B\u53EF\u5148\u9009 llm_only\uFF0C\u5B89\u88C5\u540E\u518D\u5207\u6362\u3002");let o=e&&r.some(s=>s.value===e)?e:n.recommendedEngine?String(n.recommendedEngine):void 0;return await P({message:"\u9009\u62E9 Coding Agent \u5F15\u64CE:",choices:r,...o?{default:o}:{}})}l(ye,"promptCodingEngine");async function F(e,n,t){if(e.key!=="coding_agent.engine")return;let r=n.trim();if(!r||r==="llm_only")return;let o=se(r);if(!o)return;let s=w.resolve(t,"coding-agents.config.json");await ie(s,["agents",o,"enabled"],!0),console.log(` \u2713 \u5DF2\u5728 coding-agents.config.json \u542F\u7528 ${o}`)}l(F,"autoEnableCodingAgent");async function he(e,n){if(e.key!=="coding_agent.config.enabled")return!1;let t=e.writeTarget;if(!t||t.type!=="json")return!1;try{let r=await S(w.resolve(n,t.file),"utf8"),o=JSON.parse(r);for(let s of t.jsonPath){if(o==null||typeof o!="object")return!1;o=o[String(s)]}return o===!0}catch{return!1}}l(he,"isEnableTargetSatisfied");function G(e){let n=[];if(e.workflows)for(let t of e.workflows)for(let r of t.items){let o=I(r);o&&n.push({...r,writeTarget:o})}else for(let t of e.items){let r=I(t);r&&n.push({...t,writeTarget:r})}return n}l(G,"collectEditableItems");async function we(e,n){if(e.id==="roles")return ke(e,n);if(!e.workflows)return G(e).map(o=>({item:o,label:o.key}));let t=[],r=new Set;for(let o of e.workflows){let s=`${o.name} (${o.id})`;for(let i of o.items){let g=I(i);if(!g)continue;let d=_(g);r.has(d)||(r.add(d),t.push({item:{...i,writeTarget:g},label:`${s} / ${i.key}`}))}}return t}l(we,"collectEditableChoices");async function ke(e,n){let t=G(e).map(i=>({item:i,label:i.key})),r=new Set(t.map(i=>i.item.writeTarget).filter(Boolean).map(i=>_(i))),o=w.resolve(n,"roles"),s;try{s=await ee(o)}catch{return t}for(let i of s.filter(g=>g.endsWith(".role.yml")).sort()){let g=i.replace(/\.role\.yml$/,""),d=await $e(w.join("roles",i),w.resolve(o,i));for(let c of d){if(!c.writeTarget)continue;let f=_(c.writeTarget);r.has(f)||(r.add(f),t.push({item:c,label:`role.${g} / ${c.key}`}))}}return t}l(ke,"collectRoleEditableChoices");async function $e(e,n,t){let r;try{r=U.parse(await S(n,"utf8"))}catch{return[]}if(!j(r))return[];if(t)return t(r);let o=[];return E({items:o,file:e,keyPrefix:"",yamlPath:[],value:r}),o}l($e,"collectYamlEditableItems");function E(e){let{items:n,file:t,keyPrefix:r,yamlPath:o,value:s}=e;if(s!=null){if(typeof s=="string"){n.push({key:r,status:"ok",value:s,writeTarget:{type:"yaml",file:t,yamlPath:o}});return}if(Array.isArray(s)){s.every(i=>typeof i=="string")&&n.push({key:r,status:"ok",value:s,writeTarget:{type:"yaml",file:t,yamlPath:o,valueType:"string[]"}}),s.forEach((i,g)=>{j(i)&&E({items:n,file:t,keyPrefix:`${r}.${g}`,yamlPath:[...o,g],value:i})});return}if(j(s))for(let[i,g]of Object.entries(s))E({items:n,file:t,keyPrefix:ve(r,i),yamlPath:[...o,i],value:g})}}l(E,"collectEditableLeaves");function ve(e,n){return e?`${e}.${n}`:n}l(ve,"appendKey");function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}l(j,"isRecord");function _(e){return e.type==="env"?`env:${e.file}:${e.envKey}`:e.type==="yamlAll"?`yamlAll:${e.targets.map(n=>`${n.file}:${n.yamlPath.join(".")}`).join(",")}`:e.type==="json"?`json:${e.file}:${e.jsonPath.join(".")}`:e.type==="textFile"?`textFile:${e.file}`:`yaml:${e.file}:${e.yamlPath.join(".")}`}l(_,"writeTargetKey");function Je(e){try{return new URL(e),!0}catch{return!1}}l(Je,"isUrl");function Ce(e){return"totalDocs"in e}l(Ce,"isIngestReport");async function J(e){let n=w.resolve(e.configDir,e.collectionName);await te(n,{recursive:!0}),console.log(`
30
+ \u23F3 \u6B63\u5728\u5BFC\u5165\u6587\u6863\u5230 ${e.collectionName}/ ...`);try{let t=await ne({url:e.source,outputDir:n,preserveStructure:!0,onProgress:l((o,s,i)=>{console.log(` [${o+1}/${s}] ${i}`)},"onProgress")});if(Ce(t)){let o=[`${t.successCount} \u65B0\u589E/\u66F4\u65B0`];t.skippedCount>0&&o.push(`${t.skippedCount} \u8DF3\u8FC7(\u65E0\u53D8\u5316)`),t.skippedUnsupported>0&&o.push(`${t.skippedUnsupported} \u8DF3\u8FC7(\u4E0D\u652F\u6301\u7684\u683C\u5F0F)`),t.failureCount>0&&o.push(`${t.failureCount} \u5931\u8D25`);let s=`\u5BFC\u5165\u5B8C\u6210: ${o.join(", ")} (\u5171 ${t.totalDocs} \u7BC7)`;console.log(`\u2713 ${s}`);let i=t.successCount>0||t.skippedCount>0;return{success:i,message:i?s:`\u5BFC\u5165\u5931\u8D25: \u5168\u90E8 ${t.totalDocs} \u7BC7\u6587\u6863\u5904\u7406\u5931\u8D25`}}if(t.success){let s=`${t.action==="skipped"?"\u8DF3\u8FC7(\u65E0\u53D8\u5316)":t.action==="updated"?"\u5DF2\u66F4\u65B0":"\u5BFC\u5165\u6210\u529F"}: ${t.title??t.relativePath}`;return console.log(`\u2713 ${s}`),{success:!0,message:s}}let r=`\u5BFC\u5165\u5931\u8D25: ${t.error}`;return console.error(`\u2717 ${r}`),{success:!1,message:r}}catch(t){let r=`\u5BFC\u5165\u5931\u8D25: ${t instanceof Error?t.message:String(t)}`;return console.error(`\u2717 ${r}`),{success:!1,message:r}}}l(J,"ingestToCollection");function H(e){let n=[];for(let t of e)typeof t=="string"?n.push(t):typeof t=="object"&&t!==null&&"collection"in t&&n.push(String(t.collection));return n}l(H,"extractCollectionNames");function be(e){return`wiki/${e}`}l(be,"roleCollectionName");async function Ie(e,n){let t=be(n);try{let o=U.parse(await S(e,"utf8"))?.knowledge_scope,s=j(o)?o.kb_collections:void 0;if(Array.isArray(s)){let i=H(s);if(i.length>0)return i.includes(t)?t:i[0]}}catch{}return t}l(Ie,"resolveRoleKbCollection");async function Te(e,n,t,r){let o=e.modules.find(c=>c.id==="roles");if(!o)return e;let s=".knowledge_scope.kb_collections",i=o.items.filter(c=>c.status==="suggestion"&&c.key.endsWith(s)),g=o.items.filter(c=>c.status==="ok"&&c.key.endsWith(s));if(i.length===0&&g.length===0)return e;let d=!1;for(let c of i){let f=c.key.replace(s,"").replace(/^role\./,""),u=`${f}.role.yml`;if(console.log(`
31
+ \u2501\u2501 \u89D2\u8272\u77E5\u8BC6\u5E93\u914D\u7F6E \u2501${"\u2501".repeat(38)}`),console.log(`
32
+ \xB7 ${u} \u2014 \u672A\u914D\u7F6E knowledge_scope.kb_collections\uFF08\u6DFB\u52A0\u53EA\u5F80\u76EE\u5F55\u5199\u6587\u6863\uFF0C\u4E0D\u6539\u52A8\u8BE5\u914D\u7F6E\uFF09
33
+ `),!await h({message:`\u662F\u5426\u8981\u4E3A ${f} \u6DFB\u52A0\u77E5\u8BC6\u5E93\uFF1F`,default:!1}))continue;let m=await Ie(w.resolve(n,"roles",u),f);for(;;){let p=await T({message:"\u8BF7\u8F93\u5165\u6587\u6863\u6765\u6E90\uFF08\u672C\u5730\u8DEF\u5F84 \u6216 \u5728\u7EBF\u6587\u6863\u94FE\u63A5\uFF09:",validate:l(O=>O.trim().length>0||"\u4E0D\u80FD\u4E3A\u7A7A","validate")});if((await J({source:p.trim(),collectionName:m,configDir:n})).success&&(console.log(` (kb_collections \u4E0D\u53D8\uFF0C\u6587\u6863\u5DF2\u5199\u5165\u76EE\u5F55 ${m}/)`),d=!0),!await h({message:`\u662F\u5426\u7EE7\u7EED\u6DFB\u52A0\u66F4\u591A\u6587\u6863\u5230 ${f} \u7684\u77E5\u8BC6\u5E93\uFF1F`,default:!1}))break}}for(let c of g){let f=c.key.replace(s,"").replace(/^role\./,""),u=`${f}.role.yml`,a=Array.isArray(c.value)?H(c.value):[];if(console.log(`
34
+ \u2501\u2501 \u89D2\u8272\u77E5\u8BC6\u5E93\u914D\u7F6E \u2501${"\u2501".repeat(38)}`),console.log(`
35
+ \xB7 ${u} \u2014 \u5DF2\u6709 ${a.length} \u4E2A\u77E5\u8BC6\u5E93\u96C6\u5408: ${a.join(", ")}\uFF08\u4E0D\u6539\u52A8\u5176\u6587\u4EF6\u8DEF\u5F84\uFF0C\u53EA\u8FFD\u52A0\u6587\u6863\uFF09
36
+ `),!!await h({message:`\u662F\u5426\u8981\u4E3A ${f} \u8FFD\u52A0\u66F4\u591A\u6587\u6863\uFF1F`,default:!1}))for(;;){let p;if(a.length===1)p=a[0];else{let R=await P({message:"\u9009\u62E9\u8981\u6DFB\u52A0\u6587\u6863\u7684\u77E5\u8BC6\u5E93\u96C6\u5408:",choices:[...a.map(L=>({name:L,value:L})),M]});if(R===null)break;p=R}let k=await T({message:"\u8BF7\u8F93\u5165\u6587\u6863\u6765\u6E90\uFF08\u672C\u5730\u8DEF\u5F84 \u6216 \u5728\u7EBF\u6587\u6863\u94FE\u63A5\uFF09:",validate:l(R=>R.trim().length>0||"\u4E0D\u80FD\u4E3A\u7A7A","validate")});if((await J({source:k.trim(),collectionName:p,configDir:n})).success&&(console.log(" (kb_collections \u4E0D\u53D8\uFF0C\u6587\u6863\u5DF2\u5199\u5165\u65E2\u6709\u96C6\u5408\u76EE\u5F55)"),d=!0),!await h({message:"\u662F\u5426\u7EE7\u7EED\u6DFB\u52A0\u66F4\u591A\u6587\u6863\uFF1F",default:!1}))break}}if(d){console.log(`
37
+ \u91CD\u65B0\u6821\u9A8C...
38
+ `);let c=await $({configPath:t,workflowId:r});return x(c),c}return e}l(Te,"promptKbSetup");function Q(e){return e.type==="env"?"\u73AF\u5883\u53D8\u91CF":e.type==="json"?"Agent \u914D\u7F6E":e.type==="yamlAll"?"\u9879\u76EE/\u5DE5\u4F5C\u6D41":e.type==="textFile"?"\u6587\u4EF6\u5185\u5BB9":e.file.includes("workflow")?"\u5DE5\u4F5C\u6D41":"\u9879\u76EE"}l(Q,"targetLabel");function b(e){return e.type==="env"?`.env \u2192 ${e.envKey}`:e.type==="json"?`${e.file} \u2192 ${e.jsonPath.join(".")}`:e.type==="yamlAll"?e.targets.map(n=>`${n.file} \u2192 ${n.yamlPath.join(".")}`).join(", "):e.type==="textFile"?`${e.file}\uFF08\u6574\u6587\u4EF6\u5185\u5BB9\uFF09`:`${e.file} \u2192 ${e.yamlPath.join(".")}`}l(b,"writeTargetDesc");function Pe(e){return e.sensitive?"***":e.value===void 0||e.value===null?"\u672A\u8BBE\u7F6E":Array.isArray(e.value)?e.value.join(","):String(e.value)}l(Pe,"formatValue");function Ae(e){if(typeof e.value=="string")return e.value;if(typeof e.value=="boolean")return e.value?"true":"false";if(Array.isArray(e.value)){let n=e.value.filter(t=>typeof t=="string");if(n.length>0)return n.join(",")}}l(Ae,"formatInputDefault");function C(e){let n=e.key,t=n.lastIndexOf("."),r=t>=0?n.slice(t+1):n;return r==="base_id"||r==="baseId"?"baseId":r==="table_id"||r==="tableId"?"tableId":r}l(C,"getSemanticKey");function Re(e){return e.length<=40?e:e.slice(0,37)+"..."}l(Re,"formatDefaultForDisplay");function je(e,n){for(let t of e.modules){let r=t.workflows?t.workflows.flatMap(o=>o.items):t.items;for(let o of r){if(o.status==="error"||o.sensitive||o.value===void 0||o.value===null)continue;let s=C(o);if(n.has(s)||!A(o))continue;let i=Me(o.value);i&&X(o,i)&&n.set(s,i)}}}l(je,"seedSessionDefaults");function xe(e,n){if(!A(e))return;let t=n.get(C(e));if(!(!t||!X(e,t)))return t}l(xe,"getSuggestedDefault");function A(e){return C(e)==="baseId"}l(A,"canOfferDefaultFor");function X(e,n){let t=n.trim();return t?C(e)==="baseId"?t.length>=8:!0:!1}l(X,"isPlausibleDefault");function Me(e){if(typeof e=="string")return e;if(typeof e=="boolean")return e?"true":"false";if(Array.isArray(e)){let n=e.filter(t=>typeof t=="string");if(n.length>0)return n.join(",")}}l(Me,"stringifyDefaultValue");function Ee(e,n,t,r){let o=t.trim();if(!r&&o.length===0)return"\u4E0D\u80FD\u4E3A\u7A7A";if(e.key==="coding_agent.engine"){let s=new Set(["claude","codex","qoder","codebuddy","opencode","qwen","deepseek","trae","llm_only"]);return s.has(o)||`\u8BF7\u8F93\u5165\u6709\u6548 engine: ${[...s].join(", ")}`}if(n?.valueType==="boolean"){let s=o.toLowerCase();return s==="true"||s==="false"?!0:"\u8BF7\u8F93\u5165 true \u6216 false"}return!0}l(Ee,"validatePromptValue");async function Z(e){let{resolveConfigPath:n}=await import("aitable-workflow-core"),t=await n(e);return w.dirname(t)}l(Z,"resolveConfigDir");export{Ne as a,Be as b,q as c,le as d,v as e,ce as f,ue as g,z as h,G as i,we as j,Je as k,J as l,be as m,Ie as n,C as o,A as p};
@@ -0,0 +1 @@
1
+ import{a as t}from"./chunk-EI7MMDWY.js";import{readFile as a,writeFile as c,mkdir as u,rm as l}from"fs/promises";import n from"path";import m from"os";var p=n.join(m.homedir(),".aitable-workflow","daemons");function s(r){return n.join(p,r)}t(s,"daemonDir");function o(r){return n.join(s(r),"daemon.pid")}t(o,"pidFilePath");function f(r){try{return process.kill(r,0),!0}catch{return!1}}t(f,"isProcessAlive");async function d(r){try{let e=await a(o(r),"utf8"),i=parseInt(e.trim(),10);return Number.isFinite(i)&&i>0?i:null}catch{return null}}t(d,"readPidFile");async function g(r){let e=s(r);await u(e,{recursive:!0});let i=await d(r);if(i!==null&&f(i))throw new Error(`Agent "${r}" \u5DF2\u5728\u8FD0\u884C (PID: ${i})\u3002\u5148\u6267\u884C \`aitable-workflow stop --agent ${r}\` \u518D\u542F\u52A8\u3002`);await c(o(r),String(process.pid),"utf8")}t(g,"writePidFile");async function h(r){try{await l(o(r),{force:!0})}catch{}}t(h,"removePidFile");export{p as a,s as b,o as c,f as d,d as e,g as f,h as g};
package/dist/cli.js ADDED
@@ -0,0 +1,69 @@
1
+ #!/usr/bin/env node
2
+ import{b as O,d as x,e as V,f as ie,g as M}from"./chunk-U773UWB7.js";import{a as c}from"./chunk-EI7MMDWY.js";import{config as Ee}from"dotenv";import{Command as Y}from"commander";import{createApp as ht,loadSettings as re,loadWorkflowTemplate as Ie,logger as g,activateGlobalDwsOnPath as wt,ensureTsxRegistered as yt,runInit as kt,runDesignCommand as At,runSetupCommand as Rt,runKbCompileCommand as vt,runKbUpdateCommand as bt,runKbStatusCommand as St,runKbIngestCommand as Et,runSync as It,checkWorkflowRecipes as $t,listCodingAgents as Tt,Tracer as xt,saveCredential as _t,listCredentials as se,setActiveAgent as Lt,getActiveCredential as k,readCredentials as Ct,findConflictingCredential as Dt,maskSecret as K}from"aitable-workflow-core";import{startServer as Pt,resolveServeConfig as Ot}from"aitable-workflow-server";import I from"os";import A from"path";import{mkdir as Fe,readFile as Be}from"fs/promises";import{mkdirSync as We}from"fs";import{execSync as Ne}from"child_process";import{logger as f,detectInstalledAgents as Ye,runCodingAgent as Ge,DwsClient as Ke,getActiveCredential as He}from"aitable-workflow-core";import J from"ws";import{logger as b,RELAY_REJECTED_CODE as xe,isRelayMessage as _e}from"aitable-workflow-core";var S="relay:conn",ce=1e3,Le=3e4,Ce=Number(process.env.AITABLE_RELAY_SERVER_STALE_MS??9e4),U=class{static{c(this,"RelayConnection")}ws=null;delay=ce;timer=null;watchdog=null;should=!0;permanentlyRejected=!1;accepted=!1;lastServerFrameAt=0;serverUrl;key;token;onMessage;onOpen;onAccepted;onPermanentReject;mkWs;staleMs;constructor(e){this.serverUrl=e.serverUrl,this.key=e.key??"",this.token=e.token??"",this.onMessage=e.onMessage,this.onOpen=e.onOpen,this.onAccepted=e.onAccepted,this.onPermanentReject=e.onPermanentReject,this.mkWs=e.mkWs??(n=>new J(n)),this.staleMs=e.staleMs??Ce}connect(){this.permanentlyRejected||(this.should=!0,this.doConnect())}send(e){this.ws&&this.ws.readyState===J.OPEN&&this.ws.send(JSON.stringify(e))}close(){this.should=!1,this.timer&&(clearTimeout(this.timer),this.timer=null),this.watchdog&&(clearTimeout(this.watchdog),this.watchdog=null),this.ws?.close()}isPermanentlyRejected(){return this.permanentlyRejected}currentSocket(){return this.ws}buildUrl(){let e=this.serverUrl.replace(/\/+$/,"").replace(/^http/,"ws"),n=this.token?`token=${encodeURIComponent(this.token)}`:`key=${encodeURIComponent(this.key)}`;return`${e}/api/relay/connect?${n}`}doConnect(){if(!this.should||this.permanentlyRejected)return;let e=this.buildUrl();b.info(S,"connecting",{serverUrl:this.serverUrl}),this.watchdog&&(clearTimeout(this.watchdog),this.watchdog=null),this.accepted=!1,this.lastServerFrameAt=0;let n=this.mkWs(e);this.ws=n,n.on("open",()=>{b.info(S,"connected"),this.onOpen?.(n)}),n.on("message",o=>{this.accepted||(this.accepted=!0,this.delay=ce,this.onAccepted?.(n)),this.lastServerFrameAt=Date.now(),this.armWatchdog();let r;try{r=JSON.parse(typeof o=="string"?o:String(o))}catch{return}_e(r)&&(r.type==="ping"&&this.send({type:"pong"}),this.onMessage(r))}),n.on("close",(o,r)=>{this.watchdog&&(clearTimeout(this.watchdog),this.watchdog=null);let s=r==null?"":String(r);if(o===xe){this.permanentlyRejected=!0,this.should=!1,b.error(S,"server permanently rejected this machine: its connection key is unknown or was removed; re-issue the relay connect command and restart with the new key",{code:o,reason:s}),this.onPermanentReject?.({code:o,reason:s});return}b.warn(S,"disconnected",{code:o}),this.scheduleReconnect()}),n.on("error",o=>{b.error(S,"ws error",{detail:o instanceof Error?o.message:String(o)})})}armWatchdog(){this.watchdog&&clearTimeout(this.watchdog),this.watchdog=setTimeout(()=>{if(!(!this.accepted||!this.lastServerFrameAt||this.ws?.readyState!==J.OPEN)){b.warn(S,"server heartbeat stale; closing socket to reconnect",{staleMs:Date.now()-this.lastServerFrameAt});try{this.ws.close()}catch{}}},this.staleMs+1),this.watchdog.unref?.()}scheduleReconnect(){!this.should||this.permanentlyRejected||this.timer||(b.info(S,"reconnecting",{ms:this.delay}),this.timer=setTimeout(()=>{this.timer=null,this.doConnect()},this.delay),this.timer.unref?.(),this.delay=Math.min(this.delay*2,Le))}};import{createHash as De}from"crypto";import{readdir as Pe,readFile as Oe,stat as Me}from"fs/promises";import le from"path";import{isAllowedArtifactPath as Ue,normalizeArtifactRelPath as je}from"aitable-workflow-core";var ge={async upload(t,e,n){let o=await fetch(t,{method:"PUT",body:e,headers:{...n}});if(!o.ok)throw new Error(`artifact PUT failed: ${o.status} ${o.statusText}`)}};async function de(t){let e=[];return await me(t,t,e),e.sort((n,o)=>n.relPath.localeCompare(o.relPath))}c(de,"scanArtifacts");async function me(t,e,n){let o;try{o=await Pe(e,{withFileTypes:!0})}catch{return}for(let r of o){if(r.name==="node_modules"||r.name.startsWith("."))continue;let s=le.join(e,r.name);if(r.isDirectory())await me(t,s,n);else if(r.isFile()){let a=le.relative(t,s).replace(/\\/g,"/");if(!Ue(a))continue;let i=await Me(s),l=await Oe(s),m=De("sha256").update(l).digest("hex");n.push({relPath:je(a),absPath:s,size:i.size,sha256:m})}}}c(me,"walk");var u="relay:daemon",pe=["aitable"],qe="dws";function Ve(t,e=pe){if(!Array.isArray(t)||t.length===0)return{ok:!1,reason:"dws args must be a non-empty array"};for(let o of t){if(typeof o!="string")return{ok:!1,reason:"dws args must all be strings"};if(o.length===0)return{ok:!1,reason:"dws args must not contain empty tokens"};if(/[\u0000-\u001f]/.test(o))return{ok:!1,reason:"dws args must not contain control characters"}}let n=t[0];return n.startsWith("-")?{ok:!1,reason:"first dws arg must be a subcommand, not a flag"}:e.length>0&&!e.includes(n)?{ok:!1,reason:`dws command "${n}" is not allowed`}:{ok:!0}}c(Ve,"validateDwsArgs");function Je(t){try{return Ne(`${t} --version`,{encoding:"utf8",timeout:5e3,stdio:["pipe","pipe","pipe"]}),!0}catch{return!1}}c(Je,"detectDwsAvailable");var z=class{static{c(this,"RelayDaemon")}config;allowedDwsCommands;conn;runAgent;createDwsClient;detectAgents;detectDws;hostname;osString;onPermanentReject;artifactUploader;grantTimeoutMs;pendingGrants=new Map;maxTasks;inflight=0;taskQueue=[];machineId;constructor(e,n={}){this.config={...e,dwsBin:e.dwsBin??qe},this.machineId=e.machineId,this.allowedDwsCommands=e.allowedDwsCommands??pe,this.runAgent=n.runAgent??Ge,this.createDwsClient=n.createDwsClient??((r,s)=>new Ke({bin:r,timeoutMs:s})),this.detectAgents=n.detectAgents??(()=>Ye()),this.detectDws=n.detectDws??(r=>Je(r)),this.hostname=n.hostname??(()=>I.hostname()),this.osString=n.osString??(()=>`${I.platform()} ${I.arch()}`),this.onPermanentReject=n.onPermanentReject,this.artifactUploader=n.artifactUploader??ge,this.grantTimeoutMs=n.grantTimeoutMs??3e4,this.maxTasks=Math.max(1,Math.floor(e.maxTasks??1));let o=n.createConnection??(r=>new U(r));this.conn=o({serverUrl:this.config.serverUrl,key:this.config.key,token:this.config.token,onMessage:c(r=>this.handleMessage(r),"onMessage"),onOpen:c(()=>this.handleOpen(),"onOpen"),onPermanentReject:c(r=>this.handlePermanentReject(r),"onPermanentReject")})}start(){f.info(u,"starting",{serverUrl:this.config.serverUrl,workspaceRoot:this.config.workspaceRoot}),this.config.name||f.warn(u,"\u672A\u6307\u5B9A --name\uFF0C\u5C06\u4F7F\u7528\u4E3B\u673A\u540D\u4F5C\u4E3A\u673A\u5668\u6CE8\u518C\u540D\uFF1B\u591A\u673A\u573A\u666F\u4E0B hostname \u82E5\u91CD\u590D\u4F1A\u5BFC\u81F4\u8FDE\u63A5\u4E92\u76F8\u9876\u66FF\uFF0C\u5EFA\u8BAE\u663E\u5F0F\u6307\u5B9A --name",{hostname:this.hostname()}),this.conn.connect()}stop(){f.info(u,"stopping"),this.conn.close()}buildReady(){let n={type:"ready",runtimes:Array.from(new Set(this.detectAgents().map(o=>o.type))),hasDws:this.detectDws(this.config.dwsBin),hostname:this.hostname(),os:this.osString()};return this.machineId&&(n.machineId=this.machineId),this.config.name&&(n.name=this.config.name),this.config.displayName&&(n.displayName=this.config.displayName),this.config.description&&(n.description=this.config.description),this.maxTasks>1&&(n.maxTasks=this.maxTasks),n}handleOpen(){let e=this.buildReady();f.info(u,"connected; sending ready",{runtimes:e.runtimes,hasDws:e.hasDws}),this.conn.send(e)}handlePermanentReject(e){f.error(u,"permanently rejected by gateway",{...e}),this.onPermanentReject?.(e)}handleMessage(e){switch(e.type){case"run:agent":this.enqueueTask(()=>this.handleRunAgent(e));break;case"run:dws":this.enqueueTask(()=>this.handleRunDws(e));break;case"upload:grant":this.resolveGrant(e);break;case"ready:ack":e.machineId&&(this.machineId=e.machineId,f.info(u,"machine id assigned",{machineId:e.machineId}));break;default:break}}enqueueTask(e){let n=c(()=>{this.inflight+=1,e().finally(()=>{this.inflight-=1;let o=this.taskQueue.shift();o&&o()})},"exec");this.inflight<this.maxTasks?n():this.taskQueue.push(n)}async handleRunAgent(e){let{requestId:n}=e;f.info(u,"run:agent received",{requestId:n,projectId:e.projectId,agent:e.agent});try{let o=this.resolveWorkDir(e.projectId,e.workDir);await Fe(o,{recursive:!0});let r=this.rewritePromptWorkDir(e.prompt,e.workDir,o),s={agent:e.agent,workDir:o,onEvent:c(l=>this.conn.send({type:"event",requestId:n,event:l}),"onEvent")};e.sessionId&&(s.sessionId=e.sessionId),e.permissionMode&&(s.adapterOptions={permissionMode:e.permissionMode}),this.config.agentTimeoutMs!=null&&(s.timeoutMs=this.config.agentTimeoutMs);let a=await this.runAgent(r,s),i;try{i=await this.collectAndUploadArtifacts(n,e.projectId,o)}catch(l){let m=l instanceof Error?l.message:String(l);f.error(u,"artifact upload failed",{requestId:n,error:m}),this.conn.send({type:"error",requestId:n,code:"artifact_upload_failed",message:m});return}this.conn.send({type:"result",requestId:n,ok:!0,response:a.response,sessionId:a.sessionId,...i?{artifacts:i}:{}}),f.info(u,"run:agent done",{requestId:n,sessionId:a.sessionId,artifacts:i?i.files.length:0})}catch(o){let r=o instanceof Error?o.message:String(o);f.error(u,"run:agent failed",{requestId:n,error:r}),this.conn.send({type:"error",requestId:n,code:"agent_failed",message:r})}}async collectAndUploadArtifacts(e,n,o){let r=await de(o);if(r.length===0)return;this.conn.send({type:"upload:request",requestId:e,projectId:n,files:r.map(i=>({path:i.relPath,size:i.size,sha256:i.sha256}))});let s=await this.awaitGrant(e);if(!s)throw new Error("upload:grant \u7B49\u5F85\u8D85\u65F6");if(s.grants.length===0){f.warn(u,"upload:grant \u65E0\u6388\u6743\u9879\uFF08gateway \u672A\u914D\u7F6E store \u6216\u5168\u88AB\u62D2\uFF09",{requestId:e,rejected:(s.rejected??[]).length});return}let a=[];for(let i of s.grants){let l=r.find(h=>h.relPath===i.path);if(!l)continue;let m=await Be(l.absPath);await this.artifactUploader.upload(i.url,m,i.headers),a.push({path:i.path,key:i.key,sha256:l.sha256,size:l.size})}return{store:"oss",files:a}}awaitGrant(e){return new Promise(n=>{let o=setTimeout(()=>{this.pendingGrants.delete(e),n(void 0)},this.grantTimeoutMs);o.unref?.(),this.pendingGrants.set(e,r=>{clearTimeout(o),n(r)})})}resolveGrant(e){let n=this.pendingGrants.get(e.requestId);n&&(this.pendingGrants.delete(e.requestId),n(e))}async handleRunDws(e){let{requestId:n}=e,o=Ve(e.args,this.allowedDwsCommands);if(!o.ok){f.warn(u,"run:dws rejected",{requestId:n,reason:o.reason}),this.conn.send({type:"error",requestId:n,code:"dws_rejected",message:o.reason});return}f.info(u,"run:dws received",{requestId:n,command:e.args[0]});try{let s=await this.createDwsClient(this.config.dwsBin,e.timeoutMs).runJson(e.args,e.timeoutMs!=null?{timeoutMs:e.timeoutMs}:void 0);this.conn.send({type:"result",requestId:n,ok:!0,response:JSON.stringify(s)}),f.info(u,"run:dws done",{requestId:n})}catch(r){let s=r instanceof Error?r.message:String(r);f.error(u,"run:dws failed",{requestId:n,error:s}),this.conn.send({type:"error",requestId:n,code:"dws_failed",message:s})}}resolveWorkDir(e,n){if(n&&n.trim()!=="")if(A.isAbsolute(n))f.warn(u,"\u5FFD\u7565\u670D\u52A1\u7AEF\u4E0B\u53D1\u7684\u7EDD\u5BF9\u8DEF\u5F84 workDir\uFF0C\u56DE\u9000\u5230 workspaceRoot/projectId",{workDir:n,projectId:e});else return A.resolve(this.config.workspaceRoot,n);return A.join(this.config.workspaceRoot,e)}rewritePromptWorkDir(e,n,o){let r=n?.trim();return!r||!A.isAbsolute(r)||r===o?e:e.split(r).join(o)}};function X(t,e){let n,o=t?.trim();if(o)n=A.isAbsolute(o)?A.resolve(o):A.resolve(I.homedir(),o);else{let r=e?.trim()?e.trim():"default";n=A.join(I.homedir(),".aitable-workflow","workspaces",r)}return We(n,{recursive:!0}),n}c(X,"resolveWorkspaceRoot");function ze(t,e=process.env){let n=t.serverUrl??e.AITABLE_RELAY_SERVER_URL,o=t.key??e.AITABLE_RELAY_BOOTSTRAP_KEY,r=t.token??e.AITABLE_RELAY_TOKEN,s=t.workspaceRoot??e.AITABLE_RELAY_WORKSPACE_ROOT,a=t.machineId??e.AITABLE_RELAY_MACHINE_ID,i=t.name??e.AITABLE_RELAY_NAME,l=t.desc??e.AITABLE_RELAY_DESC,m=t.maxTasks??e.AITABLE_RELAY_MAX_TASKS,h=[];if(n||h.push("--server-url (\u6216 AITABLE_RELAY_SERVER_URL)"),!o&&!r&&h.push("--key/--token (\u6216 AITABLE_RELAY_BOOTSTRAP_KEY/AITABLE_RELAY_TOKEN)"),h.length>0)throw new Error(`relay \u7F3A\u5C11\u5FC5\u8981\u53C2\u6570: ${h.join(", ")}
3
+ \u{1F4A1} \u63D0\u793A: \u4F7F\u7528 \`aitable-workflow connect\` \u6CE8\u518C\u540E\u53EF\u7701\u7565\u8FD9\u4E9B\u53C2\u6570`);let w=i??I.hostname()??"default",p={serverUrl:n,workspaceRoot:X(s,w)};if(r?p.token=r:o&&(p.key=o),a&&(p.machineId=a),i&&(p.name=i,p.displayName=i),l&&(p.description=l),m!=null&&m!==""){let T=Math.floor(Number(m));Number.isFinite(T)&&T>=1&&(p.maxTasks=T)}return p}c(ze,"resolveRelayCliConfig");async function _(t,e=process.env){let n=null;try{n=await He()}catch{n=null}let o={serverUrl:t.serverUrl??e.AITABLE_RELAY_SERVER_URL??n?.serverUrl,key:t.key??e.AITABLE_RELAY_BOOTSTRAP_KEY??n?.key,token:t.token??e.AITABLE_RELAY_TOKEN??n?.token,name:t.name??e.AITABLE_RELAY_NAME??n?.name,desc:t.desc??e.AITABLE_RELAY_DESC,workspaceRoot:t.workspaceRoot??e.AITABLE_RELAY_WORKSPACE_ROOT??n?.workspaceRoot,machineId:t.machineId??e.AITABLE_RELAY_MACHINE_ID??n?.machineId,maxTasks:t.maxTasks??e.AITABLE_RELAY_MAX_TASKS};return ze(o,e)}c(_,"resolveDaemonConfig");async function Q(t){let e=await _(t),n=new z(e,{onPermanentReject:c(()=>{process.exit(1)},"onPermanentReject")}),o=c(()=>{n.stop(),process.exit(0)},"shutdown");return process.on("SIGINT",o),process.on("SIGTERM",o),n.start(),n}c(Q,"runRelayDaemon");import{spawn as Qe}from"child_process";import{existsSync as Ze}from"fs";import C from"path";import{fileURLToPath as et}from"url";import{appendFileSync as yn,statSync as kn,renameSync as An,mkdirSync as Rn,existsSync as vn}from"fs";import Xe from"path";var En=10*1024*1024;function L(t){return Xe.join(O(t),"daemon.log")}c(L,"logFilePath");var j=C.dirname(et(import.meta.url));function tt(){let t=[C.resolve(j,"..","..","bin","aitable-workflow.mjs"),C.resolve(j,"..","bin","aitable-workflow.mjs"),C.resolve(j,"..","..","dist","cli.js"),C.resolve(j,"cli.js")];return t.find(e=>Ze(e))??t[0]}c(tt,"resolveDaemonEntry");var nt=tt();async function F(t){await ie(t.agentId);let e=["relay"];t.serverUrl&&e.push("--server-url",t.serverUrl),t.token&&e.push("--token",t.token),t.key&&e.push("--key",t.key),t.name&&e.push("--name",t.name),t.workspaceRoot&&e.push("--workspace-root",t.workspaceRoot),t.machineId&&e.push("--machine-id",t.machineId),t.maxTasks&&e.push("--max-tasks",String(t.maxTasks));let n=await import("fs").then(a=>{let i=L(t.agentId);return a.openSync(i,"a")}),o=Qe(process.execPath,[nt,...e],{detached:!0,stdio:["ignore",n,n],env:{...process.env}});try{let{closeSync:a}=await import("fs");a(n)}catch{}o.unref();let{writeFile:r}=await import("fs/promises"),{pidFilePath:s}=await import("./pid-file-HPTFI54H.js");return o.pid&&await r(s(t.agentId),String(o.pid),"utf8"),{pid:o.pid??0}}c(F,"startDaemon");async function B(t,e=5e3){let n=await V(t);if(n===null||!x(n))return await M(t),!1;try{process.kill(n,"SIGTERM")}catch{return await M(t),!1}let o=Date.now()+e;for(;Date.now()<o&&x(n);)await new Promise(r=>setTimeout(r,200));if(x(n))try{process.kill(n,"SIGKILL")}catch{}return await M(t),!0}c(B,"stopDaemon");async function W(t){let e=await V(t),n=e!==null&&x(e),o=null;if(n&&e!==null)try{let{readFile:r}=await import("fs/promises"),s=await r(`/proc/${e}/stat`,"utf8"),a=parseInt(s.split(" ")[21]??"0",10),i=await r("/proc/uptime","utf8"),h=parseFloat(i.split(" ")[0]??"0")-a/100;o=Math.round(h*1e3)}catch{}return{agentId:t,running:n,pid:n?e:null,uptimeMs:o,logFile:L(t)}}c(W,"getDaemonStatus");import{readFile as ot,writeFile as jn,mkdir as Fn}from"fs/promises";import rt from"path";var fe={connectionState:"disconnected",lastHeartbeatAt:null,machineId:null,serverUrl:"",runningTasks:0,queuedTasks:0,lastDisconnectReason:null,updatedAt:new Date().toISOString()};function st(t){return rt.join(O(t),"state.json")}c(st,"stateFilePath");async function Z(t){try{let e=await ot(st(t),"utf8");return{...fe,...JSON.parse(e)}}catch{return{...fe}}}c(Z,"readState");import{execSync as D}from"child_process";import{writeFile as at,rm as it,mkdir as ct,access as lt}from"fs/promises";import R from"path";import ue from"os";import{readCredentials as gt}from"aitable-workflow-core";var dt="com.alibaba.aitable-workflow.daemon",ee="\u8BF7\u5148\u5168\u5C40\u5B89\u88C5\uFF1Anpm i -g @ali/aitable-workflow";function P(t){return`${dt}.${t}`}c(P,"plistLabel");function te(t){return R.join(ue.homedir(),"Library","LaunchAgents",`${P(t)}.plist`)}c(te,"plistPath");function E(){return process.platform==="darwin"}c(E,"isMacOS");function he(){try{return D("which aitable-workflow",{encoding:"utf8"}).trim()||null}catch{return null}}c(he,"resolveGlobalCliEntry");function we(t){if(!t||!t.trim())throw new Error(`\u672A\u627E\u5230\u5168\u5C40\u5B89\u88C5\u7684 aitable-workflow CLI \u5165\u53E3\uFF0C\u65E0\u6CD5\u914D\u7F6E\u5F00\u673A\u81EA\u542F\u3002
4
+ \u{1F4A1} ${ee}`);if(t.includes("/_npx/")||t.includes(`${R.sep}_npx${R.sep}`))throw new Error(`\u68C0\u6D4B\u5230 CLI \u5165\u53E3\u4F4D\u4E8E npx \u4E34\u65F6\u7F13\u5B58\uFF0C\u5F00\u673A\u81EA\u542F\u4F1A\u5931\u6548\uFF1A${t}
5
+ \u{1F4A1} ${ee}`);if(!R.isAbsolute(t))throw new Error(`CLI \u5165\u53E3\u4E0D\u662F\u7A33\u5B9A\u7684\u5168\u5C40\u7EDD\u5BF9\u8DEF\u5F84\uFF1A${t}
6
+ \u{1F4A1} ${ee}`)}c(we,"assertStableCliEntry");async function mt(t){let e={};e.AITABLE_RELAY_NAME=t;let n;try{let o=await gt();n=o.agents.find(r=>r.name===t)??o.agents.find(r=>r.name===o.activeAgent)??void 0}catch{n=void 0}return n&&(n.serverUrl&&(e.AITABLE_RELAY_SERVER_URL=n.serverUrl),n.token&&(e.AITABLE_RELAY_TOKEN=n.token),n.workspaceRoot&&(e.AITABLE_RELAY_WORKSPACE_ROOT=n.workspaceRoot)),e}c(mt,"buildRelayEnv");function pt(t,e){let n=P(t),o=e?.cliEntry??he();we(o);let r=["relay"];e?.maxTasks&&r.push("--max-tasks",String(e.maxTasks));let s=R.join(ue.homedir(),".aitable-workflow","daemons",t),a=R.join(s,"launchd.log"),i=R.join(s,"launchd.err.log"),l=[o,...r].map(w=>` <string>${$(w)}</string>`).join(`
7
+ `),m={PATH:process.env.PATH??"/usr/local/bin:/usr/bin:/bin",...e?.relayEnv??{}},h=Object.entries(m).map(([w,p])=>` <key>${$(w)}</key>
8
+ <string>${$(p)}</string>`).join(`
9
+ `);return`<?xml version="1.0" encoding="UTF-8"?>
10
+ <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
11
+ <plist version="1.0">
12
+ <dict>
13
+ <key>Label</key>
14
+ <string>${$(n)}</string>
15
+ <key>ProgramArguments</key>
16
+ <array>
17
+ ${l}
18
+ </array>
19
+ <key>EnvironmentVariables</key>
20
+ <dict>
21
+ ${h}
22
+ </dict>
23
+ <key>KeepAlive</key>
24
+ <true/>
25
+ <key>RunAtLoad</key>
26
+ <true/>
27
+ <key>StandardOutPath</key>
28
+ <string>${$(a)}</string>
29
+ <key>StandardErrorPath</key>
30
+ <string>${$(i)}</string>
31
+ </dict>
32
+ </plist>
33
+ `}c(pt,"generatePlist");function $(t){return t.replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;")}c($,"escapeXml");function N(){let t=process.getuid?.();if(t===void 0)throw new Error("\u65E0\u6CD5\u83B7\u53D6\u7528\u6237 UID\uFF08\u4EC5\u652F\u6301 macOS/Linux\uFF09");return t}c(N,"getUid");async function ye(t,e){if(!E())throw new Error("\u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS");let n=he();we(n);let o=await mt(t),r=te(t),s=P(t);try{D(`launchctl bootout gui/${N()}/${s} 2>/dev/null`,{encoding:"utf8"})}catch{}await ct(R.dirname(r),{recursive:!0});let a=pt(t,{maxTasks:e?.maxTasks,relayEnv:o,cliEntry:n});await at(r,a,"utf8"),D(`launchctl bootstrap gui/${N()} ${r}`,{encoding:"utf8"})}c(ye,"enableAutostart");async function ke(t){if(!E())throw new Error("\u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS");let e=P(t),n=te(t);try{D(`launchctl bootout gui/${N()}/${e} 2>/dev/null`,{encoding:"utf8"})}catch{}await it(n,{force:!0})}c(ke,"disableAutostart");async function ne(t){if(!E())throw new Error("\u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS");let e=P(t),n=te(t),o=!1;try{await lt(n),o=!0}catch{o=!1}let r=!1,s=!1,a=null;try{let i=D(`launchctl print gui/${N()}/${e} 2>/dev/null`,{encoding:"utf8"});r=!0;let l=i.match(/pid\s*=\s*(\d+)/);l&&(a=parseInt(l[1],10),s=!0)}catch{r=!1}return{installed:o,loaded:r,running:s,pid:a}}c(ne,"getAutostartStatus");import{createRequire as ft}from"module";var Ae="aitable-workflow-",ut=/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?(?:\+[0-9A-Za-z.-]+)?$/;function Re(){try{return ft(import.meta.url)("../package.json")}catch{return{}}}c(Re,"loadCliPackageManifest");function oe(t){return t.version??"0.0.0"}c(oe,"resolveCliVersion");function ve(t){let e=oe(t),n={};t.name?.startsWith(Ae)&&(n[t.name]=e);for(let[o,r]of Object.entries(t.dependencies??{}))o.startsWith(Ae)&&(n[o]=ut.test(r)?r:e);return n}c(ve,"resolveMonorepoPackageVersions");import v from"path";import{fileURLToPath as Mt}from"url";import{watchFile as Ut,statSync as jt,openSync as Ft,readSync as Bt,closeSync as Wt,existsSync as be}from"fs";import{readFile as Se}from"fs/promises";import{spawn as Nt}from"child_process";var G=v.dirname(Mt(import.meta.url));Ee({override:!1,quiet:!0});Ee({path:v.resolve(G,"..",".env"),override:!1,quiet:!0});var $e=Re(),Yt=oe($e),Gt=ve($e),y="./aitable-workflow.config.yml";function Kt(){let n=[],o=c(()=>{let r=Date.now();for(n.push(r);n.length>0&&r-n[0]>6e4;)n.shift();n.length>=10&&(g.error("cli",`60000ms \u5185\u53D1\u751F ${n.length} \u6B21\u672A\u6355\u83B7\u5F02\u5E38\uFF0C\u7591\u4F3C\u975E\u5076\u53D1\u9519\u8BEF\uFF0C\u4E3B\u52A8\u9000\u51FA`),process.exit(1))},"recordCrashAndMaybeExit");process.on("uncaughtException",r=>{g.error("cli","\u6355\u83B7\u5230\u672A\u5904\u7406\u5F02\u5E38\uFF08\u5DF2\u5B58\u6D3B\uFF0C\u4EA4\u7531\u91CD\u8FDE/\u91CD\u8BD5\u903B\u8F91\u81EA\u6108\uFF09",{error:r instanceof Error?r.message:String(r),stack:r instanceof Error?r.stack:void 0}),o()}),process.on("unhandledRejection",r=>{g.error("cli","\u6355\u83B7\u5230\u672A\u5904\u7406 Promise \u62D2\u7EDD\uFF08\u5DF2\u5B58\u6D3B\uFF09",{error:r instanceof Error?r.message:String(r),stack:r instanceof Error?r.stack:void 0}),o()})}c(Kt,"installLongRunningCrashGuards");function Ht(t){let e=process.platform,n=e==="darwin"?"open":e==="win32"?"cmd":"xdg-open",o=e==="win32"?["/c","start","",t]:[t];try{let r=Nt(n,o,{stdio:"ignore",detached:!0});r.on("error",()=>{console.log(`\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00: ${t}`)}),r.unref()}catch{console.log(`\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00: ${t}`)}}c(Ht,"openBrowser");var d=new Y().name("aitable-workflow").description("\u901A\u7528\u4E1A\u52A1\u6D41\u7A0B\u5F15\u64CE \u2014 \u914D\u7F6E\u9A71\u52A8\u7684 AI \u8868\u683C\u5DE5\u4F5C\u6D41\u81EA\u52A8\u5316").version(Yt).option("-d, --debug","\u8F93\u51FA debug \u7EA7\u522B\u65E5\u5FD7\uFF08\u542B recipe \u5185\u90E8 log\uFF09").hook("preAction",async(t,e)=>{e.name()!=="init"&&await wt()}).hook("preAction",(t,e)=>{t.opts().debug?g.setLevel("debug"):e.name()==="config"&&g.setLevel("warn")});d.command("init").description("\u4EA4\u4E92\u5F0F\u521D\u59CB\u5316 \u2014 \u9009\u62E9 Coding Agent\u3001\u914D\u7F6E\u5DE5\u4F5C\u76EE\u5F55\u3001\u63CF\u8FF0\u4E1A\u52A1\u573A\u666F\uFF1B\u6216\u7528 --template \u4ECE\u5185\u7F6E\u6A21\u677F\u811A\u624B\u67B6").option("-c, --config <path>","\u76EE\u6807\u76EE\u5F55\u6216\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84\uFF08\u9ED8\u8BA4\u5F53\u524D\u76EE\u5F55\uFF09").option("-f, --force","\u8986\u76D6\u5DF2\u6709\u914D\u7F6E\u6587\u4EF6").option("-y, --yes","\u4F7F\u7528\u9ED8\u8BA4\u503C\u8DF3\u8FC7\u4EA4\u4E92\u5F0F\u5411\u5BFC").option("-t, --template <name>","\u4ECE\u5185\u7F6E\u6A21\u677F\u811A\u624B\u67B6(\u5F53\u524D\u63A8\u8350 support-qa),\u62F7\u8D1D\u5B8C\u6574\u53EF\u8FD0\u884C\u9879\u76EE\u5230\u76EE\u6807\u76EE\u5F55").option("--profile <name>","\u9009\u5B9A\u6A21\u677F\u4E0B\u7684 profile \u4E1A\u52A1\u5305(\u5982 support-qa \u7684 aitable),\u8986\u76D6\u5F0F\u53E0\u52A0\u5230\u5B9E\u4F8B").action(async t=>{try{await kt({config:t.config,force:!!t.force,yes:!!t.yes,template:t.template,profile:t.profile,templatesDir:v.resolve(G,"..","templates"),templatePackageVersions:Gt})}catch(e){e instanceof Error&&e.message.includes("cancelled")&&process.exit(0),g.error("cli","\u521D\u59CB\u5316\u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("design").description("\u8BA9 Coding Agent \u6839\u636E\u573A\u666F\u63CF\u8FF0\u751F\u6210\u5B8C\u6574\u7684 workflow \u548C recipes").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("-y, --yes","\u8DF3\u8FC7\u4EA4\u4E92\u5F0F\u8865\u5145\uFF0C\u76F4\u63A5\u4F7F\u7528 config \u4E2D\u7684 scene").option("--skip-questions","\u8DF3\u8FC7\u6F84\u6E05\u95EE\u5377\uFF08\u4ECD\u4F1A\u4EA4\u4E92\u8865\u5145\u9700\u6C42\uFF09").action(async t=>{try{await At(t)}catch(e){e instanceof Error&&e.message.includes("cancelled")&&process.exit(0),g.error("cli","design \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("setup").description("\u6821\u9A8C\u5E76\u8865\u9F50\u9879\u76EE\u914D\u7F6E\uFF0C\u518D\u521D\u59CB\u5316 AI \u8868\u683C\u7ED3\u6784 + \u7F16\u8BD1\u77E5\u8BC6\u5E93 \u2014 \u4E00\u6B21\u5B8C\u6210 config + \u5EFA\u8868").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("--no-clean","\u4E0D\u6E05\u7406\u7A7A\u767D\u884C").option("--no-kb","\u8DF3\u8FC7\u77E5\u8BC6\u5E93\u7F16\u8BD1").option("--kb-full","\u5F3A\u5236\u5168\u91CF\u91CD\u7F16\u8BD1\u77E5\u8BC6\u5E93").option("--skip-config","\u8DF3\u8FC7\u524D\u7F6E\u7684\u4EA4\u4E92\u5F0F\u914D\u7F6E\u6821\u9A8C\uFF08CI/\u5DF2\u786E\u8BA4\u914D\u7F6E\u65F6\u4F7F\u7528\uFF09").option("--no-ui","\u5F3A\u5236\u4F7F\u7528\u547D\u4EE4\u884C\u4EA4\u4E92\uFF08\u8DF3\u8FC7\u53EF\u89C6\u5316\u914D\u7F6E\u754C\u9762\uFF09").action(async t=>{try{if(!t.skipConfig){let e=t.ui!==!1,n=!1;if(e){let{hasWebRoot:o,runConfigUI:r}=await import("./config-ui-server-JQMJSJHD.js");if(o()){console.log("\u{1F4CB} \u6B65\u9AA4 1/2\uFF1A\u53EF\u89C6\u5316\u914D\u7F6E\u754C\u9762");try{await r({configPath:t.config});let{runCheck:s}=await import("aitable-workflow-core");n=(await s({configPath:t.config})).ok}catch(s){console.warn(`
34
+ \u26A0 \u53EF\u89C6\u5316\u754C\u9762\u5F02\u5E38\uFF0C\u56DE\u9000\u5230\u547D\u4EE4\u884C\u4EA4\u4E92: ${s instanceof Error?s.message:String(s)}
35
+ `)}}}if(!n){console.log("\u{1F4CB} \u6B65\u9AA4 1/2\uFF1A\u6821\u9A8C\u5E76\u8865\u9F50\u9879\u76EE\u914D\u7F6E");let{runConfigCommand:o}=await import("./config-command-EPY7IOF2.js");(await o({configPath:t.config,interactive:!0,offerSkipToBuild:!0})).ok||(console.error(`
36
+ \u2717 \u9879\u76EE\u914D\u7F6E\u4ECD\u4E0D\u5B8C\u6574\uFF0C\u5DF2\u4E2D\u6B62 setup\u3002\u8BF7\u8865\u9F50\u5FC5\u586B\u9879\u540E\u91CD\u8BD5\uFF08\u6216\u7528 --skip-config \u8DF3\u8FC7\uFF09\u3002`),process.exit(1))}console.log(`
37
+ \u{1F527} \u6B65\u9AA4 2/2\uFF1A\u521D\u59CB\u5316\u8868\u7ED3\u6784 + \u7F16\u8BD1\u77E5\u8BC6\u5E93
38
+ `)}await Rt(t)}catch(e){g.error("cli","setup \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("run").description("\u542F\u52A8\u7F16\u6392\u5F15\u64CE\uFF0C\u5F00\u59CB\u8F6E\u8BE2\u5904\u7406\u5DE5\u5355").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).action(async t=>{try{Kt(),await yt();let e=await ht(t.config),n=!1,o=c(async()=>{n&&(g.warn("cli","\u518D\u6B21\u6536\u5230\u9000\u51FA\u4FE1\u53F7\uFF0C\u5F3A\u5236\u9000\u51FA"),process.exit(1)),n=!0,g.info("cli","\u6536\u5230\u9000\u51FA\u4FE1\u53F7\uFF0C\u6B63\u5728\u7B49\u5F85\u8FDB\u884C\u4E2D\u7684\u4EFB\u52A1\u5B8C\u6210...");try{await e.stop()}finally{process.exit(0)}},"shutdown");process.on("SIGINT",o),process.on("SIGTERM",o),await e.start()}catch(e){g.error("cli","\u542F\u52A8\u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("validate").description("\u9A8C\u8BC1\u914D\u7F6E\u6587\u4EF6\u548C\u5DE5\u4F5C\u6D41\u6A21\u677F").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).action(async t=>{try{let e=await re(t.config);console.log("\u2713 \u914D\u7F6E\u6587\u4EF6\u9A8C\u8BC1\u901A\u8FC7");let n=await Ie(e.workflowTemplatePath,{envSource:e.envSource});console.log(`\u2713 \u5DE5\u4F5C\u6D41\u6A21\u677F\u9A8C\u8BC1\u901A\u8FC7: ${n.meta.name} (${n.orderedStepIds.length} \u6B65)`),console.log(`
39
+ \u6B65\u9AA4\u94FE:`);for(let[o,r]of n.orderedStepIds.entries()){let s=n.steps.find(i=>i.id===r),a=o<n.orderedStepIds.length-1?" \u2192":" \u2713";console.log(` ${o+1}. [${r}] ${s?.name??"?"}${a}`)}console.log(`
40
+ \u914D\u7F6E\u6458\u8981:`),console.log(` AI \u8868\u683C: base=${e.tracker.base_id} table=${e.tracker.table_id}`),console.log(` \u5F15\u64CE: ${e.agent.engine}`),console.log(` \u8F6E\u8BE2\u95F4\u9694: ${e.polling.interval_ms}ms`)}catch(e){console.error(`\u2717 \u9A8C\u8BC1\u5931\u8D25: ${e instanceof Error?e.message:String(e)}`),process.exit(1)}});d.command("config").description("\u6821\u9A8C\u9879\u76EE\u914D\u7F6E\u5B8C\u6574\u6027\uFF0C\u5E76\u53EF\u4EA4\u4E92\u5F0F\u4FEE\u6539\u53C2\u6570").option("-c, --config <path>","\u9879\u76EE\u76EE\u5F55\u6216\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("-w, --workflow <id>","\u591A\u5DE5\u4F5C\u6D41\u6A21\u5F0F\uFF1A\u6307\u5B9A\u6821\u9A8C\u7684\u5DE5\u4F5C\u6D41 ID\uFF08\u7F3A\u7701\u6821\u9A8C\u5168\u90E8\uFF09").option("--json","JSON \u683C\u5F0F\u8F93\u51FA\u6821\u9A8C\u7ED3\u679C").option("--no-interactive","\u4EC5\u6821\u9A8C\uFF0C\u8DF3\u8FC7\u4EA4\u4E92\u5F0F\u4FEE\u6539").action(async t=>{try{let{runConfigCommand:e}=await import("./config-command-EPY7IOF2.js");await e({configPath:t.config,workflowId:t.workflow,json:t.json,interactive:t.interactive})}catch(e){e instanceof Error&&e.message.includes("cancelled")&&process.exit(0),g.error("cli","config \u547D\u4EE4\u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("sync").description("\u68C0\u6D4B\u914D\u7F6E\u4E0E\u8868\u7684\u504F\u5DEE\uFF08\u5B57\u6BB5\u7C7B\u578B/\u9009\u9879 drift\uFF09\uFF0C\u8F93\u51FA\u8BCA\u65AD\u62A5\u544A\u548C\u4FEE\u590D\u5EFA\u8BAE").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("-y, --yes","\u975E\u4EA4\u4E92\u6A21\u5F0F").action(async t=>{try{await It({configPath:t.config,yes:t.yes})}catch(e){g.error("cli","sync \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("agents").description("\u5217\u51FA\u5168\u90E8\u652F\u6301\u7684 Coding Agent \u9002\u914D\u5668\uFF0C\u5E76\u6807\u6CE8\u672C\u673A\u5DF2\u63A2\u6D4B\u5230\u5B89\u88C5\u7684").option("--json","\u4EE5 JSON \u683C\u5F0F\u8F93\u51FA").action(t=>{try{let e=Tt();if(t.json){process.stdout.write(JSON.stringify(e,null,2)+`
41
+ `);return}let n=e.filter(o=>o.installed).length;console.log(`
42
+ \u652F\u6301 ${e.length} \u4E2A Coding Agent\uFF0C\u672C\u673A\u5DF2\u63A2\u6D4B\u5230 ${n} \u4E2A\uFF1A
43
+ `);for(let o of e){let r=o.installed?"\u2713":"\u2717",s=[o.bin,...o.fallbackBins].join(" / "),a=o.installed?`\u5DF2\u5B89\u88C5 (${o.detectedCmd}${o.detectedVersion?` ${o.detectedVersion}`:""})`:"\u672A\u63A2\u6D4B\u5230";console.log(` ${r} ${o.name.padEnd(16)} [${o.id}] bin: ${s.padEnd(24)} ${a}`)}console.log("")}catch(e){g.error("cli","\u5217\u51FA agents \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("serve").description("\u542F\u52A8\u672C\u5730 HTTP API \u670D\u52A1\u5E76\u6258\u7BA1 Web \u524D\u7AEF\u9875\u9762\uFF08local \u6A21\u5F0F\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF09").option("-p, --port <number>","\u76D1\u542C\u7AEF\u53E3\uFF08\u9ED8\u8BA4 8787\uFF0C\u53EF\u7528 AITABLE_WORKFLOW_PORT \u8986\u76D6\uFF09").option("--host <host>","\u76D1\u542C\u5730\u5740\uFF08\u9ED8\u8BA4 127.0.0.1\uFF0C\u53EF\u7528 AITABLE_WORKFLOW_HOST \u8986\u76D6\uFF09").option("--data-root <path>","\u9879\u76EE\u5DE5\u4F5C\u533A\u6570\u636E\u76EE\u5F55\uFF08\u9ED8\u8BA4 .sandbox/aitable-workflow-server\uFF0C\u53EF\u7528 AITABLE_WORKFLOW_DATA_DIR \u8986\u76D6\uFF09").option("--web-root <path>","Web \u524D\u7AEF\u9759\u6001\u8D44\u6E90\u76EE\u5F55\uFF08\u9ED8\u8BA4\u4F7F\u7528\u968F CLI \u6253\u5305\u7684 dist/web\uFF09").option("--no-open","\u542F\u52A8\u540E\u4E0D\u81EA\u52A8\u6253\u5F00\u6D4F\u89C8\u5668\uFF08\u9ED8\u8BA4\u81EA\u52A8\u6253\u5F00\uFF09").action(async t=>{try{let e={};if(t.port!==void 0){let o=Number.parseInt(t.port,10);Number.isFinite(o)&&o>0&&(e.port=o)}if(t.host!==void 0&&(e.host=t.host),t.dataRoot!==void 0&&(e.dataRoot=t.dataRoot),t.webRoot!==void 0)e.webRoot=t.webRoot;else{let o=v.join(G,"web");if(be(v.join(o,"index.html")))e.webRoot=o;else{let r=v.resolve(G,"..","..","web","dist");be(v.join(r,"index.html"))&&(e.webRoot=r)}}let n=Ot(e);if(await Pt(n),n.webRoot&&t.open!==!1){let o=n.host==="0.0.0.0"?"127.0.0.1":n.host;Ht(`http://${o}:${n.port}`)}}catch(e){g.error("cli","HTTP \u670D\u52A1\u542F\u52A8\u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("start").description("\u4EE5\u540E\u53F0\u8FDB\u7A0B\u542F\u52A8 relay daemon").option("--agent <name>","Agent \u540D\u79F0\uFF08\u9ED8\u8BA4\u4F7F\u7528 activeAgent\uFF09").option("--server-url <url>","Gateway \u5730\u5740").option("--token <ownerToken>","owner-token").option("--key <machineKey>","per-machine key\uFF08sk_machine_*\uFF09").option("--workspace-root <dir>","\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55").option("--max-tasks <n>","\u5E76\u53D1\u4E0A\u9650","1").action(async t=>{try{let e=t.agent;if(!e){let r=await k();if(!r)throw new Error("\u672A\u6307\u5B9A --agent \u4E14\u65E0\u6D3B\u8DC3 Agent\u3002\u4F7F\u7528 `aitable-workflow connect` \u6CE8\u518C\u6216 `--agent <name>` \u6307\u5B9A\u3002");e=r.name}let n=await _({serverUrl:t.serverUrl,token:t.token,key:t.key,workspaceRoot:t.workspaceRoot,name:e,maxTasks:t.maxTasks}),o=await F({agentId:e,serverUrl:n.serverUrl,token:n.token,key:n.key,name:n.name??e,workspaceRoot:n.workspaceRoot,machineId:n.machineId,maxTasks:n.maxTasks});console.log("\u2705 Daemon \u5DF2\u542F\u52A8"),console.log(` Agent: ${e}`),console.log(` PID: ${o.pid}`),console.log(` Log: ~/.aitable-workflow/daemons/${e}/daemon.log`)}catch(e){g.error("cli","start \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("stop").description("\u505C\u6B62\u540E\u53F0 daemon").option("--agent <name>","Agent \u540D\u79F0").option("--all","\u505C\u6B62\u6240\u6709 daemon").action(async t=>{try{if(t.all){let e=await se(),n=0;for(let o of e)await B(o.name)&&n++;console.log(`\u2705 \u5DF2\u505C\u6B62 ${n} \u4E2A daemon`)}else{let e=t.agent;if(!e){let o=await k();if(!o)throw new Error("\u672A\u6307\u5B9A --agent \u4E14\u65E0\u6D3B\u8DC3 Agent");e=o.name}let n=await B(e);console.log(n?`\u2705 Daemon "${e}" \u5DF2\u505C\u6B62`:`\u26A0\uFE0F Daemon "${e}" \u672A\u5728\u8FD0\u884C`)}}catch(e){g.error("cli","stop \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("restart").description("\u91CD\u542F\u540E\u53F0 daemon").option("--agent <name>","Agent \u540D\u79F0").option("--max-tasks <n>","\u5E76\u53D1\u4E0A\u9650","1").action(async t=>{try{let e=t.agent;if(!e){let r=await k();if(!r)throw new Error("\u672A\u6307\u5B9A --agent \u4E14\u65E0\u6D3B\u8DC3 Agent");e=r.name}console.log(`\u{1F504} \u6B63\u5728\u91CD\u542F "${e}"...`),await B(e);let n=await _({name:e,maxTasks:t.maxTasks}),o=await F({agentId:e,serverUrl:n.serverUrl,token:n.token,key:n.key,name:n.name??e,workspaceRoot:n.workspaceRoot,machineId:n.machineId,maxTasks:n.maxTasks});console.log(`\u2705 Daemon \u5DF2\u91CD\u542F (PID: ${o.pid})`)}catch(e){g.error("cli","restart \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("status").description("\u67E5\u770B daemon \u72B6\u6001").option("--agent <name>","Agent \u540D\u79F0").option("-v, --verbose","\u5C55\u793A\u5B8C\u6574\u914D\u7F6E").action(async t=>{try{let e=t.agent;if(!e){let r=await k();if(!r){console.log("\u65E0\u6D3B\u8DC3 Agent");return}e=r.name}let n=await W(e),o=await k();if(console.log(`
44
+ Agent: ${n.agentId}`),console.log(`Running: ${n.running?"\u2705 yes":"\u274C no"}`),n.pid&&console.log(`PID: ${n.pid}`),n.uptimeMs!==null){let r=Math.floor(n.uptimeMs/1e3),s=Math.floor(r/60),a=Math.floor(s/60);console.log(`Uptime: ${a}h ${s%60}m ${r%60}s`)}console.log(`Log file: ${n.logFile}`),t.verbose&&o&&(console.log(`
45
+ --- Configuration ---`),console.log(`Server: ${o.serverUrl}`),console.log(`Token: ${K(o.token)}`),o.machineId&&console.log(`MachineID: ${o.machineId}`),o.workspaceRoot&&console.log(`Workspace: ${o.workspaceRoot}`)),console.log("")}catch(e){g.error("cli","status \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("logs").description("\u67E5\u770B daemon \u65E5\u5FD7").option("--agent <name>","Agent \u540D\u79F0").option("-f, --follow","\u6301\u7EED\u8DDF\u8E2A\u65E5\u5FD7\u8F93\u51FA").option("-n <lines>","\u663E\u793A\u6700\u8FD1 N \u884C","50").action(async t=>{try{let e=t.agent;if(!e){let r=await k();if(!r)throw new Error("\u672A\u6307\u5B9A --agent \u4E14\u65E0\u6D3B\u8DC3 Agent");e=r.name}let n=L(e),o=parseInt(t.n,10)||50;if(t.follow){let r=await Se(n,"utf8").catch(()=>"");if(r){let a=r.trimEnd().split(`
46
+ `);console.log(a.slice(-o).join(`
47
+ `))}let s=r.length;Ut(n,{interval:500},()=>{try{let a=jt(n);if(a.size>s){let i=Ft(n,"r"),l=Buffer.alloc(a.size-s);Bt(i,l,0,l.length,s),Wt(i),process.stdout.write(l.toString("utf8")),s=a.size}}catch{}})}else{let r=await Se(n,"utf8").catch(()=>"");if(!r){console.log(`\u6682\u65E0\u65E5\u5FD7 (${n})`);return}let s=r.trimEnd().split(`
48
+ `);console.log(s.slice(-o).join(`
49
+ `))}}catch(e){g.error("cli","logs \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});var qt=d.command("daemon").description("Daemon \u540E\u53F0\u5B88\u62A4\u7BA1\u7406");qt.command("autostart").description("macOS \u5F00\u673A\u81EA\u542F\u7BA1\u7406").addCommand(new Y("enable").description("\u542F\u7528 macOS \u767B\u5F55\u81EA\u542F\u52A8").requiredOption("--agent-id <id>","Agent ID / \u540D\u79F0").option("--max-tasks <n>","\u5E76\u53D1\u4E0A\u9650").action(async t=>{try{E()||(console.error("\u274C \u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS"),process.exit(1)),await ye(t.agentId,{maxTasks:t.maxTasks?parseInt(t.maxTasks,10):void 0}),console.log("\u2705 \u81EA\u542F\u52A8\u5DF2\u542F\u7528"),console.log(` Agent: ${t.agentId}`),console.log(` Plist: ~/Library/LaunchAgents/com.alibaba.aitable-workflow.daemon.${t.agentId}.plist`)}catch(e){g.error("cli","autostart enable \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}})).addCommand(new Y("disable").description("\u5173\u95ED macOS \u767B\u5F55\u81EA\u542F\u52A8").requiredOption("--agent-id <id>","Agent ID / \u540D\u79F0").action(async t=>{try{E()||(console.error("\u274C \u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS"),process.exit(1)),await ke(t.agentId),console.log(`\u2705 \u81EA\u542F\u52A8\u5DF2\u5173\u95ED (${t.agentId})`)}catch(e){g.error("cli","autostart disable \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}})).addCommand(new Y("status").description("\u67E5\u770B macOS \u81EA\u542F\u52A8\u72B6\u6001").option("--agent-id <id>","Agent ID / \u540D\u79F0\uFF08\u4E0D\u6307\u5B9A\u5219\u5217\u51FA\u6240\u6709\uFF09").action(async t=>{try{if(E()||(console.error("\u274C \u5F00\u673A\u81EA\u542F\u5F53\u524D\u4EC5\u652F\u6301 macOS"),process.exit(1)),t.agentId){let e=await ne(t.agentId);console.log(`
50
+ Agent: ${t.agentId}`),console.log(`Installed: ${e.installed?"yes":"no"}`),console.log(`Loaded: ${e.loaded?"yes":"no"}`),console.log(`Running: ${e.running?`yes (PID: ${e.pid})`:"no"}`),console.log("")}else{let e=await se();if(e.length===0){console.log("\u65E0\u5DF2\u6CE8\u518C\u7684 Agent");return}for(let n of e){let o=await ne(n.name),r=o.running?`running (PID: ${o.pid})`:o.loaded?"loaded":o.installed?"installed":"not installed";console.log(` ${n.name}: ${r}`)}}}catch(e){g.error("cli","autostart status \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}}));d.command("connect").description("\u4E00\u952E\u6CE8\u518C + \u4FDD\u5B58\u51ED\u8BC1 + \u540E\u53F0\u542F\u52A8 daemon\uFF08\u5BF9\u6807 Harness connect\uFF09").requiredOption("--server-url <url>","Gateway / \u5E73\u53F0\u5730\u5740").option("--token <ownerToken>","owner-token\uFF08\u81EA\u6CE8\u518C\uFF0C\u4E0E --key \u4E8C\u9009\u4E00\uFF09").option("--key <machineKey>","per-machine key\uFF08sk_machine_*\uFF0C\u4E0E --token \u4E8C\u9009\u4E00\uFF09").requiredOption("--name <name>","Agent \u540D\u79F0").option("--workspace-root <dir>","\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\uFF08\u53EF\u9009\uFF09").option("--no-start","\u53EA\u6CE8\u518C\u4E0D\u542F\u52A8 daemon").option("--foreground","\u6CE8\u518C\u540E\u5728\u524D\u53F0\u8FD0\u884C relay\uFF08\u963B\u585E\u7EC8\u7AEF\uFF0C\u4FBF\u4E8E\u8C03\u8BD5\uFF09").option("--force","\u8986\u76D6\u540C\u540D\u4F46\u7F51\u5173\u4E0D\u540C\u7684\u5DF2\u6709\u51ED\u8BC1").action(async t=>{try{if(!t.token&&!t.key)throw new Error("\u5FC5\u987B\u63D0\u4F9B --token\uFF08owner-token\uFF09\u6216 --key\uFF08per-machine key\uFF0Csk_machine_*\uFF09\u5176\u4E2D\u4E4B\u4E00\u3002");if(!t.force){let a=await Dt(t.name,t.serverUrl);a&&(console.error(`\u26A0\uFE0F \u62D2\u7EDD\u8986\u76D6\uFF1AAgent \u540D\u79F0 "${t.name}" \u5DF2\u7ED1\u5B9A\u5230\u53E6\u4E00\u4E2A\u7F51\u5173\u3002`),console.error(` \u65E7\u7F51\u5173: ${a.serverUrl}`),console.error(` \u65B0\u7F51\u5173: ${t.serverUrl}`),console.error(" \u7EE7\u7EED\u5C06\u8986\u76D6\u672C\u673A\u8BE5\u51ED\u8BC1\uFF0C\u4E14\u65E7\u7F51\u5173\u7684 daemon \u65E0\u6CD5\u4E0E\u65B0\u7684\u5171\u5B58\uFF08PID \u4E92\u65A5\uFF09\u3002"),console.error(" \u8BF7\u9009\u62E9\u5176\u4E00\uFF1A"),console.error(" 1) \u6362\u4E00\u4E2A --name\uFF08\u591A\u7F51\u5173\u5EFA\u8BAE\u6BCF\u4E2A\u7F51\u5173\u7528\u4E0D\u540C\u540D\u79F0\uFF09"),console.error(" 2) \u786E\u5B9E\u8981\u6539\u7ED1\uFF0C\u52A0 --force \u5F3A\u5236\u8986\u76D6"),process.exit(1))}let e=t.workspaceRoot?X(t.workspaceRoot,t.name):void 0,n={name:t.name,serverUrl:t.serverUrl,token:t.token??"",key:t.key,workspaceRoot:e,createdAt:new Date().toISOString()};if(await _t(n),console.log(`\u2705 Agent "${t.name}" \u5DF2\u6CE8\u518C\u5E76\u4FDD\u5B58\u51ED\u8BC1`),console.log(` Server: ${t.serverUrl}`),console.log(` ${t.token?"Token":"Key"}: ${K(t.token??t.key??"")}`),e&&console.log(` Workspace: ${e}`),console.log(" \u51ED\u8BC1\u6587\u4EF6: ~/.aitable-workflow/credentials.json"),!t.start){t.foreground&&console.log(`
51
+ \u{1F4A1} --no-start \u4E0E --foreground \u540C\u65F6\u6307\u5B9A\uFF0C\u6309 --no-start \u4F18\u5148\uFF1A\u4EC5\u6CE8\u518C\u4E0D\u542F\u52A8\u3002`),console.log(`
52
+ \u{1F4A1} \u542F\u52A8 daemon: aitable-workflow start \u6216 aitable-workflow relay`);return}if(t.foreground){console.log(`
53
+ \u{1F680} \u524D\u53F0\u542F\u52A8 relay\uFF08Ctrl-C \u9000\u51FA\uFF09...`),await Q({serverUrl:t.serverUrl,token:t.token,key:t.key,name:t.name,workspaceRoot:e});return}let o=t.name,r=await _({serverUrl:t.serverUrl,token:t.token,key:t.key,workspaceRoot:t.workspaceRoot,name:o}),s=await F({agentId:o,serverUrl:r.serverUrl,token:r.token,key:r.key,name:r.name??o,workspaceRoot:r.workspaceRoot,machineId:r.machineId,maxTasks:r.maxTasks});console.log(`
54
+ \u{1F680} Daemon \u5DF2\u540E\u53F0\u542F\u52A8`),console.log(` Agent: ${o}`),console.log(` PID: ${s.pid}`),console.log(` Log: ~/.aitable-workflow/daemons/${o}/daemon.log`),console.log(`
55
+ \u{1F4CB} \u5E38\u7528\u547D\u4EE4\uFF1A`),console.log(` \u67E5\u770B\u72B6\u6001: aitable-workflow status --agent ${o}`),console.log(` \u8DDF\u8E2A\u65E5\u5FD7: aitable-workflow logs -f --agent ${o}`),console.log(` \u505C\u6B62: aitable-workflow stop --agent ${o}`),console.log(` \u91CD\u542F: aitable-workflow restart --agent ${o}`),console.log(" \u5217\u51FA Agent: aitable-workflow agent list"),console.log(" \u5207\u6362 Agent: aitable-workflow agent use <name>"),console.log(` \u5F00\u673A\u81EA\u542F: aitable-workflow daemon autostart enable --agent-id ${o}`)}catch(e){g.error("cli","connect \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});var H=d.command("agent").description("Agent \u51ED\u8BC1\u7BA1\u7406");H.command("list").description("\u5217\u51FA\u6240\u6709\u5DF2\u4FDD\u5B58\u7684 Agent \u51ED\u8BC1").action(async()=>{try{let t=await se();if(t.length===0){console.log("\u6682\u65E0\u5DF2\u4FDD\u5B58\u7684 Agent\u3002\u4F7F\u7528 `aitable-workflow connect` \u6CE8\u518C\u3002");return}let e=await Ct();console.log(`
56
+ \u5DF2\u4FDD\u5B58 ${t.length} \u4E2A Agent\uFF08\u6D3B\u8DC3: ${e.activeAgent??"\u65E0"}\uFF09:
57
+ `);for(let n of t){let o=n.name===e.activeAgent?" \u2190 active":"";console.log(` \u2022 ${n.name}${o}`),console.log(` Server: ${n.serverUrl}`),console.log(` Token: ${K(n.token)}`),n.machineId&&console.log(` MachineID: ${n.machineId}`),n.workspaceRoot&&console.log(` Workspace: ${n.workspaceRoot}`),console.log(` Created: ${n.createdAt}`)}console.log("")}catch(t){g.error("cli","agent list \u5931\u8D25",{error:t instanceof Error?t.message:String(t)}),process.exit(1)}});H.command("use <name>").description("\u5207\u6362\u6D3B\u8DC3 Agent").action(async t=>{try{let e=await Lt(t);console.log(`\u2705 \u5DF2\u5207\u6362\u5230 Agent "${e.activeAgent}"`)}catch(e){g.error("cli","agent use \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});H.command("whoami").description("\u663E\u793A\u5F53\u524D\u6D3B\u8DC3 Agent").action(async()=>{try{let t=await k();if(!t){console.log("\u5F53\u524D\u65E0\u6D3B\u8DC3 Agent\u3002\u4F7F\u7528 `aitable-workflow connect` \u6CE8\u518C\u6216 `aitable-workflow agent use <name>` \u5207\u6362\u3002");return}console.log(`Agent: ${t.name}`),console.log(`Server: ${t.serverUrl}`),console.log(`Token: ${K(t.token)}`),t.machineId&&console.log(`MachineID: ${t.machineId}`),t.workspaceRoot&&console.log(`Workspace: ${t.workspaceRoot}`)}catch(t){g.error("cli","agent whoami \u5931\u8D25",{error:t instanceof Error?t.message:String(t)}),process.exit(1)}});H.command("status").description("\u67E5\u770B Agent \u8FDE\u63A5\u72B6\u6001\u4E0E\u8FD0\u884C\u65F6\u4FE1\u606F").option("--json","JSON \u683C\u5F0F\u8F93\u51FA").action(async t=>{try{let e=await k();if(!e){console.log("\u65E0\u6D3B\u8DC3 Agent\u3002\u4F7F\u7528 `aitable-workflow connect` \u6CE8\u518C\u3002");return}let n=await W(e.name),o=await Z(e.name),r={agent:e.name,serverUrl:e.serverUrl,connectionState:n.running?o.connectionState:"stopped",machineId:o.machineId??e.machineId??null,lastHeartbeatAt:o.lastHeartbeatAt,runningTasks:o.runningTasks,queuedTasks:o.queuedTasks,lastDisconnectReason:o.lastDisconnectReason,pid:n.pid};if(t.json){process.stdout.write(JSON.stringify(r,null,2)+`
58
+ `);return}let s=r.connectionState==="connected"?"\u{1F7E2}":r.connectionState==="reconnecting"?"\u{1F7E1}":"\u{1F534}";console.log(`
59
+ ${s} Agent: ${r.agent}`),console.log(` Server: ${r.serverUrl}`),console.log(` Connection: ${r.connectionState}`),r.machineId&&console.log(` MachineID: ${r.machineId}`),r.lastHeartbeatAt&&console.log(` Last HB: ${r.lastHeartbeatAt}`),n.running&&(console.log(` PID: ${r.pid}`),console.log(` Tasks: ${r.runningTasks} running, ${r.queuedTasks} queued`)),r.lastDisconnectReason&&console.log(` Last Error: ${r.lastDisconnectReason}`),console.log("")}catch(e){g.error("cli","agent status \u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("heartbeat").description("\u5411\u670D\u52A1\u7AEF\u53D1\u9001\u5FC3\u8DF3\u5E76\u8FD4\u56DE\u4EFB\u52A1\u5206\u914D\u60C5\u51B5").action(async()=>{try{let t=await k();if(!t)throw new Error("\u65E0\u6D3B\u8DC3 Agent");if(!(await W(t.name)).running){console.log("\u26A0\uFE0F Daemon \u672A\u5728\u8FD0\u884C\u3002\u4F7F\u7528 `aitable-workflow start` \u542F\u52A8\u3002");return}let n=await Z(t.name);console.log("\u2705 Heartbeat OK"),console.log(` Agent: ${t.name}`),console.log(` Connection: ${n.connectionState}`),console.log(` Running: ${n.runningTasks} tasks`),console.log(` Queued: ${n.queuedTasks} tasks`),n.lastHeartbeatAt&&console.log(` Last HB: ${n.lastHeartbeatAt}`)}catch(t){g.error("cli","heartbeat \u5931\u8D25",{error:t instanceof Error?t.message:String(t)}),process.exit(1)}});d.command("relay").description("\u4EE5\u672C\u673A relay \u5B88\u62A4\u8EAB\u4EFD\u53CD\u8FDE RelayGateway\uFF0C\u6309\u9700\u5728\u672C\u673A\u6267\u884C Agent/dws \u4EFB\u52A1").option("--server-url <url>","Gateway \u5730\u5740\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_SERVER_URL\uFF09").option("--key <machineKey>","per-machine key\uFF08sk_machine_*\uFF09").option("--token <ownerToken>","owner-token \u81EA\u6CE8\u518C\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_TOKEN\uFF1B\u4F18\u5148\u4E8E --key\uFF09").option("--name <name>","\u81EA\u6CE8\u518C\u673A\u5668\u540D\uFF08\u53EF\u9009\uFF0C\u7F3A\u7701\u81EA\u52A8\u4F7F\u7528\u4E3B\u673A\u540D\uFF1Bowner+name \u5E42\u7B49\u952E\uFF0C\u591A\u673A\u573A\u666F\u5EFA\u8BAE\u663E\u5F0F\u6307\u5B9A\u4EE5\u907F\u514D hostname \u51B2\u7A81\u4E92\u76F8\u9876\u8FDE\u63A5\uFF1B\u4E5F\u53EF\u7528 AITABLE_RELAY_NAME\uFF09").option("--desc <description>","\u81EA\u6CE8\u518C\u673A\u5668\u63CF\u8FF0\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_DESC\uFF09").option("--workspace-root <dir>","\u5DE5\u4F5C\u533A\u6839\u76EE\u5F55\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_WORKSPACE_ROOT\uFF09").option("--machine-id <id>","\u7A33\u5B9A\u673A\u5668\u8EAB\u4EFD\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_MACHINE_ID\uFF09").option("--max-tasks <n>","\u672C\u673A\u5E76\u53D1\u6267\u884C\u4E0A\u9650\uFF0C\u9ED8\u8BA4 1\uFF08\u4E5F\u53EF\u7528 AITABLE_RELAY_MAX_TASKS\uFF09").action(t=>{try{Q(t)}catch(e){g.error("cli","relay \u542F\u52A8\u5931\u8D25",{error:e instanceof Error?e.message:String(e)}),process.exit(1)}});d.command("inspect [recordId]").description("\u67E5\u770B\u5DE5\u5355\u6267\u884C trace\uFF1B\u6216\u7528 --recipes / --validate \u67E5\u770B\u6821\u9A8C recipe schema \u4E0E workflow \u5BF9\u9F50").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("-s, --step <stepId>","\u67E5\u770B\u7279\u5B9A\u6B65\u9AA4").option("-l, --latest","\u67E5\u770B\u6700\u8FD1\u6267\u884C").option("-n, --limit <number>","\u6700\u591A\u663E\u793A\u6761\u6570","10").option("--recipes","\u5217\u51FA\u5404\u6B65\u9AA4 recipe \u7684 input / output / config schema\u4E0E step \u914D\u7F6E").option("--validate","\u6821\u9A8C step.config / input_mapping / output_mapping \u662F\u5426\u7B26\u5408 recipe schema").option("-w, --workflow <id>","\u591A\u5DE5\u4F5C\u6D41\u6A21\u5F0F\uFF1A\u6307\u5B9A\u5DE5\u4F5C\u6D41 ID\uFF08\u7F3A\u7701\u53D6\u7B2C\u4E00\u4E2A\uFF09").action(async(t,e)=>{try{if(e.recipes||e.validate){await Vt(e);return}let n=await re(e.config),o=v.resolve(n.configDir,n.agent.trace_dir),r=new xt(o),s=parseInt(e.limit,10)||10,a;if(e.latest||!t){if(a=await r.getLatestTraces(s),a.length===0){console.log("\u26A0\uFE0F \u6682\u65E0 trace \u8BB0\u5F55\u3002\u8FD0\u884C `run` \u547D\u4EE4\u540E\u518D\u67E5\u770B\u3002");return}console.log(`
60
+ \u{1F4C4} \u6700\u8FD1 ${a.length} \u6761\u6267\u884C\u8BB0\u5F55:
61
+ `)}else{if(a=await r.getTraces(t),a.length===0){console.log(`\u26A0\uFE0F \u672A\u627E\u5230\u5DE5\u5355 ${t} \u7684 trace \u8BB0\u5F55\u3002`);return}e.step&&(a=a.filter(i=>i.step_id===e.step)),console.log(`
62
+ \u{1F4C4} \u5DE5\u5355 ${t} \u7684\u6267\u884C\u5386\u53F2 (${a.length} \u6B65):
63
+ `)}for(let i of a){let l=i.status==="success"?"\u2705":i.status==="failed"?"\u274C":"\u23F8\uFE0F",m=(i.duration_ms/1e3).toFixed(1);console.log(`${l} [${i.step_id}] ${i.step_name} \u2014 ${m}s \u2014 ${i.status.toUpperCase()}`);for(let[h,w]of i.llm_calls.entries()){let p=h===i.llm_calls.length-1,T=p?" \u2514\u2500":" \u251C\u2500",ae=p?" ":" \u2502 ",Te=(w.duration_ms/1e3).toFixed(1);console.log(`${T} LLM: ${w.model} (${Te}s)`),console.log(`${ae}Input: ${w.prompt_summary.slice(0,80)}${w.prompt_summary.length>80?"...":""}`),console.log(`${ae}Output: ${w.response_summary.slice(0,100)}${w.response_summary.length>100?"...":""}`)}if(Object.keys(i.outputs).length>0){let h=Object.entries(i.outputs).map(([w,p])=>`${w}=${typeof p=="string"?p.slice(0,50):JSON.stringify(p)}`).join(", ");console.log(` \u2514\u2500 Outputs: ${h}`)}i.error&&console.log(` \u2514\u2500 Error: ${i.error}`),console.log()}}catch(n){console.error(`\u2717 inspect \u5931\u8D25: ${n instanceof Error?n.message:String(n)}`),process.exit(1)}});var q=d.command("kb").description("\u77E5\u8BC6\u5E93(LLM-Wiki)\u7F16\u8BD1\u4E0E\u72B6\u6001\u7BA1\u7406");q.command("compile [collections...]").description("\u7F16\u8BD1\u77E5\u8BC6\u5E93\u4E3A wiki\uFF08\u4E0D\u6307\u5B9A collection \u65F6\u7F16\u8BD1\u89D2\u8272\u58F0\u660E\u7684\u5168\u90E8\uFF09").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("--full","\u5F3A\u5236\u5168\u91CF\u91CD\u7F16\u8BD1").action(async(t,e)=>{try{await vt(t,e)}catch(n){console.error(`\u2717 kb compile \u5931\u8D25: ${n instanceof Error?n.message:String(n)}`),process.exit(1)}});q.command("update [collections...]").description("\u6E90\u6587\u6863\u53D8\u66F4\u540E\u89E6\u53D1\u589E\u91CF\u7F16\u8BD1\uFF08\u672A\u53D8\u66F4\u5219\u8DF3\u8FC7\uFF09").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).action(async(t,e)=>{try{await bt(t,e)}catch(n){console.error(`\u2717 kb update \u5931\u8D25: ${n instanceof Error?n.message:String(n)}`),process.exit(1)}});q.command("status [collections...]").description("\u67E5\u770B\u77E5\u8BC6\u5E93\u7F16\u8BD1\u72B6\u6001\uFF08\u7F16\u8BD1\u4E2D/\u5B8C\u6210/\u5931\u8D25 + \u6E90\u662F\u5426\u5DF2\u53D8\u66F4\uFF09").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).action(async(t,e)=>{try{await St(t,e)}catch(n){console.error(`\u2717 kb status \u5931\u8D25: ${n instanceof Error?n.message:String(n)}`),process.exit(1)}});q.command("ingest <url-or-path>").description("\u5BFC\u5165\u6587\u6863\u5230 wiki \u76EE\u5F55\uFF08\u652F\u6301\u9489\u9489 URL \u6216\u672C\u5730\u8DEF\u5F84\uFF0Cdocx/pdf \u81EA\u52A8\u8F6C md\uFF09").option("-o, --output <dir>","\u8F93\u51FA\u76EE\u5F55\uFF08\u9ED8\u8BA4 ./wiki\uFF09").option("-t, --type <type>","\u6E90\u7C7B\u578B: dingtalk-doc\uFF08\u4E0D\u4F20\u5219\u81EA\u52A8\u8BC6\u522B\uFF09").option("--flat","\u4E0D\u4FDD\u7559\u8FDC\u7AEF\u76EE\u5F55\u7ED3\u6784\uFF08\u6240\u6709\u6587\u6863\u5E73\u94FA\u5230\u8F93\u51FA\u76EE\u5F55\uFF09").option("--force","\u5F3A\u5236\u91CD\u65B0\u62C9\u53D6\u6240\u6709\u6587\u6863\uFF08\u5FFD\u7565\u589E\u91CF\u5224\u65AD\uFF09").option("--compile","\u5BFC\u5165\u540E\u81EA\u52A8\u89E6\u53D1 kb compile").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",y).option("--timeout <ms>","\u5355\u6587\u6863\u8BF7\u6C42\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09").action(async(t,e)=>{try{await Et(t,e)}catch(n){console.error(`\u2717 kb ingest \u5931\u8D25: ${n instanceof Error?n.message:String(n)}`),process.exit(1)}});async function Vt(t){let e=await re(t.config),n=t.workflow?e.workflowEntries.find(a=>a.id===t.workflow):e.workflowEntries[0];n||(console.error(`\u2717 \u672A\u627E\u5230\u5DE5\u4F5C\u6D41\u300C${t.workflow}\u300D\u3002\u53EF\u7528\uFF1A${e.workflowEntries.map(a=>a.id).join(", ")}`),process.exit(1));let o=await Ie(n.templatePath,{envSource:e.envSource}),{issues:r,rows:s}=await $t(n.recipeDir,o);if(t.recipes){console.log(`
64
+ \u{1F4CB} \u5DE5\u4F5C\u6D41\u300C${o.meta.name}\u300D(${n.id}) \u7684 recipe schema:
65
+ `);for(let a of s){let i=a.configSummary.length>0?a.configSummary.join(", "):"(none)",l=a.loaded?"":" \u26A0 \u52A0\u8F7D\u5931\u8D25";console.log(` [${a.stepId} \u2192 ${a.recipeId}]${l}`),console.log(` config: ${i}`),console.log()}}if(t.validate)if(r.length===0)console.log(`
66
+ \u2705 \u5DE5\u4F5C\u6D41\u300C${o.meta.name}\u300D(${n.id}) \u5168\u90E8\u6B65\u9AA4\u6821\u9A8C\u901A\u8FC7
67
+ `);else{let a=r.filter(l=>l.level==="error"),i=r.filter(l=>l.level==="warn");console.log(`
68
+ \u6821\u9A8C\u7ED3\u679C\uFF1A${a.length} \u4E2A\u9519\u8BEF\uFF0C${i.length} \u4E2A\u8B66\u544A
69
+ `);for(let l of r){let m=l.level==="error"?"\u274C":"\u26A0\uFE0F ";console.log(` ${m} [${l.stepId} \u2192 ${l.recipeId}] ${l.message}`)}console.log(),a.length>0&&process.exit(1)}}c(Vt,"runRecipeInspect");await d.parseAsync();
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e,f,g,h,i,j,k,l,m,n,o,p}from"./chunk-QUKPCNJA.js";import"./chunk-EI7MMDWY.js";export{p as canOfferDefaultFor,j as collectEditableChoices,i as collectEditableItems,b as collectErrorItems,f as collectPromptDefaults,d as collectPromptItems,c as collectSuggestionItems,o as getSemanticKey,l as ingestToCollection,e as isOptionalPromptItem,k as isUrl,g as promptDefaultForItem,h as rememberPromptValue,n as resolveRoleKbCollection,m as roleCollectionName,a as runConfigCommand};
@@ -0,0 +1,9 @@
1
+ import{l as W,n as J,o as B,p as L}from"./chunk-QUKPCNJA.js";import{a as w}from"./chunk-EI7MMDWY.js";import{createServer as et}from"http";import{stat as H,readFile as $,mkdir as M,writeFile as F,rm as ot}from"fs/promises";import{createReadStream as nt,existsSync as Y}from"fs";import c from"path";import{fileURLToPath as rt}from"url";import st from"crypto";import it from"os";import U from"yaml";import{runCheck as I,writeBack as z,resolveConfigPath as K,loadSettings as at,detectCodingEngines as ct,loadWorkflowTemplate as lt,collectEnvRefs as ft}from"aitable-workflow-core";var G=c.dirname(rt(import.meta.url)),ut={".html":"text/html; charset=utf-8",".js":"application/javascript; charset=utf-8",".css":"text/css; charset=utf-8",".json":"application/json; charset=utf-8",".svg":"image/svg+xml",".png":"image/png",".ico":"image/x-icon"},dt=1800*1e3;function mt(){return process.platform==="darwin"||process.platform==="win32"||process.env.DISPLAY||process.env.WAYLAND_DISPLAY?"local-gui":"remote"}w(mt,"detectEnvironment");function X(){let r=c.join(G,"web");if(Y(c.join(r,"index.html")))return r;let e=c.resolve(G,"..","..","..","web","dist");return Y(c.join(e,"index.html"))?e:null}w(X,"resolveWebRoot");function _t(){return X()!==null}w(_t,"hasWebRoot");async function Z(r){let{createServer:e}=await import("net");return new Promise((t,n)=>{let i=e();i.listen(r,()=>{let g=i.address(),o=typeof g=="object"&&g?g.port:r;i.close(()=>t(o))}),i.on("error",()=>{r<8800?Z(r+1).then(t,n):n(new Error("\u65E0\u6CD5\u627E\u5230\u53EF\u7528\u7AEF\u53E3 (8788-8800)"))})})}w(Z,"getAvailablePort");var pt=1024*1024,gt=50*1024*1024;async function x(r,e=pt){return new Promise((t,n)=>{let i=[],g=0;r.on("data",o=>{if(g+=o.length,g>e){r.destroy(),n(new Error("Request body too large"));return}i.push(o)}),r.on("end",()=>{try{t(JSON.parse(Buffer.concat(i).toString("utf8")))}catch{n(new Error("Invalid JSON body"))}}),r.on("error",n)})}w(x,"readJson");function T(r,e,t=200){let n=JSON.stringify(e);r.writeHead(t,{"Content-Type":"application/json; charset=utf-8","Content-Length":Buffer.byteLength(n)}),r.end(n)}w(T,"sendJson");function b(r,e,t){T(r,{ok:!1,error:t},e)}w(b,"sendError");function P(r){let e=JSON.parse(JSON.stringify(r));for(let t of e.modules){let n=t.workflows?t.workflows.flatMap(i=>i.items):t.items;for(let i of n)i.sensitive&&i.value!==void 0&&(i.value="***")}return e}w(P,"maskSensitive");function V(r){let e=[];for(let t of r.modules)if(t.workflows)for(let n of t.workflows)e.push(...n.items);else e.push(...t.items);return e}w(V,"collectAllItems");function ht(r,e){for(let t of r){let n=V(e).find(i=>{if(!i.writeTarget)return!1;let g=i.writeTarget,o=t.writeTarget;return g.type!==o.type?!1:g.type==="yaml"&&o.type==="yaml"?g.file===o.file&&JSON.stringify(g.yamlPath)===JSON.stringify(o.yamlPath):!1});if(n&&L(n)&&t.value.trim().length>0)return t.value.trim()}return null}w(ht,"findSavedBaseId");async function $t(r){let e=await Z(8788),t=mt(),n=st.randomUUID(),i=t==="remote"?"0.0.0.0":"127.0.0.1",g=X();if(!g)throw new Error("Web \u8D44\u6E90\u76EE\u5F55\u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u542F\u52A8\u53EF\u89C6\u5316\u914D\u7F6E\u754C\u9762");let o=await K(r.configPath),m=c.dirname(o),u=null,f=new Promise(p=>u=p),a=null,l=w(()=>{a&&clearTimeout(a),a=setTimeout(()=>{console.log(`
2
+ \u2139 \u914D\u7F6E\u754C\u9762\u8D85\u8FC7 30 \u5206\u949F\u65E0\u6D3B\u52A8\uFF0C\u5DF2\u81EA\u52A8\u5173\u95ED\u3002`),u?.()},dt)},"resetTimeout"),h=et(async(p,s)=>{let d=new URL(p.url??"/",`http://${p.headers.host??"localhost"}`),k=p.headers.origin;if(k){let _=`http://127.0.0.1:${e}`;(k===_||t==="remote")&&s.setHeader("Access-Control-Allow-Origin",k)}if(s.setHeader("Access-Control-Allow-Methods","GET, POST, OPTIONS"),s.setHeader("Access-Control-Allow-Headers","Content-Type, Authorization"),p.method==="OPTIONS"){s.writeHead(204),s.end();return}if(d.pathname.startsWith("/dev/")){if((d.searchParams.get("token")??p.headers.authorization?.replace("Bearer ",""))!==n){b(s,401,"Unauthorized");return}l();try{await wt(d,p,s,r.configPath,m,u)}catch(R){let A=R instanceof Error?R.message:String(R);b(s,500,A)}return}yt(d,s,g)});await new Promise(p=>h.listen(e,i,p)),l();let y=t==="local-gui"?`http://127.0.0.1:${e}/setup?token=${n}`:`http://${it.hostname()}:${e}/setup?token=${n}`;if(t==="local-gui")try{let{exec:p}=await import("child_process"),s=process.platform==="darwin"?`open "${y}"`:`xdg-open "${y}"`;p(s),console.log(`\u2139 \u6D4F\u89C8\u5668\u5DF2\u6253\u5F00: ${y}`)}catch{console.log(`\u2139 \u914D\u7F6E\u754C\u9762\u5DF2\u542F\u52A8\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00:
3
+ ${y}`)}else console.log("\u2139 \u914D\u7F6E\u754C\u9762\u5DF2\u542F\u52A8\uFF0C\u8BF7\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00:"),console.log(` ${y}`),console.log(`
4
+ \u5982\u679C\u65E0\u6CD5\u76F4\u63A5\u8BBF\u95EE\uFF0C\u53EF\u901A\u8FC7 SSH \u7AEF\u53E3\u8F6C\u53D1:
5
+ ssh -L ${e}:127.0.0.1:${e} <your-host>`),console.log(` \u7136\u540E\u6253\u5F00: http://127.0.0.1:${e}/setup?token=${n}`);console.log(`
6
+ \uFF08\u7B49\u5F85\u914D\u7F6E\u5B8C\u6210\u540E\u81EA\u52A8\u7EE7\u7EED setup \u6D41\u7A0B\uFF09`),console.log(` \uFF08\u6309 Ctrl+C \u9000\u51FA | --no-ui \u56DE\u9000\u547D\u4EE4\u884C\u4EA4\u4E92\uFF09
7
+ `),await f,a&&clearTimeout(a),h.close()}w($t,"runConfigUI");async function wt(r,e,t,n,i,g){if(e.method==="GET"&&r.pathname==="/dev/config/check"){let o=await I({configPath:n});T(t,P(o));return}if(e.method==="GET"&&r.pathname==="/dev/config/enriched"){let o=await I({configPath:n}),m=ct(),u=await at(n),f={},a={},l=new Set,h=/\$\{env\.([A-Za-z_][A-Za-z0-9_]*)(\?)?\}/g;try{let s=await K(n),d=await $(s,"utf8");for(let k of ft([d]))l.add(k)}catch{}try{let s=await $(c.join(i,"profile","profile.yml"),"utf8"),d=U.parse(s),k=d?.workflows;if(k&&typeof k=="object"&&(a=k),d&&typeof d=="object"){let{workflows:_,...R}=d;for(let A of JSON.stringify(R).matchAll(h))l.add(A[1])}}catch{}for(let s of u.workflowEntries)try{let d=await lt(s.templatePath),k=d.steps.map(v=>({id:v.id,name:v.name,recipe:v.recipe,engine:v.engine,auto:v.auto})),_=d.edges.filter(v=>v.from!=="__start__"&&v.to!=="__end__").map(v=>({from:v.from,to:v.to,condition:v.condition})),R={},A=new Set,C;try{C=U.parse(await $(s.templatePath,"utf8"))}catch{}if(C){for(let S of JSON.stringify(C).matchAll(h))A.add(S[1]);let v=a[s.id];if(v&&typeof v=="object")for(let S of JSON.stringify(v).matchAll(h))A.add(S[1]);let Q=Array.isArray(C.steps)?C.steps:[];for(let S=0;S<d.steps.length;S++){let E=d.steps[S],O=Q[S];if(O){let N=JSON.stringify(O),j=new Set;for(let tt of N.matchAll(h))j.add(tt[1]);j.size>0&&(R[E.id]=[...j])}}let q=Array.isArray(C.event_sources)?C.event_sources:[];for(let S of q)if(S){let E=JSON.stringify(S),O=new Set;for(let N of E.matchAll(h))O.add(N[1]);O.size>0&&(R.__event_sources__=[...R.__event_sources__??[],...O])}}f[s.id]={steps:k,edges:_,stepEnvRefs:R,envRefs:[...A].sort()}}catch{f[s.id]={steps:[],edges:[],stepEnvRefs:{},envRefs:[]}}let y=new Set;for(let s of Object.values(f))for(let d of s.envRefs??[])y.add(d);let p=o.modules.find(s=>s.id==="env");for(let s of p?.items??[])s.writeTarget?.type==="env"&&!y.has(s.key)&&l.add(s.key);T(t,{config:P(o),engines:{available:m.available.map(s=>({engine:s.engine,cmd:s.cmd,version:s.version})),recommended:m.recommendedEngine},workflowTopology:f,projectEnvRefs:[...l].sort()});return}if(e.method==="POST"&&r.pathname==="/dev/config/save"){let o=await x(e);if(!Array.isArray(o.updates)){b(t,400,"updates must be an array");return}for(let a of o.updates){let l=[];if(a.writeTarget.type==="yamlAll")for(let h of a.writeTarget.targets)l.push(h.file);else l.push(a.writeTarget.file);for(let h of l){let y=c.resolve(i,h);if(!y.startsWith(i+c.sep)&&y!==i){b(t,403,`\u8DEF\u5F84\u8D8A\u754C: ${h}`);return}}}let m=0;for(let a of o.updates)await z(a.writeTarget,a.value,i),m++;let u=await I({configPath:n}),f=ht(o.updates,u);if(f){let a=0;for(let l of V(u))l.writeTarget&&(l.status==="error"||l.status==="warn")&&L(l)&&B(l)==="baseId"&&(!l.value||typeof l.value=="string"&&!l.value.trim())&&(await z(l.writeTarget,f,i),a++);a>0&&(u=await I({configPath:n}),m+=a)}T(t,{ok:!0,written:m,recheck:P(u)});return}if(e.method==="POST"&&r.pathname==="/dev/kb/ingest"){let o=await x(e);if(!o.roleId||!o.source){b(t,400,"roleId and source are required");return}let m=c.resolve(i,"roles",`${o.roleId}.role.yml`),u=await J(m,o.roleId),f=await W({source:o.source,collectionName:u,configDir:i}),a=await I({configPath:n});T(t,{ok:f.success,message:f.message,recheck:P(a)});return}if(e.method==="POST"&&r.pathname==="/dev/kb/upload"){let o=await x(e,gt);if(!o.roleId||!Array.isArray(o.files)||o.files.length===0){b(t,400,"roleId and files are required");return}let m=c.resolve(i,"roles",`${o.roleId}.role.yml`),u=await J(m,o.roleId),f=c.resolve(i,".kb-upload-tmp",`upload-${Date.now()}`);try{await M(f,{recursive:!0});for(let h of o.files){let y=h.relativePath.replace(/\.\./g,"_"),p=c.resolve(f,y),s=c.dirname(p);if(!p.startsWith(f+c.sep)&&p!==f)continue;await M(s,{recursive:!0});let d=h.encoding==="base64"?Buffer.from(h.content,"base64"):Buffer.from(h.content,"utf8");await F(p,d)}let a=await W({source:f,collectionName:u,configDir:i}),l=await I({configPath:n});T(t,{ok:a.success,message:a.message,recheck:P(l)})}finally{await ot(f,{recursive:!0,force:!0}).catch(()=>{})}return}if(e.method==="GET"&&r.pathname==="/dev/file/read"){let o=r.searchParams.get("path")??"",m=D(o,i);if(!m){b(t,403,`\u8DEF\u5F84\u8D8A\u754C\u6216\u4E0D\u5408\u6CD5: ${o}`);return}try{let u=await $(m,"utf8");T(t,{ok:!0,path:o,content:u,exists:!0})}catch{T(t,{ok:!0,path:o,content:"",exists:!1})}return}if(e.method==="POST"&&r.pathname==="/dev/file/write"){let o=await x(e),m=typeof o.path=="string"?o.path:"",u=D(m,i);if(!u||typeof o.content!="string"){b(t,403,`\u8DEF\u5F84\u8D8A\u754C\u6216\u4E0D\u5408\u6CD5: ${m}`);return}let f=vt(m,o.content);if(f){T(t,{ok:!1,error:f},400);return}await M(c.dirname(u),{recursive:!0}),await F(u,o.content.endsWith(`
8
+ `)?o.content:o.content+`
9
+ `,"utf8");let a=await I({configPath:n});T(t,{ok:!0,recheck:P(a)});return}if(e.method==="POST"&&r.pathname==="/dev/setup/complete"){T(t,{ok:!0}),g?.();return}b(t,404,"Unknown endpoint")}w(wt,"handleDevApi");function D(r,e){let t=r.trim();if(!t||c.isAbsolute(t)||!/\.(ya?ml|json)$/i.test(t))return null;let n=c.resolve(e,t);return n.startsWith(e+c.sep)?n:null}w(D,"resolveInsideConfigDir");function vt(r,e){try{return/\.json$/i.test(r)?JSON.parse(e):U.parse(e),null}catch(t){return`${/\.json$/i.test(r)?"JSON":"YAML"} \u8BED\u6CD5\u9519\u8BEF\uFF0C\u672A\u4FDD\u5B58: ${t instanceof Error?t.message:String(t)}`}}w(vt,"validateStructuredText");async function yt(r,e,t){let n=c.join(t,r.pathname==="/"?"index.html":r.pathname);try{(await H(n)).isDirectory()&&(n=c.join(n,"index.html"))}catch{n=c.join(t,"index.html")}if(!n.startsWith(t+c.sep)&&n!==t){e.writeHead(403),e.end("Forbidden");return}try{await H(n)}catch{e.writeHead(404),e.end("Not Found");return}let i=c.extname(n),g=ut[i]??"application/octet-stream";e.writeHead(200,{"Content-Type":g}),nt(n).pipe(e)}w(yt,"serveStatic");export{mt as detectEnvironment,_t as hasWebRoot,X as resolveWebRoot,$t as runConfigUI};
@@ -0,0 +1 @@
1
+ import{a,b,c,d,e,f,g}from"./chunk-U773UWB7.js";import"./chunk-EI7MMDWY.js";export{a as DAEMON_DATA_DIR,b as daemonDir,d as isProcessAlive,c as pidFilePath,e as readPidFile,g as removePidFile,f as writePidFile};