@nklisch/pi-enhanced 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1904) hide show
  1. package/README.md +58 -0
  2. package/node_modules/@ff-labs/pi-fff/README.md +153 -0
  3. package/node_modules/@ff-labs/pi-fff/package.json +55 -0
  4. package/node_modules/@ff-labs/pi-fff/src/aux-finders.ts +167 -0
  5. package/node_modules/@ff-labs/pi-fff/src/index.ts +1131 -0
  6. package/node_modules/@ff-labs/pi-fff/src/query.ts +94 -0
  7. package/node_modules/@ff-labs/pi-fff/src/sdk.ts +29 -0
  8. package/node_modules/@juicesharp/rpiv-ask-user-question/LICENSE +21 -0
  9. package/node_modules/@juicesharp/rpiv-ask-user-question/README.md +91 -0
  10. package/node_modules/@juicesharp/rpiv-ask-user-question/ask-user-question.ts +296 -0
  11. package/node_modules/@juicesharp/rpiv-ask-user-question/config.ts +75 -0
  12. package/node_modules/@juicesharp/rpiv-ask-user-question/docs/configuration.md +112 -0
  13. package/node_modules/@juicesharp/rpiv-ask-user-question/docs/hosts.md +87 -0
  14. package/node_modules/@juicesharp/rpiv-ask-user-question/docs/keyboard.md +87 -0
  15. package/node_modules/@juicesharp/rpiv-ask-user-question/docs/localization.md +83 -0
  16. package/node_modules/@juicesharp/rpiv-ask-user-question/docs/tool-schema.md +121 -0
  17. package/node_modules/@juicesharp/rpiv-ask-user-question/events.ts +55 -0
  18. package/node_modules/@juicesharp/rpiv-ask-user-question/index.ts +54 -0
  19. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/de.json +27 -0
  20. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/en.json +27 -0
  21. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/es.json +27 -0
  22. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/fr.json +27 -0
  23. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/pt-BR.json +27 -0
  24. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/pt.json +27 -0
  25. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/ru.json +27 -0
  26. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/uk.json +27 -0
  27. package/node_modules/@juicesharp/rpiv-ask-user-question/locales/zh.json +29 -0
  28. package/node_modules/@juicesharp/rpiv-ask-user-question/package.json +98 -0
  29. package/node_modules/@juicesharp/rpiv-ask-user-question/reconcile.ts +47 -0
  30. package/node_modules/@juicesharp/rpiv-ask-user-question/rpc-fallback.ts +166 -0
  31. package/node_modules/@juicesharp/rpiv-ask-user-question/state/build-questionnaire.ts +300 -0
  32. package/node_modules/@juicesharp/rpiv-ask-user-question/state/i18n-bridge.ts +51 -0
  33. package/node_modules/@juicesharp/rpiv-ask-user-question/state/key-router.ts +275 -0
  34. package/node_modules/@juicesharp/rpiv-ask-user-question/state/questionnaire-session.ts +232 -0
  35. package/node_modules/@juicesharp/rpiv-ask-user-question/state/row-intent.ts +143 -0
  36. package/node_modules/@juicesharp/rpiv-ask-user-question/state/selectors/contract.ts +24 -0
  37. package/node_modules/@juicesharp/rpiv-ask-user-question/state/selectors/derivations.ts +40 -0
  38. package/node_modules/@juicesharp/rpiv-ask-user-question/state/selectors/focus.ts +17 -0
  39. package/node_modules/@juicesharp/rpiv-ask-user-question/state/selectors/projections.ts +99 -0
  40. package/node_modules/@juicesharp/rpiv-ask-user-question/state/state-reducer.ts +290 -0
  41. package/node_modules/@juicesharp/rpiv-ask-user-question/state/state.ts +53 -0
  42. package/node_modules/@juicesharp/rpiv-ask-user-question/tool/format-answer.ts +29 -0
  43. package/node_modules/@juicesharp/rpiv-ask-user-question/tool/response-envelope.ts +47 -0
  44. package/node_modules/@juicesharp/rpiv-ask-user-question/tool/types.ts +145 -0
  45. package/node_modules/@juicesharp/rpiv-ask-user-question/tool/validate-questionnaire.ts +56 -0
  46. package/node_modules/@juicesharp/rpiv-ask-user-question/view/component-binding.ts +45 -0
  47. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/inline-input.ts +96 -0
  48. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/multi-select-view.ts +191 -0
  49. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/option-list-view.ts +68 -0
  50. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/markdown-content-cache.ts +77 -0
  51. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/preview-block-renderer.ts +109 -0
  52. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/preview-box-renderer.ts +86 -0
  53. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/preview-layout-decider.ts +200 -0
  54. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/preview/preview-pane.ts +226 -0
  55. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/submit-picker.ts +65 -0
  56. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/tab-bar.ts +57 -0
  57. package/node_modules/@juicesharp/rpiv-ask-user-question/view/components/wrapping-select.ts +291 -0
  58. package/node_modules/@juicesharp/rpiv-ask-user-question/view/dialog-builder.ts +222 -0
  59. package/node_modules/@juicesharp/rpiv-ask-user-question/view/props-adapter.ts +123 -0
  60. package/node_modules/@juicesharp/rpiv-ask-user-question/view/stateful-view.ts +24 -0
  61. package/node_modules/@juicesharp/rpiv-ask-user-question/view/tab-components.ts +16 -0
  62. package/node_modules/@juicesharp/rpiv-ask-user-question/view/tab-content-strategy.ts +250 -0
  63. package/node_modules/@juicesharp/rpiv-todo/LICENSE +21 -0
  64. package/node_modules/@juicesharp/rpiv-todo/README.md +122 -0
  65. package/node_modules/@juicesharp/rpiv-todo/config.ts +101 -0
  66. package/node_modules/@juicesharp/rpiv-todo/docs/configuration.md +108 -0
  67. package/node_modules/@juicesharp/rpiv-todo/docs/overlay.md +127 -0
  68. package/node_modules/@juicesharp/rpiv-todo/docs/tool-schema.md +151 -0
  69. package/node_modules/@juicesharp/rpiv-todo/index.ts +186 -0
  70. package/node_modules/@juicesharp/rpiv-todo/locales/de.json +19 -0
  71. package/node_modules/@juicesharp/rpiv-todo/locales/en.json +17 -0
  72. package/node_modules/@juicesharp/rpiv-todo/locales/es.json +19 -0
  73. package/node_modules/@juicesharp/rpiv-todo/locales/fr.json +19 -0
  74. package/node_modules/@juicesharp/rpiv-todo/locales/pt-BR.json +19 -0
  75. package/node_modules/@juicesharp/rpiv-todo/locales/pt.json +19 -0
  76. package/node_modules/@juicesharp/rpiv-todo/locales/ru.json +19 -0
  77. package/node_modules/@juicesharp/rpiv-todo/locales/uk.json +19 -0
  78. package/node_modules/@juicesharp/rpiv-todo/locales/zh.json +19 -0
  79. package/node_modules/@juicesharp/rpiv-todo/package.json +73 -0
  80. package/node_modules/@juicesharp/rpiv-todo/state/i18n-bridge.ts +64 -0
  81. package/node_modules/@juicesharp/rpiv-todo/state/invariants.ts +20 -0
  82. package/node_modules/@juicesharp/rpiv-todo/state/replay.ts +38 -0
  83. package/node_modules/@juicesharp/rpiv-todo/state/selectors.ts +107 -0
  84. package/node_modules/@juicesharp/rpiv-todo/state/state-reducer.ts +227 -0
  85. package/node_modules/@juicesharp/rpiv-todo/state/state.ts +18 -0
  86. package/node_modules/@juicesharp/rpiv-todo/state/store.ts +126 -0
  87. package/node_modules/@juicesharp/rpiv-todo/state/task-graph.ts +57 -0
  88. package/node_modules/@juicesharp/rpiv-todo/todo-overlay.ts +230 -0
  89. package/node_modules/@juicesharp/rpiv-todo/todo.ts +144 -0
  90. package/node_modules/@juicesharp/rpiv-todo/tool/response-envelope.ts +97 -0
  91. package/node_modules/@juicesharp/rpiv-todo/tool/types.ts +128 -0
  92. package/node_modules/@juicesharp/rpiv-todo/view/format.ts +163 -0
  93. package/node_modules/@narumitw/pi-usage/LICENSE +21 -0
  94. package/node_modules/@narumitw/pi-usage/README.md +151 -0
  95. package/node_modules/@narumitw/pi-usage/package.json +46 -0
  96. package/node_modules/@narumitw/pi-usage/src/core.ts +217 -0
  97. package/node_modules/@narumitw/pi-usage/src/format.ts +249 -0
  98. package/node_modules/@narumitw/pi-usage/src/index.ts +35 -0
  99. package/node_modules/@narumitw/pi-usage/src/providers/codex.ts +150 -0
  100. package/node_modules/@narumitw/pi-usage/src/providers/openrouter.ts +73 -0
  101. package/node_modules/@narumitw/pi-usage/src/query.ts +313 -0
  102. package/node_modules/@narumitw/pi-usage/src/types.ts +90 -0
  103. package/node_modules/@narumitw/pi-usage/src/usage.ts +676 -0
  104. package/node_modules/@nklisch/pi-background-tasks/README.md +20 -0
  105. package/node_modules/@nklisch/pi-background-tasks/extensions/background-tasks.test.ts +784 -0
  106. package/node_modules/@nklisch/pi-background-tasks/extensions/background-tasks.ts +1143 -0
  107. package/node_modules/@nklisch/pi-background-tasks/package.json +40 -0
  108. package/node_modules/@nklisch/pi-background-tasks/skills/background-tasks/SKILL.md +138 -0
  109. package/node_modules/@nklisch/pi-clearance/LICENSE +21 -0
  110. package/node_modules/@nklisch/pi-clearance/README.md +45 -0
  111. package/node_modules/@nklisch/pi-clearance/docs/ARCHITECTURE.md +47 -0
  112. package/node_modules/@nklisch/pi-clearance/docs/CONFIGURATION.md +94 -0
  113. package/node_modules/@nklisch/pi-clearance/docs/DEVELOPER_GUIDE.md +284 -0
  114. package/node_modules/@nklisch/pi-clearance/docs/PACK_AUTHORING.md +484 -0
  115. package/node_modules/@nklisch/pi-clearance/docs/PRINCIPLES.md +154 -0
  116. package/node_modules/@nklisch/pi-clearance/docs/REFERENCE_PATTERNS.md +335 -0
  117. package/node_modules/@nklisch/pi-clearance/docs/REVIEWER_PROMPTS.md +37 -0
  118. package/node_modules/@nklisch/pi-clearance/docs/RULE_PACKS.md +198 -0
  119. package/node_modules/@nklisch/pi-clearance/docs/SPEC.md +45 -0
  120. package/node_modules/@nklisch/pi-clearance/docs/TUNE.md +32 -0
  121. package/node_modules/@nklisch/pi-clearance/docs/USER_GUIDE.md +70 -0
  122. package/node_modules/@nklisch/pi-clearance/docs/VISION.md +23 -0
  123. package/node_modules/@nklisch/pi-clearance/native/clearance-core.linux-x64-gnu.node +0 -0
  124. package/node_modules/@nklisch/pi-clearance/native/index.d.ts +66 -0
  125. package/node_modules/@nklisch/pi-clearance/package.json +95 -0
  126. package/node_modules/@nklisch/pi-clearance/src/audit/entry.ts +206 -0
  127. package/node_modules/@nklisch/pi-clearance/src/audit/log.ts +4 -0
  128. package/node_modules/@nklisch/pi-clearance/src/audit/logger.ts +39 -0
  129. package/node_modules/@nklisch/pi-clearance/src/audit/redact.ts +260 -0
  130. package/node_modules/@nklisch/pi-clearance/src/audit/sink.ts +129 -0
  131. package/node_modules/@nklisch/pi-clearance/src/config/config-command-plans.ts +918 -0
  132. package/node_modules/@nklisch/pi-clearance/src/config/config-command-writer.ts +582 -0
  133. package/node_modules/@nklisch/pi-clearance/src/config/loader.ts +904 -0
  134. package/node_modules/@nklisch/pi-clearance/src/config/pack-enablement-writer.ts +467 -0
  135. package/node_modules/@nklisch/pi-clearance/src/config/path-scope.ts +199 -0
  136. package/node_modules/@nklisch/pi-clearance/src/config/paths.ts +62 -0
  137. package/node_modules/@nklisch/pi-clearance/src/config/schema.ts +411 -0
  138. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCase.ts +15 -0
  139. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCaseCategory.ts +13 -0
  140. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCaseExpectation.ts +7 -0
  141. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCaseResult.ts +18 -0
  142. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCaseResultOutcome.ts +8 -0
  143. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialCaseSource.ts +7 -0
  144. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialValidationReport.ts +20 -0
  145. package/node_modules/@nklisch/pi-clearance/src/contracts/AdversarialValidationStatus.ts +4 -0
  146. package/node_modules/@nklisch/pi-clearance/src/contracts/BashBlock.ts +12 -0
  147. package/node_modules/@nklisch/pi-clearance/src/contracts/BashCommandShape.ts +16 -0
  148. package/node_modules/@nklisch/pi-clearance/src/contracts/BashConditionalArm.ts +12 -0
  149. package/node_modules/@nklisch/pi-clearance/src/contracts/BashControlConstruct.ts +12 -0
  150. package/node_modules/@nklisch/pi-clearance/src/contracts/BashFlag.ts +11 -0
  151. package/node_modules/@nklisch/pi-clearance/src/contracts/BashForLoopKeywordSpans.ts +10 -0
  152. package/node_modules/@nklisch/pi-clearance/src/contracts/BashIteratorEntry.ts +13 -0
  153. package/node_modules/@nklisch/pi-clearance/src/contracts/BashIteratorEntryKind.ts +4 -0
  154. package/node_modules/@nklisch/pi-clearance/src/contracts/BashListOperator.ts +4 -0
  155. package/node_modules/@nklisch/pi-clearance/src/contracts/BashLoopVariableReference.ts +11 -0
  156. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPathFact.ts +33 -0
  157. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPathFactContext.ts +10 -0
  158. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPathFactProvenance.ts +14 -0
  159. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPathFactProvenanceEntry.ts +16 -0
  160. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPathFacts.ts +14 -0
  161. package/node_modules/@nklisch/pi-clearance/src/contracts/BashPipeline.ts +10 -0
  162. package/node_modules/@nklisch/pi-clearance/src/contracts/BashStage.ts +45 -0
  163. package/node_modules/@nklisch/pi-clearance/src/contracts/BashStageProgram.ts +16 -0
  164. package/node_modules/@nklisch/pi-clearance/src/contracts/BlockOperator.ts +4 -0
  165. package/node_modules/@nklisch/pi-clearance/src/contracts/CapturedOutcome.ts +12 -0
  166. package/node_modules/@nklisch/pi-clearance/src/contracts/CommandFamilyKey.ts +16 -0
  167. package/node_modules/@nklisch/pi-clearance/src/contracts/CommandFamilySummary.ts +20 -0
  168. package/node_modules/@nklisch/pi-clearance/src/contracts/CompileError.ts +9 -0
  169. package/node_modules/@nklisch/pi-clearance/src/contracts/CompositionOperator.ts +4 -0
  170. package/node_modules/@nklisch/pi-clearance/src/contracts/CompoundBodyReason.ts +7 -0
  171. package/node_modules/@nklisch/pi-clearance/src/contracts/CompoundFeatureReason.ts +10 -0
  172. package/node_modules/@nklisch/pi-clearance/src/contracts/CompoundForm.ts +4 -0
  173. package/node_modules/@nklisch/pi-clearance/src/contracts/CompoundIteratorReason.ts +11 -0
  174. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusEntry.ts +23 -0
  175. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusExpectedLabel.ts +4 -0
  176. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusFidelity.ts +4 -0
  177. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusQueryModel.ts +12 -0
  178. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusQuerySummary.ts +16 -0
  179. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusQuerySummarySnapshot.ts +11 -0
  180. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusRecord.ts +21 -0
  181. package/node_modules/@nklisch/pi-clearance/src/contracts/CorpusSource.ts +4 -0
  182. package/node_modules/@nklisch/pi-clearance/src/contracts/CountByLabel.ts +8 -0
  183. package/node_modules/@nklisch/pi-clearance/src/contracts/Decision.ts +10 -0
  184. package/node_modules/@nklisch/pi-clearance/src/contracts/DecisionEffect.ts +4 -0
  185. package/node_modules/@nklisch/pi-clearance/src/contracts/DecisionProvenance.ts +9 -0
  186. package/node_modules/@nklisch/pi-clearance/src/contracts/DecisionSource.ts +11 -0
  187. package/node_modules/@nklisch/pi-clearance/src/contracts/DiagnosticSeverity.ts +4 -0
  188. package/node_modules/@nklisch/pi-clearance/src/contracts/EffectivePolicy.ts +9 -0
  189. package/node_modules/@nklisch/pi-clearance/src/contracts/EmbeddedShellProjection.ts +13 -0
  190. package/node_modules/@nklisch/pi-clearance/src/contracts/EnvironmentAssignment.ts +9 -0
  191. package/node_modules/@nklisch/pi-clearance/src/contracts/IteratorSourceKind.ts +8 -0
  192. package/node_modules/@nklisch/pi-clearance/src/contracts/LoopQuoteKind.ts +4 -0
  193. package/node_modules/@nklisch/pi-clearance/src/contracts/LoopVariableUnknownReason.ts +7 -0
  194. package/node_modules/@nklisch/pi-clearance/src/contracts/MatcherExpr.ts +103 -0
  195. package/node_modules/@nklisch/pi-clearance/src/contracts/MutationShapeKind.ts +4 -0
  196. package/node_modules/@nklisch/pi-clearance/src/contracts/MutationTrustBoundaryClassification.ts +8 -0
  197. package/node_modules/@nklisch/pi-clearance/src/contracts/MutationTrustBoundaryKind.ts +13 -0
  198. package/node_modules/@nklisch/pi-clearance/src/contracts/PackCompileResult.ts +9 -0
  199. package/node_modules/@nklisch/pi-clearance/src/contracts/PackWarningLevel.ts +4 -0
  200. package/node_modules/@nklisch/pi-clearance/src/contracts/ParsedEvidence.ts +13 -0
  201. package/node_modules/@nklisch/pi-clearance/src/contracts/ParsedShapeSummary.ts +16 -0
  202. package/node_modules/@nklisch/pi-clearance/src/contracts/PathAccess.ts +10 -0
  203. package/node_modules/@nklisch/pi-clearance/src/contracts/PathFactProjectScope.ts +13 -0
  204. package/node_modules/@nklisch/pi-clearance/src/contracts/PathFactsRequirement.ts +7 -0
  205. package/node_modules/@nklisch/pi-clearance/src/contracts/PathFactsResolvedConfig.ts +9 -0
  206. package/node_modules/@nklisch/pi-clearance/src/contracts/PathNormalization.ts +4 -0
  207. package/node_modules/@nklisch/pi-clearance/src/contracts/PathScope.ts +15 -0
  208. package/node_modules/@nklisch/pi-clearance/src/contracts/PathScopeMatcherExpr.ts +17 -0
  209. package/node_modules/@nklisch/pi-clearance/src/contracts/PathScopeMatcherMode.ts +4 -0
  210. package/node_modules/@nklisch/pi-clearance/src/contracts/PathUnknownReason.ts +12 -0
  211. package/node_modules/@nklisch/pi-clearance/src/contracts/PathUsageKind.ts +9 -0
  212. package/node_modules/@nklisch/pi-clearance/src/contracts/PiBuiltinToolOperation.ts +16 -0
  213. package/node_modules/@nklisch/pi-clearance/src/contracts/PiBuiltinToolPathInput.ts +8 -0
  214. package/node_modules/@nklisch/pi-clearance/src/contracts/PiBuiltinToolShape.ts +22 -0
  215. package/node_modules/@nklisch/pi-clearance/src/contracts/PiBuiltinToolSpec.ts +10 -0
  216. package/node_modules/@nklisch/pi-clearance/src/contracts/PiFileMutationToolName.ts +4 -0
  217. package/node_modules/@nklisch/pi-clearance/src/contracts/PiToolMutationFacts.ts +19 -0
  218. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyPack.ts +11 -0
  219. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyPackDocLink.ts +4 -0
  220. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyPackExample.ts +9 -0
  221. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyPackMetadata.ts +14 -0
  222. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyPackWarning.ts +5 -0
  223. package/node_modules/@nklisch/pi-clearance/src/contracts/PolicyRule.ts +13 -0
  224. package/node_modules/@nklisch/pi-clearance/src/contracts/ProposalNotRunReason.ts +10 -0
  225. package/node_modules/@nklisch/pi-clearance/src/contracts/ProposalNotRunSeverity.ts +4 -0
  226. package/node_modules/@nklisch/pi-clearance/src/contracts/QuoteKind.ts +4 -0
  227. package/node_modules/@nklisch/pi-clearance/src/contracts/Redirect.ts +13 -0
  228. package/node_modules/@nklisch/pi-clearance/src/contracts/RedirectStream.ts +4 -0
  229. package/node_modules/@nklisch/pi-clearance/src/contracts/RedirectTargetKind.ts +4 -0
  230. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayCorpus.ts +14 -0
  231. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDelta.ts +28 -0
  232. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaBlockedSummary.ts +11 -0
  233. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaChangedRecord.ts +19 -0
  234. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaFamily.ts +24 -0
  235. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaImprovement.ts +10 -0
  236. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaRegression.ts +10 -0
  237. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaStatus.ts +4 -0
  238. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayDeltaTransitionCount.ts +8 -0
  239. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayPathFacts.ts +6 -0
  240. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayReviewerMode.ts +8 -0
  241. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayReviewerOutcome.ts +9 -0
  242. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayStatus.ts +4 -0
  243. package/node_modules/@nklisch/pi-clearance/src/contracts/ReplayedDecision.ts +12 -0
  244. package/node_modules/@nklisch/pi-clearance/src/contracts/ShapeDiagnostic.ts +11 -0
  245. package/node_modules/@nklisch/pi-clearance/src/contracts/SourceFidelity.ts +13 -0
  246. package/node_modules/@nklisch/pi-clearance/src/contracts/SourceSpan.ts +4 -0
  247. package/node_modules/@nklisch/pi-clearance/src/contracts/Substitution.ts +10 -0
  248. package/node_modules/@nklisch/pi-clearance/src/contracts/SubstitutionKind.ts +4 -0
  249. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolCallIdentity.ts +12 -0
  250. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolPathAccess.ts +4 -0
  251. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolPathFact.ts +25 -0
  252. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolPathFactContext.ts +10 -0
  253. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolPathFacts.ts +13 -0
  254. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolPathUsage.ts +4 -0
  255. package/node_modules/@nklisch/pi-clearance/src/contracts/ToolShape.ts +10 -0
  256. package/node_modules/@nklisch/pi-clearance/src/contracts/UnknownPathBehavior.ts +4 -0
  257. package/node_modules/@nklisch/pi-clearance/src/contracts/UnknownToolShape.ts +10 -0
  258. package/node_modules/@nklisch/pi-clearance/src/contracts/index.ts +121 -0
  259. package/node_modules/@nklisch/pi-clearance/src/index.ts +192 -0
  260. package/node_modules/@nklisch/pi-clearance/src/native/loader.ts +582 -0
  261. package/node_modules/@nklisch/pi-clearance/src/packs/activation.ts +65 -0
  262. package/node_modules/@nklisch/pi-clearance/src/packs/baseline.ts +53 -0
  263. package/node_modules/@nklisch/pi-clearance/src/packs/bash.compound.read.ts +30 -0
  264. package/node_modules/@nklisch/pi-clearance/src/packs/bash.dev.verify.ts +879 -0
  265. package/node_modules/@nklisch/pi-clearance/src/packs/bash.inspect.core.ts +193 -0
  266. package/node_modules/@nklisch/pi-clearance/src/packs/bash.network.read.ts +243 -0
  267. package/node_modules/@nklisch/pi-clearance/src/packs/bash.packages.common.ts +351 -0
  268. package/node_modules/@nklisch/pi-clearance/src/packs/bash.project.constructive.ts +60 -0
  269. package/node_modules/@nklisch/pi-clearance/src/packs/bash.review.compound.ts +82 -0
  270. package/node_modules/@nklisch/pi-clearance/src/packs/bash.review.risky.ts +367 -0
  271. package/node_modules/@nklisch/pi-clearance/src/packs/bash.search.read.ts +206 -0
  272. package/node_modules/@nklisch/pi-clearance/src/packs/bash.shell.builtins.ts +138 -0
  273. package/node_modules/@nklisch/pi-clearance/src/packs/bash.structure.safe.ts +118 -0
  274. package/node_modules/@nklisch/pi-clearance/src/packs/bash.system.read.ts +187 -0
  275. package/node_modules/@nklisch/pi-clearance/src/packs/bash.vcs.read.ts +476 -0
  276. package/node_modules/@nklisch/pi-clearance/src/packs/bash.vcs.write.ts +116 -0
  277. package/node_modules/@nklisch/pi-clearance/src/packs/composition-families.ts +101 -0
  278. package/node_modules/@nklisch/pi-clearance/src/packs/condition-guards.ts +56 -0
  279. package/node_modules/@nklisch/pi-clearance/src/packs/define.ts +14 -0
  280. package/node_modules/@nklisch/pi-clearance/src/packs/enablement-command.ts +186 -0
  281. package/node_modules/@nklisch/pi-clearance/src/packs/enablement.ts +814 -0
  282. package/node_modules/@nklisch/pi-clearance/src/packs/floor.ts +142 -0
  283. package/node_modules/@nklisch/pi-clearance/src/packs/package-contract.ts +514 -0
  284. package/node_modules/@nklisch/pi-clearance/src/packs/package-registration.ts +299 -0
  285. package/node_modules/@nklisch/pi-clearance/src/packs/pi.extension.inspect.ts +416 -0
  286. package/node_modules/@nklisch/pi-clearance/src/packs/pi.file.mutate.ts +55 -0
  287. package/node_modules/@nklisch/pi-clearance/src/packs/pi.home.safe.ts +78 -0
  288. package/node_modules/@nklisch/pi-clearance/src/packs/pi.inspect.read.ts +41 -0
  289. package/node_modules/@nklisch/pi-clearance/src/packs/redirect-safety.ts +22 -0
  290. package/node_modules/@nklisch/pi-clearance/src/packs/registry.ts +1062 -0
  291. package/node_modules/@nklisch/pi-clearance/src/packs/validation.ts +1022 -0
  292. package/node_modules/@nklisch/pi-clearance/src/parse/native-effects.ts +49 -0
  293. package/node_modules/@nklisch/pi-clearance/src/parse/native-mutation.ts +20 -0
  294. package/node_modules/@nklisch/pi-clearance/src/parse/native-parser.ts +7 -0
  295. package/node_modules/@nklisch/pi-clearance/src/parse/native-path-facts.ts +190 -0
  296. package/node_modules/@nklisch/pi-clearance/src/parse/native-tool.ts +57 -0
  297. package/node_modules/@nklisch/pi-clearance/src/parse/registry.ts +107 -0
  298. package/node_modules/@nklisch/pi-clearance/src/parse/shape-utils.ts +136 -0
  299. package/node_modules/@nklisch/pi-clearance/src/parse/shape.ts +155 -0
  300. package/node_modules/@nklisch/pi-clearance/src/parse/tool-specs.ts +101 -0
  301. package/node_modules/@nklisch/pi-clearance/src/policy/composer.ts +333 -0
  302. package/node_modules/@nklisch/pi-clearance/src/policy/core.ts +1096 -0
  303. package/node_modules/@nklisch/pi-clearance/src/policy/loader.ts +50 -0
  304. package/node_modules/@nklisch/pi-clearance/src/policy/scope-behavior-pack.ts +101 -0
  305. package/node_modules/@nklisch/pi-clearance/src/replay/adversarial.ts +717 -0
  306. package/node_modules/@nklisch/pi-clearance/src/replay/authoring-proposal-adapter.ts +549 -0
  307. package/node_modules/@nklisch/pi-clearance/src/replay/batch-card.ts +333 -0
  308. package/node_modules/@nklisch/pi-clearance/src/replay/command-family-primitives.ts +235 -0
  309. package/node_modules/@nklisch/pi-clearance/src/replay/command-family.ts +8 -0
  310. package/node_modules/@nklisch/pi-clearance/src/replay/config-proposal-adapter.ts +888 -0
  311. package/node_modules/@nklisch/pi-clearance/src/replay/corpus-model.ts +435 -0
  312. package/node_modules/@nklisch/pi-clearance/src/replay/corpus-query.ts +647 -0
  313. package/node_modules/@nklisch/pi-clearance/src/replay/history.ts +653 -0
  314. package/node_modules/@nklisch/pi-clearance/src/replay/native-kernels.ts +207 -0
  315. package/node_modules/@nklisch/pi-clearance/src/replay/not-run-reasons.ts +80 -0
  316. package/node_modules/@nklisch/pi-clearance/src/replay/pack-enablement-proposal.ts +283 -0
  317. package/node_modules/@nklisch/pi-clearance/src/replay/policy-proposal-adapter.ts +755 -0
  318. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-acknowledgements.ts +56 -0
  319. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-approval.ts +506 -0
  320. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-batch.ts +368 -0
  321. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-candidate-policy.ts +129 -0
  322. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-card.ts +1086 -0
  323. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-draft.ts +215 -0
  324. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-grouping.ts +164 -0
  325. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-replay-delta.ts +697 -0
  326. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-schema.ts +1254 -0
  327. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-validation-display.ts +23 -0
  328. package/node_modules/@nklisch/pi-clearance/src/replay/proposal-write-plan.ts +840 -0
  329. package/node_modules/@nklisch/pi-clearance/src/replay/proposals.ts +2113 -0
  330. package/node_modules/@nklisch/pi-clearance/src/replay/ratchet-markdown.ts +330 -0
  331. package/node_modules/@nklisch/pi-clearance/src/replay/ratchet.ts +905 -0
  332. package/node_modules/@nklisch/pi-clearance/src/replay/reader.ts +163 -0
  333. package/node_modules/@nklisch/pi-clearance/src/replay/rendering-format.ts +98 -0
  334. package/node_modules/@nklisch/pi-clearance/src/replay/replay-delta.ts +209 -0
  335. package/node_modules/@nklisch/pi-clearance/src/replay/reviewer-config-proposals.ts +1790 -0
  336. package/node_modules/@nklisch/pi-clearance/src/replay/sources/audit-log.ts +338 -0
  337. package/node_modules/@nklisch/pi-clearance/src/replay/sources/corpus-fixtures.ts +164 -0
  338. package/node_modules/@nklisch/pi-clearance/src/replay/sources/session-history.ts +258 -0
  339. package/node_modules/@nklisch/pi-clearance/src/replay/structured-markdown.ts +804 -0
  340. package/node_modules/@nklisch/pi-clearance/src/runtime/auto-reviewer-read-models.ts +894 -0
  341. package/node_modules/@nklisch/pi-clearance/src/runtime/command-registry.ts +366 -0
  342. package/node_modules/@nklisch/pi-clearance/src/runtime/command-transforms.ts +373 -0
  343. package/node_modules/@nklisch/pi-clearance/src/runtime/compound-recovery.ts +366 -0
  344. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/allow.ts +529 -0
  345. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/packs.ts +1531 -0
  346. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/post-write-validation.ts +187 -0
  347. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/scope.ts +865 -0
  348. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/actions.ts +62 -0
  349. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/dispatcher.ts +809 -0
  350. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/native-ui.ts +1060 -0
  351. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/panels/briefing.ts +172 -0
  352. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/panels/packs.ts +120 -0
  353. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/panels/reviewer.ts +83 -0
  354. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/panels/scope.ts +312 -0
  355. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/panels.ts +92 -0
  356. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings/read-model.ts +167 -0
  357. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/settings.ts +225 -0
  358. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/setup.ts +135 -0
  359. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/status.ts +64 -0
  360. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/tune-cue.ts +50 -0
  361. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/tune.ts +135 -0
  362. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/types.ts +163 -0
  363. package/node_modules/@nklisch/pi-clearance/src/runtime/config-commands/why.ts +253 -0
  364. package/node_modules/@nklisch/pi-clearance/src/runtime/duration.ts +49 -0
  365. package/node_modules/@nklisch/pi-clearance/src/runtime/escalation.ts +104 -0
  366. package/node_modules/@nklisch/pi-clearance/src/runtime/handler.ts +412 -0
  367. package/node_modules/@nklisch/pi-clearance/src/runtime/human-review-card.ts +278 -0
  368. package/node_modules/@nklisch/pi-clearance/src/runtime/markdown.ts +13 -0
  369. package/node_modules/@nklisch/pi-clearance/src/runtime/mode-prompt.ts +47 -0
  370. package/node_modules/@nklisch/pi-clearance/src/runtime/model-adapter.ts +248 -0
  371. package/node_modules/@nklisch/pi-clearance/src/runtime/operator-status.ts +125 -0
  372. package/node_modules/@nklisch/pi-clearance/src/runtime/policy-cache.ts +280 -0
  373. package/node_modules/@nklisch/pi-clearance/src/runtime/proposal-tools/apply-engine.ts +1030 -0
  374. package/node_modules/@nklisch/pi-clearance/src/runtime/proposal-tools/ids.ts +7 -0
  375. package/node_modules/@nklisch/pi-clearance/src/runtime/proposal-tools/index.ts +48 -0
  376. package/node_modules/@nklisch/pi-clearance/src/runtime/proposal-tools/present.ts +651 -0
  377. package/node_modules/@nklisch/pi-clearance/src/runtime/proposal-tools/propose.ts +223 -0
  378. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-mode.ts +243 -0
  379. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/adversarial.ts +437 -0
  380. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/analysis.ts +64 -0
  381. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/approval-audit.ts +96 -0
  382. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/batch-cache.ts +40 -0
  383. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/history.ts +496 -0
  384. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/ids.ts +13 -0
  385. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/index.ts +58 -0
  386. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/package-candidates.ts +185 -0
  387. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/packs.ts +196 -0
  388. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/post-write-replay.ts +179 -0
  389. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/presentation.ts +15 -0
  390. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/proposals.ts +805 -0
  391. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/replay.ts +918 -0
  392. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/result.ts +72 -0
  393. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/status.ts +173 -0
  394. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/types.ts +16 -0
  395. package/node_modules/@nklisch/pi-clearance/src/runtime/ratchet-tools/validation.ts +620 -0
  396. package/node_modules/@nklisch/pi-clearance/src/runtime/review-decision-display.ts +143 -0
  397. package/node_modules/@nklisch/pi-clearance/src/runtime/review-visibility.ts +463 -0
  398. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer-context-adapter.ts +299 -0
  399. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer-context.ts +443 -0
  400. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer-model.ts +141 -0
  401. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer-prompts.ts +238 -0
  402. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer-shape-summary.ts +301 -0
  403. package/node_modules/@nklisch/pi-clearance/src/runtime/reviewer.ts +850 -0
  404. package/node_modules/@nklisch/pi-clearance/src/runtime/sink.ts +38 -0
  405. package/node_modules/@nklisch/pi-clearance/src/runtime/token-budget.ts +95 -0
  406. package/node_modules/@nklisch/pi-clearance/src/runtime/transform-contract.ts +259 -0
  407. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-pack-authoring/SKILL.md +51 -0
  408. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/SKILL.md +112 -0
  409. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/apply-writer.ts +413 -0
  410. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/cli.ts +1154 -0
  411. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/presentation.ts +423 -0
  412. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/structured-presentation.ts +106 -0
  413. package/node_modules/@nklisch/pi-clearance/src/skill/clearance-tune/verify.ts +238 -0
  414. package/node_modules/@nklisch/pi-conveniences/README.md +20 -0
  415. package/node_modules/@nklisch/pi-conveniences/extensions/agents-context.test.ts +140 -0
  416. package/node_modules/@nklisch/pi-conveniences/extensions/agents-context.ts +97 -0
  417. package/node_modules/@nklisch/pi-conveniences/extensions/context-window-footer.test.ts +30 -0
  418. package/node_modules/@nklisch/pi-conveniences/extensions/context-window-footer.ts +464 -0
  419. package/node_modules/@nklisch/pi-conveniences/extensions/exit.test.ts +44 -0
  420. package/node_modules/@nklisch/pi-conveniences/extensions/exit.ts +38 -0
  421. package/node_modules/@nklisch/pi-conveniences/extensions/model-list.test.ts +34 -0
  422. package/node_modules/@nklisch/pi-conveniences/extensions/model-list.ts +297 -0
  423. package/node_modules/@nklisch/pi-conveniences/package.json +48 -0
  424. package/node_modules/@nklisch/pi-fff-compat/README.md +41 -0
  425. package/node_modules/@nklisch/pi-fff-compat/extensions/fff-compat-search.test.ts +76 -0
  426. package/node_modules/@nklisch/pi-fff-compat/extensions/fff-compat-search.ts +641 -0
  427. package/node_modules/@nklisch/pi-fff-compat/package.json +51 -0
  428. package/node_modules/@nklisch/pi-model-modes/LICENSE +21 -0
  429. package/node_modules/@nklisch/pi-model-modes/README.md +259 -0
  430. package/node_modules/@nklisch/pi-model-modes/extensions/index.ts +62 -0
  431. package/node_modules/@nklisch/pi-model-modes/package.json +59 -0
  432. package/node_modules/@nklisch/pi-model-modes/presets.json +93 -0
  433. package/node_modules/@nklisch/pi-model-modes/prompts/axis/agency/autonomous.md +17 -0
  434. package/node_modules/@nklisch/pi-model-modes/prompts/axis/agency/collaborative.md +16 -0
  435. package/node_modules/@nklisch/pi-model-modes/prompts/axis/agency/partner.md +22 -0
  436. package/node_modules/@nklisch/pi-model-modes/prompts/axis/agency/surgical.md +14 -0
  437. package/node_modules/@nklisch/pi-model-modes/prompts/axis/quality/architect.md +8 -0
  438. package/node_modules/@nklisch/pi-model-modes/prompts/axis/quality/minimal.md +8 -0
  439. package/node_modules/@nklisch/pi-model-modes/prompts/axis/quality/pragmatic.md +8 -0
  440. package/node_modules/@nklisch/pi-model-modes/prompts/axis/scope/adjacent.md +15 -0
  441. package/node_modules/@nklisch/pi-model-modes/prompts/axis/scope/narrow.md +15 -0
  442. package/node_modules/@nklisch/pi-model-modes/prompts/axis/scope/unrestricted.md +14 -0
  443. package/node_modules/@nklisch/pi-model-modes/prompts/base/chill.md +6 -0
  444. package/node_modules/@nklisch/pi-model-modes/prompts/base/flow.md +7 -0
  445. package/node_modules/@nklisch/pi-model-modes/prompts/base/pi-direct.md +4 -0
  446. package/node_modules/@nklisch/pi-model-modes/prompts/base.json +3 -0
  447. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/bold.md +8 -0
  448. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/context-pacing.md +13 -0
  449. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/debug.md +11 -0
  450. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/director.md +14 -0
  451. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/flow.md +10 -0
  452. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/methodical.md +9 -0
  453. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/muse.md +13 -0
  454. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/playful.md +11 -0
  455. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/readonly.md +9 -0
  456. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/speak-plain.md +14 -0
  457. package/node_modules/@nklisch/pi-model-modes/prompts/modifiers/tdd.md +10 -0
  458. package/node_modules/@nklisch/pi-model-modes/prompts/styles/clear.md +3 -0
  459. package/node_modules/@nklisch/pi-model-modes/prompts/styles/compact.md +3 -0
  460. package/node_modules/@nklisch/pi-model-modes/prompts/styles/explanatory.md +3 -0
  461. package/node_modules/@nklisch/pi-model-modes/prompts/styles/expressive.md +3 -0
  462. package/node_modules/@nklisch/pi-model-modes/src/assemble.ts +41 -0
  463. package/node_modules/@nklisch/pi-model-modes/src/autocomplete.ts +167 -0
  464. package/node_modules/@nklisch/pi-model-modes/src/cache.ts +244 -0
  465. package/node_modules/@nklisch/pi-model-modes/src/command-parse-utils.ts +73 -0
  466. package/node_modules/@nklisch/pi-model-modes/src/commands.ts +629 -0
  467. package/node_modules/@nklisch/pi-model-modes/src/config.ts +661 -0
  468. package/node_modules/@nklisch/pi-model-modes/src/footer.ts +200 -0
  469. package/node_modules/@nklisch/pi-model-modes/src/fragments.ts +178 -0
  470. package/node_modules/@nklisch/pi-model-modes/src/handler.ts +113 -0
  471. package/node_modules/@nklisch/pi-model-modes/src/identity.ts +16 -0
  472. package/node_modules/@nklisch/pi-model-modes/src/keybinding.ts +117 -0
  473. package/node_modules/@nklisch/pi-model-modes/src/presets.ts +319 -0
  474. package/node_modules/@nklisch/pi-model-modes/src/provider-names.ts +92 -0
  475. package/node_modules/@nklisch/pi-model-modes/src/resolver.ts +332 -0
  476. package/node_modules/@nklisch/pi-model-modes/src/style-autocomplete.ts +106 -0
  477. package/node_modules/@nklisch/pi-model-modes/src/style-command.ts +239 -0
  478. package/node_modules/@nklisch/pi-model-modes/src/style.ts +252 -0
  479. package/node_modules/@nklisch/pi-plugins/LICENSE +21 -0
  480. package/node_modules/@nklisch/pi-plugins/README.md +70 -0
  481. package/node_modules/@nklisch/pi-plugins/dist/application/abort-rejection.d.ts +1 -0
  482. package/node_modules/@nklisch/pi-plugins/dist/application/abort-rejection.js +7 -0
  483. package/node_modules/@nklisch/pi-plugins/dist/application/abort-rejection.js.map +1 -0
  484. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-contract.d.ts +1531 -0
  485. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-contract.js +135 -0
  486. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-contract.js.map +1 -0
  487. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-service.d.ts +25 -0
  488. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-service.js +234 -0
  489. package/node_modules/@nklisch/pi-plugins/dist/application/adoption-service.js.map +1 -0
  490. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-authorization.d.ts +49 -0
  491. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-authorization.js +93 -0
  492. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-authorization.js.map +1 -0
  493. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.d.ts +30 -0
  494. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.js +240 -0
  495. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-coordinator.js.map +1 -0
  496. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.d.ts +46 -0
  497. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.js +25 -0
  498. package/node_modules/@nklisch/pi-plugins/dist/application/automatic-update-eligibility.js.map +1 -0
  499. package/node_modules/@nklisch/pi-plugins/dist/application/bundle-reconciler.d.ts +49 -0
  500. package/node_modules/@nklisch/pi-plugins/dist/application/bundle-reconciler.js +603 -0
  501. package/node_modules/@nklisch/pi-plugins/dist/application/bundle-reconciler.js.map +1 -0
  502. package/node_modules/@nklisch/pi-plugins/dist/application/compatibility-service.d.ts +12 -0
  503. package/node_modules/@nklisch/pi-plugins/dist/application/compatibility-service.js +79 -0
  504. package/node_modules/@nklisch/pi-plugins/dist/application/compatibility-service.js.map +1 -0
  505. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-resolver.d.ts +48 -0
  506. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-resolver.js +293 -0
  507. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-resolver.js.map +1 -0
  508. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-service.d.ts +113 -0
  509. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-service.js +492 -0
  510. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-service.js.map +1 -0
  511. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-validation.d.ts +75 -0
  512. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-validation.js +505 -0
  513. package/node_modules/@nklisch/pi-plugins/dist/application/configuration-validation.js.map +1 -0
  514. package/node_modules/@nklisch/pi-plugins/dist/application/confirmed-uninstall-cleanup.d.ts +49 -0
  515. package/node_modules/@nklisch/pi-plugins/dist/application/confirmed-uninstall-cleanup.js +52 -0
  516. package/node_modules/@nklisch/pi-plugins/dist/application/confirmed-uninstall-cleanup.js.map +1 -0
  517. package/node_modules/@nklisch/pi-plugins/dist/application/content-index.d.ts +22 -0
  518. package/node_modules/@nklisch/pi-plugins/dist/application/content-index.js +87 -0
  519. package/node_modules/@nklisch/pi-plugins/dist/application/content-index.js.map +1 -0
  520. package/node_modules/@nklisch/pi-plugins/dist/application/content-promotion.d.ts +24 -0
  521. package/node_modules/@nklisch/pi-plugins/dist/application/content-promotion.js +131 -0
  522. package/node_modules/@nklisch/pi-plugins/dist/application/content-promotion.js.map +1 -0
  523. package/node_modules/@nklisch/pi-plugins/dist/application/current-scope-authority.d.ts +24 -0
  524. package/node_modules/@nklisch/pi-plugins/dist/application/current-scope-authority.js +51 -0
  525. package/node_modules/@nklisch/pi-plugins/dist/application/current-scope-authority.js.map +1 -0
  526. package/node_modules/@nklisch/pi-plugins/dist/application/discovery-plan.d.ts +162 -0
  527. package/node_modules/@nklisch/pi-plugins/dist/application/discovery-plan.js +353 -0
  528. package/node_modules/@nklisch/pi-plugins/dist/application/discovery-plan.js.map +1 -0
  529. package/node_modules/@nklisch/pi-plugins/dist/application/exact-trust-grant-service.d.ts +41 -0
  530. package/node_modules/@nklisch/pi-plugins/dist/application/exact-trust-grant-service.js +146 -0
  531. package/node_modules/@nklisch/pi-plugins/dist/application/exact-trust-grant-service.js.map +1 -0
  532. package/node_modules/@nklisch/pi-plugins/dist/application/generation-mutation-coordinator.d.ts +79 -0
  533. package/node_modules/@nklisch/pi-plugins/dist/application/generation-mutation-coordinator.js +424 -0
  534. package/node_modules/@nklisch/pi-plugins/dist/application/generation-mutation-coordinator.js.map +1 -0
  535. package/node_modules/@nklisch/pi-plugins/dist/application/hook-execution-context.d.ts +2 -0
  536. package/node_modules/@nklisch/pi-plugins/dist/application/hook-execution-context.js +149 -0
  537. package/node_modules/@nklisch/pi-plugins/dist/application/hook-execution-context.js.map +1 -0
  538. package/node_modules/@nklisch/pi-plugins/dist/application/host-observation-contract.d.ts +177 -0
  539. package/node_modules/@nklisch/pi-plugins/dist/application/host-observation-contract.js +45 -0
  540. package/node_modules/@nklisch/pi-plugins/dist/application/host-observation-contract.js.map +1 -0
  541. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-contract.d.ts +50 -0
  542. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-contract.js +28 -0
  543. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-contract.js.map +1 -0
  544. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-service.d.ts +27 -0
  545. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-service.js +72 -0
  546. package/node_modules/@nklisch/pi-plugins/dist/application/host-precedence-service.js.map +1 -0
  547. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-contract.d.ts +1289 -0
  548. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-contract.js +56 -0
  549. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-contract.js.map +1 -0
  550. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-failure-projection.d.ts +26 -0
  551. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-failure-projection.js +137 -0
  552. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-failure-projection.js.map +1 -0
  553. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-service.d.ts +22 -0
  554. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-service.js +754 -0
  555. package/node_modules/@nklisch/pi-plugins/dist/application/inspection-service.js.map +1 -0
  556. package/node_modules/@nklisch/pi-plugins/dist/application/installed-revision-descriptor.d.ts +972 -0
  557. package/node_modules/@nklisch/pi-plugins/dist/application/installed-revision-descriptor.js +51 -0
  558. package/node_modules/@nklisch/pi-plugins/dist/application/installed-revision-descriptor.js.map +1 -0
  559. package/node_modules/@nklisch/pi-plugins/dist/application/keyed-mutation-scheduler.d.ts +19 -0
  560. package/node_modules/@nklisch/pi-plugins/dist/application/keyed-mutation-scheduler.js +235 -0
  561. package/node_modules/@nklisch/pi-plugins/dist/application/keyed-mutation-scheduler.js.map +1 -0
  562. package/node_modules/@nklisch/pi-plugins/dist/application/lifecycle-transition-reconciler.d.ts +76 -0
  563. package/node_modules/@nklisch/pi-plugins/dist/application/lifecycle-transition-reconciler.js +236 -0
  564. package/node_modules/@nklisch/pi-plugins/dist/application/lifecycle-transition-reconciler.js.map +1 -0
  565. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-contract.d.ts +568 -0
  566. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-contract.js +91 -0
  567. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-contract.js.map +1 -0
  568. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-service.d.ts +55 -0
  569. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-service.js +327 -0
  570. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-catalog-service.js.map +1 -0
  571. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-contract.d.ts +575 -0
  572. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-contract.js +7 -0
  573. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-contract.js.map +1 -0
  574. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-service.d.ts +13 -0
  575. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-service.js +105 -0
  576. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-inspection-service.js.map +1 -0
  577. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-management-contract.d.ts +844 -0
  578. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-management-contract.js +106 -0
  579. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-management-contract.js.map +1 -0
  580. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.d.ts +16 -0
  581. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.js +102 -0
  582. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-plugin-probe.js.map +1 -0
  583. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.d.ts +92 -0
  584. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.js +573 -0
  585. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-refresh-service.js.map +1 -0
  586. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-registration-service.d.ts +31 -0
  587. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-registration-service.js +363 -0
  588. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-registration-service.js.map +1 -0
  589. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-search.d.ts +44 -0
  590. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-search.js +105 -0
  591. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-search.js.map +1 -0
  592. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-state.d.ts +17 -0
  593. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-state.js +82 -0
  594. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-state.js.map +1 -0
  595. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-policy-service.d.ts +39 -0
  596. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-policy-service.js +59 -0
  597. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-policy-service.js.map +1 -0
  598. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-scheduler.d.ts +30 -0
  599. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-scheduler.js +229 -0
  600. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-scheduler.js.map +1 -0
  601. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-state.d.ts +16 -0
  602. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-state.js +104 -0
  603. package/node_modules/@nklisch/pi-plugins/dist/application/marketplace-update-state.js.map +1 -0
  604. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-launch-context.d.ts +8 -0
  605. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-launch-context.js +255 -0
  606. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-launch-context.js.map +1 -0
  607. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-plugin-projection.d.ts +207 -0
  608. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-plugin-projection.js +342 -0
  609. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-plugin-projection.js.map +1 -0
  610. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-runtime-capability-probe.d.ts +12 -0
  611. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-runtime-capability-probe.js +121 -0
  612. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-runtime-capability-probe.js.map +1 -0
  613. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-source-registration.d.ts +11 -0
  614. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-source-registration.js +54 -0
  615. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-source-registration.js.map +1 -0
  616. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-tool-aliases.d.ts +39 -0
  617. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-tool-aliases.js +96 -0
  618. package/node_modules/@nklisch/pi-plugins/dist/application/mcp-tool-aliases.js.map +1 -0
  619. package/node_modules/@nklisch/pi-plugins/dist/application/mutation-coordination.d.ts +19 -0
  620. package/node_modules/@nklisch/pi-plugins/dist/application/mutation-coordination.js +12 -0
  621. package/node_modules/@nklisch/pi-plugins/dist/application/mutation-coordination.js.map +1 -0
  622. package/node_modules/@nklisch/pi-plugins/dist/application/native-candidate-inspection.d.ts +21 -0
  623. package/node_modules/@nklisch/pi-plugins/dist/application/native-candidate-inspection.js +271 -0
  624. package/node_modules/@nklisch/pi-plugins/dist/application/native-candidate-inspection.js.map +1 -0
  625. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-contract.d.ts +226 -0
  626. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-contract.js +140 -0
  627. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-contract.js.map +1 -0
  628. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-dispatcher.d.ts +30 -0
  629. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-dispatcher.js +63 -0
  630. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-dispatcher.js.map +1 -0
  631. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-error.d.ts +7 -0
  632. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-error.js +35 -0
  633. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-error.js.map +1 -0
  634. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-execution.d.ts +20 -0
  635. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-execution.js +83 -0
  636. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-execution.js.map +1 -0
  637. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-help.d.ts +257 -0
  638. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-help.js +102 -0
  639. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-help.js.map +1 -0
  640. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-human.d.ts +10 -0
  641. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-human.js +14 -0
  642. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-human.js.map +1 -0
  643. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-input.d.ts +14 -0
  644. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-input.js +85 -0
  645. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-input.js.map +1 -0
  646. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-install.d.ts +17 -0
  647. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-install.js +36 -0
  648. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-install.js.map +1 -0
  649. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lexer.d.ts +37 -0
  650. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lexer.js +113 -0
  651. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lexer.js.map +1 -0
  652. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lifecycle.d.ts +20 -0
  653. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lifecycle.js +69 -0
  654. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-lifecycle.js.map +1 -0
  655. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-mutation-dispatch.d.ts +9 -0
  656. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-mutation-dispatch.js +232 -0
  657. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-mutation-dispatch.js.map +1 -0
  658. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-operation.d.ts +4165 -0
  659. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-operation.js +31 -0
  660. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-operation.js.map +1 -0
  661. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.d.ts +191 -0
  662. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.js +337 -0
  663. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-parser.js.map +1 -0
  664. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-progress.d.ts +203 -0
  665. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-progress.js +107 -0
  666. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-progress.js.map +1 -0
  667. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-projection.d.ts +33 -0
  668. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-projection.js +53 -0
  669. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-projection.js.map +1 -0
  670. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-read-dispatch.d.ts +40 -0
  671. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-read-dispatch.js +158 -0
  672. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-read-dispatch.js.map +1 -0
  673. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-redaction.d.ts +8 -0
  674. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-redaction.js +66 -0
  675. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-redaction.js.map +1 -0
  676. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.d.ts +899 -0
  677. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.js +236 -0
  678. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-registry.js.map +1 -0
  679. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-result.d.ts +8 -0
  680. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-result.js +31 -0
  681. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-result.js.map +1 -0
  682. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-safe-projection.d.ts +1622 -0
  683. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-safe-projection.js +248 -0
  684. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-safe-projection.js.map +1 -0
  685. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-scalar.d.ts +3 -0
  686. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-scalar.js +19 -0
  687. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-scalar.js.map +1 -0
  688. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-selection.d.ts +102 -0
  689. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-selection.js +150 -0
  690. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-selection.js.map +1 -0
  691. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-service.d.ts +35 -0
  692. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-service.js +92 -0
  693. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-service.js.map +1 -0
  694. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-update-policy.d.ts +10 -0
  695. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-update-policy.js +43 -0
  696. package/node_modules/@nklisch/pi-plugins/dist/application/native-control-update-policy.js.map +1 -0
  697. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-compiler.d.ts +23 -0
  698. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-compiler.js +96 -0
  699. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-compiler.js.map +1 -0
  700. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.d.ts +556 -0
  701. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.js +63 -0
  702. package/node_modules/@nklisch/pi-plugins/dist/application/native-diagnostic-registry.js.map +1 -0
  703. package/node_modules/@nklisch/pi-plugins/dist/application/native-failure-presenter.d.ts +14 -0
  704. package/node_modules/@nklisch/pi-plugins/dist/application/native-failure-presenter.js +152 -0
  705. package/node_modules/@nklisch/pi-plugins/dist/application/native-failure-presenter.js.map +1 -0
  706. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-contract.d.ts +3720 -0
  707. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-contract.js +281 -0
  708. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-contract.js.map +1 -0
  709. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-disclosure.d.ts +37 -0
  710. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-disclosure.js +260 -0
  711. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-disclosure.js.map +1 -0
  712. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display-safety.d.ts +3 -0
  713. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display-safety.js +36 -0
  714. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display-safety.js.map +1 -0
  715. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display.d.ts +18 -0
  716. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display.js +73 -0
  717. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-display.js.map +1 -0
  718. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-identifiers.d.ts +87 -0
  719. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-identifiers.js +125 -0
  720. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-identifiers.js.map +1 -0
  721. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-service.d.ts +29 -0
  722. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-service.js +424 -0
  723. package/node_modules/@nklisch/pi-plugins/dist/application/native-inspection-service.js.map +1 -0
  724. package/node_modules/@nklisch/pi-plugins/dist/application/native-installed-inspection.d.ts +15 -0
  725. package/node_modules/@nklisch/pi-plugins/dist/application/native-installed-inspection.js +428 -0
  726. package/node_modules/@nklisch/pi-plugins/dist/application/native-installed-inspection.js.map +1 -0
  727. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.d.ts +9585 -0
  728. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.js +295 -0
  729. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-contract.js.map +1 -0
  730. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-identifiers.d.ts +12 -0
  731. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-identifiers.js +55 -0
  732. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-identifiers.js.map +1 -0
  733. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-service.d.ts +26 -0
  734. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-service.js +390 -0
  735. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-service.js.map +1 -0
  736. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-session.d.ts +53 -0
  737. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-session.js +101 -0
  738. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation-session.js.map +1 -0
  739. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation.d.ts +792 -0
  740. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation.js +323 -0
  741. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-operation.js.map +1 -0
  742. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-progress.d.ts +15 -0
  743. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-progress.js +31 -0
  744. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-progress.js.map +1 -0
  745. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-result.d.ts +21 -0
  746. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-result.js +84 -0
  747. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-result.js.map +1 -0
  748. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-target.d.ts +30 -0
  749. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-target.js +118 -0
  750. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-target.js.map +1 -0
  751. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-update.d.ts +93 -0
  752. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-update.js +103 -0
  753. package/node_modules/@nklisch/pi-plugins/dist/application/native-lifecycle-update.js.map +1 -0
  754. package/node_modules/@nklisch/pi-plugins/dist/application/native-uninstall-cleanup.d.ts +25 -0
  755. package/node_modules/@nklisch/pi-plugins/dist/application/native-uninstall-cleanup.js +39 -0
  756. package/node_modules/@nklisch/pi-plugins/dist/application/native-uninstall-cleanup.js.map +1 -0
  757. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.d.ts +644 -0
  758. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.js +118 -0
  759. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-contract.js.map +1 -0
  760. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-identifiers.d.ts +9 -0
  761. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-identifiers.js +21 -0
  762. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-identifiers.js.map +1 -0
  763. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-management-service.d.ts +24 -0
  764. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-management-service.js +33 -0
  765. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-management-service.js.map +1 -0
  766. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-policy-service.d.ts +32 -0
  767. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-policy-service.js +402 -0
  768. package/node_modules/@nklisch/pi-plugins/dist/application/native-update-policy-service.js.map +1 -0
  769. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-candidate-preparation.d.ts +134 -0
  770. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-candidate-preparation.js +392 -0
  771. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-candidate-preparation.js.map +1 -0
  772. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-contract.d.ts +290 -0
  773. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-contract.js +96 -0
  774. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-contract.js.map +1 -0
  775. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.d.ts +176 -0
  776. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.js +707 -0
  777. package/node_modules/@nklisch/pi-plugins/dist/application/plugin-lifecycle-service.js.map +1 -0
  778. package/node_modules/@nklisch/pi-plugins/dist/application/ports/automatic-update-lifecycle.d.ts +30 -0
  779. package/node_modules/@nklisch/pi-plugins/dist/application/ports/automatic-update-lifecycle.js +2 -0
  780. package/node_modules/@nklisch/pi-plugins/dist/application/ports/automatic-update-lifecycle.js.map +1 -0
  781. package/node_modules/@nklisch/pi-plugins/dist/application/ports/bundle-readers.d.ts +53 -0
  782. package/node_modules/@nklisch/pi-plugins/dist/application/ports/bundle-readers.js +2 -0
  783. package/node_modules/@nklisch/pi-plugins/dist/application/ports/bundle-readers.js.map +1 -0
  784. package/node_modules/@nklisch/pi-plugins/dist/application/ports/candidate-content-lease.d.ts +42 -0
  785. package/node_modules/@nklisch/pi-plugins/dist/application/ports/candidate-content-lease.js +13 -0
  786. package/node_modules/@nklisch/pi-plugins/dist/application/ports/candidate-content-lease.js.map +1 -0
  787. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-path.d.ts +31 -0
  788. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-path.js +7 -0
  789. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-path.js.map +1 -0
  790. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-write-id.d.ts +5 -0
  791. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-write-id.js +2 -0
  792. package/node_modules/@nklisch/pi-plugins/dist/application/ports/configuration-write-id.js.map +1 -0
  793. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-read.d.ts +19 -0
  794. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-read.js +2 -0
  795. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-read.js.map +1 -0
  796. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store-platform.d.ts +11 -0
  797. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store-platform.js +2 -0
  798. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store-platform.js.map +1 -0
  799. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store.d.ts +103 -0
  800. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store.js +2 -0
  801. package/node_modules/@nklisch/pi-plugins/dist/application/ports/content-store.js.map +1 -0
  802. package/node_modules/@nklisch/pi-plugins/dist/application/ports/foreign-state-files.d.ts +5 -0
  803. package/node_modules/@nklisch/pi-plugins/dist/application/ports/foreign-state-files.js +2 -0
  804. package/node_modules/@nklisch/pi-plugins/dist/application/ports/foreign-state-files.js.map +1 -0
  805. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-executable-resolver.d.ts +16 -0
  806. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-executable-resolver.js +2 -0
  807. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-executable-resolver.js.map +1 -0
  808. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-execution-context.d.ts +58 -0
  809. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-execution-context.js +9 -0
  810. package/node_modules/@nklisch/pi-plugins/dist/application/ports/hook-execution-context.js.map +1 -0
  811. package/node_modules/@nklisch/pi-plugins/dist/application/ports/inspection-readiness.d.ts +18 -0
  812. package/node_modules/@nklisch/pi-plugins/dist/application/ports/inspection-readiness.js +2 -0
  813. package/node_modules/@nklisch/pi-plugins/dist/application/ports/inspection-readiness.js.map +1 -0
  814. package/node_modules/@nklisch/pi-plugins/dist/application/ports/installed-plugin-loader.d.ts +1056 -0
  815. package/node_modules/@nklisch/pi-plugins/dist/application/ports/installed-plugin-loader.js +29 -0
  816. package/node_modules/@nklisch/pi-plugins/dist/application/ports/installed-plugin-loader.js.map +1 -0
  817. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-clock.d.ts +8 -0
  818. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-clock.js +3 -0
  819. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-clock.js.map +1 -0
  820. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-operation-id.d.ts +8 -0
  821. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-operation-id.js +7 -0
  822. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-operation-id.js.map +1 -0
  823. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-reload.d.ts +367 -0
  824. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-reload.js +207 -0
  825. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-reload.js.map +1 -0
  826. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-inventory.d.ts +26 -0
  827. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-inventory.js +7 -0
  828. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-inventory.js.map +1 -0
  829. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-store.d.ts +16 -0
  830. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-store.js +2 -0
  831. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-state-store.js.map +1 -0
  832. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-transition-store.d.ts +5008 -0
  833. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-transition-store.js +129 -0
  834. package/node_modules/@nklisch/pi-plugins/dist/application/ports/lifecycle-transition-store.js.map +1 -0
  835. package/node_modules/@nklisch/pi-plugins/dist/application/ports/marketplace-registration.d.ts +15 -0
  836. package/node_modules/@nklisch/pi-plugins/dist/application/ports/marketplace-registration.js +2 -0
  837. package/node_modules/@nklisch/pi-plugins/dist/application/ports/marketplace-registration.js.map +1 -0
  838. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-context.d.ts +97 -0
  839. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-context.js +30 -0
  840. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-context.js.map +1 -0
  841. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-environment.d.ts +11 -0
  842. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-environment.js +2 -0
  843. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-launch-environment.js.map +1 -0
  844. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.d.ts +1387 -0
  845. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.js +399 -0
  846. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mcp-runtime.js.map +1 -0
  847. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mutation-execution-context.d.ts +9 -0
  848. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mutation-execution-context.js +2 -0
  849. package/node_modules/@nklisch/pi-plugins/dist/application/ports/mutation-execution-context.js.map +1 -0
  850. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-applications.d.ts +42 -0
  851. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-applications.js +2 -0
  852. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-applications.js.map +1 -0
  853. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-execution.d.ts +31 -0
  854. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-execution.js +2 -0
  855. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-execution.js.map +1 -0
  856. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-input.d.ts +66 -0
  857. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-input.js +2 -0
  858. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-control-input.js.map +1 -0
  859. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-inspection-evidence.d.ts +104 -0
  860. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-inspection-evidence.js +2 -0
  861. package/node_modules/@nklisch/pi-plugins/dist/application/ports/native-inspection-evidence.js.map +1 -0
  862. package/node_modules/@nklisch/pi-plugins/dist/application/ports/persistent-data-removal.d.ts +22 -0
  863. package/node_modules/@nklisch/pi-plugins/dist/application/ports/persistent-data-removal.js +12 -0
  864. package/node_modules/@nklisch/pi-plugins/dist/application/ports/persistent-data-removal.js.map +1 -0
  865. package/node_modules/@nklisch/pi-plugins/dist/application/ports/plugin-configuration-store.d.ts +99 -0
  866. package/node_modules/@nklisch/pi-plugins/dist/application/ports/plugin-configuration-store.js +13 -0
  867. package/node_modules/@nklisch/pi-plugins/dist/application/ports/plugin-configuration-store.js.map +1 -0
  868. package/node_modules/@nklisch/pi-plugins/dist/application/ports/process-runner.d.ts +35 -0
  869. package/node_modules/@nklisch/pi-plugins/dist/application/ports/process-runner.js +2 -0
  870. package/node_modules/@nklisch/pi-plugins/dist/application/ports/process-runner.js.map +1 -0
  871. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-file.d.ts +46 -0
  872. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-file.js +2 -0
  873. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-file.js.map +1 -0
  874. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-write-id.d.ts +6 -0
  875. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-write-id.js +5 -0
  876. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-intent-write-id.js.map +1 -0
  877. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-root-authority.d.ts +37 -0
  878. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-root-authority.js +2 -0
  879. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-root-authority.js.map +1 -0
  880. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-trust.d.ts +33 -0
  881. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-trust.js +12 -0
  882. package/node_modules/@nklisch/pi-plugins/dist/application/ports/project-trust.js.map +1 -0
  883. package/node_modules/@nklisch/pi-plugins/dist/application/ports/recovery-artifacts.d.ts +29 -0
  884. package/node_modules/@nklisch/pi-plugins/dist/application/ports/recovery-artifacts.js +4 -0
  885. package/node_modules/@nklisch/pi-plugins/dist/application/ports/recovery-artifacts.js.map +1 -0
  886. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-id.d.ts +6 -0
  887. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-id.js +3 -0
  888. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-id.js.map +1 -0
  889. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-owner.d.ts +8 -0
  890. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-owner.js +2 -0
  891. package/node_modules/@nklisch/pi-plugins/dist/application/ports/refresh-claim-owner.js.map +1 -0
  892. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-artifact-store.d.ts +37 -0
  893. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-artifact-store.js +10 -0
  894. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-artifact-store.js.map +1 -0
  895. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-lease-store.d.ts +65 -0
  896. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-lease-store.js +16 -0
  897. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-lease-store.js.map +1 -0
  898. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-retention-store.d.ts +43 -0
  899. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-retention-store.js +12 -0
  900. package/node_modules/@nklisch/pi-plugins/dist/application/ports/revision-retention-store.js.map +1 -0
  901. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-capability-probe.d.ts +8 -0
  902. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-capability-probe.js +2 -0
  903. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-capability-probe.js.map +1 -0
  904. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-projection.d.ts +1062 -0
  905. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-projection.js +275 -0
  906. package/node_modules/@nklisch/pi-plugins/dist/application/ports/runtime-projection.js.map +1 -0
  907. package/node_modules/@nklisch/pi-plugins/dist/application/ports/scope-lock.d.ts +15 -0
  908. package/node_modules/@nklisch/pi-plugins/dist/application/ports/scope-lock.js +2 -0
  909. package/node_modules/@nklisch/pi-plugins/dist/application/ports/scope-lock.js.map +1 -0
  910. package/node_modules/@nklisch/pi-plugins/dist/application/ports/secret-store.d.ts +100 -0
  911. package/node_modules/@nklisch/pi-plugins/dist/application/ports/secret-store.js +36 -0
  912. package/node_modules/@nklisch/pi-plugins/dist/application/ports/secret-store.js.map +1 -0
  913. package/node_modules/@nklisch/pi-plugins/dist/application/ports/skill-resource-path.d.ts +20 -0
  914. package/node_modules/@nklisch/pi-plugins/dist/application/ports/skill-resource-path.js +2 -0
  915. package/node_modules/@nklisch/pi-plugins/dist/application/ports/skill-resource-path.js.map +1 -0
  916. package/node_modules/@nklisch/pi-plugins/dist/application/ports/source-acquisition.d.ts +88 -0
  917. package/node_modules/@nklisch/pi-plugins/dist/application/ports/source-acquisition.js +13 -0
  918. package/node_modules/@nklisch/pi-plugins/dist/application/ports/source-acquisition.js.map +1 -0
  919. package/node_modules/@nklisch/pi-plugins/dist/application/ports/subagent-lifecycle.d.ts +289 -0
  920. package/node_modules/@nklisch/pi-plugins/dist/application/ports/subagent-lifecycle.js +197 -0
  921. package/node_modules/@nklisch/pi-plugins/dist/application/ports/subagent-lifecycle.js.map +1 -0
  922. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.d.ts +4 -0
  923. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.js +2 -0
  924. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-activation-context.js.map +1 -0
  925. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-delay.d.ts +4 -0
  926. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-delay.js +2 -0
  927. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-delay.js.map +1 -0
  928. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-notification-publisher.d.ts +16 -0
  929. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-notification-publisher.js +2 -0
  930. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-notification-publisher.js.map +1 -0
  931. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-policy-authority.d.ts +15 -0
  932. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-policy-authority.js +2 -0
  933. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-policy-authority.js.map +1 -0
  934. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease-id.d.ts +4 -0
  935. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease-id.js +2 -0
  936. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease-id.js.map +1 -0
  937. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease.d.ts +21 -0
  938. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease.js +2 -0
  939. package/node_modules/@nklisch/pi-plugins/dist/application/ports/update-scheduler-lease.js.map +1 -0
  940. package/node_modules/@nklisch/pi-plugins/dist/application/prepared-lifecycle-candidate.d.ts +7 -0
  941. package/node_modules/@nklisch/pi-plugins/dist/application/prepared-lifecycle-candidate.js +7 -0
  942. package/node_modules/@nklisch/pi-plugins/dist/application/prepared-lifecycle-candidate.js.map +1 -0
  943. package/node_modules/@nklisch/pi-plugins/dist/application/project-intent-codec.d.ts +18 -0
  944. package/node_modules/@nklisch/pi-plugins/dist/application/project-intent-codec.js +47 -0
  945. package/node_modules/@nklisch/pi-plugins/dist/application/project-intent-codec.js.map +1 -0
  946. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-contract.d.ts +833 -0
  947. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-contract.js +144 -0
  948. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-contract.js.map +1 -0
  949. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-planner.d.ts +36 -0
  950. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-planner.js +253 -0
  951. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-planner.js.map +1 -0
  952. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-projection.d.ts +42 -0
  953. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-projection.js +52 -0
  954. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-projection.js.map +1 -0
  955. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-service.d.ts +65 -0
  956. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-service.js +285 -0
  957. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-service.js.map +1 -0
  958. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-state.d.ts +20 -0
  959. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-state.js +22 -0
  960. package/node_modules/@nklisch/pi-plugins/dist/application/project-sync-state.js.map +1 -0
  961. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-contract.d.ts +1078 -0
  962. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-contract.js +126 -0
  963. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-contract.js.map +1 -0
  964. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-service.d.ts +39 -0
  965. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-service.js +170 -0
  966. package/node_modules/@nklisch/pi-plugins/dist/application/recovery-service.js.map +1 -0
  967. package/node_modules/@nklisch/pi-plugins/dist/application/resolved-configuration.d.ts +18 -0
  968. package/node_modules/@nklisch/pi-plugins/dist/application/resolved-configuration.js +74 -0
  969. package/node_modules/@nklisch/pi-plugins/dist/application/resolved-configuration.js.map +1 -0
  970. package/node_modules/@nklisch/pi-plugins/dist/application/revision-collection-service.d.ts +52 -0
  971. package/node_modules/@nklisch/pi-plugins/dist/application/revision-collection-service.js +228 -0
  972. package/node_modules/@nklisch/pi-plugins/dist/application/revision-collection-service.js.map +1 -0
  973. package/node_modules/@nklisch/pi-plugins/dist/application/runtime-projection-cache.d.ts +387 -0
  974. package/node_modules/@nklisch/pi-plugins/dist/application/runtime-projection-cache.js +128 -0
  975. package/node_modules/@nklisch/pi-plugins/dist/application/runtime-projection-cache.js.map +1 -0
  976. package/node_modules/@nklisch/pi-plugins/dist/application/sensitive-value.d.ts +9 -0
  977. package/node_modules/@nklisch/pi-plugins/dist/application/sensitive-value.js +50 -0
  978. package/node_modules/@nklisch/pi-plugins/dist/application/sensitive-value.js.map +1 -0
  979. package/node_modules/@nklisch/pi-plugins/dist/application/source-materialization.d.ts +62 -0
  980. package/node_modules/@nklisch/pi-plugins/dist/application/source-materialization.js +410 -0
  981. package/node_modules/@nklisch/pi-plugins/dist/application/source-materialization.js.map +1 -0
  982. package/node_modules/@nklisch/pi-plugins/dist/application/state-contract.d.ts +2731 -0
  983. package/node_modules/@nklisch/pi-plugins/dist/application/state-contract.js +200 -0
  984. package/node_modules/@nklisch/pi-plugins/dist/application/state-contract.js.map +1 -0
  985. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-hook-runtime.d.ts +18 -0
  986. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-hook-runtime.js +110 -0
  987. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-hook-runtime.js.map +1 -0
  988. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-lifecycle-capability-probe.d.ts +16 -0
  989. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-lifecycle-capability-probe.js +103 -0
  990. package/node_modules/@nklisch/pi-plugins/dist/application/subagent-lifecycle-capability-probe.js.map +1 -0
  991. package/node_modules/@nklisch/pi-plugins/dist/application/trust-service.d.ts +25 -0
  992. package/node_modules/@nklisch/pi-plugins/dist/application/trust-service.js +76 -0
  993. package/node_modules/@nklisch/pi-plugins/dist/application/trust-service.js.map +1 -0
  994. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-candidate.d.ts +55 -0
  995. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-candidate.js +319 -0
  996. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-candidate.js.map +1 -0
  997. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-configuration.d.ts +53 -0
  998. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-configuration.js +100 -0
  999. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-configuration.js.map +1 -0
  1000. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.d.ts +11773 -0
  1001. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.js +201 -0
  1002. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-contract.js.map +1 -0
  1003. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-identifiers.d.ts +10 -0
  1004. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-identifiers.js +49 -0
  1005. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-identifiers.js.map +1 -0
  1006. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-lifecycle.d.ts +30 -0
  1007. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-lifecycle.js +87 -0
  1008. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-lifecycle.js.map +1 -0
  1009. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-service.d.ts +31 -0
  1010. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-service.js +646 -0
  1011. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-service.js.map +1 -0
  1012. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-session.d.ts +65 -0
  1013. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-session.js +123 -0
  1014. package/node_modules/@nklisch/pi-plugins/dist/application/trusted-install-session.js.map +1 -0
  1015. package/node_modules/@nklisch/pi-plugins/dist/application/update-contract.d.ts +861 -0
  1016. package/node_modules/@nklisch/pi-plugins/dist/application/update-contract.js +63 -0
  1017. package/node_modules/@nklisch/pi-plugins/dist/application/update-contract.js.map +1 -0
  1018. package/node_modules/@nklisch/pi-plugins/dist/application/update-notification-service.d.ts +64 -0
  1019. package/node_modules/@nklisch/pi-plugins/dist/application/update-notification-service.js +317 -0
  1020. package/node_modules/@nklisch/pi-plugins/dist/application/update-notification-service.js.map +1 -0
  1021. package/node_modules/@nklisch/pi-plugins/dist/application/update-policy-resolution.d.ts +14 -0
  1022. package/node_modules/@nklisch/pi-plugins/dist/application/update-policy-resolution.js +37 -0
  1023. package/node_modules/@nklisch/pi-plugins/dist/application/update-policy-resolution.js.map +1 -0
  1024. package/node_modules/@nklisch/pi-plugins/dist/application/update-schedule.d.ts +12 -0
  1025. package/node_modules/@nklisch/pi-plugins/dist/application/update-schedule.js +44 -0
  1026. package/node_modules/@nklisch/pi-plugins/dist/application/update-schedule.js.map +1 -0
  1027. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-lease-state.d.ts +20 -0
  1028. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-lease-state.js +122 -0
  1029. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-lease-state.js.map +1 -0
  1030. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-status.d.ts +19 -0
  1031. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-status.js +28 -0
  1032. package/node_modules/@nklisch/pi-plugins/dist/application/update-scheduler-status.js.map +1 -0
  1033. package/node_modules/@nklisch/pi-plugins/dist/composition/automatic-update-lifecycle-adapter.d.ts +24 -0
  1034. package/node_modules/@nklisch/pi-plugins/dist/composition/automatic-update-lifecycle-adapter.js +178 -0
  1035. package/node_modules/@nklisch/pi-plugins/dist/composition/automatic-update-lifecycle-adapter.js.map +1 -0
  1036. package/node_modules/@nklisch/pi-plugins/dist/composition/background-update-coordinator.d.ts +19 -0
  1037. package/node_modules/@nklisch/pi-plugins/dist/composition/background-update-coordinator.js +74 -0
  1038. package/node_modules/@nklisch/pi-plugins/dist/composition/background-update-coordinator.js.map +1 -0
  1039. package/node_modules/@nklisch/pi-plugins/dist/composition/candidate-content-lease.d.ts +3 -0
  1040. package/node_modules/@nklisch/pi-plugins/dist/composition/candidate-content-lease.js +103 -0
  1041. package/node_modules/@nklisch/pi-plugins/dist/composition/candidate-content-lease.js.map +1 -0
  1042. package/node_modules/@nklisch/pi-plugins/dist/composition/complete-plugin-reload.d.ts +32 -0
  1043. package/node_modules/@nklisch/pi-plugins/dist/composition/complete-plugin-reload.js +175 -0
  1044. package/node_modules/@nklisch/pi-plugins/dist/composition/complete-plugin-reload.js.map +1 -0
  1045. package/node_modules/@nklisch/pi-plugins/dist/composition/create-adoption-service.d.ts +12 -0
  1046. package/node_modules/@nklisch/pi-plugins/dist/composition/create-adoption-service.js +31 -0
  1047. package/node_modules/@nklisch/pi-plugins/dist/composition/create-adoption-service.js.map +1 -0
  1048. package/node_modules/@nklisch/pi-plugins/dist/composition/create-host-configuration.d.ts +26 -0
  1049. package/node_modules/@nklisch/pi-plugins/dist/composition/create-host-configuration.js +37 -0
  1050. package/node_modules/@nklisch/pi-plugins/dist/composition/create-host-configuration.js.map +1 -0
  1051. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-discovery-services.d.ts +82 -0
  1052. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-discovery-services.js +162 -0
  1053. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-discovery-services.js.map +1 -0
  1054. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-refresh-services.d.ts +5 -0
  1055. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-refresh-services.js +6 -0
  1056. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-refresh-services.js.map +1 -0
  1057. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-update-services.d.ts +25 -0
  1058. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-update-services.js +42 -0
  1059. package/node_modules/@nklisch/pi-plugins/dist/composition/create-marketplace-update-services.js.map +1 -0
  1060. package/node_modules/@nklisch/pi-plugins/dist/composition/create-mcp-runtime.d.ts +37 -0
  1061. package/node_modules/@nklisch/pi-plugins/dist/composition/create-mcp-runtime.js +121 -0
  1062. package/node_modules/@nklisch/pi-plugins/dist/composition/create-mcp-runtime.js.map +1 -0
  1063. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-current-project.d.ts +12 -0
  1064. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-current-project.js +31 -0
  1065. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-current-project.js.map +1 -0
  1066. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-service.d.ts +9 -0
  1067. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-service.js +6 -0
  1068. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-control-service.js.map +1 -0
  1069. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-inspection-service.d.ts +51 -0
  1070. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-inspection-service.js +54 -0
  1071. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-inspection-service.js.map +1 -0
  1072. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-lifecycle-operation-service.d.ts +56 -0
  1073. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-lifecycle-operation-service.js +57 -0
  1074. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-lifecycle-operation-service.js.map +1 -0
  1075. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.d.ts +39 -0
  1076. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.js +50 -0
  1077. package/node_modules/@nklisch/pi-plugins/dist/composition/create-native-update-management-service.js.map +1 -0
  1078. package/node_modules/@nklisch/pi-plugins/dist/composition/create-packaged-plugin-host.d.ts +3 -0
  1079. package/node_modules/@nklisch/pi-plugins/dist/composition/create-packaged-plugin-host.js +840 -0
  1080. package/node_modules/@nklisch/pi-plugins/dist/composition/create-packaged-plugin-host.js.map +1 -0
  1081. package/node_modules/@nklisch/pi-plugins/dist/composition/create-plugin-inspector.d.ts +13 -0
  1082. package/node_modules/@nklisch/pi-plugins/dist/composition/create-plugin-inspector.js +53 -0
  1083. package/node_modules/@nklisch/pi-plugins/dist/composition/create-plugin-inspector.js.map +1 -0
  1084. package/node_modules/@nklisch/pi-plugins/dist/composition/create-project-root-authority.d.ts +11 -0
  1085. package/node_modules/@nklisch/pi-plugins/dist/composition/create-project-root-authority.js +128 -0
  1086. package/node_modules/@nklisch/pi-plugins/dist/composition/create-project-root-authority.js.map +1 -0
  1087. package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.d.ts +42 -0
  1088. package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.js +168 -0
  1089. package/node_modules/@nklisch/pi-plugins/dist/composition/create-skill-hook-runtime.js.map +1 -0
  1090. package/node_modules/@nklisch/pi-plugins/dist/composition/create-subagent-lifecycle.d.ts +6 -0
  1091. package/node_modules/@nklisch/pi-plugins/dist/composition/create-subagent-lifecycle.js +9 -0
  1092. package/node_modules/@nklisch/pi-plugins/dist/composition/create-subagent-lifecycle.js.map +1 -0
  1093. package/node_modules/@nklisch/pi-plugins/dist/composition/create-trusted-installation-service.d.ts +46 -0
  1094. package/node_modules/@nklisch/pi-plugins/dist/composition/create-trusted-installation-service.js +49 -0
  1095. package/node_modules/@nklisch/pi-plugins/dist/composition/create-trusted-installation-service.js.map +1 -0
  1096. package/node_modules/@nklisch/pi-plugins/dist/composition/host-status-service.d.ts +20 -0
  1097. package/node_modules/@nklisch/pi-plugins/dist/composition/host-status-service.js +35 -0
  1098. package/node_modules/@nklisch/pi-plugins/dist/composition/host-status-service.js.map +1 -0
  1099. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-evidence.d.ts +40 -0
  1100. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-evidence.js +269 -0
  1101. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-evidence.js.map +1 -0
  1102. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-readiness.d.ts +14 -0
  1103. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-readiness.js +127 -0
  1104. package/node_modules/@nklisch/pi-plugins/dist/composition/native-inspection-readiness.js.map +1 -0
  1105. package/node_modules/@nklisch/pi-plugins/dist/composition/node-pi-runtime-capability-probe.d.ts +8 -0
  1106. package/node_modules/@nklisch/pi-plugins/dist/composition/node-pi-runtime-capability-probe.js +60 -0
  1107. package/node_modules/@nklisch/pi-plugins/dist/composition/node-pi-runtime-capability-probe.js.map +1 -0
  1108. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-host-startup.d.ts +19 -0
  1109. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-host-startup.js +39 -0
  1110. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-host-startup.js.map +1 -0
  1111. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-plugin-host-contract.d.ts +69 -0
  1112. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-plugin-host-contract.js +22 -0
  1113. package/node_modules/@nklisch/pi-plugins/dist/composition/packaged-plugin-host-contract.js.map +1 -0
  1114. package/node_modules/@nklisch/pi-plugins/dist/composition/plugin-host-paths.d.ts +15 -0
  1115. package/node_modules/@nklisch/pi-plugins/dist/composition/plugin-host-paths.js +44 -0
  1116. package/node_modules/@nklisch/pi-plugins/dist/composition/plugin-host-paths.js.map +1 -0
  1117. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-desired-state.d.ts +45 -0
  1118. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-desired-state.js +241 -0
  1119. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-desired-state.js.map +1 -0
  1120. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-participant-qualification.d.ts +46 -0
  1121. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-participant-qualification.js +111 -0
  1122. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-participant-qualification.js.map +1 -0
  1123. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-selection-catalog.d.ts +36 -0
  1124. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-selection-catalog.js +221 -0
  1125. package/node_modules/@nklisch/pi-plugins/dist/composition/runtime-selection-catalog.js.map +1 -0
  1126. package/node_modules/@nklisch/pi-plugins/dist/composition/sequential-cleanup.d.ts +1 -0
  1127. package/node_modules/@nklisch/pi-plugins/dist/composition/sequential-cleanup.js +14 -0
  1128. package/node_modules/@nklisch/pi-plugins/dist/composition/sequential-cleanup.js.map +1 -0
  1129. package/node_modules/@nklisch/pi-plugins/dist/domain/adoption.d.ts +210 -0
  1130. package/node_modules/@nklisch/pi-plugins/dist/domain/adoption.js +178 -0
  1131. package/node_modules/@nklisch/pi-plugins/dist/domain/adoption.js.map +1 -0
  1132. package/node_modules/@nklisch/pi-plugins/dist/domain/bundle-ingestion.d.ts +532 -0
  1133. package/node_modules/@nklisch/pi-plugins/dist/domain/bundle-ingestion.js +116 -0
  1134. package/node_modules/@nklisch/pi-plugins/dist/domain/bundle-ingestion.js.map +1 -0
  1135. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-json.d.ts +9 -0
  1136. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-json.js +65 -0
  1137. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-json.js.map +1 -0
  1138. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-order.d.ts +11 -0
  1139. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-order.js +71 -0
  1140. package/node_modules/@nklisch/pi-plugins/dist/domain/canonical-order.js.map +1 -0
  1141. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-evaluator.d.ts +768 -0
  1142. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-evaluator.js +730 -0
  1143. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-evaluator.js.map +1 -0
  1144. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-policy.d.ts +1341 -0
  1145. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-policy.js +913 -0
  1146. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility-policy.js.map +1 -0
  1147. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility.d.ts +367 -0
  1148. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility.js +222 -0
  1149. package/node_modules/@nklisch/pi-plugins/dist/domain/compatibility.js.map +1 -0
  1150. package/node_modules/@nklisch/pi-plugins/dist/domain/component-identity.d.ts +86 -0
  1151. package/node_modules/@nklisch/pi-plugins/dist/domain/component-identity.js +206 -0
  1152. package/node_modules/@nklisch/pi-plugins/dist/domain/component-identity.js.map +1 -0
  1153. package/node_modules/@nklisch/pi-plugins/dist/domain/components.d.ts +1643 -0
  1154. package/node_modules/@nklisch/pi-plugins/dist/domain/components.js +152 -0
  1155. package/node_modules/@nklisch/pi-plugins/dist/domain/components.js.map +1 -0
  1156. package/node_modules/@nklisch/pi-plugins/dist/domain/configuration.d.ts +352 -0
  1157. package/node_modules/@nklisch/pi-plugins/dist/domain/configuration.js +295 -0
  1158. package/node_modules/@nklisch/pi-plugins/dist/domain/configuration.js.map +1 -0
  1159. package/node_modules/@nklisch/pi-plugins/dist/domain/configured-values.d.ts +152 -0
  1160. package/node_modules/@nklisch/pi-plugins/dist/domain/configured-values.js +273 -0
  1161. package/node_modules/@nklisch/pi-plugins/dist/domain/configured-values.js.map +1 -0
  1162. package/node_modules/@nklisch/pi-plugins/dist/domain/content-manifest.d.ts +72 -0
  1163. package/node_modules/@nklisch/pi-plugins/dist/domain/content-manifest.js +425 -0
  1164. package/node_modules/@nklisch/pi-plugins/dist/domain/content-manifest.js.map +1 -0
  1165. package/node_modules/@nklisch/pi-plugins/dist/domain/content-store.d.ts +72 -0
  1166. package/node_modules/@nklisch/pi-plugins/dist/domain/content-store.js +149 -0
  1167. package/node_modules/@nklisch/pi-plugins/dist/domain/content-store.js.map +1 -0
  1168. package/node_modules/@nklisch/pi-plugins/dist/domain/domain-error.d.ts +11 -0
  1169. package/node_modules/@nklisch/pi-plugins/dist/domain/domain-error.js +46 -0
  1170. package/node_modules/@nklisch/pi-plugins/dist/domain/domain-error.js.map +1 -0
  1171. package/node_modules/@nklisch/pi-plugins/dist/domain/error-contract.d.ts +145 -0
  1172. package/node_modules/@nklisch/pi-plugins/dist/domain/error-contract.js +62 -0
  1173. package/node_modules/@nklisch/pi-plugins/dist/domain/error-contract.js.map +1 -0
  1174. package/node_modules/@nklisch/pi-plugins/dist/domain/errors.d.ts +231 -0
  1175. package/node_modules/@nklisch/pi-plugins/dist/domain/errors.js +100 -0
  1176. package/node_modules/@nklisch/pi-plugins/dist/domain/errors.js.map +1 -0
  1177. package/node_modules/@nklisch/pi-plugins/dist/domain/executable-surface.d.ts +187 -0
  1178. package/node_modules/@nklisch/pi-plugins/dist/domain/executable-surface.js +216 -0
  1179. package/node_modules/@nklisch/pi-plugins/dist/domain/executable-surface.js.map +1 -0
  1180. package/node_modules/@nklisch/pi-plugins/dist/domain/foreign-identity.d.ts +17 -0
  1181. package/node_modules/@nklisch/pi-plugins/dist/domain/foreign-identity.js +94 -0
  1182. package/node_modules/@nklisch/pi-plugins/dist/domain/foreign-identity.js.map +1 -0
  1183. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-execution-binding.d.ts +16 -0
  1184. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-execution-binding.js +2 -0
  1185. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-execution-binding.js.map +1 -0
  1186. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-output-contract.d.ts +153 -0
  1187. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-output-contract.js +55 -0
  1188. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-output-contract.js.map +1 -0
  1189. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-contract.d.ts +418 -0
  1190. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-contract.js +243 -0
  1191. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-contract.js.map +1 -0
  1192. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-limits.d.ts +25 -0
  1193. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-limits.js +26 -0
  1194. package/node_modules/@nklisch/pi-plugins/dist/domain/hook-runtime-limits.js.map +1 -0
  1195. package/node_modules/@nklisch/pi-plugins/dist/domain/host-precedence.d.ts +20 -0
  1196. package/node_modules/@nklisch/pi-plugins/dist/domain/host-precedence.js +21 -0
  1197. package/node_modules/@nklisch/pi-plugins/dist/domain/host-precedence.js.map +1 -0
  1198. package/node_modules/@nklisch/pi-plugins/dist/domain/identity.d.ts +30 -0
  1199. package/node_modules/@nklisch/pi-plugins/dist/domain/identity.js +59 -0
  1200. package/node_modules/@nklisch/pi-plugins/dist/domain/identity.js.map +1 -0
  1201. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace-registration.d.ts +38 -0
  1202. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace-registration.js +68 -0
  1203. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace-registration.js.map +1 -0
  1204. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace.d.ts +1662 -0
  1205. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace.js +197 -0
  1206. package/node_modules/@nklisch/pi-plugins/dist/domain/marketplace.js.map +1 -0
  1207. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-compatibility-plan.d.ts +160 -0
  1208. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-compatibility-plan.js +803 -0
  1209. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-compatibility-plan.js.map +1 -0
  1210. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-endpoint-security.d.ts +17 -0
  1211. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-endpoint-security.js +72 -0
  1212. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-endpoint-security.js.map +1 -0
  1213. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-late-values.d.ts +11 -0
  1214. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-late-values.js +53 -0
  1215. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-late-values.js.map +1 -0
  1216. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-launch-template.d.ts +61 -0
  1217. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-launch-template.js +264 -0
  1218. package/node_modules/@nklisch/pi-plugins/dist/domain/mcp-launch-template.js.map +1 -0
  1219. package/node_modules/@nklisch/pi-plugins/dist/domain/plugin.d.ts +651 -0
  1220. package/node_modules/@nklisch/pi-plugins/dist/domain/plugin.js +19 -0
  1221. package/node_modules/@nklisch/pi-plugins/dist/domain/plugin.js.map +1 -0
  1222. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance-location.d.ts +36 -0
  1223. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance-location.js +28 -0
  1224. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance-location.js.map +1 -0
  1225. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance.d.ts +70 -0
  1226. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance.js +164 -0
  1227. package/node_modules/@nklisch/pi-plugins/dist/domain/provenance.js.map +1 -0
  1228. package/node_modules/@nklisch/pi-plugins/dist/domain/schema.d.ts +21 -0
  1229. package/node_modules/@nklisch/pi-plugins/dist/domain/schema.js +31 -0
  1230. package/node_modules/@nklisch/pi-plugins/dist/domain/schema.js.map +1 -0
  1231. package/node_modules/@nklisch/pi-plugins/dist/domain/sensitive-fields.d.ts +7 -0
  1232. package/node_modules/@nklisch/pi-plugins/dist/domain/sensitive-fields.js +13 -0
  1233. package/node_modules/@nklisch/pi-plugins/dist/domain/sensitive-fields.js.map +1 -0
  1234. package/node_modules/@nklisch/pi-plugins/dist/domain/source.d.ts +304 -0
  1235. package/node_modules/@nklisch/pi-plugins/dist/domain/source.js +873 -0
  1236. package/node_modules/@nklisch/pi-plugins/dist/domain/source.js.map +1 -0
  1237. package/node_modules/@nklisch/pi-plugins/dist/domain/state/codec.d.ts +145 -0
  1238. package/node_modules/@nklisch/pi-plugins/dist/domain/state/codec.js +576 -0
  1239. package/node_modules/@nklisch/pi-plugins/dist/domain/state/codec.js.map +1 -0
  1240. package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.d.ts +447 -0
  1241. package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.js +58 -0
  1242. package/node_modules/@nklisch/pi-plugins/dist/domain/state/config-state.js.map +1 -0
  1243. package/node_modules/@nklisch/pi-plugins/dist/domain/state/installed-state.d.ts +435 -0
  1244. package/node_modules/@nklisch/pi-plugins/dist/domain/state/installed-state.js +484 -0
  1245. package/node_modules/@nklisch/pi-plugins/dist/domain/state/installed-state.js.map +1 -0
  1246. package/node_modules/@nklisch/pi-plugins/dist/domain/state/pointers.d.ts +97 -0
  1247. package/node_modules/@nklisch/pi-plugins/dist/domain/state/pointers.js +108 -0
  1248. package/node_modules/@nklisch/pi-plugins/dist/domain/state/pointers.js.map +1 -0
  1249. package/node_modules/@nklisch/pi-plugins/dist/domain/state/portable-project-declaration.d.ts +275 -0
  1250. package/node_modules/@nklisch/pi-plugins/dist/domain/state/portable-project-declaration.js +389 -0
  1251. package/node_modules/@nklisch/pi-plugins/dist/domain/state/portable-project-declaration.js.map +1 -0
  1252. package/node_modules/@nklisch/pi-plugins/dist/domain/state/project-state.d.ts +329 -0
  1253. package/node_modules/@nklisch/pi-plugins/dist/domain/state/project-state.js +185 -0
  1254. package/node_modules/@nklisch/pi-plugins/dist/domain/state/project-state.js.map +1 -0
  1255. package/node_modules/@nklisch/pi-plugins/dist/domain/state/references.d.ts +85 -0
  1256. package/node_modules/@nklisch/pi-plugins/dist/domain/state/references.js +225 -0
  1257. package/node_modules/@nklisch/pi-plugins/dist/domain/state/references.js.map +1 -0
  1258. package/node_modules/@nklisch/pi-plugins/dist/domain/state/registry.d.ts +771 -0
  1259. package/node_modules/@nklisch/pi-plugins/dist/domain/state/registry.js +57 -0
  1260. package/node_modules/@nklisch/pi-plugins/dist/domain/state/registry.js.map +1 -0
  1261. package/node_modules/@nklisch/pi-plugins/dist/domain/state/scope.d.ts +53 -0
  1262. package/node_modules/@nklisch/pi-plugins/dist/domain/state/scope.js +270 -0
  1263. package/node_modules/@nklisch/pi-plugins/dist/domain/state/scope.js.map +1 -0
  1264. package/node_modules/@nklisch/pi-plugins/dist/domain/state/trust-state.d.ts +98 -0
  1265. package/node_modules/@nklisch/pi-plugins/dist/domain/state/trust-state.js +143 -0
  1266. package/node_modules/@nklisch/pi-plugins/dist/domain/state/trust-state.js.map +1 -0
  1267. package/node_modules/@nklisch/pi-plugins/dist/domain/time.d.ts +4 -0
  1268. package/node_modules/@nklisch/pi-plugins/dist/domain/time.js +4 -0
  1269. package/node_modules/@nklisch/pi-plugins/dist/domain/time.js.map +1 -0
  1270. package/node_modules/@nklisch/pi-plugins/dist/domain/trust-policy.d.ts +181 -0
  1271. package/node_modules/@nklisch/pi-plugins/dist/domain/trust-policy.js +237 -0
  1272. package/node_modules/@nklisch/pi-plugins/dist/domain/trust-policy.js.map +1 -0
  1273. package/node_modules/@nklisch/pi-plugins/dist/domain/update-policy.d.ts +818 -0
  1274. package/node_modules/@nklisch/pi-plugins/dist/domain/update-policy.js +315 -0
  1275. package/node_modules/@nklisch/pi-plugins/dist/domain/update-policy.js.map +1 -0
  1276. package/node_modules/@nklisch/pi-plugins/dist/formats/adoption-reader-support.d.ts +40 -0
  1277. package/node_modules/@nklisch/pi-plugins/dist/formats/adoption-reader-support.js +100 -0
  1278. package/node_modules/@nklisch/pi-plugins/dist/formats/adoption-reader-support.js.map +1 -0
  1279. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/frontmatter-reader.d.ts +18 -0
  1280. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/frontmatter-reader.js +345 -0
  1281. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/frontmatter-reader.js.map +1 -0
  1282. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/skill-reader.d.ts +18 -0
  1283. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/skill-reader.js +197 -0
  1284. package/node_modules/@nklisch/pi-plugins/dist/formats/agent-skills/skill-reader.js.map +1 -0
  1285. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/hook-reader.d.ts +5 -0
  1286. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/hook-reader.js +12 -0
  1287. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/hook-reader.js.map +1 -0
  1288. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/manifest-reader.d.ts +4 -0
  1289. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/manifest-reader.js +50 -0
  1290. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/manifest-reader.js.map +1 -0
  1291. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/marketplace-reader.d.ts +5 -0
  1292. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/marketplace-reader.js +275 -0
  1293. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/marketplace-reader.js.map +1 -0
  1294. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/mcp-reader.d.ts +5 -0
  1295. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/mcp-reader.js +5 -0
  1296. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/mcp-reader.js.map +1 -0
  1297. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/state-reader.d.ts +97 -0
  1298. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/state-reader.js +139 -0
  1299. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/state-reader.js.map +1 -0
  1300. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/user-config-reader.d.ts +18 -0
  1301. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/user-config-reader.js +240 -0
  1302. package/node_modules/@nklisch/pi-plugins/dist/formats/claude/user-config-reader.js.map +1 -0
  1303. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/hook-reader.d.ts +5 -0
  1304. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/hook-reader.js +12 -0
  1305. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/hook-reader.js.map +1 -0
  1306. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/manifest-reader.d.ts +4 -0
  1307. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/manifest-reader.js +22 -0
  1308. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/manifest-reader.js.map +1 -0
  1309. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/marketplace-reader.d.ts +5 -0
  1310. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/marketplace-reader.js +253 -0
  1311. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/marketplace-reader.js.map +1 -0
  1312. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/mcp-reader.d.ts +5 -0
  1313. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/mcp-reader.js +5 -0
  1314. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/mcp-reader.js.map +1 -0
  1315. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/state-reader.d.ts +50 -0
  1316. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/state-reader.js +111 -0
  1317. package/node_modules/@nklisch/pi-plugins/dist/formats/codex/state-reader.js.map +1 -0
  1318. package/node_modules/@nklisch/pi-plugins/dist/formats/foreign-declaration.d.ts +29 -0
  1319. package/node_modules/@nklisch/pi-plugins/dist/formats/foreign-declaration.js +121 -0
  1320. package/node_modules/@nklisch/pi-plugins/dist/formats/foreign-declaration.js.map +1 -0
  1321. package/node_modules/@nklisch/pi-plugins/dist/formats/hook-reader-support.d.ts +44 -0
  1322. package/node_modules/@nklisch/pi-plugins/dist/formats/hook-reader-support.js +456 -0
  1323. package/node_modules/@nklisch/pi-plugins/dist/formats/hook-reader-support.js.map +1 -0
  1324. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-merger.d.ts +22 -0
  1325. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-merger.js +570 -0
  1326. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-merger.js.map +1 -0
  1327. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-reader-support.d.ts +131 -0
  1328. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-reader-support.js +783 -0
  1329. package/node_modules/@nklisch/pi-plugins/dist/formats/marketplace-reader-support.js.map +1 -0
  1330. package/node_modules/@nklisch/pi-plugins/dist/formats/mcp-reader-support.d.ts +19 -0
  1331. package/node_modules/@nklisch/pi-plugins/dist/formats/mcp-reader-support.js +215 -0
  1332. package/node_modules/@nklisch/pi-plugins/dist/formats/mcp-reader-support.js.map +1 -0
  1333. package/node_modules/@nklisch/pi-plugins/dist/formats/plugin-manifest.d.ts +24 -0
  1334. package/node_modules/@nklisch/pi-plugins/dist/formats/plugin-manifest.js +288 -0
  1335. package/node_modules/@nklisch/pi-plugins/dist/formats/plugin-manifest.js.map +1 -0
  1336. package/node_modules/@nklisch/pi-plugins/dist/formats/stable-component-id.d.ts +5 -0
  1337. package/node_modules/@nklisch/pi-plugins/dist/formats/stable-component-id.js +108 -0
  1338. package/node_modules/@nklisch/pi-plugins/dist/formats/stable-component-id.js.map +1 -0
  1339. package/node_modules/@nklisch/pi-plugins/dist/index.d.ts +335 -0
  1340. package/node_modules/@nklisch/pi-plugins/dist/index.js +181 -0
  1341. package/node_modules/@nklisch/pi-plugins/dist/index.js.map +1 -0
  1342. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/adoption/node-foreign-state-files.d.ts +28 -0
  1343. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/adoption/node-foreign-state-files.js +208 -0
  1344. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/adoption/node-foreign-state-files.js.map +1 -0
  1345. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/archive/tar-reader.d.ts +15 -0
  1346. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/archive/tar-reader.js +516 -0
  1347. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/archive/tar-reader.js.map +1 -0
  1348. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/node-configuration-path.d.ts +13 -0
  1349. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/node-configuration-path.js +49 -0
  1350. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/node-configuration-path.js.map +1 -0
  1351. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/sqlite-plugin-configuration-store.d.ts +13 -0
  1352. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/sqlite-plugin-configuration-store.js +165 -0
  1353. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/configuration/sqlite-plugin-configuration-store.js.map +1 -0
  1354. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-headless-runner.d.ts +20 -0
  1355. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-headless-runner.js +205 -0
  1356. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-headless-runner.js.map +1 -0
  1357. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-input.d.ts +10 -0
  1358. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-input.js +229 -0
  1359. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-control-input.js.map +1 -0
  1360. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-json-lines-sink.d.ts +7 -0
  1361. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-json-lines-sink.js +126 -0
  1362. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/control/node-json-lines-sink.js.map +1 -0
  1363. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/environment/node-mcp-launch-environment.d.ts +3 -0
  1364. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/environment/node-mcp-launch-environment.js +67 -0
  1365. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/environment/node-mcp-launch-environment.js.map +1 -0
  1366. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-root-resolver.d.ts +13 -0
  1367. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-root-resolver.js +156 -0
  1368. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-root-resolver.js.map +1 -0
  1369. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-durability.d.ts +15 -0
  1370. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-durability.js +165 -0
  1371. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-durability.js.map +1 -0
  1372. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-layout.d.ts +56 -0
  1373. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-layout.js +280 -0
  1374. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/content-store-layout.js.map +1 -0
  1375. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/create-content-store.d.ts +29 -0
  1376. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/create-content-store.js +50 -0
  1377. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/create-content-store.js.map +1 -0
  1378. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/immutable-content-store.d.ts +2029 -0
  1379. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/immutable-content-store.js +541 -0
  1380. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/immutable-content-store.js.map +1 -0
  1381. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/installed-plugin-loader.d.ts +15 -0
  1382. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/installed-plugin-loader.js +80 -0
  1383. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/installed-plugin-loader.js.map +1 -0
  1384. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-backed-file.d.ts +15 -0
  1385. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-backed-file.js +169 -0
  1386. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-backed-file.js.map +1 -0
  1387. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-content-reader.d.ts +7 -0
  1388. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-content-reader.js +55 -0
  1389. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-content-reader.js.map +1 -0
  1390. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-skill-path-verifier.d.ts +6 -0
  1391. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-skill-path-verifier.js +73 -0
  1392. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/manifest-skill-path-verifier.js.map +1 -0
  1393. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/marketplace-local-source.d.ts +3 -0
  1394. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/marketplace-local-source.js +24 -0
  1395. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/marketplace-local-source.js.map +1 -0
  1396. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/persistent-data-removal.d.ts +8 -0
  1397. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/persistent-data-removal.js +37 -0
  1398. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/persistent-data-removal.js.map +1 -0
  1399. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/prepared-tree-cleanup.d.ts +11 -0
  1400. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/prepared-tree-cleanup.js +76 -0
  1401. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/prepared-tree-cleanup.js.map +1 -0
  1402. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-projection-cache.d.ts +10 -0
  1403. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-projection-cache.js +119 -0
  1404. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-projection-cache.js.map +1 -0
  1405. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-root-store.d.ts +55 -0
  1406. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-root-store.js +682 -0
  1407. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/runtime-root-store.js.map +1 -0
  1408. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/secure-content-writer.d.ts +34 -0
  1409. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/secure-content-writer.js +803 -0
  1410. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/secure-content-writer.js.map +1 -0
  1411. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/staging-allocator.d.ts +27 -0
  1412. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/staging-allocator.js +185 -0
  1413. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/filesystem/staging-allocator.js.map +1 -0
  1414. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/git/git-source-acquirer.d.ts +15 -0
  1415. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/git/git-source-acquirer.js +560 -0
  1416. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/git/git-source-acquirer.js.map +1 -0
  1417. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/http/bounded-fetch.d.ts +59 -0
  1418. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/http/bounded-fetch.js +381 -0
  1419. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/http/bounded-fetch.js.map +1 -0
  1420. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/logging/redaction.d.ts +13 -0
  1421. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/logging/redaction.js +63 -0
  1422. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/logging/redaction.js.map +1 -0
  1423. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/network/network-egress-policy.d.ts +35 -0
  1424. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/network/network-egress-policy.js +251 -0
  1425. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/network/network-egress-policy.js.map +1 -0
  1426. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-control-timeout.d.ts +2 -0
  1427. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-control-timeout.js +26 -0
  1428. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-control-timeout.js.map +1 -0
  1429. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-identifiers.d.ts +16 -0
  1430. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-identifiers.js +47 -0
  1431. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-identifiers.js.map +1 -0
  1432. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-lifecycle-clock.d.ts +4 -0
  1433. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-lifecycle-clock.js +15 -0
  1434. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/node/node-lifecycle-clock.js.map +1 -0
  1435. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-registry-client.d.ts +28 -0
  1436. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-registry-client.js +392 -0
  1437. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-registry-client.js.map +1 -0
  1438. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-source-acquirer.d.ts +11 -0
  1439. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-source-acquirer.js +147 -0
  1440. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/npm/npm-source-acquirer.js.map +1 -0
  1441. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/command-runner.d.ts +17 -0
  1442. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/command-runner.js +334 -0
  1443. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/command-runner.js.map +1 -0
  1444. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/hook-executable-resolver.d.ts +13 -0
  1445. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/hook-executable-resolver.js +90 -0
  1446. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/hook-executable-resolver.js.map +1 -0
  1447. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/process-identity.d.ts +15 -0
  1448. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/process-identity.js +35 -0
  1449. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/process-identity.js.map +1 -0
  1450. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/refresh-claim-owner.d.ts +3 -0
  1451. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/refresh-claim-owner.js +13 -0
  1452. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/process/refresh-claim-owner.js.map +1 -0
  1453. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-intent-file.d.ts +7 -0
  1454. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-intent-file.js +314 -0
  1455. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-intent-file.js.map +1 -0
  1456. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-path-authority.d.ts +20 -0
  1457. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-path-authority.js +83 -0
  1458. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-path-authority.js.map +1 -0
  1459. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-root-resolver.d.ts +15 -0
  1460. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-root-resolver.js +73 -0
  1461. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/project/node-project-root-resolver.js.map +1 -0
  1462. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/create-node-recovery-adapters.d.ts +23 -0
  1463. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/create-node-recovery-adapters.js +81 -0
  1464. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/create-node-recovery-adapters.js.map +1 -0
  1465. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.d.ts +17 -0
  1466. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.js +84 -0
  1467. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/local-recovery-filesystem.js.map +1 -0
  1468. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/process-revision-leases.d.ts +7 -0
  1469. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/process-revision-leases.js +97 -0
  1470. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/process-revision-leases.js.map +1 -0
  1471. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/recovery-artifact-scanner.d.ts +3 -0
  1472. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/recovery-artifact-scanner.js +83 -0
  1473. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/recovery-artifact-scanner.js.map +1 -0
  1474. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/revision-artifact-store.d.ts +3 -0
  1475. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/revision-artifact-store.js +178 -0
  1476. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/revision-artifact-store.js.map +1 -0
  1477. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-revision-retention.d.ts +7 -0
  1478. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-revision-retention.js +73 -0
  1479. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-revision-retention.js.map +1 -0
  1480. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-transition-journal.d.ts +24 -0
  1481. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-transition-journal.js +463 -0
  1482. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/recovery/sqlite-transition-journal.js.map +1 -0
  1483. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/create-platform-secret-store.d.ts +20 -0
  1484. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/create-platform-secret-store.js +23 -0
  1485. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/create-platform-secret-store.js.map +1 -0
  1486. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/unavailable-secret-store.d.ts +10 -0
  1487. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/unavailable-secret-store.js +22 -0
  1488. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/secrets/unavailable-secret-store.js.map +1 -0
  1489. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/source/create-source-materializers.d.ts +27 -0
  1490. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/source/create-source-materializers.js +75 -0
  1491. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/source/create-source-materializers.js.map +1 -0
  1492. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.d.ts +22 -0
  1493. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.js +256 -0
  1494. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/identity-bound-sqlite.js.map +1 -0
  1495. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/keyed-mutation-scheduler.d.ts +5 -0
  1496. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/keyed-mutation-scheduler.js +17 -0
  1497. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/keyed-mutation-scheduler.js.map +1 -0
  1498. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/lifecycle-state-defaults.d.ts +13 -0
  1499. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/lifecycle-state-defaults.js +36 -0
  1500. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/lifecycle-state-defaults.js.map +1 -0
  1501. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/local-lock-filesystem.d.ts +10 -0
  1502. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/local-lock-filesystem.js +101 -0
  1503. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/local-lock-filesystem.js.map +1 -0
  1504. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-lifecycle-state-store.d.ts +30 -0
  1505. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-lifecycle-state-store.js +502 -0
  1506. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-lifecycle-state-store.js.map +1 -0
  1507. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.d.ts +25 -0
  1508. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.js +826 -0
  1509. package/node_modules/@nklisch/pi-plugins/dist/infrastructure/state/sqlite-scope-lock.js.map +1 -0
  1510. package/node_modules/@nklisch/pi-plugins/dist/pi/extension.d.ts +3 -0
  1511. package/node_modules/@nklisch/pi-plugins/dist/pi/extension.js +40 -0
  1512. package/node_modules/@nklisch/pi-plugins/dist/pi/extension.js.map +1 -0
  1513. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-command-hook-runtime.d.ts +18 -0
  1514. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-command-hook-runtime.js +181 -0
  1515. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-command-hook-runtime.js.map +1 -0
  1516. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.d.ts +23 -0
  1517. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.js +118 -0
  1518. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-decision-adapter.js.map +1 -0
  1519. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-event-adapter.d.ts +25 -0
  1520. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-event-adapter.js +48 -0
  1521. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-hook-event-adapter.js.map +1 -0
  1522. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-session-evidence.d.ts +5 -0
  1523. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-session-evidence.js +28 -0
  1524. package/node_modules/@nklisch/pi-plugins/dist/pi/hooks/pi-session-evidence.js.map +1 -0
  1525. package/node_modules/@nklisch/pi-plugins/dist/pi/index.d.ts +4 -0
  1526. package/node_modules/@nklisch/pi-plugins/dist/pi/index.js +3 -0
  1527. package/node_modules/@nklisch/pi-plugins/dist/pi/index.js.map +1 -0
  1528. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/confirmation-surface.d.ts +36 -0
  1529. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/confirmation-surface.js +106 -0
  1530. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/confirmation-surface.js.map +1 -0
  1531. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/masked-input-surface.d.ts +32 -0
  1532. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/masked-input-surface.js +114 -0
  1533. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/masked-input-surface.js.map +1 -0
  1534. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-control-input.d.ts +30 -0
  1535. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-control-input.js +196 -0
  1536. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-control-input.js.map +1 -0
  1537. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-manager-frame-sink.d.ts +7 -0
  1538. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-manager-frame-sink.js +22 -0
  1539. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-manager-frame-sink.js.map +1 -0
  1540. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-terminal-text.d.ts +13 -0
  1541. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-terminal-text.js +32 -0
  1542. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/pi-terminal-text.js.map +1 -0
  1543. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-component.d.ts +42 -0
  1544. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-component.js +339 -0
  1545. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-component.js.map +1 -0
  1546. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-flow.d.ts +76 -0
  1547. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-flow.js +115 -0
  1548. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-install-flow.js.map +1 -0
  1549. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.d.ts +93 -0
  1550. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.js +193 -0
  1551. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-actions.js.map +1 -0
  1552. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.d.ts +29 -0
  1553. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.js +86 -0
  1554. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-commands.js.map +1 -0
  1555. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.d.ts +41 -0
  1556. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.js +290 -0
  1557. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-component.js.map +1 -0
  1558. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-controller.d.ts +40 -0
  1559. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-controller.js +477 -0
  1560. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-controller.js.map +1 -0
  1561. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.d.ts +291 -0
  1562. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.js +301 -0
  1563. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-model.js.map +1 -0
  1564. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.d.ts +10 -0
  1565. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.js +310 -0
  1566. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-render.js.map +1 -0
  1567. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-session.d.ts +14 -0
  1568. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-session.js +722 -0
  1569. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-session.js.map +1 -0
  1570. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-status.d.ts +73 -0
  1571. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-status.js +102 -0
  1572. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-manager-status.js.map +1 -0
  1573. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-operation-view.d.ts +41 -0
  1574. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-operation-view.js +178 -0
  1575. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/plugin-operation-view.js.map +1 -0
  1576. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/text-input-surface.d.ts +32 -0
  1577. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/text-input-surface.js +119 -0
  1578. package/node_modules/@nklisch/pi-plugins/dist/pi/manager/text-input-surface.js.map +1 -0
  1579. package/node_modules/@nklisch/pi-plugins/dist/pi/native-control-human.d.ts +7 -0
  1580. package/node_modules/@nklisch/pi-plugins/dist/pi/native-control-human.js +103 -0
  1581. package/node_modules/@nklisch/pi-plugins/dist/pi/native-control-human.js.map +1 -0
  1582. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-control-channel.d.ts +15 -0
  1583. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-control-channel.js +132 -0
  1584. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-control-channel.js.map +1 -0
  1585. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-manager-reload-handoff.d.ts +28 -0
  1586. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-manager-reload-handoff.js +110 -0
  1587. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-manager-reload-handoff.js.map +1 -0
  1588. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-project-context.d.ts +22 -0
  1589. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-project-context.js +79 -0
  1590. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-project-context.js.map +1 -0
  1591. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-reload-broker.d.ts +24 -0
  1592. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-reload-broker.js +77 -0
  1593. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-reload-broker.js.map +1 -0
  1594. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-session-binding.d.ts +4 -0
  1595. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-session-binding.js +59 -0
  1596. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-session-binding.js.map +1 -0
  1597. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-subagent-session-context.d.ts +8 -0
  1598. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-subagent-session-context.js +20 -0
  1599. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-subagent-session-context.js.map +1 -0
  1600. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-update-notification-publisher.d.ts +16 -0
  1601. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-update-notification-publisher.js +66 -0
  1602. package/node_modules/@nklisch/pi-plugins/dist/pi/pi-update-notification-publisher.js.map +1 -0
  1603. package/node_modules/@nklisch/pi-plugins/dist/pi/plain-language.d.ts +23 -0
  1604. package/node_modules/@nklisch/pi-plugins/dist/pi/plain-language.js +97 -0
  1605. package/node_modules/@nklisch/pi-plugins/dist/pi/plain-language.js.map +1 -0
  1606. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-command.d.ts +40 -0
  1607. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-command.js +162 -0
  1608. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-command.js.map +1 -0
  1609. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-bootstrap.d.ts +28 -0
  1610. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-bootstrap.js +119 -0
  1611. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-bootstrap.js.map +1 -0
  1612. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-runtime-delegates.d.ts +16 -0
  1613. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-runtime-delegates.js +79 -0
  1614. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-host-runtime-delegates.js.map +1 -0
  1615. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.d.ts +19 -0
  1616. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.js +41 -0
  1617. package/node_modules/@nklisch/pi-plugins/dist/pi/plugin-manager-lifecycle.js.map +1 -0
  1618. package/node_modules/@nklisch/pi-plugins/dist/pi/production-subagents-extension.d.ts +7 -0
  1619. package/node_modules/@nklisch/pi-plugins/dist/pi/production-subagents-extension.js +11 -0
  1620. package/node_modules/@nklisch/pi-plugins/dist/pi/production-subagents-extension.js.map +1 -0
  1621. package/node_modules/@nklisch/pi-plugins/dist/pi/skill-resource-discovery.d.ts +4 -0
  1622. package/node_modules/@nklisch/pi-plugins/dist/pi/skill-resource-discovery.js +45 -0
  1623. package/node_modules/@nklisch/pi-plugins/dist/pi/skill-resource-discovery.js.map +1 -0
  1624. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-contract.d.ts +3155 -0
  1625. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-contract.js +156 -0
  1626. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-contract.js.map +1 -0
  1627. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-input.d.ts +105 -0
  1628. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-input.js +103 -0
  1629. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/event-input.js.map +1 -0
  1630. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/guarded-command-executor.d.ts +29 -0
  1631. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/guarded-command-executor.js +229 -0
  1632. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/guarded-command-executor.js.map +1 -0
  1633. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-decision-aggregator.d.ts +15 -0
  1634. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-decision-aggregator.js +123 -0
  1635. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-decision-aggregator.js.map +1 -0
  1636. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-event-planner.d.ts +13 -0
  1637. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-event-planner.js +248 -0
  1638. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-event-planner.js.map +1 -0
  1639. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-failure-log.d.ts +27 -0
  1640. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-failure-log.js +63 -0
  1641. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-failure-log.js.map +1 -0
  1642. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-launch-contract.d.ts +27 -0
  1643. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-launch-contract.js +98 -0
  1644. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-launch-contract.js.map +1 -0
  1645. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-output-parser.d.ts +18 -0
  1646. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-output-parser.js +182 -0
  1647. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-output-parser.js.map +1 -0
  1648. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-runtime-diagnostic.d.ts +107 -0
  1649. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-runtime-diagnostic.js +64 -0
  1650. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/hook-runtime-diagnostic.js.map +1 -0
  1651. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/stop-continuation-guard.d.ts +11 -0
  1652. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/stop-continuation-guard.js +27 -0
  1653. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/stop-continuation-guard.js.map +1 -0
  1654. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/tool-event-input.d.ts +38 -0
  1655. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/tool-event-input.js +129 -0
  1656. package/node_modules/@nklisch/pi-plugins/dist/runtime/hooks/tool-event-input.js.map +1 -0
  1657. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-error.d.ts +5 -0
  1658. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-error.js +29 -0
  1659. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-error.js.map +1 -0
  1660. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-value-provider.d.ts +16 -0
  1661. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-value-provider.js +405 -0
  1662. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/launch-value-provider.js.map +1 -0
  1663. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/lifecycle-participant.d.ts +336 -0
  1664. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/lifecycle-participant.js +544 -0
  1665. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/lifecycle-participant.js.map +1 -0
  1666. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-package.d.ts +5 -0
  1667. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-package.js +50 -0
  1668. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-package.js.map +1 -0
  1669. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-runtime.d.ts +23 -0
  1670. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-runtime.js +366 -0
  1671. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/pi-mcp-adapter-runtime.js.map +1 -0
  1672. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/revision-lease-provider.d.ts +18 -0
  1673. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/revision-lease-provider.js +180 -0
  1674. package/node_modules/@nklisch/pi-plugins/dist/runtime/mcp/revision-lease-provider.js.map +1 -0
  1675. package/node_modules/@nklisch/pi-plugins/dist/runtime/plugin-launch-roots.d.ts +11 -0
  1676. package/node_modules/@nklisch/pi-plugins/dist/runtime/plugin-launch-roots.js +12 -0
  1677. package/node_modules/@nklisch/pi-plugins/dist/runtime/plugin-launch-roots.js.map +1 -0
  1678. package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.d.ts +35 -0
  1679. package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.js +180 -0
  1680. package/node_modules/@nklisch/pi-plugins/dist/runtime/published-package-receipt.js.map +1 -0
  1681. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/lifecycle-participant.d.ts +30 -0
  1682. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/lifecycle-participant.js +180 -0
  1683. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/lifecycle-participant.js.map +1 -0
  1684. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-catalog.d.ts +35 -0
  1685. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-catalog.js +72 -0
  1686. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-catalog.js.map +1 -0
  1687. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-snapshot.d.ts +57 -0
  1688. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-snapshot.js +223 -0
  1689. package/node_modules/@nklisch/pi-plugins/dist/runtime/skill-hook/runtime-snapshot.js.map +1 -0
  1690. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/contribution-observation.d.ts +158 -0
  1691. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/contribution-observation.js +177 -0
  1692. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/contribution-observation.js.map +1 -0
  1693. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/resource-discovery.d.ts +59 -0
  1694. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/resource-discovery.js +263 -0
  1695. package/node_modules/@nklisch/pi-plugins/dist/runtime/skills/resource-discovery.js.map +1 -0
  1696. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-lifecycle.d.ts +12 -0
  1697. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-lifecycle.js +353 -0
  1698. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-lifecycle.js.map +1 -0
  1699. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-package.d.ts +8 -0
  1700. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-package.js +91 -0
  1701. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/pi-subagents-package.js.map +1 -0
  1702. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-coordinator.d.ts +22 -0
  1703. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-coordinator.js +318 -0
  1704. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-coordinator.js.map +1 -0
  1705. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-session-context.d.ts +8 -0
  1706. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-session-context.js +2 -0
  1707. package/node_modules/@nklisch/pi-plugins/dist/runtime/subagents/subagent-hook-session-context.js.map +1 -0
  1708. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/CHANGELOG.md +2197 -0
  1709. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/LICENSE +21 -0
  1710. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/README.md +430 -0
  1711. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/dist/public.d.ts +255 -0
  1712. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/dist/settings.d.ts +82 -0
  1713. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/FORK-MAINTENANCE.md +38 -0
  1714. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/VISION.md +32 -0
  1715. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/architecture.md +1246 -0
  1716. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/client-server-opportunities.md +127 -0
  1717. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-1-api-boundary.md +8 -0
  1718. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-10-structural-decomposition.md +141 -0
  1719. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-11-closure-to-class.md +100 -0
  1720. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-12-complexity-test-fixtures.md +55 -0
  1721. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-13-remaining-smells.md +88 -0
  1722. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-14-strip-policy.md +49 -0
  1723. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-15-domain-model-evolution.md +73 -0
  1724. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-16-invert-dependencies.md +144 -0
  1725. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-17-core-consolidation.md +214 -0
  1726. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-18-reconsider-ui.md +166 -0
  1727. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-19-implement-ui-decisions.md +282 -0
  1728. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-2-remove-scheduling.md +9 -0
  1729. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-3-remove-rpc-groupjoin.md +11 -0
  1730. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-4-implement-service.md +8 -0
  1731. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-5-decompose-index.md +42 -0
  1732. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-7-encapsulation.md +173 -0
  1733. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-8-testability.md +103 -0
  1734. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/architecture/history/phase-9-observation-ctx.md +122 -0
  1735. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/comparison-with-upstream.md +77 -0
  1736. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/decisions/0001-deferred-patches.md +80 -0
  1737. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/decisions/0002-extensions-on-a-minimal-core.md +98 -0
  1738. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/decisions/0003-publish-bundled-type-declarations.md +71 -0
  1739. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/decisions/0004-reconsider-ui-direction.md +279 -0
  1740. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/docs/decisions/0005-ordered-lifecycle-interceptors.md +40 -0
  1741. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/package.json +89 -0
  1742. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/config/agent-types.ts +133 -0
  1743. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/config/custom-agents.ts +106 -0
  1744. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/config/default-agents.ts +120 -0
  1745. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/config/invocation-config.ts +30 -0
  1746. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/debug.ts +14 -0
  1747. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/handlers/index.ts +3 -0
  1748. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/handlers/interrupt.ts +49 -0
  1749. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/handlers/lifecycle.ts +63 -0
  1750. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/handlers/tool-start.ts +32 -0
  1751. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/index.ts +188 -0
  1752. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/layered-settings.ts +105 -0
  1753. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/child-lifecycle.ts +90 -0
  1754. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/concurrency-limiter.ts +60 -0
  1755. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/create-subagent-session.ts +245 -0
  1756. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/lifecycle-interceptor.ts +407 -0
  1757. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/parent-snapshot.ts +48 -0
  1758. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/run-listeners.ts +37 -0
  1759. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/subagent-manager.ts +397 -0
  1760. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/subagent-session.ts +368 -0
  1761. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/subagent-state.ts +201 -0
  1762. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/subagent.ts +531 -0
  1763. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/turn-limits.ts +13 -0
  1764. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/usage.ts +60 -0
  1765. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/workspace-bracket.ts +59 -0
  1766. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/lifecycle/workspace.ts +47 -0
  1767. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/observation/composite-subagent-observer.ts +49 -0
  1768. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/observation/notification.ts +205 -0
  1769. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/observation/record-observer.ts +78 -0
  1770. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/observation/renderer.ts +67 -0
  1771. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/observation/subagent-events-observer.ts +92 -0
  1772. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/runtime.ts +79 -0
  1773. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/service/service-adapter.ts +156 -0
  1774. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/service/service.ts +154 -0
  1775. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/content-items.ts +53 -0
  1776. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/context.ts +80 -0
  1777. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/conversation.ts +49 -0
  1778. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/env.ts +40 -0
  1779. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/model-resolver.ts +122 -0
  1780. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/prompts.ts +92 -0
  1781. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/session-config.ts +187 -0
  1782. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/session/session-dir.ts +38 -0
  1783. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/settings.ts +228 -0
  1784. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/agent-tool.ts +247 -0
  1785. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/background-spawner.ts +72 -0
  1786. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/foreground-runner.ts +133 -0
  1787. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/get-result-report.ts +60 -0
  1788. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/get-result-tool.ts +108 -0
  1789. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/helpers.ts +121 -0
  1790. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/result-renderer.ts +122 -0
  1791. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/spawn-config.ts +157 -0
  1792. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/tools/steer-tool.ts +109 -0
  1793. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/types.ts +119 -0
  1794. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/agent-widget.ts +300 -0
  1795. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/display.ts +177 -0
  1796. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/session-navigation.ts +145 -0
  1797. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/session-navigator.ts +402 -0
  1798. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/subagents-settings.ts +83 -0
  1799. package/node_modules/@nklisch/pi-plugins/node_modules/@nklisch/pi-subagents/src/ui/widget-renderer.ts +292 -0
  1800. package/node_modules/@nklisch/pi-plugins/package.json +95 -0
  1801. package/node_modules/pi-catppuccin-tui/LICENSE +21 -0
  1802. package/node_modules/pi-catppuccin-tui/README.md +115 -0
  1803. package/node_modules/pi-catppuccin-tui/assets/preview.svg +49 -0
  1804. package/node_modules/pi-catppuccin-tui/extensions/catppuccin-tui.ts +336 -0
  1805. package/node_modules/pi-catppuccin-tui/package.json +41 -0
  1806. package/node_modules/pi-catppuccin-tui/scripts/generate-themes.mjs +217 -0
  1807. package/node_modules/pi-catppuccin-tui/scripts/validate-extension.mjs +33 -0
  1808. package/node_modules/pi-catppuccin-tui/scripts/validate-themes.mjs +140 -0
  1809. package/node_modules/pi-catppuccin-tui/themes/catppuccin-tui-frappe.json +90 -0
  1810. package/node_modules/pi-catppuccin-tui/themes/catppuccin-tui-latte.json +90 -0
  1811. package/node_modules/pi-catppuccin-tui/themes/catppuccin-tui-macchiato.json +90 -0
  1812. package/node_modules/pi-catppuccin-tui/themes/catppuccin-tui-mocha.json +90 -0
  1813. package/node_modules/pi-tool-display/CHANGELOG.md +326 -0
  1814. package/node_modules/pi-tool-display/LICENSE +21 -0
  1815. package/node_modules/pi-tool-display/README.md +413 -0
  1816. package/node_modules/pi-tool-display/config/config.example.json +39 -0
  1817. package/node_modules/pi-tool-display/index.ts +3 -0
  1818. package/node_modules/pi-tool-display/package.json +86 -0
  1819. package/node_modules/pi-tool-display/src/agent-dir.ts +32 -0
  1820. package/node_modules/pi-tool-display/src/ansi-utils.ts +116 -0
  1821. package/node_modules/pi-tool-display/src/bash-display.ts +212 -0
  1822. package/node_modules/pi-tool-display/src/capabilities.ts +85 -0
  1823. package/node_modules/pi-tool-display/src/config-modal.ts +514 -0
  1824. package/node_modules/pi-tool-display/src/config-store.ts +303 -0
  1825. package/node_modules/pi-tool-display/src/debug-logger.ts +150 -0
  1826. package/node_modules/pi-tool-display/src/diff-presentation.ts +72 -0
  1827. package/node_modules/pi-tool-display/src/diff-renderer.ts +2517 -0
  1828. package/node_modules/pi-tool-display/src/disposable.ts +34 -0
  1829. package/node_modules/pi-tool-display/src/extension-lifecycle.ts +14 -0
  1830. package/node_modules/pi-tool-display/src/index.ts +109 -0
  1831. package/node_modules/pi-tool-display/src/line-width-safety.ts +93 -0
  1832. package/node_modules/pi-tool-display/src/modal-icons.ts +57 -0
  1833. package/node_modules/pi-tool-display/src/pending-diff-preview.ts +370 -0
  1834. package/node_modules/pi-tool-display/src/presets.ts +108 -0
  1835. package/node_modules/pi-tool-display/src/render-utils.ts +186 -0
  1836. package/node_modules/pi-tool-display/src/settings-inspector-modal.ts +475 -0
  1837. package/node_modules/pi-tool-display/src/thinking-label.ts +343 -0
  1838. package/node_modules/pi-tool-display/src/tool-metadata.ts +139 -0
  1839. package/node_modules/pi-tool-display/src/tool-overrides.ts +2121 -0
  1840. package/node_modules/pi-tool-display/src/types.ts +105 -0
  1841. package/node_modules/pi-tool-display/src/user-message-box-markdown.ts +64 -0
  1842. package/node_modules/pi-tool-display/src/user-message-box-native.ts +66 -0
  1843. package/node_modules/pi-tool-display/src/user-message-box-patch.ts +72 -0
  1844. package/node_modules/pi-tool-display/src/user-message-box-renderer.ts +419 -0
  1845. package/node_modules/pi-tool-display/src/user-message-box-utils.ts +106 -0
  1846. package/node_modules/pi-tool-display/src/write-display-utils.ts +31 -0
  1847. package/node_modules/pi-tool-display/src/zellij-modal.ts +1027 -0
  1848. package/node_modules/pi-tool-display/tool-display-api-consumer.d.ts +30 -0
  1849. package/node_modules/pi-tool-display/tool-display-api-consumer.js +40 -0
  1850. package/node_modules/pi-web-access/CHANGELOG.md +437 -0
  1851. package/node_modules/pi-web-access/LICENSE +21 -0
  1852. package/node_modules/pi-web-access/README.md +357 -0
  1853. package/node_modules/pi-web-access/activity.ts +101 -0
  1854. package/node_modules/pi-web-access/banner.png +0 -0
  1855. package/node_modules/pi-web-access/brave.ts +210 -0
  1856. package/node_modules/pi-web-access/chrome-cookies.ts +322 -0
  1857. package/node_modules/pi-web-access/curator-page.ts +3399 -0
  1858. package/node_modules/pi-web-access/curator-server.ts +657 -0
  1859. package/node_modules/pi-web-access/exa.ts +454 -0
  1860. package/node_modules/pi-web-access/extract.ts +704 -0
  1861. package/node_modules/pi-web-access/fetch-params.ts +67 -0
  1862. package/node_modules/pi-web-access/gemini-api.ts +163 -0
  1863. package/node_modules/pi-web-access/gemini-search.ts +431 -0
  1864. package/node_modules/pi-web-access/gemini-url-context.ts +126 -0
  1865. package/node_modules/pi-web-access/gemini-web-config.ts +51 -0
  1866. package/node_modules/pi-web-access/gemini-web.ts +411 -0
  1867. package/node_modules/pi-web-access/github-api.ts +196 -0
  1868. package/node_modules/pi-web-access/github-extract.ts +634 -0
  1869. package/node_modules/pi-web-access/index.ts +2598 -0
  1870. package/node_modules/pi-web-access/openai-search.ts +399 -0
  1871. package/node_modules/pi-web-access/package.json +51 -0
  1872. package/node_modules/pi-web-access/parallel.ts +360 -0
  1873. package/node_modules/pi-web-access/pdf-extract.ts +192 -0
  1874. package/node_modules/pi-web-access/perplexity.ts +194 -0
  1875. package/node_modules/pi-web-access/pi-web-fetch-demo.mp4 +0 -0
  1876. package/node_modules/pi-web-access/render-search-error.ts +170 -0
  1877. package/node_modules/pi-web-access/rsc-extract.ts +338 -0
  1878. package/node_modules/pi-web-access/skills/librarian/SKILL.md +195 -0
  1879. package/node_modules/pi-web-access/ssrf-protection.ts +280 -0
  1880. package/node_modules/pi-web-access/storage.ts +72 -0
  1881. package/node_modules/pi-web-access/summary-model-scope.ts +88 -0
  1882. package/node_modules/pi-web-access/summary-review.ts +326 -0
  1883. package/node_modules/pi-web-access/tavily.ts +205 -0
  1884. package/node_modules/pi-web-access/test/auto-summary-source.test.mjs +26 -0
  1885. package/node_modules/pi-web-access/test/config-path.test.mjs +177 -0
  1886. package/node_modules/pi-web-access/test/curator-fallback.test.mjs +33 -0
  1887. package/node_modules/pi-web-access/test/curator-server-timeout.test.mjs +106 -0
  1888. package/node_modules/pi-web-access/test/fetch-params.test.mjs +68 -0
  1889. package/node_modules/pi-web-access/test/gemini-web-cookie-opt-in.test.mjs +43 -0
  1890. package/node_modules/pi-web-access/test/parallel-curator-state.test.mjs +22 -0
  1891. package/node_modules/pi-web-access/test/parallel.test.mjs +145 -0
  1892. package/node_modules/pi-web-access/test/pdf-extract.test.mjs +95 -0
  1893. package/node_modules/pi-web-access/test/search-error-render.test.mjs +155 -0
  1894. package/node_modules/pi-web-access/test/search-providers.test.mjs +285 -0
  1895. package/node_modules/pi-web-access/test/ssrf-allow-ranges-config.test.mjs +111 -0
  1896. package/node_modules/pi-web-access/test/ssrf-protection.test.mjs +213 -0
  1897. package/node_modules/pi-web-access/test/summary-model-scope.test.mjs +72 -0
  1898. package/node_modules/pi-web-access/test/tool-registration-config.test.mjs +24 -0
  1899. package/node_modules/pi-web-access/test/youtube-extract-errors.test.mjs +64 -0
  1900. package/node_modules/pi-web-access/utils.ts +57 -0
  1901. package/node_modules/pi-web-access/video-extract.ts +377 -0
  1902. package/node_modules/pi-web-access/youtube-extract.ts +326 -0
  1903. package/package.json +90 -0
  1904. package/test/verify-bundle.mjs +55 -0
@@ -0,0 +1,2598 @@
1
+ import type { ExtensionAPI, ExtensionContext } from "@earendil-works/pi-coding-agent";
2
+ import { Box, Text, truncateToWidth } from "@earendil-works/pi-tui";
3
+ import { Type } from "typebox";
4
+ import { StringEnum, complete, type Model } from "@earendil-works/pi-ai/compat";
5
+ import { fetchAllContent, type ExtractedContent } from "./extract.ts";
6
+ import { normalizeFetchContentParams } from "./fetch-params.ts";
7
+ import { clearCloneCache } from "./github-extract.ts";
8
+ import { search, type SearchProvider, type ResolvedSearchProvider } from "./gemini-search.ts";
9
+ import type { SearchResult } from "./perplexity.ts";
10
+ import { formatSeconds, getWebSearchConfigDir, getWebSearchConfigPath } from "./utils.ts";
11
+ import {
12
+ clearResults,
13
+ deleteResult,
14
+ generateId,
15
+ getAllResults,
16
+ getResult,
17
+ restoreFromSession,
18
+ storeResult,
19
+ type QueryResultData,
20
+ type StoredSearchData,
21
+ } from "./storage.ts";
22
+ import { activityMonitor, type ActivityEntry } from "./activity.ts";
23
+ import { startCuratorServer, type CuratorServerHandle } from "./curator-server.ts";
24
+ import {
25
+ buildDeterministicSummary,
26
+ generateSummaryDraft,
27
+ type SummaryGenerationContext,
28
+ type SummaryMeta,
29
+ } from "./summary-review.ts";
30
+ import { randomUUID } from "node:crypto";
31
+ import { execFileSync } from "node:child_process";
32
+ import { createRequire } from "node:module";
33
+ import { platform } from "node:os";
34
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from "node:fs";
35
+ import { join } from "node:path";
36
+ import { isPerplexityAvailable } from "./perplexity.ts";
37
+ import { isExaAvailable } from "./exa.ts";
38
+ import { isGeminiApiAvailable } from "./gemini-api.ts";
39
+ import { getActiveGoogleEmail, isGeminiWebAvailable } from "./gemini-web.ts";
40
+ import { isBrowserCookieAccessAllowed } from "./gemini-web-config.ts";
41
+ import { isBraveAvailable } from "./brave.ts";
42
+ import { isOpenAISearchAvailable } from "./openai-search.ts";
43
+ import { isParallelAvailable } from "./parallel.ts";
44
+ import { isTavilyAvailable } from "./tavily.ts";
45
+ import { buildSearchErrorPlan, type SearchErrorDetails, type SearchErrorPlan } from "./render-search-error.ts";
46
+ import { loadEnabledModelPatterns, modelMatchesEnabledPatterns } from "./summary-model-scope.ts";
47
+
48
+ const WEB_SEARCH_CONFIG_PATH = getWebSearchConfigPath();
49
+
50
+ /** Shared collapsed/expanded renderer for an error/cancel plan produced by
51
+ * buildSearchErrorPlan(). Used by every tool renderResult's error branch so
52
+ * Ctrl+O (app.tools.expand) reveals diagnostics instead of a dead-end single line. */
53
+ function renderSearchErrorPlan(plan: SearchErrorPlan, expanded: boolean, theme: { fg: (key: string, s: string) => string; bg: (key: string, s: string) => string }) {
54
+ if (expanded) {
55
+ return new Text(plan.expanded.map((l, i) => i === 0 ? theme.fg("error", l) : theme.fg("toolOutput", l)).join("\n"), 0, 0);
56
+ }
57
+ const box = new Box(1, 0, (t) => theme.bg("toolErrorBg", t));
58
+ box.addChild(new Text(theme.fg("error", plan.expanded[0]), 0, 0));
59
+ for (const line of plan.collapsed) {
60
+ box.addChild(new Text(theme.fg("dim", line), 0, 0));
61
+ }
62
+ if (plan.expandHint) {
63
+ box.addChild(new Text(theme.fg("muted", plan.expandHint), 0, 0));
64
+ }
65
+ return box;
66
+ }
67
+
68
+ interface WebSearchConfig {
69
+ provider?: string;
70
+ workflow?: string;
71
+ curatorTimeoutSeconds?: unknown;
72
+ summaryModel?: string;
73
+ webSearch?: {
74
+ enabled?: boolean;
75
+ };
76
+ shortcuts?: {
77
+ curate?: string;
78
+ activity?: string;
79
+ };
80
+ ssrf?: {
81
+ /** CIDR ranges exempted from the SSRF guard (e.g. fake-IP proxy ranges). */
82
+ allowRanges?: string[];
83
+ };
84
+ }
85
+
86
+ interface ProviderAvailability {
87
+ openai: boolean;
88
+ brave: boolean;
89
+ parallel: boolean;
90
+ tavily: boolean;
91
+ perplexity: boolean;
92
+ exa: boolean;
93
+ gemini: boolean;
94
+ }
95
+
96
+ type WebSearchWorkflow = "none" | "summary-review" | "auto-summary";
97
+ type CuratorWorkflow = "summary-review";
98
+ type SummaryWorkflow = "summary-review" | "auto-summary";
99
+
100
+ interface CuratorBootstrap {
101
+ availableProviders: ProviderAvailability;
102
+ defaultProvider: ResolvedSearchProvider;
103
+ timeoutSeconds: number;
104
+ }
105
+
106
+ function loadConfig(): WebSearchConfig {
107
+ if (!existsSync(WEB_SEARCH_CONFIG_PATH)) return {};
108
+ const raw = readFileSync(WEB_SEARCH_CONFIG_PATH, "utf-8");
109
+ try {
110
+ return JSON.parse(raw) as WebSearchConfig;
111
+ } catch (err) {
112
+ const message = err instanceof Error ? err.message : String(err);
113
+ throw new Error(`Failed to parse ${WEB_SEARCH_CONFIG_PATH}: ${message}`);
114
+ }
115
+ }
116
+
117
+ function saveConfig(updates: Partial<WebSearchConfig>): void {
118
+ let config: Record<string, unknown> = {};
119
+ if (existsSync(WEB_SEARCH_CONFIG_PATH)) {
120
+ const raw = readFileSync(WEB_SEARCH_CONFIG_PATH, "utf-8");
121
+ try {
122
+ config = JSON.parse(raw) as Record<string, unknown>;
123
+ } catch (err) {
124
+ const message = err instanceof Error ? err.message : String(err);
125
+ throw new Error(`Failed to parse ${WEB_SEARCH_CONFIG_PATH}: ${message}`);
126
+ }
127
+ }
128
+
129
+ Object.assign(config, updates);
130
+ const dir = getWebSearchConfigDir();
131
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
132
+ writeFileSync(WEB_SEARCH_CONFIG_PATH, JSON.stringify(config, null, 2) + "\n");
133
+ }
134
+
135
+ const DEFAULT_SHORTCUTS = { curate: "ctrl+shift+s", activity: "ctrl+shift+w" };
136
+ const DEFAULT_CURATOR_TIMEOUT_SECONDS = 20;
137
+ const MAX_CURATOR_TIMEOUT_SECONDS = 600;
138
+
139
+ function loadConfigForExtensionInit(): WebSearchConfig {
140
+ try {
141
+ return loadConfig();
142
+ } catch (err) {
143
+ const message = err instanceof Error ? err.message : String(err);
144
+ console.error(`[pi-web-access] ${message}`);
145
+ return {};
146
+ }
147
+ }
148
+
149
+ function normalizeProviderInput(value: unknown): SearchProvider | undefined {
150
+ if (value === undefined) return undefined;
151
+ if (typeof value !== "string") return "auto";
152
+ const normalized = value.trim().toLowerCase();
153
+ const valid: SearchProvider[] = ["auto", "openai", "brave", "parallel", "tavily", "exa", "perplexity", "gemini"];
154
+ return valid.includes(normalized as SearchProvider) ? normalized as SearchProvider : "auto";
155
+ }
156
+
157
+ function normalizeCuratorTimeoutSeconds(value: unknown): number | undefined {
158
+ if (typeof value !== "number" || !Number.isFinite(value)) return undefined;
159
+ const normalized = Math.floor(value);
160
+ if (normalized < 1) return undefined;
161
+ return Math.min(normalized, MAX_CURATOR_TIMEOUT_SECONDS);
162
+ }
163
+
164
+ function resolveWorkflow(input: unknown, hasUI: boolean): WebSearchWorkflow {
165
+ const normalized = typeof input === "string" ? input.trim().toLowerCase() : "";
166
+ if (normalized === "auto-summary") return "auto-summary";
167
+ if (!hasUI) return "none";
168
+ if (normalized === "none") return "none";
169
+ return "summary-review";
170
+ }
171
+
172
+ function normalizeQueryList(queryList: unknown[]): string[] {
173
+ const normalized: string[] = [];
174
+ for (const query of queryList) {
175
+ if (typeof query !== "string") continue;
176
+ const trimmed = query.trim();
177
+ if (trimmed.length > 0) normalized.push(trimmed);
178
+ }
179
+ return normalized;
180
+ }
181
+
182
+ function getCuratorTimeoutSeconds(): number {
183
+ const source = loadConfig();
184
+ return normalizeCuratorTimeoutSeconds(source.curatorTimeoutSeconds) ?? DEFAULT_CURATOR_TIMEOUT_SECONDS;
185
+ }
186
+
187
+ async function getProviderAvailability(ctx: ExtensionContext): Promise<ProviderAvailability> {
188
+ const geminiWebAvail = await isGeminiWebAvailable();
189
+ return {
190
+ openai: await isOpenAISearchAvailable(ctx),
191
+ brave: isBraveAvailable(),
192
+ parallel: isParallelAvailable(),
193
+ tavily: isTavilyAvailable(),
194
+ perplexity: isPerplexityAvailable(),
195
+ exa: isExaAvailable(),
196
+ gemini: isGeminiApiAvailable() || !!geminiWebAvail,
197
+ };
198
+ }
199
+
200
+ function shouldPreferOpenAI(options?: Pick<PendingCurate, "numResults" | "recencyFilter">): boolean {
201
+ if (!options) return true;
202
+ if (options.recencyFilter) return false;
203
+ if (typeof options.numResults === "number" && Number.isFinite(options.numResults) && Math.floor(options.numResults) !== 5) {
204
+ return false;
205
+ }
206
+ return true;
207
+ }
208
+
209
+ async function loadCuratorBootstrap(
210
+ requestedProvider: unknown,
211
+ ctx: ExtensionContext,
212
+ options?: Pick<PendingCurate, "numResults" | "recencyFilter">,
213
+ ): Promise<CuratorBootstrap> {
214
+ const availableProviders = await getProviderAvailability(ctx);
215
+ return {
216
+ availableProviders,
217
+ defaultProvider: resolveProvider(requestedProvider, availableProviders, options),
218
+ timeoutSeconds: getCuratorTimeoutSeconds(),
219
+ };
220
+ }
221
+
222
+ function firstAvailableProvider(available: ProviderAvailability, preferOpenAI: boolean, fallback: ResolvedSearchProvider): ResolvedSearchProvider {
223
+ if (preferOpenAI && available.openai) return "openai";
224
+ if (available.exa) return "exa";
225
+ if (available.brave) return "brave";
226
+ if (available.parallel) return "parallel";
227
+ if (available.tavily) return "tavily";
228
+ if (available.perplexity) return "perplexity";
229
+ if (available.gemini) return "gemini";
230
+ return fallback;
231
+ }
232
+
233
+ function resolveProvider(
234
+ requested: unknown,
235
+ available: ProviderAvailability,
236
+ options?: Pick<PendingCurate, "numResults" | "recencyFilter">,
237
+ ): ResolvedSearchProvider {
238
+ const provider = normalizeProviderInput(requested ?? loadConfig().provider ?? "auto") ?? "auto";
239
+ const preferOpenAI = shouldPreferOpenAI(options);
240
+
241
+ if (provider === "auto") {
242
+ return firstAvailableProvider(available, preferOpenAI, "exa");
243
+ }
244
+ if (provider === "openai" && !available.openai) {
245
+ return firstAvailableProvider(available, false, "openai");
246
+ }
247
+ if (provider === "brave" && !available.brave) {
248
+ return firstAvailableProvider(available, preferOpenAI, "brave");
249
+ }
250
+ if (provider === "parallel" && !available.parallel) {
251
+ return firstAvailableProvider(available, preferOpenAI, "parallel");
252
+ }
253
+ if (provider === "tavily" && !available.tavily) {
254
+ return firstAvailableProvider(available, preferOpenAI, "tavily");
255
+ }
256
+ if (provider === "exa" && !available.exa) {
257
+ return firstAvailableProvider(available, preferOpenAI, "exa");
258
+ }
259
+ if (provider === "perplexity" && !available.perplexity) {
260
+ return firstAvailableProvider(available, preferOpenAI, "perplexity");
261
+ }
262
+ if (provider === "gemini" && !available.gemini) {
263
+ return firstAvailableProvider(available, preferOpenAI, "gemini");
264
+ }
265
+ return provider;
266
+ }
267
+
268
+ const pendingFetches = new Map<string, AbortController>();
269
+ let sessionActive = false;
270
+ let widgetVisible = false;
271
+ let widgetUnsubscribe: (() => void) | null = null;
272
+ const pendingCurates = new Map<string, PendingCurate>();
273
+ const activeCurators = new Map<string, CuratorServerHandle>();
274
+ const glimpseWins = new Map<string, GlimpseWindow>();
275
+
276
+ interface PendingCurate {
277
+ phase: "searching" | "curating";
278
+ workflow: CuratorWorkflow;
279
+ summaryContext: SummaryGenerationContext;
280
+ searchResults: Map<number, QueryResultData>;
281
+ allInlineContent: ExtractedContent[];
282
+ queryList: string[];
283
+ includeContent: boolean;
284
+ numResults?: number;
285
+ recencyFilter?: "day" | "week" | "month" | "year";
286
+ domainFilter?: string[];
287
+ availableProviders: ProviderAvailability;
288
+ defaultProvider: ResolvedSearchProvider;
289
+ searchProvider: SearchProvider;
290
+ summaryModels: Array<{ value: string; label: string }>;
291
+ defaultSummaryModel: string | null;
292
+ timeoutSeconds: number;
293
+ curatorUrl?: string;
294
+ onUpdate: ((update: { content: Array<{ type: string; text: string }>; details?: Record<string, unknown> }) => void) | undefined;
295
+ signal: AbortSignal | undefined;
296
+ abortSearches: () => void;
297
+ finish: (value: unknown) => void;
298
+ cancel: (reason?: "user" | "stale") => void;
299
+ browserPromise?: Promise<void>;
300
+ browserOpenError?: string;
301
+ }
302
+
303
+
304
+ const MAX_INLINE_CONTENT = 30000; // Content returned directly to agent
305
+
306
+ function stripThumbnails(results: ExtractedContent[]): ExtractedContent[] {
307
+ return results.map(({ thumbnail, frames, ...rest }) => rest);
308
+ }
309
+
310
+ function formatSearchSummary(results: SearchResult[], answer: string): string {
311
+ let output = answer ? `${answer}\n\n---\n\n**Sources:**\n` : "";
312
+ output += results.map((r, i) => `${i + 1}. ${r.title}\n ${r.url}`).join("\n\n");
313
+ return output;
314
+ }
315
+
316
+ function duplicateQuerySet(results: QueryResultData[]): Set<string> {
317
+ const counts = new Map<string, number>();
318
+ for (const result of results) {
319
+ counts.set(result.query, (counts.get(result.query) ?? 0) + 1);
320
+ }
321
+ const duplicates = new Set<string>();
322
+ for (const [query, count] of counts) {
323
+ if (count > 1) duplicates.add(query);
324
+ }
325
+ return duplicates;
326
+ }
327
+
328
+ function formatQueryHeader(query: string, provider: string | undefined, duplicateQueries: Set<string>): string {
329
+ const suffix = duplicateQueries.has(query) && provider ? ` (${provider})` : "";
330
+ return `## Query: "${query}"${suffix}\n\n`;
331
+ }
332
+
333
+ function hasFullInlineCoverage(urls: string[], inlineContent: ExtractedContent[] | undefined): boolean {
334
+ if (!inlineContent || inlineContent.length === 0) return false;
335
+ const coveredUrls = new Set(inlineContent.map(c => c.url));
336
+ return urls.every(url => coveredUrls.has(url));
337
+ }
338
+
339
+ function formatFullResults(queryData: QueryResultData): string {
340
+ let output = `## Results for: "${queryData.query}"\n\n`;
341
+ if (queryData.answer) {
342
+ output += `${queryData.answer}\n\n---\n\n`;
343
+ }
344
+ for (const r of queryData.results) {
345
+ output += `### ${r.title}\n${r.url}\n\n`;
346
+ }
347
+ return output;
348
+ }
349
+
350
+ function abortPendingFetches(): void {
351
+ for (const controller of pendingFetches.values()) {
352
+ controller.abort();
353
+ }
354
+ pendingFetches.clear();
355
+ }
356
+
357
+ function closeCurator(callId?: string): void {
358
+ if (callId !== undefined) {
359
+ const win = glimpseWins.get(callId);
360
+ glimpseWins.delete(callId);
361
+ try { win?.close(); } catch {}
362
+ pendingCurates.get(callId)?.cancel("stale");
363
+ pendingCurates.delete(callId);
364
+ const curator = activeCurators.get(callId);
365
+ activeCurators.delete(callId);
366
+ try { curator?.close(); } catch {}
367
+ return;
368
+ }
369
+
370
+ for (const win of glimpseWins.values()) {
371
+ try { win.close(); } catch {}
372
+ }
373
+ glimpseWins.clear();
374
+ for (const pc of pendingCurates.values()) {
375
+ try { pc.cancel("stale"); } catch {}
376
+ }
377
+ pendingCurates.clear();
378
+ for (const curator of activeCurators.values()) {
379
+ try { curator.close(); } catch {}
380
+ }
381
+ activeCurators.clear();
382
+ }
383
+
384
+ async function openInBrowser(pi: ExtensionAPI, url: string): Promise<void> {
385
+ const plat = platform();
386
+ const result = plat === "darwin"
387
+ ? await pi.exec("open", [url])
388
+ : plat === "win32"
389
+ ? await pi.exec("cmd", ["/c", "start", "", url])
390
+ : await pi.exec("xdg-open", [url]);
391
+ if (result.code !== 0) {
392
+ throw new Error(result.stderr || `Failed to open browser (exit code ${result.code})`);
393
+ }
394
+ }
395
+
396
+ interface GlimpseWindow {
397
+ on(event: "closed", handler: () => void): void;
398
+ on(event: "message", handler: (data: unknown) => void): void;
399
+ on(event: "ready", handler: (info: { screen?: { visibleHeight?: number } }) => void): void;
400
+ close(): void;
401
+ _write(obj: Record<string, unknown>): void;
402
+ }
403
+
404
+ let glimpseOpen: ((html: string, opts: Record<string, unknown>) => GlimpseWindow) | null | undefined;
405
+
406
+ function findGlimpseMjs(): string | null {
407
+ try {
408
+ const req = createRequire(import.meta.url);
409
+ return req.resolve("glimpseui");
410
+ } catch {
411
+ // Optional dependency.
412
+ }
413
+ try {
414
+ const globalRoot = execFileSync("npm", ["root", "-g"], { encoding: "utf-8" }).trim();
415
+ const entry = join(globalRoot, "glimpseui", "src", "glimpse.mjs");
416
+ if (existsSync(entry)) return entry;
417
+ } catch {
418
+ // npm may be unavailable.
419
+ }
420
+ return null;
421
+ }
422
+
423
+ async function getGlimpseOpen() {
424
+ if (glimpseOpen !== undefined) return glimpseOpen;
425
+ const resolved = findGlimpseMjs();
426
+ if (resolved) {
427
+ try {
428
+ glimpseOpen = (await import(resolved)).open;
429
+ return glimpseOpen;
430
+ } catch {}
431
+ }
432
+ glimpseOpen = null;
433
+ return glimpseOpen;
434
+ }
435
+
436
+ function openInGlimpse(
437
+ open: (html: string, opts: Record<string, unknown>) => GlimpseWindow,
438
+ url: string,
439
+ title: string,
440
+ ): GlimpseWindow {
441
+ const shellHTML = `<!DOCTYPE html>
442
+ <html>
443
+ <head><meta charset="UTF-8"><title>${title}</title></head>
444
+ <body style="margin:0; background:#1a1a2e;">
445
+ <script>window.location.replace(${JSON.stringify(url)});</script>
446
+ </body>
447
+ </html>`;
448
+ const win = open(shellHTML, {
449
+ width: 800,
450
+ height: 900,
451
+ title,
452
+ });
453
+
454
+ let maxHeight = 1200;
455
+ win.on("ready", (info) => {
456
+ const visibleHeight = info?.screen?.visibleHeight;
457
+ if (typeof visibleHeight === "number" && visibleHeight > 0) {
458
+ maxHeight = Math.floor(visibleHeight * 0.85);
459
+ }
460
+ });
461
+ win.on("message", (data) => {
462
+ if (!data || typeof data !== "object") return;
463
+ const msg = data as Record<string, unknown>;
464
+ if (msg.type !== "resize" || typeof msg.height !== "number") return;
465
+ const clamped = Math.max(400, Math.min(Math.round(msg.height), maxHeight));
466
+ win._write({ type: "resize", width: 800, height: clamped });
467
+ });
468
+
469
+ return win;
470
+ }
471
+
472
+ function extractDomain(url: string): string {
473
+ try { return new URL(url).hostname; }
474
+ catch { return url; }
475
+ }
476
+
477
+ function updateWidget(ctx: ExtensionContext): void {
478
+ const theme = ctx.ui.theme;
479
+ const entries = activityMonitor.getEntries();
480
+ const lines: string[] = [];
481
+
482
+ lines.push(theme.fg("accent", "─── Web Search Activity " + "─".repeat(36)));
483
+
484
+ if (entries.length === 0) {
485
+ lines.push(theme.fg("muted", " No activity yet"));
486
+ } else {
487
+ for (const e of entries) {
488
+ lines.push(" " + formatEntryLine(e, theme));
489
+ }
490
+ }
491
+
492
+ lines.push(theme.fg("accent", "─".repeat(60)));
493
+
494
+ const rateInfo = activityMonitor.getRateLimitInfo();
495
+ const resetMs = rateInfo.oldestTimestamp ? Math.max(0, rateInfo.oldestTimestamp + rateInfo.windowMs - Date.now()) : 0;
496
+ const resetSec = Math.ceil(resetMs / 1000);
497
+ lines.push(
498
+ theme.fg("muted", `Rate: ${rateInfo.used}/${rateInfo.max}`) +
499
+ (resetMs > 0 ? theme.fg("dim", ` (resets in ${resetSec}s)`) : ""),
500
+ );
501
+
502
+ ctx.ui.setWidget("web-activity", new Text(lines.join("\n"), 0, 0));
503
+ }
504
+
505
+ function formatEntryLine(
506
+ entry: ActivityEntry,
507
+ theme: { fg: (color: string, text: string) => string },
508
+ ): string {
509
+ const typeStr = entry.type === "api" ? "API" : "GET";
510
+ const target =
511
+ entry.type === "api"
512
+ ? `"${truncateToWidth(entry.query || "", 28, "")}"`
513
+ : truncateToWidth(entry.url?.replace(/^https?:\/\//, "") || "", 30, "");
514
+
515
+ const duration = entry.endTime
516
+ ? `${((entry.endTime - entry.startTime) / 1000).toFixed(1)}s`
517
+ : `${((Date.now() - entry.startTime) / 1000).toFixed(1)}s`;
518
+
519
+ let statusStr: string;
520
+ let indicator: string;
521
+ if (entry.error) {
522
+ statusStr = "err";
523
+ indicator = theme.fg("error", "✗");
524
+ } else if (entry.status === null) {
525
+ statusStr = "...";
526
+ indicator = theme.fg("warning", "⋯");
527
+ } else if (entry.status === 0) {
528
+ statusStr = "abort";
529
+ indicator = theme.fg("muted", "○");
530
+ } else {
531
+ statusStr = String(entry.status);
532
+ indicator = entry.status >= 200 && entry.status < 300 ? theme.fg("success", "✓") : theme.fg("error", "✗");
533
+ }
534
+
535
+ return `${typeStr.padEnd(4)} ${target.padEnd(32)} ${statusStr.padStart(5)} ${duration.padStart(5)} ${indicator}`;
536
+ }
537
+
538
+ function handleSessionChange(ctx: ExtensionContext): void {
539
+ abortPendingFetches();
540
+ closeCurator();
541
+ clearCloneCache();
542
+ sessionActive = true;
543
+ restoreFromSession(ctx);
544
+ // Unsubscribe before clear() to avoid callback with stale ctx
545
+ widgetUnsubscribe?.();
546
+ widgetUnsubscribe = null;
547
+ activityMonitor.clear();
548
+ if (widgetVisible) {
549
+ // Re-subscribe with new ctx
550
+ widgetUnsubscribe = activityMonitor.onUpdate(() => updateWidget(ctx));
551
+ updateWidget(ctx);
552
+ }
553
+ }
554
+
555
+ export default function (pi: ExtensionAPI) {
556
+ const initConfig = loadConfigForExtensionInit();
557
+ const curateKey = initConfig.shortcuts?.curate || DEFAULT_SHORTCUTS.curate;
558
+ const activityKey = initConfig.shortcuts?.activity || DEFAULT_SHORTCUTS.activity;
559
+
560
+ function startBackgroundFetch(urls: string[]): string | null {
561
+ if (urls.length === 0) return null;
562
+ const fetchId = generateId();
563
+ const controller = new AbortController();
564
+ pendingFetches.set(fetchId, controller);
565
+ fetchAllContent(urls, controller.signal)
566
+ .then((fetched) => {
567
+ if (!sessionActive || !pendingFetches.has(fetchId)) return;
568
+ const data: StoredSearchData = {
569
+ id: fetchId,
570
+ type: "fetch",
571
+ timestamp: Date.now(),
572
+ urls: stripThumbnails(fetched),
573
+ };
574
+ storeResult(fetchId, data);
575
+ pi.appendEntry("web-search-results", data);
576
+ const ok = fetched.filter(f => !f.error).length;
577
+ pi.sendMessage(
578
+ {
579
+ customType: "web-search-content-ready",
580
+ content: `Content fetched for ${ok}/${fetched.length} URLs [${fetchId}]. Full page content now available.`,
581
+ display: true,
582
+ },
583
+ { triggerTurn: true },
584
+ );
585
+ })
586
+ .catch((err) => {
587
+ if (!sessionActive || !pendingFetches.has(fetchId)) return;
588
+ const message = err instanceof Error ? err.message : String(err);
589
+ const isAbort = (err instanceof Error && err.name === "AbortError") || message.toLowerCase().includes("abort");
590
+ if (!isAbort) {
591
+ pi.sendMessage(
592
+ {
593
+ customType: "web-search-error",
594
+ content: `Content fetch failed [${fetchId}]: ${message}`,
595
+ display: true,
596
+ },
597
+ { triggerTurn: false },
598
+ );
599
+ }
600
+ })
601
+ .finally(() => { pendingFetches.delete(fetchId); });
602
+ return fetchId;
603
+ }
604
+
605
+ function storeAndPublishSearch(results: QueryResultData[]): string {
606
+ const id = generateId();
607
+ const data: StoredSearchData = {
608
+ id, type: "search", timestamp: Date.now(), queries: results,
609
+ };
610
+ storeResult(id, data);
611
+ pi.appendEntry("web-search-results", data);
612
+ return id;
613
+ }
614
+
615
+ interface SearchReturnOptions {
616
+ queryList: string[];
617
+ results: QueryResultData[];
618
+ urls: string[];
619
+ includeContent: boolean;
620
+ inlineContent?: ExtractedContent[];
621
+ curated?: boolean;
622
+ curatedFrom?: number;
623
+ workflow?: SummaryWorkflow;
624
+ approvedSummary?: string;
625
+ summaryMeta?: SummaryMeta;
626
+ }
627
+
628
+ function normalizeSummaryMeta(meta: SummaryMeta | undefined, summaryText: string): SummaryMeta {
629
+ const normalizedText = summaryText.trim();
630
+ if (!meta) {
631
+ return {
632
+ model: null,
633
+ durationMs: 0,
634
+ tokenEstimate: normalizedText.length > 0 ? Math.max(1, Math.ceil(normalizedText.length / 4)) : 0,
635
+ fallbackUsed: false,
636
+ edited: false,
637
+ };
638
+ }
639
+
640
+ return {
641
+ model: meta.model,
642
+ durationMs: Number.isFinite(meta.durationMs) && meta.durationMs >= 0 ? meta.durationMs : 0,
643
+ tokenEstimate: Number.isFinite(meta.tokenEstimate) && meta.tokenEstimate >= 0
644
+ ? meta.tokenEstimate
645
+ : (normalizedText.length > 0 ? Math.max(1, Math.ceil(normalizedText.length / 4)) : 0),
646
+ fallbackUsed: meta.fallbackUsed === true,
647
+ fallbackReason: meta.fallbackReason,
648
+ edited: meta.edited === true,
649
+ };
650
+ }
651
+
652
+ function buildCurationCancelledReturn(
653
+ reason: "user" | "stale",
654
+ partial?: {
655
+ queries?: QueryResultData[];
656
+ queryCount?: number;
657
+ browserConnected?: boolean;
658
+ lastHeartbeatAgeMs?: number | null;
659
+ curatorUrl?: string;
660
+ browserOpenError?: string;
661
+ },
662
+ ) {
663
+ const message = `Search curation cancelled (${reason}).`;
664
+ const cancelledQueries = partial?.queries?.length
665
+ ? partial.queries.map(q => ({
666
+ query: q.query,
667
+ provider: q.provider ?? null,
668
+ error: q.error,
669
+ resultCount: q.results?.length ?? 0,
670
+ }))
671
+ : undefined;
672
+ const extraLines: string[] = [];
673
+ if (partial?.curatorUrl) extraLines.push(`curator: ${partial.curatorUrl}`);
674
+ if (partial?.browserOpenError) extraLines.push(`browser open error: ${partial.browserOpenError}`);
675
+ return {
676
+ content: [{ type: "text", text: message }],
677
+ details: {
678
+ error: message,
679
+ cancelled: true,
680
+ cancelReason: reason,
681
+ browserConnected: partial?.browserConnected,
682
+ lastHeartbeatAgeMs: partial?.lastHeartbeatAgeMs,
683
+ queryCount: partial?.queryCount,
684
+ cancelledQueries,
685
+ extraLines: extraLines.length > 0 ? extraLines : undefined,
686
+ },
687
+ };
688
+ }
689
+
690
+ async function resolveFirstAvailableModel(
691
+ ctx: SummaryGenerationContext,
692
+ candidates: Array<{ provider: string; id: string }>,
693
+ ): Promise<{ model: Model; apiKey: string; headers?: Record<string, string> }> {
694
+ const enabledModelPatterns = loadEnabledModelPatterns(ctx);
695
+ for (const { provider, id } of candidates) {
696
+ const model = ctx.modelRegistry.find(provider, id);
697
+ if (!model || !modelMatchesEnabledPatterns(model, enabledModelPatterns)) continue;
698
+ const auth = await ctx.modelRegistry.getApiKeyAndHeaders(model);
699
+ if (auth.ok && auth.apiKey) return { model, apiKey: auth.apiKey, headers: auth.headers };
700
+ }
701
+ throw new Error(`No enabled model available: ${candidates.map(c => `${c.provider}/${c.id}`).join(", ")}`);
702
+ }
703
+
704
+ async function rewriteSearchQuery(query: string, ctx: SummaryGenerationContext, signal: AbortSignal): Promise<string> {
705
+ const { model, apiKey, headers } = await resolveFirstAvailableModel(ctx, [
706
+ { provider: "anthropic", id: "claude-haiku-4-5" },
707
+ { provider: "google", id: "gemini-2.5-flash" },
708
+ { provider: "openai", id: "gpt-4.1-mini" },
709
+ ]);
710
+ const response = await complete(
711
+ model,
712
+ {
713
+ messages: [{
714
+ role: "user",
715
+ content: [{ type: "text", text: `Rewrite this web search query to get better, more specific results. Add relevant year qualifiers, precise technical terms, and specificity. Return ONLY the improved query text, nothing else.\n\nQuery: ${query}` }],
716
+ timestamp: Date.now(),
717
+ }],
718
+ },
719
+ { apiKey, headers, signal },
720
+ );
721
+ if (response.stopReason === "aborted") throw new Error("Aborted");
722
+ const contentParts = Array.isArray(response.content) ? response.content : [];
723
+ const text = contentParts
724
+ .map(p => {
725
+ if (!p || typeof p !== "object") return "";
726
+ const part = p as Record<string, unknown>;
727
+ return typeof part.text === "string" ? part.text : "";
728
+ })
729
+ .join("")
730
+ .trim();
731
+ if (!text) throw new Error("Rewrite returned empty response");
732
+ return text;
733
+ }
734
+
735
+ async function generateSummaryForSelectedIndices(
736
+ selectedQueryIndices: number[],
737
+ resultsByIndex: Map<number, QueryResultData>,
738
+ summaryContext: SummaryGenerationContext,
739
+ signal?: AbortSignal,
740
+ modelOverride?: string,
741
+ feedback?: string,
742
+ ): Promise<{ summary: string; meta: SummaryMeta }> {
743
+ const selectedResults: QueryResultData[] = [];
744
+ for (const qi of selectedQueryIndices) {
745
+ const result = resultsByIndex.get(qi);
746
+ if (result) selectedResults.push(result);
747
+ }
748
+ if (selectedResults.length === 0) {
749
+ throw new Error("No selected results available for summary generation");
750
+ }
751
+ try {
752
+ return await generateSummaryDraft(selectedResults, summaryContext, signal, modelOverride, feedback);
753
+ } catch (err) {
754
+ const isEmptyResponse = err instanceof Error && err.message.includes("Summary model returned empty response");
755
+ if (!isEmptyResponse) throw err;
756
+ const deterministic = buildDeterministicSummary(selectedResults);
757
+ return {
758
+ summary: deterministic.summary,
759
+ meta: {
760
+ ...deterministic.meta,
761
+ fallbackReason: "summary-model-empty-response",
762
+ },
763
+ };
764
+ }
765
+ }
766
+
767
+ async function loadSummaryModelChoices(
768
+ summaryContext: SummaryGenerationContext,
769
+ ): Promise<{ summaryModels: Array<{ value: string; label: string }>; defaultSummaryModel: string | null }> {
770
+ const summaryModels: Array<{ value: string; label: string }> = [];
771
+ const seen = new Set<string>();
772
+ const availableValues = new Set<string>();
773
+
774
+ const addModel = (provider: string, id: string) => {
775
+ const value = `${provider}/${id}`;
776
+ if (seen.has(value)) return;
777
+ seen.add(value);
778
+ summaryModels.push({ value, label: value });
779
+ };
780
+
781
+ let enabledModelPatterns: string[] | null = null;
782
+ let scopeLoaded = true;
783
+ try {
784
+ enabledModelPatterns = loadEnabledModelPatterns(summaryContext);
785
+ const availableModels = summaryContext.modelRegistry.getAvailable();
786
+ for (const model of availableModels) {
787
+ if (!modelMatchesEnabledPatterns(model, enabledModelPatterns)) continue;
788
+ const value = `${model.provider}/${model.id}`;
789
+ availableValues.add(value);
790
+ addModel(model.provider, model.id);
791
+ }
792
+ } catch (err) {
793
+ scopeLoaded = false;
794
+ const message = err instanceof Error ? err.message : String(err);
795
+ console.error(`Failed to load summary models: ${message}`);
796
+ }
797
+
798
+ const currentModelValue = summaryContext.model
799
+ ? `${summaryContext.model.provider}/${summaryContext.model.id}`
800
+ : null;
801
+ if (scopeLoaded && summaryContext.model && currentModelValue && !seen.has(currentModelValue) && modelMatchesEnabledPatterns(summaryContext.model, enabledModelPatterns)) {
802
+ addModel(summaryContext.model.provider, summaryContext.model.id);
803
+ }
804
+
805
+ const config = loadConfig();
806
+ const configuredSummaryModel = typeof config.summaryModel === "string" ? config.summaryModel.trim() : "";
807
+ const preferredDefaults = [
808
+ "anthropic/claude-haiku-4-5",
809
+ "openai-codex/gpt-5.3-codex-spark",
810
+ ];
811
+
812
+ let defaultSummaryModel: string | null = null;
813
+ if (configuredSummaryModel.length > 0 && availableValues.has(configuredSummaryModel)) {
814
+ defaultSummaryModel = configuredSummaryModel;
815
+ }
816
+ if (!defaultSummaryModel) {
817
+ for (const preferred of preferredDefaults) {
818
+ if (availableValues.has(preferred)) {
819
+ defaultSummaryModel = preferred;
820
+ break;
821
+ }
822
+ }
823
+ }
824
+ return { summaryModels, defaultSummaryModel };
825
+ }
826
+
827
+ function resolveSummaryForSubmit(
828
+ payload: { selectedQueryIndices: number[]; summary?: string; summaryMeta?: SummaryMeta },
829
+ resultsByIndex: Map<number, QueryResultData>,
830
+ ): { approvedSummary: string; summaryMeta: SummaryMeta } {
831
+ const submittedSummary = typeof payload.summary === "string" ? payload.summary.trim() : "";
832
+ if (submittedSummary.length > 0) {
833
+ return {
834
+ approvedSummary: submittedSummary,
835
+ summaryMeta: normalizeSummaryMeta(payload.summaryMeta, submittedSummary),
836
+ };
837
+ }
838
+
839
+ const selected = filterByQueryIndices(payload.selectedQueryIndices, resultsByIndex).results;
840
+ const fallbackResults = selected.length > 0 ? selected : [...resultsByIndex.values()];
841
+ const deterministic = buildDeterministicSummary(fallbackResults);
842
+ return {
843
+ approvedSummary: deterministic.summary,
844
+ summaryMeta: deterministic.meta,
845
+ };
846
+ }
847
+
848
+ function buildSearchReturn(opts: SearchReturnOptions) {
849
+ const sc = opts.results.filter(r => !r.error).length;
850
+ const tr = opts.results.reduce((sum, r) => sum + r.results.length, 0);
851
+
852
+ const hasApprovedSummary = typeof opts.approvedSummary === "string" && opts.approvedSummary.trim().length > 0;
853
+ let output = "";
854
+ if (hasApprovedSummary) {
855
+ output = opts.approvedSummary!.trim();
856
+ } else {
857
+ if (opts.curated) {
858
+ output += "[These results were manually curated by the user in the browser. Use them as-is — do not re-search or discard.]\n\n";
859
+ }
860
+ const duplicateQueries = opts.curated ? duplicateQuerySet(opts.results) : new Set<string>();
861
+ for (const { query, answer, results, error, provider } of opts.results) {
862
+ if (opts.queryList.length > 1) {
863
+ output += opts.curated
864
+ ? formatQueryHeader(query, provider, duplicateQueries)
865
+ : `## Query: "${query}"\n\n`;
866
+ }
867
+ if (error) output += `Error: ${error}\n\n`;
868
+ else if (results.length === 0) output += "No results found.\n\n";
869
+ else output += formatSearchSummary(results, answer) + "\n\n";
870
+ }
871
+ }
872
+
873
+ const hasInlineReady = hasFullInlineCoverage(opts.urls, opts.inlineContent);
874
+ let fetchId: string | null = null;
875
+ if (hasInlineReady && opts.inlineContent) {
876
+ fetchId = generateId();
877
+ const data: StoredSearchData = {
878
+ id: fetchId,
879
+ type: "fetch",
880
+ timestamp: Date.now(),
881
+ urls: opts.inlineContent,
882
+ };
883
+ storeResult(fetchId, data);
884
+ pi.appendEntry("web-search-results", data);
885
+ if (!hasApprovedSummary) {
886
+ output += `---\nFull content for ${opts.inlineContent.length} sources available [${fetchId}].`;
887
+ }
888
+ } else if (opts.includeContent) {
889
+ fetchId = startBackgroundFetch(opts.urls);
890
+ if (fetchId && !hasApprovedSummary) {
891
+ output += `---\nContent fetching in background [${fetchId}]. Will notify when ready.`;
892
+ }
893
+ }
894
+
895
+ const searchId = storeAndPublishSearch(opts.results);
896
+ const isBackgroundFetch = fetchId !== null && !hasInlineReady;
897
+
898
+ return {
899
+ content: [{ type: "text", text: output.trim() }],
900
+ details: {
901
+ queries: opts.queryList,
902
+ queryCount: opts.queryList.length,
903
+ successfulQueries: sc,
904
+ totalResults: tr,
905
+ includeContent: opts.includeContent,
906
+ fetchId,
907
+ fetchUrls: isBackgroundFetch ? opts.urls : undefined,
908
+ searchId,
909
+ ...(opts.curated ? {
910
+ curated: true,
911
+ curatedFrom: opts.curatedFrom,
912
+ curatedQueries: opts.results.map(r => ({
913
+ query: r.query,
914
+ provider: r.provider || null,
915
+ answer: r.answer || null,
916
+ sources: r.results.map(s => ({ title: s.title, url: s.url })),
917
+ error: r.error,
918
+ })),
919
+ } : {}),
920
+ ...((opts.workflow && hasApprovedSummary)
921
+ ? {
922
+ summary: {
923
+ text: opts.approvedSummary!.trim(),
924
+ workflow: opts.workflow,
925
+ model: opts.summaryMeta?.model ?? null,
926
+ durationMs: opts.summaryMeta?.durationMs ?? 0,
927
+ tokenEstimate: opts.summaryMeta?.tokenEstimate ?? 0,
928
+ fallbackUsed: opts.summaryMeta?.fallbackUsed === true,
929
+ fallbackReason: opts.summaryMeta?.fallbackReason,
930
+ edited: opts.summaryMeta?.edited === true,
931
+ },
932
+ }
933
+ : {}),
934
+ },
935
+ };
936
+ }
937
+
938
+ function filterByQueryIndices(selectedQueryIndices: number[], results: Map<number, QueryResultData>) {
939
+ const filteredResults: QueryResultData[] = [];
940
+ const filteredUrls: string[] = [];
941
+ for (const qi of selectedQueryIndices) {
942
+ const r = results.get(qi);
943
+ if (r) {
944
+ filteredResults.push(r);
945
+ for (const res of r.results) {
946
+ if (!filteredUrls.includes(res.url)) filteredUrls.push(res.url);
947
+ }
948
+ }
949
+ }
950
+ return { results: filteredResults, urls: filteredUrls };
951
+ }
952
+
953
+ function collectAllResultsAndUrls(resultsByIndex: Map<number, QueryResultData>) {
954
+ const results = [...resultsByIndex.values()];
955
+ const urls: string[] = [];
956
+ for (const result of results) {
957
+ for (const source of result.results) {
958
+ if (!urls.includes(source.url)) urls.push(source.url);
959
+ }
960
+ }
961
+ return { results, urls };
962
+ }
963
+
964
+ async function openCuratorBrowser(callId: string, pc: PendingCurate, searchesComplete = true): Promise<void> {
965
+ if (pendingCurates.get(callId) !== pc) return;
966
+ let handle: CuratorServerHandle | null = null;
967
+ try {
968
+ pc.phase = "curating";
969
+
970
+ const searchAbort = new AbortController();
971
+ const addSearchSignal = pc.signal
972
+ ? AbortSignal.any([pc.signal, searchAbort.signal])
973
+ : searchAbort.signal;
974
+
975
+ const sessionToken = randomUUID();
976
+ handle = await startCuratorServer(
977
+ {
978
+ queries: pc.queryList,
979
+ sessionToken,
980
+ timeout: pc.timeoutSeconds,
981
+ availableProviders: pc.availableProviders,
982
+ defaultProvider: pc.defaultProvider,
983
+ searchProvider: pc.searchProvider,
984
+ summaryModels: pc.summaryModels,
985
+ defaultSummaryModel: pc.defaultSummaryModel,
986
+ },
987
+ {
988
+ async onSummarize(selectedQueryIndices, summarizeSignal, model, feedback) {
989
+ if (pendingCurates.get(callId) !== pc) throw new Error("Curator session is no longer active.");
990
+ pc.onUpdate?.({
991
+ content: [{ type: "text", text: "Generating summary draft..." }],
992
+ details: { phase: "generating-summary", progress: 0.9, curatorUrl: pc.curatorUrl, timeoutSeconds: pc.timeoutSeconds, shortcut: curateKey },
993
+ });
994
+ const draft = await generateSummaryForSelectedIndices(
995
+ selectedQueryIndices,
996
+ pc.searchResults,
997
+ pc.summaryContext,
998
+ summarizeSignal,
999
+ model,
1000
+ feedback,
1001
+ );
1002
+ if (pendingCurates.get(callId) !== pc) throw new Error("Curator session is no longer active.");
1003
+ pc.onUpdate?.({
1004
+ content: [{ type: "text", text: "Summary draft ready — waiting for approval..." }],
1005
+ details: { phase: "waiting-for-approval", progress: 1, curatorUrl: pc.curatorUrl, timeoutSeconds: pc.timeoutSeconds, shortcut: curateKey },
1006
+ });
1007
+ return draft;
1008
+ },
1009
+ onSubmit(payload) {
1010
+ if (pendingCurates.get(callId) !== pc) return;
1011
+ searchAbort.abort();
1012
+ const filtered = payload.selectedQueryIndices.length > 0
1013
+ ? filterByQueryIndices(payload.selectedQueryIndices, pc.searchResults)
1014
+ : collectAllResultsAndUrls(pc.searchResults);
1015
+ const filteredInline = pc.allInlineContent.filter(c => filtered.urls.includes(c.url));
1016
+ const base: SearchReturnOptions = {
1017
+ queryList: filtered.results.map(r => r.query),
1018
+ results: filtered.results,
1019
+ urls: filtered.urls,
1020
+ includeContent: pc.includeContent,
1021
+ inlineContent: filteredInline.length > 0 ? filteredInline : undefined,
1022
+ curated: true,
1023
+ curatedFrom: pc.searchResults.size,
1024
+ };
1025
+ if (!payload.rawResults) {
1026
+ const resolvedSummary = resolveSummaryForSubmit(payload, pc.searchResults);
1027
+ base.workflow = pc.workflow;
1028
+ base.approvedSummary = resolvedSummary.approvedSummary;
1029
+ base.summaryMeta = resolvedSummary.summaryMeta;
1030
+ }
1031
+ pc.finish(buildSearchReturn(base));
1032
+ closeCurator(callId);
1033
+ },
1034
+ onCancel(reason) {
1035
+ if (pendingCurates.get(callId) !== pc) return;
1036
+ searchAbort.abort();
1037
+ if (reason === "timeout") {
1038
+ const resolvedSummary = resolveSummaryForSubmit({ selectedQueryIndices: [], summary: undefined, summaryMeta: undefined }, pc.searchResults);
1039
+ const all = collectAllResultsAndUrls(pc.searchResults);
1040
+ const filteredInline = pc.allInlineContent.filter(c => all.urls.includes(c.url));
1041
+ pc.finish(buildSearchReturn({
1042
+ queryList: all.results.map(r => r.query),
1043
+ results: all.results,
1044
+ urls: all.urls,
1045
+ includeContent: pc.includeContent,
1046
+ inlineContent: filteredInline.length > 0 ? filteredInline : undefined,
1047
+ curated: true,
1048
+ curatedFrom: pc.searchResults.size,
1049
+ workflow: pc.workflow,
1050
+ approvedSummary: resolvedSummary.approvedSummary,
1051
+ summaryMeta: resolvedSummary.summaryMeta,
1052
+ }));
1053
+ } else {
1054
+ const conn = activeCurators.get(callId)?.getConnectionState();
1055
+ pc.finish(buildCurationCancelledReturn(reason, {
1056
+ queries: Array.from(pc.searchResults.values()),
1057
+ queryCount: pc.queryList.length,
1058
+ browserConnected: conn?.browserConnected,
1059
+ lastHeartbeatAgeMs: conn?.lastHeartbeatAgeMs,
1060
+ curatorUrl: pc.curatorUrl,
1061
+ browserOpenError: pc.browserOpenError,
1062
+ }));
1063
+ }
1064
+ closeCurator(callId);
1065
+ },
1066
+ onProviderChange(provider) {
1067
+ if (pendingCurates.get(callId) !== pc) return;
1068
+ const normalized = normalizeProviderInput(provider);
1069
+ if (!normalized || normalized === "auto") return;
1070
+ pc.defaultProvider = normalized;
1071
+ pc.searchProvider = normalized;
1072
+ try {
1073
+ saveConfig({ provider: normalized });
1074
+ } catch (err) {
1075
+ const message = err instanceof Error ? err.message : String(err);
1076
+ console.error(`Failed to persist default provider: ${message}`);
1077
+ }
1078
+ },
1079
+ async onAddSearch(query, queryIndex, provider) {
1080
+ if (pendingCurates.get(callId) !== pc) throw new Error("Curator session is no longer active.");
1081
+ const normalizedProvider = normalizeProviderInput(provider);
1082
+ const requestedProvider = !normalizedProvider || normalizedProvider === "auto"
1083
+ ? pc.searchProvider
1084
+ : normalizedProvider;
1085
+ try {
1086
+ const { answer, results, inlineContent, provider: actualProvider } = await search(query, {
1087
+ provider: requestedProvider,
1088
+ numResults: pc.numResults,
1089
+ recencyFilter: pc.recencyFilter,
1090
+ domainFilter: pc.domainFilter,
1091
+ includeContent: pc.includeContent,
1092
+ signal: addSearchSignal,
1093
+ extensionContext: ctx,
1094
+ });
1095
+ if (pendingCurates.get(callId) !== pc) throw new Error("Curator session is no longer active.");
1096
+ pc.searchResults.set(queryIndex, { query, answer, results, error: null, provider: actualProvider });
1097
+ if (inlineContent) pc.allInlineContent.push(...inlineContent);
1098
+ return {
1099
+ answer,
1100
+ results: results.map(r => ({ title: r.title, url: r.url, domain: extractDomain(r.url) })),
1101
+ provider: actualProvider,
1102
+ };
1103
+ } catch (err) {
1104
+ const message = err instanceof Error ? err.message : String(err);
1105
+ if (pendingCurates.get(callId) === pc) {
1106
+ pc.searchResults.set(queryIndex, { query, answer: "", results: [], error: message, provider: requestedProvider });
1107
+ }
1108
+ throw err;
1109
+ }
1110
+ },
1111
+ async onRewriteQuery(query, rewriteSignal) {
1112
+ if (pendingCurates.get(callId) !== pc) throw new Error("Curator session is no longer active.");
1113
+ return rewriteSearchQuery(query, pc.summaryContext, rewriteSignal);
1114
+ },
1115
+ },
1116
+ );
1117
+
1118
+ if (pendingCurates.get(callId) !== pc) {
1119
+ handle.close();
1120
+ return;
1121
+ }
1122
+
1123
+ activeCurators.set(callId, handle);
1124
+ pc.curatorUrl = handle.url;
1125
+
1126
+ for (const [qi, data] of pc.searchResults) {
1127
+ if (data.error) {
1128
+ handle.pushError(qi, data.error, data.provider);
1129
+ } else {
1130
+ handle.pushResult(qi, {
1131
+ answer: data.answer,
1132
+ results: data.results.map(r => ({ title: r.title, url: r.url, domain: extractDomain(r.url) })),
1133
+ provider: data.provider || pc.defaultProvider,
1134
+ });
1135
+ }
1136
+ }
1137
+ if (searchesComplete) handle.searchesDone();
1138
+
1139
+ const sendCuratorFallbackUpdate = (message: string) => {
1140
+ pc.onUpdate?.({
1141
+ content: [{ type: "text", text: `${message}\nOpen manually: ${handle.url}` }],
1142
+ details: {
1143
+ phase: "curator-fallback",
1144
+ progress: searchesComplete ? 1 : 0.5,
1145
+ curatorUrl: handle.url,
1146
+ timeoutSeconds: pc.timeoutSeconds,
1147
+ shortcut: curateKey,
1148
+ browserOpenError: pc.browserOpenError,
1149
+ },
1150
+ });
1151
+ };
1152
+
1153
+ pc.onUpdate?.({
1154
+ content: [{ type: "text", text: searchesComplete ? "Waiting for summary approval in browser..." : "Searches streaming to browser..." }],
1155
+ details: {
1156
+ phase: "curating",
1157
+ progress: searchesComplete ? 1 : 0.5,
1158
+ curatorUrl: handle.url,
1159
+ timeoutSeconds: pc.timeoutSeconds,
1160
+ shortcut: curateKey,
1161
+ },
1162
+ });
1163
+
1164
+ const open = platform() === "darwin" ? await getGlimpseOpen() : null;
1165
+ if (open) {
1166
+ try {
1167
+ const win = openInGlimpse(open, handle.url, "Search Curator");
1168
+ glimpseWins.set(callId, win);
1169
+ win.on("closed", () => {
1170
+ if (glimpseWins.get(callId) === win) {
1171
+ glimpseWins.delete(callId);
1172
+ closeCurator(callId);
1173
+ }
1174
+ });
1175
+ return;
1176
+ } catch (err) {
1177
+ const message = err instanceof Error ? err.message : String(err);
1178
+ console.error(`Failed to open Glimpse curator window: ${message}`);
1179
+ glimpseWins.delete(callId);
1180
+ }
1181
+ }
1182
+ await openInBrowser(pi, handle.url);
1183
+ } catch (err) {
1184
+ const message = err instanceof Error ? err.message : String(err);
1185
+ console.error(`Failed to open curator UI: ${message}`);
1186
+ if (handle && activeCurators.get(callId) === handle && pendingCurates.get(callId) === pc) {
1187
+ pc.browserOpenError = message;
1188
+ sendCuratorFallbackUpdate("Search curator is running, but the browser did not open automatically.");
1189
+ } else if (pendingCurates.get(callId) === pc || (handle && activeCurators.get(callId) === handle)) {
1190
+ closeCurator(callId);
1191
+ }
1192
+ }
1193
+ }
1194
+
1195
+ pi.registerShortcut(curateKey, {
1196
+ description: "Review search results",
1197
+ handler: async (ctx) => {
1198
+ const entries = [...pendingCurates.entries()];
1199
+ if (entries.length === 0) return;
1200
+ const [callId, pc] = entries[entries.length - 1];
1201
+
1202
+ if (pc.phase === "searching") {
1203
+ pc.browserPromise = openCuratorBrowser(callId, pc, false);
1204
+ ctx.ui.notify("Opening curator — remaining searches will stream in", "info");
1205
+ return;
1206
+ }
1207
+ },
1208
+ });
1209
+
1210
+ pi.registerShortcut(activityKey, {
1211
+ description: "Toggle web search activity",
1212
+ handler: async (ctx) => {
1213
+ widgetVisible = !widgetVisible;
1214
+ if (widgetVisible) {
1215
+ widgetUnsubscribe = activityMonitor.onUpdate(() => updateWidget(ctx));
1216
+ updateWidget(ctx);
1217
+ } else {
1218
+ widgetUnsubscribe?.();
1219
+ widgetUnsubscribe = null;
1220
+ ctx.ui.setWidget("web-activity", undefined);
1221
+ }
1222
+ },
1223
+ });
1224
+
1225
+ pi.on("session_start", async (_event, ctx) => handleSessionChange(ctx));
1226
+ pi.on("session_tree", async (_event, ctx) => handleSessionChange(ctx));
1227
+
1228
+ pi.on("session_shutdown", () => {
1229
+ sessionActive = false;
1230
+ abortPendingFetches();
1231
+ closeCurator();
1232
+ clearCloneCache();
1233
+ clearResults();
1234
+ // Unsubscribe before clear() to avoid callback with stale ctx
1235
+ widgetUnsubscribe?.();
1236
+ widgetUnsubscribe = null;
1237
+ activityMonitor.clear();
1238
+ widgetVisible = false;
1239
+ });
1240
+
1241
+ if (initConfig.webSearch?.enabled !== false) pi.registerTool({
1242
+ name: "web_search",
1243
+ label: "Web Search",
1244
+ description:
1245
+ `Search the web using OpenAI, Brave, Parallel, Tavily, Exa, Perplexity, or Gemini. Returns an AI-synthesized answer with source citations. OpenAI web_search uses a Codex subscription or OpenAI API key. For comprehensive research, prefer queries (plural) with 2-4 varied angles over a single query — each query gets its own synthesized answer, so varying phrasing and scope gives much broader coverage. When includeContent is true, full page content is fetched in the background. Searches auto-open the interactive browser curator and stream results live; set workflow to "none" to skip curation or "auto-summary" for a model-generated summary without the browser curator. Provider auto-selects: OpenAI when suitable and available, then Exa, Brave, Parallel, Tavily, Perplexity, Gemini API, then Gemini Web.`,
1246
+ promptSnippet:
1247
+ "Use for web research questions. Prefer {queries:[...]} with 2-4 varied angles over a single query for broader coverage.",
1248
+ parameters: Type.Object({
1249
+ query: Type.Optional(Type.String({ description: "Single search query. For research tasks, prefer 'queries' with multiple varied angles instead." })),
1250
+ queries: Type.Optional(Type.Array(Type.String(), { description: "Multiple queries searched in sequence, each returning its own synthesized answer. Prefer this for research — vary phrasing, scope, and angle across 2-4 queries to maximize coverage. Good: ['React vs Vue performance benchmarks 2026', 'React vs Vue developer experience comparison', 'React ecosystem size vs Vue ecosystem']. Bad: ['React vs Vue', 'React vs Vue comparison', 'React vs Vue review'] (too similar, redundant results)." })),
1251
+ numResults: Type.Optional(Type.Number({ description: "Results per query (default: 5, max: 20)" })),
1252
+ includeContent: Type.Optional(Type.Boolean({ description: "Fetch full page content (async)" })),
1253
+ recencyFilter: Type.Optional(
1254
+ StringEnum(["day", "week", "month", "year"], { description: "Filter by recency" }),
1255
+ ),
1256
+ domainFilter: Type.Optional(Type.Array(Type.String(), { description: "Limit to domains (prefix with - to exclude)" })),
1257
+ provider: Type.Optional(
1258
+ StringEnum(["auto", "openai", "brave", "parallel", "tavily", "exa", "perplexity", "gemini"], { description: "Search provider (default: auto)" }),
1259
+ ),
1260
+ workflow: Type.Optional(
1261
+ StringEnum(["none", "summary-review", "auto-summary"], {
1262
+ description: "Search workflow mode: none = no curator, summary-review = open curator with auto summary draft (default), auto-summary = generate summary without opening curator",
1263
+ }),
1264
+ ),
1265
+ }),
1266
+
1267
+ async execute(callId, params, signal, onUpdate, ctx) {
1268
+ const rawQueryList: unknown[] = Array.isArray(params.queries)
1269
+ ? params.queries
1270
+ : (params.query !== undefined ? [params.query] : []);
1271
+ const queryList = normalizeQueryList(rawQueryList);
1272
+ const configWorkflow = loadConfigForExtensionInit().workflow;
1273
+ const workflow = resolveWorkflow(params.workflow ?? configWorkflow, ctx?.hasUI !== false);
1274
+ const shouldCurate = workflow === "summary-review";
1275
+
1276
+ if (queryList.length === 0) {
1277
+ return {
1278
+ content: [{ type: "text", text: "Error: No query provided. Use 'query' or 'queries' parameter." }],
1279
+ details: { error: "No query provided" },
1280
+ };
1281
+ }
1282
+
1283
+ if (shouldCurate && !ctx) {
1284
+ return {
1285
+ content: [{ type: "text", text: "Error: Curation requires an active extension context." }],
1286
+ details: { error: "Missing extension context" },
1287
+ };
1288
+ }
1289
+
1290
+ if (shouldCurate) {
1291
+ closeCurator(callId);
1292
+
1293
+ let resolvePromise: (value: unknown) => void = () => {};
1294
+ const promise = new Promise<unknown>((resolve) => {
1295
+ resolvePromise = resolve;
1296
+ });
1297
+ const includeContent = params.includeContent ?? false;
1298
+ const searchResults = new Map<number, QueryResultData>();
1299
+ const allInlineContent: ExtractedContent[] = [];
1300
+ const searchAbort = new AbortController();
1301
+ const searchSignal = signal
1302
+ ? AbortSignal.any([signal, searchAbort.signal])
1303
+ : searchAbort.signal;
1304
+ let cancelled = false;
1305
+
1306
+ const bootstrap = await loadCuratorBootstrap(params.provider, ctx, {
1307
+ numResults: params.numResults,
1308
+ recencyFilter: params.recencyFilter,
1309
+ });
1310
+ const availableProviders = bootstrap.availableProviders;
1311
+ const defaultProvider = bootstrap.defaultProvider;
1312
+ const rawSearchProvider = normalizeProviderInput(params.provider ?? loadConfig().provider ?? "auto") ?? "auto";
1313
+ const searchProvider = rawSearchProvider === "auto" ? "auto" : defaultProvider;
1314
+ const curatorTimeoutSeconds = bootstrap.timeoutSeconds;
1315
+ const curatorWorkflow: CuratorWorkflow = "summary-review";
1316
+
1317
+ const summaryContext: SummaryGenerationContext = {
1318
+ model: ctx.model,
1319
+ modelRegistry: ctx.modelRegistry,
1320
+ cwd: ctx.cwd,
1321
+ isProjectTrusted: () => ctx.isProjectTrusted(),
1322
+ };
1323
+ const summaryModelChoices = await loadSummaryModelChoices(summaryContext);
1324
+
1325
+ const pc: PendingCurate = {
1326
+ phase: "searching",
1327
+ workflow: curatorWorkflow,
1328
+ summaryContext,
1329
+ searchResults,
1330
+ allInlineContent,
1331
+ queryList,
1332
+ includeContent,
1333
+ numResults: params.numResults,
1334
+ recencyFilter: params.recencyFilter,
1335
+ domainFilter: params.domainFilter,
1336
+ availableProviders,
1337
+ defaultProvider,
1338
+ searchProvider,
1339
+ summaryModels: summaryModelChoices.summaryModels,
1340
+ defaultSummaryModel: summaryModelChoices.defaultSummaryModel,
1341
+ timeoutSeconds: curatorTimeoutSeconds,
1342
+ onUpdate: onUpdate as PendingCurate["onUpdate"],
1343
+ signal,
1344
+ abortSearches: () => {
1345
+ if (!searchAbort.signal.aborted) searchAbort.abort();
1346
+ },
1347
+ finish: () => {},
1348
+ cancel: () => {},
1349
+ };
1350
+
1351
+ const finish = (value: unknown) => {
1352
+ if (cancelled) return;
1353
+ cancelled = true;
1354
+ pc.abortSearches();
1355
+ signal?.removeEventListener("abort", onAbort);
1356
+ pendingCurates.delete(callId);
1357
+ resolvePromise(value);
1358
+ };
1359
+
1360
+ const cancel = (reason: "user" | "stale" = "stale") => {
1361
+ if (cancelled) return;
1362
+ const conn = activeCurators.get(callId)?.getConnectionState();
1363
+ finish(buildCurationCancelledReturn(reason, {
1364
+ queries: Array.from(searchResults.values()),
1365
+ queryCount: queryList.length,
1366
+ browserConnected: conn?.browserConnected,
1367
+ lastHeartbeatAgeMs: conn?.lastHeartbeatAgeMs,
1368
+ curatorUrl: pc.curatorUrl,
1369
+ browserOpenError: pc.browserOpenError,
1370
+ }));
1371
+ };
1372
+
1373
+ pc.finish = finish;
1374
+ pc.cancel = cancel;
1375
+
1376
+ const onAbort = () => closeCurator(callId);
1377
+ pendingCurates.set(callId, pc);
1378
+ signal?.addEventListener("abort", onAbort, { once: true });
1379
+ pc.browserPromise = openCuratorBrowser(callId, pc, false);
1380
+
1381
+ for (let qi = 0; qi < queryList.length; qi++) {
1382
+ if (signal?.aborted || cancelled || searchAbort.signal.aborted) break;
1383
+ onUpdate?.({
1384
+ content: [{ type: "text", text: `Searching ${qi + 1}/${queryList.length}: "${queryList[qi]}"...` }],
1385
+ details: { phase: "searching", progress: qi / queryList.length, currentQuery: queryList[qi] },
1386
+ });
1387
+ const requestedProvider = pc.searchProvider;
1388
+ try {
1389
+ const { answer, results, inlineContent, provider } = await search(queryList[qi], {
1390
+ provider: requestedProvider,
1391
+ numResults: params.numResults,
1392
+ recencyFilter: params.recencyFilter,
1393
+ domainFilter: params.domainFilter,
1394
+ includeContent: params.includeContent,
1395
+ signal: searchSignal,
1396
+ extensionContext: ctx,
1397
+ });
1398
+ if (signal?.aborted || cancelled || searchAbort.signal.aborted) break;
1399
+ searchResults.set(qi, { query: queryList[qi], answer, results, error: null, provider });
1400
+ if (inlineContent) allInlineContent.push(...inlineContent);
1401
+ const curator = activeCurators.get(callId);
1402
+ if (curator) {
1403
+ curator.pushResult(qi, {
1404
+ answer,
1405
+ results: results.map(r => ({ title: r.title, url: r.url, domain: extractDomain(r.url) })),
1406
+ provider,
1407
+ });
1408
+ }
1409
+ } catch (err) {
1410
+ if (signal?.aborted || cancelled || searchAbort.signal.aborted) break;
1411
+ const message = err instanceof Error ? err.message : String(err);
1412
+ searchResults.set(qi, { query: queryList[qi], answer: "", results: [], error: message, provider: requestedProvider });
1413
+ const curator = activeCurators.get(callId);
1414
+ if (curator) {
1415
+ curator.pushError(qi, message, requestedProvider);
1416
+ }
1417
+ }
1418
+ }
1419
+
1420
+ if (signal?.aborted || cancelled || searchAbort.signal.aborted) {
1421
+ cancel();
1422
+ return promise;
1423
+ }
1424
+
1425
+ await pc.browserPromise;
1426
+ const curator = activeCurators.get(callId);
1427
+ if (curator && !cancelled) {
1428
+ curator.searchesDone();
1429
+ if (pc.browserOpenError) {
1430
+ pc.onUpdate?.({
1431
+ content: [{ type: "text", text: `All searches complete. Open the curator manually: ${pc.curatorUrl}` }],
1432
+ details: {
1433
+ phase: "curator-fallback",
1434
+ progress: 1,
1435
+ curatorUrl: pc.curatorUrl,
1436
+ timeoutSeconds: pc.timeoutSeconds,
1437
+ shortcut: curateKey,
1438
+ browserOpenError: pc.browserOpenError,
1439
+ },
1440
+ });
1441
+ } else {
1442
+ pc.onUpdate?.({
1443
+ content: [{ type: "text", text: "All searches complete — waiting for summary approval in browser..." }],
1444
+ details: {
1445
+ phase: "curating",
1446
+ progress: 1,
1447
+ curatorUrl: pc.curatorUrl,
1448
+ timeoutSeconds: pc.timeoutSeconds,
1449
+ shortcut: curateKey,
1450
+ },
1451
+ });
1452
+ }
1453
+ }
1454
+
1455
+ return promise;
1456
+ }
1457
+
1458
+ const searchResults: QueryResultData[] = [];
1459
+ const allUrls: string[] = [];
1460
+ const allInlineContent: ExtractedContent[] = [];
1461
+ const resolvedProvider = normalizeProviderInput(params.provider ?? loadConfig().provider);
1462
+
1463
+ for (let i = 0; i < queryList.length; i++) {
1464
+ const query = queryList[i];
1465
+
1466
+ onUpdate?.({
1467
+ content: [{ type: "text", text: `Searching ${i + 1}/${queryList.length}: "${query}"...` }],
1468
+ details: { phase: "search", progress: i / queryList.length, currentQuery: query },
1469
+ });
1470
+
1471
+ try {
1472
+ const { answer, results, inlineContent, provider } = await search(query, {
1473
+ provider: resolvedProvider,
1474
+ numResults: params.numResults,
1475
+ recencyFilter: params.recencyFilter,
1476
+ domainFilter: params.domainFilter,
1477
+ includeContent: params.includeContent,
1478
+ signal,
1479
+ extensionContext: ctx,
1480
+ });
1481
+
1482
+ searchResults.push({ query, answer, results, error: null, provider });
1483
+ for (const r of results) {
1484
+ if (!allUrls.includes(r.url)) {
1485
+ allUrls.push(r.url);
1486
+ }
1487
+ }
1488
+ if (inlineContent) allInlineContent.push(...inlineContent);
1489
+ } catch (err) {
1490
+ const message = err instanceof Error ? err.message : String(err);
1491
+ const requestedProvider = typeof resolvedProvider === "string" && resolvedProvider !== "auto"
1492
+ ? resolvedProvider
1493
+ : undefined;
1494
+ searchResults.push({ query, answer: "", results: [], error: message, provider: requestedProvider });
1495
+ }
1496
+ }
1497
+
1498
+ let approvedSummary: string | undefined;
1499
+ let summaryMeta: SummaryMeta | undefined;
1500
+ if (workflow === "auto-summary") {
1501
+ if (!ctx) {
1502
+ return {
1503
+ content: [{ type: "text", text: "Error: Auto-summary requires an active extension context." }],
1504
+ details: { error: "Missing extension context" },
1505
+ };
1506
+ }
1507
+ onUpdate?.({
1508
+ content: [{ type: "text", text: "Generating summary..." }],
1509
+ details: { phase: "generating-summary", progress: 1 },
1510
+ });
1511
+ const summaryContext: SummaryGenerationContext = {
1512
+ model: ctx.model,
1513
+ modelRegistry: ctx.modelRegistry,
1514
+ cwd: ctx.cwd,
1515
+ isProjectTrusted: () => ctx.isProjectTrusted(),
1516
+ };
1517
+ const summaryModelChoices = await loadSummaryModelChoices(summaryContext);
1518
+ const generated = await generateSummaryDraft(searchResults, summaryContext, signal, summaryModelChoices.defaultSummaryModel ?? undefined);
1519
+ approvedSummary = generated.summary;
1520
+ summaryMeta = generated.meta;
1521
+ }
1522
+
1523
+ return buildSearchReturn({
1524
+ queryList,
1525
+ results: searchResults,
1526
+ urls: allUrls,
1527
+ includeContent: params.includeContent ?? false,
1528
+ inlineContent: allInlineContent.length > 0 ? allInlineContent : undefined,
1529
+ workflow: workflow === "auto-summary" ? "auto-summary" : undefined,
1530
+ approvedSummary,
1531
+ summaryMeta,
1532
+ });
1533
+ },
1534
+
1535
+ renderCall(args, theme) {
1536
+ const input = args as { query?: unknown; queries?: unknown };
1537
+ const rawQueryList: unknown[] = Array.isArray(input.queries)
1538
+ ? input.queries
1539
+ : (input.query !== undefined ? [input.query] : []);
1540
+ const queryList = normalizeQueryList(rawQueryList);
1541
+ if (queryList.length === 0) {
1542
+ return new Text(theme.fg("toolTitle", theme.bold("search ")) + theme.fg("error", "(no query)"), 0, 0);
1543
+ }
1544
+ if (queryList.length === 1) {
1545
+ const q = queryList[0];
1546
+ const display = q.length > 60 ? q.slice(0, 57) + "..." : q;
1547
+ return new Text(theme.fg("toolTitle", theme.bold("search ")) + theme.fg("accent", `"${display}"`), 0, 0);
1548
+ }
1549
+ const lines = [theme.fg("toolTitle", theme.bold("search ")) + theme.fg("accent", `${queryList.length} queries`)];
1550
+ for (const q of queryList.slice(0, 5)) {
1551
+ const display = q.length > 50 ? q.slice(0, 47) + "..." : q;
1552
+ lines.push(theme.fg("muted", ` "${display}"`));
1553
+ }
1554
+ if (queryList.length > 5) {
1555
+ lines.push(theme.fg("muted", ` ... and ${queryList.length - 5} more`));
1556
+ }
1557
+ return new Text(lines.join("\n"), 0, 0);
1558
+ },
1559
+
1560
+ renderResult(result, { expanded, isPartial }, theme) {
1561
+ type QueryDetail = {
1562
+ query: string;
1563
+ provider: string | null;
1564
+ answer: string | null;
1565
+ sources: Array<{ title: string; url: string }>;
1566
+ error: string | null;
1567
+ };
1568
+ const details = result.details as {
1569
+ queryCount?: number;
1570
+ successfulQueries?: number;
1571
+ totalResults?: number;
1572
+ error?: string;
1573
+ fetchId?: string;
1574
+ fetchUrls?: string[];
1575
+ phase?: string;
1576
+ progress?: number;
1577
+ currentQuery?: string;
1578
+ curated?: boolean;
1579
+ curatedFrom?: number;
1580
+ curatedQueries?: QueryDetail[];
1581
+ cancelled?: boolean;
1582
+ cancelReason?: string;
1583
+ browserConnected?: boolean;
1584
+ lastHeartbeatAgeMs?: number | null;
1585
+ cancelledQueries?: import("./render-search-error.ts").CancelledQueryDetail[];
1586
+ curatorUrl?: string;
1587
+ browserOpenError?: string;
1588
+ timeoutSeconds?: number;
1589
+ shortcut?: string;
1590
+ summary?: {
1591
+ text: string;
1592
+ workflow: SummaryWorkflow;
1593
+ model: string | null;
1594
+ durationMs: number;
1595
+ tokenEstimate: number;
1596
+ fallbackUsed: boolean;
1597
+ fallbackReason?: string;
1598
+ edited?: boolean;
1599
+ };
1600
+ };
1601
+
1602
+ if (isPartial) {
1603
+ if (details?.phase === "curator-fallback") {
1604
+ const lines = [theme.fg("warning", "Open the search curator manually:")];
1605
+ if (details?.curatorUrl) lines.push(theme.fg("muted", ` ${details.curatorUrl}`));
1606
+ if (details?.browserOpenError) lines.push(theme.fg("dim", ` auto-open failed: ${details.browserOpenError}`));
1607
+ const timeout = typeof details?.timeoutSeconds === "number" ? details.timeoutSeconds : undefined;
1608
+ const shortcut = typeof details?.shortcut === "string" ? details.shortcut : curateKey;
1609
+ lines.push(theme.fg("dim", timeout ? ` auto-submits after ${timeout}s idle; ${shortcut} reopens` : ` ${shortcut} reopens`));
1610
+ return new Text(lines.join("\n"), 0, 0);
1611
+ }
1612
+ if (details?.phase === "curating" || details?.phase === "waiting-for-approval" || details?.phase === "generating-summary") {
1613
+ const phaseText = details?.phase === "generating-summary"
1614
+ ? "generating summary draft..."
1615
+ : details?.phase === "waiting-for-approval"
1616
+ ? "summary draft ready; approve in browser..."
1617
+ : "waiting for summary approval in browser...";
1618
+ const lines = [theme.fg("accent", phaseText)];
1619
+ if (details?.curatorUrl) {
1620
+ lines.push(theme.fg("muted", ` ${details.curatorUrl}`));
1621
+ }
1622
+ const timeout = typeof details?.timeoutSeconds === "number" ? details.timeoutSeconds : undefined;
1623
+ const shortcut = typeof details?.shortcut === "string" ? details.shortcut : curateKey;
1624
+ if (timeout) {
1625
+ lines.push(theme.fg("dim", ` auto-submits after ${timeout}s idle; ${shortcut} reopens`));
1626
+ } else {
1627
+ lines.push(theme.fg("dim", ` ${shortcut} reopens`));
1628
+ }
1629
+ return new Text(lines.join("\n"), 0, 0);
1630
+ }
1631
+ if (details?.phase === "searching") {
1632
+ const progress = details?.progress ?? 0;
1633
+ const bar = "\u2588".repeat(Math.floor(progress * 10)) + "\u2591".repeat(10 - Math.floor(progress * 10));
1634
+ const query = details?.currentQuery || "";
1635
+ const display = query.length > 40 ? query.slice(0, 37) + "..." : query;
1636
+ return new Text(theme.fg("accent", `[${bar}] ${display}`), 0, 0);
1637
+ }
1638
+ const progress = details?.progress ?? 0;
1639
+ const bar = "\u2588".repeat(Math.floor(progress * 10)) + "\u2591".repeat(10 - Math.floor(progress * 10));
1640
+ return new Text(theme.fg("accent", `[${bar}] ${details?.phase || "searching"}`), 0, 0);
1641
+ }
1642
+
1643
+ if (details?.error) {
1644
+ // Expandable Ctrl+O diagnostics: which queries completed, per-query errors,
1645
+ // browser connection state, cancel reason. See render-search-error.ts.
1646
+ const plan = buildSearchErrorPlan(details as SearchErrorDetails);
1647
+ if (plan) return renderSearchErrorPlan(plan, expanded, theme);
1648
+ return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
1649
+ }
1650
+
1651
+ let statusLine: string;
1652
+ const queryInfo = details?.queryCount === 1 ? "" : `${details?.successfulQueries}/${details?.queryCount} queries, `;
1653
+ statusLine = theme.fg("success", `${queryInfo}${details?.totalResults ?? 0} sources`);
1654
+ if (details?.curated && details?.curatedFrom) {
1655
+ statusLine += theme.fg("muted", ` (${details.queryCount}/${details.curatedFrom} queries curated)`);
1656
+ }
1657
+ if (details?.fetchId && details?.fetchUrls) {
1658
+ statusLine += theme.fg("muted", ` (fetching ${details.fetchUrls.length} URLs)`);
1659
+ } else if (details?.fetchId) {
1660
+ statusLine += theme.fg("muted", " (content ready)");
1661
+ }
1662
+
1663
+ // Build expanded lines first so collapsed view can reference total count
1664
+ const lines = [statusLine];
1665
+ if (details?.summary?.text) {
1666
+ lines.push("");
1667
+ lines.push(theme.fg("accent", `── Summary (${details.summary.workflow}) ` + "─".repeat(32)));
1668
+ lines.push("");
1669
+ for (const line of details.summary.text.split("\n")) {
1670
+ lines.push(` ${line}`);
1671
+ }
1672
+ lines.push("");
1673
+ const metaParts = [
1674
+ details.summary.model ? `model=${details.summary.model}` : "model=deterministic",
1675
+ `duration=${details.summary.durationMs}ms`,
1676
+ `tokens~${details.summary.tokenEstimate}`,
1677
+ details.summary.fallbackUsed ? "fallback=true" : "fallback=false",
1678
+ details.summary.edited ? "edited=true" : "edited=false",
1679
+ ];
1680
+ if (details.summary.fallbackReason) {
1681
+ metaParts.push(`reason=${details.summary.fallbackReason}`);
1682
+ }
1683
+ lines.push(theme.fg("dim", " " + metaParts.join(" · ")));
1684
+ }
1685
+
1686
+ const queryDetails = details?.curatedQueries;
1687
+ if (queryDetails?.length) {
1688
+ const kept = queryDetails.length;
1689
+ const from = details?.curatedFrom ?? kept;
1690
+ lines.push("");
1691
+ lines.push(theme.fg("accent", `\u2500\u2500 Curated Results (${kept} of ${from} queries kept) ` + "\u2500".repeat(24)));
1692
+
1693
+ for (const cq of queryDetails) {
1694
+ lines.push("");
1695
+ const dq = cq.query.length > 65 ? cq.query.slice(0, 62) + "..." : cq.query;
1696
+ const providerLabel = cq.provider ? ` (${cq.provider})` : "";
1697
+ lines.push(theme.fg("accent", ` "${dq}"${providerLabel}`));
1698
+
1699
+ if (cq.error) {
1700
+ lines.push(theme.fg("error", ` ${cq.error}`));
1701
+ } else if (cq.answer) {
1702
+ lines.push("");
1703
+ for (const line of cq.answer.split("\n")) {
1704
+ lines.push(` ${line}`);
1705
+ }
1706
+ }
1707
+
1708
+ if (cq.sources.length > 0) {
1709
+ lines.push("");
1710
+ for (const s of cq.sources) {
1711
+ const domain = s.url.replace(/^https?:\/\//, "").replace(/\/.*$/, "");
1712
+ const title = s.title.length > 50 ? s.title.slice(0, 47) + "..." : s.title;
1713
+ lines.push(theme.fg("muted", ` \u25b8 ${title}`) + theme.fg("dim", ` \u00b7 ${domain}`));
1714
+ }
1715
+ }
1716
+ }
1717
+ lines.push("");
1718
+ } else {
1719
+ const textContent = result.content.find((c) => c.type === "text")?.text || "";
1720
+ const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
1721
+ for (const line of preview.split("\n")) {
1722
+ lines.push(theme.fg("dim", line));
1723
+ }
1724
+ }
1725
+
1726
+ if (details?.fetchUrls && details.fetchUrls.length > 0) {
1727
+ if (details.curated) {
1728
+ lines.push(theme.fg("muted", `Fetching ${details.fetchUrls.length} URLs in background`));
1729
+ } else {
1730
+ lines.push(theme.fg("muted", "Fetching:"));
1731
+ for (const u of details.fetchUrls.slice(0, 5)) {
1732
+ const display = u.length > 60 ? u.slice(0, 57) + "..." : u;
1733
+ lines.push(theme.fg("dim", " " + display));
1734
+ }
1735
+ if (details.fetchUrls.length > 5) {
1736
+ lines.push(theme.fg("dim", ` ... and ${details.fetchUrls.length - 5} more`));
1737
+ }
1738
+ }
1739
+ }
1740
+
1741
+ const totalLines = lines.length;
1742
+
1743
+ if (!expanded) {
1744
+ const box = new Box(1, 0, (t) => theme.bg("toolSuccessBg", t));
1745
+ box.addChild(new Text(statusLine, 0, 0));
1746
+
1747
+ let collapsedLines = 1; // statusLine
1748
+ const summaryPreview = details?.summary?.text?.trim() || "";
1749
+ if (summaryPreview) {
1750
+ const preview = summaryPreview.length > 120 ? summaryPreview.slice(0, 117) + "..." : summaryPreview;
1751
+ box.addChild(new Text(theme.fg("dim", preview), 0, 0));
1752
+ collapsedLines++;
1753
+ } else if (details?.curatedQueries?.length) {
1754
+ for (const cq of details.curatedQueries.slice(0, 3)) {
1755
+ const dq = cq.query.length > 55 ? cq.query.slice(0, 52) + "..." : cq.query;
1756
+ const srcCount = cq.sources?.length ?? 0;
1757
+ const suffix = cq.error ? theme.fg("error", " (error)") : theme.fg("dim", ` · ${srcCount} sources`);
1758
+ box.addChild(new Text(theme.fg("accent", ` "${dq}"`) + suffix, 0, 0));
1759
+ collapsedLines++;
1760
+ }
1761
+ if (details.curatedQueries.length > 3) {
1762
+ box.addChild(new Text(theme.fg("dim", ` ... and ${details.curatedQueries.length - 3} more`), 0, 0));
1763
+ collapsedLines++;
1764
+ }
1765
+ } else {
1766
+ const textContent = result.content.find((c) => c.type === "text")?.text || "";
1767
+ const firstContentLine = textContent.split("\n").find(l => {
1768
+ const t = l.trim();
1769
+ return t && !t.startsWith("[") && !t.startsWith("#") && !t.startsWith("---");
1770
+ });
1771
+ const fallbackLine = (firstContentLine?.trim() || "").replace(/\*\*/g, "");
1772
+ if (fallbackLine) {
1773
+ const preview = fallbackLine.length > 120 ? fallbackLine.slice(0, 117) + "..." : fallbackLine;
1774
+ box.addChild(new Text(theme.fg("dim", preview), 0, 0));
1775
+ collapsedLines++;
1776
+ }
1777
+ }
1778
+ const moreLines = Math.max(0, totalLines - collapsedLines);
1779
+ if (moreLines > 0) {
1780
+ box.addChild(new Text(theme.fg("muted", `\n... (${moreLines} more lines, ${totalLines} total, ctrl+o to expand)`), 0, 0));
1781
+ }
1782
+ return box;
1783
+ }
1784
+
1785
+ return new Text(lines.join("\n"), 0, 0);
1786
+ },
1787
+ });
1788
+
1789
+ pi.registerTool({
1790
+ name: "fetch_content",
1791
+ label: "Fetch Content",
1792
+ description: "Fetch URL(s) and extract readable content as markdown. Supports YouTube video transcripts (with thumbnail), GitHub repository contents, and local video files (with frame thumbnail). Video frames can be extracted via timestamp/range or sampled across the entire video with frames alone. Falls back to Gemini for pages that block bots or fail Readability extraction. For YouTube and video files: ALWAYS pass the user's specific question via the prompt parameter — this directs the AI to focus on that aspect of the video, producing much better results than a generic extraction. Content is always stored and can be retrieved with get_search_content.",
1793
+ promptSnippet:
1794
+ "Use to extract readable content from URL(s), YouTube, GitHub repos, or local videos. For video questions, pass the user's exact question in prompt.",
1795
+ parameters: Type.Object({
1796
+ url: Type.Optional(Type.String({ description: "Single URL to fetch" })),
1797
+ urls: Type.Optional(Type.Array(Type.String(), { description: "Multiple URLs (parallel)" })),
1798
+ forceClone: Type.Optional(Type.Boolean({
1799
+ description: "Force cloning large GitHub repositories that exceed the size threshold",
1800
+ })),
1801
+ prompt: Type.Optional(Type.String({
1802
+ description: "Question or instruction for video analysis (YouTube and video files). Pass the user's specific question here — e.g. 'describe the book shown at the advice for beginners section'. Without this, a generic transcript extraction is used which may miss what the user is asking about.",
1803
+ })),
1804
+ timestamp: Type.Optional(Type.String({
1805
+ description: "Extract video frame(s) at a timestamp or time range. Single: '1:23:45', '23:45', or '85' (seconds). Range: '23:41-25:00' extracts evenly-spaced frames across that span (default 6). Use frames with ranges to control density; single+frames uses a fixed 5s interval. YouTube requires yt-dlp + ffmpeg; local videos require ffmpeg. Use a range when you know the approximate area but not the exact moment — you'll get a contact sheet to visually identify the right frame.",
1806
+ })),
1807
+ frames: Type.Optional(Type.Integer({
1808
+ minimum: 1,
1809
+ maximum: 12,
1810
+ description: "Number of frames to extract. Use with timestamp range for custom density, with single timestamp to get N frames at 5s intervals, or alone to sample across the entire video. Requires yt-dlp + ffmpeg for YouTube, ffmpeg for local video.",
1811
+ })),
1812
+ model: Type.Optional(Type.String({
1813
+ description: "Override the Gemini model for video/YouTube analysis (e.g. 'gemini-2.5-flash', 'gemini-3-flash-preview'). Defaults to config or gemini-3-flash-preview.",
1814
+ })),
1815
+ }),
1816
+
1817
+ async execute(_toolCallId, params, signal, onUpdate) {
1818
+ const { urlList, options } = normalizeFetchContentParams(params);
1819
+ if (urlList.length === 0) {
1820
+ return {
1821
+ content: [{ type: "text", text: "Error: No URL provided." }],
1822
+ details: { error: "No URL provided" },
1823
+ };
1824
+ }
1825
+
1826
+ onUpdate?.({
1827
+ content: [{ type: "text", text: `Fetching ${urlList.length} URL(s)...` }],
1828
+ details: { phase: "fetch", progress: 0 },
1829
+ });
1830
+
1831
+ const fetchResults = await fetchAllContent(urlList, signal, options);
1832
+ const successful = fetchResults.filter((r) => !r.error).length;
1833
+ const totalChars = fetchResults.reduce((sum, r) => sum + r.content.length, 0);
1834
+
1835
+ // ALWAYS store results (even for single URL)
1836
+ const responseId = generateId();
1837
+ const data: StoredSearchData = {
1838
+ id: responseId,
1839
+ type: "fetch",
1840
+ timestamp: Date.now(),
1841
+ urls: stripThumbnails(fetchResults),
1842
+ };
1843
+ storeResult(responseId, data);
1844
+ pi.appendEntry("web-search-results", data);
1845
+
1846
+ // Single URL: return content directly (possibly truncated) with responseId
1847
+ if (urlList.length === 1) {
1848
+ const result = fetchResults[0];
1849
+ if (result.error) {
1850
+ return {
1851
+ content: [{ type: "text", text: `Error: ${result.error}` }],
1852
+ details: { urls: urlList, urlCount: 1, successful: 0, error: result.error, responseId, prompt: params.prompt, timestamp: params.timestamp, frames: params.frames },
1853
+ };
1854
+ }
1855
+
1856
+ const fullLength = result.content.length;
1857
+ const truncated = fullLength > MAX_INLINE_CONTENT;
1858
+ let output = truncated
1859
+ ? result.content.slice(0, MAX_INLINE_CONTENT) + "\n\n[Content truncated...]"
1860
+ : result.content;
1861
+
1862
+ if (truncated) {
1863
+ output += `\n\n---\nShowing ${MAX_INLINE_CONTENT} of ${fullLength} chars. ` +
1864
+ `Use get_search_content({ responseId: "${responseId}", urlIndex: 0 }) for full content.`;
1865
+ }
1866
+
1867
+ const content: Array<{ type: string; text?: string; data?: string; mimeType?: string }> = [];
1868
+ if (result.frames?.length) {
1869
+ for (const frame of result.frames) {
1870
+ content.push({ type: "image", data: frame.data, mimeType: frame.mimeType });
1871
+ content.push({ type: "text", text: `Frame at ${frame.timestamp}` });
1872
+ }
1873
+ } else if (result.thumbnail) {
1874
+ content.push({ type: "image", data: result.thumbnail.data, mimeType: result.thumbnail.mimeType });
1875
+ }
1876
+ content.push({ type: "text", text: output });
1877
+
1878
+ const imageCount = (result.frames?.length ?? 0) + (result.thumbnail ? 1 : 0);
1879
+ return {
1880
+ content,
1881
+ details: {
1882
+ urls: urlList,
1883
+ urlCount: 1,
1884
+ successful: 1,
1885
+ totalChars: fullLength,
1886
+ title: result.title,
1887
+ responseId,
1888
+ truncated,
1889
+ hasImage: imageCount > 0,
1890
+ imageCount,
1891
+ prompt: params.prompt,
1892
+ timestamp: params.timestamp,
1893
+ frames: params.frames,
1894
+ duration: result.duration,
1895
+ },
1896
+ };
1897
+ }
1898
+
1899
+ // Multi-URL: existing behavior (summary + responseId)
1900
+ let output = "## Fetched URLs\n\n";
1901
+ for (const { url, title, content, error } of fetchResults) {
1902
+ if (error) {
1903
+ output += `- ${url}: Error - ${error}\n`;
1904
+ } else {
1905
+ output += `- ${title || url} (${content.length} chars)\n`;
1906
+ }
1907
+ }
1908
+ output += `\n---\nUse get_search_content({ responseId: "${responseId}", urlIndex: 0 }) to retrieve full content.`;
1909
+
1910
+ return {
1911
+ content: [{ type: "text", text: output }],
1912
+ details: { urls: urlList, urlCount: urlList.length, successful, totalChars, responseId },
1913
+ };
1914
+ },
1915
+
1916
+ renderCall(args, theme) {
1917
+ const { url, urls, prompt, timestamp, frames, model } = args as { url?: string; urls?: string[]; prompt?: string; timestamp?: string; frames?: number; model?: string };
1918
+ const urlList = urls ?? (url ? [url] : []);
1919
+ if (urlList.length === 0) {
1920
+ return new Text(theme.fg("toolTitle", theme.bold("fetch ")) + theme.fg("error", "(no URL)"), 0, 0);
1921
+ }
1922
+ const lines: string[] = [];
1923
+ if (urlList.length === 1) {
1924
+ const display = urlList[0].length > 60 ? urlList[0].slice(0, 57) + "..." : urlList[0];
1925
+ lines.push(theme.fg("toolTitle", theme.bold("fetch ")) + theme.fg("accent", display));
1926
+ } else {
1927
+ lines.push(theme.fg("toolTitle", theme.bold("fetch ")) + theme.fg("accent", `${urlList.length} URLs`));
1928
+ for (const u of urlList.slice(0, 5)) {
1929
+ const display = u.length > 60 ? u.slice(0, 57) + "..." : u;
1930
+ lines.push(theme.fg("muted", " " + display));
1931
+ }
1932
+ if (urlList.length > 5) {
1933
+ lines.push(theme.fg("muted", ` ... and ${urlList.length - 5} more`));
1934
+ }
1935
+ }
1936
+ if (timestamp) {
1937
+ lines.push(theme.fg("dim", " timestamp: ") + theme.fg("warning", timestamp));
1938
+ }
1939
+ if (typeof frames === "number") {
1940
+ lines.push(theme.fg("dim", " frames: ") + theme.fg("warning", String(frames)));
1941
+ }
1942
+ if (prompt) {
1943
+ const display = prompt.length > 250 ? prompt.slice(0, 247) + "..." : prompt;
1944
+ lines.push(theme.fg("dim", " prompt: ") + theme.fg("muted", `"${display}"`));
1945
+ }
1946
+ if (model) {
1947
+ lines.push(theme.fg("dim", " model: ") + theme.fg("warning", model));
1948
+ }
1949
+ return new Text(lines.join("\n"), 0, 0);
1950
+ },
1951
+
1952
+ renderResult(result, { expanded, isPartial }, theme) {
1953
+ const details = result.details as {
1954
+ urlCount?: number;
1955
+ successful?: number;
1956
+ totalChars?: number;
1957
+ error?: string;
1958
+ title?: string;
1959
+ truncated?: boolean;
1960
+ responseId?: string;
1961
+ phase?: string;
1962
+ progress?: number;
1963
+ hasImage?: boolean;
1964
+ imageCount?: number;
1965
+ prompt?: string;
1966
+ timestamp?: string;
1967
+ frames?: number;
1968
+ duration?: number;
1969
+ };
1970
+
1971
+ if (isPartial) {
1972
+ const progress = details?.progress ?? 0;
1973
+ const bar = "\u2588".repeat(Math.floor(progress * 10)) + "\u2591".repeat(10 - Math.floor(progress * 10));
1974
+ return new Text(theme.fg("accent", `[${bar}] ${details?.phase || "fetching"}`), 0, 0);
1975
+ }
1976
+
1977
+ if (details?.error) {
1978
+ const fd = details as typeof details & { urls?: string[] };
1979
+ const extras: string[] = [];
1980
+ if (typeof fd.urlCount === "number" || typeof fd.successful === "number") {
1981
+ extras.push(`urls: ${fd.successful ?? 0}/${fd.urlCount ?? 0} succeeded`);
1982
+ }
1983
+ if (fd.responseId) extras.push(`response id: ${fd.responseId}`);
1984
+ if (fd.urls && fd.urls.length > 0) {
1985
+ for (const u of fd.urls.slice(0, 8)) extras.push(` \u25b8 ${u}`);
1986
+ if (fd.urls.length > 8) extras.push(` ... and ${fd.urls.length - 8} more`);
1987
+ }
1988
+ const plan = buildSearchErrorPlan({ error: details.error, extraLines: extras });
1989
+ if (plan) return renderSearchErrorPlan(plan, expanded, theme);
1990
+ return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
1991
+ }
1992
+
1993
+ if (details?.urlCount === 1) {
1994
+ const title = details?.title || "Untitled";
1995
+ const imgCount = details?.imageCount ?? (details?.hasImage ? 1 : 0);
1996
+ const imageBadge = imgCount > 1
1997
+ ? theme.fg("accent", ` [${imgCount} images]`)
1998
+ : imgCount === 1
1999
+ ? theme.fg("accent", " [image]")
2000
+ : "";
2001
+ let statusLine = theme.fg("success", title) + theme.fg("muted", ` (${details?.totalChars ?? 0} chars)`) + imageBadge;
2002
+ if (details?.truncated) {
2003
+ statusLine += theme.fg("warning", " [truncated]");
2004
+ }
2005
+ if (typeof details?.duration === "number") {
2006
+ statusLine += theme.fg("muted", ` | ${formatSeconds(Math.floor(details.duration))} total`);
2007
+ }
2008
+ const textContent = result.content.find((c) => c.type === "text")?.text || "";
2009
+ if (!expanded) {
2010
+ const brief = textContent.length > 200 ? textContent.slice(0, 200) + "..." : textContent;
2011
+ return new Text(statusLine + "\n" + theme.fg("dim", brief), 0, 0);
2012
+ }
2013
+ const lines = [statusLine];
2014
+ if (details?.prompt) {
2015
+ const display = details.prompt.length > 250 ? details.prompt.slice(0, 247) + "..." : details.prompt;
2016
+ lines.push(theme.fg("dim", ` prompt: "${display}"`));
2017
+ }
2018
+ if (details?.timestamp) {
2019
+ lines.push(theme.fg("dim", ` timestamp: ${details.timestamp}`));
2020
+ }
2021
+ if (typeof details?.frames === "number") {
2022
+ lines.push(theme.fg("dim", ` frames: ${details.frames}`));
2023
+ }
2024
+ const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
2025
+ lines.push(theme.fg("dim", preview));
2026
+ return new Text(lines.join("\n"), 0, 0);
2027
+ }
2028
+
2029
+ const countColor = (details?.successful ?? 0) > 0 ? "success" : "error";
2030
+ const statusLine = theme.fg(countColor, `${details?.successful}/${details?.urlCount} URLs`) + theme.fg("muted", " (content stored)");
2031
+ if (!expanded) {
2032
+ return new Text(statusLine, 0, 0);
2033
+ }
2034
+ const textContent = result.content.find((c) => c.type === "text")?.text || "";
2035
+ const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
2036
+ return new Text(statusLine + "\n" + theme.fg("dim", preview), 0, 0);
2037
+ },
2038
+ });
2039
+
2040
+ pi.registerTool({
2041
+ name: "get_search_content",
2042
+ label: "Get Search Content",
2043
+ description: "Retrieve full content from a previous web_search or fetch_content call.",
2044
+ promptSnippet:
2045
+ "Use after web_search/fetch_content when full stored content is needed via responseId plus query/url selectors.",
2046
+ parameters: Type.Object({
2047
+ responseId: Type.String({ description: "The responseId from web_search or fetch_content" }),
2048
+ query: Type.Optional(Type.String({ description: "Get content for this query (web_search)" })),
2049
+ queryIndex: Type.Optional(Type.Number({ description: "Get content for query at index" })),
2050
+ url: Type.Optional(Type.String({ description: "Get content for this URL" })),
2051
+ urlIndex: Type.Optional(Type.Number({ description: "Get content for URL at index" })),
2052
+ }),
2053
+
2054
+ async execute(_toolCallId, params) {
2055
+ const data = getResult(params.responseId);
2056
+ if (!data) {
2057
+ return {
2058
+ content: [{ type: "text", text: `Error: No stored results for "${params.responseId}"` }],
2059
+ details: { error: "Not found", responseId: params.responseId },
2060
+ };
2061
+ }
2062
+
2063
+ if (data.type === "search" && data.queries) {
2064
+ let queryData: QueryResultData | undefined;
2065
+
2066
+ if (params.query !== undefined) {
2067
+ queryData = data.queries.find((q) => q.query === params.query);
2068
+ if (!queryData) {
2069
+ const available = data.queries.map((q) => `"${q.query}"`).join(", ");
2070
+ return {
2071
+ content: [{ type: "text", text: `Query "${params.query}" not found. Available: ${available}` }],
2072
+ details: { error: "Query not found" },
2073
+ };
2074
+ }
2075
+ } else if (params.queryIndex !== undefined) {
2076
+ queryData = data.queries[params.queryIndex];
2077
+ if (!queryData) {
2078
+ return {
2079
+ content: [{ type: "text", text: `Index ${params.queryIndex} out of range (0-${data.queries.length - 1})` }],
2080
+ details: { error: "Index out of range" },
2081
+ };
2082
+ }
2083
+ } else {
2084
+ const available = data.queries.map((q, i) => `${i}: "${q.query}"`).join(", ");
2085
+ return {
2086
+ content: [{ type: "text", text: `Specify query or queryIndex. Available: ${available}` }],
2087
+ details: { error: "No query specified" },
2088
+ };
2089
+ }
2090
+
2091
+ if (queryData.error) {
2092
+ return {
2093
+ content: [{ type: "text", text: `Error for "${queryData.query}": ${queryData.error}` }],
2094
+ details: { error: queryData.error, query: queryData.query },
2095
+ };
2096
+ }
2097
+
2098
+ return {
2099
+ content: [{ type: "text", text: formatFullResults(queryData) }],
2100
+ details: { query: queryData.query, resultCount: queryData.results.length },
2101
+ };
2102
+ }
2103
+
2104
+ if (data.type === "fetch" && data.urls) {
2105
+ let urlData: ExtractedContent | undefined;
2106
+
2107
+ if (params.url !== undefined) {
2108
+ urlData = data.urls.find((u) => u.url === params.url);
2109
+ if (!urlData) {
2110
+ const available = data.urls.map((u) => u.url).join("\n ");
2111
+ return {
2112
+ content: [{ type: "text", text: `URL not found. Available:\n ${available}` }],
2113
+ details: { error: "URL not found" },
2114
+ };
2115
+ }
2116
+ } else if (params.urlIndex !== undefined) {
2117
+ urlData = data.urls[params.urlIndex];
2118
+ if (!urlData) {
2119
+ return {
2120
+ content: [{ type: "text", text: `Index ${params.urlIndex} out of range (0-${data.urls.length - 1})` }],
2121
+ details: { error: "Index out of range" },
2122
+ };
2123
+ }
2124
+ } else {
2125
+ const available = data.urls.map((u, i) => `${i}: ${u.url}`).join("\n ");
2126
+ return {
2127
+ content: [{ type: "text", text: `Specify url or urlIndex. Available:\n ${available}` }],
2128
+ details: { error: "No URL specified" },
2129
+ };
2130
+ }
2131
+
2132
+ if (urlData.error) {
2133
+ return {
2134
+ content: [{ type: "text", text: `Error for ${urlData.url}: ${urlData.error}` }],
2135
+ details: { error: urlData.error, url: urlData.url },
2136
+ };
2137
+ }
2138
+
2139
+ return {
2140
+ content: [{ type: "text", text: `# ${urlData.title}\n\n${urlData.content}` }],
2141
+ details: { url: urlData.url, title: urlData.title, contentLength: urlData.content.length },
2142
+ };
2143
+ }
2144
+
2145
+ return {
2146
+ content: [{ type: "text", text: "Invalid stored data format" }],
2147
+ details: { error: "Invalid data" },
2148
+ };
2149
+ },
2150
+
2151
+ renderCall(args, theme) {
2152
+ const { responseId, query, queryIndex, url, urlIndex } = args as {
2153
+ responseId: string;
2154
+ query?: string;
2155
+ queryIndex?: number;
2156
+ url?: string;
2157
+ urlIndex?: number;
2158
+ };
2159
+ let target = "";
2160
+ if (query) target = `query="${query}"`;
2161
+ else if (queryIndex !== undefined) target = `queryIndex=${queryIndex}`;
2162
+ else if (url) target = url.length > 30 ? url.slice(0, 27) + "..." : url;
2163
+ else if (urlIndex !== undefined) target = `urlIndex=${urlIndex}`;
2164
+ return new Text(theme.fg("toolTitle", theme.bold("get_content ")) + theme.fg("accent", target || responseId.slice(0, 8)), 0, 0);
2165
+ },
2166
+
2167
+ renderResult(result, { expanded }, theme) {
2168
+ const details = result.details as {
2169
+ error?: string;
2170
+ query?: string;
2171
+ url?: string;
2172
+ title?: string;
2173
+ resultCount?: number;
2174
+ contentLength?: number;
2175
+ };
2176
+
2177
+ if (details?.error) {
2178
+ const extras: string[] = [];
2179
+ if (details.query) extras.push(`query: ${details.query}`);
2180
+ if (details.url) extras.push(`url: ${details.url}`);
2181
+ else if (details.title) extras.push(`resource: ${details.title}`);
2182
+ const plan = buildSearchErrorPlan({ error: details.error, extraLines: extras });
2183
+ if (plan) return renderSearchErrorPlan(plan, expanded, theme);
2184
+ return new Text(theme.fg("error", `Error: ${details.error}`), 0, 0);
2185
+ }
2186
+
2187
+ let statusLine: string;
2188
+ if (details?.query) {
2189
+ statusLine = theme.fg("success", `"${details.query}"`) + theme.fg("muted", ` (${details.resultCount} results)`);
2190
+ } else {
2191
+ statusLine = theme.fg("success", details?.title || "Content") + theme.fg("muted", ` (${details?.contentLength ?? 0} chars)`);
2192
+ }
2193
+
2194
+ if (!expanded) {
2195
+ return new Text(statusLine, 0, 0);
2196
+ }
2197
+
2198
+ const textContent = result.content.find((c) => c.type === "text")?.text || "";
2199
+ const preview = textContent.length > 500 ? textContent.slice(0, 500) + "..." : textContent;
2200
+ return new Text(statusLine + "\n" + theme.fg("dim", preview), 0, 0);
2201
+ },
2202
+ });
2203
+
2204
+ pi.registerCommand("websearch", {
2205
+ description: "Open web search curator",
2206
+ handler: async (args, ctx) => {
2207
+ const sessionToken = randomUUID();
2208
+ const commandCallId = `cmd:${sessionToken}`;
2209
+ closeCurator(commandCallId);
2210
+
2211
+ const raw = args.trim();
2212
+ const queries = raw.length > 0
2213
+ ? normalizeQueryList(raw.split(","))
2214
+ : [];
2215
+
2216
+ let bootstrap: CuratorBootstrap;
2217
+ try {
2218
+ bootstrap = await loadCuratorBootstrap(undefined, ctx);
2219
+ } catch (err) {
2220
+ const message = err instanceof Error ? err.message : String(err);
2221
+ ctx.ui.notify(`Failed to load web search config: ${message}`, "error");
2222
+ return;
2223
+ }
2224
+ const availableProviders = bootstrap.availableProviders;
2225
+ const initialProvider = bootstrap.defaultProvider;
2226
+ const curatorTimeoutSeconds = bootstrap.timeoutSeconds;
2227
+ let currentProvider = initialProvider;
2228
+ const rawSearchProvider = normalizeProviderInput(loadConfig().provider ?? "auto") ?? "auto";
2229
+ let currentSearchProvider = rawSearchProvider === "auto" ? "auto" : initialProvider;
2230
+ const summaryContext: SummaryGenerationContext = {
2231
+ model: ctx.model,
2232
+ modelRegistry: ctx.modelRegistry,
2233
+ cwd: ctx.cwd,
2234
+ isProjectTrusted: () => ctx.isProjectTrusted(),
2235
+ };
2236
+ const summaryModelChoices = await loadSummaryModelChoices(summaryContext);
2237
+
2238
+ ctx.ui.notify("Opening web search curator...", "info");
2239
+
2240
+ const collected = new Map<number, QueryResultData>();
2241
+ const searchAbort = new AbortController();
2242
+ let aborted = false;
2243
+ let commandHandle: CuratorServerHandle | null = null;
2244
+ const isCommandActive = () => commandHandle !== null && activeCurators.get(commandCallId) === commandHandle;
2245
+
2246
+ function sendFollowUpFromReturn(payload: ReturnType<typeof buildSearchReturn>) {
2247
+ pi.sendMessage({
2248
+ customType: "web-search-results",
2249
+ content: payload.content,
2250
+ display: true,
2251
+ details: payload.details,
2252
+ }, { triggerTurn: true, deliverAs: "followUp" });
2253
+ }
2254
+
2255
+ try {
2256
+ const handle = await startCuratorServer(
2257
+ {
2258
+ queries,
2259
+ sessionToken,
2260
+ timeout: curatorTimeoutSeconds,
2261
+ availableProviders,
2262
+ defaultProvider: initialProvider,
2263
+ searchProvider: currentSearchProvider,
2264
+ summaryModels: summaryModelChoices.summaryModels,
2265
+ defaultSummaryModel: summaryModelChoices.defaultSummaryModel,
2266
+ },
2267
+ {
2268
+ async onSummarize(selectedQueryIndices, summarizeSignal, model, feedback) {
2269
+ if (commandHandle && !isCommandActive()) {
2270
+ throw new Error("Curator session is no longer active.");
2271
+ }
2272
+ return generateSummaryForSelectedIndices(
2273
+ selectedQueryIndices,
2274
+ collected,
2275
+ summaryContext,
2276
+ summarizeSignal,
2277
+ model,
2278
+ feedback,
2279
+ );
2280
+ },
2281
+ onSubmit(payload) {
2282
+ if (commandHandle && !isCommandActive()) return;
2283
+ aborted = true;
2284
+ searchAbort.abort();
2285
+ const filtered = payload.selectedQueryIndices.length > 0
2286
+ ? filterByQueryIndices(payload.selectedQueryIndices, collected)
2287
+ : collectAllResultsAndUrls(collected);
2288
+ const base: SearchReturnOptions = {
2289
+ queryList: filtered.results.map(r => r.query),
2290
+ results: filtered.results,
2291
+ urls: filtered.urls,
2292
+ includeContent: false,
2293
+ curated: true,
2294
+ curatedFrom: collected.size,
2295
+ };
2296
+ if (!payload.rawResults) {
2297
+ const resolvedSummary = resolveSummaryForSubmit(payload, collected);
2298
+ base.workflow = "summary-review";
2299
+ base.approvedSummary = resolvedSummary.approvedSummary;
2300
+ base.summaryMeta = resolvedSummary.summaryMeta;
2301
+ }
2302
+ sendFollowUpFromReturn(buildSearchReturn(base));
2303
+ closeCurator(commandCallId);
2304
+ },
2305
+ onCancel(reason) {
2306
+ if (commandHandle && !isCommandActive()) return;
2307
+ aborted = true;
2308
+ searchAbort.abort();
2309
+ if (reason === "timeout") {
2310
+ const all = collectAllResultsAndUrls(collected);
2311
+ const resolvedSummary = resolveSummaryForSubmit({ selectedQueryIndices: [], summary: undefined, summaryMeta: undefined }, collected);
2312
+ sendFollowUpFromReturn(buildSearchReturn({
2313
+ queryList: all.results.map(r => r.query),
2314
+ results: all.results,
2315
+ urls: all.urls,
2316
+ includeContent: false,
2317
+ curated: true,
2318
+ curatedFrom: collected.size,
2319
+ workflow: "summary-review",
2320
+ approvedSummary: resolvedSummary.approvedSummary,
2321
+ summaryMeta: resolvedSummary.summaryMeta,
2322
+ }));
2323
+ }
2324
+ closeCurator(commandCallId);
2325
+ },
2326
+ onProviderChange(provider) {
2327
+ if (commandHandle && !isCommandActive()) return;
2328
+ const normalized = normalizeProviderInput(provider);
2329
+ if (!normalized || normalized === "auto") return;
2330
+ currentProvider = normalized;
2331
+ currentSearchProvider = normalized;
2332
+ try {
2333
+ saveConfig({ provider: normalized });
2334
+ } catch (err) {
2335
+ const message = err instanceof Error ? err.message : String(err);
2336
+ console.error(`Failed to persist default provider: ${message}`);
2337
+ }
2338
+ },
2339
+ async onAddSearch(query, queryIndex, provider) {
2340
+ if (commandHandle && !isCommandActive()) {
2341
+ throw new Error("Curator session is no longer active.");
2342
+ }
2343
+ const normalizedProvider = normalizeProviderInput(provider);
2344
+ const requestedProvider = !normalizedProvider || normalizedProvider === "auto"
2345
+ ? currentSearchProvider
2346
+ : normalizedProvider;
2347
+ try {
2348
+ const { answer, results, provider: actualProvider } = await search(query, {
2349
+ provider: requestedProvider,
2350
+ signal: searchAbort.signal,
2351
+ extensionContext: ctx,
2352
+ });
2353
+ if (commandHandle && !isCommandActive()) {
2354
+ throw new Error("Curator session is no longer active.");
2355
+ }
2356
+ collected.set(queryIndex, { query, answer, results, error: null, provider: actualProvider });
2357
+ return {
2358
+ answer,
2359
+ results: results.map(r => ({ title: r.title, url: r.url, domain: extractDomain(r.url) })),
2360
+ provider: actualProvider,
2361
+ };
2362
+ } catch (err) {
2363
+ const message = err instanceof Error ? err.message : String(err);
2364
+ if (!commandHandle || isCommandActive()) {
2365
+ collected.set(queryIndex, { query, answer: "", results: [], error: message, provider: requestedProvider });
2366
+ }
2367
+ throw err;
2368
+ }
2369
+ },
2370
+ async onRewriteQuery(query, rewriteSignal) {
2371
+ if (commandHandle && !isCommandActive()) {
2372
+ throw new Error("Curator session is no longer active.");
2373
+ }
2374
+ return rewriteSearchQuery(query, summaryContext, rewriteSignal);
2375
+ },
2376
+ },
2377
+ );
2378
+
2379
+ commandHandle = handle;
2380
+ activeCurators.set(commandCallId, handle);
2381
+ const open = platform() === "darwin" ? await getGlimpseOpen() : null;
2382
+ let browserOpenError: string | null = null;
2383
+ if (open) {
2384
+ try {
2385
+ const win = openInGlimpse(open, handle.url, "Search Curator");
2386
+ glimpseWins.set(commandCallId, win);
2387
+ win.on("closed", () => {
2388
+ if (glimpseWins.get(commandCallId) === win) {
2389
+ glimpseWins.delete(commandCallId);
2390
+ closeCurator(commandCallId);
2391
+ }
2392
+ });
2393
+ } catch (err) {
2394
+ const message = err instanceof Error ? err.message : String(err);
2395
+ console.error(`Failed to open Glimpse curator window: ${message}`);
2396
+ glimpseWins.delete(commandCallId);
2397
+ try {
2398
+ await openInBrowser(pi, handle.url);
2399
+ } catch (browserErr) {
2400
+ browserOpenError = browserErr instanceof Error ? browserErr.message : String(browserErr);
2401
+ }
2402
+ }
2403
+ } else {
2404
+ try {
2405
+ await openInBrowser(pi, handle.url);
2406
+ } catch (browserErr) {
2407
+ browserOpenError = browserErr instanceof Error ? browserErr.message : String(browserErr);
2408
+ }
2409
+ }
2410
+ if (browserOpenError) {
2411
+ console.error(`Failed to open curator UI: ${browserOpenError}`);
2412
+ ctx.ui.notify(`Search curator is running, but the browser did not open automatically. Open manually: ${handle.url}`, "info");
2413
+ }
2414
+
2415
+ if (queries.length > 0) {
2416
+ (async () => {
2417
+ for (let qi = 0; qi < queries.length; qi++) {
2418
+ if (aborted || !isCommandActive()) break;
2419
+ const requestedProvider = currentSearchProvider;
2420
+ try {
2421
+ const { answer, results, provider } = await search(queries[qi], {
2422
+ provider: requestedProvider,
2423
+ signal: searchAbort.signal,
2424
+ extensionContext: ctx,
2425
+ });
2426
+ if (aborted || !isCommandActive()) break;
2427
+ handle.pushResult(qi, {
2428
+ answer,
2429
+ results: results.map(r => ({ title: r.title, url: r.url, domain: extractDomain(r.url) })),
2430
+ provider,
2431
+ });
2432
+ collected.set(qi, { query: queries[qi], answer, results, error: null, provider });
2433
+ } catch (err) {
2434
+ if (aborted || !isCommandActive()) break;
2435
+ const message = err instanceof Error ? err.message : String(err);
2436
+ handle.pushError(qi, message, requestedProvider);
2437
+ collected.set(qi, { query: queries[qi], answer: "", results: [], error: message, provider: requestedProvider });
2438
+ }
2439
+ }
2440
+ if (!aborted && isCommandActive()) handle.searchesDone();
2441
+ })();
2442
+ } else {
2443
+ if (isCommandActive()) handle.searchesDone();
2444
+ }
2445
+ } catch (err) {
2446
+ closeCurator(commandCallId);
2447
+ const message = err instanceof Error ? err.message : String(err);
2448
+ ctx.ui.notify(`Failed to open curator: ${message}`, "error");
2449
+ }
2450
+ },
2451
+ });
2452
+
2453
+ pi.registerCommand("curator", {
2454
+ description: "Toggle or configure the search curator workflow",
2455
+ handler: async (args, ctx) => {
2456
+ const arg = args.trim().toLowerCase();
2457
+
2458
+ let newWorkflow: WebSearchWorkflow;
2459
+ if (arg.length === 0) {
2460
+ const current = resolveWorkflow(loadConfigForExtensionInit().workflow, true);
2461
+ newWorkflow = current === "none" ? "summary-review" : "none";
2462
+ } else if (arg === "on") {
2463
+ newWorkflow = "summary-review";
2464
+ } else if (arg === "off") {
2465
+ newWorkflow = "none";
2466
+ } else if (arg === "none" || arg === "summary-review" || arg === "auto-summary") {
2467
+ newWorkflow = arg;
2468
+ } else {
2469
+ ctx.ui.notify(`Unknown option: ${arg}. Use on, off, summary-review, or auto-summary.`, "error");
2470
+ return;
2471
+ }
2472
+
2473
+ try {
2474
+ saveConfig({ workflow: newWorkflow });
2475
+ } catch (err) {
2476
+ const message = err instanceof Error ? err.message : String(err);
2477
+ ctx.ui.notify(`Failed to save config: ${message}`, "error");
2478
+ return;
2479
+ }
2480
+
2481
+ const label = newWorkflow === "none"
2482
+ ? "Curator disabled — web_search will return raw results"
2483
+ : newWorkflow === "auto-summary"
2484
+ ? "Auto-summary enabled — web_search will generate a summary without opening the curator"
2485
+ : "Curator enabled — web_search will open curator and auto-generate a summary draft";
2486
+ pi.sendMessage({
2487
+ customType: "curator-config",
2488
+ content: [{ type: "text", text: label }],
2489
+ display: true,
2490
+ details: { workflow: newWorkflow },
2491
+ }, { triggerTurn: false, deliverAs: "followUp" });
2492
+ },
2493
+ });
2494
+
2495
+ pi.registerCommand("google-account", {
2496
+ description: "Show the active Google account for Gemini Web",
2497
+ handler: async () => {
2498
+ if (!isBrowserCookieAccessAllowed()) {
2499
+ pi.sendMessage({
2500
+ customType: "google-account",
2501
+ content: [{ type: "text", text: `Gemini Web browser cookie access is disabled. Set allowBrowserCookies: true in ${WEB_SEARCH_CONFIG_PATH} to enable it.` }],
2502
+ display: true,
2503
+ details: { available: false, cookieAccessAllowed: false },
2504
+ }, { triggerTurn: true, deliverAs: "followUp" });
2505
+ return;
2506
+ }
2507
+
2508
+ const cookies = await isGeminiWebAvailable();
2509
+ if (!cookies) {
2510
+ pi.sendMessage({
2511
+ customType: "google-account",
2512
+ content: [{ type: "text", text: "Gemini Web is unavailable. Sign into gemini.google.com in a supported Chromium-based browser." }],
2513
+ display: true,
2514
+ details: { available: false, cookieAccessAllowed: true },
2515
+ }, { triggerTurn: true, deliverAs: "followUp" });
2516
+ return;
2517
+ }
2518
+
2519
+ const email = await getActiveGoogleEmail(cookies);
2520
+ const text = email
2521
+ ? `Active Google account: ${email}`
2522
+ : "Gemini Web is available, but the active Google account could not be determined.";
2523
+
2524
+ pi.sendMessage({
2525
+ customType: "google-account",
2526
+ content: [{ type: "text", text }],
2527
+ display: true,
2528
+ details: { available: true, email: email ?? null },
2529
+ }, { triggerTurn: true, deliverAs: "followUp" });
2530
+ },
2531
+ });
2532
+
2533
+ pi.registerCommand("search", {
2534
+ description: "Browse stored web search results",
2535
+ handler: async (_args, ctx) => {
2536
+ const results = getAllResults();
2537
+
2538
+ if (results.length === 0) {
2539
+ ctx.ui.notify("No stored search results", "info");
2540
+ return;
2541
+ }
2542
+
2543
+ const options = results.map((r) => {
2544
+ const age = Math.floor((Date.now() - r.timestamp) / 60000);
2545
+ const ageStr = age < 60 ? `${age}m ago` : `${Math.floor(age / 60)}h ago`;
2546
+ if (r.type === "search" && r.queries) {
2547
+ const query = r.queries[0]?.query || "unknown";
2548
+ return `[${r.id.slice(0, 6)}] "${query}" (${r.queries.length} queries) - ${ageStr}`;
2549
+ }
2550
+ if (r.type === "fetch" && r.urls) {
2551
+ return `[${r.id.slice(0, 6)}] ${r.urls.length} URLs fetched - ${ageStr}`;
2552
+ }
2553
+ return `[${r.id.slice(0, 6)}] ${r.type} - ${ageStr}`;
2554
+ });
2555
+
2556
+ const choice = await ctx.ui.select("Stored Search Results", options);
2557
+ if (!choice) return;
2558
+
2559
+ const match = choice.match(/^\[([a-z0-9]+)\]/);
2560
+ if (!match) return;
2561
+
2562
+ const selected = results.find((r) => r.id.startsWith(match[1]));
2563
+ if (!selected) return;
2564
+
2565
+ const actions = ["View details", "Delete"];
2566
+ const action = await ctx.ui.select(`Result ${selected.id.slice(0, 6)}`, actions);
2567
+
2568
+ if (action === "Delete") {
2569
+ deleteResult(selected.id);
2570
+ ctx.ui.notify(`Deleted ${selected.id.slice(0, 6)}`, "info");
2571
+ } else if (action === "View details") {
2572
+ let info = `ID: ${selected.id}\nType: ${selected.type}\nAge: ${Math.floor((Date.now() - selected.timestamp) / 60000)}m\n\n`;
2573
+ if (selected.type === "search" && selected.queries) {
2574
+ info += "Queries:\n";
2575
+ const queries = selected.queries.slice(0, 10);
2576
+ for (const q of queries) {
2577
+ info += `- "${q.query}" (${q.results.length} results)\n`;
2578
+ }
2579
+ if (selected.queries.length > 10) {
2580
+ info += `... and ${selected.queries.length - 10} more\n`;
2581
+ }
2582
+ }
2583
+ if (selected.type === "fetch" && selected.urls) {
2584
+ info += "URLs:\n";
2585
+ const urls = selected.urls.slice(0, 10);
2586
+ for (const u of urls) {
2587
+ const urlDisplay = u.url.length > 50 ? u.url.slice(0, 47) + "..." : u.url;
2588
+ info += `- ${urlDisplay} (${u.error || `${u.content.length} chars`})\n`;
2589
+ }
2590
+ if (selected.urls.length > 10) {
2591
+ info += `... and ${selected.urls.length - 10} more\n`;
2592
+ }
2593
+ }
2594
+ ctx.ui.notify(info, "info");
2595
+ }
2596
+ },
2597
+ });
2598
+ }