@vibe-lark/larkpal 0.1.87 → 0.1.89
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/dist/{account-id-BM1T6029-BzQ_cMoi.mjs → account-id-BM1T6029-BvcZ99G0.mjs} +1 -1
- package/dist/{activation-context--5yu1dPF-XV0Y0pTy.mjs → activation-context--5yu1dPF-DHM2x52-.mjs} +1 -1
- package/dist/{anthropic-CFZUCb1w.mjs → anthropic-gnoZ_QRy.mjs} +1 -1
- package/dist/{assistant-visible-text-DuFWokAt-BOJV_zwc.mjs → assistant-visible-text-DuFWokAt-GbRm46te.mjs} +1 -1
- package/dist/{azure-openai-responses-BEuiMaF-.mjs → azure-openai-responses-DbHzq7dt.mjs} +1 -1
- package/dist/{boundary-file-read-BSd9MXPy-gnNVhPKT.mjs → boundary-file-read-BSd9MXPy-Tpd4W7aA.mjs} +1 -1
- package/dist/{browser-lifecycle-cleanup-BdNsMhMD-BM97qA_M.mjs → browser-lifecycle-cleanup-BdNsMhMD-Bjf5GI3L.mjs} +1 -1
- package/dist/{bundled-compat-BpaDaAAu-DJtrIX6i.mjs → bundled-compat-BpaDaAAu-DElY7pj-.mjs} +1 -1
- package/dist/{bundled-dir-U738ay4K-BxbzrJOo.mjs → bundled-dir-U738ay4K-DxHVp4u1.mjs} +1 -1
- package/dist/{call-DimWbpgJ-B4pv55RH.mjs → call-DimWbpgJ-BnglLl-j.mjs} +1 -1
- package/dist/channel-bootstrap.runtime-BVclcGv1-BH-3XviM.mjs +1 -0
- package/dist/{channel-bootstrap.runtime-Cwcr38m2-Dt6QlQkX.mjs → channel-bootstrap.runtime-Cwcr38m2-K7QN0kxA.mjs} +1 -1
- package/dist/cli.mjs +2 -2
- package/dist/{command-format-LSnUCVVF-Dn4h9IOh.mjs → command-format-LSnUCVVF-Ck0yuZRk.mjs} +1 -1
- package/dist/config-Bim2pi8a-xbw-saVR.mjs +1 -0
- package/dist/config-CtxZK_ZE.mjs +2 -0
- package/dist/{delivery-context.shared-j5hC5qb1-BSLQG47q.mjs → delivery-context.shared-j5hC5qb1-DIY5v1oC.mjs} +1 -1
- package/dist/{diagnostic-ClMwNnUA-BMKvPQJT.mjs → diagnostic-ClMwNnUA-BLmizo4w.mjs} +1 -1
- package/dist/{dist-coestTs9.mjs → dist-BUE_cxIa.mjs} +1 -1
- package/dist/{dist-J5UB83Ws.mjs → dist-Drhg3yZT.mjs} +1 -1
- package/dist/{facade-loader-DFzIYYt_-4bzFvy-b.mjs → facade-loader-DFzIYYt_--SN2-DQM.mjs} +1 -1
- package/dist/{google-ABo-1guT.mjs → google-BdoIr_xq.mjs} +1 -1
- package/dist/{google-gemini-cli-CGlN1zUA.mjs → google-gemini-cli-H9jO3Mvn.mjs} +1 -1
- package/dist/{google-shared-C60sNhwd.mjs → google-shared-DDK4NMAJ.mjs} +2 -2
- package/dist/{google-vertex-De0nAItu.mjs → google-vertex-B_OTGKnl.mjs} +1 -1
- package/dist/{ids-BPsM98Uu-CJBJAeVC.mjs → ids-BPsM98Uu-DGJB5aAM.mjs} +1 -1
- package/dist/{image-2w3cApg7-CrpUMCvm.mjs → image-2w3cApg7-B_-Jsk_m.mjs} +1 -1
- package/dist/interactive-init-CzbT0dDB.mjs +8 -0
- package/dist/{io-CH2g3vsv-JJtUIa_U.mjs → io-CH2g3vsv-BevbMdi6.mjs} +1 -1
- package/dist/{jiti-loader-cache-Bat69wam-DNIteTtO.mjs → jiti-loader-cache-Bat69wam-Cq2EONsH.mjs} +1 -1
- package/dist/{live-smoke-DpURW676.mjs → live-smoke-Be7Fzqj0.mjs} +18 -18
- package/dist/load-context-mb7uvLSn-C6DFwEWN.mjs +1 -0
- package/dist/{loader-708jrx4Y-BbJRXNlQ.mjs → loader-708jrx4Y-eFvaGnCt.mjs} +1 -1
- package/dist/main.mjs +86 -86
- package/dist/{manifest-registry-_hxKCS2K-OL8KK_o4.mjs → manifest-registry-_hxKCS2K-ezh_x2Cu.mjs} +1 -1
- package/dist/{message-channel-Bk_YHfQg-n2Hw2Y0L.mjs → message-channel-Bk_YHfQg-BGBJVvRK.mjs} +1 -1
- package/dist/{message-channel-core-DTA--Gjh-CIh10vfo.mjs → message-channel-core-DTA--Gjh-DeWCDZu1.mjs} +1 -1
- package/dist/message.config.runtime-K-k4XOyq-JWPtRES_.mjs +1 -0
- package/dist/message.gateway.runtime-DqHOHRTQ-BeYUdgSg.mjs +1 -0
- package/dist/{mistral-DyL3Zo1b.mjs → mistral-zWGv0zHS.mjs} +1 -1
- package/dist/{model-auth-env-oyg2Hexc-DJbt9J3o.mjs → model-auth-env-oyg2Hexc-B5WQGZqf.mjs} +1 -1
- package/dist/{models-config-BmpSQJQF-BL6S5qAo.mjs → models-config-BmpSQJQF-Bwnt6IgA.mjs} +1 -1
- package/dist/models-config.runtime-DkQfNKqN.mjs +1 -0
- package/dist/{multipart-parser-B9dwXBqu.mjs → multipart-parser-D_0C82Yv.mjs} +1 -1
- package/dist/{oauth-25y2wc7K.mjs → oauth-TYJ7I-Cs.mjs} +1 -1
- package/dist/{openai-codex-responses-BbyAPsP1.mjs → openai-codex-responses-CJA9360v.mjs} +1 -1
- package/dist/{openai-completions-Bu5qvQzb.mjs → openai-completions-BfXo7VuS.mjs} +1 -1
- package/dist/{openai-responses-pIdwQBc4.mjs → openai-responses-BH-GaE-g.mjs} +1 -1
- package/dist/{openai-responses-shared-DqW1JSux.mjs → openai-responses-shared-DHm7pNQU.mjs} +1 -1
- package/dist/{paths-D6msg0S1-BO4XgM1u.mjs → paths-D6msg0S1-C3GtW9t2.mjs} +1 -1
- package/dist/{paths-D92DjaZ--DdtJ-zYp.mjs → paths-D92DjaZ--CKAvIWoZ.mjs} +1 -1
- package/dist/{pi-model-discovery-Bd0TWzo8-DvSM0eWu.mjs → pi-model-discovery-Bd0TWzo8-DcalEcic.mjs} +1 -1
- package/dist/{pi-model-discovery-runtime-PrjWOmsV.mjs → pi-model-discovery-runtime-DnW_CaR2.mjs} +1 -1
- package/dist/{pi-tools.before-tool-call.runtime-Bn7uqKie-WPxU5oNX.mjs → pi-tools.before-tool-call.runtime-Bn7uqKie-CitpH_Lv.mjs} +1 -1
- package/dist/{plugin-auto-enable-DdH3n9V8-Dr_bUXkG.mjs → plugin-auto-enable-DdH3n9V8-Dd9H4luQ.mjs} +1 -1
- package/dist/{provider-discovery.runtime-DY0VWQ81.mjs → provider-discovery.runtime-CVft4TR0.mjs} +1 -1
- package/dist/{provider-model-compat-CFqcq0it-BUwZENrz.mjs → provider-model-compat-CFqcq0it-W6mE-T-j.mjs} +1 -1
- package/dist/{provider-runtime-C8rljsNs-BDvu6FW3.mjs → provider-runtime-C8rljsNs-BGpzSHUk.mjs} +1 -1
- package/dist/{provider-runtime-CT50mNIX-DImw7ZZu.mjs → provider-runtime-CT50mNIX-CC3WVtfL.mjs} +1 -1
- package/dist/{provider-stream-COLujAAo-Dpq1DSIk.mjs → provider-stream-COLujAAo-BtNcIBP4.mjs} +1 -1
- package/dist/{providers.runtime-Ba7tOlq7-B4t6ywCr.mjs → providers.runtime-Ba7tOlq7-CX4GoaJL.mjs} +1 -1
- package/dist/{public-surface-loader-BVl0NQAE-TfJ3izj1.mjs → public-surface-loader-BVl0NQAE-CTXfgfHE.mjs} +1 -1
- package/dist/{resolve-C33B7eeu-DZM_z6Wr.mjs → resolve-C33B7eeu-DhMVJCKm.mjs} +1 -1
- package/dist/{runtime-Cym-fqI8-1GOIuRRQ.mjs → runtime-Cym-fqI8-BuiEWXF-.mjs} +1 -1
- package/dist/{runtime-snapshot-C54O1-gI-DxusscPf.mjs → runtime-snapshot-C54O1-gI-0r2omPvJ.mjs} +1 -1
- package/dist/{runtime-web-tools-fallback.runtime-Ca-qn1mj-BsYE2gOd.mjs → runtime-web-tools-fallback.runtime-Ca-qn1mj-C5hD_aI-.mjs} +1 -1
- package/dist/runtime-web-tools-manifest.runtime-BgxQTjmq-BTi3YQxK.mjs +1 -0
- package/dist/runtime-web-tools-public-artifacts.runtime-D9qcoWIX-DNaDY4zG.mjs +1 -0
- package/dist/{session-archive.runtime-B52_5vs4-cU2tYbBz.mjs → session-archive.runtime-B52_5vs4-CUKEEsvr.mjs} +1 -1
- package/dist/{session-key-Cn2QoOyX-QZeYmbxd.mjs → session-key-Cn2QoOyX-BIh-9Y77.mjs} +1 -1
- package/dist/{session-transcript-files.fs-DEeFXruQ-CXIAFSsr.mjs → session-transcript-files.fs-DEeFXruQ-Dh_OJado.mjs} +1 -1
- package/dist/{src-CCDx_C-U.mjs → src-C9CsRdwI.mjs} +1 -1
- package/dist/{subagent-announce-L5WsQatW--rMn240x.mjs → subagent-announce-L5WsQatW-DyZFJvpK.mjs} +1 -1
- package/dist/{subagent-announce.registry.runtime-DiqZyeTs-DNfNHsls.mjs → subagent-announce.registry.runtime-DiqZyeTs-WCL-itg8.mjs} +1 -1
- package/dist/{subagent-registry-steer-runtime-DFgZFC0j-XYS1_qwl.mjs → subagent-registry-steer-runtime-DFgZFC0j-BlxUMPcM.mjs} +1 -1
- package/dist/{subagent-system-prompt-C1qnN--K-CsU4f97T.mjs → subagent-system-prompt-C1qnN--K-bhNPmt0u.mjs} +1 -1
- package/dist/{target-parsing-loaded-DKkb6jJY-B830OA1a.mjs → target-parsing-loaded-DKkb6jJY-Bx7-SykE.mjs} +1 -1
- package/dist/{task-registry-delivery-runtime-Dd1CUkZF-B2Hj2k8C.mjs → task-registry-delivery-runtime-Dd1CUkZF-xNioBd-k.mjs} +2 -2
- package/dist/task-registry-delivery-runtime-ragbeVx5-BXczubuw.mjs +1 -0
- package/dist/{transcript-E_-ISOkD-VTwb782D.mjs → transcript-E_-ISOkD-STFNoSGx.mjs} +2 -2
- package/dist/transcript.runtime-BqhvZZdl-BLeKq_RO.mjs +1 -0
- package/dist/{web-provider-public-artifacts-BlpRwIUS-DbVhDOrY.mjs → web-provider-public-artifacts-BlpRwIUS-CjacPoGF.mjs} +1 -1
- package/dist/{web-search-providers.runtime--0aUtC3b-Bjh4Bmrz.mjs → web-search-providers.runtime--0aUtC3b-EcJfEKJo.mjs} +1 -1
- package/package.json +2 -1
- package/dist/channel-bootstrap.runtime-BVclcGv1-CEZ0-JP9.mjs +0 -1
- package/dist/config-Bim2pi8a-03N-28sw.mjs +0 -1
- package/dist/interactive-init-C5MFL5MW.mjs +0 -8
- package/dist/load-context-mb7uvLSn-3xYwSnOZ.mjs +0 -1
- package/dist/message.config.runtime-K-k4XOyq-F_h0Cgkl.mjs +0 -1
- package/dist/message.gateway.runtime-DqHOHRTQ-ge4c5p4s.mjs +0 -1
- package/dist/models-config.runtime-SOhLEw-f.mjs +0 -1
- package/dist/runtime-web-tools-manifest.runtime-BgxQTjmq-P6MKP9gQ.mjs +0 -1
- package/dist/runtime-web-tools-public-artifacts.runtime-D9qcoWIX-5VoyjouO.mjs +0 -1
- package/dist/task-registry-delivery-runtime-ragbeVx5-Bdvo2Q5u.mjs +0 -1
- package/dist/transcript.runtime-BqhvZZdl-B4E0TiX5.mjs +0 -1
- /package/dist/{build-Bkj0hOS2.mjs → build-DSSm_dj2.mjs} +0 -0
- /package/dist/{env-api-keys-Cuz5irWW.mjs → env-api-keys-qlOAYu08.mjs} +0 -0
- /package/dist/{event-stream-B7Ei41Bu.mjs → event-stream-JP51qlT7.mjs} +0 -0
- /package/dist/{from-Ba69_5cR.mjs → from-BmSefSMV.mjs} +0 -0
- /package/dist/{gateway-method-policy-C7rf0SeV-CTJcMQCE.mjs → gateway-method-policy-C7rf0SeV-DXbYlbpG.mjs} +0 -0
- /package/dist/{github-copilot-headers-BfhryVuU.mjs → github-copilot-headers-BQ2T2OVX.mjs} +0 -0
- /package/dist/{hash-Dw-N8Y9l.mjs → hash-DtceYjXb.mjs} +0 -0
- /package/dist/{headers-Bpsp70B9.mjs → headers-KsIWdB9S.mjs} +0 -0
- /package/dist/{home-dir-C44RaPME-B5iLWwCq.mjs → home-dir-C44RaPME-BqOMy1pu.mjs} +0 -0
- /package/dist/{json-file-BQRNuxmK-hRjIgOXI.mjs → json-file-BQRNuxmK-DQHpAzI5.mjs} +0 -0
- /package/dist/{json-parse-BESd8UAM.mjs → json-parse-BJPqxncf.mjs} +0 -0
- /package/dist/{jws-YaZ38F_i.mjs → jws-EKtyH_je.mjs} +0 -0
- /package/dist/{lark-cli-provider-BLMxH6CN.mjs → lark-cli-provider-DrGmcwiB.mjs} +0 -0
- /package/dist/{openai-C-rgGb7X.mjs → openai-D-MIrxrj.mjs} +0 -0
- /package/dist/{process-scoped-map-B2cWkYET-Co-i-MXA.mjs → process-scoped-map-B2cWkYET-Bc7DvrUZ.mjs} +0 -0
- /package/dist/{runtime-channel-state-CohMybAh-BBzhl07Q.mjs → runtime-channel-state-CohMybAh-DfCjeyJq.mjs} +0 -0
- /package/dist/{runtime-state-IBOIXKOx-Cw1GA1td.mjs → runtime-state-IBOIXKOx-Cr97WVOr.mjs} +0 -0
- /package/dist/{src-DACmA9V6.mjs → src-5lm1WxWm.mjs} +0 -0
- /package/dist/{thinking-Bh-7MqXz-uApNUe6g.mjs → thinking-Bh-7MqXz-BB7ZJReA.mjs} +0 -0
- /package/dist/{transform-messages-BTA3xbAI.mjs → transform-messages-B6RF0Czv.mjs} +0 -0
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import{t as e}from"./lark-logger-xpMKNNtY.mjs";import{n as t,t as n}from"./config-CtxZK_ZE.mjs";import{existsSync as r,mkdirSync as i,readFileSync as a,writeFileSync as o}from"node:fs";import{join as s}from"node:path";import{homedir as c}from"node:os";import{execSync as l,spawn as u}from"node:child_process";import{createInterface as d}from"node:readline";import*as f from"@larksuiteoapi/node-sdk";import p from"qrcode-terminal";async function m(e){let t=await(e.registerApp??h)({source:e.source??`larkpal`,signal:e.signal,onQRCodeReady:e.onQRCodeReady,onStatusChange:e.onStatusChange});if(!t.client_id||!t.client_secret)throw Error(`飞书应用创建完成但未返回 App ID 或 App Secret`);return await e.saveCredentials({appId:t.client_id,appSecret:t.client_secret}),{appId:t.client_id,appSecret:t.client_secret,creatorOpenId:t.user_info?.open_id,tenantBrand:t.user_info?.tenant_brand}}async function h(e){return f.registerApp(e)}function g(e){return[` 请扫码创建飞书智能体应用,或打开下面的链接:`,``,x(e.url,e.createQRCode??b),` ${e.url}`,` 链接有效期 ${e.expireIn} 秒。`].join(`
|
|
2
|
+
`)}function _(e){switch(e){case`codex-app-server`:return[`已选择 Codex app-server 作为 agent runtime。`,`启动前请确保 Codex CLI 可用:codex`,`启动配置:LARKPAL_RUNTIME=codex-app-server`].join(`
|
|
3
|
+
`);case`larkpal-agent`:return[`已选择 larkpal-agent 作为 agent runtime。`,`启动前请配置 larkpal-agent 所需的 LLM 和 scenario provider 环境变量。`,`启动配置:LARKPAL_RUNTIME=larkpal-agent`].join(`
|
|
4
|
+
`);case`claude-code`:return[`已选择 Claude Code 作为 agent runtime。`,`启动前请确保 Claude Code CLI 可用:claude`,`启动配置:LARKPAL_RUNTIME=claude-code`].join(`
|
|
5
|
+
`)}}function v(e){return[`Agent runtime 选择`,``,` [1] Claude Code (claude-code)${e===`claude-code`?`(当前)`:``}`,` [2] Codex app-server (codex-app-server)${e===`codex-app-server`?`(当前)`:``}`,` [3] larkpal-agent${e===`larkpal-agent`?`(当前)`:``}`].join(`
|
|
6
|
+
`)}function y(e,t){let n=e.trim().toLowerCase();return n?n===`1`||n===`claude`||n===`claude-code`?`claude-code`:n===`2`||n===`codex`||n===`codex-app-server`?`codex-app-server`:n===`3`||n===`larkpal-agent`?`larkpal-agent`:t:t}function b(e){let t=``;return p.setErrorLevel(`L`),p.generate(e,{small:!0},e=>{t=e}),t.trimEnd()}function x(e,t){try{return t(e).trimEnd()||` [二维码渲染失败,请使用下方链接]`}catch{return` [二维码渲染失败,请使用下方链接]`}}function S(e){let t=e.detectCli(`lark-cli`),n=C(e.runtimeName),r=n?e.detectCli(n):{installed:!0},i=[];return n&&!r.installed&&i.push(n===`codex`?`OpenAI Codex CLI is not installed. Feishu app credentials can still be configured now, but service startup with LARKPAL_RUNTIME=codex-app-server will require codex later.`:`Claude Code is not installed. Feishu app credentials can still be configured now, but service startup with the default runtime will require Claude Code later.`),t.installed||i.push(`lark-cli is not installed. Basic Feishu bot chat can be configured with app credentials, but execution-layer tools for documents, calendars, mail, tasks, and personal data will require lark-cli later.`),{canConfigureFeishuCredentials:!0,larkCli:{...t,ready:t.installed,requiredForBasicChat:!1},runtime:{...r,ready:r.installed,name:e.runtimeName,cliName:n??e.runtimeName},warnings:i}}function C(e){if(e===`codex-app-server`)return`codex`;if(e!==`larkpal-agent`)return`claude`}const w=e(`init`),T=`\x1B[36m`,E=`\x1B[32m`,D=`\x1B[33m`,O=`\x1B[31m`,k=`\x1B[1m`,A=`\x1B[2m`,j=`\x1B[0m`,M=s(c(),`.larkpal`),N=s(M,`credentials.json`);function P(e,t){return new Promise(n=>{e.question(t,e=>n(e.trim()))})}function F(e){try{return!!l(`which ${e}`,{encoding:`utf-8`,timeout:5e3}).trim()}catch{return!1}}function I(){try{let e=l(`lark-cli config show`,{encoding:`utf-8`,timeout:1e4,stdio:[`pipe`,`pipe`,`pipe`]}).match(/\{[\s\S]*\}/);if(e)return JSON.parse(e[0]).appId||null}catch{}return null}function L(e,t){try{return r(M)||(i(M,{recursive:!0}),w.info(`创建 LarkPal 配置目录`,{path:M})),o(N,JSON.stringify({app_id:e,app_secret:t},null,2)+`
|
|
7
|
+
`,{encoding:`utf-8`,mode:384}),w.info(`凭证已写入`,{path:N,appId:e}),!0}catch(e){let t=e instanceof Error?e.message:String(e);return w.error(`写入凭证文件失败`,{path:N,error:t}),!1}}async function R(e){if(!L(e.appId,e.appSecret))throw Error(`凭证保存失败`)}function z(){if(!r(N))return null;try{let e=a(N,`utf-8`),t=JSON.parse(e);if(t.app_id&&t.app_secret)return{appId:t.app_id,appSecret:t.app_secret}}catch{}return null}function B(e){console.log(`\n${k}🔍 检查前置依赖${j}\n`);let t=S({runtimeName:e,detectCli:e=>({installed:F(e)})});t.runtime.ready?console.log(` ${E}✅ ${t.runtime.cliName} 已安装${j}`):console.log(` ${D}⚠️ ${t.runtime.cliName} 未安装${j}`),t.larkCli.ready?console.log(` ${E}✅ lark-cli 已安装${j}`):console.log(` ${D}⚠️ lark-cli 未安装(基础飞书连接不阻塞)${j}`);for(let e of t.warnings)console.log(` ${A}${e}${j}`);console.log()}async function V(e){let r=n();console.log(`\n${k}🤖 Agent runtime 配置${j}\n`),console.log(v(r)),console.log();let i=y(await P(e,` 请选择 [1/2/3](默认当前): `),r);return process.env.LARKPAL_RUNTIME=i,t(i),console.log(`\n${_(i)}\n`),w.info(`用户选择 agent runtime`,{runtimeName:i}),i}function H(){return new Promise(e=>{console.log(`\n${A}正在启动 lark-cli config init ...${j}\n`),w.info(`启动子进程: lark-cli config init`);let t=``,n=u(`lark-cli`,[`config`,`init`],{stdio:[`inherit`,`pipe`,`pipe`]});n.stdout?.on(`data`,e=>{let n=e.toString();t+=n,process.stdout.write(n)}),n.stderr?.on(`data`,e=>{let n=e.toString();t+=n,process.stderr.write(n)}),n.on(`error`,t=>{w.error(`lark-cli config init 启动失败`,{error:t.message}),console.log(`\n${O}启动 lark-cli config init 失败: ${t.message}${j}`),e(null)}),n.on(`close`,n=>{if(w.info(`lark-cli config init 执行完毕`,{exitCode:n,output:t.substring(0,500)}),n===0){let n=t.match(/App\s*ID:\s*(\S+)/i)?.[1]||null;n||=I(),n?(w.info(`lark-cli config init 成功`,{appId:n}),console.log(`\n${E}✅ 飞书应用创建成功${j} ${A}(App ID: ${n})${j}`)):console.log(`\n${E}✅ lark-cli config init 完成${j}`),e(n)}else console.log(`\n${D}⚠️ lark-cli config init 退出码: ${n}${j}`),e(null)})})}async function U(e,t){console.log(`\n${k}🔑 输入 App Secret${j}\n`),console.log(` ${A}lark-cli 已完成应用配置,但 LarkPal 还需要 App Secret 来启动服务。${j}`),console.log(` ${A}请在飞书开放平台的应用管理页面(凭证与基础信息)中复制 App Secret:${j}\n`),console.log(` ${T}https://open.feishu.cn/app/${t}${j}\n`);let n=await P(e,` App Secret: `);return n?L(t,n)?(console.log(`\n${E}✅ 凭证已保存${j} ${A}(${N})${j}`),!0):(console.log(`\n${O}凭证保存失败${j}`),!1):(console.log(`\n${O}App Secret 不能为空${j}`),!1)}async function W(e){console.log(`\n${k}📝 手动输入飞书应用凭证${j}\n`),console.log(` ${A}你可以在飞书开放平台 (https://open.feishu.cn) 的应用管理页面找到这些信息。${j}\n`);let t=await P(e,` App ID: `);if(!t)return console.log(`\n${O}App ID 不能为空${j}`),!1;let n=await P(e,` App Secret: `);return n?L(t,n)?(console.log(`\n${E}✅ 凭证已保存${j} ${A}(${N})${j}`),!0):(console.log(`\n${O}凭证保存失败${j}`),!1):(console.log(`\n${O}App Secret 不能为空${j}`),!1)}async function G(){console.log(`\n${k}📱 扫码创建飞书智能体应用${j}\n`),console.log(` LarkPal 会通过飞书官方一键创建应用能力获取 App ID 和 App Secret。`),console.log(` ${A}这一步只配置应用凭据;个人日历、文档、邮件等能力后续通过 lark-cli auth login 授权。${j}\n`);try{let e=await m({saveCredentials:R,onQRCodeReady:({url:e,expireIn:t})=>{console.log(g({url:e,expireIn:t})),console.log()},onStatusChange:({status:e})=>{e===`polling`?console.log(` ${A}等待飞书确认中...${j}`):e===`slow_down`?console.log(` ${A}飞书要求降低轮询频率,继续等待...${j}`):e===`domain_switched`&&console.log(` ${A}已根据租户切换认证域名,继续等待...${j}`)},source:`larkpal-init`});return console.log(`\n${E}✅ 飞书应用创建并保存成功${j} ${A}(App ID: ${e.appId})${j}`),!0}catch(e){return console.log(`\n${O}扫码创建飞书应用失败: ${e instanceof Error?e.message:String(e)}${j}`),!1}}async function K(e){if(process.env.LARK_APP_ID&&process.env.LARK_APP_SECRET)return console.log(`${E}✅ 飞书应用凭证已通过环境变量配置${j}`),w.info(`凭证已通过环境变量配置`),!0;let t=z();if(t)return console.log(`${E}✅ 飞书应用凭证已配置${j} ${A}(App ID: ${t.appId})${j}`),w.info(`LarkPal 凭证文件已存在`,{appId:t.appId}),!0;let n=I();if(n)return console.log(`${E}✅ 飞书应用已配置${j} ${A}(App ID: ${n})${j}`),console.log(`\n ${D}但 LarkPal 还需要 App Secret 才能启动。${j}`),U(e,n);console.log(`${k}📋 飞书应用配置${j}\n`),console.log(` LarkPal 需要飞书应用凭据才能进入飞书会话。推荐使用飞书官方扫码创建应用能力:
|
|
8
|
+
`),console.log(` ${A}[1] 扫码创建飞书智能体应用(推荐)${j}`),console.log(` ${A}[2] 手动输入 App ID 和 App Secret${j}`),console.log(` ${A}[3] 使用 lark-cli config init(兼容旧流程)${j}\n`);let r=await P(e,` 请选择 [1/2/3](默认 1): `),i=r===`2`?2:r===`3`?3:1;if(w.info(`用户选择凭证配置方式`,{option:i}),i===1)return await G()?!0:(console.log(`\n ${D}扫码创建未完成,是否手动输入凭证?${j}`),(await P(e,` 手动输入? [y/N]: `)).toLowerCase()===`y`?W(e):!1);if(i===3){let t=await H();return t?U(e,t):(console.log(`\n ${D}lark-cli 配置未成功,是否手动输入凭证?${j}`),(await P(e,` 手动输入? [y/N]: `)).toLowerCase()===`y`?W(e):!1)}return W(e)}async function q(){console.log(`\n${k}${T}╔══════════════════════════════════════╗${j}`),console.log(`${k}${T}║ LarkPal 初始化向导 ║${j}`),console.log(`${k}${T}╚══════════════════════════════════════╝${j}\n`),w.info(`开始交互式初始化流程`);let e=d({input:process.stdin,output:process.stdout}),t,n;try{n=await V(e),B(n),t=await K(e)}finally{e.close()}return t?(console.log(`\n${k}${E}🎉 初始化完成!${j}\n`),console.log(` ${A}下一步:${j}`),console.log(` ${_(n)}`),console.log(` 运行 ${T}larkpal${j} 启动服务\n`),w.info(`交互式初始化流程完成`),0):(console.log(`\n${O}凭证配置未完成。你可以稍后运行 ${T}larkpal init${O} 重新配置。${j}\n`),1)}export{q as runInteractiveInit};
|