@stigmer/runner 3.1.2 → 3.1.4

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 (127) hide show
  1. package/dist/.build-fingerprint +1 -1
  2. package/dist/activities/execute-cursor/attachment-resolver.d.ts +1 -1
  3. package/dist/activities/execute-cursor/attachment-resolver.js +1 -1
  4. package/dist/activities/execute-cursor/capture-flow.d.ts +29 -0
  5. package/dist/activities/execute-cursor/capture-flow.js +59 -0
  6. package/dist/activities/execute-cursor/capture-flow.js.map +1 -1
  7. package/dist/activities/execute-cursor/command-provenance.d.ts +11 -25
  8. package/dist/activities/execute-cursor/command-provenance.js +25 -115
  9. package/dist/activities/execute-cursor/command-provenance.js.map +1 -1
  10. package/dist/activities/execute-cursor/index.js +358 -557
  11. package/dist/activities/execute-cursor/index.js.map +1 -1
  12. package/dist/activities/execute-cursor/todo-tracker.d.ts +6 -1
  13. package/dist/activities/execute-cursor/todo-tracker.js +15 -43
  14. package/dist/activities/execute-cursor/todo-tracker.js.map +1 -1
  15. package/dist/activities/execute-cursor/turn-boundary.d.ts +108 -0
  16. package/dist/activities/execute-cursor/turn-boundary.js +163 -0
  17. package/dist/activities/execute-cursor/turn-boundary.js.map +1 -0
  18. package/dist/activities/execute-cursor/turn-stream.d.ts +141 -0
  19. package/dist/activities/execute-cursor/turn-stream.js +249 -0
  20. package/dist/activities/execute-cursor/turn-stream.js.map +1 -0
  21. package/dist/activities/execute-deep-agent/command-provenance.d.ts +61 -0
  22. package/dist/activities/execute-deep-agent/command-provenance.js +72 -0
  23. package/dist/activities/execute-deep-agent/command-provenance.js.map +1 -0
  24. package/dist/activities/execute-deep-agent/index.js +73 -4
  25. package/dist/activities/execute-deep-agent/index.js.map +1 -1
  26. package/dist/activities/execute-deep-agent/status-builder.js +8 -1
  27. package/dist/activities/execute-deep-agent/status-builder.js.map +1 -1
  28. package/dist/activities/execute-deep-agent/streaming-v3.js +6 -1
  29. package/dist/activities/execute-deep-agent/streaming-v3.js.map +1 -1
  30. package/dist/activities/execute-deep-agent/streaming.d.ts +7 -0
  31. package/dist/activities/execute-deep-agent/streaming.js +5 -1
  32. package/dist/activities/execute-deep-agent/streaming.js.map +1 -1
  33. package/dist/activities/execute-deep-agent/v3-status-builder.js +12 -1
  34. package/dist/activities/execute-deep-agent/v3-status-builder.js.map +1 -1
  35. package/dist/otel.js +10 -0
  36. package/dist/otel.js.map +1 -1
  37. package/dist/shared/filereview/capture.d.ts +18 -1
  38. package/dist/shared/filereview/capture.js +105 -28
  39. package/dist/shared/filereview/capture.js.map +1 -1
  40. package/dist/shared/filereview/cas-progress.d.ts +63 -0
  41. package/dist/shared/filereview/cas-progress.js +128 -0
  42. package/dist/shared/filereview/cas-progress.js.map +1 -0
  43. package/dist/shared/filereview/cas-substrate.d.ts +38 -0
  44. package/dist/shared/filereview/cas-substrate.js +48 -15
  45. package/dist/shared/filereview/cas-substrate.js.map +1 -1
  46. package/dist/shared/filereview/command-provenance.d.ts +93 -0
  47. package/dist/shared/filereview/command-provenance.js +132 -0
  48. package/dist/shared/filereview/command-provenance.js.map +1 -0
  49. package/dist/shared/filereview/events.d.ts +16 -0
  50. package/dist/shared/filereview/events.js +37 -0
  51. package/dist/shared/filereview/events.js.map +1 -1
  52. package/dist/shared/filereview/git-substrate.d.ts +48 -0
  53. package/dist/shared/filereview/git-substrate.js +78 -0
  54. package/dist/shared/filereview/git-substrate.js.map +1 -1
  55. package/dist/shared/filereview/index.d.ts +5 -2
  56. package/dist/shared/filereview/index.js +5 -2
  57. package/dist/shared/filereview/index.js.map +1 -1
  58. package/dist/shared/filereview/line-counts.d.ts +48 -0
  59. package/dist/shared/filereview/line-counts.js +72 -0
  60. package/dist/shared/filereview/line-counts.js.map +1 -0
  61. package/dist/shared/filereview/progress.d.ts +167 -0
  62. package/dist/shared/filereview/progress.js +196 -0
  63. package/dist/shared/filereview/progress.js.map +1 -0
  64. package/dist/shared/implement-plan-prompt.d.ts +6 -4
  65. package/dist/shared/implement-plan-prompt.js +38 -6
  66. package/dist/shared/implement-plan-prompt.js.map +1 -1
  67. package/dist/shared/plan-artifact.d.ts +59 -11
  68. package/dist/shared/plan-artifact.js +144 -16
  69. package/dist/shared/plan-artifact.js.map +1 -1
  70. package/dist/shared/plan-mode-prompt.d.ts +15 -4
  71. package/dist/shared/plan-mode-prompt.js +28 -5
  72. package/dist/shared/plan-mode-prompt.js.map +1 -1
  73. package/dist/shared/todos.d.ts +56 -0
  74. package/dist/shared/todos.js +98 -0
  75. package/dist/shared/todos.js.map +1 -0
  76. package/dist/shared/tool-row.d.ts +16 -0
  77. package/dist/shared/tool-row.js +31 -0
  78. package/dist/shared/tool-row.js.map +1 -1
  79. package/package.json +3 -2
  80. package/src/__tests__/otel-turn-span.test.ts +61 -0
  81. package/src/activities/execute-cursor/__tests__/build-prompt.test.ts +7 -0
  82. package/src/activities/execute-cursor/__tests__/delta-enricher.test.ts +68 -0
  83. package/src/activities/execute-cursor/__tests__/progress-substrate.test.ts +169 -0
  84. package/src/activities/execute-cursor/__tests__/turn-boundary.test.ts +280 -0
  85. package/src/activities/execute-cursor/__tests__/turn-stream.test.ts +349 -0
  86. package/src/activities/execute-cursor/attachment-resolver.ts +1 -1
  87. package/src/activities/execute-cursor/capture-flow.ts +78 -0
  88. package/src/activities/execute-cursor/command-provenance.ts +25 -120
  89. package/src/activities/execute-cursor/index.ts +419 -602
  90. package/src/activities/execute-cursor/todo-tracker.ts +17 -59
  91. package/src/activities/execute-cursor/turn-boundary.ts +274 -0
  92. package/src/activities/execute-cursor/turn-stream.ts +418 -0
  93. package/src/activities/execute-deep-agent/__tests__/command-provenance.test.ts +252 -0
  94. package/src/activities/execute-deep-agent/__tests__/prompt-builder.test.ts +11 -0
  95. package/src/activities/execute-deep-agent/__tests__/status-builder.test.ts +78 -0
  96. package/src/activities/execute-deep-agent/__tests__/v3-status-builder.test.ts +105 -1
  97. package/src/activities/execute-deep-agent/command-provenance.ts +102 -0
  98. package/src/activities/execute-deep-agent/index.ts +91 -4
  99. package/src/activities/execute-deep-agent/status-builder.ts +9 -0
  100. package/src/activities/execute-deep-agent/streaming-v3.ts +6 -1
  101. package/src/activities/execute-deep-agent/streaming.ts +12 -1
  102. package/src/activities/execute-deep-agent/v3-status-builder.ts +13 -0
  103. package/src/otel.ts +8 -0
  104. package/src/shared/__tests__/implement-plan-prompt.test.ts +40 -2
  105. package/src/shared/__tests__/plan-artifact.test.ts +142 -9
  106. package/src/shared/__tests__/todos.test.ts +216 -0
  107. package/src/shared/filereview/__tests__/capture.test.ts +182 -1
  108. package/src/shared/filereview/__tests__/cas-progress.test.ts +228 -0
  109. package/src/shared/filereview/__tests__/cas-substrate.test.ts +100 -0
  110. package/src/shared/filereview/__tests__/command-provenance.test.ts +252 -0
  111. package/src/shared/filereview/__tests__/events.test.ts +105 -0
  112. package/src/shared/filereview/__tests__/line-counts.test.ts +73 -0
  113. package/src/shared/filereview/__tests__/progress.test.ts +338 -0
  114. package/src/shared/filereview/capture.ts +134 -30
  115. package/src/shared/filereview/cas-progress.ts +170 -0
  116. package/src/shared/filereview/cas-substrate.ts +79 -18
  117. package/src/shared/filereview/command-provenance.ts +180 -0
  118. package/src/shared/filereview/events.ts +50 -0
  119. package/src/shared/filereview/git-substrate.ts +114 -0
  120. package/src/shared/filereview/index.ts +36 -1
  121. package/src/shared/filereview/line-counts.ts +83 -0
  122. package/src/shared/filereview/progress.ts +310 -0
  123. package/src/shared/implement-plan-prompt.ts +39 -8
  124. package/src/shared/plan-artifact.ts +152 -16
  125. package/src/shared/plan-mode-prompt.ts +28 -5
  126. package/src/shared/todos.ts +126 -0
  127. package/src/shared/tool-row.ts +34 -0
package/dist/otel.js CHANGED
@@ -100,14 +100,24 @@ export async function startCursorTurnSpan(attrs) {
100
100
  [ATTR_SESSION_ID]: attrs.sessionId,
101
101
  },
102
102
  });
103
+ // Guard against a double end / a late setTokens: the turn span is ended from
104
+ // the activity's finally (finishTurnTelemetry), and OTel warns when a span is
105
+ // ended twice or mutated after end. Making this a no-op keeps the caller free
106
+ // to end idempotently on every exit path.
107
+ let ended = false;
103
108
  return {
104
109
  setTokens(input, output) {
110
+ if (ended)
111
+ return;
105
112
  if (input)
106
113
  span.setAttribute(ATTR_LLM_INPUT_TOKENS, input);
107
114
  if (output)
108
115
  span.setAttribute(ATTR_LLM_OUTPUT_TOKENS, output);
109
116
  },
110
117
  end() {
118
+ if (ended)
119
+ return;
120
+ ended = true;
111
121
  span.end();
112
122
  },
113
123
  };
package/dist/otel.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAC7E,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,+BAA+B,CAAC,CAAC;IAC7E,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,yCAAyC,CAAC,CAAC;IACtF,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC5E,MAAM,EAAE,yBAAyB,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,GAAG,MAAM,MAAM,CAAC,qBAAqB,CAAC,CAAC;IACrH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,IAAI,iBAAiB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC1D,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC;QACtC,QAAQ;QACR,cAAc,EAAE,CAAC,IAAI,kBAAkB,CAAC,QAAQ,CAAC,CAAC;KACnD,CAAC,CAAC;IACH,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAEpB,OAAO,CAAC,WAAW,CAAC,mBAAmB,CACrC,IAAI,mBAAmB,CAAC;QACtB,WAAW,EAAE,CAAC,IAAI,yBAAyB,EAAE,EAAE,IAAI,oBAAoB,EAAE,CAAC;KAC3E,CAAC,CACH,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,aAAa,WAAW,GAAG,CAAC,CAAC;IAEnF,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,WAAmB;IACnD,MAAM,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC;IACzD,IAAI,CAAC,QAAQ,EAAE,CAAC;QACd,OAAO,IAAI,CAAC;IACd,CAAC;IAED,MAAM,EAAE,aAAa,EAAE,6BAA6B,EAAE,GAAG,MAAM,MAAM,CAAC,4BAA4B,CAAC,CAAC;IACpG,MAAM,EAAE,kBAAkB,EAAE,GAAG,MAAM,MAAM,CAAC,2CAA2C,CAAC,CAAC;IACzF,MAAM,EAAE,sBAAsB,EAAE,GAAG,MAAM,MAAM,CAAC,0BAA0B,CAAC,CAAC;IAC5E,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;IAEnD,MAAM,QAAQ,GAAG,sBAAsB,CAAC,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;IACzE,MAAM,QAAQ,GAAG,IAAI,kBAAkB,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,IAAI,6BAA6B,CAAC;QAC/C,QAAQ;QACR,oBAAoB,EAAE,MAAM;KAC7B,CAAC,CAAC;IACH,MAAM,QAAQ,GAAG,IAAI,aAAa,CAAC,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;IAEpE,OAAO,CAAC,OAAO,CAAC,sBAAsB,CAAC,QAAQ,CAAC,CAAC;IAEjD,OAAO,CAAC,GAAG,CAAC,kCAAkC,QAAQ,aAAa,WAAW,GAAG,CAAC,CAAC;IAEnF,OAAO,KAAK,IAAI,EAAE;QAChB,MAAM,QAAQ,CAAC,QAAQ,EAAE,CAAC;IAC5B,CAAC,CAAC;AACJ,CAAC;AAED,0EAA0E;AAC1E,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AACtD,MAAM,CAAC,MAAM,mBAAmB,GAAG,uBAAuB,CAAC;AAC3D,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,kBAAkB,CAAC;AAChD,MAAM,CAAC,MAAM,aAAa,GAAG,uBAAuB,CAAC;AACrD,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAChE,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAE1D,uBAAuB;AACvB,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACxD,MAAM,CAAC,MAAM,cAAc,GAAG,mBAAmB,CAAC;AAClD,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAChE,MAAM,CAAC,MAAM,qBAAqB,GAAG,0BAA0B,CAAC;AAChE,MAAM,CAAC,MAAM,sBAAsB,GAAG,2BAA2B,CAAC;AAElE,kCAAkC;AAClC,MAAM,CAAC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC;AACtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,sBAAsB,CAAC;AACxD,MAAM,CAAC,MAAM,eAAe,GAAG,oBAAoB,CAAC;AACpD,MAAM,CAAC,MAAM,YAAY,GAAG,iBAAiB,CAAC;AAE9C,uBAAuB;AACvB,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,CAAC,MAAM,oBAAoB,GAAG,yBAAyB,CAAC;AAC9D,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAE1D,4BAA4B;AAC5B,MAAM,CAAC,MAAM,0BAA0B,GAAG,+BAA+B,CAAC;AAC1E,MAAM,CAAC,MAAM,kBAAkB,GAAG,uBAAuB,CAAC;AAC1D,MAAM,CAAC,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAC3D,MAAM,CAAC,MAAM,cAAc,GAAG,4BAA4B,CAAC;AAE3D,wDAAwD;AACxD,MAAM,CAAC,MAAM,oBAAoB,GAAG,sBAAsB,CAAC;AAC3D,MAAM,CAAC,MAAM,kBAAkB,GAAG,oBAAoB,CAAC;AACvD,MAAM,CAAC,MAAM,cAAc,GAAG,gBAAgB,CAAC;AAE/C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,KAIzC;IACC,MAAM,IAAI,GAAG,EAAE,SAAS,KAAI,CAAC,EAAE,GAAG,KAAI,CAAC,EAAE,CAAC;IAC1C,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAC;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC,gBAAgB,EAAE;YAC9C,UAAU,EAAE;gBACV,CAAC,iBAAiB,CAAC,EAAE,KAAK,CAAC,KAAK;gBAChC,CAAC,gBAAgB,CAAC,EAAE,KAAK,CAAC,IAAI;gBAC9B,CAAC,eAAe,CAAC,EAAE,KAAK,CAAC,SAAS;aACnC;SACF,CAAC,CAAC;QACH,OAAO;YACL,SAAS,CAAC,KAAa,EAAE,MAAc;gBACrC,IAAI,KAAK;oBAAE,IAAI,CAAC,YAAY,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;gBAC3D,IAAI,MAAM;oBAAE,IAAI,CAAC,YAAY,CAAC,sBAAsB,EAAE,MAAM,CAAC,CAAC;YAChE,CAAC;YACD,GAAG;gBACD,IAAI,CAAC,GAAG,EAAE,CAAC;YACb,CAAC;SACF,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,IAMvC;IACC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,gBAAgB,CAAC,CAAC;QAEzD,MAAM,KAAK,GAAG;YACZ,CAAC,iBAAiB,CAAC,EAAE,IAAI,CAAC,KAAK;YAC/B,CAAC,gBAAgB,CAAC,EAAE,IAAI,CAAC,IAAI;SAC9B,CAAC;QAEF,KAAK,CAAC,eAAe,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;aAC/D,MAAM,CAAC,IAAI,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;QAClC,KAAK,CAAC,aAAa,CAAC,wBAAwB,CAAC;aAC1C,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;QAEjB,IAAI,IAAI,CAAC,WAAW,EAAE,CAAC;YACrB,KAAK,CAAC,aAAa,CAAC,0BAA0B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBACjE,GAAG,CAAC,IAAI,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,IAAI,CAAC,YAAY,EAAE,CAAC;YACtB,KAAK,CAAC,aAAa,CAAC,2BAA2B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;iBAClE,GAAG,CAAC,IAAI,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,KAA6B;IAC5D,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,oBAAoB,CAAC,CAAC;QACnD,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC;QACrC,IAAI,GAAG,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,WAAW,CAAC,aAAa,EAAE,CAAC;QACrF,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,EAAE,CAAC;gBACN,GAAG,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;YACtC,CAAC;QACH,CAAC;QACD,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,CAAC;QACxD,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;IACzC,CAAC;IAAC,MAAM,CAAC;QACP,2CAA2C;IAC7C,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"otel.js","sourceRoot":"","sources":["../src/otel.ts"],"names":[],"mappings":"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"}
@@ -18,7 +18,7 @@
18
18
  * `${changeSetId}:${pathAfter||pathBefore}` so the resume can map a per-file
19
19
  * decision back to its path without depending on any other identity.
20
20
  */
21
- import { FileCaptureClass } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
21
+ import { FileCaptureClass, FileChangeKind, FileChangeType } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
22
22
  import type { AgentExecutionStatus } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/api_pb";
23
23
  import type { FileChangeSet, TurnCommandProvenance } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/filereview_pb";
24
24
  import { type GitSubstrateChange as GitCapturedChange } from "./git-substrate.js";
@@ -200,3 +200,20 @@ export declare function applyCaptureDecisions(opts: {
200
200
  */
201
201
  readonly gitWorkspace?: boolean;
202
202
  }): Promise<CaptureResumeResult>;
203
+ /**
204
+ * Split a turn's git-tracked changes by the secret gate: a secret-like tracked
205
+ * path (a committed `credentials.json`, `.env.example`, `*.tfvars`, ...) goes to
206
+ * `secret` (authored content-less via {@link trackedSecretChangeInput}); every
207
+ * other tracked change stays in `safe` (its diff is captured normally). Pure and
208
+ * exported for direct unit testing. Keyed on the same {@link isSecretLikePath}
209
+ * classifier the CAS/gitignored path uses ({@link partitionIgnoredPathsBySecret}
210
+ * in secret-paths.ts), so a path is classified identically everywhere. NOTE: the
211
+ * classifier is path-based (DD-12 D2), so a rename to an innocuous name defeats
212
+ * it — an intentional, cross-substrate limitation, not introduced here.
213
+ */
214
+ export declare function partitionGitChangesBySecret(changes: readonly GitCapturedChange[]): {
215
+ readonly safe: readonly GitCapturedChange[];
216
+ readonly secret: readonly GitCapturedChange[];
217
+ };
218
+ /** Map the git capture kind to the file-review {@link FileChangeKind}. */
219
+ export declare function toFileChangeKind(changeType: FileChangeType): FileChangeKind;
@@ -25,6 +25,7 @@ import { utcTimestamp } from "../status.js";
25
25
  import { appendFileReviewEvents, buildBaselineCapturedEvent, buildCandidateCapturedEvent, buildCapturedFileChange, buildFailedEvent, buildReconciledEvent, contentSha256, } from "./events.js";
26
26
  import { applyApprovedPaths, baselineRef, captureChangeSet, captureRef, dropCaptureRefs, recomputeChangeSet, restoreToBaseline, snapshotApproved, snapshotBaseline, } from "./git-substrate.js";
27
27
  import { applyCasApproved, loadCasManifest, restoreCasToBaseline, snapshotCasChangeSet, } from "./cas-substrate.js";
28
+ import { isSecretLikePath } from "./secret-paths.js";
28
29
  /**
29
30
  * Whether a turn runs in apply-then-review CAPTURE mode (file edits flow and are
30
31
  * reviewed post-hoc) rather than the classic pre-write DENY-GATE. Shared by BOTH
@@ -111,20 +112,38 @@ export async function captureCandidateToLedger(opts) {
111
112
  casRef = snap.ref;
112
113
  }
113
114
  const unreviewable = unreviewablePaths ?? [];
115
+ // Secret handling is three-way across the substrates, and this is the last of
116
+ // the three (the other two happen upstream at the harness gate):
117
+ // 1. A gitignored secret WRITE never flows — hard-blocked at the gate /
118
+ // deny-gate (DD-12/DD-30). It arrives here only as a path in
119
+ // `unreviewablePaths` (recorded by the gate), authored content-less below.
120
+ // 2. A gitignored secret that flowed under the global bypass is withheld from
121
+ // CAS by `partitionIgnoredPathsBySecret` (secret-paths.ts), so its bytes
122
+ // never reach `casCaptures`.
123
+ // 3. A git-TRACKED secret DID flow (the capture-mode gate allows tracked
124
+ // mutations with no secret check) and is present in `gitChanges` with real
125
+ // bytes. We split it out here and author it content-less, so its content
126
+ // never reaches the ledger. Unlike a gitignored secret it HAS a reversible
127
+ // substrate (the git refs), so it is withheld-and-reverted rather than
128
+ // never-applied — same never-persisted guarantee, appropriate mechanism.
129
+ const { safe: safeGitChanges, secret: secretGitChanges } = partitionGitChangesBySecret(gitChanges);
114
130
  // A turn that changed nothing (no tracked/ignored change and no blocked path)
115
- // authors no event.
131
+ // authors no event. A secret-only tracked turn is NOT a no-op — its file is in
132
+ // `gitChanges`, so the guard below is false and it authors a blocked entry.
116
133
  if (gitChanges.length === 0 && casFiles.length === 0 && unreviewable.length === 0) {
117
134
  return gitChanges;
118
135
  }
119
- // One combined change set: git-tracked (inline bodies) + CAS (blob refs) +
120
- // secret-blocked (content-less, DIFF_UNREVIEWABLE). The aggregate digest folds
121
- // all (buildCandidateCapturedEvent sorts by file digest), so the reviewed diff
122
- // and its identity span every substrate. deriveDiffCompleteness then rolls the
123
- // per-file signals up three ways: any content-less (non-binary) entry forces
124
- // PARTIAL_BLOCKED; a set blocked only by binaries is BINARY_SUMMARY_ONLY
125
- // (keepable in one acknowledged action); else COMPLETE.
136
+ // One combined change set: git-tracked (inline bodies) + git-tracked-secret
137
+ // (content-less) + CAS (blob refs) + gitignored-secret-blocked (content-less).
138
+ // The aggregate digest folds all (buildCandidateCapturedEvent sorts by file
139
+ // digest), so the reviewed diff and its identity span every substrate.
140
+ // deriveDiffCompleteness then rolls the per-file signals up three ways: any
141
+ // content-less (non-binary) entry forces PARTIAL_BLOCKED; a set blocked only by
142
+ // binaries is BINARY_SUMMARY_ONLY (keepable in one acknowledged action); else
143
+ // COMPLETE.
126
144
  const captured = [
127
- ...gitChanges.map((c) => buildCapturedFileChange(toCapturedChangeInput(changeSetId, c))),
145
+ ...safeGitChanges.map((c) => buildCapturedFileChange(toCapturedChangeInput(changeSetId, c))),
146
+ ...secretGitChanges.map((c) => buildCapturedFileChange(trackedSecretChangeInput(changeSetId, c))),
128
147
  ...casFiles.map((f) => buildCapturedFileChange(casToCapturedChangeInput(changeSetId, f))),
129
148
  ...unreviewable.map((p) => buildCapturedFileChange(unreviewableChangeInput(changeSetId, p, unreviewableCaptureClass))),
130
149
  ];
@@ -405,7 +424,9 @@ function candidateCasRef(changeSet) {
405
424
  * after bodies are carried as blob REFS (already offloaded to artifact storage
406
425
  * by the CAS substrate), never re-inlined — so the CANDIDATE event stays small
407
426
  * and the bytes are stored exactly once. Enforcement digests come from the blob
408
- * content addresses, identical in form to the git path.
427
+ * content addresses, identical in form to the git path. The display line counts
428
+ * ride along explicitly — a ref side has no inline text for the producer to
429
+ * count, so the substrate's capture-time counts are the only honest source.
409
430
  */
410
431
  function casToCapturedChangeInput(changeSetId, file) {
411
432
  return {
@@ -414,6 +435,7 @@ function casToCapturedChangeInput(changeSetId, file) {
414
435
  pathAfter: file.pathAfter,
415
436
  kind: file.kind,
416
437
  captureClass: file.captureClass,
438
+ lineCounts: file.lineCounts,
417
439
  before: file.before
418
440
  ? {
419
441
  kind: "ref",
@@ -436,32 +458,87 @@ function casToCapturedChangeInput(changeSetId, file) {
436
458
  };
437
459
  }
438
460
  /**
439
- * Map a secret-blocked gitignored path to a content-less producer input (design
440
- * doc 12, DD-E). The bytes are deliberately never captured, so both sides are
441
- * absent (empty enforcement digests) and `diffComplete=false`. Being non-binary
442
- * incomplete with no keepable bytes, it forces the change set to PARTIAL_BLOCKED
443
- * (never BINARY_SUMMARY_ONLY) — approval is blocked and the path is surfaced
444
- * honestly, while its CONTENT never enters the ledger or storage. `blockedReason` records
445
- * the honest cause (SECRET_WITHHELD) so the review UI can say *why* rather than
446
- * showing a cause-agnostic "unavailable" (doc 15). Kind is MODIFY: the write was
447
- * blocked before it ran, so create-vs-modify is unknown and irrelevant (nothing
448
- * is ever applied or reconciled for this entry). `captureClass` is the turn's CAS
449
- * substrate class (GIT_IGNORED_CAPTURED | NON_GIT_CAS) so the blocked path is
450
- * labeled with its true provenance.
461
+ * The single content-less `SECRET_WITHHELD` producer input the one shape every
462
+ * secret-blocked change (gitignored OR git-tracked) is authored with, so the two
463
+ * producers can never drift (a divergence in `diffComplete`/`blockedReason` would
464
+ * make the backend gate treat one kind of secret differently from the other).
465
+ *
466
+ * Both sides are absent (empty enforcement digests) and `diffComplete=false`.
467
+ * Being non-binary incomplete with no keepable bytes, it forces the change set to
468
+ * PARTIAL_BLOCKED (never BINARY_SUMMARY_ONLY) approval is blocked and the path
469
+ * is surfaced honestly, while its CONTENT never enters the ledger or storage.
470
+ * `blockedReason=SECRET_WITHHELD` records the honest cause so the review UI can say
471
+ * *why* rather than a cause-agnostic "unavailable" (doc 15). Callers supply the
472
+ * id / paths / kind / captureClass so each producer keeps its own honest identity.
451
473
  */
452
- function unreviewableChangeInput(changeSetId, path, captureClass) {
474
+ function secretWithheldChangeInput(id, pathBefore, pathAfter, kind, captureClass) {
453
475
  return {
454
- id: `${changeSetId}:${path}`,
455
- pathBefore: path,
456
- pathAfter: path,
457
- kind: FileChangeKind.MODIFY,
476
+ id,
477
+ pathBefore,
478
+ pathAfter,
479
+ kind,
458
480
  captureClass,
459
481
  diffComplete: false,
460
482
  blockedReason: FileReviewBlockReason.SECRET_WITHHELD,
461
483
  };
462
484
  }
485
+ /**
486
+ * Map a secret-blocked GITIGNORED path (the write never flowed — hard-blocked at
487
+ * the harness gate, design doc 12 / DD-E) to a content-less entry. The write was
488
+ * blocked before it ran, so create-vs-modify is unknown and irrelevant (nothing
489
+ * is ever applied or reconciled for this entry) — kind is MODIFY. `captureClass`
490
+ * is the turn's CAS substrate class (GIT_IGNORED_CAPTURED | NON_GIT_CAS).
491
+ */
492
+ function unreviewableChangeInput(changeSetId, path, captureClass) {
493
+ return secretWithheldChangeInput(`${changeSetId}:${path}`, path, path, FileChangeKind.MODIFY, captureClass);
494
+ }
495
+ /**
496
+ * Map a secret-like GIT-TRACKED change to a content-less entry (DD-26 follow-up
497
+ * #3). Unlike a gitignored secret, a tracked secret write actually FLOWED (the
498
+ * capture-mode gate allows tracked mutations), so it is present in the git diff
499
+ * with real bytes — which must never be persisted into the ledger. We author it
500
+ * content-less here so its CONTENT never reaches the ledger / Temporal history /
501
+ * storage, while the honest kind + paths (a CREATE/MODIFY/DELETE, mirroring
502
+ * {@link toCapturedChangeInput}'s id/path derivation so the resume reconcile
503
+ * lookup matches) and `GIT_TRACKED` provenance are preserved. It is discard-only
504
+ * (PARTIAL_BLOCKED): on resume it can only be rejected, and the git substrate
505
+ * reverts it byte-exact from the baseline ref (the reversible substrate a
506
+ * gitignored secret lacks — so "withhold + revert" upholds never-persisted here
507
+ * without the gate hard-block). A DELETE is handled here too: the git diff
508
+ * resurrects the deleted file's baseline (secret) bytes as the `before` side, a
509
+ * leak only this seam can withhold (the gate sees no content for a delete).
510
+ */
511
+ function trackedSecretChangeInput(changeSetId, change) {
512
+ const isCreate = change.changeType === FileChangeType.CREATE;
513
+ const isDelete = change.changeType === FileChangeType.DELETE;
514
+ const pathBefore = isCreate ? "" : change.path;
515
+ const pathAfter = isDelete ? "" : change.path;
516
+ return secretWithheldChangeInput(`${changeSetId}:${pathAfter || pathBefore}`, pathBefore, pathAfter, toFileChangeKind(change.changeType), FileCaptureClass.GIT_TRACKED);
517
+ }
518
+ /**
519
+ * Split a turn's git-tracked changes by the secret gate: a secret-like tracked
520
+ * path (a committed `credentials.json`, `.env.example`, `*.tfvars`, ...) goes to
521
+ * `secret` (authored content-less via {@link trackedSecretChangeInput}); every
522
+ * other tracked change stays in `safe` (its diff is captured normally). Pure and
523
+ * exported for direct unit testing. Keyed on the same {@link isSecretLikePath}
524
+ * classifier the CAS/gitignored path uses ({@link partitionIgnoredPathsBySecret}
525
+ * in secret-paths.ts), so a path is classified identically everywhere. NOTE: the
526
+ * classifier is path-based (DD-12 D2), so a rename to an innocuous name defeats
527
+ * it — an intentional, cross-substrate limitation, not introduced here.
528
+ */
529
+ export function partitionGitChangesBySecret(changes) {
530
+ const safe = [];
531
+ const secret = [];
532
+ for (const change of changes) {
533
+ if (isSecretLikePath(change.path))
534
+ secret.push(change);
535
+ else
536
+ safe.push(change);
537
+ }
538
+ return { safe, secret };
539
+ }
463
540
  /** Map the git capture kind to the file-review {@link FileChangeKind}. */
464
- function toFileChangeKind(changeType) {
541
+ export function toFileChangeKind(changeType) {
465
542
  switch (changeType) {
466
543
  case FileChangeType.CREATE:
467
544
  return FileChangeKind.ADD;
@@ -1 +1 @@
1
- {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/shared/filereview/capture.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"capture.js","sourceRoot":"","sources":["../../../src/shared/filereview/capture.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ /**
2
+ * Mid-run progress substrate for the CAS (content-addressed) domain — the
3
+ * non-git and gitignored half of DD-33. The git substrate ({@link ./progress.js}
4
+ * `createGitProgressSubstrate`) covers git-tracked changes cheaply via
5
+ * `--numstat`; this covers the paths git cannot see, sourced from the same
6
+ * per-turn observer the turn-boundary CAS capture reads:
7
+ * - a non-git workspace: EVERY tool-mediated write (the whole change set), and
8
+ * - a git tree's gitignored writes (the CAS half of a HYBRID turn).
9
+ *
10
+ * COST MODEL (why this is not as cheap as git)
11
+ * --------------------------------------------
12
+ * `git --numstat` yields exact `+N −M` with zero byte reads; CAS has no such free
13
+ * lunch — kind, no-op exclusion, and counts all need the after-bytes. So we bound
14
+ * the work: only the sorted read-PREFIX (up to {@link PROGRESS_MAX_ENTRIES}) has
15
+ * its after-bytes read and counted; the tail contributes to `totalFilesChanged`
16
+ * (the honest count) only. `files_changed` is therefore net-exact for a normal
17
+ * turn (≤ the budget) and an upper bound beyond it — matching git where git is
18
+ * free, diverging only where the substrate cannot be. A `size+mtime` signature
19
+ * (the stats are collected anyway) short-circuits an unchanged capture.
20
+ *
21
+ * CONSISTENCY & SECRET SAFETY
22
+ * ---------------------------
23
+ * Counts come from {@link classifyCasChange} — the SAME classifier the reviewed
24
+ * set uses — so the strip and the change set never disagree. Secret-like paths
25
+ * are excluded up front via {@link partitionIgnoredPathsBySecret} (and zeroed
26
+ * again in `buildFileChangeProgress` as a backstop); no file bodies are ever
27
+ * carried on the wire. Only tool-mediated writes are observed, exactly the scope
28
+ * of the non-git / HYBRID turn-boundary capture — no new divergence.
29
+ *
30
+ * @since File-Change HITL Redesign (non-git + hybrid mid-run progress / DD-33)
31
+ */
32
+ import { type ProgressSubstrate } from "./progress.js";
33
+ /**
34
+ * A snapshot of the turn's CAS-observed paths, read on each capture:
35
+ * - `before`: first-touched paths' pre-turn bytes (`null` = the path did not
36
+ * exist before → an ADD). The KEYS are the touched-path set.
37
+ * - `blockedSecretPaths`: paths the gate hard-blocked as secret-like — excluded
38
+ * from capture.
39
+ *
40
+ * Deep-agent supplies a synchronous copy of its live `CasCaptureObserver`; Cursor
41
+ * supplies a reader over the hook's on-disk sidecar. The reader MUST return an
42
+ * atomic snapshot (copy the live map before any await) so a concurrent sub-agent
43
+ * write cannot mutate it mid-capture.
44
+ */
45
+ export interface CasTouchedSnapshot {
46
+ readonly before: ReadonlyMap<string, Uint8Array | null>;
47
+ readonly blockedSecretPaths: ReadonlySet<string>;
48
+ }
49
+ /** Produces a {@link CasTouchedSnapshot} for one capture. */
50
+ export type CasTouchedReader = () => CasTouchedSnapshot | Promise<CasTouchedSnapshot>;
51
+ /**
52
+ * The CAS progress substrate. Reads the touched set on each capture, computes
53
+ * kind + `+N −M` for the bounded read-prefix via {@link classifyCasChange}, and
54
+ * reports `totalFilesChanged` over the full capturable set. Owns a `size+mtime`
55
+ * signature so an unchanged capture returns `changed:false` (the cached delta is
56
+ * reused, letting the hybrid still merge it with a changed git slice).
57
+ */
58
+ export declare function createCasProgressSubstrate(opts: {
59
+ readonly workspaceRoot: string;
60
+ readonly read: CasTouchedReader;
61
+ /** Read budget / display cap; defaults to {@link PROGRESS_MAX_ENTRIES}. Injectable for tests. */
62
+ readonly maxEntries?: number;
63
+ }): ProgressSubstrate;
@@ -0,0 +1,128 @@
1
+ /**
2
+ * Mid-run progress substrate for the CAS (content-addressed) domain — the
3
+ * non-git and gitignored half of DD-33. The git substrate ({@link ./progress.js}
4
+ * `createGitProgressSubstrate`) covers git-tracked changes cheaply via
5
+ * `--numstat`; this covers the paths git cannot see, sourced from the same
6
+ * per-turn observer the turn-boundary CAS capture reads:
7
+ * - a non-git workspace: EVERY tool-mediated write (the whole change set), and
8
+ * - a git tree's gitignored writes (the CAS half of a HYBRID turn).
9
+ *
10
+ * COST MODEL (why this is not as cheap as git)
11
+ * --------------------------------------------
12
+ * `git --numstat` yields exact `+N −M` with zero byte reads; CAS has no such free
13
+ * lunch — kind, no-op exclusion, and counts all need the after-bytes. So we bound
14
+ * the work: only the sorted read-PREFIX (up to {@link PROGRESS_MAX_ENTRIES}) has
15
+ * its after-bytes read and counted; the tail contributes to `totalFilesChanged`
16
+ * (the honest count) only. `files_changed` is therefore net-exact for a normal
17
+ * turn (≤ the budget) and an upper bound beyond it — matching git where git is
18
+ * free, diverging only where the substrate cannot be. A `size+mtime` signature
19
+ * (the stats are collected anyway) short-circuits an unchanged capture.
20
+ *
21
+ * CONSISTENCY & SECRET SAFETY
22
+ * ---------------------------
23
+ * Counts come from {@link classifyCasChange} — the SAME classifier the reviewed
24
+ * set uses — so the strip and the change set never disagree. Secret-like paths
25
+ * are excluded up front via {@link partitionIgnoredPathsBySecret} (and zeroed
26
+ * again in `buildFileChangeProgress` as a backstop); no file bodies are ever
27
+ * carried on the wire. Only tool-mediated writes are observed, exactly the scope
28
+ * of the non-git / HYBRID turn-boundary capture — no new divergence.
29
+ *
30
+ * @since File-Change HITL Redesign (non-git + hybrid mid-run progress / DD-33)
31
+ */
32
+ import { readFile, stat } from "node:fs/promises";
33
+ import { join } from "node:path";
34
+ import { FileChangeKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
35
+ import { classifyCasChange } from "./cas-substrate.js";
36
+ import { LINE_COUNT_MAX_BYTES } from "./line-counts.js";
37
+ import { PROGRESS_MAX_ENTRIES, } from "./progress.js";
38
+ import { partitionIgnoredPathsBySecret } from "./secret-paths.js";
39
+ /**
40
+ * The CAS progress substrate. Reads the touched set on each capture, computes
41
+ * kind + `+N −M` for the bounded read-prefix via {@link classifyCasChange}, and
42
+ * reports `totalFilesChanged` over the full capturable set. Owns a `size+mtime`
43
+ * signature so an unchanged capture returns `changed:false` (the cached delta is
44
+ * reused, letting the hybrid still merge it with a changed git slice).
45
+ */
46
+ export function createCasProgressSubstrate(opts) {
47
+ const maxEntries = opts.maxEntries ?? PROGRESS_MAX_ENTRIES;
48
+ let cachedFull = { entries: [], totalFilesChanged: 0 };
49
+ let lastSignature;
50
+ return {
51
+ async capture() {
52
+ const snapshot = await opts.read();
53
+ const { capturablePaths } = partitionIgnoredPathsBySecret(snapshot.before.keys(), snapshot.blockedSecretPaths);
54
+ // Deterministic order so the read prefix and entry order are stable.
55
+ const sorted = [...capturablePaths].sort();
56
+ const prefix = sorted.slice(0, maxEntries);
57
+ const entries = [];
58
+ // The signature keys on the capturable count (catches a new touch) plus the
59
+ // read prefix's size+mtime (catches a content edit to a shown file). A
60
+ // change to an UNshown tail file has no display effect, so it is not keyed.
61
+ const sigParts = [`${capturablePaths.length}`];
62
+ for (const relPath of prefix) {
63
+ const abs = join(opts.workspaceRoot, relPath);
64
+ const st = await statOrNull(abs);
65
+ sigParts.push(`${relPath}\u0000${st ? `${st.size}:${st.mtimeMs}` : "\u2205"}`);
66
+ const beforeBytes = snapshot.before.get(relPath) ?? null;
67
+ const beforeBuf = beforeBytes === null ? null : Buffer.from(beforeBytes);
68
+ // Oversized after: derive the kind without reading (bound the I/O) and
69
+ // leave counts at zero — the same "no stat" shape a binary/oversized side
70
+ // takes in the reviewed set. A same-size no-op cannot be excluded here; an
71
+ // accepted overstatement only for very large files.
72
+ if (st && st.size > LINE_COUNT_MAX_BYTES) {
73
+ const kind = beforeBuf === null ? FileChangeKind.ADD : FileChangeKind.MODIFY;
74
+ entries.push({
75
+ pathBefore: kind === FileChangeKind.ADD ? "" : relPath,
76
+ pathAfter: relPath,
77
+ kind,
78
+ linesAdded: 0,
79
+ linesRemoved: 0,
80
+ });
81
+ continue;
82
+ }
83
+ const afterBytes = st ? await readFileOrNull(abs) : null;
84
+ const afterBuf = afterBytes === null ? null : Buffer.from(afterBytes);
85
+ const cls = classifyCasChange(relPath, beforeBuf, afterBuf);
86
+ if (!cls)
87
+ continue; // no-op (unchanged touch) or both sides absent
88
+ entries.push({
89
+ pathBefore: cls.pathBefore,
90
+ pathAfter: cls.pathAfter,
91
+ kind: cls.kind,
92
+ linesAdded: cls.lineCounts?.linesAdded ?? 0,
93
+ linesRemoved: cls.lineCounts?.linesRemoved ?? 0,
94
+ });
95
+ }
96
+ // Honest total: the capturable set minus the no-ops detected in the read
97
+ // prefix. Net-exact for a turn within the read budget; an upper bound beyond
98
+ // it (tail no-ops are not read, so cannot be excluded).
99
+ const prefixNoOps = prefix.length - entries.length;
100
+ const totalFilesChanged = capturablePaths.length - prefixNoOps;
101
+ const signature = sigParts.join("|");
102
+ if (signature === lastSignature) {
103
+ return { delta: cachedFull, changed: false };
104
+ }
105
+ lastSignature = signature;
106
+ cachedFull = { entries, totalFilesChanged };
107
+ return { delta: cachedFull, changed: true };
108
+ },
109
+ };
110
+ }
111
+ async function statOrNull(abs) {
112
+ try {
113
+ const s = await stat(abs);
114
+ return { size: s.size, mtimeMs: s.mtimeMs };
115
+ }
116
+ catch {
117
+ return null;
118
+ }
119
+ }
120
+ async function readFileOrNull(abs) {
121
+ try {
122
+ return await readFile(abs);
123
+ }
124
+ catch {
125
+ return null;
126
+ }
127
+ }
128
+ //# sourceMappingURL=cas-progress.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cas-progress.js","sourceRoot":"","sources":["../../../src/shared/filereview/cas-progress.ts"],"names":[],"mappings":"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"}
@@ -49,6 +49,7 @@
49
49
  */
50
50
  import { FileCaptureClass, FileChangeKind } from "@stigmer/protos/ai/stigmer/agentic/agentexecution/v1/enum_pb";
51
51
  import type { ArtifactStorage } from "../artifact-storage.js";
52
+ import { type LineChangeCounts } from "./line-counts.js";
52
53
  /**
53
54
  * Reads an artifact's raw bytes back by storage key. Injected so this module
54
55
  * stays free of HTTP/transport concerns and is trivially testable; production
@@ -80,6 +81,14 @@ export interface CasCapturedFile {
80
81
  readonly after?: CasBlobRef;
81
82
  /** False when a side is binary — the change set cannot be approved as complete. */
82
83
  readonly diffComplete: boolean;
84
+ /**
85
+ * Display `+N −M` counted from the in-memory bytes at capture — the only
86
+ * moment a CAS change's text exists outside blob storage. Absent for binary
87
+ * or oversized sides. Carried in memory to the CANDIDATE event only, never
88
+ * persisted in the manifest: the manifest is the reconcile's source of truth,
89
+ * and display decoration does not belong in an enforcement record.
90
+ */
91
+ readonly lineCounts?: LineChangeCounts;
83
92
  }
84
93
  /** The durable manifest for one change set — the reconcile's source of truth. */
85
94
  export interface CasManifest {
@@ -130,6 +139,35 @@ export declare function snapshotCasChangeSet(opts: {
130
139
  manifest: CasManifest;
131
140
  ref: CasSnapshotRef;
132
141
  }>;
142
+ /**
143
+ * The display-facing classification of one CAS path's before/after bytes: the
144
+ * change kind, whether either side is binary, and the `+N −M` line counts.
145
+ */
146
+ export interface CasChangeClassification {
147
+ /** Path before the change (workspace-relative). Empty for ADD. */
148
+ readonly pathBefore: string;
149
+ /** Path after the change. Empty for DELETE. */
150
+ readonly pathAfter: string;
151
+ readonly kind: FileChangeKind;
152
+ /** A NUL byte on either side — the diff cannot render as text. */
153
+ readonly isBinary: boolean;
154
+ /** `+N −M` from the in-memory bytes; absent for a binary or oversized side. */
155
+ readonly lineCounts?: LineChangeCounts;
156
+ }
157
+ /**
158
+ * Classify one CAS path's before/after bytes. Returns `undefined` for a
159
+ * non-change — both sides absent, or a touch that left the bytes unchanged —
160
+ * exactly as the git substrate's diff omits unchanged files.
161
+ *
162
+ * This is the SINGLE classification authority for a CAS before/after pair: the
163
+ * turn-boundary capture ({@link buildCasCapturedFile}) and the mid-run progress
164
+ * producer ({@link ./cas-progress.js}) both route through it, so the live "N
165
+ * files changed so far" strip and the reviewed change set can never disagree on
166
+ * an edge case (the trailing-newline class of bug {@link ./line-counts.js}
167
+ * warns about). Kind, no-op detection, binary detection, and counting live here
168
+ * and nowhere else.
169
+ */
170
+ export declare function classifyCasChange(path: string, beforeBuf: Buffer | null, afterBuf: Buffer | null): CasChangeClassification | undefined;
133
171
  /**
134
172
  * Load a change set's CAS manifest for the resume-time reconcile, digest-verified
135
173
  * against the ledger's {@link CasSnapshotRef}.