jfl 0.8.1 → 0.9.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.
Files changed (247) hide show
  1. package/dist/commands/doctor.d.ts +1 -0
  2. package/dist/commands/doctor.d.ts.map +1 -1
  3. package/dist/commands/doctor.js +30 -1
  4. package/dist/commands/doctor.js.map +1 -1
  5. package/dist/commands/ide.d.ts +2 -1
  6. package/dist/commands/ide.d.ts.map +1 -1
  7. package/dist/commands/ide.js +60 -1
  8. package/dist/commands/ide.js.map +1 -1
  9. package/dist/commands/init-from-service.d.ts +15 -0
  10. package/dist/commands/init-from-service.d.ts.map +1 -0
  11. package/dist/commands/init-from-service.js +541 -0
  12. package/dist/commands/init-from-service.js.map +1 -0
  13. package/dist/commands/init.d.ts +1 -0
  14. package/dist/commands/init.d.ts.map +1 -1
  15. package/dist/commands/init.js +32 -1
  16. package/dist/commands/init.js.map +1 -1
  17. package/dist/commands/kanban.d.ts.map +1 -1
  18. package/dist/commands/kanban.js +13 -4
  19. package/dist/commands/kanban.js.map +1 -1
  20. package/dist/commands/linear.d.ts +41 -0
  21. package/dist/commands/linear.d.ts.map +1 -0
  22. package/dist/commands/linear.js +715 -0
  23. package/dist/commands/linear.js.map +1 -0
  24. package/dist/commands/peter.d.ts.map +1 -1
  25. package/dist/commands/peter.js +232 -25
  26. package/dist/commands/peter.js.map +1 -1
  27. package/dist/commands/services.d.ts.map +1 -1
  28. package/dist/commands/services.js +146 -0
  29. package/dist/commands/services.js.map +1 -1
  30. package/dist/commands/setup.d.ts.map +1 -1
  31. package/dist/commands/setup.js +173 -13
  32. package/dist/commands/setup.js.map +1 -1
  33. package/dist/commands/telemetry-monitor.d.ts +11 -0
  34. package/dist/commands/telemetry-monitor.d.ts.map +1 -0
  35. package/dist/commands/telemetry-monitor.js +224 -0
  36. package/dist/commands/telemetry-monitor.js.map +1 -0
  37. package/dist/commands/telemetry-test.d.ts +11 -0
  38. package/dist/commands/telemetry-test.d.ts.map +1 -0
  39. package/dist/commands/telemetry-test.js +67 -0
  40. package/dist/commands/telemetry-test.js.map +1 -0
  41. package/dist/commands/tenet-agents.d.ts +13 -0
  42. package/dist/commands/tenet-agents.d.ts.map +1 -0
  43. package/dist/commands/tenet-agents.js +191 -0
  44. package/dist/commands/tenet-agents.js.map +1 -0
  45. package/dist/commands/tenet-setup.d.ts +19 -0
  46. package/dist/commands/tenet-setup.d.ts.map +1 -0
  47. package/dist/commands/tenet-setup.js +131 -0
  48. package/dist/commands/tenet-setup.js.map +1 -0
  49. package/dist/commands/train.d.ts +18 -0
  50. package/dist/commands/train.d.ts.map +1 -1
  51. package/dist/commands/train.js +182 -0
  52. package/dist/commands/train.js.map +1 -1
  53. package/dist/commands/whoami.d.ts +2 -0
  54. package/dist/commands/whoami.d.ts.map +1 -0
  55. package/dist/commands/whoami.js +24 -0
  56. package/dist/commands/whoami.js.map +1 -0
  57. package/dist/index.js +159 -10
  58. package/dist/index.js.map +1 -1
  59. package/dist/lib/advanced-setup.d.ts +78 -0
  60. package/dist/lib/advanced-setup.d.ts.map +1 -0
  61. package/dist/lib/advanced-setup.js +433 -0
  62. package/dist/lib/advanced-setup.js.map +1 -0
  63. package/dist/lib/agent-config.d.ts +33 -0
  64. package/dist/lib/agent-config.d.ts.map +1 -1
  65. package/dist/lib/agent-config.js +26 -0
  66. package/dist/lib/agent-config.js.map +1 -1
  67. package/dist/lib/counterfactual-training-bridge.d.ts +114 -0
  68. package/dist/lib/counterfactual-training-bridge.d.ts.map +1 -0
  69. package/dist/lib/counterfactual-training-bridge.js +322 -0
  70. package/dist/lib/counterfactual-training-bridge.js.map +1 -0
  71. package/dist/lib/discovery-agent.d.ts +48 -0
  72. package/dist/lib/discovery-agent.d.ts.map +1 -0
  73. package/dist/lib/discovery-agent.js +111 -0
  74. package/dist/lib/discovery-agent.js.map +1 -0
  75. package/dist/lib/flow-engine.d.ts.map +1 -1
  76. package/dist/lib/flow-engine.js +46 -8
  77. package/dist/lib/flow-engine.js.map +1 -1
  78. package/dist/lib/gtm-generator.d.ts +29 -0
  79. package/dist/lib/gtm-generator.d.ts.map +1 -0
  80. package/dist/lib/gtm-generator.js +252 -0
  81. package/dist/lib/gtm-generator.js.map +1 -0
  82. package/dist/lib/hub-health.d.ts +40 -0
  83. package/dist/lib/hub-health.d.ts.map +1 -0
  84. package/dist/lib/hub-health.js +89 -0
  85. package/dist/lib/hub-health.js.map +1 -0
  86. package/dist/lib/invariant-monitor.d.ts +6 -2
  87. package/dist/lib/invariant-monitor.d.ts.map +1 -1
  88. package/dist/lib/invariant-monitor.js +89 -2
  89. package/dist/lib/invariant-monitor.js.map +1 -1
  90. package/dist/lib/journal-analyzer.d.ts +71 -0
  91. package/dist/lib/journal-analyzer.d.ts.map +1 -0
  92. package/dist/lib/journal-analyzer.js +306 -0
  93. package/dist/lib/journal-analyzer.js.map +1 -0
  94. package/dist/lib/linear-client.d.ts +73 -0
  95. package/dist/lib/linear-client.d.ts.map +1 -0
  96. package/dist/lib/linear-client.js +112 -0
  97. package/dist/lib/linear-client.js.map +1 -0
  98. package/dist/lib/linear-id-map.d.ts +20 -0
  99. package/dist/lib/linear-id-map.d.ts.map +1 -0
  100. package/dist/lib/linear-id-map.js +57 -0
  101. package/dist/lib/linear-id-map.js.map +1 -0
  102. package/dist/lib/linear-kanban.d.ts +66 -0
  103. package/dist/lib/linear-kanban.d.ts.map +1 -0
  104. package/dist/lib/linear-kanban.js +175 -0
  105. package/dist/lib/linear-kanban.js.map +1 -0
  106. package/dist/lib/onboarding.d.ts +40 -0
  107. package/dist/lib/onboarding.d.ts.map +1 -0
  108. package/dist/lib/onboarding.js +213 -0
  109. package/dist/lib/onboarding.js.map +1 -0
  110. package/dist/lib/physical-world-model.d.ts +50 -0
  111. package/dist/lib/physical-world-model.d.ts.map +1 -0
  112. package/dist/lib/physical-world-model.js +251 -0
  113. package/dist/lib/physical-world-model.js.map +1 -0
  114. package/dist/lib/planning-loop.d.ts +157 -0
  115. package/dist/lib/planning-loop.d.ts.map +1 -0
  116. package/dist/lib/planning-loop.js +537 -0
  117. package/dist/lib/planning-loop.js.map +1 -0
  118. package/dist/lib/policy-head.d.ts +13 -0
  119. package/dist/lib/policy-head.d.ts.map +1 -1
  120. package/dist/lib/policy-head.js +168 -2
  121. package/dist/lib/policy-head.js.map +1 -1
  122. package/dist/lib/resource-optimizer-middleware.d.ts +39 -0
  123. package/dist/lib/resource-optimizer-middleware.d.ts.map +1 -0
  124. package/dist/lib/resource-optimizer-middleware.js +222 -0
  125. package/dist/lib/resource-optimizer-middleware.js.map +1 -0
  126. package/dist/lib/resource-optimizer.d.ts +71 -0
  127. package/dist/lib/resource-optimizer.d.ts.map +1 -0
  128. package/dist/lib/resource-optimizer.js +228 -0
  129. package/dist/lib/resource-optimizer.js.map +1 -0
  130. package/dist/lib/rl-manager.d.ts +74 -0
  131. package/dist/lib/rl-manager.d.ts.map +1 -0
  132. package/dist/lib/rl-manager.js +244 -0
  133. package/dist/lib/rl-manager.js.map +1 -0
  134. package/dist/lib/service-analyzer.d.ts +76 -0
  135. package/dist/lib/service-analyzer.d.ts.map +1 -0
  136. package/dist/lib/service-analyzer.js +704 -0
  137. package/dist/lib/service-analyzer.js.map +1 -0
  138. package/dist/lib/service-gtm.js +2 -2
  139. package/dist/lib/service-gtm.js.map +1 -1
  140. package/dist/lib/service-questionnaire.d.ts +11 -0
  141. package/dist/lib/service-questionnaire.d.ts.map +1 -0
  142. package/dist/lib/service-questionnaire.js +89 -0
  143. package/dist/lib/service-questionnaire.js.map +1 -0
  144. package/dist/lib/setup/agent-generator.d.ts +2 -0
  145. package/dist/lib/setup/agent-generator.d.ts.map +1 -1
  146. package/dist/lib/setup/agent-generator.js +128 -4
  147. package/dist/lib/setup/agent-generator.js.map +1 -1
  148. package/dist/lib/setup/flow-generator.d.ts +10 -0
  149. package/dist/lib/setup/flow-generator.d.ts.map +1 -0
  150. package/dist/lib/setup/flow-generator.js +113 -0
  151. package/dist/lib/setup/flow-generator.js.map +1 -0
  152. package/dist/lib/setup/invariant-bridge.d.ts +91 -0
  153. package/dist/lib/setup/invariant-bridge.d.ts.map +1 -0
  154. package/dist/lib/setup/invariant-bridge.js +384 -0
  155. package/dist/lib/setup/invariant-bridge.js.map +1 -0
  156. package/dist/lib/setup/spec-generator.d.ts +41 -5
  157. package/dist/lib/setup/spec-generator.d.ts.map +1 -1
  158. package/dist/lib/setup/spec-generator.js +503 -29
  159. package/dist/lib/setup/spec-generator.js.map +1 -1
  160. package/dist/lib/stratus-client.js +1 -1
  161. package/dist/lib/stratus-client.js.map +1 -1
  162. package/dist/lib/surface-agent.d.ts +78 -0
  163. package/dist/lib/surface-agent.d.ts.map +1 -0
  164. package/dist/lib/surface-agent.js +105 -0
  165. package/dist/lib/surface-agent.js.map +1 -0
  166. package/dist/lib/surface-coordination-example.d.ts +30 -0
  167. package/dist/lib/surface-coordination-example.d.ts.map +1 -0
  168. package/dist/lib/surface-coordination-example.js +164 -0
  169. package/dist/lib/surface-coordination-example.js.map +1 -0
  170. package/dist/lib/telemetry/physical-world-collector.d.ts +15 -0
  171. package/dist/lib/telemetry/physical-world-collector.d.ts.map +1 -0
  172. package/dist/lib/telemetry/physical-world-collector.js +177 -0
  173. package/dist/lib/telemetry/physical-world-collector.js.map +1 -0
  174. package/dist/lib/telemetry/training-bridge.d.ts +51 -0
  175. package/dist/lib/telemetry/training-bridge.d.ts.map +1 -0
  176. package/dist/lib/telemetry/training-bridge.js +185 -0
  177. package/dist/lib/telemetry/training-bridge.js.map +1 -0
  178. package/dist/lib/telemetry.d.ts +2 -1
  179. package/dist/lib/telemetry.d.ts.map +1 -1
  180. package/dist/lib/telemetry.js +23 -2
  181. package/dist/lib/telemetry.js.map +1 -1
  182. package/dist/lib/tenet-board-agent.d.ts +52 -0
  183. package/dist/lib/tenet-board-agent.d.ts.map +1 -0
  184. package/dist/lib/tenet-board-agent.js +226 -0
  185. package/dist/lib/tenet-board-agent.js.map +1 -0
  186. package/dist/lib/tenet-ide-agent.d.ts +40 -0
  187. package/dist/lib/tenet-ide-agent.d.ts.map +1 -0
  188. package/dist/lib/tenet-ide-agent.js +199 -0
  189. package/dist/lib/tenet-ide-agent.js.map +1 -0
  190. package/dist/lib/workspace/data-pipeline.d.ts.map +1 -1
  191. package/dist/lib/workspace/data-pipeline.js +27 -5
  192. package/dist/lib/workspace/data-pipeline.js.map +1 -1
  193. package/dist/lib/workspace/sidebar-runner.d.ts +13 -0
  194. package/dist/lib/workspace/sidebar-runner.d.ts.map +1 -0
  195. package/dist/lib/workspace/sidebar-runner.js +419 -0
  196. package/dist/lib/workspace/sidebar-runner.js.map +1 -0
  197. package/dist/lib/workspace/surface-registry.d.ts.map +1 -1
  198. package/dist/lib/workspace/surface-registry.js +4 -1
  199. package/dist/lib/workspace/surface-registry.js.map +1 -1
  200. package/dist/lib/workspace/surfaces/agent-overview.d.ts +3 -3
  201. package/dist/lib/workspace/surfaces/agent-overview.d.ts.map +1 -1
  202. package/dist/lib/workspace/surfaces/agent-overview.js +3 -3
  203. package/dist/lib/workspace/surfaces/agent-overview.js.map +1 -1
  204. package/dist/lib/workspace/surfaces/index.d.ts +3 -0
  205. package/dist/lib/workspace/surfaces/index.d.ts.map +1 -1
  206. package/dist/lib/workspace/surfaces/index.js +3 -0
  207. package/dist/lib/workspace/surfaces/index.js.map +1 -1
  208. package/dist/lib/workspace/surfaces/kanban.d.ts +15 -0
  209. package/dist/lib/workspace/surfaces/kanban.d.ts.map +1 -0
  210. package/dist/lib/workspace/surfaces/kanban.js +43 -0
  211. package/dist/lib/workspace/surfaces/kanban.js.map +1 -0
  212. package/dist/lib/workspace/surfaces/physical-world.d.ts +15 -0
  213. package/dist/lib/workspace/surfaces/physical-world.d.ts.map +1 -0
  214. package/dist/lib/workspace/surfaces/physical-world.js +37 -0
  215. package/dist/lib/workspace/surfaces/physical-world.js.map +1 -0
  216. package/dist/lib/workspace/surfaces/sidebar.d.ts +22 -0
  217. package/dist/lib/workspace/surfaces/sidebar.d.ts.map +1 -0
  218. package/dist/lib/workspace/surfaces/sidebar.js +90 -0
  219. package/dist/lib/workspace/surfaces/sidebar.js.map +1 -0
  220. package/dist/types/flows.d.ts +2 -1
  221. package/dist/types/flows.d.ts.map +1 -1
  222. package/dist/types/physical-world-model.d.ts +65 -0
  223. package/dist/types/physical-world-model.d.ts.map +1 -0
  224. package/dist/types/physical-world-model.js +43 -0
  225. package/dist/types/physical-world-model.js.map +1 -0
  226. package/dist/types/telemetry.d.ts +37 -0
  227. package/dist/types/telemetry.d.ts.map +1 -1
  228. package/dist/types/world-model.d.ts.map +1 -1
  229. package/dist/types/world-model.js +14 -7
  230. package/dist/types/world-model.js.map +1 -1
  231. package/dist/utils/context-hub-port.d.ts.map +1 -1
  232. package/dist/utils/context-hub-port.js +6 -1
  233. package/dist/utils/context-hub-port.js.map +1 -1
  234. package/package.json +3 -2
  235. package/packages/pi/extensions/index.ts +34 -6
  236. package/scripts/telemetry-dashboard.sh +44 -0
  237. package/scripts/test-planning-loop-e2e.ts +181 -0
  238. package/scripts/test-server-inference.ts +49 -0
  239. package/scripts/test-state-sensitivity.ts +32 -0
  240. package/scripts/train/v2/benchmark.py +661 -0
  241. package/scripts/train/v2/generate_balanced.py +439 -0
  242. package/scripts/train/v2/generate_hard_negatives.py +219 -0
  243. package/scripts/train/v2/infer.py +149 -36
  244. package/scripts/train/v2/infer_server.py +224 -0
  245. package/scripts/train/v2/online_train.py +576 -0
  246. package/scripts/train/v2/precompute.py +24 -6
  247. package/template/CLAUDE.md +74 -132
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Linear ↔ Kanban Normalizers
3
+ *
4
+ * Converts between Linear issues, TenetCards, and GitHub issue inputs.
5
+ * TenetCard is the common intermediate representation.
6
+ *
7
+ * State mapping:
8
+ * Linear backlog/unstarted → jfl/backlog
9
+ * Linear started → jfl/in-progress (or jfl/eval if "review" in name)
10
+ * Linear completed → jfl/done
11
+ *
12
+ * @purpose Normalize Linear issues ↔ TenetCard ↔ GitHub Issues
13
+ */
14
+ import type { LinearIssue, LinearState, CreateIssueInput } from "./linear-client.js";
15
+ import type { KanbanCard, Column } from "./kanban-github.js";
16
+ export type { Column };
17
+ export interface TenetCard {
18
+ id: string;
19
+ linearId?: string;
20
+ githubNumber?: number;
21
+ title: string;
22
+ description: string;
23
+ status: Column;
24
+ priority: number;
25
+ assignee?: string;
26
+ labels: string[];
27
+ source: "human" | "agent" | "ci" | "flow" | "linear";
28
+ links: {
29
+ pr?: number;
30
+ pr_url?: string;
31
+ eval?: string;
32
+ journal?: string;
33
+ linear_url?: string;
34
+ };
35
+ }
36
+ export declare function linearStateToColumn(state: LinearState): Column;
37
+ export declare function linearPriorityToJfl(priority: number): number;
38
+ export declare function jflPriorityToLinear(priority: number): number;
39
+ /**
40
+ * Find the best matching Linear state ID for a given jfl column.
41
+ * Searches the team's workflow states.
42
+ */
43
+ export declare function findLinearStateId(states: LinearState[], column: Column): string | undefined;
44
+ /**
45
+ * Convert a Linear issue to a TenetCard
46
+ */
47
+ export declare function linearToTenet(issue: LinearIssue): TenetCard;
48
+ /**
49
+ * Convert a KanbanCard (from kanban-github.ts) to a TenetCard
50
+ */
51
+ export declare function kanbanToTenet(card: KanbanCard): TenetCard;
52
+ /**
53
+ * Convert a TenetCard to Linear issue creation input.
54
+ * Requires states from the team to map column → stateId.
55
+ */
56
+ export declare function tenetToLinearCreate(card: TenetCard, teamId: string, projectId: string, states: LinearState[]): CreateIssueInput;
57
+ /**
58
+ * Build GitHub issue body for a TenetCard synced from Linear
59
+ */
60
+ export declare function tenetToGitHubBody(card: TenetCard): string;
61
+ /**
62
+ * Get GitHub labels for a TenetCard.
63
+ * Pass scope to add scope:service-name label (for centralized kanban layout).
64
+ */
65
+ export declare function tenetToGitHubLabels(card: TenetCard, scope?: string): string[];
66
+ //# sourceMappingURL=linear-kanban.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-kanban.d.ts","sourceRoot":"","sources":["../../src/lib/linear-kanban.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,oBAAoB,CAAA;AACpF,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAE5D,YAAY,EAAE,MAAM,EAAE,CAAA;AAGtB,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,KAAK,EAAE,MAAM,CAAA;IACb,WAAW,EAAE,MAAM,CAAA;IACnB,MAAM,EAAE,MAAM,CAAA;IACd,QAAQ,EAAE,MAAM,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,MAAM,EAAE,MAAM,EAAE,CAAA;IAChB,MAAM,EAAE,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,MAAM,GAAG,QAAQ,CAAA;IACpD,KAAK,EAAE;QACL,EAAE,CAAC,EAAE,MAAM,CAAA;QACX,MAAM,CAAC,EAAE,MAAM,CAAA;QACf,IAAI,CAAC,EAAE,MAAM,CAAA;QACb,OAAO,CAAC,EAAE,MAAM,CAAA;QAChB,UAAU,CAAC,EAAE,MAAM,CAAA;KACpB,CAAA;CACF;AAsBD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,WAAW,GAAG,MAAM,CAI9D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAGD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,CAM5D;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,WAAW,EAAE,EACrB,MAAM,EAAE,MAAM,GACb,MAAM,GAAG,SAAS,CAoBpB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,CAgB3D;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,UAAU,GAAG,SAAS,CAmBzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CACjC,IAAI,EAAE,SAAS,EACf,MAAM,EAAE,MAAM,EACd,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,EAAE,GACpB,gBAAgB,CAUlB;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,SAAS,GAAG,MAAM,CAQzD;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAiB7E"}
@@ -0,0 +1,175 @@
1
+ /**
2
+ * Linear ↔ Kanban Normalizers
3
+ *
4
+ * Converts between Linear issues, TenetCards, and GitHub issue inputs.
5
+ * TenetCard is the common intermediate representation.
6
+ *
7
+ * State mapping:
8
+ * Linear backlog/unstarted → jfl/backlog
9
+ * Linear started → jfl/in-progress (or jfl/eval if "review" in name)
10
+ * Linear completed → jfl/done
11
+ *
12
+ * @purpose Normalize Linear issues ↔ TenetCard ↔ GitHub Issues
13
+ */
14
+ // State type → jfl column
15
+ const STATE_TYPE_MAP = {
16
+ triage: "backlog",
17
+ backlog: "backlog",
18
+ unstarted: "backlog",
19
+ started: "in_progress",
20
+ completed: "done",
21
+ cancelled: "done",
22
+ };
23
+ const EVAL_KEYWORDS = ["review", "testing", "qa", "eval", "in review"];
24
+ // jfl column → Linear state type to search for
25
+ const COLUMN_TO_STATE_TYPE = {
26
+ backlog: ["backlog", "unstarted"],
27
+ in_progress: ["started"],
28
+ eval: ["started"],
29
+ done: ["completed"],
30
+ };
31
+ export function linearStateToColumn(state) {
32
+ const nameLower = state.name.toLowerCase();
33
+ if (EVAL_KEYWORDS.some(kw => nameLower.includes(kw)))
34
+ return "eval";
35
+ return STATE_TYPE_MAP[state.type] ?? "backlog";
36
+ }
37
+ // Linear priority (1=urgent, 4=low) → jfl priority (higher=more urgent)
38
+ export function linearPriorityToJfl(priority) {
39
+ if (priority === 1)
40
+ return 9;
41
+ if (priority === 2)
42
+ return 6;
43
+ if (priority === 3)
44
+ return 3;
45
+ if (priority === 4)
46
+ return 2;
47
+ return 0;
48
+ }
49
+ // jfl priority → Linear priority
50
+ export function jflPriorityToLinear(priority) {
51
+ if (priority >= 9)
52
+ return 1;
53
+ if (priority >= 6)
54
+ return 2;
55
+ if (priority >= 3)
56
+ return 3;
57
+ if (priority >= 1)
58
+ return 4;
59
+ return 0;
60
+ }
61
+ /**
62
+ * Find the best matching Linear state ID for a given jfl column.
63
+ * Searches the team's workflow states.
64
+ */
65
+ export function findLinearStateId(states, column) {
66
+ const targetTypes = COLUMN_TO_STATE_TYPE[column];
67
+ const nameLower = (name) => name.toLowerCase();
68
+ if (column === "eval") {
69
+ // Look for a state with "review" in the name first
70
+ const evalState = states.find(s => s.type === "started" && EVAL_KEYWORDS.some(kw => nameLower(s.name).includes(kw)));
71
+ if (evalState)
72
+ return evalState.id;
73
+ // Fall back to any started state
74
+ return states.find(s => s.type === "started")?.id;
75
+ }
76
+ // Find state matching target types, sorted by position
77
+ const candidates = states
78
+ .filter(s => targetTypes.includes(s.type))
79
+ .sort((a, b) => a.position - b.position);
80
+ return candidates[0]?.id;
81
+ }
82
+ /**
83
+ * Convert a Linear issue to a TenetCard
84
+ */
85
+ export function linearToTenet(issue) {
86
+ return {
87
+ id: issue.id,
88
+ linearId: issue.id,
89
+ githubNumber: undefined,
90
+ title: issue.title,
91
+ description: issue.description ?? "",
92
+ status: linearStateToColumn(issue.state),
93
+ priority: linearPriorityToJfl(issue.priority),
94
+ assignee: issue.assignee?.name,
95
+ labels: issue.labels.map(l => l.name),
96
+ source: "linear",
97
+ links: {
98
+ linear_url: issue.url,
99
+ },
100
+ };
101
+ }
102
+ /**
103
+ * Convert a KanbanCard (from kanban-github.ts) to a TenetCard
104
+ */
105
+ export function kanbanToTenet(card) {
106
+ return {
107
+ id: card.id,
108
+ linearId: undefined,
109
+ githubNumber: card.number,
110
+ title: card.title,
111
+ description: card.description,
112
+ status: card.column,
113
+ priority: card.priority,
114
+ assignee: card.agent || undefined,
115
+ labels: card.labels,
116
+ source: card.source,
117
+ links: {
118
+ pr: card.links.pr,
119
+ pr_url: card.links.pr_url,
120
+ eval: card.links.eval,
121
+ journal: card.links.journal,
122
+ },
123
+ };
124
+ }
125
+ /**
126
+ * Convert a TenetCard to Linear issue creation input.
127
+ * Requires states from the team to map column → stateId.
128
+ */
129
+ export function tenetToLinearCreate(card, teamId, projectId, states) {
130
+ const stateId = findLinearStateId(states, card.status);
131
+ return {
132
+ title: card.title,
133
+ description: card.description || undefined,
134
+ teamId,
135
+ projectId,
136
+ stateId,
137
+ priority: jflPriorityToLinear(card.priority),
138
+ };
139
+ }
140
+ /**
141
+ * Build GitHub issue body for a TenetCard synced from Linear
142
+ */
143
+ export function tenetToGitHubBody(card) {
144
+ let body = card.description || "";
145
+ const meta = [`linear_id: ${card.linearId}`];
146
+ if (card.links.linear_url)
147
+ meta.push(`linear_url: ${card.links.linear_url}`);
148
+ if (meta.length > 0) {
149
+ body += `\n\n<!-- jfl:\n${meta.join("\n")}\n-->`;
150
+ }
151
+ return body;
152
+ }
153
+ /**
154
+ * Get GitHub labels for a TenetCard.
155
+ * Pass scope to add scope:service-name label (for centralized kanban layout).
156
+ */
157
+ export function tenetToGitHubLabels(card, scope) {
158
+ const COLUMN_LABELS = {
159
+ backlog: "jfl/backlog",
160
+ in_progress: "jfl/in-progress",
161
+ eval: "jfl/eval",
162
+ done: "jfl/done",
163
+ };
164
+ const labels = [COLUMN_LABELS[card.status], "source:linear"];
165
+ if (scope)
166
+ labels.push(`scope:${scope}`);
167
+ if (card.priority >= 9)
168
+ labels.push("priority:critical");
169
+ else if (card.priority >= 6)
170
+ labels.push("priority:high");
171
+ else if (card.priority >= 1)
172
+ labels.push("priority:low");
173
+ return labels;
174
+ }
175
+ //# sourceMappingURL=linear-kanban.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear-kanban.js","sourceRoot":"","sources":["../../src/lib/linear-kanban.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * @purpose Onboarding system for Tenet IDE
3
+ *
4
+ * Detects project capabilities, creates workspace, and manages progressive feature disclosure
5
+ */
6
+ import { UserEngagement, FeatureReveal } from './discovery-agent.js';
7
+ export declare class Onboarding {
8
+ private projectRoot;
9
+ private capabilities;
10
+ constructor(projectRoot: string);
11
+ /**
12
+ * Auto-detect project capabilities for stealth workspace creation
13
+ */
14
+ private detectCapabilities;
15
+ /**
16
+ * Create .tenet workspace with intelligent defaults
17
+ */
18
+ createWorkspace(): Promise<boolean>;
19
+ /**
20
+ * Generate AI assistants based on detected project capabilities
21
+ */
22
+ private generateAssistants;
23
+ /**
24
+ * Check if user should see a feature revelation
25
+ */
26
+ checkForReveal(): Promise<FeatureReveal | null>;
27
+ /**
28
+ * Display feature reveal to user in friendly way
29
+ */
30
+ displayReveal(reveal: FeatureReveal): void;
31
+ /**
32
+ * Update user engagement metrics
33
+ */
34
+ updateEngagement(actions: Partial<UserEngagement>): void;
35
+ /**
36
+ * Get user-friendly project name
37
+ */
38
+ private getProjectName;
39
+ }
40
+ //# sourceMappingURL=onboarding.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.d.ts","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAKH,OAAO,EAAkB,cAAc,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAA;AAYpF,qBAAa,UAAU;IACrB,OAAO,CAAC,WAAW,CAAQ;IAC3B,OAAO,CAAC,YAAY,CAAqB;gBAE7B,WAAW,EAAE,MAAM;IAK/B;;OAEG;IACH,OAAO,CAAC,kBAAkB;IAsD1B;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,OAAO,CAAC;IAkDzC;;OAEG;YACW,kBAAkB;IA4ChC;;OAEG;IACG,cAAc,IAAI,OAAO,CAAC,aAAa,GAAG,IAAI,CAAC;IAerD;;OAEG;IACH,aAAa,CAAC,MAAM,EAAE,aAAa,GAAG,IAAI;IAY1C;;OAEG;IACH,gBAAgB,CAAC,OAAO,EAAE,OAAO,CAAC,cAAc,CAAC,GAAG,IAAI;IAkBxD;;OAEG;IACH,OAAO,CAAC,cAAc;CAYvB"}
@@ -0,0 +1,213 @@
1
+ /**
2
+ * @purpose Onboarding system for Tenet IDE
3
+ *
4
+ * Detects project capabilities, creates workspace, and manages progressive feature disclosure
5
+ */
6
+ import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';
7
+ import { join } from 'path';
8
+ import chalk from 'chalk';
9
+ import { DiscoveryAgent } from './discovery-agent.js';
10
+ export class Onboarding {
11
+ projectRoot;
12
+ capabilities;
13
+ constructor(projectRoot) {
14
+ this.projectRoot = projectRoot;
15
+ this.capabilities = this.detectCapabilities();
16
+ }
17
+ /**
18
+ * Auto-detect project capabilities for stealth workspace creation
19
+ */
20
+ detectCapabilities() {
21
+ const hasGit = existsSync(join(this.projectRoot, '.git'));
22
+ const hasPackageJson = existsSync(join(this.projectRoot, 'package.json'));
23
+ const hasNodeModules = existsSync(join(this.projectRoot, 'node_modules'));
24
+ const hasTsConfig = existsSync(join(this.projectRoot, 'tsconfig.json'));
25
+ let hasTypeScript = hasTsConfig;
26
+ let hasTesting = false;
27
+ let projectType = 'unknown';
28
+ const detectedServices = [];
29
+ if (hasPackageJson) {
30
+ try {
31
+ const pkg = JSON.parse(readFileSync(join(this.projectRoot, 'package.json'), 'utf8'));
32
+ // Detect TypeScript
33
+ if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {
34
+ hasTypeScript = true;
35
+ }
36
+ // Detect testing frameworks
37
+ const testFrameworks = ['jest', 'vitest', 'mocha', 'cypress', 'playwright'];
38
+ hasTesting = testFrameworks.some(fw => pkg.devDependencies?.[fw] || pkg.dependencies?.[fw] ||
39
+ pkg.scripts?.test || pkg.scripts?.['test:unit']);
40
+ // Detect project type
41
+ if (pkg.dependencies?.express || pkg.dependencies?.fastify)
42
+ projectType = 'node';
43
+ else if (pkg.dependencies?.react || pkg.dependencies?.vue || pkg.dependencies?.[`@angular/core`])
44
+ projectType = 'web';
45
+ else if (!pkg.dependencies && pkg.devDependencies)
46
+ projectType = 'library';
47
+ else
48
+ projectType = 'node';
49
+ // Detect services
50
+ if (hasGit)
51
+ detectedServices.push('GitHub');
52
+ if (hasTesting)
53
+ detectedServices.push('Testing');
54
+ if (hasTypeScript)
55
+ detectedServices.push('TypeScript');
56
+ }
57
+ catch (error) {
58
+ console.warn('Could not parse package.json:', error);
59
+ }
60
+ }
61
+ return {
62
+ hasGit,
63
+ hasPackageJson,
64
+ hasTypeScript,
65
+ hasTesting,
66
+ hasNodeModules,
67
+ projectType,
68
+ detectedServices
69
+ };
70
+ }
71
+ /**
72
+ * Create .tenet workspace with intelligent defaults
73
+ */
74
+ async createWorkspace() {
75
+ const tenenetDir = join(this.projectRoot, '.tenet');
76
+ try {
77
+ // Create .tenet directory if it doesn't exist
78
+ if (!existsSync(tenenetDir)) {
79
+ mkdirSync(tenenetDir, { recursive: true });
80
+ }
81
+ // Write project configuration
82
+ const config = {
83
+ name: this.getProjectName(),
84
+ type: this.capabilities.projectType,
85
+ detectedServices: this.capabilities.detectedServices,
86
+ capabilities: this.capabilities,
87
+ createdAt: new Date().toISOString(),
88
+ progressive: true // Flag indicating progressive disclosure mode
89
+ };
90
+ writeFileSync(join(tenenetDir, 'project.json'), JSON.stringify(config, null, 2));
91
+ // Create engagement tracking
92
+ const engagement = {
93
+ sessionsCount: 1,
94
+ totalTimeMinutes: 0,
95
+ featuresUsed: [],
96
+ positiveSignals: ['workspace_created'],
97
+ confusionSignals: [],
98
+ lastSeen: new Date(),
99
+ installDate: new Date()
100
+ };
101
+ writeFileSync(join(tenenetDir, 'engagement.json'), JSON.stringify(engagement, null, 2));
102
+ // Generate intelligent assistants based on project capabilities
103
+ await this.generateAssistants(tenenetDir);
104
+ return true;
105
+ }
106
+ catch (error) {
107
+ console.warn('Could not create Tenet workspace:', error);
108
+ return false;
109
+ }
110
+ }
111
+ /**
112
+ * Generate AI assistants based on detected project capabilities
113
+ */
114
+ async generateAssistants(tenenetDir) {
115
+ const assistants = [];
116
+ if (this.capabilities.hasTypeScript) {
117
+ assistants.push({
118
+ name: 'type-helper',
119
+ description: 'Monitors TypeScript compilation and suggests improvements',
120
+ capability: 'code-quality',
121
+ active: true
122
+ });
123
+ }
124
+ if (this.capabilities.hasTesting) {
125
+ assistants.push({
126
+ name: 'test-assistant',
127
+ description: 'Analyzes test coverage and suggests additional tests',
128
+ capability: 'test-coverage',
129
+ active: true
130
+ });
131
+ }
132
+ if (this.capabilities.hasGit) {
133
+ assistants.push({
134
+ name: 'workflow-optimizer',
135
+ description: 'Learns from your git patterns to optimize development workflow',
136
+ capability: 'workflow-optimization',
137
+ active: true
138
+ });
139
+ }
140
+ // Always include basic system assistant
141
+ assistants.push({
142
+ name: 'system-monitor',
143
+ description: 'Tracks build performance and development environment health',
144
+ capability: 'system-intelligence',
145
+ active: true
146
+ });
147
+ writeFileSync(join(tenenetDir, 'assistants.json'), JSON.stringify(assistants, null, 2));
148
+ }
149
+ /**
150
+ * Check if user should see a feature revelation
151
+ */
152
+ async checkForReveal() {
153
+ const engagementPath = join(this.projectRoot, '.tenet', 'engagement.json');
154
+ if (!existsSync(engagementPath))
155
+ return null;
156
+ try {
157
+ const engagement = JSON.parse(readFileSync(engagementPath, 'utf8'));
158
+ const agent = new DiscoveryAgent(engagement);
159
+ return agent.decideNextReveal();
160
+ }
161
+ catch (error) {
162
+ return null;
163
+ }
164
+ }
165
+ /**
166
+ * Display feature reveal to user in friendly way
167
+ */
168
+ displayReveal(reveal) {
169
+ console.log();
170
+ console.log(chalk.cyan('💡 ') + chalk.bold(reveal.message));
171
+ if (reveal.subtitle) {
172
+ console.log(chalk.gray(` ${reveal.subtitle}`));
173
+ }
174
+ if (reveal.demoCommand) {
175
+ console.log(chalk.gray(` Try: ${reveal.demoCommand}`));
176
+ }
177
+ console.log();
178
+ }
179
+ /**
180
+ * Update user engagement metrics
181
+ */
182
+ updateEngagement(actions) {
183
+ const engagementPath = join(this.projectRoot, '.tenet', 'engagement.json');
184
+ if (!existsSync(engagementPath))
185
+ return;
186
+ try {
187
+ const engagement = JSON.parse(readFileSync(engagementPath, 'utf8'));
188
+ // Update metrics
189
+ Object.assign(engagement, actions);
190
+ engagement.lastSeen = new Date();
191
+ writeFileSync(engagementPath, JSON.stringify(engagement, null, 2));
192
+ }
193
+ catch (error) {
194
+ console.warn('Could not update engagement:', error);
195
+ }
196
+ }
197
+ /**
198
+ * Get user-friendly project name
199
+ */
200
+ getProjectName() {
201
+ if (this.capabilities.hasPackageJson) {
202
+ try {
203
+ const pkg = JSON.parse(readFileSync(join(this.projectRoot, 'package.json'), 'utf8'));
204
+ return pkg.name || 'My Project';
205
+ }
206
+ catch {
207
+ // Fall through
208
+ }
209
+ }
210
+ return this.projectRoot.split('/').pop() || 'My Project';
211
+ }
212
+ }
213
+ //# sourceMappingURL=onboarding.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"onboarding.js","sourceRoot":"","sources":["../../src/lib/onboarding.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * @purpose Physical-World World Model
3
+ * Integrates physical system dynamics with Stratus reasoning for RL training
4
+ */
5
+ import type { PhysicalWorldState, PhysicalWorldAction, PhysicalWorldTransition, PhysicalWorldPrediction, PhysicalWorldInvariant } from '../types/physical-world-model.js';
6
+ export declare class PhysicalWorldModel {
7
+ private transitions;
8
+ private readonly MAX_TRANSITIONS;
9
+ private stratusClient;
10
+ constructor();
11
+ /**
12
+ * Capture current physical world state
13
+ */
14
+ captureCurrentState(): Promise<PhysicalWorldState>;
15
+ /**
16
+ * Predict outcome of an action using Stratus reasoning
17
+ */
18
+ predictOutcome(currentState: PhysicalWorldState, action: PhysicalWorldAction): Promise<PhysicalWorldPrediction>;
19
+ /**
20
+ * Record actual outcome and learn from it
21
+ */
22
+ recordTransition(transition: PhysicalWorldTransition): Promise<void>;
23
+ /**
24
+ * Check physical world safety invariants
25
+ */
26
+ checkSafetyInvariants(state: PhysicalWorldState): Array<{
27
+ invariant: PhysicalWorldInvariant;
28
+ violated: boolean;
29
+ }>;
30
+ /**
31
+ * Generate counterfactual scenarios
32
+ */
33
+ generateCounterfactuals(actualTransition: PhysicalWorldTransition, alternativeActions: PhysicalWorldAction[]): Promise<PhysicalWorldPrediction[]>;
34
+ /**
35
+ * Get physical world insights for agent decision making
36
+ */
37
+ getPhysicalWorldInsights(): {
38
+ current_health: string;
39
+ optimization_opportunities: string[];
40
+ risk_factors: string[];
41
+ recent_trends: string[];
42
+ };
43
+ private findSimilarTransitions;
44
+ private fallbackPrediction;
45
+ private assessSystemHealth;
46
+ private identifyOptimizationOpportunities;
47
+ private analyzeTrends;
48
+ }
49
+ export declare const physicalWorldModel: PhysicalWorldModel;
50
+ //# sourceMappingURL=physical-world-model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"physical-world-model.d.ts","sourceRoot":"","sources":["../../src/lib/physical-world-model.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,KAAK,EACV,kBAAkB,EAClB,mBAAmB,EACnB,uBAAuB,EACvB,uBAAuB,EACvB,sBAAsB,EAEvB,MAAM,kCAAkC,CAAA;AAEzC,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,WAAW,CAAgC;IACnD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAO;IACvC,OAAO,CAAC,aAAa,CAAe;;IAMpC;;OAEG;IACG,mBAAmB,IAAI,OAAO,CAAC,kBAAkB,CAAC;IA6BxD;;OAEG;IACG,cAAc,CAClB,YAAY,EAAE,kBAAkB,EAChC,MAAM,EAAE,mBAAmB,GAC1B,OAAO,CAAC,uBAAuB,CAAC;IAkEnC;;OAEG;IACG,gBAAgB,CAAC,UAAU,EAAE,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC;IAgC1E;;OAEG;IACH,qBAAqB,CAAC,KAAK,EAAE,kBAAkB,GAAG,KAAK,CAAC;QAAC,SAAS,EAAE,sBAAsB,CAAC;QAAC,QAAQ,EAAE,OAAO,CAAA;KAAC,CAAC;IAS/G;;OAEG;IACG,uBAAuB,CAC3B,gBAAgB,EAAE,uBAAuB,EACzC,kBAAkB,EAAE,mBAAmB,EAAE,GACxC,OAAO,CAAC,uBAAuB,EAAE,CAAC;IAWrC;;OAEG;IACH,wBAAwB,IAAI;QAC1B,cAAc,EAAE,MAAM,CAAA;QACtB,0BAA0B,EAAE,MAAM,EAAE,CAAA;QACpC,YAAY,EAAE,MAAM,EAAE,CAAA;QACtB,aAAa,EAAE,MAAM,EAAE,CAAA;KACxB;IA0BD,OAAO,CAAC,sBAAsB;IAa9B,OAAO,CAAC,kBAAkB;IAsB1B,OAAO,CAAC,kBAAkB;IAO1B,OAAO,CAAC,iCAAiC;IAYzC,OAAO,CAAC,aAAa;CAuBtB;AAGD,eAAO,MAAM,kBAAkB,oBAA2B,CAAA"}