@devflow-tools/devflow 0.19.13 → 0.19.14

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.
Files changed (115) hide show
  1. package/dist/dashboard/404.html +1 -1
  2. package/dist/dashboard/__next.__PAGE__.txt +1 -1
  3. package/dist/dashboard/__next._full.txt +1 -1
  4. package/dist/dashboard/__next._tree.txt +1 -1
  5. package/dist/dashboard/_not-found/__next._full.txt +1 -1
  6. package/dist/dashboard/_not-found/__next._not-found.__PAGE__.txt +1 -1
  7. package/dist/dashboard/_not-found/__next._tree.txt +1 -1
  8. package/dist/dashboard/_not-found.html +1 -1
  9. package/dist/dashboard/_not-found.txt +1 -1
  10. package/dist/dashboard/accuracy/__next._full.txt +1 -1
  11. package/dist/dashboard/accuracy/__next._tree.txt +1 -1
  12. package/dist/dashboard/accuracy/__next.accuracy.__PAGE__.txt +1 -1
  13. package/dist/dashboard/accuracy.html +1 -1
  14. package/dist/dashboard/accuracy.txt +1 -1
  15. package/dist/dashboard/benchmark/__next._full.txt +1 -1
  16. package/dist/dashboard/benchmark/__next._tree.txt +1 -1
  17. package/dist/dashboard/benchmark/__next.benchmark.__PAGE__.txt +1 -1
  18. package/dist/dashboard/benchmark.html +1 -1
  19. package/dist/dashboard/benchmark.txt +1 -1
  20. package/dist/dashboard/context/__next._full.txt +1 -1
  21. package/dist/dashboard/context/__next._tree.txt +1 -1
  22. package/dist/dashboard/context/__next.context.__PAGE__.txt +1 -1
  23. package/dist/dashboard/context.html +1 -1
  24. package/dist/dashboard/context.txt +1 -1
  25. package/dist/dashboard/doctor/__next._full.txt +1 -1
  26. package/dist/dashboard/doctor/__next._tree.txt +1 -1
  27. package/dist/dashboard/doctor/__next.doctor.__PAGE__.txt +1 -1
  28. package/dist/dashboard/doctor.html +1 -1
  29. package/dist/dashboard/doctor.txt +1 -1
  30. package/dist/dashboard/executions/__next._full.txt +1 -1
  31. package/dist/dashboard/executions/__next._tree.txt +1 -1
  32. package/dist/dashboard/executions/__next.executions.__PAGE__.txt +1 -1
  33. package/dist/dashboard/executions.html +1 -1
  34. package/dist/dashboard/executions.txt +1 -1
  35. package/dist/dashboard/graph/__next._full.txt +1 -1
  36. package/dist/dashboard/graph/__next._tree.txt +1 -1
  37. package/dist/dashboard/graph/__next.graph.__PAGE__.txt +1 -1
  38. package/dist/dashboard/graph.html +1 -1
  39. package/dist/dashboard/graph.txt +1 -1
  40. package/dist/dashboard/index.html +1 -1
  41. package/dist/dashboard/index.txt +1 -1
  42. package/dist/dashboard/intelligence/__next._full.txt +1 -1
  43. package/dist/dashboard/intelligence/__next._tree.txt +1 -1
  44. package/dist/dashboard/intelligence/__next.intelligence.__PAGE__.txt +1 -1
  45. package/dist/dashboard/intelligence/knowledge/__next._full.txt +1 -1
  46. package/dist/dashboard/intelligence/knowledge/__next._tree.txt +1 -1
  47. package/dist/dashboard/intelligence/knowledge/__next.intelligence.knowledge.__PAGE__.txt +1 -1
  48. package/dist/dashboard/intelligence/knowledge.html +1 -1
  49. package/dist/dashboard/intelligence/knowledge.txt +1 -1
  50. package/dist/dashboard/intelligence/memory/__next._full.txt +1 -1
  51. package/dist/dashboard/intelligence/memory/__next._tree.txt +1 -1
  52. package/dist/dashboard/intelligence/memory/__next.intelligence.memory.__PAGE__.txt +1 -1
  53. package/dist/dashboard/intelligence/memory.html +1 -1
  54. package/dist/dashboard/intelligence/memory.txt +1 -1
  55. package/dist/dashboard/intelligence.html +1 -1
  56. package/dist/dashboard/intelligence.txt +1 -1
  57. package/dist/dashboard/knowledge/__next._full.txt +1 -1
  58. package/dist/dashboard/knowledge/__next._tree.txt +1 -1
  59. package/dist/dashboard/knowledge/__next.knowledge.__PAGE__.txt +1 -1
  60. package/dist/dashboard/knowledge.html +1 -1
  61. package/dist/dashboard/knowledge.txt +1 -1
  62. package/dist/dashboard/memory/__next._full.txt +1 -1
  63. package/dist/dashboard/memory/__next._tree.txt +1 -1
  64. package/dist/dashboard/memory/__next.memory.__PAGE__.txt +1 -1
  65. package/dist/dashboard/memory.html +1 -1
  66. package/dist/dashboard/memory.txt +1 -1
  67. package/dist/dashboard/replay/__next._full.txt +1 -1
  68. package/dist/dashboard/replay/__next._tree.txt +1 -1
  69. package/dist/dashboard/replay/__next.replay.__PAGE__.txt +1 -1
  70. package/dist/dashboard/replay.html +1 -1
  71. package/dist/dashboard/replay.txt +1 -1
  72. package/dist/dashboard/runs/_/__next._full.txt +1 -1
  73. package/dist/dashboard/runs/_/__next._tree.txt +1 -1
  74. package/dist/dashboard/runs/_/__next.runs.$d$id.__PAGE__.txt +1 -1
  75. package/dist/dashboard/runs/_.html +1 -1
  76. package/dist/dashboard/runs/_.txt +1 -1
  77. package/dist/dashboard/runs/__next._full.txt +1 -1
  78. package/dist/dashboard/runs/__next._tree.txt +1 -1
  79. package/dist/dashboard/runs/__next.runs.__PAGE__.txt +1 -1
  80. package/dist/dashboard/runs.html +1 -1
  81. package/dist/dashboard/runs.txt +1 -1
  82. package/dist/dashboard/settings/__next._full.txt +1 -1
  83. package/dist/dashboard/settings/__next._tree.txt +1 -1
  84. package/dist/dashboard/settings/__next.settings.__PAGE__.txt +1 -1
  85. package/dist/dashboard/settings.html +1 -1
  86. package/dist/dashboard/settings.txt +1 -1
  87. package/dist/dashboard/timeline/__next._full.txt +1 -1
  88. package/dist/dashboard/timeline/__next._tree.txt +1 -1
  89. package/dist/dashboard/timeline/__next.timeline.__PAGE__.txt +1 -1
  90. package/dist/dashboard/timeline.html +1 -1
  91. package/dist/dashboard/timeline.txt +1 -1
  92. package/dist/dashboard/tool-metrics/__next._full.txt +1 -1
  93. package/dist/dashboard/tool-metrics/__next._tree.txt +1 -1
  94. package/dist/dashboard/tool-metrics/__next.tool-metrics.__PAGE__.txt +1 -1
  95. package/dist/dashboard/tool-metrics.html +1 -1
  96. package/dist/dashboard/tool-metrics.txt +1 -1
  97. package/dist/dashboard/workflows/__next._full.txt +1 -1
  98. package/dist/dashboard/workflows/__next._tree.txt +1 -1
  99. package/dist/dashboard/workflows/__next.workflows.__PAGE__.txt +1 -1
  100. package/dist/dashboard/workflows.html +1 -1
  101. package/dist/dashboard/workflows.txt +1 -1
  102. package/dist/hooks/hook-daemon.js +1 -1
  103. package/dist/hooks/post-tool-use.js +1 -1
  104. package/dist/hooks/user-prompt-submit.js +1 -1
  105. package/dist/plugin/.claude-plugin/plugin.json +1 -1
  106. package/dist/plugin/dist/command-registry.json +7 -7
  107. package/dist/plugin/dist/hooks/hook-daemon.js +1 -1
  108. package/dist/plugin/dist/hooks/post-tool-use.js +1 -1
  109. package/dist/plugin/dist/hooks/user-prompt-submit.js +1 -1
  110. package/dist/plugin/dist/runtime-manifest.json +5 -5
  111. package/dist/plugin/package.json +14 -14
  112. package/package.json +17 -17
  113. package/plugin-registry.json +15 -15
  114. /package/dist/dashboard/_next/static/{bGpyabjq1-3SdKoGdv5wT → ywyth89I66anpNjab782m}/_buildManifest.js +0 -0
  115. /package/dist/dashboard/_next/static/{bGpyabjq1-3SdKoGdv5wT → ywyth89I66anpNjab782m}/_ssgManifest.js +0 -0
@@ -6,7 +6,7 @@ ${n.join(`
6
6
  `)}`}function kn(t){let e=t.now??Date.now();if(In(t.configPath)===false)return "";let n=bn(t.projectRoot,t.daemonResponse??"",e),r=n?{snapshot:n,source:"daemon"}:vn(t.projectRoot,{...t.cacheOptions,now:e}),{snapshot:o}=r;if(o.status==="disabled")return `## Project memory
7
7
  DevFlow memory snapshot=pending; source=${r.source}; reason=previous_snapshot_disabled. Memory availability is not yet known; do not conclude that the project has no memories.`;let i=new Date(o.generatedAt).toISOString(),s=o.degradation?.reason?`; reason=${o.degradation.reason}`:"",a=`DevFlow memory snapshot=${o.status}; source=${r.source}; generatedAt=${i}${s}.`,l=wn(o.conflicts);return o.markdown?[o.markdown,l,a].filter(Boolean).join(`
8
8
  `):["## Project memory",l,`${a} Memory availability is not yet known; do not conclude that the project has no memories.`].filter(Boolean).join(`
9
- `)}if(process.env.DEVFLOW_MEMORY_SNAPSHOT_CLI==="1"){let[,,t,e,n]=process.argv;t!=="session-start"||!e?process.exitCode=2:process.stdout.write(kn({projectRoot:e,configPath:n,daemonResponse:process.env.DEVFLOW_MEMORY_RESPONSE}));}function b(t){let{projectRoot:e,...n}=t;try{return new q(e).dispatchBoundary(n).snapshot??null}catch(r){return f({event:"hook.runtime.degraded",identity:{projectRoot:e,sessionId:t.sessionId,...t.turnId?{turnId:t.turnId}:{},...t.requestId?{requestId:t.requestId}:{},...t.executionId?{executionId:t.executionId}:{}},level:"error",timestamp:Date.now(),data:{stage:t.kind,reason:r instanceof Error?r.message:String(r),tool:t.producer}}),null}}var q=class{constructor(e){this.projectRoot=e;}dispatchBoundary(e){let n=Dn(e.kind,e.payload??{});if(!n)return {handled:false};let r=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let o=xn(r,{projectRoot:this.projectRoot,sessionId:e.sessionId,...e.turnId?{turnId:e.turnId}:{},...e.requestId?{requestId:e.requestId}:{},...e.executionId?{executionId:e.executionId}:{}});return o?{handled:!0,snapshot:new TaskKernel(new TaskEventStore(r),new SemanticRuntimeEventProjector).dispatch({definition:o.definition,kind:n.kind,payload:n.payload,idempotencyKey:`host:${o.definition.definitionHash}:${e.dedupeKey}`,producer:e.producer}).snapshot}:{handled:!1}}finally{r.close();}}};function xn(t,e){let n=e.executionId?t.getActiveContextReceipt(e.projectRoot,e.sessionId,e.executionId):null,r=e.turnId??n?.canonicalAction?.binding.turnId,o=e.requestId??n?.requestId;if(!r&&!o)return null;let i=t.listLatestTaskIntentArtifacts(e.projectRoot,e.sessionId).find(l=>r?l.turnId===r:l.requestId===o);if(!i)return null;let s=t.getTaskAggregateSnapshot(e.projectRoot,e.sessionId,i.turnId,i.version);if(!s)return null;let a=t.getTaskDefinitionV2(s.taskDefinitionHash);return !a||a.revision!==i.version?null:{definition:a,snapshot:s}}function Dn(t,e){switch(t){case "action.lease.issued":return {kind:"action_lease_issued",payload:e};case "action.succeeded":return {kind:"action_completed",payload:e};case "action.failed":return {kind:"action_failed",payload:e};case "verification.succeeded":return {kind:"verification_completed",payload:e};case "verification.failed":return {kind:"verification_failed",payload:e};case "memory.committed":return {kind:"memory_episode_persisted",payload:e};case "memory.skipped":return {kind:"memory_decision_completed",payload:e};case "memory.pending":return {kind:"memory_extraction_queued",payload:e};case "memory.failed":return {kind:"memory_extraction_failed",payload:e};case "durable_work.owned":return {kind:"durable_work_leased",payload:{...e,fencingToken:Number.isSafeInteger(e.fencingToken)?e.fencingToken:0}};case "durable_work.completed":return {kind:"durable_work_completed",payload:e};case "durable_work.dead_lettered":return {kind:"durable_work_dead_lettered",payload:e};default:return null}}var Mn=/^(?:ok(?:ay)?|yes|no|thanks?|thank you|continue|好的?|可以|行|是|否|谢谢|继续|收到|明白了?)[.!。!\s]*$/iu,On=/(?:记住|记下|保存|持久化|跨会话|以后|始终|永远|统一使用|项目约定|团队约定|偏好|决定采用|保留可复用|提炼结论|沉淀|记录(?:下来|为|成)?(?:架构|规则|约定|知识|结论))|\b(?:remember|memorize|persist|across sessions|from now on|always|project convention|team convention|preference|we use|adopt|retain reusable|distill)\b/iu,jn=/(?:分析|审查|检查|评估|性能|生成|创建|新建|添加|编写|实现|开发|设计|撰写|总结|修改|重构|修复|调试|解释|查看)|\b(?:analy[sz]e|review|inspect|audit|performance|generate|create|add|build|implement|develop|design|write|summarize|modify|refactor|fix|debug|explain)\b/iu,$n=/(?:召回|查询|检索|查找|定位|询问|什么|如何|是否|哪里|哪个)|\b(?:recall|query|search|find|locate|ask|what|how|whether|where|which)\b/iu;function Pn(t){let e=t.trim();return e.length>0&&!Mn.test(e)}function Fn(t,e){if(!e.trim())return false;let n=join(t,".devflow","delivery-line","state.db");if(!existsSync$1(n))return false;let r;try{return r=new DatabaseSync(n,{readOnly:!0,timeout:250}),r.prepare("SELECT payload FROM delivery_cases").all().some(i=>{try{let s=JSON.parse(i.payload);return s.sessionId===e&&!["delivered","cancelled","rejected"].includes(String(s.stage??""))}catch{return !1}})}catch{return false}finally{r?.close();}}function Nn(t){let e=t.normalize("NFKC").trim(),n=$n.test(e);return e.length>=4&&(jn.test(e)||n)&&(!On.test(e)||n)&&k(e)===null}function Hn(t,e,n=Date.now()){let r=createHash$1("sha256").update(e.trim()).digest("hex"),o=createHash$1("sha256").update(`${t}\0${n}\0${r}`).digest("hex").slice(0,24);return {turnId:`turn:${o}`,eventId:`memory-turn:${o}`,promptHash:r,createdAt:n}}function Me(t,e,n=[]){return `memory-receipt:${createHash$1("sha256").update(`${t}\0${e}\0${[...n].sort().join("\0")}`).digest("hex").slice(0,24)}`}function Ln(t){return `DevFlow memory decision required for ${t.turnId}. Before the final response, semantically decide whether this turn contains durable project knowledge. Call ${projectClaudeToolName("memory_commit_turn")} with evidence-bound candidates, or ${projectClaudeToolName("memory_skip_turn")} with a concrete reason. Do not claim memory success without a canonical receipt. For candidates, copy exact evidenceSpans from this user prompt, preserve package names, flags, versions, paths, and identifiers, and provide subject, predicate, value, polarity, and entities when known. To replace or retire an existing fact, provide operation=supersede or operation=retire plus referencedFactIds from the canonical memory receipt; aliases and entity names are not fact identity. Do not save assistant echoes, task narration, retries, or unverified guesses. Express a change from an old choice as the new durable value. If the decision tool remains unavailable, explicitly state that the memory was not saved.`}function U(t){let e=t.memoryIds.length>0?t.memoryIds.join(","):"none",n=t.status==="committed"?"accepted":t.status,r=t.status==="committed"?"; indexStatus=pending":"",o=t.memoryIds.some(a=>a.startsWith("raw-memory:")),i=t.status==="committed"&&t.source==="explicit_intent"&&!o?"; memoryOnlyCompleted=true; skipProjectContext=true; hostRefinementRequired=true":t.status==="committed"&&t.source==="explicit_intent"?"; asyncReadiness=queued; hostRefinementRequired=true":"",s=t.status==="committed"&&t.source==="explicit_intent"?` The deterministic explicit-memory save is complete and remains authoritative if refinement fails. Before the final response, call ${projectClaudeToolName("memory_commit_turn")} once with turnId=${t.turnId} and semantic candidates. Split every distinct reusable fact into a durable_memory candidate, classify instructions that apply only to this turn as turn_constraint, and include evidenceSpans copied verbatim from the user prompt for every candidate. Preserve exact flags, package names, versions, paths, and identifiers. Keep narrative and value in the user prompt language; do not translate evidence into a different surface form. The tool refines the existing receipt idempotently; it must not create native Claude memory. If refinement is unavailable, return the existing canonical receipt without claiming refinement.`:"";return `DevFlow canonical memory receipt: status=${n}; receiptId=${t.receiptId??"missing"}; turnId=${t.turnId}; memoryIds=${e}; source=${t.source??"unknown"}${r}${i}.`+s}function Oe(t){if(!Pn(t.prompt))return null;let e=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:50});try{let n=t.prompt.trim().slice(0,4e3),r=createHash$1("sha256").update(n).digest("hex"),o=e.listMemoryTurns(t.projectRoot,t.sessionId,5).find(d=>d.promptHash===r&&Date.now()-d.createdAt<1e4),i=o?{turnId:o.turnId,eventId:o.eventId,promptHash:o.promptHash,createdAt:o.createdAt}:t.identity??Hn(t.sessionId,n),s=o??e.beginMemoryTurn({...i,projectRoot:t.projectRoot,sessionId:t.sessionId});if(s.status!=="pending")return {turn:s,additionalContext:U(s),skipSkillRouting:s.source==="explicit_intent"};let l=(t.activation?.semantic??"degraded_structural")==="degraded_structural"?k(n)??void 0:void 0,m=Fn(t.projectRoot,t.sessionId);if(!l&&!m&&Nn(n)){let d=Me(s.turnId,"skipped"),p=e.skipMemoryTurn({turnId:s.turnId,receiptId:d,source:"automatic_transient_skip",reason:"high_confidence_transient_task"});return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.skipped",payload:{receiptId:d,reasonCode:"high_confidence_transient_task"},dedupeKey:d,producer:"devflow-memory-turn"}),f({event:"memory.semantic.decided",identity:{projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId},level:"info",timestamp:Date.now(),data:{status:"semantic_empty",operation:"none",reason:"high_confidence_transient_task"}}),{turn:p,additionalContext:U(p),skipSkillRouting:!1}}let c=l?"commit_explicit":"capture_prompt",u=e.enqueueWork({idempotencyKey:`memory-turn:${c}:${s.turnId}`,kind:l?"memory.explicit_commit":"memory.turn_capture",projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,payload:{operation:c,turnId:s.turnId,eventId:s.eventId,sessionId:t.sessionId,prompt:n,explicitContent:l,createdAt:s.createdAt}});if(l){let d=`raw-memory:${createHash$1("sha256").update(`${t.projectRoot}\0${i.turnId}\0${l}`).digest("hex").slice(0,24)}`,p=Me(s.turnId,"committed",[d]),g=e.commitMemoryTurn({turnId:s.turnId,receiptId:p,memoryIds:[d],source:"explicit_intent",reason:"explicit_raw_queued",decidedAt:Date.now()});return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"durable_work.owned",payload:{workId:u.id,obligation:"memory"},dedupeKey:`${u.id}:owned`,producer:"devflow-memory-turn"}),b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.committed",payload:{receiptId:p,reasonCode:"explicit_raw_queued"},dedupeKey:p,producer:"devflow-memory-turn"}),f({event:"memory.write.completed",identity:{projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,actionReceipt:p},level:"info",timestamp:Date.now(),data:{stage:"explicit_fast_ack",durable:!0,rawMemoryId:d,receiptLatencyMs:Date.now()-i.createdAt,asyncReadiness:"queued"}}),{turn:g,explicitContent:l,additionalContext:U(g),skipSkillRouting:!0}}return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.pending",payload:{reasonCode:"semantic_decision_queued"},dedupeKey:`${s.turnId}:pending`,producer:"devflow-memory-turn"}),b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"durable_work.owned",payload:{workId:u.id,obligation:"memory"},dedupeKey:`${u.id}:owned`,producer:"devflow-memory-turn"}),{turn:s,explicitContent:l,additionalContext:Ln(s),skipSkillRouting:!1}}finally{e.close();}}function $e(t,e){let n=Vn(t);mkdirSync$1(n,{recursive:true,mode:448});let r=`memory-turn-spool-${Date.now()}-${process.pid}-${randomUUID()}`,o=join(n,`${r}.json`),i=`${o}.tmp`;return writeFileSync$1(i,JSON.stringify({...e,prompt:e.prompt.trim().slice(0,4e3)}),{mode:384}),renameSync$1(i,o),r}function Vn(t){return join(w(t),"memory-turn-pending")}function Pe(t){let e=Date.now();try{let n=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let r=`context-prefetch:${createHash$1("sha256").update(`${t.projectRoot}\0${t.sessionId}\0${t.executionId}\0${Wn(t.prompt)}\0${t.profileFingerprint}`).digest("hex")}`,o=n.enqueueWork({idempotencyKey:r,kind:"context.prefetch",projectRoot:t.projectRoot,sessionId:t.sessionId,payload:t,maxAttempts:3});return h("prefetch_queue",{projectRoot:t.projectRoot,skillName:t.skillName,accepted:!0,workState:o.state,latencyMs:Date.now()-e}),{accepted:!0,workItemId:o.id}}finally{n.close();}}catch(n){let r=n instanceof Error?n.message:String(n);return h("prefetch_queue",{projectRoot:t.projectRoot,skillName:t.skillName,accepted:false,reason:r,latencyMs:Date.now()-e}),{accepted:false,reason:r}}}function Wn(t){return t.trim().toLowerCase().replace(/\s+/g," ").slice(0,4e3)}async function Le(t){let e=Date.now(),n=ar(t.projectRoot),r=claudeCodeRuntimeAdapter.normalizePrompt(t.hostEvent??{session_id:t.sessionId,prompt:t.prompt},{projectRoot:n}),o=semanticTextHash(He(r.rawPrompt)),i=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let s=i.getTaskIntentArtifactBySource({projectRoot:n,sessionId:t.sessionId,sourceHash:o});if(s){let j=Fe(s).identity,z=i.getRuntimeActivation(j.projectRoot,j.sessionId,j.turnId,s.version);if(!z)throw new Error(`RUNTIME_ACTIVATION_MISSING:${s.artifactHash}`);return {artifact:Fe(s),memoryIdentity:Ne(s),activation:z,reused:!0}}let a=`turn:${O(`${t.sessionId}\0${o}`)}`,l=`request:${O(`${n}\0${t.sessionId}\0${a}`)}`,m={projectRoot:n,projectId:`project:${stableRuntimeHash(n).slice(0,20)}`,hostId:r.hostId,sessionId:t.sessionId,executionId:t.sessionId,turnId:a,requestId:l},c=1,u=resolveRuntimeActivationSnapshot({projectRoot:n,createdAt:r.timestamp}),d=ir(r.rawPrompt),p={identity:m,version:c,rawPrompt:r.rawPrompt,normalizedPrompt:He(r.rawPrompt),...r.command?{command:r.command}:{},slashArgs:r.slashArgs,...r.activeSkill?{activeSkill:r.activeSkill}:{},intent:"unknown",action:"unknown",entities:[],targetAnchors:d,policyConstraints:[],classificationEvidence:[],sourceEventIds:[r.sourceEventId??`host-event:${o.slice(0,24)}`],sourceHash:o,createdAt:r.timestamp},g={...p,artifactHash:cr(p)};i.appendTaskIntentArtifact(rr(g)),i.bindRuntimeActivation({identity:m,revision:c,snapshot:u});let ze=nr(i,g);return f({event:"host.prompt.normalized",identity:m,level:"info",timestamp:Date.now(),data:{sourceHash:o,command:g.command,activeSkill:g.activeSkill,rawPromptBytes:Buffer.byteLength(g.rawPrompt)}}),f({event:"intent.artifact.created",identity:m,level:"info",timestamp:Date.now(),data:{artifactHash:g.artifactHash,targetCount:d.length}}),f({event:"intent.artifact.persisted",identity:m,level:"info",timestamp:Date.now(),data:{artifactHash:g.artifactHash,version:g.version,sourceHash:g.sourceHash,authority:"immutable-intent",captureLatencyMs:Date.now()-e}}),f({event:"terminal.transition.persisted",identity:m,level:"info",timestamp:Date.now(),data:{state:"intent_bound",receiptId:ze,sourceIntentHash:g.artifactHash}}),{artifact:g,memoryIdentity:Ne(g),activation:u,reused:!1}}finally{i.close();}}function nr(t,e){let n=t.getLatestTerminalTransition(e.identity.projectRoot,e.identity.sessionId,e.identity.turnId);if(n)return n.receiptId;let r=`terminal:${O(`${e.artifactHash}\0open`)}`;return t.appendTerminalTransition({...e.identity,sequence:1,toState:"open",receiptId:r,reason:"host_prompt_accepted",payload:{sourceHash:e.sourceHash},createdAt:e.createdAt}),t.appendTerminalTransition({...e.identity,sequence:2,fromState:"open",toState:"intent_bound",receiptId:`terminal:${O(`${e.artifactHash}\0intent_bound`)}`,sourceReceiptId:r,reason:"immutable_intent_persisted",payload:{intentArtifactHash:e.artifactHash},createdAt:Math.max(e.createdAt,Date.now())}).receiptId}function rr(t){return {...t.identity,version:t.version,supersedesHash:t.supersedesHash,rawPrompt:t.rawPrompt,normalizedPrompt:t.normalizedPrompt,command:t.command,slashArgs:t.slashArgs,activeSkill:t.activeSkill,intent:t.intent,action:t.action,entities:t.entities,targetAnchors:t.targetAnchors,policyConstraints:t.policyConstraints,classificationEvidence:t.classificationEvidence.map(e=>({...e})),sourceEventIds:t.sourceEventIds,sourceHash:t.sourceHash,artifactHash:t.artifactHash,createdAt:t.createdAt}}function Fe(t){return {identity:or(t),version:t.version,...t.supersedesHash?{supersedesHash:t.supersedesHash}:{},rawPrompt:t.rawPrompt,normalizedPrompt:t.normalizedPrompt,...t.command?{command:t.command}:{},slashArgs:t.slashArgs,...t.activeSkill?{activeSkill:t.activeSkill}:{},intent:t.intent,action:t.action,entities:t.entities,targetAnchors:t.targetAnchors,policyConstraints:t.policyConstraints,classificationEvidence:t.classificationEvidence,sourceEventIds:t.sourceEventIds,sourceHash:t.sourceHash,artifactHash:t.artifactHash,createdAt:t.createdAt}}function or(t){return {projectRoot:t.projectRoot,projectId:t.projectId,hostId:t.hostId,sessionId:t.sessionId,turnId:t.turnId,requestId:t.requestId,...t.executionId?{executionId:t.executionId}:{}}}function Ne(t){let e=t.rawPrompt.trim().slice(0,4e3),n="identity"in t?t.identity.turnId:t.turnId;return {turnId:n,eventId:`memory-turn:${n.replace(/^turn:/u,"")}`,promptHash:createHash$1("sha256").update(e).digest("hex"),createdAt:t.createdAt}}function ir(t){let e=t.match(/(?:^|[\s`'"(])((?:\.{0,2}\/)?(?:[A-Za-z0-9_@.-]+\/)+[A-Za-z0-9_@.-]+(?:\.[A-Za-z0-9]+)?)/gu)??[];return sr(e.map(n=>n.trim().replace(/^[`'"(]+|[`'"),.;:,。;:]+$/gu,"")).filter(n=>!n.startsWith("/")||/\.[A-Za-z0-9]+$/u.test(n))).slice(0,16)}function He(t){return t.normalize("NFKC").replace(/\s+/gu," ").trim().slice(0,4e3)}function sr(t){return [...new Set(t.filter(Boolean))]}function ar(t){let e=resolve(t);try{return realpathSync(e)}catch{return e}}function cr(t){return createHash$1("sha256").update(J(t)).digest("hex")}function O(t){return createHash$1("sha256").update(t).digest("hex").slice(0,24)}function J(t){if(t===null||typeof t=="string"||typeof t=="boolean")return JSON.stringify(t);if(typeof t=="number")return Number.isFinite(t)?JSON.stringify(t):"null";if(Array.isArray(t))return `[${t.map(J).join(",")}]`;if(!t||typeof t!="object")return JSON.stringify(String(t));let e=t;return `{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${J(e[n])}`).join(",")}}`}function Ue(){return generateKeyPairSync("ed25519")}function Ke(t){let e=parseTrustedDecisionCommand(t.rawUserEvent,t.allowedOptionIds),n=t.now??Date.now(),r={schemaVersion:"delivery-user-attestation.v1",issuer:t.issuer,keyId:t.keyId,purpose:e.purpose,decisionId:e.decisionId,caseId:t.caseId,caseVersion:t.caseVersion,sessionId:t.sessionId,sourceTurnId:t.sourceTurnId,actorId:t.actorId,targetDecisionHash:t.targetDecisionHash,rawUserEvent:t.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",t.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:e.decisionId,purpose:e.purpose,value:encodeDecisionValue(e.purpose,e.value)}),eventSequence:t.eventSequence,issuedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),nonce:t.nonce};return {...r,attestation:sign(null,canonicalJsonBytes(r),t.privateKey).toString("base64url")}}var Je=new Map;async function Ve(t){let e=t.prompt.trim();if(!/^\/devflow:(?:decide|approve|reject|revise|cancel|exit)\b/u.test(e))return {handled:false};let n=hr(t.projectRoot),r=e;if(e==="/devflow:approve"||e==="/devflow:approve current"){let c=await n.pendingDecisionForSession(t.sessionId);if(!c)return {handled:true,resolved:false,message:"DevFlow approval not found: there is no pending decision for this session."};if("ambiguous"in c)return {handled:true,resolved:false,message:`DevFlow approval is ambiguous: multiple pending cases exist (${c.caseIds.join(", ")}). Use the approval choices shown by the host.`};if(c.decision.kind!=="artifact_approval")return {handled:true,resolved:false,message:"DevFlow approval is not available yet: the current pending item is a clarification, not an artifact gate."};r=`/devflow:approve ${c.decision.id}`;}let o;try{o=parseTrustedDecisionCommand(r);}catch(c){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${c instanceof Error?c.message:String(c)}`}}let i=o.decisionId.split(/:(?:decision|question|approval):/u)[0],s=await n.pendingDecision(i);if(!s||s.id!==o.decisionId)return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: no pending decision matches ${o.decisionId}. Refresh delivery_status.`};let a=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,l=Ue(),m=Ke({rawUserEvent:r,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:t.sessionId,sourceTurnId:t.sourceTurnId?.trim()||`host-turn:${t.sessionId}:${Date.now()}`,actorId:a,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID(),privateKey:l.privateKey,allowedOptionIds:s.options.map(c=>c.id)});try{return await n.resolveTrustedDecision({evidence:m,publicKey:l.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow trusted decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(c){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${c instanceof Error?c.message:String(c)}`}}}function hr(t){let e=Je.get(t);if(e)return e;let n=createTrustedDeliveryFacade(t);return Je.set(t,n),n}var y=process.env.CLAUDE_PROJECT_DIR||process.cwd();async function br(t){let e=W()?[B]:[],n;try{n=JSON.parse(t);}catch{return {hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow",...e.length?{additionalContext:e.join(`
9
+ `)}if(process.env.DEVFLOW_MEMORY_SNAPSHOT_CLI==="1"){let[,,t,e,n]=process.argv;t!=="session-start"||!e?process.exitCode=2:process.stdout.write(kn({projectRoot:e,configPath:n,daemonResponse:process.env.DEVFLOW_MEMORY_RESPONSE}));}function b(t){let{projectRoot:e,...n}=t;try{return new q(e).dispatchBoundary(n).snapshot??null}catch(r){return f({event:"hook.runtime.degraded",identity:{projectRoot:e,sessionId:t.sessionId,...t.turnId?{turnId:t.turnId}:{},...t.requestId?{requestId:t.requestId}:{},...t.executionId?{executionId:t.executionId}:{}},level:"error",timestamp:Date.now(),data:{stage:t.kind,reason:r instanceof Error?r.message:String(r),tool:t.producer}}),null}}var q=class{constructor(e){this.projectRoot=e;}dispatchBoundary(e){let n=Dn(e.kind,e.payload??{});if(!n)return {handled:false};let r=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let o=xn(r,{projectRoot:this.projectRoot,sessionId:e.sessionId,...e.turnId?{turnId:e.turnId}:{},...e.requestId?{requestId:e.requestId}:{},...e.executionId?{executionId:e.executionId}:{}});return o?{handled:!0,snapshot:new TaskKernel(new TaskEventStore(r),new SemanticRuntimeEventProjector).dispatch({definition:o.definition,kind:n.kind,payload:n.payload,idempotencyKey:`host:${o.definition.definitionHash}:${e.dedupeKey}`,producer:e.producer}).snapshot}:{handled:!1}}finally{r.close();}}};function xn(t,e){let n=e.executionId?t.getActiveContextReceipt(e.projectRoot,e.sessionId,e.executionId):null,r=e.turnId??n?.canonicalAction?.binding.turnId,o=e.requestId??n?.requestId;if(!r&&!o)return null;let i=t.listLatestTaskIntentArtifacts(e.projectRoot,e.sessionId).find(l=>r?l.turnId===r:l.requestId===o);if(!i)return null;let s=t.getTaskAggregateSnapshot(e.projectRoot,e.sessionId,i.turnId,i.version);if(!s)return null;let a=t.getTaskDefinitionV2(s.taskDefinitionHash);return !a||a.revision!==i.version?null:{definition:a,snapshot:s}}function Dn(t,e){switch(t){case "action.lease.issued":return {kind:"action_lease_issued",payload:e};case "action.succeeded":return {kind:"action_completed",payload:e};case "action.failed":return {kind:"action_failed",payload:e};case "verification.succeeded":return {kind:"verification_completed",payload:e};case "verification.failed":return {kind:"verification_failed",payload:e};case "memory.committed":return {kind:"memory_episode_persisted",payload:e};case "memory.skipped":return {kind:"memory_decision_completed",payload:e};case "memory.pending":return {kind:"memory_extraction_queued",payload:e};case "memory.failed":return {kind:"memory_extraction_failed",payload:e};case "durable_work.owned":return {kind:"durable_work_leased",payload:{...e,fencingToken:Number.isSafeInteger(e.fencingToken)?e.fencingToken:0}};case "durable_work.completed":return {kind:"durable_work_completed",payload:e};case "durable_work.dead_lettered":return {kind:"durable_work_dead_lettered",payload:e};default:return null}}var Mn=/^(?:ok(?:ay)?|yes|no|thanks?|thank you|continue|好的?|可以|行|是|否|谢谢|继续|收到|明白了?)[.!。!\s]*$/iu,On=/(?:记住|记下|保存|持久化|跨会话|以后|始终|永远|统一使用|项目约定|团队约定|偏好|决定采用|保留可复用|提炼结论|沉淀|记录(?:下来|为|成)?(?:架构|规则|约定|知识|结论))|\b(?:remember|memorize|persist|across sessions|from now on|always|project convention|team convention|preference|we use|adopt|retain reusable|distill)\b/iu,jn=/(?:分析|审查|检查|评估|性能|生成|创建|新建|添加|编写|实现|开发|设计|撰写|总结|修改|重构|修复|调试|解释|查看)|\b(?:analy[sz]e|review|inspect|audit|performance|generate|create|add|build|implement|develop|design|write|summarize|modify|refactor|fix|debug|explain)\b/iu,$n=/(?:召回|查询|检索|查找|定位|询问|什么|如何|是否|哪里|哪个)|\b(?:recall|query|search|find|locate|ask|what|how|whether|where|which)\b/iu;function Pn(t){let e=t.trim();return e.length>0&&!Mn.test(e)}function Fn(t,e){if(!e.trim())return false;let n=join(t,".devflow","delivery-line","state.db");if(!existsSync$1(n))return false;let r;try{return r=new DatabaseSync(n,{readOnly:!0,timeout:250}),r.prepare("SELECT payload FROM delivery_cases").all().some(i=>{try{let s=JSON.parse(i.payload);return s.sessionId===e&&!["delivered","cancelled","rejected"].includes(String(s.stage??""))}catch{return !1}})}catch{return false}finally{r?.close();}}function Nn(t){let e=t.normalize("NFKC").trim(),n=$n.test(e);return e.length>=4&&(jn.test(e)||n)&&(!On.test(e)||n)&&k(e)===null}function Hn(t,e,n=Date.now()){let r=createHash$1("sha256").update(e.trim()).digest("hex"),o=createHash$1("sha256").update(`${t}\0${n}\0${r}`).digest("hex").slice(0,24);return {turnId:`turn:${o}`,eventId:`memory-turn:${o}`,promptHash:r,createdAt:n}}function Me(t,e,n=[]){return `memory-receipt:${createHash$1("sha256").update(`${t}\0${e}\0${[...n].sort().join("\0")}`).digest("hex").slice(0,24)}`}function Ln(t){return `DevFlow memory decision required for ${t.turnId}. Before the final response, semantically decide whether this turn contains durable project knowledge. Call ${projectClaudeToolName("memory_commit_turn")} with evidence-bound candidates, or ${projectClaudeToolName("memory_skip_turn")} with a concrete reason. Do not claim memory success without a canonical receipt. For candidates, copy exact evidenceSpans from this user prompt, preserve package names, flags, versions, paths, and identifiers, and provide subject, predicate, value, polarity, and entities when known. To replace or retire an existing fact, provide operation=supersede or operation=retire plus referencedFactIds from the canonical memory receipt; aliases and entity names are not fact identity. Do not save assistant echoes, task narration, retries, or unverified guesses. Express a change from an old choice as the new durable value. If the decision tool remains unavailable, explicitly state that the memory was not saved.`}function U(t){let e=t.memoryIds.length>0?t.memoryIds.join(","):"none",n=t.status==="committed"?"accepted":t.status,r=t.status==="committed"?"; indexStatus=pending":"",o=t.memoryIds.some(a=>a.startsWith("raw-memory:")),i=t.status==="committed"&&t.source==="explicit_intent"&&!o?"; memoryOnlyCompleted=true; skipProjectContext=true; hostRefinementRequired=true":t.status==="committed"&&t.source==="explicit_intent"?"; asyncReadiness=queued; hostRefinementRequired=true":"",s=t.status==="committed"&&t.source==="explicit_intent"?` The deterministic explicit-memory save is complete and remains authoritative if refinement fails. Before the final response, call ${projectClaudeToolName("memory_commit_turn")} once with turnId=${t.turnId} and semantic candidates. Split every distinct reusable fact into a durable_memory candidate, classify instructions that apply only to this turn as turn_constraint, and include evidenceSpans copied verbatim from the user prompt for every candidate. Preserve exact flags, package names, versions, paths, and identifiers. Keep narrative and value in the user prompt language; do not translate evidence into a different surface form. The tool refines the existing receipt idempotently; it must not create native Claude memory. If refinement is unavailable, return the existing canonical receipt without claiming refinement.`:"";return `DevFlow canonical memory receipt: status=${n}; receiptId=${t.receiptId??"missing"}; turnId=${t.turnId}; memoryIds=${e}; source=${t.source??"unknown"}${r}${i}.`+s}function Oe(t){if(!Pn(t.prompt))return null;let e=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:50});try{let n=t.prompt.trim().slice(0,4e3),r=createHash$1("sha256").update(n).digest("hex"),o=e.listMemoryTurns(t.projectRoot,t.sessionId,5).find(d=>d.promptHash===r&&Date.now()-d.createdAt<1e4),i=o?{turnId:o.turnId,eventId:o.eventId,promptHash:o.promptHash,createdAt:o.createdAt}:t.identity??Hn(t.sessionId,n),s=o??e.beginMemoryTurn({...i,projectRoot:t.projectRoot,sessionId:t.sessionId});if(s.status!=="pending")return {turn:s,additionalContext:U(s),skipSkillRouting:s.source==="explicit_intent"};let l=(t.activation?.semantic??"degraded_structural")==="degraded_structural"?k(n)??void 0:void 0,m=Fn(t.projectRoot,t.sessionId);if(!l&&!m&&Nn(n)){let d=Me(s.turnId,"skipped"),p=e.skipMemoryTurn({turnId:s.turnId,receiptId:d,source:"automatic_transient_skip",reason:"high_confidence_transient_task"});return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.skipped",payload:{receiptId:d,reasonCode:"high_confidence_transient_task"},dedupeKey:d,producer:"devflow-memory-turn"}),f({event:"memory.semantic.decided",identity:{projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId},level:"info",timestamp:Date.now(),data:{status:"semantic_empty",operation:"none",reason:"high_confidence_transient_task"}}),{turn:p,additionalContext:U(p),skipSkillRouting:!1}}let c=l?"commit_explicit":"capture_prompt",u=e.enqueueWork({idempotencyKey:`memory-turn:${c}:${s.turnId}`,kind:l?"memory.explicit_commit":"memory.turn_capture",projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,payload:{operation:c,turnId:s.turnId,eventId:s.eventId,sessionId:t.sessionId,prompt:n,explicitContent:l,createdAt:s.createdAt}});if(l){let d=`raw-memory:${createHash$1("sha256").update(`${t.projectRoot}\0${i.turnId}\0${l}`).digest("hex").slice(0,24)}`,p=Me(s.turnId,"committed",[d]),g=e.commitMemoryTurn({turnId:s.turnId,receiptId:p,memoryIds:[d],source:"explicit_intent",reason:"explicit_raw_queued",decidedAt:Date.now()});return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"durable_work.owned",payload:{workId:u.id,obligation:"memory"},dedupeKey:`${u.id}:owned`,producer:"devflow-memory-turn"}),b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.committed",payload:{receiptId:p,reasonCode:"explicit_raw_queued"},dedupeKey:p,producer:"devflow-memory-turn"}),f({event:"memory.write.completed",identity:{projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,actionReceipt:p},level:"info",timestamp:Date.now(),data:{stage:"explicit_fast_ack",durable:!0,rawMemoryId:d,receiptLatencyMs:Date.now()-i.createdAt,asyncReadiness:"queued"}}),{turn:g,explicitContent:l,additionalContext:U(g),skipSkillRouting:!0}}return b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"memory.pending",payload:{reasonCode:"semantic_decision_queued"},dedupeKey:`${s.turnId}:pending`,producer:"devflow-memory-turn"}),b({projectRoot:t.projectRoot,sessionId:t.sessionId,turnId:s.turnId,kind:"durable_work.owned",payload:{workId:u.id,obligation:"memory"},dedupeKey:`${u.id}:owned`,producer:"devflow-memory-turn"}),{turn:s,explicitContent:l,additionalContext:Ln(s),skipSkillRouting:!1}}finally{e.close();}}function $e(t,e){let n=Vn(t);mkdirSync$1(n,{recursive:true,mode:448});let r=`memory-turn-spool-${Date.now()}-${process.pid}-${randomUUID()}`,o=join(n,`${r}.json`),i=`${o}.tmp`;return writeFileSync$1(i,JSON.stringify({...e,prompt:e.prompt.trim().slice(0,4e3)}),{mode:384}),renameSync$1(i,o),r}function Vn(t){return join(w(t),"memory-turn-pending")}function Pe(t){let e=Date.now();try{let n=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let r=`context-prefetch:${createHash$1("sha256").update(`${t.projectRoot}\0${t.sessionId}\0${t.executionId}\0${Wn(t.prompt)}\0${t.profileFingerprint}`).digest("hex")}`,o=n.enqueueWork({idempotencyKey:r,kind:"context.prefetch",projectRoot:t.projectRoot,sessionId:t.sessionId,payload:t,maxAttempts:3});return h("prefetch_queue",{projectRoot:t.projectRoot,skillName:t.skillName,accepted:!0,workState:o.state,latencyMs:Date.now()-e}),{accepted:!0,workItemId:o.id}}finally{n.close();}}catch(n){let r=n instanceof Error?n.message:String(n);return h("prefetch_queue",{projectRoot:t.projectRoot,skillName:t.skillName,accepted:false,reason:r,latencyMs:Date.now()-e}),{accepted:false,reason:r}}}function Wn(t){return t.trim().toLowerCase().replace(/\s+/g," ").slice(0,4e3)}async function Le(t){let e=Date.now(),n=ar(t.projectRoot),r=claudeCodeRuntimeAdapter.normalizePrompt(t.hostEvent??{session_id:t.sessionId,prompt:t.prompt},{projectRoot:n}),o=semanticTextHash(He(r.rawPrompt)),i=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let s=i.getTaskIntentArtifactBySource({projectRoot:n,sessionId:t.sessionId,sourceHash:o});if(s){let j=Fe(s).identity,z=i.getRuntimeActivation(j.projectRoot,j.sessionId,j.turnId,s.version);if(!z)throw new Error(`RUNTIME_ACTIVATION_MISSING:${s.artifactHash}`);return {artifact:Fe(s),memoryIdentity:Ne(s),activation:z,reused:!0}}let a=`turn:${O(`${t.sessionId}\0${o}`)}`,l=`request:${O(`${n}\0${t.sessionId}\0${a}`)}`,m={projectRoot:n,projectId:`project:${stableRuntimeHash(n).slice(0,20)}`,hostId:r.hostId,sessionId:t.sessionId,executionId:t.sessionId,turnId:a,requestId:l},c=1,u=resolveRuntimeActivationSnapshot({projectRoot:n,createdAt:r.timestamp}),d=ir(r.rawPrompt),p={identity:m,version:c,rawPrompt:r.rawPrompt,normalizedPrompt:He(r.rawPrompt),...r.command?{command:r.command}:{},slashArgs:r.slashArgs,...r.activeSkill?{activeSkill:r.activeSkill}:{},intent:"unknown",action:"unknown",entities:[],targetAnchors:d,policyConstraints:[],classificationEvidence:[],sourceEventIds:[r.sourceEventId??`host-event:${o.slice(0,24)}`],sourceHash:o,createdAt:r.timestamp},g={...p,artifactHash:cr(p)};i.appendTaskIntentArtifact(rr(g)),i.bindRuntimeActivation({identity:m,revision:c,snapshot:u});let ze=nr(i,g);return f({event:"host.prompt.normalized",identity:m,level:"info",timestamp:Date.now(),data:{sourceHash:o,command:g.command,activeSkill:g.activeSkill,rawPromptBytes:Buffer.byteLength(g.rawPrompt)}}),f({event:"intent.artifact.created",identity:m,level:"info",timestamp:Date.now(),data:{artifactHash:g.artifactHash,targetCount:d.length}}),f({event:"intent.artifact.persisted",identity:m,level:"info",timestamp:Date.now(),data:{artifactHash:g.artifactHash,version:g.version,sourceHash:g.sourceHash,authority:"immutable-intent",captureLatencyMs:Date.now()-e}}),f({event:"terminal.transition.persisted",identity:m,level:"info",timestamp:Date.now(),data:{state:"intent_bound",receiptId:ze,sourceIntentHash:g.artifactHash}}),{artifact:g,memoryIdentity:Ne(g),activation:u,reused:!1}}finally{i.close();}}function nr(t,e){let n=t.getLatestTerminalTransition(e.identity.projectRoot,e.identity.sessionId,e.identity.turnId);if(n)return n.receiptId;let r=`terminal:${O(`${e.artifactHash}\0open`)}`;return t.appendTerminalTransition({...e.identity,sequence:1,toState:"open",receiptId:r,reason:"host_prompt_accepted",payload:{sourceHash:e.sourceHash},createdAt:e.createdAt}),t.appendTerminalTransition({...e.identity,sequence:2,fromState:"open",toState:"intent_bound",receiptId:`terminal:${O(`${e.artifactHash}\0intent_bound`)}`,sourceReceiptId:r,reason:"immutable_intent_persisted",payload:{intentArtifactHash:e.artifactHash},createdAt:Math.max(e.createdAt,Date.now())}).receiptId}function rr(t){return {...t.identity,version:t.version,supersedesHash:t.supersedesHash,rawPrompt:t.rawPrompt,normalizedPrompt:t.normalizedPrompt,command:t.command,slashArgs:t.slashArgs,activeSkill:t.activeSkill,intent:t.intent,action:t.action,entities:t.entities,targetAnchors:t.targetAnchors,policyConstraints:t.policyConstraints,classificationEvidence:t.classificationEvidence.map(e=>({...e})),sourceEventIds:t.sourceEventIds,sourceHash:t.sourceHash,artifactHash:t.artifactHash,createdAt:t.createdAt}}function Fe(t){return {identity:or(t),version:t.version,...t.supersedesHash?{supersedesHash:t.supersedesHash}:{},rawPrompt:t.rawPrompt,normalizedPrompt:t.normalizedPrompt,...t.command?{command:t.command}:{},slashArgs:t.slashArgs,...t.activeSkill?{activeSkill:t.activeSkill}:{},intent:t.intent,action:t.action,entities:t.entities,targetAnchors:t.targetAnchors,policyConstraints:t.policyConstraints,classificationEvidence:t.classificationEvidence,sourceEventIds:t.sourceEventIds,sourceHash:t.sourceHash,artifactHash:t.artifactHash,createdAt:t.createdAt}}function or(t){return {projectRoot:t.projectRoot,projectId:t.projectId,hostId:t.hostId,sessionId:t.sessionId,turnId:t.turnId,requestId:t.requestId,...t.executionId?{executionId:t.executionId}:{}}}function Ne(t){let e=t.rawPrompt.trim().slice(0,4e3),n="identity"in t?t.identity.turnId:t.turnId;return {turnId:n,eventId:`memory-turn:${n.replace(/^turn:/u,"")}`,promptHash:createHash$1("sha256").update(e).digest("hex"),createdAt:t.createdAt}}function ir(t){let e=t.match(/(?:^|[\s`'"(])((?:\.{0,2}\/)?(?:[A-Za-z0-9_@.-]+\/)+[A-Za-z0-9_@.-]+(?:\.[A-Za-z0-9]+)?)/gu)??[];return sr(e.map(n=>n.trim().replace(/^[`'"(]+|[`'"),.;:,。;:]+$/gu,"")).filter(n=>!n.startsWith("/")||/\.[A-Za-z0-9]+$/u.test(n))).slice(0,16)}function He(t){return t.normalize("NFKC").replace(/\s+/gu," ").trim().slice(0,4e3)}function sr(t){return [...new Set(t.filter(Boolean))]}function ar(t){let e=resolve(t);try{return realpathSync(e)}catch{return e}}function cr(t){return createHash$1("sha256").update(J(t)).digest("hex")}function O(t){return createHash$1("sha256").update(t).digest("hex").slice(0,24)}function J(t){if(t===null||typeof t=="string"||typeof t=="boolean")return JSON.stringify(t);if(typeof t=="number")return Number.isFinite(t)?JSON.stringify(t):"null";if(Array.isArray(t))return `[${t.map(J).join(",")}]`;if(!t||typeof t!="object")return JSON.stringify(String(t));let e=t;return `{${Object.keys(e).sort().map(n=>`${JSON.stringify(n)}:${J(e[n])}`).join(",")}}`}function Ue(){return generateKeyPairSync("ed25519")}function Ke(t){let e=parseTrustedDecisionCommand(t.rawUserEvent,t.allowedOptionIds),n=t.now??Date.now(),r={schemaVersion:"delivery-user-attestation.v1",issuer:t.issuer,keyId:t.keyId,purpose:e.purpose,decisionId:e.decisionId,caseId:t.caseId,caseVersion:t.caseVersion,sessionId:t.sessionId,sourceTurnId:t.sourceTurnId,actorId:t.actorId,targetDecisionHash:t.targetDecisionHash,rawUserEvent:t.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",t.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:e.decisionId,purpose:e.purpose,value:encodeDecisionValue(e.purpose,e.value)}),eventSequence:t.eventSequence,issuedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),nonce:t.nonce};return {...r,attestation:sign(null,canonicalJsonBytes(r),t.privateKey).toString("base64url")}}var Je=new Map;async function Ve(t){let e=t.prompt.trim();if(!/^\/devflow:(?:decide|approve|reject|revise|cancel|exit)\b/u.test(e))return {handled:false};let n=hr(t.projectRoot),r=e;if(e==="/devflow:approve"||e==="/devflow:approve current"){let c=await n.pendingDecisionForSession(t.sessionId);if(!c)return {handled:true,resolved:false,message:"DevFlow approval not found: there is no pending decision for this session."};if("ambiguous"in c)return {handled:true,resolved:false,message:`DevFlow approval is ambiguous: multiple pending cases exist (${c.caseIds.join(", ")}). Use the approval choices shown by the host.`};if(c.decision.kind!=="artifact_approval")return {handled:true,resolved:false,message:"DevFlow approval is not available yet: the current pending item is a clarification, not an artifact gate."};r=`/devflow:approve ${c.decision.id}`;}let o;try{o=parseTrustedDecisionCommand(r);}catch(c){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${c instanceof Error?c.message:String(c)}`}}let i=o.decisionId.split(":")[0],s=await n.pendingDecision(i);if(!s||s.id!==o.decisionId)return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: no pending decision matches ${o.decisionId}. Refresh delivery_status.`};let a=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,l=Ue(),m=Ke({rawUserEvent:r,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:t.sessionId,sourceTurnId:t.sourceTurnId?.trim()||`host-turn:${t.sessionId}:${Date.now()}`,actorId:a,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID(),privateKey:l.privateKey,allowedOptionIds:s.options.map(c=>c.id)});try{return await n.resolveTrustedDecision({evidence:m,publicKey:l.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow trusted decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(c){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${c instanceof Error?c.message:String(c)}`}}}function hr(t){let e=Je.get(t);if(e)return e;let n=createTrustedDeliveryFacade(t);return Je.set(t,n),n}var y=process.env.CLAUDE_PROJECT_DIR||process.cwd();async function br(t){let e=W()?[B]:[],n;try{n=JSON.parse(t);}catch{return {hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow",...e.length?{additionalContext:e.join(`
10
10
  `)}:{}}}}let r=n.prompt||"";if(!r.trim())return {hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow",...e.length?{additionalContext:e.join(`
11
11
  `)}:{}}};let o=n.session_id?.trim();if(o&&/^\/devflow:(?:decide|approve|reject)\b/u.test(r.trim()))try{let c=await Ve({projectRoot:y,sessionId:o,prompt:r});if(c.handled)return {hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow",additionalContext:c.message}}}catch(c){e.push(`DevFlow trusted delivery fallback degraded: ${c instanceof Error?c.message:String(c)}`);}let i=se(r),s=false,a,l,m=o?new x(y):void 0;if(o){try{l=await Le({projectRoot:y,sessionId:o,prompt:r,hostEvent:n}),m.bindTaskIdentity(o,{turnId:l.artifact.identity.turnId,requestId:l.artifact.identity.requestId,intentArtifactHash:l.artifact.artifactHash}),e.push(`DevFlow immutable task identity: turnId=${l.artifact.identity.turnId}; requestId=${l.artifact.identity.requestId}; intentArtifactHash=${l.artifact.artifactHash}. Retrieval query expansion must not replace this original intent.`);}catch(c){e.push("DevFlow task intent persistence degraded; preserve the original user command and do not claim canonical context binding."),f({event:"intent.artifact.failed",identity:{projectRoot:y,sessionId:o},level:"error",timestamp:Date.now(),data:{stage:"user_prompt_submit",category:"intent_persistence_unavailable",error:c instanceof Error?c.message:String(c)}});}try{let c=Oe({projectRoot:y,sessionId:o,prompt:r,...l?{identity:l.memoryIdentity}:{},...l?{activation:l.activation}:{}});c&&(e.push(c.additionalContext),s=c.skipSkillRouting);}catch(c){s=!!k(r);try{let u=$e(y,{sessionId:o,prompt:r,createdAt:Date.now()});e.push(`DevFlow memory turn status=accepted; durable=true; receiptId=${u}; canonicalMemory=false; SQLite queue replay pending. Do not claim memory success without a canonical receipt.`),f({event:"memory.write.degraded",identity:{projectRoot:y,sessionId:o},level:"warn",timestamp:Date.now(),data:{stage:"turn_capture",reason:c.message,fallback:"durable_spool",receiptId:u}});}catch(u){e.push("DevFlow memory turn status=degraded; durable=false; no canonical receipt exists. Do not claim memory success."),f({event:"memory.write.degraded",identity:{projectRoot:y,sessionId:o},level:"error",timestamp:Date.now(),data:{stage:"turn_capture",reason:u.message,fallback:"none"}});}}}if(o&&i&&!s){let c=m.get(o)?.executionId,u=m.startExecution(o,i.skillName,fe(i.skillName));if(a=u.executionId,u.executionId&&u.executionId!==c){let p=new C;try{await p.sendSessionStart(o,y,u.startedAt),await p.sendExecutionStart(u.executionId,o,i.skillName,u.lastActivityAt,y,u.requiredMcpTools);}finally{p.close();}}let d=ge(i.skillName,y,r);d&&e.push(d);}if(o&&i&&a&&!s){let c=resolveProjectCapabilityProfile(y),u=resolveCapabilityRollout(y).config.retrievalSessions;Pe({prompt:r.trimStart().replace(/^\/devflow:[a-z0-9][a-z0-9-]*\b/i,"").trim()||r,projectRoot:y,sessionId:o,executionId:a,skillName:i.skillName,profileFingerprint:c.fingerprint,rolloutMode:u,retrievalVersion:"r2.v1",createdAt:Date.now()});}return {hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow",...e.length?{additionalContext:e.join(`
12
12
  `)}:{}}}}if(process.argv[1]?.endsWith("user-prompt-submit")||process.argv[1]?.endsWith("user-prompt-submit.js")){let t=console.log.bind(console);console.log=console.error.bind(console),console.info=console.error.bind(console);let e="";process.stdin.setEncoding("utf8"),process.stdin.on("data",n=>{e+=n;}),process.stdin.on("end",async()=>{let n=await br(e.trim()||process.argv[2]||"");t(JSON.stringify(n)),process.exit(0);}),process.stdin.on("error",()=>{t(JSON.stringify({hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow"}})),process.exit(0);}),setTimeout(()=>{t(JSON.stringify({hookSpecificOutput:{hookEventName:"UserPromptSubmit",permissionDecision:"allow"}})),process.exit(0);},3e4).unref();}export{br as handleUserPromptSubmit};
@@ -1,14 +1,14 @@
1
1
  {
2
2
  "manifestVersion": "devflow-runtime.v1",
3
- "packageVersion": "0.19.13",
4
- "sourceCommit": "365bcb0d71ff993575157a116ecc34b77dbc4f69",
3
+ "packageVersion": "0.19.14",
4
+ "sourceCommit": "2120981fcd1d3e906c8c4663ecc56506ed66ce1a",
5
5
  "bundleHashes": {
6
6
  "hooks": "858e24cc2bc01cdc69e47010e9e51eafc9d9230c9799a421821c3aa917f9c062",
7
7
  "mcp": "426258c76db3c4032baafd4b3926795e053b2a3df1ae72f0f2425f2e3f1e3c99",
8
8
  "cli": "6205081f819ee3651962df36edd626b993a917fb8691f20c84e6b6e04af81d16"
9
9
  },
10
- "registryHash": "0cea9f9cd55d6b99041ece83d4d5e33a0b3bba425447ebbc5d523e4640183ef7",
10
+ "registryHash": "dc90b308b7fa01ffb9a2609656f812da675067822856b2e599585a16ddb3a5e8",
11
11
  "stateDbPath": "<projectRoot>/.devflow/delivery-line/state.db",
12
- "builtAt": 1793881027988,
13
- "manifestHash": "42fb640017acad548c41e97c5dc03fb8fd5dce9378b34e8ab608188fe7de3cef"
12
+ "builtAt": 1793950711660,
13
+ "manifestHash": "c0da774b380bf985f2dc0e4885298b63e829e28bb655c2466cd50707ce734440"
14
14
  }
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/claude-code-plugin",
3
- "version": "0.19.13",
3
+ "version": "0.19.14",
4
4
  "description": "Claude Code hooks and skills for the DevFlow development intelligence runtime.",
5
5
  "type": "module",
6
6
  "scripts": {
@@ -12,20 +12,20 @@
12
12
  "verify:runtime-dependencies": "node --import tsx scripts/verify-runtime-dependencies.ts"
13
13
  },
14
14
  "dependencies": {
15
- "@devflow-tools/benchmark": "0.19.13",
16
- "@devflow-tools/context-engine": "0.19.13",
17
- "@devflow-tools/database": "0.19.13",
18
- "@devflow-tools/mcp-server": "0.19.13",
19
- "@devflow-tools/memory-engine": "0.19.13",
20
- "@devflow-tools/sdk": "0.19.13",
21
- "@devflow-tools/semantic-engine": "0.19.13",
22
- "@devflow-tools/server": "0.19.13",
23
- "@devflow-tools/task-runtime": "0.19.13",
24
- "@devflow-tools/telemetry": "0.19.13",
25
- "@devflow-tools/workflow-engine": "0.19.13"
15
+ "@devflow-tools/benchmark": "0.19.14",
16
+ "@devflow-tools/context-engine": "0.19.14",
17
+ "@devflow-tools/database": "0.19.14",
18
+ "@devflow-tools/mcp-server": "0.19.14",
19
+ "@devflow-tools/memory-engine": "0.19.14",
20
+ "@devflow-tools/sdk": "0.19.14",
21
+ "@devflow-tools/semantic-engine": "0.19.14",
22
+ "@devflow-tools/server": "0.19.14",
23
+ "@devflow-tools/task-runtime": "0.19.14",
24
+ "@devflow-tools/telemetry": "0.19.14",
25
+ "@devflow-tools/workflow-engine": "0.19.14"
26
26
  },
27
27
  "devDependencies": {
28
- "@devflow-tools/devflow": "0.19.13"
28
+ "@devflow-tools/devflow": "0.19.14"
29
29
  },
30
30
  "allowScripts": {
31
31
  "better-sqlite3@12.11.1": true,
@@ -50,7 +50,7 @@
50
50
  "hooks",
51
51
  "skills"
52
52
  ],
53
- "gitHead": "365bcb0d71ff993575157a116ecc34b77dbc4f69",
53
+ "gitHead": "2120981fcd1d3e906c8c4663ecc56506ed66ce1a",
54
54
  "license": "MIT",
55
55
  "repository": {
56
56
  "type": "git",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@devflow-tools/devflow",
3
- "version": "0.19.13",
3
+ "version": "0.19.14",
4
4
  "type": "module",
5
5
  "description": "Installable DevFlow distribution containing the CLI, runtime hooks, and Claude plugin.",
6
6
  "bin": {
@@ -21,21 +21,21 @@
21
21
  },
22
22
  "dependencies": {
23
23
  "@colbymchenry/codegraph": "^1.1.1",
24
- "@devflow-tools/adapters": "0.19.13",
25
- "@devflow-tools/benchmark": "0.19.13",
26
- "@devflow-tools/context-engine": "0.19.13",
27
- "@devflow-tools/database": "0.19.13",
28
- "@devflow-tools/delivery-line": "0.19.13",
29
- "@devflow-tools/knowledge-engine": "0.19.13",
30
- "@devflow-tools/mcp-server": "0.19.13",
31
- "@devflow-tools/memory-engine": "0.19.13",
32
- "@devflow-tools/retrieval-engine": "0.19.13",
33
- "@devflow-tools/sdk": "0.19.13",
34
- "@devflow-tools/semantic-engine": "0.19.13",
35
- "@devflow-tools/server": "0.19.13",
36
- "@devflow-tools/task-runtime": "0.19.13",
37
- "@devflow-tools/telemetry": "0.19.13",
38
- "@devflow-tools/workflow-engine": "0.19.13",
24
+ "@devflow-tools/adapters": "0.19.14",
25
+ "@devflow-tools/benchmark": "0.19.14",
26
+ "@devflow-tools/context-engine": "0.19.14",
27
+ "@devflow-tools/database": "0.19.14",
28
+ "@devflow-tools/delivery-line": "0.19.14",
29
+ "@devflow-tools/knowledge-engine": "0.19.14",
30
+ "@devflow-tools/mcp-server": "0.19.14",
31
+ "@devflow-tools/memory-engine": "0.19.14",
32
+ "@devflow-tools/retrieval-engine": "0.19.14",
33
+ "@devflow-tools/sdk": "0.19.14",
34
+ "@devflow-tools/semantic-engine": "0.19.14",
35
+ "@devflow-tools/server": "0.19.14",
36
+ "@devflow-tools/task-runtime": "0.19.14",
37
+ "@devflow-tools/telemetry": "0.19.14",
38
+ "@devflow-tools/workflow-engine": "0.19.14",
39
39
  "@inquirer/prompts": "^7.10.1",
40
40
  "@modelcontextprotocol/sdk": "^1.32.1",
41
41
  "@nestjs/common": "^12.1.2",
@@ -63,7 +63,7 @@
63
63
  "plugin-registry.json",
64
64
  "scripts/postinstall.js"
65
65
  ],
66
- "gitHead": "365bcb0d71ff993575157a116ecc34b77dbc4f69",
66
+ "gitHead": "2120981fcd1d3e906c8c4663ecc56506ed66ce1a",
67
67
  "license": "MIT",
68
68
  "repository": {
69
69
  "type": "git",
@@ -1,10 +1,10 @@
1
1
  {
2
2
  "version": "1.0.0",
3
- "lastUpdated": "2026-11-05T12:07:20.880Z",
3
+ "lastUpdated": "2026-11-06T07:31:32.345Z",
4
4
  "plugins": [
5
5
  {
6
6
  "name": "@devflow-tools/plugin-animation",
7
- "version": "0.19.13",
7
+ "version": "0.19.14",
8
8
  "description": "Animation analysis and generation tools for DevFlow.",
9
9
  "tags": [],
10
10
  "compatibleStacks": [
@@ -16,7 +16,7 @@
16
16
  },
17
17
  {
18
18
  "name": "@devflow-tools/plugin-css",
19
- "version": "0.19.13",
19
+ "version": "0.19.14",
20
20
  "description": "CSS analysis and selector audit tools for DevFlow.",
21
21
  "tags": [],
22
22
  "compatibleStacks": [
@@ -28,7 +28,7 @@
28
28
  },
29
29
  {
30
30
  "name": "@devflow-tools/plugin-docker",
31
- "version": "0.19.13",
31
+ "version": "0.19.14",
32
32
  "description": "Docker configuration and diagnostic tools for DevFlow.",
33
33
  "tags": [],
34
34
  "compatibleStacks": [
@@ -40,7 +40,7 @@
40
40
  },
41
41
  {
42
42
  "name": "@devflow-tools/plugin-electron",
43
- "version": "0.19.13",
43
+ "version": "0.19.14",
44
44
  "description": "Electron application analysis and implementation tools for DevFlow.",
45
45
  "tags": [],
46
46
  "compatibleStacks": [
@@ -52,7 +52,7 @@
52
52
  },
53
53
  {
54
54
  "name": "@devflow-tools/plugin-git",
55
- "version": "0.19.13",
55
+ "version": "0.19.14",
56
56
  "description": "Git repository analysis and workflow tools for DevFlow.",
57
57
  "tags": [],
58
58
  "compatibleStacks": [
@@ -64,7 +64,7 @@
64
64
  },
65
65
  {
66
66
  "name": "@devflow-tools/plugin-graphql",
67
- "version": "0.19.13",
67
+ "version": "0.19.14",
68
68
  "description": "GraphQL schema and operation tools for DevFlow.",
69
69
  "tags": [],
70
70
  "compatibleStacks": [
@@ -76,7 +76,7 @@
76
76
  },
77
77
  {
78
78
  "name": "@devflow-tools/plugin-nest",
79
- "version": "0.19.13",
79
+ "version": "0.19.14",
80
80
  "description": "NestJS analysis and implementation tools for DevFlow.",
81
81
  "tags": [],
82
82
  "compatibleStacks": [
@@ -88,7 +88,7 @@
88
88
  },
89
89
  {
90
90
  "name": "@devflow-tools/plugin-nextjs",
91
- "version": "0.19.13",
91
+ "version": "0.19.14",
92
92
  "description": "Next.js analysis and implementation tools for DevFlow.",
93
93
  "tags": [],
94
94
  "compatibleStacks": [
@@ -100,7 +100,7 @@
100
100
  },
101
101
  {
102
102
  "name": "@devflow-tools/plugin-performance",
103
- "version": "0.19.13",
103
+ "version": "0.19.14",
104
104
  "description": "Web performance audit and optimization tools for DevFlow.",
105
105
  "tags": [],
106
106
  "compatibleStacks": [
@@ -112,7 +112,7 @@
112
112
  },
113
113
  {
114
114
  "name": "@devflow-tools/plugin-react",
115
- "version": "0.19.13",
115
+ "version": "0.19.14",
116
116
  "description": "React analysis, audit, and component tools for DevFlow.",
117
117
  "tags": [],
118
118
  "compatibleStacks": [
@@ -130,7 +130,7 @@
130
130
  },
131
131
  {
132
132
  "name": "@devflow-tools/plugin-tailwind",
133
- "version": "0.19.13",
133
+ "version": "0.19.14",
134
134
  "description": "Tailwind CSS analysis and component tools for DevFlow.",
135
135
  "tags": [],
136
136
  "compatibleStacks": [
@@ -142,7 +142,7 @@
142
142
  },
143
143
  {
144
144
  "name": "@devflow-tools/plugin-taro",
145
- "version": "0.19.13",
145
+ "version": "0.19.14",
146
146
  "description": "Taro application analysis and implementation tools for DevFlow.",
147
147
  "tags": [],
148
148
  "compatibleStacks": [
@@ -154,7 +154,7 @@
154
154
  },
155
155
  {
156
156
  "name": "@devflow-tools/plugin-ui-layout",
157
- "version": "0.19.13",
157
+ "version": "0.19.14",
158
158
  "description": "UI layout analysis and implementation tools for DevFlow.",
159
159
  "tags": [],
160
160
  "compatibleStacks": [
@@ -166,7 +166,7 @@
166
166
  },
167
167
  {
168
168
  "name": "@devflow-tools/plugin-vue",
169
- "version": "0.19.13",
169
+ "version": "0.19.14",
170
170
  "description": "Vue analysis, audit, and component tools for DevFlow.",
171
171
  "tags": [],
172
172
  "compatibleStacks": [