@sentropic/h2a 0.85.16 → 0.85.18

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 (193) hide show
  1. package/.claude-plugin/plugin.json +29 -0
  2. package/.codex-plugin/plugin.json +35 -0
  3. package/.mcp.json +19 -0
  4. package/README.md +3 -0
  5. package/dist/bin-routing.d.ts +14 -3
  6. package/dist/bin-routing.d.ts.map +1 -1
  7. package/dist/bin-routing.js +31 -6
  8. package/dist/bin-routing.js.map +1 -1
  9. package/dist/bin.js +45 -14
  10. package/dist/bin.js.map +1 -1
  11. package/dist/cli-contract.d.ts.map +1 -1
  12. package/dist/cli-contract.js +41 -1
  13. package/dist/cli-contract.js.map +1 -1
  14. package/dist/cli.d.ts +4 -0
  15. package/dist/cli.d.ts.map +1 -1
  16. package/dist/cli.js +146 -18
  17. package/dist/cli.js.map +1 -1
  18. package/dist/index.d.ts +4 -3
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +3 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/mcp.d.ts +1 -1
  23. package/dist/mcp.d.ts.map +1 -1
  24. package/dist/mcp.js +1 -0
  25. package/dist/mcp.js.map +1 -1
  26. package/dist/runtime/focus/serve.d.ts +42 -0
  27. package/dist/runtime/focus/serve.d.ts.map +1 -0
  28. package/dist/runtime/focus/serve.js +366 -0
  29. package/dist/runtime/focus/serve.js.map +1 -0
  30. package/dist/runtime/loop/engine/adapters.d.ts +62 -6
  31. package/dist/runtime/loop/engine/adapters.d.ts.map +1 -1
  32. package/dist/runtime/loop/engine/adapters.js +272 -36
  33. package/dist/runtime/loop/engine/adapters.js.map +1 -1
  34. package/dist/runtime/loop/engine/decision.d.ts.map +1 -1
  35. package/dist/runtime/loop/engine/decision.js +20 -2
  36. package/dist/runtime/loop/engine/decision.js.map +1 -1
  37. package/dist/runtime/loop/engine/execute.d.ts +13 -4
  38. package/dist/runtime/loop/engine/execute.d.ts.map +1 -1
  39. package/dist/runtime/loop/engine/execute.js +17 -7
  40. package/dist/runtime/loop/engine/execute.js.map +1 -1
  41. package/dist/runtime/loop/index.d.ts +16 -0
  42. package/dist/runtime/loop/index.d.ts.map +1 -1
  43. package/dist/runtime/loop/index.js +146 -13
  44. package/dist/runtime/loop/index.js.map +1 -1
  45. package/dist/runtime/mcp/agent-launch.d.ts +33 -0
  46. package/dist/runtime/mcp/agent-launch.d.ts.map +1 -0
  47. package/dist/runtime/mcp/agent-launch.js +250 -0
  48. package/dist/runtime/mcp/agent-launch.js.map +1 -0
  49. package/dist/runtime/mcp/handlers.d.ts +8 -0
  50. package/dist/runtime/mcp/handlers.d.ts.map +1 -1
  51. package/dist/runtime/mcp/handlers.js +34 -4
  52. package/dist/runtime/mcp/handlers.js.map +1 -1
  53. package/dist/runtime/mcp/index.d.ts +2 -1
  54. package/dist/runtime/mcp/index.d.ts.map +1 -1
  55. package/dist/runtime/mcp/index.js +2 -1
  56. package/dist/runtime/mcp/index.js.map +1 -1
  57. package/dist/runtime/mcp/server.d.ts +5 -0
  58. package/dist/runtime/mcp/server.d.ts.map +1 -1
  59. package/dist/runtime/mcp/server.js +3 -0
  60. package/dist/runtime/mcp/server.js.map +1 -1
  61. package/dist/runtime/mcp/stdio.d.ts +17 -0
  62. package/dist/runtime/mcp/stdio.d.ts.map +1 -1
  63. package/dist/runtime/mcp/stdio.js +65 -13
  64. package/dist/runtime/mcp/stdio.js.map +1 -1
  65. package/dist/runtime/mcp/tools.d.ts.map +1 -1
  66. package/dist/runtime/mcp/tools.js +96 -5
  67. package/dist/runtime/mcp/tools.js.map +1 -1
  68. package/dist/runtime/path-safety.d.ts +3 -0
  69. package/dist/runtime/path-safety.d.ts.map +1 -0
  70. package/dist/runtime/path-safety.js +12 -0
  71. package/dist/runtime/path-safety.js.map +1 -0
  72. package/dist/runtime/reporting/config.d.ts +21 -0
  73. package/dist/runtime/reporting/config.d.ts.map +1 -0
  74. package/dist/runtime/reporting/config.js +76 -0
  75. package/dist/runtime/reporting/config.js.map +1 -0
  76. package/dist/runtime/reporting/context.d.ts +27 -0
  77. package/dist/runtime/reporting/context.d.ts.map +1 -0
  78. package/dist/runtime/reporting/context.js +265 -0
  79. package/dist/runtime/reporting/context.js.map +1 -0
  80. package/dist/runtime/reporting/index.d.ts +4 -0
  81. package/dist/runtime/reporting/index.d.ts.map +1 -0
  82. package/dist/runtime/reporting/index.js +4 -0
  83. package/dist/runtime/reporting/index.js.map +1 -0
  84. package/dist/runtime/reporting/report-ai.d.ts +49 -0
  85. package/dist/runtime/reporting/report-ai.d.ts.map +1 -0
  86. package/dist/runtime/reporting/report-ai.js +325 -0
  87. package/dist/runtime/reporting/report-ai.js.map +1 -0
  88. package/focus-app/client/_app/immutable/assets/0.BdzHFb9q.css +1 -0
  89. package/focus-app/client/_app/immutable/assets/0.BdzHFb9q.css.br +2 -0
  90. package/focus-app/client/_app/immutable/assets/0.BdzHFb9q.css.gz +0 -0
  91. package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css +1 -0
  92. package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css.br +0 -0
  93. package/focus-app/client/_app/immutable/assets/2.Ddxq02y4.css.gz +0 -0
  94. package/focus-app/client/_app/immutable/chunks/Bs3f1UbD.js +2 -0
  95. package/focus-app/client/_app/immutable/chunks/Bs3f1UbD.js.br +0 -0
  96. package/focus-app/client/_app/immutable/chunks/Bs3f1UbD.js.gz +0 -0
  97. package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js +1 -0
  98. package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js.br +0 -0
  99. package/focus-app/client/_app/immutable/chunks/Bv8OL8ib.js.gz +0 -0
  100. package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js +2 -0
  101. package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js.br +0 -0
  102. package/focus-app/client/_app/immutable/chunks/CVq_IFFr.js.gz +0 -0
  103. package/focus-app/client/_app/immutable/chunks/Cj6wo28J.js +1 -0
  104. package/focus-app/client/_app/immutable/chunks/Cj6wo28J.js.br +0 -0
  105. package/focus-app/client/_app/immutable/chunks/Cj6wo28J.js.gz +0 -0
  106. package/focus-app/client/_app/immutable/chunks/DEmooz0s.js +1 -0
  107. package/focus-app/client/_app/immutable/chunks/DEmooz0s.js.br +0 -0
  108. package/focus-app/client/_app/immutable/chunks/DEmooz0s.js.gz +0 -0
  109. package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js +2 -0
  110. package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js.br +0 -0
  111. package/focus-app/client/_app/immutable/chunks/DQIRXgdC.js.gz +0 -0
  112. package/focus-app/client/_app/immutable/chunks/ZxFklh9T.js +1 -0
  113. package/focus-app/client/_app/immutable/chunks/ZxFklh9T.js.br +0 -0
  114. package/focus-app/client/_app/immutable/chunks/ZxFklh9T.js.gz +0 -0
  115. package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js +1 -0
  116. package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js.br +0 -0
  117. package/focus-app/client/_app/immutable/chunks/_wRuVGPs.js.gz +0 -0
  118. package/focus-app/client/_app/immutable/chunks/wbPk3Yxo.js +81 -0
  119. package/focus-app/client/_app/immutable/chunks/wbPk3Yxo.js.br +0 -0
  120. package/focus-app/client/_app/immutable/chunks/wbPk3Yxo.js.gz +0 -0
  121. package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js +2 -0
  122. package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js.br +0 -0
  123. package/focus-app/client/_app/immutable/entry/app.6DKouWRt.js.gz +0 -0
  124. package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js +1 -0
  125. package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js.br +2 -0
  126. package/focus-app/client/_app/immutable/entry/start.DlLmkUb7.js.gz +0 -0
  127. package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js +5 -0
  128. package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js.br +0 -0
  129. package/focus-app/client/_app/immutable/nodes/0.CuSOF0Of.js.gz +0 -0
  130. package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js +1 -0
  131. package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js.br +0 -0
  132. package/focus-app/client/_app/immutable/nodes/1.D39jdnqm.js.gz +0 -0
  133. package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js +1 -0
  134. package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js.br +0 -0
  135. package/focus-app/client/_app/immutable/nodes/2.CnU8ifRl.js.gz +0 -0
  136. package/focus-app/client/_app/version.json +1 -0
  137. package/focus-app/client/_app/version.json.br +0 -0
  138. package/focus-app/client/_app/version.json.gz +0 -0
  139. package/focus-app/env.js +70 -0
  140. package/focus-app/env.js.map +1 -0
  141. package/focus-app/h2a-focus.json +114 -0
  142. package/focus-app/handler.js +24 -0
  143. package/focus-app/handler.js.map +1 -0
  144. package/focus-app/index.js +147 -0
  145. package/focus-app/index.js.map +1 -0
  146. package/focus-app/server/chunks/chunks/exports.js-DUTkELZq.js +217 -0
  147. package/focus-app/server/chunks/chunks/exports.js-DUTkELZq.js.map +1 -0
  148. package/focus-app/server/chunks/chunks/false.js-B2gHlHjM.js +4 -0
  149. package/focus-app/server/chunks/chunks/false.js-B2gHlHjM.js.map +1 -0
  150. package/focus-app/server/chunks/chunks/friendly.js-D4fjovnZ.js +246 -0
  151. package/focus-app/server/chunks/chunks/friendly.js-D4fjovnZ.js.map +1 -0
  152. package/focus-app/server/chunks/chunks/index.js-Di21TltP.js +1315 -0
  153. package/focus-app/server/chunks/chunks/index.js-Di21TltP.js.map +1 -0
  154. package/focus-app/server/chunks/chunks/internal.js-33vbd70h.js +126 -0
  155. package/focus-app/server/chunks/chunks/internal.js-33vbd70h.js.map +1 -0
  156. package/focus-app/server/chunks/chunks/root.js-DO1m-gJA.js +2967 -0
  157. package/focus-app/server/chunks/chunks/root.js-DO1m-gJA.js.map +1 -0
  158. package/focus-app/server/chunks/chunks/server.js-Bf8x1V_n.js +16 -0
  159. package/focus-app/server/chunks/chunks/server.js-Bf8x1V_n.js.map +1 -0
  160. package/focus-app/server/chunks/chunks/utils.js-C_3_iViC.js +2545 -0
  161. package/focus-app/server/chunks/chunks/utils.js-C_3_iViC.js.map +1 -0
  162. package/focus-app/server/chunks/chunks/utils2.js-BQzn9ikS.js +38 -0
  163. package/focus-app/server/chunks/chunks/utils2.js-BQzn9ikS.js.map +1 -0
  164. package/focus-app/server/chunks/entries/endpoints/api/actions/launch/_server.ts.js-DUQcf9xd.js +63 -0
  165. package/focus-app/server/chunks/entries/endpoints/api/actions/launch/_server.ts.js-DUQcf9xd.js.map +1 -0
  166. package/focus-app/server/chunks/entries/endpoints/api/decisions/inject/_server.ts.js-j0NNcOSZ.js +100 -0
  167. package/focus-app/server/chunks/entries/endpoints/api/decisions/inject/_server.ts.js-j0NNcOSZ.js.map +1 -0
  168. package/focus-app/server/chunks/entries/fallbacks/error.svelte.js-Dj3sETSX.js +50 -0
  169. package/focus-app/server/chunks/entries/fallbacks/error.svelte.js-Dj3sETSX.js.map +1 -0
  170. package/focus-app/server/chunks/entries/pages/_layout.svelte.js-BoLsbuC2.js +1420 -0
  171. package/focus-app/server/chunks/entries/pages/_layout.svelte.js-BoLsbuC2.js.map +1 -0
  172. package/focus-app/server/chunks/entries/pages/_page.server.ts.js-ChRBj_xK.js +246 -0
  173. package/focus-app/server/chunks/entries/pages/_page.server.ts.js-ChRBj_xK.js.map +1 -0
  174. package/focus-app/server/chunks/entries/pages/_page.svelte.js-QDldMYhk.js +2725 -0
  175. package/focus-app/server/chunks/entries/pages/_page.svelte.js-QDldMYhk.js.map +1 -0
  176. package/focus-app/server/chunks/handler-Cp_5hLyY.js +1474 -0
  177. package/focus-app/server/chunks/handler-Cp_5hLyY.js.map +1 -0
  178. package/focus-app/server/chunks/index.js-CBh7Wjqp.js +4242 -0
  179. package/focus-app/server/chunks/index.js-CBh7Wjqp.js.map +1 -0
  180. package/focus-app/server/chunks/manifest.js-Cm6cC7mC.js +56 -0
  181. package/focus-app/server/chunks/manifest.js-Cm6cC7mC.js.map +1 -0
  182. package/focus-app/server/chunks/nodes/0.js-4wlmdsk8.js +9 -0
  183. package/focus-app/server/chunks/nodes/0.js-4wlmdsk8.js.map +1 -0
  184. package/focus-app/server/chunks/nodes/1.js-B-LpY-lC.js +9 -0
  185. package/focus-app/server/chunks/nodes/1.js-B-LpY-lC.js.map +1 -0
  186. package/focus-app/server/chunks/nodes/2.js-F6jp5eD9.js +19 -0
  187. package/focus-app/server/chunks/nodes/2.js-F6jp5eD9.js.map +1 -0
  188. package/focus-app/shims.js +33 -0
  189. package/focus-app/shims.js.map +1 -0
  190. package/package.json +8 -4
  191. package/skills/h2a/SKILL.md +7 -5
  192. package/skills/harness/SKILL.md +17 -0
  193. package/skills/harness/using-harness/SKILL.md +26 -0
@@ -0,0 +1,76 @@
1
+ import { chmodSync, closeSync, existsSync, lstatSync, mkdirSync, openSync, readFileSync, renameSync, unlinkSync, writeFileSync } from "node:fs";
2
+ import { homedir } from "node:os";
3
+ import { dirname, join } from "node:path";
4
+ export const TRACK_REPORT_AI_CONFIG = {
5
+ argv: [
6
+ "h2a",
7
+ "report-ai",
8
+ "--model",
9
+ "claude-opus-4-8",
10
+ "--effort",
11
+ "xhigh",
12
+ "--gateway",
13
+ "required"
14
+ ],
15
+ timeoutMs: 600_000
16
+ };
17
+ export const TRACK_REPORT_AI_CONFIG_TEXT = `${JSON.stringify(TRACK_REPORT_AI_CONFIG)}\n`;
18
+ export class TrackReportAiConfigConflictError extends Error {
19
+ path;
20
+ constructor(path) {
21
+ super(`preserving differing user config at ${path}; rerun with --force to replace it`);
22
+ this.path = path;
23
+ this.name = "TrackReportAiConfigConflictError";
24
+ }
25
+ }
26
+ export function trackReportAiConfigPath(options = {}) {
27
+ const env = options.env ?? process.env;
28
+ const xdg = env.XDG_CONFIG_HOME?.trim();
29
+ const home = (options.home ?? env.HOME?.trim()) || homedir();
30
+ return join(xdg || join(home, ".config"), "track", "report-ai.json");
31
+ }
32
+ function atomicWrite0600(path, content) {
33
+ mkdirSync(dirname(path), { recursive: true });
34
+ const tmp = `${path}.tmp-${process.pid}-${Date.now()}-${Math.random().toString(16).slice(2)}`;
35
+ let fd;
36
+ try {
37
+ fd = openSync(tmp, "wx", 0o600);
38
+ writeFileSync(fd, content, "utf8");
39
+ closeSync(fd);
40
+ fd = undefined;
41
+ chmodSync(tmp, 0o600);
42
+ renameSync(tmp, path);
43
+ }
44
+ finally {
45
+ if (fd !== undefined)
46
+ closeSync(fd);
47
+ try {
48
+ unlinkSync(tmp);
49
+ }
50
+ catch (err) {
51
+ if (err.code !== "ENOENT")
52
+ throw err;
53
+ }
54
+ }
55
+ }
56
+ export function installTrackReportAiConfig(options = {}) {
57
+ const path = trackReportAiConfigPath(options);
58
+ if (existsSync(path)) {
59
+ const stat = lstatSync(path);
60
+ if (!stat.isFile() || stat.isSymbolicLink()) {
61
+ throw new TrackReportAiConfigConflictError(path);
62
+ }
63
+ const current = readFileSync(path, "utf8");
64
+ if (current === TRACK_REPORT_AI_CONFIG_TEXT) {
65
+ chmodSync(path, 0o600);
66
+ return { path, status: "unchanged" };
67
+ }
68
+ if (!options.force)
69
+ throw new TrackReportAiConfigConflictError(path);
70
+ atomicWrite0600(path, TRACK_REPORT_AI_CONFIG_TEXT);
71
+ return { path, status: "replaced" };
72
+ }
73
+ atomicWrite0600(path, TRACK_REPORT_AI_CONFIG_TEXT);
74
+ return { path, status: "installed" };
75
+ }
76
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/runtime/reporting/config.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ export declare const H2A_REPORT_CONTEXT_SCHEMA: "h2a.report-context/v1";
2
+ export declare const H2A_REPORT_CONTEXT_MAX_ENTRIES = 100;
3
+ export declare const H2A_REPORT_CONTEXT_MAX_BYTES: number;
4
+ export type H2AReportContextEntryKind = "loop" | "session" | "blockage" | "inbox-metadata";
5
+ export interface H2AReportContextEntry {
6
+ readonly ref: string;
7
+ readonly kind: H2AReportContextEntryKind;
8
+ readonly workspace: string;
9
+ readonly text: string;
10
+ }
11
+ export interface H2AReportContextV1 {
12
+ readonly schema: typeof H2A_REPORT_CONTEXT_SCHEMA;
13
+ readonly storeRoot: string;
14
+ readonly workspaceRoot: string;
15
+ readonly entries: readonly H2AReportContextEntry[];
16
+ readonly omitted: number;
17
+ }
18
+ export interface ReadH2AReportContextOptions {
19
+ readonly storeRoot: string;
20
+ readonly workspaceRoot: string;
21
+ }
22
+ /**
23
+ * Build Track's optional h2a context projection without touching Track and
24
+ * without acquiring, repairing, sweeping, or writing the h2a store.
25
+ */
26
+ export declare function readH2AReportContext(options: ReadH2AReportContextOptions): H2AReportContextV1;
27
+ //# sourceMappingURL=context.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.d.ts","sourceRoot":"","sources":["../../../src/runtime/reporting/context.ts"],"names":[],"mappings":"AAkBA,eAAO,MAAM,yBAAyB,EAAG,uBAAgC,CAAC;AAC1E,eAAO,MAAM,8BAA8B,MAAM,CAAC;AAClD,eAAO,MAAM,4BAA4B,QAAa,CAAC;AAEvD,MAAM,MAAM,yBAAyB,GACjC,MAAM,GACN,SAAS,GACT,UAAU,GACV,gBAAgB,CAAC;AAErB,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,IAAI,EAAE,yBAAyB,CAAC;IACzC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,MAAM,EAAE,OAAO,yBAAyB,CAAC;IAClD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,OAAO,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACnD,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,2BAA2B;IAC1C,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAqLD;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,OAAO,EAAE,2BAA2B,GACnC,kBAAkB,CA0FpB"}
@@ -0,0 +1,265 @@
1
+ import { readFileSync, readdirSync, realpathSync, statSync } from "node:fs";
2
+ import { isAbsolute, join, relative, resolve } from "node:path";
3
+ import { isH2AEnvelope, isH2ASession } from "@sentropic/h2a";
4
+ import { listBlockages } from "../blockage/index.js";
5
+ import { listObjectiveLoops } from "../loop/index.js";
6
+ import { inboxDir, inboxDirRaw, localStorePaths } from "../local-files/paths.js";
7
+ export const H2A_REPORT_CONTEXT_SCHEMA = "h2a.report-context/v1";
8
+ export const H2A_REPORT_CONTEXT_MAX_ENTRIES = 100;
9
+ export const H2A_REPORT_CONTEXT_MAX_BYTES = 128 * 1024;
10
+ function cleanText(value, maxScalars = 2_048) {
11
+ const normalized = String(value ?? "")
12
+ .replace(/[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f]/g, " ")
13
+ .replace(/[\u202a-\u202e\u2066-\u2069]/g, " ")
14
+ .replace(/\s+/g, " ")
15
+ .trim();
16
+ return Array.from(normalized).slice(0, maxScalars).join("");
17
+ }
18
+ function canonicalExistingDirectory(input, label) {
19
+ if (!isAbsolute(input))
20
+ throw new Error(`${label} must be an absolute path`);
21
+ const path = realpathSync(input);
22
+ if (!statSync(path).isDirectory())
23
+ throw new Error(`${label} must be a directory`);
24
+ return path;
25
+ }
26
+ function scopedRealpath(root, candidate) {
27
+ if (typeof candidate !== "string" || candidate.length === 0 || !isAbsolute(candidate))
28
+ return undefined;
29
+ try {
30
+ const path = realpathSync(resolve(candidate));
31
+ const rel = relative(root, path);
32
+ if (rel === "" || (!rel.startsWith("..") && !isAbsolute(rel)))
33
+ return path;
34
+ }
35
+ catch {
36
+ // Missing, unreadable and dangling-symlink paths are not report context.
37
+ }
38
+ return undefined;
39
+ }
40
+ function readSessionsReadOnly(storeRoot) {
41
+ const dir = localStorePaths(storeRoot).presence;
42
+ let names;
43
+ try {
44
+ names = readdirSync(dir).sort();
45
+ }
46
+ catch (err) {
47
+ if (err.code === "ENOENT")
48
+ return [];
49
+ throw err;
50
+ }
51
+ const sessions = [];
52
+ for (const name of names) {
53
+ if (!name.endsWith(".json"))
54
+ continue;
55
+ try {
56
+ const parsed = JSON.parse(readFileSync(join(dir, name), "utf8"));
57
+ if (isH2ASession(parsed))
58
+ sessions.push(parsed);
59
+ }
60
+ catch {
61
+ // A reporting read never repairs or removes malformed presence records.
62
+ }
63
+ }
64
+ return sessions;
65
+ }
66
+ function loopWorkspace(loop, root) {
67
+ const declared = [];
68
+ for (const repo of Array.isArray(loop.repos) ? loop.repos : []) {
69
+ declared.push({ path: repo?.path });
70
+ }
71
+ for (const agent of Array.isArray(loop.agents) ? loop.agents : []) {
72
+ if (agent?.launch?.workspace !== undefined) {
73
+ declared.push({
74
+ ...(typeof agent.h2aInstance === "string"
75
+ ? { instance: agent.h2aInstance }
76
+ : {}),
77
+ path: agent.launch.workspace
78
+ });
79
+ }
80
+ }
81
+ if (declared.length === 0)
82
+ return undefined;
83
+ const resolved = declared.map((item) => ({
84
+ ...item,
85
+ workspace: scopedRealpath(root, item.path)
86
+ }));
87
+ if (resolved.some((item) => item.workspace === undefined))
88
+ return undefined;
89
+ const workspaces = new Set(resolved.map((item) => item.workspace));
90
+ // A projected entry has one workspace field. Never relabel a multi-workspace
91
+ // loop as whichever in-scope path happened to be encountered first.
92
+ if (workspaces.size !== 1)
93
+ return undefined;
94
+ const workspace = [...workspaces][0];
95
+ return {
96
+ workspace,
97
+ agentWorkspaces: new Map(resolved.flatMap((item) => item.instance && item.workspace
98
+ ? [[item.instance, item.workspace]]
99
+ : []))
100
+ };
101
+ }
102
+ function sessionWorkspace(session, root) {
103
+ return scopedRealpath(root, session.workspace?.path ?? session.launchContext?.cwd);
104
+ }
105
+ function readInboxMetadata(storeRoot, session, workspace) {
106
+ const paths = localStorePaths(storeRoot);
107
+ const dirs = new Set([
108
+ inboxDir(paths, session.instance),
109
+ inboxDirRaw(paths, session.instance)
110
+ ]);
111
+ const seen = new Set();
112
+ const out = [];
113
+ for (const dir of dirs) {
114
+ let names;
115
+ try {
116
+ names = readdirSync(dir).sort();
117
+ }
118
+ catch (err) {
119
+ if (err.code === "ENOENT")
120
+ continue;
121
+ throw err;
122
+ }
123
+ for (const name of names) {
124
+ if (!name.endsWith(".json"))
125
+ continue;
126
+ try {
127
+ const parsed = JSON.parse(readFileSync(join(dir, name), "utf8"));
128
+ if (!isH2AEnvelope(parsed))
129
+ continue;
130
+ const envelope = parsed;
131
+ if (seen.has(envelope.id))
132
+ continue;
133
+ seen.add(envelope.id);
134
+ out.push({
135
+ ref: `h2a:inbox:${cleanText(envelope.id, 256)}`,
136
+ kind: "inbox-metadata",
137
+ workspace,
138
+ text: cleanText(`inbox=${session.instance} id=${envelope.id} type=${envelope.type} ` +
139
+ `actor=${envelope.actor.instance} createdAt=${envelope.createdAt}`)
140
+ });
141
+ }
142
+ catch {
143
+ // Never mutate malformed inbox files and never expose their raw bytes.
144
+ }
145
+ }
146
+ }
147
+ return out;
148
+ }
149
+ function cappedEnvelope(storeRoot, workspaceRoot, candidates) {
150
+ const unique = new Map();
151
+ for (const entry of candidates) {
152
+ if (!unique.has(entry.ref))
153
+ unique.set(entry.ref, entry);
154
+ }
155
+ const entries = [];
156
+ const ordered = [...unique.values()].sort((a, b) => a.ref < b.ref ? -1 : a.ref > b.ref ? 1 : 0);
157
+ for (const candidate of ordered) {
158
+ if (entries.length >= H2A_REPORT_CONTEXT_MAX_ENTRIES)
159
+ break;
160
+ const next = [...entries, candidate];
161
+ const envelope = {
162
+ schema: H2A_REPORT_CONTEXT_SCHEMA,
163
+ storeRoot,
164
+ workspaceRoot,
165
+ entries: next,
166
+ omitted: ordered.length - next.length
167
+ };
168
+ if (Buffer.byteLength(JSON.stringify(envelope), "utf8") > H2A_REPORT_CONTEXT_MAX_BYTES)
169
+ break;
170
+ entries.push(candidate);
171
+ }
172
+ return {
173
+ schema: H2A_REPORT_CONTEXT_SCHEMA,
174
+ storeRoot,
175
+ workspaceRoot,
176
+ entries,
177
+ omitted: ordered.length - entries.length
178
+ };
179
+ }
180
+ /**
181
+ * Build Track's optional h2a context projection without touching Track and
182
+ * without acquiring, repairing, sweeping, or writing the h2a store.
183
+ */
184
+ export function readH2AReportContext(options) {
185
+ const workspaceRoot = canonicalExistingDirectory(options.workspaceRoot, "workspace root");
186
+ const storeRoot = canonicalExistingDirectory(resolve(options.storeRoot), "store root");
187
+ const entries = [];
188
+ const instanceScopes = new Map();
189
+ const instanceScope = (instance) => {
190
+ const existing = instanceScopes.get(instance);
191
+ if (existing)
192
+ return existing;
193
+ const created = { workspaces: new Set(), unsafe: false };
194
+ instanceScopes.set(instance, created);
195
+ return created;
196
+ };
197
+ const markUnsafe = (instance) => {
198
+ if (typeof instance === "string")
199
+ instanceScope(instance).unsafe = true;
200
+ };
201
+ const recordWorkspace = (instance, workspace) => {
202
+ if (typeof instance === "string") {
203
+ instanceScope(instance).workspaces.add(workspace);
204
+ }
205
+ };
206
+ const sessions = [];
207
+ for (const session of readSessionsReadOnly(storeRoot)) {
208
+ const workspace = sessionWorkspace(session, workspaceRoot);
209
+ if (!workspace) {
210
+ markUnsafe(session.instance);
211
+ continue;
212
+ }
213
+ recordWorkspace(session.instance, workspace);
214
+ sessions.push({ session, workspace });
215
+ }
216
+ for (const { session, workspace } of sessions) {
217
+ entries.push({
218
+ ref: `h2a:session:${cleanText(session.sessionId, 256)}`,
219
+ kind: "session",
220
+ workspace,
221
+ text: cleanText(`instance=${session.instance} host=${session.host ?? "unknown"} state=${session.state} ` +
222
+ `workStatus=${session.workStatus ?? "unknown"} heartbeatAt=${session.heartbeatAt}`)
223
+ });
224
+ entries.push(...readInboxMetadata(storeRoot, session, workspace));
225
+ }
226
+ for (const loop of listObjectiveLoops(storeRoot)) {
227
+ if (!loop || typeof loop.id !== "string")
228
+ continue;
229
+ const scoped = loopWorkspace(loop, workspaceRoot);
230
+ if (!scoped) {
231
+ for (const agent of Array.isArray(loop.agents) ? loop.agents : []) {
232
+ markUnsafe(agent?.h2aInstance);
233
+ }
234
+ continue;
235
+ }
236
+ for (const [instance, workspace] of scoped.agentWorkspaces) {
237
+ recordWorkspace(instance, workspace);
238
+ }
239
+ entries.push({
240
+ ref: `h2a:loop:${cleanText(loop.id, 256)}`,
241
+ kind: "loop",
242
+ workspace: scoped.workspace,
243
+ text: cleanText(`name=${loop.name} status=${loop.status} goal=${loop.goal} ` +
244
+ `agents=${Array.isArray(loop.agents) ? loop.agents.length : 0} ` +
245
+ `refs=${Array.isArray(loop.refs) ? loop.refs.length : 0}`)
246
+ });
247
+ }
248
+ for (const blockage of listBlockages(storeRoot)) {
249
+ if (!blockage)
250
+ continue;
251
+ const scope = instanceScopes.get(blockage.instance);
252
+ if (!scope || scope.unsafe || scope.workspaces.size !== 1)
253
+ continue;
254
+ const workspace = [...scope.workspaces][0];
255
+ entries.push({
256
+ ref: `h2a:blockage:${cleanText(blockage.instance, 256)}`,
257
+ kind: "blockage",
258
+ workspace,
259
+ text: cleanText(`instance=${blockage.instance} scope=${blockage.scope} status=${blockage.resolvedAt ? "resolved" : "active"} ` +
260
+ `reason=${blockage.reason}${blockage.needs ? ` needs=${blockage.needs}` : ""}`)
261
+ });
262
+ }
263
+ return cappedEnvelope(storeRoot, workspaceRoot, entries);
264
+ }
265
+ //# sourceMappingURL=context.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"context.js","sourceRoot":"","sources":["../../../src/runtime/reporting/context.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export * from "./context.js";
2
+ export * from "./config.js";
3
+ export * from "./report-ai.js";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/runtime/reporting/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,4 @@
1
+ export * from "./context.js";
2
+ export * from "./config.js";
3
+ export * from "./report-ai.js";
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/runtime/reporting/index.ts"],"names":[],"mappings":"AAAA,cAAc,cAAc,CAAC;AAC7B,cAAc,aAAa,CAAC;AAC5B,cAAc,gBAAgB,CAAC"}
@@ -0,0 +1,49 @@
1
+ export declare const H2A_GATEWAY_RESOLVED_MODEL_HEADER = "x-h2a-resolved-model";
2
+ export declare const H2A_GATEWAY_REASONING_EFFORT_HEADER = "x-h2a-reasoning-effort";
3
+ export declare const TRACK_AI_REPORT_CONTEXT_SCHEMA = "track.ai-report.context-envelope/v1";
4
+ export declare const TRACK_AI_REPORT_RESULT_SCHEMA = "track.ai-report.result/v1";
5
+ export declare const H2A_REPORT_AI_TERRA_MODEL = "gpt-5.6-terra";
6
+ declare const SECTION_NAMES: readonly ["summary", "facts", "changes", "activeWork", "blockers", "ownerDecisions", "suggestions", "uncertainty"];
7
+ type ReportAiSectionName = (typeof SECTION_NAMES)[number];
8
+ export interface TrackAiReportContextEnvelopeV1 {
9
+ readonly schema: typeof TRACK_AI_REPORT_CONTEXT_SCHEMA;
10
+ readonly context: unknown;
11
+ readonly contextDigest: string;
12
+ }
13
+ export interface TrackAiReportEntryV1 {
14
+ readonly id: string;
15
+ readonly text: string;
16
+ readonly citations: readonly {
17
+ readonly ref: string;
18
+ }[];
19
+ }
20
+ export interface TrackAiReportResultV1 {
21
+ readonly schema: typeof TRACK_AI_REPORT_RESULT_SCHEMA;
22
+ readonly adapter: {
23
+ readonly provider: string;
24
+ readonly model: string;
25
+ readonly effort: string;
26
+ readonly resolvedModel: string;
27
+ readonly identity: "adapter-reported";
28
+ };
29
+ readonly sections: Record<ReportAiSectionName, readonly TrackAiReportEntryV1[]>;
30
+ }
31
+ export interface RunH2AReportAiOptions {
32
+ readonly model: string;
33
+ readonly effort: string;
34
+ readonly gateway: string;
35
+ readonly stdinText: string;
36
+ }
37
+ export interface RunH2AReportAiIo {
38
+ readonly stdout: Pick<typeof process.stdout, "write">;
39
+ readonly stderr: Pick<typeof process.stderr, "write">;
40
+ }
41
+ export interface H2AReportAiDependencies {
42
+ readonly fetch?: typeof globalThis.fetch;
43
+ readonly prepareGateway?: () => Promise<string | undefined>;
44
+ readonly newSessionId?: () => string;
45
+ }
46
+ export declare function computeTrackAiContextDigest(context: unknown): string;
47
+ export declare function runH2AReportAi(options: RunH2AReportAiOptions, io?: RunH2AReportAiIo, dependencies?: H2AReportAiDependencies): Promise<number>;
48
+ export {};
49
+ //# sourceMappingURL=report-ai.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report-ai.d.ts","sourceRoot":"","sources":["../../../src/runtime/reporting/report-ai.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,iCAAiC,yBAAyB,CAAC;AACxE,eAAO,MAAM,mCAAmC,2BAA2B,CAAC;AAC5E,eAAO,MAAM,8BAA8B,wCAAwC,CAAC;AACpF,eAAO,MAAM,6BAA6B,8BAA8B,CAAC;AACzE,eAAO,MAAM,yBAAyB,kBAAkB,CAAC;AAEzD,QAAA,MAAM,aAAa,oHAST,CAAC;AASX,KAAK,mBAAmB,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAC;AAE1D,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,MAAM,EAAE,OAAO,8BAA8B,CAAC;IACvD,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,oBAAoB;IACnC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS;QAAE,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CACzD;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,MAAM,EAAE,OAAO,6BAA6B,CAAC;IACtD,QAAQ,CAAC,OAAO,EAAE;QAChB,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;QAC1B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;QACxB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;QAC/B,QAAQ,CAAC,QAAQ,EAAE,kBAAkB,CAAC;KACvC,CAAC;IACF,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,mBAAmB,EAAE,SAAS,oBAAoB,EAAE,CAAC,CAAC;CACjF;AAED,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACtD,QAAQ,CAAC,MAAM,EAAE,IAAI,CAAC,OAAO,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,UAAU,CAAC,KAAK,CAAC;IACzC,QAAQ,CAAC,cAAc,CAAC,EAAE,MAAM,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC,CAAC;IAC5D,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,MAAM,CAAC;CACtC;AAkCD,wBAAgB,2BAA2B,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAEpE;AAiLD,wBAAsB,cAAc,CAClC,OAAO,EAAE,qBAAqB,EAC9B,EAAE,GAAE,gBAAqE,EACzE,YAAY,GAAE,uBAA4B,GACzC,OAAO,CAAC,MAAM,CAAC,CAsGjB"}