overlane 0.1.126 → 0.1.127

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
@@ -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({
@@ -23758,6 +23903,7 @@ var init_src = __esm({
23758
23903
  init_review();
23759
23904
  init_guardrails();
23760
23905
  init_code_map();
23906
+ init_agent();
23761
23907
  init_plans();
23762
23908
  init_billing();
23763
23909
  }
@@ -31112,7 +31258,7 @@ var VERSION;
31112
31258
  var init_assets = __esm({
31113
31259
  "src/assets.ts"() {
31114
31260
  "use strict";
31115
- VERSION = true ? "0.1.126" : "0.0.0-dev";
31261
+ VERSION = true ? "0.1.127" : "0.0.0-dev";
31116
31262
  }
31117
31263
  });
31118
31264
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "overlane",
3
- "version": "0.1.126",
3
+ "version": "0.1.127",
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.126",
3
+ "version": "0.1.127",
4
4
  "description": "Overlane context at session start and the shared Overlane skills.",
5
5
  "author": {
6
6
  "name": "owenob1"