@ashx-j/lunr 0.2.23 → 0.2.24
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/CHANGELOG.md +14 -1
- package/README.md +10 -10
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +2 -2
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.d.ts +7 -7
- package/dist/builtin-extensions/lunr-plan-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/lunr-plan-tools.js +12 -12
- package/dist/builtin-extensions/lunr-plan-tools.js.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-intercom/index.js +2 -0
- package/dist/builtin-extensions/pi-intercom/index.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js +1 -0
- package/dist/builtin-extensions/pi-mcp-adapter/direct-tools.js.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js +1 -1
- package/dist/builtin-extensions/pi-mcp-adapter/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/schemas.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts +4 -4
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js +6 -4
- package/dist/builtin-extensions/pi-subagents/src/extension/tool-description.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js +6 -3
- package/dist/builtin-extensions/pi-subagents/src/intercom/intercom-bridge.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js +7 -2
- package/dist/builtin-extensions/pi-subagents/src/intercom/native-supervisor-channel.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +4 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +5 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +3 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/child-tools.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js +17 -15
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/pi-args.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js +3 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/subagent-prompt-runtime.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/core/agent-session.d.ts +1 -1
- package/dist/core/agent-session.d.ts.map +1 -1
- package/dist/core/agent-session.js +5 -4
- package/dist/core/agent-session.js.map +1 -1
- package/dist/core/browser/schema.d.ts +1 -1
- package/dist/core/browser/schema.d.ts.map +1 -1
- package/dist/core/browser/schema.js +1 -1
- package/dist/core/browser/schema.js.map +1 -1
- package/dist/core/catalog-cache-scope.d.ts.map +1 -1
- package/dist/core/catalog-cache-scope.js +3 -1
- package/dist/core/catalog-cache-scope.js.map +1 -1
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +3 -2
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/permissions.d.ts +16 -23
- package/dist/core/permissions.d.ts.map +1 -1
- package/dist/core/permissions.js +66 -141
- package/dist/core/permissions.js.map +1 -1
- package/dist/core/plan-mode.d.ts +10 -12
- package/dist/core/plan-mode.d.ts.map +1 -1
- package/dist/core/plan-mode.js +16 -18
- package/dist/core/plan-mode.js.map +1 -1
- package/dist/core/runtime-bridges.d.ts.map +1 -1
- package/dist/core/runtime-bridges.js +2 -0
- package/dist/core/runtime-bridges.js.map +1 -1
- package/dist/core/sdk.d.ts.map +1 -1
- package/dist/core/sdk.js +13 -6
- package/dist/core/sdk.js.map +1 -1
- package/dist/core/session-manager.d.ts.map +1 -1
- package/dist/core/session-manager.js +9 -2
- package/dist/core/session-manager.js.map +1 -1
- package/dist/core/settings-manager.d.ts +9 -1
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +40 -1
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +4 -4
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/core/subagent-permission-inherit.d.ts +6 -10
- package/dist/core/subagent-permission-inherit.d.ts.map +1 -1
- package/dist/core/subagent-permission-inherit.js +14 -14
- package/dist/core/subagent-permission-inherit.js.map +1 -1
- package/dist/core/system-prompt.d.ts +2 -0
- package/dist/core/system-prompt.d.ts.map +1 -1
- package/dist/core/system-prompt.js +9 -4
- package/dist/core/system-prompt.js.map +1 -1
- package/dist/gateway/adapters/discord.d.ts.map +1 -1
- package/dist/gateway/adapters/discord.js +1 -1
- package/dist/gateway/adapters/discord.js.map +1 -1
- package/dist/gateway/approval.d.ts +2 -6
- package/dist/gateway/approval.d.ts.map +1 -1
- package/dist/gateway/approval.js +3 -7
- package/dist/gateway/approval.js.map +1 -1
- package/dist/gateway/mobile-commands.d.ts.map +1 -1
- package/dist/gateway/mobile-commands.js +12 -11
- package/dist/gateway/mobile-commands.js.map +1 -1
- package/dist/gateway/router.d.ts.map +1 -1
- package/dist/gateway/router.js +1 -1
- package/dist/gateway/router.js.map +1 -1
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +1 -2
- package/dist/main.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +4 -0
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +23 -3
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.d.ts.map +1 -1
- package/dist/modes/interactive/components/thinking-tail.js +2 -2
- package/dist/modes/interactive/components/thinking-tail.js.map +1 -1
- package/dist/modes/interactive/components/tool-execution.d.ts +1 -0
- package/dist/modes/interactive/components/tool-execution.d.ts.map +1 -1
- package/dist/modes/interactive/components/tool-execution.js +12 -2
- package/dist/modes/interactive/components/tool-execution.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +1 -2
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +76 -90
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/node-runtime/{agent-session-services-GZVSOGYR.js → agent-session-services-IEF7LQWD.js} +8 -9
- package/dist/node-runtime/{builtin-extensions-QVCXNQT4.js → builtin-extensions-EBAWTH4M.js} +3 -3
- package/dist/node-runtime/{chunk-XLTL257W.js → chunk-2KIPT4HJ.js} +5 -1
- package/dist/node-runtime/{chunk-YHQ3NBB3.js → chunk-5Q3EHOHI.js} +17 -17
- package/dist/node-runtime/{chunk-TQGPP4SC.js → chunk-CDVHZOOK.js} +1 -1
- package/dist/node-runtime/{chunk-DQMGU675.js → chunk-DE2JB6J5.js} +20 -17
- package/dist/node-runtime/{chunk-YJMMG7C6.js → chunk-DSIKTUPW.js} +1 -1
- package/dist/node-runtime/{chunk-TVJUOJZJ.js → chunk-F4FLTQKV.js} +1 -1
- package/dist/node-runtime/{chunk-GMHJCCEN.js → chunk-FU6OODRZ.js} +4 -1
- package/dist/node-runtime/{chunk-OFKSVRV7.js → chunk-GYIXXQAO.js} +1 -1
- package/dist/node-runtime/{chunk-BX2RB477.js → chunk-HFVZUPFJ.js} +1 -1
- package/dist/node-runtime/{chunk-AZJHNQKQ.js → chunk-I54LGHWM.js} +1 -1
- package/dist/node-runtime/{chunk-DD5YWFSJ.js → chunk-IGV54Q5V.js} +2 -2
- package/dist/node-runtime/{chunk-RIR5EDDJ.js → chunk-K5AGHH57.js} +17 -12
- package/dist/node-runtime/{chunk-GS66LV4M.js → chunk-KJ6DWS3K.js} +4 -4
- package/dist/node-runtime/{chunk-LLUIPGDR.js → chunk-L3LX4SNR.js} +108 -75
- package/dist/node-runtime/{chunk-VSELYKWU.js → chunk-LWYIVUGV.js} +2 -1
- package/dist/node-runtime/{chunk-JHYKXIMM.js → chunk-MPKSOJBT.js} +1 -1
- package/dist/node-runtime/{chunk-W64JC4E7.js → chunk-OF7PWMG4.js} +2 -2
- package/dist/node-runtime/{chunk-CSUZVNYE.js → chunk-OVX6X377.js} +10 -6
- package/dist/node-runtime/{chunk-X3URCYCU.js → chunk-QM43FEAE.js} +14 -14
- package/dist/node-runtime/{chunk-QAZOULTU.js → chunk-RORY2HMJ.js} +39 -5
- package/dist/node-runtime/{chunk-EKVFP6YF.js → chunk-WHLRAGUQ.js} +13 -12
- package/dist/node-runtime/{chunk-HPUP7E4T.js → chunk-Y73WPE6S.js} +16 -16
- package/dist/node-runtime/{chunk-LFZDVKSP.js → chunk-YVI6L6LU.js} +5 -5
- package/dist/node-runtime/{chunk-5D7LC2ZQ.js → chunk-ZXSGTGJ6.js} +54 -85
- package/dist/node-runtime/cli-runtime.js +1 -1
- package/dist/node-runtime/{command-PDVTBRWA.js → command-7BG7VVTS.js} +3 -3
- package/dist/node-runtime/{commands-KAMO2T6P.js → commands-NZLSOHPE.js} +2 -2
- package/dist/node-runtime/{commands-XDCFGIGW.js → commands-QFDKNQTL.js} +7 -7
- package/dist/node-runtime/{direct-tool-executor-YAVOLDFY.js → direct-tool-executor-77GW4F5P.js} +3 -3
- package/dist/node-runtime/{export-html-KSOIMVPI.js → export-html-VM4J2MNR.js} +1 -1
- package/dist/node-runtime/{gateway-AYWM5DIO.js → gateway-TWR3N65G.js} +12 -12
- package/dist/node-runtime/index.js +16 -17
- package/dist/node-runtime/{init-X2LIUB2H.js → init-HS6NQXSK.js} +2 -2
- package/dist/node-runtime/{install-cli-3BO4MMQ6.js → install-cli-VAP6KBFN.js} +1 -1
- package/dist/node-runtime/{interactive-mode-4MFRKAHG.js → interactive-mode-6J5VZ2TT.js} +10 -11
- package/dist/node-runtime/{interactive-view-TUZHCQM3.js → interactive-view-NGFAMHPW.js} +2 -2
- package/dist/node-runtime/{lunr-browser-RYFIIVJN.js → lunr-browser-J5ZZYVGM.js} +1 -1
- package/dist/node-runtime/{lunr-cron-YWXEPZMQ.js → lunr-cron-CXOL37AL.js} +5 -5
- package/dist/node-runtime/main.js +14 -15
- package/dist/node-runtime/{mobile-commands-LVHDAUDP.js → mobile-commands-VTBM5DSZ.js} +4 -4
- package/dist/node-runtime/{model-runtime-PLQKAG4B.js → model-runtime-OO5HFLWE.js} +1 -1
- package/dist/node-runtime/{package-manager-cli-6GT3Z3CK.js → package-manager-cli-ZLW5DZXF.js} +3 -4
- package/dist/node-runtime/{pi-intercom-HBPK5HSJ.js → pi-intercom-QM53RLTS.js} +2 -0
- package/dist/node-runtime/{pi-mcp-adapter-E6WULBKF.js → pi-mcp-adapter-5UKBZP44.js} +7 -6
- package/dist/node-runtime/{pi-subagents-CDWK2AKY.js → pi-subagents-XPCLLKIM.js} +23 -13
- package/dist/node-runtime/{proxy-modes-OSQCWRBI.js → proxy-modes-LGEUYD7R.js} +3 -3
- package/dist/node-runtime/rpc-entry.js +14 -15
- package/dist/node-runtime/{runtime-bridges-3XUQ46XW.js → runtime-bridges-QYXUX2TG.js} +8 -1
- package/dist/node-runtime/{session-handoff-HC7R5E24.js → session-handoff-GWARVEWT.js} +2 -2
- package/dist/node-runtime/{session-manager-CFN4UFM2.js → session-manager-JB5J6XBN.js} +1 -1
- package/dist/node-runtime/{settings-manager-6VEMXRDL.js → settings-manager-WCQDUVQB.js} +7 -4
- package/dist/node-runtime/{setup-5SR2J35A.js → setup-YRBKH2LD.js} +2 -2
- package/dist/node-runtime/{subagent-executor-M5VWB3D3.js → subagent-executor-OTNISDQU.js} +40 -7
- package/dist/node-runtime/{update-cli-UVKJWRRJ.js → update-cli-VBR2777K.js} +1 -2
- package/dist/startup/interactive-view.d.ts.map +1 -1
- package/dist/startup/interactive-view.js +5 -1
- package/dist/startup/interactive-view.js.map +1 -1
- package/docs/browser.md +1 -1
- package/docs/features.md +15 -14
- package/docs/index.md +1 -1
- package/docs/keybindings.md +1 -1
- package/docs/providers.md +6 -2
- package/docs/quickstart.md +2 -2
- package/docs/settings.md +1 -1
- package/docs/usage.md +4 -4
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/plan-mode/README.md +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +4 -4
- package/dist/node-runtime/chunk-LISUTZS3.js +0 -19
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
resolveMcpOutputGuardOptions,
|
|
7
7
|
resolveMcpResultContent,
|
|
8
8
|
transformMcpContent
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-HFVZUPFJ.js";
|
|
10
10
|
import {
|
|
11
11
|
buildToolMetadata,
|
|
12
12
|
findToolByName,
|
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
updateMetadataCache,
|
|
18
18
|
updateServerMetadata,
|
|
19
19
|
updateStatusBar
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-DSIKTUPW.js";
|
|
21
21
|
import {
|
|
22
22
|
UrlElicitationRequiredError,
|
|
23
23
|
authenticate,
|
|
@@ -30,7 +30,7 @@ import {
|
|
|
30
30
|
formatAuthRequiredMessage,
|
|
31
31
|
throwIfAborted,
|
|
32
32
|
truncateAtWord
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-LWYIVUGV.js";
|
|
34
34
|
import "./chunk-4HXHDDCF.js";
|
|
35
35
|
import {
|
|
36
36
|
getServerPrefix,
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
main
|
|
5
|
-
} from "./chunk-
|
|
6
|
-
import "./chunk-
|
|
7
|
-
import "./chunk-
|
|
5
|
+
} from "./chunk-5Q3EHOHI.js";
|
|
6
|
+
import "./chunk-QM43FEAE.js";
|
|
7
|
+
import "./chunk-OF7PWMG4.js";
|
|
8
8
|
import "./chunk-YPHAIRZT.js";
|
|
9
9
|
import "./chunk-PL6JKXWI.js";
|
|
10
10
|
import "./chunk-5ZH3ZFIZ.js";
|
|
11
|
-
import "./chunk-
|
|
12
|
-
import "./chunk-
|
|
11
|
+
import "./chunk-OVX6X377.js";
|
|
12
|
+
import "./chunk-DE2JB6J5.js";
|
|
13
13
|
import "./chunk-CCCN2UCX.js";
|
|
14
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-F4FLTQKV.js";
|
|
15
15
|
import "./chunk-OBMWP3I5.js";
|
|
16
16
|
import "./chunk-DVGWF6A2.js";
|
|
17
17
|
import "./chunk-QFWG2RVL.js";
|
|
@@ -19,26 +19,25 @@ import "./chunk-YDO2F2IA.js";
|
|
|
19
19
|
import "./chunk-53YJI7JU.js";
|
|
20
20
|
import "./chunk-5ZQXRPMC.js";
|
|
21
21
|
import "./chunk-AD6VXAO7.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-KJ6DWS3K.js";
|
|
23
|
+
import "./chunk-FU6OODRZ.js";
|
|
23
24
|
import {
|
|
24
25
|
configureHttpDispatcher
|
|
25
|
-
} from "./chunk-
|
|
26
|
+
} from "./chunk-RORY2HMJ.js";
|
|
26
27
|
import "./chunk-UP2XBVH5.js";
|
|
27
28
|
import "./chunk-VWCE2HSZ.js";
|
|
28
|
-
import "./chunk-LISUTZS3.js";
|
|
29
|
-
import "./chunk-GMHJCCEN.js";
|
|
30
29
|
import "./chunk-HTFRRDSF.js";
|
|
31
30
|
import "./chunk-URD2SLIT.js";
|
|
32
|
-
import "./chunk-
|
|
31
|
+
import "./chunk-GYIXXQAO.js";
|
|
33
32
|
import "./chunk-GJ2RDBRL.js";
|
|
34
33
|
import "./chunk-CGBXPL3E.js";
|
|
35
34
|
import "./chunk-BBUVIEZB.js";
|
|
36
|
-
import "./chunk-
|
|
35
|
+
import "./chunk-ZXSGTGJ6.js";
|
|
37
36
|
import "./chunk-M3LZLQW2.js";
|
|
38
37
|
import "./chunk-KKUTQQV7.js";
|
|
39
38
|
import "./chunk-CSFI6YXL.js";
|
|
40
|
-
import "./chunk-
|
|
41
|
-
import "./chunk-
|
|
39
|
+
import "./chunk-I54LGHWM.js";
|
|
40
|
+
import "./chunk-2KIPT4HJ.js";
|
|
42
41
|
import "./chunk-FVDOXRUD.js";
|
|
43
42
|
import "./chunk-4EULYYR4.js";
|
|
44
43
|
import "./chunk-UJOCPOMX.js";
|
|
@@ -48,7 +47,7 @@ import "./chunk-IMLCWLPI.js";
|
|
|
48
47
|
import "./chunk-PCEW76PM.js";
|
|
49
48
|
import "./chunk-UAEOTO52.js";
|
|
50
49
|
import "./chunk-RQ2Q5IYR.js";
|
|
51
|
-
import "./chunk-
|
|
50
|
+
import "./chunk-MPKSOJBT.js";
|
|
52
51
|
import "./chunk-H2EOZYMP.js";
|
|
53
52
|
import "./chunk-5EFIU3OM.js";
|
|
54
53
|
import "./chunk-PVCDKGR6.js";
|
|
@@ -1,12 +1,19 @@
|
|
|
1
1
|
import { createRequire as __lunrRequire } from "node:module"; const require = __lunrRequire(import.meta.url);
|
|
2
2
|
import {
|
|
3
3
|
bindRuntimeBridges
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-FU6OODRZ.js";
|
|
5
|
+
import "./chunk-RORY2HMJ.js";
|
|
6
|
+
import "./chunk-UP2XBVH5.js";
|
|
7
|
+
import "./chunk-VWCE2HSZ.js";
|
|
8
|
+
import "./chunk-URD2SLIT.js";
|
|
5
9
|
import "./chunk-4EULYYR4.js";
|
|
6
10
|
import "./chunk-UJOCPOMX.js";
|
|
7
11
|
import "./chunk-2TKODGBZ.js";
|
|
8
12
|
import "./chunk-2MI5OPMN.js";
|
|
9
13
|
import "./chunk-IMLCWLPI.js";
|
|
14
|
+
import "./chunk-R3K2F5GI.js";
|
|
15
|
+
import "./chunk-FQMM2EZ2.js";
|
|
16
|
+
import "./chunk-Q4Q6D4IY.js";
|
|
10
17
|
import "./chunk-BRJX2PRC.js";
|
|
11
18
|
export {
|
|
12
19
|
bindRuntimeBridges
|
|
@@ -11,8 +11,8 @@ import {
|
|
|
11
11
|
recordTuiActivity,
|
|
12
12
|
registerTransferHandler,
|
|
13
13
|
requestSessionTransfer
|
|
14
|
-
} from "./chunk-
|
|
15
|
-
import "./chunk-
|
|
14
|
+
} from "./chunk-I54LGHWM.js";
|
|
15
|
+
import "./chunk-2KIPT4HJ.js";
|
|
16
16
|
import "./chunk-FVDOXRUD.js";
|
|
17
17
|
import "./chunk-UAEOTO52.js";
|
|
18
18
|
import "./chunk-FQMM2EZ2.js";
|
|
@@ -5,11 +5,12 @@ import {
|
|
|
5
5
|
InMemorySettingsStorage,
|
|
6
6
|
SKILL_TAG_CHARACTERS,
|
|
7
7
|
SettingsManager,
|
|
8
|
-
|
|
9
|
-
|
|
8
|
+
bindSubagentCommunicationSetting,
|
|
9
|
+
parseSkillTagCharacter,
|
|
10
|
+
subagentCommunicationEnabled
|
|
11
|
+
} from "./chunk-RORY2HMJ.js";
|
|
10
12
|
import "./chunk-UP2XBVH5.js";
|
|
11
13
|
import "./chunk-VWCE2HSZ.js";
|
|
12
|
-
import "./chunk-LISUTZS3.js";
|
|
13
14
|
import "./chunk-URD2SLIT.js";
|
|
14
15
|
import "./chunk-UJOCPOMX.js";
|
|
15
16
|
import "./chunk-IMLCWLPI.js";
|
|
@@ -23,5 +24,7 @@ export {
|
|
|
23
24
|
InMemorySettingsStorage,
|
|
24
25
|
SKILL_TAG_CHARACTERS,
|
|
25
26
|
SettingsManager,
|
|
26
|
-
|
|
27
|
+
bindSubagentCommunicationSetting,
|
|
28
|
+
parseSkillTagCharacter,
|
|
29
|
+
subagentCommunicationEnabled
|
|
27
30
|
};
|
|
@@ -98,8 +98,8 @@ Guide: https://docs.discord.com/developers/quick-start/getting-started`);
|
|
|
98
98
|
throw new Error("Choose off, login, or boot.");
|
|
99
99
|
startup === "boot" && console.log("Boot startup may require administrator permission or OS-managed account credentials. lunR does not save your account password.");
|
|
100
100
|
let [{ ModelRuntime }, { SettingsManager }] = await Promise.all([
|
|
101
|
-
import("./model-runtime-
|
|
102
|
-
import("./settings-manager-
|
|
101
|
+
import("./model-runtime-OO5HFLWE.js"),
|
|
102
|
+
import("./settings-manager-WCQDUVQB.js")
|
|
103
103
|
]), models = await (await ModelRuntime.create({ allowModelNetwork: !1 })).getAvailable();
|
|
104
104
|
if (!models.length)
|
|
105
105
|
throw new Error("No saved model credentials found. Open lunr locally and use /login, then rerun gateway setup. Nothing saved.");
|
|
@@ -179,7 +179,7 @@ import {
|
|
|
179
179
|
writeNestedControlRequest,
|
|
180
180
|
writeNestedEvent,
|
|
181
181
|
writePrivateAtomicJson
|
|
182
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-K5AGHH57.js";
|
|
183
183
|
import {
|
|
184
184
|
DEFAULT_CONTROL_CONFIG,
|
|
185
185
|
buildControlEvent,
|
|
@@ -191,24 +191,33 @@ import {
|
|
|
191
191
|
shouldNotifyControlEvent
|
|
192
192
|
} from "./chunk-OAR4TYZE.js";
|
|
193
193
|
import {
|
|
194
|
-
|
|
194
|
+
READ_ONLY_WRITE_SPAWN_ERROR,
|
|
195
195
|
resolveChildPermissions,
|
|
196
196
|
snapshotParentPermissionMode
|
|
197
|
-
} from "./chunk-
|
|
197
|
+
} from "./chunk-OVX6X377.js";
|
|
198
198
|
import "./chunk-YDO2F2IA.js";
|
|
199
199
|
import "./chunk-53YJI7JU.js";
|
|
200
200
|
import "./chunk-5ZQXRPMC.js";
|
|
201
201
|
import "./chunk-AD6VXAO7.js";
|
|
202
|
-
import
|
|
202
|
+
import {
|
|
203
|
+
subagentCommunicationEnabled
|
|
204
|
+
} from "./chunk-RORY2HMJ.js";
|
|
205
|
+
import "./chunk-UP2XBVH5.js";
|
|
206
|
+
import "./chunk-VWCE2HSZ.js";
|
|
207
|
+
import "./chunk-URD2SLIT.js";
|
|
208
|
+
import "./chunk-ZXSGTGJ6.js";
|
|
203
209
|
import "./chunk-M3LZLQW2.js";
|
|
204
210
|
import "./chunk-KKUTQQV7.js";
|
|
205
211
|
import "./chunk-CSFI6YXL.js";
|
|
206
212
|
import {
|
|
207
213
|
SessionManager
|
|
208
|
-
} from "./chunk-
|
|
214
|
+
} from "./chunk-2KIPT4HJ.js";
|
|
209
215
|
import "./chunk-FVDOXRUD.js";
|
|
216
|
+
import "./chunk-UJOCPOMX.js";
|
|
217
|
+
import "./chunk-IMLCWLPI.js";
|
|
210
218
|
import "./chunk-UAEOTO52.js";
|
|
211
219
|
import "./chunk-RQ2Q5IYR.js";
|
|
220
|
+
import "./chunk-R3K2F5GI.js";
|
|
212
221
|
import "./chunk-GS42T6MX.js";
|
|
213
222
|
import "./chunk-RDDAZOMU.js";
|
|
214
223
|
import "./chunk-FQMM2EZ2.js";
|
|
@@ -1689,6 +1698,7 @@ async function runSingleAttempt(runtimeCwd, spec, task, model, options, shared)
|
|
|
1689
1698
|
inheritSkills: !1,
|
|
1690
1699
|
requireReadTool: !!shared.resolvedSkillNames?.length,
|
|
1691
1700
|
excludeTools,
|
|
1701
|
+
communicationEnabled: options.communicationEnabled,
|
|
1692
1702
|
childPermission: spec.effectivePermissions,
|
|
1693
1703
|
childId: spec.childId,
|
|
1694
1704
|
childDescription: spec.description,
|
|
@@ -2174,7 +2184,7 @@ It appears to have returned planning or scratchpad output instead of applying ch
|
|
|
2174
2184
|
async function runSync(runtimeCwd, spec, options) {
|
|
2175
2185
|
let task = spec.task, label = childRowLabel(spec), parentMode = snapshotParentPermissionMode(options.parentSessionId), resolvedPermissions = resolveChildPermissions(parentMode, spec.requestedPermissions);
|
|
2176
2186
|
if (!resolvedPermissions.ok) {
|
|
2177
|
-
let error = resolvedPermissions.error ||
|
|
2187
|
+
let error = resolvedPermissions.error || READ_ONLY_WRITE_SPAWN_ERROR;
|
|
2178
2188
|
return {
|
|
2179
2189
|
childId: spec.childId,
|
|
2180
2190
|
description: spec.description,
|
|
@@ -3337,6 +3347,7 @@ async function runParallelChainTasks(input) {
|
|
|
3337
3347
|
onControlEvent: input.onControlEvent,
|
|
3338
3348
|
intercomSessionName: input.childIntercomTarget?.(task.agent, input.globalTaskIndex + taskIndex),
|
|
3339
3349
|
orchestratorIntercomTarget: input.orchestratorIntercomTarget,
|
|
3350
|
+
communicationEnabled: input.communicationEnabled,
|
|
3340
3351
|
nestedRoute: input.nestedRoute,
|
|
3341
3352
|
modelOverride: effectiveModel,
|
|
3342
3353
|
availableModels: input.availableModels,
|
|
@@ -3386,7 +3397,7 @@ async function runParallelChainTasks(input) {
|
|
|
3386
3397
|
}, input.globalSemaphore);
|
|
3387
3398
|
}
|
|
3388
3399
|
async function executeChain(params) {
|
|
3389
|
-
let { chain: chainSteps, agents, ctx, signal, runId, cwd, shareEnabled, sessionDirForIndex, sessionFileForIndex, sessionFileForTask, thinkingOverrideForTask, artifactsDir, artifactConfig, includeProgress, clarify, onUpdate, onControlEvent, controlConfig, onDetachedExit, childIntercomTarget, orchestratorIntercomTarget, foregroundControl, intercomEvents, chainSkills: chainSkillsParam, chainDir: chainDirBase, modelScope } = params, chainSkills = chainSkillsParam ?? [], results = [], outputs = {}, dynamicChildren = {}, dynamicGroupStatuses = {}, allProgress = [], allArtifactPaths = [], chainAgents = chainSteps.map((step) => isParallelStep(step) ? `[${step.parallel.map((t) => t.description || t.label || t.agent || "child").join("+")}]` : isDynamicParallelStep(step) ? `expand:${step.parallel.description || step.parallel.label || step.parallel.agent || "child"}` : step.description || step.label || step.agent || "child"), totalSteps = chainSteps.length, makeDetailsInput = (overrides = {}) => ({
|
|
3400
|
+
let { chain: chainSteps, agents, ctx, signal, runId, cwd, shareEnabled, sessionDirForIndex, sessionFileForIndex, sessionFileForTask, thinkingOverrideForTask, artifactsDir, artifactConfig, includeProgress, clarify, onUpdate, onControlEvent, controlConfig, onDetachedExit, childIntercomTarget, orchestratorIntercomTarget, communicationEnabled, foregroundControl, intercomEvents, chainSkills: chainSkillsParam, chainDir: chainDirBase, modelScope } = params, chainSkills = chainSkillsParam ?? [], results = [], outputs = {}, dynamicChildren = {}, dynamicGroupStatuses = {}, allProgress = [], allArtifactPaths = [], chainAgents = chainSteps.map((step) => isParallelStep(step) ? `[${step.parallel.map((t) => t.description || t.label || t.agent || "child").join("+")}]` : isDynamicParallelStep(step) ? `expand:${step.parallel.description || step.parallel.label || step.parallel.agent || "child"}` : step.description || step.label || step.agent || "child"), totalSteps = chainSteps.length, makeDetailsInput = (overrides = {}) => ({
|
|
3390
3401
|
results,
|
|
3391
3402
|
...includeProgress !== void 0 ? { includeProgress } : {},
|
|
3392
3403
|
allProgress,
|
|
@@ -3530,6 +3541,7 @@ async function executeChain(params) {
|
|
|
3530
3541
|
onControlEvent,
|
|
3531
3542
|
childIntercomTarget,
|
|
3532
3543
|
orchestratorIntercomTarget,
|
|
3544
|
+
communicationEnabled,
|
|
3533
3545
|
foregroundControl,
|
|
3534
3546
|
nestedRoute: params.nestedRoute,
|
|
3535
3547
|
worktreeSetup,
|
|
@@ -3701,6 +3713,7 @@ ${failureSummary}`;
|
|
|
3701
3713
|
onControlEvent,
|
|
3702
3714
|
childIntercomTarget,
|
|
3703
3715
|
orchestratorIntercomTarget,
|
|
3716
|
+
communicationEnabled,
|
|
3704
3717
|
foregroundControl,
|
|
3705
3718
|
nestedRoute: params.nestedRoute,
|
|
3706
3719
|
maxSubagentDepth: params.maxSubagentDepth,
|
|
@@ -3880,6 +3893,7 @@ ${failureSummary}`;
|
|
|
3880
3893
|
onControlEvent,
|
|
3881
3894
|
intercomSessionName: childIntercomTarget?.(seqStep.agent, childIndex),
|
|
3882
3895
|
orchestratorIntercomTarget,
|
|
3896
|
+
communicationEnabled,
|
|
3883
3897
|
nestedRoute: params.nestedRoute,
|
|
3884
3898
|
modelOverride: effectiveModel,
|
|
3885
3899
|
availableModels,
|
|
@@ -4139,6 +4153,7 @@ function spawnRunner(cfg, suffix, cwd) {
|
|
|
4139
4153
|
windowsHide: !0,
|
|
4140
4154
|
env: {
|
|
4141
4155
|
...process.env,
|
|
4156
|
+
PI_SUBAGENT_COMMUNICATION_ENABLED: cfg.communicationEnabled ?? subagentCommunicationEnabled(cwd) ? "1" : "0",
|
|
4142
4157
|
...piPackageRoot ? { [PI_CODING_AGENT_PACKAGE_ROOT_ENV]: piPackageRoot } : {}
|
|
4143
4158
|
}
|
|
4144
4159
|
});
|
|
@@ -4455,6 +4470,7 @@ function executeAsyncChain(id, params) {
|
|
|
4455
4470
|
worktreeSetupHookTimeoutMs,
|
|
4456
4471
|
worktreeBaseDir,
|
|
4457
4472
|
controlConfig,
|
|
4473
|
+
communicationEnabled: params.communicationEnabled,
|
|
4458
4474
|
turnBudget: params.turnBudget,
|
|
4459
4475
|
toolBudget: params.toolBudget,
|
|
4460
4476
|
controlIntercomTarget,
|
|
@@ -4687,6 +4703,7 @@ ${injection}` : injection;
|
|
|
4687
4703
|
worktreeSetupHookTimeoutMs,
|
|
4688
4704
|
worktreeBaseDir,
|
|
4689
4705
|
controlConfig,
|
|
4706
|
+
communicationEnabled: params.communicationEnabled,
|
|
4690
4707
|
timeoutMs,
|
|
4691
4708
|
deadlineAt,
|
|
4692
4709
|
turnBudget: params.turnBudget,
|
|
@@ -6438,6 +6455,7 @@ ${followUp}`, 500, { source: "async-resume", runId: target.runId, agent: target.
|
|
|
6438
6455
|
input.deps.state.currentSessionId = resolveCurrentSessionId(input.ctx.sessionManager);
|
|
6439
6456
|
let effectiveCwd = target.cwd ?? input.requestCwd, modelScope = void 0, sessionName = resolveIntercomSessionTarget(input.deps.pi.getSessionName(), input.ctx.sessionManager.getSessionId()), intercomBridge = resolveIntercomBridge({
|
|
6440
6457
|
config: input.deps.config.intercomBridge,
|
|
6458
|
+
cwd: input.requestCwd,
|
|
6441
6459
|
context: input.params.context,
|
|
6442
6460
|
orchestratorTarget: sessionName
|
|
6443
6461
|
}), recoveryDescriptor = "recoveryDescriptor" in target ? target.recoveryDescriptor : void 0;
|
|
@@ -6490,6 +6508,7 @@ ${followUp}`, 500, { source: "async-resume", runId: target.runId, agent: target.
|
|
|
6490
6508
|
worktreeSetupHookTimeoutMs: input.deps.config.worktreeSetupHookTimeoutMs,
|
|
6491
6509
|
worktreeBaseDir: input.deps.config.worktreeBaseDir,
|
|
6492
6510
|
controlConfig: resolveControlConfig(input.deps.config.control, input.params.control),
|
|
6511
|
+
communicationEnabled: intercomBridge.communicationEnabled,
|
|
6493
6512
|
controlIntercomTarget: intercomBridge.active ? intercomBridge.orchestratorTarget : void 0,
|
|
6494
6513
|
childIntercomTarget: intercomBridge.active ? (agent, index) => resolveSubagentIntercomTarget(runId2, agent, index) : void 0,
|
|
6495
6514
|
globalConcurrencyLimit: input.deps.config.globalConcurrencyLimit
|
|
@@ -6576,6 +6595,7 @@ ${followUp}`, 500, { source: "async-resume", runId: target.runId, agent: target.
|
|
|
6576
6595
|
worktreeSetupHookTimeoutMs: input.deps.config.worktreeSetupHookTimeoutMs,
|
|
6577
6596
|
worktreeBaseDir: input.deps.config.worktreeBaseDir,
|
|
6578
6597
|
controlConfig: recoveryDescriptor?.controlConfig ?? resolveControlConfig(input.deps.config.control, input.params.control),
|
|
6598
|
+
communicationEnabled: intercomBridge.communicationEnabled,
|
|
6579
6599
|
controlIntercomTarget: intercomBridge.active ? intercomBridge.orchestratorTarget : void 0,
|
|
6580
6600
|
childIntercomTarget: intercomBridge.active ? (agent, index) => resolveSubagentIntercomTarget(runId, agent, index) : void 0,
|
|
6581
6601
|
availableModels,
|
|
@@ -7127,6 +7147,7 @@ function runAsyncPath(data, deps) {
|
|
|
7127
7147
|
worktree: params.worktree
|
|
7128
7148
|
}],
|
|
7129
7149
|
resultMode: "parallel",
|
|
7150
|
+
communicationEnabled: intercomBridge.communicationEnabled,
|
|
7130
7151
|
goal: params.tasks[0]?.task ?? "",
|
|
7131
7152
|
ctx: asyncCtx,
|
|
7132
7153
|
availableModels,
|
|
@@ -7161,6 +7182,7 @@ function runAsyncPath(data, deps) {
|
|
|
7161
7182
|
chain,
|
|
7162
7183
|
task: params.task,
|
|
7163
7184
|
goal: resolveAsyncEventGoal(params.task, rawChain),
|
|
7185
|
+
communicationEnabled: intercomBridge.communicationEnabled,
|
|
7164
7186
|
ctx: asyncCtx,
|
|
7165
7187
|
availableModels,
|
|
7166
7188
|
cwd: effectiveCwd,
|
|
@@ -7248,6 +7270,7 @@ function runAsyncPath(data, deps) {
|
|
|
7248
7270
|
worktreeSetupHookTimeoutMs: deps.config.worktreeSetupHookTimeoutMs,
|
|
7249
7271
|
worktreeBaseDir: deps.config.worktreeBaseDir,
|
|
7250
7272
|
controlConfig,
|
|
7273
|
+
communicationEnabled: intercomBridge.communicationEnabled,
|
|
7251
7274
|
controlIntercomTarget,
|
|
7252
7275
|
childIntercomTarget: childIntercomTarget ? (agent, index) => childIntercomTarget(agent, index) : void 0,
|
|
7253
7276
|
nestedRoute,
|
|
@@ -7285,6 +7308,7 @@ async function runChainPath(data, deps) {
|
|
|
7285
7308
|
controlConfig,
|
|
7286
7309
|
childIntercomTarget: childIntercomTarget ? (agent, index) => childIntercomTarget(runId, agent, index) : void 0,
|
|
7287
7310
|
orchestratorIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : void 0,
|
|
7311
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7288
7312
|
foregroundControl,
|
|
7289
7313
|
nestedRoute: foregroundControl?.nestedRoute,
|
|
7290
7314
|
chainSkills,
|
|
@@ -7342,6 +7366,7 @@ async function runChainPath(data, deps) {
|
|
|
7342
7366
|
controlConfig,
|
|
7343
7367
|
controlIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : void 0,
|
|
7344
7368
|
childIntercomTarget: data.intercomBridge.active ? (agent, index) => resolveSubagentIntercomTarget(id, agent, index) : void 0,
|
|
7369
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7345
7370
|
nestedRoute: data.nestedRoute,
|
|
7346
7371
|
timeoutMs: data.timeoutMs,
|
|
7347
7372
|
turnBudget: data.turnBudget,
|
|
@@ -7480,6 +7505,7 @@ async function runForegroundParallelTasks(input) {
|
|
|
7480
7505
|
onDetachedExit: (result2) => updateRememberedForegroundChild(input.state, { runId: input.runId, mode: "parallel", cwd: taskCwd, sessionId: input.parentSessionId, index, result: result2, events: input.intercomEvents }),
|
|
7481
7506
|
intercomSessionName: input.childIntercomTarget?.(task.agent, index),
|
|
7482
7507
|
orchestratorIntercomTarget: input.orchestratorIntercomTarget,
|
|
7508
|
+
communicationEnabled: input.communicationEnabled,
|
|
7483
7509
|
nestedRoute: input.foregroundControl?.nestedRoute,
|
|
7484
7510
|
modelOverride: input.modelOverrides[index],
|
|
7485
7511
|
thinkingOverride: input.thinkingOverrideForTask(task.agent, index, input.modelOverrides[index]),
|
|
@@ -7610,6 +7636,7 @@ async function runParallelPath(data, deps) {
|
|
|
7610
7636
|
chain: [{ parallel: parallelTasks, concurrency: parallelConcurrency, worktree: params.worktree }],
|
|
7611
7637
|
resultMode: "parallel",
|
|
7612
7638
|
goal: taskTexts[0] ?? "",
|
|
7639
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7613
7640
|
ctx: asyncCtx,
|
|
7614
7641
|
availableModels,
|
|
7615
7642
|
cwd: effectiveCwd,
|
|
@@ -7689,6 +7716,7 @@ async function runParallelPath(data, deps) {
|
|
|
7689
7716
|
onControlEvent,
|
|
7690
7717
|
childIntercomTarget: childIntercomTarget ? (agent, index) => childIntercomTarget(runId, agent, index) : void 0,
|
|
7691
7718
|
orchestratorIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : void 0,
|
|
7719
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7692
7720
|
foregroundControl,
|
|
7693
7721
|
concurrencyLimit: parallelConcurrency,
|
|
7694
7722
|
globalSemaphore: new Semaphore(deps.config.globalConcurrencyLimit ?? DEFAULT_GLOBAL_CONCURRENCY_LIMIT),
|
|
@@ -7835,6 +7863,7 @@ async function runSinglePath(data, deps) {
|
|
|
7835
7863
|
};
|
|
7836
7864
|
return executeAsyncSingle(id, {
|
|
7837
7865
|
spec: { ...spec, task: shouldForkAgent(contextPolicy, params.agent) ? wrapForkTask(task) : task },
|
|
7866
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7838
7867
|
goal: task,
|
|
7839
7868
|
ctx: asyncCtx,
|
|
7840
7869
|
availableModels,
|
|
@@ -7903,6 +7932,7 @@ async function runSinglePath(data, deps) {
|
|
|
7903
7932
|
onControlEvent,
|
|
7904
7933
|
intercomSessionName: childIntercomTarget,
|
|
7905
7934
|
orchestratorIntercomTarget: data.intercomBridge.active ? data.intercomBridge.orchestratorTarget : void 0,
|
|
7935
|
+
communicationEnabled: data.intercomBridge.communicationEnabled,
|
|
7906
7936
|
nestedRoute: foregroundControl?.nestedRoute,
|
|
7907
7937
|
index: 0,
|
|
7908
7938
|
modelOverride,
|
|
@@ -8065,6 +8095,8 @@ function createSubagentExecutor(deps) {
|
|
|
8065
8095
|
if (action === "resume")
|
|
8066
8096
|
return resumeAsyncRun({ params: paramsWithResolvedCwd, requestCwd, ctx, deps });
|
|
8067
8097
|
if (action === "steer") {
|
|
8098
|
+
if (!subagentCommunicationEnabled(requestCwd, getAgentDir()))
|
|
8099
|
+
return { content: [{ type: "text", text: "Subagent communication is off in /settings. Wait for the child to complete instead of steering it." }], isError: !0, details: { mode: "management", results: [] } };
|
|
8068
8100
|
deps.state.currentSessionId = resolveCurrentSessionId(ctx.sessionManager);
|
|
8069
8101
|
let message = (paramsWithResolvedCwd.message ?? paramsWithResolvedCwd.task ?? "").trim();
|
|
8070
8102
|
if (!message)
|
|
@@ -8199,6 +8231,7 @@ function createSubagentExecutor(deps) {
|
|
|
8199
8231
|
effectiveParams = contextPolicy.params;
|
|
8200
8232
|
let sessionName = resolveIntercomSessionTarget(deps.pi.getSessionName(), ctx.sessionManager.getSessionId()), intercomBridge = resolveIntercomBridge({
|
|
8201
8233
|
config: deps.config.intercomBridge,
|
|
8234
|
+
cwd: ctx.cwd,
|
|
8202
8235
|
context: effectiveParams.context,
|
|
8203
8236
|
orchestratorTarget: sessionName
|
|
8204
8237
|
}), agents = intercomBridge.active ? discoveredAgents.map((agent) => applyIntercomBridgeToAgent(agent, intercomBridge)) : discoveredAgents, inheritedNestedRoute = resolveInheritedNestedRouteFromEnv(), nestedParentAddress = inheritedNestedRoute ? resolveNestedParentAddressFromEnv() : void 0, nestedRoute = inheritedNestedRoute ?? createNestedRoute(runId), shareEnabled = effectiveParams.share === !0, hasChain = (effectiveParams.chain?.length ?? 0) > 0, hasTasks = (effectiveParams.tasks?.length ?? 0) > 0, hasSingle = !hasChain && !hasTasks && !!effectiveParams.task, allowClarifyTaskPrompt = hasChain && effectiveParams.clarify === !0 && ctx.hasUI && !(effectiveParams.chain?.some(isParallelStep) ?? !1), validationError = validateExecutionInput(effectiveParams, hasChain, hasTasks, hasSingle, allowClarifyTaskPrompt);
|
|
@@ -6,10 +6,9 @@ import {
|
|
|
6
6
|
import "./chunk-DVGWF6A2.js";
|
|
7
7
|
import {
|
|
8
8
|
SettingsManager
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-RORY2HMJ.js";
|
|
10
10
|
import "./chunk-UP2XBVH5.js";
|
|
11
11
|
import "./chunk-VWCE2HSZ.js";
|
|
12
|
-
import "./chunk-LISUTZS3.js";
|
|
13
12
|
import "./chunk-URD2SLIT.js";
|
|
14
13
|
import "./chunk-UJOCPOMX.js";
|
|
15
14
|
import "./chunk-IMLCWLPI.js";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"interactive-view.d.ts","sourceRoot":"","sources":["../../src/startup/interactive-view.ts"],"names":[],"mappings":"AAIA,OAAO,EACN,KAAK,SAAS,EACd,SAAS,EACT,KAAK,eAAe,EAMpB,GAAG,EACH,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAuC,MAAM,oCAAoC,CAAC;AAE3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMnF,KAAK,cAAc,GAAG,CAAC,UAAU,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAsCnF,qBAAa,eAAe;IAC3B,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,eAAe,YAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IACnD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAA4C;IAEjE,cAsDC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,KAAK,IAAI,IAAI,CAMZ;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,MAAM,IAAI,IAAI,CAKb;IAED,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjC;IAED,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,OAAO,IAAI,eAAe,CAGzB;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,eAAe,GAAG,IAAI,CAEvD;IAED,gFAAgF;IAChF,QAAQ,IAAI,IAAI,CAYf;IAED,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAS9B;IAEK,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxC;IAED,IAAI,IAAI,IAAI,CAUX;IAEK,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAmBlG;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;IAEK,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB5E;IAEK,aAAa,CAClB,qBAAqB,EAAE,cAAc,EACrC,iBAAiB,EAAE,cAAc,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB;IAED,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,oBAAoB;YA0Bd,cAAc;CA2B5B","sourcesContent":["import * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype EditorComponent,\n\tisFocusable,\n\tProcessTerminal,\n\tSpacer,\n\tsetKeybindings,\n\tText,\n\tTUI,\n} from \"@ashx-j/lunr-tui\";\nimport { getChatboxEditor, renderStatsLine, thinkingThemeToken } from \"../builtin-extensions/ashxj-tui.ts\";\nimport { APP_NAME, getAgentDir, VERSION } from \"../config.ts\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport { registerPermissionModeBridge } from \"../core/permission-mode.ts\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.ts\";\nimport type { Settings } from \"../core/settings-manager.ts\";\nimport { BootScreenComponent } from \"../modes/interactive/components/boot-screen.ts\";\nimport { getEditorTheme, getThemeName, initTheme, theme } from \"../modes/interactive/theme/theme.ts\";\nimport { markStartupMilestone } from \"./startup-milestones.ts\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n// Read display preferences only: no auth, models, resources, migrations, or writes.\nfunction readDisplaySettings(): Partial<Settings> {\n\ttry {\n\t\tconst value = JSON.parse(fs.readFileSync(path.join(getAgentDir(), \"settings.json\"), \"utf8\"));\n\t\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nclass StartupProcessTerminal extends ProcessTerminal {\n\tprivate watchForFirstFrame = false;\n\tprivate firstFrameCallback: (() => void) | undefined;\n\n\tsetFirstFrameCallback(callback: () => void): void {\n\t\tthis.firstFrameCallback = callback;\n\t\tthis.watchForFirstFrame = true;\n\t}\n\n\toverride start(onInput: (data: string) => void, onResize: () => void): void {\n\t\tsuper.start(onInput, onResize);\n\t\tmarkStartupMilestone(\"input_handler_armed\");\n\t\tif (process.stdin.isTTY) markStartupMilestone(\"raw_mode_active\");\n\t}\n\n\toverride write(data: string): void {\n\t\tsuper.write(data);\n\t\t// TUI ends each content frame with synchronized-output end. Setup writes do not count.\n\t\tif (this.watchForFirstFrame && data.includes(\"\\x1b[?2026l\")) {\n\t\t\tthis.watchForFirstFrame = false;\n\t\t\tmarkStartupMilestone(\"first_frame_committed\");\n\t\t\tthis.firstFrameCallback?.();\n\t\t}\n\t}\n}\n\nexport class InteractiveView {\n\treadonly ui: TUI;\n\treadonly editor: ReturnType<typeof getChatboxEditor>;\n\treadonly keybindings: KeybindingsManager;\n\tprivate submitRequested = false;\n\tprivate inputUnsubscribe?: () => void;\n\tprivate modalActive = false;\n\tprivate readonly terminal: StartupProcessTerminal;\n\tprivate readonly status = new Text(\"\", 1, 0);\n\treadonly header: Component;\n\treadonly footer: Component;\n\treadonly statusContainer = new Container();\n\tprivate readonly editorContainer = new Container();\n\tprivate firstFramePromise: Promise<void>;\n\tprivate resolveFirstFrame!: () => void;\n\tprivate exitPromise: Promise<void>;\n\tprivate resolveExit!: () => void;\n\tprivate started = false;\n\tprivate handedOff = false;\n\tprivate exitRequested = false;\n\tprivate lastClearAt = 0;\n\tprivate currentEditor: () => EditorComponent = () => this.editor;\n\n\tconstructor() {\n\t\tconst settings = readDisplaySettings();\n\t\tconst permission = settings.defaultPermissionMode;\n\t\tregisterPermissionModeBridge(() =>\n\t\t\tpermission === \"auto\" || permission === \"yolo\" || permission === \"plan\" ? permission : \"manual\",\n\t\t);\n\t\tinitTheme(typeof settings.theme === \"string\" ? settings.theme : undefined);\n\t\tthis.terminal = new StartupProcessTerminal();\n\t\tthis.ui = new TUI(this.terminal, settings.showHardwareCursor);\n\t\tthis.ui.setClearOnShrink(settings.terminal?.clearOnShrink ?? false);\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(this.keybindings);\n\t\tconst ctx = {\n\t\t\tmode: \"tui\" as const,\n\t\t\thasUI: true,\n\t\t\tmodel: settings.defaultModel ? { id: settings.defaultModel, provider: settings.defaultProvider } : undefined,\n\t\t\tsessionManager: { getEntries: () => [] },\n\t\t\tgetContextUsage: () => undefined,\n\t\t\tui: { theme, setEditorComponent() {}, setFooter() {} },\n\t\t};\n\t\tconst effort = settings.defaultThinkingLevel ?? \"off\";\n\t\tthis.editor = getChatboxEditor(this.ui, getEditorTheme(), this.keybindings as never, ctx, {\n\t\t\tgetThinkingLevel: () => effort,\n\t\t\ton() {},\n\t\t});\n\t\tthis.editor.borderColor = (text) => theme.fg(thinkingThemeToken(effort) as Parameters<typeof theme.fg>[0], text);\n\t\tthis.editor.disableSubmit = true;\n\t\tthis.header = settings.quietStartup\n\t\t\t? new Text(\"\", 0, 0)\n\t\t\t: new BootScreenComponent(theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${VERSION}`), [\n\t\t\t\t\t{ label: \"directory\", value: process.cwd() },\n\t\t\t\t\t{ label: \"config\", value: getAgentDir() },\n\t\t\t\t\t{ label: \"theme\", value: getThemeName() },\n\t\t\t\t]);\n\t\tthis.footer = {\n\t\t\tinvalidate() {},\n\t\t\trender: (width) =>\n\t\t\t\trenderStatsLine(width, ctx, theme, {\n\t\t\t\t\tgetGitBranch: () => null,\n\t\t\t\t\tgetExtensionStatuses: () => new Map(),\n\t\t\t\t\tgetAvailableProviderCount: () => 0,\n\t\t\t\t\tonBranchChange: () => () => {},\n\t\t\t\t}),\n\t\t};\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.statusContainer.addChild(this.status);\n\t\tthis.firstFramePromise = new Promise((resolve) => {\n\t\t\tthis.resolveFirstFrame = resolve;\n\t\t});\n\t\tthis.exitPromise = new Promise((resolve) => {\n\t\t\tthis.resolveExit = resolve;\n\t\t});\n\t\tthis.terminal.setFirstFrameCallback(this.resolveFirstFrame);\n\t\tthis.installInputHandlers();\n\t}\n\n\tget isExitRequested(): boolean {\n\t\treturn this.exitRequested;\n\t}\n\n\tstart(): void {\n\t\tif (this.started) return;\n\t\tthis.restoreLayout();\n\t\tthis.ui.setAlternateScreen(true);\n\t\tthis.ui.start();\n\t\tthis.started = true;\n\t}\n\n\tpause(): void {\n\t\tif (!this.started || this.handedOff) return;\n\t\tthis.ui.stop();\n\t\tthis.started = false;\n\t}\n\n\tresume(): void {\n\t\tif (this.started || this.handedOff || this.exitRequested) return;\n\t\tthis.restoreLayout();\n\t\tthis.ui.start();\n\t\tthis.started = true;\n\t}\n\n\twaitForFirstFrame(): Promise<void> {\n\t\treturn this.firstFramePromise;\n\t}\n\n\twaitForExit(): Promise<void> {\n\t\treturn this.exitPromise;\n\t}\n\n\tbinding(): InteractiveView {\n\t\tthis.handedOff = true;\n\t\treturn this;\n\t}\n\n\tsetCurrentEditor(getEditor: () => EditorComponent): void {\n\t\tthis.currentEditor = getEditor;\n\t}\n\n\t/** Called only after the normal submit handler and all extensions are ready. */\n\tactivate(): void {\n\t\tif (this.exitRequested) return;\n\t\tthis.inputUnsubscribe?.();\n\t\tthis.inputUnsubscribe = undefined;\n\t\tthis.editor.onPasteImage = undefined;\n\t\tthis.editor.disableSubmit = false;\n\t\tthis.status.setText(\"\");\n\t\tif (this.submitRequested) {\n\t\t\tthis.submitRequested = false;\n\t\t\tthis.currentEditor().handleInput(\"\\r\");\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(error: unknown): void {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.status.setText(\n\t\t\t`Startup failed: ${message}\\nYour draft is intact. Press Ctrl+C twice or Ctrl+D on an empty draft to exit.`,\n\t\t);\n\t\tthis.editor.disableSubmit = true;\n\t\tthis.statusContainer.clear();\n\t\tthis.statusContainer.addChild(this.status);\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync fail(error: unknown): Promise<void> {\n\t\tthis.showError(error);\n\t\tif (process.env.PI_STARTUP_BENCHMARK === \"1\") {\n\t\t\tthis.stop();\n\t\t\treturn;\n\t\t}\n\t\tawait this.exitPromise;\n\t}\n\n\tstop(): void {\n\t\tif (this.exitRequested) return;\n\t\tthis.exitRequested = true;\n\t\tif (this.started) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.started = false;\n\t\t}\n\t\tthis.inputUnsubscribe?.();\n\t\tthis.resolveFirstFrame();\n\t\tthis.resolveExit();\n\t}\n\n\tasync select<T>(title: string, options: Array<{ label: string; value: T }>): Promise<T | undefined> {\n\t\tconst { ExtensionSelectorComponent } = await import(\"../modes/interactive/components/extension-selector.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: T | undefined) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions.map((option) => option.label),\n\t\t\t\t(label) => finish(options.find((option) => option.label === label)?.value),\n\t\t\t\t() => finish(undefined),\n\t\t\t\t{ tui: this.ui },\n\t\t\t);\n\t\t\tthis.showModal(selector, selector);\n\t\t});\n\t}\n\n\tasync confirm(title: string, message: string): Promise<boolean> {\n\t\treturn (\n\t\t\t(await this.select(`${title}\\n${message}`, [\n\t\t\t\t{ label: \"Yes\", value: true },\n\t\t\t\t{ label: \"No\", value: false },\n\t\t\t])) ?? false\n\t\t);\n\t}\n\n\tasync input(title: string, placeholder?: string): Promise<string | undefined> {\n\t\tconst { ExtensionInputComponent } = await import(\"../modes/interactive/components/extension-input.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: string | undefined) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tinput.dispose();\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst input = new ExtensionInputComponent(title, placeholder, finish, () => finish(undefined), {\n\t\t\t\ttui: this.ui,\n\t\t\t});\n\t\t\tthis.showModal(input, input);\n\t\t});\n\t}\n\n\tasync selectSession(\n\t\tcurrentSessionsLoader: SessionsLoader,\n\t\tallSessionsLoader: SessionsLoader,\n\t): Promise<string | null> {\n\t\tconst { SessionSelectorComponent } = await import(\"../modes/interactive/components/session-selector.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (path: string | null) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(path);\n\t\t\t};\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\tcurrentSessionsLoader,\n\t\t\t\tallSessionsLoader,\n\t\t\t\t(path) => finish(path),\n\t\t\t\t() => finish(null),\n\t\t\t\t() => this.stop(),\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{ showRenameHint: false, keybindings: this.keybindings },\n\t\t\t);\n\t\t\tthis.showModal(selector, selector.getSessionList());\n\t\t});\n\t}\n\n\tprivate showModal(component: Parameters<TUI[\"addChild\"]>[0], focus: Parameters<TUI[\"setFocus\"]>[0]): void {\n\t\tthis.modalActive = true;\n\t\tthis.ui.pinFrom(null);\n\t\tthis.ui.clear();\n\t\tthis.ui.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender(true);\n\t}\n\n\tprivate restoreLayout(): void {\n\t\tthis.modalActive = false;\n\t\tthis.ui.pinFrom(null);\n\t\tthis.ui.clear();\n\t\tthis.ui.addChild(new Spacer(1));\n\t\tthis.ui.addChild(this.header);\n\t\tthis.ui.addChild(new Spacer(1));\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.pinFrom(this.editorContainer);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender(true);\n\t}\n\n\tprivate installInputHandlers(): void {\n\t\tthis.editor.onAction(\"app.clear\", () => {\n\t\t\tconst now = Date.now();\n\t\t\tif (this.editor.getText().length === 0 && now - this.lastClearAt < 500) {\n\t\t\t\tthis.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.lastClearAt = now;\n\t\t});\n\t\tthis.editor.onCtrlD = () => this.stop();\n\t\tthis.editor.onPasteImage = () => void this.pasteClipboard();\n\t\tthis.inputUnsubscribe = this.ui.addInputListener((data) => {\n\t\t\tconst editor = this.currentEditor();\n\t\t\tif (this.modalActive || !isFocusable(editor) || !editor.focused) return;\n\t\t\tif (this.keybindings.matches(data, \"tui.input.submit\")) {\n\t\t\t\tthis.submitRequested = editor.getText().trim().length > 0;\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tif (this.keybindings.matches(data, \"app.interrupt\") || this.keybindings.matches(data, \"app.clear\")) {\n\t\t\t\tthis.submitRequested = false;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\tprivate async pasteClipboard(): Promise<void> {\n\t\ttry {\n\t\t\tconst [{ readClipboardText }, { extensionForImageMimeType, readClipboardImage }] = await Promise.all([\n\t\t\t\timport(\"../utils/clipboard.ts\"),\n\t\t\t\timport(\"../utils/clipboard-image.ts\"),\n\t\t\t]);\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (image) {\n\t\t\t\tconst extension = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\t\tconst filePath = path.join(os.tmpdir(), `lunr-clipboard-${crypto.randomUUID()}.${extension}`);\n\t\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\t\t\t\tthis.editor.insertImageMarker({ path: filePath, mimeType: image.mimeType });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (text) {\n\t\t\t\tthis.editor.insertTextAtCursor(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.status.setText(\"Clipboard contains no image or text.\");\n\t\t} catch (error) {\n\t\t\tthis.status.setText(`Clipboard paste failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n}\n"]}
|
|
1
|
+
{"version":3,"file":"interactive-view.d.ts","sourceRoot":"","sources":["../../src/startup/interactive-view.ts"],"names":[],"mappings":"AAIA,OAAO,EACN,KAAK,SAAS,EACd,SAAS,EACT,KAAK,eAAe,EAMpB,GAAG,EACH,MAAM,wBAAwB,CAAC;AAChC,OAAO,EAAE,gBAAgB,EAAuC,MAAM,oCAAoC,CAAC;AAE3G,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAE5D,OAAO,KAAK,EAAE,WAAW,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AAMnF,KAAK,cAAc,GAAG,CAAC,UAAU,CAAC,EAAE,mBAAmB,KAAK,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;AAsCnF,qBAAa,eAAe;IAC3B,QAAQ,CAAC,EAAE,EAAE,GAAG,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,gBAAgB,CAAC,CAAC;IACrD,QAAQ,CAAC,WAAW,EAAE,kBAAkB,CAAC;IACzC,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,gBAAgB,CAAC,CAAa;IACtC,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAyB;IAClD,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAsB;IAC7C,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,eAAe,YAAmB;IAC3C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAmB;IACnD,OAAO,CAAC,iBAAiB,CAAgB;IACzC,OAAO,CAAC,iBAAiB,CAAc;IACvC,OAAO,CAAC,WAAW,CAAgB;IACnC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,OAAO,CAAS;IACxB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,WAAW,CAAK;IACxB,OAAO,CAAC,aAAa,CAA4C;IAEjE,cA0DC;IAED,IAAI,eAAe,IAAI,OAAO,CAE7B;IAED,KAAK,IAAI,IAAI,CAMZ;IAED,KAAK,IAAI,IAAI,CAIZ;IAED,MAAM,IAAI,IAAI,CAKb;IAED,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CAEjC;IAED,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAE3B;IAED,OAAO,IAAI,eAAe,CAGzB;IAED,gBAAgB,CAAC,SAAS,EAAE,MAAM,eAAe,GAAG,IAAI,CAEvD;IAED,gFAAgF;IAChF,QAAQ,IAAI,IAAI,CAYf;IAED,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,IAAI,CAS9B;IAEK,IAAI,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAOxC;IAED,IAAI,IAAI,IAAI,CAUX;IAEK,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,KAAK,CAAC;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC,GAAG,OAAO,CAAC,CAAC,GAAG,SAAS,CAAC,CAmBlG;IAEK,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAO9D;IAEK,KAAK,CAAC,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAgB5E;IAEK,aAAa,CAClB,qBAAqB,EAAE,cAAc,EACrC,iBAAiB,EAAE,cAAc,GAC/B,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAqBxB;IAED,OAAO,CAAC,SAAS;IASjB,OAAO,CAAC,aAAa;IAerB,OAAO,CAAC,oBAAoB;YA0Bd,cAAc;CA2B5B","sourcesContent":["import * as crypto from \"node:crypto\";\nimport * as fs from \"node:fs\";\nimport * as os from \"node:os\";\nimport * as path from \"node:path\";\nimport {\n\ttype Component,\n\tContainer,\n\ttype EditorComponent,\n\tisFocusable,\n\tProcessTerminal,\n\tSpacer,\n\tsetKeybindings,\n\tText,\n\tTUI,\n} from \"@ashx-j/lunr-tui\";\nimport { getChatboxEditor, renderStatsLine, thinkingThemeToken } from \"../builtin-extensions/ashxj-tui.ts\";\nimport { APP_NAME, getAgentDir, VERSION } from \"../config.ts\";\nimport { KeybindingsManager } from \"../core/keybindings.ts\";\nimport { registerPermissionModeBridge } from \"../core/permission-mode.ts\";\nimport type { SessionInfo, SessionListProgress } from \"../core/session-manager.ts\";\nimport type { Settings } from \"../core/settings-manager.ts\";\nimport { BootScreenComponent } from \"../modes/interactive/components/boot-screen.ts\";\nimport { getEditorTheme, getThemeName, initTheme, theme } from \"../modes/interactive/theme/theme.ts\";\nimport { markStartupMilestone } from \"./startup-milestones.ts\";\n\ntype SessionsLoader = (onProgress?: SessionListProgress) => Promise<SessionInfo[]>;\n\n// Read display preferences only: no auth, models, resources, migrations, or writes.\nfunction readDisplaySettings(): Partial<Settings> {\n\ttry {\n\t\tconst value = JSON.parse(fs.readFileSync(path.join(getAgentDir(), \"settings.json\"), \"utf8\"));\n\t\treturn value && typeof value === \"object\" && !Array.isArray(value) ? value : {};\n\t} catch {\n\t\treturn {};\n\t}\n}\n\nclass StartupProcessTerminal extends ProcessTerminal {\n\tprivate watchForFirstFrame = false;\n\tprivate firstFrameCallback: (() => void) | undefined;\n\n\tsetFirstFrameCallback(callback: () => void): void {\n\t\tthis.firstFrameCallback = callback;\n\t\tthis.watchForFirstFrame = true;\n\t}\n\n\toverride start(onInput: (data: string) => void, onResize: () => void): void {\n\t\tsuper.start(onInput, onResize);\n\t\tmarkStartupMilestone(\"input_handler_armed\");\n\t\tif (process.stdin.isTTY) markStartupMilestone(\"raw_mode_active\");\n\t}\n\n\toverride write(data: string): void {\n\t\tsuper.write(data);\n\t\t// TUI ends each content frame with synchronized-output end. Setup writes do not count.\n\t\tif (this.watchForFirstFrame && data.includes(\"\\x1b[?2026l\")) {\n\t\t\tthis.watchForFirstFrame = false;\n\t\t\tmarkStartupMilestone(\"first_frame_committed\");\n\t\t\tthis.firstFrameCallback?.();\n\t\t}\n\t}\n}\n\nexport class InteractiveView {\n\treadonly ui: TUI;\n\treadonly editor: ReturnType<typeof getChatboxEditor>;\n\treadonly keybindings: KeybindingsManager;\n\tprivate submitRequested = false;\n\tprivate inputUnsubscribe?: () => void;\n\tprivate modalActive = false;\n\tprivate readonly terminal: StartupProcessTerminal;\n\tprivate readonly status = new Text(\"\", 1, 0);\n\treadonly header: Component;\n\treadonly footer: Component;\n\treadonly statusContainer = new Container();\n\tprivate readonly editorContainer = new Container();\n\tprivate firstFramePromise: Promise<void>;\n\tprivate resolveFirstFrame!: () => void;\n\tprivate exitPromise: Promise<void>;\n\tprivate resolveExit!: () => void;\n\tprivate started = false;\n\tprivate handedOff = false;\n\tprivate exitRequested = false;\n\tprivate lastClearAt = 0;\n\tprivate currentEditor: () => EditorComponent = () => this.editor;\n\n\tconstructor() {\n\t\tconst settings = readDisplaySettings();\n\t\tconst permission: unknown = settings.defaultPermissionMode;\n\t\tregisterPermissionModeBridge(() =>\n\t\t\tpermission === \"plan\"\n\t\t\t\t? \"read-only\"\n\t\t\t\t: permission === \"auto\" || permission === \"read-only\"\n\t\t\t\t\t? permission\n\t\t\t\t\t: \"yolo\",\n\t\t);\n\t\tinitTheme(typeof settings.theme === \"string\" ? settings.theme : undefined);\n\t\tthis.terminal = new StartupProcessTerminal();\n\t\tthis.ui = new TUI(this.terminal, settings.showHardwareCursor);\n\t\tthis.ui.setClearOnShrink(settings.terminal?.clearOnShrink ?? false);\n\t\tthis.keybindings = KeybindingsManager.create();\n\t\tsetKeybindings(this.keybindings);\n\t\tconst ctx = {\n\t\t\tmode: \"tui\" as const,\n\t\t\thasUI: true,\n\t\t\tmodel: settings.defaultModel ? { id: settings.defaultModel, provider: settings.defaultProvider } : undefined,\n\t\t\tsessionManager: { getEntries: () => [] },\n\t\t\tgetContextUsage: () => undefined,\n\t\t\tui: { theme, setEditorComponent() {}, setFooter() {} },\n\t\t};\n\t\tconst effort = settings.defaultThinkingLevel ?? \"off\";\n\t\tthis.editor = getChatboxEditor(this.ui, getEditorTheme(), this.keybindings as never, ctx, {\n\t\t\tgetThinkingLevel: () => effort,\n\t\t\ton() {},\n\t\t});\n\t\tthis.editor.borderColor = (text) => theme.fg(thinkingThemeToken(effort) as Parameters<typeof theme.fg>[0], text);\n\t\tthis.editor.disableSubmit = true;\n\t\tthis.header = settings.quietStartup\n\t\t\t? new Text(\"\", 0, 0)\n\t\t\t: new BootScreenComponent(theme.bold(theme.fg(\"accent\", APP_NAME)) + theme.fg(\"dim\", ` v${VERSION}`), [\n\t\t\t\t\t{ label: \"directory\", value: process.cwd() },\n\t\t\t\t\t{ label: \"config\", value: getAgentDir() },\n\t\t\t\t\t{ label: \"theme\", value: getThemeName() },\n\t\t\t\t]);\n\t\tthis.footer = {\n\t\t\tinvalidate() {},\n\t\t\trender: (width) =>\n\t\t\t\trenderStatsLine(width, ctx, theme, {\n\t\t\t\t\tgetGitBranch: () => null,\n\t\t\t\t\tgetExtensionStatuses: () => new Map(),\n\t\t\t\t\tgetAvailableProviderCount: () => 0,\n\t\t\t\t\tonBranchChange: () => () => {},\n\t\t\t\t}),\n\t\t};\n\t\tthis.editorContainer.addChild(this.editor);\n\t\tthis.statusContainer.addChild(this.status);\n\t\tthis.firstFramePromise = new Promise((resolve) => {\n\t\t\tthis.resolveFirstFrame = resolve;\n\t\t});\n\t\tthis.exitPromise = new Promise((resolve) => {\n\t\t\tthis.resolveExit = resolve;\n\t\t});\n\t\tthis.terminal.setFirstFrameCallback(this.resolveFirstFrame);\n\t\tthis.installInputHandlers();\n\t}\n\n\tget isExitRequested(): boolean {\n\t\treturn this.exitRequested;\n\t}\n\n\tstart(): void {\n\t\tif (this.started) return;\n\t\tthis.restoreLayout();\n\t\tthis.ui.setAlternateScreen(true);\n\t\tthis.ui.start();\n\t\tthis.started = true;\n\t}\n\n\tpause(): void {\n\t\tif (!this.started || this.handedOff) return;\n\t\tthis.ui.stop();\n\t\tthis.started = false;\n\t}\n\n\tresume(): void {\n\t\tif (this.started || this.handedOff || this.exitRequested) return;\n\t\tthis.restoreLayout();\n\t\tthis.ui.start();\n\t\tthis.started = true;\n\t}\n\n\twaitForFirstFrame(): Promise<void> {\n\t\treturn this.firstFramePromise;\n\t}\n\n\twaitForExit(): Promise<void> {\n\t\treturn this.exitPromise;\n\t}\n\n\tbinding(): InteractiveView {\n\t\tthis.handedOff = true;\n\t\treturn this;\n\t}\n\n\tsetCurrentEditor(getEditor: () => EditorComponent): void {\n\t\tthis.currentEditor = getEditor;\n\t}\n\n\t/** Called only after the normal submit handler and all extensions are ready. */\n\tactivate(): void {\n\t\tif (this.exitRequested) return;\n\t\tthis.inputUnsubscribe?.();\n\t\tthis.inputUnsubscribe = undefined;\n\t\tthis.editor.onPasteImage = undefined;\n\t\tthis.editor.disableSubmit = false;\n\t\tthis.status.setText(\"\");\n\t\tif (this.submitRequested) {\n\t\t\tthis.submitRequested = false;\n\t\t\tthis.currentEditor().handleInput(\"\\r\");\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n\n\tshowError(error: unknown): void {\n\t\tconst message = error instanceof Error ? error.message : String(error);\n\t\tthis.status.setText(\n\t\t\t`Startup failed: ${message}\\nYour draft is intact. Press Ctrl+C twice or Ctrl+D on an empty draft to exit.`,\n\t\t);\n\t\tthis.editor.disableSubmit = true;\n\t\tthis.statusContainer.clear();\n\t\tthis.statusContainer.addChild(this.status);\n\t\tthis.ui.requestRender();\n\t}\n\n\tasync fail(error: unknown): Promise<void> {\n\t\tthis.showError(error);\n\t\tif (process.env.PI_STARTUP_BENCHMARK === \"1\") {\n\t\t\tthis.stop();\n\t\t\treturn;\n\t\t}\n\t\tawait this.exitPromise;\n\t}\n\n\tstop(): void {\n\t\tif (this.exitRequested) return;\n\t\tthis.exitRequested = true;\n\t\tif (this.started) {\n\t\t\tthis.ui.stop();\n\t\t\tthis.started = false;\n\t\t}\n\t\tthis.inputUnsubscribe?.();\n\t\tthis.resolveFirstFrame();\n\t\tthis.resolveExit();\n\t}\n\n\tasync select<T>(title: string, options: Array<{ label: string; value: T }>): Promise<T | undefined> {\n\t\tconst { ExtensionSelectorComponent } = await import(\"../modes/interactive/components/extension-selector.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: T | undefined) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst selector = new ExtensionSelectorComponent(\n\t\t\t\ttitle,\n\t\t\t\toptions.map((option) => option.label),\n\t\t\t\t(label) => finish(options.find((option) => option.label === label)?.value),\n\t\t\t\t() => finish(undefined),\n\t\t\t\t{ tui: this.ui },\n\t\t\t);\n\t\t\tthis.showModal(selector, selector);\n\t\t});\n\t}\n\n\tasync confirm(title: string, message: string): Promise<boolean> {\n\t\treturn (\n\t\t\t(await this.select(`${title}\\n${message}`, [\n\t\t\t\t{ label: \"Yes\", value: true },\n\t\t\t\t{ label: \"No\", value: false },\n\t\t\t])) ?? false\n\t\t);\n\t}\n\n\tasync input(title: string, placeholder?: string): Promise<string | undefined> {\n\t\tconst { ExtensionInputComponent } = await import(\"../modes/interactive/components/extension-input.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (value: string | undefined) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tinput.dispose();\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(value);\n\t\t\t};\n\t\t\tconst input = new ExtensionInputComponent(title, placeholder, finish, () => finish(undefined), {\n\t\t\t\ttui: this.ui,\n\t\t\t});\n\t\t\tthis.showModal(input, input);\n\t\t});\n\t}\n\n\tasync selectSession(\n\t\tcurrentSessionsLoader: SessionsLoader,\n\t\tallSessionsLoader: SessionsLoader,\n\t): Promise<string | null> {\n\t\tconst { SessionSelectorComponent } = await import(\"../modes/interactive/components/session-selector.ts\");\n\t\treturn new Promise((resolve) => {\n\t\t\tlet settled = false;\n\t\t\tconst finish = (path: string | null) => {\n\t\t\t\tif (settled) return;\n\t\t\t\tsettled = true;\n\t\t\t\tthis.restoreLayout();\n\t\t\t\tresolve(path);\n\t\t\t};\n\t\t\tconst selector = new SessionSelectorComponent(\n\t\t\t\tcurrentSessionsLoader,\n\t\t\t\tallSessionsLoader,\n\t\t\t\t(path) => finish(path),\n\t\t\t\t() => finish(null),\n\t\t\t\t() => this.stop(),\n\t\t\t\t() => this.ui.requestRender(),\n\t\t\t\t{ showRenameHint: false, keybindings: this.keybindings },\n\t\t\t);\n\t\t\tthis.showModal(selector, selector.getSessionList());\n\t\t});\n\t}\n\n\tprivate showModal(component: Parameters<TUI[\"addChild\"]>[0], focus: Parameters<TUI[\"setFocus\"]>[0]): void {\n\t\tthis.modalActive = true;\n\t\tthis.ui.pinFrom(null);\n\t\tthis.ui.clear();\n\t\tthis.ui.addChild(component);\n\t\tthis.ui.setFocus(focus);\n\t\tthis.ui.requestRender(true);\n\t}\n\n\tprivate restoreLayout(): void {\n\t\tthis.modalActive = false;\n\t\tthis.ui.pinFrom(null);\n\t\tthis.ui.clear();\n\t\tthis.ui.addChild(new Spacer(1));\n\t\tthis.ui.addChild(this.header);\n\t\tthis.ui.addChild(new Spacer(1));\n\t\tthis.ui.addChild(this.statusContainer);\n\t\tthis.ui.addChild(this.editorContainer);\n\t\tthis.ui.addChild(this.footer);\n\t\tthis.ui.pinFrom(this.editorContainer);\n\t\tthis.ui.setFocus(this.editor);\n\t\tthis.ui.requestRender(true);\n\t}\n\n\tprivate installInputHandlers(): void {\n\t\tthis.editor.onAction(\"app.clear\", () => {\n\t\t\tconst now = Date.now();\n\t\t\tif (this.editor.getText().length === 0 && now - this.lastClearAt < 500) {\n\t\t\t\tthis.stop();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.editor.setText(\"\");\n\t\t\tthis.lastClearAt = now;\n\t\t});\n\t\tthis.editor.onCtrlD = () => this.stop();\n\t\tthis.editor.onPasteImage = () => void this.pasteClipboard();\n\t\tthis.inputUnsubscribe = this.ui.addInputListener((data) => {\n\t\t\tconst editor = this.currentEditor();\n\t\t\tif (this.modalActive || !isFocusable(editor) || !editor.focused) return;\n\t\t\tif (this.keybindings.matches(data, \"tui.input.submit\")) {\n\t\t\t\tthis.submitRequested = editor.getText().trim().length > 0;\n\t\t\t\treturn { consume: true };\n\t\t\t}\n\t\t\tif (this.keybindings.matches(data, \"app.interrupt\") || this.keybindings.matches(data, \"app.clear\")) {\n\t\t\t\tthis.submitRequested = false;\n\t\t\t}\n\t\t\treturn undefined;\n\t\t});\n\t}\n\n\tprivate async pasteClipboard(): Promise<void> {\n\t\ttry {\n\t\t\tconst [{ readClipboardText }, { extensionForImageMimeType, readClipboardImage }] = await Promise.all([\n\t\t\t\timport(\"../utils/clipboard.ts\"),\n\t\t\t\timport(\"../utils/clipboard-image.ts\"),\n\t\t\t]);\n\t\t\tconst image = await readClipboardImage();\n\t\t\tif (image) {\n\t\t\t\tconst extension = extensionForImageMimeType(image.mimeType) ?? \"png\";\n\t\t\t\tconst filePath = path.join(os.tmpdir(), `lunr-clipboard-${crypto.randomUUID()}.${extension}`);\n\t\t\t\tfs.writeFileSync(filePath, Buffer.from(image.bytes));\n\t\t\t\tthis.editor.insertImageMarker({ path: filePath, mimeType: image.mimeType });\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst text = await readClipboardText();\n\t\t\tif (text) {\n\t\t\t\tthis.editor.insertTextAtCursor(text);\n\t\t\t\tthis.ui.requestRender();\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tthis.status.setText(\"Clipboard contains no image or text.\");\n\t\t} catch (error) {\n\t\t\tthis.status.setText(`Clipboard paste failed: ${error instanceof Error ? error.message : String(error)}`);\n\t\t}\n\t\tthis.ui.requestRender();\n\t}\n}\n"]}
|
|
@@ -68,7 +68,11 @@ export class InteractiveView {
|
|
|
68
68
|
constructor() {
|
|
69
69
|
const settings = readDisplaySettings();
|
|
70
70
|
const permission = settings.defaultPermissionMode;
|
|
71
|
-
registerPermissionModeBridge(() => permission === "
|
|
71
|
+
registerPermissionModeBridge(() => permission === "plan"
|
|
72
|
+
? "read-only"
|
|
73
|
+
: permission === "auto" || permission === "read-only"
|
|
74
|
+
? permission
|
|
75
|
+
: "yolo");
|
|
72
76
|
initTheme(typeof settings.theme === "string" ? settings.theme : undefined);
|
|
73
77
|
this.terminal = new StartupProcessTerminal();
|
|
74
78
|
this.ui = new TUI(this.terminal, settings.showHardwareCursor);
|