"use strict";var v=Object.defineProperty;var B=Object.getOwnPropertyDescriptor;var V=Object.getOwnPropertyNames;var U=Object.prototype.hasOwnProperty;var H=(i,s)=>{for(var t in s)v(i,t,{get:s[t],enumerable:!0})},L=(i,s,t,e)=>{if(s&&typeof s=="object"||typeof s=="function")for(let n of V(s))!U.call(i,n)&&n!==t&&v(i,n,{get:()=>s[n],enumerable:!(e=B(s,n))||e.enumerable});return i};var W=i=>L(v({},"__esModule",{value:!0}),i);var et={};H(et,{default:()=>m});module.exports=W(et);var a=require("obsidian"),I=require("crypto"),M=require("child_process"),N=require("fs"),j=require("util"),z=(0,j.promisify)(M.execFile),P={dwsPath:"dws",targetFolder:"DingTalk Minutes",scope:"all",initialSyncRangeDays:30,initialSyncStart:null,includeTranscript:!0,syncOnStartup:!1,syncEveryMinutes:0,lastSyncAt:0,hashes:{},files:{}},b=class{constructor(s){this.binary=s}async list(s,t){let e=[],n=new Set,r;do{let o=["minutes","list",s,"--max","30","--format","json"];t&&o.push("--start",t),r&&o.push("--cursor",r);let d=await this.run(o);if(e.push(...this.items(d)),r=this.nextToken(d),r&&n.has(r)){console.warn("dws returned a repeated minutes list cursor; stopping pagination safely.");break}r&&n.add(r)}while(r);return e}async get(s,t){return this.run(["minutes","get",s,"--id",t,"--format","json"])}async transcription(s){let t=[],e=new Set,n;do{let r=["minutes","get","transcription","--id",s,"--format","json"];n&&r.push("--next-token",n);let o=await this.run(r);if(t.push(o),n=this.nextToken(o),n&&e.has(n)){console.warn(`dws returned a repeated transcription token for ${s}; stopping pagination safely.`);break}n&&e.add(n)}while(n);return t}async run(s){try{let{stdout:t}=await z(this.binary,s,{maxBuffer:20971520});return JSON.parse(t)}catch(t){if(u(t)&&t.code==="ENOENT")throw new Error("\u627E\u4E0D\u5230 dws\u3002\u8BF7\u5728\u63D2\u4EF6\u8BBE\u7F6E\u7684\u201Cdws \u8DEF\u5F84\u201D\u4E2D\u586B\u5199\u5176\u7EDD\u5BF9\u8DEF\u5F84\uFF0C\u4F8B\u5982 ~/.local/bin/dws\u3002");let e=t instanceof Error?t.message:String(t);throw new Error(`dws \u8C03\u7528\u5931\u8D25\uFF08${s.slice(0,4).join(" ")}\uFF09\uFF1A${e}`)}}items(s){let t=w(s);if(Array.isArray(t))return t.filter(u);if(!u(t))return[];for(let e of["itemList","items","list","records","data","result"]){let n=t[e];if(Array.isArray(n))return n.filter(u)}return[]}nextToken(s){let t=w(s);if(u(t))for(let e of["nextToken","next_token","cursor"]){let n=t[e];if(typeof n=="string"&&n)return n}}},m=class extends a.Plugin{constructor(){super(...arguments);this.intervalId=null}async onload(){await this.loadSettings(),this.addSettingTab(new T(this.app,this)),this.addCommand({id:"sync-dingtalk-minutes",name:"Sync DingTalk AI Minutes now",callback:()=>this.sync()}),this.addRibbonIcon("mic","Sync DingTalk AI Minutes",()=>void this.sync()),this.configureSchedule(),this.settings.syncOnStartup&&window.setTimeout(()=>void this.sync(),2e3)}onunload(){this.intervalId!==null&&window.clearInterval(this.intervalId)}async loadSettings(){this.settings=Object.assign({},P,await this.loadData())}async saveSettings(){await this.saveData(this.settings),this.configureSchedule()}async sync(){let t=new a.Notice("\u6B63\u5728\u540C\u6B65\u9489\u9489 AI \u542C\u8BB0\u2026",1e4);try{let e=new b(G(this.settings.dwsPath));this.settings.initialSyncStart||(this.settings.initialSyncStart=new Date(Date.now()-this.settings.initialSyncRangeDays*864e5).toISOString());let n=await e.list(this.settings.scope,this.settings.initialSyncStart),r=0,o=0,d=0,p=0;await this.ensureFolder(this.settings.targetFolder);for(let h of n){let c=q(h);if(!c)continue;let[$,F,J,_]=await Promise.all([e.get("info",c),e.get("summary",c),e.get("keywords",c),e.get("todos",c)]),D=[],O="";if(this.settings.includeTranscript)try{D=await e.transcription(c)}catch(R){p++,O="\u9489\u9489\u672A\u80FD\u8FD4\u56DE\u8BE5\u6761\u542C\u8BB0\u7684\u9010\u5B57\u7A3F\uFF1B\u6458\u8981\u3001\u5173\u952E\u8BCD\u548C\u5F85\u529E\u5DF2\u6210\u529F\u540C\u6B65\u3002",console.warn(`Transcript unavailable for ${c}`,R)}let A=nt(c,h,$,F,J,_,D,O),x=(0,I.createHash)("sha256").update(A).digest("hex");if(this.settings.hashes[c]===x){d++;continue}let f=this.pathFor(h,c,$),g=this.settings.files[c]||f;g!==f&&await this.app.vault.adapter.exists(g)&&!await this.app.vault.adapter.exists(f)&&(await this.app.vault.rename(this.app.vault.getAbstractFileByPath(g),f),g=f);let C=await this.app.vault.adapter.exists(g);await this.app.vault.adapter.write(g,A),this.settings.hashes[c]=x,this.settings.files[c]=g,C?o++:r++}this.settings.lastSyncAt=Date.now(),await this.saveData(this.settings),t.setMessage(`\u9489\u9489\u542C\u8BB0\u540C\u6B65\u5B8C\u6210\uFF1A\u65B0\u589E ${r}\uFF0C\u66F4\u65B0 ${o}\uFF0C\u672A\u53D8\u66F4 ${d}${p?`\uFF1B${p} \u6761\u9010\u5B57\u7A3F\u4E0D\u53EF\u7528`:""}\u3002`),window.setTimeout(()=>t.hide(),5e3)}catch(e){console.error("DingTalk Minutes sync failed",e),t.setMessage(e instanceof Error?e.message:String(e)),window.setTimeout(()=>t.hide(),8e3)}}async ensureFolder(t){let e=(0,a.normalizePath)(t);await this.app.vault.adapter.exists(e)||await this.app.vault.createFolder(e)}pathFor(t,e,n){let r=S(t,["title","name","taskName"])||"\u672A\u547D\u540D\u542C\u8BB0",o=E(t,n).slice(0,10);return(0,a.normalizePath)(`${this.settings.targetFolder}/${o} ${K(r)} [${e.slice(-8)}].md`)}configureSchedule(){this.intervalId!==null&&window.clearInterval(this.intervalId),this.intervalId=null,this.settings.syncEveryMinutes>0&&(this.intervalId=window.setInterval(()=>void this.sync(),this.settings.syncEveryMinutes*6e4))}},T=class extends a.PluginSettingTab{constructor(t,e){super(t,e);this.plugin=e}display(){let{containerEl:t}=this;t.empty(),new a.Setting(t).setName("DingTalk AI Minutes Sync").setHeading(),t.createEl("p",{text:"\u9700\u8981\u5728\u6B64\u7535\u8111\u5B89\u88C5\u5E76\u767B\u5F55 dws\uFF1B\u63D2\u4EF6\u4E0D\u4F1A\u4FDD\u5B58\u9489\u9489\u5BC6\u7801\u3001Cookie \u6216 AppSecret\u3002"}),new a.Setting(t).setName("dws \u8DEF\u5F84").setDesc("\u7559\u7A7A\u6216\u586B dws \u65F6\uFF0C\u4F1A\u81EA\u52A8\u8BC6\u522B ~/.local/bin/dws\u3001/opt/homebrew/bin/dws \u548C /usr/local/bin/dws\uFF1B\u4E5F\u53EF\u586B\u5199\u7EDD\u5BF9\u8DEF\u5F84\u3002").addText(e=>e.setValue(this.plugin.settings.dwsPath).onChange(async n=>{this.plugin.settings.dwsPath=n,await this.plugin.saveSettings()})),new a.Setting(t).setName("\u540C\u6B65\u76EE\u5F55").addText(e=>e.setValue(this.plugin.settings.targetFolder).onChange(async n=>{this.plugin.settings.targetFolder=n||P.targetFolder,await this.plugin.saveSettings()})),new a.Setting(t).setName("\u540C\u6B65\u8303\u56F4").setDesc("all \u5305\u542B\u81EA\u5DF1\u521B\u5EFA\u53CA\u5171\u4EAB\u7ED9\u4F60\u7684\u542C\u8BB0\u3002").addDropdown(e=>e.addOptions({all:"\u5168\u90E8\u53EF\u8BBF\u95EE",mine:"\u4EC5\u6211\u521B\u5EFA",shared:"\u4EC5\u5171\u4EAB\u7ED9\u6211"}).setValue(this.plugin.settings.scope).onChange(async n=>{this.plugin.settings.scope=n,await this.plugin.saveSettings()})),new a.Setting(t).setName("\u9996\u6B21\u540C\u6B65\u65F6\u95F4\u8303\u56F4").setDesc("\u9996\u6B21\u6210\u529F\u540C\u6B65\u65F6\u786E\u5B9A\u8D77\u70B9\uFF1B\u4E4B\u540E\u53EA\u540C\u6B65\u8BE5\u8D77\u70B9\u4E4B\u540E\u7684\u542C\u8BB0\uFF0C\u907F\u514D\u5BFC\u5165\u66F4\u65E9\u7684\u5386\u53F2\u5185\u5BB9\u3002").addDropdown(e=>e.addOptions({7:"\u6700\u8FD1 7 \u5929",30:"\u6700\u8FD1 30 \u5929",365:"\u6700\u8FD1\u4E00\u5E74"}).setValue(String(this.plugin.settings.initialSyncRangeDays)).onChange(async n=>{this.plugin.settings.initialSyncRangeDays=Number(n),await this.plugin.saveSettings()})),new a.Setting(t).setName("\u5305\u542B\u9010\u5B57\u7A3F").addToggle(e=>e.setValue(this.plugin.settings.includeTranscript).onChange(async n=>{this.plugin.settings.includeTranscript=n,await this.plugin.saveSettings()})),new a.Setting(t).setName("\u542F\u52A8\u65F6\u540C\u6B65").addToggle(e=>e.setValue(this.plugin.settings.syncOnStartup).onChange(async n=>{this.plugin.settings.syncOnStartup=n,await this.plugin.saveSettings()})),new a.Setting(t).setName("\u5B9A\u65F6\u540C\u6B65\uFF08\u5206\u949F\uFF09").setDesc("\u586B 0 \u5173\u95ED\u3002").addText(e=>e.setValue(String(this.plugin.settings.syncEveryMinutes)).onChange(async n=>{this.plugin.settings.syncEveryMinutes=Math.max(0,Number.parseInt(n,10)||0),await this.plugin.saveSettings()})),new a.Setting(t).setName("\u7ACB\u5373\u540C\u6B65").addButton(e=>e.setButtonText("\u540C\u6B65").setCta().onClick(()=>void this.plugin.sync()))}};function u(i){return typeof i=="object"&&i!==null&&!Array.isArray(i)}function G(i){let s=i.trim();if(s&&s!=="dws")return s.replace(/^~(?=\/)/,process.env.HOME||"~");let t=process.env.HOME||"";return[process.env.DWS_PATH,t?`${t}/.local/bin/dws`:void 0,"/opt/homebrew/bin/dws","/usr/local/bin/dws"].filter(n=>!!n).find(N.existsSync)||"dws"}function w(i){return u(i)?i.data!==void 0?i.data:i.result!==void 0?i.result:i:i}function S(i,s){let t=w(i);if(u(t)){for(let e of s)if(typeof t[e]=="string")return t[e]}}function E(...i){for(let s of i){let t=w(s);if(u(t))for(let e of["startTimeISO","startTime","createTimeISO","createdAt","createTime"]){let n=t[e];if(typeof n=="string"&&n)return n;if(typeof n=="number"&&n>1e12)return new Date(n).toISOString()}}return new Date().toISOString()}function q(i){return S(i,["taskUuid","taskUUID","id","uuid"])}function K(i){return i.replace(/[\\/:*?"<>|#[\]]/g," ").replace(/\s+/g," ").trim().slice(0,100)||"\u672A\u547D\u540D\u542C\u8BB0"}function y(i){return JSON.stringify(i)}function k(i){let s=w(i);return u(s)?s:{}}function l(i){return typeof i=="string"?i.replace(/\\n/g,` `).trim():""}function Q(i){let s=k(i),t=l(s.fullSummary)||l(s.summary)||l(s.content);return t?`## AI \u6458\u8981 ${t}`:""}function X(i){let s=k(i).keywords;if(!Array.isArray(s))return"";let t=s.map(l).filter(Boolean);return t.length?`## \u5173\u952E\u8BCD ${t.map(e=>`#${e.replace(/\s+/g,"-")}`).join(" ")}`:""}function Y(i){let s=k(i),e=(Array.isArray(s.actions)?s.actions:Array.isArray(s.dingtalkTodoList)?s.dingtalkTodoList:[]).map(n=>{if(typeof n=="string")try{return l(JSON.parse(n).value)||n}catch{return n}return u(n)?l(n.value)||l(n.title):""}).filter(Boolean);return e.length?`## \u5F85\u529E ${e.map(n=>`- [ ] ${n}`).join(` `)}`:""}function Z(i){let s=typeof i=="number"?Math.floor(i/1e3):0;return`${String(Math.floor(s/3600)).padStart(2,"0")}:${String(Math.floor(s%3600/60)).padStart(2,"0")}:${String(s%60).padStart(2,"0")}`}function tt(i,s=""){let e=i.flatMap(n=>{let r=k(n).paragraphList;return Array.isArray(r)?r.filter(u):[]}).map(n=>{let r=l(n.nickName)||(u(n.speakerDisplay)?l(n.speakerDisplay.nickName):"")||"\u53D1\u8A00\u4EBA",o=l(n.paragraph);return o?`**${r}** \xB7 ${Z(n.startTime)} ${o}`:""}).filter(Boolean);return e.length?`## \u9010\u5B57\u7A3F ${e.join(` --- `)}`:s?`## \u9010\u5B57\u7A3F > ${s}`:""}function nt(i,s,t,e,n,r,o,d=""){let p=S(t,["title","name"])||S(s,["title","name","taskName"])||"\u672A\u547D\u540D\u542C\u8BB0",h=E(s,t);return["---","source: dingtalk-minutes",`taskUuid: ${y(i)}`,`title: ${y(p)}`,h?`created: ${y(h)}`:"",`synced: ${y(new Date().toISOString())}`,"tags: [\u9489\u9489\u542C\u8BB0, \u4F1A\u8BAE\u7EAA\u8981]","---","",`# ${p}`,"",Q(e),X(n),Y(r),tt(o,d)].filter(Boolean).join(` `)+` `}