aitable-workflow-cli 0.1.17 → 0.1.18-beta.1787209216198
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/bin/aitable-workflow.mjs +9 -1
- package/dist/chunk-JHE2JBFU.js +39 -0
- package/dist/cli.js +39 -28
- package/dist/config-command-25MM4HLR.js +1 -0
- package/dist/config-ui-server-2ZXBIY3I.js +11 -0
- package/dist/web/assets/index-C6NZAFGP.js +334 -0
- package/dist/web/assets/index-CZ7F9Q7y.css +1 -0
- package/dist/web/index.html +2 -2
- package/package.json +3 -3
- package/templates/support-qa/.env.example +4 -11
- package/templates/support-qa/lib/__tests__/thread-adapter.test.ts +242 -0
- package/templates/support-qa/lib/__tests__/thread-observe-step.test.ts +391 -0
- package/templates/support-qa/lib/__tests__/thread-observer-handler.test.ts +274 -0
- package/templates/support-qa/lib/thread-adapter.ts +281 -0
- package/templates/support-qa/lib/thread-digest.ts +144 -0
- package/templates/support-qa/profiles/aitable/profile/fastpath/known-answers.yml +3 -12
- package/templates/support-qa/profiles/aitable/profile/profile.yml +62 -9
- package/templates/support-qa/profiles/aitable/wiki/faq-support/AI/350/241/250/346/240/274 (/345/244/232/347/273/264/350/241/250) OpenAPI /345/270/256/345/212/251/346/226/207/346/241/243.md" +260 -0
- package/templates/support-qa/profiles/aitable/wiki/faq-support//346/231/272/350/203/275/344/275/223/351/227/256/346/225/260/344/270/216/344/277/241/346/201/257/346/224/266/351/233/206/357/275/234/345/212/237/350/203/275/350/257/264/346/230/216.md +334 -0
- package/templates/support-qa/profiles/default/profile/profile.yml +11 -8
- package/templates/support-qa/workflows/config-sync/recipes/config_sync.recipe.ts +157 -72
- package/templates/support-qa/workflows/daily-review/recipes/daily_review.recipe.ts +1 -66
- package/templates/support-qa/workflows/group-qa/recipes/conversation_handler.recipe.ts +15 -7
- package/templates/support-qa/workflows/group-qa/workflow.yml +3 -1
- package/templates/support-qa/workflows/thread-observer/README.md +96 -0
- package/templates/support-qa/workflows/thread-observer/recipes/thread_observe.recipe.ts +415 -0
- package/templates/support-qa/workflows/thread-observer/recipes/thread_observer_handler.recipe.ts +213 -0
- package/templates/support-qa/workflows/thread-observer/workflow.yml +185 -0
- package/templates/support-qa/workspaces/thread-observer/AGENTS.md +156 -0
- package/dist/chunk-KGQEW2IX.js +0 -38
- package/dist/config-command-JNDJNEFV.js +0 -1
- package/dist/config-ui-server-BEAEXJ5Z.js +0 -8
- package/dist/web/assets/index-2f60MFru.css +0 -1
- package/dist/web/assets/index-UuCwjsUx.js +0 -321
package/bin/aitable-workflow.mjs
CHANGED
|
@@ -9,13 +9,21 @@ const srcEntry = resolve(dir, "../src/cli.ts");
|
|
|
9
9
|
// config/setup/run 都会动态加载用户项目中的 .recipe.ts。发布物没有 src/,也必须
|
|
10
10
|
// 在载入 dist/cli.js 前注册 tsx,不能只依赖源码开发分支或外部 NODE_OPTIONS。
|
|
11
11
|
const tsxApi = await import("tsx/esm/api");
|
|
12
|
-
tsxApi.register?.();
|
|
13
12
|
|
|
14
13
|
if (existsSync(srcEntry)) {
|
|
15
14
|
// 本地开发:core/server 的 exports 在开发态指向各自 src,
|
|
16
15
|
// 故改任意包的源码都即时生效,无需构建。
|
|
16
|
+
//
|
|
17
|
+
// 必须显式把 tsconfig 指到仓库根那份:server 是 Midway component(legacy 装饰器),
|
|
18
|
+
// tsx 默认按 cwd 就近找 tsconfig,从任意目录跑本 bin 时很可能找到一份 include
|
|
19
|
+
// 匹配不到 packages/server/src 的 tsconfig(或找不到),于是按 TC39 语义编译装饰器,
|
|
20
|
+
// 运行期 Reflect.getMetadata 报错。显式指定会绕过 include 匹配,详见根 tsconfig.json。
|
|
21
|
+
tsxApi.register?.({ tsconfig: resolve(dir, "../../../tsconfig.json") });
|
|
17
22
|
await import(pathToFileURL(srcEntry).href);
|
|
18
23
|
} else {
|
|
24
|
+
// 发布物只有 dist(装饰器已由 tsup 按 server 自己的 tsconfig 正确编译),
|
|
25
|
+
// 这里注册 tsx 只为加载用户项目的 .recipe.ts,无需指定 tsconfig。
|
|
26
|
+
tsxApi.register?.();
|
|
19
27
|
// 发布物不含 src/ → 跑构建产物(依赖的 core/server 也被 publishConfig 切到 dist)。
|
|
20
28
|
await import(pathToFileURL(resolve(dir, "../dist/cli.js")).href);
|
|
21
29
|
}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import{a}from"./chunk-EI7MMDWY.js";import{readdir as te,readFile as O,mkdir as ne}from"fs/promises";import w from"path";import q from"yaml";import{checkbox as U,input as P,password as Y,confirm as k,select as T}from"@inquirer/prompts";import{runCheck as $,ingest as oe,detectCodingEngines as se,engineToAgent as re,ENGINE_TO_AGENT as ie,writeBack as D,writeJsonFile as le,getDefaultAgentEntry as ae}from"aitable-workflow-core";var S={name:"\u2190 \u8FD4\u56DE\u4E0A\u4E00\u5C42",value:null};async function Ve(e){let o=e.configPath;e.json||console.log(`
|
|
2
|
+
\u{1F50D} \u6B63\u5728\u6821\u9A8C\u9879\u76EE\u914D\u7F6E: ${o}
|
|
3
|
+
`);let t=await $({configPath:o,workflowId:e.workflowId});if(e.json&&(process.stdout.write(JSON.stringify(xe(t),null,2)+`
|
|
4
|
+
`),process.exit(t.ok?0:1)),M(t),!e.interactive){if(e.noExit)return t;process.exit(t.ok?0:1)}let r=await ee(o),n=ue(t).filter(i=>!R(i)),s=!1;if(e.offerSkipToBuild&&n.length===0){let i=G(t).length;if(await k({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;s=!0}return n.length>0&&(t=await de(n,r,o,e.workflowId,fe(t))),t=await me(t,r,o,e.workflowId,s),t=await Pe(t,r,o,e.workflowId),await ye(t,o,e.workflowId),t}a(Ve,"runConfigCommand");function M(e){for(let i of e.modules)ce(i);console.log("\u2501".repeat(56)),console.log();let{passedModules:o,totalModules:t,errors:r,warnings:n,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=[`${o}/${t} \u6A21\u5757\u901A\u8FC7`];r>0&&i.push(`${r} \u9879\u963B\u65AD`),n>0&&i.push(`${n} \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()}a(M,"printReport");function ce(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 n=0;n<e.workflows.length;n++){let s=e.workflows[n];console.log(`
|
|
7
|
+
\u2500 ${n+1}. \u5DE5\u4F5C\u6D41: ${s.name} (${s.id})`);for(let c of s.items)L(c," ");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 n of e.items)L(n," ")}let o=e.id==="workflow"&&e.workflows?e.workflows.reduce((n,s)=>n+s.items.filter(i=>i.status==="error").length,0):e.items.filter(n=>n.status==="error").length,t=e.ok?"\u2713":"\u2717",r=e.ok?`${e.name}\u5B8C\u6574`:`${e.name}\u4E0D\u5B8C\u6574 \u2014 ${o} \u9879\u5F85\u8865\u9F50`;console.log(` ${t} ${r}`),console.log()}a(ce,"printModuleReport");function L(e,o){let r={ok:"\u2713",error:"\u2717",warn:"\u26A0",suggestion:"\u{1F4A1}"}[e.status]??"?",n=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(`${o}${r} ${s}${n}`)}a(L,"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}a(B,"moduleTitle");function qe(e){return K(e,o=>o.status==="error")}a(qe,"collectErrorItems");function G(e){let o=K(e,n=>n.status==="suggestion"||R(n)&&n.status!=="ok"),t=new Set,r=[];for(let n of o)t.has(n.key)||(t.add(n.key),r.push(n));return r}a(G,"collectAdvisoryItems");function ue(e){return K(e,o=>o.status==="error"||R(o)&&o.status!=="ok")}a(ue,"collectPromptItems");function K(e,o){let t=[];for(let r of e.modules)if(r.workflows)for(let n of r.workflows)for(let s of n.items){let i=A(s);o(s)&&i&&t.push({...s,writeTarget:i})}else for(let n of r.items){let s=A(n);o(n)&&s&&t.push({...n,writeTarget:s})}return t}a(K,"collectPromptableItems");function R(e){return A(e)?e.surface?e.surface.allowEmpty:e.status==="warn":!1}a(R,"isOptionalPromptItem");function A(e){return e.writeTarget??e.surface?.writeTarget}a(A,"normalizedWriteTarget");function fe(e){let o=new Map;for(let t of e.modules){let r=t.workflows?t.workflows.flatMap(n=>n.items):t.items;for(let n of r)typeof n.value=="string"&&x(n)&&!o.has(C(n))&&z(n,n.value,o)}return o}a(fe,"collectPromptDefaults");function ge(e,o){if(e.key==="coding_agent.engine"&&typeof e.value=="string")return e.value;if(x(e)){if(typeof e.value=="string"&&e.value.trim())return e.value;let t=o.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}a(ge,"promptDefaultForItem");function z(e,o,t){let r=o.trim();r&&x(e)&&t.set(C(e),r)}a(z,"rememberPromptValue");async function de(e,o,t,r,n=new Map){if(e.length===0)return $({configPath:t,workflowId:r});console.log(`
|
|
8
|
+
\u53D1\u73B0 ${e.length} \u9879\u7F3A\u5931\u914D\u7F6E\uFF08\u963B\u65AD\u8FD0\u884C\uFF0C\u9700\u5148\u8865\u9F50\uFF09:
|
|
9
|
+
`);let s=e.map((u,l)=>({name:`[${X(u.writeTarget)}] ${u.key} \u2014 ${u.surface?.description??u.message??""}`,value:l,checked:!0})),i=await U({message:"\u9009\u62E9\u8981\u8865\u9F50\u7684\u7F3A\u5931\u9879\uFF08\u2191\u2193 \u79FB\u52A8, Space \u9009\u62E9, Enter \u786E\u8BA4, A \u5168\u9009\uFF09",choices:s});if(i.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<i.length;u++){let l=e[i[u]];if(await ke(l,o)){console.log(`
|
|
12
|
+
\u21B7 ${l.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}/${i.length}) \u2501${"\u2501".repeat(30)}`),console.log(` \u914D\u7F6E\u9879: ${l.key}`),l.surface?.description&&console.log(` \u8BF4\u660E: ${l.surface?.description}`),l.writeTarget&&console.log(` \u6587\u4EF6: ${v(l.writeTarget)}`),l.writeTarget?.type==="yaml"&&l.writeTarget.valueType==="string[]"&&console.log(" \u63D0\u793A: \u591A\u4E2A\u503C\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF08\u5982 cidAAA==,cidBBB==\uFF09");let m=R(l);m&&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 f=ge(l,n),g=await N(l,l.writeTarget,f,m);if(m&&g.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 ${v(l.writeTarget)}`);continue}await D(l.writeTarget,g,o),await W(l,g,o),z(l,g,n),console.log(` \u2713 \u5DF2\u66F4\u65B0 ${v(l.writeTarget)}`)}console.log(`
|
|
14
|
+
\u2705 \u5DF2\u5904\u7406 ${i.length} \u9879\u914D\u7F6E\u3002\u91CD\u65B0\u6821\u9A8C...
|
|
15
|
+
`);let c=await $({configPath:t,workflowId:r});return M(c),c}a(de,"promptFixMissing");async function me(e,o,t,r,n=!1){let s=G(e);if(s.length===0)return e;console.log(`
|
|
16
|
+
\u{1F4A1} \u5176\u4F59 ${s.length} \u9879\u4E3A\u5EFA\u8BAE\u914D\u7F6E\uFF08\u4E0D\u963B\u65AD\u8FD0\u884C\uFF0C\u53EF\u7A0D\u540E\u8865\uFF09:
|
|
17
|
+
`);let i=5;for(let l of s.slice(0,i))console.log(` - ${l.key}: ${l.surface?.description??l.message??"\u5EFA\u8BAE\u914D\u7F6E"}`);if(s.length>i&&console.log(` \u2026 \u53CA\u5176\u4ED6 ${s.length-i} \u9879`),console.log(),!n&&await T({message:"\u8FD9\u4E9B\u5EFA\u8BAE\u914D\u7F6E\u5982\u4F55\u5904\u7406\uFF1F",choices:[{name:"\u8DF3\u8FC7\uFF08\u63A8\u8350\uFF09\u2014 \u4E4B\u540E\u53EF\u968F\u65F6\u7528 config \u547D\u4EE4\u8865\u914D",value:"skip"},{name:`\u9010\u9879\u8865\u9F50\uFF08${s.length} \u9879\uFF09`,value:"fill"}],default:"skip"})==="skip")return console.log(`
|
|
18
|
+
\u21B7 \u5DF2\u8DF3\u8FC7\u5EFA\u8BAE\u914D\u7F6E\u3002
|
|
19
|
+
`),e;let c=await pe({items:s,configDir:o,originalResult:e,title:"\u586B\u5199\u5EFA\u8BAE\u914D\u7F6E",heading:"\u53EF\u8865\u9F50\u7684\u5EFA\u8BAE\u9879:",selectMessage:"\u9009\u62E9\u8981\u8865\u9F50\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(c===0)return e;console.log(`
|
|
20
|
+
\u2705 \u5DF2\u586B\u5199 ${c} \u9879\u5EFA\u8BAE\u914D\u7F6E\u3002\u91CD\u65B0\u6821\u9A8C...
|
|
21
|
+
`);let u=await $({configPath:t,workflowId:r});return M(u),u}a(me,"promptConfigureAdvisory");async function pe(e){let{items:o,configDir:t,originalResult:r,title:n,heading:s,selectMessage:i,selectedMessage:c}=e;if(o.length===0)return 0;console.log(`
|
|
22
|
+
${s}
|
|
23
|
+
`);let u=new Map;r&&_e(r,u);let l=o.map((f,g)=>({name:`[${X(f.writeTarget)}] ${f.key} \u2014 ${f.surface?.description??f.message??""}`,value:g,checked:!0})),d=await U({message:i,choices:l});if(d.length===0)return console.log(`
|
|
24
|
+
${c}
|
|
25
|
+
`),0;let m=0;for(let f=0;f<d.length;f++){let g=o[d[f]];console.log(`
|
|
26
|
+
\u2501\u2501 ${n} (${f+1}/${d.length}) \u2501${"\u2501".repeat(30)}`),console.log(` \u914D\u7F6E\u9879: ${g.key}`),g.surface?.description&&console.log(` \u8BF4\u660E: ${g.surface?.description}`),g.writeTarget&&console.log(` \u6587\u4EF6: ${v(g.writeTarget)}`),g.writeTarget?.type==="yaml"&&g.writeTarget.valueType==="string[]"&&console.log(" \u63D0\u793A: \u591A\u4E2A\u503C\u7528\u82F1\u6587\u9017\u53F7\u5206\u9694\uFF08\u5982 cidAAA==,cidBBB==\uFF09");let h=R(g);h&&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 b=Me(g,u),I=await N(g,g.writeTarget,b,h);if(h&&I.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 ${v(g.writeTarget)}`);continue}await D(g.writeTarget,I,t),await W(g,I,t),m++,console.log(` \u2713 \u5DF2\u66F4\u65B0 ${v(g.writeTarget)}`)}return m}a(pe,"promptFillItems");async function ye(e,o,t){let r=e.summary.suggestions;if(!await k({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 ee(o);for(;;){let i=await T({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"},{name:"5. \u77E5\u8BC6\u5E93\u7F16\u8BD1\u914D\u7F6E (\u5FC5\u586B\u9879 / compile.custom)",value:"profile"},S]});if(i===null)break;let c=i==="profile"?await $e(e.modules.filter(f=>f.id==="profile"),s):await(async()=>{let f=e.modules.find(g=>g.id===i);return f?Ce(f,s):[]})();if(c.length===0){console.log(` \u8BE5\u6A21\u5757\u65E0\u53EF\u4FEE\u6539\u9879
|
|
27
|
+
`);continue}console.log(` \u53EF\u4FEE\u6539 ${c.length} \u9879\uFF08\u4EC5\u5C55\u793A CLI \u53EF\u5B89\u5168\u5199\u56DE\u7684\u914D\u7F6E\u9879\uFF09
|
|
28
|
+
`);let u=await T({message:"\u9009\u62E9\u8981\u4FEE\u6539\u7684\u914D\u7F6E\u9879:",choices:[...c.map(f=>({name:`${f.label} (\u5F53\u524D: ${je(f.item)})`,value:f})),S]});if(!u)continue;let l=u.item,d=u.label,m=await N(l,l.writeTarget,Ee(l),R(l),d);l.writeTarget&&(await D(l.writeTarget,m,s),await W(l,m,s),console.log(` \u2713 \u5DF2\u66F4\u65B0 ${v(l.writeTarget)}
|
|
29
|
+
`)),e=await $({configPath:o,workflowId:t})}}a(ye,"promptBrowseAndEdit");async function N(e,o,t,r,n){let s=n??e.key,i=o?.valueType==="boolean",c=o?.type==="yaml"&&o.valueType==="string[]";if(e.key==="coding_agent.engine")return he(t);if(e.surface?.envJsonSpec)return we(e,e.surface.envJsonSpec,s,t);if(i){let u=t?t.toLowerCase()==="true":!0;return await k({message:`\u662F\u5426\u542F\u7528 ${s}\uFF1F`,default:u})?"true":"false"}return e.sensitive?await Y({message:`\u8BF7\u8F93\u5165 ${s}:`}):await P({message:`\u8BF7\u8F93\u5165 ${s}${c?"\uFF08\u9017\u53F7\u5206\u9694\uFF09":""}${t?`\uFF08\u9ED8\u8BA4: ${t}\uFF09`:""}:`,default:t,validate:a(u=>Oe(e,o,u,r),"validate")})}a(N,"promptForValue");async function we(e,o,t,r){let n=o.keyLabel??"\u540D\u79F0",s=/secret|token|password|api_key/i,i=new Map,c=r??(typeof e.value=="string"?e.value:"");try{let l=JSON.parse(c);if(l&&typeof l=="object"&&!Array.isArray(l))for(let[d,m]of Object.entries(l)){let f={};for(let[g,p]of Object.entries(m??{}))f[g]=p==null?"":String(p);i.set(d,f)}}catch{}console.log(`
|
|
30
|
+
${t} \u6309\u9879\u586B\u5199\uFF1A\u6BCF\u9879\u4E00\u4E2A\u300C${n}\u300D\uFF0C\u4E0B\u8BBE ${o.valueFields.join(" / ")} \u5B57\u6BB5\u3002`),o.example&&console.log(` \u683C\u5F0F\u53C2\u8003: ${o.example}`);let u=a(async l=>{let d=i.get(l)??{},m={...d},f=[...o.valueFields];for(let g of Object.keys(d))f.includes(g)||f.push(g);for(let g of f){let p=s.test(g)?Y:P,h=d[g]?`\uFF08\u5F53\u524D: ${s.test(g)?"***":d[g]}\uFF0C\u56DE\u8F66\u4FDD\u7559\uFF09`:"",b=await p({message:` ${l}.${g}${h}:`});(b.trim()||!d[g])&&(m[g]=b.trim())}i.set(l,m)},"promptEntryFields");for(;;){let l=[...i.keys()],d=l.length>0?`\u5DF2\u914D ${l.length} \u9879: ${l.join(", ")}`:"\u5C1A\u672A\u914D\u7F6E\u4EFB\u4F55\u9879",m=await T({message:`${t}\uFF08${d}\uFF09:`,choices:[{name:`\u2795 \u6DFB\u52A0\u4E00\u9879\uFF08\u5148\u586B ${n}\uFF0C\u518D\u9010\u5B57\u6BB5\u586B\u503C\uFF09`,value:"add"},...l.map(f=>({name:`\u270F\uFE0F \u7F16\u8F91 ${f}`,value:`edit:${f}`})),...l.map(f=>({name:`\u{1F5D1} \u5220\u9664 ${f}`,value:`del:${f}`})),{name:"\u2705 \u5B8C\u6210\u5E76\u4FDD\u5B58",value:"done"}]});if(m==="done"){if(l.length===0&&!await k({message:"\u5F53\u524D\u6CA1\u6709\u4EFB\u4F55\u6761\u76EE\uFF0C\u786E\u5B9A\u4FDD\u5B58\u7A7A\u914D\u7F6E\uFF1F",default:!1}))continue;break}if(m==="add"){let f=await P({message:` \u65B0\u589E\u9879\u7684 ${n}:`,validate:a(g=>{let p=g.trim();return p?i.has(p)?`${n} \u5DF2\u5B58\u5728: ${p}`:!0:`${n} \u4E0D\u80FD\u4E3A\u7A7A`},"validate")});await u(f.trim());continue}if(m.startsWith("edit:")){await u(m.slice(5));continue}if(m.startsWith("del:")){i.delete(m.slice(4));continue}}return JSON.stringify(Object.fromEntries(i))}a(we,"promptJsonMapValue");async function he(e){let o=se(),t=new Set(o.available.map(s=>String(s.engine))),r=[];for(let s of o.available){let i=s.engine===o.recommendedEngine?" (\u63A8\u8350)":"",c=s.version?` ${s.version}`:"";r.push({name:`${s.engine} \u2014 \u672C\u673A\u53EF\u7528 (${s.cmd}${c})${i}`,value:String(s.engine)})}for(let s of Object.keys(ie))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"}),o.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 n=e&&r.some(s=>s.value===e)?e:o.recommendedEngine?String(o.recommendedEngine):void 0;return await T({message:"\u9009\u62E9 Coding Agent \u5F15\u64CE:",choices:r,...n?{default:n}:{}})}a(he,"promptCodingEngine");async function W(e,o,t){if(e.key!=="coding_agent.engine")return;let r=o.trim();if(!r||r==="llm_only")return;let n=re(r);if(!n)return;let s=w.resolve(t,"coding-agents.config.json"),i=ae(n);for(let[c,u]of Object.entries(i))(typeof u=="string"||typeof u=="boolean")&&await le(s,["agents",n,c],u);console.log(` \u2713 \u5DF2\u5728 coding-agents.config.json \u5199\u5165 ${n} \u9ED8\u8BA4\u914D\u7F6E`)}a(W,"autoEnableCodingAgent");async function ke(e,o){if(e.key!=="coding_agent.config.enabled")return!1;let t=e.writeTarget;if(!t||t.type!=="json")return!1;try{let r=await O(w.resolve(o,t.file),"utf8"),n=JSON.parse(r);for(let s of t.jsonPath){if(n==null||typeof n!="object")return!1;n=n[String(s)]}return n===!0}catch{return!1}}a(ke,"isEnableTargetSatisfied");function J(e){let o=[];if(e.workflows)for(let t of e.workflows)for(let r of t.items){let n=A(r);n&&o.push({...r,writeTarget:n})}else for(let t of e.items){let r=A(t);r&&o.push({...t,writeTarget:r})}return o}a(J,"collectEditableItems");async function $e(e,o){let t=[],r=new Set;for(let s of e)for(let i of J(s)){let c=j(i.writeTarget);r.has(c)||(r.add(c),t.push({item:i,label:i.key}))}let n=await H("profile/profile.yml",w.resolve(o,"profile","profile.yml"),ve);for(let s of n){if(!s.writeTarget)continue;let i=j(s.writeTarget);r.has(i)||(r.add(i),t.push({item:s,label:s.key}))}return t}a($e,"collectProfileKbEditableChoices");function ve(e){let o=[],t=y(e.roles)?e.roles:{};for(let[r,n]of Object.entries(t)){if(!y(n))continue;let s=y(n.knowledge_scope)?n.knowledge_scope:void 0;(Array.isArray(s?.kb_collections)?s.kb_collections:[]).forEach((c,u)=>{if(!y(c)||!y(c.compile))return;let l=c.compile.custom;if(!y(l))return;let d=typeof c.collection=="string"?c.collection:`kb_collections[${u}]`;_({items:o,file:"profile/profile.yml",keyPrefix:`${d}.custom`,yamlPath:["roles",r,"knowledge_scope","kb_collections",u,"compile","custom"],value:l})})}for(let r of o){if(!r.writeTarget)continue;let n=r.writeTarget;r.surface={key:r.key,label:r.key,description:"\u77E5\u8BC6\u5E93\u7F16\u8BD1\u79C1\u6709\u914D\u7F6E\uFF08compile.custom\uFF0C\u53EF\u7559\u7A7A\uFF09",owner:"framework",source:"project",required:!1,editable:!0,allowEmpty:!0,defaultStrategy:"none",valueType:"string",writeTarget:n}}return o}a(ve,"selectKbCustomLeaves");async function Ce(e,o){if(e.id==="roles")return be(e,o);if(!e.workflows)return J(e).map(n=>({item:n,label:n.key}));let t=[],r=new Set;for(let n of e.workflows){let s=`${n.name} (${n.id})`;for(let i of n.items){let c=A(i);if(!c)continue;let u=j(c);r.has(u)||(r.add(u),t.push({item:{...i,writeTarget:c},label:`${s} / ${i.key}`}))}}return t}a(Ce,"collectEditableChoices");async function be(e,o){let t=J(e).map(i=>({item:i,label:i.key})),r=new Set(t.map(i=>i.item.writeTarget).filter(Boolean).map(i=>j(i))),n=w.resolve(o,"roles"),s;try{s=await te(n)}catch{return t}for(let i of s.filter(c=>c.endsWith(".role.yml")).sort()){let c=i.replace(/\.role\.yml$/,""),u=await H(w.join("roles",i),w.resolve(n,i));for(let l of u){if(!l.writeTarget)continue;let d=j(l.writeTarget);r.has(d)||(r.add(d),t.push({item:l,label:`role.${c} / ${l.key}`}))}}return t}a(be,"collectRoleEditableChoices");async function H(e,o,t){let r;try{r=q.parse(await O(o,"utf8"))}catch{return[]}if(!y(r))return[];if(t)return t(r);let n=[];return _({items:n,file:e,keyPrefix:"",yamlPath:[],value:r}),n}a(H,"collectYamlEditableItems");function _(e){let{items:o,file:t,keyPrefix:r,yamlPath:n,value:s}=e;if(s!=null){if(typeof s=="string"){o.push({key:r,status:"ok",value:s,writeTarget:{type:"yaml",file:t,yamlPath:n}});return}if(Array.isArray(s)){s.every(i=>typeof i=="string")&&o.push({key:r,status:"ok",value:s,writeTarget:{type:"yaml",file:t,yamlPath:n,valueType:"string[]"}}),s.forEach((i,c)=>{y(i)&&_({items:o,file:t,keyPrefix:`${r}.${c}`,yamlPath:[...n,c],value:i})});return}if(y(s))for(let[i,c]of Object.entries(s))_({items:o,file:t,keyPrefix:Ie(r,i),yamlPath:[...n,i],value:c})}}a(_,"collectEditableLeaves");function Ie(e,o){return e?`${e}.${o}`:o}a(Ie,"appendKey");function y(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}a(y,"isRecord");function j(e){return e.type==="env"?`env:${e.file}:${e.envKey}`:e.type==="yamlAll"?`yamlAll:${e.targets.map(o=>`${o.file}:${o.yamlPath.join(".")}`).join(",")}`:e.type==="json"?`json:${e.file}:${e.jsonPath.join(".")}`:e.type==="textFile"?`textFile:${e.file}`:`yaml:${e.file}:${e.yamlPath.join(".")}`}a(j,"writeTargetKey");function Ue(e){try{return new URL(e),!0}catch{return!1}}a(Ue,"isUrl");function Te(e){return"totalDocs"in e}a(Te,"isIngestReport");async function V(e){let o=w.resolve(e.configDir,e.collectionName);await ne(o,{recursive:!0}),console.log(`
|
|
31
|
+
\u23F3 \u6B63\u5728\u5BFC\u5165\u6587\u6863\u5230 ${e.collectionName}/ ...`);try{let t=await oe({url:e.source,outputDir:o,preserveStructure:!0,onProgress:a((n,s,i)=>{console.log(` [${n+1}/${s}] ${i}`)},"onProgress")});if(Te(t)){let n=[`${t.successCount} \u65B0\u589E/\u66F4\u65B0`];t.skippedCount>0&&n.push(`${t.skippedCount} \u8DF3\u8FC7(\u65E0\u53D8\u5316)`),t.skippedUnsupported>0&&n.push(`${t.skippedUnsupported} \u8DF3\u8FC7(\u4E0D\u652F\u6301\u7684\u683C\u5F0F)`),t.failureCount>0&&n.push(`${t.failureCount} \u5931\u8D25`);let s=`\u5BFC\u5165\u5B8C\u6210: ${n.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}}}a(V,"ingestToCollection");function Q(e){let o=[];for(let t of e)typeof t=="string"?o.push(t):typeof t=="object"&&t!==null&&"collection"in t&&o.push(String(t.collection));return o}a(Q,"extractCollectionNames");function Ae(e){return`wiki/${e}`}a(Ae,"roleCollectionName");async function Re(e,o){let t=Ae(o);try{let n=q.parse(await O(e,"utf8"))?.knowledge_scope,s=y(n)?n.kb_collections:void 0;if(Array.isArray(s)){let i=Q(s);if(i.length>0)return i.includes(t)?t:i[0]}}catch{}return t}a(Re,"resolveRoleKbCollection");async function Pe(e,o,t,r){let n=e.modules.find(l=>l.id==="roles");if(!n)return e;let s=".knowledge_scope.kb_collections",i=n.items.filter(l=>l.status==="suggestion"&&l.key.endsWith(s)),c=n.items.filter(l=>l.status==="ok"&&l.key.endsWith(s));if(i.length===0&&c.length===0)return e;let u=!1;for(let l of i){let d=l.key.replace(s,"").replace(/^role\./,""),m=`${d}.role.yml`;if(console.log(`
|
|
32
|
+
\u2501\u2501 \u89D2\u8272\u77E5\u8BC6\u5E93\u914D\u7F6E \u2501${"\u2501".repeat(38)}`),console.log(`
|
|
33
|
+
\xB7 ${m} \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
|
|
34
|
+
`),!await k({message:`\u662F\u5426\u8981\u4E3A ${d} \u6DFB\u52A0\u77E5\u8BC6\u5E93\uFF1F`,default:!1}))continue;let g=await Re(w.resolve(o,"roles",m),d);for(;;){let p=await P({message:"\u8BF7\u8F93\u5165\u6587\u6863\u6765\u6E90\uFF08\u672C\u5730\u8DEF\u5F84 \u6216 \u5728\u7EBF\u6587\u6863\u94FE\u63A5\uFF09:",validate:a(I=>I.trim().length>0||"\u4E0D\u80FD\u4E3A\u7A7A","validate")});if((await V({source:p.trim(),collectionName:g,configDir:o})).success&&(console.log(` (kb_collections \u4E0D\u53D8\uFF0C\u6587\u6863\u5DF2\u5199\u5165\u76EE\u5F55 ${g}/)`),u=!0),!await k({message:`\u662F\u5426\u7EE7\u7EED\u6DFB\u52A0\u66F4\u591A\u6587\u6863\u5230 ${d} \u7684\u77E5\u8BC6\u5E93\uFF1F`,default:!1}))break}}for(let l of c){let d=l.key.replace(s,"").replace(/^role\./,""),m=`${d}.role.yml`,f=Array.isArray(l.value)?Q(l.value):[];if(console.log(`
|
|
35
|
+
\u2501\u2501 \u89D2\u8272\u77E5\u8BC6\u5E93\u914D\u7F6E \u2501${"\u2501".repeat(38)}`),console.log(`
|
|
36
|
+
\xB7 ${m} \u2014 \u5DF2\u6709 ${f.length} \u4E2A\u77E5\u8BC6\u5E93\u96C6\u5408: ${f.join(", ")}\uFF08\u4E0D\u6539\u52A8\u5176\u6587\u4EF6\u8DEF\u5F84\uFF0C\u53EA\u8FFD\u52A0\u6587\u6863\uFF09
|
|
37
|
+
`),!!await k({message:`\u662F\u5426\u8981\u4E3A ${d} \u8FFD\u52A0\u66F4\u591A\u6587\u6863\uFF1F`,default:!1}))for(;;){let p;if(f.length===1)p=f[0];else{let E=await T({message:"\u9009\u62E9\u8981\u6DFB\u52A0\u6587\u6863\u7684\u77E5\u8BC6\u5E93\u96C6\u5408:",choices:[...f.map(F=>({name:F,value:F})),S]});if(E===null)break;p=E}let h=await P({message:"\u8BF7\u8F93\u5165\u6587\u6863\u6765\u6E90\uFF08\u672C\u5730\u8DEF\u5F84 \u6216 \u5728\u7EBF\u6587\u6863\u94FE\u63A5\uFF09:",validate:a(E=>E.trim().length>0||"\u4E0D\u80FD\u4E3A\u7A7A","validate")});if((await V({source:h.trim(),collectionName:p,configDir:o})).success&&(console.log(" (kb_collections \u4E0D\u53D8\uFF0C\u6587\u6863\u5DF2\u5199\u5165\u65E2\u6709\u96C6\u5408\u76EE\u5F55)"),u=!0),!await k({message:"\u662F\u5426\u7EE7\u7EED\u6DFB\u52A0\u66F4\u591A\u6587\u6863\uFF1F",default:!1}))break}}if(u){console.log(`
|
|
38
|
+
\u91CD\u65B0\u6821\u9A8C...
|
|
39
|
+
`);let l=await $({configPath:t,workflowId:r});return M(l),l}return e}a(Pe,"promptKbSetup");function X(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":e.file.includes("profile")||e.file.includes("roles")?"\u89D2\u8272":"\u9879\u76EE"}a(X,"targetLabel");function v(e){return e.type==="env"?`.env \u2192 ${e.envKey}`:e.type==="json"?`${e.file} \u2192 ${e.jsonPath.join(".")}`:e.type==="yamlAll"?e.targets.map(o=>`${o.file} \u2192 ${o.yamlPath.join(".")}`).join(", "):e.type==="textFile"?`${e.file}\uFF08\u6574\u6587\u4EF6\u5185\u5BB9\uFF09`:`${e.file} \u2192 ${e.yamlPath.join(".")}`}a(v,"writeTargetDesc");function je(e){if(e.surface?.envJsonSpec){if(typeof e.value!="string"||!e.value.trim())return"\u672A\u8BBE\u7F6E";try{let o=JSON.parse(e.value);if(!o||typeof o!="object"||Array.isArray(o))return"\u914D\u7F6E\u683C\u5F0F\u65E0\u6548";let t=Object.keys(o);return t.length>0?`\u5DF2\u914D ${t.length} \u9879: ${t.join(", ")}`:"\u672A\u8BBE\u7F6E"}catch{return"\u914D\u7F6E\u683C\u5F0F\u65E0\u6548"}}return e.sensitive?"***":e.value===void 0||e.value===null?"\u672A\u8BBE\u7F6E":Array.isArray(e.value)?e.value.join(","):String(e.value)}a(je,"formatValue");function xe(e){let o=JSON.parse(JSON.stringify(e));for(let t of o.modules){let r=t.workflows?t.workflows.flatMap(n=>n.items):t.items;for(let n of r){if(n.value===void 0)continue;if(n.sensitive){n.value="***";continue}let s=n.surface?.envJsonSpec;if(!(!s||!s.valueFields.some(i=>/secret|token|password|api_key/i.test(i)))){if(typeof n.value!="string"){n.value="***";continue}try{let i=JSON.parse(n.value);for(let c of Object.values(i))if(!(!c||typeof c!="object"||Array.isArray(c)))for(let u of Object.keys(c))/secret|token|password|api_key/i.test(u)&&(c[u]="***");n.value=JSON.stringify(i)}catch{n.value="***"}}}}return o}a(xe,"redactConfigResultForJson");function Ee(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 o=e.value.filter(t=>typeof t=="string");if(o.length>0)return o.join(",")}}a(Ee,"formatInputDefault");function C(e){let o=e.key,t=o.lastIndexOf("."),r=t>=0?o.slice(t+1):o;return r==="base_id"||r==="baseId"?"baseId":r==="table_id"||r==="tableId"?"tableId":r}a(C,"getSemanticKey");function _e(e,o){for(let t of e.modules){let r=t.workflows?t.workflows.flatMap(n=>n.items):t.items;for(let n of r){if(n.status==="error"||n.sensitive||n.value===void 0||n.value===null)continue;let s=C(n);if(o.has(s)||!x(n))continue;let i=Se(n.value);i&&Z(n,i)&&o.set(s,i)}}}a(_e,"seedSessionDefaults");function Me(e,o){if(!x(e))return;let t=o.get(C(e));if(!(!t||!Z(e,t)))return t}a(Me,"getSuggestedDefault");function x(e){return C(e)==="baseId"}a(x,"canOfferDefaultFor");function Z(e,o){let t=o.trim();return t?C(e)==="baseId"?t.length>=8:!0:!1}a(Z,"isPlausibleDefault");function Se(e){if(typeof e=="string")return e;if(typeof e=="boolean")return e?"true":"false";if(Array.isArray(e)){let o=e.filter(t=>typeof t=="string");if(o.length>0)return o.join(",")}}a(Se,"stringifyDefaultValue");function Oe(e,o,t,r){let n=t.trim();if(!r&&n.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","qwenwork","llm_only"]);return s.has(n)||`\u8BF7\u8F93\u5165\u6709\u6548 engine: ${[...s].join(", ")}`}if(o?.valueType==="boolean"){let s=n.toLowerCase();return s==="true"||s==="false"?!0:"\u8BF7\u8F93\u5165 true \u6216 false"}return!0}a(Oe,"validatePromptValue");async function ee(e){let{resolveConfigPath:o}=await import("aitable-workflow-core"),t=await o(e);return w.dirname(t)}a(ee,"resolveConfigDir");export{Ve as a,qe as b,G as c,ue as d,R as e,fe as f,ge as g,z as h,J as i,$e as j,Ce as k,Ue as l,V as m,Ae as n,Re as o,xe as p,C as q,x as r};
|