crewly 1.20.216 → 1.20.218
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/config/skills/agent/core/project-tickets/SKILL.md +17 -1
- package/config/skills/agent/core/project-tickets/execute.sh +14 -4
- package/config/skills/agent/core/project-tickets/execute.test.sh +6 -0
- package/config/skills/agent/core/publish-app/SKILL.md +18 -11
- package/config/skills/agent/core/publish-app/execute.sh +1 -1
- package/dist/backend/backend/src/constants.d.ts +32 -1
- package/dist/backend/backend/src/constants.d.ts.map +1 -1
- package/dist/backend/backend/src/constants.js +32 -1
- package/dist/backend/backend/src/constants.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts +2 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.d.ts.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js +4 -2
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.controller.js.map +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.d.ts +1 -1
- package/dist/backend/backend/src/controllers/project-tickets/project-tickets.routes.js +1 -1
- package/dist/backend/backend/src/index.d.ts.map +1 -1
- package/dist/backend/backend/src/index.js +29 -3
- package/dist/backend/backend/src/index.js.map +1 -1
- package/dist/backend/backend/src/models/Team.d.ts +17 -0
- package/dist/backend/backend/src/models/Team.d.ts.map +1 -1
- package/dist/backend/backend/src/models/Team.js +28 -10
- package/dist/backend/backend/src/models/Team.js.map +1 -1
- package/dist/backend/backend/src/scripts/input-guard-classify.d.ts +24 -0
- package/dist/backend/backend/src/scripts/input-guard-classify.d.ts.map +1 -1
- package/dist/backend/backend/src/scripts/input-guard-classify.js +38 -5
- package/dist/backend/backend/src/scripts/input-guard-classify.js.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts +26 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js +41 -0
- package/dist/backend/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts +67 -9
- package/dist/backend/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js +57 -10
- package/dist/backend/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts +2 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js +9 -0
- package/dist/backend/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts +17 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js +21 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-decision.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts +4 -3
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js +6 -4
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-messages.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts +6 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js +4 -0
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot-stats.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts +23 -5
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js +42 -21
- package/dist/backend/backend/src/services/project-tickets/ticket-autopilot.service.js.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js +20 -1
- package/dist/backend/backend/src/services/project-tickets/ticket-file.js.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js +7 -0
- package/dist/backend/backend/src/services/reconciler/reconciler.service.js.map +1 -1
- package/dist/backend/backend/src/services/session/input-circuit-breaker.d.ts +130 -0
- package/dist/backend/backend/src/services/session/input-circuit-breaker.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/input-circuit-breaker.js +180 -0
- package/dist/backend/backend/src/services/session/input-circuit-breaker.js.map +1 -0
- package/dist/backend/backend/src/services/session/input-guard-known-screens.d.ts +41 -0
- package/dist/backend/backend/src/services/session/input-guard-known-screens.d.ts.map +1 -0
- package/dist/backend/backend/src/services/session/input-guard-known-screens.js +168 -0
- package/dist/backend/backend/src/services/session/input-guard-known-screens.js.map +1 -0
- package/dist/backend/backend/src/services/session/input-ledger.d.ts +2 -1
- package/dist/backend/backend/src/services/session/input-ledger.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/input-ledger.js +5 -1
- package/dist/backend/backend/src/services/session/input-ledger.js.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts +52 -0
- package/dist/backend/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/session-command-helper.js +155 -3
- package/dist/backend/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts +81 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.d.ts.map +1 -1
- package/dist/backend/backend/src/services/session/tui-input-guard.js +238 -45
- package/dist/backend/backend/src/services/session/tui-input-guard.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts +5 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.js +3 -1
- package/dist/backend/backend/src/services/spend/spend-cap.service.js.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts +21 -7
- package/dist/backend/backend/src/services/spend/spend-ledger.service.d.ts.map +1 -1
- package/dist/backend/backend/src/services/spend/spend-ledger.service.js +35 -17
- package/dist/backend/backend/src/services/spend/spend-ledger.service.js.map +1 -1
- package/dist/backend/backend/src/services/system/input-guard-release-check.d.ts +10 -1
- package/dist/backend/backend/src/services/system/input-guard-release-check.d.ts.map +1 -1
- package/dist/backend/backend/src/services/system/input-guard-release-check.js +15 -2
- package/dist/backend/backend/src/services/system/input-guard-release-check.js.map +1 -1
- package/dist/backend/backend/src/services/tl-delegation/lead-share.d.ts +8 -1
- package/dist/backend/backend/src/services/tl-delegation/lead-share.d.ts.map +1 -1
- package/dist/backend/backend/src/services/tl-delegation/lead-share.js +11 -6
- package/dist/backend/backend/src/services/tl-delegation/lead-share.js.map +1 -1
- package/dist/backend/backend/src/types/project-ticket.types.d.ts +5 -0
- package/dist/backend/backend/src/types/project-ticket.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/project-ticket.types.js +1 -0
- package/dist/backend/backend/src/types/project-ticket.types.js.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/backend/backend/src/types/ticket-autopilot.types.js +28 -0
- package/dist/backend/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/backend/build-info.json +2 -2
- package/dist/cli/backend/src/constants.d.ts +32 -1
- package/dist/cli/backend/src/constants.d.ts.map +1 -1
- package/dist/cli/backend/src/constants.js +32 -1
- package/dist/cli/backend/src/constants.js.map +1 -1
- package/dist/cli/backend/src/models/Team.d.ts +17 -0
- package/dist/cli/backend/src/models/Team.d.ts.map +1 -1
- package/dist/cli/backend/src/models/Team.js +28 -10
- package/dist/cli/backend/src/models/Team.js.map +1 -1
- package/dist/cli/backend/src/scripts/input-guard-classify.d.ts +24 -0
- package/dist/cli/backend/src/scripts/input-guard-classify.d.ts.map +1 -1
- package/dist/cli/backend/src/scripts/input-guard-classify.js +38 -5
- package/dist/cli/backend/src/scripts/input-guard-classify.js.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts +26 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js +41 -0
- package/dist/cli/backend/src/services/messaging/input-blocked-retry.service.js.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts +67 -9
- package/dist/cli/backend/src/services/monitoring/token-usage.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js +57 -10
- package/dist/cli/backend/src/services/monitoring/token-usage.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts +2 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js +9 -0
- package/dist/cli/backend/src/services/project-tickets/project-ticket.service.js.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.d.ts.map +1 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js +20 -1
- package/dist/cli/backend/src/services/project-tickets/ticket-file.js.map +1 -1
- package/dist/cli/backend/src/services/session/input-circuit-breaker.d.ts +130 -0
- package/dist/cli/backend/src/services/session/input-circuit-breaker.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/input-circuit-breaker.js +180 -0
- package/dist/cli/backend/src/services/session/input-circuit-breaker.js.map +1 -0
- package/dist/cli/backend/src/services/session/input-guard-known-screens.d.ts +41 -0
- package/dist/cli/backend/src/services/session/input-guard-known-screens.d.ts.map +1 -0
- package/dist/cli/backend/src/services/session/input-guard-known-screens.js +168 -0
- package/dist/cli/backend/src/services/session/input-guard-known-screens.js.map +1 -0
- package/dist/cli/backend/src/services/session/input-ledger.d.ts +2 -1
- package/dist/cli/backend/src/services/session/input-ledger.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/input-ledger.js +5 -1
- package/dist/cli/backend/src/services/session/input-ledger.js.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts +52 -0
- package/dist/cli/backend/src/services/session/session-command-helper.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/session-command-helper.js +155 -3
- package/dist/cli/backend/src/services/session/session-command-helper.js.map +1 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts +81 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.d.ts.map +1 -1
- package/dist/cli/backend/src/services/session/tui-input-guard.js +238 -45
- package/dist/cli/backend/src/services/session/tui-input-guard.js.map +1 -1
- package/dist/cli/backend/src/services/system/input-guard-release-check.d.ts +10 -1
- package/dist/cli/backend/src/services/system/input-guard-release-check.d.ts.map +1 -1
- package/dist/cli/backend/src/services/system/input-guard-release-check.js +15 -2
- package/dist/cli/backend/src/services/system/input-guard-release-check.js.map +1 -1
- package/dist/cli/backend/src/types/project-ticket.types.d.ts +5 -0
- package/dist/cli/backend/src/types/project-ticket.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/project-ticket.types.js +1 -0
- package/dist/cli/backend/src/types/project-ticket.types.js.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts +9 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.d.ts.map +1 -1
- package/dist/cli/backend/src/types/ticket-autopilot.types.js +28 -0
- package/dist/cli/backend/src/types/ticket-autopilot.types.js.map +1 -1
- package/dist/cli/cli/src/commands/doctor.d.ts.map +1 -1
- package/dist/cli/cli/src/commands/doctor.js +10 -3
- package/dist/cli/cli/src/commands/doctor.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Input circuit breaker — stops redelivery storms against an input box the
|
|
3
|
+
* harness will not touch.
|
|
4
|
+
*
|
|
5
|
+
* Why (crewly#1028, ce-vera 2026-10-03/04): Claude Code collapsed the
|
|
6
|
+
* harness's own paste into markers the guard could not attribute, so every
|
|
7
|
+
* delivery was refused (`input_not_ours`). The reconciler's fast loop kept
|
|
8
|
+
* redelivering and waking the agent every few seconds — ~1,100 failed
|
|
9
|
+
* redeliveries and ~1,100 failed wakes in 2h45m — with no backoff and only a
|
|
10
|
+
* generic notice.
|
|
11
|
+
*
|
|
12
|
+
* The rule: once every delivery to an agent has been refused for
|
|
13
|
+
* OPEN_AFTER_MS, the circuit opens. While open, automatic redelivery/wake
|
|
14
|
+
* for that agent is allowed only as a probe, one per window, the window
|
|
15
|
+
* doubling from PROBE_FIRST_MS up to PROBE_MAX_MS. Opening tells the owner
|
|
16
|
+
* once (listener wired in index.ts). A delivery that goes through closes the
|
|
17
|
+
* circuit; outside input into the terminal (the owner acting on it) allows
|
|
18
|
+
* the next probe at once; a session restart forgets it.
|
|
19
|
+
*
|
|
20
|
+
* Module-level and dependency-free (constants only) so the session helper,
|
|
21
|
+
* the input ledger and the reconciler can share it without import cycles.
|
|
22
|
+
* In memory: a restart starts with every circuit closed.
|
|
23
|
+
*
|
|
24
|
+
* @module services/session/input-circuit-breaker
|
|
25
|
+
*/
|
|
26
|
+
import { INPUT_CIRCUIT_CONSTANTS } from '../../constants.js';
|
|
27
|
+
const circuits = new Map();
|
|
28
|
+
const totals = { opened: 0, suppressed: 0, probes: 0, closed: 0 };
|
|
29
|
+
let openListener = null;
|
|
30
|
+
/**
|
|
31
|
+
* Set who is told when a circuit opens (once per blocked episode).
|
|
32
|
+
*
|
|
33
|
+
* @param listener - The listener, or null
|
|
34
|
+
*/
|
|
35
|
+
export function setInputCircuitOpenListener(listener) {
|
|
36
|
+
openListener = listener;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* The guard refused a delivery to this session.
|
|
40
|
+
*
|
|
41
|
+
* @param sessionName - The session
|
|
42
|
+
* @param info - What the guard saw
|
|
43
|
+
* @param now - Clock (ms)
|
|
44
|
+
*/
|
|
45
|
+
export function noteInputRefused(sessionName, info, now = Date.now()) {
|
|
46
|
+
const c = circuits.get(sessionName) ?? {
|
|
47
|
+
since: now,
|
|
48
|
+
refusals: 0,
|
|
49
|
+
state: info.state,
|
|
50
|
+
inputLength: info.inputLength,
|
|
51
|
+
open: false,
|
|
52
|
+
probes: 0,
|
|
53
|
+
nextProbeAt: 0,
|
|
54
|
+
suppressed: 0,
|
|
55
|
+
};
|
|
56
|
+
c.refusals += 1;
|
|
57
|
+
c.state = info.state;
|
|
58
|
+
c.inputLength = info.inputLength;
|
|
59
|
+
circuits.set(sessionName, c);
|
|
60
|
+
if (c.open || now - c.since < INPUT_CIRCUIT_CONSTANTS.OPEN_AFTER_MS)
|
|
61
|
+
return;
|
|
62
|
+
c.open = true;
|
|
63
|
+
c.openedAt = now;
|
|
64
|
+
c.nextProbeAt = now + INPUT_CIRCUIT_CONSTANTS.PROBE_FIRST_MS;
|
|
65
|
+
totals.opened += 1;
|
|
66
|
+
try {
|
|
67
|
+
openListener?.({
|
|
68
|
+
sessionName,
|
|
69
|
+
state: c.state,
|
|
70
|
+
inputLength: c.inputLength,
|
|
71
|
+
refusals: c.refusals,
|
|
72
|
+
blockedForMs: now - c.since,
|
|
73
|
+
nextProbeInMs: INPUT_CIRCUIT_CONSTANTS.PROBE_FIRST_MS,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// The notice is best effort; the circuit is open either way.
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* A delivery to this session went through: its circuit closes.
|
|
82
|
+
*
|
|
83
|
+
* @param sessionName - The session
|
|
84
|
+
* @param _now - Clock (ms), unused
|
|
85
|
+
*/
|
|
86
|
+
export function noteInputDelivered(sessionName, _now = Date.now()) {
|
|
87
|
+
const c = circuits.get(sessionName);
|
|
88
|
+
if (!c)
|
|
89
|
+
return;
|
|
90
|
+
if (c.open)
|
|
91
|
+
totals.closed += 1;
|
|
92
|
+
circuits.delete(sessionName);
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Someone typed into the session's terminal (likely acting on the alert):
|
|
96
|
+
* let the next automatic delivery through at once.
|
|
97
|
+
*
|
|
98
|
+
* @param sessionName - The session
|
|
99
|
+
*/
|
|
100
|
+
export function noteInputTouched(sessionName) {
|
|
101
|
+
const c = circuits.get(sessionName);
|
|
102
|
+
if (c?.open)
|
|
103
|
+
c.nextProbeAt = 0;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Forget a session's circuit (session created, killed or relaunched).
|
|
107
|
+
*
|
|
108
|
+
* @param sessionName - The session
|
|
109
|
+
*/
|
|
110
|
+
export function forgetInputCircuit(sessionName) {
|
|
111
|
+
circuits.delete(sessionName);
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* Whether an automatic redelivery/wake into this session may go ahead. Always
|
|
115
|
+
* true while the circuit is closed. While open, true once per probe window
|
|
116
|
+
* (and the window doubles, up to PROBE_MAX_MS); otherwise false, counted as
|
|
117
|
+
* suppressed.
|
|
118
|
+
*
|
|
119
|
+
* @param sessionName - The session
|
|
120
|
+
* @param now - Clock (ms)
|
|
121
|
+
* @returns True to attempt the delivery
|
|
122
|
+
*/
|
|
123
|
+
export function shouldAttemptDelivery(sessionName, now = Date.now()) {
|
|
124
|
+
const c = circuits.get(sessionName);
|
|
125
|
+
if (!c?.open)
|
|
126
|
+
return true;
|
|
127
|
+
if (now >= c.nextProbeAt) {
|
|
128
|
+
c.probes += 1;
|
|
129
|
+
totals.probes += 1;
|
|
130
|
+
const wait = Math.min(INPUT_CIRCUIT_CONSTANTS.PROBE_FIRST_MS * 2 ** c.probes, INPUT_CIRCUIT_CONSTANTS.PROBE_MAX_MS);
|
|
131
|
+
c.nextProbeAt = now + wait;
|
|
132
|
+
return true;
|
|
133
|
+
}
|
|
134
|
+
c.suppressed += 1;
|
|
135
|
+
totals.suppressed += 1;
|
|
136
|
+
return false;
|
|
137
|
+
}
|
|
138
|
+
/**
|
|
139
|
+
* Whether a session's circuit is open.
|
|
140
|
+
*
|
|
141
|
+
* @param sessionName - The session
|
|
142
|
+
* @returns True while open
|
|
143
|
+
*/
|
|
144
|
+
export function isInputCircuitOpen(sessionName) {
|
|
145
|
+
return circuits.get(sessionName)?.open === true;
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* Open circuits and counters (for /health and diagnostics).
|
|
149
|
+
*
|
|
150
|
+
* @param now - Clock (ms)
|
|
151
|
+
* @returns The stats
|
|
152
|
+
*/
|
|
153
|
+
export function inputCircuitStats(now = Date.now()) {
|
|
154
|
+
const open = [];
|
|
155
|
+
for (const [sessionName, c] of circuits) {
|
|
156
|
+
if (!c.open)
|
|
157
|
+
continue;
|
|
158
|
+
open.push({
|
|
159
|
+
sessionName,
|
|
160
|
+
state: c.state,
|
|
161
|
+
inputLength: c.inputLength,
|
|
162
|
+
refusals: c.refusals,
|
|
163
|
+
blockedForMs: now - c.since,
|
|
164
|
+
suppressed: c.suppressed,
|
|
165
|
+
probes: c.probes,
|
|
166
|
+
nextProbeInMs: Math.max(0, c.nextProbeAt - now),
|
|
167
|
+
});
|
|
168
|
+
}
|
|
169
|
+
return { open, totals: { ...totals } };
|
|
170
|
+
}
|
|
171
|
+
/** Clear every circuit and counter (tests). */
|
|
172
|
+
export function resetInputCircuitsForTesting() {
|
|
173
|
+
circuits.clear();
|
|
174
|
+
totals.opened = 0;
|
|
175
|
+
totals.suppressed = 0;
|
|
176
|
+
totals.probes = 0;
|
|
177
|
+
totals.closed = 0;
|
|
178
|
+
openListener = null;
|
|
179
|
+
}
|
|
180
|
+
//# sourceMappingURL=input-circuit-breaker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-circuit-breaker.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-circuit-breaker.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known input-box screens the input guard must keep reading right — run by
|
|
3
|
+
* the release input-guard check (`npm run check:input-guard` /
|
|
4
|
+
* `crewly doctor --input-guard`) against the NEW build's classifier,
|
|
5
|
+
* alongside the live agent screens.
|
|
6
|
+
*
|
|
7
|
+
* The views are rendered from the recorded Claude Code 2.1.288 frames in
|
|
8
|
+
* `__fixtures__/tui/claude-code-2.1.288/` (the same bytes the unit tests
|
|
9
|
+
* replay), kept here as plain screen rows because the `.ansi` fixtures are
|
|
10
|
+
* not part of a build. The split-paste frames reproduce the screen of
|
|
11
|
+
* crewly#1028 (ce-vera, Claude Code 2.1.288/289): one harness paste that
|
|
12
|
+
* Claude Code showed as two markers on one line,
|
|
13
|
+
* `❯ [Pasted text #3 +7 lines][Pasted text #4 +6 lines]`, idle and mid-turn.
|
|
14
|
+
*
|
|
15
|
+
* @module services/session/input-guard-known-screens
|
|
16
|
+
*/
|
|
17
|
+
import type { TuiInputStage, TuiInputState, TuiInputView } from './tui-input-guard.js';
|
|
18
|
+
/** One known screen and how the guard must read it. */
|
|
19
|
+
export interface KnownInputScreen {
|
|
20
|
+
/** Short name (reported as `fixture:<name>`) */
|
|
21
|
+
name: string;
|
|
22
|
+
/** Runtime and version the frame was recorded from */
|
|
23
|
+
runtime: string;
|
|
24
|
+
view: TuiInputView;
|
|
25
|
+
/** The message being delivered (or '' for none) */
|
|
26
|
+
message: string;
|
|
27
|
+
stage: TuiInputStage;
|
|
28
|
+
/** Harness pastes since the last outside input (the input ledger), oldest first */
|
|
29
|
+
pastes: string[];
|
|
30
|
+
/** The reading the guard must give */
|
|
31
|
+
expect: TuiInputState;
|
|
32
|
+
/** Why this screen matters */
|
|
33
|
+
why: string;
|
|
34
|
+
}
|
|
35
|
+
/** A 15-line brief (14 line breaks), like the CE-93 brief of crewly#1028. */
|
|
36
|
+
export declare const SPLIT_BRIEF: string;
|
|
37
|
+
/** A 5-line message (4 line breaks). */
|
|
38
|
+
export declare const FIVE_LINES: string;
|
|
39
|
+
/** The screens, in report order. */
|
|
40
|
+
export declare const KNOWN_INPUT_SCREENS: readonly KnownInputScreen[];
|
|
41
|
+
//# sourceMappingURL=input-guard-known-screens.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-guard-known-screens.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-guard-known-screens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,OAAO,KAAK,EAAE,aAAa,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEvF,uDAAuD;AACvD,MAAM,WAAW,gBAAgB;IAChC,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,sDAAsD;IACtD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,YAAY,CAAC;IACnB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,aAAa,CAAC;IACrB,mFAAmF;IACnF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,sCAAsC;IACtC,MAAM,EAAE,aAAa,CAAC;IACtB,8BAA8B;IAC9B,GAAG,EAAE,MAAM,CAAC;CACZ;AAED,6EAA6E;AAC7E,eAAO,MAAM,WAAW,QAgBZ,CAAC;AAEb,wCAAwC;AACxC,eAAO,MAAM,UAAU,QAAsF,CAAC;AA0E9G,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,SAAS,gBAAgB,EA6D1D,CAAC"}
|
|
@@ -0,0 +1,168 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Known input-box screens the input guard must keep reading right — run by
|
|
3
|
+
* the release input-guard check (`npm run check:input-guard` /
|
|
4
|
+
* `crewly doctor --input-guard`) against the NEW build's classifier,
|
|
5
|
+
* alongside the live agent screens.
|
|
6
|
+
*
|
|
7
|
+
* The views are rendered from the recorded Claude Code 2.1.288 frames in
|
|
8
|
+
* `__fixtures__/tui/claude-code-2.1.288/` (the same bytes the unit tests
|
|
9
|
+
* replay), kept here as plain screen rows because the `.ansi` fixtures are
|
|
10
|
+
* not part of a build. The split-paste frames reproduce the screen of
|
|
11
|
+
* crewly#1028 (ce-vera, Claude Code 2.1.288/289): one harness paste that
|
|
12
|
+
* Claude Code showed as two markers on one line,
|
|
13
|
+
* `❯ [Pasted text #3 +7 lines][Pasted text #4 +6 lines]`, idle and mid-turn.
|
|
14
|
+
*
|
|
15
|
+
* @module services/session/input-guard-known-screens
|
|
16
|
+
*/
|
|
17
|
+
/** A 15-line brief (14 line breaks), like the CE-93 brief of crewly#1028. */
|
|
18
|
+
export const SPLIT_BRIEF = [
|
|
19
|
+
'[TASK] CE-93: brand preview page',
|
|
20
|
+
'',
|
|
21
|
+
'## Goal',
|
|
22
|
+
'Ship the brand preview page behind /preview-brand.',
|
|
23
|
+
'',
|
|
24
|
+
'## Steps',
|
|
25
|
+
'1. Read the design notes.',
|
|
26
|
+
'2. Build the page.',
|
|
27
|
+
'3. Add the locale paths.',
|
|
28
|
+
'4. Run the tests.',
|
|
29
|
+
'',
|
|
30
|
+
'## Done when',
|
|
31
|
+
'- the page renders in both locales',
|
|
32
|
+
'- the ticket has a screenshot',
|
|
33
|
+
'Reply with report-status when done.',
|
|
34
|
+
].join('\n');
|
|
35
|
+
/** A 5-line message (4 line breaks). */
|
|
36
|
+
export const FIVE_LINES = ['M1-MARK line one', 'line two', 'line three', 'line four', 'line five'].join('\n');
|
|
37
|
+
/** `labelled-rule-empty.ansi` */
|
|
38
|
+
const LABELLED_EMPTY = {
|
|
39
|
+
lines: [
|
|
40
|
+
' ▐▛███▛█ Claude Code v2.1.288',
|
|
41
|
+
'▝▜██████▀ Opus 5.5 · Claude Max',
|
|
42
|
+
' ▝▝ ▝▝ @fixture-agent · /…/7573773a-4098-43b3-a9f9-af36146453a7/scratchpad/cap2/cc',
|
|
43
|
+
'',
|
|
44
|
+
'',
|
|
45
|
+
'──────────────────────────────────────────────────────────────────────────────────── fixture-agent ─',
|
|
46
|
+
'❯',
|
|
47
|
+
'────────────────────────────────────────────────────────────────────────────────────────────────────',
|
|
48
|
+
' ⏵⏵ auto mode on (shift+tab to cycle) · ← for agents ◐ medium · /effort',
|
|
49
|
+
],
|
|
50
|
+
cursorRow: 6,
|
|
51
|
+
};
|
|
52
|
+
/** `labelled-rule-pasted-marker.ansi` */
|
|
53
|
+
const LABELLED_ONE_MARKER = {
|
|
54
|
+
lines: [
|
|
55
|
+
' ▐▛███▛█ Claude Code v2.1.288',
|
|
56
|
+
'▝▜██████▀ Opus 5.5 · Claude Max',
|
|
57
|
+
' ▝▝ ▝▝ @fixture-agent · /…/7573773a-4098-43b3-a9f9-af36146453a7/scratchpad/cap2/cc',
|
|
58
|
+
'',
|
|
59
|
+
'',
|
|
60
|
+
'──────────────────────────────────────────────────────────────────────────────────── fixture-agent ─',
|
|
61
|
+
'❯\u00a0[Pasted text #1 +4 lines]',
|
|
62
|
+
'────────────────────────────────────────────────────────────────────────────────────────────────────',
|
|
63
|
+
' paste again to expand ◐ medium · /effort',
|
|
64
|
+
],
|
|
65
|
+
cursorRow: 6,
|
|
66
|
+
};
|
|
67
|
+
/** `split-paste-two-markers.ansi` */
|
|
68
|
+
const SPLIT_TWO_MARKERS = {
|
|
69
|
+
lines: [
|
|
70
|
+
' ▐▛███▛█ Claude Code v2.1.288',
|
|
71
|
+
'▝▜██████▀ Opus 5.5 · Claude Max',
|
|
72
|
+
' ▝▝ ▝▝ @fixture-agent · /…/7573773a-4098-43b3-a9f9-af36146453a7/scratchpad/cap2/cc',
|
|
73
|
+
'',
|
|
74
|
+
'',
|
|
75
|
+
'──────────────────────────────────────────────────────────────────────────────────── fixture-agent ─',
|
|
76
|
+
'❯\u00a0[Pasted text #3 +7 lines][Pasted text #4 +6 lines]',
|
|
77
|
+
'────────────────────────────────────────────────────────────────────────────────────────────────────',
|
|
78
|
+
' paste again to expand ◐ medium · /effort',
|
|
79
|
+
],
|
|
80
|
+
cursorRow: 6,
|
|
81
|
+
};
|
|
82
|
+
/** `busy-split-paste-two-markers.ansi` */
|
|
83
|
+
const BUSY_SPLIT_TWO_MARKERS = {
|
|
84
|
+
lines: [
|
|
85
|
+
' ▐▛███▛█ Claude Code v2.1.288',
|
|
86
|
+
'▝▜██████▀ Opus 5.5 · Claude Max',
|
|
87
|
+
' ▝▝ ▝▝ @fixture-agent · /…/7573773a-4098-43b3-a9f9-af36146453a7/scratchpad/cap2/cc',
|
|
88
|
+
'',
|
|
89
|
+
'',
|
|
90
|
+
'❯ M1-MARK line one',
|
|
91
|
+
' line two',
|
|
92
|
+
' line three',
|
|
93
|
+
' line four',
|
|
94
|
+
' line five',
|
|
95
|
+
'',
|
|
96
|
+
'✳ Flambéing…',
|
|
97
|
+
'',
|
|
98
|
+
'──────────────────────────────────────────────────────────────────────────────────── fixture-agent ─',
|
|
99
|
+
'❯\u00a0[Pasted text #4 +7 lines][Pasted text #5 +6 lines]',
|
|
100
|
+
'────────────────────────────────────────────────────────────────────────────────────────────────────',
|
|
101
|
+
' paste again to expand',
|
|
102
|
+
],
|
|
103
|
+
cursorRow: 14,
|
|
104
|
+
};
|
|
105
|
+
/** The screens, in report order. */
|
|
106
|
+
export const KNOWN_INPUT_SCREENS = [
|
|
107
|
+
{
|
|
108
|
+
name: 'labelled-empty',
|
|
109
|
+
runtime: 'claude-code-2.1.288',
|
|
110
|
+
view: LABELLED_EMPTY,
|
|
111
|
+
message: SPLIT_BRIEF,
|
|
112
|
+
stage: 'before-write',
|
|
113
|
+
pastes: [],
|
|
114
|
+
expect: 'empty',
|
|
115
|
+
why: 'an empty box under a labelled top rule reads empty',
|
|
116
|
+
},
|
|
117
|
+
{
|
|
118
|
+
name: 'own-single-marker',
|
|
119
|
+
runtime: 'claude-code-2.1.288',
|
|
120
|
+
view: LABELLED_ONE_MARKER,
|
|
121
|
+
message: '',
|
|
122
|
+
stage: 'recovery',
|
|
123
|
+
pastes: [FIVE_LINES],
|
|
124
|
+
expect: 'ours',
|
|
125
|
+
why: 'our own collapsed paste ("[Pasted text #1 +4 lines]") is ours',
|
|
126
|
+
},
|
|
127
|
+
{
|
|
128
|
+
name: 'own-split-paste',
|
|
129
|
+
runtime: 'claude-code-2.1.288',
|
|
130
|
+
view: SPLIT_TWO_MARKERS,
|
|
131
|
+
message: '',
|
|
132
|
+
stage: 'recovery',
|
|
133
|
+
pastes: [SPLIT_BRIEF],
|
|
134
|
+
expect: 'ours',
|
|
135
|
+
why: 'crewly#1028: one paste of ours shown as two markers is ours (Enter, not a redelivery storm)',
|
|
136
|
+
},
|
|
137
|
+
{
|
|
138
|
+
name: 'own-split-paste-busy',
|
|
139
|
+
runtime: 'claude-code-2.1.288',
|
|
140
|
+
view: BUSY_SPLIT_TWO_MARKERS,
|
|
141
|
+
message: '',
|
|
142
|
+
stage: 'recovery',
|
|
143
|
+
pastes: [SPLIT_BRIEF],
|
|
144
|
+
expect: 'ours',
|
|
145
|
+
why: 'crewly#1028 mid-turn: the split paste stays ours while the agent works',
|
|
146
|
+
},
|
|
147
|
+
{
|
|
148
|
+
name: 'owner-split-paste',
|
|
149
|
+
runtime: 'claude-code-2.1.288',
|
|
150
|
+
view: SPLIT_TWO_MARKERS,
|
|
151
|
+
message: SPLIT_BRIEF,
|
|
152
|
+
stage: 'before-write',
|
|
153
|
+
pastes: [],
|
|
154
|
+
expect: 'foreign',
|
|
155
|
+
why: 'the same markers with no paste of ours on record (the owner pasted) are never ours',
|
|
156
|
+
},
|
|
157
|
+
{
|
|
158
|
+
name: 'split-paste-wrong-shape',
|
|
159
|
+
runtime: 'claude-code-2.1.288',
|
|
160
|
+
view: SPLIT_TWO_MARKERS,
|
|
161
|
+
message: '',
|
|
162
|
+
stage: 'recovery',
|
|
163
|
+
pastes: [FIVE_LINES],
|
|
164
|
+
expect: 'foreign',
|
|
165
|
+
why: 'markers that do not add up to any paste of ours are not ours',
|
|
166
|
+
},
|
|
167
|
+
];
|
|
168
|
+
//# sourceMappingURL=input-guard-known-screens.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"input-guard-known-screens.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-guard-known-screens.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAsBH,6EAA6E;AAC7E,MAAM,CAAC,MAAM,WAAW,GAAG;IAC1B,kCAAkC;IAClC,EAAE;IACF,SAAS;IACT,oDAAoD;IACpD,EAAE;IACF,UAAU;IACV,2BAA2B;IAC3B,oBAAoB;IACpB,0BAA0B;IAC1B,mBAAmB;IACnB,EAAE;IACF,cAAc;IACd,oCAAoC;IACpC,+BAA+B;IAC/B,qCAAqC;CACrC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAEb,wCAAwC;AACxC,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,kBAAkB,EAAE,UAAU,EAAE,YAAY,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAE9G,iCAAiC;AACjC,MAAM,cAAc,GAAiB;IACpC,KAAK,EAAE;QACN,iCAAiC;QACjC,kCAAkC;QAClC,wFAAwF;QACxF,EAAE;QACF,EAAE;QACF,sGAAsG;QACtG,GAAG;QACH,sGAAsG;QACtG,oGAAoG;KACpG;IACD,SAAS,EAAE,CAAC;CACZ,CAAC;AAEF,yCAAyC;AACzC,MAAM,mBAAmB,GAAiB;IACzC,KAAK,EAAE;QACN,iCAAiC;QACjC,kCAAkC;QAClC,wFAAwF;QACxF,EAAE;QACF,EAAE;QACF,sGAAsG;QACtG,kCAAkC;QAClC,sGAAsG;QACtG,oGAAoG;KACpG;IACD,SAAS,EAAE,CAAC;CACZ,CAAC;AAEF,qCAAqC;AACrC,MAAM,iBAAiB,GAAiB;IACvC,KAAK,EAAE;QACN,iCAAiC;QACjC,kCAAkC;QAClC,wFAAwF;QACxF,EAAE;QACF,EAAE;QACF,sGAAsG;QACtG,2DAA2D;QAC3D,sGAAsG;QACtG,oGAAoG;KACpG;IACD,SAAS,EAAE,CAAC;CACZ,CAAC;AAEF,0CAA0C;AAC1C,MAAM,sBAAsB,GAAiB;IAC5C,KAAK,EAAE;QACN,iCAAiC;QACjC,kCAAkC;QAClC,wFAAwF;QACxF,EAAE;QACF,EAAE;QACF,oBAAoB;QACpB,YAAY;QACZ,cAAc;QACd,aAAa;QACb,aAAa;QACb,EAAE;QACF,cAAc;QACd,EAAE;QACF,sGAAsG;QACtG,2DAA2D;QAC3D,sGAAsG;QACtG,yBAAyB;KACzB;IACD,SAAS,EAAE,EAAE;CACb,CAAC;AAEF,oCAAoC;AACpC,MAAM,CAAC,MAAM,mBAAmB,GAAgC;IAC/D;QACC,IAAI,EAAE,gBAAgB;QACtB,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,cAAc;QACpB,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,OAAO;QACf,GAAG,EAAE,oDAAoD;KACzD;IACD;QACC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,CAAC,UAAU,CAAC;QACpB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,+DAA+D;KACpE;IACD;QACC,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC;QACrB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,6FAA6F;KAClG;IACD;QACC,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,sBAAsB;QAC5B,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,CAAC,WAAW,CAAC;QACrB,MAAM,EAAE,MAAM;QACd,GAAG,EAAE,wEAAwE;KAC7E;IACD;QACC,IAAI,EAAE,mBAAmB;QACzB,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,WAAW;QACpB,KAAK,EAAE,cAAc;QACrB,MAAM,EAAE,EAAE;QACV,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,oFAAoF;KACzF;IACD;QACC,IAAI,EAAE,yBAAyB;QAC/B,OAAO,EAAE,qBAAqB;QAC9B,IAAI,EAAE,iBAAiB;QACvB,OAAO,EAAE,EAAE;QACX,KAAK,EAAE,UAAU;QACjB,MAAM,EAAE,CAAC,UAAU,CAAC;QACpB,MAAM,EAAE,SAAS;QACjB,GAAG,EAAE,8DAA8D;KACnE;CACD,CAAC"}
|
|
@@ -18,7 +18,8 @@
|
|
|
18
18
|
* Other harness writes (OAuth relogin, runtime-terms answers, `/clear`) are
|
|
19
19
|
* submitted at once and leave nothing in the box; they are neither.
|
|
20
20
|
*
|
|
21
|
-
* Module-level and dependency-free
|
|
21
|
+
* Module-level and nearly dependency-free (only the input circuit breaker,
|
|
22
|
+
* itself dependency-free) so the gateway, controllers and the
|
|
22
23
|
* session helper can share it without import cycles. In memory: a restart
|
|
23
24
|
* recreates every session, which starts a new ledger.
|
|
24
25
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-ledger.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-ledger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-ledger.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAIH,yBAAyB;AACzB,MAAM,WAAW,YAAY;IAC5B,yBAAyB;IACzB,OAAO,EAAE,MAAM,CAAC;IAChB,4BAA4B;IAC5B,EAAE,EAAE,MAAM,CAAC;CACX;AAcD;;;;;;GAMG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,IAAI,CAKpG;AAED;;;;;;;GAOG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,GAAE,MAAmB,GAAG,IAAI,CAOnF;AAED;;;;;GAKG;AACH,wBAAgB,8BAA8B,CAAC,WAAW,EAAE,MAAM,GAAG,YAAY,EAAE,CAElF;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE1E;AAED;;;;;;GAMG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,YAAY,KAAK,OAAO,GAAG,IAAI,CAI/F;AAED;;;;;;GAMG;AACH,wBAAgB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,CAK1F;AAED;;;;;GAKG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAAC,CAE5F;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,KAAK,OAAO,GAAG,IAAI,CAGrH;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI,CAE3D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,IAAI,MAAM,EAAE,CAEpD;AAED,kCAAkC;AAClC,wBAAgB,0BAA0B,IAAI,IAAI,CAEjD"}
|
|
@@ -18,12 +18,14 @@
|
|
|
18
18
|
* Other harness writes (OAuth relogin, runtime-terms answers, `/clear`) are
|
|
19
19
|
* submitted at once and leave nothing in the box; they are neither.
|
|
20
20
|
*
|
|
21
|
-
* Module-level and dependency-free
|
|
21
|
+
* Module-level and nearly dependency-free (only the input circuit breaker,
|
|
22
|
+
* itself dependency-free) so the gateway, controllers and the
|
|
22
23
|
* session helper can share it without import cycles. In memory: a restart
|
|
23
24
|
* recreates every session, which starts a new ledger.
|
|
24
25
|
*
|
|
25
26
|
* @module services/session/input-ledger
|
|
26
27
|
*/
|
|
28
|
+
import { noteInputTouched } from './input-circuit-breaker.js';
|
|
27
29
|
/** Most pastes remembered per session */
|
|
28
30
|
const MAX_PASTES = 10;
|
|
29
31
|
const ledgers = new Map();
|
|
@@ -54,6 +56,8 @@ export function noteOutsideInput(sessionName, at = Date.now()) {
|
|
|
54
56
|
ledger.lastOutsideInputAt = at;
|
|
55
57
|
ledger.pastes = [];
|
|
56
58
|
ledgers.set(sessionName, ledger);
|
|
59
|
+
// Someone is acting on the terminal: an open delivery circuit probes at once.
|
|
60
|
+
noteInputTouched(sessionName);
|
|
57
61
|
}
|
|
58
62
|
/**
|
|
59
63
|
* The harness pastes made since the last outside input, oldest first.
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"input-ledger.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-ledger.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"input-ledger.js","sourceRoot":"","sources":["../../../../../../backend/src/services/session/input-ledger.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,4BAA4B,CAAC;AAiB9D,yCAAyC;AACzC,MAAM,UAAU,GAAG,EAAE,CAAC;AAEtB,MAAM,OAAO,GAAG,IAAI,GAAG,EAAkB,CAAC;AAE1C;;;;;;GAMG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,OAAe,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC7F,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrE,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU;QAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAClG,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,KAAa,IAAI,CAAC,GAAG,EAAE;IAC5E,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrE,MAAM,CAAC,kBAAkB,GAAG,EAAE,CAAC;IAC/B,MAAM,CAAC,MAAM,GAAG,EAAE,CAAC;IACnB,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;IACjC,8EAA8E;IAC9E,gBAAgB,CAAC,WAAW,CAAC,CAAC;AAC/B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,8BAA8B,CAAC,WAAmB;IACjE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,MAAM,IAAI,EAAE,CAAC,CAAC,CAAC;AACtD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACrD,OAAO,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,kBAAkB,CAAC;AACrD,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB,EAAE,IAAkC;IACxF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,CAAC,MAAM;QAAE,OAAO;IACpB,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AAC5C,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,eAAe,CAAC,WAAmB,EAAE,MAAc,EAAE,OAAe;IACnF,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;IACrE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;QAAE,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,OAAO,EAAE,CAAC,CAAC;IAC3F,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU;QAAE,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,EAAE,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,UAAU,CAAC,CAAC;IAC/F,OAAO,CAAC,GAAG,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC/C,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,KAAK,IAAI,EAAE,CAAC,CAAC,CAAC;AACrD,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB,EAAE,IAAyD;IAC9G,MAAM,MAAM,GAAG,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IACxC,IAAI,MAAM;QAAE,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;AACtD,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,WAAmB;IACpD,OAAO,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;AAC7B,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,yBAAyB;IACxC,OAAO,CAAC,GAAG,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC;AAC5G,CAAC;AAED,kCAAkC;AAClC,MAAM,UAAU,0BAA0B;IACzC,OAAO,CAAC,KAAK,EAAE,CAAC;AACjB,CAAC"}
|
|
@@ -17,6 +17,24 @@
|
|
|
17
17
|
*/
|
|
18
18
|
import type { ISession, ISessionBackend } from './session-backend.interface.js';
|
|
19
19
|
import { type TuiInputReading, type TuiInputStage } from './tui-input-guard.js';
|
|
20
|
+
/**
|
|
21
|
+
* Write a message to a file an agent can read (owner-only permissions).
|
|
22
|
+
* Files older than FILE_DELIVERY_KEEP_MS are pruned on the way.
|
|
23
|
+
*
|
|
24
|
+
* @param dir - Directory for delivery files
|
|
25
|
+
* @param sessionName - The session
|
|
26
|
+
* @param message - The message
|
|
27
|
+
* @returns The file path
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeDeliveryFile(dir: string, sessionName: string, message: string): string;
|
|
30
|
+
/**
|
|
31
|
+
* The one-line pointer pasted instead of a message the runtime collapsed.
|
|
32
|
+
*
|
|
33
|
+
* @param message - The message (for its routing tags)
|
|
34
|
+
* @param file - Where the message was written
|
|
35
|
+
* @returns A single short line
|
|
36
|
+
*/
|
|
37
|
+
export declare function buildFileReferenceLine(message: string, file: string): string;
|
|
20
38
|
/**
|
|
21
39
|
* Key code mappings for special keys
|
|
22
40
|
*/
|
|
@@ -203,6 +221,40 @@ export declare class SessionCommandHelper {
|
|
|
203
221
|
* @param message - The message to send
|
|
204
222
|
*/
|
|
205
223
|
private sendMessageGuarded;
|
|
224
|
+
/**
|
|
225
|
+
* Where messages delivered by file reference are written (tests replace
|
|
226
|
+
* it). Default: `<CREWLY_HOME>/deliveries`.
|
|
227
|
+
*/
|
|
228
|
+
static deliveryDir: () => string;
|
|
229
|
+
/**
|
|
230
|
+
* Whether a box read right after our paste holds that paste, collapsed by
|
|
231
|
+
* the runtime into markers we cannot account for line by line
|
|
232
|
+
* (crewly#1028): nothing but paste markers and pieces of the message, and
|
|
233
|
+
* no outside input since we pasted it into a box we proved empty — the
|
|
234
|
+
* input ledger drops our pastes on any outside input, so the paste still
|
|
235
|
+
* being on record is that proof. An owner's own paste is never this: it
|
|
236
|
+
* arrives as outside input.
|
|
237
|
+
*
|
|
238
|
+
* @param sessionName - The session
|
|
239
|
+
* @param reading - The box read after our paste
|
|
240
|
+
* @param message - What we pasted
|
|
241
|
+
* @returns True when the box is our collapsed paste
|
|
242
|
+
*/
|
|
243
|
+
private isOwnUnmatchedCollapse;
|
|
244
|
+
/**
|
|
245
|
+
* Clear our collapsed paste and deliver the message as a one-line pointer
|
|
246
|
+
* to a file holding it: a short single line is never collapsed, so the
|
|
247
|
+
* box shows exactly what we pasted and the usual exact-match check can
|
|
248
|
+
* press Enter. Used once per delivery, only after
|
|
249
|
+
* {@link isOwnUnmatchedCollapse} proved the box ours.
|
|
250
|
+
*
|
|
251
|
+
* @param sessionName - The session
|
|
252
|
+
* @param message - The message
|
|
253
|
+
* @param current - The box as just read
|
|
254
|
+
* @throws TuiInputGuardError when the box does not clear or the pointer
|
|
255
|
+
* does not show as pasted
|
|
256
|
+
*/
|
|
257
|
+
private deliverViaFileReference;
|
|
206
258
|
/**
|
|
207
259
|
* After a delivery: if the box still holds the collapsed marker of our
|
|
208
260
|
* own paste, the Enter was lost — press Enter once and look again. Runs
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"session-command-helper.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-command-helper.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AAOhF,OAAO,
|
|
1
|
+
{"version":3,"file":"session-command-helper.d.ts","sourceRoot":"","sources":["../../../../../../backend/src/services/session/session-command-helper.ts"],"names":[],"mappings":"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"}
|