pi-kot 0.1.21 → 0.1.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/pi-kot.mjs +148 -0
- package/client/assets/KaTeX_AMS-Regular-BQhdFMY1.woff2 +0 -0
- package/client/assets/KaTeX_AMS-Regular-DMm9YOAa.woff +0 -0
- package/client/assets/KaTeX_AMS-Regular-DRggAlZN.ttf +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-ATXxdsX0.ttf +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-BEiXGLvX.woff +0 -0
- package/client/assets/KaTeX_Caligraphic-Bold-Dq_IR9rO.woff2 +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-CTRA-rTL.woff +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-Di6jR-x-.woff2 +0 -0
- package/client/assets/KaTeX_Caligraphic-Regular-wX97UBjC.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-BdnERNNW.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-BsDP51OF.woff +0 -0
- package/client/assets/KaTeX_Fraktur-Bold-CL6g_b3V.woff2 +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-CB_wures.ttf +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-CTYiF6lA.woff2 +0 -0
- package/client/assets/KaTeX_Fraktur-Regular-Dxdc4cR9.woff +0 -0
- package/client/assets/KaTeX_Main-Bold-Cx986IdX.woff2 +0 -0
- package/client/assets/KaTeX_Main-Bold-Jm3AIy58.woff +0 -0
- package/client/assets/KaTeX_Main-Bold-waoOVXN0.ttf +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-DxDJ3AOS.woff2 +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-DzxPMmG6.ttf +0 -0
- package/client/assets/KaTeX_Main-BoldItalic-SpSLRI95.woff +0 -0
- package/client/assets/KaTeX_Main-Italic-3WenGoN9.ttf +0 -0
- package/client/assets/KaTeX_Main-Italic-BMLOBm91.woff +0 -0
- package/client/assets/KaTeX_Main-Italic-NWA7e6Wa.woff2 +0 -0
- package/client/assets/KaTeX_Main-Regular-B22Nviop.woff2 +0 -0
- package/client/assets/KaTeX_Main-Regular-Dr94JaBh.woff +0 -0
- package/client/assets/KaTeX_Main-Regular-ypZvNtVU.ttf +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-B3XSjfu4.ttf +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-CZnvNsCZ.woff2 +0 -0
- package/client/assets/KaTeX_Math-BoldItalic-iY-2wyZ7.woff +0 -0
- package/client/assets/KaTeX_Math-Italic-DA0__PXp.woff +0 -0
- package/client/assets/KaTeX_Math-Italic-flOr_0UB.ttf +0 -0
- package/client/assets/KaTeX_Math-Italic-t53AETM-.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-CFMepnvq.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-D1sUS0GD.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Bold-DbIhKOiC.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-C3H0VqGB.woff2 +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-DN2j7dab.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Italic-YYjJ1zSn.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-BNo7hRIc.ttf +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-CS6fqUqJ.woff +0 -0
- package/client/assets/KaTeX_SansSerif-Regular-DDBCnlJ7.woff2 +0 -0
- package/client/assets/KaTeX_Script-Regular-C5JkGWo-.ttf +0 -0
- package/client/assets/KaTeX_Script-Regular-D3wIWfF6.woff2 +0 -0
- package/client/assets/KaTeX_Script-Regular-D5yQViql.woff +0 -0
- package/client/assets/KaTeX_Size1-Regular-C195tn64.woff +0 -0
- package/client/assets/KaTeX_Size1-Regular-Dbsnue_I.ttf +0 -0
- package/client/assets/KaTeX_Size1-Regular-mCD8mA8B.woff2 +0 -0
- package/client/assets/KaTeX_Size2-Regular-B7gKUWhC.ttf +0 -0
- package/client/assets/KaTeX_Size2-Regular-Dy4dx90m.woff2 +0 -0
- package/client/assets/KaTeX_Size2-Regular-oD1tc_U0.woff +0 -0
- package/client/assets/KaTeX_Size3-Regular-CTq5MqoE.woff +0 -0
- package/client/assets/KaTeX_Size3-Regular-DgpXs0kz.ttf +0 -0
- package/client/assets/KaTeX_Size4-Regular-BF-4gkZK.woff +0 -0
- package/client/assets/KaTeX_Size4-Regular-DWFBv043.ttf +0 -0
- package/client/assets/KaTeX_Size4-Regular-Dl5lxZxV.woff2 +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-C0xS9mPB.woff +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-CO6r4hn1.woff2 +0 -0
- package/client/assets/KaTeX_Typewriter-Regular-D3Ib7_Hf.ttf +0 -0
- package/client/assets/index-CE_Na97I.js +75 -0
- package/client/assets/index-CE_Na97I.js.map +1 -0
- package/client/assets/index-QP95zkpd.css +1 -0
- package/client/assets/rolldown-runtime-QTnfLwEv.js +1 -0
- package/client/assets/vendor-codemirror-CD3uCqRj.js +48 -0
- package/client/assets/vendor-codemirror-CD3uCqRj.js.map +1 -0
- package/client/assets/vendor-icons-W8thHNMl.js +2 -0
- package/client/assets/vendor-icons-W8thHNMl.js.map +1 -0
- package/client/assets/vendor-katex-4z5K3dyr.js +260 -0
- package/client/assets/vendor-katex-4z5K3dyr.js.map +1 -0
- package/client/assets/vendor-katex-CYlHEDRF.css +1 -0
- package/client/assets/vendor-markdown-BSzxNR_7.js +35 -0
- package/client/assets/vendor-markdown-BSzxNR_7.js.map +1 -0
- package/client/assets/vendor-prism-CQGp13s2.js +4 -0
- package/client/assets/vendor-prism-CQGp13s2.js.map +1 -0
- package/client/assets/vendor-xterm-BrP-ENHg.css +1 -0
- package/client/assets/vendor-xterm-DXwh06H3.js +36 -0
- package/client/assets/vendor-xterm-DXwh06H3.js.map +1 -0
- package/client/index.html +23 -0
- package/package.json +5 -3
- package/server/ask-user-question/envelope.d.ts +11 -0
- package/server/ask-user-question/envelope.d.ts.map +1 -0
- package/server/ask-user-question/envelope.js +41 -0
- package/server/ask-user-question/envelope.js.map +1 -0
- package/server/ask-user-question/plan-mode-question-tool.d.ts +26 -0
- package/server/ask-user-question/plan-mode-question-tool.d.ts.map +1 -0
- package/server/ask-user-question/plan-mode-question-tool.js +273 -0
- package/server/ask-user-question/plan-mode-question-tool.js.map +1 -0
- package/server/ask-user-question/prompt-strings.d.ts +4 -0
- package/server/ask-user-question/prompt-strings.d.ts.map +1 -0
- package/server/ask-user-question/prompt-strings.js +18 -0
- package/server/ask-user-question/prompt-strings.js.map +1 -0
- package/server/ask-user-question/registry.d.ts +39 -0
- package/server/ask-user-question/registry.d.ts.map +1 -0
- package/server/ask-user-question/registry.js +124 -0
- package/server/ask-user-question/registry.js.map +1 -0
- package/server/ask-user-question/tool.d.ts +4 -0
- package/server/ask-user-question/tool.d.ts.map +1 -0
- package/server/ask-user-question/tool.js +68 -0
- package/server/ask-user-question/tool.js.map +1 -0
- package/server/ask-user-question/types.d.ts +50 -0
- package/server/ask-user-question/types.d.ts.map +1 -0
- package/server/ask-user-question/types.js +7 -0
- package/server/ask-user-question/types.js.map +1 -0
- package/server/ask-user-question/validate.d.ts +3 -0
- package/server/ask-user-question/validate.d.ts.map +1 -0
- package/server/ask-user-question/validate.js +67 -0
- package/server/ask-user-question/validate.js.map +1 -0
- package/server/clone-provider.d.ts +55 -0
- package/server/clone-provider.d.ts.map +1 -0
- package/server/clone-provider.js +172 -0
- package/server/clone-provider.js.map +1 -0
- package/server/compaction-cards.d.ts +62 -0
- package/server/compaction-cards.d.ts.map +1 -0
- package/server/compaction-cards.js +180 -0
- package/server/compaction-cards.js.map +1 -0
- package/server/compaction-continuation.d.ts +112 -0
- package/server/compaction-continuation.d.ts.map +1 -0
- package/server/compaction-continuation.js +65 -0
- package/server/compaction-continuation.js.map +1 -0
- package/server/config-store.d.ts +97 -0
- package/server/config-store.d.ts.map +1 -0
- package/server/config-store.js +351 -0
- package/server/config-store.js.map +1 -0
- package/server/config.d.ts +24 -0
- package/server/config.d.ts.map +1 -0
- package/server/config.js +67 -0
- package/server/config.js.map +1 -0
- package/server/event-stream.d.ts +28 -0
- package/server/event-stream.d.ts.map +1 -0
- package/server/event-stream.js +153 -0
- package/server/event-stream.js.map +1 -0
- package/server/extension-manager.d.ts +116 -0
- package/server/extension-manager.d.ts.map +1 -0
- package/server/extension-manager.js +586 -0
- package/server/extension-manager.js.map +1 -0
- package/server/extension-scanner.d.ts +26 -0
- package/server/extension-scanner.d.ts.map +1 -0
- package/server/extension-scanner.js +107 -0
- package/server/extension-scanner.js.map +1 -0
- package/server/extension-ui-bridge.d.ts +35 -0
- package/server/extension-ui-bridge.d.ts.map +1 -0
- package/server/extension-ui-bridge.js +228 -0
- package/server/extension-ui-bridge.js.map +1 -0
- package/server/file-manager.d.ts +79 -0
- package/server/file-manager.d.ts.map +1 -0
- package/server/file-manager.js +535 -0
- package/server/file-manager.js.map +1 -0
- package/server/file-searcher.d.ts +29 -0
- package/server/file-searcher.d.ts.map +1 -0
- package/server/file-searcher.js +318 -0
- package/server/file-searcher.js.map +1 -0
- package/server/git-operations.d.ts +346 -0
- package/server/git-operations.d.ts.map +1 -0
- package/server/git-operations.js +884 -0
- package/server/git-operations.js.map +1 -0
- package/server/hunk-stager.d.ts +56 -0
- package/server/hunk-stager.d.ts.map +1 -0
- package/server/hunk-stager.js +137 -0
- package/server/hunk-stager.js.map +1 -0
- package/server/index.d.ts +21 -0
- package/server/index.d.ts.map +1 -0
- package/server/index.js +262 -0
- package/server/index.js.map +1 -0
- package/server/mcp/config.d.ts +23 -0
- package/server/mcp/config.d.ts.map +1 -0
- package/server/mcp/config.js +139 -0
- package/server/mcp/config.js.map +1 -0
- package/server/mcp/manager.d.ts +40 -0
- package/server/mcp/manager.d.ts.map +1 -0
- package/server/mcp/manager.js +435 -0
- package/server/mcp/manager.js.map +1 -0
- package/server/mcp/stdio-trust.d.ts +5 -0
- package/server/mcp/stdio-trust.d.ts.map +1 -0
- package/server/mcp/stdio-trust.js +78 -0
- package/server/mcp/stdio-trust.js.map +1 -0
- package/server/mcp/tool-bridge.d.ts +33 -0
- package/server/mcp/tool-bridge.d.ts.map +1 -0
- package/server/mcp/tool-bridge.js +138 -0
- package/server/mcp/tool-bridge.js.map +1 -0
- package/server/orchestration/config.d.ts +5 -0
- package/server/orchestration/config.d.ts.map +1 -0
- package/server/orchestration/config.js +35 -0
- package/server/orchestration/config.js.map +1 -0
- package/server/orchestration/event-bridge.d.ts +32 -0
- package/server/orchestration/event-bridge.d.ts.map +1 -0
- package/server/orchestration/event-bridge.js +110 -0
- package/server/orchestration/event-bridge.js.map +1 -0
- package/server/orchestration/inbox.d.ts +9 -0
- package/server/orchestration/inbox.d.ts.map +1 -0
- package/server/orchestration/inbox.js +186 -0
- package/server/orchestration/inbox.js.map +1 -0
- package/server/orchestration/init.d.ts +2 -0
- package/server/orchestration/init.d.ts.map +1 -0
- package/server/orchestration/init.js +22 -0
- package/server/orchestration/init.js.map +1 -0
- package/server/orchestration/store.d.ts +33 -0
- package/server/orchestration/store.d.ts.map +1 -0
- package/server/orchestration/store.js +331 -0
- package/server/orchestration/store.js.map +1 -0
- package/server/orchestration/tools.d.ts +15 -0
- package/server/orchestration/tools.d.ts.map +1 -0
- package/server/orchestration/tools.js +621 -0
- package/server/orchestration/tools.js.map +1 -0
- package/server/orchestration/types.d.ts +68 -0
- package/server/orchestration/types.d.ts.map +1 -0
- package/server/orchestration/types.js +43 -0
- package/server/orchestration/types.js.map +1 -0
- package/server/orchestration/worker-lifecycle.d.ts +15 -0
- package/server/orchestration/worker-lifecycle.d.ts.map +1 -0
- package/server/orchestration/worker-lifecycle.js +45 -0
- package/server/orchestration/worker-lifecycle.js.map +1 -0
- package/server/path-refs.d.ts +5 -0
- package/server/path-refs.d.ts.map +1 -0
- package/server/path-refs.js +249 -0
- package/server/path-refs.js.map +1 -0
- package/server/routes/_schemas.d.ts +16 -0
- package/server/routes/_schemas.d.ts.map +1 -0
- package/server/routes/_schemas.js +12 -0
- package/server/routes/_schemas.js.map +1 -0
- package/server/routes/ask-user-question.d.ts +3 -0
- package/server/routes/ask-user-question.d.ts.map +1 -0
- package/server/routes/ask-user-question.js +105 -0
- package/server/routes/ask-user-question.js.map +1 -0
- package/server/routes/auth.d.ts +8 -0
- package/server/routes/auth.d.ts.map +1 -0
- package/server/routes/auth.js +225 -0
- package/server/routes/auth.js.map +1 -0
- package/server/routes/config.d.ts +3 -0
- package/server/routes/config.d.ts.map +1 -0
- package/server/routes/config.js +602 -0
- package/server/routes/config.js.map +1 -0
- package/server/routes/control.d.ts +3 -0
- package/server/routes/control.d.ts.map +1 -0
- package/server/routes/control.js +365 -0
- package/server/routes/control.js.map +1 -0
- package/server/routes/exec.d.ts +3 -0
- package/server/routes/exec.d.ts.map +1 -0
- package/server/routes/exec.js +426 -0
- package/server/routes/exec.js.map +1 -0
- package/server/routes/extension-commands.d.ts +22 -0
- package/server/routes/extension-commands.d.ts.map +1 -0
- package/server/routes/extension-commands.js +178 -0
- package/server/routes/extension-commands.js.map +1 -0
- package/server/routes/extensions.d.ts +8 -0
- package/server/routes/extensions.d.ts.map +1 -0
- package/server/routes/extensions.js +414 -0
- package/server/routes/extensions.js.map +1 -0
- package/server/routes/files.d.ts +3 -0
- package/server/routes/files.d.ts.map +1 -0
- package/server/routes/files.js +835 -0
- package/server/routes/files.js.map +1 -0
- package/server/routes/git.d.ts +3 -0
- package/server/routes/git.d.ts.map +1 -0
- package/server/routes/git.js +1058 -0
- package/server/routes/git.js.map +1 -0
- package/server/routes/mcp.d.ts +3 -0
- package/server/routes/mcp.d.ts.map +1 -0
- package/server/routes/mcp.js +403 -0
- package/server/routes/mcp.js.map +1 -0
- package/server/routes/orchestration.d.ts +3 -0
- package/server/routes/orchestration.d.ts.map +1 -0
- package/server/routes/orchestration.js +251 -0
- package/server/routes/orchestration.js.map +1 -0
- package/server/routes/projects.d.ts +3 -0
- package/server/routes/projects.d.ts.map +1 -0
- package/server/routes/projects.js +421 -0
- package/server/routes/projects.js.map +1 -0
- package/server/routes/prompt.d.ts +3 -0
- package/server/routes/prompt.d.ts.map +1 -0
- package/server/routes/prompt.js +311 -0
- package/server/routes/prompt.js.map +1 -0
- package/server/routes/session-extensions.d.ts +11 -0
- package/server/routes/session-extensions.d.ts.map +1 -0
- package/server/routes/session-extensions.js +171 -0
- package/server/routes/session-extensions.js.map +1 -0
- package/server/routes/sessions.d.ts +3 -0
- package/server/routes/sessions.d.ts.map +1 -0
- package/server/routes/sessions.js +706 -0
- package/server/routes/sessions.js.map +1 -0
- package/server/routes/skills.d.ts +14 -0
- package/server/routes/skills.d.ts.map +1 -0
- package/server/routes/skills.js +448 -0
- package/server/routes/skills.js.map +1 -0
- package/server/routes/stream.d.ts +3 -0
- package/server/routes/stream.d.ts.map +1 -0
- package/server/routes/stream.js +112 -0
- package/server/routes/stream.js.map +1 -0
- package/server/routes/terminal.d.ts +28 -0
- package/server/routes/terminal.d.ts.map +1 -0
- package/server/routes/terminal.js +211 -0
- package/server/routes/terminal.js.map +1 -0
- package/server/routes/tunnel.d.ts +13 -0
- package/server/routes/tunnel.d.ts.map +1 -0
- package/server/routes/tunnel.js +231 -0
- package/server/routes/tunnel.js.map +1 -0
- package/server/session-alerts.d.ts +28 -0
- package/server/session-alerts.d.ts.map +1 -0
- package/server/session-alerts.js +38 -0
- package/server/session-alerts.js.map +1 -0
- package/server/session-store.d.ts +164 -0
- package/server/session-store.d.ts.map +1 -0
- package/server/session-store.js +754 -0
- package/server/session-store.js.map +1 -0
- package/server/skill-policy.d.ts +47 -0
- package/server/skill-policy.d.ts.map +1 -0
- package/server/skill-policy.js +178 -0
- package/server/skill-policy.js.map +1 -0
- package/server/terminal-provider.d.ts +54 -0
- package/server/terminal-provider.d.ts.map +1 -0
- package/server/terminal-provider.js +220 -0
- package/server/terminal-provider.js.map +1 -0
- package/server/tool-policy.d.ts +39 -0
- package/server/tool-policy.d.ts.map +1 -0
- package/server/tool-policy.js +121 -0
- package/server/tool-policy.js.map +1 -0
- package/server/tunnel/executable-search.d.ts +43 -0
- package/server/tunnel/executable-search.d.ts.map +1 -0
- package/server/tunnel/executable-search.js +148 -0
- package/server/tunnel/executable-search.js.map +1 -0
- package/server/tunnel/install-help.d.ts +19 -0
- package/server/tunnel/install-help.d.ts.map +1 -0
- package/server/tunnel/install-help.js +47 -0
- package/server/tunnel/install-help.js.map +1 -0
- package/server/tunnel/providers/ngrok.d.ts +31 -0
- package/server/tunnel/providers/ngrok.d.ts.map +1 -0
- package/server/tunnel/providers/ngrok.js +461 -0
- package/server/tunnel/providers/ngrok.js.map +1 -0
- package/server/tunnel/registry.d.ts +13 -0
- package/server/tunnel/registry.d.ts.map +1 -0
- package/server/tunnel/registry.js +56 -0
- package/server/tunnel/registry.js.map +1 -0
- package/server/tunnel/service.d.ts +13 -0
- package/server/tunnel/service.d.ts.map +1 -0
- package/server/tunnel/service.js +156 -0
- package/server/tunnel/service.js.map +1 -0
- package/server/tunnel/types.d.ts +163 -0
- package/server/tunnel/types.d.ts.map +1 -0
- package/server/tunnel/types.js +214 -0
- package/server/tunnel/types.js.map +1 -0
- package/server/ui-settings-store.d.ts +25 -0
- package/server/ui-settings-store.d.ts.map +1 -0
- package/server/ui-settings-store.js +91 -0
- package/server/ui-settings-store.js.map +1 -0
- package/server/workspace-store.d.ts +25 -0
- package/server/workspace-store.d.ts.map +1 -0
- package/server/workspace-store.js +157 -0
- package/server/workspace-store.js.map +1 -0
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
<!DOCTYPE html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, viewport-fit=cover" />
|
|
6
|
+
<title>pi-kot</title>
|
|
7
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
8
|
+
<script type="module" crossorigin src="/assets/index-CE_Na97I.js"></script>
|
|
9
|
+
<link rel="modulepreload" crossorigin href="/assets/rolldown-runtime-QTnfLwEv.js">
|
|
10
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-icons-W8thHNMl.js">
|
|
11
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-prism-CQGp13s2.js">
|
|
12
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-katex-4z5K3dyr.js">
|
|
13
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-markdown-BSzxNR_7.js">
|
|
14
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-codemirror-CD3uCqRj.js">
|
|
15
|
+
<link rel="modulepreload" crossorigin href="/assets/vendor-xterm-DXwh06H3.js">
|
|
16
|
+
<link rel="stylesheet" crossorigin href="/assets/vendor-katex-CYlHEDRF.css">
|
|
17
|
+
<link rel="stylesheet" crossorigin href="/assets/vendor-xterm-BrP-ENHg.css">
|
|
18
|
+
<link rel="stylesheet" crossorigin href="/assets/index-QP95zkpd.css">
|
|
19
|
+
</head>
|
|
20
|
+
<body>
|
|
21
|
+
<div id="root"></div>
|
|
22
|
+
</body>
|
|
23
|
+
</html>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "pi-kot",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.22",
|
|
4
4
|
"description": "Browser UI for the pi coding agent — self-hosted React workbench with chat, file browser, terminal, git panel, and session tree.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -12,8 +12,10 @@
|
|
|
12
12
|
},
|
|
13
13
|
"private": false,
|
|
14
14
|
"files": [
|
|
15
|
+
"server/",
|
|
16
|
+
"client/",
|
|
15
17
|
"bin/",
|
|
16
|
-
"
|
|
17
|
-
"
|
|
18
|
+
"package.json",
|
|
19
|
+
"README.md"
|
|
18
20
|
]
|
|
19
21
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { QuestionAnswer, AskUserQuestionResult } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Build the tool result envelope from the user's answers.
|
|
4
|
+
* The text block contains a human-readable summary so the agent
|
|
5
|
+
* can see what happened; `details` carries the structured data.
|
|
6
|
+
*/
|
|
7
|
+
export declare function buildResult(answers: QuestionAnswer[], extras: {
|
|
8
|
+
cancelled: boolean;
|
|
9
|
+
questionCount: number;
|
|
10
|
+
}): AskUserQuestionResult;
|
|
11
|
+
//# sourceMappingURL=envelope.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/envelope.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAExE;;;;GAIG;AACH,wBAAgB,WAAW,CACzB,OAAO,EAAE,cAAc,EAAE,EACzB,MAAM,EAAE;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GACpD,qBAAqB,CAqCvB"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Build the tool result envelope from the user's answers.
|
|
3
|
+
* The text block contains a human-readable summary so the agent
|
|
4
|
+
* can see what happened; `details` carries the structured data.
|
|
5
|
+
*/
|
|
6
|
+
export function buildResult(answers, extras) {
|
|
7
|
+
const { cancelled, questionCount } = extras;
|
|
8
|
+
const parts = [];
|
|
9
|
+
if (cancelled) {
|
|
10
|
+
if (answers.length > 0) {
|
|
11
|
+
parts.push(`The user cancelled the questionnaire after answering ${answers.length}/${questionCount} questions.`);
|
|
12
|
+
}
|
|
13
|
+
else {
|
|
14
|
+
parts.push("The user cancelled the questionnaire. No answers were provided.");
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
else {
|
|
18
|
+
parts.push("The user answered the following questions:");
|
|
19
|
+
}
|
|
20
|
+
for (const a of answers) {
|
|
21
|
+
switch (a.kind) {
|
|
22
|
+
case "option":
|
|
23
|
+
parts.push(`- ${a.question}: ${a.answer}`);
|
|
24
|
+
break;
|
|
25
|
+
case "multi":
|
|
26
|
+
parts.push(`- ${a.question}: selected ${a.selected?.join(", ") ?? "nothing"}`);
|
|
27
|
+
break;
|
|
28
|
+
case "custom":
|
|
29
|
+
parts.push(`- ${a.question}: ${a.answer ?? "(no input)"}`);
|
|
30
|
+
break;
|
|
31
|
+
case "chat":
|
|
32
|
+
parts.push(`- ${a.question}: (user chose to chat about this)`);
|
|
33
|
+
break;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
return {
|
|
37
|
+
content: [{ type: "text", text: parts.join("\n") }],
|
|
38
|
+
details: { answers, cancelled, error: undefined },
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=envelope.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"envelope.js","sourceRoot":"","sources":["../../src/ask-user-question/envelope.ts"],"names":[],"mappings":"AAEA;;;;GAIG;AACH,MAAM,UAAU,WAAW,CACzB,OAAyB,EACzB,MAAqD;IAErD,MAAM,EAAE,SAAS,EAAE,aAAa,EAAE,GAAG,MAAM,CAAC;IAE5C,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,SAAS,EAAE,CAAC;QACd,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,KAAK,CAAC,IAAI,CACR,wDAAwD,OAAO,CAAC,MAAM,IAAI,aAAa,aAAa,CACrG,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,KAAK,CAAC,IAAI,CAAC,iEAAiE,CAAC,CAAC;QAChF,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,4CAA4C,CAAC,CAAC;IAC3D,CAAC;IAED,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,QAAQ,CAAC,CAAC,IAAI,EAAE,CAAC;YACf,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC;gBAC3C,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,cAAc,CAAC,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE,CAAC,CAAC;gBAC/E,MAAM;YACR,KAAK,QAAQ;gBACX,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,KAAK,CAAC,CAAC,MAAM,IAAI,YAAY,EAAE,CAAC,CAAC;gBAC3D,MAAM;YACR,KAAK,MAAM;gBACT,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,mCAAmC,CAAC,CAAC;gBAC/D,MAAM;QACV,CAAC;IACH,CAAC;IAED,OAAO;QACL,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACnD,OAAO,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE;KAClD,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* pi-kot's own `plan_mode_question` tool, replacing the one from
|
|
3
|
+
* `@narumitw/pi-plan-mode` which relies on `ctx.ui.select()` /
|
|
4
|
+
* `ctx.ui.editor()` (TUI only). pi-kot runs the SDK without a TUI,
|
|
5
|
+
* so `ctx.hasUI` is false and the extension's tool returns
|
|
6
|
+
* `ui_unavailable`.
|
|
7
|
+
*
|
|
8
|
+
* This tool re-routes Plan-mode questions through pi-kot's existing
|
|
9
|
+
* ask-user-question pipeline (in-memory registry + REST endpoint +
|
|
10
|
+
* SSE bridge), letting the web UI user answer directly.
|
|
11
|
+
*
|
|
12
|
+
* Tool name and parameter schema match the pi-plan-mode extension so
|
|
13
|
+
* it plugs in seamlessly. The system-prompt instructions the extension
|
|
14
|
+
* injects (e.g. "if plan_mode_question returns cancelled...") remain
|
|
15
|
+
* compatible because the text/JSON envelope is identical.
|
|
16
|
+
*/
|
|
17
|
+
import type { ToolDefinition } from "@earendil-works/pi-coding-agent";
|
|
18
|
+
export declare const PLAN_MODE_QUESTION_TOOL_NAME = "plan_mode_question";
|
|
19
|
+
/**
|
|
20
|
+
* Create the `plan_mode_question` tool for a given session.
|
|
21
|
+
* Registers with the same tool name the pi-plan-mode extension uses,
|
|
22
|
+
* so the SDK's tool registry favours this one (customTools are loaded
|
|
23
|
+
* after extension tools).
|
|
24
|
+
*/
|
|
25
|
+
export declare function createPlanModeQuestionTool(sessionId: string): ToolDefinition;
|
|
26
|
+
//# sourceMappingURL=plan-mode-question-tool.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-mode-question-tool.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/plan-mode-question-tool.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAItE,eAAO,MAAM,4BAA4B,uBAAuB,CAAC;AA0MjE;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,SAAS,EAAE,MAAM,GAChB,cAAc,CAwHhB"}
|
|
@@ -0,0 +1,273 @@
|
|
|
1
|
+
import { registerPending } from "./registry.js";
|
|
2
|
+
export const PLAN_MODE_QUESTION_TOOL_NAME = "plan_mode_question";
|
|
3
|
+
/** Input schema — identical to what the pi-plan-mode extension expects. */
|
|
4
|
+
const inputSchema = {
|
|
5
|
+
type: "object",
|
|
6
|
+
additionalProperties: false,
|
|
7
|
+
required: ["questions"],
|
|
8
|
+
properties: {
|
|
9
|
+
questions: {
|
|
10
|
+
type: "array",
|
|
11
|
+
minItems: 1,
|
|
12
|
+
maxItems: 3,
|
|
13
|
+
description: "Questions to show the user. Prefer 1 and do not exceed 3.",
|
|
14
|
+
items: {
|
|
15
|
+
type: "object",
|
|
16
|
+
additionalProperties: false,
|
|
17
|
+
required: ["id", "header", "question", "options"],
|
|
18
|
+
properties: {
|
|
19
|
+
id: {
|
|
20
|
+
type: "string",
|
|
21
|
+
description: "Stable identifier for mapping answers (snake_case).",
|
|
22
|
+
},
|
|
23
|
+
header: {
|
|
24
|
+
type: "string",
|
|
25
|
+
description: "Short header label shown in the UI (12 or fewer chars).",
|
|
26
|
+
},
|
|
27
|
+
question: {
|
|
28
|
+
type: "string",
|
|
29
|
+
description: "Single-sentence prompt shown to the user.",
|
|
30
|
+
},
|
|
31
|
+
options: {
|
|
32
|
+
type: "array",
|
|
33
|
+
minItems: 2,
|
|
34
|
+
maxItems: 4,
|
|
35
|
+
description: "Provide 2-4 mutually exclusive choices. Put the recommended option first when there is a clear default.",
|
|
36
|
+
items: {
|
|
37
|
+
type: "object",
|
|
38
|
+
additionalProperties: false,
|
|
39
|
+
required: ["label", "description"],
|
|
40
|
+
properties: {
|
|
41
|
+
label: {
|
|
42
|
+
type: "string",
|
|
43
|
+
description: "User-facing label (1-5 words).",
|
|
44
|
+
},
|
|
45
|
+
description: {
|
|
46
|
+
type: "string",
|
|
47
|
+
description: "One short sentence explaining impact/tradeoff if selected.",
|
|
48
|
+
},
|
|
49
|
+
},
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
53
|
+
},
|
|
54
|
+
},
|
|
55
|
+
},
|
|
56
|
+
};
|
|
57
|
+
/**
|
|
58
|
+
* Normalize and validate `plan_mode_question` params. Mirrors the
|
|
59
|
+
* pi-plan-mode extension's validation logic.
|
|
60
|
+
*/
|
|
61
|
+
function normalizeInput(raw) {
|
|
62
|
+
if (typeof raw !== "object" || raw === null) {
|
|
63
|
+
return { ok: false, error: "Expected an object" };
|
|
64
|
+
}
|
|
65
|
+
const input = raw;
|
|
66
|
+
const rawQuestions = input.questions;
|
|
67
|
+
if (!Array.isArray(rawQuestions) || rawQuestions.length === 0 || rawQuestions.length > 3) {
|
|
68
|
+
return { ok: false, error: "questions must contain 1-3 items" };
|
|
69
|
+
}
|
|
70
|
+
const questions = [];
|
|
71
|
+
for (let qi = 0; qi < rawQuestions.length; qi++) {
|
|
72
|
+
const q = rawQuestions[qi];
|
|
73
|
+
if (typeof q !== "object" || q === null) {
|
|
74
|
+
return { ok: false, error: `question ${qi + 1} must be an object` };
|
|
75
|
+
}
|
|
76
|
+
const qq = q;
|
|
77
|
+
const id = typeof qq.id === "string" && qq.id.trim().length > 0 ? qq.id.trim() : undefined;
|
|
78
|
+
const header = typeof qq.header === "string" && qq.header.trim().length > 0 ? qq.header.trim() : undefined;
|
|
79
|
+
const question = typeof qq.question === "string" && qq.question.trim().length > 0 ? qq.question.trim() : undefined;
|
|
80
|
+
if (!id || !header || !question) {
|
|
81
|
+
return {
|
|
82
|
+
ok: false,
|
|
83
|
+
error: `question ${qi + 1} requires non-empty id, header, and question`,
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
const rawOptions = qq.options;
|
|
87
|
+
if (!Array.isArray(rawOptions) || rawOptions.length < 2 || rawOptions.length > 4) {
|
|
88
|
+
return {
|
|
89
|
+
ok: false,
|
|
90
|
+
error: `question ${qi + 1} options must contain 2-4 items`,
|
|
91
|
+
};
|
|
92
|
+
}
|
|
93
|
+
const options = [];
|
|
94
|
+
for (let oi = 0; oi < rawOptions.length; oi++) {
|
|
95
|
+
const o = rawOptions[oi];
|
|
96
|
+
if (typeof o !== "object" || o === null) {
|
|
97
|
+
return { ok: false, error: `question ${qi + 1} option ${oi + 1} must be an object` };
|
|
98
|
+
}
|
|
99
|
+
const oo = o;
|
|
100
|
+
const label = typeof oo.label === "string" && oo.label.trim().length > 0 ? oo.label.trim() : undefined;
|
|
101
|
+
const description = typeof oo.description === "string" && oo.description.trim().length > 0
|
|
102
|
+
? oo.description.trim()
|
|
103
|
+
: undefined;
|
|
104
|
+
if (!label || !description) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
error: `question ${qi + 1} option ${oi + 1} requires label and description`,
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
options.push({ label, description });
|
|
111
|
+
}
|
|
112
|
+
questions.push({ id, header, question, options });
|
|
113
|
+
}
|
|
114
|
+
return { ok: true, questions };
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Map a QuestionAnswer from the ask-user-question pipeline back to a
|
|
118
|
+
* PlanModeQuestionAnswer, using the original PlanModeQuestion to
|
|
119
|
+
* recover `id` and `header`.
|
|
120
|
+
*/
|
|
121
|
+
function mapAnswer(answer, original) {
|
|
122
|
+
const base = {
|
|
123
|
+
id: original.id,
|
|
124
|
+
header: original.header,
|
|
125
|
+
question: original.question,
|
|
126
|
+
};
|
|
127
|
+
switch (answer.kind) {
|
|
128
|
+
case "option":
|
|
129
|
+
return {
|
|
130
|
+
...base,
|
|
131
|
+
answer: answer.answer ?? original.options[0]?.label ?? "",
|
|
132
|
+
wasCustom: false,
|
|
133
|
+
optionIndex: original.options.findIndex((o) => o.label === answer.answer) + 1,
|
|
134
|
+
};
|
|
135
|
+
case "custom":
|
|
136
|
+
return {
|
|
137
|
+
...base,
|
|
138
|
+
answer: answer.answer ?? "",
|
|
139
|
+
wasCustom: true,
|
|
140
|
+
};
|
|
141
|
+
case "multi":
|
|
142
|
+
return {
|
|
143
|
+
...base,
|
|
144
|
+
answer: answer.selected?.join(", ") ?? "",
|
|
145
|
+
wasCustom: false,
|
|
146
|
+
};
|
|
147
|
+
case "chat":
|
|
148
|
+
return {
|
|
149
|
+
...base,
|
|
150
|
+
answer: answer.notes ?? "(user chose to discuss this)",
|
|
151
|
+
wasCustom: true,
|
|
152
|
+
};
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
/** Build the JSON payload string the LLM sees in content text. */
|
|
156
|
+
function formatPayload(payload) {
|
|
157
|
+
return JSON.stringify(payload, null, 2);
|
|
158
|
+
}
|
|
159
|
+
/**
|
|
160
|
+
* Create the `plan_mode_question` tool for a given session.
|
|
161
|
+
* Registers with the same tool name the pi-plan-mode extension uses,
|
|
162
|
+
* so the SDK's tool registry favours this one (customTools are loaded
|
|
163
|
+
* after extension tools).
|
|
164
|
+
*/
|
|
165
|
+
export function createPlanModeQuestionTool(sessionId) {
|
|
166
|
+
return {
|
|
167
|
+
name: PLAN_MODE_QUESTION_TOOL_NAME,
|
|
168
|
+
label: "Plan question",
|
|
169
|
+
description: "Ask the user one to three Plan-mode clarification questions with meaningful options, then wait for the answer. Only available while Plan mode is active.",
|
|
170
|
+
promptSnippet: "Ask user decision questions while Plan mode is active",
|
|
171
|
+
promptGuidelines: [
|
|
172
|
+
"In Plan mode, use plan_mode_question for important preferences, tradeoffs, or assumptions that cannot be discovered from read-only exploration.",
|
|
173
|
+
],
|
|
174
|
+
parameters: inputSchema,
|
|
175
|
+
async execute(_toolCallId, params, signal) {
|
|
176
|
+
const parsed = normalizeInput(params);
|
|
177
|
+
if (!parsed.ok) {
|
|
178
|
+
return {
|
|
179
|
+
content: [
|
|
180
|
+
{
|
|
181
|
+
type: "text",
|
|
182
|
+
text: formatPayload({
|
|
183
|
+
cancelled: true,
|
|
184
|
+
reason: "invalid_input",
|
|
185
|
+
message: `Error: ${parsed.error}`,
|
|
186
|
+
}),
|
|
187
|
+
},
|
|
188
|
+
],
|
|
189
|
+
details: {
|
|
190
|
+
cancelled: true,
|
|
191
|
+
reason: "invalid_input",
|
|
192
|
+
questions: [],
|
|
193
|
+
},
|
|
194
|
+
};
|
|
195
|
+
}
|
|
196
|
+
// Map plan_mode_question Question format → ask_user_question Question format
|
|
197
|
+
const registryQuestions = parsed.questions.map((q) => ({
|
|
198
|
+
question: q.question,
|
|
199
|
+
header: q.header,
|
|
200
|
+
options: q.options,
|
|
201
|
+
}));
|
|
202
|
+
try {
|
|
203
|
+
const { result } = registerPending({
|
|
204
|
+
sessionId,
|
|
205
|
+
questions: registryQuestions,
|
|
206
|
+
signal,
|
|
207
|
+
});
|
|
208
|
+
const registryResult = await result;
|
|
209
|
+
const details = registryResult.details;
|
|
210
|
+
if (details.cancelled) {
|
|
211
|
+
return {
|
|
212
|
+
content: [
|
|
213
|
+
{
|
|
214
|
+
type: "text",
|
|
215
|
+
text: formatPayload({
|
|
216
|
+
cancelled: true,
|
|
217
|
+
reason: "cancelled",
|
|
218
|
+
message: "User cancelled the Plan-mode question prompt.",
|
|
219
|
+
}),
|
|
220
|
+
},
|
|
221
|
+
],
|
|
222
|
+
details: {
|
|
223
|
+
cancelled: true,
|
|
224
|
+
reason: "cancelled",
|
|
225
|
+
questions: parsed.questions,
|
|
226
|
+
},
|
|
227
|
+
};
|
|
228
|
+
}
|
|
229
|
+
// Map answers back to plan_mode_question format
|
|
230
|
+
const planAnswers = details.answers.map((a, i) => {
|
|
231
|
+
const original = parsed.questions[i];
|
|
232
|
+
return mapAnswer(a, original);
|
|
233
|
+
});
|
|
234
|
+
return {
|
|
235
|
+
content: [
|
|
236
|
+
{
|
|
237
|
+
type: "text",
|
|
238
|
+
text: formatPayload({
|
|
239
|
+
cancelled: false,
|
|
240
|
+
answers: planAnswers,
|
|
241
|
+
}),
|
|
242
|
+
},
|
|
243
|
+
],
|
|
244
|
+
details: {
|
|
245
|
+
cancelled: false,
|
|
246
|
+
questions: parsed.questions,
|
|
247
|
+
answers: planAnswers,
|
|
248
|
+
},
|
|
249
|
+
};
|
|
250
|
+
}
|
|
251
|
+
catch {
|
|
252
|
+
return {
|
|
253
|
+
content: [
|
|
254
|
+
{
|
|
255
|
+
type: "text",
|
|
256
|
+
text: formatPayload({
|
|
257
|
+
cancelled: true,
|
|
258
|
+
reason: "ui_unavailable",
|
|
259
|
+
message: "Unable to ask Plan-mode questions because the question pipeline is not available.",
|
|
260
|
+
}),
|
|
261
|
+
},
|
|
262
|
+
],
|
|
263
|
+
details: {
|
|
264
|
+
cancelled: true,
|
|
265
|
+
reason: "ui_unavailable",
|
|
266
|
+
questions: parsed.questions,
|
|
267
|
+
},
|
|
268
|
+
};
|
|
269
|
+
}
|
|
270
|
+
},
|
|
271
|
+
};
|
|
272
|
+
}
|
|
273
|
+
//# sourceMappingURL=plan-mode-question-tool.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plan-mode-question-tool.js","sourceRoot":"","sources":["../../src/ask-user-question/plan-mode-question-tool.ts"],"names":[],"mappings":"AAiBA,OAAO,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAGhD,MAAM,CAAC,MAAM,4BAA4B,GAAG,oBAAoB,CAAC;AAuBjE,2EAA2E;AAC3E,MAAM,WAAW,GAAG;IAClB,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,WAAW,CAAC;IACvB,UAAU,EAAE;QACV,SAAS,EAAE;YACT,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,CAAC;YACX,QAAQ,EAAE,CAAC;YACX,WAAW,EACT,2DAA2D;YAC7D,KAAK,EAAE;gBACL,IAAI,EAAE,QAAQ;gBACd,oBAAoB,EAAE,KAAK;gBAC3B,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,UAAU,EAAE,SAAS,CAAC;gBACjD,UAAU,EAAE;oBACV,EAAE,EAAE;wBACF,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,qDAAqD;qBACnE;oBACD,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ;wBACd,WAAW,EACT,yDAAyD;qBAC5D;oBACD,QAAQ,EAAE;wBACR,IAAI,EAAE,QAAQ;wBACd,WAAW,EAAE,2CAA2C;qBACzD;oBACD,OAAO,EAAE;wBACP,IAAI,EAAE,OAAO;wBACb,QAAQ,EAAE,CAAC;wBACX,QAAQ,EAAE,CAAC;wBACX,WAAW,EACT,yGAAyG;wBAC3G,KAAK,EAAE;4BACL,IAAI,EAAE,QAAQ;4BACd,oBAAoB,EAAE,KAAK;4BAC3B,QAAQ,EAAE,CAAC,OAAO,EAAE,aAAa,CAAC;4BAClC,UAAU,EAAE;gCACV,KAAK,EAAE;oCACL,IAAI,EAAE,QAAQ;oCACd,WAAW,EAAE,gCAAgC;iCAC9C;gCACD,WAAW,EAAE;oCACX,IAAI,EAAE,QAAQ;oCACd,WAAW,EACT,4DAA4D;iCAC/D;6BACF;yBACF;qBACF;iBACF;aACF;SACF;KACF;CACO,CAAC;AAEX;;;GAGG;AACH,SAAS,cAAc,CACrB,GAAY;IAEZ,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;QAC5C,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,EAAE,CAAC;IACpD,CAAC;IACD,MAAM,KAAK,GAAG,GAA8B,CAAC;IAC7C,MAAM,YAAY,GAAG,KAAK,CAAC,SAAS,CAAC;IACrC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,YAAY,CAAC,MAAM,KAAK,CAAC,IAAI,YAAY,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACzF,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,kCAAkC,EAAE,CAAC;IAClE,CAAC;IAED,MAAM,SAAS,GAAuB,EAAE,CAAC;IACzC,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,YAAY,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;QAChD,MAAM,CAAC,GAAG,YAAY,CAAC,EAAE,CAAC,CAAC;QAC3B,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;YACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC;QACtE,CAAC;QACD,MAAM,EAAE,GAAG,CAA4B,CAAC;QACxC,MAAM,EAAE,GAAG,OAAO,EAAE,CAAC,EAAE,KAAK,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC3F,MAAM,MAAM,GACV,OAAO,EAAE,CAAC,MAAM,KAAK,QAAQ,IAAI,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QAC9F,MAAM,QAAQ,GACZ,OAAO,EAAE,CAAC,QAAQ,KAAK,QAAQ,IAAI,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;QACpG,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,IAAI,CAAC,QAAQ,EAAE,CAAC;YAChC,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,8CAA8C;aACxE,CAAC;QACJ,CAAC;QAED,MAAM,UAAU,GAAG,EAAE,CAAC,OAAO,CAAC;QAC9B,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACjF,OAAO;gBACL,EAAE,EAAE,KAAK;gBACT,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,iCAAiC;aAC3D,CAAC;QACJ,CAAC;QAED,MAAM,OAAO,GAA6C,EAAE,CAAC;QAC7D,KAAK,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE,GAAG,UAAU,CAAC,MAAM,EAAE,EAAE,EAAE,EAAE,CAAC;YAC9C,MAAM,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC;YACzB,IAAI,OAAO,CAAC,KAAK,QAAQ,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACxC,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,oBAAoB,EAAE,CAAC;YACvF,CAAC;YACD,MAAM,EAAE,GAAG,CAA4B,CAAC;YACxC,MAAM,KAAK,GACT,OAAO,EAAE,CAAC,KAAK,KAAK,QAAQ,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;YAC3F,MAAM,WAAW,GACf,OAAO,EAAE,CAAC,WAAW,KAAK,QAAQ,IAAI,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC,MAAM,GAAG,CAAC;gBACpE,CAAC,CAAC,EAAE,CAAC,WAAW,CAAC,IAAI,EAAE;gBACvB,CAAC,CAAC,SAAS,CAAC;YAChB,IAAI,CAAC,KAAK,IAAI,CAAC,WAAW,EAAE,CAAC;gBAC3B,OAAO;oBACL,EAAE,EAAE,KAAK;oBACT,KAAK,EAAE,YAAY,EAAE,GAAG,CAAC,WAAW,EAAE,GAAG,CAAC,iCAAiC;iBAC5E,CAAC;YACJ,CAAC;YACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QACvC,CAAC;QAED,SAAS,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;IACpD,CAAC;IAED,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;AACjC,CAAC;AAED;;;;GAIG;AACH,SAAS,SAAS,CAChB,MAAsB,EACtB,QAA0B;IAE1B,MAAM,IAAI,GAAG;QACX,EAAE,EAAE,QAAQ,CAAC,EAAE;QACf,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,QAAQ,EAAE,QAAQ,CAAC,QAAQ;KAC5B,CAAC;IAEF,QAAQ,MAAM,CAAC,IAAI,EAAE,CAAC;QACpB,KAAK,QAAQ;YACX,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,EAAE;gBACzD,SAAS,EAAE,KAAK;gBAChB,WAAW,EAAE,QAAQ,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC;aAC9E,CAAC;QACJ,KAAK,QAAQ;YACX,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,MAAM,CAAC,MAAM,IAAI,EAAE;gBAC3B,SAAS,EAAE,IAAI;aAChB,CAAC;QACJ,KAAK,OAAO;YACV,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,MAAM,CAAC,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE;gBACzC,SAAS,EAAE,KAAK;aACjB,CAAC;QACJ,KAAK,MAAM;YACT,OAAO;gBACL,GAAG,IAAI;gBACP,MAAM,EAAE,MAAM,CAAC,KAAK,IAAI,8BAA8B;gBACtD,SAAS,EAAE,IAAI;aAChB,CAAC;IACN,CAAC;AACH,CAAC;AAED,kEAAkE;AAClE,SAAS,aAAa,CAAC,OAAgC;IACrD,OAAO,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC1C,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,SAAiB;IAEjB,OAAO;QACL,IAAI,EAAE,4BAA4B;QAClC,KAAK,EAAE,eAAe;QACtB,WAAW,EACT,0JAA0J;QAC5J,aAAa,EACX,uDAAuD;QACzD,gBAAgB,EAAE;YAChB,iJAAiJ;SAClJ;QACD,UAAU,EAAE,WAAW;QACvB,KAAK,CAAC,OAAO,CACX,WAAmB,EACnB,MAAe,EACf,MAA+B;YAE/B,MAAM,MAAM,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;YACtC,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC;gBACf,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,aAAa,CAAC;gCAClB,SAAS,EAAE,IAAI;gCACf,MAAM,EAAE,eAAe;gCACvB,OAAO,EAAE,UAAU,MAAM,CAAC,KAAK,EAAE;6BAClC,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE;wBACP,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,eAAyC;wBACjD,SAAS,EAAE,EAAE;qBACd;iBACF,CAAC;YACJ,CAAC;YAED,6EAA6E;YAC7E,MAAM,iBAAiB,GAAe,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjE,QAAQ,EAAE,CAAC,CAAC,QAAQ;gBACpB,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC,CAAC;YAEJ,IAAI,CAAC;gBACH,MAAM,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;oBACjC,SAAS;oBACT,SAAS,EAAE,iBAAiB;oBAC5B,MAAM;iBACP,CAAC,CAAC;gBACH,MAAM,cAAc,GAAG,MAAM,MAAM,CAAC;gBACpC,MAAM,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC;gBAEvC,IAAI,OAAO,CAAC,SAAS,EAAE,CAAC;oBACtB,OAAO;wBACL,OAAO,EAAE;4BACP;gCACE,IAAI,EAAE,MAAe;gCACrB,IAAI,EAAE,aAAa,CAAC;oCAClB,SAAS,EAAE,IAAI;oCACf,MAAM,EAAE,WAAW;oCACnB,OAAO,EAAE,+CAA+C;iCACzD,CAAC;6BACH;yBACF;wBACD,OAAO,EAAE;4BACP,SAAS,EAAE,IAAI;4BACf,MAAM,EAAE,WAAqC;4BAC7C,SAAS,EAAE,MAAM,CAAC,SAAS;yBAC5B;qBACF,CAAC;gBACJ,CAAC;gBAED,gDAAgD;gBAChD,MAAM,WAAW,GAA6B,OAAO,CAAC,OAAO,CAAC,GAAG,CAC/D,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBACP,MAAM,QAAQ,GAAG,MAAM,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;oBACrC,OAAO,SAAS,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;gBAChC,CAAC,CACF,CAAC;gBAEF,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,aAAa,CAAC;gCAClB,SAAS,EAAE,KAAK;gCAChB,OAAO,EAAE,WAAW;6BACrB,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE;wBACP,SAAS,EAAE,KAAK;wBAChB,SAAS,EAAE,MAAM,CAAC,SAAS;wBAC3B,OAAO,EAAE,WAAW;qBACrB;iBACF,CAAC;YACJ,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO;oBACL,OAAO,EAAE;wBACP;4BACE,IAAI,EAAE,MAAe;4BACrB,IAAI,EAAE,aAAa,CAAC;gCAClB,SAAS,EAAE,IAAI;gCACf,MAAM,EAAE,gBAAgB;gCACxB,OAAO,EACL,mFAAmF;6BACtF,CAAC;yBACH;qBACF;oBACD,OAAO,EAAE;wBACP,SAAS,EAAE,IAAI;wBACf,MAAM,EAAE,gBAA0C;wBAClD,SAAS,EAAE,MAAM,CAAC,SAAS;qBAC5B;iBACF,CAAC;YACJ,CAAC;QACH,CAAC;KAC2B,CAAC;AACjC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-strings.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/prompt-strings.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,gBAAgB,QAIF,CAAC;AAE5B,eAAO,MAAM,cAAc,QAEc,CAAC;AAE1C,eAAO,MAAM,iBAAiB,QAWiB,CAAC"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export const TOOL_DESCRIPTION = "Present a structured question to the user with predefined options. " +
|
|
2
|
+
"Use this when you need the user to make a choice or provide input " +
|
|
3
|
+
"before continuing. Supports single-select, multi-select, and " +
|
|
4
|
+
"free-text custom input.";
|
|
5
|
+
export const PROMPT_SNIPPET = "\n- Use `ask_user_question` to ask the user questions when you need " +
|
|
6
|
+
"their input, choices, or decisions.\n";
|
|
7
|
+
export const PROMPT_GUIDELINES = "## Asking the user questions\n\n" +
|
|
8
|
+
"You can use `ask_user_question` to ask the user structured questions " +
|
|
9
|
+
"when you need their input. Each question can have multiple options. " +
|
|
10
|
+
"The user can select one option, type a custom answer, or choose to " +
|
|
11
|
+
"chat about it instead.\n\n" +
|
|
12
|
+
"Guidelines:\n" +
|
|
13
|
+
"- Use this when you're blocked and need user input\n" +
|
|
14
|
+
"- Provide clear, descriptive options\n" +
|
|
15
|
+
"- Keep headers short (16 chars max)\n" +
|
|
16
|
+
"- You can ask up to 4 questions at once\n" +
|
|
17
|
+
"- Each question needs between 2-4 options\n";
|
|
18
|
+
//# sourceMappingURL=prompt-strings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-strings.js","sourceRoot":"","sources":["../../src/ask-user-question/prompt-strings.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,gBAAgB,GAC3B,qEAAqE;IACrE,oEAAoE;IACpE,+DAA+D;IAC/D,yBAAyB,CAAC;AAE5B,MAAM,CAAC,MAAM,cAAc,GACzB,sEAAsE;IACtE,uCAAuC,CAAC;AAE1C,MAAM,CAAC,MAAM,iBAAiB,GAC5B,kCAAkC;IAClC,uEAAuE;IACvE,sEAAsE;IACtE,qEAAqE;IACrE,4BAA4B;IAC5B,eAAe;IACf,sDAAsD;IACtD,wCAAwC;IACxC,uCAAuC;IACvC,2CAA2C;IAC3C,6CAA6C,CAAC"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
import type { AskUserQuestionResult, Question } from "./types.js";
|
|
2
|
+
/**
|
|
3
|
+
* In-memory registry of pending ask_user_question requests.
|
|
4
|
+
* One pending per session (SDK serialises tool calls per session).
|
|
5
|
+
* The tool factory registers a pending entry, the answer route
|
|
6
|
+
* resolves it, and the SSE bridge re-emits on reconnect.
|
|
7
|
+
*/
|
|
8
|
+
export interface PendingAskUserQuestion {
|
|
9
|
+
requestId: string;
|
|
10
|
+
sessionId: string;
|
|
11
|
+
questions: Question[];
|
|
12
|
+
createdAt: Date;
|
|
13
|
+
}
|
|
14
|
+
export type AskQuestionEvent = {
|
|
15
|
+
type: "ask_user_question";
|
|
16
|
+
sessionId: string;
|
|
17
|
+
requestId: string;
|
|
18
|
+
questions: Question[];
|
|
19
|
+
} | {
|
|
20
|
+
type: "ask_user_question_cancelled";
|
|
21
|
+
sessionId: string;
|
|
22
|
+
requestId: string;
|
|
23
|
+
reason: string;
|
|
24
|
+
};
|
|
25
|
+
type Listener = (event: AskQuestionEvent) => void;
|
|
26
|
+
export declare function subscribe(fn: Listener): () => void;
|
|
27
|
+
export declare function registerPending(args: {
|
|
28
|
+
sessionId: string;
|
|
29
|
+
questions: Question[];
|
|
30
|
+
signal?: AbortSignal;
|
|
31
|
+
}): {
|
|
32
|
+
requestId: string;
|
|
33
|
+
result: Promise<AskUserQuestionResult>;
|
|
34
|
+
};
|
|
35
|
+
export declare function answerPending(requestId: string, expectedSessionId: string, result: AskUserQuestionResult): boolean;
|
|
36
|
+
export declare function getPendingForSession(sessionId: string): PendingAskUserQuestion[];
|
|
37
|
+
export declare function _resetForTests(): void;
|
|
38
|
+
export {};
|
|
39
|
+
//# sourceMappingURL=registry.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/registry.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,qBAAqB,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAElE;;;;;GAKG;AAEH,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,SAAS,EAAE,IAAI,CAAC;CACjB;AASD,MAAM,MAAM,gBAAgB,GACxB;IAAE,IAAI,EAAE,mBAAmB,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,QAAQ,EAAE,CAAA;CAAE,GAC1F;IAAE,IAAI,EAAE,6BAA6B,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC;AAElG,KAAK,QAAQ,GAAG,CAAC,KAAK,EAAE,gBAAgB,KAAK,IAAI,CAAC;AAGlD,wBAAgB,SAAS,CAAC,EAAE,EAAE,QAAQ,GAAG,MAAM,IAAI,CAGlD;AAQD,wBAAgB,eAAe,CAAC,IAAI,EAAE;IACpC,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,QAAQ,EAAE,CAAC;IACtB,MAAM,CAAC,EAAE,WAAW,CAAC;CACtB,GAAG;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,OAAO,CAAC,qBAAqB,CAAC,CAAA;CAAE,CAqEhE;AASD,wBAAgB,aAAa,CAC3B,SAAS,EAAE,MAAM,EACjB,iBAAiB,EAAE,MAAM,EACzB,MAAM,EAAE,qBAAqB,GAC5B,OAAO,CAaT;AAED,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,sBAAsB,EAAE,CAWhF;AAED,wBAAgB,cAAc,IAAI,IAAI,CAIrC"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
import { randomUUID } from "node:crypto";
|
|
2
|
+
const byRequestId = new Map();
|
|
3
|
+
const bySessionId = new Map();
|
|
4
|
+
const listeners = new Set();
|
|
5
|
+
export function subscribe(fn) {
|
|
6
|
+
listeners.add(fn);
|
|
7
|
+
return () => listeners.delete(fn);
|
|
8
|
+
}
|
|
9
|
+
function notify(event) {
|
|
10
|
+
for (const fn of listeners) {
|
|
11
|
+
try {
|
|
12
|
+
fn(event);
|
|
13
|
+
}
|
|
14
|
+
catch { /* best-effort */ }
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
export function registerPending(args) {
|
|
18
|
+
const requestId = randomUUID();
|
|
19
|
+
// If there's already a pending entry for this session, resolve it
|
|
20
|
+
// as cancelled first (shouldn't happen with serialised tools, but
|
|
21
|
+
// be safe).
|
|
22
|
+
const existingId = bySessionId.get(args.sessionId);
|
|
23
|
+
if (existingId !== undefined) {
|
|
24
|
+
const existing = byRequestId.get(existingId);
|
|
25
|
+
if (existing !== undefined) {
|
|
26
|
+
byRequestId.delete(existingId);
|
|
27
|
+
bySessionId.delete(args.sessionId);
|
|
28
|
+
existing.resolve({
|
|
29
|
+
content: [{ type: "text", text: "Replaced by a new question." }],
|
|
30
|
+
details: { answers: [], cancelled: true, error: "superseded" },
|
|
31
|
+
});
|
|
32
|
+
notify({
|
|
33
|
+
type: "ask_user_question_cancelled",
|
|
34
|
+
sessionId: args.sessionId,
|
|
35
|
+
requestId: existingId,
|
|
36
|
+
reason: "superseded",
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
let resolveFn;
|
|
41
|
+
const result = new Promise((resolve) => {
|
|
42
|
+
resolveFn = resolve;
|
|
43
|
+
});
|
|
44
|
+
const entry = {
|
|
45
|
+
requestId,
|
|
46
|
+
sessionId: args.sessionId,
|
|
47
|
+
questions: args.questions,
|
|
48
|
+
createdAt: new Date(),
|
|
49
|
+
resolve: resolveFn,
|
|
50
|
+
};
|
|
51
|
+
byRequestId.set(requestId, entry);
|
|
52
|
+
bySessionId.set(args.sessionId, requestId);
|
|
53
|
+
if (args.signal !== undefined) {
|
|
54
|
+
const onAbort = () => {
|
|
55
|
+
if (byRequestId.has(requestId)) {
|
|
56
|
+
removeEntry(requestId);
|
|
57
|
+
notify({
|
|
58
|
+
type: "ask_user_question_cancelled",
|
|
59
|
+
sessionId: args.sessionId,
|
|
60
|
+
requestId,
|
|
61
|
+
reason: "aborted",
|
|
62
|
+
});
|
|
63
|
+
resolveFn({
|
|
64
|
+
content: [{ type: "text", text: "The agent was aborted." }],
|
|
65
|
+
details: { answers: [], cancelled: true, error: "aborted" },
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
};
|
|
69
|
+
if (args.signal.aborted)
|
|
70
|
+
onAbort();
|
|
71
|
+
else
|
|
72
|
+
args.signal.addEventListener("abort", onAbort, { once: true });
|
|
73
|
+
}
|
|
74
|
+
notify({
|
|
75
|
+
type: "ask_user_question",
|
|
76
|
+
sessionId: args.sessionId,
|
|
77
|
+
requestId,
|
|
78
|
+
questions: args.questions,
|
|
79
|
+
});
|
|
80
|
+
return { requestId, result };
|
|
81
|
+
}
|
|
82
|
+
function removeEntry(requestId) {
|
|
83
|
+
const e = byRequestId.get(requestId);
|
|
84
|
+
if (e === undefined)
|
|
85
|
+
return;
|
|
86
|
+
byRequestId.delete(requestId);
|
|
87
|
+
bySessionId.delete(e.sessionId);
|
|
88
|
+
}
|
|
89
|
+
export function answerPending(requestId, expectedSessionId, result) {
|
|
90
|
+
const e = byRequestId.get(requestId);
|
|
91
|
+
if (e === undefined)
|
|
92
|
+
return false;
|
|
93
|
+
if (e.sessionId !== expectedSessionId)
|
|
94
|
+
return false;
|
|
95
|
+
removeEntry(requestId);
|
|
96
|
+
notify({
|
|
97
|
+
type: "ask_user_question_cancelled",
|
|
98
|
+
sessionId: e.sessionId,
|
|
99
|
+
requestId,
|
|
100
|
+
reason: "answered",
|
|
101
|
+
});
|
|
102
|
+
e.resolve(result);
|
|
103
|
+
return true;
|
|
104
|
+
}
|
|
105
|
+
export function getPendingForSession(sessionId) {
|
|
106
|
+
const id = bySessionId.get(sessionId);
|
|
107
|
+
if (id === undefined)
|
|
108
|
+
return [];
|
|
109
|
+
const e = byRequestId.get(id);
|
|
110
|
+
if (e === undefined)
|
|
111
|
+
return [];
|
|
112
|
+
return [{
|
|
113
|
+
requestId: e.requestId,
|
|
114
|
+
sessionId: e.sessionId,
|
|
115
|
+
questions: e.questions,
|
|
116
|
+
createdAt: e.createdAt,
|
|
117
|
+
}];
|
|
118
|
+
}
|
|
119
|
+
export function _resetForTests() {
|
|
120
|
+
byRequestId.clear();
|
|
121
|
+
bySessionId.clear();
|
|
122
|
+
listeners.clear();
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=registry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/ask-user-question/registry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAqBzC,MAAM,WAAW,GAAG,IAAI,GAAG,EAAiB,CAAC;AAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,EAAkB,CAAC;AAO9C,MAAM,SAAS,GAAG,IAAI,GAAG,EAAY,CAAC;AAEtC,MAAM,UAAU,SAAS,CAAC,EAAY;IACpC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAClB,OAAO,GAAG,EAAE,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;AACpC,CAAC;AAED,SAAS,MAAM,CAAC,KAAuB;IACrC,KAAK,MAAM,EAAE,IAAI,SAAS,EAAE,CAAC;QAC3B,IAAI,CAAC;YAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,iBAAiB,CAAC,CAAC;IAChD,CAAC;AACH,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAI/B;IACC,MAAM,SAAS,GAAG,UAAU,EAAE,CAAC;IAE/B,kEAAkE;IAClE,kEAAkE;IAClE,YAAY;IACZ,MAAM,UAAU,GAAG,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACnD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC7C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,WAAW,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;YAC/B,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YACnC,QAAQ,CAAC,OAAO,CAAC;gBACf,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,6BAA6B,EAAE,CAAC;gBAChE,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,YAAY,EAAE;aAC/D,CAAC,CAAC;YACH,MAAM,CAAC;gBACL,IAAI,EAAE,6BAA6B;gBACnC,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,SAAS,EAAE,UAAU;gBACrB,MAAM,EAAE,YAAY;aACrB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,IAAI,SAA8C,CAAC;IACnD,MAAM,MAAM,GAAG,IAAI,OAAO,CAAwB,CAAC,OAAO,EAAE,EAAE;QAC5D,SAAS,GAAG,OAAO,CAAC;IACtB,CAAC,CAAC,CAAC;IAEH,MAAM,KAAK,GAAU;QACnB,SAAS;QACT,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS,EAAE,IAAI,IAAI,EAAE;QACrB,OAAO,EAAE,SAAS;KACnB,CAAC;IAEF,WAAW,CAAC,GAAG,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;IAClC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAE3C,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,OAAO,GAAG,GAAS,EAAE;YACzB,IAAI,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAC/B,WAAW,CAAC,SAAS,CAAC,CAAC;gBACvB,MAAM,CAAC;oBACL,IAAI,EAAE,6BAA6B;oBACnC,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,SAAS;oBACT,MAAM,EAAE,SAAS;iBAClB,CAAC,CAAC;gBACH,SAAS,CAAC;oBACR,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,wBAAwB,EAAE,CAAC;oBAC3D,OAAO,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE;iBAC5D,CAAC,CAAC;YACL,CAAC;QACH,CAAC,CAAC;QACF,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,OAAO,EAAE,CAAC;;YAC9B,IAAI,CAAC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC;IACtE,CAAC;IAED,MAAM,CAAC;QACL,IAAI,EAAE,mBAAmB;QACzB,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,SAAS;QACT,SAAS,EAAE,IAAI,CAAC,SAAS;KAC1B,CAAC,CAAC;IAEH,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;AAC/B,CAAC;AAED,SAAS,WAAW,CAAC,SAAiB;IACpC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO;IAC5B,WAAW,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAC9B,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,aAAa,CAC3B,SAAiB,EACjB,iBAAyB,EACzB,MAA6B;IAE7B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACrC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC;IAClC,IAAI,CAAC,CAAC,SAAS,KAAK,iBAAiB;QAAE,OAAO,KAAK,CAAC;IACpD,WAAW,CAAC,SAAS,CAAC,CAAC;IACvB,MAAM,CAAC;QACL,IAAI,EAAE,6BAA6B;QACnC,SAAS,EAAE,CAAC,CAAC,SAAS;QACtB,SAAS;QACT,MAAM,EAAE,UAAU;KACnB,CAAC,CAAC;IACH,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;IAClB,OAAO,IAAI,CAAC;AACd,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,SAAiB;IACpD,MAAM,EAAE,GAAG,WAAW,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,EAAE,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAChC,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAC9B,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO,EAAE,CAAC;IAC/B,OAAO,CAAC;YACN,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;YACtB,SAAS,EAAE,CAAC,CAAC,SAAS;SACvB,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc;IAC5B,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,WAAW,CAAC,KAAK,EAAE,CAAC;IACpB,SAAS,CAAC,KAAK,EAAE,CAAC;AACpB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"tool.d.ts","sourceRoot":"","sources":["../../src/ask-user-question/tool.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iCAAiC,CAAC;AAOtE,eAAO,MAAM,2BAA2B,sBAAsB,CAAC;AAqC/D,wBAAgB,yBAAyB,CAAC,SAAS,EAAE,MAAM,GAAG,cAAc,CAyB3E"}
|