overlane 0.1.127 → 0.1.128

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/dist/overlane.mjs CHANGED
@@ -23872,6 +23872,78 @@ var init_billing = __esm({
23872
23872
  }
23873
23873
  });
23874
23874
 
23875
+ // ../contracts/src/decision.ts
23876
+ var DECISION_MODELS, DecisionModel, MAX_QUESTIONS, MAX_IMAGES, QuestionId, Text, NoulQuestion, ChoiceQuestion, ScoreQuestion, ClefQuestion, ClefQuestions, JsonValue, Base64Image, ClefRequest, Probability, NoulAnswer, ChoiceAnswer, ScoreAnswer, ClefAnswer, ClefResponse, DECISION_USES, DecisionUse, DECISION_OUTCOMES, DecisionOutcome, FALLBACK_REASONS, FallbackReason, DecisionRecord;
23877
+ var init_decision = __esm({
23878
+ "../contracts/src/decision.ts"() {
23879
+ "use strict";
23880
+ init_zod();
23881
+ init_common();
23882
+ DECISION_MODELS = ["clef", "clef-flash"];
23883
+ DecisionModel = external_exports.enum(DECISION_MODELS);
23884
+ MAX_QUESTIONS = 64;
23885
+ MAX_IMAGES = 4;
23886
+ QuestionId = external_exports.string().min(1).max(64).regex(/^[A-Za-z0-9][A-Za-z0-9_.:-]*$/);
23887
+ Text = external_exports.string().min(1).max(2e3);
23888
+ NoulQuestion = external_exports.object({ type: external_exports.literal("noul"), instructions: Text, criteria: external_exports.object({ true: Text, false: Text }).strict().optional() }).strict();
23889
+ ChoiceQuestion = external_exports.object({
23890
+ type: external_exports.literal("choice"),
23891
+ instructions: Text,
23892
+ criteria: external_exports.record(external_exports.string().min(1).max(64), Text).refine((value) => Object.keys(value).length >= 2 && Object.keys(value).length <= 255, "choice.criteria needs 2 to 255 options")
23893
+ }).strict();
23894
+ ScoreQuestion = external_exports.object({ type: external_exports.literal("score"), instructions: Text, criteria: external_exports.array(Text).min(2).max(10) }).strict();
23895
+ ClefQuestion = external_exports.discriminatedUnion("type", [NoulQuestion, ChoiceQuestion, ScoreQuestion]);
23896
+ ClefQuestions = external_exports.record(QuestionId, ClefQuestion).refine((value) => Object.keys(value).length >= 1 && Object.keys(value).length <= MAX_QUESTIONS, "1 to 64 questions");
23897
+ JsonValue = external_exports.lazy(() => external_exports.union([external_exports.string(), external_exports.number(), external_exports.boolean(), external_exports.null(), external_exports.array(JsonValue), external_exports.record(external_exports.string(), JsonValue)]));
23898
+ Base64Image = external_exports.string().min(8).regex(/^[A-Za-z0-9+/]+={0,2}$/, "images must be base64, not URLs");
23899
+ ClefRequest = external_exports.object({
23900
+ model: DecisionModel,
23901
+ /** Text or JSON, within a 64K context. */
23902
+ state: external_exports.union([external_exports.string().min(1), external_exports.record(external_exports.string(), JsonValue), external_exports.array(JsonValue)]),
23903
+ questions: ClefQuestions,
23904
+ /** Up to four base64 images. Overlane's own uses send none. */
23905
+ images: external_exports.array(Base64Image).max(MAX_IMAGES).optional()
23906
+ }).strict();
23907
+ Probability = external_exports.number().min(0).max(1);
23908
+ NoulAnswer = external_exports.object({ noul: Probability }).passthrough();
23909
+ ChoiceAnswer = external_exports.object({ choice: external_exports.string(), probabilities: external_exports.record(external_exports.string(), Probability), confidence: Probability.optional() }).passthrough();
23910
+ ScoreAnswer = external_exports.object({ score: external_exports.number(), legend: external_exports.union([external_exports.string(), external_exports.array(external_exports.string())]).optional(), probabilities: external_exports.union([external_exports.record(external_exports.string(), Probability), external_exports.array(Probability)]), confidence: Probability.optional() }).passthrough();
23911
+ ClefAnswer = external_exports.union([ChoiceAnswer, ScoreAnswer, NoulAnswer]);
23912
+ ClefResponse = external_exports.object({
23913
+ answers: external_exports.record(QuestionId, ClefAnswer),
23914
+ usage: external_exports.object({ input_tokens: external_exports.number().int().nonnegative() }).passthrough().optional()
23915
+ }).passthrough();
23916
+ DECISION_USES = ["review_risk", "hostile_content"];
23917
+ DecisionUse = external_exports.enum(DECISION_USES);
23918
+ DECISION_OUTCOMES = ["used", "undecided", "fallback", "rejected"];
23919
+ DecisionOutcome = external_exports.enum(DECISION_OUTCOMES);
23920
+ FALLBACK_REASONS = ["below_threshold", "below_margin", "undecided", "disabled", "no_escape_option", "use_not_allowed", "model_error", "bad_response", "budget", "none"];
23921
+ FallbackReason = external_exports.enum(FALLBACK_REASONS);
23922
+ DecisionRecord = external_exports.object({
23923
+ tenantId: TenantId,
23924
+ id: external_exports.string().min(1).max(80),
23925
+ /** One model call can answer several questions; its rows share this ID. The call's input tokens sit on the first row. */
23926
+ callId: external_exports.string().min(1).max(80).optional(),
23927
+ use: DecisionUse,
23928
+ /** The question set's version; any change to a question's text or options bumps it. */
23929
+ questionSetVersion: external_exports.string().min(1).max(64),
23930
+ questionId: external_exports.string().min(1).max(64),
23931
+ /** Every allowed answer with its probability. Empty when no call was made. */
23932
+ probabilities: external_exports.record(external_exports.string(), Probability),
23933
+ /** The top answer, when there was one. Present even when the gate then rejected it. */
23934
+ top: external_exports.string().nullable(),
23935
+ threshold: Probability,
23936
+ margin: Probability,
23937
+ outcome: DecisionOutcome,
23938
+ fallbackReason: FallbackReason,
23939
+ model: external_exports.string().min(1).max(80),
23940
+ latencyMs: external_exports.number().int().nonnegative(),
23941
+ inputTokens: external_exports.number().int().nonnegative(),
23942
+ at: external_exports.string().datetime()
23943
+ }).strict();
23944
+ }
23945
+ });
23946
+
23875
23947
  // ../contracts/src/index.ts
23876
23948
  var init_src = __esm({
23877
23949
  "../contracts/src/index.ts"() {
@@ -23906,6 +23978,7 @@ var init_src = __esm({
23906
23978
  init_agent();
23907
23979
  init_plans();
23908
23980
  init_billing();
23981
+ init_decision();
23909
23982
  }
23910
23983
  });
23911
23984
 
@@ -31258,7 +31331,7 @@ var VERSION;
31258
31331
  var init_assets = __esm({
31259
31332
  "src/assets.ts"() {
31260
31333
  "use strict";
31261
- VERSION = true ? "0.1.127" : "0.0.0-dev";
31334
+ VERSION = true ? "0.1.128" : "0.0.0-dev";
31262
31335
  }
31263
31336
  });
31264
31337
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlane",
3
- "version": "0.1.127",
3
+ "version": "0.1.128",
4
4
  "description": "Overlane: connect a GitHub project to your coding agents. One portable CLI with project memory, tasks, a code index, guardrails and the Claude Code and Codex plugin.",
5
5
  "keywords": [
6
6
  "overlane",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mvrx-harness",
3
- "version": "0.1.127",
3
+ "version": "0.1.128",
4
4
  "description": "Overlane context at session start and the shared Overlane skills.",
5
5
  "author": {
6
6
  "name": "owenob1"