@gaunt-sloth/core 2.0.0-beta.0 → 2.0.0-beta.2
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.
- package/LICENSE +6 -6
- package/dist/config/loader.d.ts +13 -0
- package/dist/config/loader.js +55 -11
- package/dist/config/loader.js.map +1 -1
- package/dist/config/schema.d.ts +10 -0
- package/dist/config/schema.js +46 -24
- package/dist/config/schema.js.map +1 -1
- package/dist/config/shell-policy.d.ts +142 -1
- package/dist/config/shell-policy.js +114 -7
- package/dist/config/shell-policy.js.map +1 -1
- package/dist/config/types.d.ts +19 -0
- package/dist/config/types.js.map +1 -1
- package/dist/constants.d.ts +10 -0
- package/dist/constants.js +10 -0
- package/dist/constants.js.map +1 -1
- package/dist/core/GthAbstractAgent.d.ts +31 -0
- package/dist/core/GthAbstractAgent.js +159 -4
- package/dist/core/GthAbstractAgent.js.map +1 -1
- package/dist/core/GthAgentRunner.d.ts +314 -18
- package/dist/core/GthAgentRunner.js +1032 -101
- package/dist/core/GthAgentRunner.js.map +1 -1
- package/dist/core/approvals/approvalRequest.d.ts +247 -0
- package/dist/core/approvals/approvalRequest.js +315 -0
- package/dist/core/approvals/approvalRequest.js.map +1 -0
- package/dist/core/approvals/grants.d.ts +165 -9
- package/dist/core/approvals/grants.js +702 -57
- package/dist/core/approvals/grants.js.map +1 -1
- package/dist/core/plainToolIndication.d.ts +11 -1
- package/dist/core/plainToolIndication.js +25 -10
- package/dist/core/plainToolIndication.js.map +1 -1
- package/dist/core/shell/abstention.d.ts +1 -1
- package/dist/core/shell/abstention.js +65 -11
- package/dist/core/shell/abstention.js.map +1 -1
- package/dist/core/shell/alignment.d.ts +491 -0
- package/dist/core/shell/alignment.js +687 -0
- package/dist/core/shell/alignment.js.map +1 -0
- package/dist/core/shell/approvalCapture.d.ts +53 -41
- package/dist/core/shell/approvalCapture.js +0 -42
- package/dist/core/shell/approvalCapture.js.map +1 -1
- package/dist/core/shell/approvalStop.d.ts +121 -3
- package/dist/core/shell/approvalStop.js +153 -90
- package/dist/core/shell/approvalStop.js.map +1 -1
- package/dist/core/shell/hardline.d.ts +26 -4
- package/dist/core/shell/hardline.js +321 -16
- package/dist/core/shell/hardline.js.map +1 -1
- package/dist/core/shell/negotiation.d.ts +352 -63
- package/dist/core/shell/negotiation.js +295 -123
- package/dist/core/shell/negotiation.js.map +1 -1
- package/dist/core/shell/openWorld.d.ts +135 -0
- package/dist/core/shell/openWorld.js +572 -35
- package/dist/core/shell/openWorld.js.map +1 -1
- package/dist/core/shell/provenance.d.ts +91 -0
- package/dist/core/shell/provenance.js +136 -0
- package/dist/core/shell/provenance.js.map +1 -0
- package/dist/core/shell/rater.d.ts +394 -163
- package/dist/core/shell/rater.js +536 -238
- package/dist/core/shell/rater.js.map +1 -1
- package/dist/core/shell/raterHealth.d.ts +101 -0
- package/dist/core/shell/raterHealth.js +121 -0
- package/dist/core/shell/raterHealth.js.map +1 -0
- package/dist/core/shell/raterModel.d.ts +17 -8
- package/dist/core/shell/raterModel.js +11 -8
- package/dist/core/shell/raterModel.js.map +1 -1
- package/dist/core/shell/rejection.d.ts +20 -5
- package/dist/core/shell/rejection.js +18 -4
- package/dist/core/shell/rejection.js.map +1 -1
- package/dist/core/toolDisplay.d.ts +42 -0
- package/dist/core/toolDisplay.js +31 -0
- package/dist/core/toolDisplay.js.map +1 -1
- package/dist/core/types.d.ts +134 -16
- package/dist/core/types.js.map +1 -1
- package/dist/providers/configurationPassthrough.d.ts +36 -6
- package/dist/providers/configurationPassthrough.js +40 -28
- package/dist/providers/configurationPassthrough.js.map +1 -1
- package/dist/providers/openrouter.js +36 -6
- package/dist/providers/openrouter.js.map +1 -1
- package/dist/providers/vertexai.js +21 -0
- package/dist/providers/vertexai.js.map +1 -1
- package/dist/utils/binaryOutputUtils.js +103 -21
- package/dist/utils/binaryOutputUtils.js.map +1 -1
- package/dist/utils/fileUtils.d.ts +7 -1
- package/dist/utils/fileUtils.js +17 -3
- package/dist/utils/fileUtils.js.map +1 -1
- package/dist/utils/globalConfigUtils.d.ts +5 -2
- package/dist/utils/globalConfigUtils.js +14 -3
- package/dist/utils/globalConfigUtils.js.map +1 -1
- package/dist/utils/vertexaiUtils.js +61 -3
- package/dist/utils/vertexaiUtils.js.map +1 -1
- package/package.json +4 -4
- package/schema/gsloth-config.schema.json +34 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"alignment.js","sourceRoot":"","sources":["../../../src/core/shell/alignment.ts"],"names":[],"mappings":"AAmFA,OAAO,EACL,SAAS,EAET,YAAY,EACZ,aAAa,EACb,WAAW,GACZ,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,IAAI,EAAE,MAAM,uBAAuB,CAAC;AAE7C,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC;AAGzB,OAAO,EAAE,mBAAmB,EAAE,MAAM,4BAA4B,CAAC;AACjE,OAAO,EAAE,aAAa,EAAE,MAAM,6BAA6B,CAAC;AAC5D,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EACL,aAAa,EACb,YAAY,EACZ,OAAO,EACP,6BAA6B,EAC7B,kCAAkC,EAClC,oBAAoB,EACpB,wBAAwB,EACxB,mBAAmB,GACpB,MAAM,0BAA0B,CAAC;AAElC,OAAO,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,0BAA0B,CAAC;AAEnE,mGAAmG;AACnG,MAAM,CAAC,MAAM,mBAAmB,GAAG,6BAA6B,CAAC;AACjE,0EAA0E;AAC1E,MAAM,CAAC,MAAM,sBAAsB,GAAG,gBAAgB,CAAC;AACvD,6EAA6E;AAC7E,MAAM,CAAC,MAAM,sBAAsB,GAAG,yBAAyB,CAAC;AAChE,8CAA8C;AAC9C,MAAM,CAAC,MAAM,uBAAuB,GAAG,gBAAgB,CAAC;AAExD;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,MAAM,CAAC,MAAM,yBAAyB,GACpC,iGAAiG;IACjG,2FAA2F;IAC3F,uFAAuF;IACvF,wCAAwC,CAAC;AAE3C;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,CAAC;AAwFrC;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,UAAU,wBAAwB,CAAC,OAAyB;IAChE,IAAI,OAAO,CAAC,OAAO,KAAK,QAAQ,EAAE,CAAC;QACjC,OAAO,CACL,wFAAwF;YACxF,oFAAoF;YACpF,4EAA4E,CAC7E,CAAC;IACJ,CAAC;IACD,IAAI,OAAO,CAAC,OAAO,KAAK,cAAc,EAAE,CAAC;QACvC,OAAO,CACL,8FAA8F;YAC9F,8FAA8F;YAC9F,6FAA6F;YAC7F,uDAAuD,CACxD,CAAC;IACJ,CAAC;IACD,MAAM,QAAQ,GAAG,aAAa,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IAChD,IAAI,QAAQ,KAAK,IAAI,EAAE,CAAC;QACtB,OAAO,CACL,oEAAoE,QAAQ,CAAC,WAAW,KAAK;YAC7F,0FAA0F;YAC1F,UAAU,CACX,CAAC;IACJ,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,0BAA0B,CAAC,OAAqB;IAC9D,OAAO;QACL,0CAA0C;QAC1C,EAAE;QACF,8EAA8E,OAAO,UAAU;QAC/F,+EAA+E;QAC/E,EAAE;QACF,iEAAiE;QACjE,qFAAqF;QACrF,sFAAsF;QACtF,+FAA+F;QAC/F,gGAAgG;QAChG,yFAAyF;QACzF,0FAA0F;QAC1F,0FAA0F;QAC1F,qEAAqE;QACrE,EAAE;QACF,oCAAoC;QACpC,gBAAgB,mBAAmB,yDAAyD;QAC5F,+BAA+B,sBAAsB,KAAK,sBAAsB,GAAG;QACnF,KAAK,uBAAuB,GAAG;QAC/B,iGAAiG;QACjG,qBAAqB;QACrB,EAAE;QACF,gBAAgB;QAChB,KAAK,sBAAsB,+DAA+D;QAC1F,4EAA4E;QAC5E,KAAK,sBAAsB,sEAAsE;QACjG,+FAA+F;QAC/F,+DAA+D;QAC/D,KAAK,uBAAuB,mEAAmE;QAC/F,gGAAgG;QAChG,6DAA6D;QAC7D,EAAE;QACF,+BAA+B;QAC/B,+FAA+F;QAC/F,+FAA+F;QAC/F,yDAAyD;QACzD,+FAA+F;QAC/F,uFAAuF;QACvF,iDAAiD;QACjD,8FAA8F;QAC9F,WAAW;QACX,EAAE;QACF,4FAA4F;QAC5F,iGAAiG;QACjG,6DAA6D;KAC9D,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,UAAU,2BAA2B,CACzC,YAA+B,EAC/B,IAAa;IAEb,OAAO,CACL,YAAY;SACT,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;SACtC,KAAK,CAAC,CAAC,6BAA6B,CAAC;QACtC,+FAA+F;QAC/F,gFAAgF;SAC/E,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,mBAAmB,CAAC,aAAa,CAAC,OAAO,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC,CAAC,CACxF,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,yBAAyB,CACvC,YAA+B,EAC/B,OAAqF;IAErF,MAAM,QAAQ,GAAG,2BAA2B,CAAC,YAAY,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACxB,KAAK,CAAC,IAAI;QACR,2FAA2F;QAC3F,uFAAuF;QACvF,4EAA4E;QAC5E,8DAA8D;YAC5D,GAAG,6BAA6B,oBAAoB,kCAAkC,GAAG;YACzF,cAAc,EAChB,iBAAiB,EACjB,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,KAAK,OAAO,EAAE,CAAC,EAC5C,kBAAkB,EAClB,EAAE,CACH,CAAC;IACJ,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CACR,2FAA2F,EAC3F,6FAA6F,EAC7F,wCAAwC,EACxC,EAAE,CACH,CAAC;IACJ,CAAC;IACD,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,EAAE,cAAc,EAAE,OAAO,EAAE,oBAAoB,CAAC,CAAC;IAC5F,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC1B,CAAC;IACD,KAAK,CAAC,IAAI,CACR,eAAe,mBAAmB,6DAA6D,EAC/F,cAAc,CACf,CAAC;IACF,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,mBAAmB,CAC1B,cAAmC,EACnC,oBAAyC;IAEzC,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,IAAI,cAAc,KAAK,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC7D,IAAI,oBAAoB,KAAK,IAAI;QAAE,OAAO,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;IACvE,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IACtC,OAAO,0BAA0B,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;AAC5D,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,UAAU,6BAA6B,CAAC,OAAyB,EAAE,IAAa;IACpF,MAAM,KAAK,GAAG,CAAC,IAAY,EAAU,EAAE,CAAC,aAAa,CAAC,IAAI,EAAE,eAAe,EAAE,IAAI,CAAC,CAAC;IACnF,MAAM,KAAK,GAAG;QACZ,gGAAgG;QAChG,mCAAmC;QACnC,iBAAiB;QACjB,mBAAmB,OAAO,CAAC,OAAO,EAAE;QACpC,eAAe,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;QAC9E,gGAAgG;QAChG,gGAAgG;QAChG,oEAAoE;QACpE,UAAU;QACV,oBAAoB,CAAC,YAAY,CAAC,gBAAgB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,CAAC,EAAE,eAAe,CAAC;KAC7F,CAAC;IACF,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,CAAC;IAC5C,IAAI,aAAa,KAAK,SAAS,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,oBAAoB,KAAK,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC;IACzD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;IAC/B,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;;GAQG;AACH,SAAS,WAAW,CAAC,KAAqB,EAAE,KAAa,EAAE,IAAa;IACtE,MAAM,MAAM,GAAG,sBAAsB,KAAK,EAAE,CAAC;IAC7C,MAAM,QAAQ,GAAG,wBAAwB,KAAK,EAAE,CAAC;IACjD,MAAM,YAAY,GAChB,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;QAC/B,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,KAAK,SAAS;YACjC,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,uBAAuB,CAAC;IAChC,OAAO;QACL,IAAI,SAAS,CAAC;YACZ,OAAO,EAAE,EAAE;YACX,UAAU,EAAE,CAAC,EAAE,IAAI,EAAE,mBAAmB,EAAE,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;SAClE,CAAC;QACF,IAAI,WAAW,CAAC;YACd,OAAO,EAAE,6BAA6B,CAAC,KAAK,CAAC,OAAO,EAAE,IAAI,CAAC;YAC3D,YAAY,EAAE,MAAM;YACpB,IAAI,EAAE,mBAAmB;SAC1B,CAAC;QACF,IAAI,SAAS,CAAC;YACZ,OAAO,EAAE,EAAE;YACX,UAAU,EAAE;gBACV;oBACE,IAAI,EAAE,YAAY;oBAClB,IAAI,EAAE;wBACJ,MAAM,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;wBAC7B,GAAG,CAAC,KAAK,CAAC,QAAQ,CAAC,gBAAgB;4BACjC,CAAC,CAAC,EAAE,gBAAgB,EAAE,KAAK,CAAC,QAAQ,CAAC,gBAAgB,EAAE;4BACvD,CAAC,CAAC,EAAE,CAAC;qBACR;oBACD,EAAE,EAAE,QAAQ;iBACb;aACF;SACF,CAAC;QACF,IAAI,WAAW,CAAC;YACd,OAAO,EAAE,WAAW;YACpB,YAAY,EAAE,QAAQ;YACtB,IAAI,EAAE,YAAY;SACnB,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,UAAU,sBAAsB,CAAC,OAAyB;IAC9D,MAAM,MAAM,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAC3E,MAAM,QAAQ,GAAkB;QAC9B,IAAI,aAAa,CAAC,0BAA0B,CAAC,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QACtE,IAAI,YAAY,CACd,yBAAyB,CAAC,OAAO,CAAC,YAAY,EAAE;YAC9C,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,GAAG,CAAC,QAAQ;gBACV,CAAC,CAAC;oBACE,cAAc,EAAE,QAAQ,CAAC,OAAO,CAAC,OAAO,KAAK,OAAO,CAAC,OAAO,CAAC,OAAO;oBACpE,oBAAoB,EAClB,CAAC,QAAQ,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,IAAI,EAAE,CAAC;iBACnF;gBACH,CAAC,CAAC,EAAE,CAAC;SACR,CAAC,CACH;KACF,CAAC;IACF,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE;QAC9B,QAAQ,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5D,CAAC,CAAC,CAAC;IACH,OAAO,QAAQ,CAAC;AAClB,CAAC;AAWD;;;;;;;;;;;;;;;GAeG;AACH,MAAM,UAAU,oBAAoB,CAAC,OAAyB,EAAE,IAAa;IAC3E,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,IAAI,QAAuC,CAAC;IAE5C,kFAAkF;IAClF,MAAM,KAAK,GAAG,GAAkB,EAAE;QAChC,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,OAAO,QAAQ,mBAAmB,6CAA6C,CAAC;QAClF,CAAC;QACD,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,OAAO,+EAA+E,CAAC;QACzF,CAAC;QACD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IAEF,MAAM,IAAI,GAAG,IAAI,CACf,KAAK,IAAI,EAAE;QACT,MAAM,GAAG,IAAI,CAAC;QACd,OAAO,6BAA6B,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;IACtD,CAAC,EACD;QACE,IAAI,EAAE,mBAAmB;QACzB,WAAW,EACT,oFAAoF;YACpF,qFAAqF;QACvF,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC;KACrB,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAClB,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,uFAAuF;QACvF,0FAA0F;QAC1F,kEAAkE;QAClE,MAAM,OAAO,GAAG,wBAAwB,CAAC,OAAO,CAAC,CAAC;QAClD,IAAI,OAAO,KAAK,IAAI;YAAE,OAAO,OAAO,CAAC;QACrC,QAAQ,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,CAAC;QACvC,OAAO,iCAAiC,CAAC;IAC3C,CAAC,EACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,qFAAqF;YACrF,wFAAwF;YACxF,8CAA8C;QAChD,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,2EAA2E,CAAC;SACzF,CAAC;KACH,CACF,CAAC;IAEF,MAAM,OAAO,GAAG,IAAI,CAClB,KAAK,EAAE,EAAE,MAAM,EAAE,gBAAgB,EAAiD,EAAE,EAAE;QACpF,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,QAAQ,GAAG;YACT,IAAI,EAAE,SAAS;YACf,MAAM;YACN,GAAG,CAAC,gBAAgB,IAAI,CAAC,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;SAChF,CAAC;QACF,OAAO,kDAAkD,CAAC;IAC5D,CAAC,EACD;QACE,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EACT,qFAAqF;YACrF,wFAAwF;YACxF,gBAAgB;QAClB,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,CAAC;iBACN,MAAM,EAAE;iBACR,QAAQ,CAAC,wEAAwE,CAAC;YACrF,gBAAgB,EAAE,CAAC;iBAChB,MAAM,EAAE;iBACR,QAAQ,EAAE;iBACV,QAAQ,CAAC,6EAA6E,CAAC;SAC3F,CAAC;KACH,CACF,CAAC;IAEF,MAAM,QAAQ,GAAG,IAAI,CACnB,KAAK,EAAE,EAAE,MAAM,EAAsB,EAAE,EAAE;QACvC,MAAM,OAAO,GAAG,KAAK,EAAE,CAAC;QACxB,IAAI,OAAO;YAAE,OAAO,OAAO,CAAC;QAC5B,QAAQ,GAAG,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,CAAC;QACxC,OAAO,mCAAmC,CAAC;IAC7C,CAAC,EACD;QACE,IAAI,EAAE,uBAAuB;QAC7B,WAAW,EACT,2FAA2F;YAC3F,qEAAqE;QACvE,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;YACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0DAA0D,CAAC;SACxF,CAAC;KACH,CACF,CAAC;IAEF,OAAO;QACL,KAAK,EAAE,CAAC,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,CAAC;QACzC,MAAM,EAAE,GAAG,EAAE,CAAC,MAAM;QACpB,QAAQ,EAAE,GAAG,EAAE,CAAC,QAAQ;KACzB,CAAC;AACJ,CAAC;AAgED,oGAAoG;AACpG,MAAM,CAAC,MAAM,gCAAgC,GAAG,4CAA4C,CAAC;AAE7F;;;;;;;;;;;;;;;GAeG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAsB;IACtD,IAAI,EAAE,UAAU;IAChB,MAAM,EAAE,GAAG,gCAAgC,uCAAuC;CACnF,CAAC;AAEF;;;;;GAKG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAuC;IAC3E,OAAO,QAAQ,EAAE,MAAM,EAAE,UAAU,CAAC,gCAAgC,CAAC,KAAK,IAAI,CAAC;AACjF,CAAC;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA6CG;AACH,MAAM,UAAU,uBAAuB,CAAC,OAKvC;IACC,MAAM,OAAO,GAAG,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACrD,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,EAAE,CAAC;IAC9C,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3B,OAAO,CACL,WAAW,OAAO,sDAAsD;YACxE,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,4BAA4B,OAAO,CAAC,SAAS,mBAAmB;YACzF,2FAA2F;YAC3F,gCAAgC,CACjC,CAAC;IACJ,CAAC;IACD,OAAO,CACL,WAAW,OAAO,6CAA6C;QAC/D,qEAAqE,OAAO,CAAC,SAAS,GAAG;QACzF,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC,CAAC,gEAAgE,CAAC,CAAC,CAAC,EAAE,CAAC,CACjG,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,SAAS,cAAc,CAAC,OAAoB;IAC1C,MAAM,KAAK,GAA6C;QACtD,IAAI,EAAE,OAAO,CAAC,OAAO,EAAE;QACvB,OAAO,EAAE,OAAO,OAAO,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE;KACpE,CAAC;IACF,MAAM,SAAS,GAAI,OAAqB,CAAC,UAAU,CAAC;IACpD,IAAI,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACrD,KAAK,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1F,CAAC;IACD,MAAM,UAAU,GAAI,OAAuB,CAAC,YAAY,CAAC;IACzD,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC5D,KAAK,CAAC,UAAU,GAAG,UAAU,CAAC;QAC9B,IAAI,OAAO,OAAO,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC;YAAE,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,IAAI,CAAC;IACjG,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,OAAyB,EACzB,MAAiB,EACjB,OAA8B;IAE9B,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,MAAM,CAAC,GAAG,CAAC;IAC1C,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,wBAAwB,CAAC;IAChE,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAC3B,MAAM,OAAO,GAAqB;QAChC,OAAO;QACP,YAAY,EAAE,OAAO,CAAC,YAAY;QAClC,GAAG,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChD,CAAC;IACF,MAAM,QAAQ,GAAG,sBAAsB,CAAC,OAAO,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAqC,OAAO,CAAC,SAAS;QACjE,CAAC,CAAC;YACE,EAAE,EAAE,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE;YACnC,GAAG,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxD,SAAS;YACT,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;SAC7D;QACH,CAAC,CAAC,SAAS,CAAC;IACd,IAAI,OAAO;QAAE,OAAO,CAAC,SAAS,EAAE,CAAC,OAAO,CAAC,CAAC;IAE1C,+DAA+D;IAC/D,MAAM,MAAM,GAAG,CACb,QAA2B,EAC3B,KAA0C,EACvB,EAAE;QACrB,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;YAC1C,OAAO,CAAC,QAAQ,GAAG,QAAQ,CAAC;YAC5B,IAAI,KAAK;gBAAE,OAAO,CAAC,UAAU,GAAG,KAAK,CAAC;QACxC,CAAC;QACD,OAAO,QAAQ,CAAC;IAClB,CAAC,CAAC;IAEF,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,CAAC,SAAS,KAAK,UAAU,EAAE,CAAC;QACpD,QAAQ,CAAC,qFAAqF,CAAC,CAAC;QAChG,OAAO,MAAM,CAAC,qBAAqB,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED,MAAM,OAAO,GAAG,oBAAoB,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC;IAC5D,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7C,MAAM,YAAY,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;IAEnC,IAAI,KAAgD,CAAC;IACrD,MAAM,OAAO,GAAG,MAAM,CAAC,mBAAmB,CAAC,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,OAAO,CAAiB,CAAC,OAAO,EAAE,EAAE;QACvD,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,SAAS,CAAC,CAAC;IACxD,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,+FAA+F;QAC/F,6FAA6F;QAC7F,8DAA8D;QAC9D,KAAK,IAAI,IAAI,GAAG,CAAC,EAAE,IAAI,GAAG,mBAAmB,EAAE,IAAI,IAAI,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC;YACzE,IAAI,KAAK,KAAK,OAAO,EAAE,CAAC;gBACtB,QAAQ,CAAC,sCAAsC,SAAS,qBAAqB,CAAC,CAAC;gBAC/E,OAAO,MAAM,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;YAClD,CAAC;YACD,MAAM,MAAM,GAAG,KAAkB,CAAC;YAClC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;YAC1B,MAAM,KAAK,GAAG,MAAM,CAAC,UAAU,IAAI,EAAE,CAAC;YACtC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,4FAA4F;gBAC5F,kCAAkC;gBAClC,YAAY,CAAC,IAAI,CACf,IAAI,YAAY,CACd,iCAAiC,mBAAmB,kCAAkC;oBACpF,kBAAkB,sBAAsB,KAAK,sBAAsB,MAAM;oBACzE,GAAG,uBAAuB,GAAG,CAChC,CACF,CAAC;gBACF,SAAS;YACX,CAAC;YACD,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;gBACzB,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBACrC,6FAA6F;gBAC7F,wFAAwF;gBACxF,6FAA6F;gBAC7F,yFAAyF;gBACzF,MAAM,MAAM,GAAG,MAAM;oBACnB,CAAC,CAAC,MAAM,MAAM,CAAC,MAAM,CAAC;wBAClB,IAAI,EAAE,IAAI,CAAC,IAAI;wBACf,IAAI,EAAE,IAAI,CAAC,IAAI,IAAI,EAAE;wBACrB,EAAE,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;wBACjB,IAAI,EAAE,WAAW;qBAClB,CAAC;oBACJ,CAAC,CAAC,IAAI,WAAW,CAAC;wBACd,OAAO,EAAE,iBAAiB,IAAI,CAAC,IAAI,GAAG;wBACtC,YAAY,EAAE,IAAI,CAAC,EAAE,IAAI,EAAE;wBAC3B,IAAI,EAAE,IAAI,CAAC,IAAI;qBAChB,CAAC,CAAC;gBACP,YAAY,CAAC,IAAI,CAAC,MAAqB,CAAC,CAAC;YAC3C,CAAC;YACD,MAAM,OAAO,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;YACnC,IAAI,OAAO;gBAAE,OAAO,MAAM,CAAC,OAAO,CAAC,CAAC;QACtC,CAAC;QACD,QAAQ,CAAC,8EAA8E,CAAC,CAAC;QACzF,OAAO,MAAM,CAAC,qBAAqB,EAAE,aAAa,CAAC,CAAC;IACtD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,aAAa,CAAC,mBAAmB,EAAE,KAAK,CAAC,CAAC;QAC1C,OAAO,MAAM,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;IAChD,CAAC;YAAS,CAAC;QACT,IAAI,KAAK;YAAE,YAAY,CAAC,KAAK,CAAC,CAAC;IACjC,CAAC;AACH,CAAC"}
|
|
@@ -47,8 +47,9 @@
|
|
|
47
47
|
import type { ApprovalRung } from '#src/config.js';
|
|
48
48
|
import type { ToolApprovalScope } from '#src/core/types.js';
|
|
49
49
|
import type { AbstentionDefect } from '#src/core/shell/abstention.js';
|
|
50
|
+
import type { AlignmentCallCapture } from '#src/core/shell/alignment.js';
|
|
50
51
|
import type { NegotiationCounters } from '#src/core/shell/negotiation.js';
|
|
51
|
-
import type { FailClosedCause, PreflightFloorKind,
|
|
52
|
+
import type { FailClosedCause, PreflightFloorKind, RaterCallFailure, ShellSafetyVerdict } from '#src/core/shell/rater.js';
|
|
52
53
|
/**
|
|
53
54
|
* How many gated decisions one session keeps. A ring buffer for the same reason the debug-log one
|
|
54
55
|
* is: each record carries a full rating prompt (a few KB), and a long `auto` session makes a lot of
|
|
@@ -86,34 +87,6 @@ export type ApprovalDecidingStage = 'not-gated' | 'deny-list' | 'bypass' | 'hard
|
|
|
86
87
|
export type ApprovalCaptureAction = 'approve' | 'reject' | 'escalate' | 'halt' | 'error';
|
|
87
88
|
/** How an escalation ended once it reached (or failed to reach) a person. */
|
|
88
89
|
export type ApprovalHumanAnswer = 'approve' | 'reject' | 'no-human';
|
|
89
|
-
/**
|
|
90
|
-
* §5.1's negotiation context **as it was handed to the prompt builder**, plus the one distinction a
|
|
91
|
-
* reader of the archive keeps needing and could never make.
|
|
92
|
-
*
|
|
93
|
-
* **`userMessagesPopulated` is the field the node exists for.** Round 1 is context-free *by design*
|
|
94
|
-
* (§5.1: *"round 1 sees the command alone"*), so an empty window is not a bug — and a reader with no
|
|
95
|
-
* access to the source cannot know that. {@link userMessagesNote} states which case this is in
|
|
96
|
-
* words, so the answer to *"were the user's messages in view on round N?"* is one field and one
|
|
97
|
-
* sentence rather than a source-reading exercise across three files.
|
|
98
|
-
*/
|
|
99
|
-
export interface RaterNegotiationCapture {
|
|
100
|
-
/** 1-based index of this rating within the current negotiation. */
|
|
101
|
-
round: number;
|
|
102
|
-
/** Whether this rating was a round-1 (context-free) rating. */
|
|
103
|
-
roundOne: boolean;
|
|
104
|
-
/** Whether a §5.1 context was supplied at all (it is not, at a rung that does not negotiate). */
|
|
105
|
-
contextSupplied: boolean;
|
|
106
|
-
/** The justification admitted into THIS rating. Withheld at round 1 by `contextFor`, by design. */
|
|
107
|
-
justification?: string;
|
|
108
|
-
/** `<negotiation_so_far>` as handed over: the completed rounds, oldest first. */
|
|
109
|
-
priorRounds: RaterNegotiationRound[];
|
|
110
|
-
/** `<user_messages>` as handed over, oldest first, before the builder's last-5 + truncation. */
|
|
111
|
-
userMessages: string[];
|
|
112
|
-
/** Whether that window carried anything. THE distinction this facility turns on. */
|
|
113
|
-
userMessagesPopulated: boolean;
|
|
114
|
-
/** Why the window looks the way it does, in words, for a reader who has never seen the spec. */
|
|
115
|
-
userMessagesNote: string;
|
|
116
|
-
}
|
|
117
90
|
/**
|
|
118
91
|
* One rating call: what the rater was SHOWN and what it ANSWERED, captured at the send site.
|
|
119
92
|
*
|
|
@@ -133,19 +106,31 @@ export interface RaterCallCapture {
|
|
|
133
106
|
timeoutMs: number;
|
|
134
107
|
/** §5.2 — whether a rejection would be handed back to the AGENT rather than to a person. */
|
|
135
108
|
negotiable: boolean;
|
|
136
|
-
/**
|
|
109
|
+
/**
|
|
110
|
+
* **The exact strings sent.** Captured, never re-rendered.
|
|
111
|
+
*
|
|
112
|
+
* [[EXT-127]] — and there is no longer a negotiation record beside them, because there is no
|
|
113
|
+
* longer a negotiation in this call: the classifier is handed one command and nothing else, so
|
|
114
|
+
* *"were the user's messages in view for this rating?"* has one answer at every round, and it is
|
|
115
|
+
* no. That question moved with the context it was about, to {@link AlignmentCallCapture}.
|
|
116
|
+
*/
|
|
137
117
|
prompt: {
|
|
138
118
|
system: string;
|
|
139
119
|
user: string;
|
|
140
120
|
};
|
|
141
|
-
/** What the negotiation looked like at the moment of this call. */
|
|
142
|
-
negotiation: RaterNegotiationCapture;
|
|
143
121
|
/** The model's answer BEFORE it is parsed or mapped, so a malformed one stays visible. */
|
|
144
122
|
rawResponse?: unknown;
|
|
145
123
|
/** The verdict this call resolved to, including a fail-closed one. */
|
|
146
124
|
verdict?: ShellSafetyVerdict;
|
|
147
125
|
/** Set when the verdict is the gate failing closed rather than the model judging ([[EXT-66]]). */
|
|
148
126
|
failClosed?: FailClosedCause;
|
|
127
|
+
/**
|
|
128
|
+
* [[EXT-82]] — the provider's own account of a call that never reached the model, when the
|
|
129
|
+
* `threw` arm carried one. Already sanitised where it was built ({@link RaterCallFailure}), which
|
|
130
|
+
* is not an exemption from the archive's redaction pass but a consequence of the same value being
|
|
131
|
+
* carried into the verdict a user reads live, where no such pass runs.
|
|
132
|
+
*/
|
|
133
|
+
providerError?: RaterCallFailure;
|
|
149
134
|
}
|
|
150
135
|
/** A declared entry or runtime grant that decided the call, rendered as the user would read it. */
|
|
151
136
|
export interface ApprovalRuleMatchCapture {
|
|
@@ -180,8 +165,35 @@ export interface PreflightFloorCapture {
|
|
|
180
165
|
* Whether the floor changed the outcome. A preflight only ever RAISES, and only `safe` sits below
|
|
181
166
|
* the floor — so a finding on a `destructive` verdict is the floor AGREEING with the rater, not
|
|
182
167
|
* overriding it, and reporting those two the same way would misattribute the decision.
|
|
168
|
+
*
|
|
169
|
+
* Read together with {@link floorApplied}: this says whether the rating SAT below the floor, and
|
|
170
|
+
* that says whether the floor was applied to the call at all.
|
|
183
171
|
*/
|
|
184
172
|
rewroteRating: boolean;
|
|
173
|
+
/**
|
|
174
|
+
* [[EXT-106]] §4.6 — **whether the decision readers actually applied the finding above.** `false`
|
|
175
|
+
* when the user-provenance carve-out lifted it, i.e. the preflight fired on the command and the
|
|
176
|
+
* floor, the negotiation test and the action all ignored it because the user had named every host
|
|
177
|
+
* themselves.
|
|
178
|
+
*
|
|
179
|
+
* **The finding is still reported when this is `false`, and that is the point.** This block is a
|
|
180
|
+
* diagnostic archive a user opens about their own session, and a command that reached the open
|
|
181
|
+
* world without anyone confirming it is exactly the one they most need to find in it. Nulling the
|
|
182
|
+
* record out on a carve would delete the audit trail for the whole of the new behaviour.
|
|
183
|
+
*
|
|
184
|
+
* **Written from the decision's own reader** (`effectivePreflightFloorFinding`), never derived a
|
|
185
|
+
* second time from the carved hosts: the floor has two arms, only that function resolves which of
|
|
186
|
+
* them wins, and a command tripping both is floored by the script-env-leak arm while the
|
|
187
|
+
* open-world arm would have carved. A second derivation says "carved, not floored" about a call
|
|
188
|
+
* that was floored and did reach a human.
|
|
189
|
+
*/
|
|
190
|
+
floorApplied: boolean;
|
|
191
|
+
/**
|
|
192
|
+
* [[EXT-106]] §4.6 — the host literals the carve-out matched, present only when
|
|
193
|
+
* {@link floorApplied} is `false`. Every host in the command is here, because the carve-out
|
|
194
|
+
* requires every one of them to have been named by the user.
|
|
195
|
+
*/
|
|
196
|
+
carvedHosts?: string[];
|
|
185
197
|
}
|
|
186
198
|
/** One gated tool call, from arrival to outcome. */
|
|
187
199
|
export interface ApprovalDecisionCapture {
|
|
@@ -222,6 +234,15 @@ export interface ApprovalDecisionCapture {
|
|
|
222
234
|
budget: NegotiationCounters;
|
|
223
235
|
/** The rating, when one was made. Absent for every stage that decided without a model. */
|
|
224
236
|
rating?: RaterCallCapture;
|
|
237
|
+
/**
|
|
238
|
+
* [[EXT-127]] — the alignment check, when the classifier declined and a checker was consulted.
|
|
239
|
+
*
|
|
240
|
+
* **It is a SECOND record beside {@link rating}, not a field inside it**, because the two are two
|
|
241
|
+
* model calls with two contexts and often two models. Collapsing them would make the archive
|
|
242
|
+
* unable to answer the question the split exists to let a reader ask: what did each of them see,
|
|
243
|
+
* and which of them decided this?
|
|
244
|
+
*/
|
|
245
|
+
alignment?: AlignmentCallCapture;
|
|
225
246
|
/** The error that ended the decision, when one did. */
|
|
226
247
|
error?: string;
|
|
227
248
|
}
|
|
@@ -260,12 +281,3 @@ export declare class ApprovalCaptureLog {
|
|
|
260
281
|
* serialising anything of the instance.
|
|
261
282
|
*/
|
|
262
283
|
export declare function raterModelLabel(model: unknown): string | undefined;
|
|
263
|
-
/**
|
|
264
|
-
* Describe the §5.1 context a rating is about to be made with — **as it was handed to the prompt
|
|
265
|
-
* builder**, so the record and the prompt cannot come to describe two different ratings.
|
|
266
|
-
*
|
|
267
|
-
* The note is the legibility half of the acceptance: an empty user-messages window means one thing
|
|
268
|
-
* at round 1 (by design) and something else entirely at round 3, and a reader of the archive has no
|
|
269
|
-
* way to tell them apart from a `[]`.
|
|
270
|
-
*/
|
|
271
|
-
export declare function describeRaterNegotiation(negotiation: RaterNegotiationContext | undefined): RaterNegotiationCapture;
|
|
@@ -63,46 +63,4 @@ export function raterModelLabel(model) {
|
|
|
63
63
|
return `${type}/${id}`;
|
|
64
64
|
return id ?? type;
|
|
65
65
|
}
|
|
66
|
-
/**
|
|
67
|
-
* Describe the §5.1 context a rating is about to be made with — **as it was handed to the prompt
|
|
68
|
-
* builder**, so the record and the prompt cannot come to describe two different ratings.
|
|
69
|
-
*
|
|
70
|
-
* The note is the legibility half of the acceptance: an empty user-messages window means one thing
|
|
71
|
-
* at round 1 (by design) and something else entirely at round 3, and a reader of the archive has no
|
|
72
|
-
* way to tell them apart from a `[]`.
|
|
73
|
-
*/
|
|
74
|
-
export function describeRaterNegotiation(negotiation) {
|
|
75
|
-
const priorRounds = [...(negotiation?.priorRounds ?? [])];
|
|
76
|
-
const userMessages = [...(negotiation?.userMessages ?? [])];
|
|
77
|
-
const roundOne = priorRounds.length === 0;
|
|
78
|
-
const populated = userMessages.length > 0;
|
|
79
|
-
return {
|
|
80
|
-
round: priorRounds.length + 1,
|
|
81
|
-
roundOne,
|
|
82
|
-
contextSupplied: negotiation !== undefined,
|
|
83
|
-
...(negotiation?.justification !== undefined
|
|
84
|
-
? { justification: negotiation.justification }
|
|
85
|
-
: {}),
|
|
86
|
-
priorRounds,
|
|
87
|
-
userMessages,
|
|
88
|
-
userMessagesPopulated: populated,
|
|
89
|
-
userMessagesNote: userMessagesNote(negotiation !== undefined, roundOne, populated),
|
|
90
|
-
};
|
|
91
|
-
}
|
|
92
|
-
/** The sentence {@link describeRaterNegotiation} puts on the window, for a reader with no spec. */
|
|
93
|
-
function userMessagesNote(contextSupplied, roundOne, populated) {
|
|
94
|
-
if (!contextSupplied) {
|
|
95
|
-
return ('No negotiation context was supplied for this rating (the rung does not negotiate, or this ' +
|
|
96
|
-
'was the allow-list tripwire), so the rater saw the command alone. An empty window here is ' +
|
|
97
|
-
'not a defect.');
|
|
98
|
-
}
|
|
99
|
-
if (roundOne) {
|
|
100
|
-
return ('Round 1: spec §5.1 admits no justification, no transcript and no user messages, so the ' +
|
|
101
|
-
'rater saw the command alone. An empty window here is BY DESIGN, not a defect.');
|
|
102
|
-
}
|
|
103
|
-
return populated
|
|
104
|
-
? "Round 2 or later: the user's own recent messages WERE in the rater's view for this rating."
|
|
105
|
-
: 'Round 2 or later, and the window is still empty — the conversation had no non-blank user ' +
|
|
106
|
-
'message to admit. This one IS worth looking at.';
|
|
107
|
-
}
|
|
108
66
|
//# sourceMappingURL=approvalCapture.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approvalCapture.js","sourceRoot":"","sources":["../../../src/core/shell/approvalCapture.ts"],"names":[],"mappings":"AA0DA;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"approvalCapture.js","sourceRoot":"","sources":["../../../src/core/shell/approvalCapture.ts"],"names":[],"mappings":"AA0DA;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAG,EAAE,CAAC;AA+MvC;;;;;;GAMG;AACH,MAAM,OAAO,kBAAkB;IACrB,OAAO,GAA8B,EAAE,CAAC;IAEhD;;;;;;OAMG;IACH,KAAK,CAAC,MAA+B;QACnC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC1B,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,GAAG,oBAAoB;YAAE,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACrE,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;OAIG;IACH,QAAQ;QACN,OAAO,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;IAC3B,CAAC;IAED,+DAA+D;IAC/D,KAAK;QACH,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;IACpB,CAAC;CACF;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,eAAe,CAAC,KAAc;IAC5C,IAAI,CAAC,KAAK,IAAI,OAAO,KAAK,KAAK,QAAQ;QAAE,OAAO,SAAS,CAAC;IAC1D,MAAM,CAAC,GAAG,KAKT,CAAC;IACF,IAAI,IAAwB,CAAC;IAC7B,IAAI,CAAC;QACH,IAAI,GAAG,OAAO,CAAC,CAAC,QAAQ,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IACrE,CAAC;IAAC,MAAM,CAAC;QACP,IAAI,GAAG,SAAS,CAAC;IACnB,CAAC;IACD,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC,CAAC,SAAS,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,KAAK,KAAK,QAAQ,CAClE,CAAC;IACrB,IAAI,EAAE,IAAI,IAAI;QAAE,OAAO,GAAG,IAAI,IAAI,EAAE,EAAE,CAAC;IACvC,OAAO,EAAE,IAAI,IAAI,CAAC;AACpB,CAAC"}
|
|
@@ -1,3 +1,94 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @module core/shell/approvalStop
|
|
3
|
+
*
|
|
4
|
+
* CFG-27 — the two ways the approvals gate **ends a run** rather than answering a tool call.
|
|
5
|
+
* Both are thrown from `GthAgentRunner.decideToolApproval`, both carry the command and the reason
|
|
6
|
+
* a person needs to see, and both are re-thrown UNCHANGED by `processMessages` (which otherwise
|
|
7
|
+
* wraps failures as `Agent processing failed: …`) so the explanation reaches the user intact.
|
|
8
|
+
*
|
|
9
|
+
* They are errors rather than {@link ../types.js ToolApprovalDecision}s on purpose. A decision is
|
|
10
|
+
* something the model observes as a `ToolMessage` and can respond to; these two are precisely the
|
|
11
|
+
* cases where the spec says the model gets no move at all:
|
|
12
|
+
*
|
|
13
|
+
* - **{@link AttackHaltError}** (§4.2) — an `attack` outcome *halts the run*. "A halt ends the
|
|
14
|
+
* agent loop. It is not a rejection the model can respond to, and no rung except `bypass` can
|
|
15
|
+
* turn it into anything else."
|
|
16
|
+
* - **{@link NonInteractiveEscalationError}** (§6.2) — where no human can answer, *every*
|
|
17
|
+
* escalation is an immediate non-zero exit carrying the command, the rating and its reason.
|
|
18
|
+
* There is no prompt, no waiting, and never a timeout into approval. Teams that need specific
|
|
19
|
+
* commands to run unattended declare them in `approvals.allow` (§3), which is consulted before
|
|
20
|
+
* the rater and therefore never escalates.
|
|
21
|
+
*
|
|
22
|
+
* Exit code: neither class sets one. The single-shot runtime (`runSingleShot`) already reports a
|
|
23
|
+
* thrown run as `ok: false`, and each command entry point turns that into `setExitCode(1)` — so
|
|
24
|
+
* "immediate non-zero exit carrying the explanation" is what a caller already gets, without a new
|
|
25
|
+
* exit path that could diverge from the existing one.
|
|
26
|
+
*
|
|
27
|
+
* ## [[TUI-C71]] — a stop message is UNTRUSTED TEXT, and it is made safe in two places
|
|
28
|
+
*
|
|
29
|
+
* Every string a stop carries except this module's own sentences is written by something other
|
|
30
|
+
* than the user: the command the agent proposed, the rater's outcome and reason, the
|
|
31
|
+
* `approvals.escalate` entry that matched, and the whole §5 negotiation. On an `attack` verdict
|
|
32
|
+
* that is the *worst* text in the system by construction — the rater judged the command's own
|
|
33
|
+
* structure to evidence deception or obfuscation — so a stop is the one message most likely to
|
|
34
|
+
* carry a payload crafted to forge terminal output, and the last one that may be printed raw.
|
|
35
|
+
*
|
|
36
|
+
* The defence [[TUI-C26]] built has two halves, and they belong at different times:
|
|
37
|
+
*
|
|
38
|
+
* 1. **Neutralisation is done HERE, at construction, unconditionally.** It needs no width and no
|
|
39
|
+
* screen, it is idempotent, and it is the half every consumer needs — a thrown stop reaches the
|
|
40
|
+
* Ink transcript, `--no-tui` stderr, a session log, the approvals archive (`record.error`), an
|
|
41
|
+
* eval turn record, AG-UI and a CI job's output, and only some of those are terminals. Doing it
|
|
42
|
+
* at each render site would mean every present and future consumer had to remember; doing it
|
|
43
|
+
* once here means none of them can forget. After it, `{@link message}` contains no control or
|
|
44
|
+
* format character at all: a carriage return is the five printable characters `\x0d`, and —
|
|
45
|
+
* because LF is a control character too — untrusted text cannot even open a new line, let alone
|
|
46
|
+
* reach column 0 on one.
|
|
47
|
+
* 2. **The gutter and the width bound are done at RENDER, by the surface** ({@link
|
|
48
|
+
* approvalStopRows} for the plain surfaces, `<ApprovalStopMessage>` for the Ink TUI). They
|
|
49
|
+
* cannot be done here: framing is arithmetic against a terminal width, an `Error.message` has
|
|
50
|
+
* no width, and a block wrapped for an 80-column terminal is wrong for every other one. What
|
|
51
|
+
* they buy over neutralisation alone is the last case it cannot close — one very long
|
|
52
|
+
* neutralised line that the *terminal* wraps, whose continuation starts at column 0 carrying
|
|
53
|
+
* whatever the attacker chose to put at that offset. That route is measured, not theorised: on
|
|
54
|
+
* a 120-column terminal the neutralised `Command:` line of a hostile command is ~164 columns.
|
|
55
|
+
*
|
|
56
|
+
* **Because half of it is the surface's job, the surfaces are enumerated rather than assumed.**
|
|
57
|
+
* Every place that catches an `ApprovalStopError` and prints it calls {@link approvalStopRows} (or
|
|
58
|
+
* the Ink component): `runtime/singleShot.ts`, `runtime/conversation.ts`,
|
|
59
|
+
* `agent/modules/interactiveSessionModule.ts` (both its per-turn catch and its outermost one, which
|
|
60
|
+
* is where the `-m` path lands), `review/modules/reviewModule.ts`, `app/commands/prCommand.ts`
|
|
61
|
+
* (which catches what the PR-discovery agent throws) and `app/tui/components/App.tsx`.
|
|
62
|
+
* **Adding a surface that catches a stop means adding it to that list.**
|
|
63
|
+
*
|
|
64
|
+
* **That list is over the ERROR, and the error is not the only way a stop reaches a screen.** Some
|
|
65
|
+
* consumers take {@link message} and hand the *string* onward, at which point no `instanceof` can
|
|
66
|
+
* find it again: `runConversation` records it as a turn's `error`, and `evalRunner` folds that into
|
|
67
|
+
* an eval case's `reasons`, which `batch/reporters/textReporter.ts` prints — a terminal, reached
|
|
68
|
+
* without any of its code ever seeing this class. That one frames the text itself. So the honest
|
|
69
|
+
* statement is not "every other consumer is a non-terminal" but: **a consumer that prints to a
|
|
70
|
+
* terminal frames what it prints, whether it holds the error or only its text**, and the ones that
|
|
71
|
+
* legitimately do neither are the file and protocol sinks (the approvals archive, the JUnit/JSON
|
|
72
|
+
* reports, the AG-UI event) plus `reviewModule`'s `displayDebug` of the raw error, which is a debug
|
|
73
|
+
* channel. All of them still inherit the neutralisation, which is what keeps the worst case a
|
|
74
|
+
* wrapped line rather than a repainted screen.
|
|
75
|
+
*
|
|
76
|
+
* **The structured fields stay RAW; only the message is neutralised.** That is what answers the
|
|
77
|
+
* obvious objection to construction-time work — that it stops the error being a faithful record of
|
|
78
|
+
* what was proposed. `{@link ApprovalStopError.command}`, `reason`, `outcome`, `escalatedBy` and
|
|
79
|
+
* `negotiation` are the command as the agent wrote it, byte for byte, for any consumer that needs
|
|
80
|
+
* the truth rather than a screen; the message is the *presentation*, and a presentation that can
|
|
81
|
+
* repaint the terminal is not one. The render path frames from those raw fields, so its gutter
|
|
82
|
+
* numbers the command's real lines rather than one escaped line.
|
|
83
|
+
*
|
|
84
|
+
* **One parts list, two renderings** ({@link ApprovalStopPart}). The message string and the framed
|
|
85
|
+
* block are both derived from {@link ApprovalStopError.parts}, so they cannot come to describe one
|
|
86
|
+
* stop two ways — the same argument `renderNegotiationTranscript` makes for its own two surfaces.
|
|
87
|
+
* A part is tagged with *who wrote it*, which is the only distinction any of this rests on: the
|
|
88
|
+
* gate's own prose can be painted as it is because nothing can forge it, and everything else goes
|
|
89
|
+
* through the shared renderer.
|
|
90
|
+
*/
|
|
91
|
+
import type { ApprovalSubject } from '#src/core/approvals/matcher.js';
|
|
1
92
|
/**
|
|
2
93
|
* One piece of a stop message, tagged with who wrote it.
|
|
3
94
|
*
|
|
@@ -67,7 +158,11 @@ export declare function approvalStopRows(parts: readonly ApprovalStopPart[], opt
|
|
|
67
158
|
* cannot shows {@link message}, which is already neutralised and is already the whole explanation.
|
|
68
159
|
*/
|
|
69
160
|
export declare abstract class ApprovalStopError extends Error {
|
|
70
|
-
/**
|
|
161
|
+
/**
|
|
162
|
+
* What ended the run, exactly as the agent proposed it: the command for a shell subject, and the
|
|
163
|
+
* registered tool name for a gated tool or MCP call. The field name predates the gate widening
|
|
164
|
+
* past the shell; {@link subjectParts} is what decides the word the MESSAGE calls it.
|
|
165
|
+
*/
|
|
71
166
|
readonly command: string;
|
|
72
167
|
/** The message's pieces, tagged with who wrote each — see {@link ApprovalStopPart}. */
|
|
73
168
|
readonly parts: readonly ApprovalStopPart[];
|
|
@@ -93,7 +188,7 @@ export declare abstract class ApprovalStopError extends Error {
|
|
|
93
188
|
export declare class AttackHaltError extends ApprovalStopError {
|
|
94
189
|
/** The rater's explanation of what the command's structure showed. */
|
|
95
190
|
readonly reason: string;
|
|
96
|
-
constructor(command: string, reason: string);
|
|
191
|
+
constructor(command: string, reason: string, subject?: ApprovalSubject);
|
|
97
192
|
}
|
|
98
193
|
/**
|
|
99
194
|
* §6.2 — an escalation with nobody to ask (CI, one-shot runs, servers). Fails the build loudly,
|
|
@@ -119,5 +214,28 @@ export declare class NonInteractiveEscalationError extends ApprovalStopError {
|
|
|
119
214
|
* the last command and give no hint that the agent had already been told twice what to fix.
|
|
120
215
|
*/
|
|
121
216
|
readonly negotiation: string | undefined;
|
|
122
|
-
|
|
217
|
+
/**
|
|
218
|
+
* [[EXT-106]] §4 — **the `approvals.allow` entry that would let THIS command run**, rendered in the
|
|
219
|
+
* object form a user writes in a config file, or `undefined` when none can soundly be derived.
|
|
220
|
+
*
|
|
221
|
+
* A refusal that stands has to say what would lift it, and a generic example leaves the reader to
|
|
222
|
+
* translate it — for a command the deterministic preflight floors, that translation is the entire
|
|
223
|
+
* remedy. `approvals.allow` is consulted before the rater and therefore before §4.6's preflight,
|
|
224
|
+
* so it is the one thing that lifts a floor the agent cannot argue past.
|
|
225
|
+
*
|
|
226
|
+
* **Derived by the caller, never here.** The caller holds what an entry has to be derived from —
|
|
227
|
+
* the normalized command for a shell subject (`shellApprovalEntryFor`), the tool's identity and
|
|
228
|
+
* host for a tool or MCP one (`toolGrantEntry`) — and it is the same derivation the escalation
|
|
229
|
+
* menu's *always approve* stores, so a message and a menu cannot promise different things about
|
|
230
|
+
* one call. `undefined` falls back to the general form, which is the right answer whenever a
|
|
231
|
+
* specific one would be wrong — an entry that is subtly too broad, or simply inert, is worse than
|
|
232
|
+
* none. That is what a call whose MCP server could not be attributed gets: `toolGrantEntry`
|
|
233
|
+
* returns `null` for it, because `server` cannot hold the unresolved sentinel.
|
|
234
|
+
*
|
|
235
|
+
* **It is untrusted text.** It embeds the command the model proposed, so it is carried as a
|
|
236
|
+
* labelled `value` part and neutralised with every other untrusted string; putting it in an `own`
|
|
237
|
+
* part would route model-authored bytes into the one part class a surface may paint raw.
|
|
238
|
+
*/
|
|
239
|
+
readonly allowEntry: string | undefined;
|
|
240
|
+
constructor(command: string, outcome?: string, reason?: string, escalatedBy?: string, negotiation?: string, allowEntry?: string, subject?: ApprovalSubject);
|
|
123
241
|
}
|