overlane 0.1.126 → 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 +220 -1
- package/package.json +1 -1
- package/plugins/claude/plugins/mvrx-harness/.claude-plugin/plugin.json +1 -1
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-context.mjs +30 -30
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-guard.mjs +27 -27
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-intake.mjs +33 -33
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-quota.mjs +31 -31
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-statusline.mjs +28 -28
- package/plugins/claude/plugins/mvrx-harness/scripts/harness-stop.mjs +31 -31
- package/plugins/codex/plugins/mvrx-harness/.codex-plugin/plugin.json +1 -1
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-context.mjs +30 -30
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-guard.mjs +27 -27
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-intake.mjs +33 -33
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-quota.mjs +31 -31
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-statusline.mjs +28 -28
- package/plugins/codex/plugins/mvrx-harness/scripts/harness-stop.mjs +31 -31
- package/plugins/release-manifest.json +20 -20
package/dist/overlane.mjs
CHANGED
|
@@ -23358,6 +23358,151 @@ var init_code_map = __esm({
|
|
|
23358
23358
|
}
|
|
23359
23359
|
});
|
|
23360
23360
|
|
|
23361
|
+
// ../contracts/src/agent.ts
|
|
23362
|
+
function classifyMethod(method) {
|
|
23363
|
+
const m = method.toUpperCase();
|
|
23364
|
+
return m === "GET" || m === "HEAD" || m === "OPTIONS" ? "read" : "write";
|
|
23365
|
+
}
|
|
23366
|
+
function blockedClassFor(op) {
|
|
23367
|
+
const words = op.operationId.replace(/([a-z0-9])([A-Z])/g, "$1-$2").toLowerCase();
|
|
23368
|
+
const text = `${op.path.toLowerCase()} ${words}`;
|
|
23369
|
+
if (op.method.toUpperCase() === "DELETE" || DESTRUCTIVE.test(text)) return "destructive";
|
|
23370
|
+
if (BILLING.test(text)) return "billing";
|
|
23371
|
+
if (SECRETS.test(text)) return "secrets";
|
|
23372
|
+
return null;
|
|
23373
|
+
}
|
|
23374
|
+
var AGENT_PLANS, AgentPlan, AGENT_PROVIDERS, AgentProvider, TOOL_CLASSES, AgentToolClass, BLOCKED_CLASSES, BlockedClass, BILLING, SECRETS, DESTRUCTIVE, AgentOperation, AgentToolDefinition, AGENT_REFUSAL_CODES, AgentRefusalCode, AgentRefusal, AgentDiffEntry, APPROVAL_STATES, AgentApprovalState, AgentInverseChange, AgentApproval, AgentWriteToolResult, AgentReadToolResult, AgentToolResult, AgentCitation, MESSAGE_ORIGINS, AgentMessageOrigin, AgentMessage, AgentChatRequest, AgentFeedback, AGENT_AUDIT_RESULTS, AgentAuditResult, AgentAuditEvent, AgentReadOnlyMode, RouteIndexEntry, RouteIndex, AgentRouteHit;
|
|
23375
|
+
var init_agent = __esm({
|
|
23376
|
+
"../contracts/src/agent.ts"() {
|
|
23377
|
+
"use strict";
|
|
23378
|
+
init_zod();
|
|
23379
|
+
init_common();
|
|
23380
|
+
init_identity();
|
|
23381
|
+
AGENT_PLANS = ["free", "pro", "team", "business", "enterprise"];
|
|
23382
|
+
AgentPlan = external_exports.enum(AGENT_PLANS);
|
|
23383
|
+
AGENT_PROVIDERS = ["overlane", "github", "gitlab", "linear", "jira"];
|
|
23384
|
+
AgentProvider = external_exports.enum(AGENT_PROVIDERS);
|
|
23385
|
+
TOOL_CLASSES = ["read", "write"];
|
|
23386
|
+
AgentToolClass = external_exports.enum(TOOL_CLASSES);
|
|
23387
|
+
BLOCKED_CLASSES = ["billing", "secrets", "destructive"];
|
|
23388
|
+
BlockedClass = external_exports.enum(BLOCKED_CLASSES);
|
|
23389
|
+
BILLING = /(^|[\s\/_.-])(billing|invoices?|payments?|subscriptions?|checkout|seats|plan-change)([\s\/_.-]|$)/i;
|
|
23390
|
+
SECRETS = /(^|[\s\/_.-])(secrets?|tokens?|api-?keys?|credentials?|keys|signing|sso|scim)([\s\/_.-]|$)/i;
|
|
23391
|
+
DESTRUCTIVE = /(^|[\s\/_.-])(purge|delete|destroy|erase|wipe|drop|revoke|remove|truncate|reset)([\s\/_.-]|$)/i;
|
|
23392
|
+
AgentOperation = external_exports.object({
|
|
23393
|
+
operationId: external_exports.string().min(1).max(100),
|
|
23394
|
+
method: external_exports.enum(["GET", "HEAD", "OPTIONS", "POST", "PUT", "PATCH", "DELETE"]),
|
|
23395
|
+
path: external_exports.string().min(1).max(300).startsWith("/"),
|
|
23396
|
+
/** Where the operation is defined: the OpenAPI document, a contract fixture until the API route exists (REQ-WEB-11), or local code that makes no API call (docs search, navigation). */
|
|
23397
|
+
source: external_exports.enum(["openapi", "contract-fixture", "local"])
|
|
23398
|
+
}).strict();
|
|
23399
|
+
AgentToolDefinition = external_exports.object({
|
|
23400
|
+
tenantId: TenantId,
|
|
23401
|
+
name: external_exports.string().regex(/^[a-z][A-Za-z0-9]{1,48}$/),
|
|
23402
|
+
description: external_exports.string().min(1).max(300),
|
|
23403
|
+
class: AgentToolClass,
|
|
23404
|
+
operation: AgentOperation,
|
|
23405
|
+
/** Lowest role that may call the tool (REQ-AGT-05). The role table in identity.ts still decides per action. */
|
|
23406
|
+
minRole: Role,
|
|
23407
|
+
/** JSON-schema-like description of the arguments, property name to a short hint. */
|
|
23408
|
+
arguments: external_exports.record(external_exports.string().min(1).max(64), external_exports.string().max(200))
|
|
23409
|
+
}).strict().refine((t) => t.class === classifyMethod(t.operation.method), { message: "class must match the HTTP method (REQ-AGT-09)", path: ["class"] }).refine((t) => blockedClassFor(t.operation) === null, { message: "billing, secrets and destructive operations are never tools (REQ-AGT-08)", path: ["operation"] });
|
|
23410
|
+
AGENT_REFUSAL_CODES = [
|
|
23411
|
+
"role_forbidden",
|
|
23412
|
+
"read_only_mode",
|
|
23413
|
+
"blocked_class",
|
|
23414
|
+
"unknown_tool",
|
|
23415
|
+
"invalid_arguments",
|
|
23416
|
+
"approval_required",
|
|
23417
|
+
"approval_expired",
|
|
23418
|
+
"approval_not_pending",
|
|
23419
|
+
"rate_limited",
|
|
23420
|
+
"unavailable"
|
|
23421
|
+
];
|
|
23422
|
+
AgentRefusalCode = external_exports.enum(AGENT_REFUSAL_CODES);
|
|
23423
|
+
AgentRefusal = external_exports.object({ kind: external_exports.literal("refusal"), tenantId: TenantId, code: AgentRefusalCode, tool: external_exports.string().max(100).optional(), reason: external_exports.string().min(1).max(300) }).strict();
|
|
23424
|
+
AgentDiffEntry = external_exports.object({ field: external_exports.string().min(1).max(200), before: external_exports.string().max(2e3).nullable(), after: external_exports.string().max(2e3).nullable() }).strict();
|
|
23425
|
+
APPROVAL_STATES = ["pending", "approved", "executed", "rejected", "expired", "failed"];
|
|
23426
|
+
AgentApprovalState = external_exports.enum(APPROVAL_STATES);
|
|
23427
|
+
AgentInverseChange = external_exports.object({
|
|
23428
|
+
tenantId: TenantId,
|
|
23429
|
+
approvalId: external_exports.string().min(1).max(128),
|
|
23430
|
+
tool: external_exports.string().min(1).max(100),
|
|
23431
|
+
arguments: external_exports.record(external_exports.string(), external_exports.unknown()),
|
|
23432
|
+
summary: external_exports.string().min(1).max(500)
|
|
23433
|
+
}).strict();
|
|
23434
|
+
AgentApproval = external_exports.object({
|
|
23435
|
+
tenantId: TenantId,
|
|
23436
|
+
id: external_exports.string().min(1).max(128),
|
|
23437
|
+
conversationId: external_exports.string().min(1).max(128),
|
|
23438
|
+
requestedBy: UserId,
|
|
23439
|
+
tool: external_exports.string().min(1).max(100),
|
|
23440
|
+
summary: external_exports.string().min(1).max(500),
|
|
23441
|
+
diff: external_exports.array(AgentDiffEntry).max(50),
|
|
23442
|
+
argumentsDigest: Sha256Digest,
|
|
23443
|
+
state: AgentApprovalState,
|
|
23444
|
+
createdAt: Timestamp,
|
|
23445
|
+
expiresAt: Timestamp,
|
|
23446
|
+
decidedAt: Timestamp.optional(),
|
|
23447
|
+
/** Present once executed, when the tool has an inverse. */
|
|
23448
|
+
inverse: AgentInverseChange.optional(),
|
|
23449
|
+
/** Set when this approval is itself the undo of another. */
|
|
23450
|
+
undoOf: external_exports.string().min(1).max(128).optional()
|
|
23451
|
+
}).strict();
|
|
23452
|
+
AgentWriteToolResult = external_exports.object({ kind: external_exports.literal("approval"), tenantId: TenantId, approval: AgentApproval }).strict();
|
|
23453
|
+
AgentReadToolResult = external_exports.object({ kind: external_exports.literal("result"), tenantId: TenantId, tool: external_exports.string().min(1).max(100), data: external_exports.unknown() }).strict();
|
|
23454
|
+
AgentToolResult = external_exports.discriminatedUnion("kind", [AgentWriteToolResult, AgentReadToolResult, AgentRefusal]);
|
|
23455
|
+
AgentCitation = external_exports.object({
|
|
23456
|
+
tenantId: TenantId,
|
|
23457
|
+
sourceId: external_exports.string().min(1).max(200),
|
|
23458
|
+
title: external_exports.string().min(1).max(200),
|
|
23459
|
+
/** Docs page or app route. Always a path on an Overlane host; checked by the route index. */
|
|
23460
|
+
url: external_exports.string().min(1).max(500),
|
|
23461
|
+
snippet: external_exports.string().max(600).optional()
|
|
23462
|
+
}).strict();
|
|
23463
|
+
MESSAGE_ORIGINS = ["user", "assistant", "retrieved", "tool"];
|
|
23464
|
+
AgentMessageOrigin = external_exports.enum(MESSAGE_ORIGINS);
|
|
23465
|
+
AgentMessage = external_exports.object({
|
|
23466
|
+
tenantId: TenantId,
|
|
23467
|
+
id: external_exports.string().min(1).max(128),
|
|
23468
|
+
conversationId: external_exports.string().min(1).max(128),
|
|
23469
|
+
origin: AgentMessageOrigin,
|
|
23470
|
+
content: external_exports.string().max(8e3),
|
|
23471
|
+
citations: external_exports.array(AgentCitation).max(10).default([]),
|
|
23472
|
+
/** "not_found" when the answer is the deterministic below-threshold reply. */
|
|
23473
|
+
outcome: external_exports.enum(["answer", "not_found", "navigation", "tool_result", "approval", "refusal", "info"]).optional(),
|
|
23474
|
+
createdAt: Timestamp
|
|
23475
|
+
}).strict();
|
|
23476
|
+
AgentChatRequest = external_exports.object({ tenantId: TenantId, conversationId: external_exports.string().min(1).max(128), text: external_exports.string().min(1).max(4e3), currentPath: external_exports.string().max(300).optional(), escalate: external_exports.boolean().optional() }).strict();
|
|
23477
|
+
AgentFeedback = external_exports.object({ tenantId: TenantId, messageId: external_exports.string().min(1).max(128), rating: external_exports.enum(["up", "down"]), note: external_exports.string().max(500).optional(), at: Timestamp }).strict();
|
|
23478
|
+
AGENT_AUDIT_RESULTS = ["ok", "refused", "error", "approval_proposed", "approval_decided"];
|
|
23479
|
+
AgentAuditResult = external_exports.enum(AGENT_AUDIT_RESULTS);
|
|
23480
|
+
AgentAuditEvent = external_exports.object({
|
|
23481
|
+
tenantId: TenantId,
|
|
23482
|
+
id: external_exports.string().min(1).max(128),
|
|
23483
|
+
at: Timestamp,
|
|
23484
|
+
actor: external_exports.object({ userId: UserId, role: Role }).strict(),
|
|
23485
|
+
conversationId: external_exports.string().min(1).max(128),
|
|
23486
|
+
tool: external_exports.string().min(1).max(100),
|
|
23487
|
+
argumentsDigest: Sha256Digest,
|
|
23488
|
+
result: AgentAuditResult,
|
|
23489
|
+
detail: external_exports.string().max(300).optional(),
|
|
23490
|
+
approvalId: external_exports.string().min(1).max(128).optional()
|
|
23491
|
+
}).strict();
|
|
23492
|
+
AgentReadOnlyMode = external_exports.object({ tenantId: TenantId, enabled: external_exports.boolean(), setBy: UserId, setAt: Timestamp }).strict();
|
|
23493
|
+
RouteIndexEntry = external_exports.object({
|
|
23494
|
+
path: external_exports.string().regex(/^\/[A-Za-z0-9\/_.-]*$/),
|
|
23495
|
+
title: external_exports.string().min(1).max(120),
|
|
23496
|
+
description: external_exports.string().min(1).max(300),
|
|
23497
|
+
keywords: external_exports.array(external_exports.string().min(1).max(40)).max(20).default([]),
|
|
23498
|
+
roles: external_exports.array(Role).min(1),
|
|
23499
|
+
plan: AgentPlan
|
|
23500
|
+
}).strict();
|
|
23501
|
+
RouteIndex = external_exports.object({ version: external_exports.literal("1"), routes: external_exports.array(RouteIndexEntry).min(1) }).strict();
|
|
23502
|
+
AgentRouteHit = external_exports.object({ tenantId: TenantId, path: external_exports.string().startsWith("/"), title: external_exports.string().min(1).max(120), score: external_exports.number().nonnegative() }).strict();
|
|
23503
|
+
}
|
|
23504
|
+
});
|
|
23505
|
+
|
|
23361
23506
|
// ../contracts/src/plans.ts
|
|
23362
23507
|
var PLAN_IDS, BillingPlanId, CHECKOUT_PLANS, CheckoutPlanId, METERS, Meter, AllowanceValue, PlanAllowances, PlanData, OverageRates, FreeTierControls, PlanCatalog, TenantPlanLimits;
|
|
23363
23508
|
var init_plans = __esm({
|
|
@@ -23727,6 +23872,78 @@ var init_billing = __esm({
|
|
|
23727
23872
|
}
|
|
23728
23873
|
});
|
|
23729
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
|
+
|
|
23730
23947
|
// ../contracts/src/index.ts
|
|
23731
23948
|
var init_src = __esm({
|
|
23732
23949
|
"../contracts/src/index.ts"() {
|
|
@@ -23758,8 +23975,10 @@ var init_src = __esm({
|
|
|
23758
23975
|
init_review();
|
|
23759
23976
|
init_guardrails();
|
|
23760
23977
|
init_code_map();
|
|
23978
|
+
init_agent();
|
|
23761
23979
|
init_plans();
|
|
23762
23980
|
init_billing();
|
|
23981
|
+
init_decision();
|
|
23763
23982
|
}
|
|
23764
23983
|
});
|
|
23765
23984
|
|
|
@@ -31112,7 +31331,7 @@ var VERSION;
|
|
|
31112
31331
|
var init_assets = __esm({
|
|
31113
31332
|
"src/assets.ts"() {
|
|
31114
31333
|
"use strict";
|
|
31115
|
-
VERSION = true ? "0.1.
|
|
31334
|
+
VERSION = true ? "0.1.128" : "0.0.0-dev";
|
|
31116
31335
|
}
|
|
31117
31336
|
});
|
|
31118
31337
|
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "overlane",
|
|
3
|
-
"version": "0.1.
|
|
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",
|