aitable-workflow-cli 0.1.23 → 0.1.24-beta.1788753005015
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.
- package/README.md +1 -6
- package/dist/{chunk-IGB6WDLR.js → chunk-UNPV6DTX.js} +1 -1
- package/dist/cli.js +47 -47
- package/dist/config-set-FBOQBRSJ.js +13 -0
- package/dist/{config-ui-server-CORDAOYI.js → config-ui-server-IUSACAOT.js} +1 -1
- package/package.json +3 -3
- package/dist/config-set-EGLLIMVJ.js +0 -13
- package/templates/support-qa/.env.example +0 -16
- package/templates/support-qa/aitable-workflow.config.yml +0 -46
- package/templates/support-qa/coding-agents.config.json +0 -18
- package/templates/support-qa/lib/__tests__/declarative-matcher.test.ts +0 -240
- package/templates/support-qa/lib/__tests__/dingtalk-group-membership.test.ts +0 -144
- package/templates/support-qa/lib/__tests__/memory-events.test.ts +0 -90
- package/templates/support-qa/lib/__tests__/sandbox-agent.test.ts +0 -382
- package/templates/support-qa/lib/__tests__/thread-adapter.test.ts +0 -242
- package/templates/support-qa/lib/__tests__/thread-observe-step.test.ts +0 -391
- package/templates/support-qa/lib/__tests__/thread-observer-handler.test.ts +0 -274
- package/templates/support-qa/lib/action-dispatch.ts +0 -262
- package/templates/support-qa/lib/contract.ts +0 -253
- package/templates/support-qa/lib/declarative-matcher.ts +0 -398
- package/templates/support-qa/lib/dingtalk-group-membership.ts +0 -158
- package/templates/support-qa/lib/guards.ts +0 -18
- package/templates/support-qa/lib/memory-events.ts +0 -113
- package/templates/support-qa/lib/owner-resolver.ts +0 -94
- package/templates/support-qa/lib/preflight.ts +0 -294
- package/templates/support-qa/lib/profile.ts +0 -51
- package/templates/support-qa/lib/sandbox-agent.ts +0 -653
- package/templates/support-qa/lib/thread-adapter.ts +0 -281
- package/templates/support-qa/lib/thread-digest.ts +0 -144
- package/templates/support-qa/npmrc +0 -1
- package/templates/support-qa/package.json +0 -27
- package/templates/support-qa/profiles/aitable/profile/escalation/contacts.json +0 -37
- package/templates/support-qa/profiles/aitable/profile/escalation/owner-map.json +0 -18
- package/templates/support-qa/profiles/aitable/profile/fastpath/known-answers.yml +0 -561
- package/templates/support-qa/profiles/aitable/profile/profile.yml +0 -219
- package/templates/support-qa/profiles/aitable/profile/prompts/kb-editor.md +0 -3
- package/templates/support-qa/profiles/aitable/profile/prompts/persona.md +0 -49
- package/templates/support-qa/profiles/aitable/profile/prompts/troubleshooter.md +0 -5
- package/templates/support-qa/profiles/aitable/profile/troubleshoot/classifiers.yml +0 -36
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/SKILL.md +0 -58
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-import-troubleshooter/SKILL.md +0 -485
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/aitable-openapi-troubleshooter/SKILL.md +0 -183
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/import-openapi-e2e-troubleshooter/SKILL.md +0 -459
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-datasource-troubleshooter/SKILL.md +0 -1286
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/notable-field-troubleshooter/SKILL.md +0 -673
- package/templates/support-qa/profiles/aitable/skills/troubleshooting/spreadsheet-datasync-troubleshooter/SKILL.md +0 -322
- package/templates/support-qa/profiles/default/profile/fastpath/known-answers.yml +0 -32
- package/templates/support-qa/profiles/default/profile/profile.yml +0 -217
- package/templates/support-qa/profiles/default/profile/troubleshoot/classifiers.yml +0 -37
- package/templates/support-qa/profiles/default/wiki/support//345/270/270/350/247/201/351/227/256/351/242/230.md +0 -10
- package/templates/support-qa/tsconfig.json +0 -16
- package/templates/support-qa/vitest.config.ts +0 -9
- package/templates/support-qa/workflows/admin-kb-update/recipes/kb-refine.recipe.ts +0 -137
- package/templates/support-qa/workflows/admin-kb-update/recipes/kb_sync_handler.recipe.ts +0 -119
- package/templates/support-qa/workflows/admin-kb-update/workflow.yml +0 -96
- package/templates/support-qa/workflows/config-sync/recipes/config_sync.recipe.ts +0 -668
- package/templates/support-qa/workflows/config-sync/recipes/config_sync_handler.recipe.ts +0 -16
- package/templates/support-qa/workflows/config-sync/workflow.yml +0 -62
- package/templates/support-qa/workflows/daily-review/recipes/daily_review.recipe.ts +0 -602
- package/templates/support-qa/workflows/daily-review/recipes/daily_review_handler.recipe.ts +0 -26
- package/templates/support-qa/workflows/daily-review/workflow.yml +0 -65
- package/templates/support-qa/workflows/group-qa/recipes/answer.recipe.ts +0 -231
- package/templates/support-qa/workflows/group-qa/recipes/conversation_handler.recipe.ts +0 -394
- package/templates/support-qa/workflows/group-qa/recipes/fastpath.recipe.ts +0 -72
- package/templates/support-qa/workflows/group-qa/recipes/on-action.recipe.ts +0 -225
- package/templates/support-qa/workflows/group-qa/recipes/reply-to-group.recipe.ts +0 -202
- package/templates/support-qa/workflows/group-qa/recipes/troubleshoot.recipe.ts +0 -273
- package/templates/support-qa/workflows/group-qa/workflow.yml +0 -268
- package/templates/support-qa/workflows/thread-observer/README.md +0 -96
- package/templates/support-qa/workflows/thread-observer/recipes/thread_observe.recipe.ts +0 -415
- package/templates/support-qa/workflows/thread-observer/recipes/thread_observer_handler.recipe.ts +0 -213
- package/templates/support-qa/workflows/thread-observer/workflow.yml +0 -185
- package/templates/support-qa/workspaces/daily-review/AGENTS.md +0 -233
- package/templates/support-qa/workspaces/kb-editor/AGENTS.md +0 -32
- package/templates/support-qa/workspaces/support/AGENTS.md +0 -156
- package/templates/support-qa/workspaces/thread-observer/AGENTS.md +0 -156
- package/templates/support-qa/workspaces/troubleshooter/AGENTS.md +0 -71
package/README.md
CHANGED
|
@@ -48,12 +48,7 @@ aitable-workflow setup
|
|
|
48
48
|
aitable-workflow run
|
|
49
49
|
```
|
|
50
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
|
-
|
|
51
|
+
`init` 生成的是**配置骨架**(`aitable-workflow.config.yml`、`coding-agents.config.json`、空 `recipes/`);`workflow.yml` 由 `design` 生成。内部发行包如提供场景模板,也可通过 `init --template <name> --profile <name>` 脚手架可运行项目。
|
|
57
52
|
|
|
58
53
|
## 命令总览
|
|
59
54
|
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{o as pe,q as ge}from"./chunk-4B6V7VHM.js";import{a}from"./chunk-EI7MMDWY.js";import{createServer as eo}from"http";import{stat as Xe,readFile as ie,mkdir as ae,writeFile as Ie,rm as to}from"fs/promises";import{createReadStream as oo,existsSync as et,unlinkSync as no}from"fs";import I from"path";import{fileURLToPath as ro}from"url";import ct from"crypto";import so from"os";import Re from"yaml";import{runCheck as V,resolveConfigPath as lt,loadSettings as io,detectCodingEngines as ao,loadWorkflowTemplate as co,collectEnvRefs as lo,applyConfigSave as uo,ConfigSaveError as po,runSetupCommand as go,resolveInsideRoot as Te,assertPortableId as tt}from"aitable-workflow-core";import{mkdir as Tt,readFile as q,writeFile as Ct}from"fs/promises";import B from"path";import F from"yaml";import{BotProvisioner as Pt,BotProvisionError as Oe,DwsClient as ke,DwsDevRunner as Ae,fetchFields as Se,loadSettings as _e,loadWorkflowTemplate as Et,listDwsConversations as xt,readState as Ot,resetProfileCache as Ne,runDwsCommand as At,runCommand as _t,setupKnowledgeBases as Nt,writeBack as ye,assertPortableId as Gt}from"aitable-workflow-core";import fe from"path";import{closeSync as wt,existsSync as Pe,openSync as ht}from"fs";import{createExecShellToolkit as yt,createStandaloneExecShellToolkit as bt,loadSettings as kt,logger as St,resolveConfigPath as vt,spawnManagedProcess as It}from"aitable-workflow-core";async function Rt(e,n){let
|
|
1
|
+
import{o as pe,q as ge}from"./chunk-4B6V7VHM.js";import{a}from"./chunk-EI7MMDWY.js";import{createServer as eo}from"http";import{stat as Xe,readFile as ie,mkdir as ae,writeFile as Ie,rm as to}from"fs/promises";import{createReadStream as oo,existsSync as et,unlinkSync as no}from"fs";import I from"path";import{fileURLToPath as ro}from"url";import ct from"crypto";import so from"os";import Re from"yaml";import{runCheck as V,resolveConfigPath as lt,loadSettings as io,detectCodingEngines as ao,loadWorkflowTemplate as co,collectEnvRefs as lo,applyConfigSave as uo,ConfigSaveError as po,runSetupCommand as go,resolveInsideRoot as Te,assertPortableId as tt}from"aitable-workflow-core";import{mkdir as Tt,readFile as q,writeFile as Ct}from"fs/promises";import B from"path";import F from"yaml";import{BotProvisioner as Pt,BotProvisionError as Oe,DwsClient as ke,DwsDevRunner as Ae,fetchFields as Se,loadSettings as _e,loadWorkflowTemplate as Et,listDwsConversations as xt,readState as Ot,resetProfileCache as Ne,runDwsCommand as At,runCommand as _t,setupKnowledgeBases as Nt,writeBack as ye,assertPortableId as Gt}from"aitable-workflow-core";import fe from"path";import{closeSync as wt,existsSync as Pe,openSync as ht}from"fs";import{createExecShellToolkit as yt,createStandaloneExecShellToolkit as bt,loadSettings as kt,logger as St,resolveConfigPath as vt,spawnManagedProcess as It}from"aitable-workflow-core";async function Rt(e,n,t={}){let o=await vt(e);if(t.standalone||!Pe(o))return{shell:bt(n,{configDir:fe.dirname(o)}),mode:"standalone",bins:{},configPath:o};let r=await kt(e),s=r.raw?.toolkit_config?.shell??{};return{shell:yt(r,n),mode:"project",bins:s.bins??{},configPath:o}}a(Rt,"createToolkitForExec");async function me(e,n,t){let o=fe.resolve(t.logFile),r=fe.dirname(o);if(!Pe(r))throw new Error(`\u65E5\u5FD7\u6587\u4EF6\u76EE\u5F55\u4E0D\u5B58\u5728\uFF1A${r}`);let s=t.bins?.[e]??e,i=ht(o,"w"),c;try{return c=It({command:s,args:n,stdio:["ignore",i,i]}),await new Promise((p,g)=>{let d=c.child,y=a(S=>g(S),"onError");d.once("error",y),d.once("spawn",()=>{d.removeListener("error",y),p()})}),c.unref(),{pid:c.child.pid,logFile:o}}finally{wt(i)}}a(me,"runDetached");function No(e,n){e.command("exec").description("\u9003\u751F\u8231\uFF1A\u8BD5\u8DD1\u4E00\u6761\u547D\u4EE4\uFF08\u590D\u7528 shell toolkit \u7684 bins \u89E3\u6790/\u8D85\u65F6/\u8131\u654F\uFF09\uFF0C\u7528\u4E8E dws/git \u547D\u4EE4\u9762 smoke\u3002\u914D\u7F6E\u4E0D\u5B58\u5728\u6216\u4F20 --standalone \u65F6\u8FDB\u5165\u65E0\u9879\u76EE\u6A21\u5F0F\u3002\u7528\u6CD5\uFF1Aaitable-workflow exec [-c <path>] [--standalone] [--json | --detach <file>] -- <bin> <args...>").option("-c, --config <path>","\u914D\u7F6E\u6587\u4EF6\u8DEF\u5F84",n.defaultConfig).option("--standalone","\u663E\u5F0F\u65E0\u9879\u76EE\u6A21\u5F0F\uFF1A\u4E0D\u8BFB\u53D6\u9879\u76EE\u914D\u7F6E\uFF0C\u9002\u5408 bootstrap / design \u4EA7\u7269\u751F\u6210\u524D\u63A2\u6D4B dws").option("--timeout <ms>","\u5355\u6B21\u6267\u884C\u8D85\u65F6\uFF08\u6BEB\u79D2\uFF09").option("--json","\u4EE5 runJson \u65B9\u5F0F\u6267\u884C\uFF1A\u8981\u6C42 exit=0 \u4E14 stdout \u4E3A\u5408\u6CD5 JSON\uFF0C\u6253\u5370\u89E3\u6790\u540E\u7684\u5BF9\u8C61").option("--detach <file>","\u540E\u53F0\u5206\u79BB\u8FD0\u884C\uFF1A\u547D\u4EE4\u8F93\u51FA\u5B9E\u65F6\u5199\u5165\u8BE5\u6587\u4EF6\u5E76\u7ACB\u5373\u8FD4\u56DE\uFF08\u65E0\u8D85\u65F6/\u91CD\u8BD5\uFF09\u3002\u9002\u5408 dws auth login --device \u7B49\u9700\u5728\u8FD0\u884C\u4E2D\u8BFB\u53D6\u8F93\u51FA\u7684\u6D41\u7A0B").allowUnknownOption().argument("<command...>","\u8981\u6267\u884C\u7684\u547D\u4EE4\u53CA\u53C2\u6570\uFF08\u5EFA\u8BAE\u7528 -- \u5206\u9694\uFF09\uFF0C\u5982\uFF1Adws chat group create --name x --format json").action(async(t,o)=>{try{let[r,...s]=t;r||(console.error("\u2717 \u672A\u63D0\u4F9B\u8981\u6267\u884C\u7684\u547D\u4EE4\uFF1B\u7528\u6CD5\uFF1Aaitable-workflow exec [-c <path>] -- <bin> <args...>"),process.exit(1));let i=o.timeout?Number.parseInt(o.timeout,10):void 0;i!==void 0&&(Number.isNaN(i)||i<=0)&&(console.error("\u2717 --timeout \u5FC5\u987B\u662F\u6B63\u6574\u6570\uFF08\u6BEB\u79D2\uFF09"),process.exit(1)),o.detach&&(o.json||i!==void 0)&&(console.error("\u2717 --detach \u4E0E --json / --timeout \u4E92\u65A5\uFF08\u5206\u79BB\u8FD0\u884C\u65E0\u8D85\u65F6\u4E0E JSON \u8BED\u4E49\uFF09"),process.exit(1)),o.json&&St.setLevel("warn");let c=await Rt(o.config,r,{standalone:o.standalone===!0});if(o.detach){let{pid:g,logFile:d}=await me(r,s,{bins:c.bins,logFile:o.detach});console.log(`\u2713 \u5DF2\u540E\u53F0\u542F\u52A8\uFF08pid ${g}\uFF09\uFF0C\u8F93\u51FA\u5B9E\u65F6\u5199\u5165\uFF1A${d}`),console.error("\u63D0\u793A\uFF1A\u5206\u79BB\u8FD0\u884C\u65E0\u8D85\u65F6\u4E0E\u91CD\u8BD5\u63A7\u5236\uFF0C\u7ED3\u679C\u4EE5\u65E5\u5FD7\u6587\u4EF6\u5185\u5BB9\u4E0E\u5B9E\u9645\u6548\u679C\u4E3A\u51C6\u3002");return}if(o.json){let g=await c.shell.run(r,s,{timeoutMs:i}),d=g.stdout.trim(),y={};if(d!=="")try{y=JSON.parse(d)}catch{console.error("\u2717 exec --json \u5931\u8D25: \u547D\u4EE4\u672A\u8FD4\u56DE\u5408\u6CD5 JSON"),g.stderr&&process.stderr.write(g.stderr),process.exit(1)}console.log(JSON.stringify(y,null,2));return}let p=await c.shell.run(r,s,{timeoutMs:i});p.stdout&&process.stdout.write(p.stdout),p.stderr&&process.stderr.write(p.stderr),p.truncated&&console.error(`
|
|
2
2
|
\u26A0\uFE0F \u8F93\u51FA\u56E0\u8D85\u8FC7\u4E0A\u9650\u88AB\u622A\u65AD`),process.exit(p.exitCode??0)}catch(r){console.error(`\u2717 exec \u5931\u8D25: ${r instanceof Error?r.message:String(r)}`),process.exit(1)}})}a(No,"registerExecCommand");async function Ge(e={}){let n=e.list??xt;try{let{conversations:t}=await n({role:"admin"});return{ok:!0,groups:t}}catch(t){return{ok:!1,message:t instanceof Error?t.message:String(t)}}}a(Ge,"listAdminGroups");async function z(e,n){let t={};try{let c=await _e(e,{lenientEnv:!0});for(let p of c.workflowEntries)try{let d=(await Et(p.templatePath,{envSource:c.envSource})).tracker;if(!d)continue;t[p.id]={baseId:String(d.base_id??"").trim(),tableId:String(d.table_id??"").trim(),...d.label?{label:String(d.label)}:{}}}catch{}}catch{}let o=await Be(n),r=Object.values(t),s=Object.values(o);return{ok:!0,ready:r.length>0?r.every(c=>c.baseId&&c.tableId)&&s.every(c=>c.baseId&&c.tableId):r.some(c=>c.baseId&&c.tableId),trackers:t,configTables:o}}a(z,"readSetupArtifacts");async function Be(e){let n={},t=B.resolve(e,"profile","profile.yml"),o;try{o=F.parse(await q(t,"utf8"))}catch{return n}let r=R(o)?o.workflows:void 0;if(!R(r))return n;for(let s of Object.values(r)){let i=R(s)?s.steps:void 0;if(R(i)){for(let c of Object.values(i))if(R(c))for(let[p,g]of Object.entries(c)){if(!R(g))continue;let d="baseId"in g||"base_id"in g,y="tableId"in g||"table_id"in g;!d||!y||(n[p]={baseId:String(g.baseId??g.base_id??"").trim(),tableId:String(g.tableId??g.table_id??"").trim()})}}}return n}a(Be,"readProfileConfigTables");var M="wiki/official-aitable-faq";async function Bt(e,n){let t=B.resolve(e,"profile","profile.yml"),o;try{o=F.parse(await q(t,"utf8"))}catch{return[]}let r=R(o)?o.roles:void 0,s=R(r)?r[n]:void 0,i=R(s)?s.knowledge_scope:void 0,c=R(i)?i.kb_collections:void 0;return Array.isArray(c)?c.map(p=>typeof p=="string"?p:R(p)&&typeof p.collection=="string"?p.collection:null).filter(p=>p!==null):[]}a(Bt,"readRoleCollections");function Ee(e){if(F.isScalar(e))return typeof e.value=="string"?e.value:null;if(F.isMap(e)){let n=e.get("collection",!0);return F.isScalar(n)&&typeof n.value=="string"?n.value:null}return null}a(Ee,"kbEntryValue");async function $t(e,n,t){let o=B.resolve(e,"profile","profile.yml"),r;try{r=await q(o,"utf8")}catch{return{ok:!1,code:"KB_PROFILE_MISSING",message:"profile.yml \u4E0D\u5B58\u5728\uFF0C\u65E0\u6CD5\u5207\u6362\u5B98\u65B9\u77E5\u8BC6\u5E93",collections:[],changed:!1}}let s=F.parseDocument(r),i=s.getIn(["roles",n,"knowledge_scope","kb_collections"],!0);if(!F.isSeq(i))return{ok:!1,code:"KB_ROLE_NOT_FOUND",message:`profile.yml \u4E2D\u672A\u627E\u5230 roles.${n}.knowledge_scope.kb_collections\uFF0C\u65E0\u6CD5\u5207\u6362`,collections:[],changed:!1};let c=i.items.map(Ee).filter(d=>d!==null),p=c.includes(M),g=c.find(d=>d!==M)??null;if(t===p)return{ok:!0,message:t?"\u5B98\u65B9\u77E5\u8BC6\u5E93\u5DF2\u5904\u4E8E\u542F\u7528\u72B6\u6001":"\u5B98\u65B9\u77E5\u8BC6\u5E93\u5DF2\u5904\u4E8E\u5173\u95ED\u72B6\u6001",collections:c,changed:!1};if(!t&&!g)return{ok:!1,code:"KB_LAST_SOURCE",message:"\u5F53\u524D profile \u672A\u58F0\u660E\u7528\u6237\u5E93\uFF0C\u5173\u95ED\u5B98\u65B9\u5E93\u5C06\u5BFC\u81F4\u52A9\u624B\u65E0\u4EFB\u4F55\u77E5\u8BC6\u6765\u6E90",collections:c,changed:!1};if(t)i.add(M);else{let d=i.items.findIndex(y=>Ee(y)===M);d>=0&&i.delete(d)}return await Ct(o,s.toString(),"utf8"),{ok:!0,message:t?"\u5DF2\u542F\u7528\u5B98\u65B9\u77E5\u8BC6\u5E93":"\u5DF2\u5173\u95ED\u5B98\u65B9\u77E5\u8BC6\u5E93",changed:!0,collections:t?[...c,M]:c.filter(d=>d!==M)}}a($t,"writeOfficialToggle");async function $e(e,n,t,o){Gt(t,{label:"roleId"});let r=await $t(n,t,o);if(!r.ok)return{...r,compile:void 0};Ne();let s=o&&r.changed?Ue(e):void 0;return{...r,compile:s}}a($e,"setOfficialKbEnabled");function De(e){return{ok:!0,...Ue(e)}}a(De,"recompileKnowledgeBases");var we=null;function Ue(e){return we?{started:!1}:(we=Ut(e).finally(()=>{we=null}),{started:!0})}a(Ue,"triggerCompile");async function Dt(e,n){let t={};for(let o of n){let r=await Ot(e,o);t[o]=r?{status:r.status,...typeof r.fileCount=="number"?{sourceCount:r.fileCount}:{},...typeof r.compiledCount=="number"?{articleCount:r.compiledCount}:{},...typeof r.finishedAt=="string"?{finishedAt:r.finishedAt}:{}}:{status:"unknown"}}return t}a(Dt,"readKbStats");async function Ut(e){try{let n=await _e(e,{lenientEnv:!0}),t=await Nt({settings:n});return{ok:!t.results.some(r=>r.action==="failed"),collections:t.collections,...t.skippedReason?{skippedReason:t.skippedReason}:{}}}catch(n){return{ok:!1,collections:[],skippedReason:n instanceof Error?n.message:String(n)}}}a(Ut,"recompileKb");async function oe(e){let n=await Vt(e),t={ok:!0,scenario:null,workflowId:null,eventSourceName:null,kbRoleId:null,kb:{userCollection:null,officialOn:!1,stats:{}},groups:[],groupBotsStaging:[],groupTableRef:null};if(!n)return t;let o=jt(n),r=Lt(n),s=o&&r?"group-qa":null,i=r?await Bt(e,r):[],c=o?G(G(n.workflows)?.[o.workflowId]):void 0,p=o?G(G(c?.event_sources)?.[o.eventSourceName]):void 0,d=(await Be(e)).group_table??null;return{ok:!0,scenario:s,workflowId:o?.workflowId??null,eventSourceName:o?.eventSourceName??null,kbRoleId:r,kb:{userCollection:i.find(y=>y!==M)??null,officialOn:i.includes(M),stats:await Dt(e,i)},groups:Qt(p?.conversation_ids),groupBotsStaging:await Ft(e,o?.workflowId??"group-qa"),groupTableRef:d}}a(oe,"readConsoleState");function jt(e){let n=G(e.workflows);if(!n)return null;for(let[t,o]of Object.entries(n)){let r=G(G(o)?.event_sources);if(r){for(let[s,i]of Object.entries(r))if(G(i)&&"conversation_ids"in i)return{workflowId:t,eventSourceName:s}}}return null}a(jt,"locateGroupQa");function Lt(e){let n=G(e.roles);if(!n)return null;for(let[t,o]of Object.entries(n)){let r=G(G(o)?.knowledge_scope);if(Array.isArray(r?.kb_collections)&&r.kb_collections.length>0)return t}return null}a(Lt,"locateKbRole");async function je(e,n,t,o){let r=[...new Set(o.map(p=>p.trim()).filter(Boolean))],s=r.join(`
|
|
3
3
|
`),i=["workflows",n,"event_sources",t],c=B.join("profile","profile.yml");return await ye({type:"yaml",file:c,yamlPath:[...i,"conversation_ids"],valueType:"string[]"},s,e),await ye({type:"yaml",file:c,yamlPath:[...i,"handler_config","conversation_ids"],valueType:"string[]"},s,e),Ne(),{ok:!0,message:r.length>0?`\u5DF2\u4FDD\u5B58 ${r.length} \u4E2A\u7FA4`:"\u5DF2\u6E05\u7A7A\u7FA4\u5217\u8868"}}a(je,"writeGroupList");var Le="GROUP_BOTS_STAGING";async function re(e){let n=await zt(e,Le);if(!n)return[];try{let t=JSON.parse(n);return Array.isArray(t)?t:[]}catch{return[]}}a(re,"readGroupBotStagingRaw");async function Me(e,n){await ye({type:"env",file:".env",envKey:Le},JSON.stringify(n),e)}a(Me,"writeGroupBotStagingRaw");function Mt(e){return e?e.type==="enterprise"?{type:"enterprise",appKey:e.appKey,...e.name?{name:e.name}:{}}:{type:"custom",name:e.name,webhookUrl:e.webhookUrl}:null}a(Mt,"maskBot");async function ve(e,n,t){let o=t.conversationId.trim();if(!o)return{ok:!1,message:"conversationId \u5FC5\u586B"};let r=await re(e),s=r.findIndex(p=>p.conversationId===o),i=r[s]??{conversationId:o,title:"",enabled:!0,bot:null},c={conversationId:o,title:t.title!==void 0?t.title:i.title,...t.groupType??i.groupType?{groupType:t.groupType??i.groupType}:{},...t.corpId??i.corpId?{corpId:t.corpId??i.corpId}:{},enabled:t.enabled!==void 0?t.enabled:i.enabled,bot:t.bot!==void 0?t.bot:i.bot};return s>=0?r[s]=c:r.push(c),await Me(e,r),{ok:!0,message:"\u5DF2\u4FDD\u5B58"}}a(ve,"saveGroupBotStaging");async function Ft(e,n){return(await re(e)).map(o=>({...o,bot:Mt(o.bot)}))}a(Ft,"readGroupBotStaging");var he="ai\u8868\u683C\u7FA4\u7B54\u7591\u52A9\u624B";function xe(e){return e instanceof Oe?`${e.guidance}
|
|
4
4
|
\uFF08\u539F\u59CB\u9519\u8BEF\uFF1A${e.message}\uFF09`:e instanceof Error?e.message:String(e)}a(xe,"provisionErrorMessage");async function Fe(){try{return await new Ae().getCurrentCorpId()}catch{return}}a(Fe,"resolveCurrentCorpId");async function Ke(e,n,t,o={}){let r=o.provision??new Pt({runner:new Ae}),s=B.join(e,".env"),i;try{i=await r.resolveEnterpriseRobot({name:he,desc:`${he} - aitable-workflow`,envFile:s})}catch(p){return{ok:!1,message:xe(p)}}let c=!1;try{await r.addBotToGroup(i.appKey,t.conversationId)}catch(p){if(p instanceof Oe&&p.kind==="bot_already_installed")c=!0;else return{ok:!1,message:xe(p)}}return await ve(e,n,{conversationId:t.conversationId,title:t.title,...t.groupType?{groupType:t.groupType}:{},corpId:i.corpId,enabled:!0,bot:{type:"enterprise",appKey:i.appKey,appSecret:i.appSecret,name:he}}),{ok:!0,message:c?"\u8BE5\u7FA4\u5DF2\u5B89\u88C5\u8FC7\u6B64\u673A\u5668\u4EBA\uFF0C\u5DF2\u76F4\u63A5\u8BB0\u5F55\u914D\u7F6E":"\u673A\u5668\u4EBA\u5DF2\u52A0\u5165\u7FA4\u804A"}}a(Ke,"addEnterpriseBotToGroup");function Kt(e){let n=[];for(let t of e){if(!t.enabled||!t.bot)continue;let o={\u7FA4ID:t.conversationId,\u7FA4\u540D\u79F0:t.title,...t.groupType?{\u7FA4\u7C7B\u578B:t.groupType==="internal"?"\u5185\u90E8\u7FA4":"\u5916\u90E8\u7FA4"}:{},...t.corpId?{\u7FA4\u5F52\u5C5E\u4F01\u4E1AcorpId:t.corpId}:{},...t.bot.name?{\u673A\u5668\u4EBA\u6635\u79F0:t.bot.name}:{}};t.bot.type==="enterprise"?n.push({...o,\u5165\u7AD9\u65B9\u5F0F:"stream",\u51FA\u7AD9\u65B9\u5F0F:"session",appKey:t.bot.appKey,...t.bot.appSecret?{appSecret:t.bot.appSecret}:{}}):n.push({...o,\u5165\u7AD9\u65B9\u5F0F:"dws",\u51FA\u7AD9\u65B9\u5F0F:"webhook",webhookUrl:t.bot.webhookUrl,...t.bot.webhookSecret?{webhookSecret:t.bot.webhookSecret}:{}})}return n}a(Kt,"stagingToGroupTableRecords");async function se(e,n,t={}){let o=t.artifacts??await z(e,n),r=o.configTables.group_table,s=r?.baseId?.trim()??"",i=r?.tableId?.trim()??"";if(!s||!i)return{ok:!1,created:0,message:"\u7FA4\u914D\u7F6E\u8868\u5C1A\u672A\u5C31\u7EEA\uFF08\u7F3A baseId/tableId\uFF09\uFF0C\u6682\u5B58\u4FDD\u7559"};let c=a(async()=>{o.ready&&await Me(n,[])},"clearStaging"),p=await re(n),g=Kt(p);if(g.length===0)return await c(),{ok:!0,created:0,message:"\u65E0\u53EF\u5199\u5165\u7684\u7FA4\u673A\u5668\u4EBA\u914D\u7F6E"};let d=t.dws??new ke({bin:"dws",timeoutMs:9e4}),y=t.existingGroupIds??(await be(s,i,{dws:d,fields:t.fields})).groups.map(C=>C.groupId),S=g.filter(C=>!y.includes(C.\u7FA4ID??""));if(S.length===0)return await c(),{ok:!0,created:0,message:"\u6682\u5B58\u5DF2\u5168\u90E8\u5728\u7FA4\u914D\u7F6E\u8868\u4E2D"};let $=t.fields??await Se(d,s,i),j=new Map($.map(C=>[C.fieldName,C.fieldId])),X=S.map(C=>{let l={};for(let[u,m]of Object.entries(C)){let f=j.get(u);f&&(l[f]=m)}return{cells:l}});return await d.runJson(["aitable","record","create","--base-id",s,"--table-id",i,"--records",JSON.stringify(X),"--yes"]),await c(),{ok:!0,created:S.length,message:`\u5DF2\u5199\u5165 ${S.length} \u6761\u7FA4\u914D\u7F6E`}}a(se,"writeStagingToGroupTable");var A={groupId:"\u7FA4ID",groupName:"\u7FA4\u540D\u79F0",groupType:"\u7FA4\u7C7B\u578B",corpId:"\u7FA4\u5F52\u5C5E\u4F01\u4E1AcorpId",inbound:"\u5165\u7AD9\u65B9\u5F0F",outbound:"\u51FA\u7AD9\u65B9\u5F0F",webhookUrl:"webhookUrl",webhookSecret:"webhookSecret",appKey:"appKey",appSecret:"appSecret",botNick:"\u673A\u5668\u4EBA\u6635\u79F0",enabled:"\u662F\u5426\u542F\u7528"};function _(e){if(e==null)return"";if(typeof e=="string")return e.trim();if(typeof e=="number")return String(e);if(typeof e=="boolean")return e?"true":"";if(Array.isArray(e))return e.map(_).filter(Boolean).join(",");if(R(e)){if(typeof e.name=="string")return e.name.trim();if(typeof e.value=="string")return e.value.trim();if(typeof e.text=="string")return e.text.trim()}return""}a(_,"cellToText");function Jt(e){if(e==null||e==="")return!0;let n=_(e).toLowerCase();return["true","1","yes","on","\u662F","\u5F00\u542F","\u542F\u7528","\u5DF2\u52FE\u9009"].includes(n)||(typeof e=="boolean"?e:!1)}a(Jt,"cellToEnabled");function Wt(e){let n=_(e);if(n.includes("\u5185\u90E8"))return"internal";if(n.includes("\u5916\u90E8"))return"external"}a(Wt,"cellToGroupType");function Ht(e){if(!R(e))return[];let t=(R(e.data)?e.data:e).records;return Array.isArray(t)?t:[]}a(Ht,"extractConsoleRecords");async function be(e,n,t={}){if(!e||!n)return{ok:!1,baseId:e,tableId:n,groups:[]};let o=t.dws??new ke({bin:"dws",timeoutMs:9e4}),[r,s]=await Promise.all([t.fields?Promise.resolve(t.fields):Se(o,e,n),o.runJson(["aitable","record","query","--base-id",e,"--table-id",n,"--all","--format","json"])]),i=new Map(r.map(g=>[g.fieldName,g.fieldId])),c=a((g,d)=>{if(d in g)return g[d];let y=i.get(d);return y?g[y]:void 0},"readCol"),p=[];for(let g of Ht(s)){let d=R(g.cells)?g.cells:{},y=_(c(d,A.groupId));if(!y)continue;let S=_(c(d,A.appSecret)),$=_(c(d,A.webhookSecret)),j=Wt(c(d,A.groupType));p.push({recordId:String(g.recordId??g.id??""),groupId:y,groupName:_(c(d,A.groupName)),...j?{groupType:j}:{},corpId:_(c(d,A.corpId)),inbound:_(c(d,A.inbound)),outbound:_(c(d,A.outbound)),webhookUrl:_(c(d,A.webhookUrl)),webhookSecret:$?"***":"",appKey:_(c(d,A.appKey)),appSecret:S?"***":"",botNick:_(c(d,A.botNick)),enabled:Jt(c(d,A.enabled))})}return{ok:!0,baseId:e,tableId:n,groups:p}}a(be,"readGroupConfigTable");async function Je(e,n,t={}){let o=t.artifacts??await z(e,n),r=o.configTables.group_table,s=r?.baseId?.trim()??"",i=r?.tableId?.trim()??"";if(!s||!i)return{ok:!1,baseId:s,tableId:i,groups:[]};let c=await be(s,i,t);if(c.ok&&c.groups.length===0&&(await re(n)).length>0){let g=await se(e,n,{...t,artifacts:o,existingGroupIds:[]});g.ok&&g.created>0&&(c=await be(s,i,t))}return c}a(Je,"readGroupConfigTableForConsole");async function We(e,n,t,o,r={}){if(!e||!n||!t)return{ok:!1,message:"baseId / tableId / recordId \u5FC5\u586B"};let s=r.dws??new ke({bin:"dws",timeoutMs:9e4}),i=r.fields??await Se(s,e,n),c=new Map(i.map(g=>[g.fieldName,g.fieldId])),p={};for(let[g,d]of Object.entries(o)){if(d===void 0)continue;let y=A[g];if(!y)continue;let S=c.get(y)??y;p[S]=d}return Object.keys(p).length===0?{ok:!1,message:"\u65E0\u53EF\u66F4\u65B0\u5B57\u6BB5"}:(await s.runJson(["aitable","record","update","--base-id",e,"--table-id",n,"--records",JSON.stringify([{recordId:t,cells:p}]),"--yes"]),{ok:!0,message:"\u8BB0\u5F55\u5DF2\u66F4\u65B0"})}a(We,"updateGroupConfigRecord");var Yt=["loggedIn","isLoggedIn","isLogin","authenticated","tokenValid","isValid"];function He(e){if(!e||typeof e!="object")return null;let n=e;for(let t of Yt)if(typeof n[t]=="boolean")return n[t];for(let t of Object.values(n)){let o=He(t);if(o!==null)return o}return null}a(He,"findAuthBoolean");async function Ye(e={}){let n=e.bin??"dws",t=e.runner??((o,r)=>_t(o,r,{timeoutMs:15e3}));try{let o=await At(n,["auth","status","--format","json"],{runner:t}),r=`${o.stdout}
|