@lark-apaas/openclaw-extension-miaoda-coding 1.0.17 → 1.0.18-alpha.0
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/index.mjs +5 -5
- package/package.json +3 -3
package/dist/index.mjs
CHANGED
|
@@ -5,7 +5,7 @@ import{createRequire as e}from"node:module";import{execFile as t,spawn as n}from
|
|
|
5
5
|
`)){let e=c.trim();if(a){if(e===`## 已完成`){o=!0,s=!1;continue}if(e.startsWith(`## 当前任务`)){s=!0,o=!1;continue}if(e===``)continue}if(o&&e)t.push(e);else if(s&&e){let t=e.match(/^\[([^\]]+)\]\s*(.*)/);if(t){let e=t[2];i=t[1],r=e,!a&&e.startsWith(`需求: `)&&(n=e.slice(4))}else n||=e}}return{history:t,taskDesc:n,lastStatus:r,lastTimestamp:i}}async function bn(e,t){await d(c(e,fn),{recursive:!0});let n=_n(e),r=[];try{let e=await f(n,`utf8`);if(e.trim()){let t=yn(e);if(r.push(...t.history),t.taskDesc){let e=t.lastTimestamp||vn(),n;n=t.lastStatus.startsWith(`失败:`)?t.lastStatus:t.lastStatus===`处理完成`?`成功`:t.lastStatus||`未知状态`,r.push(`[${e}] ${t.taskDesc} — ${n}`)}}}catch{}await h(n,`## 已完成\n\n${r.length?r.join(`
|
|
6
6
|
`)+`
|
|
7
7
|
`:``}\n## 当前任务\n\n${t}\n`,`utf8`)}async function Q(e,t){await u(_n(e),`[${vn()}] ${t}\n`,`utf8`)}async function*xn(e){let{cwd:t,rootDir:n,task:r,agentId:i,signal:a}=e;try{let o=await gn(t,n);if(o){yield{type:`failed`,phase:`pre-create`,userFacing:!1,error:o};return}let s=new qt,c=e.requestText??r;await bn(t,c.slice(0,200)+(c.length>200?`...`:``)),e.traceId&&await Q(t,`trace_id: ${e.traceId}`),await Q(t,`已接收需求`),yield{type:`progress`,message:`已接收需求`};let l=await Zt(t),u=!l?.appId,d=vn();if(u){let e;try{e=await s.createSubApp({message:r,agentId:i})}catch(e){let n=e instanceof Error?e.message:String(e),r=e instanceof Ut,i=e?.logId;try{await Q(t,`失败: ${n}`)}catch{}yield{type:`failed`,error:n,phase:`create`,userFacing:r,logId:i};return}let{appID:a,conversationID:o,logId:c}=e;l={appId:a,conversationId:o,createdAt:d,updatedAt:d},await $t(t,l,{rootDir:n}),await Q(t,`应用已创建(appId: ${a})`),yield{type:`app_created`,appId:a,conversationId:o,logId:c}}await Q(t,`正在处理`),yield{type:`progress`,message:`正在处理`};let f=!1,p=Date.now(),m=setInterval(()=>{Q(t,`正在开发中(已 ${Math.floor((Date.now()-p)/6e4)} 分钟)`).catch(()=>{})},6e4),h;try{h=await sn({createStream:n=>s.streamChat({appID:l.appId,message:r,workDir:t,channelAppId:e.channelAppId,...n?{lastEventID:n}:{}}),onEvent:e=>{if(a?.aborted)return!1;let n=en(e.data),r=n?.delta?.type;!f&&n?.role===`assistant`&&(n?.status===`in_progress`||r===`text`)&&(f=!0,Q(t,`正在输出结果`).catch(()=>{}));try{if(n?.status===`completed`){let e=un(n);e&&Q(t,e).catch(()=>{})}}catch{}},onReconnect:(t,n)=>{e.onReconnect?.(t,n)},onFailed:t=>{e.onStreamFailed?.(t)},signal:a})}finally{clearInterval(m)}if(!h.success){let e=h.terminalReason??`stream_interrupted`,n=e===`stream_interrupted`;await Q(t,`失败: ${h.error??e}`),yield{type:`failed`,error:h.error||`stream failed`,appId:l.appId,logId:h.logId,lastEventId:h.lastEventId,phase:`stream`,retryable:n,terminalReason:e,sseEventCount:h.totalEvents,reconnectCount:h.reconnectCount,finishReasonRaw:h.finishReasonRaw,errorCodeRaw:h.errorCodeRaw};return}let{finalText:g,logId:_,totalEvents:v,reconnectCount:y,finishReasonRaw:b}=h;if(f&&(yield{type:`progress`,message:`正在输出结果`,logId:_||void 0}),a?.aborted){await Q(t,`失败: cancelled`),yield{type:`failed`,error:`cancelled`,appId:l.appId,phase:`stream`,lastEventId:h.lastEventId,retryable:!0,terminalReason:`stream_interrupted`,sseEventCount:v,reconnectCount:y,finishReasonRaw:b,errorCodeRaw:h.errorCodeRaw};return}let x=vn();await $t(t,{...l,updatedAt:x,finalText:g},{rootDir:n}),g&&await Q(t,`Agent 回复: ${g.slice(0,200)+(g.length>200?`...`:``)}`),await Q(t,`处理完成`),yield{type:`completed`,appId:l.appId,logId:_||void 0,lastEventId:h.lastEventId,finalText:g,terminalReason:`completed`,sseEventCount:v,reconnectCount:y,finishReasonRaw:b}}catch(e){let n=e instanceof Error?e.message:String(e);try{await Q(t,`失败: ${n}`)}catch{}yield{type:`failed`,error:n,logId:e?.logId}}}const Sn=[`research`,`design`,`feedback`];function Cn(e){return e.replace(/[^a-zA-Z0-9\u4e00-\u9fff-]/g,`-`).replace(/-+/g,`-`).replace(/^-|-$/g,``).slice(0,60)||`reference`}async function wn(e){let t;try{t=await p(e)}catch{return 1}let n=0;for(let e of t){let t=e.match(/^(\d{3})-/);if(t){let e=parseInt(t[1],10);e>n&&(n=e)}}return n+1}async function Tn(e){try{let t=await f(c(e,`reference`,`manifest.json`),`utf8`);return JSON.parse(t)}catch{return{updatedAt:new Date().toISOString(),files:[]}}}async function En(e,t){await d(c(e,`reference`),{recursive:!0}),await h(c(e,`reference`,`manifest.json`),JSON.stringify(t,null,2),`utf8`)}async function Dn(e){let{appCwd:t,category:n,content:r,filename:i,mode:a=`append`}=e,o=c(t,`reference`,n);if(a===`replace`)try{await m(o,{recursive:!0,force:!0})}catch{}await d(o,{recursive:!0});let s=await wn(o),l=`${n}/${`${String(s).padStart(3,`0`)}-${Cn(i??`reference`)}.md`}`,u=`reference/${l}`;await h(c(t,u),r,`utf8`);let f=await Tn(t);return a===`replace`&&(f.files=f.files.filter(e=>e.category!==n)),f.files.push({path:l,category:n,writtenAt:new Date().toISOString()}),f.updatedAt=new Date().toISOString(),await En(t,f),{relativePath:u,category:n,seq:s}}async function On(e){let t=c(e,`reference`),n;try{n=await p(t)}catch{return{totalFiles:0,categories:{}}}let r={},i=0;for(let e of n){if(!Sn.includes(e))continue;let n;try{n=(await p(c(t,e))).filter(e=>e.endsWith(`.md`)).sort()}catch{continue}n.length>0&&(r[e]={count:n.length,files:n},i+=n.length)}return{totalFiles:i,categories:r}}async function kn(e){return(await On(e)).totalFiles>0}function An(e){let t=e?.log,n=e?.timeoutMs??5e3,r=null,i=null,a=null;return{onSessionStart(e){t?.info?.(`db-schema: session_start sessionId=${e??`unknown`}, clearing cache`),r=null,i=null,a=e??null},async getSchemaSummary(e){return e&&a!==null&&e!==a?(t?.warn?.(`db-schema: session changed without session_start: ${a} -> ${e}, resetting cache`),r=null,i=null,a=e):e&&a===null&&(a=e),r===null?i||(i=(async()=>{t?.info?.(`db-schema: fetching (timeout=${n}ms)`);try{let{stdout:e}=await jn(Mn(),n),i=Nn(e);if(i.length===0)return t?.info?.(`db-schema: empty, skip injection for this session`),r=``,null;let a=Pn(i);return r=a,t?.info?.(`db-schema: cached ${i.length} table(s), ${a.length} chars`),a}catch(e){let n=e instanceof Error?e.message:String(e);return t?.warn?.(`db-schema: fetch failed (will not retry this session): ${n}`),r=``,null}finally{i=null}})(),i):r===``?null:r}}}function jn(e,t){return new Promise((n,r)=>{let i=setTimeout(()=>r(Error(`timeout after ${t}ms`)),t);e.then(e=>{clearTimeout(i),n(e)},e=>{clearTimeout(i),r(e)})})}function Mn(){return new Promise((e,n)=>{t(`npx`,[`-y`,`@lark-apaas/miaoda-data-cli`,`db`,`schema`,`--json`],{timeout:3e4,maxBuffer:10*1024*1024},(t,r,i)=>{if(t)return n(Error(`execFile failed: ${t.message} | stderr: ${i?.slice(0,500)??``} | stdout: ${r?.slice(0,500)??``}`));e({stdout:r,stderr:i})})})}function Nn(e){let t=e.trim();if(!t)return[];let n=JSON.parse(t);return Array.isArray(n)?n:n&&typeof n==`object`&&n.tableName?[n]:[]}function Pn(e){return`【当前数据库表结构】\n${e.map(e=>{let t=e.fields.map(e=>`${e.fieldName}(${e.type})`).join(`, `),n=e.comment?` (${e.comment})`:``;return`- ${e.tableName}${n}: ${t}`}).join(`
|
|
8
|
-
`)}`}function Fn(){return`dev`}var
|
|
8
|
+
`)}`}const Fn=new Set([`boe`,`pre`,`online`,`dev`]);function In(e){let t=(e??``).trim().toLowerCase();return Fn.has(t)?t:void 0}function Ln(){let e=In(process.env.FORCE_FRAMEWORK_ENVIRONMENT);return e&&e!==`dev`?e:In(process.env.MIAODA_SLARDAR_ENV)||In(`online`)||`dev`}var Rn=H(B((e=>{Object.defineProperty(e,`__esModule`,{value:!0});var t=10,n=1e3,r=function(e){return JSON.stringify({ev_type:`batch`,list:e})};function i(e){var i=e.transport,a=e.endpoint,o=e.size,s=o===void 0?t:o,c=e.wait,l=c===void 0?n:c,u=[],d=0,f,p,m={getSize:function(){return s},getWait:function(){return l},setSize:function(e){s=e},setWait:function(e){l=e},getEndpoint:function(){return a},setEndpoint:function(e){a=e},send:function(e){u.push(e),u.length>=s&&h.call(this),clearTimeout(d),d=setTimeout(h.bind(this),l)},flush:function(){clearTimeout(d),h.call(this)},getBatchData:function(){return u.length?r(u):``},clear:function(){clearTimeout(d),u=[]},fail:function(e){f=e},success:function(e){p=e}};function h(){if(u.length){var e=this.getBatchData();i.post({url:a,data:e,fail:function(t){f&&f(t,e)},success:function(){p&&p(e)}}),u=[]}}return m}
|
|
9
9
|
/*! *****************************************************************************
|
|
10
10
|
Copyright (c) Microsoft Corporation.
|
|
11
11
|
|
|
@@ -20,7 +20,7 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
|
|
|
20
20
|
OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
|
|
21
21
|
PERFORMANCE OF THIS SOFTWARE.
|
|
22
22
|
***************************************************************************** */
|
|
23
|
-
var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)};function o(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function s(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function c(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var l=function(){return{}};function u(e){return e}function d(e){return typeof e==`object`&&!!e}var f=Object.prototype;function p(e){return f.toString.call(e)===`[object Array]`}function m(e){return typeof e==`boolean`}function h(e){return typeof e==`number`}function g(e){return typeof e==`string`}function _(e,t){if(!p(e)||e.length===0)return!1;for(var n=0;n<e.length;){if(e[n]===t)return!0;n++}return!1}var v=function(e,t){if(!p(e))return e;var n=e.indexOf(t);if(n>=0){var r=e.slice();return r.splice(n,1),r}return e},y=function(e,t,n){for(var r,i,a=s(t.split(`.`)),o=a[0],c=a.slice(1);e&&c.length>0;)e=e[o],r=c,i=s(r),o=i[0],c=i.slice(1);if(e)return n(e,o)};function b(e){try{return g(e)?e:JSON.stringify(e)}catch(e){return`[FAILED_TO_STRINGIFY]:`+String(e)}}function x(){var e={},t={},n={set:function(r,i){return e[r]=i,t[r]=b(i),n},merge:function(r){return e=a(a({},e),r),Object.keys(r).forEach(function(e){t[e]=b(r[e])}),n},delete:function(r){return delete e[r],delete t[r],n},clear:function(){return e={},t={},n},get:function(e){return t[e]},toString:function(){return a({},t)}};return n}var S=function(){return``.padStart?function(e,t){return t===void 0&&(t=8),e.padStart(t,` `)}:function(e){return e}}(),C=0,w=function(){var e=[...arguments];console.error.apply(console,c([`[SDK]`,Date.now(),S(``+ C++)],s(e),!1))},T=0,E=function(){var e=[...arguments];console.warn.apply(console,c([`[SDK]`,Date.now(),S(``+ T++)],s(e),!1))},D=function(e){return Math.random()<Number(e)},O=function(e,t){return e<Number(t)},k=function(e){return function(t){for(var n=t,r=0;r<e.length&&n;r++)try{n=e[r](n)}catch(e){w(e)}return n}};function A(){for(var e=Array(16),t=0,n=0;n<16;n++)n&3||(t=Math.random()*4294967296),e[n]=t>>>((n&3)<<3)&255;return e}function j(e){for(var t=[],n=0;n<256;++n)t[n]=(n+256).toString(16).substr(1);var r=0,i=t;return[i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]]].join(``)}function M(){var e=A();return e[6]=e[6]&15|64,e[8]=e[8]&63|128,j(e)}function N(){var e=!1,t={},n=function(e){e.length&&e.forEach(function(e){try{e()}catch{}}),e.length=0},r=function(e){t[e]&&t[e].forEach(function(e){n(e[1])}),t[e]=void 0};return{set:function(r,i,a){t[r]?t[r].push([i,a]):t[r]=[[i,a]],e&&n(a)},has:function(e){return!!t[e]},remove:r,removeByEvType:function(e){Object.keys(t).forEach(function(r){t[r]&&t[r].forEach(function(t){t[0]===e&&n(t[1])})})},clear:function(){e=!0,Object.keys(t).forEach(function(e){r(e)})}}}var P=500,F=50;function I(e,t,n){if(t.push(n),!(t.length<P)){var r=t.splice(0,F);e.savePreStartDataToDb&&e.savePreStartDataToDb(r)}}function L(e){var t=e.getPreStartQueue();t.forEach(function(t){return e.build(t)}),t.length=0}var R=[`init`,`start`,`config`,`beforeDestroy`,`provide`,`beforeReport`,`report`,`beforeBuild`,`build`,`beforeSend`,`send`,`beforeConfig`];function z(e){var t=e.builder,n=e.createSender,r=e.createDefaultConfig,i=e.createConfigManager,a=e.userConfigNormalizer,o=e.initConfigNormalizer,l=e.validateInitConfig,u,f,p={};R.forEach(function(e){return p[e]=[]});var m=!1,h=!1,g=!1,y=[],b=[],x=N(),S={getBuilder:function(){return t},getSender:function(){return u},getPreStartQueue:function(){return y},init:function(e){if(m){E(`already inited`);return}if(e&&d(e)&&l(e)){var t=r(e);if(!t)throw Error(`defaultConfig missing`);var a=o(e);if(f=i(t),f.setConfig(a),f.onChange(function(){C(`config`)}),u=n(f.getConfig()),!u)throw Error(`sender missing`);m=!0,C(`init`,!0)}else throw Error(`invalid InitConfig, init failed`)},set:function(e){m&&e&&d(e)&&(C(`beforeConfig`,!1,e),f?.setConfig(e))},config:function(e){if(m)return e&&d(e)&&(C(`beforeConfig`,!1,e),f?.setConfig(a(e))),f?.getConfig()},provide:function(e,t){if(_(b,e)){E(`cannot provide `+e+`, reserved`);return}S[e]=t,C(`provide`,!1,e)},start:function(){m&&(h||f?.onReady(function(){h=!0,C(`start`,!0),L(S)}))},report:function(e){if(e){var t=k(p.beforeReport)(e);if(t){var n=k(p.report)(t);n&&(h?this.build(n):I(S,y,n))}}},build:function(e){if(h){var n=k(p.beforeBuild)(e);if(n){var r=t.build(n);if(r){var i=k(p.build)(r);i&&this.send(i)}}}},send:function(e){if(h){var t=k(p.beforeSend)(e);t&&(u.send(t),C(`send`,!1,t))}},destroy:function(){x.clear(),g=!0,y.length=0,C(`beforeDestroy`,!0)},on:function(e,t){if(e===`init`&&m||e===`start`&&h||e===`beforeDestroy`&&g)try{t()}catch{}else p[e]&&p[e].push(t)},off:function(e,t){p[e]&&(p[e]=v(p[e],t))},destroyAgent:x};return b=Object.keys(S),S;function C(e,t){t===void 0&&(t=!1);var n=[...arguments].slice(2);p[e].forEach(function(e){try{e.apply(void 0,c([],s(n),!1))}catch{}}),t&&(p[e].length=0)}}var B=function(e){var t=x();e.provide(`context`,t),e.on(`report`,function(e){return e.extra||={},e.extra.context=t.toString(),e})};function V(e,t){e.on(`init`,function(){var n=[],r=function(r){r.forEach(function(r){var i=r.name;_(n,i)||(n.push(i),r.setup(e),t&&t(i,r.setup),e.destroyAgent.set(i,i,[function(){n=v(n,i),r.tearDown&&r.tearDown()}]))})};e.provide(`applyIntegrations`,r);var i=e.config();i&&i.integrations&&r(i.integrations)})}var H=function(e){try{typeof window==`object`&&d(window)&&window.__SLARDAR_DEVTOOLS_GLOBAL_HOOK__&&window.__SLARDAR_DEVTOOLS_GLOBAL_HOOK__.push(e)}catch{}},U=function(){return Date.now()};function W(){if(typeof window==`object`&&d(window))return window}var G=function(e){if(e)return e.__SLARDAR_REGISTRY__||={Slardar:{plugins:[],errors:[],subject:{}}},e.__SLARDAR_REGISTRY__.Slardar},K=function(){var e=[...arguments],t=G(W());t&&(t.errors||=[],t.errors.push(e))},q=function(e){var t;if(!(typeof window!=`object`||!window.__perfsee__)){var n={};return(t=Error.captureStackTrace)==null||t.call(Error,n,e),n.stack}},J=`custom`,ee=`event`,Y=`log`,X=function(e){if(!(!e||!d(e))&&!(!e.name||!g(e.name))){var t={name:e.name,type:ee};if(`metrics`in e&&d(e.metrics)){var n=e.metrics,r={};for(var i in n)h(n[i])&&(r[i]=n[i]);t.metrics=r}if(`categories`in e&&d(e.categories)){var a=e.categories,o={};for(var i in a)o[i]=b(a[i]);t.categories=o}return`attached_log`in e&&g(e.attached_log)&&(t.attached_log=e.attached_log),t}},Z=function(e){if(!(!e||!d(e))&&!(!e.content||!g(e.content))){var t=e.content,n={content:b(t),type:Y,level:`info`};if(`level`in e&&(n.level=e.level),`extra`in e&&d(e.extra)){var r=e.extra,i={},a={};for(var o in r)h(r[o])?i[o]=r[o]:a[o]=b(r[o]);n.metrics=i,n.categories=a}return`attached_log`in e&&g(e.attached_log)&&(n.attached_log=e.attached_log),n}},te=function(e){var t=function(n){var r=X(n);if(r){var i=q(t);i&&(r.stacks=i),e.report({ev_type:J,payload:r,extra:{timestamp:U()}})}};e.provide(`sendEvent`,t),e.provide(`sendLog`,function(t){var n=Z(t);n&&e.report({ev_type:J,payload:n,extra:{timestamp:U()}})})},ne=function(e,t){var n=e.common||{};return n.sample_rate=t,e.common=n,e},re=function(e,t,n,r,i){return e?(function(e){return function(){return e}})(i(r,t)):function(){return n(t)}},ie=function(e,t){return e.map(function(e){switch(t){case`number`:return Number(e);case`boolean`:return e===`1`;default:return String(e)}})},ae=function(e,t,n){switch(n){case`eq`:return _(t,e);case`neq`:return!_(t,e);case`gt`:return e>t[0];case`gte`:return e>=t[0];case`lt`:return e<t[0];case`lte`:return e<=t[0];case`regex`:return!!e.match(new RegExp(t.join(`|`)));case`not_regex`:return!e.match(new RegExp(t.join(`|`)));default:return!1}},oe=function(e,t,n,r){var i=y(e,t,function(e,t){return e[t]});return i===void 0?!1:ae(i,ie(r,m(i)?`bool`:h(i)?`number`:`string`),n)},se=function(e,t){try{return t.type===`rule`?oe(e,t.field,t.op,t.values):t.type===`and`?t.children.every(function(t){return se(e,t)}):t.children.some(function(t){return se(e,t)})}catch(e){return K(e),!1}},ce=function(e,t,n,r,i,a){var o={};return Object.keys(e).forEach(function(s){var c=e[s],l=c.enable,u=c.sample_rate,d=c.conditional_sample_rules;l?(o[s]={enable:l,sample_rate:u,effectiveSampleRate:u*n,hit:re(t,u,r,i,a)},d&&(o[s].conditional_hit_rules=d.map(function(e){var o=e.sample_rate,s=e.filter;return{sample_rate:o,hit:re(t,o,r,i,a),effectiveSampleRate:o*n,filter:s}}))):o[s]={enable:l,hit:function(){return!1},sample_rate:0,effectiveSampleRate:0}}),o},le=function(e,t,n,r,i){if(!t)return u;var a=t.sample_rate,o=t.include_users,s=t.sample_granularity,c=t.rules,l=t.r,d=l===void 0?Math.random():l;if(_(o,e))return function(e){return ne(e,1)};var f=s===`session`,p=re(f,a,n,d,r),m=ce(c,f,a,n,d,r);return function(e){if(!p())return f&&i[0](),!1;if(!(e.ev_type in m))return ne(e,a);if(!m[e.ev_type].enable)return f&&i[1](e.ev_type),!1;if(e.common?.sample_rate)return e;var t=m[e.ev_type],n=t.conditional_hit_rules;if(n){for(var r=0;r<n.length;r++)if(se(e,n[r].filter))return n[r].hit()?ne(e,n[r].effectiveSampleRate):!1}return t.hit()?ne(e,t.effectiveSampleRate):(!(n&&n.length)&&f&&i[1](e.ev_type),!1)}},ue=function(e){e.on(`start`,function(){var t=e.config(),n=t.userId,r=t.sample,i=le(n,r,D,O,[function(){e.destroy()},function(t){e.destroyAgent.removeByEvType(t)}]);e.on(`build`,i)})},de={build:function(e){return{ev_type:e.ev_type,payload:e.payload,common:a(a({},e.extra||{}),e.overrides||{})}}},fe=`mon.zijieapi.com`,pe=fe,me=`2.1.8`,he=`SDK_BASE`,ge=`/monitor_web/settings/browser-settings`,_e=`/monitor_browser/collect/batch/`,ve={sample_rate:1,include_users:[],sample_granularity:`session`,rules:{}},ye=20,be=`session`;function xe(e){var t,n,r=[`userId`,`deviceId`,`sessionId`,`env`];try{for(var i=o(r),a=i.next();!a.done;a=i.next()){var s=a.value;e[s]||delete e[s]}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return e}function Se(e){return xe(a({},e))}function Ce(e){return d(e)&&`bid`in e&&`transport`in e}function we(e){return xe(a({},e))}function Te(e){if(!e)return{};var t=e.sample,n=e.timestamp,r=e.quota_rate,i=r===void 0?1:r;if(!t)return{};var a=t.sample_rate,o=t.sample_granularity,s=o===void 0?be:o,c=t.include_users,l=t.rules,u=l===void 0?[]:l;return{sample:{include_users:c,sample_rate:a*i,sample_granularity:s,rules:u.reduce(function(e,t){var n=t.name;return e[n]={enable:t.enable,sample_rate:t.sample_rate,conditional_sample_rules:t.conditional_sample_rules},e},{})},serverTimestamp:n}}var Ee=function(e,t){return t===void 0&&(t=_e),(e&&e.indexOf(`//`)>=0?``:`https://`)+e+t},De=function(e,t){return t===void 0&&(t=ge),(e&&e.indexOf(`//`)>=0?``:`https://`)+e+t},Oe=function(){return M()},ke=function(){return M()},Ae=function(e){return e+`_`+Date.now()},je=function(){return M()},Me=function(e){var t=e,n,r={},i,o,s=l,c=l;return{getConfig:function(){return t},setConfig:function(e){return r=a(a({},r),e||{}),u(),n||(n=e,t.useLocalConfig||!t.bid?(o={},s()):Ne(t.transport,t.domain,t.bid,function(e){i=e,d()})),t},onChange:function(e){c=e},onReady:function(e){s=e,o&&s()}};function u(){var n=a(a(a({},e),o||{}),r);n.sample=Pe(Pe(e.sample,o?.sample),r.sample),t=n,c()}function d(){o=Te(i),u(),s()}};function Ne(e,t,n,r){if(!e.get)return r({});e.get({withCredentials:!0,url:De(t)+`?bid=`+n+`&store=1`,success:function(e){r(e.data||{})},fail:function(){r({sample:{sample_rate:.001}})}})}function Pe(e,t){if(!e||!t)return e||t;var n=a(a({},e),t);return n.include_users=c(c([],s(e.include_users||[]),!1),s(t.include_users||[]),!1),n.rules=c(c([],s(Object.keys(e.rules||{})),!1),s(Object.keys(t.rules||{})),!1).reduce(function(n,r){return r in n||(r in(e.rules||{})&&r in(t.rules||{})?(n[r]=a(a({},e.rules[r]),t.rules[r]),n[r].conditional_sample_rules=c(c([],s(e.rules[r].conditional_sample_rules||[]),!1),s(t.rules[r].conditional_sample_rules||[]),!1)):n[r]=e.rules?.[r]||t.rules?.[r]),n},{}),n}var Fe=function(e,t){var n=t||{},r=n.version,i=n.name,o={url:``,protocol:``,domain:``,path:``,query:``,timestamp:Date.now(),sdk_version:r||me,sdk_name:i||he};return a(a({},e),{extra:a(a({},o),e.extra||{})})},Ie=function(e){e.on(`report`,function(t){return Fe(t,e.config())})},Le=function(e,t){var n={};return n.bid=t.bid,n.pid=t.pid,n.view_id=t.viewId,n.user_id=t.userId,n.device_id=t.deviceId,n.session_id=t.sessionId,n.release=t.release,n.env=t.env,a(a({},e),{extra:a(a({},n),e.extra||{})})},Re=function(e){e.on(`beforeBuild`,function(t){return Le(t,e.config())})};function ze(e){return i(e)}var Be=function(e){return{bid:``,pid:``,viewId:Ae(`_`),userId:Oe(),deviceId:ke(),sessionId:je(),domain:fe,release:``,env:`production`,sample:ve,plugins:{},transport:{get:l,post:l},useLocalConfig:!1}},Ve=function(e){var t=e===void 0?{}:e,n=t.createSender,r=n===void 0?function(e){return ze({size:ye,endpoint:Ee(e.domain),transport:e.transport})}:n,i=t.builder,a=i===void 0?de:i,o=t.createDefaultConfig,s=z({validateInitConfig:Ce,initConfigNormalizer:Se,userConfigNormalizer:we,createSender:r,builder:a,createDefaultConfig:o===void 0?Be:o,createConfigManager:Me});return B(s),Re(s),Ie(s),V(s),H(s),s},He=function(e){e===void 0&&(e={});var t=Ve(e);return ue(t),te(t),t},Ue=He();e.BATCH_REPORT_PATH=_e,e.CustomPlugin=te,e.DEFAULT_SAMPLE_CONFIG=ve,e.DEFAULT_SAMPLE_GRANULARITY=be,e.DEFAULT_SENDER_SIZE=ye,e.InjectConfigPlugin=Re,e.InjectEnvPlugin=Ie,e.REPORT_DOMAIN=fe,e.SDK_NAME=he,e.SDK_VERSION=me,e.SETTINGS_DOMAIN=pe,e.SETTINGS_PATH=ge,e.addConfigToReportEvent=Le,e.addEnvToSendEvent=Fe,e.builder=de,e.createBaseClient=He,e.createConfigManager=Me,e.createMinimalClient=Ve,e.default=Ue,e.getDefaultConfig=Be,e.getDefaultDeviceId=ke,e.getDefaultSessionId=je,e.getDefaultUserId=Oe,e.getReportUrl=Ee,e.getServerConfig=Ne,e.getSettingsUrl=De,e.getViewId=Ae,e.mergeSampleConfig=Pe,e.normalizeInitConfig=Se,e.normalizeStrictFields=xe,e.normalizeUserConfig=we,e.parseServerConfig=Te,e.validateInitConfig=Ce}))(),1);function Ln(e){return!e||typeof e!=`object`||!(`default`in e)?e:e.default}function Rn(e){let t=Ln(e);return Ln(t)??t??e??{}}const zn=Rn(In.default);let Bn=!1;function Vn(){if(!Bn)try{let e=Vt();zn.init({bid:`apaas_miaoda`,release:String(e.version??`unknown`),env:Fn(),transport:{get:({url:e,success:t,fail:n})=>fetch(e).then(e=>e.json()).then(e=>t?.(e)).catch(e=>n?.(e)),post:({url:e,data:t})=>{let n=typeof t==`string`?t:JSON.stringify(t);return fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:n}).catch(()=>{})}}}),zn.start(),Bn=!0}catch{}}function Hn(e){if(e!==void 0)return String(e)}function Un(e){let t={source:`node-plugin`},n=e.traceId,r=e.projectId,i=Hn(e.isNew),a=e.appId,o=e.agentId,s=e.sessionKey;return n&&(t.trace_id=n),r&&(t.project_id=r),i&&(t.is_new=i),a&&(t.app_id=a),o&&(t.agent_id=o),e.domain&&(t.domain=e.domain),s&&(t.session_key=s),e.refer&&(t.refer=e.refer),t}function Wn(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))r!=null&&(n[e]=typeof r==`boolean`?String(r):r);return n}function Gn(e){switch(e){case`user_stopped`:return`user_stopped`;case`quota_exceeded`:return`quota_exceeded`;case`service_failed`:return`service_failed`;case`stream_interrupted`:return`stream_interrupted`;default:return}}function Kn(e){return e===`user_stopped`||e===`quota_exceeded`}function qn(e){try{let t={},n=Un(e),r=e.durationMs,i=e.sseEventCount,a=e.reconnectCount,o=e.createDurationMs;typeof r==`number`&&(t.duration_ms=r),typeof i==`number`&&(t.sse_event_count=i),typeof a==`number`&&(t.reconnect_count=a),typeof o==`number`&&(t.create_duration_ms=o);let s={...n,status:e.status,is_new:n.is_new??`false`},c=e.errorType;e.phase&&(s.phase=e.phase),c&&(s.error_type=c.slice(0,100)),e.terminalReason&&(s.terminal_reason=e.terminalReason.slice(0,100)),e.errorCode&&(s.error_code=e.errorCode.slice(0,100)),zn.sendEvent?.({name:`miaoda_coding_task`,metrics:t,categories:s})}catch{}}function Jn(e){try{let t={},n=Un(e);typeof e.durationMs==`number`&&(t.duration_ms=e.durationMs),typeof e.sseEventCount==`number`&&(t.sse_event_count=e.sseEventCount),typeof e.reconnectCount==`number`&&(t.reconnect_count=e.reconnectCount);let r={...n,request_name:e.requestName,status:e.status};e.logId&&(r.log_id=e.logId),e.phase&&(r.phase=e.phase),e.errorType&&(r.error_type=e.errorType.slice(0,100)),e.terminalReason&&(r.terminal_reason=e.terminalReason.slice(0,100)),e.errorCode&&(r.error_code=e.errorCode.slice(0,100)),zn.sendEvent?.({name:`miaoda_coding_request`,metrics:t,categories:r})}catch{}}function Yn(e){try{if(!e.projectId)return;let t=Wn(Un(e),{event:e.event,phase:e.phase}),n=e.logIds;n?.length&&(t.log_ids=n.join(`,`)),zn.sendLog?.({content:e.error,level:`error`,extra:t})}catch{}}function $(e){try{let t=Wn(Un(e),{event:e.event,phase:e.phase,status:e.status,...e.extra});zn.sendLog?.({content:e.message,level:e.level??`info`,extra:t})}catch{}}const Xn=/^[a-z0-9][a-z0-9-]{0,63}$/,Zn=new Set([`.`,`..`,`con`,`nul`,`prn`,`aux`]);function Qn(e){let t=e?.config?.plugins?.entries?.[`openclaw-extension-miaoda-coding`]?.config??{};return{verbose:t?.verbose===!0,hooks:{allowPromptInjection:t?.hooks?.allowPromptInjection!==!1}}}function $n(e,t){i.mkdirSync(o.dirname(e),{recursive:!0});let n=`${e}.tmp.${process.pid}.${Date.now()}`;try{i.writeFileSync(n,JSON.stringify(t,null,2)),i.renameSync(n,e)}catch(e){try{i.unlinkSync(n)}catch{}throw e}}function er(e){try{$n(e,{});return}catch(t){try{i.unlinkSync(e);return}catch(e){if(e?.code===`ENOENT`)return;throw t}}}function tr(e,t){if(!e)return;let r=o.dirname(process.execPath),i=n(`openclaw`,[`message`,`send`,`--channel`,`feishu`,`--target`,e,`--message`,t],{stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,PATH:`${r}:${process.env.PATH||``}`}});i.stderr.on(`data`,()=>{}),i.on(`close`,()=>{}),i.unref()}function nr(e){return String(e??``).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,``).replace(/\s+/g,` `).trim()}function rr(e){let t=String(e??``).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,``).trim();if(!t)throw Error(`task 不能为空`);if(t.length>4e3)throw Error(`task 不能超过 4000 个字符`);return t}function ir(e){let t=nr(e);if(!ar(t))throw Error(`project_id 不合法: "${t}"`);return t}function ar(e){return Xn.test(e)&&!Zn.has(e)}function or(e){if(e==null||e===``)return;let t=nr(e);if(t!==`none`){if(!/^(user|chat|thread):\S+$/.test(t))throw Error(`target 不合法`);return t}}function sr(e,t){let n=K(e,t);if(i.existsSync(n))return n;let r=q(e,t);return i.existsSync(r)?r:n}function cr(e){let t=new Map,n=o.join(e,`app`);try{for(let e of i.readdirSync(n,{withFileTypes:!0}))!e.isDirectory()||!ar(e.name)||t.set(e.name,o.join(n,e.name))}catch{}try{for(let n of i.readdirSync(e,{withFileTypes:!0}))!n.isDirectory()||n.name===`app`||!ar(n.name)||t.has(n.name)||t.set(n.name,o.join(e,n.name))}catch{}return[...t.entries()].map(([e,t])=>({projectId:e,appCwd:t}))}function lr(e){try{return i.readFileSync(e,`utf8`).split(`
|
|
24
|
-
`).map(e=>e.trim()).filter(Boolean)}catch{return[]}}function
|
|
25
|
-
`).filter(Boolean),c=null;try{c=JSON.parse(i.readFileSync(o.join(r,`.spark`,`meta.json`),`utf8`))}catch{}let l=!!c?.finalText,u=s.slice(-20).map(
|
|
26
|
-
`);return{content:[{type:`text`,text:JSON.stringify({status:`ok`,project_id:e,lines:s.length,progress:u,delivery_ready:l,finalTextAvailable:l,note:`miaoda_check_progress 只用于查看进度,不能根据 appId 或进度文本推导预览链接;最终链接只以 subagent completion result 中的 output/finalText 为准。`})}]}}catch{return{content:[{type:`text`,text:JSON.stringify({status:`no_progress`,project_id:n.project_id,message:`暂无进度记录`,delivery_ready:!1,finalTextAvailable:!1,note:`miaoda_check_progress 只用于查看进度,不能根据 appId 或进度文本推导预览链接;最终链接只以 subagent completion result 中的 output/finalText 为准。`})}]}}}}}),e.registerTool(e=>{let t=J(e);return{name:`miaoda_write_reference`,label:`写入妙搭参考资料`,description:`将参考资料写入妙搭项目的 reference 目录,供 code agent 在生成时自行查阅。按 category 分类写入。mode=append(默认)追加,mode=replace 替换该 category 全部内容(用于反悔/调整场景)。`,parameters:{type:`object`,properties:{project_id:{type:`string`,description:`项目目录名`},category:{type:`string`,enum:[`research`,`design`,`feedback`],description:`资料类别:research(调研结果)、design(设计要求)、feedback(用户反馈)`},content:{type:`string`,description:`参考资料内容(Markdown 格式,摘要+关键原文引用)`},filename:{type:`string`,description:`可选文件名(不含扩展名)`},mode:{type:`string`,enum:[`append`,`replace`],description:`写入模式:append(追加,默认)、replace(替换该 category 全部内容)`}},required:[`project_id`,`category`,`content`]},async execute(e,n){try{let e=ir(n.project_id);if(!Sn.includes(n.category))throw Error(`category 不合法,必须是 ${Sn.join(`、`)} 之一`);let r=n.content?.trim();if(!r)throw Error(`content 不能为空`);if(r.length>5e4)throw Error(`content 不能超过 50000 个字符`);let i=n.mode===`replace`?`replace`:`append`,a=sr(t.workspaceDir,e),o=await Dn({appCwd:a,category:n.category,content:r,filename:n.filename,mode:i}),s=await On(a);return{content:[{type:`text`,text:JSON.stringify({status:`ok`,...o,summary:s},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({status:`error`,error:e instanceof Error?e.message:String(e)})}]}}}}});let u=3600*1e3;e.registerTool(e=>{let t=J(e),s=e.config?.channels?.feishu,c=e.agentAccountId,l=(c?s?.accounts?.[c]:void 0)?.appId??s?.appId;return n.info(`channelAppId resolved: ${l??`(none)`} (accountId=${c??`(none)`})`),{name:`miaoda_coding`,label:`妙搭`,description:`创建或修改妙搭应用/网页。只接受生成指令,不接受搜索/调研等任务。如有参考资料,应事先通过 miaoda_write_reference 写入 reference 目录。修改已有项目时必须先调 list_projects 获取 project_id。返回结构化 JSON(status/appId/finalText/output/meta)。`,parameters:{type:`object`,properties:{generation_request:{type:`string`,description:`生成指令(如'做一个学习网站,包含章节、题库、测验')`},project_id:{type:`string`,description:`本地项目目录名,仅允许小写字母、数字和短横线`},target:{type:`string`,description:`飞书消息推送目标:单聊用 user:ou_xxx,群聊用 chat:oc_xxx,非飞书渠道传 none`}},required:[`generation_request`,`project_id`,`target`]},async execute(s,c){let d=r();try{let r=Date.now(),s=rr(c.generation_request),f=ir(c.project_id),p=or(c.target),m=process.env.FORCE_AUTHN_INNERAPI_DOMAIN,h=sr(t.workspaceDir,f);i.mkdirSync(h,{recursive:!0});let g=!mr(h),_={traceId:d,projectId:f,isNew:g,agentId:t.agentId,domain:m,sessionKey:e?.sessionKey};n.info(`miaoda_coding called (project=${f}, isNew=${g}, traceId=${d})`),$({..._,event:`start`,message:`miaoda_coding started for ${f}`,extra:{target:p??`none`}});let v=o.join(h,`.spark`,`delivery.json`);try{er(v)}catch(e){throw n.error(`failed to reset delivery marker (project=${f}, traceId=${d}): ${String(e)}`),$({..._,event:`miaoda_coding_delivery_marker_reset_failed`,message:`aborting run — unable to establish clean delivery.json state`,level:`error`,extra:{error:String(e)}}),Error(`无法初始化投递状态文件: ${String(e)}`)}g&&$({..._,event:`create_start`,message:`createSubApp started for ${f}`});let y=await kn(h)?`工作目录下有 reference/ 目录,包含参考资料,请先查阅再开始工作。\n\n${s}`:s,b=o.join(h,`.agent`);if(!i.existsSync(b)){let e=G(W());if(i.existsSync(e))try{i.symlinkSync(e,b)}catch{}}let x=[],S,C=!1,w,T,E,D,O,k,A=!1,j=null,M=g?Date.now():void 0,N=g?void 0:Date.now(),P=new AbortController,F=setTimeout(()=>P.abort(),u);try{for await(let e of xn({cwd:h,rootDir:W(),task:y,requestText:s,traceId:d,agentId:t.agentId,channelAppId:l,signal:P.signal,onReconnect:(e,t)=>{n.warn(`stream reconnect (project=${f}, attempt=${e}, lastEventId=${t??`none`}, traceId=${d})`),$({..._,event:`stream_reconnect`,message:`stream reconnect for ${f}`,level:`warn`,extra:{attempt:e,last_event_id:t??`none`}})},onStreamFailed:e=>{n.error(`stream failed (project=${f}, traceId=${d}): ${e}`),$({..._,event:`stream_failed`,message:String(e),level:`error`})}})){if(`logId`in e&&e.logId&&x.push(e.logId),a.verbose&&p)switch(e.type){case`app_created`:tr(p,`应用已创建(appId: ${e.appId})`);break;case`failed`:tr(p,`处理失败: ${e.error}`);break}if(e.type===`completed`){let t=e.terminalReason??`completed`;j={appId:e.appId,finalText:e.finalText},w=t,T=e.sseEventCount,E=e.reconnectCount,D=e.finishReasonRaw,O=e.errorCodeRaw,k=e.lastEventId,Jn({..._,requestName:`stream_chat`,status:`ok`,appId:e.appId,logId:e.logId,phase:`stream`,durationMs:N?Date.now()-N:void 0,terminalReason:t,sseEventCount:e.sseEventCount,reconnectCount:e.reconnectCount}),$({..._,event:`stream_completed`,message:`streamChat completed for ${f}`,appId:e.appId,extra:{log_id:e.logId??`none`}}),$({..._,event:`stream_terminal`,message:`stream terminal: ${t}`,appId:e.appId,extra:{terminal_reason:t,finish_reason_raw:e.finishReasonRaw??`none`,last_event_id:e.lastEventId??`none`,reconnect_count:e.reconnectCount??0,sse_event_count:e.sseEventCount??0,log_id:e.logId??`none`}})}if(e.type===`app_created`&&(Jn({..._,requestName:`create_sub_app`,status:`ok`,appId:e.appId,logId:e.logId,phase:`create`,durationMs:M?Date.now()-M:void 0}),N=Date.now(),$({..._,event:`create_succeeded`,message:`createSubApp completed for ${f}`,appId:e.appId,extra:{log_id:e.logId,conversation_id:e.conversationId??`none`}})),e.type===`failed`){let t=e.terminalReason??(e.retryable?`stream_interrupted`:`service_failed`);if(S=e.error,C=e.retryable??!1,w=t,T=e.sseEventCount??T,E=e.reconnectCount??E,D=e.finishReasonRaw??D,O=e.errorCodeRaw??O,k=e.lastEventId??k,e.phase===`pre-create`){n.error(`pre-create validation failed (project=${f}): ${e.error}`),clearTimeout(F),qn({..._,status:`error`,phase:`pre-create`,appId:null,durationMs:Date.now()-r}),$({..._,event:`pre_create_validation_failed`,message:e.error,level:`error`,phase:`pre-create`});let t={status:`error`,project_id:f,appId:null,error:e.error,meta:null,hint:`这是运行环境配置问题,不是用户操作失误。直接将 error 字段内容告知用户,并说明需要联系管理员修复配置;不要建议换 project_id,不要重试`};return{content:[{type:`text`,text:JSON.stringify(t)}]}}if(e.phase===`create`){n.error(`createSubApp failed (project=${f}, traceId=${d}): ${e.error}`);let t=!!p;if(p){let t=e.userFacing?e.error:`createSubApp 失败: ${e.error}`;n.info(`delivering create error via feishu (project=${f}, target=${p}, traceId=${d})`),tr(p,t)}else n.warn(`create failed but no target for feishu delivery (project=${f}, traceId=${d})`);let i=e.userFacing?{status:`error`,project_id:f,appId:null,meta:null,logIds:x.length?x:void 0,hint:t?`创建失败,详情已通过飞书发送给用户,不要重复发送错误内容`:`创建失败,将 error 字段的内容原样发送给用户,不要改写、不要删减、不要重试`,error:t?void 0:e.error}:{status:`error`,project_id:f,appId:null,error:e.error,meta:null,logIds:x.length?x:void 0,hint:t?`createSubApp 失败,错误已通过飞书发送。根据 error 内容用通俗语言告诉用户具体原因,不要重试`:`createSubApp 失败,根据 error 内容用通俗语言告诉用户具体原因,不要重试`};return qn({..._,status:`error`,phase:`create`,appId:null,durationMs:Date.now()-r}),Jn({..._,requestName:`create_sub_app`,status:`error`,appId:null,logId:e.logId,phase:`create`,durationMs:M?Date.now()-M:void 0,errorType:e.userFacing?`user_facing`:`request_failed`}),$({..._,event:`create_failed`,message:e.error,level:`error`,phase:`create`,extra:{delivered:t,log_id:e.logId??`none`,user_facing:e.userFacing??!1}}),t&&$({..._,event:`delivery_sent`,message:`create failure delivered via feishu`,level:`info`,extra:{target:p,delivery_type:`create_error`}}),{content:[{type:`text`,text:JSON.stringify(i)}]}}e.phase===`stream`&&(Jn({..._,requestName:`stream_chat`,status:`error`,appId:e.appId??j?.appId??null,logId:e.logId,phase:`stream`,durationMs:N?Date.now()-N:void 0,errorType:Gn(t)??(e.retryable?`stream_interrupted`:`service_failed`),terminalReason:t,errorCode:e.errorCodeRaw,sseEventCount:e.sseEventCount,reconnectCount:e.reconnectCount}),$({..._,event:`stream_terminal`,message:`stream terminal: ${t}`,level:Kn(t)?`info`:`error`,appId:e.appId??j?.appId??null,extra:{terminal_reason:t,finish_reason_raw:e.finishReasonRaw??`none`,error_code_raw:e.errorCodeRaw??`none`,last_event_id:e.lastEventId??`none`,reconnect_count:e.reconnectCount??0,sse_event_count:e.sseEventCount??0,log_id:e.logId??`none`}}))}}}catch(e){if(!P.signal.aborted)throw e}finally{clearTimeout(F)}A=P.signal.aborted;let I=null;try{I=JSON.parse(i.readFileSync(o.join(h,`.spark`,`meta.json`),`utf8`))}catch{}let L={status:A?`timeout`:S?`error`:`ok`,project_id:f,appId:j?.appId??I?.appId??null,finalText:j?.finalText??I?.finalText,output:j?.finalText??I?.finalText,logIds:x.length?x:void 0,meta:I};if(n.info(`miaoda_coding done (project=${f}, status=${L.status}, logIds=${x.join(`,`)}, traceId=${d})`),qn({..._,status:L.status,projectId:f,appId:L.appId,durationMs:Date.now()-r,phase:L.status===`ok`||w?`stream`:void 0,errorType:Gn(w),terminalReason:w,errorCode:O,sseEventCount:T,reconnectCount:E}),$({..._,event:`task_done`,message:`miaoda_coding completed for ${f}`,status:L.status,appId:L.appId,extra:{last_log_id:x.at(-1)??`none`,log_id_count:x.length,terminal_reason:w??`none`,finish_reason_raw:D??`none`,error_code_raw:O??`none`,last_event_id:k??`none`}}),A?(L.error=`执行超时(${u/1e3}秒)`,L.retryable=!0,L.hint=`执行超时,任务可能仍在后台运行。建议先调用 miaoda_check_progress 查看进度,再决定是否重试`):S&&(L.error=S,C&&(L.retryable=!0,L.hint=`网络连接中断,任务可能已部分完成。建议先调用 miaoda_check_progress 查看当前状态,再决定下一步`)),L.status===`ok`&&!p&&(n.warn(`delivery skipped: target is missing (project=${f}, traceId=${d})`),$({..._,event:`delivery_skipped`,message:`preview link delivery skipped because target is missing (subagent passed none/empty)`,level:`warn`,appId:L.appId,extra:{reason:`missing_target`}})),p&&L.status===`ok`){let e=I?.appUrl;if(n.info(`delivery check (project=${f}, target=${p}, appUrl=${e??`missing`}, traceId=${d})`),typeof e==`string`&&e.trim()){let t=e.includes(`?`)?`&`:`?`,r=`${e.trim()}${t}mode=sidebar-semi`;tr(p,`**[${r}](${r})**`),n.info(`delivery sent (project=${f}, url=${r}, traceId=${d})`),$({..._,event:`delivery_sent`,message:`preview link delivered via feishu`,level:`info`,appId:L.appId,extra:{target:p,preview_url:r,delivery_type:`preview_link`}});try{$n(v,{deliveredAt:Date.now(),deliveredUrl:r,deliveredForTrace:d}),$({..._,event:`miaoda_coding_delivery_marker_written`,message:`delivery.json recorded successful feishu preview-link delivery`,level:`info`,appId:L.appId,extra:{preview_url:r}})}catch(e){n.warn(`failed to write delivery marker (project=${f}, traceId=${d}): ${String(e)}`),$({..._,event:`miaoda_coding_delivery_marker_write_failed`,message:`failed to write delivery.json after successful feishu delivery`,level:`warn`,appId:L.appId,extra:{error:String(e),preview_url:r}})}L.hint=`预览链接已自动发送给用户,announce 时不要再带预览链接`}else n.warn(`delivery skipped: no appUrl in meta.json (project=${f}, traceId=${d})`),$({..._,event:`delivery_skipped`,message:`preview link delivery skipped because appUrl is missing`,level:`warn`,appId:L.appId,extra:{target:p,reason:`missing_app_url`}})}return{content:[{type:`text`,text:JSON.stringify(L,null,2)}]}}catch(e){return Yn({error:e instanceof Error?e.message:String(e),event:`top_level_error`,traceId:d,projectId:c.project_id,agentId:t.agentId,domain:process.env.FORCE_AUTHN_INNERAPI_DOMAIN}),{content:[{type:`text`,text:JSON.stringify({status:`error`,error:e instanceof Error?e.message:String(e)})}]}}}}}),e.registerService({id:`miaoda-coding-config`,async start(e){a=Qn(e)},async stop(){}})}};export{hr as default};
|
|
23
|
+
var a=function(){return a=Object.assign||function(e){for(var t,n=1,r=arguments.length;n<r;n++)for(var i in t=arguments[n],t)Object.prototype.hasOwnProperty.call(t,i)&&(e[i]=t[i]);return e},a.apply(this,arguments)};function o(e){var t=typeof Symbol==`function`&&Symbol.iterator,n=t&&e[t],r=0;if(n)return n.call(e);if(e&&typeof e.length==`number`)return{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}};throw TypeError(t?`Object is not iterable.`:`Symbol.iterator is not defined.`)}function s(e,t){var n=typeof Symbol==`function`&&e[Symbol.iterator];if(!n)return e;var r=n.call(e),i,a=[],o;try{for(;(t===void 0||t-- >0)&&!(i=r.next()).done;)a.push(i.value)}catch(e){o={error:e}}finally{try{i&&!i.done&&(n=r.return)&&n.call(r)}finally{if(o)throw o.error}}return a}function c(e,t,n){if(n||arguments.length===2)for(var r=0,i=t.length,a;r<i;r++)(a||!(r in t))&&(a||=Array.prototype.slice.call(t,0,r),a[r]=t[r]);return e.concat(a||Array.prototype.slice.call(t))}var l=function(){return{}};function u(e){return e}function d(e){return typeof e==`object`&&!!e}var f=Object.prototype;function p(e){return f.toString.call(e)===`[object Array]`}function m(e){return typeof e==`boolean`}function h(e){return typeof e==`number`}function g(e){return typeof e==`string`}function _(e,t){if(!p(e)||e.length===0)return!1;for(var n=0;n<e.length;){if(e[n]===t)return!0;n++}return!1}var v=function(e,t){if(!p(e))return e;var n=e.indexOf(t);if(n>=0){var r=e.slice();return r.splice(n,1),r}return e},y=function(e,t,n){for(var r,i,a=s(t.split(`.`)),o=a[0],c=a.slice(1);e&&c.length>0;)e=e[o],r=c,i=s(r),o=i[0],c=i.slice(1);if(e)return n(e,o)};function b(e){try{return g(e)?e:JSON.stringify(e)}catch(e){return`[FAILED_TO_STRINGIFY]:`+String(e)}}function x(){var e={},t={},n={set:function(r,i){return e[r]=i,t[r]=b(i),n},merge:function(r){return e=a(a({},e),r),Object.keys(r).forEach(function(e){t[e]=b(r[e])}),n},delete:function(r){return delete e[r],delete t[r],n},clear:function(){return e={},t={},n},get:function(e){return t[e]},toString:function(){return a({},t)}};return n}var S=function(){return``.padStart?function(e,t){return t===void 0&&(t=8),e.padStart(t,` `)}:function(e){return e}}(),C=0,w=function(){var e=[...arguments];console.error.apply(console,c([`[SDK]`,Date.now(),S(``+ C++)],s(e),!1))},T=0,E=function(){var e=[...arguments];console.warn.apply(console,c([`[SDK]`,Date.now(),S(``+ T++)],s(e),!1))},D=function(e){return Math.random()<Number(e)},O=function(e,t){return e<Number(t)},k=function(e){return function(t){for(var n=t,r=0;r<e.length&&n;r++)try{n=e[r](n)}catch(e){w(e)}return n}};function A(){for(var e=Array(16),t=0,n=0;n<16;n++)n&3||(t=Math.random()*4294967296),e[n]=t>>>((n&3)<<3)&255;return e}function j(e){for(var t=[],n=0;n<256;++n)t[n]=(n+256).toString(16).substr(1);var r=0,i=t;return[i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],`-`,i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]],i[e[r++]]].join(``)}function M(){var e=A();return e[6]=e[6]&15|64,e[8]=e[8]&63|128,j(e)}function N(){var e=!1,t={},n=function(e){e.length&&e.forEach(function(e){try{e()}catch{}}),e.length=0},r=function(e){t[e]&&t[e].forEach(function(e){n(e[1])}),t[e]=void 0};return{set:function(r,i,a){t[r]?t[r].push([i,a]):t[r]=[[i,a]],e&&n(a)},has:function(e){return!!t[e]},remove:r,removeByEvType:function(e){Object.keys(t).forEach(function(r){t[r]&&t[r].forEach(function(t){t[0]===e&&n(t[1])})})},clear:function(){e=!0,Object.keys(t).forEach(function(e){r(e)})}}}var P=500,F=50;function I(e,t,n){if(t.push(n),!(t.length<P)){var r=t.splice(0,F);e.savePreStartDataToDb&&e.savePreStartDataToDb(r)}}function L(e){var t=e.getPreStartQueue();t.forEach(function(t){return e.build(t)}),t.length=0}var R=[`init`,`start`,`config`,`beforeDestroy`,`provide`,`beforeReport`,`report`,`beforeBuild`,`build`,`beforeSend`,`send`,`beforeConfig`];function z(e){var t=e.builder,n=e.createSender,r=e.createDefaultConfig,i=e.createConfigManager,a=e.userConfigNormalizer,o=e.initConfigNormalizer,l=e.validateInitConfig,u,f,p={};R.forEach(function(e){return p[e]=[]});var m=!1,h=!1,g=!1,y=[],b=[],x=N(),S={getBuilder:function(){return t},getSender:function(){return u},getPreStartQueue:function(){return y},init:function(e){if(m){E(`already inited`);return}if(e&&d(e)&&l(e)){var t=r(e);if(!t)throw Error(`defaultConfig missing`);var a=o(e);if(f=i(t),f.setConfig(a),f.onChange(function(){C(`config`)}),u=n(f.getConfig()),!u)throw Error(`sender missing`);m=!0,C(`init`,!0)}else throw Error(`invalid InitConfig, init failed`)},set:function(e){m&&e&&d(e)&&(C(`beforeConfig`,!1,e),f?.setConfig(e))},config:function(e){if(m)return e&&d(e)&&(C(`beforeConfig`,!1,e),f?.setConfig(a(e))),f?.getConfig()},provide:function(e,t){if(_(b,e)){E(`cannot provide `+e+`, reserved`);return}S[e]=t,C(`provide`,!1,e)},start:function(){m&&(h||f?.onReady(function(){h=!0,C(`start`,!0),L(S)}))},report:function(e){if(e){var t=k(p.beforeReport)(e);if(t){var n=k(p.report)(t);n&&(h?this.build(n):I(S,y,n))}}},build:function(e){if(h){var n=k(p.beforeBuild)(e);if(n){var r=t.build(n);if(r){var i=k(p.build)(r);i&&this.send(i)}}}},send:function(e){if(h){var t=k(p.beforeSend)(e);t&&(u.send(t),C(`send`,!1,t))}},destroy:function(){x.clear(),g=!0,y.length=0,C(`beforeDestroy`,!0)},on:function(e,t){if(e===`init`&&m||e===`start`&&h||e===`beforeDestroy`&&g)try{t()}catch{}else p[e]&&p[e].push(t)},off:function(e,t){p[e]&&(p[e]=v(p[e],t))},destroyAgent:x};return b=Object.keys(S),S;function C(e,t){t===void 0&&(t=!1);var n=[...arguments].slice(2);p[e].forEach(function(e){try{e.apply(void 0,c([],s(n),!1))}catch{}}),t&&(p[e].length=0)}}var B=function(e){var t=x();e.provide(`context`,t),e.on(`report`,function(e){return e.extra||={},e.extra.context=t.toString(),e})};function V(e,t){e.on(`init`,function(){var n=[],r=function(r){r.forEach(function(r){var i=r.name;_(n,i)||(n.push(i),r.setup(e),t&&t(i,r.setup),e.destroyAgent.set(i,i,[function(){n=v(n,i),r.tearDown&&r.tearDown()}]))})};e.provide(`applyIntegrations`,r);var i=e.config();i&&i.integrations&&r(i.integrations)})}var H=function(e){try{typeof window==`object`&&d(window)&&window.__SLARDAR_DEVTOOLS_GLOBAL_HOOK__&&window.__SLARDAR_DEVTOOLS_GLOBAL_HOOK__.push(e)}catch{}},U=function(){return Date.now()};function W(){if(typeof window==`object`&&d(window))return window}var G=function(e){if(e)return e.__SLARDAR_REGISTRY__||={Slardar:{plugins:[],errors:[],subject:{}}},e.__SLARDAR_REGISTRY__.Slardar},K=function(){var e=[...arguments],t=G(W());t&&(t.errors||=[],t.errors.push(e))},q=function(e){var t;if(!(typeof window!=`object`||!window.__perfsee__)){var n={};return(t=Error.captureStackTrace)==null||t.call(Error,n,e),n.stack}},J=`custom`,ee=`event`,Y=`log`,X=function(e){if(!(!e||!d(e))&&!(!e.name||!g(e.name))){var t={name:e.name,type:ee};if(`metrics`in e&&d(e.metrics)){var n=e.metrics,r={};for(var i in n)h(n[i])&&(r[i]=n[i]);t.metrics=r}if(`categories`in e&&d(e.categories)){var a=e.categories,o={};for(var i in a)o[i]=b(a[i]);t.categories=o}return`attached_log`in e&&g(e.attached_log)&&(t.attached_log=e.attached_log),t}},Z=function(e){if(!(!e||!d(e))&&!(!e.content||!g(e.content))){var t=e.content,n={content:b(t),type:Y,level:`info`};if(`level`in e&&(n.level=e.level),`extra`in e&&d(e.extra)){var r=e.extra,i={},a={};for(var o in r)h(r[o])?i[o]=r[o]:a[o]=b(r[o]);n.metrics=i,n.categories=a}return`attached_log`in e&&g(e.attached_log)&&(n.attached_log=e.attached_log),n}},te=function(e){var t=function(n){var r=X(n);if(r){var i=q(t);i&&(r.stacks=i),e.report({ev_type:J,payload:r,extra:{timestamp:U()}})}};e.provide(`sendEvent`,t),e.provide(`sendLog`,function(t){var n=Z(t);n&&e.report({ev_type:J,payload:n,extra:{timestamp:U()}})})},ne=function(e,t){var n=e.common||{};return n.sample_rate=t,e.common=n,e},re=function(e,t,n,r,i){return e?(function(e){return function(){return e}})(i(r,t)):function(){return n(t)}},ie=function(e,t){return e.map(function(e){switch(t){case`number`:return Number(e);case`boolean`:return e===`1`;default:return String(e)}})},ae=function(e,t,n){switch(n){case`eq`:return _(t,e);case`neq`:return!_(t,e);case`gt`:return e>t[0];case`gte`:return e>=t[0];case`lt`:return e<t[0];case`lte`:return e<=t[0];case`regex`:return!!e.match(new RegExp(t.join(`|`)));case`not_regex`:return!e.match(new RegExp(t.join(`|`)));default:return!1}},oe=function(e,t,n,r){var i=y(e,t,function(e,t){return e[t]});return i===void 0?!1:ae(i,ie(r,m(i)?`bool`:h(i)?`number`:`string`),n)},se=function(e,t){try{return t.type===`rule`?oe(e,t.field,t.op,t.values):t.type===`and`?t.children.every(function(t){return se(e,t)}):t.children.some(function(t){return se(e,t)})}catch(e){return K(e),!1}},ce=function(e,t,n,r,i,a){var o={};return Object.keys(e).forEach(function(s){var c=e[s],l=c.enable,u=c.sample_rate,d=c.conditional_sample_rules;l?(o[s]={enable:l,sample_rate:u,effectiveSampleRate:u*n,hit:re(t,u,r,i,a)},d&&(o[s].conditional_hit_rules=d.map(function(e){var o=e.sample_rate,s=e.filter;return{sample_rate:o,hit:re(t,o,r,i,a),effectiveSampleRate:o*n,filter:s}}))):o[s]={enable:l,hit:function(){return!1},sample_rate:0,effectiveSampleRate:0}}),o},le=function(e,t,n,r,i){if(!t)return u;var a=t.sample_rate,o=t.include_users,s=t.sample_granularity,c=t.rules,l=t.r,d=l===void 0?Math.random():l;if(_(o,e))return function(e){return ne(e,1)};var f=s===`session`,p=re(f,a,n,d,r),m=ce(c,f,a,n,d,r);return function(e){if(!p())return f&&i[0](),!1;if(!(e.ev_type in m))return ne(e,a);if(!m[e.ev_type].enable)return f&&i[1](e.ev_type),!1;if(e.common?.sample_rate)return e;var t=m[e.ev_type],n=t.conditional_hit_rules;if(n){for(var r=0;r<n.length;r++)if(se(e,n[r].filter))return n[r].hit()?ne(e,n[r].effectiveSampleRate):!1}return t.hit()?ne(e,t.effectiveSampleRate):(!(n&&n.length)&&f&&i[1](e.ev_type),!1)}},ue=function(e){e.on(`start`,function(){var t=e.config(),n=t.userId,r=t.sample,i=le(n,r,D,O,[function(){e.destroy()},function(t){e.destroyAgent.removeByEvType(t)}]);e.on(`build`,i)})},de={build:function(e){return{ev_type:e.ev_type,payload:e.payload,common:a(a({},e.extra||{}),e.overrides||{})}}},fe=`mon.zijieapi.com`,pe=fe,me=`2.1.8`,he=`SDK_BASE`,ge=`/monitor_web/settings/browser-settings`,_e=`/monitor_browser/collect/batch/`,ve={sample_rate:1,include_users:[],sample_granularity:`session`,rules:{}},ye=20,be=`session`;function xe(e){var t,n,r=[`userId`,`deviceId`,`sessionId`,`env`];try{for(var i=o(r),a=i.next();!a.done;a=i.next()){var s=a.value;e[s]||delete e[s]}}catch(e){t={error:e}}finally{try{a&&!a.done&&(n=i.return)&&n.call(i)}finally{if(t)throw t.error}}return e}function Se(e){return xe(a({},e))}function Ce(e){return d(e)&&`bid`in e&&`transport`in e}function we(e){return xe(a({},e))}function Te(e){if(!e)return{};var t=e.sample,n=e.timestamp,r=e.quota_rate,i=r===void 0?1:r;if(!t)return{};var a=t.sample_rate,o=t.sample_granularity,s=o===void 0?be:o,c=t.include_users,l=t.rules,u=l===void 0?[]:l;return{sample:{include_users:c,sample_rate:a*i,sample_granularity:s,rules:u.reduce(function(e,t){var n=t.name;return e[n]={enable:t.enable,sample_rate:t.sample_rate,conditional_sample_rules:t.conditional_sample_rules},e},{})},serverTimestamp:n}}var Ee=function(e,t){return t===void 0&&(t=_e),(e&&e.indexOf(`//`)>=0?``:`https://`)+e+t},De=function(e,t){return t===void 0&&(t=ge),(e&&e.indexOf(`//`)>=0?``:`https://`)+e+t},Oe=function(){return M()},ke=function(){return M()},Ae=function(e){return e+`_`+Date.now()},je=function(){return M()},Me=function(e){var t=e,n,r={},i,o,s=l,c=l;return{getConfig:function(){return t},setConfig:function(e){return r=a(a({},r),e||{}),u(),n||(n=e,t.useLocalConfig||!t.bid?(o={},s()):Ne(t.transport,t.domain,t.bid,function(e){i=e,d()})),t},onChange:function(e){c=e},onReady:function(e){s=e,o&&s()}};function u(){var n=a(a(a({},e),o||{}),r);n.sample=Pe(Pe(e.sample,o?.sample),r.sample),t=n,c()}function d(){o=Te(i),u(),s()}};function Ne(e,t,n,r){if(!e.get)return r({});e.get({withCredentials:!0,url:De(t)+`?bid=`+n+`&store=1`,success:function(e){r(e.data||{})},fail:function(){r({sample:{sample_rate:.001}})}})}function Pe(e,t){if(!e||!t)return e||t;var n=a(a({},e),t);return n.include_users=c(c([],s(e.include_users||[]),!1),s(t.include_users||[]),!1),n.rules=c(c([],s(Object.keys(e.rules||{})),!1),s(Object.keys(t.rules||{})),!1).reduce(function(n,r){return r in n||(r in(e.rules||{})&&r in(t.rules||{})?(n[r]=a(a({},e.rules[r]),t.rules[r]),n[r].conditional_sample_rules=c(c([],s(e.rules[r].conditional_sample_rules||[]),!1),s(t.rules[r].conditional_sample_rules||[]),!1)):n[r]=e.rules?.[r]||t.rules?.[r]),n},{}),n}var Fe=function(e,t){var n=t||{},r=n.version,i=n.name,o={url:``,protocol:``,domain:``,path:``,query:``,timestamp:Date.now(),sdk_version:r||me,sdk_name:i||he};return a(a({},e),{extra:a(a({},o),e.extra||{})})},Ie=function(e){e.on(`report`,function(t){return Fe(t,e.config())})},Le=function(e,t){var n={};return n.bid=t.bid,n.pid=t.pid,n.view_id=t.viewId,n.user_id=t.userId,n.device_id=t.deviceId,n.session_id=t.sessionId,n.release=t.release,n.env=t.env,a(a({},e),{extra:a(a({},n),e.extra||{})})},Re=function(e){e.on(`beforeBuild`,function(t){return Le(t,e.config())})};function ze(e){return i(e)}var Be=function(e){return{bid:``,pid:``,viewId:Ae(`_`),userId:Oe(),deviceId:ke(),sessionId:je(),domain:fe,release:``,env:`production`,sample:ve,plugins:{},transport:{get:l,post:l},useLocalConfig:!1}},Ve=function(e){var t=e===void 0?{}:e,n=t.createSender,r=n===void 0?function(e){return ze({size:ye,endpoint:Ee(e.domain),transport:e.transport})}:n,i=t.builder,a=i===void 0?de:i,o=t.createDefaultConfig,s=z({validateInitConfig:Ce,initConfigNormalizer:Se,userConfigNormalizer:we,createSender:r,builder:a,createDefaultConfig:o===void 0?Be:o,createConfigManager:Me});return B(s),Re(s),Ie(s),V(s),H(s),s},He=function(e){e===void 0&&(e={});var t=Ve(e);return ue(t),te(t),t},Ue=He();e.BATCH_REPORT_PATH=_e,e.CustomPlugin=te,e.DEFAULT_SAMPLE_CONFIG=ve,e.DEFAULT_SAMPLE_GRANULARITY=be,e.DEFAULT_SENDER_SIZE=ye,e.InjectConfigPlugin=Re,e.InjectEnvPlugin=Ie,e.REPORT_DOMAIN=fe,e.SDK_NAME=he,e.SDK_VERSION=me,e.SETTINGS_DOMAIN=pe,e.SETTINGS_PATH=ge,e.addConfigToReportEvent=Le,e.addEnvToSendEvent=Fe,e.builder=de,e.createBaseClient=He,e.createConfigManager=Me,e.createMinimalClient=Ve,e.default=Ue,e.getDefaultConfig=Be,e.getDefaultDeviceId=ke,e.getDefaultSessionId=je,e.getDefaultUserId=Oe,e.getReportUrl=Ee,e.getServerConfig=Ne,e.getSettingsUrl=De,e.getViewId=Ae,e.mergeSampleConfig=Pe,e.normalizeInitConfig=Se,e.normalizeStrictFields=xe,e.normalizeUserConfig=we,e.parseServerConfig=Te,e.validateInitConfig=Ce}))(),1);function zn(e){return!e||typeof e!=`object`||!(`default`in e)?e:e.default}function Bn(e){let t=zn(e);return zn(t)??t??e??{}}const Vn=Bn(Rn.default);let Hn=!1;function Un(){if(!Hn)try{let e=Vt();Vn.init({bid:`apaas_miaoda`,release:String(e.version??`unknown`),env:Ln(),transport:{get:({url:e,success:t,fail:n})=>fetch(e).then(e=>e.json()).then(e=>t?.(e)).catch(e=>n?.(e)),post:({url:e,data:t})=>{let n=typeof t==`string`?t:JSON.stringify(t);return fetch(e,{method:`POST`,headers:{"Content-Type":`application/json`},body:n}).catch(()=>{})}}}),Vn.start(),Hn=!0}catch{}}function Wn(e){if(e!==void 0)return String(e)}function Gn(e){let t={source:`node-plugin`},n=e.traceId,r=e.projectId,i=Wn(e.isNew),a=e.appId,o=e.agentId,s=e.sessionKey;return n&&(t.trace_id=n),r&&(t.project_id=r),i&&(t.is_new=i),a&&(t.app_id=a),o&&(t.agent_id=o),e.domain&&(t.domain=e.domain),s&&(t.session_key=s),e.refer&&(t.refer=e.refer),t}function Kn(e,t){let n={...e};for(let[e,r]of Object.entries(t??{}))r!=null&&(n[e]=typeof r==`boolean`?String(r):r);return n}function qn(e){switch(e){case`user_stopped`:return`user_stopped`;case`quota_exceeded`:return`quota_exceeded`;case`service_failed`:return`service_failed`;case`stream_interrupted`:return`stream_interrupted`;default:return}}function Jn(e){return e===`user_stopped`||e===`quota_exceeded`}function Yn(e){try{let t={},n=Gn(e),r=e.durationMs,i=e.sseEventCount,a=e.reconnectCount,o=e.createDurationMs;typeof r==`number`&&(t.duration_ms=r),typeof i==`number`&&(t.sse_event_count=i),typeof a==`number`&&(t.reconnect_count=a),typeof o==`number`&&(t.create_duration_ms=o);let s={...n,status:e.status,is_new:n.is_new??`false`},c=e.errorType;e.phase&&(s.phase=e.phase),c&&(s.error_type=c.slice(0,100)),e.terminalReason&&(s.terminal_reason=e.terminalReason.slice(0,100)),e.errorCode&&(s.error_code=e.errorCode.slice(0,100)),Vn.sendEvent?.({name:`miaoda_coding_task`,metrics:t,categories:s})}catch{}}function Xn(e){try{let t={},n=Gn(e);typeof e.durationMs==`number`&&(t.duration_ms=e.durationMs),typeof e.sseEventCount==`number`&&(t.sse_event_count=e.sseEventCount),typeof e.reconnectCount==`number`&&(t.reconnect_count=e.reconnectCount);let r={...n,request_name:e.requestName,status:e.status};e.logId&&(r.log_id=e.logId),e.phase&&(r.phase=e.phase),e.errorType&&(r.error_type=e.errorType.slice(0,100)),e.terminalReason&&(r.terminal_reason=e.terminalReason.slice(0,100)),e.errorCode&&(r.error_code=e.errorCode.slice(0,100)),Vn.sendEvent?.({name:`miaoda_coding_request`,metrics:t,categories:r})}catch{}}function Zn(e){try{if(!e.projectId)return;let t=Kn(Gn(e),{event:e.event,phase:e.phase}),n=e.logIds;n?.length&&(t.log_ids=n.join(`,`)),Vn.sendLog?.({content:e.error,level:`error`,extra:t})}catch{}}function $(e){try{let t=Kn(Gn(e),{event:e.event,phase:e.phase,status:e.status,...e.extra});Vn.sendLog?.({content:e.message,level:e.level??`info`,extra:t})}catch{}}const Qn=/^[a-z0-9][a-z0-9-]{0,63}$/,$n=new Set([`.`,`..`,`con`,`nul`,`prn`,`aux`]);function er(e){let t=e?.config?.plugins?.entries?.[`openclaw-extension-miaoda-coding`]?.config??{};return{verbose:t?.verbose===!0,hooks:{allowPromptInjection:t?.hooks?.allowPromptInjection!==!1}}}function tr(e,t){i.mkdirSync(o.dirname(e),{recursive:!0});let n=`${e}.tmp.${process.pid}.${Date.now()}`;try{i.writeFileSync(n,JSON.stringify(t,null,2)),i.renameSync(n,e)}catch(e){try{i.unlinkSync(n)}catch{}throw e}}function nr(e){try{tr(e,{});return}catch(t){try{i.unlinkSync(e);return}catch(e){if(e?.code===`ENOENT`)return;throw t}}}function rr(e,t){if(!e)return;let r=o.dirname(process.execPath),i=n(`openclaw`,[`message`,`send`,`--channel`,`feishu`,`--target`,e,`--message`,t],{stdio:[`ignore`,`ignore`,`pipe`],env:{...process.env,PATH:`${r}:${process.env.PATH||``}`}});i.stderr.on(`data`,()=>{}),i.on(`close`,()=>{}),i.unref()}function ir(e){return String(e??``).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,``).replace(/\s+/g,` `).trim()}function ar(e){let t=String(e??``).replace(/[\u0000-\u0008\u000B\u000C\u000E-\u001F\u007F]/g,``).trim();if(!t)throw Error(`task 不能为空`);if(t.length>4e3)throw Error(`task 不能超过 4000 个字符`);return t}function or(e){let t=ir(e);if(!sr(t))throw Error(`project_id 不合法: "${t}"`);return t}function sr(e){return Qn.test(e)&&!$n.has(e)}function cr(e){if(e==null||e===``)return;let t=ir(e);if(t!==`none`){if(!/^(user|chat|thread):\S+$/.test(t))throw Error(`target 不合法`);return t}}function lr(e,t){let n=K(e,t);if(i.existsSync(n))return n;let r=q(e,t);return i.existsSync(r)?r:n}function ur(e){let t=new Map,n=o.join(e,`app`);try{for(let e of i.readdirSync(n,{withFileTypes:!0}))!e.isDirectory()||!sr(e.name)||t.set(e.name,o.join(n,e.name))}catch{}try{for(let n of i.readdirSync(e,{withFileTypes:!0}))!n.isDirectory()||n.name===`app`||!sr(n.name)||t.has(n.name)||t.set(n.name,o.join(e,n.name))}catch{}return[...t.entries()].map(([e,t])=>({projectId:e,appCwd:t}))}function dr(e){try{return i.readFileSync(e,`utf8`).split(`
|
|
24
|
+
`).map(e=>e.trim()).filter(Boolean)}catch{return[]}}function fr(e){return e.replace(/^\[[^\]]+\]\s*/,``)}function pr(e){return e.replace(/应用已创建(appId:\s*[^)]+)/g,`应用已创建`)}function mr(e){return e.slice(-3).map(fr).map(pr).join(` | `)||`暂无进度记录`}function hr(e){let t=mr(e);return t.includes(`失败:`)?`failed`:t.includes(`处理完成`)?`completed`:t===`暂无进度记录`?`pending`:`running`}function gr(e){try{let t=JSON.parse(i.readFileSync(o.join(e,`.spark`,`meta.json`),`utf8`));return typeof t?.appId==`string`&&t.appId.trim().length>0}catch{return!1}}var _r={id:`openclaw-extension-miaoda-coding`,name:`妙搭`,description:`妙搭制品创建与修改`,register(e){let t=`[miaoda-coding]`,n={info:n=>e.logger.info?.(`${t} ${n}`),warn:n=>e.logger.warn?.(`${t} ${n}`),error:n=>e.logger.error?.(`${t} ${n}`)},a={verbose:!1,hooks:{allowPromptInjection:!0}},s=An({log:n});n.info(`plugin registered`),Un(),e.on(`session_start`,(e,t)=>{try{s.onSessionStart(e?.sessionId)}catch(e){n.warn(`session_start reset failed: ${String(e)}`)}});let c=new Set([`miaoda_coding`]),l=new Set([`miaoda_check_progress`]);e.on(`before_tool_call`,(e,t)=>{let r=e.toolName,i=t?.sessionKey??``,a=i.toLowerCase().split(`:`).includes(`subagent`);if(c.has(r)&&!a)return n.warn(`blocked ${r} from non-subagent session: ${i}`),{block:!0,blockReason:`${r} 只能由 subagent 调用。请通过 sessions_spawn(runtime="subagent", mode="run") 派活,不要直接调用此工具。读 miaoda-coding skill 了解完整流程。`};if(l.has(r)&&a)return n.warn(`blocked ${r} from subagent session: ${i}`),{block:!0,blockReason:`${r} 不能由 subagent 调用。subagent 不应直接操作参考资料或查询进度。`}}),e.on(`before_prompt_build`,async(e,t)=>{if(!er(t).hooks.allowPromptInjection)return;let r={prependSystemContext:[`【硬规则 — 妙搭】`,`当用户要求创建或修改应用、网页、页面时,必须通过 sessions_spawn(runtime="subagent", mode="run") 交给妙搭。`,`读 miaoda-coding skill 后严格按指示操作。只传 runtime、mode、task 三个参数,不要传 streamTo/sandbox 等。`,`如果需求在支持范围内并且已经派活给 subagent,最终回复只发一条简短总结;是否附上预览链接严格按 miaoda-coding skill 第 6 条(读 .spark/delivery.json 和 .spark/meta.json)判断,不要自行决定;不要把"不适用场景"的主站引导规则误用到正常交付场景。`,`绝对不要自己写代码或用 exec 生成文件。如果 sessions_spawn 调用本身返回错误,去掉多余参数后重试。如果 subagent 执行失败需要重试,generation_request 填"继续"(不要重复发完整需求),详见 skill 中的重试流程。`,`如果对话中有需要传递给 code agent 的上下文(研究结果、用户偏好等),先调 miaoda_write_reference 写入 reference 目录,再 spawn。用户反悔或需要替换之前的上下文时,使用 miaoda_write_reference 的 mode=replace。妙搭只做制品生成,不做研究。`,`不要用 sessions_history 读取子 agent 的 session,查进度用 miaoda_check_progress tool(仅限建应用场景,数据库操作等不要用)。`,`subagent 完成后只发一条总结消息,严禁发多条。是否带预览链接严格按 miaoda-coding skill 第 6 条的 delivery.json/meta.json 判断流程,不要自己决定。不要调 message tool。`].join(` `)};try{let e=await s.getSchemaSummary(t?.sessionId);e&&(r.appendSystemContext=e)}catch(e){n.error(`db schema injection threw unexpected error: ${String(e)}`)}return r}),e.registerTool(e=>{let t=J(e);return{name:`list_projects`,label:`列出妙搭项目`,description:`列出已创建的妙搭项目,返回 project_id、appId、updatedAt、finalText、status 和进度摘要。修改已有项目时必须先调此工具。`,parameters:{type:`object`,properties:{}},async execute(){let e=[];try{e=ur(t.workspaceDir).map(({projectId:e,appCwd:t})=>{let n=o.join(t,`.spark`,`meta.json`),r=o.join(t,`.spark`,`progress.txt`),a=null;try{a=JSON.parse(i.readFileSync(n,`utf8`))}catch{}let s=dr(r);return{project_id:e,appId:a?.appId??null,updatedAt:a?.updatedAt??null,finalText:a?.finalText??null,status:hr(s),progressSummary:mr(s)}})}catch{}return{content:[{type:`text`,text:JSON.stringify({projects:e},null,2)}]}}}}),e.registerTool(e=>{let t=J(e);return{name:`miaoda_check_progress`,label:`查看妙搭应用生成进度`,description:`查看通过 miaoda_coding 创建的应用的生成进度。仅用于 sessions_spawn 派活建应用后查看进度,不适用于数据库操作等其他场景。`,parameters:{type:`object`,properties:{project_id:{type:`string`,description:`项目目录名(从 list_projects 获取)`}},required:[`project_id`]},async execute(e,n){try{let e=or(n.project_id),r=lr(t.workspaceDir,e),a=o.join(r,`.spark`,`progress.txt`),s=i.readFileSync(a,`utf8`).trim().split(`
|
|
25
|
+
`).filter(Boolean),c=null;try{c=JSON.parse(i.readFileSync(o.join(r,`.spark`,`meta.json`),`utf8`))}catch{}let l=!!c?.finalText,u=s.slice(-20).map(pr).join(`
|
|
26
|
+
`);return{content:[{type:`text`,text:JSON.stringify({status:`ok`,project_id:e,lines:s.length,progress:u,delivery_ready:l,finalTextAvailable:l,note:`miaoda_check_progress 只用于查看进度,不能根据 appId 或进度文本推导预览链接;最终链接只以 subagent completion result 中的 output/finalText 为准。`})}]}}catch{return{content:[{type:`text`,text:JSON.stringify({status:`no_progress`,project_id:n.project_id,message:`暂无进度记录`,delivery_ready:!1,finalTextAvailable:!1,note:`miaoda_check_progress 只用于查看进度,不能根据 appId 或进度文本推导预览链接;最终链接只以 subagent completion result 中的 output/finalText 为准。`})}]}}}}}),e.registerTool(e=>{let t=J(e);return{name:`miaoda_write_reference`,label:`写入妙搭参考资料`,description:`将参考资料写入妙搭项目的 reference 目录,供 code agent 在生成时自行查阅。按 category 分类写入。mode=append(默认)追加,mode=replace 替换该 category 全部内容(用于反悔/调整场景)。`,parameters:{type:`object`,properties:{project_id:{type:`string`,description:`项目目录名`},category:{type:`string`,enum:[`research`,`design`,`feedback`],description:`资料类别:research(调研结果)、design(设计要求)、feedback(用户反馈)`},content:{type:`string`,description:`参考资料内容(Markdown 格式,摘要+关键原文引用)`},filename:{type:`string`,description:`可选文件名(不含扩展名)`},mode:{type:`string`,enum:[`append`,`replace`],description:`写入模式:append(追加,默认)、replace(替换该 category 全部内容)`}},required:[`project_id`,`category`,`content`]},async execute(e,n){try{let e=or(n.project_id);if(!Sn.includes(n.category))throw Error(`category 不合法,必须是 ${Sn.join(`、`)} 之一`);let r=n.content?.trim();if(!r)throw Error(`content 不能为空`);if(r.length>5e4)throw Error(`content 不能超过 50000 个字符`);let i=n.mode===`replace`?`replace`:`append`,a=lr(t.workspaceDir,e),o=await Dn({appCwd:a,category:n.category,content:r,filename:n.filename,mode:i}),s=await On(a);return{content:[{type:`text`,text:JSON.stringify({status:`ok`,...o,summary:s},null,2)}]}}catch(e){return{content:[{type:`text`,text:JSON.stringify({status:`error`,error:e instanceof Error?e.message:String(e)})}]}}}}});let u=3600*1e3;e.registerTool(e=>{let t=J(e),s=e.config?.channels?.feishu,c=e.agentAccountId,l=(c?s?.accounts?.[c]:void 0)?.appId??s?.appId;return n.info(`channelAppId resolved: ${l??`(none)`} (accountId=${c??`(none)`})`),{name:`miaoda_coding`,label:`妙搭`,description:`创建或修改妙搭应用/网页。只接受生成指令,不接受搜索/调研等任务。如有参考资料,应事先通过 miaoda_write_reference 写入 reference 目录。修改已有项目时必须先调 list_projects 获取 project_id。返回结构化 JSON(status/appId/finalText/output/meta)。`,parameters:{type:`object`,properties:{generation_request:{type:`string`,description:`生成指令(如'做一个学习网站,包含章节、题库、测验')`},project_id:{type:`string`,description:`本地项目目录名,仅允许小写字母、数字和短横线`},target:{type:`string`,description:`飞书消息推送目标:单聊用 user:ou_xxx,群聊用 chat:oc_xxx,非飞书渠道传 none`}},required:[`generation_request`,`project_id`,`target`]},async execute(s,c){let d=r();try{let r=Date.now(),s=ar(c.generation_request),f=or(c.project_id),p=cr(c.target),m=process.env.FORCE_AUTHN_INNERAPI_DOMAIN,h=lr(t.workspaceDir,f);i.mkdirSync(h,{recursive:!0});let g=!gr(h),_={traceId:d,projectId:f,isNew:g,agentId:t.agentId,domain:m,sessionKey:e?.sessionKey};n.info(`miaoda_coding called (project=${f}, isNew=${g}, traceId=${d})`),$({..._,event:`start`,message:`miaoda_coding started for ${f}`,extra:{target:p??`none`}});let v=o.join(h,`.spark`,`delivery.json`);try{nr(v)}catch(e){throw n.error(`failed to reset delivery marker (project=${f}, traceId=${d}): ${String(e)}`),$({..._,event:`miaoda_coding_delivery_marker_reset_failed`,message:`aborting run — unable to establish clean delivery.json state`,level:`error`,extra:{error:String(e)}}),Error(`无法初始化投递状态文件: ${String(e)}`)}g&&$({..._,event:`create_start`,message:`createSubApp started for ${f}`});let y=await kn(h)?`工作目录下有 reference/ 目录,包含参考资料,请先查阅再开始工作。\n\n${s}`:s,b=o.join(h,`.agent`);if(!i.existsSync(b)){let e=G(W());if(i.existsSync(e))try{i.symlinkSync(e,b)}catch{}}let x=[],S,C=!1,w,T,E,D,O,k,A=!1,j=null,M=g?Date.now():void 0,N=g?void 0:Date.now(),P=new AbortController,F=setTimeout(()=>P.abort(),u);try{for await(let e of xn({cwd:h,rootDir:W(),task:y,requestText:s,traceId:d,agentId:t.agentId,channelAppId:l,signal:P.signal,onReconnect:(e,t)=>{n.warn(`stream reconnect (project=${f}, attempt=${e}, lastEventId=${t??`none`}, traceId=${d})`),$({..._,event:`stream_reconnect`,message:`stream reconnect for ${f}`,level:`warn`,extra:{attempt:e,last_event_id:t??`none`}})},onStreamFailed:e=>{n.error(`stream failed (project=${f}, traceId=${d}): ${e}`),$({..._,event:`stream_failed`,message:String(e),level:`error`})}})){if(`logId`in e&&e.logId&&x.push(e.logId),a.verbose&&p)switch(e.type){case`app_created`:rr(p,`应用已创建(appId: ${e.appId})`);break;case`failed`:rr(p,`处理失败: ${e.error}`);break}if(e.type===`completed`){let t=e.terminalReason??`completed`;j={appId:e.appId,finalText:e.finalText},w=t,T=e.sseEventCount,E=e.reconnectCount,D=e.finishReasonRaw,O=e.errorCodeRaw,k=e.lastEventId,Xn({..._,requestName:`stream_chat`,status:`ok`,appId:e.appId,logId:e.logId,phase:`stream`,durationMs:N?Date.now()-N:void 0,terminalReason:t,sseEventCount:e.sseEventCount,reconnectCount:e.reconnectCount}),$({..._,event:`stream_completed`,message:`streamChat completed for ${f}`,appId:e.appId,extra:{log_id:e.logId??`none`}}),$({..._,event:`stream_terminal`,message:`stream terminal: ${t}`,appId:e.appId,extra:{terminal_reason:t,finish_reason_raw:e.finishReasonRaw??`none`,last_event_id:e.lastEventId??`none`,reconnect_count:e.reconnectCount??0,sse_event_count:e.sseEventCount??0,log_id:e.logId??`none`}})}if(e.type===`app_created`&&(Xn({..._,requestName:`create_sub_app`,status:`ok`,appId:e.appId,logId:e.logId,phase:`create`,durationMs:M?Date.now()-M:void 0}),N=Date.now(),$({..._,event:`create_succeeded`,message:`createSubApp completed for ${f}`,appId:e.appId,extra:{log_id:e.logId,conversation_id:e.conversationId??`none`}})),e.type===`failed`){let t=e.terminalReason??(e.retryable?`stream_interrupted`:`service_failed`);if(S=e.error,C=e.retryable??!1,w=t,T=e.sseEventCount??T,E=e.reconnectCount??E,D=e.finishReasonRaw??D,O=e.errorCodeRaw??O,k=e.lastEventId??k,e.phase===`pre-create`){n.error(`pre-create validation failed (project=${f}): ${e.error}`),clearTimeout(F),Yn({..._,status:`error`,phase:`pre-create`,appId:null,durationMs:Date.now()-r}),$({..._,event:`pre_create_validation_failed`,message:e.error,level:`error`,phase:`pre-create`});let t={status:`error`,project_id:f,appId:null,error:e.error,meta:null,hint:`这是运行环境配置问题,不是用户操作失误。直接将 error 字段内容告知用户,并说明需要联系管理员修复配置;不要建议换 project_id,不要重试`};return{content:[{type:`text`,text:JSON.stringify(t)}]}}if(e.phase===`create`){n.error(`createSubApp failed (project=${f}, traceId=${d}): ${e.error}`);let t=!!p;if(p){let t=e.userFacing?e.error:`createSubApp 失败: ${e.error}`;n.info(`delivering create error via feishu (project=${f}, target=${p}, traceId=${d})`),rr(p,t)}else n.warn(`create failed but no target for feishu delivery (project=${f}, traceId=${d})`);let i=e.userFacing?{status:`error`,project_id:f,appId:null,meta:null,logIds:x.length?x:void 0,hint:t?`创建失败,详情已通过飞书发送给用户,不要重复发送错误内容`:`创建失败,将 error 字段的内容原样发送给用户,不要改写、不要删减、不要重试`,error:t?void 0:e.error}:{status:`error`,project_id:f,appId:null,error:e.error,meta:null,logIds:x.length?x:void 0,hint:t?`createSubApp 失败,错误已通过飞书发送。根据 error 内容用通俗语言告诉用户具体原因,不要重试`:`createSubApp 失败,根据 error 内容用通俗语言告诉用户具体原因,不要重试`};return Yn({..._,status:`error`,phase:`create`,appId:null,durationMs:Date.now()-r}),Xn({..._,requestName:`create_sub_app`,status:`error`,appId:null,logId:e.logId,phase:`create`,durationMs:M?Date.now()-M:void 0,errorType:e.userFacing?`user_facing`:`request_failed`}),$({..._,event:`create_failed`,message:e.error,level:`error`,phase:`create`,extra:{delivered:t,log_id:e.logId??`none`,user_facing:e.userFacing??!1}}),t&&$({..._,event:`delivery_sent`,message:`create failure delivered via feishu`,level:`info`,extra:{target:p,delivery_type:`create_error`}}),{content:[{type:`text`,text:JSON.stringify(i)}]}}e.phase===`stream`&&(Xn({..._,requestName:`stream_chat`,status:`error`,appId:e.appId??j?.appId??null,logId:e.logId,phase:`stream`,durationMs:N?Date.now()-N:void 0,errorType:qn(t)??(e.retryable?`stream_interrupted`:`service_failed`),terminalReason:t,errorCode:e.errorCodeRaw,sseEventCount:e.sseEventCount,reconnectCount:e.reconnectCount}),$({..._,event:`stream_terminal`,message:`stream terminal: ${t}`,level:Jn(t)?`info`:`error`,appId:e.appId??j?.appId??null,extra:{terminal_reason:t,finish_reason_raw:e.finishReasonRaw??`none`,error_code_raw:e.errorCodeRaw??`none`,last_event_id:e.lastEventId??`none`,reconnect_count:e.reconnectCount??0,sse_event_count:e.sseEventCount??0,log_id:e.logId??`none`}}))}}}catch(e){if(!P.signal.aborted)throw e}finally{clearTimeout(F)}A=P.signal.aborted;let I=null;try{I=JSON.parse(i.readFileSync(o.join(h,`.spark`,`meta.json`),`utf8`))}catch{}let L={status:A?`timeout`:S?`error`:`ok`,project_id:f,appId:j?.appId??I?.appId??null,finalText:j?.finalText??I?.finalText,output:j?.finalText??I?.finalText,logIds:x.length?x:void 0,meta:I};if(n.info(`miaoda_coding done (project=${f}, status=${L.status}, logIds=${x.join(`,`)}, traceId=${d})`),Yn({..._,status:L.status,projectId:f,appId:L.appId,durationMs:Date.now()-r,phase:L.status===`ok`||w?`stream`:void 0,errorType:qn(w),terminalReason:w,errorCode:O,sseEventCount:T,reconnectCount:E}),$({..._,event:`task_done`,message:`miaoda_coding completed for ${f}`,status:L.status,appId:L.appId,extra:{last_log_id:x.at(-1)??`none`,log_id_count:x.length,terminal_reason:w??`none`,finish_reason_raw:D??`none`,error_code_raw:O??`none`,last_event_id:k??`none`}}),A?(L.error=`执行超时(${u/1e3}秒)`,L.retryable=!0,L.hint=`执行超时,任务可能仍在后台运行。建议先调用 miaoda_check_progress 查看进度,再决定是否重试`):S&&(L.error=S,C&&(L.retryable=!0,L.hint=`网络连接中断,任务可能已部分完成。建议先调用 miaoda_check_progress 查看当前状态,再决定下一步`)),L.status===`ok`&&!p&&(n.warn(`delivery skipped: target is missing (project=${f}, traceId=${d})`),$({..._,event:`delivery_skipped`,message:`preview link delivery skipped because target is missing (subagent passed none/empty)`,level:`warn`,appId:L.appId,extra:{reason:`missing_target`}})),p&&L.status===`ok`){let e=I?.appUrl;if(n.info(`delivery check (project=${f}, target=${p}, appUrl=${e??`missing`}, traceId=${d})`),typeof e==`string`&&e.trim()){let t=e.includes(`?`)?`&`:`?`,r=`${e.trim()}${t}mode=sidebar-semi`;rr(p,`**[${r}](${r})**`),n.info(`delivery sent (project=${f}, url=${r}, traceId=${d})`),$({..._,event:`delivery_sent`,message:`preview link delivered via feishu`,level:`info`,appId:L.appId,extra:{target:p,preview_url:r,delivery_type:`preview_link`}});try{tr(v,{deliveredAt:Date.now(),deliveredUrl:r,deliveredForTrace:d}),$({..._,event:`miaoda_coding_delivery_marker_written`,message:`delivery.json recorded successful feishu preview-link delivery`,level:`info`,appId:L.appId,extra:{preview_url:r}})}catch(e){n.warn(`failed to write delivery marker (project=${f}, traceId=${d}): ${String(e)}`),$({..._,event:`miaoda_coding_delivery_marker_write_failed`,message:`failed to write delivery.json after successful feishu delivery`,level:`warn`,appId:L.appId,extra:{error:String(e),preview_url:r}})}L.hint=`预览链接已自动发送给用户,announce 时不要再带预览链接`}else n.warn(`delivery skipped: no appUrl in meta.json (project=${f}, traceId=${d})`),$({..._,event:`delivery_skipped`,message:`preview link delivery skipped because appUrl is missing`,level:`warn`,appId:L.appId,extra:{target:p,reason:`missing_app_url`}})}return{content:[{type:`text`,text:JSON.stringify(L,null,2)}]}}catch(e){return Zn({error:e instanceof Error?e.message:String(e),event:`top_level_error`,traceId:d,projectId:c.project_id,agentId:t.agentId,domain:process.env.FORCE_AUTHN_INNERAPI_DOMAIN}),{content:[{type:`text`,text:JSON.stringify({status:`error`,error:e instanceof Error?e.message:String(e)})}]}}}}}),e.registerService({id:`miaoda-coding-config`,async start(e){a=er(e)},async stop(){}})}};export{_r as default};
|
package/package.json
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lark-apaas/openclaw-extension-miaoda-coding",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.18-alpha.0",
|
|
4
4
|
"description": "妙搭 Coding Agent — 通过 AI 创建和修改妙搭应用",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"scripts": {
|
|
7
|
-
"prepack": "
|
|
8
|
-
"build": "
|
|
7
|
+
"prepack": "tsdown",
|
|
8
|
+
"build": "tsdown",
|
|
9
9
|
"build:dev": "MIAODA_SLARDAR_ENV=dev MINIFY=false tsdown",
|
|
10
10
|
"test": "vitest run",
|
|
11
11
|
"test:cov": "vitest --coverage",
|