@narumitw/pi-subagents 2.0.6 → 2.1.1
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/README.md +171 -60
- package/dist/chunks/{auto-transport-SY2VHUFH.ts → auto-transport-FUUKFDIG.ts} +6 -6
- package/dist/chunks/{capability-grant-CGEWOEKE.ts → capability-grant-PR72SWWS.ts} +4 -4
- package/dist/chunks/{chunk-CBP76ARQ.ts → chunk-2LMJU25E.ts} +172 -74
- package/dist/chunks/chunk-2LMJU25E.ts.map +7 -0
- package/dist/chunks/{chunk-DPPVEQAM.ts → chunk-4AQSF7AS.ts} +1 -1
- package/dist/chunks/chunk-4AQSF7AS.ts.map +7 -0
- package/dist/chunks/chunk-6H6TBBED.ts +108 -0
- package/dist/chunks/chunk-6H6TBBED.ts.map +7 -0
- package/dist/chunks/{chunk-YBUWBRF7.ts → chunk-6NSJVPXX.ts} +6 -16
- package/dist/chunks/{chunk-YBUWBRF7.ts.map → chunk-6NSJVPXX.ts.map} +2 -2
- package/dist/chunks/{chunk-DSOOH73Y.ts → chunk-7AAJEUSL.ts} +3 -3
- package/dist/chunks/{chunk-DSOOH73Y.ts.map → chunk-7AAJEUSL.ts.map} +2 -2
- package/dist/chunks/{chunk-7QPPBBXZ.ts → chunk-D4CR7T73.ts} +21 -3
- package/dist/chunks/chunk-D4CR7T73.ts.map +7 -0
- package/dist/chunks/{chunk-NIF42QMF.ts → chunk-FEVPWRMU.ts} +7 -4
- package/dist/chunks/chunk-FEVPWRMU.ts.map +7 -0
- package/dist/chunks/{chunk-S2IWVK3J.ts → chunk-ILEQ27AL.ts} +3 -2
- package/dist/chunks/chunk-ILEQ27AL.ts.map +7 -0
- package/dist/chunks/{chunk-DQMN4OYM.ts → chunk-ITVWPNU4.ts} +12 -106
- package/dist/chunks/chunk-ITVWPNU4.ts.map +7 -0
- package/dist/chunks/{chunk-QDVGH2X7.ts → chunk-IWC32VPY.ts} +2 -1
- package/dist/chunks/{chunk-QDVGH2X7.ts.map → chunk-IWC32VPY.ts.map} +2 -2
- package/dist/chunks/{chunk-I2FAK44T.ts → chunk-JSZIP73U.ts} +48 -10
- package/dist/chunks/chunk-JSZIP73U.ts.map +7 -0
- package/dist/chunks/{chunk-ZHTNCZIA.ts → chunk-JU6LUNLP.ts} +2 -2
- package/dist/chunks/{chunk-PSK43Y6A.ts → chunk-LASD73CM.ts} +2 -2
- package/dist/chunks/{chunk-C4L6P266.ts → chunk-LEOYDZI3.ts} +1 -1
- package/dist/chunks/{chunk-C4L6P266.ts.map → chunk-LEOYDZI3.ts.map} +2 -2
- package/dist/chunks/{chunk-H3BFJ7HJ.ts → chunk-LL4LP2T7.ts} +5 -5
- package/dist/chunks/chunk-N2T5IN4X.ts +18 -0
- package/dist/chunks/chunk-N2T5IN4X.ts.map +7 -0
- package/dist/chunks/chunk-NLT67IZS.ts +322 -0
- package/dist/chunks/chunk-NLT67IZS.ts.map +7 -0
- package/dist/chunks/{chunk-G3RSMSXJ.ts → chunk-NTRPLF46.ts} +1 -1
- package/dist/chunks/chunk-NTRPLF46.ts.map +7 -0
- package/dist/chunks/{chunk-EFBPISNT.ts → chunk-PBZMBTNJ.ts} +104 -103
- package/dist/chunks/chunk-PBZMBTNJ.ts.map +7 -0
- package/dist/chunks/{chunk-SCZ33MYW.ts → chunk-PGLSFLYW.ts} +2 -2
- package/dist/chunks/{chunk-O4VO6JUJ.ts → chunk-TM2R67J3.ts} +3 -3
- package/dist/chunks/{chunk-QBORTI4W.ts → chunk-TMZRHIIK.ts} +32 -3
- package/dist/chunks/chunk-TMZRHIIK.ts.map +7 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts +59 -0
- package/dist/chunks/chunk-TZ34IQ3M.ts.map +7 -0
- package/dist/chunks/{chunk-7OBINKFM.ts → chunk-VDG7LTYE.ts} +11 -11
- package/dist/chunks/chunk-VDG7LTYE.ts.map +7 -0
- package/dist/chunks/{chunk-AEUYS7JC.ts → chunk-X4NMONPE.ts} +1 -1
- package/dist/chunks/chunk-X4NMONPE.ts.map +7 -0
- package/dist/chunks/{chunk-HKC4ES4B.ts → chunk-YPJEN6NU.ts} +2 -2
- package/dist/chunks/{chunk-434NII74.ts → chunk-YU53SHA7.ts} +54 -8
- package/dist/chunks/chunk-YU53SHA7.ts.map +7 -0
- package/dist/chunks/{completion-delivery-YPOWSSV3.ts → completion-delivery-RSJU6BXL.ts} +5 -4
- package/dist/chunks/{config-status-J4GPWP46.ts → config-status-FKGDECZ3.ts} +7 -6
- package/dist/chunks/{config-ui-2YUCUEBM.ts → config-ui-ABHYNGQ7.ts} +297 -231
- package/dist/chunks/config-ui-ABHYNGQ7.ts.map +7 -0
- package/dist/chunks/{consult-IV7UBNQQ.ts → consult-LJU3IQY5.ts} +14 -13
- package/dist/chunks/consult-LJU3IQY5.ts.map +7 -0
- package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts → create-stateful-transport-JWC2EFYL.ts} +6 -6
- package/dist/chunks/{delegation-contract-WJPT4FVS.ts → delegation-contract-LA56I5DT.ts} +2 -2
- package/dist/chunks/{discovery-K25T3SH4.ts → discovery-MIFB2U4Y.ts} +3 -3
- package/dist/chunks/{execution-LA7HN5YF.ts → execution-Q2JZLKJA.ts} +19 -16
- package/dist/chunks/execution-Q2JZLKJA.ts.map +7 -0
- package/dist/chunks/{in-process-transport-4RF3J6XK.ts → in-process-transport-HJ6TZXC3.ts} +9 -9
- package/dist/chunks/{inspect-XV2QALMR.ts → inspect-UH2TKH6E.ts} +25 -10
- package/dist/chunks/inspect-UH2TKH6E.ts.map +7 -0
- package/dist/chunks/{persistence-VSGXAW4P.ts → persistence-UY3PY6E5.ts} +11 -7
- package/dist/chunks/persistence-UY3PY6E5.ts.map +7 -0
- package/dist/chunks/{registry-E6XPJB7L.ts → registry-BT54L6CY.ts} +136 -15
- package/dist/chunks/registry-BT54L6CY.ts.map +7 -0
- package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts → retained-semantic-state-GM75FZGE.ts} +3 -3
- package/dist/chunks/{rpc-transport-NEHBHWX4.ts → rpc-transport-7R7DVCEB.ts} +12 -16
- package/dist/chunks/rpc-transport-7R7DVCEB.ts.map +7 -0
- package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts → spawn-idempotency-BNHOSMZW.ts} +2 -2
- package/dist/chunks/{subprocess-transport-NSHOGDC4.ts → subprocess-transport-VHZJRBTW.ts} +15 -14
- package/dist/chunks/subprocess-transport-VHZJRBTW.ts.map +7 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts +164 -0
- package/dist/chunks/usage-recording-store-CW3EH2SZ.ts.map +7 -0
- package/dist/index.ts +682 -82
- package/dist/index.ts.map +3 -3
- package/docs/async-runtime-protocol.md +83 -0
- package/docs/implementation-notes/pi-subagents-capability-matrix.md +62 -0
- package/docs/implementation-notes/pi-subagents-current-direction.md +99 -0
- package/docs/implementation-notes/pi-subagents-rpc-v1.md +153 -0
- package/docs/pi-subagents-diagrams.md +183 -0
- package/package.json +9 -8
- package/src/agents/types.ts +2 -0
- package/src/async-subagent-benchmark.ts +532 -0
- package/src/completion-delivery.ts +71 -4
- package/src/completion-render.ts +1 -0
- package/src/completion-requirement.ts +479 -0
- package/src/config-registration.ts +5 -5
- package/src/config-status.ts +66 -70
- package/src/config-ui.ts +244 -150
- package/src/consult-registration.ts +4 -12
- package/src/consult-resources.ts +1 -1
- package/src/consult.ts +3 -8
- package/src/delegation-contract.ts +55 -9
- package/src/execution-plan.ts +1 -1
- package/src/execution-ui.ts +40 -29
- package/src/execution.ts +2 -3
- package/src/inspect.ts +24 -1
- package/src/orchestration-metrics.ts +1 -1
- package/src/panel-execution.ts +2 -3
- package/src/panel-failure.ts +1 -1
- package/src/panel-render.ts +1 -1
- package/src/parallel-limit-ui.ts +6 -5
- package/src/params.ts +2 -1
- package/src/persistence.ts +9 -0
- package/src/process-control.ts +43 -0
- package/src/registry-types.ts +5 -0
- package/src/registry.ts +162 -18
- package/src/render.ts +2 -1
- package/src/rpc-transport.ts +1 -1
- package/src/runner-outcome.ts +1 -1
- package/src/runner-result.ts +1 -1
- package/src/runner-types.ts +102 -0
- package/src/runner.ts +11 -192
- package/src/session-guidance-contract.ts +309 -0
- package/src/settings/inspection.ts +27 -0
- package/src/settings/schema.ts +9 -0
- package/src/settings-reader.ts +7 -0
- package/src/settings.ts +20 -0
- package/src/spawn-idempotency.ts +5 -0
- package/src/stateful-agent-view.ts +15 -19
- package/src/stateful-guidance.ts +11 -18
- package/src/stateful-limit-ui.ts +23 -20
- package/src/stateful-limits.ts +10 -10
- package/src/stateful-registration.ts +126 -36
- package/src/stateful-render.ts +27 -2
- package/src/subagent-details.ts +43 -0
- package/src/subagents-extension.ts +116 -68
- package/src/subagents.ts +2 -0
- package/src/subprocess-transport.ts +2 -1
- package/src/supervision.ts +2 -1
- package/src/timeout-finalization.ts +1 -1
- package/src/tool-schema-compatibility.ts +73 -0
- package/src/transport-types.ts +6 -0
- package/src/transport-ui.ts +18 -46
- package/src/usage-recording-config.ts +13 -0
- package/src/usage-recording-store.ts +183 -0
- package/src/usage-recording.ts +478 -0
- package/src/verification-harness.ts +1 -1
- package/src/workflow-ui.ts +17 -9
- package/dist/chunks/chunk-434NII74.ts.map +0 -7
- package/dist/chunks/chunk-7OBINKFM.ts.map +0 -7
- package/dist/chunks/chunk-7QPPBBXZ.ts.map +0 -7
- package/dist/chunks/chunk-AEUYS7JC.ts.map +0 -7
- package/dist/chunks/chunk-CBP76ARQ.ts.map +0 -7
- package/dist/chunks/chunk-DPPVEQAM.ts.map +0 -7
- package/dist/chunks/chunk-DQMN4OYM.ts.map +0 -7
- package/dist/chunks/chunk-EFBPISNT.ts.map +0 -7
- package/dist/chunks/chunk-G3RSMSXJ.ts.map +0 -7
- package/dist/chunks/chunk-I2FAK44T.ts.map +0 -7
- package/dist/chunks/chunk-NIF42QMF.ts.map +0 -7
- package/dist/chunks/chunk-QBORTI4W.ts.map +0 -7
- package/dist/chunks/chunk-S2IWVK3J.ts.map +0 -7
- package/dist/chunks/config-ui-2YUCUEBM.ts.map +0 -7
- package/dist/chunks/consult-IV7UBNQQ.ts.map +0 -7
- package/dist/chunks/execution-LA7HN5YF.ts.map +0 -7
- package/dist/chunks/inspect-XV2QALMR.ts.map +0 -7
- package/dist/chunks/persistence-VSGXAW4P.ts.map +0 -7
- package/dist/chunks/registry-E6XPJB7L.ts.map +0 -7
- package/dist/chunks/rpc-transport-NEHBHWX4.ts.map +0 -7
- package/dist/chunks/subprocess-transport-NSHOGDC4.ts.map +0 -7
- /package/dist/chunks/{auto-transport-SY2VHUFH.ts.map → auto-transport-FUUKFDIG.ts.map} +0 -0
- /package/dist/chunks/{capability-grant-CGEWOEKE.ts.map → capability-grant-PR72SWWS.ts.map} +0 -0
- /package/dist/chunks/{chunk-ZHTNCZIA.ts.map → chunk-JU6LUNLP.ts.map} +0 -0
- /package/dist/chunks/{chunk-PSK43Y6A.ts.map → chunk-LASD73CM.ts.map} +0 -0
- /package/dist/chunks/{chunk-H3BFJ7HJ.ts.map → chunk-LL4LP2T7.ts.map} +0 -0
- /package/dist/chunks/{chunk-SCZ33MYW.ts.map → chunk-PGLSFLYW.ts.map} +0 -0
- /package/dist/chunks/{chunk-O4VO6JUJ.ts.map → chunk-TM2R67J3.ts.map} +0 -0
- /package/dist/chunks/{chunk-HKC4ES4B.ts.map → chunk-YPJEN6NU.ts.map} +0 -0
- /package/dist/chunks/{completion-delivery-YPOWSSV3.ts.map → completion-delivery-RSJU6BXL.ts.map} +0 -0
- /package/dist/chunks/{config-status-J4GPWP46.ts.map → config-status-FKGDECZ3.ts.map} +0 -0
- /package/dist/chunks/{create-stateful-transport-ZP3IXNV3.ts.map → create-stateful-transport-JWC2EFYL.ts.map} +0 -0
- /package/dist/chunks/{delegation-contract-WJPT4FVS.ts.map → delegation-contract-LA56I5DT.ts.map} +0 -0
- /package/dist/chunks/{discovery-K25T3SH4.ts.map → discovery-MIFB2U4Y.ts.map} +0 -0
- /package/dist/chunks/{in-process-transport-4RF3J6XK.ts.map → in-process-transport-HJ6TZXC3.ts.map} +0 -0
- /package/dist/chunks/{retained-semantic-state-7WXSGRJU.ts.map → retained-semantic-state-GM75FZGE.ts.map} +0 -0
- /package/dist/chunks/{spawn-idempotency-QGHO2WKC.ts.map → spawn-idempotency-BNHOSMZW.ts.map} +0 -0
|
@@ -5,7 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-KMGKCEO4.ts";
|
|
6
6
|
import {
|
|
7
7
|
updateStatefulLimitSetting
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-D4CR7T73.ts";
|
|
9
|
+
import {
|
|
10
|
+
USAGE_RECORDING_RETENTION_DAYS
|
|
11
|
+
} from "./chunk-N2T5IN4X.ts";
|
|
9
12
|
import {
|
|
10
13
|
inspectBlockingParallelLimitSettings,
|
|
11
14
|
inspectCompletionDeliverySettings,
|
|
@@ -13,14 +16,15 @@ import {
|
|
|
13
16
|
inspectCwdPolicySettings,
|
|
14
17
|
inspectDelegationWorkflowSettings,
|
|
15
18
|
inspectStatefulLimitSettings,
|
|
16
|
-
inspectStatefulTransportSettings
|
|
17
|
-
|
|
19
|
+
inspectStatefulTransportSettings,
|
|
20
|
+
inspectUsageRecordingSettings
|
|
21
|
+
} from "./chunk-TMZRHIIK.ts";
|
|
18
22
|
import {
|
|
19
23
|
STATEFUL_LIMIT_DEFINITIONS,
|
|
20
24
|
isValidStatefulLimit,
|
|
21
25
|
resolveStatefulLimits,
|
|
22
26
|
statefulLimitDefinition
|
|
23
|
-
} from "./chunk-
|
|
27
|
+
} from "./chunk-VDG7LTYE.ts";
|
|
24
28
|
import {
|
|
25
29
|
safeTerminalLine
|
|
26
30
|
} from "./chunk-SWGQLFSD.ts";
|
|
@@ -31,10 +35,10 @@ function statefulLimitListScreen(runtime) {
|
|
|
31
35
|
const current = runtime.getRuntimeStatus().limits;
|
|
32
36
|
return {
|
|
33
37
|
kind: "actions",
|
|
34
|
-
title: "
|
|
38
|
+
title: "Background Agent Limits",
|
|
35
39
|
lines: [
|
|
36
|
-
"These limits apply after /reload or the next Pi session.",
|
|
37
|
-
"Reloading can interrupt
|
|
40
|
+
"These advanced limits apply after /reload or the next Pi session.",
|
|
41
|
+
"Reloading can interrupt subagents saved for follow-up.",
|
|
38
42
|
...inspected.error ? [
|
|
39
43
|
`Settings cannot be edited: ${safeTerminalLine(inspected.error)}`,
|
|
40
44
|
`Repair ${safeTerminalLine(inspected.path)} and retry.`
|
|
@@ -46,7 +50,7 @@ function statefulLimitListScreen(runtime) {
|
|
|
46
50
|
return {
|
|
47
51
|
id: definition.field,
|
|
48
52
|
label: definition.label,
|
|
49
|
-
description: `Current ${current[definition.field]} \xB7
|
|
53
|
+
description: `Current: ${current[definition.field]} \xB7 after reload: ${configured?.value ?? "unavailable"} (${configured?.source ?? "unknown"})`,
|
|
50
54
|
action: "pick-stateful-limit"
|
|
51
55
|
};
|
|
52
56
|
}) : [],
|
|
@@ -65,7 +69,7 @@ function statefulLimitInputScreen(field, runtime) {
|
|
|
65
69
|
lines: [
|
|
66
70
|
definition.description,
|
|
67
71
|
`Current session: ${runtime.getRuntimeStatus().limits[field]}`,
|
|
68
|
-
`
|
|
72
|
+
`After reload: ${configured?.value ?? "unavailable"} (${configured?.source ?? "unknown"})`,
|
|
69
73
|
`Allowed: whole numbers ${definition.minimum === 0 ? "0 or greater" : "1 or greater"}`,
|
|
70
74
|
`Read from: ${safeTerminalLine(inspected.path)}`,
|
|
71
75
|
...inspected.writePath !== inspected.path ? [`Saves to: ${safeTerminalLine(inspected.writePath)}`] : []
|
|
@@ -102,9 +106,9 @@ async function applyStatefulLimitSetting(field, value, ctx, runtime, options) {
|
|
|
102
106
|
const confirmed = await ctx.ui.confirm(
|
|
103
107
|
`Lower ${statefulLimitDefinition(field).label}?`,
|
|
104
108
|
[
|
|
105
|
-
`
|
|
106
|
-
"No
|
|
107
|
-
"A later state
|
|
109
|
+
`After reload, this value could exclude ${affectedBefore.length} saved subagent record${affectedBefore.length === 1 ? "" : "s"} from recovery.`,
|
|
110
|
+
"No subagent is removed now, and this menu will not reload Pi.",
|
|
111
|
+
"A later state save can make excluded records unavailable for recovery."
|
|
108
112
|
].join("\n\n"),
|
|
109
113
|
{ signal: options.signal }
|
|
110
114
|
);
|
|
@@ -115,7 +119,10 @@ async function applyStatefulLimitSetting(field, value, ctx, runtime, options) {
|
|
|
115
119
|
[field]: next
|
|
116
120
|
});
|
|
117
121
|
if (!sameIds(affectedBefore, affectedAfter)) {
|
|
118
|
-
ctx.ui.notify(
|
|
122
|
+
ctx.ui.notify(
|
|
123
|
+
"Current subagents changed while confirming; review the limit again.",
|
|
124
|
+
"warning"
|
|
125
|
+
);
|
|
119
126
|
return { kind: "rejected" };
|
|
120
127
|
}
|
|
121
128
|
}
|
|
@@ -125,7 +132,7 @@ async function applyStatefulLimitSetting(field, value, ctx, runtime, options) {
|
|
|
125
132
|
} catch (error) {
|
|
126
133
|
if (options.isCurrent() && !options.signal.aborted) {
|
|
127
134
|
ctx.ui.notify(
|
|
128
|
-
`
|
|
135
|
+
`Background-agent limit was not saved; the previous setting is unchanged: ${formatError(error)}`,
|
|
129
136
|
"error"
|
|
130
137
|
);
|
|
131
138
|
}
|
|
@@ -133,18 +140,18 @@ async function applyStatefulLimitSetting(field, value, ctx, runtime, options) {
|
|
|
133
140
|
}
|
|
134
141
|
if (options.signal.aborted || !options.isCurrent()) return { kind: "close" };
|
|
135
142
|
ctx.ui.notify(
|
|
136
|
-
`Saved ${statefulLimitDefinition(field).label.toLowerCase()}: ${next}. Applies after /reload; clear
|
|
143
|
+
`Saved ${statefulLimitDefinition(field).label.toLowerCase()}: ${next}. Applies after /reload; clear current subagents first if their work must not be interrupted.`,
|
|
137
144
|
"info"
|
|
138
145
|
);
|
|
139
146
|
return { kind: "back" };
|
|
140
147
|
}
|
|
141
148
|
function formatDetachedLimitSummary(status) {
|
|
142
149
|
return [
|
|
143
|
-
`${status.limits.maxAgents}
|
|
144
|
-
`${status.limits.maxActiveTurns}
|
|
145
|
-
`${status.limits.maxChildrenPerAgent} children`,
|
|
146
|
-
|
|
147
|
-
`${status.limits.maxStoredAgents} stored`
|
|
150
|
+
`${status.limits.maxAgents} saved`,
|
|
151
|
+
`${status.limits.maxActiveTurns} working at once`,
|
|
152
|
+
`${status.limits.maxChildrenPerAgent} children each`,
|
|
153
|
+
`${status.limits.maxDepth} nested levels`,
|
|
154
|
+
`${status.limits.maxStoredAgents} stored records`
|
|
148
155
|
].join(" \xB7 ");
|
|
149
156
|
}
|
|
150
157
|
function formatConfiguredDetachedLimitDivergence(status, values) {
|
|
@@ -152,18 +159,12 @@ function formatConfiguredDetachedLimitDivergence(status, values) {
|
|
|
152
159
|
const configured = values[definition.field].value;
|
|
153
160
|
return configured === status.limits[definition.field] ? [] : [`${definition.label.toLowerCase()} ${configured}`];
|
|
154
161
|
});
|
|
155
|
-
return changed.length > 0 ? `
|
|
156
|
-
}
|
|
157
|
-
function formatConfiguredDetachedLimits(values) {
|
|
158
|
-
return STATEFUL_LIMIT_DEFINITIONS.map((definition) => {
|
|
159
|
-
const snapshot = values[definition.field];
|
|
160
|
-
return `${definition.label.toLowerCase()} ${snapshot.value} (${snapshot.source})`;
|
|
161
|
-
}).join(" \xB7 ");
|
|
162
|
+
return changed.length > 0 ? `After /reload: ${changed.join(" \xB7 ")}` : void 0;
|
|
162
163
|
}
|
|
163
164
|
function formatEmptyStatefulRuntime(status) {
|
|
164
|
-
if (!status.enabled) return "
|
|
165
|
-
if (!status.initialized) return "
|
|
166
|
-
return "No
|
|
165
|
+
if (!status.enabled) return "Background subagents are disabled in How subagents run.";
|
|
166
|
+
if (!status.initialized) return "Background subagents have not started in this session.";
|
|
167
|
+
return "No subagents are working or saved for follow-up in this session.";
|
|
167
168
|
}
|
|
168
169
|
function parseStatefulLimit(field, value) {
|
|
169
170
|
const normalized = value?.trim() ?? "";
|
|
@@ -209,7 +210,7 @@ function formatError(error) {
|
|
|
209
210
|
async function showWorkflowPreview(ctx, current, next, requiresReload, signal) {
|
|
210
211
|
const changes = workflowEffects(current, next);
|
|
211
212
|
return ctx.ui.confirm(
|
|
212
|
-
requiresReload ? "Save
|
|
213
|
+
requiresReload ? "Save how subagents run and reload?" : "Save how subagents run?",
|
|
213
214
|
[
|
|
214
215
|
`Current: ${workflowLabel(current)}`,
|
|
215
216
|
`New: ${workflowLabel(next)}`,
|
|
@@ -226,27 +227,33 @@ async function showWorkflowPreview(ctx, current, next, requiresReload, signal) {
|
|
|
226
227
|
function workflowLabel(value) {
|
|
227
228
|
switch (value) {
|
|
228
229
|
case "all":
|
|
229
|
-
return "
|
|
230
|
+
return "Background plus compatibility methods (async + sync)";
|
|
230
231
|
case "async-only":
|
|
231
|
-
return "
|
|
232
|
+
return "Keep Pi available (async)";
|
|
232
233
|
case "blocking-only":
|
|
233
|
-
return "
|
|
234
|
+
return "Compatibility blocking methods (sync)";
|
|
234
235
|
case "disabled":
|
|
235
|
-
return "
|
|
236
|
+
return "Subagents disabled";
|
|
236
237
|
}
|
|
237
238
|
}
|
|
238
239
|
function workflowEffects(current, next) {
|
|
239
240
|
const blockingEnabled = (value) => value === "all" || value === "blocking-only";
|
|
240
241
|
const asyncEnabled = (value) => value === "all" || value === "async-only";
|
|
242
|
+
const awaitEnabled = (value) => blockingEnabled(value) && asyncEnabled(value);
|
|
241
243
|
const effects = [];
|
|
242
244
|
if (blockingEnabled(current) !== blockingEnabled(next)) {
|
|
243
245
|
effects.push(
|
|
244
|
-
blockingEnabled(next) ? "
|
|
246
|
+
blockingEnabled(next) ? "Allow deprecated blocking `subagent` and supported read-only `subagent_consult`" : "Remove deprecated blocking `subagent` and supported read-only `subagent_consult`"
|
|
245
247
|
);
|
|
246
248
|
}
|
|
247
249
|
if (asyncEnabled(current) !== asyncEnabled(next)) {
|
|
248
250
|
effects.push(
|
|
249
|
-
asyncEnabled(next) ? "
|
|
251
|
+
asyncEnabled(next) ? "Allow background tools: `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`" : "Remove background tools: `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`"
|
|
252
|
+
);
|
|
253
|
+
}
|
|
254
|
+
if (awaitEnabled(current) !== awaitEnabled(next)) {
|
|
255
|
+
effects.push(
|
|
256
|
+
awaitEnabled(next) ? "Allow the blocking retained-agent join: `subagent_await`" : "Remove the blocking retained-agent join: `subagent_await`"
|
|
250
257
|
);
|
|
251
258
|
}
|
|
252
259
|
return effects;
|
|
@@ -269,57 +276,43 @@ function statusLines(runtime) {
|
|
|
269
276
|
const snapshot = inspectCompletionDeliverySettings();
|
|
270
277
|
return formatStatus(runtime.getRuntimeStatus(), snapshot, runtime).split("\n");
|
|
271
278
|
}
|
|
272
|
-
function helpLines(
|
|
273
|
-
const snapshot = inspectCompletionDeliverySettings();
|
|
274
|
-
const cwdPolicy = inspectCwdPolicySettings();
|
|
275
|
-
const parallelLimit = inspectBlockingParallelLimitSettings();
|
|
276
|
-
const detachedLimits = inspectStatefulLimitSettings();
|
|
277
|
-
const transport = inspectStatefulTransportSettings();
|
|
279
|
+
function helpLines(_runtime) {
|
|
278
280
|
return [
|
|
279
|
-
"
|
|
280
|
-
"
|
|
281
|
-
"
|
|
282
|
-
"
|
|
283
|
-
"
|
|
284
|
-
"
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
"
|
|
295
|
-
|
|
281
|
+
"Start here",
|
|
282
|
+
" 1. Open How subagents run.",
|
|
283
|
+
" 2. Choose the workflow that matches the tools and blocking behavior you need.",
|
|
284
|
+
" 3. Open Completion and privacy if Pi must use background results in the current answer.",
|
|
285
|
+
"The blocking subagent tool is deprecated and remains available only in compatibility workflows.",
|
|
286
|
+
"subagent_consult and subagent_await remain supported.",
|
|
287
|
+
"Current subagents shows work in progress and subagents saved for follow-up.",
|
|
288
|
+
"Settings",
|
|
289
|
+
" Folders and trusted resources \u2014 choose where subagents start and what consultations load.",
|
|
290
|
+
" Completion and privacy \u2014 choose what Pi does when work finishes and whether usage is recorded.",
|
|
291
|
+
" Agent defaults \u2014 choose tools, model, thinking effort, and time limit for each subagent.",
|
|
292
|
+
" Advanced runtime settings \u2014 optional transport and capacity controls.",
|
|
293
|
+
"Changes are saved immediately.",
|
|
294
|
+
"Transport and background-agent limits apply after /reload.",
|
|
295
|
+
"Commands",
|
|
296
|
+
" /subagents \u2014 open the manager",
|
|
297
|
+
" /subagents settings \u2014 open Settings",
|
|
298
|
+
" /subagents status \u2014 show detailed diagnostics",
|
|
299
|
+
" /subagents help \u2014 show this help",
|
|
300
|
+
"Safety",
|
|
301
|
+
"Folder choices control starting locations and loaded resources; they do not sandbox files, commands, or network access.",
|
|
302
|
+
"Manage saved folder trust with Pi /trust, then restart Pi."
|
|
296
303
|
];
|
|
297
304
|
}
|
|
298
305
|
function formatManagerSummary(runtime, status, configured) {
|
|
299
306
|
const current = currentWorkflow(runtime, status);
|
|
300
|
-
const cwdPolicy = inspectCwdPolicySettings();
|
|
301
|
-
const consult = inspectConsultResourceSettings();
|
|
302
307
|
const detachedLimits = inspectStatefulLimitSettings();
|
|
303
|
-
const transport = inspectStatefulTransportSettings();
|
|
304
308
|
const detachedDivergence = detachedLimits.values ? formatConfiguredDetachedLimitDivergence(status, detachedLimits.values) : void 0;
|
|
305
309
|
return [
|
|
306
|
-
`
|
|
307
|
-
`
|
|
308
|
-
`
|
|
309
|
-
`Delegation target: ${delegationCwdLabel(runtime.getDelegationCwdPolicy())}`,
|
|
310
|
-
`Consult resources: ${consultResourceLabel(runtime.getConsultResourcePolicy())}`,
|
|
311
|
-
`Parallel workers: max ${runtime.getMaxParallelTasks()} per blocking call`,
|
|
312
|
-
`Detached limits: ${formatDetachedLimitSummary(status)}`,
|
|
313
|
-
`Transport: ${status.transport}`,
|
|
314
|
-
`Configured transport: ${transport.value} \xB7 ${transport.source}`,
|
|
315
|
-
`Configured consult target: ${consultationCwdLabel(cwdPolicy.consultation.value)} \xB7 ${cwdPolicy.consultation.source}`,
|
|
316
|
-
`Configured delegation target: ${delegationCwdLabel(cwdPolicy.delegation.value)} \xB7 ${cwdPolicy.delegation.source}`,
|
|
317
|
-
`Configured consult resources: ${consultResourceLabel(consult.value)} \xB7 ${consult.source}`,
|
|
318
|
-
`Settings: ${safeTerminalLine(cwdPolicy.path)}`,
|
|
319
|
-
`Agents: ${status.activeAgents} active \xB7 ${status.retainedAgents} retained`,
|
|
320
|
-
...detachedDivergence ? [detachedDivergence] : [],
|
|
310
|
+
`How subagents run: ${workflowLabel(current)}`,
|
|
311
|
+
`Subagents: ${status.activeAgents} working \xB7 ${status.retainedAgents} saved for follow-up`,
|
|
312
|
+
`When work finishes: ${completionLabel(status.completionDelivery)}`,
|
|
321
313
|
...configured.value !== current ? [`Configured after reload: ${workflowLabel(configured.value)}`] : [],
|
|
322
|
-
...
|
|
314
|
+
...detachedDivergence ? [detachedDivergence] : [],
|
|
315
|
+
...configured.error || detachedLimits.error ? ["Action needed: Repair user settings. Open Diagnostics for details."] : []
|
|
323
316
|
].join("\n");
|
|
324
317
|
}
|
|
325
318
|
function formatStatus(status, snapshot, runtime) {
|
|
@@ -329,27 +322,33 @@ function formatStatus(status, snapshot, runtime) {
|
|
|
329
322
|
const parallelLimit = inspectBlockingParallelLimitSettings();
|
|
330
323
|
const detachedLimits = inspectStatefulLimitSettings();
|
|
331
324
|
const transport = inspectStatefulTransportSettings();
|
|
325
|
+
const usageRecording = inspectUsageRecordingSettings();
|
|
332
326
|
const current = runtime ? currentWorkflow(runtime, status) : configuredWorkflow.value;
|
|
327
|
+
const usageStatus = runtime?.getUsageRecordingStatus?.();
|
|
333
328
|
return [
|
|
334
|
-
"Current
|
|
335
|
-
`
|
|
336
|
-
`
|
|
329
|
+
"Current Session",
|
|
330
|
+
` How subagents run: ${workflowLabel(current)}`,
|
|
331
|
+
` Background runtime: ${status.initialized ? "initialized" : status.enabled ? "not initialized" : "disabled"}`,
|
|
337
332
|
` Transport: ${status.transport}`,
|
|
338
333
|
` Configured transport: ${transport.value} (${transport.source})`,
|
|
339
|
-
`
|
|
340
|
-
`
|
|
341
|
-
`
|
|
342
|
-
`
|
|
343
|
-
`
|
|
344
|
-
`
|
|
345
|
-
`
|
|
346
|
-
"
|
|
347
|
-
`
|
|
348
|
-
`
|
|
334
|
+
` When work finishes: ${completionLabel(status.completionDelivery)}`,
|
|
335
|
+
` Read-only consultation folders: ${consultationCwdLabel(runtime?.getConsultationCwdPolicy() ?? cwdPolicy.consultation.value)}`,
|
|
336
|
+
` Subagent folders: ${delegationCwdLabel(runtime?.getDelegationCwdPolicy() ?? cwdPolicy.delegation.value)}`,
|
|
337
|
+
` Read-only consultation resources: ${consultResourceLabel(runtime?.getConsultResourcePolicy() ?? consult.value)}`,
|
|
338
|
+
` Blocking worker limit: ${runtime?.getMaxParallelTasks() ?? parallelLimit.value} per request`,
|
|
339
|
+
` Background-agent limits: ${formatDetachedLimitSummary(status)}`,
|
|
340
|
+
` Subagents: ${status.activeAgents} working, ${status.retainedAgents} saved for follow-up`,
|
|
341
|
+
` Local usage recording: ${usageStatus?.enabled ? "enabled" : "disabled"}`,
|
|
342
|
+
` Recorded events this session: ${usageStatus?.recordedEvents ?? 0}`,
|
|
343
|
+
` Usage retention: ${usageStatus?.retentionDays ?? USAGE_RECORDING_RETENTION_DAYS} days`,
|
|
344
|
+
` Usage path: ${safeTerminalLine(usageStatus?.path ?? "unavailable")}`,
|
|
345
|
+
"User Settings",
|
|
346
|
+
` Workflow source: ${configuredWorkflow.source}`,
|
|
347
|
+
` Configured workflow: ${workflowLabel(configuredWorkflow.value)}`,
|
|
349
348
|
` Completion source: ${snapshot.source}`,
|
|
350
349
|
` Configured completion: ${completionLabel(snapshot.value)}`,
|
|
351
|
-
` Configured
|
|
352
|
-
`
|
|
350
|
+
` Configured blocking worker limit: ${parallelLimit.value}`,
|
|
351
|
+
` Blocking worker limit source: ${parallelLimit.source}`,
|
|
353
352
|
...detachedLimits.values ? STATEFUL_LIMIT_DEFINITIONS.map((definition) => {
|
|
354
353
|
const configured = detachedLimits.values?.[definition.field];
|
|
355
354
|
return ` Configured ${definition.label.toLowerCase()}: ${configured?.value} (${configured?.source})`;
|
|
@@ -360,9 +359,11 @@ function formatStatus(status, snapshot, runtime) {
|
|
|
360
359
|
` Delegation target source: ${cwdPolicy.delegation.source}`,
|
|
361
360
|
` Configured consultation resources: ${consultResourceLabel(consult.value)}`,
|
|
362
361
|
` Consultation resource source: ${consult.source}`,
|
|
362
|
+
` Configured usage recording: ${usageRecording.enabled ? "enabled" : "disabled"}`,
|
|
363
|
+
` Usage recording source: ${usageRecording.source}`,
|
|
363
364
|
` Path: ${safeTerminalLine(snapshot.path)}`,
|
|
364
|
-
configuredWorkflow.error || snapshot.error || cwdPolicy.error || parallelLimit.error || detachedLimits.error || transport.error ? ` Warning: ${safeTerminalLine(configuredWorkflow.error ?? snapshot.error ?? cwdPolicy.error ?? parallelLimit.error ?? detachedLimits.error ?? transport.error ?? "invalid settings")}` : " Warning: none",
|
|
365
|
-
configuredWorkflow.value !== current ? "
|
|
365
|
+
configuredWorkflow.error || snapshot.error || cwdPolicy.error || parallelLimit.error || detachedLimits.error || transport.error || usageRecording.error ? ` Warning: ${safeTerminalLine(configuredWorkflow.error ?? snapshot.error ?? cwdPolicy.error ?? parallelLimit.error ?? detachedLimits.error ?? transport.error ?? usageRecording.error ?? "invalid settings")}` : " Warning: none",
|
|
366
|
+
configuredWorkflow.value !== current ? "The configured workflow differs from this session. Run /reload to apply it." : "Manual file changes require /reload."
|
|
366
367
|
].join("\n");
|
|
367
368
|
}
|
|
368
369
|
function currentWorkflow(runtime, status) {
|
|
@@ -373,19 +374,19 @@ function currentWorkflow(runtime, status) {
|
|
|
373
374
|
return "disabled";
|
|
374
375
|
}
|
|
375
376
|
function completionLabel(value) {
|
|
376
|
-
return value === "auto-resume" ? "
|
|
377
|
+
return value === "auto-resume" ? "Continue automatically when work finishes" : "Wait for my next message";
|
|
377
378
|
}
|
|
378
379
|
function consultationCwdLabel(value) {
|
|
379
|
-
return value === "current-workspace" ? "
|
|
380
|
+
return value === "current-workspace" ? "This workspace only" : "Any folder \xB7 no project resources when untrusted";
|
|
380
381
|
}
|
|
381
382
|
function delegationCwdLabel(value) {
|
|
382
383
|
switch (value) {
|
|
383
384
|
case "trusted-targets":
|
|
384
|
-
return "
|
|
385
|
+
return "This workspace or saved-trusted folders";
|
|
385
386
|
case "current-workspace":
|
|
386
|
-
return "
|
|
387
|
+
return "This workspace only";
|
|
387
388
|
case "anywhere":
|
|
388
|
-
return "
|
|
389
|
+
return "Any folder Pi can access";
|
|
389
390
|
}
|
|
390
391
|
}
|
|
391
392
|
function consultResourceLabel(value) {
|
|
@@ -393,7 +394,7 @@ function consultResourceLabel(value) {
|
|
|
393
394
|
case "project-context":
|
|
394
395
|
return "Project context only";
|
|
395
396
|
case "none":
|
|
396
|
-
return "No
|
|
397
|
+
return "No project resources";
|
|
397
398
|
case "all":
|
|
398
399
|
return "All trusted resources";
|
|
399
400
|
}
|
|
@@ -418,4 +419,4 @@ export {
|
|
|
418
419
|
delegationCwdLabel,
|
|
419
420
|
consultResourceLabel
|
|
420
421
|
};
|
|
421
|
-
//# sourceMappingURL=chunk-
|
|
422
|
+
//# sourceMappingURL=chunk-PBZMBTNJ.ts.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/stateful-limit-ui.ts", "../../src/workflow-ui.ts", "../../src/config-status.ts"],
|
|
4
|
+
"sourcesContent": ["import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport { projectAgentRecords } from \"./agent-projection.js\";\nimport type { ManagedAgent } from \"./registry.js\";\nimport { safeTerminalLine as safeTerminalText } from \"./safe-text.js\";\nimport { inspectStatefulLimitSettings, updateStatefulLimitSetting } from \"./settings.js\";\nimport type { StatefulSubagentRuntimeStatus } from \"./stateful.js\";\nimport {\n\tisValidStatefulLimit,\n\tresolveStatefulLimits,\n\tSTATEFUL_LIMIT_DEFINITIONS,\n\ttype StatefulLimitField,\n\ttype StatefulLimits,\n\tstatefulLimitDefinition,\n} from \"./stateful-limits.js\";\n\nexport interface StatefulLimitRuntime {\n\tgetRuntimeStatus(): StatefulSubagentRuntimeStatus;\n\tlistAgents(includeClosed?: boolean): ManagedAgent[];\n}\n\nexport interface StatefulLimitApplyOptions {\n\tsignal: AbortSignal;\n\tisCurrent(): boolean;\n}\n\nexport function statefulLimitListScreen(runtime: StatefulLimitRuntime) {\n\tconst inspected = inspectStatefulLimitSettings();\n\tconst current = runtime.getRuntimeStatus().limits;\n\treturn {\n\t\tkind: \"actions\" as const,\n\t\ttitle: \"Background Agent Limits\",\n\t\tlines: [\n\t\t\t\"These advanced limits apply after /reload or the next Pi session.\",\n\t\t\t\"Reloading can interrupt subagents saved for follow-up.\",\n\t\t\t...(inspected.error\n\t\t\t\t? [\n\t\t\t\t\t\t`Settings cannot be edited: ${safeTerminalText(inspected.error)}`,\n\t\t\t\t\t\t`Repair ${safeTerminalText(inspected.path)} and retry.`,\n\t\t\t\t\t]\n\t\t\t\t: []),\n\t\t],\n\t\titems: [\n\t\t\t...(inspected.values\n\t\t\t\t? STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\t\t\t\t\tconst configured = inspected.values?.[definition.field];\n\t\t\t\t\t\treturn {\n\t\t\t\t\t\t\tid: definition.field,\n\t\t\t\t\t\t\tlabel: definition.label,\n\t\t\t\t\t\t\tdescription: `Current: ${current[definition.field]} \u00B7 after reload: ${configured?.value ?? \"unavailable\"} (${configured?.source ?? \"unknown\"})`,\n\t\t\t\t\t\t\taction: \"pick-stateful-limit\" as const,\n\t\t\t\t\t\t};\n\t\t\t\t\t})\n\t\t\t\t: []),\n\t\t\t{ id: \"back\", label: \"Back\", action: \"back\" as const },\n\t\t],\n\t\thint: \"back\" as const,\n\t};\n}\n\nexport function statefulLimitInputScreen(field: StatefulLimitField, runtime: StatefulLimitRuntime) {\n\tconst definition = statefulLimitDefinition(field);\n\tconst inspected = inspectStatefulLimitSettings();\n\tconst configured = inspected.values?.[field];\n\treturn {\n\t\tkind: \"input\" as const,\n\t\ttitle: definition.label,\n\t\tlines: [\n\t\t\tdefinition.description,\n\t\t\t`Current session: ${runtime.getRuntimeStatus().limits[field]}`,\n\t\t\t`After reload: ${configured?.value ?? \"unavailable\"} (${configured?.source ?? \"unknown\"})`,\n\t\t\t`Allowed: whole numbers ${definition.minimum === 0 ? \"0 or greater\" : \"1 or greater\"}`,\n\t\t\t`Read from: ${safeTerminalText(inspected.path)}`,\n\t\t\t...(inspected.writePath !== inspected.path\n\t\t\t\t? [`Saves to: ${safeTerminalText(inspected.writePath)}`]\n\t\t\t\t: []),\n\t\t],\n\t\tplaceholder: \"Enter a whole number\",\n\t\taction: \"set-stateful-limit\" as const,\n\t\thint: \"back\" as const,\n\t};\n}\n\nexport async function applyStatefulLimitSetting(\n\tfield: StatefulLimitField,\n\tvalue: string | undefined,\n\tctx: ExtensionCommandContext,\n\truntime: StatefulLimitRuntime,\n\toptions: StatefulLimitApplyOptions,\n) {\n\tconst next = parseStatefulLimit(field, value);\n\tif (next === undefined) {\n\t\tnotifyValidationError(field, ctx);\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tconst inspected = inspectStatefulLimitSettings();\n\tif (inspected.error || !inspected.values) {\n\t\tif (options.isCurrent() && !options.signal.aborted) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Subagent settings cannot be edited: ${safeTerminalText(inspected.error ?? \"settings are unavailable\")}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tconst expected = configuredValues(inspected.values);\n\tif (next === expected[field]) return { kind: \"back\" as const };\n\n\tconst beforeAgents = runtime.listAgents();\n\tconst affectedBefore = projectedRemovedAgentIds(beforeAgents, expected, {\n\t\t...expected,\n\t\t[field]: next,\n\t});\n\tif (affectedBefore.length > 0) {\n\t\tconst confirmed = await ctx.ui.confirm(\n\t\t\t`Lower ${statefulLimitDefinition(field).label}?`,\n\t\t\t[\n\t\t\t\t`After reload, this value could exclude ${affectedBefore.length} saved subagent record${affectedBefore.length === 1 ? \"\" : \"s\"} from recovery.`,\n\t\t\t\t\"No subagent is removed now, and this menu will not reload Pi.\",\n\t\t\t\t\"A later state save can make excluded records unavailable for recovery.\",\n\t\t\t].join(\"\\n\\n\"),\n\t\t\t{ signal: options.signal },\n\t\t);\n\t\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\t\tif (!confirmed) return { kind: \"rejected\" as const };\n\t\tconst affectedAfter = projectedRemovedAgentIds(runtime.listAgents(), expected, {\n\t\t\t...expected,\n\t\t\t[field]: next,\n\t\t});\n\t\tif (!sameIds(affectedBefore, affectedAfter)) {\n\t\t\tctx.ui.notify(\n\t\t\t\t\"Current subagents changed while confirming; review the limit again.\",\n\t\t\t\t\"warning\",\n\t\t\t);\n\t\t\treturn { kind: \"rejected\" as const };\n\t\t}\n\t}\n\n\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\ttry {\n\t\tupdateStatefulLimitSetting(field, next, expected);\n\t} catch (error) {\n\t\tif (options.isCurrent() && !options.signal.aborted) {\n\t\t\tctx.ui.notify(\n\t\t\t\t`Background-agent limit was not saved; the previous setting is unchanged: ${formatError(error)}`,\n\t\t\t\t\"error\",\n\t\t\t);\n\t\t}\n\t\treturn { kind: \"rejected\" as const };\n\t}\n\tif (options.signal.aborted || !options.isCurrent()) return { kind: \"close\" as const };\n\tctx.ui.notify(\n\t\t`Saved ${statefulLimitDefinition(field).label.toLowerCase()}: ${next}. Applies after /reload; clear current subagents first if their work must not be interrupted.`,\n\t\t\"info\",\n\t);\n\treturn { kind: \"back\" as const };\n}\n\nexport function formatDetachedLimitSummary(status: StatefulSubagentRuntimeStatus): string {\n\treturn [\n\t\t`${status.limits.maxAgents} saved`,\n\t\t`${status.limits.maxActiveTurns} working at once`,\n\t\t`${status.limits.maxChildrenPerAgent} children each`,\n\t\t`${status.limits.maxDepth} nested levels`,\n\t\t`${status.limits.maxStoredAgents} stored records`,\n\t].join(\" \u00B7 \");\n}\n\nexport function formatConfiguredDetachedLimitDivergence(\n\tstatus: StatefulSubagentRuntimeStatus,\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): string | undefined {\n\tconst changed = STATEFUL_LIMIT_DEFINITIONS.flatMap((definition) => {\n\t\tconst configured = values[definition.field].value;\n\t\treturn configured === status.limits[definition.field]\n\t\t\t? []\n\t\t\t: [`${definition.label.toLowerCase()} ${configured}`];\n\t});\n\treturn changed.length > 0 ? `After /reload: ${changed.join(\" \u00B7 \")}` : undefined;\n}\n\nexport function formatConfiguredDetachedLimits(\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): string {\n\treturn STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\tconst snapshot = values[definition.field];\n\t\treturn `${definition.label.toLowerCase()} ${snapshot.value} (${snapshot.source})`;\n\t}).join(\" \u00B7 \");\n}\n\nexport function formatEmptyStatefulRuntime(status: StatefulSubagentRuntimeStatus): string {\n\tif (!status.enabled) return \"Background subagents are disabled in How subagents run.\";\n\tif (!status.initialized) return \"Background subagents have not started in this session.\";\n\treturn \"No subagents are working or saved for follow-up in this session.\";\n}\n\nfunction parseStatefulLimit(\n\tfield: StatefulLimitField,\n\tvalue: string | undefined,\n): number | undefined {\n\tconst normalized = value?.trim() ?? \"\";\n\tif (!/^\\d+$/u.test(normalized)) return undefined;\n\tconst parsed = Number(normalized);\n\treturn isValidStatefulLimit(field, parsed) ? parsed : undefined;\n}\n\nfunction notifyValidationError(field: StatefulLimitField, ctx: ExtensionCommandContext): void {\n\tconst definition = statefulLimitDefinition(field);\n\tctx.ui.notify(\n\t\t`${definition.label} must be a safe whole number ${definition.minimum === 0 ? \"0 or greater\" : \"1 or greater\"}.`,\n\t\t\"warning\",\n\t);\n}\n\nfunction configuredValues(\n\tvalues: NonNullable<ReturnType<typeof inspectStatefulLimitSettings>[\"values\"]>,\n): StatefulLimits {\n\treturn resolveStatefulLimits(\n\t\tObject.fromEntries(Object.entries(values).map(([field, snapshot]) => [field, snapshot.value])),\n\t);\n}\n\nfunction projectedRemovedAgentIds(\n\tagents: readonly ManagedAgent[],\n\tcurrent: StatefulLimits,\n\tnext: StatefulLimits,\n): string[] {\n\tconst restorable = agents.filter(\n\t\t(agent) => agent.state !== \"closed\" && agent.workspaceMode !== \"worktree\",\n\t);\n\tconst before = projectForReload(restorable, current);\n\tconst afterIds = new Set(projectForReload(restorable, next).map((agent) => agent.id));\n\treturn before.filter((agent) => !afterIds.has(agent.id)).map((agent) => agent.id);\n}\n\nfunction projectForReload(agents: readonly ManagedAgent[], limits: StatefulLimits): ManagedAgent[] {\n\tconst stored = projectAgentRecords(agents, { maxAgents: limits.maxStoredAgents });\n\treturn projectAgentRecords(stored, {\n\t\tmaxAgents: limits.maxAgents,\n\t\tmaxDepth: limits.maxDepth,\n\t});\n}\n\nfunction sameIds(left: readonly string[], right: readonly string[]): boolean {\n\treturn left.length === right.length && left.every((id, index) => id === right[index]);\n}\n\nfunction formatError(error: unknown): string {\n\treturn safeTerminalText(error instanceof Error ? error.message : String(error));\n}\n", "import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport type { DelegationWorkflow } from \"./settings/inspection.js\";\n\nexport async function showWorkflowPreview(\n\tctx: ExtensionCommandContext,\n\tcurrent: DelegationWorkflow,\n\tnext: DelegationWorkflow,\n\trequiresReload: boolean,\n\tsignal: AbortSignal,\n): Promise<boolean> {\n\tconst changes = workflowEffects(current, next);\n\treturn ctx.ui.confirm(\n\t\trequiresReload ? \"Save how subagents run and reload?\" : \"Save how subagents run?\",\n\t\t[\n\t\t\t`Current: ${workflowLabel(current)}`,\n\t\t\t`New: ${workflowLabel(next)}`,\n\t\t\t\"\",\n\t\t\t\"Effect:\",\n\t\t\t...(changes.length > 0 ? changes : [\"Keep the current registered tools\"]).map(\n\t\t\t\t(effect) => `- ${effect}`,\n\t\t\t),\n\t\t\t`- ${requiresReload ? \"Reload the extension to apply this tool surface\" : \"No reload is needed because the active tools already match\"}`,\n\t\t].join(\"\\n\"),\n\t\t{ signal },\n\t);\n}\n\nexport function workflowLabel(value: DelegationWorkflow): string {\n\tswitch (value) {\n\t\tcase \"all\":\n\t\t\treturn \"Background plus compatibility methods (async + sync)\";\n\t\tcase \"async-only\":\n\t\t\treturn \"Keep Pi available (async)\";\n\t\tcase \"blocking-only\":\n\t\t\treturn \"Compatibility blocking methods (sync)\";\n\t\tcase \"disabled\":\n\t\t\treturn \"Subagents disabled\";\n\t}\n}\n\nfunction workflowEffects(current: DelegationWorkflow, next: DelegationWorkflow): string[] {\n\tconst blockingEnabled = (value: DelegationWorkflow) =>\n\t\tvalue === \"all\" || value === \"blocking-only\";\n\tconst asyncEnabled = (value: DelegationWorkflow) => value === \"all\" || value === \"async-only\";\n\tconst awaitEnabled = (value: DelegationWorkflow) => blockingEnabled(value) && asyncEnabled(value);\n\tconst effects: string[] = [];\n\tif (blockingEnabled(current) !== blockingEnabled(next)) {\n\t\teffects.push(\n\t\t\tblockingEnabled(next)\n\t\t\t\t? \"Allow deprecated blocking `subagent` and supported read-only `subagent_consult`\"\n\t\t\t\t: \"Remove deprecated blocking `subagent` and supported read-only `subagent_consult`\",\n\t\t);\n\t}\n\tif (asyncEnabled(current) !== asyncEnabled(next)) {\n\t\teffects.push(\n\t\t\tasyncEnabled(next)\n\t\t\t\t? \"Allow background tools: `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`\"\n\t\t\t\t: \"Remove background tools: `subagent_spawn`, `subagent_send`, `subagent_manage`, and `subagent_mailbox`\",\n\t\t);\n\t}\n\tif (awaitEnabled(current) !== awaitEnabled(next)) {\n\t\teffects.push(\n\t\t\tawaitEnabled(next)\n\t\t\t\t? \"Allow the blocking retained-agent join: `subagent_await`\"\n\t\t\t\t: \"Remove the blocking retained-agent join: `subagent_await`\",\n\t\t);\n\t}\n\treturn effects;\n}\n", "import type { ExtensionCommandContext } from \"@earendil-works/pi-coding-agent\";\nimport type {\n\tCompletionDelivery,\n\tConsultationCwdPolicy,\n\tConsultResourcePolicy,\n\tDelegationCwdPolicy,\n} from \"./agents/types.js\";\nimport type { SubagentSettingsRuntime } from \"./config-ui.js\";\nimport { safeTerminalLine as safeTerminalText } from \"./safe-text.js\";\nimport type { DelegationWorkflow } from \"./settings/inspection.js\";\nimport {\n\tinspectBlockingParallelLimitSettings,\n\tinspectCompletionDeliverySettings,\n\tinspectConsultResourceSettings,\n\tinspectCwdPolicySettings,\n\tinspectDelegationWorkflowSettings,\n\tinspectStatefulLimitSettings,\n\tinspectStatefulTransportSettings,\n\tinspectUsageRecordingSettings,\n} from \"./settings.js\";\nimport type { StatefulSubagentRuntimeStatus } from \"./stateful.js\";\nimport {\n\tformatConfiguredDetachedLimitDivergence,\n\tformatDetachedLimitSummary,\n} from \"./stateful-limit-ui.js\";\nimport { STATEFUL_LIMIT_DEFINITIONS } from \"./stateful-limits.js\";\nimport { USAGE_RECORDING_RETENTION_DAYS } from \"./usage-recording-config.js\";\nimport { workflowLabel } from \"./workflow-ui.js\";\n\nexport function showSubagentStatus(\n\tctx: ExtensionCommandContext,\n\truntime: SubagentSettingsRuntime,\n): void {\n\tif (ctx.mode !== \"tui\" && !ctx.hasUI) return;\n\tconst snapshot = inspectCompletionDeliverySettings();\n\tctx.ui.notify(\n\t\tformatStatus(runtime.getRuntimeStatus(), snapshot, runtime),\n\t\tsnapshot.error ? \"warning\" : \"info\",\n\t);\n}\n\nexport function showSubagentHelp(\n\tctx: ExtensionCommandContext,\n\truntime: SubagentSettingsRuntime,\n): void {\n\tif (ctx.mode !== \"tui\" && !ctx.hasUI) return;\n\tctx.ui.notify(helpLines(runtime).join(\"\\n\"), \"info\");\n}\n\nexport function statusLines(runtime: SubagentSettingsRuntime): string[] {\n\tconst snapshot = inspectCompletionDeliverySettings();\n\treturn formatStatus(runtime.getRuntimeStatus(), snapshot, runtime).split(\"\\n\");\n}\n\nexport function helpLines(_runtime: SubagentSettingsRuntime): string[] {\n\treturn [\n\t\t\"Start here\",\n\t\t\" 1. Open How subagents run.\",\n\t\t\" 2. Choose the workflow that matches the tools and blocking behavior you need.\",\n\t\t\" 3. Open Completion and privacy if Pi must use background results in the current answer.\",\n\t\t\"The blocking subagent tool is deprecated and remains available only in compatibility workflows.\",\n\t\t\"subagent_consult and subagent_await remain supported.\",\n\t\t\"Current subagents shows work in progress and subagents saved for follow-up.\",\n\t\t\"Settings\",\n\t\t\" Folders and trusted resources \u2014 choose where subagents start and what consultations load.\",\n\t\t\" Completion and privacy \u2014 choose what Pi does when work finishes and whether usage is recorded.\",\n\t\t\" Agent defaults \u2014 choose tools, model, thinking effort, and time limit for each subagent.\",\n\t\t\" Advanced runtime settings \u2014 optional transport and capacity controls.\",\n\t\t\"Changes are saved immediately.\",\n\t\t\"Transport and background-agent limits apply after /reload.\",\n\t\t\"Commands\",\n\t\t\" /subagents \u2014 open the manager\",\n\t\t\" /subagents settings \u2014 open Settings\",\n\t\t\" /subagents status \u2014 show detailed diagnostics\",\n\t\t\" /subagents help \u2014 show this help\",\n\t\t\"Safety\",\n\t\t\"Folder choices control starting locations and loaded resources; they do not sandbox files, commands, or network access.\",\n\t\t\"Manage saved folder trust with Pi /trust, then restart Pi.\",\n\t];\n}\n\nexport function formatManagerSummary(\n\truntime: SubagentSettingsRuntime,\n\tstatus: StatefulSubagentRuntimeStatus,\n\tconfigured: ReturnType<typeof inspectDelegationWorkflowSettings>,\n): string {\n\tconst current = currentWorkflow(runtime, status);\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst detachedDivergence = detachedLimits.values\n\t\t? formatConfiguredDetachedLimitDivergence(status, detachedLimits.values)\n\t\t: undefined;\n\treturn [\n\t\t`How subagents run: ${workflowLabel(current)}`,\n\t\t`Subagents: ${status.activeAgents} working \u00B7 ${status.retainedAgents} saved for follow-up`,\n\t\t`When work finishes: ${completionLabel(status.completionDelivery)}`,\n\t\t...(configured.value !== current\n\t\t\t? [`Configured after reload: ${workflowLabel(configured.value)}`]\n\t\t\t: []),\n\t\t...(detachedDivergence ? [detachedDivergence] : []),\n\t\t...(configured.error || detachedLimits.error\n\t\t\t? [\"Action needed: Repair user settings. Open Diagnostics for details.\"]\n\t\t\t: []),\n\t].join(\"\\n\");\n}\n\nfunction formatStatus(\n\tstatus: StatefulSubagentRuntimeStatus,\n\tsnapshot: ReturnType<typeof inspectCompletionDeliverySettings>,\n\truntime?: SubagentSettingsRuntime,\n): string {\n\tconst configuredWorkflow = inspectDelegationWorkflowSettings();\n\tconst consult = inspectConsultResourceSettings();\n\tconst cwdPolicy = inspectCwdPolicySettings();\n\tconst parallelLimit = inspectBlockingParallelLimitSettings();\n\tconst detachedLimits = inspectStatefulLimitSettings();\n\tconst transport = inspectStatefulTransportSettings();\n\tconst usageRecording = inspectUsageRecordingSettings();\n\tconst current = runtime ? currentWorkflow(runtime, status) : configuredWorkflow.value;\n\tconst usageStatus = runtime?.getUsageRecordingStatus?.();\n\treturn [\n\t\t\"Current Session\",\n\t\t` How subagents run: ${workflowLabel(current)}`,\n\t\t` Background runtime: ${status.initialized ? \"initialized\" : status.enabled ? \"not initialized\" : \"disabled\"}`,\n\t\t` Transport: ${status.transport}`,\n\t\t` Configured transport: ${transport.value} (${transport.source})`,\n\t\t` When work finishes: ${completionLabel(status.completionDelivery)}`,\n\t\t` Read-only consultation folders: ${consultationCwdLabel(runtime?.getConsultationCwdPolicy() ?? cwdPolicy.consultation.value)}`,\n\t\t` Subagent folders: ${delegationCwdLabel(runtime?.getDelegationCwdPolicy() ?? cwdPolicy.delegation.value)}`,\n\t\t` Read-only consultation resources: ${consultResourceLabel(runtime?.getConsultResourcePolicy() ?? consult.value)}`,\n\t\t` Blocking worker limit: ${runtime?.getMaxParallelTasks() ?? parallelLimit.value} per request`,\n\t\t` Background-agent limits: ${formatDetachedLimitSummary(status)}`,\n\t\t` Subagents: ${status.activeAgents} working, ${status.retainedAgents} saved for follow-up`,\n\t\t` Local usage recording: ${usageStatus?.enabled ? \"enabled\" : \"disabled\"}`,\n\t\t` Recorded events this session: ${usageStatus?.recordedEvents ?? 0}`,\n\t\t` Usage retention: ${usageStatus?.retentionDays ?? USAGE_RECORDING_RETENTION_DAYS} days`,\n\t\t` Usage path: ${safeTerminalText(usageStatus?.path ?? \"unavailable\")}`,\n\t\t\"User Settings\",\n\t\t` Workflow source: ${configuredWorkflow.source}`,\n\t\t` Configured workflow: ${workflowLabel(configuredWorkflow.value)}`,\n\t\t` Completion source: ${snapshot.source}`,\n\t\t` Configured completion: ${completionLabel(snapshot.value)}`,\n\t\t` Configured blocking worker limit: ${parallelLimit.value}`,\n\t\t` Blocking worker limit source: ${parallelLimit.source}`,\n\t\t...(detachedLimits.values\n\t\t\t? STATEFUL_LIMIT_DEFINITIONS.map((definition) => {\n\t\t\t\t\tconst configured = detachedLimits.values?.[definition.field];\n\t\t\t\t\treturn ` Configured ${definition.label.toLowerCase()}: ${configured?.value} (${configured?.source})`;\n\t\t\t\t})\n\t\t\t: [\" Configured detached limits: unavailable\"]),\n\t\t` Configured consultation target: ${consultationCwdLabel(cwdPolicy.consultation.value)}`,\n\t\t` Consultation target source: ${cwdPolicy.consultation.source}`,\n\t\t` Configured delegation target: ${delegationCwdLabel(cwdPolicy.delegation.value)}`,\n\t\t` Delegation target source: ${cwdPolicy.delegation.source}`,\n\t\t` Configured consultation resources: ${consultResourceLabel(consult.value)}`,\n\t\t` Consultation resource source: ${consult.source}`,\n\t\t` Configured usage recording: ${usageRecording.enabled ? \"enabled\" : \"disabled\"}`,\n\t\t` Usage recording source: ${usageRecording.source}`,\n\t\t` Path: ${safeTerminalText(snapshot.path)}`,\n\t\tconfiguredWorkflow.error ||\n\t\tsnapshot.error ||\n\t\tcwdPolicy.error ||\n\t\tparallelLimit.error ||\n\t\tdetachedLimits.error ||\n\t\ttransport.error ||\n\t\tusageRecording.error\n\t\t\t? ` Warning: ${safeTerminalText(configuredWorkflow.error ?? snapshot.error ?? cwdPolicy.error ?? parallelLimit.error ?? detachedLimits.error ?? transport.error ?? usageRecording.error ?? \"invalid settings\")}`\n\t\t\t: \" Warning: none\",\n\t\tconfiguredWorkflow.value !== current\n\t\t\t? \"The configured workflow differs from this session. Run /reload to apply it.\"\n\t\t\t: \"Manual file changes require /reload.\",\n\t].join(\"\\n\");\n}\n\nexport function currentWorkflow(\n\truntime: SubagentSettingsRuntime,\n\tstatus: StatefulSubagentRuntimeStatus,\n): DelegationWorkflow {\n\tconst blocking = runtime.getBlockingEnabled();\n\tif (blocking && status.enabled) return \"all\";\n\tif (status.enabled) return \"async-only\";\n\tif (blocking) return \"blocking-only\";\n\treturn \"disabled\";\n}\n\nexport function completionLabel(value: CompletionDelivery): string {\n\treturn value === \"auto-resume\"\n\t\t? \"Continue automatically when work finishes\"\n\t\t: \"Wait for my next message\";\n}\n\nexport function consultationCwdLabel(value: ConsultationCwdPolicy): string {\n\treturn value === \"current-workspace\"\n\t\t? \"This workspace only\"\n\t\t: \"Any folder \u00B7 no project resources when untrusted\";\n}\n\nexport function delegationCwdLabel(value: DelegationCwdPolicy): string {\n\tswitch (value) {\n\t\tcase \"trusted-targets\":\n\t\t\treturn \"This workspace or saved-trusted folders\";\n\t\tcase \"current-workspace\":\n\t\t\treturn \"This workspace only\";\n\t\tcase \"anywhere\":\n\t\t\treturn \"Any folder Pi can access\";\n\t}\n}\n\nexport function consultResourceLabel(value: ConsultResourcePolicy): string {\n\tswitch (value) {\n\t\tcase \"project-context\":\n\t\t\treturn \"Project context only\";\n\t\tcase \"none\":\n\t\t\treturn \"No project resources\";\n\t\tcase \"all\":\n\t\t\treturn \"All trusted resources\";\n\t}\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -5,7 +5,7 @@ import {
|
|
|
5
5
|
} from "./chunk-RSUXZD6S.ts";
|
|
6
6
|
import {
|
|
7
7
|
appendDelegationContract
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-JSZIP73U.ts";
|
|
9
9
|
import {
|
|
10
10
|
DEFAULT_MAX_CONTEXT_BYTES,
|
|
11
11
|
redactPrivateText,
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
buildStatefulTurnPrompt,
|
|
50
50
|
resolveStatefulTurnTimeout
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-PGLSFLYW.ts.map
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
// @ts-nocheck -- generated JavaScript uses a .ts extension for Pi's Jiti loader.
|
|
3
3
|
import {
|
|
4
4
|
discoverAgents
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-LASD73CM.ts";
|
|
6
6
|
import {
|
|
7
7
|
readSubagentSettings
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-TMZRHIIK.ts";
|
|
9
9
|
import {
|
|
10
10
|
safeTerminalLine
|
|
11
11
|
} from "./chunk-SWGQLFSD.ts";
|
|
@@ -49,4 +49,4 @@ export {
|
|
|
49
49
|
isWriteCapable,
|
|
50
50
|
confirmProjectAgent
|
|
51
51
|
};
|
|
52
|
-
//# sourceMappingURL=chunk-
|
|
52
|
+
//# sourceMappingURL=chunk-TM2R67J3.ts.map
|
|
@@ -4,13 +4,13 @@ import {
|
|
|
4
4
|
STATEFUL_LIMIT_FIELDS,
|
|
5
5
|
isValidStatefulLimit,
|
|
6
6
|
resolveStatefulLimits
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-VDG7LTYE.ts";
|
|
8
8
|
import {
|
|
9
9
|
CONSULTATION_CWD_POLICIES,
|
|
10
10
|
CONSULT_RESOURCE_POLICIES,
|
|
11
11
|
DELEGATION_CWD_POLICIES,
|
|
12
12
|
isThinkingLevel
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-4AQSF7AS.ts";
|
|
14
14
|
import {
|
|
15
15
|
DEFAULT_MAX_PARALLEL_TASKS,
|
|
16
16
|
MAX_CONFIGURABLE_PARALLEL_TASKS,
|
|
@@ -153,6 +153,15 @@ function normalizeSubagentSettings(value) {
|
|
|
153
153
|
}
|
|
154
154
|
settings.cwdPolicy = cwdPolicy;
|
|
155
155
|
}
|
|
156
|
+
if (hasOwn(value, "usageRecording")) {
|
|
157
|
+
if (!isPlainObject(value.usageRecording)) return void 0;
|
|
158
|
+
const usageRecording = {};
|
|
159
|
+
if (hasOwn(value.usageRecording, "enabled")) {
|
|
160
|
+
if (typeof value.usageRecording.enabled !== "boolean") return void 0;
|
|
161
|
+
usageRecording.enabled = value.usageRecording.enabled;
|
|
162
|
+
}
|
|
163
|
+
settings.usageRecording = usageRecording;
|
|
164
|
+
}
|
|
156
165
|
return settings;
|
|
157
166
|
}
|
|
158
167
|
|
|
@@ -178,6 +187,22 @@ function buildSubagentSettingsSnapshot(inspected) {
|
|
|
178
187
|
...inspected.error ? { error: inspected.error } : {}
|
|
179
188
|
};
|
|
180
189
|
}
|
|
190
|
+
function buildUsageRecordingSettingsSnapshot(inspected) {
|
|
191
|
+
if (!inspected.raw || !inspected.settings) {
|
|
192
|
+
return {
|
|
193
|
+
path: inspected.path,
|
|
194
|
+
enabled: false,
|
|
195
|
+
source: "default",
|
|
196
|
+
...inspected.error ? { error: inspected.error } : {}
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
const explicit = isPlainObject(inspected.raw.usageRecording) && hasOwn(inspected.raw.usageRecording, "enabled");
|
|
200
|
+
return {
|
|
201
|
+
path: inspected.path,
|
|
202
|
+
enabled: inspected.settings.usageRecording?.enabled === true,
|
|
203
|
+
source: explicit ? "user settings" : "default"
|
|
204
|
+
};
|
|
205
|
+
}
|
|
181
206
|
function buildConsultResourceSettingsSnapshot(inspected) {
|
|
182
207
|
if (!inspected.raw || !inspected.settings) {
|
|
183
208
|
return {
|
|
@@ -405,6 +430,9 @@ function inspectDelegationWorkflowSettings() {
|
|
|
405
430
|
function inspectCompletionDeliverySettings() {
|
|
406
431
|
return buildCompletionDeliverySettingsSnapshot(inspectSubagentSettingsDocument());
|
|
407
432
|
}
|
|
433
|
+
function inspectUsageRecordingSettings() {
|
|
434
|
+
return buildUsageRecordingSettingsSnapshot(inspectSubagentSettingsDocument());
|
|
435
|
+
}
|
|
408
436
|
function inspectStatefulTransportSettings() {
|
|
409
437
|
return buildStatefulTransportSettingsSnapshot(inspectSubagentSettingsDocument());
|
|
410
438
|
}
|
|
@@ -460,9 +488,10 @@ export {
|
|
|
460
488
|
inspectCwdPolicySettings,
|
|
461
489
|
inspectDelegationWorkflowSettings,
|
|
462
490
|
inspectCompletionDeliverySettings,
|
|
491
|
+
inspectUsageRecordingSettings,
|
|
463
492
|
inspectStatefulTransportSettings,
|
|
464
493
|
inspectBlockingParallelLimitSettings,
|
|
465
494
|
inspectStatefulLimitSettings,
|
|
466
495
|
pathEntryExists
|
|
467
496
|
};
|
|
468
|
-
//# sourceMappingURL=chunk-
|
|
497
|
+
//# sourceMappingURL=chunk-TMZRHIIK.ts.map
|