@ashx-j/lunr-dev 0.2.13-dev.3.1 → 0.2.13-dev.4.1

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 (120) hide show
  1. package/CHANGELOG.md +4 -0
  2. package/dist/builtin-extensions/ashxj-tui.d.ts +2 -1
  3. package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
  4. package/dist/builtin-extensions/ashxj-tui.js +7 -17
  5. package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
  6. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
  7. package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
  8. package/dist/builtin-extensions/pi-subagents/src/extension/index.js +27 -22
  9. package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
  10. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
  11. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +5 -2
  12. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
  13. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
  14. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +12 -1
  15. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
  16. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
  17. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
  18. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +3 -2
  19. package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
  20. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
  21. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
  22. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
  23. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
  24. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
  25. package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
  26. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
  27. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
  28. package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
  29. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
  30. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +2 -2
  31. package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
  32. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
  33. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3 -0
  34. package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
  35. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
  36. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -1
  37. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
  38. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
  39. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
  40. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
  41. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +1 -0
  42. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
  43. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -3
  44. package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
  45. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +10 -1
  46. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
  47. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +19 -0
  48. package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
  49. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
  50. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
  51. package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
  52. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +2 -1
  53. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
  54. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +17 -0
  55. package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
  56. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
  57. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
  58. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +14 -3
  59. package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
  60. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -0
  61. package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
  62. package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
  63. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
  64. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +2 -2
  65. package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
  66. package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
  67. package/dist/builtin-extensions/pi-subagents/src/tui/render.js +12 -10
  68. package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
  69. package/dist/core/customize.d.ts +2 -4
  70. package/dist/core/customize.d.ts.map +1 -1
  71. package/dist/core/customize.js +2 -8
  72. package/dist/core/customize.js.map +1 -1
  73. package/dist/core/settings-manager.d.ts +0 -6
  74. package/dist/core/settings-manager.d.ts.map +1 -1
  75. package/dist/core/settings-manager.js +0 -17
  76. package/dist/core/settings-manager.js.map +1 -1
  77. package/dist/core/slash-commands.d.ts.map +1 -1
  78. package/dist/core/slash-commands.js +1 -0
  79. package/dist/core/slash-commands.js.map +1 -1
  80. package/dist/migrations.d.ts +2 -0
  81. package/dist/migrations.d.ts.map +1 -1
  82. package/dist/migrations.js +14 -4
  83. package/dist/migrations.js.map +1 -1
  84. package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
  85. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  86. package/dist/modes/interactive/components/assistant-message.js +4 -32
  87. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  88. package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
  89. package/dist/modes/interactive/components/custom-editor.js +2 -1
  90. package/dist/modes/interactive/components/custom-editor.js.map +1 -1
  91. package/dist/modes/interactive/components/plan-message.d.ts +1 -3
  92. package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
  93. package/dist/modes/interactive/components/plan-message.js +1 -16
  94. package/dist/modes/interactive/components/plan-message.js.map +1 -1
  95. package/dist/modes/interactive/components/settings-selector.d.ts +0 -4
  96. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  97. package/dist/modes/interactive/components/settings-selector.js +10 -30
  98. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  99. package/dist/modes/interactive/components/user-message.d.ts +1 -3
  100. package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
  101. package/dist/modes/interactive/components/user-message.js +2 -19
  102. package/dist/modes/interactive/components/user-message.js.map +1 -1
  103. package/dist/modes/interactive/interactive-mode.d.ts +2 -0
  104. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  105. package/dist/modes/interactive/interactive-mode.js +29 -34
  106. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  107. package/dist/modes/interactive/theme/moon.json +0 -1
  108. package/dist/modes/interactive/theme/theme-schema.json +3 -3
  109. package/dist/modes/interactive/theme/theme.d.ts +1 -1
  110. package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
  111. package/dist/modes/interactive/theme/theme.js +0 -6
  112. package/dist/modes/interactive/theme/theme.js.map +1 -1
  113. package/docs/features.md +2 -2
  114. package/docs/keybindings.md +1 -1
  115. package/docs/quickstart.md +1 -1
  116. package/docs/settings.md +1 -3
  117. package/docs/terminal-setup.md +2 -2
  118. package/docs/usage.md +2 -1
  119. package/docs/windows.md +1 -1
  120. package/package.json +4 -4
@@ -58,6 +58,7 @@ function outputFromTerminalStatus(root, status, step) {
58
58
  ...(stopped ? { stopped: true } : {}),
59
59
  ...(step?.sessionFile ?? status.sessionFile ? { sessionFile: step?.sessionFile ?? status.sessionFile } : {}),
60
60
  ...(step?.model ? { model: step.model } : {}),
61
+ ...(step?.modelSelection ? { modelSelection: step.modelSelection } : {}),
61
62
  ...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),
62
63
  ...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),
63
64
  ...(step?.totalCost ? { totalCost: step.totalCost } : {}),
@@ -78,6 +79,7 @@ function outputFromTimeout(root, status, message) {
78
79
  timedOut: true,
79
80
  ...(step?.sessionFile ?? status?.sessionFile ? { sessionFile: step?.sessionFile ?? status?.sessionFile } : {}),
80
81
  ...(step?.model ? { model: step.model } : {}),
82
+ ...(step?.modelSelection ? { modelSelection: step.modelSelection } : {}),
81
83
  ...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),
82
84
  ...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),
83
85
  ...(step?.totalCost ? { totalCost: step.totalCost } : {}),
@@ -104,6 +106,7 @@ function buildImportedResult(root, status, result) {
104
106
  ...(child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile ? { sessionFile: child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile } : {}),
105
107
  ...(child?.intercomTarget ? { intercomTarget: child.intercomTarget } : {}),
106
108
  ...(child?.model ?? step?.model ? { model: child?.model ?? step?.model } : {}),
109
+ ...(child?.modelSelection ?? step?.modelSelection ? { modelSelection: child?.modelSelection ?? step?.modelSelection } : {}),
107
110
  ...(child?.attemptedModels ?? step?.attemptedModels ? { attemptedModels: child?.attemptedModels ?? step?.attemptedModels } : {}),
108
111
  ...(child?.modelAttempts ?? step?.modelAttempts ? { modelAttempts: child?.modelAttempts ?? step?.modelAttempts } : {}),
109
112
  ...(child?.totalCost ?? step?.totalCost ? { totalCost: child?.totalCost ?? step?.totalCost } : {}),
@@ -1 +1 @@
1
- {"version":3,"file":"chain-root-attachment.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.ts"],"names":[],"mappings":"AAAA,cAAc;AACd,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAElC,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAwDnD,MAAM,eAAe,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAC7E,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;AAEjG,SAAS,cAAc,CAAC,UAAkB,EAA+B;IACxE,IAAI,CAAC;QACJ,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAoB,CAAC;IAC5E,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QAChB,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,MAAM,IAAI,KAAK,IAAK,KAA+B,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1H,OAAO,SAAS,CAAC;QAClB,CAAC;QACD,MAAM,KAAK,CAAC;IACb,CAAC;AAAA,CACD;AAED,SAAS,kBAAkB,CAAC,MAA0B,EAAE,KAAa,EAAyD;IAC7H,OAAO,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC;AAAA,CAC9B;AAED,SAAS,gBAAgB,CAAC,MAA0B,EAAE,KAAa,EAAW;IAC7E,IAAI,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IAC1B,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IAC/C,IAAI,IAAI,IAAI,sBAAsB,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC;QAAE,OAAO,IAAI,CAAC;IACjE,OAAO,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAAA,CACzC;AAED,SAAS,WAAW,CAAC,MAAmC,EAAE,KAAkE,EAA4D;IACvL,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,IAAI,KAAK,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,SAAS,CAAC;IAC9C,IAAI,KAAK,EAAE,OAAO,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,KAAK,EAAE,OAAO,KAAK,KAAK;QAAE,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC;IAC9H,IAAI,MAAM,CAAC,KAAK,KAAK,UAAU,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,QAAQ,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS;QAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC7I,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI;QAAE,OAAO,UAAU,CAAC;IAC/C,IAAI,MAAM,CAAC,OAAO,KAAK,KAAK;QAAE,OAAO,QAAQ,CAAC;IAC9C,OAAO,SAAS,CAAC;AAAA,CACjB;AAED,SAAS,wBAAwB,CAAC,IAAuB,EAAE,MAAmB,EAAE,IAA2D,EAA2B;IACrK,MAAM,KAAK,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,UAAU,CAAC;IAC7E,MAAM,QAAQ,GAAG,IAAI,EAAE,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,CAAC;IACrE,MAAM,OAAO,GAAG,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,KAAK,KAAK,SAAS,CAAC;IAChG,MAAM,OAAO,GAAG,IAAI,EAAE,KAAK,IAAI,MAAM,CAAC,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,uBAAuB,IAAI,CAAC,KAAK,mCAAmC,IAAI,CAAC,UAAU,GAAG,CAAC,CAAC;IAChL,OAAO;QACN,KAAK;QACL,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,OAAO;QACd,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5G,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,GAAG,CAAC,IAAI,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5F,GAAG,CAAC,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,IAAI,CAAC,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1F,GAAG,CAAC,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,EAAE,0BAA0B,EAAE,IAAI,CAAC,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC5G,GAAG,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC5D,CAAC;AAAA,CACF;AAED,SAAS,iBAAiB,CAAC,IAAuB,EAAE,MAA0B,EAAE,OAAe,EAA2B;IACzH,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO;QACN,KAAK,EAAE,IAAI,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,UAAU;QACtE,MAAM,EAAE,OAAO;QACf,OAAO,EAAE,KAAK;QACd,QAAQ,EAAE,CAAC;QACX,KAAK,EAAE,OAAO;QACd,QAAQ,EAAE,IAAI;QACd,GAAG,CAAC,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9G,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC7C,GAAG,CAAC,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrE,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACzD,CAAC;AAAA,CACF;AAED,SAAS,mBAAmB,CAAC,IAAuB,EAAE,MAA0B,EAAE,MAAuB,EAA2B;IACnI,MAAM,KAAK,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,KAAK,GAAG,WAAW,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;IACzC,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,IAAI,MAAM,EAAE,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,KAAK,IAAI,UAAU,CAAC;IAC9F,MAAM,MAAM,GAAG,KAAK,EAAE,MAAM,IAAI,MAAM,CAAC,OAAO,IAAI,EAAE,CAAC;IACrD,MAAM,QAAQ,GAAG,KAAK,EAAE,QAAQ,KAAK,IAAI,IAAI,IAAI,EAAE,QAAQ,KAAK,IAAI,IAAI,MAAM,CAAC,QAAQ,KAAK,IAAI,IAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,CAAC;IAC9H,MAAM,OAAO,GAAG,KAAK,EAAE,OAAO,KAAK,IAAI,IAAI,IAAI,EAAE,OAAO,KAAK,IAAI,IAAI,MAAM,CAAC,OAAO,KAAK,IAAI,IAAI,MAAM,EAAE,OAAO,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;IAChJ,MAAM,OAAO,GAAG,KAAK,KAAK,UAAU,IAAI,CAAC,QAAQ,IAAI,CAAC,OAAO,CAAC;IAC9D,MAAM,KAAK,GAAG,KAAK,EAAE,KAAK,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,2BAA2B,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,EAAE,KAAK,IAAI,uBAAuB,IAAI,CAAC,KAAK,iCAAiC,CAAC,CAAC;IACpN,OAAO;QACN,KAAK;QACL,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,KAAK,IAAI,EAAE,CAAC;QAClD,OAAO;QACP,QAAQ,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;QACzB,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3B,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrC,GAAG,CAAC,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,IAAI,IAAI,EAAE,WAAW,IAAI,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1J,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC,EAAE,cAAc,EAAE,KAAK,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC1E,GAAG,CAAC,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAC9E,GAAG,CAAC,KAAK,EAAE,eAAe,IAAI,IAAI,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,KAAK,EAAE,eAAe,IAAI,IAAI,EAAE,eAAe,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAChI,GAAG,CAAC,KAAK,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI,IAAI,EAAE,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACtH,GAAG,CAAC,KAAK,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,IAAI,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QAClG,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACnL,GAAG,CAAC,KAAK,EAAE,oBAAoB,IAAI,IAAI,EAAE,oBAAoB,CAAC,CAAC,CAAC,EAAE,oBAAoB,EAAE,KAAK,EAAE,oBAAoB,IAAI,IAAI,EAAE,oBAAoB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACzJ,GAAG,CAAC,KAAK,EAAE,0BAA0B,IAAI,IAAI,EAAE,0BAA0B,CAAC,CAAC,CAAC,EAAE,0BAA0B,EAAE,KAAK,EAAE,0BAA0B,IAAI,IAAI,EAAE,0BAA0B,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvL,GAAG,CAAC,KAAK,EAAE,UAAU,IAAI,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,IAAI,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACvG,CAAC;AAAA,CACF;AAED,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC7C,IAAuB,EACvB,OAAO,GAA0I,EAAE,EAChH;IACnC,MAAM,cAAc,GAAG,OAAO,CAAC,cAAc,IAAI,GAAG,CAAC;IACrD,MAAM,qBAAqB,GAAG,OAAO,CAAC,qBAAqB,IAAI,KAAK,CAAC;IACrE,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,IAAI,IAAI,CAAC,GAAG,CAAC;IACpC,IAAI,aAAiC,CAAC;IACtC,SAAS,CAAC;QACT,MAAM,MAAM,GAAG,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,OAAO,CAAC,WAAW,EAAE,EAAE;YAAE,OAAO,iBAAiB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,cAAc,IAAI,qBAAqB,CAAC,CAAC;QACrH,MAAM,MAAM,GAAG,cAAc,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;QAC/C,IAAI,MAAM;YAAE,OAAO,mBAAmB,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;QAC7D,IAAI,gBAAgB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;YAC1C,aAAa,KAAK,GAAG,EAAE,CAAC;YACxB,IAAI,GAAG,EAAE,GAAG,aAAa,IAAI,qBAAqB,EAAE,CAAC;gBACpD,OAAO,wBAAwB,CAAC,IAAI,EAAE,MAAO,EAAE,kBAAkB,CAAC,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;YACxF,CAAC;QACF,CAAC;aAAM,CAAC;YACP,aAAa,GAAG,SAAS,CAAC;QAC3B,CAAC;QACD,IAAI,CAAC,MAAM,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC9C,MAAM,IAAI,KAAK,CAAC,wBAAwB,IAAI,CAAC,KAAK,+BAA+B,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC;QACnG,CAAC;QACD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,CAAC;IACrE,CAAC;AAAA,CACD;AAED,MAAM,UAAU,0BAA0B,CAAC,UAAkB,EAAE,KAAa,EAAU;IACrF,OAAO,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,KAAK,OAAO,CAAC,CAAC;AAAA,CAC9C","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AcceptanceLedger, AsyncStatus, CostSummary, ModelAttempt } from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\n\nexport interface ImportedAsyncRoot {\n\trunId: string;\n\tasyncDir: string;\n\tresultPath: string;\n\tindex: number;\n}\n\nexport interface ImportedAsyncRootResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n\texitCode: number;\n\terror?: string;\n\tsessionFile?: string;\n\tintercomTarget?: string;\n\tmodel?: string;\n\tattemptedModels?: string[];\n\tmodelAttempts?: ModelAttempt[];\n\ttotalCost?: CostSummary;\n\tstructuredOutput?: unknown;\n\tstructuredOutputPath?: string;\n\tstructuredOutputSchemaPath?: string;\n\tacceptance?: AcceptanceLedger;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n}\n\ninterface AsyncResultFile {\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\terror?: string;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tresults?: Array<{\n\t\tagent?: string;\n\t\toutput?: string;\n\t\terror?: string;\n\t\tsuccess?: boolean;\n\t\ttimedOut?: boolean;\n\t\tstopped?: boolean;\n\t\tsessionFile?: string;\n\t\tintercomTarget?: string;\n\t\tmodel?: string;\n\t\tattemptedModels?: string[];\n\t\tmodelAttempts?: ModelAttempt[];\n\t\ttotalCost?: CostSummary;\n\t\tstructuredOutput?: unknown;\n\t\tstructuredOutputPath?: string;\n\t\tstructuredOutputSchemaPath?: string;\n\t\tacceptance?: AcceptanceLedger;\n\t}>;\n}\n\nconst TERMINAL_STATES = new Set([\"complete\", \"failed\", \"paused\", \"stopped\"]);\nconst TERMINAL_STEP_STATUSES = new Set([\"complete\", \"completed\", \"failed\", \"paused\", \"stopped\"]);\n\nfunction readResultFile(resultPath: string): AsyncResultFile | undefined {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(resultPath, \"utf-8\")) as AsyncResultFile;\n\t} catch (error) {\n\t\tif (typeof error === \"object\" && error !== null && \"code\" in error && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction selectedStatusStep(status: AsyncStatus | null, index: number): NonNullable<AsyncStatus[\"steps\"]>[number] | undefined {\n\treturn status?.steps?.[index];\n}\n\nfunction isTerminalStatus(status: AsyncStatus | null, index: number): boolean {\n\tif (!status) return false;\n\tconst step = selectedStatusStep(status, index);\n\tif (step && TERMINAL_STEP_STATUSES.has(step.status)) return true;\n\treturn TERMINAL_STATES.has(status.state);\n}\n\nfunction resultState(result: AsyncResultFile | undefined, child: NonNullable<AsyncResultFile[\"results\"]>[number] | undefined): \"complete\" | \"failed\" | \"paused\" | \"stopped\" | undefined {\n\tif (!result) return undefined;\n\tif (child?.stopped === true) return \"stopped\";\n\tif (child?.success === true) return \"complete\";\n\tif (child?.success === false) return result.state === \"stopped\" ? \"stopped\" : result.state === \"paused\" ? \"paused\" : \"failed\";\n\tif (result.state === \"complete\" || result.state === \"failed\" || result.state === \"paused\" || result.state === \"stopped\") return result.state;\n\tif (result.success === true) return \"complete\";\n\tif (result.success === false) return \"failed\";\n\treturn undefined;\n}\n\nfunction outputFromTerminalStatus(root: ImportedAsyncRoot, status: AsyncStatus, step: NonNullable<AsyncStatus[\"steps\"]>[number] | undefined): ImportedAsyncRootResult {\n\tconst agent = step?.agent ?? status.steps?.[root.index]?.agent ?? \"subagent\";\n\tconst timedOut = step?.timedOut === true || status.timedOut === true;\n\tconst stopped = step?.stopped === true || status.stopped === true || status.state === \"stopped\";\n\tconst message = step?.error ?? status.error ?? (stopped ? \"Subagent stopped by user.\" : `Attached async root ${root.runId} ended without a result file at ${root.resultPath}.`);\n\treturn {\n\t\tagent,\n\t\toutput: message,\n\t\tsuccess: false,\n\t\texitCode: 1,\n\t\terror: message,\n\t\t...(timedOut ? { timedOut: true } : {}),\n\t\t...(stopped ? { stopped: true } : {}),\n\t\t...(step?.sessionFile ?? status.sessionFile ? { sessionFile: step?.sessionFile ?? status.sessionFile } : {}),\n\t\t...(step?.model ? { model: step.model } : {}),\n\t\t...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),\n\t\t...(step?.totalCost ? { totalCost: step.totalCost } : {}),\n\t\t...(step?.structuredOutput !== undefined ? { structuredOutput: step.structuredOutput } : {}),\n\t\t...(step?.structuredOutputPath ? { structuredOutputPath: step.structuredOutputPath } : {}),\n\t\t...(step?.structuredOutputSchemaPath ? { structuredOutputSchemaPath: step.structuredOutputSchemaPath } : {}),\n\t\t...(step?.acceptance ? { acceptance: step.acceptance } : {}),\n\t};\n}\n\nfunction outputFromTimeout(root: ImportedAsyncRoot, status: AsyncStatus | null, message: string): ImportedAsyncRootResult {\n\tconst step = selectedStatusStep(status, root.index);\n\treturn {\n\t\tagent: step?.agent ?? status?.steps?.[root.index]?.agent ?? \"subagent\",\n\t\toutput: message,\n\t\tsuccess: false,\n\t\texitCode: 1,\n\t\terror: message,\n\t\ttimedOut: true,\n\t\t...(step?.sessionFile ?? status?.sessionFile ? { sessionFile: step?.sessionFile ?? status?.sessionFile } : {}),\n\t\t...(step?.model ? { model: step.model } : {}),\n\t\t...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),\n\t\t...(step?.totalCost ? { totalCost: step.totalCost } : {}),\n\t};\n}\n\nfunction buildImportedResult(root: ImportedAsyncRoot, status: AsyncStatus | null, result: AsyncResultFile): ImportedAsyncRootResult {\n\tconst child = result.results?.[root.index];\n\tconst step = selectedStatusStep(status, root.index);\n\tconst state = resultState(result, child);\n\tconst agent = child?.agent ?? step?.agent ?? status?.steps?.[root.index]?.agent ?? \"subagent\";\n\tconst output = child?.output ?? result.summary ?? \"\";\n\tconst timedOut = child?.timedOut === true || step?.timedOut === true || result.timedOut === true || status?.timedOut === true;\n\tconst stopped = child?.stopped === true || step?.stopped === true || result.stopped === true || status?.stopped === true || state === \"stopped\";\n\tconst success = state === \"complete\" && !timedOut && !stopped;\n\tconst error = child?.error ?? (success ? undefined : stopped ? \"Subagent stopped by user.\" : result.error ?? result.summary ?? status?.error ?? `Attached async root ${root.runId} did not complete successfully.`);\n\treturn {\n\t\tagent,\n\t\toutput: success ? output : (output || error || \"\"),\n\t\tsuccess,\n\t\texitCode: success ? 0 : 1,\n\t\t...(error ? { error } : {}),\n\t\t...(timedOut ? { timedOut: true } : {}),\n\t\t...(stopped ? { stopped: true } : {}),\n\t\t...(child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile ? { sessionFile: child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile } : {}),\n\t\t...(child?.intercomTarget ? { intercomTarget: child.intercomTarget } : {}),\n\t\t...(child?.model ?? step?.model ? { model: child?.model ?? step?.model } : {}),\n\t\t...(child?.attemptedModels ?? step?.attemptedModels ? { attemptedModels: child?.attemptedModels ?? step?.attemptedModels } : {}),\n\t\t...(child?.modelAttempts ?? step?.modelAttempts ? { modelAttempts: child?.modelAttempts ?? step?.modelAttempts } : {}),\n\t\t...(child?.totalCost ?? step?.totalCost ? { totalCost: child?.totalCost ?? step?.totalCost } : {}),\n\t\t...(child?.structuredOutput !== undefined ? { structuredOutput: child.structuredOutput } : step?.structuredOutput !== undefined ? { structuredOutput: step.structuredOutput } : {}),\n\t\t...(child?.structuredOutputPath ?? step?.structuredOutputPath ? { structuredOutputPath: child?.structuredOutputPath ?? step?.structuredOutputPath } : {}),\n\t\t...(child?.structuredOutputSchemaPath ?? step?.structuredOutputSchemaPath ? { structuredOutputSchemaPath: child?.structuredOutputSchemaPath ?? step?.structuredOutputSchemaPath } : {}),\n\t\t...(child?.acceptance ?? step?.acceptance ? { acceptance: child?.acceptance ?? step?.acceptance } : {}),\n\t};\n}\n\nexport async function waitForImportedAsyncRoot(\n\troot: ImportedAsyncRoot,\n\toptions: { pollIntervalMs?: number; terminalResultGraceMs?: number; now?: () => number; shouldAbort?: () => boolean; timeoutMessage?: string } = {},\n): Promise<ImportedAsyncRootResult> {\n\tconst pollIntervalMs = options.pollIntervalMs ?? 500;\n\tconst terminalResultGraceMs = options.terminalResultGraceMs ?? 1_000;\n\tconst now = options.now ?? Date.now;\n\tlet terminalSince: number | undefined;\n\tfor (;;) {\n\t\tconst status = readStatus(root.asyncDir);\n\t\tif (options.shouldAbort?.()) return outputFromTimeout(root, status, options.timeoutMessage ?? \"Subagent timed out.\");\n\t\tconst result = readResultFile(root.resultPath);\n\t\tif (result) return buildImportedResult(root, status, result);\n\t\tif (isTerminalStatus(status, root.index)) {\n\t\t\tterminalSince ??= now();\n\t\t\tif (now() - terminalSince >= terminalResultGraceMs) {\n\t\t\t\treturn outputFromTerminalStatus(root, status!, selectedStatusStep(status, root.index));\n\t\t\t}\n\t\t} else {\n\t\t\tterminalSince = undefined;\n\t\t}\n\t\tif (!status && !fs.existsSync(root.asyncDir)) {\n\t\t\tthrow new Error(`Attached async root '${root.runId}' directory does not exist: ${root.asyncDir}`);\n\t\t}\n\t\tawait new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n\t}\n}\n\nexport function resolveAsyncRootResultPath(resultsDir: string, runId: string): string {\n\treturn path.join(resultsDir, `${runId}.json`);\n}\n"]}
1
+ {"version":3,"file":"chain-root-attachment.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AcceptanceLedger, AsyncStatus, CostSummary, ModelAttempt } from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\n\nexport interface ImportedAsyncRoot {\n\trunId: string;\n\tasyncDir: string;\n\tresultPath: string;\n\tindex: number;\n}\n\nexport interface ImportedAsyncRootResult {\n\tagent: string;\n\toutput: string;\n\tsuccess: boolean;\n\texitCode: number;\n\terror?: string;\n\tsessionFile?: string;\n\tintercomTarget?: string;\n\tmodel?: string;\n\tattemptedModels?: string[];\n\tmodelAttempts?: ModelAttempt[];\n\ttotalCost?: CostSummary;\n\tstructuredOutput?: unknown;\n\tstructuredOutputPath?: string;\n\tstructuredOutputSchemaPath?: string;\n\tacceptance?: AcceptanceLedger;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n}\n\ninterface AsyncResultFile {\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\terror?: string;\n\ttimedOut?: boolean;\n\tstopped?: boolean;\n\tresults?: Array<{\n\t\tagent?: string;\n\t\toutput?: string;\n\t\terror?: string;\n\t\tsuccess?: boolean;\n\t\ttimedOut?: boolean;\n\t\tstopped?: boolean;\n\t\tsessionFile?: string;\n\t\tintercomTarget?: string;\n\t\tmodel?: string;\n\t\tattemptedModels?: string[];\n\t\tmodelAttempts?: ModelAttempt[];\n\t\ttotalCost?: CostSummary;\n\t\tstructuredOutput?: unknown;\n\t\tstructuredOutputPath?: string;\n\t\tstructuredOutputSchemaPath?: string;\n\t\tacceptance?: AcceptanceLedger;\n\t}>;\n}\n\nconst TERMINAL_STATES = new Set([\"complete\", \"failed\", \"paused\", \"stopped\"]);\nconst TERMINAL_STEP_STATUSES = new Set([\"complete\", \"completed\", \"failed\", \"paused\", \"stopped\"]);\n\nfunction readResultFile(resultPath: string): AsyncResultFile | undefined {\n\ttry {\n\t\treturn JSON.parse(fs.readFileSync(resultPath, \"utf-8\")) as AsyncResultFile;\n\t} catch (error) {\n\t\tif (typeof error === \"object\" && error !== null && \"code\" in error && (error as NodeJS.ErrnoException).code === \"ENOENT\") {\n\t\t\treturn undefined;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nfunction selectedStatusStep(status: AsyncStatus | null, index: number): NonNullable<AsyncStatus[\"steps\"]>[number] | undefined {\n\treturn status?.steps?.[index];\n}\n\nfunction isTerminalStatus(status: AsyncStatus | null, index: number): boolean {\n\tif (!status) return false;\n\tconst step = selectedStatusStep(status, index);\n\tif (step && TERMINAL_STEP_STATUSES.has(step.status)) return true;\n\treturn TERMINAL_STATES.has(status.state);\n}\n\nfunction resultState(result: AsyncResultFile | undefined, child: NonNullable<AsyncResultFile[\"results\"]>[number] | undefined): \"complete\" | \"failed\" | \"paused\" | \"stopped\" | undefined {\n\tif (!result) return undefined;\n\tif (child?.stopped === true) return \"stopped\";\n\tif (child?.success === true) return \"complete\";\n\tif (child?.success === false) return result.state === \"stopped\" ? \"stopped\" : result.state === \"paused\" ? \"paused\" : \"failed\";\n\tif (result.state === \"complete\" || result.state === \"failed\" || result.state === \"paused\" || result.state === \"stopped\") return result.state;\n\tif (result.success === true) return \"complete\";\n\tif (result.success === false) return \"failed\";\n\treturn undefined;\n}\n\nfunction outputFromTerminalStatus(root: ImportedAsyncRoot, status: AsyncStatus, step: NonNullable<AsyncStatus[\"steps\"]>[number] | undefined): ImportedAsyncRootResult {\n\tconst agent = step?.agent ?? status.steps?.[root.index]?.agent ?? \"subagent\";\n\tconst timedOut = step?.timedOut === true || status.timedOut === true;\n\tconst stopped = step?.stopped === true || status.stopped === true || status.state === \"stopped\";\n\tconst message = step?.error ?? status.error ?? (stopped ? \"Subagent stopped by user.\" : `Attached async root ${root.runId} ended without a result file at ${root.resultPath}.`);\n\treturn {\n\t\tagent,\n\t\toutput: message,\n\t\tsuccess: false,\n\t\texitCode: 1,\n\t\terror: message,\n\t\t...(timedOut ? { timedOut: true } : {}),\n\t\t...(stopped ? { stopped: true } : {}),\n\t\t...(step?.sessionFile ?? status.sessionFile ? { sessionFile: step?.sessionFile ?? status.sessionFile } : {}),\n\t\t...(step?.model ? { model: step.model } : {}),\n\t\t...(step?.modelSelection ? { modelSelection: step.modelSelection } : {}),\n\t\t...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),\n\t\t...(step?.totalCost ? { totalCost: step.totalCost } : {}),\n\t\t...(step?.structuredOutput !== undefined ? { structuredOutput: step.structuredOutput } : {}),\n\t\t...(step?.structuredOutputPath ? { structuredOutputPath: step.structuredOutputPath } : {}),\n\t\t...(step?.structuredOutputSchemaPath ? { structuredOutputSchemaPath: step.structuredOutputSchemaPath } : {}),\n\t\t...(step?.acceptance ? { acceptance: step.acceptance } : {}),\n\t};\n}\n\nfunction outputFromTimeout(root: ImportedAsyncRoot, status: AsyncStatus | null, message: string): ImportedAsyncRootResult {\n\tconst step = selectedStatusStep(status, root.index);\n\treturn {\n\t\tagent: step?.agent ?? status?.steps?.[root.index]?.agent ?? \"subagent\",\n\t\toutput: message,\n\t\tsuccess: false,\n\t\texitCode: 1,\n\t\terror: message,\n\t\ttimedOut: true,\n\t\t...(step?.sessionFile ?? status?.sessionFile ? { sessionFile: step?.sessionFile ?? status?.sessionFile } : {}),\n\t\t...(step?.model ? { model: step.model } : {}),\n\t\t...(step?.modelSelection ? { modelSelection: step.modelSelection } : {}),\n\t\t...(step?.attemptedModels ? { attemptedModels: step.attemptedModels } : {}),\n\t\t...(step?.modelAttempts ? { modelAttempts: step.modelAttempts } : {}),\n\t\t...(step?.totalCost ? { totalCost: step.totalCost } : {}),\n\t};\n}\n\nfunction buildImportedResult(root: ImportedAsyncRoot, status: AsyncStatus | null, result: AsyncResultFile): ImportedAsyncRootResult {\n\tconst child = result.results?.[root.index];\n\tconst step = selectedStatusStep(status, root.index);\n\tconst state = resultState(result, child);\n\tconst agent = child?.agent ?? step?.agent ?? status?.steps?.[root.index]?.agent ?? \"subagent\";\n\tconst output = child?.output ?? result.summary ?? \"\";\n\tconst timedOut = child?.timedOut === true || step?.timedOut === true || result.timedOut === true || status?.timedOut === true;\n\tconst stopped = child?.stopped === true || step?.stopped === true || result.stopped === true || status?.stopped === true || state === \"stopped\";\n\tconst success = state === \"complete\" && !timedOut && !stopped;\n\tconst error = child?.error ?? (success ? undefined : stopped ? \"Subagent stopped by user.\" : result.error ?? result.summary ?? status?.error ?? `Attached async root ${root.runId} did not complete successfully.`);\n\treturn {\n\t\tagent,\n\t\toutput: success ? output : (output || error || \"\"),\n\t\tsuccess,\n\t\texitCode: success ? 0 : 1,\n\t\t...(error ? { error } : {}),\n\t\t...(timedOut ? { timedOut: true } : {}),\n\t\t...(stopped ? { stopped: true } : {}),\n\t\t...(child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile ? { sessionFile: child?.sessionFile ?? step?.sessionFile ?? status?.sessionFile } : {}),\n\t\t...(child?.intercomTarget ? { intercomTarget: child.intercomTarget } : {}),\n\t\t...(child?.model ?? step?.model ? { model: child?.model ?? step?.model } : {}),\n\t\t...(child?.modelSelection ?? step?.modelSelection ? { modelSelection: child?.modelSelection ?? step?.modelSelection } : {}),\n\t\t...(child?.attemptedModels ?? step?.attemptedModels ? { attemptedModels: child?.attemptedModels ?? step?.attemptedModels } : {}),\n\t\t...(child?.modelAttempts ?? step?.modelAttempts ? { modelAttempts: child?.modelAttempts ?? step?.modelAttempts } : {}),\n\t\t...(child?.totalCost ?? step?.totalCost ? { totalCost: child?.totalCost ?? step?.totalCost } : {}),\n\t\t...(child?.structuredOutput !== undefined ? { structuredOutput: child.structuredOutput } : step?.structuredOutput !== undefined ? { structuredOutput: step.structuredOutput } : {}),\n\t\t...(child?.structuredOutputPath ?? step?.structuredOutputPath ? { structuredOutputPath: child?.structuredOutputPath ?? step?.structuredOutputPath } : {}),\n\t\t...(child?.structuredOutputSchemaPath ?? step?.structuredOutputSchemaPath ? { structuredOutputSchemaPath: child?.structuredOutputSchemaPath ?? step?.structuredOutputSchemaPath } : {}),\n\t\t...(child?.acceptance ?? step?.acceptance ? { acceptance: child?.acceptance ?? step?.acceptance } : {}),\n\t};\n}\n\nexport async function waitForImportedAsyncRoot(\n\troot: ImportedAsyncRoot,\n\toptions: { pollIntervalMs?: number; terminalResultGraceMs?: number; now?: () => number; shouldAbort?: () => boolean; timeoutMessage?: string } = {},\n): Promise<ImportedAsyncRootResult> {\n\tconst pollIntervalMs = options.pollIntervalMs ?? 500;\n\tconst terminalResultGraceMs = options.terminalResultGraceMs ?? 1_000;\n\tconst now = options.now ?? Date.now;\n\tlet terminalSince: number | undefined;\n\tfor (;;) {\n\t\tconst status = readStatus(root.asyncDir);\n\t\tif (options.shouldAbort?.()) return outputFromTimeout(root, status, options.timeoutMessage ?? \"Subagent timed out.\");\n\t\tconst result = readResultFile(root.resultPath);\n\t\tif (result) return buildImportedResult(root, status, result);\n\t\tif (isTerminalStatus(status, root.index)) {\n\t\t\tterminalSince ??= now();\n\t\t\tif (now() - terminalSince >= terminalResultGraceMs) {\n\t\t\t\treturn outputFromTerminalStatus(root, status!, selectedStatusStep(status, root.index));\n\t\t\t}\n\t\t} else {\n\t\t\tterminalSince = undefined;\n\t\t}\n\t\tif (!status && !fs.existsSync(root.asyncDir)) {\n\t\t\tthrow new Error(`Attached async root '${root.runId}' directory does not exist: ${root.asyncDir}`);\n\t\t}\n\t\tawait new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n\t}\n}\n\nexport function resolveAsyncRootResultPath(resultsDir: string, runId: string): string {\n\treturn path.join(resultsDir, `${runId}.json`);\n}\n"]}
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-view.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EAKN,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,MAAM,uBAAuB,CAAC;AAY/B,UAAU,eAAe;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,iBAAiB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAyQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAiDjH;AA4DD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAmDvH;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAwBxG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC1J,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CA2B9D","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatDuration, formatModelThinking, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\tif (run.error) lines.push(` error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}
1
+ {"version":3,"file":"fleet-view.d.ts","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,+BAA+B,CAAC;AAGrE,OAAO,EAKN,KAAK,WAAW,EAChB,KAAK,OAAO,EACZ,KAAK,gBAAgB,EAErB,KAAK,aAAa,EAClB,MAAM,uBAAuB,CAAC;AAY/B,UAAU,eAAe;IACxB,KAAK,CAAC,EAAE,MAAM,CAAC;CACf;AAED,UAAU,aAAa;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,CAAC,OAAO,GAAG,CAAC,KAAK,OAAO,CAAC;IAC7D,GAAG,CAAC,EAAE,MAAM,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,UAAU,iBAAiB;IAC1B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAyQD,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,GAAE,aAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,CAiDjH;AA4DD,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAmDvH;AAED,wBAAgB,yBAAyB,CAAC,GAAG,EAAE,gBAAgB,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CAwBxG;AAED,wBAAgB,2BAA2B,CAAC,IAAI,EAAE;IACjD,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,OAAO,CAAC,EAAE,KAAK,CAAC;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,OAAO,CAAC;QAAC,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC,CAAC;CAC1J,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,MAAM,CA2B9D","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatDuration, formatModelSelection, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\tif (run.error) lines.push(` error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}
@@ -1,7 +1,7 @@
1
1
  // @ts-nocheck
2
2
  import * as fs from "node:fs";
3
3
  import * as path from "node:path";
4
- import { formatDuration, formatModelThinking, formatTokens, shortenPath } from "../../shared/formatters.js";
4
+ import { formatDuration, formatModelSelection, formatTokens, shortenPath } from "../../shared/formatters.js";
5
5
  import { formatActivityLabel } from "../../shared/status-format.js";
6
6
  import { ASYNC_DIR, RESULTS_DIR, } from "../../shared/types.js";
7
7
  import { readStatus } from "../../shared/utils.js";
@@ -260,7 +260,7 @@ function formatAsyncFleetLines(runs) {
260
260
  const display = step.label ? `${step.label} (${step.agent})` : step.agent;
261
261
  const phase = step.phase ? `[${step.phase}] ` : "";
262
262
  const stepActivity = formatActivityFacts(step);
263
- const modelThinking = formatModelThinking(step.model, step.thinking);
263
+ const modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);
264
264
  const parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);
265
265
  lines.push(` ${parts.join(" | ")}`);
266
266
  const output = path.join(run.asyncDir, `output-${step.index}.log`);
@@ -367,7 +367,7 @@ function selectTranscriptStep(status, options) {
367
367
  function stepStateLine(mode, index, step) {
368
368
  if (index === undefined || !step)
369
369
  return undefined;
370
- const modelThinking = formatModelThinking(step.model, step.thinking);
370
+ const modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);
371
371
  const parts = [
372
372
  `${mode === "parallel" ? "Agent" : "Step"}: ${index} (${step.agent})`,
373
373
  step.status,
@@ -1 +1 @@
1
- {"version":3,"file":"fleet-view.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatDuration, formatModelThinking, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\tif (run.error) lines.push(` error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelThinking(step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}
1
+ {"version":3,"file":"fleet-view.js","sourceRoot":"","sources":["../../../../../../src/builtin-extensions/pi-subagents/src/runs/background/fleet-view.ts"],"names":[],"mappings":"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","sourcesContent":["// @ts-nocheck\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport type { AgentToolResult } from \"@ashx-j/lunr-agent\";\nimport { formatDuration, formatModelSelection, formatTokens, shortenPath } from \"../../shared/formatters.ts\";\nimport { formatActivityLabel } from \"../../shared/status-format.ts\";\nimport {\n\tASYNC_DIR,\n\tRESULTS_DIR,\n\ttype ActivityState,\n\ttype AsyncJobStep,\n\ttype AsyncStatus,\n\ttype Details,\n\ttype NestedRunSummary,\n\ttype SubagentRunMode,\n\ttype SubagentState,\n} from \"../../shared/types.ts\";\nimport { readStatus } from \"../../shared/utils.ts\";\nimport { formatNestedRunStatusLines } from \"../shared/nested-render.ts\";\nimport { formatAsyncRunOutputPath, formatAsyncRunProgressLabel, listAsyncRuns, type AsyncRunSummary } from \"./async-status.ts\";\n\nconst DEFAULT_TRANSCRIPT_LINES = 80;\nconst MAX_TRANSCRIPT_LINES = 500;\nconst TRANSCRIPT_TAIL_BYTES = 256 * 1024;\n\ntype ForegroundControl = SubagentState[\"foregroundControls\"] extends Map<string, infer T> ? T : never;\ntype ForegroundRun = NonNullable<SubagentState[\"foregroundRuns\"]> extends Map<string, infer T> ? T : never;\n\ninterface FleetViewParams {\n\tlines?: number;\n}\n\ninterface FleetViewDeps {\n\tasyncDirRoot?: string;\n\tresultsDir?: string;\n\tkill?: (pid: number, signal?: NodeJS.Signals | 0) => boolean;\n\tnow?: () => number;\n\tstate?: SubagentState;\n\tchildSafe?: boolean;\n}\n\ninterface TranscriptOptions {\n\tindex?: number;\n\tlines?: number;\n\tsessionRoots?: string[];\n}\n\ninterface TextTailResult {\n\tpath: string;\n\tlines: string[];\n\ttruncated: boolean;\n\terror?: string;\n}\n\nfunction transcriptLineLimit(value: number | undefined): number {\n\tif (value === undefined) return DEFAULT_TRANSCRIPT_LINES;\n\tif (!Number.isFinite(value)) return DEFAULT_TRANSCRIPT_LINES;\n\treturn Math.max(1, Math.min(MAX_TRANSCRIPT_LINES, Math.trunc(value)));\n}\n\nfunction uniqueStrings(values: Array<string | undefined>): string[] {\n\tconst seen = new Set<string>();\n\tconst result: string[] = [];\n\tfor (const value of values) {\n\t\tif (!value || seen.has(value)) continue;\n\t\tseen.add(value);\n\t\tresult.push(value);\n\t}\n\treturn result;\n}\n\nfunction resolveMaybeRelative(asyncDir: string, filePath: string | undefined): string | undefined {\n\tif (!filePath) return undefined;\n\treturn path.resolve(asyncDir, filePath);\n}\n\nfunction pathWithin(base: string, candidate: string): boolean {\n\tconst resolvedBase = path.resolve(base);\n\tconst resolvedCandidate = path.resolve(candidate);\n\treturn resolvedCandidate === resolvedBase || resolvedCandidate.startsWith(`${resolvedBase}${path.sep}`);\n}\n\nfunction getErrorMessage(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n\nfunction isNotFoundError(error: unknown): boolean {\n\treturn typeof error === \"object\"\n\t\t&& error !== null\n\t\t&& \"code\" in error\n\t\t&& (error as NodeJS.ErrnoException).code === \"ENOENT\";\n}\n\nfunction readTextTail(filePath: string, maxLines: number): TextTailResult {\n\tlet stat: fs.Stats;\n\ttry {\n\t\tstat = fs.statSync(filePath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (stat.size === 0) return { path: filePath, lines: [], truncated: false };\n\n\tlet fd: number | undefined;\n\ttry {\n\t\tconst bytesToRead = Math.min(stat.size, TRANSCRIPT_TAIL_BYTES);\n\t\tconst start = stat.size - bytesToRead;\n\t\tconst buffer = Buffer.alloc(bytesToRead);\n\t\tfd = fs.openSync(filePath, \"r\");\n\t\tconst bytesRead = fs.readSync(fd, buffer, 0, bytesToRead, start);\n\t\tconst content = buffer.subarray(0, bytesRead).toString(\"utf-8\");\n\t\tlet lines = content.split(/\\r?\\n/);\n\t\tif (start > 0 && lines.length > 0) lines = lines.slice(1);\n\t\tif (lines.at(-1) === \"\") lines = lines.slice(0, -1);\n\t\treturn { path: filePath, lines: lines.slice(-maxLines), truncated: start > 0 || lines.length > maxLines };\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t} finally {\n\t\tif (fd !== undefined) fs.closeSync(fd);\n\t}\n}\n\nfunction readContainedTextTail(filePath: string, maxLines: number, trustedRoots: string[], label: string): TextTailResult {\n\tif (trustedRoots.length === 0) return { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path without a trusted root: ${filePath}` };\n\tconst resolvedPath = path.resolve(filePath);\n\tif (!trustedRoots.some((root) => pathWithin(root, resolvedPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\tlet lstat: fs.Stats;\n\ttry {\n\t\tlstat = fs.lstatSync(resolvedPath);\n\t} catch (error) {\n\t\tif (isNotFoundError(error)) return { path: filePath, lines: [], truncated: false };\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (lstat.isSymbolicLink()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read symlink ${label} transcript path: ${filePath}` };\n\tif (!lstat.isFile()) return { path: filePath, lines: [], truncated: false, error: `Refusing to read non-file ${label} transcript path: ${filePath}` };\n\tlet realPath: string;\n\tlet realRoots: string[];\n\ttry {\n\t\trealPath = fs.realpathSync(resolvedPath);\n\t\trealRoots = trustedRoots.filter((root) => fs.existsSync(root)).map((root) => fs.realpathSync(root));\n\t} catch (error) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: getErrorMessage(error) };\n\t}\n\tif (!realRoots.some((root) => pathWithin(root, realPath))) {\n\t\treturn { path: filePath, lines: [], truncated: false, error: `Refusing to read ${label} transcript path outside trusted roots: ${filePath}` };\n\t}\n\treturn readTextTail(resolvedPath, maxLines);\n}\n\nfunction stringifyJsonPreview(value: unknown, maxLength = 240): string {\n\tlet raw: string;\n\tif (typeof value === \"string\") raw = value;\n\telse raw = JSON.stringify(value);\n\treturn raw.length > maxLength ? `${raw.slice(0, maxLength)}…` : raw;\n}\n\nfunction contentText(content: unknown): string {\n\tif (typeof content === \"string\") return content;\n\tif (!Array.isArray(content)) return \"\";\n\treturn content.map((part) => {\n\t\tif (!part || typeof part !== \"object\") return \"\";\n\t\tconst entry = part as { type?: unknown; text?: unknown; name?: unknown; toolName?: unknown; args?: unknown; result?: unknown; content?: unknown };\n\t\tif (typeof entry.text === \"string\") return entry.text;\n\t\tif (entry.type === \"toolCall\" || entry.type === \"tool_call\") {\n\t\t\tconst name = typeof entry.name === \"string\" ? entry.name : typeof entry.toolName === \"string\" ? entry.toolName : \"tool\";\n\t\t\treturn `[tool: ${name}${entry.args === undefined ? \"\" : ` ${stringifyJsonPreview(entry.args)}`}]`;\n\t\t}\n\t\tif (entry.type === \"toolResult\" || entry.type === \"tool_result\") {\n\t\t\treturn `[tool result${entry.result === undefined ? \"\" : `: ${stringifyJsonPreview(entry.result)}`}]`;\n\t\t}\n\t\tif (entry.content !== undefined) return stringifyJsonPreview(entry.content);\n\t\treturn \"\";\n\t}).filter(Boolean).join(\"\\n\");\n}\n\nfunction sessionMessageLine(record: unknown): string | undefined {\n\tif (!record || typeof record !== \"object\") return undefined;\n\tconst outer = record as { message?: unknown; role?: unknown; content?: unknown; type?: unknown };\n\tconst message = outer.message && typeof outer.message === \"object\" ? outer.message as { role?: unknown; content?: unknown } : outer;\n\tconst role = typeof message.role === \"string\" ? message.role : undefined;\n\tif (!role) return undefined;\n\tconst text = contentText(message.content).trim();\n\tif (!text) return undefined;\n\treturn `${role}: ${text}`;\n}\n\nfunction readSessionTranscriptTail(sessionFile: string, maxLines: number, trustedRoots: string[]): { lines: string[]; warnings: string[] } {\n\tconst tail = readContainedTextTail(sessionFile, Math.max(maxLines * 4, maxLines), trustedRoots, \"session\");\n\tconst warnings: string[] = [];\n\tif (tail.error) warnings.push(`Session read failed for ${sessionFile}: ${tail.error}`);\n\tconst lines: string[] = [];\n\tlet malformed = 0;\n\tfor (const line of tail.lines) {\n\t\tif (!line.trim()) continue;\n\t\ttry {\n\t\t\tconst parsed = JSON.parse(line) as unknown;\n\t\t\tconst messageLine = sessionMessageLine(parsed);\n\t\t\tif (messageLine) lines.push(messageLine);\n\t\t} catch {\n\t\t\tmalformed++;\n\t\t}\n\t}\n\tif (malformed > 0) warnings.push(`Skipped ${malformed} malformed session tail line${malformed === 1 ? \"\" : \"s\"}.`);\n\treturn { lines: lines.slice(-maxLines), warnings };\n}\n\nfunction formatActivityFacts(input: {\n\tactivityState?: ActivityState;\n\tlastActivityAt?: number;\n\tcurrentTool?: string;\n\tcurrentToolStartedAt?: number;\n\tcurrentPath?: string;\n\tturnCount?: number;\n\ttoolCount?: number;\n\ttokens?: { total: number };\n}): string | undefined {\n\tconst facts: string[] = [];\n\tif (input.currentTool && input.currentToolStartedAt !== undefined) facts.push(`tool ${input.currentTool} ${formatDuration(Math.max(0, Date.now() - input.currentToolStartedAt))}`);\n\telse if (input.currentTool) facts.push(`tool ${input.currentTool}`);\n\tif (input.currentPath) facts.push(shortenPath(input.currentPath));\n\tif (input.turnCount !== undefined) facts.push(`${input.turnCount} turns`);\n\tif (input.toolCount !== undefined) facts.push(`${input.toolCount} tools`);\n\tif (input.tokens?.total) facts.push(`${formatTokens(input.tokens.total)} tok`);\n\tconst activity = formatActivityLabel(input.lastActivityAt, input.activityState);\n\treturn activity || facts.length ? [activity, ...facts].filter(Boolean).join(\" | \") : undefined;\n}\n\nfunction foregroundModeName(control: ForegroundControl): string {\n\tif (control.mode === \"single\" && control.currentAgent) return control.currentAgent;\n\treturn control.mode;\n}\n\nfunction formatForegroundFleetLines(controls: ForegroundControl[]): string[] {\n\tif (controls.length === 0) return [];\n\tconst lines = [\"Foreground runs:\"];\n\tconst ordered = [...controls].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const control of ordered) {\n\t\tconst activity = formatActivityFacts({\n\t\t\tactivityState: control.currentActivityState,\n\t\t\tlastActivityAt: control.lastActivityAt,\n\t\t\tcurrentTool: control.currentTool,\n\t\t\tcurrentToolStartedAt: control.currentToolStartedAt,\n\t\t\tcurrentPath: control.currentPath,\n\t\t\tturnCount: control.turnCount,\n\t\t\ttoolCount: control.toolCount,\n\t\t\t...(control.tokens !== undefined ? { tokens: { total: control.tokens } } : {}),\n\t\t});\n\t\tconst current = control.currentAgent ? ` | ${control.currentAgent}${control.currentIndex !== undefined ? ` #${control.currentIndex}` : \"\"}` : \"\";\n\t\tlines.push(`- ${control.runId} | running | ${foregroundModeName(control)}${current}${activity ? ` | ${activity}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${control.runId}\" })`);\n\t\tlines.push(\" transcript: live in the expanded foreground result; persisted session transcript appears after completion when sessions are enabled.\");\n\t\tlines.push(...formatNestedRunStatusLines(control.nestedChildren, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t}\n\treturn lines;\n}\n\nfunction formatDetachedForegroundFleetLines(runs: ForegroundRun[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Detached foreground runs:\"];\n\tconst ordered = [...runs].sort((left, right) => right.updatedAt - left.updatedAt);\n\tfor (const run of ordered) {\n\t\tconst detachedChildren = run.children.filter((child) => child.status === \"detached\");\n\t\tconst childSummary = detachedChildren.map((child) => `${child.agent} #${child.index}`).join(\", \");\n\t\tlines.push(`- ${run.runId} | detached | ${run.mode}${childSummary ? ` | ${childSummary}` : \"\"}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.runId}\" })`);\n\t\tlines.push(` recovery: reply to the supervisor request first, then wait with subagent_wait({ id: \"${run.runId}\" }); do not resume or launch a replacement while any child remains detached.`);\n\t}\n\treturn lines;\n}\n\nfunction formatAsyncFleetLines(runs: AsyncRunSummary[]): string[] {\n\tif (runs.length === 0) return [];\n\tconst lines = [\"Async runs:\"];\n\tfor (const run of runs) {\n\t\tconst progress = formatAsyncRunProgressLabel(run);\n\t\tconst activity = formatActivityFacts(run);\n\t\tconst cwd = run.cwd ? shortenPath(run.cwd) : shortenPath(run.asyncDir);\n\t\tconst pending = run.pendingAppends ? ` | ${run.pendingAppends} pending append${run.pendingAppends === 1 ? \"\" : \"s\"}` : \"\";\n\t\tlines.push(`- ${run.id} | ${run.state}${activity ? ` | ${activity}` : \"\"} | ${run.mode} | ${progress}${pending} | ${cwd}`);\n\t\tlines.push(` status: subagent({ action: \"status\", id: \"${run.id}\" })`);\n\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", view: \"transcript\" })`);\n\t\tfor (const step of run.steps) {\n\t\t\tconst display = step.label ? `${step.label} (${step.agent})` : step.agent;\n\t\t\tconst phase = step.phase ? `[${step.phase}] ` : \"\";\n\t\t\tconst stepActivity = formatActivityFacts(step);\n\t\t\tconst modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);\n\t\t\tconst parts = [`${step.index}. ${phase}${display}`, step.status, stepActivity, modelThinking].filter(Boolean);\n\t\t\tlines.push(` ${parts.join(\" | \")}`);\n\t\t\tconst output = path.join(run.asyncDir, `output-${step.index}.log`);\n\t\t\tif (fs.existsSync(output)) lines.push(` output: ${shortenPath(output)}`);\n\t\t\tif (step.sessionFile) lines.push(` session: ${shortenPath(step.sessionFile)}`);\n\t\t\tif (step.status === \"running\" || step.recentOutput?.length || fs.existsSync(output)) {\n\t\t\t\tlines.push(` transcript: subagent({ action: \"status\", id: \"${run.id}\", index: ${step.index}, view: \"transcript\" })`);\n\t\t\t}\n\t\t\tlines.push(...formatNestedRunStatusLines(step.children, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\t}\n\t\tconst attached = new Set(run.steps.flatMap((step) => step.children?.map((child) => child.id) ?? []));\n\t\tconst unattached = run.nestedChildren?.filter((child) => !attached.has(child.id)) ?? [];\n\t\tlines.push(...formatNestedRunStatusLines(unattached, { indent: \" \", commandHints: true, maxLines: 12 }));\n\t\tif (run.error) lines.push(` error: ${run.error}`);\n\t\tfor (const warning of run.nestedWarnings ?? []) lines.push(` warning: ${warning}`);\n\t\tconst outputPath = formatAsyncRunOutputPath(run);\n\t\tif (outputPath) lines.push(` output: ${shortenPath(outputPath)}`);\n\t\tif (run.sessionFile) lines.push(` session: ${shortenPath(run.sessionFile)}`);\n\t}\n\treturn lines;\n}\n\nexport function inspectSubagentFleet(_params: FleetViewParams, deps: FleetViewDeps = {}): AgentToolResult<Details> {\n\tif (deps.childSafe) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"Child-safe subagent fleet view is unavailable without an explicit run id. Use subagent({ action: \\\"status\\\", id: \\\"...\\\" }) for the delegated run you can see.\" }],\n\t\t\tisError: true,\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tlet asyncRuns: AsyncRunSummary[];\n\ttry {\n\t\tasyncRuns = listAsyncRuns(deps.asyncDirRoot ?? ASYNC_DIR, {\n\t\t\tstates: [\"queued\", \"running\"],\n\t\t\tsessionId: deps.state?.currentSessionId ?? undefined,\n\t\t\tresultsDir: deps.resultsDir ?? RESULTS_DIR,\n\t\t\tkill: deps.kill,\n\t\t\tnow: deps.now,\n\t\t});\n\t} catch (error) {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\treturn { content: [{ type: \"text\", text: message }], isError: true, details: { mode: \"management\", results: [] } };\n\t}\n\n\tconst foregroundControls = deps.state ? [...deps.state.foregroundControls.values()] : [];\n\tconst activeForegroundIds = new Set(foregroundControls.map((control) => control.runId));\n\tconst detachedForegroundRuns = deps.state?.foregroundRuns\n\t\t? [...deps.state.foregroundRuns.values()].filter((run) => run.sessionId === deps.state?.currentSessionId && !activeForegroundIds.has(run.runId) && run.children.some((child) => child.status === \"detached\"))\n\t\t: [];\n\tconst total = foregroundControls.length + detachedForegroundRuns.length + asyncRuns.length;\n\tif (total === 0) {\n\t\treturn {\n\t\t\tcontent: [{ type: \"text\", text: \"No active subagent fleet. Background runs that already finished are available through completion notifications or subagent({ action: \\\"status\\\", id: \\\"...\\\" }).\" }],\n\t\t\tdetails: { mode: \"management\", results: [] },\n\t\t};\n\t}\n\n\tconst lines = [`Subagent fleet: ${total} tracked`, \"\"];\n\tconst foregroundLines = formatForegroundFleetLines(foregroundControls);\n\tif (foregroundLines.length) lines.push(...foregroundLines, \"\");\n\tconst detachedForegroundLines = formatDetachedForegroundFleetLines(detachedForegroundRuns);\n\tif (detachedForegroundLines.length) lines.push(...detachedForegroundLines, \"\");\n\tconst asyncLines = formatAsyncFleetLines(asyncRuns);\n\tif (asyncLines.length) lines.push(...asyncLines, \"\");\n\tlines.push(\"Commands:\");\n\tlines.push(\" Refresh fleet: subagent({ action: \\\"status\\\", view: \\\"fleet\\\" })\");\n\tlines.push(\" Tail run transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", view: \\\"transcript\\\" })\");\n\tlines.push(\" Tail child transcript: subagent({ action: \\\"status\\\", id: \\\"<run-id>\\\", index: 0, view: \\\"transcript\\\" })\");\n\n\treturn { content: [{ type: \"text\", text: lines.join(\"\\n\").trimEnd() }], details: { mode: \"management\", results: [] } };\n}\n\nfunction validateTranscriptIndex(index: number | undefined, steps: AsyncJobStep[]): number | undefined {\n\tif (index === undefined) return undefined;\n\tif (!Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index < 0 || index >= steps.length) throw new Error(`Transcript index ${index} is out of range for ${steps.length} child step${steps.length === 1 ? \"\" : \"s\"}.`);\n\treturn index;\n}\n\nfunction selectTranscriptStep(status: AsyncStatus, options: TranscriptOptions): { index?: number; step?: AsyncJobStep; hint?: string } {\n\tconst steps = status.steps ?? [];\n\tlet selectedIndex = validateTranscriptIndex(options.index, steps);\n\tif (selectedIndex === undefined) {\n\t\tif (status.state === \"running\" && typeof status.currentStep === \"number\" && status.currentStep >= 0 && status.currentStep < steps.length) {\n\t\t\tselectedIndex = status.currentStep;\n\t\t} else if (steps.length === 1) {\n\t\t\tselectedIndex = 0;\n\t\t}\n\t}\n\tconst step = selectedIndex !== undefined ? steps[selectedIndex] : undefined;\n\tconst hint = options.index === undefined && steps.length > 1\n\t\t? `Tip: pass index to inspect a specific child transcript (${steps.map((candidate, index) => `${index}=${candidate.agent}`).join(\", \")}).`\n\t\t: undefined;\n\treturn { index: selectedIndex, step, hint };\n}\n\nfunction stepStateLine(mode: SubagentRunMode, index: number | undefined, step: AsyncJobStep | undefined): string | undefined {\n\tif (index === undefined || !step) return undefined;\n\tconst modelThinking = formatModelSelection(step.modelSelection, step.model, step.thinking);\n\tconst parts = [\n\t\t`${mode === \"parallel\" ? \"Agent\" : \"Step\"}: ${index} (${step.agent})`,\n\t\tstep.status,\n\t\tformatActivityFacts(step),\n\t\tmodelThinking,\n\t\tstep.error ? `error: ${step.error}` : undefined,\n\t].filter(Boolean);\n\treturn parts.join(\" | \");\n}\n\nfunction appendKnownArtifacts(lines: string[], input: { outputPaths: string[]; sessionFile?: string; eventsPath?: string; logPath?: string; resultPath?: string }): void {\n\tconst artifacts: string[] = [];\n\tfor (const outputPath of input.outputPaths) artifacts.push(`Output: ${outputPath}`);\n\tif (input.sessionFile) artifacts.push(`Session: ${input.sessionFile}`);\n\tif (input.eventsPath) artifacts.push(`Events: ${input.eventsPath}`);\n\tif (input.logPath) artifacts.push(`Log: ${input.logPath}`);\n\tif (input.resultPath) artifacts.push(`Result: ${input.resultPath}`);\n\tif (!artifacts.length) return;\n\tlines.push(\"Artifacts:\");\n\tfor (const artifact of artifacts) lines.push(` ${artifact}`);\n}\n\nfunction appendTranscriptBody(lines: string[], sourceLabel: string, sourceLines: string[], truncated: boolean): void {\n\tlines.push(`${sourceLabel}${truncated ? \" (tail truncated)\" : \"\"}:`);\n\tif (sourceLines.length === 0) {\n\t\tlines.push(\" (no transcript lines available yet)\");\n\t\treturn;\n\t}\n\tfor (const line of sourceLines) lines.push(` ${line}`);\n}\n\nexport function formatAsyncRunTranscript(status: AsyncStatus, asyncDir: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst selected = selectTranscriptStep(status, options);\n\tconst stepOutputPath = selected.index !== undefined ? path.join(asyncDir, `output-${selected.index}.log`) : undefined;\n\tconst runOutputPath = resolveMaybeRelative(asyncDir, status.outputFile);\n\tconst logPath = path.join(asyncDir, `subagent-log-${status.runId}.md`);\n\tconst outputPaths = selected.index !== undefined\n\t\t? uniqueStrings([stepOutputPath, runOutputPath && stepOutputPath && path.resolve(runOutputPath) === path.resolve(stepOutputPath) ? runOutputPath : undefined])\n\t\t: uniqueStrings([runOutputPath]);\n\tconst sessionFile = selected.index !== undefined ? selected.step?.sessionFile : status.sessionFile;\n\tconst eventsPath = path.join(asyncDir, \"events.jsonl\");\n\n\tconst lines = [\n\t\t`Run: ${status.runId}`,\n\t\t`State: ${status.state}`,\n\t\t`Mode: ${status.mode}`,\n\t\tstepStateLine(status.mode, selected.index, selected.step),\n\t\tselected.hint,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths, sessionFile, eventsPath: fs.existsSync(eventsPath) ? eventsPath : undefined, logPath: fs.existsSync(logPath) ? logPath : undefined });\n\n\tconst warnings: string[] = [];\n\tlet transcriptLines: string[] = [];\n\tlet transcriptSource = \"Transcript tail\";\n\tlet truncated = false;\n\tfor (const outputPath of outputPaths) {\n\t\tconst tail = readContainedTextTail(outputPath, lineLimit, [asyncDir], \"output\");\n\t\tif (tail.error) warnings.push(`Output read failed for ${tail.path}: ${tail.error}`);\n\t\tif (tail.lines.length === 0) continue;\n\t\ttranscriptLines = tail.lines;\n\t\ttranscriptSource = \"Transcript tail\";\n\t\ttruncated = tail.truncated;\n\t\tbreak;\n\t}\n\tif (transcriptLines.length === 0 && selected.step?.recentOutput?.length) {\n\t\ttranscriptLines = selected.step.recentOutput.slice(-lineLimit);\n\t\ttranscriptSource = \"Recent output\";\n\t}\n\tif (transcriptLines.length === 0 && sessionFile) {\n\t\tconst sessionTail = readSessionTranscriptTail(sessionFile, lineLimit, options.sessionRoots ?? []);\n\t\ttranscriptLines = sessionTail.lines;\n\t\twarnings.push(...sessionTail.warnings);\n\t\tif (transcriptLines.length > 0) transcriptSource = \"Session transcript tail\";\n\t}\n\n\tif (warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, transcriptSource, transcriptLines, truncated);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatNestedRunTranscript(run: NestedRunSummary, options: TranscriptOptions = {}): string {\n\tif (run.asyncDir) {\n\t\tconst status = readStatus(run.asyncDir);\n\t\tif (status) return formatAsyncRunTranscript(status, run.asyncDir, options);\n\t}\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst lines = [\n\t\t`Nested run: ${run.id}`,\n\t\t`State: ${run.state}`,\n\t\trun.mode ? `Mode: ${run.mode}` : undefined,\n\t\trun.agent ? `Agent: ${run.agent}` : run.agents?.length ? `Agents: ${run.agents.join(\", \")}` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile: run.sessionFile });\n\tif (!run.sessionFile) {\n\t\tappendTranscriptBody(lines, \"Transcript tail\", [], false);\n\t\treturn lines.join(\"\\n\");\n\t}\n\tconst sessionTail = readSessionTranscriptTail(run.sessionFile, lineLimit, options.sessionRoots ?? []);\n\tif (sessionTail.warnings.length) {\n\t\tlines.push(\"Warnings:\");\n\t\tfor (const warning of sessionTail.warnings) lines.push(` ${warning}`);\n\t}\n\tappendTranscriptBody(lines, `Session transcript tail from ${run.sessionFile}`, sessionTail.lines, false);\n\treturn lines.join(\"\\n\");\n}\n\nexport function formatAsyncResultTranscript(data: {\n\tid?: string;\n\trunId?: string;\n\tstate?: string;\n\tsuccess?: boolean;\n\tsummary?: string;\n\toutput?: string;\n\tsessionFile?: string;\n\tagent?: string;\n\texitCode?: number | null;\n\tresults?: Array<{ agent?: string; output?: string; summary?: string; sessionFile?: string; state?: string; success?: boolean; exitCode?: number | null }>;\n}, resultPath: string, options: TranscriptOptions = {}): string {\n\tconst lineLimit = transcriptLineLimit(options.lines);\n\tconst runId = data.runId ?? data.id ?? path.basename(resultPath, \".json\");\n\tconst children = Array.isArray(data.results)\n\t\t? data.results\n\t\t: data.agent\n\t\t\t? [{ agent: data.agent, output: data.output, summary: data.summary, sessionFile: data.sessionFile, state: data.state, success: data.success, exitCode: data.exitCode }]\n\t\t\t: [];\n\tlet index = options.index;\n\tif (index !== undefined && !Number.isInteger(index)) throw new Error(\"Transcript index must be an integer.\");\n\tif (index === undefined && children.length === 1) index = 0;\n\tif (index !== undefined && (index < 0 || index >= children.length)) throw new Error(`Transcript index ${index} is out of range for ${children.length} result child${children.length === 1 ? \"\" : \"ren\"}.`);\n\tconst child = index !== undefined ? children[index] : undefined;\n\tconst output = index !== undefined\n\t\t? child?.output ?? child?.summary ?? (children.length === 1 ? data.output ?? data.summary : undefined) ?? \"\"\n\t\t: data.output ?? data.summary ?? \"\";\n\tconst transcriptLines = output.split(/\\r?\\n/).slice(-lineLimit);\n\tconst sessionFile = child?.sessionFile ?? data.sessionFile;\n\tconst lines = [\n\t\t`Run: ${runId}`,\n\t\t`State: ${data.state ?? (data.success ? \"complete\" : \"failed\")}`,\n\t\tindex !== undefined && child ? `Child: ${index} (${child.agent ?? \"subagent\"})` : undefined,\n\t\tindex === undefined && children.length > 1 ? `Tip: pass index to inspect a specific child transcript (${children.map((candidate, childIndex) => `${childIndex}=${candidate.agent ?? \"subagent\"}`).join(\", \")}).` : undefined,\n\t].filter((line): line is string => Boolean(line));\n\tappendKnownArtifacts(lines, { outputPaths: [], sessionFile, resultPath });\n\tappendTranscriptBody(lines, \"Result transcript tail\", transcriptLines.filter((line) => line.trim()), output.split(/\\r?\\n/).length > lineLimit);\n\treturn lines.join(\"\\n\");\n}\n"]}