@intentic/sandbox-contract 1.246.1 → 1.248.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (106) hide show
  1. package/dist/batch-runs.d.ts +2 -0
  2. package/dist/batch-runs.d.ts.map +1 -1
  3. package/dist/batch-runs.js +1 -0
  4. package/dist/batch-runs.js.map +1 -1
  5. package/dist/contracts/agent.contract.d.ts +20 -0
  6. package/dist/contracts/agent.contract.d.ts.map +1 -1
  7. package/dist/contracts/personas.contract.d.ts +38 -4
  8. package/dist/contracts/personas.contract.d.ts.map +1 -1
  9. package/dist/contracts/personas.contract.js +10 -1
  10. package/dist/contracts/personas.contract.js.map +1 -1
  11. package/dist/contracts/runner.contract.d.ts +93 -93
  12. package/dist/contracts/settings.contract.d.ts +109 -12
  13. package/dist/contracts/settings.contract.d.ts.map +1 -1
  14. package/dist/contracts/usage.contract.d.ts +22 -0
  15. package/dist/contracts/usage.contract.d.ts.map +1 -1
  16. package/dist/contracts/usage.contract.js +19 -0
  17. package/dist/contracts/usage.contract.js.map +1 -1
  18. package/dist/definition.d.ts +20 -24
  19. package/dist/definition.d.ts.map +1 -1
  20. package/dist/fast-tier.js +1 -1
  21. package/dist/fast-tier.js.map +1 -1
  22. package/dist/index.d.ts +191 -19
  23. package/dist/index.d.ts.map +1 -1
  24. package/dist/index.js +2 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/model-pins.d.ts +15 -0
  27. package/dist/model-pins.d.ts.map +1 -0
  28. package/dist/model-pins.js +22 -0
  29. package/dist/model-pins.js.map +1 -0
  30. package/dist/model-roles.d.ts +172 -0
  31. package/dist/model-roles.d.ts.map +1 -0
  32. package/dist/model-roles.js +167 -0
  33. package/dist/model-roles.js.map +1 -0
  34. package/dist/schemas/agent.d.ts +22 -2
  35. package/dist/schemas/agent.d.ts.map +1 -1
  36. package/dist/schemas/agent.js +4 -2
  37. package/dist/schemas/agent.js.map +1 -1
  38. package/dist/schemas/automations.d.ts.map +1 -1
  39. package/dist/schemas/automations.js.map +1 -1
  40. package/dist/schemas/personas.d.ts +48 -4
  41. package/dist/schemas/personas.d.ts.map +1 -1
  42. package/dist/schemas/personas.js +28 -5
  43. package/dist/schemas/personas.js.map +1 -1
  44. package/dist/schemas/plan-limits.d.ts +20 -0
  45. package/dist/schemas/plan-limits.d.ts.map +1 -1
  46. package/dist/schemas/plan-limits.js +21 -0
  47. package/dist/schemas/plan-limits.js.map +1 -1
  48. package/dist/schemas/settings.d.ts +88 -6
  49. package/dist/schemas/settings.d.ts.map +1 -1
  50. package/dist/schemas/settings.js +19 -23
  51. package/dist/schemas/settings.js.map +1 -1
  52. package/dist/schemas/usage.d.ts +5 -0
  53. package/dist/schemas/usage.d.ts.map +1 -1
  54. package/dist/schemas/usage.js +5 -0
  55. package/dist/schemas/usage.js.map +1 -1
  56. package/dist/workspace-state.d.ts +0 -5
  57. package/dist/workspace-state.d.ts.map +1 -1
  58. package/dist/workspace-state.js +0 -1
  59. package/dist/workspace-state.js.map +1 -1
  60. package/package.json +4 -4
  61. package/src/agent-catalog.ts +1 -1
  62. package/src/batch-runs.test.ts +10 -5
  63. package/src/batch-runs.ts +10 -3
  64. package/src/chores/chores.ts +1 -1
  65. package/src/chores/verdict.test.ts +2 -2
  66. package/src/chores/verdict.ts +3 -3
  67. package/src/contracts/personas.contract.ts +17 -0
  68. package/src/contracts/usage.contract.ts +31 -0
  69. package/src/events.ts +1 -1
  70. package/src/fast-tier.test.ts +1 -1
  71. package/src/fast-tier.ts +5 -5
  72. package/src/index.ts +2 -3
  73. package/src/model-pins.test.ts +121 -0
  74. package/src/model-pins.ts +132 -0
  75. package/src/model-roles.test.ts +52 -0
  76. package/src/model-roles.ts +320 -0
  77. package/src/plan-pools.ts +1 -1
  78. package/src/prompt-complexity.test.ts +1 -1
  79. package/src/prompt-complexity.ts +2 -2
  80. package/src/provider-specs.test.ts +1 -1
  81. package/src/schemas/agent.ts +42 -17
  82. package/src/schemas/agents.ts +2 -2
  83. package/src/schemas/automations.ts +6 -2
  84. package/src/schemas/personas.ts +85 -18
  85. package/src/schemas/plan-limits.ts +50 -0
  86. package/src/schemas/settings.ts +92 -98
  87. package/src/schemas/usage.ts +59 -0
  88. package/src/workspace-state.test.ts +0 -1
  89. package/src/workspace-state.ts +0 -6
  90. package/dist/agent-run-model.d.ts +0 -4
  91. package/dist/agent-run-model.d.ts.map +0 -1
  92. package/dist/agent-run-model.js +0 -13
  93. package/dist/agent-run-model.js.map +0 -1
  94. package/dist/quick-model.d.ts +0 -15
  95. package/dist/quick-model.d.ts.map +0 -1
  96. package/dist/quick-model.js +0 -39
  97. package/dist/quick-model.js.map +0 -1
  98. package/dist/schemas/context.d.ts +0 -30
  99. package/dist/schemas/context.d.ts.map +0 -1
  100. package/dist/schemas/context.js +0 -34
  101. package/dist/schemas/context.js.map +0 -1
  102. package/src/agent-run-model.test.ts +0 -76
  103. package/src/agent-run-model.ts +0 -65
  104. package/src/quick-model.test.ts +0 -158
  105. package/src/quick-model.ts +0 -162
  106. package/src/schemas/context.ts +0 -87
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"workspace-state.d.ts","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
@@ -267,7 +267,6 @@ const STATE_FILES = [
267
267
  { path: ".intentic/records/plugins/", invalidates: [], why: "Agent plugin dirs, read by the SDK's loader each turn.", portability: "carry" },
268
268
  { path: ".intentic/config/skills/", invalidates: ["skills"], portability: "carry", versioned: true },
269
269
  { path: ".intentic/config/personas/", invalidates: ["personas"], portability: "carry", versioned: true },
270
- { path: ".intentic/config/context/", invalidates: ["context"], portability: "carry", versioned: true },
271
270
  ];
272
271
  export const WORKSPACE_STATE_FILES = STATE_FILES;
273
272
  export const VERSIONED_STATE_PATHS = WORKSPACE_STATE_FILES.filter((file) => file.versioned).map((file) => file.path);
@@ -1 +1 @@
1
- {"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAgIhD,MAAM,WAAW,GAAG;IA2BhB;QACI,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EAAE,CAAC,cAAc,EAAE,aAAa,EAAE,QAAQ,EAAE,WAAW,CAAC;QACnE,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAOD,EAAE,IAAI,EAAE,6CAA6C,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAO7H,EAAE,IAAI,EAAE,oCAAoC,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAO9F;QACI,IAAI,EAAE,sCAAsC;QAC5C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,4GAA4G;QACjH,WAAW,EAAE,OAAO;KACvB;IAcD,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,CAAC,UAAU,EAAE,cAAc,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAYzI,EAAE,IAAI,EAAE,gDAAgD,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAC/H,EAAE,IAAI,EAAE,yCAAyC,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IACxH,EAAE,IAAI,EAAE,iCAAiC,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAChH;QACI,IAAI,EAAE,iDAAiD;QACvD,WAAW,EAAE,CAAC,aAAa,CAAC;QAC5B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,oGAAoG;KAC7G;IAED,EAAE,IAAI,EAAE,gCAAgC,EAAE,WAAW,EAAE,CAAC,UAAU,EAAE,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAWzH,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAW7G;QACI,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,CAAC,YAAY,CAAC;QAC3B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,sDAAsD;KAC/D;IAOD;QACI,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,uGAAuG;QAC5G,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAYD,EAAE,IAAI,EAAE,sCAAsC,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAmBlH;QACI,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,2IAA2I;QAChJ,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;QAGf,aAAa,EAAE,0GAA0G;KAC5H;IAID;QACI,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,CAAC,cAAc,CAAC;QAC7B,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,qFAAqF;KAC9F;IAOD,EAAE,IAAI,EAAE,yCAAyC,EAAE,WAAW,EAAE,CAAC,aAAa,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAYvG,EAAE,IAAI,EAAE,+BAA+B,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAkB1G,EAAE,IAAI,EAAE,6BAA6B,EAAE,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAK1H;QACI,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,iHAAiH;QACtH,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAcD;QACI,IAAI,EAAE,wCAAwC;QAC9C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,iHAAiH;QACtH,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,yJAAyJ;QAC9J,WAAW,EAAE,OAAO;KACvB;IAaD;QACI,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,uGAAuG;QAC5G,WAAW,EAAE,OAAO;KACvB;IAMD;QACI,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,6IAA6I;QAClJ,WAAW,EAAE,OAAO;KACvB;IAKD;QACI,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,4IAA4I;QACjJ,WAAW,EAAE,OAAO;QACpB,QAAQ,EAAE,IAAI;QACd,aAAa,EAAE,sEAAsE;KACxF;IAQD,EAAE,IAAI,EAAE,iCAAiC,EAAE,WAAW,EAAE,CAAC,WAAW,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAC9G,EAAE,IAAI,EAAE,sCAAsC,EAAE,WAAW,EAAE,CAAC,WAAW,EAAE,eAAe,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAOnH,EAAE,IAAI,EAAE,oCAAoC,EAAE,WAAW,EAAE,CAAC,cAAc,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IACpH;QACI,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,2cAA2c;QAChd,WAAW,EAAE,OAAO;KACvB;IAQD;QACI,IAAI,EAAE,yCAAyC;QAC/C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,kYAAkY;QACvY,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,uCAAuC;QAC7C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,mLAAmL;QACxL,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,wCAAwC;QAC9C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,6eAA6e;QAClf,WAAW,EAAE,OAAO;KACvB;IAsBD;QACI,IAAI,EAAE,0CAA0C;QAChD,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,0iBAA0iB;QAC/iB,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAKD;QACI,IAAI,EAAE,4CAA4C;QAClD,WAAW,EAAE,CAAC,YAAY,CAAC;QAC3B,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAoBD,EAAE,IAAI,EAAE,wCAAwC,EAAE,WAAW,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE;IAItI,EAAE,IAAI,EAAE,0CAA0C,EAAE,WAAW,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE;IAGvG,EAAE,IAAI,EAAE,+CAA+C,EAAE,WAAW,EAAE,CAAC,YAAY,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAG7H;QACI,IAAI,EAAE,wCAAwC;QAC9C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,odAAod;QACzd,WAAW,EAAE,OAAO;KACvB;IAYD;QACI,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,qVAAqV;QAC1V,WAAW,EAAE,UAAU;QACvB,IAAI,EAAE,sHAAsH;KAC/H;IAcD;QACI,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,oKAAoK;QACzK,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,iNAAiN;KAC1N;IAMD;QACI,IAAI,EAAE,oCAAoC;QAC1C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,4HAA4H;QACjI,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,6LAA6L;QAClM,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,wBAAwB;QAC9B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,iNAAiN;QACtN,WAAW,EAAE,SAAS;KACzB;IAMD;QACI,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,kHAAkH;QACvH,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,+CAA+C;KACjE;IACD;QACI,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,+JAA+J;QACpK,WAAW,EAAE,SAAS;KACzB;IAMD;QACI,IAAI,EAAE,8BAA8B;QACpC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,oHAAoH;QACzH,WAAW,EAAE,SAAS;QACtB,aAAa,EAAE,wDAAwD;KAC1E;IACD;QACI,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,iJAAiJ;QACtJ,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,yDAAyD;KAClE;IACD;QACI,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,2IAA2I;QAChJ,WAAW,EAAE,OAAO;KACvB;IACD;QACI,IAAI,EAAE,yBAAyB;QAC/B,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,2GAA2G;QAChH,WAAW,EAAE,SAAS;KACzB;IACD;QACI,IAAI,EAAE,2BAA2B;QACjC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,iGAAiG;QACtG,WAAW,EAAE,QAAQ;QACrB,IAAI,EAAE,yEAAyE;KAClF;IASD;QACI,IAAI,EAAE,wCAAwC;QAC9C,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,oIAAoI;QACzI,WAAW,EAAE,UAAU;QACvB,MAAM,EAAE,KAAK;QACb,IAAI,EAAE,kFAAkF;KAC3F;IACD;QACI,IAAI,EAAE,+BAA+B;QACrC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,uGAAuG;QAC5G,WAAW,EAAE,UAAU;KAC1B;IACD;QACI,IAAI,EAAE,mCAAmC;QACzC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,kFAAkF;QACvF,WAAW,EAAE,UAAU;KAC1B;IACD;QACI,IAAI,EAAE,iCAAiC;QACvC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,0DAA0D;QAC/D,WAAW,EAAE,OAAO;QACpB,SAAS,EAAE,IAAI;KAClB;IAKD;QACI,IAAI,EAAE,0BAA0B;QAChC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,sGAAsG;QAC3G,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,8EAA8E;KACvF;IACD;QACI,IAAI,EAAE,6BAA6B;QACnC,WAAW,EAAE,EAAE;QACf,GAAG,EAAE,kIAAkI;QACvI,WAAW,EAAE,SAAS;QACtB,IAAI,EAAE,kFAAkF;KAC3F;IACD,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,EAAE,EAAE,GAAG,EAAE,wDAAwD,EAAE,WAAW,EAAE,OAAO,EAAE;IAS5I,EAAE,IAAI,EAAE,0BAA0B,EAAE,WAAW,EAAE,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAcpG,EAAE,IAAI,EAAE,4BAA4B,EAAE,WAAW,EAAE,CAAC,UAAU,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;IAMxG,EAAE,IAAI,EAAE,2BAA2B,EAAE,WAAW,EAAE,CAAC,SAAS,CAAC,EAAE,WAAW,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE;CACxD,CAAC;AAEnD,MAAM,CAAC,MAAM,qBAAqB,GAAkC,WAAW,CAAC;AAShF,MAAM,CAAC,MAAM,qBAAqB,GAAsB,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAgBxI,MAAM,CAAC,MAAM,sBAAsB,GAAsB,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,QAAQ,CAAC,CAAC,GAAG,CAChI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CACtB,CAAC;AAsDF,MAAM,CAAC,MAAM,eAAe,GAAyC;IACjE,MAAM,EAAE,GAAG,SAAS,SAAS;IAC7B,OAAO,EAAE,GAAG,SAAS,UAAU;IAC/B,KAAK,EAAE,GAAG,SAAS,QAAQ;IAC3B,QAAQ,EAAE,GAAG,SAAS,WAAW;IACjC,OAAO,EAAE,GAAG,SAAS,UAAU;CAClC,CAAC;AAKF,MAAM,CAAC,MAAM,YAAY,GAAG,MAAM,CAAC,IAAI,CAAC,eAAe,CAA0B,CAAC;AAIlF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAwB,EAAc,EAAE;IACjE,QAAQ,IAAI,CAAC,WAAW,EAAE,CAAC;QACvB,KAAK,QAAQ;YACT,OAAO,SAAS,CAAC;QACrB,KAAK,UAAU;YACX,OAAO,UAAU,CAAC;QACtB,KAAK,SAAS;YACV,OAAO,OAAO,CAAC;QACnB,KAAK,OAAO;YACR,OAAO,IAAI,CAAC,SAAS,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;IACxF,CAAC;AACL,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,KAAiB,EAAqB,EAAE,CACpE,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAqBlG,MAAM,CAAC,MAAM,kBAAkB,GAAsB,YAAY,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,EAAE;IAChF,MAAM,KAAK,GAAG,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,KAAK,CAAC,CAAC;IACnF,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC;QAChD,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC;QAC1E,CAAC,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;AACzC,CAAC,CAAC,CAAC;AAYH,MAAM,CAAC,MAAM,qBAAqB,GAAsB,qBAAqB,CAAC,MAAM,CAChF,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,KAAK,IAAI,CAAC,IAAI,CAAC,WAAW,KAAK,OAAO,IAAI,IAAI,CAAC,WAAW,KAAK,UAAU,CAAC,CACvG,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAK3B,MAAM,CAAC,MAAM,oBAAoB,GAAsB,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,qBAAqB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CACzI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CACtB,CAAC;AAUF,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,SAAiB,EAAU,EAAE,CAC7D,GAAG,eAAe,CAAC,KAAK,uBAAuB,SAAS,CAAC,UAAU,CAAC,kBAAkB,EAAE,GAAG,CAAC,EAAE,CAAC;AAmBnG,MAAM,CAAC,MAAM,uBAAuB,GAAsB,qBAAqB,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CACxI,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CACtB,CAAC;AAIF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC,uBAAuB,CAAC,QAAQ,CAAC,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,CAAC;AAoBhI,MAAM,CAAC,MAAM,oBAAoB,GAAwB,IAAI,GAAG,CAAC;IAC7D,qBAAqB;IACrB,uBAAuB;IACvB,8BAA8B;IAC9B,0BAA0B;IAC1B,iBAAiB;IACjB,cAAc;IACd,kBAAkB;IAClB,eAAe;IAKf,aAAa;CAChB,CAAC,CAAC;AAcH,MAAM,CAAC,MAAM,kBAAkB,GAAG,GAAG,SAAS,gCAAgC,CAAC;AAmB/E,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAAC,OAAe,EAAsB,EAAE;IACxE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,KAAK,EAAE,IAAI,OAAO,KAAK,GAAG,CAAC,CAAC;IAC/F,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,MAAM,CAAC;IAClB,CAAC;IACD,IAAI,QAAQ,CAAC,CAAC,CAAC,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,SAAS,CAAC;IACrB,CAAC;IACD,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,kBAAkB,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,kBAAkB,GAAG,CAAC,EAAE,CAAC;QACzE,OAAO,SAAS,CAAC;IACrB,CAAC;IAGD,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IAC7C,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS,CAAC;AAC/D,CAAC,CAAC;AAIF,MAAM,CAAC,MAAM,qBAAqB,GAAG,CAAC,OAAe,EAAW,EAAE,CAAC,oBAAoB,CAAC,OAAO,CAAC,KAAK,SAAS,CAAC;AAoB/G,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,OAAe,EAAW,EAAE;IAC/D,MAAM,GAAG,GAAG,OAAO,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;IAC/D,OAAO,qBAAqB,CAAC,GAAG,CAAC,IAAI,qBAAqB,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,IAAI,CAAC,CAAC,CAAC;AAC1I,CAAC,CAAC;AA2BF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,KAAwB,EAAE,WAAwC,EAAqB,EAAE,CAAC;IACrH,GAAG,IAAI,GAAG,CACN,CAAC,GAAG,qBAAqB,EAAE,GAAG,WAAW,CAAC;SACrC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;SACjG,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAC3C;CACJ,CAAC;AAOF,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,WAAwC,EAAqB,EAAE,CAAC;IAC/F,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,qBAAqB,EAAE,GAAG,WAAW,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;CAC7F,CAAC"}
1
+ {"version":3,"file":"workspace-state.js","sourceRoot":"","sources":["../src/workspace-state.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@intentic/sandbox-contract",
3
- "version": "1.246.1",
3
+ "version": "1.248.0",
4
4
  "description": "oRPC wire contract for the intentic sandbox daemon, shared by the daemon and its browser client",
5
5
  "license": "MIT",
6
6
  "type": "module",
@@ -185,9 +185,9 @@
185
185
  }
186
186
  },
187
187
  "dependencies": {
188
- "@intentic/constants": "1.246.1",
189
- "@intentic/extension-manifest": "1.246.1",
190
- "@intentic/registry": "1.246.1",
188
+ "@intentic/constants": "1.248.0",
189
+ "@intentic/extension-manifest": "1.248.0",
190
+ "@intentic/registry": "1.248.0",
191
191
  "@orpc/contract": "1.14.13",
192
192
  "tslib": "2.8.1",
193
193
  "zod": "4.5.4"
@@ -58,7 +58,7 @@ export const PROVIDER_VENDOR: Record<NativeProvider, string> = Object.fromEntrie
58
58
  * the prefix is what keeps it a pure function of (provider, harness) instead of a lookup against the installed
59
59
  * manifest, which the contract cannot see and the browser would have to pass in everywhere.
60
60
  *
61
- * A SLASH, never a colon: `${provider}:${model}` is the picker's own key shape, and quick-model.ts's parsePinned
61
+ * A SLASH, never a colon: `${provider}:${model}` is the picker's own key shape, and model-pins.ts's parsePinned
62
62
  * splits a pinned selection on the FIRST colon. `endpoint:ollama:qwen3` would parse as provider "endpoint" with
63
63
  * model "ollama:qwen3", a pin that silently resolves to nothing. The capability id (entryId) excludes both
64
64
  * characters, so `endpoint/<id>` stays unambiguous in either direction. */
@@ -1,5 +1,9 @@
1
1
  import { STATE_DIR } from "@intentic/constants";
2
2
  import { describe, expect, it } from "vitest";
3
+
4
+ // The job a batch pack starts, which decides whose model list pays for it. Maintenance stands in for all of
5
+ // them: what `batchTurnBody` owes is that the role it is handed reaches the turn, not which one it was.
6
+ const ROLE = `maintenance-chore` as const;
3
7
  import {
4
8
  type BatchRunKind,
5
9
  batchConversationId,
@@ -134,16 +138,17 @@ describe(`what the agent is told`, () => {
134
138
 
135
139
  describe(`the turn a run starts`, () => {
136
140
  it(`is always isolated and unattended, which is what registers the fleet entry`, () => {
137
- const body = batchTurnBody({ prompt: `do it`, title: `t`, conversationId: `mt-r5k2a` });
141
+ const body = batchTurnBody({ prompt: `do it`, title: `t`, conversationId: `mt-r5k2a`, role: ROLE });
138
142
  expect([body[`isolated`], body[`unattended`]]).toEqual([true, true]);
139
143
  });
140
144
 
141
145
  it(`caps the title at what the fleet row can show`, () => {
142
- expect(String(batchTurnBody({ prompt: `p`, title: `t`.repeat(200), conversationId: `c` })[`title`])).toHaveLength(80);
146
+ expect(String(batchTurnBody({ prompt: `p`, title: `t`.repeat(200), conversationId: `c`, role: ROLE })[`title`])).toHaveLength(80);
143
147
  });
144
148
 
145
149
  it(`carries a pinned model and its tier when the row's caret chose one`, () => {
146
150
  const body = batchTurnBody({
151
+ role: ROLE,
147
152
  prompt: `p`,
148
153
  title: `t`,
149
154
  conversationId: `c`,
@@ -153,15 +158,15 @@ describe(`the turn a run starts`, () => {
153
158
  });
154
159
 
155
160
  /* ABSENT rather than undefined: the body is serialized to JSON and the daemon's fill step reads a missing
156
- * key as "the owner's agentRunModels decide", which is not what an explicit null would say. */
161
+ * key as "the owner's list for this job decides", which is not what an explicit null would say. */
157
162
  it(`omits the keys a pick did not pin, rather than sending them empty`, () => {
158
- const body = batchTurnBody({ prompt: `p`, title: `t`, conversationId: `c`, pick: { provider: `claude` } });
163
+ const body = batchTurnBody({ prompt: `p`, title: `t`, conversationId: `c`, role: ROLE, pick: { provider: `claude` } });
159
164
  expect(Object.keys(body)).not.toContain(`model`);
160
165
  expect(Object.keys(body)).not.toContain(`effort`);
161
166
  });
162
167
 
163
168
  it(`sends no model keys at all when nothing was pinned`, () => {
164
- const keys = Object.keys(batchTurnBody({ prompt: `p`, title: `t`, conversationId: `c` }));
169
+ const keys = Object.keys(batchTurnBody({ prompt: `p`, title: `t`, conversationId: `c`, role: ROLE }));
165
170
  expect(keys.some((key) => [`agent`, `model`, `effort`].includes(key))).toBe(false);
166
171
  });
167
172
  });
package/src/batch-runs.ts CHANGED
@@ -1,4 +1,5 @@
1
1
  import { STATE_DIR } from "@intentic/constants";
2
+ import type { ModelRole } from "./model-roles.js";
2
3
 
3
4
  /* ONE BATCH RUN ENGINE, for every surface that fans an ISOLATED AGENT TURN out over a set of items and reads
4
5
  * the answers back off disk.
@@ -143,9 +144,9 @@ export const batchReportingClause = (params: {
143
144
  /* THE BODY OF THE `POST /agent` THAT STARTS ONE ITEM, so the flag combination that makes a run a run is decided
144
145
  * once. `isolated: true` with a conversationId is the shape (and the only shape) that registers a fleet entry,
145
146
  * which is why none of these packs owns session machinery; `unattended: true` is what the turn IS — started by
146
- * a row rather than by a person at a composer — and it is what makes the daemon answer with the owner's
147
- * `agentRunModels` unless the caller pinned a model on the row's caret, in which case the pick rides along and
148
- * the daemon's fill step leaves it alone.
147
+ * a row rather than by a person at a composer — and `runRole` is which of those rows, so the daemon answers
148
+ * with the owner's list FOR THAT JOB (model-roles.ts) unless the caller pinned a model on the row's caret, in
149
+ * which case the pick rides along and the daemon's fill step leaves it alone.
149
150
  *
150
151
  * PERMISSIONS AND ISOLATION ARE THE CALLER'S, deliberately. They are the two decisions that differ by kind and
151
152
  * both are about safety rather than plumbing: an acceptance test that parks on a permission card is a test that
@@ -162,6 +163,11 @@ export const batchTurnBody = (params: {
162
163
  readonly prompt: string;
163
164
  readonly title: string;
164
165
  readonly conversationId: string;
166
+ /* WHICH JOB THIS IS, and therefore which of the owner's model lists pays for it (model-roles.ts). Required
167
+ * rather than optional, because every pack that reaches this function is one of the named roles and a
168
+ * default here would silently hand a new one somebody else's budget — which is exactly how one "agent runs"
169
+ * tier came to cover a documentation sweep and a red production pipeline. */
170
+ readonly role: ModelRole;
165
171
  readonly pick?: BatchTurnPick | undefined;
166
172
  readonly extra?: Readonly<Record<string, unknown>> | undefined;
167
173
  }): Record<string, unknown> => ({
@@ -170,6 +176,7 @@ export const batchTurnBody = (params: {
170
176
  conversationId: params.conversationId,
171
177
  isolated: true,
172
178
  unattended: true,
179
+ runRole: params.role,
173
180
  ...(params.pick === undefined
174
181
  ? {}
175
182
  : {
@@ -101,7 +101,7 @@ export interface Chore {
101
101
  * this asks whether the question makes sense. "Re-read the documentation against the code" in a repository
102
102
  * with no documentation is not a chore that is currently clear, it is one that will never apply here, and
103
103
  * showing it as clear says we checked something we cannot check. A chore that does not apply is dropped from
104
- * the panel entirely; a line in the scope strip records that it was considered.
104
+ * the panel entirely; a line under the panel's list records that it was considered.
105
105
  *
106
106
  * A BARE CAUSE, "no Dockerfile", never "this repository ships no Dockerfile, so there is no image to slim".
107
107
  * Same spelling as `ProbeSpec.unavailable`, and for the same reason both surfaces need: one absent
@@ -512,8 +512,8 @@ describe(`what does not apply here`, () => {
512
512
  expect(assessReport(withShape({}), NOW).filter((verdict) => verdict.state === `not-applicable`)).toEqual([]);
513
513
  });
514
514
 
515
- /* THE CAUSES HAVE TO GROUP, and that is a fact about the STRINGS rather than about the gates. The scope strip
516
- * prints one line per distinct cause with the chores it costs listed beside it, so two gates that both mean
515
+ /* THE CAUSES HAVE TO GROUP, and that is a fact about the STRINGS rather than about the gates. The panel's
516
+ * scope note prints one line per distinct cause with the chores it costs listed beside it, so two gates that both mean
517
517
  * "there is no package.json here" and say it in different words print two lines, and a workspace root, where
518
518
  * a dozen chores are ruled out by three facts, is back to the paragraph-per-chore wall this phrasing replaced.
519
519
  * Bounded rather than enumerated: a new gate may invent a new cause, it may not invent a new sentence. */
@@ -11,7 +11,7 @@ import { probeSpec } from "./probes.js";
11
11
  * not-applicable this chore is not a QUESTION worth asking of this repository, there is no Dockerfile to
12
12
  * slim, no pipeline to tighten, no documentation to re-read. Dropped from the panel entirely
13
13
  * rather than shown as clear, because "clear" claims we checked, and there was nothing to check.
14
- * The reason survives in the scope strip, so "why is there no Docker chore here?" has an answer.
14
+ * The reason survives in the panel's scope note, so "why is there no Docker chore here?" has an answer.
15
15
  * unavailable we have not measured this. knip is not a devDependency; there is no lockfile to audit. Rendered
16
16
  * greyed, never badged, and never collapsed into `clear`, a maintenance surface reporting a green
17
17
  * repository it has never actually measured is worse than one that says nothing.
@@ -39,7 +39,7 @@ import { probeSpec } from "./probes.js";
39
39
  *
40
40
  * Nothing here can hide a problem. Snoozing and settling change whether the rail SPEAKS; the panel still shows
41
41
  * the chore, its evidence and its state. The one thing that removes a row entirely is `not-applicable`, and that
42
- * is not hiding, it is the absence of a subject, counted in the panel's scope strip and expandable to the reason.
42
+ * is not hiding, it is the absence of a subject, counted in the panel's scope note and expandable to the reason.
43
43
  * A maintenance surface you can quietly bury findings in is a maintenance surface nobody trusts. */
44
44
 
45
45
  export type ChoreState = "due" | "clear" | "snoozed" | "stale" | "unavailable" | "not-applicable";
@@ -110,7 +110,7 @@ export const assessChore = (chore: Chore, context: ChoreContext, ledger: ChoreLe
110
110
 
111
111
  /* APPLICABILITY FIRST, before anything is measured or any evidence is read. A chore that does not apply is
112
112
  * not "clear" and not "unmeasured", the question does not arise here, and every subsequent branch of this
113
- * function would be answering it anyway. The cause is carried as the headline, because the scope strip, which
113
+ * function would be answering it anyway. The cause is carried as the headline, because the scope note, which
114
114
  * groups these rows BY it, is the only place it will ever be read. */
115
115
  const inapplicable = chore.applies?.(context.signals);
116
116
  if (inapplicable !== undefined) {
@@ -3,6 +3,8 @@ import {
3
3
  PersonaIdParamSchema,
4
4
  PersonaKitSchema,
5
5
  PersonaPromptSchema,
6
+ PersonaRouteAskSchema,
7
+ PersonaRouteSchema,
6
8
  PersonaSchema,
7
9
  PersonaSkillBodySchema,
8
10
  PersonaSkillNameSchema,
@@ -68,6 +70,21 @@ export const personasContract = {
68
70
  .input(PersonaIdParamSchema)
69
71
  .output(OkSchema),
70
72
 
73
+ /* WHICH CARD A NEW CHAT BELONGS TO, asked by the composer before the first turn and answered by the
74
+ * `persona-router` helper role (the sandbox's agent/persona-router.ts). A READ that spends a small model
75
+ * call, which is why it is a POST: it is not idempotent in cost, only in effect. Nothing is applied here; the
76
+ * composer applies the answer, or shows it, under the `personaRouting` setting. */
77
+ route: oc
78
+ .route({
79
+ method: "POST",
80
+ path: "/personas/route",
81
+ summary: "Which persona a new chat belongs to",
82
+ description:
83
+ "Reads the message a chat is about to open with, and one line per persona, and names the card it belongs to, or none. Costs one small model call on the persona-routing list. Nothing is applied: the composer shows or applies the answer according to the persona routing setting.",
84
+ })
85
+ .input(PersonaRouteAskSchema)
86
+ .output(PersonaRouteSchema),
87
+
71
88
  // ---- the kit: what this card is told, and the skills only it reaches ----
72
89
 
73
90
  kit: oc
@@ -1,5 +1,6 @@
1
1
  import { oc } from "@orpc/contract";
2
2
  import { z } from "zod";
3
+ import { LimitResetClaimSchema, LimitResetStatusSchema } from "../schemas/plan-limits.js";
3
4
  import { DayWindowQuerySchema, UsageRollupSchema } from "../schemas/usage.js";
4
5
 
5
6
  // The one control over the headroom readings a person has: measure again, now, every connection. `force`
@@ -38,4 +39,34 @@ export const usageContract = {
38
39
  })
39
40
  .input(RefreshPlanLimitsSchema)
40
41
  .output(z.object({ ok: z.literal(true) })),
42
+ /* THE WAY PAST A SPENT SESSION WINDOW THAT ISN'T WAITING (LimitResetStatusSchema has what it costs).
43
+ *
44
+ * ASKED, NOT POLLED, and that is the whole reason it is a route of its own rather than another field on the
45
+ * account list. The provider only evaluates it when told the account is at the wall, so asking is a claim
46
+ * about the account's state; asking on every headroom sweep, for every connection, would be that claim made
47
+ * continuously and falsely. It is asked at the one moment it is true — a refused turn, with its strip on
48
+ * screen — and the answer is worth nothing a moment later, so nothing caches it.
49
+ *
50
+ * Answers `available: false` rather than failing for an account with no such mechanism, so a caller can ask
51
+ * about any account it holds without first knowing which provider grants one. */
52
+ limitReset: oc
53
+ .route({
54
+ method: "GET",
55
+ path: "/usage/limit-reset/{account}",
56
+ summary: "Whether this account's session window can be reopened now",
57
+ description:
58
+ "Asks the provider whether it will reopen this account's spent session window immediately, which some plans grant once a week. Only worth asking about an account that has actually been refused: the answer is the provider's judgement at this moment, it is not cached, and an account with no such grant answers plainly that it has none.",
59
+ })
60
+ .input(z.object({ account: z.string().min(1).describe("Which account.") }))
61
+ .output(LimitResetStatusSchema),
62
+ claimLimitReset: oc
63
+ .route({
64
+ method: "POST",
65
+ path: "/usage/limit-reset/{account}/claim",
66
+ summary: "Reopen this account's session window now",
67
+ description:
68
+ "Spends one of the account's weekly resets to reopen its session window immediately. The weekly allowance is untouched and still binds. Answers with what the provider actually did: only `reset` changed anything, and it is the cue to send the refused turn again.",
69
+ })
70
+ .input(z.object({ account: z.string().min(1).describe("Which account.") }))
71
+ .output(LimitResetClaimSchema),
41
72
  };
package/src/events.ts CHANGED
@@ -1279,7 +1279,7 @@ export const AgentEventSchema = z.discriminatedUnion("kind", [
1279
1279
  // was stopped, or died under the card), which is not a decision and must not replay as one.
1280
1280
  z.object({ kind: z.literal("resolved"), requestId: z.string(), reply: AgentReplySchema.optional() }),
1281
1281
  /* There was a `permission_note` frame here: a late sentence raced onto a command card that had already gone
1282
- * out, because the explanation was optional and the card must not wait for a quick-model rung that might
1282
+ * out, because the explanation was optional and the card must not wait for a one-shot helper rung that might
1283
1283
  * take tens of seconds. It is gone with the setting that made it optional. The judge now decides the
1284
1284
  * verdict, so the sentence is not a decoration arriving afterwards — it is the REASON THE CARD EXISTS, and
1285
1285
  * a card cannot be raised before it is known. Nothing races, and `PermissionAsk.explain` is populated at
@@ -61,7 +61,7 @@ test("a pin on this provider wins over the catalog's own cheap end", () => {
61
61
  });
62
62
 
63
63
  test("takes a pinned id verbatim, so a model the static catalog has not caught up with is still pinnable", () => {
64
- // The same call resolveQuickModels makes, and for the same reason: the picker offers a custom-id escape
64
+ // The same call readyChain makes, and for the same reason: the picker offers a custom-id escape
65
65
  // hatch, and second-guessing the id here would run a different model than the settings row names.
66
66
  expect(fastFor(`claude-opus-5`, { pinned: [`claude:claude-haiku-9`] })).toBe(`claude-haiku-9`);
67
67
  });
package/src/fast-tier.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { compareCheapestFirst, isCheaperRung } from "./model-order.js";
2
- import { parsePinned } from "./quick-model.js";
2
+ import { parsePinned } from "./model-pins.js";
3
3
  import type { AgentProvider } from "./schemas/agent.js";
4
4
 
5
5
  /* WHICH MODEL A DOWNGRADED TURN ACTUALLY RUNS ON, the second half of automatic tier selection.
@@ -21,7 +21,7 @@ import type { AgentProvider } from "./schemas/agent.js";
21
21
  * follow-up cheap to answer. So a cross-provider pin here is dropped rather than honoured: saving a fraction of
22
22
  * a cent by starting the conversation over is not a saving.
23
23
  *
24
- * THE ORDER IS A LADDER, for the reason quick-model.ts is one, but a shorter one: the caller spends the head
24
+ * THE ORDER IS A LADDER, for the reason model-pins.ts is one, but a shorter one: the caller spends the head
25
25
  * and falls back to the user's own pick, rather than walking rungs. A downgrade that cannot be started is not
26
26
  * worth a second attempt when the honest answer (their model) is sitting right there. */
27
27
 
@@ -34,14 +34,14 @@ export interface FastTierInput {
34
34
  // That provider's catalog as the caller can see it. Empty is a real state (a catalog that has not loaded),
35
35
  // and it resolves to no downgrade rather than to a guess.
36
36
  readonly models: readonly string[];
37
- // settings.autoFastModels: an ordered list of `${provider}:${modelId}` keys (quickModelKey), or empty for
37
+ // settings.autoFastModels: an ordered list of `${provider}:${modelId}` keys (modelPinKey), or empty for
38
38
  // Auto. Entries naming another provider are dropped, not honoured.
39
39
  readonly pinned: readonly string[];
40
40
  }
41
41
 
42
42
  /* THE CHEAPER MODEL TO RUN THIS TURN ON, or undefined for "there isn't one, use their pick".
43
43
  *
44
- * A PIN IS TAKEN VERBATIM against the catalog, the same call resolveQuickModels makes and for the same reason:
44
+ * A PIN IS TAKEN VERBATIM against the catalog, the same call readyChain makes and for the same reason:
45
45
  * the model picker offers a custom-id escape hatch for a model the static catalog has not caught up with, and
46
46
  * second-guessing the id here would run a different model than the settings row names. It is still checked for
47
47
  * being CHEAPER, because that is not a fact about the catalog, it is a fact about the id, and a pin that is not
@@ -49,7 +49,7 @@ export interface FastTierInput {
49
49
  *
50
50
  * AUTO IS THE CHEAPEST ROW THE PROVIDER PUBLISHES, read through the same cheap-end order the quick model uses,
51
51
  * so the two features cannot disagree about which rung is the cheap one. Derived, never stored: connect an
52
- * account tomorrow and the answer improves by itself, exactly as quickModel's empty default does.
52
+ * account tomorrow and the answer improves by itself, exactly as a one-shot role's empty list does.
53
53
  *
54
54
  * NOTHING CHEAPER THAN THE PICK ⇒ UNDEFINED, and that is the common case worth being exact about rather than
55
55
  * the edge case: a user already working on the cheap rung has nowhere to be sent, and a user on a model whose
package/src/index.ts CHANGED
@@ -113,7 +113,6 @@ export * from "./history-state.js";
113
113
  export * from "./agent-runtimes.js";
114
114
  export * from "./provider-specs.js";
115
115
  export * from "./agent-catalog.js";
116
- export * from "./agent-run-model.js";
117
116
  export * from "./capability-env.js";
118
117
  export * from "./command-classes.js";
119
118
  export * from "./command-run.js";
@@ -131,10 +130,11 @@ export * from "./listener-protocol.js";
131
130
  export * from "./hostnames.js";
132
131
  export * from "./overlay-lint.js";
133
132
  export * from "./model-order.js";
133
+ export * from "./model-pins.js";
134
+ export * from "./model-roles.js";
134
135
  export * from "./plan-pools.js";
135
136
  export * from "./path-refs.js";
136
137
  export * from "./prompt-complexity.js";
137
- export * from "./quick-model.js";
138
138
  export * from "./output-fields.js";
139
139
  export * from "./approvals-execution.js";
140
140
  /* The wire shapes, one module per subject area, mirroring `contracts/` above: every request and response the
@@ -153,7 +153,6 @@ export * from "./schemas/capabilities.js";
153
153
  export * from "./schemas/ci.js";
154
154
  export * from "./schemas/claude-gate.js";
155
155
  export * from "./schemas/codebase-health.js";
156
- export * from "./schemas/context.js";
157
156
  export * from "./schemas/devices.js";
158
157
  export * from "./schemas/engines.js";
159
158
  export * from "./schemas/environment.js";
@@ -0,0 +1,121 @@
1
+ import { expect, test } from "vitest";
2
+ import { type ModelSource, modelPinKey, parsePinned, readyChain } from "./model-pins.js";
3
+ import type { ModelPin } from "./schemas/agent.js";
4
+
5
+ /* Which models a job spends, and in which order. The rule answers two surfaces at once: the daemon walks it,
6
+ * the browser names its head in that job's settings row, so what these tests pin is that the OWNER'S OWN LIST
7
+ * decides it and nothing else, and that there is a rung underneath the first one whenever they wrote one.
8
+ *
9
+ * NOTHING IS DERIVED FOR AN EMPTY LIST, and that is the property most of this file used to be about. A `helper`
10
+ * role with no models used to fall to an "Auto ladder" — every connected provider's cheapest row, best-first —
11
+ * so a sandbox nobody had configured still spent an account on commit messages and safety verdicts, on a
12
+ * ranking this package invented and re-ranked whenever an account was connected. Not set now means not set,
13
+ * for every role, and what the caller does with an empty answer is the caller's business: a one-shot does not
14
+ * run, a whole session opens on the owner's own composer pick. */
15
+
16
+ // A pin as the settings rows store one. The tests are about ORDER, so most of them name only the pair; the
17
+ // knobs an entry can carry ride through untouched and are asserted where that matters.
18
+ const pin = (key: string): ModelPin => {
19
+ const at = key.indexOf(`:`);
20
+ return { provider: key.slice(0, at), model: key.slice(at + 1) };
21
+ };
22
+
23
+ // Catalogs as their providers actually publish them. The resolver reads none of them — a pin is taken verbatim
24
+ // — but a ModelSource carries one, and a fixture that lied about it would hide a resolver that started looking.
25
+ const CLAUDE: ModelSource = { provider: `claude`, ready: true, models: [`claude-opus-5`, `claude-sonnet-5`, `claude-haiku-4-5-20251001`] };
26
+ const GOOGLE: ModelSource = { provider: `gemini`, ready: true, models: [`gemini-3-flash`, `gemini-3-flash-lite`, `gemini-3-pro`] };
27
+ const CODEX: ModelSource = { provider: `codex`, ready: true, models: [`gpt-5.4-mini`, `gpt-5.6`] };
28
+ const KIMI: ModelSource = { provider: `kimi`, ready: true, models: [`kimi-k2.6`, `kimi-k2.7-code`, `kimi-k3`] };
29
+
30
+ const offline = (source: ModelSource): ModelSource => ({ ...source, ready: false });
31
+
32
+ // The model that answers when nothing goes wrong: the head of the chain, which is what every surface naming
33
+ // the spend up front reads.
34
+ const head = (sources: readonly ModelSource[], pinned: readonly string[]): ModelPin | undefined => readyChain(sources, pinned.map(pin))[0];
35
+
36
+ test("honours a pinned model verbatim, including an id no catalog lists yet", () => {
37
+ expect(head([CLAUDE, GOOGLE], [`claude:claude-opus-5`])).toEqual({ provider: `claude`, model: `claude-opus-5` });
38
+ // The picker's custom-id escape hatch reaches here too: a catalog can lag a release, and running something
39
+ // other than what the settings row names would be the worse failure.
40
+ expect(head([CLAUDE], [`claude:claude-haiku-9`])).toEqual({ provider: `claude`, model: `claude-haiku-9` });
41
+ });
42
+
43
+ /* A MALFORMED KEY IS REFUSED WHERE KEYS STILL EXIST. A role's list holds PINS, whose two halves are separate
44
+ * fields the schema requires (ModelPinSchema), so "claude with an empty model" is no longer a shape the
45
+ * resolver can be handed — it is rejected at the settings boundary instead. What still travels as a key is
46
+ * `autoFastModels`, so the rule lives with the parser that reads one, and this is where it is pinned. */
47
+ test("refuses a malformed key rather than reading half a pin out of it", () => {
48
+ for (const key of [`claude`, `claude:`, `:claude-haiku-4-5`, ` `]) {
49
+ expect(parsePinned(key)).toBeUndefined();
50
+ }
51
+ expect(parsePinned(`claude:claude-haiku-4-5`)).toEqual({ provider: `claude`, model: `claude-haiku-4-5` });
52
+ });
53
+
54
+ /* THE CLAIM THIS FILE EXISTS FOR NOW. An unset job resolves to NOTHING however much is connected, and it does
55
+ * so for both kinds of role: a resolver that reached for the cheapest rung here is the whole feature that was
56
+ * removed, and it would come back invisibly — the daemon would simply start spending again and the settings
57
+ * row would look unchanged. */
58
+ test("resolves an unset job to nothing, however many accounts are connected", () => {
59
+ expect(readyChain([CLAUDE, GOOGLE, KIMI], [])).toEqual([]);
60
+ expect(head([CLAUDE, GOOGLE], [])).toBeUndefined();
61
+ });
62
+
63
+ test("carries an entry's run settings through untouched", () => {
64
+ // The resolver picks WHICH entry; how that entry runs is the entry's own business and rides along whole,
65
+ // because the turn (or the one-shot) is composed from all of it.
66
+ const configured: ModelPin = { provider: `claude`, model: `claude-opus-5`, effort: `max`, thinking: true, harness: `claude-code` };
67
+
68
+ expect(readyChain([CLAUDE], [configured])).toEqual([configured]);
69
+ });
70
+
71
+ test("reports nothing when the accounts a job named have all gone", () => {
72
+ // A live button that fails on click is the failure this prevents: the caller renders the state instead.
73
+ expect(head([offline(CLAUDE), GOOGLE], [`claude:claude-haiku-4-5-20251001`])).toBeUndefined();
74
+ expect(head([], [`claude:claude-haiku-4-5`])).toBeUndefined();
75
+ });
76
+
77
+ /* THE CHAIN: what the daemon walks when the model at the top of it refuses. A spent allowance is the ordinary
78
+ * case, not the exotic one: the account a helper shares with the chat runs out mid-afternoon, and the whole
79
+ * point of the list is that the click still lands on the next rung down. */
80
+
81
+ test("keeps the pinned models in the order they were written", () => {
82
+ expect(readyChain([CLAUDE, GOOGLE, CODEX], [`codex:gpt-5.6`, `gemini:gemini-3-flash`, `claude:claude-haiku-4-5-20251001`].map(pin))).toEqual([
83
+ { provider: `codex`, model: `gpt-5.6` },
84
+ { provider: `gemini`, model: `gemini-3-flash` },
85
+ { provider: `claude`, model: `claude-haiku-4-5-20251001` },
86
+ ]);
87
+ });
88
+
89
+ test("drops a pin whose provider went away and keeps the rest of the order intact", () => {
90
+ expect(readyChain([CLAUDE, offline(GOOGLE), CODEX], [`codex:gpt-5.6`, `gemini:gemini-3-flash`, `claude:claude-haiku-4-5`].map(pin))).toEqual([
91
+ { provider: `codex`, model: `gpt-5.6` },
92
+ { provider: `claude`, model: `claude-haiku-4-5` },
93
+ ]);
94
+ });
95
+
96
+ test("stops at the end of a pinned list rather than reaching for an account the user left out", () => {
97
+ // Google and Kimi are connected and cheaper. The user wrote down one model, so one model is what this may
98
+ // spend: a pin exists precisely to keep a helper off the accounts it does not name.
99
+ expect(readyChain([CLAUDE, GOOGLE, KIMI], [`claude:claude-haiku-4-5`].map(pin))).toEqual([{ provider: `claude`, model: `claude-haiku-4-5` }]);
100
+ });
101
+
102
+ test("names each model once, however many times the list repeats it", () => {
103
+ // The list is hand-edited and the settings page can write one pin across many jobs, so a duplicate is a
104
+ // real state; unchecked it would spend a second attempt proving the same account is out.
105
+ expect(readyChain([CLAUDE], [`claude:claude-haiku-4-5`, `claude:claude-haiku-4-5`].map(pin))).toEqual([
106
+ { provider: `claude`, model: `claude-haiku-4-5` },
107
+ ]);
108
+ });
109
+
110
+ /* A MODEL ENDPOINT the user configured is a provider like any other here, and the reason it has to be is the
111
+ * settings row: its options are built from the same picker catalog, so a pin naming one that this resolver
112
+ * dropped would print one model's name in the settings row and spend a different account entirely. */
113
+ const OLLAMA: ModelSource = { provider: `endpoint/ollama`, ready: true, models: [`qwen3-coder`, `gemma3-27b`] };
114
+
115
+ test("honours a pin on a configured endpoint: the whole id, not the half before its slash", () => {
116
+ expect(head([CLAUDE, OLLAMA], [`endpoint/ollama:qwen3-coder`])).toEqual({ provider: `endpoint/ollama`, model: `qwen3-coder` });
117
+ // And it round-trips through the key shape the picker mints, which is where the slash-not-colon rule earns
118
+ // itself: parsePinned splits on the FIRST colon, so an `endpoint:ollama` id would have parsed the provider
119
+ // as "endpoint" and the model as "ollama:qwen3-coder": a pin that silently resolves to nothing.
120
+ expect(modelPinKey({ provider: `endpoint/ollama`, model: `qwen3-coder` })).toBe(`endpoint/ollama:qwen3-coder`);
121
+ });