great-cto 3.44.0 → 3.45.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.
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "great-cto",
|
|
3
3
|
"description": "You already have the agent. This is everything around it. great_cto runs Claude Code as a pipeline of 71 specialist agents \u2014 an independent model checks each stage before the next builds on it, spending caps refuse rather than warn, and three decisions stay yours: what gets built, how, and whether it ships.",
|
|
4
|
-
"version": "3.
|
|
4
|
+
"version": "3.45.0",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Alexander Velikiy",
|
|
7
7
|
"url": "https://hashnode.com/@Greatcto"
|
|
@@ -5815,6 +5815,7 @@ function renderAgentActivity(snap) {
|
|
|
5815
5815
|
return `${esc(e.tool || 'tool')}${p}`;
|
|
5816
5816
|
}
|
|
5817
5817
|
if (e.kind === 'pipeline') return `pipeline: ${esc(e.outcome || '')}${e.verdict ? ' · ' + esc(e.verdict) : ''}`;
|
|
5818
|
+
if (e.kind === 'hint') return `hint: ${esc(e.hook || '')}${Array.isArray(e.paths) && e.paths.length ? ' ' + esc(e.paths[0]) : ''}${e.host === 'codex' ? ' · codex' : ''}`;
|
|
5818
5819
|
return esc(e.kind || '');
|
|
5819
5820
|
};
|
|
5820
5821
|
const attention = (Array.isArray(snap.attention) ? snap.attention : []).map((e) =>
|
|
@@ -28,8 +28,10 @@ import { appendFileSync, closeSync, fstatSync, mkdirSync, openSync, readFileSync
|
|
|
28
28
|
import { join } from 'node:path';
|
|
29
29
|
|
|
30
30
|
export const EVENTS_FILE = 'events.jsonl';
|
|
31
|
-
|
|
32
|
-
|
|
31
|
+
// `hint`: a context hook (edit-impact, lesson-tripwire) put text in front of the model.
|
|
32
|
+
// Recorded so its noise can be measured — how often, on what, how long — not what it said.
|
|
33
|
+
export const EVENT_KINDS = Object.freeze(['agent-start', 'agent-stop', 'tool', 'denied', 'stop', 'pipeline', 'hint']);
|
|
34
|
+
export const EVENT_FIELDS = Object.freeze(['v', 'ts', 'kind', 'session', 'agent', 'tool', 'paths', 'ok', 'duration_ms', 'outcome', 'verdict', 'hook', 'chars', 'host']);
|
|
33
35
|
export const MAX_BYTES = 5 * 1024 * 1024;
|
|
34
36
|
|
|
35
37
|
const MAX_PATHS = 10;
|
|
@@ -55,6 +57,9 @@ export function makeEvent(input, { now = Date.now() } = {}) {
|
|
|
55
57
|
if (Number.isFinite(input.duration_ms) && input.duration_ms >= 0) e.duration_ms = Math.round(input.duration_ms);
|
|
56
58
|
if (typeof input.outcome === 'string' && /^[a-z][a-z-]{0,39}$/.test(input.outcome)) e.outcome = input.outcome;
|
|
57
59
|
if (typeof input.verdict === 'string' && /^[A-Z][A-Z_-]{0,39}$/.test(input.verdict)) e.verdict = input.verdict;
|
|
60
|
+
if (typeof input.hook === 'string' && /^[a-z][a-z-]{0,39}$/.test(input.hook)) e.hook = input.hook;
|
|
61
|
+
if (Number.isInteger(input.chars) && input.chars >= 0) e.chars = input.chars;
|
|
62
|
+
if (input.host === 'claude' || input.host === 'codex') e.host = input.host;
|
|
58
63
|
return e;
|
|
59
64
|
}
|
|
60
65
|
|
package/package.json
CHANGED