jonah-fleet 1.4.1 → 1.5.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.
@@ -8,6 +8,7 @@ export interface DaemonState {
8
8
  lastAutoworkCheckAt?: string;
9
9
  status: 'idle' | 'working' | 'stopped';
10
10
  activeRoutine?: string;
11
+ activeTarget?: string;
11
12
  activeWorktree?: string;
12
13
  }
13
14
  export interface DaemonOptions {
@@ -17,6 +18,7 @@ export interface DaemonOptions {
17
18
  routines?: string[];
18
19
  model?: string;
19
20
  foreground?: boolean;
21
+ verbose?: boolean;
20
22
  }
21
23
  export declare function getDaemonStatePath(repoRoot: string): string;
22
24
  export declare function readDaemonState(repoRoot: string): DaemonState | null;
@@ -1 +1 @@
1
- {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAmD/G;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAanE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CAmIhG"}
1
+ {"version":3,"file":"daemon.d.ts","sourceRoot":"","sources":["../../src/lib/daemon.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,WAAW;IAC1B,GAAG,EAAE,MAAM,CAAC;IACZ,SAAS,EAAE,MAAM,CAAC;IAClB,qBAAqB,EAAE,MAAM,CAAC;IAC9B,uBAAuB,EAAE,MAAM,CAAC;IAChC,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,MAAM,EAAE,MAAM,GAAG,SAAS,GAAG,SAAS,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAE3D;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,WAAW,GAAG,IAAI,CAQpE;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,IAAI,CAI3E;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,CASvD;AAED,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAYzD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,WAAW,CAAC,CAsD/G;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAanE;AAED;;GAEG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,IAAI,CAAC,CA2LhG"}
@@ -47,6 +47,6 @@ export declare const PRESET_CONFIGS: Record<Exclude<PresetName, 'custom'>, {
47
47
  }>;
48
48
  export declare const ROUTINE_TO_WORKFLOW_MAP: Record<keyof FleetManifest['routines'], string[]>;
49
49
  export declare const WORKFLOW_TO_ROUTINE_MAP: Record<string, keyof FleetManifest['routines'] | 'sync-fleet'>;
50
- export declare const FLEET_VERSION = "1.4.1";
50
+ export declare const FLEET_VERSION = "1.5.0";
51
51
  export declare const SCHEMA_URL = "https://raw.githubusercontent.com/juliendurandeu/jonah-fleet/main/schema.json";
52
52
  //# sourceMappingURL=presets.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,kCAAkC,EAAE,OAAO,CAAC;QAC5C,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,kCAAkC,CAAC,EAAE,MAAM,CAAC;QAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC9B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,6BAA6B,EAAE,mBAI3C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CA+D3H,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAarF,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,aAAa,CAAC,UAAU,CAAC,GAAG,YAAY,CAOlG,CAAC;AAEF,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,UAAU,kFAAkF,CAAC"}
1
+ {"version":3,"file":"presets.d.ts","sourceRoot":"","sources":["../../src/lib/presets.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,UAAU,GAAG,MAAM,GAAG,QAAQ,CAAC;AAEpE,MAAM,WAAW,aAAa;IAC5B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,UAAU,CAAC;IACnB,QAAQ,EAAE;QACR,QAAQ,EAAE,OAAO,CAAC;QAClB,aAAa,EAAE,OAAO,CAAC;QACvB,SAAS,EAAE,OAAO,CAAC;QACnB,qBAAqB,EAAE,OAAO,CAAC;QAC/B,kCAAkC,EAAE,OAAO,CAAC;QAC5C,kBAAkB,EAAE,OAAO,CAAC;QAC5B,kBAAkB,EAAE,OAAO,CAAC;KAC7B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,aAAa,CAAC,EAAE,MAAM,CAAC;QACvB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,qBAAqB,CAAC,EAAE,MAAM,CAAC;QAC/B,kCAAkC,CAAC,EAAE,MAAM,CAAC;QAC5C,kBAAkB,CAAC,EAAE,MAAM,CAAC;QAC5B,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;KACnC,CAAC;IACF,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,UAAU,CAAC,EAAE;QACX,OAAO,EAAE,OAAO,CAAC;QACjB,OAAO,EAAE,QAAQ,GAAG,QAAQ,CAAC;KAC9B,CAAC;IACF,SAAS,CAAC,EAAE;QACV,OAAO,CAAC,EAAE,OAAO,CAAC;QAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,iBAAiB,CAAC,EAAE,MAAM,CAAC;KAC5B,CAAC;IACF,aAAa,CAAC,EAAE,mBAAmB,CAAC;CACrC;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;IAC3B,iBAAiB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,eAAO,MAAM,6BAA6B,EAAE,mBAI3C,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE;IAAE,QAAQ,EAAE,aAAa,CAAC,UAAU,CAAC,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAiE3H,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,aAAa,CAAC,UAAU,CAAC,EAAE,MAAM,EAAE,CAarF,CAAC;AAEF,eAAO,MAAM,uBAAuB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,aAAa,CAAC,UAAU,CAAC,GAAG,YAAY,CAOlG,CAAC;AAEF,eAAO,MAAM,aAAa,UAAU,CAAC;AACrC,eAAO,MAAM,UAAU,kFAAkF,CAAC"}
@@ -8,8 +8,11 @@ export interface RunLocalRoutineOptions {
8
8
  noWorktree?: boolean;
9
9
  keepWorktree?: boolean;
10
10
  dryRun?: boolean;
11
+ verbose?: boolean;
12
+ showCard?: boolean;
11
13
  env?: Record<string, string>;
12
14
  onLog?: (chunk: string) => void;
15
+ onTargetDetected?: (target: string) => void;
13
16
  }
14
17
  export interface RunLocalRoutineResult {
15
18
  success: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;CACjC;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,GAC9D,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAQxC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAwIrG"}
1
+ {"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../src/lib/runner.ts"],"names":[],"mappings":"AAeA,MAAM,WAAW,sBAAsB;IACrC,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,GAAG,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC7B,KAAK,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,IAAI,CAAC;IAChC,gBAAgB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC;CAC7C;AAED,MAAM,WAAW,qBAAqB;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAoB9D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAAC,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAA;CAAO,GAC9D,MAAM,CAmBR;AAED;;GAEG;AACH,wBAAgB,cAAc,IAAI,OAAO,CAOxC;AAED;;GAEG;AACH,wBAAsB,eAAe,CAAC,OAAO,EAAE,sBAAsB,GAAG,OAAO,CAAC,qBAAqB,CAAC,CAgOrG"}
@@ -0,0 +1,85 @@
1
+ export interface SummaryCardOptions {
2
+ routine: string;
3
+ output?: string;
4
+ repoRoot?: string;
5
+ issue?: string | number;
6
+ pr?: string | number;
7
+ durationMs?: number;
8
+ }
9
+ export interface ErrorCardOptions {
10
+ routine: string;
11
+ exitCode: number;
12
+ repoRoot: string;
13
+ issue?: string | number;
14
+ pr?: string | number;
15
+ durationMs?: number;
16
+ error?: Error;
17
+ }
18
+ export interface ParsedRunSummary {
19
+ routine?: string;
20
+ target?: string;
21
+ decision?: string;
22
+ result?: string;
23
+ duration?: string;
24
+ passes?: Array<{
25
+ name: string;
26
+ status: 'pass' | 'fail' | 'info';
27
+ detail?: string;
28
+ }>;
29
+ actions?: string[];
30
+ logPath?: string;
31
+ }
32
+ /**
33
+ * Strips temporary worktree roots and converts absolute worktree paths to clean relative paths.
34
+ */
35
+ export declare function sanitizeWorktreePaths(text: string): string;
36
+ /**
37
+ * Extracts the '# ... Execution Summary' section from routine output text.
38
+ */
39
+ export declare function extractExecutionSummary(output: string): string | null;
40
+ /**
41
+ * Finds the latest committed run log in .github/prompts/logs/<routine>/*.md.
42
+ */
43
+ export declare function findLatestRunLog(repoRoot: string, routine: string): string | null;
44
+ /**
45
+ * Parses markdown run log files into structured data.
46
+ */
47
+ export declare function parseRunLog(logContent: string): ParsedRunSummary;
48
+ /**
49
+ * Heuristics to detect active stage from streaming agent tokens.
50
+ */
51
+ export declare function detectActivePhase(chunk: string, currentPhase?: string): string;
52
+ /**
53
+ * Detects if the agent has selected or claimed a specific issue in Scan mode.
54
+ */
55
+ export declare function detectClaimedIssue(chunk: string): string | null;
56
+ /**
57
+ * Detects if the agent has selected a specific pull request in Scan mode.
58
+ */
59
+ export declare function detectClaimedPR(chunk: string): string | null;
60
+ /**
61
+ * Renders a styled Unicode summary card.
62
+ */
63
+ export declare function renderSummaryCard(options: SummaryCardOptions): string;
64
+ /**
65
+ * Renders an Error Card with tail of daemon.log.
66
+ */
67
+ export declare function renderErrorCard(options: ErrorCardOptions): string;
68
+ /**
69
+ * Minimalist zero-dependency terminal spinner.
70
+ */
71
+ export declare class TerminalSpinner {
72
+ private frames;
73
+ private currentFrame;
74
+ private intervalId;
75
+ private startTime;
76
+ private message;
77
+ private isRunning;
78
+ private isTTY;
79
+ constructor();
80
+ start(initialMessage: string): void;
81
+ update(newMessage: string): void;
82
+ private render;
83
+ stop(): void;
84
+ }
85
+ //# sourceMappingURL=terminal-card.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"terminal-card.d.ts","sourceRoot":"","sources":["../../src/lib/terminal-card.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,kBAAkB;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACxB,EAAE,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,KAAK,CAAC,EAAE,KAAK,CAAC;CACf;AAED,MAAM,WAAW,gBAAgB;IAC/B,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACpF,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAc1D;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAwBrE;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAcjF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,gBAAgB,CA8EhE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,YAAY,GAAE,MAA4B,GAAG,MAAM,CAuBnG;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAkB/D;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAc5D;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,kBAAkB,GAAG,MAAM,CAsJrE;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,gBAAgB,GAAG,MAAM,CAqDjE;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,MAAM,CAAsD;IACpE,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,UAAU,CAA+B;IACjD,OAAO,CAAC,SAAS,CAAa;IAC9B,OAAO,CAAC,OAAO,CAAc;IAC7B,OAAO,CAAC,SAAS,CAAkB;IACnC,OAAO,CAAC,KAAK,CAAU;IAEvB,cAEC;IAEM,KAAK,CAAC,cAAc,EAAE,MAAM,GAAG,IAAI,CAazC;IAEM,MAAM,CAAC,UAAU,EAAE,MAAM,GAAG,IAAI,CAKtC;IAED,OAAO,CAAC,MAAM;IAeP,IAAI,IAAI,IAAI,CAYlB;CACF"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "jonah-fleet",
3
- "version": "1.4.1",
3
+ "version": "1.5.0",
4
4
  "description": "Standalone autonomous agent fleet with Symphony orchestration, claim protocols, and continuous improvement loops",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
@@ -41,6 +41,12 @@ tests/ # Test suites
41
41
  - **Error Handling**: Validate inputs at server and module boundaries. Return explicit structured errors.
42
42
  - **Testing Philosophy**: Write regression unit tests for every bug fix and integration tests for key workflows.
43
43
 
44
+ ## Requirements Discovery & Inquisitive Stance
45
+
46
+ - **Challenge Premise First**: Do not be a passive order-taker. Before writing code or drafting large plans, verify whether the requested change is necessary, whether it solves a root cause rather than a symptom, or if existing primitives in the codebase already handle it.
47
+ - **Zero-Guesswork Ambiguity Gate**: Never make silent assumptions about underspecified requirements, schemas, edge cases, or UX flows. Stop and ask clarifying questions before implementation.
48
+ - **Structured Clarifications & Grilling**: When asking questions, propose 1–2 high-leverage questions at a time with concrete options or trade-offs. For complex features or fuzzy requirements, invoke `/grill-me` to stress-test the design before writing code.
49
+
44
50
  ## Conventions
45
51
 
46
52
  - **Language**: All code, comments, commit messages, and PR titles must be written in **English**.
@@ -83,8 +83,11 @@ The routines invoke specialized engineering skills at key workflow checkpoints:
83
83
  - `/resolving-merge-conflicts`: Resolves merge conflicts mechanically before squash-merging.
84
84
  - **Issues Housekeeping (`issues-housekeeping.md`)**:
85
85
  - `/triage`: Evaluates incoming issues into canonical roles.
86
+ - **Triage & Interactive Planning**:
87
+ - `/grill-me`: Interrogates proposals and requirements to uncover edge cases and force explicit trade-offs before implementation.
86
88
  - **Product Planning (`product-planning.md`)**:
87
89
  - `/domain-modeling`: Pressure-tests proposals and records domain terms / ADRs.
90
+ - `/grill-me`: Stress-tests proposed roadmaps and user stories.
88
91
  - `/to-spec`: Authors formal PRDs for larger proposals.
89
92
  - `/to-tickets`: Decomposes approved epics/proposals into dependency-linked issues.
90
93
  - **Prompt Optimizer (`optimizer.md`)**:
@@ -43,6 +43,7 @@ If any criterion cannot be met, stop immediately and log FAILURE with the reason
43
43
  - Do not start implementing an issue before claiming it (both assignment AND claim comment).
44
44
  - Do not mark a PR ready while its `mergeable_state` is `dirty` — resolve merge conflicts first.
45
45
  - Do not fall into the **Telemetry Rabbit Hole**: do not spend cycles instrumenting elaborate fallback telemetry or defensive error handling for features that suffer from lack of user intent rather than software bugs.
46
+ - Do not guess or invent arbitrary specifications for ambiguous issues — post clarifying questions, label `needs-info`, and release the claim instead of blindly writing code.
46
47
 
47
48
  ## Instructions
48
49
 
@@ -85,10 +86,13 @@ b. **Eligible → claim, then implement.** Call `get_me` once to learn your own
85
86
  6. Count open PRs authored by automated sessions representing live reviewable work (excluding log-only PRs). If 3 or more non-log PRs are open, STOP — run is SUCCESS with "Too many open PRs, converging first".
86
87
  7. Call `get_me` once to learn your own GitHub account (`login`).
87
88
  8. List open issues sorted by priority labels (P1 > P2 > P3). Within the same priority tier, order by type (`bug`/`security` before others), then oldest first.
89
+ - **Selective Server-Side Querying**: To prevent tool buffer truncation and avoid ingesting un-actionable issues, query GitHub with server-side exclusion filters rather than dumping all issues. E.g.:
90
+ `gh issue list --state open --search "no:assignee -label:measurement -label:needs-human -label:needs-design -label:wontfix -label:needs-info" --limit 30`
91
+ (or filter by priority tier: `--search "label:priority/P0,priority/P1 no:assignee -label:measurement -label:needs-human -label:needs-design -label:wontfix -label:needs-info"`).
88
92
  - **Dual Execution Priority Routing**:
89
93
  - If running in **Cloud Actions** (`$GITHUB_ACTIONS` / `$CI`): Scan mode selects `priority/P0` or `priority/P1` issues first. Lower-priority `priority/P2` or `priority/P3` issues are eligible in cloud Scan mode ONLY if the issue has remained unclaimed for more than 48 hours (`created_at` older than 48h, acting as a cloud catchup sweep).
90
94
  - If running in **Local Agent** (`$LOCAL_AGENT`): Scan mode selects across all priorities (P0 → P1 → P2 → P3) without time gating, prioritizing active local backlog consumption.
91
- - Skip assigned issues (unless stale claim per `ORCHESTRATION.md`), issues with open PRs, issues with unclosed blocking dependencies (`Blocked by #N` / `Depends on #N`), issues labeled `needs-human` or `needs-design`, and issues under cross-run cooldown.
95
+ - Skip assigned issues (unless stale claim per `ORCHESTRATION.md`), issues with open PRs, issues with unclosed blocking dependencies (`Blocked by #N` / `Depends on #N`), issues labeled `needs-human`, `needs-design`, or `needs-info`, and issues under cross-run cooldown.
92
96
  9. If no eligible candidate exists, STOP — run is SUCCESS with "No unclaimed work available".
93
97
  10. If the candidate should be closed already (work done, PRs merged), close it and return to step 8.
94
98
  10a. **Stale-claim reclamation:** If candidate is a stale claim per `ORCHESTRATION.md`, re-read immediately before writing, unassign the dead owner, post reclamation comment, and proceed to claim.
@@ -103,6 +107,11 @@ b. **Eligible → claim, then implement.** Call `get_me` once to learn your own
103
107
  - Read the issue description, linked code, and comment thread.
104
108
  - If bug: use `/diagnosing-bugs` to establish reproduction test before fixing.
105
109
  - If large/complex: use `/domain-modeling` and `/codebase-design`.
110
+ - **Ambiguity & Missing Acceptance Criteria Gate**: Challenge underspecified or incomplete requests before writing any code. If the issue lacks observable acceptance criteria, relies on unverified assumptions, or leaves critical technical/UX decisions ambiguous:
111
+ - Do NOT guess or invent arbitrary requirements to force completion.
112
+ - Post a comment on the issue posing 1–3 focused clarifying questions that identify the exact decisions or trade-offs needed.
113
+ - Apply the `needs-info` label and release the claim (unassign).
114
+ - Select the next candidate (evaluating ambiguous issues counts toward step 12's infeasible-continuation cap).
106
115
  - **Intent vs. Defect Guardrail**: When investigating issues related to low conversion, zero-click events, or underperforming features: verify whether the issue is a software defect or a lack of user intent. If data indicates the root cause is **lack of user intent** (e.g. button is rendered above fold and functions correctly when clicked, but user interaction rate is <2%) rather than a software defect, do NOT fall into the **telemetry rabbit hole** (adding elaborate fallback telemetry, downstream error handling, or defensive rendering). Categorize the issue as a **product/UX question** (`needs-design` / `roadmap/*`), comment explaining the lack of user intent, release the claim (unassign), and select the next candidate.
107
116
  - If infeasible: comment explaining blocker, release claim (unassign), and select next candidate (up to 3 infeasible evaluations per run). If permanent blocker on 2nd strike, apply `needs-human` label and tag repo owner.
108
117
  12a. **Umbrella-issue handoff + batching:** If candidate is an umbrella epic:
@@ -0,0 +1,64 @@
1
+ ---
2
+ name: grill-me
3
+ description: Stress-test proposals, requirements, and designs through a targeted, sequential interview to eliminate assumptions before implementation.
4
+ ---
5
+
6
+ # Grill Me
7
+
8
+ Stress-test plans, requirements, and designs through an active, sequential interview. The agent acts as an inquisitor—a cross between a principal engineer and a rigorous technical product manager.
9
+
10
+ Your goal is **not** to validate or agree with the user. Your goal is to **uncover gaps, challenge necessity, expose hidden edge cases, and force clear decisions** before any code is written or formal spec drafted.
11
+
12
+ ## The Grilling Mindset
13
+
14
+ - **Default to skepticism**: Ask why this needs to be built at all. Can this be solved with existing codebase primitives, configuration, or by deleting code?
15
+ - **Zero-guesswork discipline**: Do not guess what the user meant when requirements are ambiguous. Force explicit choices.
16
+ - **One to two questions per turn**: Never dump a questionnaire or a wall of questions. Ask at most 1–2 high-leverage questions at a time, provide concrete trade-offs or recommended options, and wait for the response before proceeding.
17
+
18
+ ## Process
19
+
20
+ Execute these phases in sequence:
21
+
22
+ ### Phase 1: Challenge the Premise & Scope
23
+
24
+ 1. **Problem vs. Symptom**: Is the user solving the real root problem or patching a surface symptom?
25
+ 2. **Alternative & Simplicity**: Could this be handled without new abstractions? What is the simplest thing that could possibly work?
26
+ 3. **Necessity & ROI**: What happens if we do nothing? Who specifically benefits from this change?
27
+
28
+ Probe the premise:
29
+ - "What exact problem does this solve, and why can't we solve it with [existing module/primitive]?"
30
+ - "What is explicitly *out of scope* for this change?"
31
+
32
+ ### Phase 2: Stress-Test Technical Seams & Failure Modes
33
+
34
+ Once the premise is solid, probe failure modes and system boundaries:
35
+
36
+ 1. **Failure & Degraded States**: What happens if network calls fail, services time out, or dependencies crash?
37
+ 2. **Boundary & Empty States**: What happens with empty data, maximum limits, concurrent writes, or conflicting inputs?
38
+ 3. **Security & Auth**: Are there permission gates, auth boundaries, or data leakage risks?
39
+ 4. **Data Model & Schema**: Does this change existing contracts? Is it backward-compatible?
40
+
41
+ ### Phase 3: Establish Concrete Acceptance Criteria
42
+
43
+ Force observable, testable definitions of done:
44
+
45
+ 1. **Test Seams**: At which seam (unit, integration, end-to-end) will this be verified?
46
+ 2. **Observable Outcomes**: What is the exact input and expected output? How will a test or user prove this works?
47
+ 3. **Negative Paths**: What negative test cases must fail safely?
48
+
49
+ ### Phase 4: Hand-off & Synthesis
50
+
51
+ When all critical ambiguities are resolved:
52
+ 1. Summarize the agreed scope, explicit non-goals, architectural decisions, and acceptance criteria in a concise brief.
53
+ 2. Direct the next action:
54
+ - For formal requirements: run `/to-spec` or author an agent brief.
55
+ - For domain terminology: run `/domain-modeling`.
56
+ - For immediate implementation: proceed test-first via `/tdd`.
57
+
58
+ ## Completion Criteria
59
+
60
+ The grilling session is complete only when:
61
+ - [ ] Core motivation and explicit non-goals are established
62
+ - [ ] Edge cases and failure modes have explicit decisions recorded
63
+ - [ ] Acceptance criteria and verification seams are concrete and testable
64
+ - [ ] The user confirms alignment with the summarized decisions
@@ -0,0 +1,5 @@
1
+ interface:
2
+ display_name: "Grill Me"
3
+ short_description: "Stress-test proposals, requirements, and designs"
4
+ policy:
5
+ allow_implicit_invocation: false
@@ -73,7 +73,7 @@ Show counts and a one-line summary per item. Let the maintainer pick.
73
73
 
74
74
  3. **Verify the claim.** Before any grilling, check that the claim holds up. For a bug, reproduce it from the reporter's steps. For a PR, confirm the diff does what it claims: check it out, run the relevant tests or commands. Report what happened: confirmed (with code path), failed, or insufficient detail (a strong `needs-info` signal). A confirmed verification makes a much stronger agent brief.
75
75
 
76
- 4. **Grill (if needed).** If the request needs fleshing out, call the Skill tool twice, for "grilling" and "domain-modeling", and grill it into shape a round of questions at a time, sharpening domain terms and updating `CONTEXT.md`/ADRs inline as decisions land.
76
+ 4. **Grill (if needed).** If the request needs fleshing out, call the Skill tool twice, for "grill-me" and "domain-modeling", and grill it into shape a round of questions at a time, sharpening domain terms and updating `CONTEXT.md`/ADRs inline as decisions land.
77
77
 
78
78
  5. **Apply the outcome:**
79
79
  - `ready-for-agent`: post an agent brief comment ([AGENT-BRIEF.md](AGENT-BRIEF.md)).
@@ -107,12 +107,13 @@ jobs:
107
107
  fi
108
108
 
109
109
  # Priority-driven dual execution filter on direct pull_request triggers:
110
- # If PR is labeled priority/P2 or priority/P3, skip immediate cloud review to let local agent daemons review it
110
+ # Strict allowlist: only trigger immediate cloud review if explicitly labeled priority/P0 or priority/P1.
111
+ # Untagged PRs and lower-priority PRs (P2/P3) skip immediate cloud review and are handled by local peer-review daemons
111
112
  # (cloud scheduled watchdog sweep will catch up if unreviewed > 48h).
112
113
  if [ "${{ github.event_name }}" = "pull_request" ]; then
113
114
  labels=$(echo "$pr" | jq -r '.labels[].name' 2>/dev/null || echo "")
114
- if echo "$labels" | grep -qE '^priority/P[23]$'; then
115
- echo "PR is labeled as lower priority (P2/P3) — skipping immediate cloud review for local peer-review daemon."
115
+ if ! echo "$labels" | grep -qE '^priority/P[01]$'; then
116
+ echo "PR is not explicitly labeled priority/P0 or priority/P1 — skipping immediate cloud review for local peer-review daemon."
116
117
  echo "skip=true" >> "$GITHUB_OUTPUT"
117
118
  exit 0
118
119
  fi