@tea-agent/loop-agent 0.43.0-next.6 → 0.43.0-next.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 (84) hide show
  1. package/CHANGELOG.md +12 -1
  2. package/dist/build-stamp.json +3 -3
  3. package/dist/executors/dag-pi-executor.js +2 -0
  4. package/dist/worker/console/chat/browser-policy.js +143 -0
  5. package/dist/worker/console/chat/browser-routes.js +148 -0
  6. package/dist/worker/console/chat/routes.js +5 -0
  7. package/dist/worker/console/chat/scm-routes.js +25 -1
  8. package/dist/worker/console/chat/scm-service.js +30 -0
  9. package/dist/worker/console/chat/session-catalog.js +31 -0
  10. package/dist/worker/console/chat/session-mode-view.js +3 -3
  11. package/dist/worker/console/server.js +2 -28
  12. package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-BuyrlONK.js → abnfDiagram-N423BO3Z-CwAxHSAM.js} +1 -1
  13. package/dist/worker/console/static/assets/{arc-BvCl_wpi.js → arc-Bozf-oeF.js} +1 -1
  14. package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-BkBpBaRq.js → architectureDiagram-T3A2C74G-DEypbEQv.js} +1 -1
  15. package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-yve4Mcb_.js → blockDiagram-VBNYF7ZC-B1BQWCbE.js} +1 -1
  16. package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-9yLGboBx.js → c4Diagram-5PPSVZJV-B3u5-yZz.js} +1 -1
  17. package/dist/worker/console/static/assets/channel-JM-I_b0s.js +1 -0
  18. package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-BKP69b8r.js → chunk-2GRJ4B5K-DSUc2NTh.js} +1 -1
  19. package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-NWFRnXju.js → chunk-2Q5K7J3B-DZouMIvT.js} +1 -1
  20. package/dist/worker/console/static/assets/{chunk-5RXB4S5H-BiweqLEc.js → chunk-5RXB4S5H-B3bhB5hh.js} +1 -1
  21. package/dist/worker/console/static/assets/{chunk-5VM5RSS4-CP9GHmRY.js → chunk-5VM5RSS4-CZFP_BOz.js} +1 -1
  22. package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BiGDkBtj.js → chunk-6Q2QTUOP-DnE_wb-X.js} +1 -1
  23. package/dist/worker/console/static/assets/{chunk-GF5L2VYU-DkJ4ZjQS.js → chunk-GF5L2VYU-C2OfoiWm.js} +1 -1
  24. package/dist/worker/console/static/assets/{chunk-JWPE2WC7-B5jjn7zq.js → chunk-JWPE2WC7-BKUTL8mm.js} +1 -1
  25. package/dist/worker/console/static/assets/{chunk-KBJHAD2P-C6KoK9O0.js → chunk-KBJHAD2P-BT5oz0tg.js} +1 -1
  26. package/dist/worker/console/static/assets/{chunk-RYQCIY6F-BvNIfyn-.js → chunk-RYQCIY6F-D8vk-GJi.js} +1 -1
  27. package/dist/worker/console/static/assets/{chunk-XXDRQBXY-BZ33iX4W.js → chunk-XXDRQBXY-CkUIm3zu.js} +1 -1
  28. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-DuQQAYEg.js +1 -0
  29. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-DuQQAYEg.js +1 -0
  30. package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-CP8eIuZd.js → cose-bilkent-JH36ORCC-CO9QNHmR.js} +1 -1
  31. package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-DZECjpOe.js → cynefin-VYW2F7L2-s52EPl2Z.js} +1 -1
  32. package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-CvVJoFqf.js → cynefinDiagram-MW4NZA55-BHaseJfW.js} +1 -1
  33. package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-D_JTqdAn.js → dagre-VZM6K2ZE-CTVhRG_R.js} +1 -1
  34. package/dist/worker/console/static/assets/{diagram-7IWD3JNH-Db7AQ0z0.js → diagram-7IWD3JNH-B6pYeOMR.js} +1 -1
  35. package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-AZPVo5CZ.js → diagram-B4RE2ZJO-CXXRzw5j.js} +1 -1
  36. package/dist/worker/console/static/assets/{diagram-LBJQPF4R-BgXqI3E6.js → diagram-LBJQPF4R-BOeJHiLA.js} +1 -1
  37. package/dist/worker/console/static/assets/{diagram-Q27KOJAE-BYjFn3Ba.js → diagram-Q27KOJAE-DbEg6h_l.js} +1 -1
  38. package/dist/worker/console/static/assets/{diagram-UB23O5K3-B4rJgGGO.js → diagram-UB23O5K3-CjlEcbX6.js} +1 -1
  39. package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-C6XWZhpw.js → ebnfDiagram-BXEA7PRR-BcqMPbD_.js} +1 -1
  40. package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-1YdQRIQW.js → erDiagram-JOGREHBK-DWfRyHe5.js} +1 -1
  41. package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-l3a0AwN0.js → flowDiagram-UKHOOZJN-Bz7TeIc8.js} +1 -1
  42. package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-CQL96F2Z.js → ganttDiagram-PKOTCBZU-BD-JxYjU.js} +1 -1
  43. package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-BxCvafRb.js → gitGraphDiagram-DS77QQ5N-Cv16vMHK.js} +1 -1
  44. package/dist/worker/console/static/assets/index-B5H-giS2.js +468 -0
  45. package/dist/worker/console/static/assets/index-Bf7dxfm-.css +1 -0
  46. package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BUipIeDO.js → infoDiagram-6WML65LV-BlWO0HQQ.js} +1 -1
  47. package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-CRfomVMX.js → ishikawaDiagram-WSZJBQD7-C4mbsn97.js} +1 -1
  48. package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-_UFvyviX.js → journeyDiagram-NVQOT4AX-CBPvVKjw.js} +1 -1
  49. package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-CKIRoqKv.js → kanban-definition-27J2QSJJ-DPHLp54K.js} +1 -1
  50. package/dist/worker/console/static/assets/{linear-CjttJDCM.js → linear-CXx_9o6k.js} +1 -1
  51. package/dist/worker/console/static/assets/{mermaid.core-DPvHX155.js → mermaid.core-DU3IxMq9.js} +5 -5
  52. package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-Qmj-qwBe.js → mindmap-definition-FAOFIHXS-COm4a2ud.js} +1 -1
  53. package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-Auw6DRgq.js → pegDiagram-VL7TDLO6-Cbt7OA5d.js} +1 -1
  54. package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-CqMrfD4c.js → pieDiagram-7S7Q4E2Y-BiYV_4Wl.js} +1 -1
  55. package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-BAddeggH.js → quadrantDiagram-CIZ2JOQS-lg2zhvbp.js} +1 -1
  56. package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-DG1JuOu2.js → railroadDiagram-AXF67PYL-cBLvtf0p.js} +1 -1
  57. package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-DLYGMKlC.js → requirementDiagram-LRYGKXZP-BoekU3Bg.js} +1 -1
  58. package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-g68SbLM9.js → sankeyDiagram-W5VNT64P-D_DMZYga.js} +1 -1
  59. package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CmszLKv8.js → sequenceDiagram-SI44F4Z6-Lzmzn8lz.js} +1 -1
  60. package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-D2tEKUCj.js → sizeCapture-X5ZJPWSS-Cos3HpIe.js} +1 -1
  61. package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-Syc5E_Jf.js → stateDiagram-OKZ733FA-D-hFBGsx.js} +1 -1
  62. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-img0hVJ4.js +1 -0
  63. package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Ibn0IRCa.js → swimlanes-SLNWSIFB-BY95sCVI.js} +2 -2
  64. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-B4acZJvk.js +8 -0
  65. package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-2ZW9W3iS.js → timeline-definition-Z64GVDOM-D1iCgWHS.js} +1 -1
  66. package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-v50HsKUh.js → vennDiagram-T6HMQDX7-D9IYy4WK.js} +1 -1
  67. package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-DqCXEoDH.js → wardleyDiagram-T6FBY63Y-C9yJwO-R.js} +1 -1
  68. package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-vIP8Vo9d.js → xychartDiagram-ELKLHX3M-CC2llyou.js} +1 -1
  69. package/dist/worker/console/static/index.html +2 -2
  70. package/dist/worker/console/static-src/operator-chat/chat-link.js +94 -0
  71. package/dist/worker/console/static-src/operator-chat/useChatSessions.js +12 -15
  72. package/dist/worker/observe/static/router.js +1 -1
  73. package/dist/worker/observe/static/views/dag-inspector.js +7 -0
  74. package/dist/worker/observe/static/views/dag.js +2 -2
  75. package/dist/workflows/dag/frontend-implementation-contract.js +4 -0
  76. package/dist/workflows/dag/frontend-review-scopes.js +32 -10
  77. package/package.json +1 -1
  78. package/dist/worker/console/static/assets/channel-BRahIhjw.js +0 -1
  79. package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-GOC80mhq.js +0 -1
  80. package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-GOC80mhq.js +0 -1
  81. package/dist/worker/console/static/assets/index-4wCGsXuU.js +0 -465
  82. package/dist/worker/console/static/assets/index-CiF9WBoR.css +0 -1
  83. package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-CwWwuPI-.js +0 -1
  84. package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-A7fqemr6.js +0 -8
@@ -4,6 +4,11 @@ import path from "node:path";
4
4
  import { sha256OfCanonicalJson } from "../../task/contract/hash.js";
5
5
  import { readCommittedEvents } from "./frontend-typed-event-store.js";
6
6
  import { stageTypedEventFact, adoptTypedEventFact } from "./frontend-typed-event-transaction.js";
7
+ const invalidScope = (message) => Object.assign(new Error(`FRONTEND_REVIEW_SCOPE_INVALID: ${message}`), { code: "FRONTEND_REVIEW_SCOPE_INVALID" });
8
+ const isRecord = (value) => value !== null && typeof value === "object" && !Array.isArray(value);
9
+ const isArtifactReference = (value) => isRecord(value)
10
+ && typeof value.path === "string" && value.path.length > 0
11
+ && typeof value.sha256 === "string" && /^[a-f0-9]{64}$/.test(value.sha256);
7
12
  const hash = (text) => createHash("sha256").update(text).digest("hex");
8
13
  /** The section index is navigation; reconstruct coverage against the canonical source before using it. */
9
14
  export async function loadFrontendReviewScopes(runDir, phase, targetBytes) {
@@ -12,7 +17,7 @@ export async function loadFrontendReviewScopes(runDir, phase, targetBytes) {
12
17
  async function read(relative, expected) {
13
18
  const absolute = path.resolve(root, relative);
14
19
  if (!absolute.startsWith(root + path.sep) || (await lstat(absolute)).isSymbolicLink() || !(await realpath(absolute)).startsWith(root + path.sep))
15
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: artifact escaped run");
20
+ throw invalidScope("artifact escaped run");
16
21
  const text = await readFile(absolute, "utf8");
17
22
  const sha256 = hash(text);
18
23
  if (expected && sha256 !== expected)
@@ -30,45 +35,62 @@ export async function loadFrontendReviewScopes(runDir, phase, targetBytes) {
30
35
  throw error;
31
36
  }
32
37
  const index = JSON.parse(indexArtifact.text);
38
+ if (!isRecord(index) || !isArtifactReference(index.contract) || !Array.isArray(index.sections))
39
+ throw invalidScope("malformed contract index");
33
40
  const canonicalArtifact = await read(index.contract.path, index.contract.sha256);
34
41
  const canonical = JSON.parse(canonicalArtifact.text);
42
+ if (!isRecord(canonical))
43
+ throw invalidScope("canonical contract must be an object");
35
44
  const covered = new Map();
36
45
  const sections = [];
37
46
  const ids = new Set();
38
47
  for (const entry of index.sections) {
48
+ if (!isRecord(entry) || !isArtifactReference(entry) || !Array.isArray(entry.slices))
49
+ throw invalidScope("malformed section index entry");
39
50
  if (ids.has(entry.path))
40
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: duplicate section identity");
51
+ throw invalidScope("duplicate section identity");
41
52
  ids.add(entry.path);
42
53
  const section = await read(entry.path, entry.sha256);
43
54
  const payload = JSON.parse(section.text);
55
+ if (!isRecord(payload) || !Array.isArray(payload.slices) || !isRecord(payload.data))
56
+ throw invalidScope(`malformed section: ${entry.path}`);
44
57
  if (payload.contractSha256 !== canonicalArtifact.sha256 || sha256OfCanonicalJson(payload.slices) !== sha256OfCanonicalJson(entry.slices))
45
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: unbound section");
58
+ throw invalidScope("unbound section");
46
59
  for (const slice of payload.slices) {
60
+ if (!isRecord(slice) || typeof slice.field !== "string" || !Object.hasOwn(canonical, slice.field) || !Object.hasOwn(payload.data, slice.field))
61
+ throw invalidScope(`missing or invalid field reference in ${entry.path}: ${String(slice?.field)}`);
47
62
  const value = canonical[slice.field];
48
- const range = Array.isArray(value) ? value.slice(slice.start, slice.end) : value;
49
- if (sha256OfCanonicalJson(range) !== sha256OfCanonicalJson(payload.data[slice.field]))
50
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: section differs from canonical obligation");
51
63
  const positions = covered.get(slice.field) ?? new Set();
52
64
  if (Array.isArray(value)) {
53
65
  if (!Number.isInteger(slice.start) || !Number.isInteger(slice.end) || slice.start < 0 || slice.end < slice.start || slice.end > value.length || slice.total !== value.length)
54
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: invalid array coverage");
66
+ throw invalidScope("invalid array coverage");
67
+ if ((value.length === 0 && covered.has(slice.field)) || (value.length > 0 && slice.start === slice.end))
68
+ throw invalidScope(`empty or duplicate array coverage: ${slice.field}`);
55
69
  for (let i = slice.start; i < slice.end; i++) {
56
70
  if (positions.has(i))
57
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: overlapping coverage");
71
+ throw invalidScope("overlapping coverage");
58
72
  positions.add(i);
59
73
  }
60
74
  }
61
75
  else {
76
+ if (["start", "end", "total"].some(key => Object.hasOwn(slice, key)))
77
+ throw invalidScope(`scalar field has array range: ${slice.field}`);
62
78
  if (positions.size)
63
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: duplicate field");
79
+ throw invalidScope("duplicate field");
64
80
  positions.add(0);
65
81
  }
82
+ const range = Array.isArray(value) ? value.slice(slice.start, slice.end) : value;
83
+ if (sha256OfCanonicalJson(range) !== sha256OfCanonicalJson(payload.data[slice.field]))
84
+ throw invalidScope(`section differs from canonical obligation: ${slice.field}`);
66
85
  covered.set(slice.field, positions);
67
86
  }
87
+ const sectionFields = new Set(payload.slices.map(slice => slice.field));
88
+ if (Object.keys(payload.data).some(field => !sectionFields.has(field)))
89
+ throw invalidScope(`unindexed section data: ${entry.path}`);
68
90
  sections.push(section);
69
91
  }
70
92
  if (Object.keys(canonical).some(field => !covered.has(field) || covered.get(field).size !== (Array.isArray(canonical[field]) ? canonical[field].length : 1)))
71
- throw Error("FRONTEND_REVIEW_SCOPE_INVALID: canonical field coverage incomplete");
93
+ throw invalidScope("canonical field coverage incomplete");
72
94
  const scopes = Buffer.byteLength(canonicalArtifact.text) <= targetBytes ? [canonicalArtifact] : sections;
73
95
  if (phase === "review") {
74
96
  const context = await read("contracts/frontend-review-context.json");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.43.0-next.6",
3
+ "version": "0.43.0-next.8",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",
@@ -1 +0,0 @@
1
- import{ag as o,ah as n}from"./mermaid.core-DPvHX155.js";const t=(a,r)=>o.lang.round(n.parse(a)[r]);export{t as c};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-DkJ4ZjQS.js";import{_ as i}from"./mermaid.core-DPvHX155.js";import"./chunk-5VM5RSS4-CP9GHmRY.js";import"./chunk-XXDRQBXY-BZ33iX4W.js";import"./chunk-KBJHAD2P-C6KoK9O0.js";import"./chunk-2GRJ4B5K-BKP69b8r.js";import"./index-4wCGsXuU.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};
@@ -1 +0,0 @@
1
- import{s as a,c as s,a as e,C as t}from"./chunk-GF5L2VYU-DkJ4ZjQS.js";import{_ as i}from"./mermaid.core-DPvHX155.js";import"./chunk-5VM5RSS4-CP9GHmRY.js";import"./chunk-XXDRQBXY-BZ33iX4W.js";import"./chunk-KBJHAD2P-C6KoK9O0.js";import"./chunk-2GRJ4B5K-BKP69b8r.js";import"./index-4wCGsXuU.js";var n={parser:e,get db(){return new t},renderer:s,styles:a,init:i(r=>{r.class||(r.class={}),r.class.arrowMarkerAbsolute=r.arrowMarkerAbsolute},"init")};export{n as diagram};