jfl 0.5.0 → 0.6.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.
Files changed (135) hide show
  1. package/dist/commands/context-hub.d.ts +1 -0
  2. package/dist/commands/context-hub.d.ts.map +1 -1
  3. package/dist/commands/context-hub.js +246 -2
  4. package/dist/commands/context-hub.js.map +1 -1
  5. package/dist/commands/peter.d.ts +2 -0
  6. package/dist/commands/peter.d.ts.map +1 -1
  7. package/dist/commands/peter.js +242 -52
  8. package/dist/commands/peter.js.map +1 -1
  9. package/dist/commands/setup.d.ts +12 -0
  10. package/dist/commands/setup.d.ts.map +1 -0
  11. package/dist/commands/setup.js +322 -0
  12. package/dist/commands/setup.js.map +1 -0
  13. package/dist/commands/train.d.ts +33 -0
  14. package/dist/commands/train.d.ts.map +1 -0
  15. package/dist/commands/train.js +510 -0
  16. package/dist/commands/train.js.map +1 -0
  17. package/dist/commands/verify.d.ts +14 -0
  18. package/dist/commands/verify.d.ts.map +1 -0
  19. package/dist/commands/verify.js +276 -0
  20. package/dist/commands/verify.js.map +1 -0
  21. package/dist/dashboard-static/assets/index-CW9ZxqX8.css +1 -0
  22. package/dist/dashboard-static/assets/index-DNN__p4K.js +121 -0
  23. package/dist/dashboard-static/index.html +2 -2
  24. package/dist/index.js +99 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/lib/agent-session.d.ts.map +1 -1
  27. package/dist/lib/agent-session.js +12 -4
  28. package/dist/lib/agent-session.js.map +1 -1
  29. package/dist/lib/eval-snapshot.js +1 -1
  30. package/dist/lib/eval-snapshot.js.map +1 -1
  31. package/dist/lib/pi-sky/bridge.d.ts +55 -0
  32. package/dist/lib/pi-sky/bridge.d.ts.map +1 -0
  33. package/dist/lib/pi-sky/bridge.js +264 -0
  34. package/dist/lib/pi-sky/bridge.js.map +1 -0
  35. package/dist/lib/pi-sky/cost-monitor.d.ts +21 -0
  36. package/dist/lib/pi-sky/cost-monitor.d.ts.map +1 -0
  37. package/dist/lib/pi-sky/cost-monitor.js +126 -0
  38. package/dist/lib/pi-sky/cost-monitor.js.map +1 -0
  39. package/dist/lib/pi-sky/eval-sweep.d.ts +27 -0
  40. package/dist/lib/pi-sky/eval-sweep.d.ts.map +1 -0
  41. package/dist/lib/pi-sky/eval-sweep.js +141 -0
  42. package/dist/lib/pi-sky/eval-sweep.js.map +1 -0
  43. package/dist/lib/pi-sky/event-router.d.ts +32 -0
  44. package/dist/lib/pi-sky/event-router.d.ts.map +1 -0
  45. package/dist/lib/pi-sky/event-router.js +176 -0
  46. package/dist/lib/pi-sky/event-router.js.map +1 -0
  47. package/dist/lib/pi-sky/experiment.d.ts +9 -0
  48. package/dist/lib/pi-sky/experiment.d.ts.map +1 -0
  49. package/dist/lib/pi-sky/experiment.js +83 -0
  50. package/dist/lib/pi-sky/experiment.js.map +1 -0
  51. package/dist/lib/pi-sky/index.d.ts +16 -0
  52. package/dist/lib/pi-sky/index.d.ts.map +1 -0
  53. package/dist/lib/pi-sky/index.js +16 -0
  54. package/dist/lib/pi-sky/index.js.map +1 -0
  55. package/dist/lib/pi-sky/stratus-gate.d.ts +28 -0
  56. package/dist/lib/pi-sky/stratus-gate.d.ts.map +1 -0
  57. package/dist/lib/pi-sky/stratus-gate.js +61 -0
  58. package/dist/lib/pi-sky/stratus-gate.js.map +1 -0
  59. package/dist/lib/pi-sky/swarm.d.ts +28 -0
  60. package/dist/lib/pi-sky/swarm.d.ts.map +1 -0
  61. package/dist/lib/pi-sky/swarm.js +208 -0
  62. package/dist/lib/pi-sky/swarm.js.map +1 -0
  63. package/dist/lib/pi-sky/types.d.ts +139 -0
  64. package/dist/lib/pi-sky/types.d.ts.map +1 -0
  65. package/dist/lib/pi-sky/types.js +2 -0
  66. package/dist/lib/pi-sky/types.js.map +1 -0
  67. package/dist/lib/pi-sky/voice-bridge.d.ts +20 -0
  68. package/dist/lib/pi-sky/voice-bridge.d.ts.map +1 -0
  69. package/dist/lib/pi-sky/voice-bridge.js +91 -0
  70. package/dist/lib/pi-sky/voice-bridge.js.map +1 -0
  71. package/dist/lib/policy-head.d.ts +16 -1
  72. package/dist/lib/policy-head.d.ts.map +1 -1
  73. package/dist/lib/policy-head.js +117 -19
  74. package/dist/lib/policy-head.js.map +1 -1
  75. package/dist/lib/predictor.d.ts +10 -0
  76. package/dist/lib/predictor.d.ts.map +1 -1
  77. package/dist/lib/predictor.js +46 -7
  78. package/dist/lib/predictor.js.map +1 -1
  79. package/dist/lib/setup/agent-generator.d.ts +18 -0
  80. package/dist/lib/setup/agent-generator.d.ts.map +1 -0
  81. package/dist/lib/setup/agent-generator.js +114 -0
  82. package/dist/lib/setup/agent-generator.js.map +1 -0
  83. package/dist/lib/setup/context-analyzer.d.ts +16 -0
  84. package/dist/lib/setup/context-analyzer.d.ts.map +1 -0
  85. package/dist/lib/setup/context-analyzer.js +112 -0
  86. package/dist/lib/setup/context-analyzer.js.map +1 -0
  87. package/dist/lib/setup/doc-auditor.d.ts +54 -0
  88. package/dist/lib/setup/doc-auditor.d.ts.map +1 -0
  89. package/dist/lib/setup/doc-auditor.js +629 -0
  90. package/dist/lib/setup/doc-auditor.js.map +1 -0
  91. package/dist/lib/setup/domain-generator.d.ts +7 -0
  92. package/dist/lib/setup/domain-generator.d.ts.map +1 -0
  93. package/dist/lib/setup/domain-generator.js +58 -0
  94. package/dist/lib/setup/domain-generator.js.map +1 -0
  95. package/dist/lib/setup/smart-eval-generator.d.ts +38 -0
  96. package/dist/lib/setup/smart-eval-generator.d.ts.map +1 -0
  97. package/dist/lib/setup/smart-eval-generator.js +378 -0
  98. package/dist/lib/setup/smart-eval-generator.js.map +1 -0
  99. package/dist/lib/setup/smart-recommender.d.ts +63 -0
  100. package/dist/lib/setup/smart-recommender.d.ts.map +1 -0
  101. package/dist/lib/setup/smart-recommender.js +329 -0
  102. package/dist/lib/setup/smart-recommender.js.map +1 -0
  103. package/dist/lib/setup/spec-generator.d.ts +63 -0
  104. package/dist/lib/setup/spec-generator.d.ts.map +1 -0
  105. package/dist/lib/setup/spec-generator.js +310 -0
  106. package/dist/lib/setup/spec-generator.js.map +1 -0
  107. package/dist/lib/setup/violation-agent-generator.d.ts +32 -0
  108. package/dist/lib/setup/violation-agent-generator.d.ts.map +1 -0
  109. package/dist/lib/setup/violation-agent-generator.js +255 -0
  110. package/dist/lib/setup/violation-agent-generator.js.map +1 -0
  111. package/package.json +1 -1
  112. package/packages/pi/extensions/context.ts +88 -55
  113. package/packages/pi/extensions/hub-resolver.ts +63 -0
  114. package/packages/pi/extensions/index.ts +16 -3
  115. package/packages/pi/extensions/memory-tool.ts +9 -4
  116. package/packages/pi/extensions/session.ts +68 -16
  117. package/packages/pi/extensions/tool-renderers.ts +23 -8
  118. package/scripts/train/requirements.txt +5 -0
  119. package/scripts/train/train-policy-head.py +477 -0
  120. package/scripts/train/v2/dataset.py +81 -0
  121. package/scripts/train/v2/domain.json +18 -0
  122. package/scripts/train/v2/eval.py +196 -0
  123. package/scripts/train/v2/generate_data.py +219 -0
  124. package/scripts/train/v2/infer.py +188 -0
  125. package/scripts/train/v2/model.py +112 -0
  126. package/scripts/train/v2/precompute.py +132 -0
  127. package/scripts/train/v2/train.py +302 -0
  128. package/scripts/train/v2/transform_buffer.py +227 -0
  129. package/scripts/train/v2/validate_data.py +115 -0
  130. package/template/.claude/settings.json +2 -15
  131. package/template/scripts/session/session-cleanup.sh +2 -11
  132. package/template/scripts/session/session-end-hub.sh +72 -0
  133. package/template/scripts/session/session-start-hub.sh +105 -0
  134. package/dist/dashboard-static/assets/index-B6b867Pv.js +0 -121
  135. package/dist/dashboard-static/assets/index-Y4BrqxV-.css +0 -1
@@ -0,0 +1,16 @@
1
+ /**
2
+ * @purpose Analyze GTM context for RL agent recommendations — journals, knowledge docs, git history
3
+ */
4
+ export interface ProjectContext {
5
+ journalCount: number;
6
+ sessionCount: number;
7
+ hasKnowledge: boolean;
8
+ hasProductRepo: boolean;
9
+ agents: string[];
10
+ topFilePatterns: string[];
11
+ metricCategories: string[];
12
+ readinessScore: number;
13
+ issues: string[];
14
+ }
15
+ export declare function analyzeContext(projectRoot: string): ProjectContext;
16
+ //# sourceMappingURL=context-analyzer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analyzer.d.ts","sourceRoot":"","sources":["../../../src/lib/setup/context-analyzer.ts"],"names":[],"mappings":"AAAA;;GAEG;AAKH,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,MAAM,CAAA;IACpB,YAAY,EAAE,OAAO,CAAA;IACrB,cAAc,EAAE,OAAO,CAAA;IACvB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,eAAe,EAAE,MAAM,EAAE,CAAA;IACzB,gBAAgB,EAAE,MAAM,EAAE,CAAA;IAC1B,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,MAAM,EAAE,CAAA;CACjB;AAED,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,cAAc,CAiGlE"}
@@ -0,0 +1,112 @@
1
+ /**
2
+ * @purpose Analyze GTM context for RL agent recommendations — journals, knowledge docs, git history
3
+ */
4
+ import { existsSync, readFileSync, readdirSync } from "fs";
5
+ import { join } from "path";
6
+ export function analyzeContext(projectRoot) {
7
+ const ctx = {
8
+ journalCount: 0,
9
+ sessionCount: 0,
10
+ hasKnowledge: false,
11
+ hasProductRepo: false,
12
+ agents: [],
13
+ topFilePatterns: [],
14
+ metricCategories: [],
15
+ readinessScore: 0,
16
+ issues: [],
17
+ };
18
+ // Count journal entries
19
+ const journalDir = join(projectRoot, ".jfl", "journal");
20
+ if (existsSync(journalDir)) {
21
+ const files = readdirSync(journalDir).filter(f => f.endsWith(".jsonl"));
22
+ ctx.sessionCount = files.length;
23
+ for (const file of files) {
24
+ const content = readFileSync(join(journalDir, file), "utf-8");
25
+ ctx.journalCount += content.split("\n").filter(l => l.trim()).length;
26
+ }
27
+ }
28
+ // Check knowledge docs
29
+ const knowledgeDir = join(projectRoot, "knowledge");
30
+ if (existsSync(knowledgeDir)) {
31
+ const requiredDocs = ["VISION.md", "ROADMAP.md"];
32
+ const found = requiredDocs.filter(d => existsSync(join(knowledgeDir, d)));
33
+ ctx.hasKnowledge = found.length > 0;
34
+ }
35
+ // Check product repo
36
+ ctx.hasProductRepo = existsSync(join(projectRoot, "product")) || existsSync(join(projectRoot, ".jfl", "config.json"));
37
+ // Existing agents
38
+ const agentsDir = join(projectRoot, ".jfl", "agents");
39
+ if (existsSync(agentsDir)) {
40
+ ctx.agents = readdirSync(agentsDir).filter(f => f.endsWith(".toml")).map(f => f.replace(".toml", ""));
41
+ }
42
+ // Identify metric categories from journals
43
+ const categories = new Set();
44
+ if (existsSync(journalDir)) {
45
+ for (const file of readdirSync(journalDir).filter(f => f.endsWith(".jsonl"))) {
46
+ const content = readFileSync(join(journalDir, file), "utf-8");
47
+ for (const line of content.split("\n").filter(l => l.trim())) {
48
+ try {
49
+ const entry = JSON.parse(line);
50
+ if (entry.type === "fix")
51
+ categories.add("error_rate");
52
+ if (entry.type === "feature")
53
+ categories.add("feature_coverage");
54
+ if (entry.files?.some((f) => f.includes("test")))
55
+ categories.add("test_coverage");
56
+ if (entry.files?.some((f) => f.includes("perf") || f.includes("speed")))
57
+ categories.add("performance");
58
+ if (entry.files?.some((f) => f.includes("security") || f.includes("auth")))
59
+ categories.add("security");
60
+ }
61
+ catch { /* skip malformed */ }
62
+ }
63
+ }
64
+ }
65
+ ctx.metricCategories = [...categories];
66
+ // File pattern hotspots from training buffer
67
+ const bufferPath = join(projectRoot, ".jfl", "training-buffer.jsonl");
68
+ if (existsSync(bufferPath)) {
69
+ const fileCounts = {};
70
+ const content = readFileSync(bufferPath, "utf-8");
71
+ for (const line of content.split("\n").filter(l => l.trim())) {
72
+ try {
73
+ const entry = JSON.parse(line);
74
+ for (const f of entry.action?.files_affected || []) {
75
+ const dir = f.split("/").slice(0, 2).join("/");
76
+ fileCounts[dir] = (fileCounts[dir] || 0) + 1;
77
+ }
78
+ }
79
+ catch { /* skip */ }
80
+ }
81
+ ctx.topFilePatterns = Object.entries(fileCounts)
82
+ .sort((a, b) => b[1] - a[1])
83
+ .slice(0, 5)
84
+ .map(([pattern]) => `${pattern}/**`);
85
+ }
86
+ // Readiness score
87
+ let score = 0;
88
+ if (ctx.journalCount >= 20)
89
+ score += 30;
90
+ else if (ctx.journalCount >= 10)
91
+ score += 15;
92
+ if (ctx.sessionCount >= 3)
93
+ score += 20;
94
+ else if (ctx.sessionCount >= 1)
95
+ score += 10;
96
+ if (ctx.hasKnowledge)
97
+ score += 20;
98
+ if (ctx.hasProductRepo)
99
+ score += 20;
100
+ if (ctx.metricCategories.length > 0)
101
+ score += 10;
102
+ ctx.readinessScore = score;
103
+ // Issues
104
+ if (ctx.journalCount < 20)
105
+ ctx.issues.push(`Need 20+ journal entries (have ${ctx.journalCount})`);
106
+ if (ctx.sessionCount < 3)
107
+ ctx.issues.push(`Need 3+ sessions (have ${ctx.sessionCount})`);
108
+ if (!ctx.hasKnowledge)
109
+ ctx.issues.push("No knowledge docs found");
110
+ return ctx;
111
+ }
112
+ //# sourceMappingURL=context-analyzer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context-analyzer.js","sourceRoot":"","sources":["../../../src/lib/setup/context-analyzer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,54 @@
1
+ /**
2
+ * @purpose Audit GTM workspace docs — bifurcated: framework vs customer docs
3
+ *
4
+ * Framework docs: came from templates/skills, compare to upstream, track version drift
5
+ * Customer docs: PRDs, knowledge, custom content — analyze for staleness, token cost, relevance
6
+ *
7
+ * Core insight: "this doc costs you $X per day and adds zero value" > "this doc is long, split it"
8
+ */
9
+ import type { JournalInsight } from "./smart-recommender.js";
10
+ export type DocOrigin = "framework" | "customer" | "unknown";
11
+ export interface DocState {
12
+ path: string;
13
+ relativePath: string;
14
+ sizeBytes: number;
15
+ lines: number;
16
+ lastModified: Date;
17
+ staleScore: number;
18
+ bloatScore: number;
19
+ relevanceScore: number;
20
+ origin: DocOrigin;
21
+ tokenEstimate: number;
22
+ issues: string[];
23
+ sections: string[];
24
+ todoCount: number;
25
+ deadLinks: string[];
26
+ referenceCount: number;
27
+ }
28
+ export interface DocAuditResult {
29
+ docs: DocState[];
30
+ totalDocs: number;
31
+ totalLines: number;
32
+ totalBytes: number;
33
+ totalTokens: number;
34
+ frameworkDocs: DocState[];
35
+ customerDocs: DocState[];
36
+ staleDocs: DocState[];
37
+ bloatedDocs: DocState[];
38
+ missingDocs: string[];
39
+ unreferencedDocs: DocState[];
40
+ recommendations: DocRecommendation[];
41
+ }
42
+ export interface DocRecommendation {
43
+ type: "trim" | "update" | "create" | "archive" | "split" | "merge" | "refresh" | "dedupe";
44
+ target: string;
45
+ rationale: string;
46
+ priority: number;
47
+ estimatedSavings?: string;
48
+ origin: DocOrigin;
49
+ action?: string;
50
+ }
51
+ export declare function auditDocs(projectRoot: string, insight: JournalInsight): DocAuditResult;
52
+ export declare function buildDocAuditPrompt(audit: DocAuditResult, insight: JournalInsight): string;
53
+ export declare function getSmartDocRecommendations(projectRoot: string, insight: JournalInsight): Promise<DocRecommendation[]>;
54
+ //# sourceMappingURL=doc-auditor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"doc-auditor.d.ts","sourceRoot":"","sources":["../../../src/lib/setup/doc-auditor.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAIH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAA;AAM5D,MAAM,MAAM,SAAS,GAAG,WAAW,GAAG,UAAU,GAAG,SAAS,CAAA;AAE5D,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,MAAM,CAAA;IACZ,YAAY,EAAE,MAAM,CAAA;IACpB,SAAS,EAAE,MAAM,CAAA;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,YAAY,EAAE,IAAI,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,MAAM,EAAE,SAAS,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,EAAE,CAAA;IACnB,cAAc,EAAE,MAAM,CAAA;CACvB;AAED,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,QAAQ,EAAE,CAAA;IAChB,SAAS,EAAE,MAAM,CAAA;IACjB,UAAU,EAAE,MAAM,CAAA;IAClB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,aAAa,EAAE,QAAQ,EAAE,CAAA;IACzB,YAAY,EAAE,QAAQ,EAAE,CAAA;IACxB,SAAS,EAAE,QAAQ,EAAE,CAAA;IACrB,WAAW,EAAE,QAAQ,EAAE,CAAA;IACvB,WAAW,EAAE,MAAM,EAAE,CAAA;IACrB,gBAAgB,EAAE,QAAQ,EAAE,CAAA;IAC5B,eAAe,EAAE,iBAAiB,EAAE,CAAA;CACrC;AAED,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,GAAG,SAAS,GAAG,QAAQ,CAAA;IACzF,MAAM,EAAE,MAAM,CAAA;IACd,SAAS,EAAE,MAAM,CAAA;IACjB,QAAQ,EAAE,MAAM,CAAA;IAChB,gBAAgB,CAAC,EAAE,MAAM,CAAA;IACzB,MAAM,EAAE,SAAS,CAAA;IACjB,MAAM,CAAC,EAAE,MAAM,CAAA;CAChB;AAkDD,wBAAgB,SAAS,CACvB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,cAAc,CA0HhB;AAwaD,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,OAAO,EAAE,cAAc,GACtB,MAAM,CA2CR;AAED,wBAAsB,0BAA0B,CAC9C,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,cAAc,GACtB,OAAO,CAAC,iBAAiB,EAAE,CAAC,CAsC9B"}