@joshuafolkken/kit 1.1128.0 → 1.1136.0
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/.claude/agents/investigator.md +17 -0
- package/.claude/settings.json +1 -0
- package/.claude/skills/workflow-commands/backlogrun-progress.md +2 -2
- package/.claude/skills/workflow-commands/delegation.md +5 -1
- package/SECURITY.md +1 -0
- package/dist/hooks/batch-guard.js +4 -4
- package/dist/hooks/{chunk-77J7IEQM.js → chunk-FO2I7UT7.js} +1 -1
- package/dist/hooks/{chunk-4JZDP5X5.js → chunk-GDU26K3J.js} +9 -1
- package/dist/hooks/{chunk-QVLT52OV.js → chunk-HANSKHES.js} +2 -2
- package/dist/hooks/{chunk-5SD2YM7Z.js → chunk-HBKZLITF.js} +4 -4
- package/dist/hooks/{chunk-AIOIOMPX.js → chunk-JKKTVDAG.js} +128 -61
- package/dist/hooks/{chunk-M7QKEKWO.js → chunk-KBXZLMRH.js} +9 -28
- package/dist/hooks/{chunk-XYUIQOW3.js → chunk-KOKOAV6D.js} +2 -2
- package/dist/hooks/{chunk-NXYMNPUQ.js → chunk-LJBLGHEH.js} +59 -19
- package/dist/hooks/{chunk-MKVGBQPA.js → chunk-NFZGFGOR.js} +1 -1
- package/dist/hooks/{chunk-7HVB7SZG.js → chunk-RFWWUI5F.js} +4 -4
- package/dist/hooks/codex-hook-adapter.js +10 -10
- package/dist/hooks/duplicate-read-guard.js +5 -5
- package/dist/hooks/format-edited.js +2 -2
- package/dist/hooks/inputs.json +199 -198
- package/dist/hooks/investigation-guard.js +5 -5
- package/dist/hooks/pretool-guard.js +9 -9
- package/dist/hooks/stop-guard.js +3 -3
- package/dist/josh.js +8 -1
- package/package.json +6 -4
- package/scripts/delegation/delegation-policy.ts +9 -1
- package/scripts/delegation/investigation-guard.ts +1 -1
- package/scripts/delegation/investigation-reads.ts +105 -19
- package/scripts/document/capped-print.ts +74 -0
- package/scripts/document/document-section-cli.ts +4 -3
- package/scripts/gate/scoped-green.ts +25 -14
- package/scripts/init/claude-kit-only-settings.ts +29 -0
- package/scripts/init/init-copy-content.ts +8 -2
- package/scripts/init/initial-commit.ts +24 -0
- package/scripts/init/start-exec.ts +16 -3
- package/scripts/init/start-steps.ts +8 -12
- package/scripts/issue/issue-read-cli.ts +1 -0
- package/scripts/issue/issue-report-failures.ts +6 -2
- package/scripts/issue/issue-state-cli.ts +1 -1
- package/scripts/josh/josh-commands-lane.ts +1 -1
- package/scripts/josh/josh-commands-project.ts +7 -0
- package/scripts/lane/lane-await.ts +46 -2
- package/scripts/lane/lane-cli.ts +11 -13
- package/scripts/release/github-release-environment.ts +1 -0
- package/scripts/release/github-release.ts +103 -17
- package/scripts/run/run-carry-cli.ts +3 -1
- package/scripts/run/run-carry-conversation.ts +94 -0
- package/scripts/run/run-carry-reclaim.ts +37 -0
- package/scripts/run/run-carry.ts +21 -5
- package/scripts/run/run-merge-steps.ts +4 -1
- package/scripts/test/test-related.ts +1 -6
- package/scripts/test/test-unit-guard.ts +21 -7
- package/scripts/time-runtime/time-spans.ts +4 -0
- package/templates/workflows/github-release.yml +13 -25
|
@@ -7,7 +7,6 @@ import {
|
|
|
7
7
|
PORCELAIN_FLAG,
|
|
8
8
|
RECENT_REQUEST_WINDOW,
|
|
9
9
|
agent_role_profile,
|
|
10
|
-
agent_session_environment,
|
|
11
10
|
bash_triggers,
|
|
12
11
|
cli_flags,
|
|
13
12
|
error_text,
|
|
@@ -24,6 +23,7 @@ import {
|
|
|
24
23
|
lane_park,
|
|
25
24
|
lane_registry,
|
|
26
25
|
open_issue_schema,
|
|
26
|
+
own_session,
|
|
27
27
|
parse_json_object_safe,
|
|
28
28
|
read_json_listing,
|
|
29
29
|
repo_origin,
|
|
@@ -35,31 +35,31 @@ import {
|
|
|
35
35
|
run_tail,
|
|
36
36
|
shell_segments,
|
|
37
37
|
tail_commands
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-JKKTVDAG.js";
|
|
39
39
|
import {
|
|
40
40
|
find_local_bin_upwards
|
|
41
41
|
} from "./chunk-3V37IID6.js";
|
|
42
42
|
import {
|
|
43
43
|
batch_outcome
|
|
44
|
-
} from "./chunk-
|
|
44
|
+
} from "./chunk-KOKOAV6D.js";
|
|
45
45
|
import {
|
|
46
46
|
investigation_refusal
|
|
47
|
-
} from "./chunk-
|
|
47
|
+
} from "./chunk-RFWWUI5F.js";
|
|
48
48
|
import {
|
|
49
49
|
duplicate_read_outcome
|
|
50
|
-
} from "./chunk-
|
|
50
|
+
} from "./chunk-HBKZLITF.js";
|
|
51
51
|
import {
|
|
52
52
|
investigation_reads
|
|
53
|
-
} from "./chunk-
|
|
53
|
+
} from "./chunk-LJBLGHEH.js";
|
|
54
54
|
import {
|
|
55
55
|
lane_guard_policy,
|
|
56
56
|
time_batch_guard
|
|
57
|
-
} from "./chunk-
|
|
57
|
+
} from "./chunk-HANSKHES.js";
|
|
58
58
|
import {
|
|
59
59
|
hook_decision,
|
|
60
60
|
lane_child_marker,
|
|
61
61
|
run_issue_number
|
|
62
|
-
} from "./chunk-
|
|
62
|
+
} from "./chunk-NFZGFGOR.js";
|
|
63
63
|
import {
|
|
64
64
|
PLATFORM_TEMP_ROOT,
|
|
65
65
|
cost_attribute,
|
|
@@ -71,7 +71,7 @@ import {
|
|
|
71
71
|
lane_paths,
|
|
72
72
|
stamp_file,
|
|
73
73
|
time_shell
|
|
74
|
-
} from "./chunk-
|
|
74
|
+
} from "./chunk-GDU26K3J.js";
|
|
75
75
|
|
|
76
76
|
// scripts/rules/direct-filing.ts
|
|
77
77
|
var DIRECT_FILING_REASON = '\u26D4 direct filing: an Issue is filed with `pnpm josh issue:file "<title>" --body-file <path> --depth <0|1|2> [--route <route>] [--label <name>] [--repo <owner/repo>]`, never with `gh api \u2026/issues` or `gh issue create`. The command runs every filing step in order \u2014 the duplicate scout, the body lint and its classification labels, the depth and `route:` labels, the `## Origin` check when filing into another repository, and `epic:bundle` after the create \u2014 so none of them is a step to remember. When the scout prints candidates it holds the filing: read each, then reissue with `--distinct <N,\u2026>` for the ones that are separate deliverables. Reference: `docs/josh-commands-automation.md` \u2192 "`josh issue:file`". **This rule fires on every occurrence, not once per run.**';
|
|
@@ -893,25 +893,6 @@ var cost_verdict = {
|
|
|
893
893
|
report_over
|
|
894
894
|
};
|
|
895
895
|
|
|
896
|
-
// scripts/cost-runtime/own-session.ts
|
|
897
|
-
var NOT_FOUND = -1;
|
|
898
|
-
function session_id_of(environment) {
|
|
899
|
-
const value = environment[agent_session_environment.SESSION_ID_KEY];
|
|
900
|
-
return value === void 0 || value === "" ? void 0 : value;
|
|
901
|
-
}
|
|
902
|
-
function select_own_session(files, environment) {
|
|
903
|
-
const session_id = session_id_of(environment);
|
|
904
|
-
if (session_id === void 0) {
|
|
905
|
-
return { kind: "own", index: cost_transcript.latest_own_index(files) };
|
|
906
|
-
}
|
|
907
|
-
const index = files.findIndex((file) => file.session_id === session_id);
|
|
908
|
-
return index === NOT_FOUND ? { kind: "absent", session_id } : { kind: "own", index };
|
|
909
|
-
}
|
|
910
|
-
var own_session = {
|
|
911
|
-
session_id_of,
|
|
912
|
-
select_own_session
|
|
913
|
-
};
|
|
914
|
-
|
|
915
896
|
// scripts/cost-runtime/transcript-cwd.ts
|
|
916
897
|
import path3 from "node:path";
|
|
917
898
|
function resolve(target, cwd) {
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
lane_guard_policy,
|
|
3
3
|
time_batch_guard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-HANSKHES.js";
|
|
5
5
|
import {
|
|
6
6
|
hook_decision
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-NFZGFGOR.js";
|
|
8
8
|
|
|
9
9
|
// scripts/hooks/batch-guard.ts
|
|
10
10
|
import { text } from "node:stream/consumers";
|
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
import {
|
|
2
2
|
time_batch_guard
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-HANSKHES.js";
|
|
4
4
|
import {
|
|
5
5
|
hook_decision
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-NFZGFGOR.js";
|
|
7
7
|
import {
|
|
8
8
|
cost_blocks,
|
|
9
9
|
cost_transcript,
|
|
10
10
|
time_bundle_call,
|
|
11
11
|
time_shell,
|
|
12
12
|
time_spans
|
|
13
|
-
} from "./chunk-
|
|
13
|
+
} from "./chunk-GDU26K3J.js";
|
|
14
14
|
|
|
15
15
|
// scripts/delegation/investigation-reads.ts
|
|
16
16
|
import path from "node:path";
|
|
@@ -19,6 +19,7 @@ import path from "node:path";
|
|
|
19
19
|
var DELEGATE_VERDICT = "delegate";
|
|
20
20
|
var KEEP_VERDICT = "keep";
|
|
21
21
|
var INVESTIGATION_FILE_THRESHOLD = 3;
|
|
22
|
+
var INVESTIGATION_SEARCH_TURN_THRESHOLD = 3;
|
|
22
23
|
var DELEGATABLE_STEPS = [
|
|
23
24
|
{
|
|
24
25
|
name: "gate-fix",
|
|
@@ -68,7 +69,7 @@ var DELEGATABLE_STEPS = [
|
|
|
68
69
|
// verifiers differ, so widening `survey` would put both in one field and lose the boundary below.
|
|
69
70
|
// **No ordinal.** `${N}rd` would print `1rd` for any other threshold, past a test that only looks
|
|
70
71
|
// for the numeral, so the count is phrased as a plain "N or more".
|
|
71
|
-
does: `read the Issue's subject to find out how it currently works \u2014 once ${String(INVESTIGATION_FILE_THRESHOLD)} or more files the run will not edit have to be read \u2014 and return the conclusion plus the \`file:line\` citations that support it, never the file text, which would put the cost back where it was. A throwaway probe script is written, run and deleted inside the unit, which returns its output alone`,
|
|
72
|
+
does: `read the Issue's subject to find out how it currently works \u2014 once ${String(INVESTIGATION_FILE_THRESHOLD)} or more files the run will not edit have to be read, or ${String(INVESTIGATION_SEARCH_TURN_THRESHOLD)} or more search turns run without an edit \u2014 and return the conclusion plus the \`file:line\` citations that support it, never the file text, which would put the cost back where it was. A throwaway probe script is written, run and deleted inside the unit, which returns its output alone`,
|
|
72
73
|
verifier: "the parent opens the cited lines; a conclusion those lines do not support fails there, and reading a handful of cited regions costs far less than redoing the reading. The unit reports what the code does and never what to change \u2014 deciding that is `diagnosis`, which stays kept, so a unit returning a root cause would be delegating the rejected row under this name"
|
|
73
74
|
},
|
|
74
75
|
{
|
|
@@ -131,6 +132,7 @@ function reason_for(name) {
|
|
|
131
132
|
var delegation_policy = {
|
|
132
133
|
DELEGATE_VERDICT,
|
|
133
134
|
INVESTIGATION_FILE_THRESHOLD,
|
|
135
|
+
INVESTIGATION_SEARCH_TURN_THRESHOLD,
|
|
134
136
|
KEEP_VERDICT,
|
|
135
137
|
DELEGATABLE_STEPS,
|
|
136
138
|
REJECTED_STEPS,
|
|
@@ -155,7 +157,12 @@ var CONTENT_READ_COMMANDS = [
|
|
|
155
157
|
var CONTENT_READ_LABELS = new Set(
|
|
156
158
|
CONTENT_READ_COMMANDS.map((command) => time_shell.bash_label(command))
|
|
157
159
|
);
|
|
158
|
-
var
|
|
160
|
+
var SEARCH_COMMANDS = ["fd", "find", "grep", "rg"];
|
|
161
|
+
var SEARCH_LABELS = new Set(
|
|
162
|
+
SEARCH_COMMANDS.map((command) => time_shell.bash_label(command))
|
|
163
|
+
);
|
|
164
|
+
var INVESTIGATOR_AGENT = "investigator";
|
|
165
|
+
var REASON = `\u26D4 investigation: ${String(delegation_policy.INVESTIGATION_FILE_THRESHOLD)} files read and not edited, or ${String(delegation_policy.INVESTIGATION_SEARCH_TURN_THRESHOLD)} search turns, since the last delegated unit, so the reading from here goes to a unit of its own (a successful write also starts the search count over). Ask \`pnpm josh delegate investigation\`, then dispatch the \`${INVESTIGATOR_AGENT}\` agent (\`kit:${INVESTIGATOR_AGENT}\` in a consumer) with a brief of what the main line has already concluded and what is left to find out; it returns the conclusion plus its \`file:line\` citations, never the file text. Keep a read in the main line only where this run will edit that file \u2014 an \`Edit\` cannot be issued against text you do not hold. This run's own instructions and the harness's own session files \u2014 a backgrounded call's output, a persisted tool result, this session's scratchpad \u2014 never count toward the files, so they are not what took the file count here; every read-only search turn counts, whatever it names. The rule is \`.claude/skills/workflow-commands/SKILL.md\` \u2192 \xA72b, "The pre-implementation reading".`;
|
|
159
166
|
var INSTRUCTION_PATHS = ["prompts", ".claude/skills"];
|
|
160
167
|
var INSTRUCTION_FILES = /* @__PURE__ */ new Set(["CLAUDE.md", "AGENTS.md", "GEMINI.md"]);
|
|
161
168
|
var REPOSITORY_ROOT = process.cwd();
|
|
@@ -219,14 +226,32 @@ function edited_files(spans) {
|
|
|
219
226
|
function add_all(pending, targets, at_ms) {
|
|
220
227
|
for (const target of targets) if (!pending.has(target)) pending.set(target, at_ms);
|
|
221
228
|
}
|
|
222
|
-
function
|
|
229
|
+
function is_read_only_search(span) {
|
|
230
|
+
return SEARCH_LABELS.has(span.label) && span.is_bundleable && !span.may_write;
|
|
231
|
+
}
|
|
232
|
+
function search_turn_key(searches, span) {
|
|
233
|
+
if (span.message_id !== time_spans.NO_MESSAGE_ID) return span.message_id;
|
|
234
|
+
return `${time_spans.NO_MESSAGE_ID}#${String(searches.size)}`;
|
|
235
|
+
}
|
|
236
|
+
function apply_search(searches, span) {
|
|
237
|
+
if (span.is_writing) {
|
|
238
|
+
searches.clear();
|
|
239
|
+
return;
|
|
240
|
+
}
|
|
241
|
+
const turn = search_turn_key(searches, span);
|
|
242
|
+
if (is_read_only_search(span) && !searches.has(turn)) searches.set(turn, span.ended_ms);
|
|
243
|
+
}
|
|
244
|
+
function apply_span(accumulation, span, edited) {
|
|
223
245
|
if (DELEGATION_TOOLS.has(span.label)) {
|
|
224
|
-
pending.clear();
|
|
246
|
+
accumulation.pending.clear();
|
|
247
|
+
accumulation.searches.clear();
|
|
225
248
|
return;
|
|
226
249
|
}
|
|
227
|
-
if (
|
|
250
|
+
if (is_failed_outcome(span)) return;
|
|
251
|
+
apply_search(accumulation.searches, span);
|
|
252
|
+
if (!is_content_read(span.label)) return;
|
|
228
253
|
const fresh = subject_targets(span.targets).filter((target) => !edited.has(target));
|
|
229
|
-
add_all(pending, fresh, span.ended_ms);
|
|
254
|
+
add_all(accumulation.pending, fresh, span.ended_ms);
|
|
230
255
|
}
|
|
231
256
|
function last_delegation_ms(spans) {
|
|
232
257
|
return delegation_instant(spans.findLast((span) => DELEGATION_TOOLS.has(span.label)));
|
|
@@ -237,13 +262,15 @@ function pending_after(pending, since_ms) {
|
|
|
237
262
|
function tally_of(text, since_ms = hook_decision.NEVER_MS) {
|
|
238
263
|
const { spans, started_ms } = time_spans.parse_timeline(text);
|
|
239
264
|
const edited = edited_files(spans);
|
|
240
|
-
const
|
|
241
|
-
for (const span of spans) apply_span(
|
|
265
|
+
const accumulation = { pending: /* @__PURE__ */ new Map(), searches: /* @__PURE__ */ new Map() };
|
|
266
|
+
for (const span of spans) apply_span(accumulation, span, edited);
|
|
242
267
|
return {
|
|
243
|
-
pending: [...pending.keys()],
|
|
244
|
-
pending_since: pending_after(pending, since_ms),
|
|
268
|
+
pending: [...accumulation.pending.keys()],
|
|
269
|
+
pending_since: pending_after(accumulation.pending, since_ms),
|
|
245
270
|
reset_ms: last_delegation_ms(spans),
|
|
246
271
|
window_start_ms: started_ms,
|
|
272
|
+
searches: accumulation.searches.size,
|
|
273
|
+
searches_since: pending_after(accumulation.searches, since_ms),
|
|
247
274
|
edited
|
|
248
275
|
};
|
|
249
276
|
}
|
|
@@ -253,6 +280,9 @@ function projected_count(pending, call, edited = /* @__PURE__ */ new Set()) {
|
|
|
253
280
|
function is_at_threshold(pending_count) {
|
|
254
281
|
return pending_count + 1 >= delegation_policy.INVESTIGATION_FILE_THRESHOLD;
|
|
255
282
|
}
|
|
283
|
+
function is_at_search_threshold(search_count) {
|
|
284
|
+
return search_count + 1 >= delegation_policy.INVESTIGATION_SEARCH_TURN_THRESHOLD;
|
|
285
|
+
}
|
|
256
286
|
function has_cleared_the_disarm(tally, refused_at_ms) {
|
|
257
287
|
return tally.reset_ms > refused_at_ms || refused_at_ms < tally.window_start_ms;
|
|
258
288
|
}
|
|
@@ -260,7 +290,7 @@ function is_rearmed(tally, refused_at_ms) {
|
|
|
260
290
|
if (refused_at_ms === hook_decision.NEVER_MS || has_cleared_the_disarm(tally, refused_at_ms)) {
|
|
261
291
|
return true;
|
|
262
292
|
}
|
|
263
|
-
return is_at_threshold(tally.pending_since);
|
|
293
|
+
return is_at_threshold(tally.pending_since) || is_at_search_threshold(tally.searches_since);
|
|
264
294
|
}
|
|
265
295
|
function is_unit_transcript(transcript) {
|
|
266
296
|
return transcript.split(path.sep).includes(cost_transcript.UNIT_DIRECTORY);
|
|
@@ -268,22 +298,32 @@ function is_unit_transcript(transcript) {
|
|
|
268
298
|
function is_unit_run(run) {
|
|
269
299
|
return run !== void 0 && is_unit_transcript(run.transcript);
|
|
270
300
|
}
|
|
271
|
-
function
|
|
301
|
+
function is_read_only_command(call, labels) {
|
|
302
|
+
if (call.name !== cost_blocks.BASH_TOOL) return false;
|
|
272
303
|
const label = time_shell.bash_label(time_shell.bash_command(call.input));
|
|
273
|
-
return
|
|
304
|
+
return labels.has(label) && time_batch_guard.is_read_only_call(call);
|
|
305
|
+
}
|
|
306
|
+
function is_search_call(call) {
|
|
307
|
+
return is_read_only_command(call, SEARCH_LABELS);
|
|
274
308
|
}
|
|
275
309
|
function is_refusable_call(call) {
|
|
310
|
+
if (is_search_call(call)) return true;
|
|
276
311
|
if (call_targets(call).length === 0) return false;
|
|
277
312
|
if (READ_TOOLS.has(call.name)) return true;
|
|
278
|
-
return call
|
|
313
|
+
return is_read_only_command(call, CONTENT_READ_LABELS);
|
|
314
|
+
}
|
|
315
|
+
function is_growing_past_threshold(tally, call) {
|
|
316
|
+
if (is_search_call(call)) return is_at_search_threshold(tally.searches);
|
|
317
|
+
if (!is_at_threshold(tally.pending.length)) return false;
|
|
318
|
+
return projected_count(tally.pending, call, tally.edited) > tally.pending.length;
|
|
279
319
|
}
|
|
280
320
|
function should_block(text, call, refused_at_ms, run) {
|
|
281
321
|
if (!is_refusable_call(call) || is_unit_run(run)) return false;
|
|
282
322
|
const tally = tally_of(text, refused_at_ms);
|
|
283
|
-
|
|
284
|
-
return projected_count(tally.pending, call, tally.edited) > tally.pending.length && is_rearmed(tally, refused_at_ms);
|
|
323
|
+
return is_growing_past_threshold(tally, call) && is_rearmed(tally, refused_at_ms);
|
|
285
324
|
}
|
|
286
325
|
var investigation_reads = {
|
|
326
|
+
INVESTIGATOR_AGENT,
|
|
287
327
|
READ_TOOLS,
|
|
288
328
|
REASON,
|
|
289
329
|
is_at_threshold,
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
import {
|
|
2
2
|
investigation_reads
|
|
3
|
-
} from "./chunk-
|
|
3
|
+
} from "./chunk-LJBLGHEH.js";
|
|
4
4
|
import {
|
|
5
5
|
lane_guard_policy
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-HANSKHES.js";
|
|
7
7
|
import {
|
|
8
8
|
hook_decision
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-NFZGFGOR.js";
|
|
10
10
|
|
|
11
11
|
// scripts/delegation/investigation-guard.ts
|
|
12
12
|
import { text } from "node:stream/consumers";
|
|
@@ -25,7 +25,7 @@ function should_notify(tail, call, notified_at_ms, run) {
|
|
|
25
25
|
if (investigation_mode() !== "notice") return false;
|
|
26
26
|
return investigation_reads.should_block(tail, call, notified_at_ms, run);
|
|
27
27
|
}
|
|
28
|
-
var NOTICE = `\u{1F4A1} investigation: files read and not edited since the last delegated unit reached the threshold, so the reading from here should go to a unit of its own. This is a notice, not a refusal \u2014 the read proceeds, because a dispatched lane child ends its turn on a denial. Ask \`pnpm josh delegate investigation\`, then
|
|
28
|
+
var NOTICE = `\u{1F4A1} investigation: files read and not edited, or search turns, since the last delegated unit reached the threshold, so the reading from here should go to a unit of its own. This is a notice, not a refusal \u2014 the read proceeds, because a dispatched lane child ends its turn on a denial. Ask \`pnpm josh delegate investigation\`, then dispatch the \`${investigation_reads.INVESTIGATOR_AGENT}\` agent (\`kit:${investigation_reads.INVESTIGATOR_AGENT}\` in a consumer) with a brief of what the main line has already concluded and what is left to find out; it returns the conclusion plus its \`file:line\` citations, never the file text. Keep a read in the main line only where this run will edit that file. This recurs on the next accumulation.`;
|
|
29
29
|
function notice_text(_call, tail) {
|
|
30
30
|
const pending = investigation_reads.tally_of(tail).pending.map((absolute) => investigation_reads.repository_relative(absolute));
|
|
31
31
|
return pending.length === 0 ? NOTICE : `${NOTICE} Read and not edited so far: ${pending.join(" ")}.`;
|
|
@@ -1,27 +1,27 @@
|
|
|
1
1
|
#!/usr/bin/env tsx
|
|
2
2
|
import {
|
|
3
3
|
pretool_guard
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-KBXZLMRH.js";
|
|
5
5
|
import {
|
|
6
6
|
bounded_pool
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-JKKTVDAG.js";
|
|
8
8
|
import {
|
|
9
9
|
build_envelope,
|
|
10
10
|
compose_context,
|
|
11
11
|
format_edited_payload
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-FO2I7UT7.js";
|
|
13
13
|
import "./chunk-3V37IID6.js";
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
17
|
-
import "./chunk-
|
|
18
|
-
import "./chunk-
|
|
14
|
+
import "./chunk-KOKOAV6D.js";
|
|
15
|
+
import "./chunk-RFWWUI5F.js";
|
|
16
|
+
import "./chunk-HBKZLITF.js";
|
|
17
|
+
import "./chunk-LJBLGHEH.js";
|
|
18
|
+
import "./chunk-HANSKHES.js";
|
|
19
19
|
import {
|
|
20
20
|
hook_decision
|
|
21
|
-
} from "./chunk-
|
|
21
|
+
} from "./chunk-NFZGFGOR.js";
|
|
22
22
|
import {
|
|
23
23
|
time_density_hook
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-GDU26K3J.js";
|
|
25
25
|
import "./chunk-WPALEIRX.js";
|
|
26
26
|
import "./chunk-RKUAD3I6.js";
|
|
27
27
|
|
|
@@ -9,11 +9,11 @@ import {
|
|
|
9
9
|
is_enabled,
|
|
10
10
|
notice_refusal_path,
|
|
11
11
|
refusal_path
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import "./chunk-
|
|
14
|
-
import "./chunk-
|
|
15
|
-
import "./chunk-
|
|
16
|
-
import "./chunk-
|
|
12
|
+
} from "./chunk-HBKZLITF.js";
|
|
13
|
+
import "./chunk-LJBLGHEH.js";
|
|
14
|
+
import "./chunk-HANSKHES.js";
|
|
15
|
+
import "./chunk-NFZGFGOR.js";
|
|
16
|
+
import "./chunk-GDU26K3J.js";
|
|
17
17
|
import "./chunk-WPALEIRX.js";
|
|
18
18
|
import "./chunk-RKUAD3I6.js";
|
|
19
19
|
export {
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
import {
|
|
3
3
|
report_no_payload,
|
|
4
4
|
run_hook
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-FO2I7UT7.js";
|
|
6
6
|
import "./chunk-3V37IID6.js";
|
|
7
|
-
import "./chunk-
|
|
7
|
+
import "./chunk-GDU26K3J.js";
|
|
8
8
|
import "./chunk-RKUAD3I6.js";
|
|
9
9
|
|
|
10
10
|
// scripts/hooks/format-edited-cli.ts
|