jonah-fleet 1.29.0 → 1.30.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/CHANGELOG.md +16 -0
- package/dist/index.js +176 -7
- package/dist/lib/runner.d.ts +12 -0
- package/dist/lib/runner.d.ts.map +1 -1
- package/dist/lib/terminal-card.d.ts +17 -0
- package/dist/lib/terminal-card.d.ts.map +1 -1
- package/package.json +1 -1
- package/templates/prompts/ORCHESTRATION.md +1 -1
- package/templates/prompts/analytics-review.md +17 -3
package/CHANGELOG.md
CHANGED
|
@@ -5,6 +5,20 @@ All notable changes to `jonah-fleet` will be documented in this file.
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
|
+
## [1.30.1](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.30.0...v1.30.1) (2026-09-25)
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
### Bug Fixes
|
|
12
|
+
|
|
13
|
+
* **analytics-review:** forbid staging into or commenting on closed product plans ([e945366](https://github.com/Jonah-Projects/jonah-fleet/commit/e945366f8d645d54b3c3de2c9bf7d8c4aaa8cf5f))
|
|
14
|
+
|
|
15
|
+
## [1.30.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.29.0...v1.30.0) (2026-09-25)
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
### Features
|
|
19
|
+
|
|
20
|
+
* **runner:** stream granular tool evaluation descriptions and subagent progress ([#472](https://github.com/Jonah-Projects/jonah-fleet/issues/472)) ([0327bbf](https://github.com/Jonah-Projects/jonah-fleet/commit/0327bbf353544b60c86817d5f352dd6e1d1e66ce))
|
|
21
|
+
|
|
8
22
|
## [1.29.0](https://github.com/Jonah-Projects/jonah-fleet/compare/v1.28.5...v1.29.0) (2026-09-25)
|
|
9
23
|
|
|
10
24
|
|
|
@@ -41,6 +55,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
41
55
|
|
|
42
56
|
### Bug Fixes
|
|
43
57
|
|
|
58
|
+
* **analytics-review:** require active product planning staging issues to be strictly open (`--state open`), forbid commenting on or editing closed product plans from past planning sweeps, and make DoD staging conditional on having emitted directives
|
|
59
|
+
* **runner:** introduce granular tool output evaluation descriptions, live subagent progress tracking, and non-TTY spinner deduplication to replace long-running generic `Evaluating tool output...` states
|
|
44
60
|
* **autowork:** prevent local and GitHub-hosted autowork runner collisions by excluding bot and self-assignments from `trigger-autowork-on-assign.yml`, enforcing a 2-hour active claim lock in Step 0.5a / Step 11a, and mandating concrete pre-PR collision checks with collision bail in Step 13
|
|
45
61
|
* **daemon:** query `statusCheckRollup` in `getOpenReviewablePRs` and filter out PRs with in-progress CI to prevent premature review dispatch and repetition loop trips
|
|
46
62
|
* **peer-review:** add Post-Merge Companion Measurement Issue Filing protocol to `peer-review.md` and `ORCHESTRATION.md` to automatically synthesize `Measure: ...` tracking issues upon merge
|
package/dist/index.js
CHANGED
|
@@ -1852,6 +1852,22 @@ function formatActionDescription(toolName, params) {
|
|
|
1852
1852
|
const base = path6.basename(dirPath.replace(/[/\\]+$/, "")) || dirPath;
|
|
1853
1853
|
return `Listing directory ${base}`;
|
|
1854
1854
|
}
|
|
1855
|
+
if (name === "manage_subagents") {
|
|
1856
|
+
const action = params?.Action || params?.action || "status";
|
|
1857
|
+
if (action === "list") return "Checking subagents progress";
|
|
1858
|
+
if (action === "kill") return "Stopping subagent";
|
|
1859
|
+
if (action === "kill_all") return "Stopping all subagents";
|
|
1860
|
+
return "Managing subagents";
|
|
1861
|
+
}
|
|
1862
|
+
if (name === "manage_task") {
|
|
1863
|
+
const action = params?.Action || params?.action || "status";
|
|
1864
|
+
if (action === "list") return "Checking background tasks";
|
|
1865
|
+
if (action === "kill") return "Stopping background task";
|
|
1866
|
+
return "Managing background tasks";
|
|
1867
|
+
}
|
|
1868
|
+
if (name === "schedule") {
|
|
1869
|
+
return "Scheduling background timer";
|
|
1870
|
+
}
|
|
1855
1871
|
if (name === "invoke_subagent") {
|
|
1856
1872
|
const role = params?.Subagents?.[0]?.Role || params?.Subagents?.[0]?.role || params?.Role || params?.role || params?.TypeName || params?.name || "";
|
|
1857
1873
|
if (!role) return "Running subagent";
|
|
@@ -1869,6 +1885,145 @@ function formatActionDescription(toolName, params) {
|
|
|
1869
1885
|
}
|
|
1870
1886
|
return `Tool: ${name}`;
|
|
1871
1887
|
}
|
|
1888
|
+
function parseSubagentsOutput(raw) {
|
|
1889
|
+
if (!raw) return null;
|
|
1890
|
+
if (Array.isArray(raw)) return raw;
|
|
1891
|
+
if (typeof raw === "object" && Array.isArray(raw.subagents)) return raw.subagents;
|
|
1892
|
+
if (typeof raw === "string") {
|
|
1893
|
+
const trimmed = raw.trim();
|
|
1894
|
+
const jsonStart = trimmed.indexOf("[");
|
|
1895
|
+
const jsonEnd = trimmed.lastIndexOf("]");
|
|
1896
|
+
if (jsonStart !== -1 && jsonEnd > jsonStart) {
|
|
1897
|
+
try {
|
|
1898
|
+
const parsed = JSON.parse(trimmed.slice(jsonStart, jsonEnd + 1));
|
|
1899
|
+
if (Array.isArray(parsed)) return parsed;
|
|
1900
|
+
} catch {
|
|
1901
|
+
}
|
|
1902
|
+
}
|
|
1903
|
+
try {
|
|
1904
|
+
const parsed = JSON.parse(trimmed);
|
|
1905
|
+
if (Array.isArray(parsed)) return parsed;
|
|
1906
|
+
if (parsed && Array.isArray(parsed.subagents)) return parsed.subagents;
|
|
1907
|
+
} catch {
|
|
1908
|
+
}
|
|
1909
|
+
}
|
|
1910
|
+
return null;
|
|
1911
|
+
}
|
|
1912
|
+
function formatSubagentsProgress(outputOrSubagents) {
|
|
1913
|
+
const subagents = parseSubagentsOutput(outputOrSubagents);
|
|
1914
|
+
if (!subagents) return null;
|
|
1915
|
+
if (subagents.length === 0) {
|
|
1916
|
+
return "Subagents completed, synthesizing reviews...";
|
|
1917
|
+
}
|
|
1918
|
+
const running = subagents.filter(
|
|
1919
|
+
(s) => !s.state || s.state === "running" || s.state === "waiting_for_input" || s.state === "ACTIVE"
|
|
1920
|
+
);
|
|
1921
|
+
if (running.length === 0) {
|
|
1922
|
+
return "Subagents completed, synthesizing reviews...";
|
|
1923
|
+
}
|
|
1924
|
+
const cleanDetail = (detail) => {
|
|
1925
|
+
if (!detail) return "";
|
|
1926
|
+
let d = detail.trim();
|
|
1927
|
+
d = d.replace(/^view_file:\s*/i, "view ");
|
|
1928
|
+
d = d.replace(/^run_command:\s*/i, "");
|
|
1929
|
+
d = d.replace(/^replace_file_content:\s*/i, "edit ");
|
|
1930
|
+
d = d.replace(/^write_to_file:\s*/i, "write ");
|
|
1931
|
+
d = d.replace(/^(?:Read|view)\s+lines\s+\d+-\d+\s+of\s+/i, "view ");
|
|
1932
|
+
d = d.replace(/^(?:Sed|head|tail|cat)\s+lines?\s+\d+-\d+\s+of\s+/i, "inspect ");
|
|
1933
|
+
return d.length > 25 ? d.slice(0, 22) + "..." : d;
|
|
1934
|
+
};
|
|
1935
|
+
const parts = subagents.map((s) => {
|
|
1936
|
+
const role = s.role || "subagent";
|
|
1937
|
+
const isRunning = !s.state || s.state === "running" || s.state === "waiting_for_input" || s.state === "ACTIVE";
|
|
1938
|
+
if (!isRunning) {
|
|
1939
|
+
return `${role} (done)`;
|
|
1940
|
+
}
|
|
1941
|
+
const detail = cleanDetail(s.stateDetail);
|
|
1942
|
+
return detail ? `${role} (${detail})` : role;
|
|
1943
|
+
});
|
|
1944
|
+
const prefix = running.length === subagents.length ? "Subagents running: " : "Subagents: ";
|
|
1945
|
+
return `${prefix}${parts.join(", ")}`;
|
|
1946
|
+
}
|
|
1947
|
+
function formatEvaluatingDescription(toolName, params, output) {
|
|
1948
|
+
const name = toolName || "unknown";
|
|
1949
|
+
if (name === "manage_subagents") {
|
|
1950
|
+
if (output) {
|
|
1951
|
+
const progress = formatSubagentsProgress(output);
|
|
1952
|
+
if (progress) return progress;
|
|
1953
|
+
}
|
|
1954
|
+
return "Evaluating subagents progress...";
|
|
1955
|
+
}
|
|
1956
|
+
if (name === "invoke_subagent") {
|
|
1957
|
+
const roles = params?.Subagents?.map((s) => s.Role || s.role || s.TypeName || s.name).filter(Boolean) || (params?.Role ? [params.Role] : []);
|
|
1958
|
+
if (roles.length > 0) {
|
|
1959
|
+
return `Subagents running: ${roles.join(", ")}...`;
|
|
1960
|
+
}
|
|
1961
|
+
return "Subagents running...";
|
|
1962
|
+
}
|
|
1963
|
+
if (name === "manage_task") {
|
|
1964
|
+
return "Evaluating background tasks...";
|
|
1965
|
+
}
|
|
1966
|
+
if (name === "schedule") {
|
|
1967
|
+
return "Evaluating schedule...";
|
|
1968
|
+
}
|
|
1969
|
+
if (name === "run_command") {
|
|
1970
|
+
const rawCmd = (params?.CommandLine || params?.command || params?.cmd || "").trim();
|
|
1971
|
+
if (/\b(?:vitest|jest)\b/i.test(rawCmd)) return "Evaluating vitest results...";
|
|
1972
|
+
if (/\bnpm\s+test\b|\bcargo\s+test\b|\bpytest\b/i.test(rawCmd)) return "Evaluating test suite results...";
|
|
1973
|
+
if (/type-check|\btsc\b/i.test(rawCmd)) return "Evaluating TypeScript type check results...";
|
|
1974
|
+
if (/\blint\b|\beslint\b/i.test(rawCmd)) return "Evaluating codebase linter results...";
|
|
1975
|
+
if (/\bbuild\b|\btsup\b|\bnext\s+build\b/i.test(rawCmd)) return "Evaluating production build results...";
|
|
1976
|
+
if (/gh\s+pr\s+list/i.test(rawCmd)) return "Evaluating open pull requests...";
|
|
1977
|
+
const prMatch = rawCmd.match(/gh\s+pr\s+(?:view|edit|merge|ready)\s+(\d+)/i);
|
|
1978
|
+
if (prMatch) return `Evaluating PR #${prMatch[1]}...`;
|
|
1979
|
+
if (/gh\s+pr\s+create/i.test(rawCmd)) return "Evaluating pull request creation...";
|
|
1980
|
+
if (/gh\s+issue\s+list/i.test(rawCmd)) return "Evaluating open issues...";
|
|
1981
|
+
const issueMatch = rawCmd.match(/gh\s+issue\s+(?:view|edit|comment)\s+(\d+)/i);
|
|
1982
|
+
if (issueMatch) return `Evaluating issue #${issueMatch[1]}...`;
|
|
1983
|
+
if (/git\s+diff/i.test(rawCmd)) return "Evaluating git diff...";
|
|
1984
|
+
if (/git\s+status/i.test(rawCmd)) return "Evaluating git status...";
|
|
1985
|
+
if (/git\s+log/i.test(rawCmd)) return "Evaluating git log...";
|
|
1986
|
+
if (/git\s+commit/i.test(rawCmd)) return "Verifying commit...";
|
|
1987
|
+
if (/git\s+push/i.test(rawCmd)) return "Verifying push...";
|
|
1988
|
+
if (/git\s+checkout/i.test(rawCmd)) return "Evaluating branch checkout...";
|
|
1989
|
+
const firstLine = rawCmd.split("\n")[0].trim();
|
|
1990
|
+
if (firstLine) {
|
|
1991
|
+
const shortCmd = firstLine.length > 30 ? firstLine.slice(0, 27) + "..." : firstLine;
|
|
1992
|
+
return `Evaluating "${shortCmd}" output...`;
|
|
1993
|
+
}
|
|
1994
|
+
return "Evaluating command output...";
|
|
1995
|
+
}
|
|
1996
|
+
if (name === "view_file") {
|
|
1997
|
+
const rawPath = params?.AbsolutePath || params?.TargetFile || params?.path || params?.file || "";
|
|
1998
|
+
if (rawPath) return `Evaluating ${path6.basename(rawPath)}...`;
|
|
1999
|
+
return "Evaluating file content...";
|
|
2000
|
+
}
|
|
2001
|
+
if (name === "replace_file_content" || name === "write_to_file" || name === "multi_replace_file_content") {
|
|
2002
|
+
const rawPath = params?.TargetFile || params?.AbsolutePath || params?.path || params?.file || "";
|
|
2003
|
+
if (rawPath) return `Verifying edits to ${path6.basename(rawPath)}...`;
|
|
2004
|
+
return "Verifying file changes...";
|
|
2005
|
+
}
|
|
2006
|
+
if (name === "grep_search") {
|
|
2007
|
+
const query = params?.Query || params?.query || params?.pattern || "";
|
|
2008
|
+
if (query) return `Evaluating search results for "${query}"...`;
|
|
2009
|
+
return "Evaluating search results...";
|
|
2010
|
+
}
|
|
2011
|
+
if (name === "find_by_name") {
|
|
2012
|
+
const pattern = params?.Pattern || params?.pattern || "";
|
|
2013
|
+
if (pattern) return `Evaluating file matches for "${pattern}"...`;
|
|
2014
|
+
return "Evaluating file matches...";
|
|
2015
|
+
}
|
|
2016
|
+
if (name === "list_dir") {
|
|
2017
|
+
const dirPath = params?.DirectoryPath || params?.path || "";
|
|
2018
|
+
const base = path6.basename(dirPath.replace(/[/\\]+$/, "")) || dirPath;
|
|
2019
|
+
if (base) return `Evaluating directory contents (${base})...`;
|
|
2020
|
+
return "Evaluating directory contents...";
|
|
2021
|
+
}
|
|
2022
|
+
if (name === "search_web" || name === "read_url_content") {
|
|
2023
|
+
return "Evaluating web content...";
|
|
2024
|
+
}
|
|
2025
|
+
return `Evaluating ${name} output...`;
|
|
2026
|
+
}
|
|
1872
2027
|
function renderSummaryCard(options) {
|
|
1873
2028
|
const width = Math.min(Math.max((process.stdout.columns || 80) - 4, 64), 90);
|
|
1874
2029
|
const horizontal = "\u2500".repeat(width - 2);
|
|
@@ -2105,6 +2260,7 @@ var TerminalSpinner = class {
|
|
|
2105
2260
|
message = "";
|
|
2106
2261
|
isRunning = false;
|
|
2107
2262
|
isTTY;
|
|
2263
|
+
lastPrintedMessage = "";
|
|
2108
2264
|
constructor() {
|
|
2109
2265
|
this.isTTY = Boolean(process.stderr.isTTY);
|
|
2110
2266
|
}
|
|
@@ -2113,6 +2269,7 @@ var TerminalSpinner = class {
|
|
|
2113
2269
|
this.startTime = Date.now();
|
|
2114
2270
|
this.isRunning = true;
|
|
2115
2271
|
if (!this.isTTY) {
|
|
2272
|
+
this.lastPrintedMessage = initialMessage;
|
|
2116
2273
|
process.stderr.write(`[jonah-fleet] ${initialMessage}
|
|
2117
2274
|
`);
|
|
2118
2275
|
return;
|
|
@@ -2124,8 +2281,11 @@ var TerminalSpinner = class {
|
|
|
2124
2281
|
update(newMessage) {
|
|
2125
2282
|
this.message = newMessage;
|
|
2126
2283
|
if (!this.isTTY) {
|
|
2127
|
-
|
|
2284
|
+
if (newMessage !== this.lastPrintedMessage) {
|
|
2285
|
+
this.lastPrintedMessage = newMessage;
|
|
2286
|
+
process.stderr.write(`[jonah-fleet] ${newMessage}
|
|
2128
2287
|
`);
|
|
2288
|
+
}
|
|
2129
2289
|
}
|
|
2130
2290
|
}
|
|
2131
2291
|
formatLine(message, maxWidth) {
|
|
@@ -4114,8 +4274,8 @@ function formatVerboseEvent(event) {
|
|
|
4114
4274
|
if (su.step_type === "user_input") {
|
|
4115
4275
|
return `${pc11.dim(`[${time}]`)} ${pc11.magenta("[user_input]")} Prompt dispatched`;
|
|
4116
4276
|
}
|
|
4117
|
-
if (su.step_type === "tool") {
|
|
4118
|
-
const toolName = su.tool_name || su.tool_info?.name || "tool";
|
|
4277
|
+
if (su.step_type === "tool" || su.step_type === "subagent") {
|
|
4278
|
+
const toolName = su.tool_name || su.tool_info?.name || (su.step_type === "subagent" ? "invoke_subagent" : "tool");
|
|
4119
4279
|
const params = su.tool_info?.parameters;
|
|
4120
4280
|
if (su.state === "ACTIVE") {
|
|
4121
4281
|
const desc = formatActionDescription(toolName, params);
|
|
@@ -4125,6 +4285,9 @@ function formatVerboseEvent(event) {
|
|
|
4125
4285
|
const dur = su.duration_seconds !== void 0 ? `${su.duration_seconds.toFixed(1)}s` : "done";
|
|
4126
4286
|
return `${pc11.dim(`[${time}]`)} ${pc11.green("[tool:done]")} ${pc11.bold(toolName)} (${dur})`;
|
|
4127
4287
|
}
|
|
4288
|
+
if (su.state === "ERROR") {
|
|
4289
|
+
return `${pc11.dim(`[${time}]`)} ${pc11.red("[tool:error]")} ${pc11.bold(toolName)}`;
|
|
4290
|
+
}
|
|
4128
4291
|
}
|
|
4129
4292
|
if (su.step_type === "agent_response" || su.step_type === "thought") {
|
|
4130
4293
|
if (su.text_delta) {
|
|
@@ -4733,8 +4896,8 @@ Timeout: ${printTimeout}`,
|
|
|
4733
4896
|
if (event) {
|
|
4734
4897
|
if (event.event === "step_update" && event.step_update) {
|
|
4735
4898
|
const su = event.step_update;
|
|
4736
|
-
if (su.step_type === "tool") {
|
|
4737
|
-
const toolName = su.tool_name || su.tool_info?.name || "unknown";
|
|
4899
|
+
if (su.step_type === "tool" || su.step_type === "subagent") {
|
|
4900
|
+
const toolName = su.tool_name || su.tool_info?.name || (su.step_type === "subagent" ? "invoke_subagent" : "unknown");
|
|
4738
4901
|
const toolParams = su.tool_info?.parameters;
|
|
4739
4902
|
if (su.state === "ACTIVE") {
|
|
4740
4903
|
loopGuard.recordAction(toolName, toolParams, false);
|
|
@@ -4753,13 +4916,18 @@ Timeout: ${printTimeout}`,
|
|
|
4753
4916
|
} else if (su.state === "ERROR") {
|
|
4754
4917
|
loopGuard.recordAction(toolName, toolParams, true);
|
|
4755
4918
|
lastActionDesc = null;
|
|
4919
|
+
if (spinner) {
|
|
4920
|
+
activePhase = `Diagnosing tool error (${toolName})...`;
|
|
4921
|
+
spinner.update(`${targetLabel}: ${activePhase}`);
|
|
4922
|
+
}
|
|
4756
4923
|
} else if (su.state === "DONE") {
|
|
4757
4924
|
lastActionDesc = null;
|
|
4758
4925
|
if (su.tool_info?.output) {
|
|
4759
4926
|
checkTargetDetection(su.tool_info.output);
|
|
4760
4927
|
}
|
|
4761
4928
|
if (spinner) {
|
|
4762
|
-
|
|
4929
|
+
const output2 = su.tool_info?.output || (su.subagent_info ? JSON.stringify(su.subagent_info) : void 0);
|
|
4930
|
+
activePhase = formatEvaluatingDescription(toolName, toolParams, output2);
|
|
4763
4931
|
spinner.update(`${targetLabel}: ${activePhase}`);
|
|
4764
4932
|
}
|
|
4765
4933
|
if (options.verbose) {
|
|
@@ -4771,7 +4939,8 @@ Timeout: ${printTimeout}`,
|
|
|
4771
4939
|
if (su.text_delta) {
|
|
4772
4940
|
accumulatedOutput += su.text_delta;
|
|
4773
4941
|
checkTargetDetection(su.text_delta);
|
|
4774
|
-
const
|
|
4942
|
+
const recentWindow = accumulatedOutput.slice(-300);
|
|
4943
|
+
const newPhase = detectActivePhase(recentWindow, activePhase);
|
|
4775
4944
|
if (newPhase !== activePhase || lastActionDesc) {
|
|
4776
4945
|
lastActionDesc = null;
|
|
4777
4946
|
activePhase = newPhase;
|
package/dist/lib/runner.d.ts
CHANGED
|
@@ -43,6 +43,17 @@ export interface StreamJsonEvent {
|
|
|
43
43
|
parameters?: Record<string, any>;
|
|
44
44
|
output?: string;
|
|
45
45
|
};
|
|
46
|
+
subagent_info?: {
|
|
47
|
+
subagents?: Array<{
|
|
48
|
+
type_name?: string;
|
|
49
|
+
role?: string;
|
|
50
|
+
initial_prompt?: string;
|
|
51
|
+
conversation_id?: string;
|
|
52
|
+
log_uri?: string;
|
|
53
|
+
[key: string]: any;
|
|
54
|
+
}>;
|
|
55
|
+
[key: string]: any;
|
|
56
|
+
};
|
|
46
57
|
text_delta?: string;
|
|
47
58
|
duration_seconds?: number;
|
|
48
59
|
usage?: {
|
|
@@ -51,6 +62,7 @@ export interface StreamJsonEvent {
|
|
|
51
62
|
thinking_tokens?: number;
|
|
52
63
|
total_tokens?: number;
|
|
53
64
|
};
|
|
65
|
+
[key: string]: any;
|
|
54
66
|
};
|
|
55
67
|
agent_response?: any;
|
|
56
68
|
result?: {
|
package/dist/lib/runner.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -98,6 +98,22 @@ export declare function formatTargetLabel(baseLabel: string, title?: string | nu
|
|
|
98
98
|
* Maps granular agent tool invocations to clean, human-friendly action descriptions for terminal display.
|
|
99
99
|
*/
|
|
100
100
|
export declare function formatActionDescription(toolName: string, params?: Record<string, any>): string;
|
|
101
|
+
/**
|
|
102
|
+
* Parses subagent status arrays from manage_subagents or invoke_subagent outputs.
|
|
103
|
+
*/
|
|
104
|
+
export declare function parseSubagentsOutput(raw: any): Array<{
|
|
105
|
+
role?: string;
|
|
106
|
+
state?: string;
|
|
107
|
+
stateDetail?: string;
|
|
108
|
+
}> | null;
|
|
109
|
+
/**
|
|
110
|
+
* Formats subagents progress into a concise, informative line for terminal spinner.
|
|
111
|
+
*/
|
|
112
|
+
export declare function formatSubagentsProgress(outputOrSubagents: any): string | null;
|
|
113
|
+
/**
|
|
114
|
+
* Formats granular description when a tool finishes and the agent evaluates its results.
|
|
115
|
+
*/
|
|
116
|
+
export declare function formatEvaluatingDescription(toolName: string, params?: Record<string, any>, output?: string): string;
|
|
101
117
|
/**
|
|
102
118
|
* Renders a styled Unicode summary card.
|
|
103
119
|
*/
|
|
@@ -117,6 +133,7 @@ export declare class TerminalSpinner {
|
|
|
117
133
|
private message;
|
|
118
134
|
private isRunning;
|
|
119
135
|
private isTTY;
|
|
136
|
+
private lastPrintedMessage;
|
|
120
137
|
constructor();
|
|
121
138
|
start(initialMessage: string): void;
|
|
122
139
|
update(newMessage: string): void;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"terminal-card.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-card.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"terminal-card.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-card.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -261,7 +261,7 @@ How changes and innovations from upstream ecosystems—[openai/symphony](https:/
|
|
|
261
261
|
|
|
262
262
|
How closed-loop feedback from product telemetry and measurement trackers drives product decisions while preventing autonomous agents from falling into telemetry rabbit holes:
|
|
263
263
|
|
|
264
|
-
1. **Mandatory Post-Measurement Action Rule**: When `analytics-review` concludes an evaluation of a feature or experiment tracker (especially sub-threshold features with <2% user adoption or >50% failure rates), it MUST emit a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`. Measurement closure is never a terminal dead-end; outcomes are staged into
|
|
264
|
+
1. **Mandatory Post-Measurement Action Rule**: When `analytics-review` concludes an evaluation of a feature or experiment tracker (especially sub-threshold features with <2% user adoption or >50% failure rates), it MUST emit a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`. Measurement closure is never a terminal dead-end; outcomes are staged into an active `🗺️ Product Plan` (which must be currently `state: open`; agents must never stage into or comment on closed/past product plans) or actionable `roadmap/*` issues.
|
|
265
265
|
2. **Feature Pruning & Deprecation Audit**: During Propose mode sweeps, `product-planning` actively audits shipped roadmap items and closed measurement trackers. For features with low ROI (<2% adoption, >50% error/failure rate), it drafts explicit deprecation, removal, or simplification proposals alongside new feature additions, keeping the codebase and UI lean.
|
|
266
266
|
3. **Intent vs. Defect Guardrail**: When investigating underperforming or zero-conversion features, `autowork` and `diagnosing-bugs` verify whether the issue is a software defect or a lack of user intent. If the feature functions properly without runtime errors but user interaction is negligible, agents must classify the issue as a **product/UX intent question** (`needs-design` / `roadmap/*`) rather than falling into the **Telemetry Rabbit Hole** (adding redundant fallback telemetry, defensive error handling, or retry loops for unwanted features).
|
|
267
267
|
4. **Post-Merge Measurement Tracker Ingestion**: When `peer-review` squash-merges an approved PR, it inspects the tracking issue or spec for `## Telemetry & Measurement Decisions`. If a Tier 1 or Tier 2 companion measurement issue is outlined (`Measure: <Feature Name>`), `peer-review` automatically files the tracker with the `measurement` label upon merge, ensuring downstream `analytics-review` sweeps are never starved of intake.
|
|
@@ -20,7 +20,7 @@ The run is SUCCESS only if ALL of these are true:
|
|
|
20
20
|
- [ ] For conclusive measurement issues: synthesized adoption metrics (CTR, conversion rate, error frequency) against defined success criteria
|
|
21
21
|
- [ ] For sub-threshold features (<2% user adoption or >50% failure rate) or conclusive outcomes, outputted a structured directive: `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`
|
|
22
22
|
- [ ] Evaluated UI friction signals (grouping `$rageclick` by URL and element) and applied the Nudge & Banner Fatigue rule for promotional elements exceeding 500 impressions with CTR < 2.0%
|
|
23
|
-
- [ ]
|
|
23
|
+
- [ ] For conclusive measurement trackers or sub-threshold features: staged the recommendation directly into an active, open `🗺️ Product Plan` staging issue or filed an actionable `roadmap/*` issue for `product-planning` to review; if all trackers remain active/healthy with no new directives, logged scan status to the routine run issue
|
|
24
24
|
- [ ] Closed resolved measurement trackers with full analysis summaries and Antigravity run footer
|
|
25
25
|
|
|
26
26
|
If any criterion cannot be met, stop immediately and log FAILURE with the reason.
|
|
@@ -37,6 +37,8 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
|
|
|
37
37
|
|
|
38
38
|
- Do not close a measurement tracker with a failed adoption verdict without emitting a mandatory `RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]` directive.
|
|
39
39
|
- Do not treat measurement closure as a terminal dead-end — always bridge outcomes to `product-planning`.
|
|
40
|
+
- Do not comment on, edit, or stage directives into closed product plans (`state: closed`) from past planning sweeps. Once closed, product plans are completed historical records and must never receive new comments.
|
|
41
|
+
- Do not search issues with `--state all` when querying for active product plans; active plans are strictly open issues (`--state open`).
|
|
40
42
|
- Do not file bug tickets or request additional telemetry when users simply lack intent to interact with a feature.
|
|
41
43
|
|
|
42
44
|
## Instructions
|
|
@@ -96,8 +98,20 @@ When a measurement tracker is conclusive or reaches sub-threshold adoption (<2%
|
|
|
96
98
|
|
|
97
99
|
### Step 4: Bridge outcome to `product-planning`
|
|
98
100
|
|
|
99
|
-
|
|
100
|
-
|
|
101
|
+
When conclusive measurement directives (`RECOMMENDATION: [PIVOT | DEPRECATE | ITERATE]`) are emitted:
|
|
102
|
+
1. Search for an **active, OPEN** product planning staging issue:
|
|
103
|
+
```bash
|
|
104
|
+
gh issue list --state open --search "Product Plan"
|
|
105
|
+
```
|
|
106
|
+
**Active Staging Issue Invariant**: A staging issue is active ONLY if its state is currently **OPEN**. If an issue is closed, it is a historical plan from a past cycle and MUST be ignored. **NEVER comment on, reopen, or edit closed product plan issues (`state: closed`).**
|
|
107
|
+
2. If an open staging issue exists (e.g. `🗺️ Product Plan — {YYYY-MM-DD}`):
|
|
108
|
+
- Stage the recommendation under its `### Feature Pruning & Deprecation Audit` or `### Backlog Re-rankings` section.
|
|
109
|
+
3. If no open staging issue exists (the expected state between planning sweeps):
|
|
110
|
+
- Do NOT comment on past closed product plans.
|
|
111
|
+
- For actionable pivots, deprecations, or feature modifications requiring planning review, open an actionable `roadmap/*` issue labeled `needs-design` or `enhancement` detailing the measurement verdict and recommendation for the next product planning sweep.
|
|
112
|
+
4. If no trackers reached a conclusive state during this run and all evaluated trackers remain healthy/within measurement horizon:
|
|
113
|
+
- Do not stage redundant directives or file unnecessary roadmap issues.
|
|
114
|
+
- Record tracker evaluation progress in the routine run issue (`$ROUTINE_ISSUE_NUMBER`) and `.jonah-fleet/run-report.md`.
|
|
101
115
|
|
|
102
116
|
### Step 5: Close conclusive measurement trackers
|
|
103
117
|
|