jfl 0.9.6 → 0.9.8

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 (212) hide show
  1. package/dist/commands/agents.js +1 -1
  2. package/dist/commands/agents.js.map +1 -1
  3. package/dist/commands/context-hub.d.ts.map +1 -1
  4. package/dist/commands/context-hub.js +77 -18
  5. package/dist/commands/context-hub.js.map +1 -1
  6. package/dist/commands/deploy.js +1 -1
  7. package/dist/commands/deploy.js.map +1 -1
  8. package/dist/commands/feedback.js +1 -1
  9. package/dist/commands/feedback.js.map +1 -1
  10. package/dist/commands/hud.js +1 -1
  11. package/dist/commands/hud.js.map +1 -1
  12. package/dist/commands/init-from-service.js +1 -1
  13. package/dist/commands/init-from-service.js.map +1 -1
  14. package/dist/commands/init.js +1 -1
  15. package/dist/commands/init.js.map +1 -1
  16. package/dist/commands/kanban.js +6 -6
  17. package/dist/commands/kanban.js.map +1 -1
  18. package/dist/commands/login.d.ts +2 -13
  19. package/dist/commands/login.d.ts.map +1 -1
  20. package/dist/commands/login.js +6 -44
  21. package/dist/commands/login.js.map +1 -1
  22. package/dist/commands/organize.d.ts +16 -0
  23. package/dist/commands/organize.d.ts.map +1 -0
  24. package/dist/commands/organize.js +334 -0
  25. package/dist/commands/organize.js.map +1 -0
  26. package/dist/commands/peter.d.ts.map +1 -1
  27. package/dist/commands/peter.js +273 -0
  28. package/dist/commands/peter.js.map +1 -1
  29. package/dist/commands/pi.d.ts.map +1 -1
  30. package/dist/commands/pi.js +11 -5
  31. package/dist/commands/pi.js.map +1 -1
  32. package/dist/commands/repair.js +1 -1
  33. package/dist/commands/repair.js.map +1 -1
  34. package/dist/commands/setup.d.ts.map +1 -1
  35. package/dist/commands/setup.js +113 -45
  36. package/dist/commands/setup.js.map +1 -1
  37. package/dist/commands/status.d.ts.map +1 -1
  38. package/dist/commands/status.js +4 -4
  39. package/dist/commands/status.js.map +1 -1
  40. package/dist/commands/update.d.ts.map +1 -1
  41. package/dist/commands/update.js +66 -0
  42. package/dist/commands/update.js.map +1 -1
  43. package/dist/index.d.ts +0 -6
  44. package/dist/index.d.ts.map +1 -1
  45. package/dist/index.js +60 -19
  46. package/dist/index.js.map +1 -1
  47. package/dist/lib/agent-config.d.ts.map +1 -1
  48. package/dist/lib/agent-config.js +24 -2
  49. package/dist/lib/agent-config.js.map +1 -1
  50. package/dist/lib/hub-health.d.ts.map +1 -1
  51. package/dist/lib/hub-health.js +14 -2
  52. package/dist/lib/hub-health.js.map +1 -1
  53. package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -1
  54. package/dist/lib/resource-optimizer-middleware.js +8 -2
  55. package/dist/lib/resource-optimizer-middleware.js.map +1 -1
  56. package/dist/lib/telemetry.d.ts.map +1 -1
  57. package/dist/lib/telemetry.js +13 -12
  58. package/dist/lib/telemetry.js.map +1 -1
  59. package/dist/utils/auth-status.d.ts +21 -0
  60. package/dist/utils/auth-status.d.ts.map +1 -0
  61. package/dist/utils/auth-status.js +53 -0
  62. package/dist/utils/auth-status.js.map +1 -0
  63. package/package.json +3 -2
  64. package/packages/pi/dist/agent-grid.d.ts +24 -0
  65. package/packages/pi/dist/agent-grid.d.ts.map +1 -0
  66. package/packages/pi/dist/agent-grid.js +162 -0
  67. package/packages/pi/dist/agent-grid.js.map +1 -0
  68. package/packages/pi/dist/agent-names.d.ts +43 -0
  69. package/packages/pi/dist/agent-names.d.ts.map +1 -0
  70. package/packages/pi/dist/agent-names.js +156 -0
  71. package/packages/pi/dist/agent-names.js.map +1 -0
  72. package/packages/pi/dist/autoresearch.d.ts +15 -0
  73. package/packages/pi/dist/autoresearch.d.ts.map +1 -0
  74. package/packages/pi/dist/autoresearch.js +372 -0
  75. package/packages/pi/dist/autoresearch.js.map +1 -0
  76. package/packages/pi/dist/bookmarks.d.ts +15 -0
  77. package/packages/pi/dist/bookmarks.d.ts.map +1 -0
  78. package/packages/pi/dist/bookmarks.js +77 -0
  79. package/packages/pi/dist/bookmarks.js.map +1 -0
  80. package/packages/pi/dist/context.d.ts +17 -0
  81. package/packages/pi/dist/context.d.ts.map +1 -0
  82. package/packages/pi/dist/context.js +152 -0
  83. package/packages/pi/dist/context.js.map +1 -0
  84. package/packages/pi/dist/crm-tool.d.ts +12 -0
  85. package/packages/pi/dist/crm-tool.d.ts.map +1 -0
  86. package/packages/pi/dist/crm-tool.js +58 -0
  87. package/packages/pi/dist/crm-tool.js.map +1 -0
  88. package/packages/pi/dist/eval-tool.d.ts +11 -0
  89. package/packages/pi/dist/eval-tool.d.ts.map +1 -0
  90. package/packages/pi/dist/eval-tool.js +188 -0
  91. package/packages/pi/dist/eval-tool.js.map +1 -0
  92. package/packages/pi/dist/eval.d.ts +12 -0
  93. package/packages/pi/dist/eval.d.ts.map +1 -0
  94. package/packages/pi/dist/eval.js +43 -0
  95. package/packages/pi/dist/eval.js.map +1 -0
  96. package/packages/pi/dist/footer.d.ts +20 -0
  97. package/packages/pi/dist/footer.d.ts.map +1 -0
  98. package/packages/pi/dist/footer.js +222 -0
  99. package/packages/pi/dist/footer.js.map +1 -0
  100. package/packages/pi/dist/header.d.ts +17 -0
  101. package/packages/pi/dist/header.d.ts.map +1 -0
  102. package/packages/pi/dist/header.js +156 -0
  103. package/packages/pi/dist/header.js.map +1 -0
  104. package/packages/pi/dist/hub-resolver.d.ts +11 -0
  105. package/packages/pi/dist/hub-resolver.d.ts.map +1 -0
  106. package/packages/pi/dist/hub-resolver.js +58 -0
  107. package/packages/pi/dist/hub-resolver.js.map +1 -0
  108. package/packages/pi/dist/hub-tools.d.ts +14 -0
  109. package/packages/pi/dist/hub-tools.d.ts.map +1 -0
  110. package/packages/pi/dist/hub-tools.js +266 -0
  111. package/packages/pi/dist/hub-tools.js.map +1 -0
  112. package/packages/pi/dist/hud-tool.d.ts +17 -0
  113. package/packages/pi/dist/hud-tool.d.ts.map +1 -0
  114. package/packages/pi/dist/hud-tool.js +297 -0
  115. package/packages/pi/dist/hud-tool.js.map +1 -0
  116. package/packages/pi/dist/index.d.ts +12 -0
  117. package/packages/pi/dist/index.d.ts.map +1 -0
  118. package/packages/pi/dist/index.js +436 -0
  119. package/packages/pi/dist/index.js.map +1 -0
  120. package/packages/pi/dist/jfl-resolve.d.ts +29 -0
  121. package/packages/pi/dist/jfl-resolve.d.ts.map +1 -0
  122. package/packages/pi/dist/jfl-resolve.js +89 -0
  123. package/packages/pi/dist/jfl-resolve.js.map +1 -0
  124. package/packages/pi/dist/journal.d.ts +23 -0
  125. package/packages/pi/dist/journal.d.ts.map +1 -0
  126. package/packages/pi/dist/journal.js +250 -0
  127. package/packages/pi/dist/journal.js.map +1 -0
  128. package/packages/pi/dist/map-bridge.d.ts +20 -0
  129. package/packages/pi/dist/map-bridge.d.ts.map +1 -0
  130. package/packages/pi/dist/map-bridge.js +181 -0
  131. package/packages/pi/dist/map-bridge.js.map +1 -0
  132. package/packages/pi/dist/memory-tool.d.ts +11 -0
  133. package/packages/pi/dist/memory-tool.d.ts.map +1 -0
  134. package/packages/pi/dist/memory-tool.js +148 -0
  135. package/packages/pi/dist/memory-tool.js.map +1 -0
  136. package/packages/pi/dist/notifications.d.ts +15 -0
  137. package/packages/pi/dist/notifications.d.ts.map +1 -0
  138. package/packages/pi/dist/notifications.js +65 -0
  139. package/packages/pi/dist/notifications.js.map +1 -0
  140. package/packages/pi/dist/onboarding-v1.d.ts +15 -0
  141. package/packages/pi/dist/onboarding-v1.d.ts.map +1 -0
  142. package/packages/pi/dist/onboarding-v1.js +417 -0
  143. package/packages/pi/dist/onboarding-v1.js.map +1 -0
  144. package/packages/pi/dist/onboarding-v2.d.ts +18 -0
  145. package/packages/pi/dist/onboarding-v2.d.ts.map +1 -0
  146. package/packages/pi/dist/onboarding-v2.js +402 -0
  147. package/packages/pi/dist/onboarding-v2.js.map +1 -0
  148. package/packages/pi/dist/onboarding-v3.d.ts +13 -0
  149. package/packages/pi/dist/onboarding-v3.d.ts.map +1 -0
  150. package/packages/pi/dist/onboarding-v3.js +581 -0
  151. package/packages/pi/dist/onboarding-v3.js.map +1 -0
  152. package/packages/pi/dist/peter-parker.d.ts +12 -0
  153. package/packages/pi/dist/peter-parker.d.ts.map +1 -0
  154. package/packages/pi/dist/peter-parker.js +162 -0
  155. package/packages/pi/dist/peter-parker.js.map +1 -0
  156. package/packages/pi/dist/pivot-tool.d.ts +11 -0
  157. package/packages/pi/dist/pivot-tool.d.ts.map +1 -0
  158. package/packages/pi/dist/pivot-tool.js +56 -0
  159. package/packages/pi/dist/pivot-tool.js.map +1 -0
  160. package/packages/pi/dist/policy-head-tool.d.ts +15 -0
  161. package/packages/pi/dist/policy-head-tool.d.ts.map +1 -0
  162. package/packages/pi/dist/policy-head-tool.js +220 -0
  163. package/packages/pi/dist/policy-head-tool.js.map +1 -0
  164. package/packages/pi/dist/portfolio-bridge.d.ts +12 -0
  165. package/packages/pi/dist/portfolio-bridge.d.ts.map +1 -0
  166. package/packages/pi/dist/portfolio-bridge.js +81 -0
  167. package/packages/pi/dist/portfolio-bridge.js.map +1 -0
  168. package/packages/pi/dist/service-skills.d.ts +15 -0
  169. package/packages/pi/dist/service-skills.d.ts.map +1 -0
  170. package/packages/pi/dist/service-skills.js +198 -0
  171. package/packages/pi/dist/service-skills.js.map +1 -0
  172. package/packages/pi/dist/session.d.ts +24 -0
  173. package/packages/pi/dist/session.d.ts.map +1 -0
  174. package/packages/pi/dist/session.js +394 -0
  175. package/packages/pi/dist/session.js.map +1 -0
  176. package/packages/pi/dist/shortcuts.d.ts +11 -0
  177. package/packages/pi/dist/shortcuts.d.ts.map +1 -0
  178. package/packages/pi/dist/shortcuts.js +231 -0
  179. package/packages/pi/dist/shortcuts.js.map +1 -0
  180. package/packages/pi/dist/startup-briefing.d.ts +13 -0
  181. package/packages/pi/dist/startup-briefing.d.ts.map +1 -0
  182. package/packages/pi/dist/startup-briefing.js +271 -0
  183. package/packages/pi/dist/startup-briefing.js.map +1 -0
  184. package/packages/pi/dist/stratus-bridge.d.ts +14 -0
  185. package/packages/pi/dist/stratus-bridge.d.ts.map +1 -0
  186. package/packages/pi/dist/stratus-bridge.js +104 -0
  187. package/packages/pi/dist/stratus-bridge.js.map +1 -0
  188. package/packages/pi/dist/subway-mesh.d.ts +88 -0
  189. package/packages/pi/dist/subway-mesh.d.ts.map +1 -0
  190. package/packages/pi/dist/subway-mesh.js +813 -0
  191. package/packages/pi/dist/subway-mesh.js.map +1 -0
  192. package/packages/pi/dist/synopsis-tool.d.ts +12 -0
  193. package/packages/pi/dist/synopsis-tool.d.ts.map +1 -0
  194. package/packages/pi/dist/synopsis-tool.js +84 -0
  195. package/packages/pi/dist/synopsis-tool.js.map +1 -0
  196. package/packages/pi/dist/tool-renderers.d.ts +55 -0
  197. package/packages/pi/dist/tool-renderers.d.ts.map +1 -0
  198. package/packages/pi/dist/tool-renderers.js +349 -0
  199. package/packages/pi/dist/tool-renderers.js.map +1 -0
  200. package/packages/pi/dist/training-buffer-tool.d.ts +16 -0
  201. package/packages/pi/dist/training-buffer-tool.d.ts.map +1 -0
  202. package/packages/pi/dist/training-buffer-tool.js +319 -0
  203. package/packages/pi/dist/training-buffer-tool.js.map +1 -0
  204. package/packages/pi/dist/types.d.ts +195 -0
  205. package/packages/pi/dist/types.d.ts.map +1 -0
  206. package/packages/pi/dist/types.js +11 -0
  207. package/packages/pi/dist/types.js.map +1 -0
  208. package/packages/pi/extensions/session.ts +115 -8
  209. package/packages/pi/extensions/training-buffer-tool.ts +15 -8
  210. package/packages/pi/extensions/types.ts +1 -0
  211. package/packages/pi/package.json +2 -3
  212. package/scripts/postinstall.js +52 -4
@@ -0,0 +1,43 @@
1
+ /**
2
+ * Agent Display Name Resolver
3
+ *
4
+ * Converts raw agent identifiers (file paths, kebab-case names, frontmatter names)
5
+ * into clean, human-readable display names for the TUI.
6
+ *
7
+ * @purpose Resolve ugly agent IDs to pretty display names across all TUI surfaces
8
+ */
9
+ export interface AgentInfo {
10
+ id: string;
11
+ displayName: string;
12
+ type: "service" | "peer" | "skill" | "custom";
13
+ color?: string;
14
+ description?: string;
15
+ serviceName?: string;
16
+ }
17
+ export declare function initAgentNames(root: string): void;
18
+ /**
19
+ * Resolve any raw agent identifier to a clean display name.
20
+ *
21
+ * Handles:
22
+ * .claude/agents/service-stratus-api.md → Stratus API
23
+ * service-stratus-api → Stratus API
24
+ * peer-service-context-hub → Context Hub
25
+ * stratus-api.md → Stratus API
26
+ * web-architect → Web Architect
27
+ */
28
+ export declare function resolveDisplayName(raw: string): string;
29
+ /**
30
+ * Resolve to full agent info (name, type, color, description).
31
+ */
32
+ export declare function resolveAgentInfo(raw: string): AgentInfo;
33
+ /**
34
+ * Get all known agents with display info.
35
+ */
36
+ export declare function listAgents(): AgentInfo[];
37
+ /**
38
+ * Format an agent name for TUI display with optional type badge.
39
+ */
40
+ export declare function formatAgentLabel(raw: string, opts?: {
41
+ badge?: boolean;
42
+ }): string;
43
+ //# sourceMappingURL=agent-names.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-names.d.ts","sourceRoot":"","sources":["../extensions/agent-names.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,WAAW,EAAE,MAAM,CAAA;IACnB,IAAI,EAAE,SAAS,GAAG,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAA;IAC7C,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,WAAW,CAAC,EAAE,MAAM,CAAA;CACrB;AAKD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAIjD;AA8ED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAYtD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CAiBvD;AAED;;GAEG;AACH,wBAAgB,UAAU,IAAI,SAAS,EAAE,CAGxC;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,OAAO,CAAA;CAAE,GAAG,MAAM,CAchF"}
@@ -0,0 +1,156 @@
1
+ /**
2
+ * Agent Display Name Resolver
3
+ *
4
+ * Converts raw agent identifiers (file paths, kebab-case names, frontmatter names)
5
+ * into clean, human-readable display names for the TUI.
6
+ *
7
+ * @purpose Resolve ugly agent IDs to pretty display names across all TUI surfaces
8
+ */
9
+ import { existsSync, readFileSync, readdirSync } from "fs";
10
+ import { join } from "path";
11
+ const displayNameCache = new Map();
12
+ let projectRoot = "";
13
+ export function initAgentNames(root) {
14
+ projectRoot = root;
15
+ displayNameCache.clear();
16
+ scanAgentFiles(root);
17
+ }
18
+ function scanAgentFiles(root) {
19
+ const agentsDir = join(root, ".claude", "agents");
20
+ if (!existsSync(agentsDir))
21
+ return;
22
+ for (const file of readdirSync(agentsDir)) {
23
+ if (!file.endsWith(".md") || file.startsWith("_") || file === "README.md")
24
+ continue;
25
+ const filePath = join(agentsDir, file);
26
+ try {
27
+ const content = readFileSync(filePath, "utf-8");
28
+ const info = parseAgentFile(file, content);
29
+ if (info)
30
+ displayNameCache.set(info.id, info);
31
+ }
32
+ catch { }
33
+ }
34
+ }
35
+ function parseAgentFile(filename, content) {
36
+ const id = filename.replace(/\.md$/, "");
37
+ const frontmatter = parseFrontmatter(content);
38
+ const fmName = frontmatter.name ?? id;
39
+ const color = frontmatter.color;
40
+ const description = frontmatter.description;
41
+ const type = detectAgentType(id, frontmatter);
42
+ const serviceName = extractServiceName(id);
43
+ const displayName = frontmatter.label
44
+ ?? frontmatter.display_name
45
+ ?? buildDisplayName(id, type);
46
+ return { id, displayName, type, color, description, serviceName };
47
+ }
48
+ function parseFrontmatter(content) {
49
+ const match = content.match(/^---\n([\s\S]*?)\n---/);
50
+ if (!match)
51
+ return {};
52
+ const result = {};
53
+ for (const line of match[1].split("\n")) {
54
+ const kv = line.match(/^(\w[\w_-]*)\s*:\s*(.+)/);
55
+ if (kv)
56
+ result[kv[1]] = kv[2].trim();
57
+ }
58
+ return result;
59
+ }
60
+ function detectAgentType(id, fm) {
61
+ if (fm.type === "peer-service" || id.startsWith("peer-service-") || id.startsWith("peer-"))
62
+ return "peer";
63
+ if (id.startsWith("service-") || fm.type === "service")
64
+ return "service";
65
+ const skillNames = ["web-architect", "content-creator", "brand-architect"];
66
+ if (skillNames.includes(id))
67
+ return "skill";
68
+ return "custom";
69
+ }
70
+ function extractServiceName(id) {
71
+ return id
72
+ .replace(/^service-/, "")
73
+ .replace(/^peer-service-/, "")
74
+ .replace(/^peer-/, "");
75
+ }
76
+ function buildDisplayName(id, type) {
77
+ const clean = extractServiceName(id);
78
+ const titled = kebabToTitle(clean);
79
+ if (type === "peer")
80
+ return titled;
81
+ return titled;
82
+ }
83
+ const ACRONYMS = new Set(["api", "ui", "cli", "db", "ml", "ai", "ci", "cd", "io", "id", "url", "uri", "sdk", "rl", "mcp", "gtm", "crm", "cms", "cdn", "dns", "tcp", "udp", "ssh", "tls", "ssl", "jwt", "aws", "gcp"]);
84
+ function kebabToTitle(str) {
85
+ return str
86
+ .split("-")
87
+ .map(word => ACRONYMS.has(word.toLowerCase()) ? word.toUpperCase() : word.charAt(0).toUpperCase() + word.slice(1))
88
+ .join(" ");
89
+ }
90
+ /**
91
+ * Resolve any raw agent identifier to a clean display name.
92
+ *
93
+ * Handles:
94
+ * .claude/agents/service-stratus-api.md → Stratus API
95
+ * service-stratus-api → Stratus API
96
+ * peer-service-context-hub → Context Hub
97
+ * stratus-api.md → Stratus API
98
+ * web-architect → Web Architect
99
+ */
100
+ export function resolveDisplayName(raw) {
101
+ const id = raw
102
+ .replace(/^@/, "")
103
+ .replace(/^\.?claude\/agents\//, "")
104
+ .replace(/\.md$/, "")
105
+ .replace(/^.*\//, "");
106
+ const cached = displayNameCache.get(id);
107
+ if (cached)
108
+ return cached.displayName;
109
+ const type = detectAgentType(id, {});
110
+ return buildDisplayName(id, type);
111
+ }
112
+ /**
113
+ * Resolve to full agent info (name, type, color, description).
114
+ */
115
+ export function resolveAgentInfo(raw) {
116
+ const id = raw
117
+ .replace(/^@/, "")
118
+ .replace(/^\.?claude\/agents\//, "")
119
+ .replace(/\.md$/, "")
120
+ .replace(/^.*\//, "");
121
+ const cached = displayNameCache.get(id);
122
+ if (cached)
123
+ return cached;
124
+ const type = detectAgentType(id, {});
125
+ return {
126
+ id,
127
+ displayName: buildDisplayName(id, type),
128
+ type,
129
+ serviceName: extractServiceName(id),
130
+ };
131
+ }
132
+ /**
133
+ * Get all known agents with display info.
134
+ */
135
+ export function listAgents() {
136
+ if (displayNameCache.size === 0 && projectRoot)
137
+ scanAgentFiles(projectRoot);
138
+ return Array.from(displayNameCache.values());
139
+ }
140
+ /**
141
+ * Format an agent name for TUI display with optional type badge.
142
+ */
143
+ export function formatAgentLabel(raw, opts) {
144
+ const info = resolveAgentInfo(raw);
145
+ if (!opts?.badge)
146
+ return info.displayName;
147
+ const badges = {
148
+ service: "svc",
149
+ peer: "peer",
150
+ skill: "skill",
151
+ custom: "",
152
+ };
153
+ const badge = badges[info.type];
154
+ return badge ? `${info.displayName} [${badge}]` : info.displayName;
155
+ }
156
+ //# sourceMappingURL=agent-names.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-names.js","sourceRoot":"","sources":["../extensions/agent-names.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Autoresearch Extension
3
+ *
4
+ * Self-driving research loop as a Pi command. Runs N rounds of:
5
+ * branch → propose experiment → execute → eval → keep or revert
6
+ * Only the winning experiment gets a PR.
7
+ *
8
+ * Uses the policy head to rank proposals when available, falls back to
9
+ * heuristic dimension analysis when not.
10
+ *
11
+ * @purpose Pi command for autonomous experiment loop — /autoresearch
12
+ */
13
+ import type { PiContext, JflConfig } from "./types.js";
14
+ export declare function setupAutoresearch(ctx: PiContext, _config: JflConfig): Promise<void>;
15
+ //# sourceMappingURL=autoresearch.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoresearch.d.ts","sourceRoot":"","sources":["../extensions/autoresearch.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAKH,OAAO,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAkLtD,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,CAyOzF"}
@@ -0,0 +1,372 @@
1
+ /**
2
+ * Autoresearch Extension
3
+ *
4
+ * Self-driving research loop as a Pi command. Runs N rounds of:
5
+ * branch → propose experiment → execute → eval → keep or revert
6
+ * Only the winning experiment gets a PR.
7
+ *
8
+ * Uses the policy head to rank proposals when available, falls back to
9
+ * heuristic dimension analysis when not.
10
+ *
11
+ * @purpose Pi command for autonomous experiment loop — /autoresearch
12
+ */
13
+ import { execSync, spawnSync } from "child_process";
14
+ import { existsSync, readFileSync, mkdirSync, appendFileSync } from "fs";
15
+ import { join } from "path";
16
+ import { jflImport } from "./jfl-resolve.js";
17
+ import { emitCustomEvent } from "./map-bridge.js";
18
+ let projectRoot = "";
19
+ function git(args) {
20
+ try {
21
+ const out = execSync(`git ${args.join(" ")}`, {
22
+ cwd: projectRoot,
23
+ encoding: "utf-8",
24
+ stdio: ["pipe", "pipe", "pipe"],
25
+ }).trim();
26
+ return { ok: true, output: out };
27
+ }
28
+ catch (err) {
29
+ return { ok: false, output: err.stderr?.trim() || err.message };
30
+ }
31
+ }
32
+ function gh(args) {
33
+ try {
34
+ const out = execSync(`gh ${args.join(" ")}`, {
35
+ cwd: projectRoot,
36
+ encoding: "utf-8",
37
+ stdio: ["pipe", "pipe", "pipe"],
38
+ }).trim();
39
+ return { ok: true, output: out };
40
+ }
41
+ catch (err) {
42
+ return { ok: false, output: err.stderr?.trim() || err.message };
43
+ }
44
+ }
45
+ async function getPolicyHead() {
46
+ try {
47
+ // @ts-ignore — resolved from jfl package at runtime
48
+ const { PolicyHeadInference } = await jflImport("policy-head");
49
+ return new PolicyHeadInference(projectRoot);
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ async function getTrainingBuffer() {
56
+ try {
57
+ // @ts-ignore — resolved from jfl package at runtime
58
+ const { TrainingBuffer } = await jflImport("training-buffer");
59
+ return new TrainingBuffer(projectRoot);
60
+ }
61
+ catch {
62
+ return null;
63
+ }
64
+ }
65
+ function readEvalHistory() {
66
+ const evalPath = join(projectRoot, ".jfl", "eval", "eval.jsonl");
67
+ if (!existsSync(evalPath))
68
+ return [];
69
+ const entries = [];
70
+ for (const line of readFileSync(evalPath, "utf-8").split("\n")) {
71
+ if (!line.trim())
72
+ continue;
73
+ try {
74
+ entries.push(JSON.parse(line));
75
+ }
76
+ catch { }
77
+ }
78
+ return entries;
79
+ }
80
+ function readJournalEntries() {
81
+ const journalDir = join(projectRoot, ".jfl", "journal");
82
+ if (!existsSync(journalDir))
83
+ return [];
84
+ const entries = [];
85
+ try {
86
+ const { readdirSync } = require("fs");
87
+ for (const f of readdirSync(journalDir)) {
88
+ if (!f.endsWith(".jsonl"))
89
+ continue;
90
+ for (const line of readFileSync(join(journalDir, f), "utf-8").split("\n")) {
91
+ if (!line.trim())
92
+ continue;
93
+ try {
94
+ entries.push(JSON.parse(line));
95
+ }
96
+ catch { }
97
+ }
98
+ }
99
+ }
100
+ catch { }
101
+ return entries.sort((a, b) => (a.ts || "").localeCompare(b.ts || ""));
102
+ }
103
+ function writeJournalEntry(entry) {
104
+ const journalDir = join(projectRoot, ".jfl", "journal");
105
+ mkdirSync(journalDir, { recursive: true });
106
+ const branch = git(["branch", "--show-current"]).output || "main";
107
+ const file = join(journalDir, `${branch}.jsonl`);
108
+ appendFileSync(file, JSON.stringify(entry) + "\n");
109
+ }
110
+ function buildFallbackProposal(evals) {
111
+ if (evals.length < 2)
112
+ return null;
113
+ const sorted = [...evals].sort((a, b) => b.ts.localeCompare(a.ts));
114
+ const latest = sorted[0];
115
+ const prev = sorted[1];
116
+ const metrics = latest.metrics || {};
117
+ const prevMetrics = prev.metrics || {};
118
+ let worstDim = "";
119
+ let worstDelta = 0;
120
+ for (const [key, val] of Object.entries(metrics)) {
121
+ if (typeof val !== "number")
122
+ continue;
123
+ const prevVal = prevMetrics[key] ?? val;
124
+ const delta = val - prevVal;
125
+ if (delta < worstDelta) {
126
+ worstDelta = delta;
127
+ worstDim = key;
128
+ }
129
+ }
130
+ if (worstDim) {
131
+ return {
132
+ task: `Improve ${worstDim} score (regressed by ${worstDelta.toFixed(4)})`,
133
+ predicted_delta: Math.abs(worstDelta),
134
+ reasoning: `Recovering ${worstDim} regression`,
135
+ risk: "May not fully recover",
136
+ };
137
+ }
138
+ let lowestDim = "";
139
+ let lowestScore = Infinity;
140
+ for (const [key, val] of Object.entries(metrics)) {
141
+ if (typeof val !== "number")
142
+ continue;
143
+ if (val < lowestScore) {
144
+ lowestScore = val;
145
+ lowestDim = key;
146
+ }
147
+ }
148
+ if (lowestDim) {
149
+ return {
150
+ task: `Improve ${lowestDim} score (currently ${lowestScore.toFixed(4)})`,
151
+ predicted_delta: Math.max(0.01, (1 - lowestScore) * 0.1),
152
+ reasoning: `${lowestDim} is weakest dimension`,
153
+ risk: "May trade off against others",
154
+ };
155
+ }
156
+ return null;
157
+ }
158
+ function runTests() {
159
+ const result = spawnSync("npx", ["jest", "--json", "--silent"], {
160
+ cwd: projectRoot,
161
+ encoding: "utf-8",
162
+ stdio: "pipe",
163
+ timeout: 120000,
164
+ });
165
+ try {
166
+ const json = JSON.parse(result.stdout || "{}");
167
+ const passing = json.numPassedTests || 0;
168
+ const total = json.numTotalTests || 1;
169
+ return { passing, total, score: total > 0 ? passing / total : 0 };
170
+ }
171
+ catch {
172
+ return { passing: 0, total: 1, score: 0 };
173
+ }
174
+ }
175
+ export async function setupAutoresearch(ctx, _config) {
176
+ projectRoot = ctx.session.projectRoot;
177
+ ctx.registerCommand({
178
+ name: "autoresearch",
179
+ description: "Run autonomous experiment loop — branch, change, eval, keep or revert. Usage: /autoresearch [rounds]",
180
+ async handler(args, ctx) {
181
+ const rounds = parseInt(args.trim() || "3", 10);
182
+ if (rounds < 1 || rounds > 20) {
183
+ ctx.ui.notify("Rounds must be between 1 and 20.", { level: "warn" });
184
+ return;
185
+ }
186
+ ctx.ui.notify(`Starting autoresearch: ${rounds} rounds`, { level: "info" });
187
+ const evals = readEvalHistory();
188
+ if (evals.length === 0) {
189
+ ctx.ui.notify("No eval history. Run an eval first to establish a baseline.", { level: "warn" });
190
+ return;
191
+ }
192
+ const baseBranch = git(["branch", "--show-current"]).output || "main";
193
+ const baselineScore = [...evals].sort((a, b) => b.ts.localeCompare(a.ts))[0]?.composite ?? 0;
194
+ const pastTitles = readJournalEntries()
195
+ .filter(e => e.type === "experiment")
196
+ .map(e => e.title);
197
+ const results = [];
198
+ let bestResult = null;
199
+ git(["stash", "--include-untracked"]);
200
+ for (let round = 1; round <= rounds; round++) {
201
+ ctx.ui.notify(`── Round ${round}/${rounds} ──`, { level: "info" });
202
+ let proposal = null;
203
+ const policyHead = await getPolicyHead();
204
+ if (policyHead?.isLoaded) {
205
+ const fallback = buildFallbackProposal(evals);
206
+ if (fallback)
207
+ proposal = fallback;
208
+ }
209
+ if (!proposal) {
210
+ proposal = buildFallbackProposal(evals);
211
+ }
212
+ if (!proposal) {
213
+ ctx.ui.notify(`Round ${round}: No target found, skipping`, { level: "info" });
214
+ continue;
215
+ }
216
+ if (pastTitles.some(t => t.includes(proposal.task.slice(0, 40)))) {
217
+ proposal.task = `[Retry] ${proposal.task}`;
218
+ }
219
+ const branchName = `pp/autoresearch-r${round}-${Date.now()}`;
220
+ git(["fetch", "origin", baseBranch]);
221
+ let checkout = git(["checkout", "-b", branchName, `origin/${baseBranch}`]);
222
+ if (!checkout.ok) {
223
+ checkout = git(["checkout", "-b", branchName, baseBranch]);
224
+ }
225
+ if (!checkout.ok) {
226
+ ctx.ui.notify(`Round ${round}: Failed to create branch`, { level: "warn" });
227
+ continue;
228
+ }
229
+ ctx.ui.notify(`Task: ${proposal.task}`, { level: "info" });
230
+ await emitCustomEvent(ctx, "autoresearch:round:start", {
231
+ round,
232
+ task: proposal.task,
233
+ predicted_delta: proposal.predicted_delta,
234
+ });
235
+ // The agent itself will make changes via the sendUserMessage approach
236
+ // For now, we run tests on whatever's been committed
237
+ const diffCheck = git(["diff", "--quiet", "HEAD"]);
238
+ const untrackedResult = spawnSync("git", ["ls-files", "--others", "--exclude-standard"], {
239
+ cwd: projectRoot, encoding: "utf-8", stdio: "pipe",
240
+ });
241
+ const hasChanges = !diffCheck.ok || (untrackedResult.stdout || "").trim().length > 0;
242
+ if (hasChanges) {
243
+ git(["add", "-A"]);
244
+ git(["commit", "-m", `autoresearch: round ${round} - ${proposal.task}`]);
245
+ }
246
+ const { passing, total, score } = runTests();
247
+ const delta = score - baselineScore;
248
+ const result = {
249
+ round,
250
+ task: proposal.task,
251
+ score,
252
+ delta,
253
+ testsPassing: passing,
254
+ testsTotal: total,
255
+ branch: branchName,
256
+ };
257
+ results.push(result);
258
+ if (!bestResult || result.score > bestResult.score) {
259
+ bestResult = result;
260
+ }
261
+ writeJournalEntry({
262
+ v: 1,
263
+ ts: new Date().toISOString(),
264
+ session: "autoresearch",
265
+ type: "experiment",
266
+ status: delta > 0 ? "complete" : "incomplete",
267
+ title: `Autoresearch R${round}: ${proposal.task.slice(0, 60)}`,
268
+ summary: `Score: ${score.toFixed(4)}, delta: ${delta > 0 ? "+" : ""}${delta.toFixed(4)}`,
269
+ agent_id: "pi-autoresearch",
270
+ });
271
+ const tb = await getTrainingBuffer();
272
+ if (tb) {
273
+ tb.append({
274
+ agent: "pi-autoresearch",
275
+ state: {
276
+ composite_score: baselineScore,
277
+ dimension_scores: {},
278
+ tests_passing: 0,
279
+ tests_total: 0,
280
+ trajectory_length: results.length,
281
+ recent_deltas: results.slice(-5).map(r => r.delta),
282
+ agent: "pi-autoresearch",
283
+ },
284
+ action: {
285
+ type: "experiment",
286
+ description: proposal.task,
287
+ files_affected: [],
288
+ scope: "medium",
289
+ branch: branchName,
290
+ },
291
+ reward: {
292
+ composite_delta: delta,
293
+ dimension_deltas: {},
294
+ tests_added: 0,
295
+ quality_score: score,
296
+ improved: delta > 0,
297
+ prediction_error: Math.abs(proposal.predicted_delta - delta),
298
+ },
299
+ metadata: {
300
+ branch: branchName,
301
+ autoresearch_round: round,
302
+ source: "autoresearch",
303
+ },
304
+ });
305
+ }
306
+ await emitCustomEvent(ctx, "autoresearch:round:end", {
307
+ round,
308
+ task: proposal.task,
309
+ score,
310
+ delta,
311
+ is_best: bestResult?.round === round,
312
+ });
313
+ const sign = delta > 0 ? "+" : "";
314
+ ctx.ui.notify(`Round ${round}: ${score.toFixed(4)} (${sign}${delta.toFixed(4)}) — ${proposal.task.slice(0, 50)}`, { level: delta > 0 ? "info" : "warn" });
315
+ git(["checkout", baseBranch]);
316
+ }
317
+ // Summary
318
+ const summaryLines = [
319
+ `Autoresearch complete: ${rounds} rounds`,
320
+ "",
321
+ ];
322
+ for (const r of results) {
323
+ const sign = r.delta >= 0 ? "+" : "";
324
+ const star = bestResult && r.round === bestResult.round ? " ★" : "";
325
+ summaryLines.push(` R${r.round}: ${r.score.toFixed(4)} (${sign}${r.delta.toFixed(4)}) ${r.task.slice(0, 50)}${star}`);
326
+ }
327
+ if (bestResult && bestResult.delta > 0) {
328
+ summaryLines.push("", `Winner: Round ${bestResult.round} (+${bestResult.delta.toFixed(4)})`);
329
+ git(["checkout", bestResult.branch]);
330
+ const pushResult = git(["push", "-u", "origin", bestResult.branch]);
331
+ if (pushResult.ok) {
332
+ const prTitle = `Autoresearch: ${bestResult.task.slice(0, 50)} (+${bestResult.delta.toFixed(4)})`;
333
+ const prBody = [
334
+ "## Autoresearch Winner",
335
+ "",
336
+ `**Task:** ${bestResult.task}`,
337
+ `**Score:** ${bestResult.score.toFixed(4)} (delta: +${bestResult.delta.toFixed(4)})`,
338
+ `**Tests:** ${bestResult.testsPassing}/${bestResult.testsTotal}`,
339
+ `**Round:** ${bestResult.round}/${rounds}`,
340
+ ].join("\n");
341
+ const prResult = gh([
342
+ "pr", "create", "--title", prTitle, "--body", prBody,
343
+ "--base", baseBranch, "--head", bestResult.branch,
344
+ ]);
345
+ if (prResult.ok) {
346
+ summaryLines.push(`PR created: ${prResult.output}`);
347
+ await emitCustomEvent(ctx, "autoresearch:complete", {
348
+ rounds,
349
+ winner_round: bestResult.round,
350
+ winner_task: bestResult.task,
351
+ winner_delta: bestResult.delta,
352
+ pr_url: prResult.output,
353
+ });
354
+ }
355
+ }
356
+ git(["checkout", baseBranch]);
357
+ }
358
+ else {
359
+ summaryLines.push("", "No improvement found across all rounds.");
360
+ }
361
+ // Cleanup non-winning branches
362
+ for (const r of results) {
363
+ if (!bestResult || r.round !== bestResult.round) {
364
+ git(["branch", "-D", r.branch]);
365
+ }
366
+ }
367
+ git(["stash", "pop"]);
368
+ ctx.ui.notify(summaryLines.join("\n"), { level: "info" });
369
+ },
370
+ });
371
+ }
372
+ //# sourceMappingURL=autoresearch.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autoresearch.js","sourceRoot":"","sources":["../extensions/autoresearch.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * Bookmarks Extension
3
+ *
4
+ * Registers /bookmark and /unbookmark for marking key decisions,
5
+ * milestones, and important moments in the session tree.
6
+ * Labels show up in Pi's /tree navigation for easy jumping.
7
+ *
8
+ * Also auto-bookmarks when journal entries of type "decision" or
9
+ * "milestone" are written.
10
+ *
11
+ * @purpose Session tree bookmarks for key JFL moments
12
+ */
13
+ import type { PiContext } from "./types.js";
14
+ export declare function setupBookmarks(ctx: PiContext): void;
15
+ //# sourceMappingURL=bookmarks.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bookmarks.d.ts","sourceRoot":"","sources":["../extensions/bookmarks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAI3C,wBAAgB,cAAc,CAAC,GAAG,EAAE,SAAS,GAAG,IAAI,CAmEnD"}