pybao-cli 1.4.38 → 1.4.39
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-N62XVC35.js +47 -0
- package/dist/{acp-VM2J53W4.js → acp-6LBQJVMX.js} +29 -29
- package/dist/{agentsValidate-GFWWYUUT.js → agentsValidate-SLBW2ESZ.js} +7 -7
- package/dist/{ask-PEAASZU5.js → ask-DB4F3WJG.js} +28 -28
- package/dist/{autoUpdater-3MO2ERDJ.js → autoUpdater-CYDJVIEC.js} +3 -3
- package/dist/{chunk-2PTOXRBC.js → chunk-3LNPU7WH.js} +3 -3
- package/dist/{chunk-KJAUAOX4.js → chunk-4LXZDGCO.js} +3 -3
- package/dist/{chunk-65QK3573.js → chunk-6KSM5M7T.js} +1 -1
- package/dist/{chunk-4HUEIGXE.js → chunk-7TGWBYFN.js} +4 -4
- package/dist/{chunk-3BPMIKJM.js → chunk-7WCSSH3C.js} +3 -3
- package/dist/{chunk-UAPC4AG3.js → chunk-AI7FJQR4.js} +78 -20
- package/dist/chunk-AI7FJQR4.js.map +7 -0
- package/dist/{chunk-4YELTGBJ.js → chunk-DEYAAT6H.js} +3 -3
- package/dist/{chunk-4VNRS435.js → chunk-DLBWS3IW.js} +1 -1
- package/dist/{chunk-IHIHIPNE.js → chunk-E5EB22W4.js} +4 -4
- package/dist/{chunk-VFIFN6QL.js → chunk-GD43B2GV.js} +1 -1
- package/dist/{chunk-VINZKV6L.js → chunk-GL3ZM7F3.js} +3 -3
- package/dist/{chunk-WYUAUOQL.js → chunk-GXHSGPIF.js} +4 -4
- package/dist/{chunk-ZTLEOE22.js → chunk-HD4IO3I5.js} +38 -55
- package/dist/{chunk-ZTLEOE22.js.map → chunk-HD4IO3I5.js.map} +2 -2
- package/dist/{chunk-Q6D4CWM7.js → chunk-KNLFFHBT.js} +2 -2
- package/dist/{chunk-DR3UKEHX.js → chunk-KWPH7MSB.js} +1 -1
- package/dist/{chunk-NV4KLIR4.js → chunk-N4GXGPVA.js} +1 -1
- package/dist/{chunk-2TPHG5NF.js → chunk-NMJYV37P.js} +2 -2
- package/dist/{chunk-5F5QQXYO.js → chunk-NNE44UHQ.js} +2 -2
- package/dist/{chunk-7D6P6FJI.js → chunk-O5OT26P6.js} +1 -1
- package/dist/{chunk-KXOZAPOR.js → chunk-RS2N2KBH.js} +164 -67
- package/dist/chunk-RS2N2KBH.js.map +7 -0
- package/dist/{chunk-F33UZKH2.js → chunk-SBPVAFBQ.js} +2 -2
- package/dist/{chunk-4QZIAEFU.js → chunk-SSKQUKI7.js} +1 -1
- package/dist/{chunk-YSGQ33QO.js → chunk-TNAAGT3Q.js} +3 -3
- package/dist/{chunk-SV44GQBZ.js → chunk-UK4IHZU3.js} +2 -2
- package/dist/{chunk-POFRZWP7.js → chunk-UUWI4VWU.js} +1 -1
- package/dist/{chunk-POFRZWP7.js.map → chunk-UUWI4VWU.js.map} +1 -1
- package/dist/{chunk-PAZ5OZZ3.js → chunk-VFQU3JSH.js} +4 -4
- package/dist/{chunk-NDU2T5RK.js → chunk-VHTIDAOJ.js} +2 -2
- package/dist/{chunk-Q5VMFXN3.js → chunk-VXQMCAPS.js} +1 -1
- package/dist/{chunk-ZBXRD5R5.js → chunk-YJ2WXW2J.js} +3 -3
- package/dist/{chunk-FQBPNSQM.js → chunk-ZGVGFR4C.js} +1 -1
- package/dist/{cli-BMCKTX2V.js → cli-FMCSS5QE.js} +87 -87
- package/dist/commands-IJTOU4P3.js +51 -0
- package/dist/{config-CKEF5MIR.js → config-YRHKZJO6.js} +4 -4
- package/dist/{context-CV3LBU7I.js → context-ZZO64MRN.js} +6 -6
- package/dist/{customCommands-JK4SVCOD.js → customCommands-2S7LYMG7.js} +4 -4
- package/dist/{env-2D5PYXT3.js → env-PQDRZBAW.js} +2 -2
- package/dist/{file-DTOJ46HD.js → file-X7BE3MNR.js} +4 -4
- package/dist/index.js +3 -3
- package/dist/{llm-3C5ICYYM.js → llm-3KCTIVOM.js} +29 -29
- package/dist/{llmLazy-7NGDJTCJ.js → llmLazy-HCTXTHRZ.js} +1 -1
- package/dist/{loader-K64KKCLP.js → loader-DKMJSH4V.js} +4 -4
- package/dist/{lsp-UIWT5EAB.js → lsp-IXEAYT4K.js} +6 -6
- package/dist/{lspAnchor-XM5HYD36.js → lspAnchor-FKXOKCQZ.js} +6 -6
- package/dist/{mcp-WF3IJF4P.js → mcp-ZUJD3E4V.js} +7 -7
- package/dist/{mentionProcessor-FBOG655N.js → mentionProcessor-7GXI47P3.js} +6 -6
- package/dist/{messages-S6BQMC7F.js → messages-55HNRTQC.js} +1 -1
- package/dist/{model-N6XZCIO2.js → model-R5X6XP7I.js} +5 -5
- package/dist/{openai-YJOBEGF4.js → openai-FM7DX3GB.js} +5 -5
- package/dist/{outputStyles-UJISJCZB.js → outputStyles-ZLGIDCCJ.js} +4 -4
- package/dist/{pluginRuntime-B5FLWZCB.js → pluginRuntime-REF3E5F5.js} +6 -6
- package/dist/{pluginValidation-YLGUCTSN.js → pluginValidation-E33USDYW.js} +6 -6
- package/dist/prompts-W7TUXY74.js +53 -0
- package/dist/{pybAgentSessionLoad-ZIJOJP53.js → pybAgentSessionLoad-PGTH6SZH.js} +4 -4
- package/dist/{pybAgentSessionResume-32HYMEZD.js → pybAgentSessionResume-IVBY65PN.js} +4 -4
- package/dist/{pybAgentStreamJsonSession-33GITQPO.js → pybAgentStreamJsonSession-N2Q6LQHX.js} +1 -1
- package/dist/{pybHooks-XQH57YXB.js → pybHooks-WIA5KKVN.js} +4 -4
- package/dist/query-BTG2T7NV.js +55 -0
- package/dist/{registry-AWWHDPCP.js → registry-PT3XVAT6.js} +5 -5
- package/dist/{ripgrep-HM6FRMPY.js → ripgrep-2VWCSPH4.js} +3 -3
- package/dist/{skillMarketplace-RFELE7ZN.js → skillMarketplace-NHPAPZTS.js} +3 -3
- package/dist/{state-3MIS3KPI.js → state-4AIVX6VM.js} +2 -2
- package/dist/{theme-3W3YPAC4.js → theme-LKZFY5TU.js} +5 -5
- package/dist/{toolPermissionSettings-Q7A55J23.js → toolPermissionSettings-OVFT6D3R.js} +6 -6
- package/dist/tools-6ONPKOSL.js +52 -0
- package/dist/{userInput-Y5GXDITH.js → userInput-RHGZ225B.js} +30 -30
- package/package.json +1 -1
- package/dist/REPL-7KQEJZQW.js +0 -47
- package/dist/chunk-KXOZAPOR.js.map +0 -7
- package/dist/chunk-UAPC4AG3.js.map +0 -7
- package/dist/commands-MTPBHNKM.js +0 -51
- package/dist/prompts-YL2Q36DH.js +0 -53
- package/dist/query-UI6I2555.js +0 -55
- package/dist/tools-VFHVJUG3.js +0 -52
- /package/dist/{REPL-7KQEJZQW.js.map → REPL-N62XVC35.js.map} +0 -0
- /package/dist/{acp-VM2J53W4.js.map → acp-6LBQJVMX.js.map} +0 -0
- /package/dist/{agentsValidate-GFWWYUUT.js.map → agentsValidate-SLBW2ESZ.js.map} +0 -0
- /package/dist/{ask-PEAASZU5.js.map → ask-DB4F3WJG.js.map} +0 -0
- /package/dist/{autoUpdater-3MO2ERDJ.js.map → autoUpdater-CYDJVIEC.js.map} +0 -0
- /package/dist/{chunk-2PTOXRBC.js.map → chunk-3LNPU7WH.js.map} +0 -0
- /package/dist/{chunk-KJAUAOX4.js.map → chunk-4LXZDGCO.js.map} +0 -0
- /package/dist/{chunk-65QK3573.js.map → chunk-6KSM5M7T.js.map} +0 -0
- /package/dist/{chunk-4HUEIGXE.js.map → chunk-7TGWBYFN.js.map} +0 -0
- /package/dist/{chunk-3BPMIKJM.js.map → chunk-7WCSSH3C.js.map} +0 -0
- /package/dist/{chunk-4YELTGBJ.js.map → chunk-DEYAAT6H.js.map} +0 -0
- /package/dist/{chunk-4VNRS435.js.map → chunk-DLBWS3IW.js.map} +0 -0
- /package/dist/{chunk-IHIHIPNE.js.map → chunk-E5EB22W4.js.map} +0 -0
- /package/dist/{chunk-VFIFN6QL.js.map → chunk-GD43B2GV.js.map} +0 -0
- /package/dist/{chunk-VINZKV6L.js.map → chunk-GL3ZM7F3.js.map} +0 -0
- /package/dist/{chunk-WYUAUOQL.js.map → chunk-GXHSGPIF.js.map} +0 -0
- /package/dist/{chunk-Q6D4CWM7.js.map → chunk-KNLFFHBT.js.map} +0 -0
- /package/dist/{chunk-DR3UKEHX.js.map → chunk-KWPH7MSB.js.map} +0 -0
- /package/dist/{chunk-NV4KLIR4.js.map → chunk-N4GXGPVA.js.map} +0 -0
- /package/dist/{chunk-2TPHG5NF.js.map → chunk-NMJYV37P.js.map} +0 -0
- /package/dist/{chunk-5F5QQXYO.js.map → chunk-NNE44UHQ.js.map} +0 -0
- /package/dist/{chunk-7D6P6FJI.js.map → chunk-O5OT26P6.js.map} +0 -0
- /package/dist/{chunk-F33UZKH2.js.map → chunk-SBPVAFBQ.js.map} +0 -0
- /package/dist/{chunk-4QZIAEFU.js.map → chunk-SSKQUKI7.js.map} +0 -0
- /package/dist/{chunk-YSGQ33QO.js.map → chunk-TNAAGT3Q.js.map} +0 -0
- /package/dist/{chunk-SV44GQBZ.js.map → chunk-UK4IHZU3.js.map} +0 -0
- /package/dist/{chunk-PAZ5OZZ3.js.map → chunk-VFQU3JSH.js.map} +0 -0
- /package/dist/{chunk-NDU2T5RK.js.map → chunk-VHTIDAOJ.js.map} +0 -0
- /package/dist/{chunk-Q5VMFXN3.js.map → chunk-VXQMCAPS.js.map} +0 -0
- /package/dist/{chunk-ZBXRD5R5.js.map → chunk-YJ2WXW2J.js.map} +0 -0
- /package/dist/{chunk-FQBPNSQM.js.map → chunk-ZGVGFR4C.js.map} +0 -0
- /package/dist/{cli-BMCKTX2V.js.map → cli-FMCSS5QE.js.map} +0 -0
- /package/dist/{commands-MTPBHNKM.js.map → commands-IJTOU4P3.js.map} +0 -0
- /package/dist/{config-CKEF5MIR.js.map → config-YRHKZJO6.js.map} +0 -0
- /package/dist/{context-CV3LBU7I.js.map → context-ZZO64MRN.js.map} +0 -0
- /package/dist/{customCommands-JK4SVCOD.js.map → customCommands-2S7LYMG7.js.map} +0 -0
- /package/dist/{env-2D5PYXT3.js.map → env-PQDRZBAW.js.map} +0 -0
- /package/dist/{file-DTOJ46HD.js.map → file-X7BE3MNR.js.map} +0 -0
- /package/dist/{llm-3C5ICYYM.js.map → llm-3KCTIVOM.js.map} +0 -0
- /package/dist/{llmLazy-7NGDJTCJ.js.map → llmLazy-HCTXTHRZ.js.map} +0 -0
- /package/dist/{loader-K64KKCLP.js.map → loader-DKMJSH4V.js.map} +0 -0
- /package/dist/{lsp-UIWT5EAB.js.map → lsp-IXEAYT4K.js.map} +0 -0
- /package/dist/{lspAnchor-XM5HYD36.js.map → lspAnchor-FKXOKCQZ.js.map} +0 -0
- /package/dist/{mcp-WF3IJF4P.js.map → mcp-ZUJD3E4V.js.map} +0 -0
- /package/dist/{mentionProcessor-FBOG655N.js.map → mentionProcessor-7GXI47P3.js.map} +0 -0
- /package/dist/{messages-S6BQMC7F.js.map → messages-55HNRTQC.js.map} +0 -0
- /package/dist/{model-N6XZCIO2.js.map → model-R5X6XP7I.js.map} +0 -0
- /package/dist/{openai-YJOBEGF4.js.map → openai-FM7DX3GB.js.map} +0 -0
- /package/dist/{outputStyles-UJISJCZB.js.map → outputStyles-ZLGIDCCJ.js.map} +0 -0
- /package/dist/{pluginRuntime-B5FLWZCB.js.map → pluginRuntime-REF3E5F5.js.map} +0 -0
- /package/dist/{pluginValidation-YLGUCTSN.js.map → pluginValidation-E33USDYW.js.map} +0 -0
- /package/dist/{prompts-YL2Q36DH.js.map → prompts-W7TUXY74.js.map} +0 -0
- /package/dist/{pybAgentSessionLoad-ZIJOJP53.js.map → pybAgentSessionLoad-PGTH6SZH.js.map} +0 -0
- /package/dist/{pybAgentSessionResume-32HYMEZD.js.map → pybAgentSessionResume-IVBY65PN.js.map} +0 -0
- /package/dist/{pybAgentStreamJsonSession-33GITQPO.js.map → pybAgentStreamJsonSession-N2Q6LQHX.js.map} +0 -0
- /package/dist/{pybHooks-XQH57YXB.js.map → pybHooks-WIA5KKVN.js.map} +0 -0
- /package/dist/{query-UI6I2555.js.map → query-BTG2T7NV.js.map} +0 -0
- /package/dist/{registry-AWWHDPCP.js.map → registry-PT3XVAT6.js.map} +0 -0
- /package/dist/{ripgrep-HM6FRMPY.js.map → ripgrep-2VWCSPH4.js.map} +0 -0
- /package/dist/{skillMarketplace-RFELE7ZN.js.map → skillMarketplace-NHPAPZTS.js.map} +0 -0
- /package/dist/{state-3MIS3KPI.js.map → state-4AIVX6VM.js.map} +0 -0
- /package/dist/{theme-3W3YPAC4.js.map → theme-LKZFY5TU.js.map} +0 -0
- /package/dist/{toolPermissionSettings-Q7A55J23.js.map → toolPermissionSettings-OVFT6D3R.js.map} +0 -0
- /package/dist/{tools-VFHVJUG3.js.map → tools-6ONPKOSL.js.map} +0 -0
- /package/dist/{userInput-Y5GXDITH.js.map → userInput-RHGZ225B.js.map} +0 -0
|
@@ -8,12 +8,12 @@ import {
|
|
|
8
8
|
} from "./chunk-BJSWTHRM.js";
|
|
9
9
|
import {
|
|
10
10
|
debug
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-O5OT26P6.js";
|
|
12
12
|
import {
|
|
13
13
|
getCwd,
|
|
14
14
|
getXdgConfigDir,
|
|
15
15
|
logError
|
|
16
|
-
} from "./chunk-
|
|
16
|
+
} from "./chunk-ZGVGFR4C.js";
|
|
17
17
|
|
|
18
18
|
// src/utils/agent/loader.ts
|
|
19
19
|
import {
|
|
@@ -2,7 +2,7 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
getSessionProjectDir
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-NNE44UHQ.js";
|
|
6
6
|
import {
|
|
7
7
|
isUuid
|
|
8
8
|
} from "./chunk-5P7HBXTD.js";
|
|
@@ -2,11 +2,11 @@ import { createRequire as __pybCreateRequire } from "node:module";
|
|
|
2
2
|
const require = __pybCreateRequire(import.meta.url);
|
|
3
3
|
import {
|
|
4
4
|
listAllContentFiles
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-6KSM5M7T.js";
|
|
6
6
|
import {
|
|
7
7
|
getCwd,
|
|
8
8
|
logError
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-ZGVGFR4C.js";
|
|
10
10
|
|
|
11
11
|
// src/utils/fs/file.ts
|
|
12
12
|
import {
|
|
@@ -9,10 +9,10 @@ import {
|
|
|
9
9
|
PLAN_SLUG_VERBS,
|
|
10
10
|
getCwd,
|
|
11
11
|
resolveXdgDataPath
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-ZGVGFR4C.js";
|
|
13
13
|
import {
|
|
14
14
|
MACRO
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-UUWI4VWU.js";
|
|
16
16
|
|
|
17
17
|
// src/utils/protocol/pybAgentSessionLog.ts
|
|
18
18
|
import { execFileSync } from "child_process";
|
|
@@ -3,18 +3,18 @@ const require = __pybCreateRequire(import.meta.url);
|
|
|
3
3
|
import {
|
|
4
4
|
formatValidationResult,
|
|
5
5
|
validatePluginOrMarketplacePath
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-YJ2WXW2J.js";
|
|
7
7
|
import {
|
|
8
8
|
loadPybAgentSessionMessages
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-KWPH7MSB.js";
|
|
10
10
|
import {
|
|
11
11
|
listPybAgentSessions
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-SSKQUKI7.js";
|
|
13
13
|
import {
|
|
14
14
|
appendSessionCustomTitleRecord,
|
|
15
15
|
appendSessionJsonlFromMessage,
|
|
16
16
|
appendSessionTagRecord
|
|
17
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-NNE44UHQ.js";
|
|
18
18
|
import {
|
|
19
19
|
drainHookSystemPromptAdditions,
|
|
20
20
|
getHookTranscriptPath,
|
|
@@ -26,7 +26,7 @@ import {
|
|
|
26
26
|
runStopHooks,
|
|
27
27
|
runUserPromptSubmitHooks,
|
|
28
28
|
updateHookTranscriptForMessages
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-DEYAAT6H.js";
|
|
30
30
|
import {
|
|
31
31
|
DEFAULT_OUTPUT_STYLE,
|
|
32
32
|
getAvailableOutputStyles,
|
|
@@ -35,16 +35,16 @@ import {
|
|
|
35
35
|
getOutputStyleSystemPromptAdditions,
|
|
36
36
|
resolveOutputStyleName,
|
|
37
37
|
setCurrentOutputStyle
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-VHTIDAOJ.js";
|
|
39
39
|
import {
|
|
40
40
|
fetchCustomModels,
|
|
41
41
|
getModelFeatures
|
|
42
|
-
} from "./chunk-
|
|
42
|
+
} from "./chunk-UK4IHZU3.js";
|
|
43
43
|
import {
|
|
44
44
|
queryLLM,
|
|
45
45
|
queryQuick,
|
|
46
46
|
verifyApiKey
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-E5EB22W4.js";
|
|
48
48
|
import {
|
|
49
49
|
DEFAULT_TIMEOUT_MS,
|
|
50
50
|
FallbackToolUseRejectedMessage,
|
|
@@ -58,7 +58,7 @@ import {
|
|
|
58
58
|
listMCPServers,
|
|
59
59
|
loadMergedSettings,
|
|
60
60
|
normalizeSandboxRuntimeConfigFromSettings
|
|
61
|
-
} from "./chunk-
|
|
61
|
+
} from "./chunk-VFQU3JSH.js";
|
|
62
62
|
import {
|
|
63
63
|
addMarketplace,
|
|
64
64
|
disableSkillPlugin,
|
|
@@ -71,11 +71,11 @@ import {
|
|
|
71
71
|
refreshMarketplaceAsync,
|
|
72
72
|
removeMarketplace,
|
|
73
73
|
uninstallSkillPlugin
|
|
74
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-VXQMCAPS.js";
|
|
75
75
|
import {
|
|
76
76
|
loadToolPermissionContextFromDisk,
|
|
77
77
|
persistToolPermissionUpdateToDisk
|
|
78
|
-
} from "./chunk-
|
|
78
|
+
} from "./chunk-7WCSSH3C.js";
|
|
79
79
|
import {
|
|
80
80
|
applyToolPermissionContextUpdate,
|
|
81
81
|
applyToolPermissionContextUpdates,
|
|
@@ -90,11 +90,12 @@ import {
|
|
|
90
90
|
isTodoCompatEnabled,
|
|
91
91
|
listTasks,
|
|
92
92
|
migrateTodosToTasks,
|
|
93
|
+
readTaskEventLog,
|
|
93
94
|
resetReminderSession,
|
|
94
95
|
setTodos,
|
|
95
96
|
syncTodosToTasks,
|
|
96
97
|
systemReminderService
|
|
97
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-AI7FJQR4.js";
|
|
98
99
|
import {
|
|
99
100
|
getSessionState
|
|
100
101
|
} from "./chunk-ERMQRV55.js";
|
|
@@ -103,7 +104,7 @@ import {
|
|
|
103
104
|
getActiveAgents,
|
|
104
105
|
getAgentByType,
|
|
105
106
|
getAllAgents
|
|
106
|
-
} from "./chunk-
|
|
107
|
+
} from "./chunk-KNLFFHBT.js";
|
|
107
108
|
import {
|
|
108
109
|
API_ERROR_MESSAGE_PREFIX,
|
|
109
110
|
CANCEL_MESSAGE,
|
|
@@ -133,7 +134,7 @@ import {
|
|
|
133
134
|
processUserInput,
|
|
134
135
|
reorderMessages,
|
|
135
136
|
stripSystemMessages
|
|
136
|
-
} from "./chunk-
|
|
137
|
+
} from "./chunk-DLBWS3IW.js";
|
|
137
138
|
import {
|
|
138
139
|
getRequestStatus,
|
|
139
140
|
setRequestStatus,
|
|
@@ -163,7 +164,7 @@ import {
|
|
|
163
164
|
normalizeFilePath,
|
|
164
165
|
readTextContent,
|
|
165
166
|
writeTextContent
|
|
166
|
-
} from "./chunk-
|
|
167
|
+
} from "./chunk-NMJYV37P.js";
|
|
167
168
|
import {
|
|
168
169
|
parseBlockEdits
|
|
169
170
|
} from "./chunk-QWIBSCDN.js";
|
|
@@ -173,18 +174,18 @@ import {
|
|
|
173
174
|
ParserRegistry,
|
|
174
175
|
initParser,
|
|
175
176
|
loadLanguage
|
|
176
|
-
} from "./chunk-
|
|
177
|
+
} from "./chunk-7TGWBYFN.js";
|
|
177
178
|
import {
|
|
178
179
|
getSettingsFileCandidates,
|
|
179
180
|
loadSettingsWithLegacyFallback,
|
|
180
181
|
readSettingsFile
|
|
181
|
-
} from "./chunk-
|
|
182
|
+
} from "./chunk-N4GXGPVA.js";
|
|
182
183
|
import {
|
|
183
184
|
getCustomCommandDirectories,
|
|
184
185
|
hasCustomCommands,
|
|
185
186
|
loadCustomCommands,
|
|
186
187
|
reloadCustomCommands
|
|
187
|
-
} from "./chunk-
|
|
188
|
+
} from "./chunk-SBPVAFBQ.js";
|
|
188
189
|
import {
|
|
189
190
|
getSessionPlugins
|
|
190
191
|
} from "./chunk-BJSWTHRM.js";
|
|
@@ -192,7 +193,7 @@ import {
|
|
|
192
193
|
ModelManager,
|
|
193
194
|
getModelManager,
|
|
194
195
|
isDefaultSlowAndCapableModel
|
|
195
|
-
} from "./chunk-
|
|
196
|
+
} from "./chunk-4LXZDGCO.js";
|
|
196
197
|
import {
|
|
197
198
|
getCodeStyle,
|
|
198
199
|
getContext,
|
|
@@ -200,13 +201,13 @@ import {
|
|
|
200
201
|
getIsGit,
|
|
201
202
|
getProjectDocs,
|
|
202
203
|
getProjectStructureStatisticsBlock
|
|
203
|
-
} from "./chunk-
|
|
204
|
+
} from "./chunk-GXHSGPIF.js";
|
|
204
205
|
import {
|
|
205
206
|
ripGrep
|
|
206
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-6KSM5M7T.js";
|
|
207
208
|
import {
|
|
208
209
|
getTheme
|
|
209
|
-
} from "./chunk-
|
|
210
|
+
} from "./chunk-GD43B2GV.js";
|
|
210
211
|
import {
|
|
211
212
|
DEFAULT_GLOBAL_CONFIG,
|
|
212
213
|
enableConfigs,
|
|
@@ -219,7 +220,7 @@ import {
|
|
|
219
220
|
saveGlobalConfig,
|
|
220
221
|
setAllPointersToModel,
|
|
221
222
|
setModelPointer
|
|
222
|
-
} from "./chunk-
|
|
223
|
+
} from "./chunk-TNAAGT3Q.js";
|
|
223
224
|
import {
|
|
224
225
|
AbortError
|
|
225
226
|
} from "./chunk-RQVLBMP7.js";
|
|
@@ -228,7 +229,7 @@ import {
|
|
|
228
229
|
getCurrentRequest,
|
|
229
230
|
logUserFriendly,
|
|
230
231
|
markPhase
|
|
231
|
-
} from "./chunk-
|
|
232
|
+
} from "./chunk-O5OT26P6.js";
|
|
232
233
|
import {
|
|
233
234
|
ASCII_LOGO,
|
|
234
235
|
BunShell,
|
|
@@ -269,10 +270,10 @@ import {
|
|
|
269
270
|
setCwd,
|
|
270
271
|
shouldApplyToolOutputTruncation,
|
|
271
272
|
truncateToolOutput
|
|
272
|
-
} from "./chunk-
|
|
273
|
+
} from "./chunk-ZGVGFR4C.js";
|
|
273
274
|
import {
|
|
274
275
|
MACRO
|
|
275
|
-
} from "./chunk-
|
|
276
|
+
} from "./chunk-UUWI4VWU.js";
|
|
276
277
|
import {
|
|
277
278
|
__export
|
|
278
279
|
} from "./chunk-I3J4JYES.js";
|
|
@@ -453,7 +454,7 @@ var getCommandSubcommandPrefix = memoize(
|
|
|
453
454
|
var getCommandPrefix = memoize(
|
|
454
455
|
async (command4, abortSignal) => {
|
|
455
456
|
const { systemPrompt, userPrompt } = buildBashCommandPrefixDetectionPrompt(command4);
|
|
456
|
-
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryQuick: queryQuick2 } = await import("./llm-
|
|
457
|
+
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryQuick: queryQuick2 } = await import("./llm-3KCTIVOM.js");
|
|
457
458
|
const response = await queryQuick2({
|
|
458
459
|
systemPrompt,
|
|
459
460
|
userPrompt,
|
|
@@ -4255,7 +4256,7 @@ function formatParseError(error) {
|
|
|
4255
4256
|
return error instanceof Error ? error.message : String(error);
|
|
4256
4257
|
}
|
|
4257
4258
|
async function defaultGateQuery(args) {
|
|
4258
|
-
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryLLM: queryLLM2 } = await import("./llm-
|
|
4259
|
+
const { API_ERROR_MESSAGE_PREFIX: API_ERROR_MESSAGE_PREFIX2, queryLLM: queryLLM2 } = await import("./llm-3KCTIVOM.js");
|
|
4259
4260
|
const queryLLMFn = args.queryLLMOverride ?? queryLLM2;
|
|
4260
4261
|
const messages = [
|
|
4261
4262
|
{
|
|
@@ -6570,7 +6571,7 @@ var FileEditTool = {
|
|
|
6570
6571
|
const originalFileContent = currentFileContent;
|
|
6571
6572
|
let totalPatch = [];
|
|
6572
6573
|
const { SmartEdit } = await import("./smart-edit-AWHJDSU6.js");
|
|
6573
|
-
const { findLspAnchor } = await import("./lspAnchor-
|
|
6574
|
+
const { findLspAnchor } = await import("./lspAnchor-FKXOKCQZ.js");
|
|
6574
6575
|
for (const op of editOperations) {
|
|
6575
6576
|
const normalizedSearch = normalizeLineEndings(op.search);
|
|
6576
6577
|
const normalizedReplace = normalizeLineEndings(op.replace);
|
|
@@ -11205,7 +11206,7 @@ async function createAndStoreApiKey(accessToken) {
|
|
|
11205
11206
|
}
|
|
11206
11207
|
saveGlobalConfig(config2);
|
|
11207
11208
|
try {
|
|
11208
|
-
const { resetAnthropicClient } = await import("./llm-
|
|
11209
|
+
const { resetAnthropicClient } = await import("./llm-3KCTIVOM.js");
|
|
11209
11210
|
resetAnthropicClient();
|
|
11210
11211
|
} catch {
|
|
11211
11212
|
}
|
|
@@ -15487,7 +15488,7 @@ async function refreshPluginRuntimeFromInstalls() {
|
|
|
15487
15488
|
const existingRoots = getSessionPlugins().map((p) => p.rootDir);
|
|
15488
15489
|
const dirs = Array.from(/* @__PURE__ */ new Set([...existingRoots, ...installedRoots]));
|
|
15489
15490
|
if (dirs.length === 0) return [];
|
|
15490
|
-
const { configureSessionPlugins } = await import("./pluginRuntime-
|
|
15491
|
+
const { configureSessionPlugins } = await import("./pluginRuntime-REF3E5F5.js");
|
|
15491
15492
|
const { errors } = await configureSessionPlugins({ pluginDirs: dirs });
|
|
15492
15493
|
return errors;
|
|
15493
15494
|
}
|
|
@@ -16156,7 +16157,7 @@ async function call(onDone, context) {
|
|
|
16156
16157
|
ModelConfig,
|
|
16157
16158
|
{
|
|
16158
16159
|
onClose: () => {
|
|
16159
|
-
import("./model-
|
|
16160
|
+
import("./model-R5X6XP7I.js").then(({ reloadModelManager: reloadModelManager2 }) => {
|
|
16160
16161
|
reloadModelManager2();
|
|
16161
16162
|
triggerModelConfigChange();
|
|
16162
16163
|
onDone();
|
|
@@ -17113,9 +17114,19 @@ function getStatusColor(status) {
|
|
|
17113
17114
|
if (status === "blocked") return "#FF5555";
|
|
17114
17115
|
return "#FFD700";
|
|
17115
17116
|
}
|
|
17117
|
+
function formatTaskDetails(task) {
|
|
17118
|
+
const description3 = task.description?.trim();
|
|
17119
|
+
const blockedBy = (task.blockedBy ?? []).filter(Boolean);
|
|
17120
|
+
if (!description3 && blockedBy.length === 0) return null;
|
|
17121
|
+
if (blockedBy.length === 0) return description3 ?? null;
|
|
17122
|
+
const blockedText = `blocked by: ${blockedBy.join(", ")}`;
|
|
17123
|
+
if (description3) return `${description3} | ${blockedText}`;
|
|
17124
|
+
return blockedText;
|
|
17125
|
+
}
|
|
17116
17126
|
function renderTask(task) {
|
|
17117
17127
|
const color = getStatusColor(task.status);
|
|
17118
17128
|
const isFinished = task.status === "done" || task.status === "archived";
|
|
17129
|
+
const details = formatTaskDetails(task);
|
|
17119
17130
|
return /* @__PURE__ */ React47.createElement(Box36, { key: task.id, flexDirection: "row", gap: 1 }, /* @__PURE__ */ React47.createElement(Text40, null, "\u23BF"), /* @__PURE__ */ React47.createElement(Text40, { color, dimColor: isFinished }, getStatusIcon(task.status)), /* @__PURE__ */ React47.createElement(
|
|
17120
17131
|
Text40,
|
|
17121
17132
|
{
|
|
@@ -17125,7 +17136,17 @@ function renderTask(task) {
|
|
|
17125
17136
|
bold: task.status === "in_progress"
|
|
17126
17137
|
},
|
|
17127
17138
|
task.subject
|
|
17128
|
-
)
|
|
17139
|
+
), details ? /* @__PURE__ */ React47.createElement(
|
|
17140
|
+
Text40,
|
|
17141
|
+
{
|
|
17142
|
+
color,
|
|
17143
|
+
dimColor: isFinished,
|
|
17144
|
+
strikethrough: isFinished,
|
|
17145
|
+
bold: task.status === "in_progress"
|
|
17146
|
+
},
|
|
17147
|
+
" - ",
|
|
17148
|
+
details
|
|
17149
|
+
) : null);
|
|
17129
17150
|
}
|
|
17130
17151
|
function TaskList(props) {
|
|
17131
17152
|
const tasks = props.tasks ?? listTasks({ listId: props.listId });
|
|
@@ -24396,7 +24417,7 @@ function useStatusLine() {
|
|
|
24396
24417
|
// src/ui/components/PromptInput.tsx
|
|
24397
24418
|
async function interpretHashCommand(input) {
|
|
24398
24419
|
try {
|
|
24399
|
-
const { queryQuick: queryQuick2 } = await import("./llm-
|
|
24420
|
+
const { queryQuick: queryQuick2 } = await import("./llm-3KCTIVOM.js");
|
|
24400
24421
|
const systemPrompt = [
|
|
24401
24422
|
"You're helping the user structure notes that will be added to their PYB.md file.",
|
|
24402
24423
|
"Format the user's input into a well-structured note that will be useful for later reference.",
|
|
@@ -24709,7 +24730,7 @@ function PromptInput({
|
|
|
24709
24730
|
if (messages2.length) {
|
|
24710
24731
|
if (mode === "bash") {
|
|
24711
24732
|
onQuery(messages2, newAbortController).then(async () => {
|
|
24712
|
-
const { getCwd: getCwd2 } = await import("./state-
|
|
24733
|
+
const { getCwd: getCwd2 } = await import("./state-4AIVX6VM.js");
|
|
24713
24734
|
setCurrentPwd(getCwd2());
|
|
24714
24735
|
});
|
|
24715
24736
|
} else {
|
|
@@ -25405,9 +25426,7 @@ As you answer the user's questions, you can use the following context:
|
|
|
25405
25426
|
|
|
25406
25427
|
// src/services/system/taskWatcher.ts
|
|
25407
25428
|
import { existsSync as existsSync13, mkdirSync as mkdirSync5, statSync as statSync12, watch } from "fs";
|
|
25408
|
-
var
|
|
25409
|
-
process.env.PYB_TASK_WATCHER_POLL_INTERVAL_MS ?? 1e3
|
|
25410
|
-
);
|
|
25429
|
+
var getPollIntervalMs = () => Number(process.env.PYB_TASK_WATCHER_POLL_INTERVAL_MS ?? 1e3);
|
|
25411
25430
|
var taskWatchers = /* @__PURE__ */ new Map();
|
|
25412
25431
|
function ensureDirs(paths) {
|
|
25413
25432
|
mkdirSync5(paths.tasksDir, { recursive: true });
|
|
@@ -25428,6 +25447,10 @@ function getFingerprint(paths) {
|
|
|
25428
25447
|
const tasksMtime = getLatestMtime(paths.tasksDir);
|
|
25429
25448
|
return `${indexMtime}-${listMtime}-${tasksMtime}`;
|
|
25430
25449
|
}
|
|
25450
|
+
function getEventOffset(paths) {
|
|
25451
|
+
if (!existsSync13(paths.eventsPath)) return 0;
|
|
25452
|
+
return statSync12(paths.eventsPath).size;
|
|
25453
|
+
}
|
|
25431
25454
|
function buildReadySet(listId) {
|
|
25432
25455
|
const tasks = listTasks({ listId });
|
|
25433
25456
|
const readyBlocked = calculateReadyBlocked(tasks);
|
|
@@ -25458,22 +25481,25 @@ function emitListChanged(listId) {
|
|
|
25458
25481
|
});
|
|
25459
25482
|
return readyBlocked.ready;
|
|
25460
25483
|
}
|
|
25484
|
+
function refreshSignals(entry) {
|
|
25485
|
+
const readyTasks = emitListChanged(entry.listId);
|
|
25486
|
+
const nextReadyIds = new Set(readyTasks.map((task) => task.id));
|
|
25487
|
+
if (readySetChanged(nextReadyIds, entry.lastReadyIds)) {
|
|
25488
|
+
emitReminderEvent("task:ready_changed", {
|
|
25489
|
+
listId: entry.listId,
|
|
25490
|
+
timestamp: Date.now(),
|
|
25491
|
+
readyIds: Array.from(nextReadyIds)
|
|
25492
|
+
});
|
|
25493
|
+
entry.lastReadyIds = nextReadyIds;
|
|
25494
|
+
}
|
|
25495
|
+
}
|
|
25461
25496
|
function handleChange(entry) {
|
|
25462
25497
|
try {
|
|
25463
25498
|
const paths = getTaskListPaths(entry.listId);
|
|
25464
25499
|
const fingerprint = getFingerprint(paths);
|
|
25465
25500
|
if (fingerprint === entry.lastFingerprint) return;
|
|
25466
25501
|
entry.lastFingerprint = fingerprint;
|
|
25467
|
-
|
|
25468
|
-
const nextReadyIds = new Set(readyTasks.map((task) => task.id));
|
|
25469
|
-
if (readySetChanged(nextReadyIds, entry.lastReadyIds)) {
|
|
25470
|
-
emitReminderEvent("task:ready_changed", {
|
|
25471
|
-
listId: entry.listId,
|
|
25472
|
-
timestamp: Date.now(),
|
|
25473
|
-
readyIds: Array.from(nextReadyIds)
|
|
25474
|
-
});
|
|
25475
|
-
entry.lastReadyIds = nextReadyIds;
|
|
25476
|
-
}
|
|
25502
|
+
refreshSignals(entry);
|
|
25477
25503
|
} catch (error) {
|
|
25478
25504
|
logError(error);
|
|
25479
25505
|
debug.warn("TASK_WATCHER_HANDLE_CHANGE_FAILED", {
|
|
@@ -25485,38 +25511,107 @@ function handleChange(entry) {
|
|
|
25485
25511
|
function startPolling(entry, intervalMs) {
|
|
25486
25512
|
entry.pollingTimer = setInterval(() => handleChange(entry), intervalMs);
|
|
25487
25513
|
}
|
|
25488
|
-
function
|
|
25489
|
-
|
|
25490
|
-
|
|
25491
|
-
|
|
25492
|
-
|
|
25493
|
-
|
|
25494
|
-
|
|
25495
|
-
|
|
25496
|
-
|
|
25497
|
-
|
|
25498
|
-
|
|
25499
|
-
|
|
25500
|
-
taskWatchers.set(paths.listId, entry);
|
|
25514
|
+
function stopFallbackWatcher(entry) {
|
|
25515
|
+
if (entry.watcher) {
|
|
25516
|
+
entry.watcher.close();
|
|
25517
|
+
entry.watcher = void 0;
|
|
25518
|
+
}
|
|
25519
|
+
if (entry.pollingTimer) {
|
|
25520
|
+
clearInterval(entry.pollingTimer);
|
|
25521
|
+
entry.pollingTimer = void 0;
|
|
25522
|
+
}
|
|
25523
|
+
}
|
|
25524
|
+
function startFallbackWatcher(entry) {
|
|
25525
|
+
if (entry.watcher || entry.pollingTimer) return;
|
|
25501
25526
|
const forcePolling = process.env.PYB_TASK_WATCHER_POLLING === "1";
|
|
25502
25527
|
if (forcePolling) {
|
|
25503
|
-
startPolling(entry,
|
|
25528
|
+
startPolling(entry, getPollIntervalMs());
|
|
25504
25529
|
return;
|
|
25505
25530
|
}
|
|
25506
25531
|
try {
|
|
25507
25532
|
entry.watcher = watch(
|
|
25508
|
-
|
|
25533
|
+
entry.listDir,
|
|
25509
25534
|
{ recursive: true },
|
|
25510
25535
|
() => handleChange(entry)
|
|
25511
25536
|
);
|
|
25512
25537
|
} catch (error) {
|
|
25513
25538
|
debug.warn("TASK_WATCHER_WATCH_FAILED", {
|
|
25514
|
-
listId:
|
|
25539
|
+
listId: entry.listId,
|
|
25515
25540
|
error: error instanceof Error ? error.message : String(error)
|
|
25516
25541
|
});
|
|
25517
|
-
startPolling(entry,
|
|
25542
|
+
startPolling(entry, getPollIntervalMs());
|
|
25518
25543
|
}
|
|
25519
25544
|
}
|
|
25545
|
+
function handleEventStream(entry) {
|
|
25546
|
+
try {
|
|
25547
|
+
const { events, nextOffset } = readTaskEventLog(
|
|
25548
|
+
entry.listId,
|
|
25549
|
+
entry.lastEventOffset
|
|
25550
|
+
);
|
|
25551
|
+
if (nextOffset !== entry.lastEventOffset) {
|
|
25552
|
+
entry.lastEventOffset = nextOffset;
|
|
25553
|
+
}
|
|
25554
|
+
if (events.length === 0) return;
|
|
25555
|
+
refreshSignals(entry);
|
|
25556
|
+
} catch (error) {
|
|
25557
|
+
logError(error);
|
|
25558
|
+
debug.warn("TASK_WATCHER_EVENT_STREAM_FAILED", {
|
|
25559
|
+
listId: entry.listId,
|
|
25560
|
+
error: error instanceof Error ? error.message : String(error)
|
|
25561
|
+
});
|
|
25562
|
+
if (entry.eventPollingTimer) {
|
|
25563
|
+
clearInterval(entry.eventPollingTimer);
|
|
25564
|
+
entry.eventPollingTimer = void 0;
|
|
25565
|
+
}
|
|
25566
|
+
startFallbackWatcher(entry);
|
|
25567
|
+
startEventSwitchPolling(entry);
|
|
25568
|
+
}
|
|
25569
|
+
}
|
|
25570
|
+
function startEventStreamPolling(entry, intervalMs) {
|
|
25571
|
+
entry.eventPollingTimer = setInterval(
|
|
25572
|
+
() => handleEventStream(entry),
|
|
25573
|
+
intervalMs
|
|
25574
|
+
);
|
|
25575
|
+
}
|
|
25576
|
+
function switchToEventStream(entry) {
|
|
25577
|
+
if (entry.eventPollingTimer) return;
|
|
25578
|
+
stopFallbackWatcher(entry);
|
|
25579
|
+
entry.lastEventOffset = 0;
|
|
25580
|
+
startEventStreamPolling(entry, getPollIntervalMs());
|
|
25581
|
+
if (entry.eventSwitchTimer) {
|
|
25582
|
+
clearInterval(entry.eventSwitchTimer);
|
|
25583
|
+
entry.eventSwitchTimer = void 0;
|
|
25584
|
+
}
|
|
25585
|
+
}
|
|
25586
|
+
function startEventSwitchPolling(entry) {
|
|
25587
|
+
if (entry.eventSwitchTimer) return;
|
|
25588
|
+
entry.eventSwitchTimer = setInterval(() => {
|
|
25589
|
+
if (!existsSync13(entry.eventsPath)) return;
|
|
25590
|
+
switchToEventStream(entry);
|
|
25591
|
+
}, getPollIntervalMs());
|
|
25592
|
+
}
|
|
25593
|
+
function startWatchingTaskList(listId) {
|
|
25594
|
+
const paths = getTaskListPaths(listId);
|
|
25595
|
+
if (taskWatchers.has(paths.listId)) return;
|
|
25596
|
+
ensureDirs(paths);
|
|
25597
|
+
const entry = {
|
|
25598
|
+
listId: paths.listId,
|
|
25599
|
+
listDir: paths.listDir,
|
|
25600
|
+
tasksDir: paths.tasksDir,
|
|
25601
|
+
indexPath: paths.indexPath,
|
|
25602
|
+
eventsPath: paths.eventsPath,
|
|
25603
|
+
lastFingerprint: getFingerprint(paths),
|
|
25604
|
+
lastReadyIds: buildReadySet(paths.listId),
|
|
25605
|
+
lastEventOffset: getEventOffset(paths)
|
|
25606
|
+
};
|
|
25607
|
+
taskWatchers.set(paths.listId, entry);
|
|
25608
|
+
if (existsSync13(paths.eventsPath)) {
|
|
25609
|
+
startEventStreamPolling(entry, getPollIntervalMs());
|
|
25610
|
+
return;
|
|
25611
|
+
}
|
|
25612
|
+
startFallbackWatcher(entry);
|
|
25613
|
+
startEventSwitchPolling(entry);
|
|
25614
|
+
}
|
|
25520
25615
|
|
|
25521
25616
|
// src/utils/session/fileRecoveryCore.ts
|
|
25522
25617
|
var MAX_FILES_TO_RECOVER = 5;
|
|
@@ -27768,7 +27863,7 @@ import { homedir as homedir7 } from "os";
|
|
|
27768
27863
|
// src/commands/agents/generation.ts
|
|
27769
27864
|
import { randomUUID as randomUUID5 } from "crypto";
|
|
27770
27865
|
async function generateAgentWithClaude(prompt) {
|
|
27771
|
-
const { queryModel } = await import("./llm-
|
|
27866
|
+
const { queryModel } = await import("./llm-3KCTIVOM.js");
|
|
27772
27867
|
const systemPrompt = `You are an expert at creating AI agent configurations. Based on the user's description, generate a specialized agent configuration.
|
|
27773
27868
|
|
|
27774
27869
|
Return your response as a JSON object with exactly these fields:
|
|
@@ -31804,7 +31899,9 @@ To give feedback, users should ${MACRO.ISSUES_EXPLAINER}.
|
|
|
31804
31899
|
You have access to the Task tools (TaskCreate, TaskUpdate, TaskList, TaskGet) to help you manage and plan tasks. Using these tools is a Best Practice for complex workflows, as it ensures you are tracking your tasks and giving the user visibility into your progress.
|
|
31805
31900
|
These tools are powerful for planning tasks and for breaking down larger complex tasks into smaller steps. For multi-step work, start by creating tasks with TaskCreate, then use TaskUpdate as you progress. Use TaskList to review readiness and blockers, and TaskGet for details.
|
|
31806
31901
|
|
|
31807
|
-
**Dynamic Planning**: You are encouraged to update your plan dynamically. If you encounter unexpected issues or new requirements, pause the current task, add new items (e.g., "Fix dependency issue"),
|
|
31902
|
+
**Dynamic Planning**: You are encouraged to update your plan dynamically. If you encounter unexpected issues or new requirements, pause the current task, add new items (e.g., "Fix dependency issue"), and adjust your plan accordingly.
|
|
31903
|
+
|
|
31904
|
+
Task records use subject as the single primary name, with activeForm auto-generated from subject to describe the in-progress action. Keep description and blockedBy independent in JSON; any joining is only for terminal rendering. blocks/blockedBy should always be present as arrays (empty when not used). Ordering is by task id; do not use priority fields.
|
|
31808
31905
|
|
|
31809
31906
|
It is critical that you mark tasks as completed as soon as you are done with a task. Do not batch up multiple tasks before marking them as completed.
|
|
31810
31907
|
|