@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
@@ -24,7 +24,7 @@ d:I[1380,[],""]
24
24
  10:X
25
25
  11:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$L13",null,{}],null,["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}]]}],"p":false,"v":null}}]]
26
26
  f:[["children",{"s":"tool-metrics","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$10"},"c":"$Q11"}]]
27
- 0:{"P":null,"c":["","tool-metrics"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"bGpyabjq1-3SdKoGdv5wT"}
27
+ 0:{"P":null,"c":["","tool-metrics"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ywyth89I66anpNjab782m"}
28
28
  10:C
29
29
  e:"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params"
30
30
  19:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -24,7 +24,7 @@ d:I[1380,[],""]
24
24
  10:X
25
25
  11:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$L13",null,{}],null,["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}]]}],"p":false,"v":null}}]]
26
26
  f:[["children",{"s":"workflows","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$10"},"c":"$Q11"}]]
27
- 0:{"P":null,"c":["","workflows"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"bGpyabjq1-3SdKoGdv5wT"}
27
+ 0:{"P":null,"c":["","workflows"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ywyth89I66anpNjab782m"}
28
28
  10:C
29
29
  e:"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params"
30
30
  19:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -1,4 +1,4 @@
1
1
  :HL["/_next/static/css/ec6498e6b4f4227c.css","style"]
2
2
  2:[["children",{"s":"__PAGE__","h":160}]]
3
3
  1:[["children",{"s":"workflows","h":96,"c":"$Q2"}]]
4
- 0:{"b":"bGpyabjq1-3SdKoGdv5wT","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
4
+ 0:{"b":"ywyth89I66anpNjab782m","t":{"t":{"s":"","h":80,"c":"$Q1"}}}
@@ -25,7 +25,7 @@ d:I[1380,[],""]
25
25
  13:C
26
26
  14:[["children",{"s":"__PAGE__","h":160,"d":{"r":["$","$1","c",{"children":[["$","$L16",null,{}],null,["$","$L17",null,{"children":["$","$18",null,{"name":"Next.MetadataOutlet","children":"$@19"}]}]]}],"p":"$@1a","v":null,"s":"$10"}}]]
27
27
  11:[["children",{"s":"workflows","h":96,"d":{"r":["$","$1","c",{"children":[null,["$","$Lc",null,{"parallelRouterKey":"children","template":["$","$Ld",null,{}]}]]}],"p":"$@12","v":"$13","s":"$10"},"c":"$Q14"}]]
28
- 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","template":["$","$Ld",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":"$@f","v":null,"s":"$10"},"c":"$Q11"},"h":{"r":["$","$1","h",{"children":[null,["$","$L1c",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L1e",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$18",null,{"name":"Next.Metadata","children":[]}]}],null]}],null]}],"p":"$@1f","v":null,"s":"$10"}},"a":"$@20","u":"$@21","b":"bGpyabjq1-3SdKoGdv5wT"}
28
+ 0:{"t":{"t":{"s":"","h":80,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","template":["$","$Ld",null,{}],"notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]]}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":"$@f","v":null,"s":"$10"},"c":"$Q11"},"h":{"r":["$","$1","h",{"children":[null,["$","$L1c",null,{"children":[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]}],["$","$L1e",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$18",null,{"name":"Next.Metadata","children":[]}]}],null]}],null]}],"p":"$@1f","v":null,"s":"$10"}},"a":"$@20","u":"$@21","b":"ywyth89I66anpNjab782m"}
29
29
  e:"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params"
30
30
  19:null
31
31
  10:300
@@ -1 +1 @@
1
- <!DOCTYPE html><html lang="zh" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/ec6498e6b4f4227c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a90fe7e6c3b4bb45.js"/><script src="/_next/static/chunks/87c73c54-8350361388fba170.js" async=""></script><script src="/_next/static/chunks/968-98c23a99cb0f4832.js" async=""></script><script src="/_next/static/chunks/main-app-44f3d55a6e6befbb.js" async=""></script><script src="/_next/static/chunks/820-b9d442e4990c267b.js" async=""></script><script src="/_next/static/chunks/567-54b277a64dd332a4.js" async=""></script><script src="/_next/static/chunks/993-01834e67bc353d44.js" async=""></script><script src="/_next/static/chunks/825-c8f40c7b7d482f83.js" async=""></script><script src="/_next/static/chunks/237-34a3fbfba7ff0de5.js" async=""></script><script src="/_next/static/chunks/914-8a8dbb0d7c5f49dd.js" async=""></script><script src="/_next/static/chunks/app/layout-5c75ea62c5543a6e.js" async=""></script><script src="/_next/static/chunks/app/workflows/page-da494d4bd74cf25f.js" async=""></script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="h-dvh overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh items-center justify-center text-sm text-muted-foreground">Loading...</div><script src="/_next/static/chunks/webpack-a90fe7e6c3b4bb45.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"ClientSegmentRoot\"\n3:I[589,[],\"$2\"]\n4:\"static/chunks/820-b9d442e4990c267b.js\"\n5:\"static/chunks/567-54b277a64dd332a4.js\"\n6:\"static/chunks/993-01834e67bc353d44.js\"\n7:\"static/chunks/825-c8f40c7b7d482f83.js\"\n8:\"static/chunks/237-34a3fbfba7ff0de5.js\"\n9:\"static/chunks/914-8a8dbb0d7c5f49dd.js\"\na:\"static/chunks/app/layout-5c75ea62c5543a6e.js\"\nb:I[30841,[\"820\",\"$4\",\"567\",\"$5\",\"993\",\"$6\",\"825\",\"$7\",\"237\",\"$8\",\"914\",\"$9\",\"177\",\"$a\"],\"default\"]\nc:I[99630,[],\"\"]\nd:I[1380,[],\"\"]\n12:\"static/chunks/app/workflows/page-da494d4bd74cf25f.js\"\n13:I[39173,[\"820\",\"$4\",\"567\",\"$5\",\"993\",\"$6\",\"914\",\"$9\",\"143\",\"$12\"],\"WorkflowRuns\"]\n14:I[30887,[],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n17:\"ViewportBoundary\"\n18:I[30887,[],\"$17\"]\n1a:\"MetadataBoundary\"\n1b:I[30887,[],\"$1a\"]\n1d:I[15718,[],\"default\",1]\n:HL[\"/_next/static/css/ec6498e6b4f4227c.css\",\"style\"]\n10:X\n11:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L13\",null,{}],null,[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]]}],\"p\":false,\"v\":null}}]]\nf:[[\"children\",{\"s\":\"workflows\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$10\"},\"c\":\"$Q11\"}]]\n0:{\"P\":null,\"c\":[\"\",\"workflows\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ec6498e6b4f4227c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L3\",null,{\"Component\":\"$b\",\"slots\":{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"serverProvidedParams\":{\"params\":{},\"promises\":[\"$@e\"]}}]]}],\"p\":false,\"v\":null},\"c\":\"$Qf\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1c\"}]}],null]}],null]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$1d\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"bGpyabjq1-3SdKoGdv5wT\"}\n10:C\ne:\"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params\"\n19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n16:null\n1c:[]\n"])</script></body></html>
1
+ <!DOCTYPE html><html lang="zh" class="dark"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="/_next/static/css/ec6498e6b4f4227c.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-a90fe7e6c3b4bb45.js"/><script src="/_next/static/chunks/87c73c54-8350361388fba170.js" async=""></script><script src="/_next/static/chunks/968-98c23a99cb0f4832.js" async=""></script><script src="/_next/static/chunks/main-app-44f3d55a6e6befbb.js" async=""></script><script src="/_next/static/chunks/820-b9d442e4990c267b.js" async=""></script><script src="/_next/static/chunks/567-54b277a64dd332a4.js" async=""></script><script src="/_next/static/chunks/993-01834e67bc353d44.js" async=""></script><script src="/_next/static/chunks/825-c8f40c7b7d482f83.js" async=""></script><script src="/_next/static/chunks/237-34a3fbfba7ff0de5.js" async=""></script><script src="/_next/static/chunks/914-8a8dbb0d7c5f49dd.js" async=""></script><script src="/_next/static/chunks/app/layout-5c75ea62c5543a6e.js" async=""></script><script src="/_next/static/chunks/app/workflows/page-da494d4bd74cf25f.js" async=""></script><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="h-dvh overflow-hidden"><div hidden=""><!--$--><!--/$--></div><div class="flex h-dvh items-center justify-center text-sm text-muted-foreground">Loading...</div><script src="/_next/static/chunks/webpack-a90fe7e6c3b4bb45.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:\"ClientSegmentRoot\"\n3:I[589,[],\"$2\"]\n4:\"static/chunks/820-b9d442e4990c267b.js\"\n5:\"static/chunks/567-54b277a64dd332a4.js\"\n6:\"static/chunks/993-01834e67bc353d44.js\"\n7:\"static/chunks/825-c8f40c7b7d482f83.js\"\n8:\"static/chunks/237-34a3fbfba7ff0de5.js\"\n9:\"static/chunks/914-8a8dbb0d7c5f49dd.js\"\na:\"static/chunks/app/layout-5c75ea62c5543a6e.js\"\nb:I[30841,[\"820\",\"$4\",\"567\",\"$5\",\"993\",\"$6\",\"825\",\"$7\",\"237\",\"$8\",\"914\",\"$9\",\"177\",\"$a\"],\"default\"]\nc:I[99630,[],\"\"]\nd:I[1380,[],\"\"]\n12:\"static/chunks/app/workflows/page-da494d4bd74cf25f.js\"\n13:I[39173,[\"820\",\"$4\",\"567\",\"$5\",\"993\",\"$6\",\"914\",\"$9\",\"143\",\"$12\"],\"WorkflowRuns\"]\n14:I[30887,[],\"OutletBoundary\"]\n15:\"$Sreact.suspense\"\n17:\"ViewportBoundary\"\n18:I[30887,[],\"$17\"]\n1a:\"MetadataBoundary\"\n1b:I[30887,[],\"$1a\"]\n1d:I[15718,[],\"default\",1]\n:HL[\"/_next/static/css/ec6498e6b4f4227c.css\",\"style\"]\n10:X\n11:[[\"children\",{\"s\":\"__PAGE__\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L13\",null,{}],null,[\"$\",\"$L14\",null,{\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@16\"}]}]]}],\"p\":false,\"v\":null}}]]\nf:[[\"children\",{\"s\":\"workflows\",\"h\":512,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":\"$undefined\",\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]]}],\"p\":false,\"v\":\"$10\"},\"c\":\"$Q11\"}]]\n0:{\"P\":null,\"c\":[\"\",\"workflows\"],\"q\":\"\",\"i\":false,\"t\":{\"t\":{\"s\":\"\",\"h\":528,\"d\":{\"r\":[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/ec6498e6b4f4227c.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"$L3\",null,{\"Component\":\"$b\",\"slots\":{\"children\":[\"$\",\"$Lc\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$Ld\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]},\"serverProvidedParams\":{\"params\":{},\"promises\":[\"$@e\"]}}]]}],\"p\":false,\"v\":null},\"c\":\"$Qf\"},\"h\":{\"r\":[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$L18\",null,{\"children\":\"$L19\"}],[\"$\",\"$L1b\",null,{\"children\":[[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$15\",null,{\"name\":\"Next.Metadata\",\"children\":\"$L1c\"}]}],null]}],null]}],\"p\":false,\"v\":null}},\"m\":\"$undefined\",\"G\":[\"$1d\",[]],\"S\":true,\"r\":\"$undefined\",\"s\":\"$undefined\",\"a\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"ywyth89I66anpNjab782m\"}\n10:C\ne:\"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params\"\n19:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n16:null\n1c:[]\n"])</script></body></html>
@@ -24,7 +24,7 @@ d:I[1380,[],""]
24
24
  10:X
25
25
  11:[["children",{"s":"__PAGE__","h":512,"d":{"r":["$","$1","c",{"children":[["$","$L13",null,{}],null,["$","$L14",null,{"children":["$","$15",null,{"name":"Next.MetadataOutlet","children":"$@16"}]}]]}],"p":false,"v":null}}]]
26
26
  f:[["children",{"s":"workflows","h":512,"d":{"r":["$","$1","c",{"children":[null,["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":"$undefined","forbidden":"$undefined","unauthorized":"$undefined"}]]}],"p":false,"v":"$10"},"c":"$Q11"}]]
27
- 0:{"P":null,"c":["","workflows"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"bGpyabjq1-3SdKoGdv5wT"}
27
+ 0:{"P":null,"c":["","workflows"],"q":"","i":false,"t":{"t":{"s":"","h":528,"d":{"r":["$","$1","c",{"children":[[["$","link","0",{"rel":"stylesheet","href":"/_next/static/css/ec6498e6b4f4227c.css","precedence":"next","crossOrigin":"$undefined","nonce":"$undefined"}]],["$","$L3",null,{"Component":"$b","slots":{"children":["$","$Lc",null,{"parallelRouterKey":"children","error":"$undefined","errorStyles":"$undefined","errorScripts":"$undefined","template":["$","$Ld",null,{}],"templateStyles":"$undefined","templateScripts":"$undefined","notFound":[[["$","title",null,{"children":"404: This page could not be found."}],["$","div",null,{"style":{"fontFamily":"system-ui,\"Segoe UI\",Roboto,Helvetica,Arial,sans-serif,\"Apple Color Emoji\",\"Segoe UI Emoji\"","height":"100vh","textAlign":"center","display":"flex","flexDirection":"column","alignItems":"center","justifyContent":"center"},"children":["$","div",null,{"children":[["$","style",null,{"dangerouslySetInnerHTML":{"__html":"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}"}}],["$","h1",null,{"className":"next-error-h1","style":{"display":"inline-block","margin":"0 20px 0 0","padding":"0 23px 0 0","fontSize":24,"fontWeight":500,"verticalAlign":"top","lineHeight":"49px"},"children":404}],["$","div",null,{"style":{"display":"inline-block"},"children":["$","h2",null,{"style":{"fontSize":14,"fontWeight":400,"lineHeight":"49px","margin":0},"children":"This page could not be found."}]}]]}]}]],[]],"forbidden":"$undefined","unauthorized":"$undefined"}]},"serverProvidedParams":{"params":{},"promises":["$@e"]}}]]}],"p":false,"v":null},"c":"$Qf"},"h":{"r":["$","$1","h",{"children":[null,["$","$L18",null,{"children":"$L19"}],["$","$L1b",null,{"children":[["$","div",null,{"hidden":true,"children":["$","$15",null,{"name":"Next.Metadata","children":"$L1c"}]}],null]}],null]}],"p":false,"v":null}},"m":"$undefined","G":["$1d",[]],"S":true,"r":"$undefined","s":"$undefined","a":"$undefined","l":"$undefined","p":"$undefined","d":"$undefined","b":"ywyth89I66anpNjab782m"}
28
28
  10:C
29
29
  e:"$0:t:t:d:r:props:children:1:props:serverProvidedParams:params"
30
30
  19:[["$","meta","0",{"charSet":"utf-8"}],["$","meta","1",{"name":"viewport","content":"width=device-width, initial-scale=1"}]]
@@ -32,7 +32,7 @@ DevFlow memory snapshot=pending; source=${o.source}; reason=previous_snapshot_di
32
32
  `)}:a.length>0?{decision:"degrade",unresolved:a,additionalContext:"DevFlow terminal obligations remain unresolved after their one-shot correction budget."}:{decision:"allow",unresolved:[]}}finally{n.close();}}function Pl(e,t){return !!e.getWorkByIdempotencyKey(`memory-turn:commit_explicit:${t}`)}function jl(e){if(!e)return false;let t=e.normalize("NFKC").replace(/\s+/gu," ");return /(?:未|没有|无法|失败|暂未|尚未).{0,24}(?:记住|记下|记录|保存|持久化|回执)|(?:memory|receipt).{0,24}(?:failed|missing|pending|degraded|not saved)|status=(?:pending|degraded|rejected|failed)/iu.test(t)?false:/(?:已|已经|成功).{0,20}(?:记住|记下|记录|保存|持久化)|跨会话生效|(?:memory|preference).{0,20}(?:saved|remembered|persisted)|status=(?:accepted|committed)/iu.test(t)}function $l(e,t,n){let o=e.get(t);if(o){for(let r of o.evidenceObligations)n.upsertSessionObligation({obligationId:`evidence:${r.obligationId}`,projectRoot:o.projectRoot,sessionId:t,executionId:o.executionId,kind:"evidence_contract",state:"open",payload:{contract:r.contract,runtimeObligationId:r.obligationId},createdAt:r.promptedAt,updatedAt:o.lastActivityAt});for(let r of o.evidenceOutcomes){let i=`evidence:${r.obligationId}`,s=n.getSessionObligation(o.projectRoot,t,i);if(!s||s.state!=="open"&&!(s.state==="degraded"&&r.status==="resolved"))continue;let a=r.status==="resolved"?`evidence-receipt:${createHash("sha256").update(`${r.obligationId}\0${r.completedAt}\0${r.attempt}`).digest("hex").slice(0,24)}`:void 0;n.resolveSessionObligation({projectRoot:o.projectRoot,sessionId:t,obligationId:i,state:r.status==="resolved"?"satisfied":"degraded",receiptId:a,reason:r.reason,resolvedAt:r.completedAt});}}}var Fl=[/\b(?:rm\s+-rf|sudo|chmod|chown|force\s+push|reset\s+--hard|publish|release|deploy)\b/iu,/\b(?:secret|credential|token|password|security|authentication|authorization)\b/iu,/(?:删除|强制推送|发布|部署|凭据|密钥|安全|权限)/u],Hl=[/\b(?:migration|upgrade|dependency|dependencies|generated files?|write all|rewrite)\b/iu,/(?:迁移|升级|依赖|生成文件|批量写入)/u];function dn(e){let t=`${e.instruction}
33
33
  ${JSON.stringify(e.trigger)}`,n=[];Fl.some(r=>r.test(t))&&n.push("high_risk_operation"),Hl.some(r=>r.test(t))&&n.push("broad_or_migrating_change"),e.kind==="correction"&&n.push("user_correction_requires_observation");let o=n.includes("high_risk_operation")?"high":n.includes("broad_or_migrating_change")||e.scope==="global"?"medium":"low";return {risk:o,manualOnly:o==="high"||n.includes("broad_or_migrating_change"),reasons:n}}var Nl=new Set(["project_convention","user_preference","decision_made","config_discovery"]);function un(e){let t=e.payload.executionId?e.database.getSkillExecution(e.payload.executionId):e.database.getLatestSkillExecutionForSession(e.payload.sessionId),n=e.database.listHostActionsForSession(e.payload.projectRoot,e.payload.sessionId,e.payload.executionId),o=n.find(l=>l.state==="verified"),r=n.find(l=>["failed","cancelled","degraded"].includes(l.state)),i=r?"negative":o?"positive":"unknown",s=new Set,a=[],c=0,d=0;for(let l of e.evidence){if(!Ll(l)){d+=1;continue}let u=ri(l),m=ql(l,t?.skillName),f=ii(l),p=zl(e.payload.projectRoot,u,l.facetKey??l.semanticKey??l.id,m),h=e.database.getLearningCandidate(p),g=dn({scope:"project",kind:u,instruction:f,trigger:m});e.database.upsertLearningCandidate({id:p,projectRoot:e.payload.projectRoot,scope:"project",kind:u,trigger:m,instruction:f,confidence:Wl(l),manualOnly:g.manualOnly,risk:g.risk});h&&h.instruction!==f&&e.database.addLearningCandidateEvidence({id:ti(p,e.payload.sessionId,l.id,"contradicting"),candidateId:p,projectRoot:e.payload.projectRoot,sessionId:e.payload.sessionId,executionId:e.payload.executionId,memoryObservationId:l.id,sourceType:"correction",polarity:"contradicting",outcome:i,evidenceHash:ni(p,e.payload,l,"contradicting"),receipt:e.payload.closureReceipt,payload:{previousInstruction:h.instruction,replacementInstruction:f,projectRevision:e.payload.projectRevision},createdAt:l.createdAt});let S=e.database.addLearningCandidateEvidence({id:ti(p,e.payload.sessionId,l.id,"supporting"),candidateId:p,projectRoot:e.payload.projectRoot,sessionId:e.payload.sessionId,executionId:e.payload.executionId,memoryObservationId:l.id,outcomeId:o?.id??r?.id,sourceType:Ul(l),polarity:"supporting",outcome:i,evidenceHash:ni(p,e.payload,l,"supporting"),receipt:e.payload.closureReceipt,payload:{semanticKey:l.semanticKey,facetKey:l.facetKey,evidenceStatus:l.evidenceStatus,source:l.source,projectRevision:e.payload.projectRevision,executionStatus:t?.status,policyReasons:g.reasons},createdAt:l.createdAt});c+=1,s.add(p),e.rolloutMode!=="off"&&S.state==="candidate"&&S.supportingSessions>=3&&S.successfulOutcomes>=2&&e.database.transitionLearningCandidate(p,{target:"shadow",reason:"evidence_threshold_satisfied"}).state==="shadow"&&a.push(p);}return {considered:e.evidence.length,accepted:c,excluded:d,candidateIds:[...s],promotedToShadow:a}}function Ll(e){return !(!Nl.has(e.type)||e.source!=="explicit_intent"&&e.source!=="manual"&&e.evidenceStatus!=="verified"||!e.narrative.trim()&&!e.title.trim())}function ri(e){return e.type==="decision_made"?"workflow":e.type==="user_preference"&&(e.semanticValue.startsWith("--")||e.tools.length>0)?"tool_preference":"convention"}function ql(e,t){return {...t?{skills:[t]}:{},...e.entities.length>0?{entities:[...new Set(e.entities)].slice(0,8)}:{},...e.files.length>0?{files:[...new Set(e.files)].slice(0,8)}:{},...e.tools.length>0?{commands:[...new Set(e.tools)].slice(0,8)}:{},semantic:{subject:e.semanticSubject,predicate:e.semanticPredicate,value:e.semanticValue,polarity:e.semanticPolarity}}}function ii(e){return (e.narrative.trim()||e.title.trim()).replace(/\s+/gu," ").slice(0,1200)}function Wl(e){let t=e.source==="explicit_intent"?.08:0;return Math.max(0,Math.min(1,e.confidence+t))}function Ul(e){return e.semanticPolarity==="negative"?"correction":ri(e)==="tool_preference"?"tool_preference":e.source==="explicit_intent"?"memory":"convention"}function zl(e,t,n,o){let r={...o,semantic:void 0};return `learning:${createHash("sha256").update(`${e}\0project\0${t}\0${n}\0${stableLearningJson(r)}`).digest("hex").slice(0,24)}`}function ti(e,t,n,o){return `learning-evidence:${createHash("sha256").update(`${e}\0${t}\0${n}\0${o}`).digest("hex").slice(0,24)}`}function ni(e,t,n,o){return createHash("sha256").update(stableLearningJson({candidateId:e,sessionId:t.sessionId,executionId:t.executionId,closureReceipt:t.closureReceipt,projectRevision:t.projectRevision,observationId:n.id,instruction:ii(n),polarity:o})).digest("hex")}var ce=3e4,fn=1e3,su=new Set(["git","npm","pnpm","yarn"]);function si(e){return {"workflow.worker_start":async({item:t})=>au(e,t),"workflow.worker_monitor":async({item:t})=>cu(e,t),"workflow.worker_verify":async({item:t})=>du(e,t),"workflow.worker_merge":async({item:t})=>lu(e,t),"workflow.worker_cleanup":async({item:t})=>uu(e,t)}}async function au(e,t){await Ee(e,t,async(n,o)=>{if(o.state==="running"||o.state==="starting"){mn(n,o);return}if(o.state!=="planned")return;let r=`worker-plane:${process.pid}`;n.leaseWorkflowWorker(e,o.workerId,r,ce);let i=await createManagedWorktree({projectRoot:e,runId:o.runId,stepId:o.stepId,baseRevision:o.baseRevision,registered:!0});if(i.worktreePath!==o.worktreePath||i.branch!==o.branch){n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"hold",leaseOwner:r,reason:"managed_worktree_identity_mismatch"});return}n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"starting",leaseOwner:r});let s=di(o.workerId),a=mu(o);createWorkerArtifacts(s,a);let d=createDefaultHostAdapterRegistry().list().find(f=>f.id===o.host);if(!d)throw new x("unsupported_worker_host",`Unsupported worker host ${o.host}`);let l=de(o.handoff.actionId,"actionId"),u=n.getHostAction(e,l);if(!u)throw new x("worker_host_action_missing",`Host action ${l} was not found`);u.state==="waiting"&&n.startHostAction({actionId:l,projectRoot:e});let m=launchWorker(d,{workerId:o.workerId,runId:o.runId,stepId:o.stepId,host:o.host==="codex"?"codex":"claude-code",worktreePath:o.worktreePath,taskFile:s.taskFile,handoffFile:s.handoffFile,statusFile:s.statusFile,sessionId:o.sessionId??"worker",executionId:o.executionId??o.workerId,contextReceipt:o.contextReceipt,timeoutMs:30*6e4},s,{onHeartbeat:()=>{let f=openGlobalDevFlowDatabase();try{f.heartbeatWorkflowWorker(e,o.workerId,r,ce);}catch{}finally{f.close();}}});pu(s,{state:"running",pid:m.child.pid,owner:r,startedAt:Date.now()}),n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"running",leaseOwner:r,heartbeatAt:Date.now(),leaseExpiresAt:Date.now()+ce}),mn(n,o),m.completion.finally(()=>{let f=openGlobalDevFlowDatabase();try{mn(f,o,Date.now());}finally{f.close();}});});}async function cu(e,t){await Ee(e,t,async(n,o)=>{if(o.state!=="running"&&o.state!=="starting")return;let r=di(o.workerId);if(existsSync(r.handoffFile)){let c=readWorkerHandoff(r.handoffFile,{workerId:o.workerId,runId:o.runId,stepId:o.stepId,contextReceipt:o.contextReceipt,worktreePath:o.worktreePath}),d=de(o.handoff.actionId,"actionId");n.reportHostAction({actionId:d,projectRoot:e,report:{workerId:o.workerId,handoff:c},evidenceHash:ui(c)}),n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"reported",leaseOwner:o.leaseOwner,finalRevision:c.finalRevision,handoff:{...o.handoff,terminalHandoff:c}}),n.enqueueWork({idempotencyKey:`workflow-worker-verify:${o.workerId}:${c.finalRevision}`,kind:"workflow.worker_verify",projectRoot:e,payload:{workerId:o.workerId}});return}let i=fu(r),s=typeof i?.pid=="number"?i.pid:void 0;if(s&&hu(s)){let c=typeof i?.startedAt=="number"?i.startedAt:o.updatedAt;if(Date.now()-c>30*6e4){try{process.kill(s,"SIGTERM");}catch{}n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"failed",leaseOwner:o.leaseOwner,reason:"worker_process_timeout"});let l=de(o.handoff.actionId,"actionId");n.failHostAction({actionId:l,projectRoot:e,report:{reason:"worker_process_timeout"}});return}let d=o.leaseOwner??(typeof i?.owner=="string"?i.owner:void 0);throw d?(n.heartbeatWorkflowWorker(e,o.workerId,d,ce),li("worker_running",fn)):new x("worker_lease_owner_missing","Worker lease owner is missing")}n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"failed",leaseOwner:o.leaseOwner,reason:"worker_exited_without_handoff"});let a=de(o.handoff.actionId,"actionId");n.failHostAction({actionId:a,projectRoot:e,report:{reason:"worker_exited_without_handoff"}});});}async function du(e,t){await Ee(e,t,async(n,o)=>{if(o.state!=="reported")return;n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"verifying",leaseOwner:o.leaseOwner});let r=o.handoff.terminalHandoff;if(!r)throw new x("worker_handoff_missing","Persisted worker handoff is missing");let i=de(o.handoff.actionId,"actionId"),s=n.getHostAction(e,i);if(!s)throw new x("worker_host_action_missing",`Host action ${i} was not found`);let a=ci(o),c=new GraderRegistry,d=await ai(n,o,async()=>verifyWorkerOutput({workerId:o.workerId,projectRoot:e,worktreePath:o.worktreePath,baseRevision:o.baseRevision,parentRevision:await gu(e),contextReceipt:o.contextReceipt,allowedFiles:o.allowedFiles,handoff:r,hostAction:s,verificationCommands:a,graderIds:["receipt_validity","lifecycle_terminal_state","workflow_evidence"],graderRunner:{run:async l=>{let u=await c.run({taskId:o.stepId,taskKind:l.taskKind,projectRoot:l.projectRoot,acceptanceCriteria:[],evidence:l.evidence});return {...u,unavailableBlocking:u.unavailableRequired}}}}));if(!d.passed){n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:d.state,leaseOwner:o.leaseOwner,reason:d.reason}),d.state==="failed"&&n.failHostAction({actionId:i,projectRoot:e,outcome:"failed",report:{...s.report,verification:d},evidenceHash:d.simulationHash});return}n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"merge_ready",leaseOwner:o.leaseOwner,finalRevision:d.finalRevision,handoff:{...o.handoff,terminalHandoff:r,verification:d}}),n.enqueueWork({idempotencyKey:`workflow-worker-merge:${o.workerId}:${d.finalRevision}`,kind:"workflow.worker_merge",projectRoot:e,payload:{workerId:o.workerId}});});}async function lu(e,t){await Ee(e,t,async(n,o)=>{if(o.state!=="merge_ready")return;let r=o.handoff.verification;if(!r?.passed)throw new x("worker_verification_missing","Verified merge evidence is missing");let i=de(o.handoff.actionId,"actionId"),s=new SerializedWorkerMergeQueue(n,{onMerged:async({mergeCommit:c})=>{n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"merged",leaseOwner:o.leaseOwner,finalRevision:o.finalRevision,reason:`merged:${c}`});let d=n.getHostAction(e,i);n.verifyHostAction({actionId:i,projectRoot:e,report:{...d?.report??{},mergeCommit:c,verification:r},evidenceHash:ui({mergeCommit:c,verification:r})});},scheduleCleanup:()=>{n.enqueueWork({idempotencyKey:`workflow-worker-cleanup:${o.workerId}:merged`,kind:"workflow.worker_cleanup",projectRoot:e,payload:{workerId:o.workerId}});}}),a=await ai(n,o,()=>s.enqueueAndMerge({workerId:o.workerId,projectRoot:e,baseRevision:o.baseRevision,verification:r,message:`merge(devflow-worker): ${o.runId}/${o.stepId}`}));a.state==="conflict"&&n.transitionWorkflowWorker({projectRoot:e,workerId:o.workerId,target:"hold",leaseOwner:o.leaseOwner,reason:a.reason??"merge_conflict"});});}async function uu(e,t){await Ee(e,t,async(n,o)=>{let r=t.payload,i=await cleanupManagedWorktree({repositoryRoot:e,worktreePath:o.worktreePath,branch:o.branch,registered:!0,handoffDurable:!!o.handoff.terminalHandoff||r.operatorApproved===!0});if(!i.cleaned)throw li(`cleanup_${i.reason??"refused"}`,3e4)});}async function ai(e,t,n){let o=t.leaseOwner;if(!o)return n();let r=setInterval(()=>{try{e.heartbeatWorkflowWorker(t.projectRoot,t.workerId,o,ce);}catch{}},Math.floor(ce/3));r.unref();try{return await n()}finally{clearInterval(r);}}async function Ee(e,t,n){let o=yu(t.payload),r=openGlobalDevFlowDatabase();try{let i=r.getWorkflowWorker(e,o);if(!i)throw new x("worker_not_found",`Worker ${o} was not found`);await n(r,i);}finally{r.close();}}function mu(e){let t=e.handoff.task;if(!t||typeof t!="object"||Array.isArray(t))throw new x("worker_task_missing","Worker task envelope is missing");let n=ci(e);return {workerId:e.workerId,runId:e.runId,stepId:e.stepId,projectRoot:e.projectRoot,worktreePath:e.worktreePath,baseRevision:e.baseRevision,contextReceipt:e.contextReceipt,retrievalSessionId:e.retrievalSessionId,allowedFiles:e.allowedFiles,requiredTools:[],task:t,verification:{commands:n,graders:["receipt_validity","lifecycle_terminal_state","workflow_evidence"]},constraints:{recursiveWorkers:false,maxContextCycles:3}}}function ci(e){let t=e.handoff.verificationCommands;if(!Array.isArray(t)||t.length===0)throw new x("verification_contract_missing","Worker verification commands are missing");return t.map(n=>{if(!n||typeof n!="object"||Array.isArray(n))throw new x("verification_contract_invalid","Worker verification command is malformed");let o=n;if(typeof o.command!="string"||!su.has(o.command)||!Array.isArray(o.args)||o.args.some(r=>typeof r!="string"))throw new x("verification_contract_invalid","Worker verification command is not allowlisted");return {command:o.command,args:o.args}})}function di(e){let t=workerCoordinationRoot(e,homedir());return {root:t,taskFile:join(t,"task.json"),handoffFile:join(t,"handoff.json"),statusFile:join(t,"status.json"),stdoutFile:join(t,"stdout.log"),stderrFile:join(t,"stderr.log")}}function pu(e,t){writeJsonAtomic(e.statusFile,t);}function fu(e){try{return JSON.parse(readFileSync$1(e.statusFile,"utf8"))}catch{return null}}function mn(e,t,n=Date.now()+fn){e.enqueueWork({idempotencyKey:`workflow-worker-monitor:${t.workerId}:${Math.floor(n/fn)}`,kind:"workflow.worker_monitor",projectRoot:t.projectRoot,payload:{workerId:t.workerId},nextAttemptAt:n,maxAttempts:1e3});}async function gu(e){let{gitRevision:t}=await import('@devflow-tools/workflow-engine');return t(e,"HEAD")}function hu(e){try{return process.kill(e,0),!0}catch{return false}}function li(e,t){return Object.assign(new Error(e),{category:e,retryAfterMs:t,retryWithoutAttempt:true})}function yu(e){if(!e||typeof e!="object"||typeof e.workerId!="string")throw new x("invalid_worker_payload","Worker work item requires workerId");return e.workerId}function de(e,t){if(typeof e!="string"||!e.trim())throw new x("worker_identity_missing",`Worker ${t} is missing`);return e}function ui(e){return createHash("sha256").update(JSON.stringify(e)).digest("hex")}var wu=new Set(["Write","Edit","NotebookEdit"]);function gi(e){if(!wu.has(e.toolName)||Ru(e.toolResponse))return null;let t=Su(e.projectRoot,e.toolInput);if(!t)return null;let n=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let o=n.getActiveContextReceipt(e.projectRoot,e.sessionId,e.executionId),r=o?.canonicalAction?.verificationPlan??[];if(!o||r.length===0)return null;let i=[],s=[];for(let c of r){let d=_u({projectRoot:e.projectRoot,targetFile:t,kind:c.kind,mode:c.mode==="write"?"write":"check",required:c.required===!0,contextReceipt:o.contextHash}),l=`${o.contextHash}\0${e.toolUseId??t}\0${c.kind}\0${t}`,u=`policy-verification:${createHash("sha256").update(l).digest("hex")}`,m=Date.now();if(!d){let h=`verification_unavailable:${c.kind}`;n.upsertSessionObligation({obligationId:u,projectRoot:e.projectRoot,sessionId:e.sessionId,executionId:e.executionId,kind:"evidence_contract",state:"degraded",payload:{subtype:"policy_verification",status:"unknown",verificationKind:c.kind,targetFile:t,contextReceipt:o.contextHash},reason:h,createdAt:m,updatedAt:m,resolvedAt:m}),s.push(c.kind),c.required===!0&&O({projectRoot:e.projectRoot,sessionId:e.sessionId,requestId:o.requestId,executionId:e.executionId,kind:"verification.failed",payload:{receiptId:u,reasonCode:h},dedupeKey:`${u}:unavailable`,producer:"devflow-verification-scheduler"});continue}let f={...d,obligationId:u,sessionId:e.sessionId,executionId:e.executionId,requestId:o.requestId};n.upsertSessionObligation({obligationId:u,projectRoot:e.projectRoot,sessionId:e.sessionId,executionId:e.executionId,kind:"evidence_contract",state:"open",payload:{subtype:"policy_verification",status:"scheduled",verificationKind:c.kind,command:d.display,targetFile:t,contextReceipt:o.contextHash,required:c.required===!0},createdAt:m,updatedAt:m});let p=n.enqueueWork({idempotencyKey:u,kind:"verification.policy",projectRoot:e.projectRoot,sessionId:e.sessionId,payload:f,maxAttempts:2,nextAttemptAt:m});O({projectRoot:e.projectRoot,sessionId:e.sessionId,requestId:o.requestId,executionId:e.executionId,kind:"durable_work.owned",payload:{workId:p.id,obligation:"verification"},dedupeKey:`${p.id}:owned`,producer:"devflow-verification-scheduler"}),i.push(d.display);}return [i.length>0?`DevFlow scheduled policy verification: ${i.join(" && ")}`:"",s.length>0?`Verification unavailable and recorded as unknown: ${s.join(", ")}`:""].filter(Boolean).join(`
34
34
  `)||null}finally{n.close();}}async function hi(e,t){let n=bu(e,t.payload),o=await ku(n,e),r=n.kind==="typecheck"?Du(o.output,n.targetFile,e):[],i=pi({command:n.command,args:n.args}),s=openGlobalDevFlowDatabase();try{let a=Mu(e),c=n.kind==="typecheck"?s.getPolicyVerificationBaseline(e,n.kind,i):null,d=c&&c.sourceRevision===a?c:null,l=d?r.filter(b=>!d.diagnosticHashes.includes(b)):[],u;o.spawnError||/could not determine executable|command not found|not recognized as an internal|ERR_PNPM_RECURSIVE_EXEC_FIRST_FAIL/iu.test(o.output)?u="unavailable":o.timedOut?u="unknown":o.exitCode===0?u="passed":n.kind==="typecheck"&&!d?u="unknown":n.kind==="typecheck"&&l.length===0?u="passed":u="failed";let m=createHash("sha256").update(o.output).digest("hex"),f=`verification-receipt:${pi({obligationId:n.obligationId,commandHash:i,exitCode:o.exitCode,timedOut:o.timedOut,outputHash:m,diagnosticHashes:r,introduced:l,status:u})}`,p={status:u,kind:n.kind,command:n.display,exitCode:o.exitCode,timedOut:o.timedOut,outputHash:m,diagnosticHashes:r,introducedDiagnosticHashes:l,baselineAvailable:d!==null,receiptId:f},h=s.getWorkByIdempotencyKey(n.obligationId)?.id,g=s.getSessionObligation(e,n.sessionId,n.obligationId);if(g?.state==="open"&&(s.upsertSessionObligation({...g,payload:{...g.payload,status:u,outcome:p},updatedAt:Date.now()}),u!=="failed"&&s.resolveSessionObligation({projectRoot:e,sessionId:n.sessionId,obligationId:n.obligationId,state:u==="passed"?"satisfied":"degraded",receiptId:f,reason:u==="unknown"?"verification_result_unknown":u==="unavailable"?"verification_command_unavailable":void 0})),n.kind==="typecheck"&&o.exitCode===0&&s.upsertPolicyVerificationBaseline({projectRoot:e,kind:n.kind,commandHash:i,diagnosticHashes:[],sourceRevision:a,updatedAt:Date.now()}),Cu(s,n,p),O({projectRoot:e,sessionId:n.sessionId,requestId:n.requestId,executionId:n.executionId,kind:u==="passed"?"verification.succeeded":"verification.failed",payload:{receiptId:f,reasonCode:`verification_${u}`,verificationKind:n.kind},dedupeKey:f,producer:"devflow-verification-worker"}),h&&u!=="failed"&&O({projectRoot:e,sessionId:n.sessionId,requestId:n.requestId,executionId:n.executionId,kind:"durable_work.completed",payload:{workId:h,obligation:"verification"},dedupeKey:`${h}:completed`,producer:"devflow-verification-worker"}),u==="failed"){let b=new Error(`Policy verification failed: ${n.display}`);throw b.category="policy_verification_failed",b}return p}finally{s.close();}}function _u(e){let t=xu(e.projectRoot),n=Eu(e.projectRoot),o=t?.scripts??{},r={...t?.dependencies,...t?.devDependencies},i=null;if(e.kind==="formatter"&&(r.prettier||Tu(e.projectRoot)))i=it(n,"prettier",[e.mode==="write"?"--write":"--check",e.targetFile],6e4);else if(e.kind==="typecheck"){let s=yn(o,["typecheck","type-check","check:types"]);s?i=gn(n,s,12e4):r.typescript&&existsSync(join(e.projectRoot,"tsconfig.json"))&&(i=it(n,"tsc",["--noEmit","--pretty","false"],12e4));}else if(e.kind==="lint"){let s=yn(o,["lint"]);s&&(i=gn(n,s,12e4));}else if(e.kind==="test"){let s=Au(e.projectRoot,e.targetFile);s&&r.vitest?i=it(n,"vitest",["run",s],12e4):s&&(r.jest||r["@jest/core"])&&(i=it(n,"jest",["--runTestsByPath",s],12e4));}else if(e.kind==="build"){let s=yn(o,["build"]);s&&(i=gn(n,s,18e4));}else e.kind==="generated_files"&&(i={command:"git",args:["diff","--check","--",e.targetFile],timeoutMs:3e4});return i?{kind:e.kind,...i,display:[i.command,...i.args].map(Ou).join(" "),required:e.required,targetFile:e.targetFile,contextReceipt:e.contextReceipt}:null}function gn(e,t,n){return e==="yarn"?{command:"yarn",args:["run",t],timeoutMs:n}:e==="pnpm"?{command:"pnpm",args:["run",t],timeoutMs:n}:e==="bun"?{command:"bun",args:["run",t],timeoutMs:n}:{command:"npm",args:["run",t],timeoutMs:n}}function it(e,t,n,o){return e==="pnpm"?{command:"pnpm",args:["exec",t,...n],timeoutMs:o}:e==="yarn"?{command:"yarn",args:[t,...n],timeoutMs:o}:e==="bun"?{command:"bunx",args:[t,...n],timeoutMs:o}:{command:"npx",args:["--no-install",t,...n],timeoutMs:o}}function bu(e,t){if(!t||typeof t!="object"||Array.isArray(t))throw hn();let n=t,o=new Set(["npm","npx","pnpm","yarn","bun","bunx","git"]);if(!n.command||!o.has(n.command)||!Array.isArray(n.args)||!n.args.every(r=>typeof r=="string")||!n.obligationId||!n.sessionId||!n.kind||!n.targetFile||!n.contextReceipt||!n.display||!Number.isFinite(n.timeoutMs)||!yi(e,n.targetFile))throw hn();return n}function hn(){let e=new Error("Policy verification work payload is invalid");return e.category="invalid_payload",e}function ku(e,t){return new Promise(n=>{let o=spawn(e.command,e.args,{cwd:t,shell:false,stdio:["ignore","pipe","pipe"],env:{...process.env,CI:"1",FORCE_COLOR:"0"}}),r="",i=false,s=l=>{i||(i=true,n(l));},a=l=>{r=(r+String(l)).slice(-32768);};o.stdout.on("data",a),o.stderr.on("data",a);let c=false,d=setTimeout(()=>{c=true,o.kill("SIGTERM"),setTimeout(()=>o.kill("SIGKILL"),1e3).unref();},e.timeoutMs);o.on("error",l=>{clearTimeout(d),s({exitCode:null,timedOut:false,spawnError:true,output:`${r}
35
- ${l.message}`.slice(-32768)});}),o.on("close",l=>{clearTimeout(d),s({exitCode:l,timedOut:c,spawnError:false,output:r});});})}function Su(e,t){let n=t.file_path??t.notebook_path;if(typeof n!="string"||!n.trim())return null;let o=isAbsolute(n)?resolve(n):resolve(e,n);return yi(e,o)?relative(e,o).split(sep).join("/"):null}function yi(e,t){let n=isAbsolute(t)?resolve(t):resolve(e,t),o=relative(resolve(e),n);return o!==""&&o!==".."&&!o.startsWith(`..${sep}`)&&!isAbsolute(o)}function Ru(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let t=e;return t.ok===false||t.success===false||t.isError===true||!!t.error}function xu(e){try{return JSON.parse(readFileSync$1(join(e,"package.json"),"utf8"))}catch{return null}}function Eu(e){return existsSync(join(e,"pnpm-lock.yaml"))?"pnpm":existsSync(join(e,"yarn.lock"))?"yarn":existsSync(join(e,"bun.lockb"))||existsSync(join(e,"bun.lock"))?"bun":"npm"}function Tu(e){return [".prettierrc",".prettierrc.json",".prettierrc.js",".prettierrc.cjs","prettier.config.js","prettier.config.cjs"].some(t=>existsSync(join(e,t)))}function yn(e,t){return t.find(n=>typeof e[n]=="string"&&e[n].trim())??null}function Au(e,t){let n=t.replace(/\.[^.]+$/u,""),o=[".test.ts",".test.tsx",".spec.ts",".spec.tsx",".test.js",".spec.js"];for(let s of o){let a=`${n}${s}`;if(existsSync(join(e,a)))return a}let r=join(e,t.split("/").slice(0,-1).join("/")),i=t.split("/").at(-1)?.replace(/\.[^.]+$/u,"");if(!i||!existsSync(r))return null;try{return readdirSync$1(r).filter(s=>s.startsWith(`${i}.`)&&/\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(s)).map(s=>relative(e,join(r,s)).split(sep).join("/"))[0]??null}catch{return null}}function Du(e,t,n){let o=t.split(sep).join("/"),r=resolve(n,t).split(sep).join("/"),i=e.split(/\r?\n/u).map(s=>s.trim().split(sep).join("/")).filter(s=>s.includes(o)||s.includes(r)).map(s=>s.replace(/:\d+:\d+/gu,":#:#").replace(/\(\d+,\d+\)/gu,"(#,#)")).filter(s=>/\berror\s+TS\d+\b/iu.test(s));return [...new Set(i.map(s=>createHash("sha256").update(s).digest("hex")))]}function Cu(e,t,n){if(!t.executionId)return;let o=e.getSkillExecution(t.executionId);if(!o)return;let r=o.metadata&&typeof o.metadata=="object"?o.metadata:{},i=Array.isArray(r.policyVerificationOutcomes)?r.policyVerificationOutcomes:[];e.updateSkillExecution(t.executionId,{metadata:{...r,policyVerificationOutcomes:[...i,n]}});}function Mu(e){try{let t=readFileSync$1(join(e,".git","HEAD"),"utf8").trim();return t.startsWith("ref:")?readFileSync$1(join(e,".git",t.slice(5).trim()),"utf8").trim():t}catch{return}}function pi(e){return createHash("sha256").update(JSON.stringify(e)).digest("hex")}function Ou(e){return /^[A-Za-z0-9_./:@=-]+$/u.test(e)?e:JSON.stringify(e)}async function _i(e){let t=Date.now(),n=Vu(e.projectRoot),o=claudeCodeRuntimeAdapter.normalizePrompt(e.hostEvent??{session_id:e.sessionId,prompt:e.prompt},{projectRoot:n}),r=semanticTextHash(wi(o.rawPrompt)),i=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let s=i.getTaskIntentArtifactBySource({projectRoot:n,sessionId:e.sessionId,sourceHash:r});if(s){let g=vi(s).identity,b=i.getRuntimeActivation(g.projectRoot,g.sessionId,g.turnId,s.version);if(!b)throw new Error(`RUNTIME_ACTIVATION_MISSING:${s.artifactHash}`);return {artifact:vi(s),memoryIdentity:Ii(s),activation:b,reused:!0}}let a=`turn:${at(`${e.sessionId}\0${r}`)}`,c=`request:${at(`${n}\0${e.sessionId}\0${a}`)}`,d={projectRoot:n,projectId:`project:${stableRuntimeHash(n).slice(0,20)}`,hostId:o.hostId,sessionId:e.sessionId,executionId:e.sessionId,turnId:a,requestId:c},l=1,u=resolveRuntimeActivationSnapshot({projectRoot:n,createdAt:o.timestamp}),m=zu(o.rawPrompt),f={identity:d,version:l,rawPrompt:o.rawPrompt,normalizedPrompt:wi(o.rawPrompt),...o.command?{command:o.command}:{},slashArgs:o.slashArgs,...o.activeSkill?{activeSkill:o.activeSkill}:{},intent:"unknown",action:"unknown",entities:[],targetAnchors:m,policyConstraints:[],classificationEvidence:[],sourceEventIds:[o.sourceEventId??`host-event:${r.slice(0,24)}`],sourceHash:r,createdAt:o.timestamp},p={...f,artifactHash:Ju(f)};i.appendTaskIntentArtifact(Wu(p)),i.bindRuntimeActivation({identity:d,revision:l,snapshot:u});let h=qu(i,p);return y({event:"host.prompt.normalized",identity:d,level:"info",timestamp:Date.now(),data:{sourceHash:r,command:p.command,activeSkill:p.activeSkill,rawPromptBytes:Buffer.byteLength(p.rawPrompt)}}),y({event:"intent.artifact.created",identity:d,level:"info",timestamp:Date.now(),data:{artifactHash:p.artifactHash,targetCount:m.length}}),y({event:"intent.artifact.persisted",identity:d,level:"info",timestamp:Date.now(),data:{artifactHash:p.artifactHash,version:p.version,sourceHash:p.sourceHash,authority:"immutable-intent",captureLatencyMs:Date.now()-t}}),y({event:"terminal.transition.persisted",identity:d,level:"info",timestamp:Date.now(),data:{state:"intent_bound",receiptId:h,sourceIntentHash:p.artifactHash}}),{artifact:p,memoryIdentity:Ii(p),activation:u,reused:!1}}finally{i.close();}}function qu(e,t){let n=e.getLatestTerminalTransition(t.identity.projectRoot,t.identity.sessionId,t.identity.turnId);if(n)return n.receiptId;let o=`terminal:${at(`${t.artifactHash}\0open`)}`;return e.appendTerminalTransition({...t.identity,sequence:1,toState:"open",receiptId:o,reason:"host_prompt_accepted",payload:{sourceHash:t.sourceHash},createdAt:t.createdAt}),e.appendTerminalTransition({...t.identity,sequence:2,fromState:"open",toState:"intent_bound",receiptId:`terminal:${at(`${t.artifactHash}\0intent_bound`)}`,sourceReceiptId:o,reason:"immutable_intent_persisted",payload:{intentArtifactHash:t.artifactHash},createdAt:Math.max(t.createdAt,Date.now())}).receiptId}function Wu(e){return {...e.identity,version:e.version,supersedesHash:e.supersedesHash,rawPrompt:e.rawPrompt,normalizedPrompt:e.normalizedPrompt,command:e.command,slashArgs:e.slashArgs,activeSkill:e.activeSkill,intent:e.intent,action:e.action,entities:e.entities,targetAnchors:e.targetAnchors,policyConstraints:e.policyConstraints,classificationEvidence:e.classificationEvidence.map(t=>({...t})),sourceEventIds:e.sourceEventIds,sourceHash:e.sourceHash,artifactHash:e.artifactHash,createdAt:e.createdAt}}function vi(e){return {identity:Uu(e),version:e.version,...e.supersedesHash?{supersedesHash:e.supersedesHash}:{},rawPrompt:e.rawPrompt,normalizedPrompt:e.normalizedPrompt,...e.command?{command:e.command}:{},slashArgs:e.slashArgs,...e.activeSkill?{activeSkill:e.activeSkill}:{},intent:e.intent,action:e.action,entities:e.entities,targetAnchors:e.targetAnchors,policyConstraints:e.policyConstraints,classificationEvidence:e.classificationEvidence,sourceEventIds:e.sourceEventIds,sourceHash:e.sourceHash,artifactHash:e.artifactHash,createdAt:e.createdAt}}function Uu(e){return {projectRoot:e.projectRoot,projectId:e.projectId,hostId:e.hostId,sessionId:e.sessionId,turnId:e.turnId,requestId:e.requestId,...e.executionId?{executionId:e.executionId}:{}}}function Ii(e){let t=e.rawPrompt.trim().slice(0,4e3),n="identity"in e?e.identity.turnId:e.turnId;return {turnId:n,eventId:`memory-turn:${n.replace(/^turn:/u,"")}`,promptHash:createHash("sha256").update(t).digest("hex"),createdAt:e.createdAt}}function zu(e){let t=e.match(/(?:^|[\s`'"(])((?:\.{0,2}\/)?(?:[A-Za-z0-9_@.-]+\/)+[A-Za-z0-9_@.-]+(?:\.[A-Za-z0-9]+)?)/gu)??[];return Bu(t.map(n=>n.trim().replace(/^[`'"(]+|[`'"),.;:,。;:]+$/gu,"")).filter(n=>!n.startsWith("/")||/\.[A-Za-z0-9]+$/u.test(n))).slice(0,16)}function wi(e){return e.normalize("NFKC").replace(/\s+/gu," ").trim().slice(0,4e3)}function Bu(e){return [...new Set(e.filter(Boolean))]}function Vu(e){let t=resolve(e);try{return realpathSync(t)}catch{return t}}function Ju(e){return createHash("sha256").update(_n(e)).digest("hex")}function at(e){return createHash("sha256").update(e).digest("hex").slice(0,24)}function _n(e){if(e===null||typeof e=="string"||typeof e=="boolean")return JSON.stringify(e);if(typeof e=="number")return Number.isFinite(e)?JSON.stringify(e):"null";if(Array.isArray(e))return `[${e.map(_n).join(",")}]`;if(!e||typeof e!="object")return JSON.stringify(String(e));let t=e;return `{${Object.keys(t).sort().map(n=>`${JSON.stringify(n)}:${_n(t[n])}`).join(",")}}`}function kn(){return generateKeyPairSync("ed25519")}function Sn(e){let t=parseTrustedDecisionCommand(e.rawUserEvent,e.allowedOptionIds),n=e.now??Date.now(),o={schemaVersion:"delivery-user-attestation.v1",issuer:e.issuer,keyId:e.keyId,purpose:t.purpose,decisionId:t.decisionId,caseId:e.caseId,caseVersion:e.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId,actorId:e.actorId,targetDecisionHash:e.targetDecisionHash,rawUserEvent:e.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",e.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:t.decisionId,purpose:t.purpose,value:encodeDecisionValue(t.purpose,t.value)}),eventSequence:e.eventSequence,issuedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),nonce:e.nonce};return {...o,attestation:sign(null,canonicalJsonBytes(o),e.privateKey).toString("base64url")}}var ki=new Map;function Si(e){if(typeof e=="string")return /\bDevFlow decision ([A-Za-z0-9._:-]+)/u.exec(z(e))?.[1]}function z(e){return e.replace(/[\u0000-\u001f\u007f\ufffd]+/gu,"").replace(/\s+/gu," ").trim()}function nm(e){if(typeof e=="string")return e.trim()||void 0;if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.answers;if(!t||typeof t!="object"||Array.isArray(t))return;let n=Object.values(t);if(n.length!==1)return;let o=n[0];if(!(Array.isArray(o)||typeof o!="string"))return o.trim()||void 0}async function xi(e){if(e.toolName!=="AskUserQuestion")return {handled:false};let t=e.toolInput&&typeof e.toolInput=="object"&&!Array.isArray(e.toolInput)?e.toolInput:{};if(!Array.isArray(t.questions)||t.questions.length!==1)return {handled:false};let n=t.questions[0],o=Ti(e.projectRoot),r=Si(n.header)??Si(n.question);if(!r){let g=await o.pendingDecisionForSession(e.sessionId);if(!g||"ambiguous"in g||g.decision.kind!=="artifact_approval")return {handled:false};r=g.decision.id;}let i=r.split(/:(?:decision|question|approval):/u)[0],s=await o.pendingDecision(i);if(!s||s.id!==r)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: no pending decision matches ${r}. Refresh delivery_status.`};let a=Array.isArray(n.options)?n.options.map(g=>({label:typeof g.label=="string"?z(g.label):"",description:typeof g.description=="string"?z(g.description):""})):[],c=createHash("sha256").update(JSON.stringify({decisionId:r,question:z(String(n.question??"")),options:a})).digest("hex"),d=nm(e.toolResponse),l=d?z(d):void 0;if(!l)return (typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:e.sourceTurnId??e.toolUseId}):true)?{handled:true,resolved:false,message:`DevFlow interactive decision rejected: AskUserQuestion returned no single answer for ${r}. Use /devflow:decide ${r} -- <answer> if this is a free-form clarification.`}:{handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};if(n.multiSelect===true)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} must be a single selection.`};let u;if(s.options.length>0){let g=s.options.map(S=>({label:z(S.label),description:S.description?z(S.description):""}));if(a.length!==g.length||a.some((S,w)=>S.label!==g[w]?.label||S.description!==g[w]?.description))return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: the displayed options do not match the pending decision ${r}. Refresh delivery_status and render its options verbatim.`};let b=s.options.find(S=>z(S.label)===l);if(!b)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: answer does not match a pending option for ${r}.`};s.kind==="artifact_approval"?u=b.id==="approve"?`/devflow:approve ${r}`:`/devflow:reject ${r} -- ${l}`:u=`/devflow:decide ${r} ${b.id}`;}else {if(a.length>0)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} is a free-form clarification and must not be rendered as a choice list.`};u=`/devflow:decide ${r} -- ${l}`;}if(!(typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:e.sourceTurnId??e.toolUseId}):true))return {handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};let f=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,p=kn(),h=Sn({rawUserEvent:u,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId?.trim()||e.toolUseId?.trim()||`host-turn:${e.sessionId}:${Date.now()}`,actorId:f,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:p.privateKey,allowedOptionIds:s.options.map(g=>g.id)});try{return await o.resolveTrustedDecision({evidence:h,publicKey:p.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow interactive decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(g){return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${g instanceof Error?g.message:String(g)}`}}}async function Ei(e){let t=e.prompt.trim();if(!/^\/devflow:(?:decide|approve|reject|revise|cancel|exit)\b/u.test(t))return {handled:false};let n=Ti(e.projectRoot),o=t;if(t==="/devflow:approve"||t==="/devflow:approve current"){let l=await n.pendingDecisionForSession(e.sessionId);if(!l)return {handled:true,resolved:false,message:"DevFlow approval not found: there is no pending decision for this session."};if("ambiguous"in l)return {handled:true,resolved:false,message:`DevFlow approval is ambiguous: multiple pending cases exist (${l.caseIds.join(", ")}). Use the approval choices shown by the host.`};if(l.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."};o=`/devflow:approve ${l.decision.id}`;}let r;try{r=parseTrustedDecisionCommand(o);}catch(l){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${l instanceof Error?l.message:String(l)}`}}let i=r.decisionId.split(/:(?:decision|question|approval):/u)[0],s=await n.pendingDecision(i);if(!s||s.id!==r.decisionId)return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: no pending decision matches ${r.decisionId}. Refresh delivery_status.`};let a=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,c=kn(),d=Sn({rawUserEvent:o,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId?.trim()||`host-turn:${e.sessionId}:${Date.now()}`,actorId:a,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:c.privateKey,allowedOptionIds:s.options.map(l=>l.id)});try{return await n.resolveTrustedDecision({evidence:d,publicKey:c.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(l){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${l instanceof Error?l.message:String(l)}`}}}function Ti(e){let t=ki.get(e);if(t)return t;let n=createTrustedDeliveryFacade(e);return ki.set(e,n),n}function Ai(e=process.env){if(e.DEVFLOW_DISABLED==="1")return true;try{return existsSync(join(getDevFlowStateRoot({env:e}),"disable"))}catch{return false}}function Di(e){y({event:"hook.enforcement.shadow",identity:{projectRoot:e.projectRoot,sessionId:e.sessionId},level:"warn",timestamp:Date.now(),data:{tool:e.toolName,code:e.code??"DEVFLOW_POLICY",reason:e.reason.slice(0,500)}});try{process.stderr.write(`[devflow][shadow] would deny ${e.toolName}: ${e.reason}
35
+ ${l.message}`.slice(-32768)});}),o.on("close",l=>{clearTimeout(d),s({exitCode:l,timedOut:c,spawnError:false,output:r});});})}function Su(e,t){let n=t.file_path??t.notebook_path;if(typeof n!="string"||!n.trim())return null;let o=isAbsolute(n)?resolve(n):resolve(e,n);return yi(e,o)?relative(e,o).split(sep).join("/"):null}function yi(e,t){let n=isAbsolute(t)?resolve(t):resolve(e,t),o=relative(resolve(e),n);return o!==""&&o!==".."&&!o.startsWith(`..${sep}`)&&!isAbsolute(o)}function Ru(e){if(!e||typeof e!="object"||Array.isArray(e))return false;let t=e;return t.ok===false||t.success===false||t.isError===true||!!t.error}function xu(e){try{return JSON.parse(readFileSync$1(join(e,"package.json"),"utf8"))}catch{return null}}function Eu(e){return existsSync(join(e,"pnpm-lock.yaml"))?"pnpm":existsSync(join(e,"yarn.lock"))?"yarn":existsSync(join(e,"bun.lockb"))||existsSync(join(e,"bun.lock"))?"bun":"npm"}function Tu(e){return [".prettierrc",".prettierrc.json",".prettierrc.js",".prettierrc.cjs","prettier.config.js","prettier.config.cjs"].some(t=>existsSync(join(e,t)))}function yn(e,t){return t.find(n=>typeof e[n]=="string"&&e[n].trim())??null}function Au(e,t){let n=t.replace(/\.[^.]+$/u,""),o=[".test.ts",".test.tsx",".spec.ts",".spec.tsx",".test.js",".spec.js"];for(let s of o){let a=`${n}${s}`;if(existsSync(join(e,a)))return a}let r=join(e,t.split("/").slice(0,-1).join("/")),i=t.split("/").at(-1)?.replace(/\.[^.]+$/u,"");if(!i||!existsSync(r))return null;try{return readdirSync$1(r).filter(s=>s.startsWith(`${i}.`)&&/\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(s)).map(s=>relative(e,join(r,s)).split(sep).join("/"))[0]??null}catch{return null}}function Du(e,t,n){let o=t.split(sep).join("/"),r=resolve(n,t).split(sep).join("/"),i=e.split(/\r?\n/u).map(s=>s.trim().split(sep).join("/")).filter(s=>s.includes(o)||s.includes(r)).map(s=>s.replace(/:\d+:\d+/gu,":#:#").replace(/\(\d+,\d+\)/gu,"(#,#)")).filter(s=>/\berror\s+TS\d+\b/iu.test(s));return [...new Set(i.map(s=>createHash("sha256").update(s).digest("hex")))]}function Cu(e,t,n){if(!t.executionId)return;let o=e.getSkillExecution(t.executionId);if(!o)return;let r=o.metadata&&typeof o.metadata=="object"?o.metadata:{},i=Array.isArray(r.policyVerificationOutcomes)?r.policyVerificationOutcomes:[];e.updateSkillExecution(t.executionId,{metadata:{...r,policyVerificationOutcomes:[...i,n]}});}function Mu(e){try{let t=readFileSync$1(join(e,".git","HEAD"),"utf8").trim();return t.startsWith("ref:")?readFileSync$1(join(e,".git",t.slice(5).trim()),"utf8").trim():t}catch{return}}function pi(e){return createHash("sha256").update(JSON.stringify(e)).digest("hex")}function Ou(e){return /^[A-Za-z0-9_./:@=-]+$/u.test(e)?e:JSON.stringify(e)}async function _i(e){let t=Date.now(),n=Vu(e.projectRoot),o=claudeCodeRuntimeAdapter.normalizePrompt(e.hostEvent??{session_id:e.sessionId,prompt:e.prompt},{projectRoot:n}),r=semanticTextHash(wi(o.rawPrompt)),i=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:100});try{let s=i.getTaskIntentArtifactBySource({projectRoot:n,sessionId:e.sessionId,sourceHash:r});if(s){let g=vi(s).identity,b=i.getRuntimeActivation(g.projectRoot,g.sessionId,g.turnId,s.version);if(!b)throw new Error(`RUNTIME_ACTIVATION_MISSING:${s.artifactHash}`);return {artifact:vi(s),memoryIdentity:Ii(s),activation:b,reused:!0}}let a=`turn:${at(`${e.sessionId}\0${r}`)}`,c=`request:${at(`${n}\0${e.sessionId}\0${a}`)}`,d={projectRoot:n,projectId:`project:${stableRuntimeHash(n).slice(0,20)}`,hostId:o.hostId,sessionId:e.sessionId,executionId:e.sessionId,turnId:a,requestId:c},l=1,u=resolveRuntimeActivationSnapshot({projectRoot:n,createdAt:o.timestamp}),m=zu(o.rawPrompt),f={identity:d,version:l,rawPrompt:o.rawPrompt,normalizedPrompt:wi(o.rawPrompt),...o.command?{command:o.command}:{},slashArgs:o.slashArgs,...o.activeSkill?{activeSkill:o.activeSkill}:{},intent:"unknown",action:"unknown",entities:[],targetAnchors:m,policyConstraints:[],classificationEvidence:[],sourceEventIds:[o.sourceEventId??`host-event:${r.slice(0,24)}`],sourceHash:r,createdAt:o.timestamp},p={...f,artifactHash:Ju(f)};i.appendTaskIntentArtifact(Wu(p)),i.bindRuntimeActivation({identity:d,revision:l,snapshot:u});let h=qu(i,p);return y({event:"host.prompt.normalized",identity:d,level:"info",timestamp:Date.now(),data:{sourceHash:r,command:p.command,activeSkill:p.activeSkill,rawPromptBytes:Buffer.byteLength(p.rawPrompt)}}),y({event:"intent.artifact.created",identity:d,level:"info",timestamp:Date.now(),data:{artifactHash:p.artifactHash,targetCount:m.length}}),y({event:"intent.artifact.persisted",identity:d,level:"info",timestamp:Date.now(),data:{artifactHash:p.artifactHash,version:p.version,sourceHash:p.sourceHash,authority:"immutable-intent",captureLatencyMs:Date.now()-t}}),y({event:"terminal.transition.persisted",identity:d,level:"info",timestamp:Date.now(),data:{state:"intent_bound",receiptId:h,sourceIntentHash:p.artifactHash}}),{artifact:p,memoryIdentity:Ii(p),activation:u,reused:!1}}finally{i.close();}}function qu(e,t){let n=e.getLatestTerminalTransition(t.identity.projectRoot,t.identity.sessionId,t.identity.turnId);if(n)return n.receiptId;let o=`terminal:${at(`${t.artifactHash}\0open`)}`;return e.appendTerminalTransition({...t.identity,sequence:1,toState:"open",receiptId:o,reason:"host_prompt_accepted",payload:{sourceHash:t.sourceHash},createdAt:t.createdAt}),e.appendTerminalTransition({...t.identity,sequence:2,fromState:"open",toState:"intent_bound",receiptId:`terminal:${at(`${t.artifactHash}\0intent_bound`)}`,sourceReceiptId:o,reason:"immutable_intent_persisted",payload:{intentArtifactHash:t.artifactHash},createdAt:Math.max(t.createdAt,Date.now())}).receiptId}function Wu(e){return {...e.identity,version:e.version,supersedesHash:e.supersedesHash,rawPrompt:e.rawPrompt,normalizedPrompt:e.normalizedPrompt,command:e.command,slashArgs:e.slashArgs,activeSkill:e.activeSkill,intent:e.intent,action:e.action,entities:e.entities,targetAnchors:e.targetAnchors,policyConstraints:e.policyConstraints,classificationEvidence:e.classificationEvidence.map(t=>({...t})),sourceEventIds:e.sourceEventIds,sourceHash:e.sourceHash,artifactHash:e.artifactHash,createdAt:e.createdAt}}function vi(e){return {identity:Uu(e),version:e.version,...e.supersedesHash?{supersedesHash:e.supersedesHash}:{},rawPrompt:e.rawPrompt,normalizedPrompt:e.normalizedPrompt,...e.command?{command:e.command}:{},slashArgs:e.slashArgs,...e.activeSkill?{activeSkill:e.activeSkill}:{},intent:e.intent,action:e.action,entities:e.entities,targetAnchors:e.targetAnchors,policyConstraints:e.policyConstraints,classificationEvidence:e.classificationEvidence,sourceEventIds:e.sourceEventIds,sourceHash:e.sourceHash,artifactHash:e.artifactHash,createdAt:e.createdAt}}function Uu(e){return {projectRoot:e.projectRoot,projectId:e.projectId,hostId:e.hostId,sessionId:e.sessionId,turnId:e.turnId,requestId:e.requestId,...e.executionId?{executionId:e.executionId}:{}}}function Ii(e){let t=e.rawPrompt.trim().slice(0,4e3),n="identity"in e?e.identity.turnId:e.turnId;return {turnId:n,eventId:`memory-turn:${n.replace(/^turn:/u,"")}`,promptHash:createHash("sha256").update(t).digest("hex"),createdAt:e.createdAt}}function zu(e){let t=e.match(/(?:^|[\s`'"(])((?:\.{0,2}\/)?(?:[A-Za-z0-9_@.-]+\/)+[A-Za-z0-9_@.-]+(?:\.[A-Za-z0-9]+)?)/gu)??[];return Bu(t.map(n=>n.trim().replace(/^[`'"(]+|[`'"),.;:,。;:]+$/gu,"")).filter(n=>!n.startsWith("/")||/\.[A-Za-z0-9]+$/u.test(n))).slice(0,16)}function wi(e){return e.normalize("NFKC").replace(/\s+/gu," ").trim().slice(0,4e3)}function Bu(e){return [...new Set(e.filter(Boolean))]}function Vu(e){let t=resolve(e);try{return realpathSync(t)}catch{return t}}function Ju(e){return createHash("sha256").update(_n(e)).digest("hex")}function at(e){return createHash("sha256").update(e).digest("hex").slice(0,24)}function _n(e){if(e===null||typeof e=="string"||typeof e=="boolean")return JSON.stringify(e);if(typeof e=="number")return Number.isFinite(e)?JSON.stringify(e):"null";if(Array.isArray(e))return `[${e.map(_n).join(",")}]`;if(!e||typeof e!="object")return JSON.stringify(String(e));let t=e;return `{${Object.keys(t).sort().map(n=>`${JSON.stringify(n)}:${_n(t[n])}`).join(",")}}`}function kn(){return generateKeyPairSync("ed25519")}function Sn(e){let t=parseTrustedDecisionCommand(e.rawUserEvent,e.allowedOptionIds),n=e.now??Date.now(),o={schemaVersion:"delivery-user-attestation.v1",issuer:e.issuer,keyId:e.keyId,purpose:t.purpose,decisionId:t.decisionId,caseId:e.caseId,caseVersion:e.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId,actorId:e.actorId,targetDecisionHash:e.targetDecisionHash,rawUserEvent:e.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",e.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:t.decisionId,purpose:t.purpose,value:encodeDecisionValue(t.purpose,t.value)}),eventSequence:e.eventSequence,issuedAt:new Date(n).toISOString(),expiresAt:new Date(n+6e4).toISOString(),nonce:e.nonce};return {...o,attestation:sign(null,canonicalJsonBytes(o),e.privateKey).toString("base64url")}}var ki=new Map;function Si(e){if(typeof e=="string")return /\bDevFlow decision ([A-Za-z0-9._:-]+)/u.exec(z(e))?.[1]}function z(e){return e.replace(/[\u0000-\u001f\u007f\ufffd]+/gu,"").replace(/\s+/gu," ").trim()}function nm(e){if(typeof e=="string")return e.trim()||void 0;if(!e||typeof e!="object"||Array.isArray(e))return;let t=e.answers;if(!t||typeof t!="object"||Array.isArray(t))return;let n=Object.values(t);if(n.length!==1)return;let o=n[0];if(!(Array.isArray(o)||typeof o!="string"))return o.trim()||void 0}async function xi(e){if(e.toolName!=="AskUserQuestion")return {handled:false};let t=e.toolInput&&typeof e.toolInput=="object"&&!Array.isArray(e.toolInput)?e.toolInput:{};if(!Array.isArray(t.questions)||t.questions.length!==1)return {handled:false};let n=t.questions[0],o=Ti(e.projectRoot),r=Si(n.header)??Si(n.question);if(!r){let g=await o.pendingDecisionForSession(e.sessionId);if(!g||"ambiguous"in g||!["artifact_approval","trusted_action"].includes(g.decision.kind))return {handled:false};r=g.decision.id;}let i=r.split(":")[0],s=await o.pendingDecision(i);if(!s||s.id!==r)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: no pending decision matches ${r}. Refresh delivery_status.`};let a=Array.isArray(n.options)?n.options.map(g=>({label:typeof g.label=="string"?z(g.label):"",description:typeof g.description=="string"?z(g.description):""})):[],c=createHash("sha256").update(JSON.stringify({decisionId:r,question:z(String(n.question??"")),options:a})).digest("hex"),d=nm(e.toolResponse),l=d?z(d):void 0;if(!l)return (typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:e.sourceTurnId??e.toolUseId}):true)?{handled:true,resolved:false,message:`DevFlow interactive decision rejected: AskUserQuestion returned no single answer for ${r}. Use /devflow:decide ${r} -- <answer> if this is a free-form clarification.`}:{handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};if(n.multiSelect===true)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} must be a single selection.`};let u;if(s.options.length>0){let g=s.options.map(S=>({label:z(S.label),description:S.description?z(S.description):""}));if(a.length!==g.length||a.some((S,w)=>S.label!==g[w]?.label||S.description!==g[w]?.description))return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: the displayed options do not match the pending decision ${r}. Refresh delivery_status and render its options verbatim.`};let b=s.options.find(S=>z(S.label)===l);if(!b)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: answer does not match a pending option for ${r}.`};s.kind==="artifact_approval"?u=b.id==="approve"?`/devflow:approve ${r}`:`/devflow:reject ${r} -- ${l}`:u=`/devflow:decide ${r} ${b.id}`;}else {if(a.length>0)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} is a free-form clarification and must not be rendered as a choice list.`};u=`/devflow:decide ${r} -- ${l}`;}if(!(typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:e.sourceTurnId??e.toolUseId}):true))return {handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};let f=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,p=kn(),h=Sn({rawUserEvent:u,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId?.trim()||e.toolUseId?.trim()||`host-turn:${e.sessionId}:${Date.now()}`,actorId:f,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:p.privateKey,allowedOptionIds:s.options.map(g=>g.id)});try{return await o.resolveTrustedDecision({evidence:h,publicKey:p.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow interactive decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(g){return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${g instanceof Error?g.message:String(g)}`}}}async function Ei(e){let t=e.prompt.trim();if(!/^\/devflow:(?:decide|approve|reject|revise|cancel|exit)\b/u.test(t))return {handled:false};let n=Ti(e.projectRoot),o=t;if(t==="/devflow:approve"||t==="/devflow:approve current"){let l=await n.pendingDecisionForSession(e.sessionId);if(!l)return {handled:true,resolved:false,message:"DevFlow approval not found: there is no pending decision for this session."};if("ambiguous"in l)return {handled:true,resolved:false,message:`DevFlow approval is ambiguous: multiple pending cases exist (${l.caseIds.join(", ")}). Use the approval choices shown by the host.`};if(l.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."};o=`/devflow:approve ${l.decision.id}`;}let r;try{r=parseTrustedDecisionCommand(o);}catch(l){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${l instanceof Error?l.message:String(l)}`}}let i=r.decisionId.split(":")[0],s=await n.pendingDecision(i);if(!s||s.id!==r.decisionId)return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: no pending decision matches ${r.decisionId}. Refresh delivery_status.`};let a=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,c=kn(),d=Sn({rawUserEvent:o,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:e.sessionId,sourceTurnId:e.sourceTurnId?.trim()||`host-turn:${e.sessionId}:${Date.now()}`,actorId:a,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:c.privateKey,allowedOptionIds:s.options.map(l=>l.id)});try{return await n.resolveTrustedDecision({evidence:d,publicKey:c.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(l){return {handled:true,resolved:false,message:`DevFlow trusted decision rejected: ${l instanceof Error?l.message:String(l)}`}}}function Ti(e){let t=ki.get(e);if(t)return t;let n=createTrustedDeliveryFacade(e);return ki.set(e,n),n}function Ai(e=process.env){if(e.DEVFLOW_DISABLED==="1")return true;try{return existsSync(join(getDevFlowStateRoot({env:e}),"disable"))}catch{return false}}function Di(e){y({event:"hook.enforcement.shadow",identity:{projectRoot:e.projectRoot,sessionId:e.sessionId},level:"warn",timestamp:Date.now(),data:{tool:e.toolName,code:e.code??"DEVFLOW_POLICY",reason:e.reason.slice(0,500)}});try{process.stderr.write(`[devflow][shadow] would deny ${e.toolName}: ${e.reason}
36
36
  `);}catch{}return {hookSpecificOutput:{hookEventName:"PreToolUse",permissionDecision:"allow",additionalContext:`DevFlow shadow enforcement: this call would be denied under enforce mode (${e.code??"DEVFLOW_POLICY"}). Proceeding; the decision is recorded for graduation review.`}}}var Im=600*1e3,wm=2e3,_m=250,bm=2e3,km=1e3,ji=1024*1024,Sm=2*1024*1024,Rm=6e4,xm=100;function Em(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n=typeof t.status=="string"?t.status:void 0;if(!(t.ok===false||t.success===false||t.isError===true||n==="failed"||n==="rejected"||n==="unavailable"||n==="warming"||!!t.error))return;let r=t.error;if(typeof r=="string"&&r.trim())return r;if(r&&typeof r=="object"){let i=r;if(typeof i.message=="string"&&i.message.trim())return i.message;if(typeof i.code=="string"&&i.code.trim())return i.code}return n?`Tool response status: ${n}`:"Tool response reported failure"}function $i(e){return /timeout|timed out|deadline|warming/i.test(e)?"timeout":/unavailable|not active|unknown tool|not found|not registered|route not found/i.test(e)?"unavailable":"failed"}function Fi(e,t,n,o,r){let i=e.recordDomainActionOutcome;typeof i=="function"&&i.call(e,t,n,o,r);}function Tm(e){switch(e){case "Read":case "Glob":return "file_read";case "Write":case "Edit":case "NotebookEdit":return "file_write";case "Bash":return "bash_command";case "Agent":return "subagent";case "Skill":return "skill_invoke";default:return "tool_use"}}function xn(e){return typeof e=="string"&&e.trim().length>0}function Am(e,t,n=process.env,o){if(resolveClaudeToolName(e).status==="unsupported")return t;let r=t!==null&&typeof t=="object"&&!Array.isArray(t)?t:{};if(xn(r.projectRoot))return r;let i=xn(n.CLAUDE_PROJECT_DIR)?n.CLAUDE_PROJECT_DIR:o;return xn(i)&&(r.projectRoot=i),r}var En=class{constructor(t,n){this.socketIdentity=null;this.pidIdentity=null;this.server=null;this.activeSessionIds=new Set;this.eventMap=[];this.idleTimer=null;this.telemetryFlushTimer=null;this.successfulTelemetryOperations=0;this.shutdownPromise=null;this.embeddingPreparationController=null;this.explicitMemoryGate=null;this.memoryWarmup=null;this.explicitIntentFlush=null;this.hostRuntime=null;this.memoryTurnSpoolTimer=null;this.userPromptSubmitSpoolTimer=null;this.sessionFinalizeSpoolTimer=null;this.projectRoot=t,this.socketPath=getDaemonSocketPath(t),this.pidPath=getDaemonPidPath(t),this.telemetry=new te,this.runtimeStore=new L(this.projectRoot),this.serverManager=new je(t),this.hookRuntime=Jr(t),this.hookHealth=new rt(t),this.hookHandlers=Yr({handlers:{"pre-tool-use":o=>this.handlePreToolUse(o),"post-tool-use":o=>this.handlePostToolUse(o),"post-tool-use-failure":o=>this.handlePostToolUseFailure(o),stop:o=>this.handleStop(o),"memory-snapshot":()=>this.handleMemorySnapshot(),"session-start":o=>this.handleSessionStart(o),"session-end":o=>this.handleSessionEnd(o),"user-prompt-submit":o=>this.handleUserPromptSubmit(o),"pre-compact":o=>this.handlePreCompact(o)},failurePolicy:o=>sn(o,this.hookRuntime,this.hostRuntime??{hostId:"unresolved",capabilities:new Map,profiles:new Set(["minimal","standard","strict"])}).policy}),this.initialSessionInput=n,this.workRuntime=new tt({projectRoot:t,handlers:{...si(t),"memory.explicit_commit":async({item:o})=>{await this.persistMemoryTurnItem(o.payload);},"memory.turn_capture":async({item:o})=>{await this.persistMemoryTurnItem(o.payload);},"memory.explicit_enrichment":async({item:o})=>{let r=o.payload;if(typeof r?.observationId!="string"||!r.observationId)throw new x("invalid_payload","Explicit enrichment requires observationId");await(await this.getMemoryGate()).enrichExplicitMemoryObservation(r.observationId);},"session.bootstrap":async({item:o})=>{await this.bootstrapSessionWork(o.payload);},"memory.vector_backfill":async()=>{await(await this.getMemoryGate()).backfillObservationVectors({batchSize:32});},"memory.turn_distill":async({item:o})=>{await fe({projectRoot:this.projectRoot,sessionId:o.sessionId,trigger:"session_end",memory:await this.getMemoryGate()}),await this.refreshMemorySnapshot("memory_turn_distill");},"context.prefetch":async({item:o})=>{let r=o.payload;if(typeof r.prompt!="string"||typeof r.sessionId!="string"||typeof r.executionId!="string"||typeof r.profileFingerprint!="string"||typeof r.rolloutMode!="string")throw new x("invalid_payload","Context prefetch identity is incomplete");let[{createEngines:i},{projectDiagnosticCodeResult:s},{writeContextPrefetchCache:a}]=await Promise.all([import('@devflow-tools/mcp-server/composition'),import('@devflow-tools/mcp-server/retrieval'),import('@devflow-tools/context-engine')]),c=await i(this.projectRoot);try{let d=await c.context.buildTaskContext(r.prompt,{mode:"fast",sessionId:r.sessionId,executionId:r.executionId,activeSkill:r.skillName}),l=s(d,0,{projectRoot:this.projectRoot,query:r.prompt,sessionId:r.sessionId,executionId:r.executionId,requestId:`prefetch:${r.sessionId}:${r.executionId}`,turnId:`prefetch:${r.sessionId}:${r.executionId}`,host:"claude-code"});if(!a({projectRoot:this.projectRoot,query:r.prompt,sessionId:r.sessionId,executionId:r.executionId,profileFingerprint:r.profileFingerprint,rolloutMode:r.rolloutMode,retrievalVersion:r.retrievalVersion},l))throw new Error("Context prefetch envelope was not receipt-valid")}finally{c.close();}},"verification.policy":async({item:o})=>{await hi(this.projectRoot,o);},"learning.analyze_session":async({item:o})=>{let r=o.payload;if(typeof r.projectRoot!="string"||typeof r.sessionId!="string"||typeof r.closureReceipt!="string"||typeof r.projectRevision!="string"||typeof r.createdAt!="number")throw new x("invalid_payload","Learning analysis identity is incomplete");let i=openGlobalDevFlowDatabase();try{let s=await(await this.getMemoryGate()).listLearningEvidence(r.sessionId),a=un({payload:r,evidence:s,database:i,rolloutMode:resolveCapabilityRollout(this.projectRoot).config.learningOverlays});i.insertEvent({kind:"learning_analysis",timestamp:Date.now(),success:!0,metadata:{...r,...a}});}finally{i.close();}},"session.finalize":async({item:o})=>{await this.finalizeSessionWork(o.payload,o.id);},"telemetry.reconcile":async()=>{await this.flushTelemetry();}},afterComplete:({item:o,database:r})=>{let i=o.kind==="memory.explicit_commit"||o.kind==="memory.turn_capture"?"memory":o.kind==="verification.policy"?"verification":null;i&&o.sessionId&&o.turnId&&O({projectRoot:this.projectRoot,sessionId:o.sessionId,turnId:o.turnId,kind:"durable_work.completed",payload:{workId:o.id,obligation:i},dedupeKey:`${o.id}:completed`,producer:"devflow-work-runtime"}),o.sessionId&&this.enqueueLearningAnalysisIfReady(r,o.sessionId);}});}logRuntime(t,n,o={},r){let i=r?this.runtimeStore.get(r):void 0;y({event:t==="warn"||t==="error"?"hook.runtime.degraded":"hook.runtime.completed",identity:{projectRoot:this.projectRoot,sessionId:r,executionId:i?.executionId},level:t,timestamp:Date.now(),data:{stage:n,...o}});}async start(){this.hostRuntime=await Gr(this.projectRoot);let t=wo(this.projectRoot,process.pid);this.runtimeManifestHash=t.manifestHash,mkdirSync(dirname(this.socketPath),{recursive:true,mode:448}),mkdirSync(dirname(this.pidPath),{recursive:true,mode:448}),await this.cleanStaleStartupResources(),this.server=createServer(n=>this.handleConnection(n));try{await this.listen(),this.writePidFile(),ho(this.projectRoot,process.pid);}catch(n){throw await this.closeServer(),this.cleanupOwnedResources(),n}if(this.server.on("error",n=>{this.logRuntime("error","server_error",{reason:n.message});}),this.logRuntime("info","server_listening",{socketHash:createHash("sha256").update(this.socketPath).digest("hex").slice(0,16)}),await this.telemetry.flushAndAggregate(),this.telemetryFlushTimer=setInterval(()=>{this.flushTelemetry();},Rm),this.telemetryFlushTimer.unref(),this.startEmbeddingPreparation(),this.workRuntime.start(),this.initialSessionInput){let n=this.initialSessionInput;this.initialSessionInput=void 0,this.handleRequest({type:"session-start",input:n});}this.drainSessionStartSpool(),this.scheduleUserPromptSubmitSpoolDrain(0),this.scheduleMemoryTurnSpoolDrain(0),this.scheduleSessionFinalizeSpoolDrain(0),this.resetIdleTimer();}startEmbeddingPreparation(){let t=new AbortController;this.embeddingPreparationController=t,prepareEmbeddingModel({signal:t.signal}).then(n=>{this.logRuntime("info","embedding_ready",{source:n.source,cacheRootHash:createHash("sha256").update(n.cacheRoot).digest("hex").slice(0,16)});}).catch(n=>{t.signal.aborted||this.logRuntime("warn","embedding_unavailable",{reason:n.message,fallback:"lexical_retrieval"});}).finally(()=>{this.embeddingPreparationController===t&&(this.embeddingPreparationController=null);});}handleConnection(t){let n="",o=false,r=false,i=0,s=Promise.resolve();t.setEncoding("utf8");let a=()=>{r||(r=true,clearTimeout(c),t.destroy());},c=setTimeout(()=>{a();},wm).unref(),d=async l=>{if(!r){r=true,clearTimeout(c);try{await this.writeFrame(t,l);}catch{}finally{t.destroy();}}};t.on("data",l=>{if(r)return;n+=l;let u=n.split(`
37
37
  `);if(n=u.pop()??"",Buffer.byteLength(n,"utf8")>ji){a();return}if(u.length===0)return;let m=0;for(let f of u){let p=Buffer.byteLength(f,"utf8");if(p>ji){a();return}m+=p+1;}if(i+m>Sm){a();return}i+=m,s=s.then(async()=>{for(let f of u){if(r)return;if(!o){let p;try{p=JSON.parse(f);}catch{await d({error:"handshake_invalid"});return}if(p?.type!=="hello"||typeof p.rootPath!="string"){await d({error:"handshake_invalid"});return}if(p.rootPath!==this.projectRoot){await d({error:"handshake_root_mismatch",expected:this.projectRoot});return}if(p.runtimeManifestHash&&p.runtimeManifestHash!==this.runtimeManifestHash){await d({error:"daemon_runtime_mismatch",expected:p.runtimeManifestHash,actual:this.runtimeManifestHash??null});return}o=true,clearTimeout(c),await this.writeFrame(t,{type:"hello_ack",...this.runtimeManifestHash?{runtimeManifestHash:this.runtimeManifestHash}:{}}),this.resetIdleTimer();continue}if(f.trim())try{let p=JSON.parse(f),h=await this.handleRequest(p);h!==null&&!r&&await this.writeFrame(t,h);}catch(p){r||await this.writeFrame(t,{error:p.message});}}}).catch(()=>{a();}).finally(()=>{i-=m;});}),t.on("close",()=>clearTimeout(c)),t.on("error",()=>{});}writeFrame(t,n){return new Promise((o,r)=>{if(t.destroyed||!t.writable){r(new Error("Socket is not writable"));return}let i=false,s=true,a=false,c=setTimeout(()=>{t.destroy(),l(new Error("Timed out writing daemon response"));},km),d=()=>{clearTimeout(c),t.off("close",u),t.off("error",m),t.off("drain",f);},l=h=>{a||!h&&(!i||!s)||(a=true,d(),h?r(h):o());},u=()=>l(new Error("Socket closed during write")),m=h=>l(h),f=()=>{s=true,l();};t.once("close",u),t.once("error",m),t.write(`${JSON.stringify(n)}
38
38
  `,h=>{if(h){l(h);return}i=true,l();})||(s=false,t.once("drain",f));})}async cleanStaleStartupResources(){let t=this.getPathIdentity(this.socketPath);if(t)if(await this.isSocketAcceptingConnections()){let r=this.getPathIdentity(this.pidPath)?this.readPidFile():null;if(r&&this.isProcessAlive(r))throw new Error(`Daemon socket already active for ${this.projectRoot}`);this.removePathIfOwned(this.socketPath,t,"orphan socket");}else this.removePathIfOwned(this.socketPath,t,"stale socket");let n=this.getPathIdentity(this.pidPath);n&&this.removePathIfOwned(this.pidPath,n,"stale PID file");}getPathIdentity(t){try{let n=lstatSync(t);return {dev:n.dev,ino:n.ino}}catch(n){if(n.code==="ENOENT")return null;throw n}}readPidFile(){try{let t=Number.parseInt(readFileSync(this.pidPath,"utf8").trim(),10);return Number.isInteger(t)&&t>1?t:null}catch{return null}}isProcessAlive(t){try{return process.kill(t,0),!0}catch(n){return n.code==="EPERM"}}pathMatchesIdentity(t,n){if(!n)return false;try{let o=this.getPathIdentity(t);return o?.dev===n.dev&&o.ino===n.ino}catch(o){return this.logRuntime("warn","path_ownership_check",{reason:o.message}),false}}writePidFile(){let t=openSync(this.pidPath,"wx",384);try{writeFileSync(t,`${process.pid}
@@ -3,6 +3,6 @@ import {existsSync,readFileSync,rmSync,mkdirSync,writeFileSync,linkSync,readdirS
3
3
 
4
4
  `)}function K(n,t=0){if(t>6||n==null)return [];if(typeof n=="string")try{return K(JSON.parse(n),t+1)}catch{return []}if(Array.isArray(n)){for(let o of n){let r=K(o,t+1);if(r.length>0)return r}return []}if(typeof n!="object")return [];let e=n;if(Array.isArray(e.detectorCoverage))return e.detectorCoverage.filter(o=>typeof o=="string").slice(0,32);for(let o of Object.values(e)){let r=K(o,t+1);if(r.length>0)return r}return []}function P(n,t,e){if(t>pn||n===null||n===void 0)return null;if(typeof n=="string"){if(Buffer.byteLength(n,"utf8")>un)return null;try{return P(JSON.parse(n),t+1,e)}catch{return null}}if(typeof n!="object"||e.has(n))return null;if(e.add(n),Array.isArray(n)){for(let r of n.slice(0,16)){let i=P(r,t+1,e);if(i)return i}return null}let o=n;if("evidenceContract"in o)return {contract:o.evidenceContract,canonicalReport:o.canonicalReport};for(let r of ["structuredContent","data","result"])if(r in o){let i=P(o[r],t+1,e);if(i)return i}if(Array.isArray(o.content))for(let r of o.content.slice(0,16)){let i=r&&typeof r=="object"&&"text"in r?r.text:r,s=P(i,t+1,e);if(s)return s}return null}function hn(n,t){if(!n||typeof n!="object"||Array.isArray(n))return null;let e=n;if(e.version!=="1.0"||typeof e.id!="string"||!/^[a-zA-Z0-9][a-zA-Z0-9:._-]{0,127}$/.test(e.id)||typeof e.runtimeProfilingOccurred!="boolean"||typeof e.samplingEvidenceOccurred!="boolean"||!Array.isArray(e.requiredSections)||e.requiredSections.length!==B.length)return null;let o=e.requiredSections.filter(c=>typeof c=="string");if(o.length!==B.length||B.some((c,l)=>o[l]!==c)||!Array.isArray(e.prohibitedClaims)||e.prohibitedClaims.length>16)return null;let r=e.prohibitedClaims.filter(c=>typeof c=="string"&&c.length<=128);if(r.length!==e.prohibitedClaims.length)return null;let i=e.correctionPolicy;if(!i||typeof i!="object"||Array.isArray(i))return null;let s=i;if(s.maxAttempts!==1||s.repeatedViolation!=="fail_open")return null;let a=typeof e.canonicalReport=="string"?e.canonicalReport:t;return typeof a!="string"||Buffer.byteLength(a,"utf8")>fn||B.some(c=>!a.includes(c))?null:{version:"1.0",id:e.id,runtimeProfilingOccurred:e.runtimeProfilingOccurred,samplingEvidenceOccurred:e.samplingEvidenceOccurred,requiredSections:o,prohibitedClaims:r,correctionPolicy:{maxAttempts:1,repeatedViolation:"fail_open"},canonicalReport:a}}function Ve(n){let t;try{if(Sn(n.toolResponse))return null;t=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:50});let e=t.getActiveContextReceipt(n.projectRoot,n.sessionId,n.executionId);if(!e)return null;let o=_n(n.toolInput);if(o.length===0)return null;let r=n.toolName==="Read"?Rn(n.toolInput):void 0,i=r?e.selectedFiles?.find(d=>xn(n.projectRoot,d,r)):void 0,s=kn(n.toolName),a=i?"code":e.canonicalNextAction===s?"action":null,c=i&&o.includes(i)?i:a==="action"&&o.includes(s)?s:void 0;if(a&&c){let d=[e.contextHash,e.requestId??"",a,c,n.toolUseId??`${n.sessionId}:${n.executionId??e.executionId}`].join("\0");t.recordContextSelectionEvent({id:`ctxsel:${createHash$1("sha256").update(d).digest("hex").slice(0,32)}`,projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:e.executionId,requestId:e.requestId,selectionType:a,candidateId:c,toolName:n.toolName,toolUseId:n.toolUseId,selectedAt:Date.now()});}let l=t.listRetrievalLedgerEvents({projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:e.executionId,requestId:e.requestId}).filter(d=>d.stage==="selected"&&o.includes(d.sourceId));for(let d of l)t.appendRetrievalLedgerEvent({...d,id:retrievalLedgerTransitionId(d.id,"consumed",n.toolUseId??n.toolName),stage:"consumed",toolEvidence:[n.toolUseId??n.toolName],evidenceIds:o,actor:n.toolName,reasonCode:"structural_evidence_ref",payload:{...d.payload,consumedByTool:n.toolName},createdAt:Date.now()});return l.length>0&&He({event:"retrieval.attribution.transitioned",identity:{projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:e.executionId,requestId:e.requestId,contextReceipt:e.contextHash},level:"info",timestamp:Date.now(),data:{stage:"consumed",actor:n.toolName,consumedCount:l.length,evidenceRefCount:o.length}}),a}catch(e){throw He({event:"hook.runtime.degraded",identity:{projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:n.executionId,requestId:n.requestId},level:"warn",timestamp:Date.now(),data:{stage:"retrieval_attribution",actor:n.toolName,reason:e instanceof Error?e.message:String(e)}}),e}finally{try{t?.close();}catch{}}}function _n(...n){let t=new Set,e=(o,r=0)=>{if(!(r>6||o==null)){if(typeof o=="string"){try{e(JSON.parse(o),r+1);}catch{}return}if(Array.isArray(o)){for(let i of o)e(i,r+1);return}if(typeof o=="object")for(let[i,s]of Object.entries(o))if((i==="evidenceRefs"||i==="_devflow_evidence_refs")&&Array.isArray(s))for(let a of s)typeof a=="string"&&a.trim()&&t.add(a.trim());else e(s,r+1);}};for(let o of n)e(o);return [...t]}function Rn(n){for(let t of ["file_path","path"]){let e=n[t];if(typeof e=="string"&&e.trim())return e.trim()}}function xn(n,t,e){let o=resolve(n,t),r=isAbsolute(e)?resolve(e):resolve(n,e);return o===r}function kn(n){return n.startsWith("mcp__")?n.split("__").at(-1)??n:n}function Sn(n){if(!n||typeof n!="object"||Array.isArray(n))return false;let t=n;return t.ok===false||t.success===false||t.isError===true||!!t.error||["failed","rejected","unavailable"].includes(String(t.status??""))}function He(n){try{y(n);}catch{}}var Tn=new Set(["Write","Edit","NotebookEdit"]);function ze(n){if(!Tn.has(n.toolName)||$n(n.toolResponse))return null;let t=jn(n.projectRoot,n.toolInput);if(!t)return null;let e=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let o=e.getActiveContextReceipt(n.projectRoot,n.sessionId,n.executionId),r=o?.canonicalAction?.verificationPlan??[];if(!o||r.length===0)return null;let i=[],s=[];for(let c of r){let l=Cn({projectRoot:n.projectRoot,targetFile:t,kind:c.kind,mode:c.mode==="write"?"write":"check",required:c.required===!0,contextReceipt:o.contextHash}),d=`${o.contextHash}\0${n.toolUseId??t}\0${c.kind}\0${t}`,u=`policy-verification:${createHash$1("sha256").update(d).digest("hex")}`,g=Date.now();if(!l){let D=`verification_unavailable:${c.kind}`;e.upsertSessionObligation({obligationId:u,projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:n.executionId,kind:"evidence_contract",state:"degraded",payload:{subtype:"policy_verification",status:"unknown",verificationKind:c.kind,targetFile:t,contextReceipt:o.contextHash},reason:D,createdAt:g,updatedAt:g,resolvedAt:g}),s.push(c.kind),c.required===!0&&F({projectRoot:n.projectRoot,sessionId:n.sessionId,requestId:o.requestId,executionId:n.executionId,kind:"verification.failed",payload:{receiptId:u,reasonCode:D},dedupeKey:`${u}:unavailable`,producer:"devflow-verification-scheduler"});continue}let h={...l,obligationId:u,sessionId:n.sessionId,executionId:n.executionId,requestId:o.requestId};e.upsertSessionObligation({obligationId:u,projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:n.executionId,kind:"evidence_contract",state:"open",payload:{subtype:"policy_verification",status:"scheduled",verificationKind:c.kind,command:l.display,targetFile:t,contextReceipt:o.contextHash,required:c.required===!0},createdAt:g,updatedAt:g});let b=e.enqueueWork({idempotencyKey:u,kind:"verification.policy",projectRoot:n.projectRoot,sessionId:n.sessionId,payload:h,maxAttempts:2,nextAttemptAt:g});F({projectRoot:n.projectRoot,sessionId:n.sessionId,requestId:o.requestId,executionId:n.executionId,kind:"durable_work.owned",payload:{workId:b.id,obligation:"verification"},dedupeKey:`${b.id}:owned`,producer:"devflow-verification-scheduler"}),i.push(l.display);}return [i.length>0?`DevFlow scheduled policy verification: ${i.join(" && ")}`:"",s.length>0?`Verification unavailable and recorded as unknown: ${s.join(", ")}`:""].filter(Boolean).join(`
5
5
  `)||null}finally{e.close();}}function Cn(n){let t=Pn(n.projectRoot),e=qn(n.projectRoot),o=t?.scripts??{},r={...t?.dependencies,...t?.devDependencies},i=null;if(n.kind==="formatter"&&(r.prettier||Ln(n.projectRoot)))i=J(e,"prettier",[n.mode==="write"?"--write":"--check",n.targetFile],6e4);else if(n.kind==="typecheck"){let s=le(o,["typecheck","type-check","check:types"]);s?i=de(e,s,12e4):r.typescript&&existsSync$1(join(n.projectRoot,"tsconfig.json"))&&(i=J(e,"tsc",["--noEmit","--pretty","false"],12e4));}else if(n.kind==="lint"){let s=le(o,["lint"]);s&&(i=de(e,s,12e4));}else if(n.kind==="test"){let s=Mn(n.projectRoot,n.targetFile);s&&r.vitest?i=J(e,"vitest",["run",s],12e4):s&&(r.jest||r["@jest/core"])&&(i=J(e,"jest",["--runTestsByPath",s],12e4));}else if(n.kind==="build"){let s=le(o,["build"]);s&&(i=de(e,s,18e4));}else n.kind==="generated_files"&&(i={command:"git",args:["diff","--check","--",n.targetFile],timeoutMs:3e4});return i?{kind:n.kind,...i,display:[i.command,...i.args].map(Nn).join(" "),required:n.required,targetFile:n.targetFile,contextReceipt:n.contextReceipt}:null}function de(n,t,e){return n==="yarn"?{command:"yarn",args:["run",t],timeoutMs:e}:n==="pnpm"?{command:"pnpm",args:["run",t],timeoutMs:e}:n==="bun"?{command:"bun",args:["run",t],timeoutMs:e}:{command:"npm",args:["run",t],timeoutMs:e}}function J(n,t,e,o){return n==="pnpm"?{command:"pnpm",args:["exec",t,...e],timeoutMs:o}:n==="yarn"?{command:"yarn",args:[t,...e],timeoutMs:o}:n==="bun"?{command:"bunx",args:[t,...e],timeoutMs:o}:{command:"npx",args:["--no-install",t,...e],timeoutMs:o}}function jn(n,t){let e=t.file_path??t.notebook_path;if(typeof e!="string"||!e.trim())return null;let o=isAbsolute(e)?resolve(e):resolve(n,e);return Fn(n,o)?relative(n,o).split(sep).join("/"):null}function Fn(n,t){let e=isAbsolute(t)?resolve(t):resolve(n,t),o=relative(resolve(n),e);return o!==""&&o!==".."&&!o.startsWith(`..${sep}`)&&!isAbsolute(o)}function $n(n){if(!n||typeof n!="object"||Array.isArray(n))return false;let t=n;return t.ok===false||t.success===false||t.isError===true||!!t.error}function Pn(n){try{return JSON.parse(readFileSync$1(join(n,"package.json"),"utf8"))}catch{return null}}function qn(n){return existsSync$1(join(n,"pnpm-lock.yaml"))?"pnpm":existsSync$1(join(n,"yarn.lock"))?"yarn":existsSync$1(join(n,"bun.lockb"))||existsSync$1(join(n,"bun.lock"))?"bun":"npm"}function Ln(n){return [".prettierrc",".prettierrc.json",".prettierrc.js",".prettierrc.cjs","prettier.config.js","prettier.config.cjs"].some(t=>existsSync$1(join(n,t)))}function le(n,t){return t.find(e=>typeof n[e]=="string"&&n[e].trim())??null}function Mn(n,t){let e=t.replace(/\.[^.]+$/u,""),o=[".test.ts",".test.tsx",".spec.ts",".spec.tsx",".test.js",".spec.js"];for(let s of o){let a=`${e}${s}`;if(existsSync$1(join(n,a)))return a}let r=join(n,t.split("/").slice(0,-1).join("/")),i=t.split("/").at(-1)?.replace(/\.[^.]+$/u,"");if(!i||!existsSync$1(r))return null;try{return readdirSync$1(r).filter(s=>s.startsWith(`${i}.`)&&/\.(?:test|spec)\.[cm]?[jt]sx?$/u.test(s)).map(s=>relative(n,join(r,s)).split(sep).join("/"))[0]??null}catch{return null}}function Nn(n){return /^[A-Za-z0-9_./:@=-]+$/u.test(n)?n:JSON.stringify(n)}function Je(n){if(!n.toolUseId)return null;let t=Yn(n.projectRoot,n.toolUseId);if(!t||t.sessionId!==n.sessionId)return null;let e=Date.now(),o={...t,id:createHash$1("sha256").update(`${t.sessionId}\0${t.toolUseId}\0${t.path}\0${e}`).digest("hex"),phase:"completed",success:n.success,after:Wn(t.path),completedAt:e,error:n.error?.slice(0,500)},r=Gn(n.projectRoot);return mkdirSync$1(dirname(r),{recursive:true}),appendFileSync(r,`${JSON.stringify(o)}
6
- `,{encoding:"utf8",mode:384}),y({event:"canonical.action.validated",identity:{projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:t.executionId,contextReceipt:t.contextReceipt},level:n.success?"info":"warn",timestamp:e,data:{stage:"host_file_state_completed",valid:n.success,operation:t.operation,targetPath:relative(n.projectRoot,t.path),beforeHash:t.before.hash,afterHash:o.after.hash,beforeExists:t.before.exists,afterExists:o.after.exists,reason:o.error,toolUseId:t.toolUseId}}),o}function Wn(n){if(!existsSync$1(n))return {exists:false};try{return {exists:!0,hash:createHash$1("sha256").update(readFileSync$1(n)).digest("hex")}}catch{return {exists:true}}}function We(n){return join(A(n),"file-state")}function Ge(n){return join(We(n),"pending.json")}function Gn(n){return join(We(n),"observations.jsonl")}function Zn(n){try{return JSON.parse(readFileSync$1(Ge(n),"utf8"))}catch{return {}}}function Yn(n,t){let e=Ge(n),o=Zn(n),r=o[t];if(r)return delete o[t],Qn(e,JSON.stringify(o)),r}function Qn(n,t){let e=`${n}.${process.pid}.${Date.now()}.tmp`;writeFileSync$1(e,t,{encoding:"utf8",mode:384}),renameSync$1(e,n);}var eo={open:["intent_bound"],intent_bound:["context_ready","context_degraded"],context_ready:["action_required","action_not_required"],context_degraded:["action_required","action_not_required"],action_required:["action_satisfied","action_degraded","action_failed"],action_not_required:["memory_decided","memory_quarantined"],action_satisfied:["memory_decided","memory_quarantined"],action_degraded:["memory_decided","memory_quarantined"],action_failed:["action_satisfied","action_degraded"],memory_decided:["closed","closed_with_degradation","closed_with_retry_work"],memory_quarantined:["closed_with_degradation","closed_with_retry_work"],closed:[],closed_with_degradation:[],closed_with_retry_work:[]};function to(n){return no(n)}function no(n){let t=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let e=so(t,n.artifact);if(ao(e.toState))return e;let o=t.getContextReceiptForRequest(n.artifact.projectRoot,n.artifact.sessionId,n.artifact.requestId),r=t.getMemoryTurn(n.artifact.turnId),i=n.artifact.intent==="memory"||r?.source==="explicit_intent";if(!o&&!i)return e;let s=o?oo(n.artifact,o):"context_ready";e.toState==="intent_bound"&&(e=I(t,e,n,s,i?"task_context_not_required":s==="context_ready"?"canonical_context_receipt_ready":"canonical_context_receipt_degraded"));let a=o?ro(n.artifact,o):"action_not_required";if((e.toState==="context_ready"||e.toState==="context_degraded")&&(a==="action_not_required"?e=I(t,e,n,"action_not_required","task_action_not_required"):e=I(t,e,n,"action_required","canonical_action_obligation_present")),e.toState==="action_required"){if(a==="action_required")return e;if(a==="action_failed")return I(t,e,n,"action_failed","canonical_action_attempt_failed");a==="action_degraded"?e=I(t,e,n,"action_degraded","canonical_action_unavailable_or_degraded"):a==="action_satisfied"&&(e=I(t,e,n,"action_satisfied","canonical_action_succeeded"));}if(e.toState==="action_failed")if(a==="action_satisfied")e=I(t,e,n,"action_satisfied","canonical_action_retry_succeeded");else if(a==="action_degraded")e=I(t,e,n,"action_degraded","canonical_action_retry_degraded");else return e;let c=s==="context_degraded"||a==="action_degraded";return ["action_not_required","action_satisfied","action_degraded"].includes(e.toState)&&(e=I(t,e,n,n.memoryStatus==="pending"?"memory_quarantined":"memory_decided",n.memoryStatus==="pending"?n.reason:`canonical_memory_${n.memoryStatus}`)),e.toState==="memory_decided"?I(t,e,n,c?"closed_with_degradation":"closed",n.reason):e.toState==="memory_quarantined"?I(t,e,n,n.retryOwned?"closed_with_retry_work":"closed_with_degradation",n.retryOwned?"durable_retry_owner_confirmed":"terminal_obligation_unowned"):e}finally{t.close();}}function Ye(n){let t=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let e=t.getActiveContextReceipt(n.projectRoot,n.sessionId,n.executionId),o=typeof e?.canonicalAction?.binding.turnId=="string"?e.canonicalAction.binding.turnId:void 0;if(!o)return null;let r=t.listLatestTaskIntentArtifacts(n.projectRoot,n.sessionId).find(s=>s.turnId===o),i=t.getMemoryTurn(o);return !r||!i?null:to({artifact:r,memoryStatus:i.status,memoryReceiptId:i.receiptId,reason:n.reason})}finally{t.close();}}function oo(n,t){return n.intent==="memory"||n.intent==="knowledge"||(t.selectedFiles?.length??0)>0?"context_ready":"context_degraded"}function ro(n,t){let e=t.canonicalAction,r=(e?(t.actionAttempts??[]).filter(i=>i.tool===e.tool):[]).at(-1);return t.actionSatisfiedAt||r?.status==="succeeded"?"action_satisfied":r&&["failed","timeout","unavailable"].includes(r.status)?"action_failed":t.actionDegradation||e?.status==="degraded"||e?.status==="unsupported"?"action_degraded":e?.required||io(n)?"action_required":"action_not_required"}function io(n){return ["create","modify","debug","test","format"].includes(n.action)||["feature","refactor","performance"].includes(n.intent)}function so(n,t){let e=n.getLatestTerminalTransition(t.projectRoot,t.sessionId,t.turnId);if(!e)throw new Error(`TERMINAL_INTENT_STATE_MISSING:${t.turnId}`);return e}function I(n,t,e,o,r){if(!eo[t.toState]?.includes(o))throw new Error(`TERMINAL_PATH_UNAVAILABLE:${t.toState}->${o}`);let i=t.sequence+1,s=`terminal:${createHash$1("sha256").update(`${e.artifact.artifactHash}\0${i}\0${o}`).digest("hex").slice(0,24)}`,a=n.appendTerminalTransition({projectRoot:e.artifact.projectRoot,projectId:e.artifact.projectId,hostId:e.artifact.hostId,sessionId:e.artifact.sessionId,turnId:e.artifact.turnId,requestId:e.artifact.requestId,executionId:e.artifact.executionId,sequence:i,fromState:t.toState,toState:o,receiptId:s,sourceReceiptId:e.memoryReceiptId??t.receiptId,reason:r,payload:{memoryStatus:e.memoryStatus,retryOwned:e.retryOwned??false,sourceIntentHash:e.artifact.artifactHash},createdAt:Date.now()});return y({event:"terminal.state.transitioned",identity:{projectRoot:e.artifact.projectRoot,projectId:e.artifact.projectId,hostId:e.artifact.hostId,sessionId:e.artifact.sessionId,turnId:e.artifact.turnId,requestId:e.artifact.requestId,...e.artifact.executionId?{executionId:e.artifact.executionId}:{}},level:o==="closed"?"info":o.includes("degradation")||o.includes("retry")||o==="action_failed"?"warn":"info",timestamp:Date.now(),data:{fromState:t.toState,nextState:o,receiptId:s,reason:r}}),a}function ao(n){return n==="closed"||n==="closed_with_degradation"||n==="closed_with_retry_work"}function Qe(n){let t=n.hook==="post_tool_use_failure"||!!n.error?.trim()||co(n.response),e=t?"not_consumed":n.hook==="post_tool_use"?"consumed":"unknown",o=t?lo(n.error,n.response):e==="consumed"?"host_reported_success":"host_outcome_unknown";return {schemaVersion:"host-tool-outcome.v1",toolName:n.toolName,...n.toolUseId?{toolUseId:n.toolUseId}:{},consumption:e,reasonCode:o,receiptId:n.toolUseId??`host-tool:${n.toolName}:${o}`}}function co(n){if(!n||typeof n!="object"||Array.isArray(n))return false;let t=n;return t.isError===true||t.error?true:typeof t.status=="string"&&["failed","error","rejected","timeout","unavailable"].includes(t.status.toLowerCase())}function lo(n,t){let e=`${n??""} ${JSON.stringify(t??"")}`;return /timeout|timed out|deadline/iu.test(e)?"host_tool_timeout":/unavailable|not found|not registered|unsupported/iu.test(e)?"host_tool_unavailable":"host_tool_failed"}function et(){return generateKeyPairSync("ed25519")}function tt(n){let t=parseTrustedDecisionCommand(n.rawUserEvent,n.allowedOptionIds),e=n.now??Date.now(),o={schemaVersion:"delivery-user-attestation.v1",issuer:n.issuer,keyId:n.keyId,purpose:t.purpose,decisionId:t.decisionId,caseId:n.caseId,caseVersion:n.caseVersion,sessionId:n.sessionId,sourceTurnId:n.sourceTurnId,actorId:n.actorId,targetDecisionHash:n.targetDecisionHash,rawUserEvent:n.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",n.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:t.decisionId,purpose:t.purpose,value:encodeDecisionValue(t.purpose,t.value)}),eventSequence:n.eventSequence,issuedAt:new Date(e).toISOString(),expiresAt:new Date(e+6e4).toISOString(),nonce:n.nonce};return {...o,attestation:sign(null,canonicalJsonBytes(o),n.privateKey).toString("base64url")}}var nt=new Map;function ot(n){if(typeof n=="string")return /\bDevFlow decision ([A-Za-z0-9._:-]+)/u.exec(x(n))?.[1]}function x(n){return n.replace(/[\u0000-\u001f\u007f\ufffd]+/gu,"").replace(/\s+/gu," ").trim()}function bo(n){if(typeof n=="string")return n.trim()||void 0;if(!n||typeof n!="object"||Array.isArray(n))return;let t=n.answers;if(!t||typeof t!="object"||Array.isArray(t))return;let e=Object.values(t);if(e.length!==1)return;let o=e[0];if(!(Array.isArray(o)||typeof o!="string"))return o.trim()||void 0}async function rt(n){if(n.toolName!=="AskUserQuestion")return {handled:false};let t=n.toolInput&&typeof n.toolInput=="object"&&!Array.isArray(n.toolInput)?n.toolInput:{};if(!Array.isArray(t.questions)||t.questions.length!==1)return {handled:false};let e=t.questions[0],o=Io(n.projectRoot),r=ot(e.header)??ot(e.question);if(!r){let f=await o.pendingDecisionForSession(n.sessionId);if(!f||"ambiguous"in f||f.decision.kind!=="artifact_approval")return {handled:false};r=f.decision.id;}let i=r.split(/:(?:decision|question|approval):/u)[0],s=await o.pendingDecision(i);if(!s||s.id!==r)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: no pending decision matches ${r}. Refresh delivery_status.`};let a=Array.isArray(e.options)?e.options.map(f=>({label:typeof f.label=="string"?x(f.label):"",description:typeof f.description=="string"?x(f.description):""})):[],c=createHash$1("sha256").update(JSON.stringify({decisionId:r,question:x(String(e.question??"")),options:a})).digest("hex"),l=bo(n.toolResponse),d=l?x(l):void 0;if(!d)return (typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:n.sourceTurnId??n.toolUseId}):true)?{handled:true,resolved:false,message:`DevFlow interactive decision rejected: AskUserQuestion returned no single answer for ${r}. Use /devflow:decide ${r} -- <answer> if this is a free-form clarification.`}:{handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};if(e.multiSelect===true)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} must be a single selection.`};let u;if(s.options.length>0){let f=s.options.map(v=>({label:x(v.label),description:v.description?x(v.description):""}));if(a.length!==f.length||a.some((v,W)=>v.label!==f[W]?.label||v.description!==f[W]?.description))return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: the displayed options do not match the pending decision ${r}. Refresh delivery_status and render its options verbatim.`};let O=s.options.find(v=>x(v.label)===d);if(!O)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: answer does not match a pending option for ${r}.`};s.kind==="artifact_approval"?u=O.id==="approve"?`/devflow:approve ${r}`:`/devflow:reject ${r} -- ${d}`:u=`/devflow:decide ${r} ${O.id}`;}else {if(a.length>0)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} is a free-form clarification and must not be rendered as a choice list.`};u=`/devflow:decide ${r} -- ${d}`;}if(!(typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:n.sourceTurnId??n.toolUseId}):true))return {handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};let h=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,b=et(),D=tt({rawUserEvent:u,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:n.sessionId,sourceTurnId:n.sourceTurnId?.trim()||n.toolUseId?.trim()||`host-turn:${n.sessionId}:${Date.now()}`,actorId:h,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:b.privateKey,allowedOptionIds:s.options.map(f=>f.id)});try{return await o.resolveTrustedDecision({evidence:D,publicKey:b.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow interactive decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(f){return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${f instanceof Error?f.message:String(f)}`}}}function Io(n){let t=nt.get(n);if(t)return t;let e=createTrustedDeliveryFacade(n);return nt.set(n,e),e}function it(n){if(!n)return;let t=typeof n.status=="string"?n.status:void 0;if(!(n.ok===false||n.success===false||n.isError===true||t==="failed"||t==="rejected"||!!n.error))return;let o=n.error;if(typeof o=="string"&&o.trim())return o;if(o&&typeof o=="object"){let r=o;if(typeof r.message=="string"&&r.message.trim())return r.message;if(typeof r.code=="string"&&r.code.trim())return r.code}return t?`Tool response status: ${t}`:"Tool response reported failure"}function Do(n,t,e,o){try{let r=join$1(A(n),"event-map.json");if(!existsSync(r))return null;let i=JSON.parse(readFileSync(r,"utf-8")),s=i.filter(l=>l.toolName===e&&(!l.sessionId||l.sessionId===t));if(s.length===0)return null;let a=o?s.find(l=>l.toolUseId===o):s.sort((l,d)=>l.timestamp-d.timestamp)[0];if(!a)return null;let c=i.findIndex(l=>l.eventId===a.eventId);return c!==-1&&i.splice(c,1),writeFileSync(r,JSON.stringify(i)),{eventId:a.eventId,timestamp:a.timestamp}}catch{return null}}function st(n){if(!n)return 0;let t=n;if(typeof n=="string")try{t=JSON.parse(n);}catch{return 1}let e=t,o=["files","results","data","result","memories","nodes","chunks","findings","symbols","keySymbols"],r=["reasoning","riskHints","nextActions"],i=Array.isArray(e.data)?e.data:e.structuredContent??e;if(Array.isArray(i))return i.length;if(typeof i=="object"&&i!==null){let s=i,a=0,c=false;for(let d of o)Array.isArray(s[d])&&(c=true,a+=s[d].length);for(let d of r)Array.isArray(s[d])&&(a+=s[d].length);for(let[,d]of Object.entries(s))d&&typeof d=="object"&&!Array.isArray(d)&&(a+=st(d));let l=!!(s._devflow||s._devflow_unique||s.taskType);return a===0&&l&&!c?1:a>0?a:c?0:Object.keys(s).length>0?1:0}return 0}async function Oo(n){if(!n)return null;let t;try{t=JSON.parse(n);}catch{return null}let e=t.tool_name||"",o=ee(),r=t.tool_input||{},i=t.tool_response||{},s=t.session_id?.trim()||null,a=new E(o);if(s&&a.registerSession(s),s){let p=await rt({projectRoot:o,sessionId:s,sourceTurnId:a.get(s)?.activeTurnId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id});if(p.handled)return p.message}let c=resolveClaudeToolName(e,r),l=c.status==="unsupported"?void 0:c.canonicalName;if(s&&l==="get_project_context"&&a.completeContextInitialization(s,t.tool_use_id),e==="Skill"){let p=typeof r=="object"&&r.skill?r.skill:"",m=Le(p);s&&m&&(a.startExecution(s,m,qe(m)),ie(o,{lastMcpCall:Math.floor(Date.now()/1e3),bypassCount:0}));}let d=s?a.get(s):null;if(e.startsWith("mcp__")){let p=new N(o,s??void 0,d?.executionId??s??void 0);p.recordMcpCall();let m=it(typeof i=="object"&&i!==null?i:null),_=l??e,Y=p.getContextReceipt?.()?.canonicalAction?.tool===_;if((p.recordDomainActionOutcome(_,m?To(m):"succeeded",m,t.tool_use_id)||Y)&&s){let T=Qe({hook:"post_tool_use",toolName:_,...t.tool_use_id?{toolUseId:t.tool_use_id}:{},response:i,...m?{error:m}:{}});F({projectRoot:o,sessionId:s,executionId:d?.executionId??s,kind:T.consumption==="consumed"?"action.succeeded":"action.failed",payload:{receiptId:T.receiptId,reasonCode:T.reasonCode,consumption:T.consumption,tool:_},dedupeKey:`${T.receiptId}:${T.consumption}`,producer:"devflow-post-tool-use"});try{Ye({projectRoot:o,sessionId:s,executionId:d?.executionId??s,reason:m?"post_tool_action_failed":"post_tool_action_succeeded"});}catch{}}}s&&Ve({projectRoot:o,sessionId:s,executionId:d?.executionId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id});let u=s?Do(o,s,e,t.tool_use_id):null,g=s&&t.tool_use_id&&!u?(()=>{try{let p=openGlobalDevFlowDatabase();try{return p.getToolCallEventByToolUseId(s,t.tool_use_id)}finally{p.close();}}catch{return null}})():null,h=u??g,b=typeof i=="object"&&i!==null?i:null,D=JSON.stringify(i),f=Buffer.byteLength(D,"utf8"),O=st(i),v=it(b);if(s&&Je({projectRoot:o,sessionId:s,toolUseId:t.tool_use_id,success:!v,error:v}),d?.executionId!==void 0||l!==void 0||e==="Skill"){let p=getLogWriter(o),m=d?.executionId??`auto-${s??Date.now()}`;p.toolCall({tool:e,runId:m,stepId:`step-${m}`,input:r,output:i,duration:h?Math.max(0,Date.now()-h.timestamp):0,success:!b?.error,resultCount:O,resultSizeBytes:f,error:b?.error});}if(h&&s){let p=typeof i=="string"?i:JSON.stringify(i),m=p.length>5e3?{_truncated:true,_originalSize:p.length,text:p.slice(0,5e3)}:i,_=v,Y=_?classifyWorkflowFailure({stepId:e,toolName:e,output:i,error:new Error(_),errorStack:_}).category:void 0;await new V().completeEvent({eventId:h.eventId,sessionId:s,output:m,error:_,failureCategory:Y,duration:h?Math.max(0,Date.now()-h.timestamp):0,completedAt:Date.now()});}let me=typeof r=="object"&&r.command?r.command:"",G=b?.exitCode,at=b?.stderr,ct=/^\s*(ls|cat|pwd|cd|echo|head|tail|wc|which|whoami|date|env|printenv|id|hostname|uname)\b/,k,S,Z=true;if(e.startsWith("mcp__"))k="mcp_call",S={mcpTool:l??e,query:typeof r=="object"&&r.query?r.query:null,resultCount:O,resultSizeBytes:f};else if(e==="Read"||e==="Write"||e==="Edit")k=e==="Read"?"file_read":"file_write",S={filePath:typeof r=="object"&&r.file_path?r.file_path:null,fileContentSize:f};else if(e==="Bash"){let p=ct.test(me),m=G!==void 0&&G!==0;Z=!p||m,k=m?"bash_error":"bash_command",S={command:me||e,exitCode:G??null,stderr:at??null};}else e==="Agent"?(k="subagent",S={subagentType:typeof r=="object"&&r.subagent_type?r.subagent_type:null,description:typeof r=="object"&&r.description?String(r.description).slice(0,200):null}):e==="WebSearch"||e==="WebFetch"?(k=e==="WebSearch"?"web_search":"web_fetch",S={query:typeof r=="object"&&r.query?String(r.query).slice(0,200):null}):(Z=false,k="tool_use",S={});if(Z){let p={id:t.tool_use_id?`memory:${Me(s??"",t.tool_use_id)}`:`evt:${Date.now()}:${Math.random().toString(36).slice(2,7)}`,sessionId:s??"",tool:e,kind:k,payload:{...S,durationMs:h?Math.max(0,Date.now()-h.timestamp):0},createdAt:Date.now()};s&&L(`/api/memory/session-events?rootPath=${encodeURIComponent(o)}`,p);}let dt=Ue({toolName:e,toolResponse:i,sessionId:s,toolUseId:t.tool_use_id,runtimeStore:a}),lt=s?ze({projectRoot:o,sessionId:s,executionId:d?.executionId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id}):null;return [dt,lt].filter(p=>!!p).join(`
6
+ `,{encoding:"utf8",mode:384}),y({event:"canonical.action.validated",identity:{projectRoot:n.projectRoot,sessionId:n.sessionId,executionId:t.executionId,contextReceipt:t.contextReceipt},level:n.success?"info":"warn",timestamp:e,data:{stage:"host_file_state_completed",valid:n.success,operation:t.operation,targetPath:relative(n.projectRoot,t.path),beforeHash:t.before.hash,afterHash:o.after.hash,beforeExists:t.before.exists,afterExists:o.after.exists,reason:o.error,toolUseId:t.toolUseId}}),o}function Wn(n){if(!existsSync$1(n))return {exists:false};try{return {exists:!0,hash:createHash$1("sha256").update(readFileSync$1(n)).digest("hex")}}catch{return {exists:true}}}function We(n){return join(A(n),"file-state")}function Ge(n){return join(We(n),"pending.json")}function Gn(n){return join(We(n),"observations.jsonl")}function Zn(n){try{return JSON.parse(readFileSync$1(Ge(n),"utf8"))}catch{return {}}}function Yn(n,t){let e=Ge(n),o=Zn(n),r=o[t];if(r)return delete o[t],Qn(e,JSON.stringify(o)),r}function Qn(n,t){let e=`${n}.${process.pid}.${Date.now()}.tmp`;writeFileSync$1(e,t,{encoding:"utf8",mode:384}),renameSync$1(e,n);}var eo={open:["intent_bound"],intent_bound:["context_ready","context_degraded"],context_ready:["action_required","action_not_required"],context_degraded:["action_required","action_not_required"],action_required:["action_satisfied","action_degraded","action_failed"],action_not_required:["memory_decided","memory_quarantined"],action_satisfied:["memory_decided","memory_quarantined"],action_degraded:["memory_decided","memory_quarantined"],action_failed:["action_satisfied","action_degraded"],memory_decided:["closed","closed_with_degradation","closed_with_retry_work"],memory_quarantined:["closed_with_degradation","closed_with_retry_work"],closed:[],closed_with_degradation:[],closed_with_retry_work:[]};function to(n){return no(n)}function no(n){let t=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let e=so(t,n.artifact);if(ao(e.toState))return e;let o=t.getContextReceiptForRequest(n.artifact.projectRoot,n.artifact.sessionId,n.artifact.requestId),r=t.getMemoryTurn(n.artifact.turnId),i=n.artifact.intent==="memory"||r?.source==="explicit_intent";if(!o&&!i)return e;let s=o?oo(n.artifact,o):"context_ready";e.toState==="intent_bound"&&(e=I(t,e,n,s,i?"task_context_not_required":s==="context_ready"?"canonical_context_receipt_ready":"canonical_context_receipt_degraded"));let a=o?ro(n.artifact,o):"action_not_required";if((e.toState==="context_ready"||e.toState==="context_degraded")&&(a==="action_not_required"?e=I(t,e,n,"action_not_required","task_action_not_required"):e=I(t,e,n,"action_required","canonical_action_obligation_present")),e.toState==="action_required"){if(a==="action_required")return e;if(a==="action_failed")return I(t,e,n,"action_failed","canonical_action_attempt_failed");a==="action_degraded"?e=I(t,e,n,"action_degraded","canonical_action_unavailable_or_degraded"):a==="action_satisfied"&&(e=I(t,e,n,"action_satisfied","canonical_action_succeeded"));}if(e.toState==="action_failed")if(a==="action_satisfied")e=I(t,e,n,"action_satisfied","canonical_action_retry_succeeded");else if(a==="action_degraded")e=I(t,e,n,"action_degraded","canonical_action_retry_degraded");else return e;let c=s==="context_degraded"||a==="action_degraded";return ["action_not_required","action_satisfied","action_degraded"].includes(e.toState)&&(e=I(t,e,n,n.memoryStatus==="pending"?"memory_quarantined":"memory_decided",n.memoryStatus==="pending"?n.reason:`canonical_memory_${n.memoryStatus}`)),e.toState==="memory_decided"?I(t,e,n,c?"closed_with_degradation":"closed",n.reason):e.toState==="memory_quarantined"?I(t,e,n,n.retryOwned?"closed_with_retry_work":"closed_with_degradation",n.retryOwned?"durable_retry_owner_confirmed":"terminal_obligation_unowned"):e}finally{t.close();}}function Ye(n){let t=openGlobalDevFlowDatabase(void 0,{busyTimeoutMs:250});try{let e=t.getActiveContextReceipt(n.projectRoot,n.sessionId,n.executionId),o=typeof e?.canonicalAction?.binding.turnId=="string"?e.canonicalAction.binding.turnId:void 0;if(!o)return null;let r=t.listLatestTaskIntentArtifacts(n.projectRoot,n.sessionId).find(s=>s.turnId===o),i=t.getMemoryTurn(o);return !r||!i?null:to({artifact:r,memoryStatus:i.status,memoryReceiptId:i.receiptId,reason:n.reason})}finally{t.close();}}function oo(n,t){return n.intent==="memory"||n.intent==="knowledge"||(t.selectedFiles?.length??0)>0?"context_ready":"context_degraded"}function ro(n,t){let e=t.canonicalAction,r=(e?(t.actionAttempts??[]).filter(i=>i.tool===e.tool):[]).at(-1);return t.actionSatisfiedAt||r?.status==="succeeded"?"action_satisfied":r&&["failed","timeout","unavailable"].includes(r.status)?"action_failed":t.actionDegradation||e?.status==="degraded"||e?.status==="unsupported"?"action_degraded":e?.required||io(n)?"action_required":"action_not_required"}function io(n){return ["create","modify","debug","test","format"].includes(n.action)||["feature","refactor","performance"].includes(n.intent)}function so(n,t){let e=n.getLatestTerminalTransition(t.projectRoot,t.sessionId,t.turnId);if(!e)throw new Error(`TERMINAL_INTENT_STATE_MISSING:${t.turnId}`);return e}function I(n,t,e,o,r){if(!eo[t.toState]?.includes(o))throw new Error(`TERMINAL_PATH_UNAVAILABLE:${t.toState}->${o}`);let i=t.sequence+1,s=`terminal:${createHash$1("sha256").update(`${e.artifact.artifactHash}\0${i}\0${o}`).digest("hex").slice(0,24)}`,a=n.appendTerminalTransition({projectRoot:e.artifact.projectRoot,projectId:e.artifact.projectId,hostId:e.artifact.hostId,sessionId:e.artifact.sessionId,turnId:e.artifact.turnId,requestId:e.artifact.requestId,executionId:e.artifact.executionId,sequence:i,fromState:t.toState,toState:o,receiptId:s,sourceReceiptId:e.memoryReceiptId??t.receiptId,reason:r,payload:{memoryStatus:e.memoryStatus,retryOwned:e.retryOwned??false,sourceIntentHash:e.artifact.artifactHash},createdAt:Date.now()});return y({event:"terminal.state.transitioned",identity:{projectRoot:e.artifact.projectRoot,projectId:e.artifact.projectId,hostId:e.artifact.hostId,sessionId:e.artifact.sessionId,turnId:e.artifact.turnId,requestId:e.artifact.requestId,...e.artifact.executionId?{executionId:e.artifact.executionId}:{}},level:o==="closed"?"info":o.includes("degradation")||o.includes("retry")||o==="action_failed"?"warn":"info",timestamp:Date.now(),data:{fromState:t.toState,nextState:o,receiptId:s,reason:r}}),a}function ao(n){return n==="closed"||n==="closed_with_degradation"||n==="closed_with_retry_work"}function Qe(n){let t=n.hook==="post_tool_use_failure"||!!n.error?.trim()||co(n.response),e=t?"not_consumed":n.hook==="post_tool_use"?"consumed":"unknown",o=t?lo(n.error,n.response):e==="consumed"?"host_reported_success":"host_outcome_unknown";return {schemaVersion:"host-tool-outcome.v1",toolName:n.toolName,...n.toolUseId?{toolUseId:n.toolUseId}:{},consumption:e,reasonCode:o,receiptId:n.toolUseId??`host-tool:${n.toolName}:${o}`}}function co(n){if(!n||typeof n!="object"||Array.isArray(n))return false;let t=n;return t.isError===true||t.error?true:typeof t.status=="string"&&["failed","error","rejected","timeout","unavailable"].includes(t.status.toLowerCase())}function lo(n,t){let e=`${n??""} ${JSON.stringify(t??"")}`;return /timeout|timed out|deadline/iu.test(e)?"host_tool_timeout":/unavailable|not found|not registered|unsupported/iu.test(e)?"host_tool_unavailable":"host_tool_failed"}function et(){return generateKeyPairSync("ed25519")}function tt(n){let t=parseTrustedDecisionCommand(n.rawUserEvent,n.allowedOptionIds),e=n.now??Date.now(),o={schemaVersion:"delivery-user-attestation.v1",issuer:n.issuer,keyId:n.keyId,purpose:t.purpose,decisionId:t.decisionId,caseId:n.caseId,caseVersion:n.caseVersion,sessionId:n.sessionId,sourceTurnId:n.sourceTurnId,actorId:n.actorId,targetDecisionHash:n.targetDecisionHash,rawUserEvent:n.rawUserEvent,rawUserEventHash:domainHash("raw-user-event",n.rawUserEvent),selectedValueHash:domainHash("decision-value",{decisionId:t.decisionId,purpose:t.purpose,value:encodeDecisionValue(t.purpose,t.value)}),eventSequence:n.eventSequence,issuedAt:new Date(e).toISOString(),expiresAt:new Date(e+6e4).toISOString(),nonce:n.nonce};return {...o,attestation:sign(null,canonicalJsonBytes(o),n.privateKey).toString("base64url")}}var nt=new Map;function ot(n){if(typeof n=="string")return /\bDevFlow decision ([A-Za-z0-9._:-]+)/u.exec(x(n))?.[1]}function x(n){return n.replace(/[\u0000-\u001f\u007f\ufffd]+/gu,"").replace(/\s+/gu," ").trim()}function bo(n){if(typeof n=="string")return n.trim()||void 0;if(!n||typeof n!="object"||Array.isArray(n))return;let t=n.answers;if(!t||typeof t!="object"||Array.isArray(t))return;let e=Object.values(t);if(e.length!==1)return;let o=e[0];if(!(Array.isArray(o)||typeof o!="string"))return o.trim()||void 0}async function rt(n){if(n.toolName!=="AskUserQuestion")return {handled:false};let t=n.toolInput&&typeof n.toolInput=="object"&&!Array.isArray(n.toolInput)?n.toolInput:{};if(!Array.isArray(t.questions)||t.questions.length!==1)return {handled:false};let e=t.questions[0],o=Io(n.projectRoot),r=ot(e.header)??ot(e.question);if(!r){let f=await o.pendingDecisionForSession(n.sessionId);if(!f||"ambiguous"in f||!["artifact_approval","trusted_action"].includes(f.decision.kind))return {handled:false};r=f.decision.id;}let i=r.split(":")[0],s=await o.pendingDecision(i);if(!s||s.id!==r)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: no pending decision matches ${r}. Refresh delivery_status.`};let a=Array.isArray(e.options)?e.options.map(f=>({label:typeof f.label=="string"?x(f.label):"",description:typeof f.description=="string"?x(f.description):""})):[],c=createHash$1("sha256").update(JSON.stringify({decisionId:r,question:x(String(e.question??"")),options:a})).digest("hex"),l=bo(n.toolResponse),d=l?x(l):void 0;if(!d)return (typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:n.sourceTurnId??n.toolUseId}):true)?{handled:true,resolved:false,message:`DevFlow interactive decision rejected: AskUserQuestion returned no single answer for ${r}. Use /devflow:decide ${r} -- <answer> if this is a free-form clarification.`}:{handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};if(e.multiSelect===true)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} must be a single selection.`};let u;if(s.options.length>0){let f=s.options.map(v=>({label:x(v.label),description:v.description?x(v.description):""}));if(a.length!==f.length||a.some((v,W)=>v.label!==f[W]?.label||v.description!==f[W]?.description))return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: the displayed options do not match the pending decision ${r}. Refresh delivery_status and render its options verbatim.`};let O=s.options.find(v=>x(v.label)===d);if(!O)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: answer does not match a pending option for ${r}.`};s.kind==="artifact_approval"?u=O.id==="approve"?`/devflow:approve ${r}`:`/devflow:reject ${r} -- ${d}`:u=`/devflow:decide ${r} ${O.id}`;}else {if(a.length>0)return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${r} is a free-form clarification and must not be rendered as a choice list.`};u=`/devflow:decide ${r} -- ${d}`;}if(!(typeof o.recordDecisionPresentation=="function"?await o.recordDecisionPresentation({caseId:i,decisionId:r,caseVersion:s.caseVersion,presentationHash:c,sourceTurnId:n.sourceTurnId??n.toolUseId}):true))return {handled:true,resolved:false,message:`DevFlow interactive decision ${r} was already presented. Reuse the existing answer or refresh delivery_status after resolution.`};let h=process.env.DEVFLOW_HOST_ACTOR_ID?.trim()||`user:${process.env.USER?.trim()||"local"}`,b=et(),D=tt({rawUserEvent:u,issuer:"claude-code",keyId:"session-ephemeral",caseId:i,caseVersion:s.caseVersion,sessionId:n.sessionId,sourceTurnId:n.sourceTurnId?.trim()||n.toolUseId?.trim()||`host-turn:${n.sessionId}:${Date.now()}`,actorId:h,targetDecisionHash:s.targetDecisionHash,eventSequence:Date.now(),nonce:randomUUID$1(),privateKey:b.privateKey,allowedOptionIds:s.options.map(f=>f.id)});try{return await o.resolveTrustedDecision({evidence:D,publicKey:b.publicKey,expectedIssuer:"claude-code",expectedKeyId:"session-ephemeral"}),{handled:!0,resolved:!0,message:`DevFlow interactive decision resolved for ${i}. Refresh delivery_status and follow nextActions.`}}catch(f){return {handled:true,resolved:false,message:`DevFlow interactive decision rejected: ${f instanceof Error?f.message:String(f)}`}}}function Io(n){let t=nt.get(n);if(t)return t;let e=createTrustedDeliveryFacade(n);return nt.set(n,e),e}function it(n){if(!n)return;let t=typeof n.status=="string"?n.status:void 0;if(!(n.ok===false||n.success===false||n.isError===true||t==="failed"||t==="rejected"||!!n.error))return;let o=n.error;if(typeof o=="string"&&o.trim())return o;if(o&&typeof o=="object"){let r=o;if(typeof r.message=="string"&&r.message.trim())return r.message;if(typeof r.code=="string"&&r.code.trim())return r.code}return t?`Tool response status: ${t}`:"Tool response reported failure"}function Do(n,t,e,o){try{let r=join$1(A(n),"event-map.json");if(!existsSync(r))return null;let i=JSON.parse(readFileSync(r,"utf-8")),s=i.filter(l=>l.toolName===e&&(!l.sessionId||l.sessionId===t));if(s.length===0)return null;let a=o?s.find(l=>l.toolUseId===o):s.sort((l,d)=>l.timestamp-d.timestamp)[0];if(!a)return null;let c=i.findIndex(l=>l.eventId===a.eventId);return c!==-1&&i.splice(c,1),writeFileSync(r,JSON.stringify(i)),{eventId:a.eventId,timestamp:a.timestamp}}catch{return null}}function st(n){if(!n)return 0;let t=n;if(typeof n=="string")try{t=JSON.parse(n);}catch{return 1}let e=t,o=["files","results","data","result","memories","nodes","chunks","findings","symbols","keySymbols"],r=["reasoning","riskHints","nextActions"],i=Array.isArray(e.data)?e.data:e.structuredContent??e;if(Array.isArray(i))return i.length;if(typeof i=="object"&&i!==null){let s=i,a=0,c=false;for(let d of o)Array.isArray(s[d])&&(c=true,a+=s[d].length);for(let d of r)Array.isArray(s[d])&&(a+=s[d].length);for(let[,d]of Object.entries(s))d&&typeof d=="object"&&!Array.isArray(d)&&(a+=st(d));let l=!!(s._devflow||s._devflow_unique||s.taskType);return a===0&&l&&!c?1:a>0?a:c?0:Object.keys(s).length>0?1:0}return 0}async function Oo(n){if(!n)return null;let t;try{t=JSON.parse(n);}catch{return null}let e=t.tool_name||"",o=ee(),r=t.tool_input||{},i=t.tool_response||{},s=t.session_id?.trim()||null,a=new E(o);if(s&&a.registerSession(s),s){let p=await rt({projectRoot:o,sessionId:s,sourceTurnId:a.get(s)?.activeTurnId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id});if(p.handled)return p.message}let c=resolveClaudeToolName(e,r),l=c.status==="unsupported"?void 0:c.canonicalName;if(s&&l==="get_project_context"&&a.completeContextInitialization(s,t.tool_use_id),e==="Skill"){let p=typeof r=="object"&&r.skill?r.skill:"",m=Le(p);s&&m&&(a.startExecution(s,m,qe(m)),ie(o,{lastMcpCall:Math.floor(Date.now()/1e3),bypassCount:0}));}let d=s?a.get(s):null;if(e.startsWith("mcp__")){let p=new N(o,s??void 0,d?.executionId??s??void 0);p.recordMcpCall();let m=it(typeof i=="object"&&i!==null?i:null),_=l??e,Y=p.getContextReceipt?.()?.canonicalAction?.tool===_;if((p.recordDomainActionOutcome(_,m?To(m):"succeeded",m,t.tool_use_id)||Y)&&s){let T=Qe({hook:"post_tool_use",toolName:_,...t.tool_use_id?{toolUseId:t.tool_use_id}:{},response:i,...m?{error:m}:{}});F({projectRoot:o,sessionId:s,executionId:d?.executionId??s,kind:T.consumption==="consumed"?"action.succeeded":"action.failed",payload:{receiptId:T.receiptId,reasonCode:T.reasonCode,consumption:T.consumption,tool:_},dedupeKey:`${T.receiptId}:${T.consumption}`,producer:"devflow-post-tool-use"});try{Ye({projectRoot:o,sessionId:s,executionId:d?.executionId??s,reason:m?"post_tool_action_failed":"post_tool_action_succeeded"});}catch{}}}s&&Ve({projectRoot:o,sessionId:s,executionId:d?.executionId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id});let u=s?Do(o,s,e,t.tool_use_id):null,g=s&&t.tool_use_id&&!u?(()=>{try{let p=openGlobalDevFlowDatabase();try{return p.getToolCallEventByToolUseId(s,t.tool_use_id)}finally{p.close();}}catch{return null}})():null,h=u??g,b=typeof i=="object"&&i!==null?i:null,D=JSON.stringify(i),f=Buffer.byteLength(D,"utf8"),O=st(i),v=it(b);if(s&&Je({projectRoot:o,sessionId:s,toolUseId:t.tool_use_id,success:!v,error:v}),d?.executionId!==void 0||l!==void 0||e==="Skill"){let p=getLogWriter(o),m=d?.executionId??`auto-${s??Date.now()}`;p.toolCall({tool:e,runId:m,stepId:`step-${m}`,input:r,output:i,duration:h?Math.max(0,Date.now()-h.timestamp):0,success:!b?.error,resultCount:O,resultSizeBytes:f,error:b?.error});}if(h&&s){let p=typeof i=="string"?i:JSON.stringify(i),m=p.length>5e3?{_truncated:true,_originalSize:p.length,text:p.slice(0,5e3)}:i,_=v,Y=_?classifyWorkflowFailure({stepId:e,toolName:e,output:i,error:new Error(_),errorStack:_}).category:void 0;await new V().completeEvent({eventId:h.eventId,sessionId:s,output:m,error:_,failureCategory:Y,duration:h?Math.max(0,Date.now()-h.timestamp):0,completedAt:Date.now()});}let me=typeof r=="object"&&r.command?r.command:"",G=b?.exitCode,at=b?.stderr,ct=/^\s*(ls|cat|pwd|cd|echo|head|tail|wc|which|whoami|date|env|printenv|id|hostname|uname)\b/,k,S,Z=true;if(e.startsWith("mcp__"))k="mcp_call",S={mcpTool:l??e,query:typeof r=="object"&&r.query?r.query:null,resultCount:O,resultSizeBytes:f};else if(e==="Read"||e==="Write"||e==="Edit")k=e==="Read"?"file_read":"file_write",S={filePath:typeof r=="object"&&r.file_path?r.file_path:null,fileContentSize:f};else if(e==="Bash"){let p=ct.test(me),m=G!==void 0&&G!==0;Z=!p||m,k=m?"bash_error":"bash_command",S={command:me||e,exitCode:G??null,stderr:at??null};}else e==="Agent"?(k="subagent",S={subagentType:typeof r=="object"&&r.subagent_type?r.subagent_type:null,description:typeof r=="object"&&r.description?String(r.description).slice(0,200):null}):e==="WebSearch"||e==="WebFetch"?(k=e==="WebSearch"?"web_search":"web_fetch",S={query:typeof r=="object"&&r.query?String(r.query).slice(0,200):null}):(Z=false,k="tool_use",S={});if(Z){let p={id:t.tool_use_id?`memory:${Me(s??"",t.tool_use_id)}`:`evt:${Date.now()}:${Math.random().toString(36).slice(2,7)}`,sessionId:s??"",tool:e,kind:k,payload:{...S,durationMs:h?Math.max(0,Date.now()-h.timestamp):0},createdAt:Date.now()};s&&L(`/api/memory/session-events?rootPath=${encodeURIComponent(o)}`,p);}let dt=Ue({toolName:e,toolResponse:i,sessionId:s,toolUseId:t.tool_use_id,runtimeStore:a}),lt=s?ze({projectRoot:o,sessionId:s,executionId:d?.executionId,toolName:e,toolInput:r,toolResponse:i,toolUseId:t.tool_use_id}):null;return [dt,lt].filter(p=>!!p).join(`
7
7
 
8
8
  `)||null}function To(n){return /timeout|timed out|deadline|warming/i.test(n)?"timeout":/unavailable|not active|unknown tool|not found|not registered|route not found/i.test(n)?"unavailable":"failed"}if(process.argv[1]?.endsWith("post-tool-use")||process.argv[1]?.endsWith("post-tool-use.js")){let n=console.log.bind(console);console.log=console.error.bind(console),console.info=console.error.bind(console);let t="";process.stdin.setEncoding("utf8"),process.stdin.on("data",e=>{t+=e;}),process.stdin.on("end",async()=>{let e=await Oo(t.trim()||process.argv[2]||"");n(JSON.stringify(e?{hookSpecificOutput:{hookEventName:"PostToolUse",additionalContext:e}}:{status:"ok"}));}),process.stdin.on("error",()=>process.exit(0)),setTimeout(()=>process.exit(0),5e3).unref();}export{Oo as handlePostToolUse};