pybao-cli 1.4.43 → 1.4.44
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/dist/REPL-EAV5UQFM.js +47 -0
- package/dist/{acp-KQ5SYBCC.js → acp-5O7V3YQY.js} +29 -29
- package/dist/{agentsValidate-SJFVDKUZ.js → agentsValidate-G5ZQAUR4.js} +7 -7
- package/dist/{ask-A6QHZ5U4.js → ask-UAVA6F5R.js} +28 -28
- package/dist/{autoUpdater-BBZVYPRI.js → autoUpdater-KKEQ2ULZ.js} +3 -3
- package/dist/{chunk-ETXZ5OPA.js → chunk-25W7KIUK.js} +3 -3
- package/dist/{chunk-I5KAA66I.js → chunk-3TW4UYVK.js} +3 -3
- package/dist/{chunk-YKWQF7PT.js → chunk-4AQYC7BM.js} +1 -1
- package/dist/{chunk-UJ76NKSF.js → chunk-5BYVWKN2.js} +3 -3
- package/dist/{chunk-VPQZQRSR.js → chunk-AEJORUDW.js} +598 -578
- package/dist/{chunk-VPQZQRSR.js.map → chunk-AEJORUDW.js.map} +4 -4
- package/dist/{chunk-MU5SIPBA.js → chunk-AYD24IXA.js} +4 -4
- package/dist/{chunk-NH7SWX57.js → chunk-C4EW6YOH.js} +3 -3
- package/dist/{chunk-WUCVC3QT.js → chunk-C4JMYHEY.js} +152 -67
- package/dist/{chunk-WUCVC3QT.js.map → chunk-C4JMYHEY.js.map} +3 -3
- package/dist/{chunk-TRYEQHHB.js → chunk-C73YTQE3.js} +2 -2
- package/dist/{chunk-ELBWGYTR.js → chunk-CEQJ3UY2.js} +3 -3
- package/dist/{chunk-F2TALCDM.js → chunk-CVR5J7HI.js} +1 -1
- package/dist/{chunk-2AV6L5GN.js → chunk-CZEV7RNL.js} +1 -1
- package/dist/{chunk-6YLH7AMI.js → chunk-CZKMFNDC.js} +4 -4
- package/dist/{chunk-ZJXLGVQQ.js → chunk-DYYRGY6Q.js} +3 -3
- package/dist/{chunk-BHHF247Q.js → chunk-GSEVRFO7.js} +2 -2
- package/dist/{chunk-Z2P4A76S.js → chunk-GXNEEWUV.js} +1 -1
- package/dist/{chunk-UTVCNV53.js → chunk-IIGZBH6C.js} +2 -2
- package/dist/{chunk-YMF3HIKQ.js → chunk-KUS6C7RQ.js} +1 -1
- package/dist/{chunk-YMF3HIKQ.js.map → chunk-KUS6C7RQ.js.map} +1 -1
- package/dist/{chunk-BGMXYCEG.js → chunk-L62LBMEY.js} +1 -1
- package/dist/{chunk-CGJFRSE7.js → chunk-MUXFNBSK.js} +2 -2
- package/dist/{chunk-37RJWRLG.js → chunk-NFQ7DMXQ.js} +2 -2
- package/dist/{chunk-VIGMIQJS.js → chunk-PLIISO75.js} +4 -4
- package/dist/{chunk-BEQU37HJ.js → chunk-SK2HNWN7.js} +3 -3
- package/dist/{chunk-D2YR3LSF.js → chunk-TD7EJUWP.js} +4 -4
- package/dist/{chunk-4ZYN5JOV.js → chunk-VZLNH3C6.js} +1 -1
- package/dist/{chunk-OIWM647G.js → chunk-WSNCRG6B.js} +1 -1
- package/dist/{chunk-I52DKV6I.js → chunk-XPNFLNWB.js} +3 -3
- package/dist/{chunk-YQAWSNBK.js → chunk-XTBYYI3V.js} +1 -1
- package/dist/{chunk-VTHYZQ4P.js → chunk-YDDEKQZ6.js} +2 -2
- package/dist/{chunk-JFGQ5LGD.js → chunk-ZPGYMC3H.js} +1 -1
- package/dist/{cli-PAJXMDW5.js → cli-UDRARGLH.js} +87 -87
- package/dist/commands-2LY7ZT7W.js +51 -0
- package/dist/{config-WDRMJEUV.js → config-3HTSPEEU.js} +4 -4
- package/dist/{context-4M45WV6Z.js → context-CL5QF4SK.js} +6 -6
- package/dist/{customCommands-2J4CP34P.js → customCommands-T752CSHW.js} +4 -4
- package/dist/{env-3BNULBTS.js → env-ARPQQ6L4.js} +2 -2
- package/dist/{file-WG4PBI2E.js → file-UC3ZCA6G.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-54EXVPB4.js → llm-UIPGZOHF.js} +29 -29
- package/dist/{llmLazy-YSFGCQ5F.js → llmLazy-FK7ADSGW.js} +1 -1
- package/dist/{loader-2CD5GCGC.js → loader-JOEZL3BT.js} +4 -4
- package/dist/{lsp-6ZD5473F.js → lsp-I7AZDBN2.js} +6 -6
- package/dist/{lspAnchor-TUWC4LL6.js → lspAnchor-UAEMXDZN.js} +6 -6
- package/dist/{mcp-HFVYJYXK.js → mcp-JR3KRFB4.js} +7 -7
- package/dist/{mentionProcessor-D2GK5QFP.js → mentionProcessor-J26U7USW.js} +6 -6
- package/dist/{messages-BSQOXWT5.js → messages-C2NKIIAV.js} +1 -1
- package/dist/{model-563AI4RO.js → model-YEJVMUUS.js} +5 -5
- package/dist/{openai-WZQPCVLM.js → openai-VJON73JP.js} +5 -5
- package/dist/{outputStyles-K4SQQTC3.js → outputStyles-UC2YD4SH.js} +4 -4
- package/dist/{pluginRuntime-JGIUUE5F.js → pluginRuntime-YLQP5EGM.js} +6 -6
- package/dist/{pluginValidation-D7WFKFMO.js → pluginValidation-654GWXWV.js} +6 -6
- package/dist/prompts-MQY43ADI.js +53 -0
- package/dist/{pybAgentSessionLoad-FG7J7G3O.js → pybAgentSessionLoad-KVUVW6ZW.js} +4 -4
- package/dist/{pybAgentSessionResume-PRUHVKEY.js → pybAgentSessionResume-HQ6KUK66.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-F3DNZDTX.js → pybAgentStreamJsonSession-Z5PLFR57.js} +1 -1
- package/dist/{pybHooks-NBIDAWW2.js → pybHooks-MQJSEOFE.js} +4 -4
- package/dist/query-A3X6PVWC.js +55 -0
- package/dist/{registry-EZF7OENP.js → registry-7BVK7AEO.js} +5 -5
- package/dist/{ripgrep-XQV6T7IY.js → ripgrep-D7NQJ7DP.js} +3 -3
- package/dist/{skillMarketplace-MC26442G.js → skillMarketplace-TDHQC3PM.js} +3 -3
- package/dist/{state-4CMVIHK4.js → state-O52OCOG6.js} +2 -2
- package/dist/{theme-PQTQKLCM.js → theme-AJTSKB5E.js} +5 -5
- package/dist/{toolPermissionSettings-XB5JDDOK.js → toolPermissionSettings-OSWJYPFQ.js} +6 -6
- package/dist/tools-WA3T66NR.js +52 -0
- package/dist/{userInput-DYHMKGOR.js → userInput-S2KCTTQT.js} +30 -30
- package/package.json +1 -1
- package/dist/REPL-YY7ZK4DX.js +0 -47
- package/dist/commands-NYISCZQN.js +0 -51
- package/dist/prompts-7FVIWVGF.js +0 -53
- package/dist/query-A2H7UU7Y.js +0 -55
- package/dist/tools-ED7TYE2A.js +0 -52
- /package/dist/{REPL-YY7ZK4DX.js.map → REPL-EAV5UQFM.js.map} +0 -0
- /package/dist/{acp-KQ5SYBCC.js.map → acp-5O7V3YQY.js.map} +0 -0
- /package/dist/{agentsValidate-SJFVDKUZ.js.map → agentsValidate-G5ZQAUR4.js.map} +0 -0
- /package/dist/{ask-A6QHZ5U4.js.map → ask-UAVA6F5R.js.map} +0 -0
- /package/dist/{autoUpdater-BBZVYPRI.js.map → autoUpdater-KKEQ2ULZ.js.map} +0 -0
- /package/dist/{chunk-ETXZ5OPA.js.map → chunk-25W7KIUK.js.map} +0 -0
- /package/dist/{chunk-I5KAA66I.js.map → chunk-3TW4UYVK.js.map} +0 -0
- /package/dist/{chunk-YKWQF7PT.js.map → chunk-4AQYC7BM.js.map} +0 -0
- /package/dist/{chunk-UJ76NKSF.js.map → chunk-5BYVWKN2.js.map} +0 -0
- /package/dist/{chunk-MU5SIPBA.js.map → chunk-AYD24IXA.js.map} +0 -0
- /package/dist/{chunk-NH7SWX57.js.map → chunk-C4EW6YOH.js.map} +0 -0
- /package/dist/{chunk-TRYEQHHB.js.map → chunk-C73YTQE3.js.map} +0 -0
- /package/dist/{chunk-ELBWGYTR.js.map → chunk-CEQJ3UY2.js.map} +0 -0
- /package/dist/{chunk-F2TALCDM.js.map → chunk-CVR5J7HI.js.map} +0 -0
- /package/dist/{chunk-2AV6L5GN.js.map → chunk-CZEV7RNL.js.map} +0 -0
- /package/dist/{chunk-6YLH7AMI.js.map → chunk-CZKMFNDC.js.map} +0 -0
- /package/dist/{chunk-ZJXLGVQQ.js.map → chunk-DYYRGY6Q.js.map} +0 -0
- /package/dist/{chunk-BHHF247Q.js.map → chunk-GSEVRFO7.js.map} +0 -0
- /package/dist/{chunk-Z2P4A76S.js.map → chunk-GXNEEWUV.js.map} +0 -0
- /package/dist/{chunk-UTVCNV53.js.map → chunk-IIGZBH6C.js.map} +0 -0
- /package/dist/{chunk-BGMXYCEG.js.map → chunk-L62LBMEY.js.map} +0 -0
- /package/dist/{chunk-CGJFRSE7.js.map → chunk-MUXFNBSK.js.map} +0 -0
- /package/dist/{chunk-37RJWRLG.js.map → chunk-NFQ7DMXQ.js.map} +0 -0
- /package/dist/{chunk-VIGMIQJS.js.map → chunk-PLIISO75.js.map} +0 -0
- /package/dist/{chunk-BEQU37HJ.js.map → chunk-SK2HNWN7.js.map} +0 -0
- /package/dist/{chunk-D2YR3LSF.js.map → chunk-TD7EJUWP.js.map} +0 -0
- /package/dist/{chunk-4ZYN5JOV.js.map → chunk-VZLNH3C6.js.map} +0 -0
- /package/dist/{chunk-OIWM647G.js.map → chunk-WSNCRG6B.js.map} +0 -0
- /package/dist/{chunk-I52DKV6I.js.map → chunk-XPNFLNWB.js.map} +0 -0
- /package/dist/{chunk-YQAWSNBK.js.map → chunk-XTBYYI3V.js.map} +0 -0
- /package/dist/{chunk-VTHYZQ4P.js.map → chunk-YDDEKQZ6.js.map} +0 -0
- /package/dist/{chunk-JFGQ5LGD.js.map → chunk-ZPGYMC3H.js.map} +0 -0
- /package/dist/{cli-PAJXMDW5.js.map → cli-UDRARGLH.js.map} +0 -0
- /package/dist/{commands-NYISCZQN.js.map → commands-2LY7ZT7W.js.map} +0 -0
- /package/dist/{config-WDRMJEUV.js.map → config-3HTSPEEU.js.map} +0 -0
- /package/dist/{context-4M45WV6Z.js.map → context-CL5QF4SK.js.map} +0 -0
- /package/dist/{customCommands-2J4CP34P.js.map → customCommands-T752CSHW.js.map} +0 -0
- /package/dist/{env-3BNULBTS.js.map → env-ARPQQ6L4.js.map} +0 -0
- /package/dist/{file-WG4PBI2E.js.map → file-UC3ZCA6G.js.map} +0 -0
- /package/dist/{llm-54EXVPB4.js.map → llm-UIPGZOHF.js.map} +0 -0
- /package/dist/{llmLazy-YSFGCQ5F.js.map → llmLazy-FK7ADSGW.js.map} +0 -0
- /package/dist/{loader-2CD5GCGC.js.map → loader-JOEZL3BT.js.map} +0 -0
- /package/dist/{lsp-6ZD5473F.js.map → lsp-I7AZDBN2.js.map} +0 -0
- /package/dist/{lspAnchor-TUWC4LL6.js.map → lspAnchor-UAEMXDZN.js.map} +0 -0
- /package/dist/{mcp-HFVYJYXK.js.map → mcp-JR3KRFB4.js.map} +0 -0
- /package/dist/{mentionProcessor-D2GK5QFP.js.map → mentionProcessor-J26U7USW.js.map} +0 -0
- /package/dist/{messages-BSQOXWT5.js.map → messages-C2NKIIAV.js.map} +0 -0
- /package/dist/{model-563AI4RO.js.map → model-YEJVMUUS.js.map} +0 -0
- /package/dist/{openai-WZQPCVLM.js.map → openai-VJON73JP.js.map} +0 -0
- /package/dist/{outputStyles-K4SQQTC3.js.map → outputStyles-UC2YD4SH.js.map} +0 -0
- /package/dist/{pluginRuntime-JGIUUE5F.js.map → pluginRuntime-YLQP5EGM.js.map} +0 -0
- /package/dist/{pluginValidation-D7WFKFMO.js.map → pluginValidation-654GWXWV.js.map} +0 -0
- /package/dist/{prompts-7FVIWVGF.js.map → prompts-MQY43ADI.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-FG7J7G3O.js.map → pybAgentSessionLoad-KVUVW6ZW.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-PRUHVKEY.js.map → pybAgentSessionResume-HQ6KUK66.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-F3DNZDTX.js.map → pybAgentStreamJsonSession-Z5PLFR57.js.map} +0 -0
- /package/dist/{pybHooks-NBIDAWW2.js.map → pybHooks-MQJSEOFE.js.map} +0 -0
- /package/dist/{query-A2H7UU7Y.js.map → query-A3X6PVWC.js.map} +0 -0
- /package/dist/{registry-EZF7OENP.js.map → registry-7BVK7AEO.js.map} +0 -0
- /package/dist/{ripgrep-XQV6T7IY.js.map → ripgrep-D7NQJ7DP.js.map} +0 -0
- /package/dist/{skillMarketplace-MC26442G.js.map → skillMarketplace-TDHQC3PM.js.map} +0 -0
- /package/dist/{state-4CMVIHK4.js.map → state-O52OCOG6.js.map} +0 -0
- /package/dist/{theme-PQTQKLCM.js.map → theme-AJTSKB5E.js.map} +0 -0
- /package/dist/{toolPermissionSettings-XB5JDDOK.js.map → toolPermissionSettings-OSWJYPFQ.js.map} +0 -0
- /package/dist/{tools-ED7TYE2A.js.map → tools-WA3T66NR.js.map} +0 -0
- /package/dist/{userInput-DYHMKGOR.js.map → userInput-S2KCTTQT.js.map} +0 -0
|
@@ -2,13 +2,13 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
ripGrepWithStatus
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-GXNEEWUV.js";
|
|
6
6
|
import {
|
|
7
7
|
getCurrentProjectConfig,
|
|
8
8
|
getGlobalConfig,
|
|
9
9
|
getOrCreateUserID,
|
|
10
10
|
saveCurrentProjectConfig
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-3TW4UYVK.js";
|
|
12
12
|
import {
|
|
13
13
|
SESSION_ID,
|
|
14
14
|
env,
|
|
@@ -16,10 +16,10 @@ import {
|
|
|
16
16
|
getCwd,
|
|
17
17
|
isContextScanDisabled,
|
|
18
18
|
logError
|
|
19
|
-
} from "./chunk-
|
|
19
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
20
20
|
import {
|
|
21
21
|
MACRO
|
|
22
|
-
} from "./chunk-
|
|
22
|
+
} from "./chunk-KUS6C7RQ.js";
|
|
23
23
|
import {
|
|
24
24
|
__require
|
|
25
25
|
} from "./chunk-I3J4JYES.js";
|
|
@@ -4,10 +4,10 @@ import {
|
|
|
4
4
|
PRODUCT_NAME,
|
|
5
5
|
execFileNoThrow,
|
|
6
6
|
logError
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
8
8
|
import {
|
|
9
9
|
MACRO
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-KUS6C7RQ.js";
|
|
11
11
|
|
|
12
12
|
// src/utils/session/autoUpdater.ts
|
|
13
13
|
async function getSemver() {
|
|
@@ -82,7 +82,7 @@ async function checkAndNotifyUpdate() {
|
|
|
82
82
|
const [
|
|
83
83
|
{ isAutoUpdaterDisabled, getGlobalConfig, saveGlobalConfig },
|
|
84
84
|
{ env }
|
|
85
|
-
] = await Promise.all([import("./config-
|
|
85
|
+
] = await Promise.all([import("./config-3HTSPEEU.js"), import("./env-ARPQQ6L4.js")]);
|
|
86
86
|
if (await isAutoUpdaterDisabled()) return;
|
|
87
87
|
if (await env.getIsDocker()) return;
|
|
88
88
|
if (!await env.hasInternetAccess()) return;
|
|
@@ -15,6 +15,7 @@ import {
|
|
|
15
15
|
NotebookEditTool,
|
|
16
16
|
SkillTool,
|
|
17
17
|
SlashCommandTool,
|
|
18
|
+
TaskList,
|
|
18
19
|
WebFetchTool,
|
|
19
20
|
WebSearchTool,
|
|
20
21
|
applyMarkdown,
|
|
@@ -28,16 +29,16 @@ import {
|
|
|
28
29
|
hasReadPermission,
|
|
29
30
|
hasWritePermission,
|
|
30
31
|
query
|
|
31
|
-
} from "./chunk-
|
|
32
|
+
} from "./chunk-AEJORUDW.js";
|
|
32
33
|
import {
|
|
33
34
|
queryLLM
|
|
34
|
-
} from "./chunk-
|
|
35
|
+
} from "./chunk-CZKMFNDC.js";
|
|
35
36
|
import {
|
|
36
37
|
FallbackToolUseRejectedMessage,
|
|
37
38
|
MCPTool,
|
|
38
39
|
getClients,
|
|
39
40
|
getMCPTools
|
|
40
|
-
} from "./chunk-
|
|
41
|
+
} from "./chunk-PLIISO75.js";
|
|
41
42
|
import {
|
|
42
43
|
TaskStoreConflictError,
|
|
43
44
|
createTask,
|
|
@@ -48,45 +49,45 @@ import {
|
|
|
48
49
|
getTaskNextId,
|
|
49
50
|
listTasks,
|
|
50
51
|
updateTask
|
|
51
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-25W7KIUK.js";
|
|
52
53
|
import {
|
|
53
54
|
getActiveAgents,
|
|
54
55
|
getAgentByType,
|
|
55
56
|
getAvailableAgentTypes
|
|
56
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-GSEVRFO7.js";
|
|
57
58
|
import {
|
|
58
59
|
INTERRUPT_MESSAGE,
|
|
59
60
|
createAssistantMessage,
|
|
60
61
|
createUserMessage,
|
|
61
62
|
getLastAssistantMessageId
|
|
62
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-L62LBMEY.js";
|
|
63
64
|
import {
|
|
64
65
|
formatDuration,
|
|
65
66
|
formatNumber
|
|
66
67
|
} from "./chunk-OUXHGDLH.js";
|
|
67
68
|
import {
|
|
68
69
|
getAbsolutePath
|
|
69
|
-
} from "./chunk-
|
|
70
|
+
} from "./chunk-MUXFNBSK.js";
|
|
70
71
|
import {
|
|
71
72
|
LspFacade,
|
|
72
73
|
formatDiagnosticsPretty
|
|
73
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-TD7EJUWP.js";
|
|
74
75
|
import {
|
|
75
76
|
getModelManager
|
|
76
|
-
} from "./chunk-
|
|
77
|
+
} from "./chunk-5BYVWKN2.js";
|
|
77
78
|
import {
|
|
78
79
|
getContext
|
|
79
|
-
} from "./chunk-
|
|
80
|
+
} from "./chunk-AYD24IXA.js";
|
|
80
81
|
import {
|
|
81
82
|
filesToTree,
|
|
82
83
|
ripGrepWithStatus
|
|
83
|
-
} from "./chunk-
|
|
84
|
+
} from "./chunk-GXNEEWUV.js";
|
|
84
85
|
import {
|
|
85
86
|
getTheme
|
|
86
|
-
} from "./chunk-
|
|
87
|
+
} from "./chunk-CZEV7RNL.js";
|
|
87
88
|
import {
|
|
88
89
|
debug
|
|
89
|
-
} from "./chunk-
|
|
90
|
+
} from "./chunk-VZLNH3C6.js";
|
|
90
91
|
import {
|
|
91
92
|
BunShell,
|
|
92
93
|
getCwd,
|
|
@@ -97,7 +98,7 @@ import {
|
|
|
97
98
|
overwriteLog,
|
|
98
99
|
readTaskOutput,
|
|
99
100
|
resolveXdgDataPath
|
|
100
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-ZPGYMC3H.js";
|
|
101
102
|
|
|
102
103
|
// src/tools/index.ts
|
|
103
104
|
import { memoize as memoize2 } from "lodash-es";
|
|
@@ -776,7 +777,7 @@ async function analyzeOutputWithLsp(output, exitCode) {
|
|
|
776
777
|
if (exitCode !== 0 || errorCount > 0 || warningCount > 0) {
|
|
777
778
|
try {
|
|
778
779
|
const { isAbsolute: isAbsolute3, resolve: resolve4 } = await import("path");
|
|
779
|
-
const { getSessionRoot: getSessionRoot2 } = await import("./state-
|
|
780
|
+
const { getSessionRoot: getSessionRoot2 } = await import("./state-O52OCOG6.js");
|
|
780
781
|
const lines = output.split("\n");
|
|
781
782
|
const uniqueFiles = /* @__PURE__ */ new Set();
|
|
782
783
|
const lspSuggestions = [];
|
|
@@ -1149,7 +1150,7 @@ var DeleteTool = {
|
|
|
1149
1150
|
}
|
|
1150
1151
|
if (!force) {
|
|
1151
1152
|
try {
|
|
1152
|
-
const { LspFacade: LspFacade2 } = await import("./lsp-
|
|
1153
|
+
const { LspFacade: LspFacade2 } = await import("./lsp-I7AZDBN2.js");
|
|
1153
1154
|
const referenceDetail = await LspFacade2.checkFileReferences(fullPath);
|
|
1154
1155
|
if (referenceDetail) {
|
|
1155
1156
|
failedItems.push(
|
|
@@ -2999,6 +3000,7 @@ var TaskTool = {
|
|
|
2999
3000
|
};
|
|
3000
3001
|
|
|
3001
3002
|
// src/tools/interaction/TaskCreateTool/TaskCreateTool.tsx
|
|
3003
|
+
import React9 from "react";
|
|
3002
3004
|
import { z as z9 } from "zod";
|
|
3003
3005
|
|
|
3004
3006
|
// src/utils/session/taskToolUtils.ts
|
|
@@ -3048,7 +3050,7 @@ var PROMPT6 = `Use this tool to create a new task in the current task list. It i
|
|
|
3048
3050
|
Use this tool proactively in these scenarios:
|
|
3049
3051
|
1. You need to add a task with structured fields (subject, status, tags).
|
|
3050
3052
|
2. You want to seed a plan for multi-step work before implementation starts.
|
|
3051
|
-
3. You
|
|
3053
|
+
3. You want to create a plan first and add dependencies later.
|
|
3052
3054
|
4. You need to align with a user request to create a task list or plan.
|
|
3053
3055
|
|
|
3054
3056
|
## When NOT to Use This Tool
|
|
@@ -3064,12 +3066,13 @@ NOTE that you should not use this tool if you are only updating status or detail
|
|
|
3064
3066
|
- subject is required.
|
|
3065
3067
|
- listId is optional; omit to use the default list.
|
|
3066
3068
|
- Dependencies are validated for cycles; invalid cycles will be rejected.
|
|
3067
|
-
- For multi-step plans, you
|
|
3069
|
+
- For multi-step plans, you need to create structured task list without blockedBy and add dependencies later via TaskUpdate.
|
|
3068
3070
|
- status can be open, in_progress, blocked, done, or archived.
|
|
3069
3071
|
- activeForm will be generated from subject if omitted.
|
|
3070
3072
|
- blockedBy is always stored as an array (empty when not used).
|
|
3071
3073
|
- description and blockedBy are kept separate in JSON; any joining is only for terminal rendering.
|
|
3072
3074
|
- Task ordering relies on task id; do not use priority fields.
|
|
3075
|
+
- Use metadata.planFinalized="true" in TaskUpdate when dependencies are ready to be validated globally.
|
|
3073
3076
|
|
|
3074
3077
|
## Batch Input Notes
|
|
3075
3078
|
- Use tasks: [...] to create multiple tasks in one call.
|
|
@@ -3133,6 +3136,12 @@ Assistant: I'll create tasks in batch and keep your blockedBy values.
|
|
|
3133
3136
|
*Creates tasks with tasks array and explicit blockedBy fields*
|
|
3134
3137
|
</example>
|
|
3135
3138
|
|
|
3139
|
+
<example>
|
|
3140
|
+
User: Let's sketch the task list first and add dependencies later.
|
|
3141
|
+
Assistant: I'll create the tasks now and we can add blockedBy with TaskUpdate afterward.
|
|
3142
|
+
*Creates tasks without blockedBy*
|
|
3143
|
+
</example>
|
|
3144
|
+
|
|
3136
3145
|
<example>
|
|
3137
3146
|
User: Create just one task.
|
|
3138
3147
|
Assistant: I'll create a single task.
|
|
@@ -3141,15 +3150,11 @@ Assistant: I'll create a single task.
|
|
|
3141
3150
|
`;
|
|
3142
3151
|
|
|
3143
3152
|
// src/tools/interaction/TaskCreateTool/TaskCreateTool.tsx
|
|
3144
|
-
var shouldEnforceDependencyChain = () => {
|
|
3145
|
-
const value = process.env.PYB_TASK_DEPENDENCY_ENFORCE?.toLowerCase();
|
|
3146
|
-
if (!value) return true;
|
|
3147
|
-
return value !== "false" && value !== "0";
|
|
3148
|
-
};
|
|
3149
3153
|
var shouldAutoChainDependencies = () => {
|
|
3150
3154
|
const value = process.env.PYB_TASK_AUTOCHAIN?.toLowerCase();
|
|
3151
3155
|
return value === "true" || value === "1";
|
|
3152
3156
|
};
|
|
3157
|
+
var getMissingBlockedBy = (blockedBy, ids) => (blockedBy ?? []).filter((id) => !ids.has(id));
|
|
3153
3158
|
var taskInputSchema = z9.strictObject({
|
|
3154
3159
|
subject: z9.string().min(1),
|
|
3155
3160
|
description: z9.string().optional(),
|
|
@@ -3251,6 +3256,12 @@ var TaskCreateTool = {
|
|
|
3251
3256
|
renderResultForAssistant(output) {
|
|
3252
3257
|
return JSON.stringify(output, null, 2);
|
|
3253
3258
|
},
|
|
3259
|
+
renderToolResultMessage(output) {
|
|
3260
|
+
if ("error" in output) {
|
|
3261
|
+
return null;
|
|
3262
|
+
}
|
|
3263
|
+
return /* @__PURE__ */ React9.createElement(TaskList, { listId: output.listId });
|
|
3264
|
+
},
|
|
3254
3265
|
renderToolUseMessage() {
|
|
3255
3266
|
return null;
|
|
3256
3267
|
},
|
|
@@ -3296,18 +3307,22 @@ var TaskCreateTool = {
|
|
|
3296
3307
|
blockedBy: candidateBatch[index].blockedBy ?? [],
|
|
3297
3308
|
timestamp: Date.now()
|
|
3298
3309
|
});
|
|
3299
|
-
|
|
3300
|
-
|
|
3301
|
-
|
|
3302
|
-
|
|
3303
|
-
|
|
3304
|
-
|
|
3305
|
-
|
|
3306
|
-
|
|
3307
|
-
|
|
3308
|
-
|
|
3309
|
-
|
|
3310
|
-
|
|
3310
|
+
}
|
|
3311
|
+
}
|
|
3312
|
+
const candidateIds2 = new Set(candidateTasks2.map((task2) => task2.id));
|
|
3313
|
+
for (const task2 of candidateBatch) {
|
|
3314
|
+
const missing2 = getMissingBlockedBy(task2.blockedBy, candidateIds2);
|
|
3315
|
+
if (missing2.length > 0) {
|
|
3316
|
+
yield {
|
|
3317
|
+
type: "result",
|
|
3318
|
+
data: createTaskToolError({
|
|
3319
|
+
type: "validation",
|
|
3320
|
+
code: "TASK_BLOCKEDBY_NOT_FOUND",
|
|
3321
|
+
message: "BlockedBy tasks must exist in the same list",
|
|
3322
|
+
details: { taskId: task2.id, listId: listId2, missingBlockedBy: missing2 }
|
|
3323
|
+
})
|
|
3324
|
+
};
|
|
3325
|
+
return;
|
|
3311
3326
|
}
|
|
3312
3327
|
}
|
|
3313
3328
|
const cycles2 = findTaskCycles(buildTaskGraph(candidateTasks2));
|
|
@@ -3394,20 +3409,23 @@ var TaskCreateTool = {
|
|
|
3394
3409
|
blockedBy: candidateTask.blockedBy ?? [],
|
|
3395
3410
|
timestamp: Date.now()
|
|
3396
3411
|
});
|
|
3397
|
-
if (shouldEnforceDependencyChain()) {
|
|
3398
|
-
yield {
|
|
3399
|
-
type: "result",
|
|
3400
|
-
data: createTaskToolError({
|
|
3401
|
-
type: "validation",
|
|
3402
|
-
code: "TASK_DEPENDENCY_CHAIN_REQUIRED",
|
|
3403
|
-
message: "Task dependency chain required for multi-step plans",
|
|
3404
|
-
details: { taskId: candidateTask.id, listId: listId2 }
|
|
3405
|
-
})
|
|
3406
|
-
};
|
|
3407
|
-
return;
|
|
3408
|
-
}
|
|
3409
3412
|
}
|
|
3410
3413
|
const candidateTasks = [...tasks, candidateTask];
|
|
3414
|
+
const candidateIds = new Set(candidateTasks.map((task2) => task2.id));
|
|
3415
|
+
const missing = getMissingBlockedBy(candidateTask.blockedBy, candidateIds);
|
|
3416
|
+
if (missing.length > 0) {
|
|
3417
|
+
const { listId: listId2 } = getTaskListPaths(input.listId);
|
|
3418
|
+
yield {
|
|
3419
|
+
type: "result",
|
|
3420
|
+
data: createTaskToolError({
|
|
3421
|
+
type: "validation",
|
|
3422
|
+
code: "TASK_BLOCKEDBY_NOT_FOUND",
|
|
3423
|
+
message: "BlockedBy tasks must exist in the same list",
|
|
3424
|
+
details: { taskId: candidateTask.id, listId: listId2, missingBlockedBy: missing }
|
|
3425
|
+
})
|
|
3426
|
+
};
|
|
3427
|
+
return;
|
|
3428
|
+
}
|
|
3411
3429
|
const cycles = findTaskCycles(buildTaskGraph(candidateTasks));
|
|
3412
3430
|
if (cycles.length > 0) {
|
|
3413
3431
|
yield {
|
|
@@ -3587,6 +3605,7 @@ NOTE that TaskList is for summaries and readiness; use TaskGet for details.
|
|
|
3587
3605
|
- listId is optional; omit to use the default list.
|
|
3588
3606
|
- status filters the returned items; omit to exclude archived tasks by default.
|
|
3589
3607
|
- includeBlocked=false returns only ready items.
|
|
3608
|
+
- blockedBy may be empty early in planning and will appear as dependencies are added.
|
|
3590
3609
|
|
|
3591
3610
|
## Examples of When to Use TaskList
|
|
3592
3611
|
|
|
@@ -3601,6 +3620,12 @@ User: Show only in-progress items.
|
|
|
3601
3620
|
Assistant: I'll list tasks filtered by status.
|
|
3602
3621
|
*Lists tasks with status filter*
|
|
3603
3622
|
</example>
|
|
3623
|
+
|
|
3624
|
+
<example>
|
|
3625
|
+
User: We just added dependencies, can we see what's blocked now?
|
|
3626
|
+
Assistant: I'll list tasks to show the updated ready/blocked breakdown.
|
|
3627
|
+
*Lists tasks with ready/blocked breakdown*
|
|
3628
|
+
</example>
|
|
3604
3629
|
`;
|
|
3605
3630
|
|
|
3606
3631
|
// src/tools/interaction/TaskListTool/TaskListTool.tsx
|
|
@@ -3680,6 +3705,7 @@ var TaskListTool = {
|
|
|
3680
3705
|
};
|
|
3681
3706
|
|
|
3682
3707
|
// src/tools/interaction/TaskUpdateTool/TaskUpdateTool.tsx
|
|
3708
|
+
import React10 from "react";
|
|
3683
3709
|
import { z as z12 } from "zod";
|
|
3684
3710
|
|
|
3685
3711
|
// src/tools/interaction/TaskUpdateTool/prompt.ts
|
|
@@ -3707,7 +3733,8 @@ NOTE that TaskUpdate should be used when you need to persist task changes.
|
|
|
3707
3733
|
- listId is optional; omit to use the default list.
|
|
3708
3734
|
- If you provide status=done/archived and a parent exists, parent must already be completed.
|
|
3709
3735
|
- Dependencies are validated for cycles; invalid cycles will be rejected.
|
|
3710
|
-
-
|
|
3736
|
+
- Use TaskUpdate to add blockedBy after tasks are created.
|
|
3737
|
+
- You can set metadata.planFinalized="true" to trigger a full dependency validation pass.
|
|
3711
3738
|
- If an update fails due to a conflict, refetch the task and retry.
|
|
3712
3739
|
- activeForm will be generated from subject if omitted.
|
|
3713
3740
|
- blockedBy is always stored as an array (empty when not used).
|
|
@@ -3734,26 +3761,26 @@ Assistant: I'll update dependencies.
|
|
|
3734
3761
|
</example>
|
|
3735
3762
|
|
|
3736
3763
|
<example>
|
|
3737
|
-
User:
|
|
3738
|
-
Assistant: I'll
|
|
3739
|
-
*
|
|
3764
|
+
User: We've finished adding dependencies and want to finalize the plan.
|
|
3765
|
+
Assistant: I'll set metadata.planFinalized to trigger the global validation.
|
|
3766
|
+
*Updates metadata.planFinalized to "true"*
|
|
3740
3767
|
</example>
|
|
3741
3768
|
|
|
3742
3769
|
<example>
|
|
3743
|
-
User:
|
|
3744
|
-
Assistant: I
|
|
3745
|
-
*
|
|
3770
|
+
User: The task update failed due to a conflict.
|
|
3771
|
+
Assistant: I'll refetch the task and retry the update.
|
|
3772
|
+
*Fetches task, then updates again*
|
|
3746
3773
|
</example>
|
|
3747
3774
|
`;
|
|
3748
3775
|
|
|
3749
3776
|
// src/tools/interaction/TaskUpdateTool/TaskUpdateTool.tsx
|
|
3750
|
-
var shouldEnforceDependencyChain2 = () => {
|
|
3751
|
-
const value = process.env.PYB_TASK_DEPENDENCY_ENFORCE?.toLowerCase();
|
|
3752
|
-
if (!value) return true;
|
|
3753
|
-
return value !== "false" && value !== "0";
|
|
3754
|
-
};
|
|
3755
3777
|
var isCompletedStatus = (status) => status === "done" || status === "archived";
|
|
3756
3778
|
var normalizeDeps = (items) => [...items ?? []].filter(Boolean).sort();
|
|
3779
|
+
var normalizeBlockedBy = (items) => {
|
|
3780
|
+
if (!items) return void 0;
|
|
3781
|
+
const filtered = items.filter(Boolean);
|
|
3782
|
+
return Array.from(new Set(filtered));
|
|
3783
|
+
};
|
|
3757
3784
|
var depsChanged = (prev, next) => {
|
|
3758
3785
|
if (prev.parent !== next.parent) return true;
|
|
3759
3786
|
const prevBlockedBy = normalizeDeps(prev.blockedBy);
|
|
@@ -3776,6 +3803,18 @@ var getDepsSnapshot = (task) => ({
|
|
|
3776
3803
|
parent: task.parent,
|
|
3777
3804
|
related: task.related ?? []
|
|
3778
3805
|
});
|
|
3806
|
+
var getMissingBlockedBy2 = (blockedBy, ids) => (blockedBy ?? []).filter((id) => !ids.has(id));
|
|
3807
|
+
var isPlanFinalized = (metadata) => metadata?.planFinalized === "true";
|
|
3808
|
+
var compareTaskId = (left, right) => {
|
|
3809
|
+
const leftValue = Number(left.id);
|
|
3810
|
+
const rightValue = Number(right.id);
|
|
3811
|
+
const leftIsNumber = !Number.isNaN(leftValue);
|
|
3812
|
+
const rightIsNumber = !Number.isNaN(rightValue);
|
|
3813
|
+
if (leftIsNumber && rightIsNumber) return leftValue - rightValue;
|
|
3814
|
+
if (leftIsNumber) return -1;
|
|
3815
|
+
if (rightIsNumber) return 1;
|
|
3816
|
+
return left.id.localeCompare(right.id);
|
|
3817
|
+
};
|
|
3779
3818
|
var inputSchema12 = z12.strictObject({
|
|
3780
3819
|
listId: z12.string().optional(),
|
|
3781
3820
|
taskId: z12.string().min(1),
|
|
@@ -3824,6 +3863,12 @@ var TaskUpdateTool = {
|
|
|
3824
3863
|
renderResultForAssistant(output) {
|
|
3825
3864
|
return JSON.stringify(output, null, 2);
|
|
3826
3865
|
},
|
|
3866
|
+
renderToolResultMessage(output) {
|
|
3867
|
+
if ("error" in output || !output.depsChanged) {
|
|
3868
|
+
return null;
|
|
3869
|
+
}
|
|
3870
|
+
return /* @__PURE__ */ React10.createElement(TaskList, { listId: output.listId });
|
|
3871
|
+
},
|
|
3827
3872
|
renderToolUseMessage() {
|
|
3828
3873
|
return null;
|
|
3829
3874
|
},
|
|
@@ -3844,6 +3889,7 @@ var TaskUpdateTool = {
|
|
|
3844
3889
|
}
|
|
3845
3890
|
const tasks = listTasks({ listId: input.listId });
|
|
3846
3891
|
const subject = input.subject ?? existing.subject;
|
|
3892
|
+
const nextBlockedBy = normalizeBlockedBy(input.blockedBy);
|
|
3847
3893
|
const updatedTask = {
|
|
3848
3894
|
...existing,
|
|
3849
3895
|
subject,
|
|
@@ -3854,7 +3900,7 @@ var TaskUpdateTool = {
|
|
|
3854
3900
|
assignee: input.assignee ?? existing.assignee,
|
|
3855
3901
|
metadata: input.metadata ?? existing.metadata,
|
|
3856
3902
|
archived: input.archived ?? existing.archived,
|
|
3857
|
-
blockedBy:
|
|
3903
|
+
blockedBy: nextBlockedBy ?? existing.blockedBy,
|
|
3858
3904
|
parent: input.parent ?? existing.parent,
|
|
3859
3905
|
related: input.related ?? existing.related,
|
|
3860
3906
|
legacyTodoId: input.legacyTodoId ?? existing.legacyTodoId
|
|
@@ -3862,6 +3908,7 @@ var TaskUpdateTool = {
|
|
|
3862
3908
|
const candidateTasks = tasks.map(
|
|
3863
3909
|
(task) => task.id === existing.id ? updatedTask : task
|
|
3864
3910
|
);
|
|
3911
|
+
const candidateIds = new Set(candidateTasks.map((task) => task.id));
|
|
3865
3912
|
if (tasks.length > 1 && tasks[0]?.id !== updatedTask.id && (updatedTask.blockedBy?.length ?? 0) === 0) {
|
|
3866
3913
|
emitReminderEvent("task.dependency_chain_missing", {
|
|
3867
3914
|
listId,
|
|
@@ -3869,14 +3916,17 @@ var TaskUpdateTool = {
|
|
|
3869
3916
|
blockedBy: updatedTask.blockedBy ?? [],
|
|
3870
3917
|
timestamp: Date.now()
|
|
3871
3918
|
});
|
|
3872
|
-
|
|
3919
|
+
}
|
|
3920
|
+
if (input.blockedBy) {
|
|
3921
|
+
const missing = getMissingBlockedBy2(updatedTask.blockedBy, candidateIds);
|
|
3922
|
+
if (missing.length > 0) {
|
|
3873
3923
|
yield {
|
|
3874
3924
|
type: "result",
|
|
3875
3925
|
data: createTaskToolError({
|
|
3876
3926
|
type: "validation",
|
|
3877
|
-
code: "
|
|
3878
|
-
message: "
|
|
3879
|
-
details: { taskId: updatedTask.id, listId }
|
|
3927
|
+
code: "TASK_BLOCKEDBY_NOT_FOUND",
|
|
3928
|
+
message: "BlockedBy tasks must exist in the same list",
|
|
3929
|
+
details: { taskId: updatedTask.id, listId, missingBlockedBy: missing }
|
|
3880
3930
|
})
|
|
3881
3931
|
};
|
|
3882
3932
|
return;
|
|
@@ -3895,6 +3945,39 @@ var TaskUpdateTool = {
|
|
|
3895
3945
|
};
|
|
3896
3946
|
return;
|
|
3897
3947
|
}
|
|
3948
|
+
const nextMetadata = input.metadata ?? existing.metadata;
|
|
3949
|
+
if (isPlanFinalized(nextMetadata) && !isPlanFinalized(existing.metadata)) {
|
|
3950
|
+
const activeTasks = candidateTasks.filter((task) => task.status !== "archived");
|
|
3951
|
+
const ordered = [...activeTasks].sort(compareTaskId);
|
|
3952
|
+
const firstTaskId = ordered[0]?.id;
|
|
3953
|
+
for (const task of activeTasks) {
|
|
3954
|
+
const missing = getMissingBlockedBy2(task.blockedBy, candidateIds);
|
|
3955
|
+
if (missing.length > 0) {
|
|
3956
|
+
yield {
|
|
3957
|
+
type: "result",
|
|
3958
|
+
data: createTaskToolError({
|
|
3959
|
+
type: "validation",
|
|
3960
|
+
code: "TASK_BLOCKEDBY_NOT_FOUND",
|
|
3961
|
+
message: "BlockedBy tasks must exist in the same list",
|
|
3962
|
+
details: { taskId: task.id, listId, missingBlockedBy: missing }
|
|
3963
|
+
})
|
|
3964
|
+
};
|
|
3965
|
+
return;
|
|
3966
|
+
}
|
|
3967
|
+
if (task.id !== firstTaskId && (task.blockedBy?.length ?? 0) === 0) {
|
|
3968
|
+
yield {
|
|
3969
|
+
type: "result",
|
|
3970
|
+
data: createTaskToolError({
|
|
3971
|
+
type: "validation",
|
|
3972
|
+
code: "TASK_DEPENDENCY_FINALIZE_REQUIRED",
|
|
3973
|
+
message: "Task dependency chain required before planFinalized",
|
|
3974
|
+
details: { taskId: task.id, listId }
|
|
3975
|
+
})
|
|
3976
|
+
};
|
|
3977
|
+
return;
|
|
3978
|
+
}
|
|
3979
|
+
}
|
|
3980
|
+
}
|
|
3898
3981
|
if (input.status && isCompletedStatus(input.status)) {
|
|
3899
3982
|
const parentId = updatedTask.parent;
|
|
3900
3983
|
if (parentId) {
|
|
@@ -3929,7 +4012,7 @@ var TaskUpdateTool = {
|
|
|
3929
4012
|
assignee: input.assignee,
|
|
3930
4013
|
metadata: input.metadata,
|
|
3931
4014
|
archived: input.archived,
|
|
3932
|
-
blockedBy:
|
|
4015
|
+
blockedBy: nextBlockedBy,
|
|
3933
4016
|
parent: input.parent,
|
|
3934
4017
|
related: input.related,
|
|
3935
4018
|
baseVersion,
|
|
@@ -3937,6 +4020,7 @@ var TaskUpdateTool = {
|
|
|
3937
4020
|
},
|
|
3938
4021
|
{ listId: input.listId, allowMerge: input.allowMerge }
|
|
3939
4022
|
);
|
|
4023
|
+
const didDepsChange = depsChanged(existing, result.task);
|
|
3940
4024
|
emitReminderEvent("task.updated", {
|
|
3941
4025
|
listId,
|
|
3942
4026
|
taskId: result.task.id,
|
|
@@ -3952,7 +4036,7 @@ var TaskUpdateTool = {
|
|
|
3952
4036
|
timestamp: Date.now()
|
|
3953
4037
|
});
|
|
3954
4038
|
}
|
|
3955
|
-
if (
|
|
4039
|
+
if (didDepsChange) {
|
|
3956
4040
|
emitReminderEvent("task.deps_changed", {
|
|
3957
4041
|
listId,
|
|
3958
4042
|
taskId: result.task.id,
|
|
@@ -3965,7 +4049,8 @@ var TaskUpdateTool = {
|
|
|
3965
4049
|
type: "result",
|
|
3966
4050
|
data: {
|
|
3967
4051
|
listId,
|
|
3968
|
-
item: toTaskDetail(result.task)
|
|
4052
|
+
item: toTaskDetail(result.task),
|
|
4053
|
+
depsChanged: didDepsChange
|
|
3969
4054
|
}
|
|
3970
4055
|
};
|
|
3971
4056
|
} catch (error) {
|