@lucern/mcp 0.3.0-alpha.11 → 0.3.0-alpha.12

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/gateway.js CHANGED
@@ -2,6 +2,8 @@ import { z } from 'zod';
2
2
  import { v } from 'convex/values';
3
3
  import { basename, extname } from 'path';
4
4
  import { randomUUID } from 'crypto';
5
+ import { anyApi } from 'convex/server';
6
+ import { ConvexHttpClient } from 'convex/browser';
5
7
 
6
8
  // ../contracts/src/types/reasoning-method.ts
7
9
  var REASONING_METHODS = [
@@ -4328,7 +4330,9 @@ var permitObjectType = z.enum([
4328
4330
  "group",
4329
4331
  "resource_instance",
4330
4332
  "relationship_tuple",
4331
- "role_assignment"
4333
+ "role_assignment",
4334
+ "attribute_binding",
4335
+ "policy_bundle"
4332
4336
  ]);
4333
4337
  var permitOutboxOperation = z.enum([
4334
4338
  "upsert",
@@ -27032,11 +27036,178 @@ async function handleOntologyMatch(args) {
27032
27036
  }
27033
27037
  }
27034
27038
 
27035
- // ../../apps/gateway/src/routes/questions.ts
27039
+ // ../server-core/src/auth/credentials.ts
27040
+ function parseAuthorizationBearer(value) {
27041
+ if (!value) return null;
27042
+ const [scheme, token] = value.trim().split(/\s+/, 2);
27043
+ if (!scheme || !token) return null;
27044
+ if (scheme.toLowerCase() !== "bearer") return null;
27045
+ return token.trim() || null;
27046
+ }
27047
+
27048
+ // ../../apps/gateway/src/routes/permit-webhook.ts
27049
+ var mcApi = anyApi;
27050
+ var mcClientCache = {
27051
+ value: null
27052
+ };
27053
+ function readString27(value) {
27054
+ return typeof value === "string" && value.trim() ? value.trim() : void 0;
27055
+ }
27036
27056
  function asRecord25(value) {
27037
27057
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27038
27058
  }
27039
- function readString27(value) {
27059
+ function readSecret(env = process.env) {
27060
+ return readString27(env.LUCERN_PERMIT_WEBHOOK_SECRET) ?? readString27(env.PERMIT_WEBHOOK_SECRET);
27061
+ }
27062
+ function isPermitWebhookAuthorized(args) {
27063
+ const expected = readSecret(args.env);
27064
+ if (!expected) {
27065
+ return false;
27066
+ }
27067
+ const bearer = parseAuthorizationBearer(args.headers.get("authorization"));
27068
+ const headerSecret = readString27(
27069
+ args.headers.get("x-lucern-permit-webhook-secret")
27070
+ );
27071
+ return bearer === expected || headerSecret === expected;
27072
+ }
27073
+ function readTenantKeyFromValue(value) {
27074
+ if (typeof value === "string" && value.trim()) {
27075
+ return value.trim();
27076
+ }
27077
+ const record = asRecord25(value);
27078
+ return readString27(record.key) ?? readString27(record.tenant) ?? readString27(record.tenantKey) ?? readString27(record.tenant_id);
27079
+ }
27080
+ function extractPermitWebhookTenantKeys(body) {
27081
+ const record = asRecord25(body);
27082
+ const candidates = [
27083
+ record.tenant,
27084
+ record.tenantKey,
27085
+ record.tenant_id,
27086
+ asRecord25(record.data).tenant,
27087
+ asRecord25(record.data).tenantKey,
27088
+ asRecord25(record.data).tenant_id,
27089
+ asRecord25(record.object).tenant,
27090
+ asRecord25(record.object).tenantKey,
27091
+ asRecord25(record.object).tenant_id,
27092
+ asRecord25(record.resource_instance).tenant
27093
+ ];
27094
+ const tenantKeys = candidates.map(readTenantKeyFromValue).filter((entry) => Boolean(entry));
27095
+ return [...new Set(tenantKeys)];
27096
+ }
27097
+ function summarizePermitWebhookEvent(body) {
27098
+ const record = asRecord25(body);
27099
+ return {
27100
+ type: readString27(record.type) ?? readString27(record.event) ?? "permit.webhook",
27101
+ id: readString27(record.id) ?? readString27(record.event_id),
27102
+ tenantKeys: extractPermitWebhookTenantKeys(record)
27103
+ };
27104
+ }
27105
+ function getMasterControlConvexClient() {
27106
+ if (mcClientCache.value) {
27107
+ return mcClientCache.value;
27108
+ }
27109
+ const convexUrl = readString27(process.env.CONVEX_MC_URL);
27110
+ const deployKey = readString27(process.env.CONVEX_MC_DEPLOY_KEY);
27111
+ if (!convexUrl || !deployKey) {
27112
+ throw new GatewayAuthError(
27113
+ 503,
27114
+ "UPSTREAM_ERROR",
27115
+ "Master Control is not configured. Set CONVEX_MC_URL and CONVEX_MC_DEPLOY_KEY."
27116
+ );
27117
+ }
27118
+ const client = new ConvexHttpClient(convexUrl);
27119
+ client.setAdminAuth(
27120
+ deployKey
27121
+ );
27122
+ mcClientCache.value = client;
27123
+ return client;
27124
+ }
27125
+ function handlePermitWebhookError(error, correlationId, policyTraceId) {
27126
+ const resolved = resolveServerCoreError(
27127
+ error,
27128
+ "Failed to reconcile Permit projection."
27129
+ );
27130
+ return errorResponse({
27131
+ code: resolved.code,
27132
+ message: resolved.message,
27133
+ status: resolved.status,
27134
+ correlationId,
27135
+ policyTraceId,
27136
+ invariant: resolved.invariant,
27137
+ suggestion: resolved.suggestion,
27138
+ details: resolved.details
27139
+ });
27140
+ }
27141
+ async function handlePermitProjectionWebhook(args) {
27142
+ if (!readSecret()) {
27143
+ return errorResponse({
27144
+ status: 503,
27145
+ code: "INTERNAL_ERROR",
27146
+ message: "Permit webhook secret is not configured.",
27147
+ correlationId: args.correlationId,
27148
+ policyTraceId: args.policyTraceId
27149
+ });
27150
+ }
27151
+ if (!isPermitWebhookAuthorized({ headers: args.request.headers })) {
27152
+ return errorResponse({
27153
+ status: 401,
27154
+ code: "AUTH_REQUIRED",
27155
+ message: "Permit webhook secret did not match.",
27156
+ correlationId: args.correlationId,
27157
+ policyTraceId: args.policyTraceId
27158
+ });
27159
+ }
27160
+ try {
27161
+ const event = summarizePermitWebhookEvent(args.body);
27162
+ const tenantKeys = extractPermitWebhookTenantKeys(args.body);
27163
+ if (tenantKeys.length === 0) {
27164
+ return successResponse(
27165
+ {
27166
+ acknowledged: true,
27167
+ reconciled: false,
27168
+ reason: "No tenant key found; skipping tenant-scoped reconcile.",
27169
+ tenantKeys: []
27170
+ },
27171
+ {
27172
+ correlationId: args.correlationId,
27173
+ policyTraceId: args.policyTraceId
27174
+ }
27175
+ );
27176
+ }
27177
+ const client = args.convexClient ?? getMasterControlConvexClient();
27178
+ const receipt = await client.action(mcApi.permitProjectionActions.reconcile, {
27179
+ mode: "apply",
27180
+ trigger: "permit_webhook",
27181
+ tenantKeys,
27182
+ environments: ["dev", "staging", "prod"],
27183
+ componentPath: "controlPlane",
27184
+ webhookSecret: readSecret(),
27185
+ event
27186
+ });
27187
+ return successResponse(
27188
+ {
27189
+ reconciled: true,
27190
+ receipt
27191
+ },
27192
+ {
27193
+ correlationId: args.correlationId,
27194
+ policyTraceId: args.policyTraceId
27195
+ }
27196
+ );
27197
+ } catch (error) {
27198
+ return handlePermitWebhookError(
27199
+ error,
27200
+ args.correlationId,
27201
+ args.policyTraceId
27202
+ );
27203
+ }
27204
+ }
27205
+
27206
+ // ../../apps/gateway/src/routes/questions.ts
27207
+ function asRecord26(value) {
27208
+ return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27209
+ }
27210
+ function readString28(value) {
27040
27211
  if (typeof value !== "string") {
27041
27212
  return void 0;
27042
27213
  }
@@ -27050,18 +27221,18 @@ function readStringArray14(value) {
27050
27221
  if (!Array.isArray(value)) {
27051
27222
  return void 0;
27052
27223
  }
27053
- const items = value.map((entry) => readString27(entry)).filter((entry) => Boolean(entry));
27224
+ const items = value.map((entry) => readString28(entry)).filter((entry) => Boolean(entry));
27054
27225
  return items.length > 0 ? items : void 0;
27055
27226
  }
27056
27227
  async function handleQuestionCreate(args) {
27057
27228
  try {
27058
- const body = asRecord25(args.body);
27229
+ const body = asRecord26(args.body);
27059
27230
  const payload = await createQuestionFromGatewayAuth(args.authContext, {
27060
- topicId: readString27(body.topicId),
27061
- text: readString27(body.text) ?? "",
27062
- priority: readString27(body.priority),
27063
- linkedBeliefId: readString27(body.linkedBeliefId),
27064
- metadata: asRecord25(body.metadata)
27231
+ topicId: readString28(body.topicId),
27232
+ text: readString28(body.text) ?? "",
27233
+ priority: readString28(body.priority),
27234
+ linkedBeliefId: readString28(body.linkedBeliefId),
27235
+ metadata: asRecord26(body.metadata)
27065
27236
  });
27066
27237
  return successResponse(payload, {
27067
27238
  status: 201,
@@ -27108,10 +27279,10 @@ async function handleQuestionGet(args) {
27108
27279
  }
27109
27280
  async function handleQuestionArchive(args) {
27110
27281
  try {
27111
- const body = asRecord25(args.body);
27282
+ const body = asRecord26(args.body);
27112
27283
  const payload = await archiveQuestionFromGatewayAuth(args.authContext, {
27113
27284
  id: args.questionId,
27114
- rationale: readString27(body.reason) ?? readString27(body.rationale)
27285
+ rationale: readString28(body.reason) ?? readString28(body.rationale)
27115
27286
  });
27116
27287
  return successResponse(payload, {
27117
27288
  correlationId: args.correlationId,
@@ -27154,13 +27325,13 @@ async function handleQuestionList(args) {
27154
27325
  }
27155
27326
  async function handleQuestionAnswer(args) {
27156
27327
  try {
27157
- const body = asRecord25(args.body);
27328
+ const body = asRecord26(args.body);
27158
27329
  const payload = await answerQuestionFromGatewayAuth(args.authContext, {
27159
27330
  id: args.questionId,
27160
- text: readString27(body.text) ?? "",
27161
- confidence: readString27(body.confidence),
27331
+ text: readString28(body.text) ?? "",
27332
+ confidence: readString28(body.confidence),
27162
27333
  evidenceIds: readStringArray14(body.evidenceIds),
27163
- rationale: readString27(body.rationale)
27334
+ rationale: readString28(body.rationale)
27164
27335
  });
27165
27336
  return successResponse(payload, {
27166
27337
  correlationId: args.correlationId,
@@ -27206,11 +27377,11 @@ async function handleQuestionGetAnswer(args) {
27206
27377
  }
27207
27378
  async function handleQuestionRefine(args) {
27208
27379
  try {
27209
- const body = asRecord25(args.body);
27380
+ const body = asRecord26(args.body);
27210
27381
  const payload = await refineQuestionFromGatewayAuth(args.authContext, {
27211
27382
  id: args.questionId,
27212
- text: readString27(body.text) ?? "",
27213
- rationale: readString27(body.rationale)
27383
+ text: readString28(body.text) ?? "",
27384
+ rationale: readString28(body.rationale)
27214
27385
  });
27215
27386
  return successResponse(payload, {
27216
27387
  correlationId: args.correlationId,
@@ -27232,11 +27403,11 @@ async function handleQuestionRefine(args) {
27232
27403
  }
27233
27404
  async function handleQuestionUpdateStatus(args) {
27234
27405
  try {
27235
- const body = asRecord25(args.body);
27406
+ const body = asRecord26(args.body);
27236
27407
  const payload = await updateQuestionStatusFromGatewayAuth(args.authContext, {
27237
27408
  id: args.questionId,
27238
- status: readString27(body.status) ?? "",
27239
- rationale: readString27(body.rationale)
27409
+ status: readString28(body.status) ?? "",
27410
+ rationale: readString28(body.rationale)
27240
27411
  });
27241
27412
  return successResponse(payload, {
27242
27413
  correlationId: args.correlationId,
@@ -27261,19 +27432,19 @@ async function handleQuestionUpdateStatus(args) {
27261
27432
  }
27262
27433
  async function handleQuestionBatchCreate(args) {
27263
27434
  try {
27264
- const body = asRecord25(args.body);
27265
- const questions = Array.isArray(body.questions) ? body.questions.map((entry) => asRecord25(entry)).map((entry) => ({
27266
- question: readString27(entry.question) ?? readString27(entry.text) ?? "",
27267
- category: readString27(entry.category),
27268
- priority: readString27(entry.priority),
27269
- linkedBeliefNodeId: readString27(entry.linkedBeliefNodeId) ?? readString27(entry.linkedBeliefId),
27270
- linkedWorktreeId: readString27(entry.linkedWorktreeId),
27271
- testType: readString27(entry.testType)
27435
+ const body = asRecord26(args.body);
27436
+ const questions = Array.isArray(body.questions) ? body.questions.map((entry) => asRecord26(entry)).map((entry) => ({
27437
+ question: readString28(entry.question) ?? readString28(entry.text) ?? "",
27438
+ category: readString28(entry.category),
27439
+ priority: readString28(entry.priority),
27440
+ linkedBeliefNodeId: readString28(entry.linkedBeliefNodeId) ?? readString28(entry.linkedBeliefId),
27441
+ linkedWorktreeId: readString28(entry.linkedWorktreeId),
27442
+ testType: readString28(entry.testType)
27272
27443
  })) : [];
27273
27444
  const payload = await createQuestionsBatchFromGatewayAuth(args.authContext, {
27274
- topicId: readString27(body.topicId),
27445
+ topicId: readString28(body.topicId),
27275
27446
  questions,
27276
- source: readString27(body.source)
27447
+ source: readString28(body.source)
27277
27448
  });
27278
27449
  return successResponse(payload, {
27279
27450
  status: 201,
@@ -27299,20 +27470,20 @@ async function handleQuestionBatchCreate(args) {
27299
27470
  }
27300
27471
  async function handleQuestionAdd(args) {
27301
27472
  try {
27302
- const body = asRecord25(args.body);
27473
+ const body = asRecord26(args.body);
27303
27474
  const payload = await addQuestionFromGatewayAuth(args.authContext, {
27304
- topicId: readString27(body.topicId),
27305
- question: readString27(body.question) ?? readString27(body.text),
27306
- category: readString27(body.category),
27307
- priority: readString27(body.priority),
27308
- source: readString27(body.source),
27309
- beliefId: readString27(body.beliefId) ?? readString27(body.linkedBeliefId),
27310
- linkedWorktreeId: readString27(body.linkedWorktreeId),
27311
- chatId: readString27(body.chatId),
27475
+ topicId: readString28(body.topicId),
27476
+ question: readString28(body.question) ?? readString28(body.text),
27477
+ category: readString28(body.category),
27478
+ priority: readString28(body.priority),
27479
+ source: readString28(body.source),
27480
+ beliefId: readString28(body.beliefId) ?? readString28(body.linkedBeliefId),
27481
+ linkedWorktreeId: readString28(body.linkedWorktreeId),
27482
+ chatId: readString28(body.chatId),
27312
27483
  importance: readNumber18(body.importance),
27313
- epistemicUnlock: readString27(body.epistemicUnlock),
27314
- metadata: asRecord25(body.metadata),
27315
- questionType: readString27(body.questionType)
27484
+ epistemicUnlock: readString28(body.epistemicUnlock),
27485
+ metadata: asRecord26(body.metadata),
27486
+ questionType: readString28(body.questionType)
27316
27487
  });
27317
27488
  return successResponse(payload, {
27318
27489
  status: 201,
@@ -27335,12 +27506,12 @@ async function handleQuestionAdd(args) {
27335
27506
  }
27336
27507
  async function handleQuestionUpdatePriority(args) {
27337
27508
  try {
27338
- const body = asRecord25(args.body);
27509
+ const body = asRecord26(args.body);
27339
27510
  const payload = await updateQuestionPriorityFromGatewayAuth(
27340
27511
  args.authContext,
27341
27512
  {
27342
- id: readString27(body.id) ?? readString27(body.nodeId) ?? readString27(body.questionId),
27343
- priority: readString27(body.priority) ?? "medium"
27513
+ id: readString28(body.id) ?? readString28(body.nodeId) ?? readString28(body.questionId),
27514
+ priority: readString28(body.priority) ?? "medium"
27344
27515
  }
27345
27516
  );
27346
27517
  return successResponse(payload, {
@@ -27366,12 +27537,12 @@ async function handleQuestionUpdatePriority(args) {
27366
27537
  }
27367
27538
  async function handleQuestionAdvanceToConviction(args) {
27368
27539
  try {
27369
- const body = asRecord25(args.body);
27540
+ const body = asRecord26(args.body);
27370
27541
  const payload = await advanceQuestionToConvictionFromGatewayAuth(
27371
27542
  args.authContext,
27372
27543
  {
27373
- questionId: readString27(body.questionId) ?? readString27(body.id) ?? readString27(body.nodeId),
27374
- worktreeId: readString27(body.worktreeId)
27544
+ questionId: readString28(body.questionId) ?? readString28(body.id) ?? readString28(body.nodeId),
27545
+ worktreeId: readString28(body.worktreeId)
27375
27546
  }
27376
27547
  );
27377
27548
  return successResponse(payload, {
@@ -27397,14 +27568,14 @@ async function handleQuestionAdvanceToConviction(args) {
27397
27568
  }
27398
27569
  async function handleQuestionUpdateConviction(args) {
27399
27570
  try {
27400
- const body = asRecord25(args.body);
27571
+ const body = asRecord26(args.body);
27401
27572
  const payload = await updateQuestionConvictionFromGatewayAuth(
27402
27573
  args.authContext,
27403
27574
  {
27404
- questionId: readString27(body.questionId) ?? readString27(body.id) ?? readString27(body.nodeId),
27575
+ questionId: readString28(body.questionId) ?? readString28(body.id) ?? readString28(body.nodeId),
27405
27576
  conviction: readNumber18(body.conviction),
27406
- answerCompleteness: readString27(body.answerCompleteness),
27407
- convictionRationale: readString27(body.convictionRationale)
27577
+ answerCompleteness: readString28(body.answerCompleteness),
27578
+ convictionRationale: readString28(body.convictionRationale)
27408
27579
  }
27409
27580
  );
27410
27581
  return successResponse(payload, {
@@ -27430,16 +27601,16 @@ async function handleQuestionUpdateConviction(args) {
27430
27601
  }
27431
27602
  async function handleQuestionFinalizeConviction(args) {
27432
27603
  try {
27433
- const body = asRecord25(args.body);
27604
+ const body = asRecord26(args.body);
27434
27605
  const payload = await finalizeQuestionConvictionFromGatewayAuth(
27435
27606
  args.authContext,
27436
27607
  {
27437
- questionId: readString27(body.questionId) ?? readString27(body.id) ?? readString27(body.nodeId),
27608
+ questionId: readString28(body.questionId) ?? readString28(body.id) ?? readString28(body.nodeId),
27438
27609
  conviction: readNumber18(body.conviction) ?? Number.NaN,
27439
- answer: readString27(body.answer) ?? "",
27440
- convictionRationale: readString27(body.convictionRationale),
27441
- answerCompleteness: readString27(body.answerCompleteness),
27442
- whatWeNeed: readString27(body.whatWeNeed)
27610
+ answer: readString28(body.answer) ?? "",
27611
+ convictionRationale: readString28(body.convictionRationale),
27612
+ answerCompleteness: readString28(body.answerCompleteness),
27613
+ whatWeNeed: readString28(body.whatWeNeed)
27443
27614
  }
27444
27615
  );
27445
27616
  return successResponse(payload, {
@@ -27465,12 +27636,12 @@ async function handleQuestionFinalizeConviction(args) {
27465
27636
  }
27466
27637
  async function handleQuestionUpdate(args) {
27467
27638
  try {
27468
- const body = asRecord25(args.body);
27639
+ const body = asRecord26(args.body);
27469
27640
  const payload = await updateQuestionFromGatewayAuth(args.authContext, {
27470
- questionId: readString27(body.questionId) ?? readString27(body.id) ?? readString27(body.nodeId),
27471
- question: readString27(body.question) ?? readString27(body.text),
27472
- category: readString27(body.category),
27473
- priority: readString27(body.priority)
27641
+ questionId: readString28(body.questionId) ?? readString28(body.id) ?? readString28(body.nodeId),
27642
+ question: readString28(body.question) ?? readString28(body.text),
27643
+ category: readString28(body.category),
27644
+ priority: readString28(body.priority)
27474
27645
  });
27475
27646
  return successResponse(payload, {
27476
27647
  correlationId: args.correlationId,
@@ -27492,9 +27663,9 @@ async function handleQuestionUpdate(args) {
27492
27663
  }
27493
27664
  async function handleQuestionDelete(args) {
27494
27665
  try {
27495
- const body = asRecord25(args.body);
27666
+ const body = asRecord26(args.body);
27496
27667
  const payload = await deleteQuestionFromGatewayAuth(args.authContext, {
27497
- questionId: readString27(body.questionId) ?? readString27(body.id) ?? readString27(body.nodeId)
27668
+ questionId: readString28(body.questionId) ?? readString28(body.id) ?? readString28(body.nodeId)
27498
27669
  });
27499
27670
  return successResponse(payload, {
27500
27671
  correlationId: args.correlationId,
@@ -27516,10 +27687,10 @@ async function handleQuestionDelete(args) {
27516
27687
  }
27517
27688
 
27518
27689
  // ../../apps/gateway/src/routes/search.ts
27519
- function asRecord26(value) {
27690
+ function asRecord27(value) {
27520
27691
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27521
27692
  }
27522
- function readString28(value) {
27693
+ function readString29(value) {
27523
27694
  if (typeof value !== "string") {
27524
27695
  return void 0;
27525
27696
  }
@@ -27533,13 +27704,13 @@ function readStringArray15(value) {
27533
27704
  if (!Array.isArray(value)) {
27534
27705
  return void 0;
27535
27706
  }
27536
- const items = value.map((entry) => readString28(entry)).filter((entry) => Boolean(entry));
27707
+ const items = value.map((entry) => readString29(entry)).filter((entry) => Boolean(entry));
27537
27708
  return items.length > 0 ? items : void 0;
27538
27709
  }
27539
27710
  async function handleSearchResources(args) {
27540
- const body = asRecord26(args.body);
27541
- const q = readString28(body.q) ?? readString28(body.query);
27542
- const topicId = readString28(body.topicId) ?? readString28(body.projectId);
27711
+ const body = asRecord27(args.body);
27712
+ const q = readString29(body.q) ?? readString29(body.query);
27713
+ const topicId = readString29(body.topicId) ?? readString29(body.projectId);
27543
27714
  if (!q) {
27544
27715
  return errorResponse({
27545
27716
  code: "INVALID_REQUEST",
@@ -27563,10 +27734,10 @@ async function handleSearchResources(args) {
27563
27734
  q,
27564
27735
  topicId,
27565
27736
  types: readStringArray15(body.types),
27566
- status: readString28(body.status),
27737
+ status: readString29(body.status),
27567
27738
  minConfidence: readNumber19(body.minConfidence),
27568
27739
  limit: readNumber19(body.limit),
27569
- cursor: readString28(body.cursor)
27740
+ cursor: readString29(body.cursor)
27570
27741
  });
27571
27742
  return successResponse(payload, {
27572
27743
  correlationId: args.correlationId,
@@ -27588,10 +27759,10 @@ async function handleSearchResources(args) {
27588
27759
  }
27589
27760
 
27590
27761
  // ../../apps/gateway/src/routes/sources.ts
27591
- function asRecord27(value) {
27762
+ function asRecord28(value) {
27592
27763
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27593
27764
  }
27594
- function readString29(value) {
27765
+ function readString30(value) {
27595
27766
  if (typeof value !== "string") {
27596
27767
  return void 0;
27597
27768
  }
@@ -27616,15 +27787,15 @@ function handleSourcesError(error, fallbackMessage, correlationId, policyTraceId
27616
27787
  }
27617
27788
  async function handleSourceUpsert(args) {
27618
27789
  try {
27619
- const body = asRecord27(args.body);
27790
+ const body = asRecord28(args.body);
27620
27791
  const payload = await upsertSourceFromGatewayAuth(args.authContext, {
27621
- url: readString29(body.url),
27622
- sha: readString29(body.sha),
27623
- kind: readString29(body.kind) ?? "",
27624
- title: readString29(body.title),
27792
+ url: readString30(body.url),
27793
+ sha: readString30(body.sha),
27794
+ kind: readString30(body.kind) ?? "",
27795
+ title: readString30(body.title),
27625
27796
  capturedAt: readNumber20(body.capturedAt),
27626
- topicId: readString29(body.topicId),
27627
- metadata: asRecord27(body.metadata)
27797
+ topicId: readString30(body.topicId),
27798
+ metadata: asRecord28(body.metadata)
27628
27799
  });
27629
27800
  return successResponse(payload, {
27630
27801
  status: 201,
@@ -27658,10 +27829,10 @@ async function handleSourceGet(args) {
27658
27829
  }
27659
27830
 
27660
27831
  // ../../apps/gateway/src/routes/tasks.ts
27661
- function asRecord28(value) {
27832
+ function asRecord29(value) {
27662
27833
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27663
27834
  }
27664
- function readString30(value) {
27835
+ function readString31(value) {
27665
27836
  if (typeof value !== "string") {
27666
27837
  return void 0;
27667
27838
  }
@@ -27683,18 +27854,18 @@ function handleTasksError(error, fallbackMessage, correlationId, policyTraceId)
27683
27854
  }
27684
27855
  async function handleTaskCreate(args) {
27685
27856
  try {
27686
- const body = asRecord28(args.body);
27857
+ const body = asRecord29(args.body);
27687
27858
  const payload = await createTaskFromGatewayAuth(args.authContext, {
27688
- topicId: readString30(body.topicId),
27689
- title: readString30(body.title) ?? "",
27690
- description: readString30(body.description),
27691
- taskType: readString30(body.taskType),
27692
- priority: readString30(body.priority),
27693
- status: readString30(body.status),
27694
- linkedBeliefId: readString30(body.linkedBeliefId),
27695
- linkedQuestionId: readString30(body.linkedQuestionId),
27696
- linkedWorktreeId: readString30(body.linkedWorktreeId),
27697
- tags: Array.isArray(body.tags) ? body.tags.map((entry) => readString30(entry)).filter((entry) => Boolean(entry)) : void 0,
27859
+ topicId: readString31(body.topicId),
27860
+ title: readString31(body.title) ?? "",
27861
+ description: readString31(body.description),
27862
+ taskType: readString31(body.taskType),
27863
+ priority: readString31(body.priority),
27864
+ status: readString31(body.status),
27865
+ linkedBeliefId: readString31(body.linkedBeliefId),
27866
+ linkedQuestionId: readString31(body.linkedQuestionId),
27867
+ linkedWorktreeId: readString31(body.linkedWorktreeId),
27868
+ tags: Array.isArray(body.tags) ? body.tags.map((entry) => readString31(entry)).filter((entry) => Boolean(entry)) : void 0,
27698
27869
  metadata: body.metadata && typeof body.metadata === "object" && !Array.isArray(body.metadata) ? body.metadata : void 0
27699
27870
  });
27700
27871
  return successResponse(payload, {
@@ -27729,16 +27900,16 @@ async function handleTaskList(args) {
27729
27900
  }
27730
27901
  async function handleTaskUpdate(args) {
27731
27902
  try {
27732
- const body = asRecord28(args.body);
27903
+ const body = asRecord29(args.body);
27733
27904
  const payload = await updateTaskFromGatewayAuth(args.authContext, {
27734
27905
  id: args.taskId,
27735
- title: readString30(body.title),
27736
- description: readString30(body.description),
27737
- priority: readString30(body.priority),
27738
- status: readString30(body.status),
27739
- linkedBeliefId: readString30(body.linkedBeliefId),
27740
- linkedQuestionId: readString30(body.linkedQuestionId),
27741
- linkedWorktreeId: readString30(body.linkedWorktreeId),
27906
+ title: readString31(body.title),
27907
+ description: readString31(body.description),
27908
+ priority: readString31(body.priority),
27909
+ status: readString31(body.status),
27910
+ linkedBeliefId: readString31(body.linkedBeliefId),
27911
+ linkedQuestionId: readString31(body.linkedQuestionId),
27912
+ linkedWorktreeId: readString31(body.linkedWorktreeId),
27742
27913
  metadata: body.metadata && typeof body.metadata === "object" && !Array.isArray(body.metadata) ? body.metadata : void 0
27743
27914
  });
27744
27915
  return successResponse(payload, {
@@ -27756,10 +27927,10 @@ async function handleTaskUpdate(args) {
27756
27927
  }
27757
27928
  async function handleTaskComplete(args) {
27758
27929
  try {
27759
- const body = asRecord28(args.body);
27930
+ const body = asRecord29(args.body);
27760
27931
  const payload = await completeTaskFromGatewayAuth(args.authContext, {
27761
27932
  id: args.taskId,
27762
- outputSummary: readString30(body.outputSummary)
27933
+ outputSummary: readString31(body.outputSummary)
27763
27934
  });
27764
27935
  return successResponse(payload, {
27765
27936
  correlationId: args.correlationId,
@@ -27776,10 +27947,10 @@ async function handleTaskComplete(args) {
27776
27947
  }
27777
27948
 
27778
27949
  // ../../apps/gateway/src/routes/topics.ts
27779
- function asRecord29(value) {
27950
+ function asRecord30(value) {
27780
27951
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27781
27952
  }
27782
- function readString31(value) {
27953
+ function readString32(value) {
27783
27954
  if (typeof value !== "string") {
27784
27955
  return void 0;
27785
27956
  }
@@ -27796,7 +27967,7 @@ function readStringArray16(value) {
27796
27967
  if (!Array.isArray(value)) {
27797
27968
  return void 0;
27798
27969
  }
27799
- const items = value.map((entry) => readString31(entry)).filter((entry) => Boolean(entry));
27970
+ const items = value.map((entry) => readString32(entry)).filter((entry) => Boolean(entry));
27800
27971
  return items.length > 0 ? items : void 0;
27801
27972
  }
27802
27973
  function handleTopicsError(error, fallbackMessage, correlationId, policyTraceId) {
@@ -27814,17 +27985,17 @@ function handleTopicsError(error, fallbackMessage, correlationId, policyTraceId)
27814
27985
  }
27815
27986
  async function handleTopicCreate(args) {
27816
27987
  try {
27817
- const body = asRecord29(args.body);
27988
+ const body = asRecord30(args.body);
27818
27989
  const payload = await createTopicFromGatewayAuth(args.authContext, {
27819
- name: readString31(body.name) ?? "",
27820
- description: readString31(body.description),
27821
- type: readString31(body.type),
27822
- parentTopicId: readString31(body.parentTopicId),
27823
- ontologyId: readString31(body.ontologyId),
27824
- tenantId: readString31(body.tenantId),
27825
- workspaceId: readString31(body.workspaceId),
27826
- visibility: readString31(body.visibility),
27827
- createdBy: readString31(body.createdBy)
27990
+ name: readString32(body.name) ?? "",
27991
+ description: readString32(body.description),
27992
+ type: readString32(body.type),
27993
+ parentTopicId: readString32(body.parentTopicId),
27994
+ ontologyId: readString32(body.ontologyId),
27995
+ tenantId: readString32(body.tenantId),
27996
+ workspaceId: readString32(body.workspaceId),
27997
+ visibility: readString32(body.visibility),
27998
+ createdBy: readString32(body.createdBy)
27828
27999
  });
27829
28000
  return successResponse(payload, {
27830
28001
  status: 201,
@@ -27842,16 +28013,16 @@ async function handleTopicCreate(args) {
27842
28013
  }
27843
28014
  async function handleTopicUpdate(args) {
27844
28015
  try {
27845
- const body = asRecord29(args.body);
28016
+ const body = asRecord30(args.body);
27846
28017
  const payload = await updateTopicFromGatewayAuth(args.authContext, {
27847
28018
  id: args.topicId,
27848
- name: readString31(body.name),
27849
- description: readString31(body.description),
27850
- type: readString31(body.type),
27851
- ontologyId: readString31(body.ontologyId),
28019
+ name: readString32(body.name),
28020
+ description: readString32(body.description),
28021
+ type: readString32(body.type),
28022
+ ontologyId: readString32(body.ontologyId),
27852
28023
  clearOntologyId: readBoolean(body.clearOntologyId),
27853
- status: readString31(body.status),
27854
- visibility: readString31(body.visibility)
28024
+ status: readString32(body.status),
28025
+ visibility: readString32(body.visibility)
27855
28026
  });
27856
28027
  return successResponse(payload, {
27857
28028
  correlationId: args.correlationId,
@@ -27939,9 +28110,9 @@ async function handleTopicCoverage(args) {
27939
28110
  }
27940
28111
  async function handleTopicRemove(args) {
27941
28112
  try {
27942
- const body = asRecord29(args.body);
28113
+ const body = asRecord30(args.body);
27943
28114
  const payload = await removeTopicFromGatewayAuth(args.authContext, {
27944
- id: readString31(body.id) ?? readString31(body.topicId) ?? ""
28115
+ id: readString32(body.id) ?? readString32(body.topicId) ?? ""
27945
28116
  });
27946
28117
  return successResponse(payload, {
27947
28118
  correlationId: args.correlationId,
@@ -27958,22 +28129,22 @@ async function handleTopicRemove(args) {
27958
28129
  }
27959
28130
  async function handleTopicBulkCreate(args) {
27960
28131
  try {
27961
- const body = asRecord29(args.body);
27962
- const topics2 = Array.isArray(body.topics) ? body.topics.map((entry) => asRecord29(entry)).map((entry) => ({
27963
- globalId: readString31(entry.globalId) ?? "",
27964
- name: readString31(entry.name) ?? "",
27965
- description: readString31(entry.description),
27966
- type: readString31(entry.type) ?? "theme",
27967
- parentTopicId: readString31(entry.parentTopicId),
28132
+ const body = asRecord30(args.body);
28133
+ const topics2 = Array.isArray(body.topics) ? body.topics.map((entry) => asRecord30(entry)).map((entry) => ({
28134
+ globalId: readString32(entry.globalId) ?? "",
28135
+ name: readString32(entry.name) ?? "",
28136
+ description: readString32(entry.description),
28137
+ type: readString32(entry.type) ?? "theme",
28138
+ parentTopicId: readString32(entry.parentTopicId),
27968
28139
  depth: readNumber21(entry.depth) ?? 0,
27969
28140
  path: readStringArray16(entry.path) ?? [],
27970
- tenantId: readString31(entry.tenantId),
27971
- workspaceId: readString31(entry.workspaceId),
27972
- graphScopeProjectId: readString31(entry.graphScopeProjectId),
27973
- status: readString31(entry.status) ?? "active",
27974
- visibility: readString31(entry.visibility),
27975
- metadata: asRecord29(entry.metadata),
27976
- createdBy: readString31(entry.createdBy)
28141
+ tenantId: readString32(entry.tenantId),
28142
+ workspaceId: readString32(entry.workspaceId),
28143
+ graphScopeProjectId: readString32(entry.graphScopeProjectId),
28144
+ status: readString32(entry.status) ?? "active",
28145
+ visibility: readString32(entry.visibility),
28146
+ metadata: asRecord30(entry.metadata),
28147
+ createdBy: readString32(entry.createdBy)
27977
28148
  })) : [];
27978
28149
  const payload = await bulkCreateTopicsFromGatewayAuth(args.authContext, {
27979
28150
  topics: topics2
@@ -27994,10 +28165,10 @@ async function handleTopicBulkCreate(args) {
27994
28165
  }
27995
28166
 
27996
28167
  // ../../apps/gateway/src/routes/webhooks.ts
27997
- function asRecord30(value) {
28168
+ function asRecord31(value) {
27998
28169
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
27999
28170
  }
28000
- function readString32(value) {
28171
+ function readString33(value) {
28001
28172
  if (typeof value !== "string") {
28002
28173
  return void 0;
28003
28174
  }
@@ -28011,7 +28182,7 @@ function readStringArray17(value) {
28011
28182
  if (!Array.isArray(value)) {
28012
28183
  return void 0;
28013
28184
  }
28014
- const normalized = value.map((entry) => readString32(entry)).filter((entry) => Boolean(entry));
28185
+ const normalized = value.map((entry) => readString33(entry)).filter((entry) => Boolean(entry));
28015
28186
  return normalized.length > 0 ? normalized : void 0;
28016
28187
  }
28017
28188
  function handleWebhooksError(error, fallbackMessage, correlationId, policyTraceId) {
@@ -28029,16 +28200,16 @@ function handleWebhooksError(error, fallbackMessage, correlationId, policyTraceI
28029
28200
  }
28030
28201
  async function handleWebhookCreate(args) {
28031
28202
  try {
28032
- const body = asRecord30(args.body);
28203
+ const body = asRecord31(args.body);
28033
28204
  const payload = await args.authContext.convex.mutation(
28034
28205
  "events:createWebhook",
28035
28206
  {
28036
28207
  tenantId: args.authContext.tenantId,
28037
28208
  workspaceId: args.authContext.workspaceId,
28038
- topicId: readString32(body.topicId),
28039
- url: readString32(body.url) ?? "",
28209
+ topicId: readString33(body.topicId),
28210
+ url: readString33(body.url) ?? "",
28040
28211
  events: readStringArray17(body.events) ?? [],
28041
- secret: readString32(body.secret) ?? "",
28212
+ secret: readString33(body.secret) ?? "",
28042
28213
  active: readBoolean2(body.active),
28043
28214
  createdBy: args.authContext.principalId ?? args.authContext.userId
28044
28215
  }
@@ -28099,17 +28270,17 @@ async function handleWebhookGet(args) {
28099
28270
  }
28100
28271
  async function handleWebhookUpdate(args) {
28101
28272
  try {
28102
- const body = asRecord30(args.body);
28273
+ const body = asRecord31(args.body);
28103
28274
  const payload = await args.authContext.convex.mutation(
28104
28275
  "events:updateWebhook",
28105
28276
  {
28106
28277
  webhookId: args.webhookId,
28107
28278
  tenantId: args.authContext.tenantId,
28108
28279
  workspaceId: args.authContext.workspaceId,
28109
- url: readString32(body.url),
28280
+ url: readString33(body.url),
28110
28281
  events: readStringArray17(body.events),
28111
- secret: readString32(body.secret),
28112
- topicId: readString32(body.topicId),
28282
+ secret: readString33(body.secret),
28283
+ topicId: readString33(body.topicId),
28113
28284
  clearTopicId: body.topicId === null ? true : readBoolean2(body.clearTopicId),
28114
28285
  active: readBoolean2(body.active),
28115
28286
  updatedBy: args.authContext.principalId ?? args.authContext.userId
@@ -28153,12 +28324,12 @@ async function handleWebhookDelete(args) {
28153
28324
  }
28154
28325
  async function handleWebhookTest(args) {
28155
28326
  try {
28156
- const body = asRecord30(args.body);
28327
+ const body = asRecord31(args.body);
28157
28328
  const payload = await args.authContext.convex.action("events:testWebhook", {
28158
28329
  webhookId: args.webhookId,
28159
28330
  tenantId: args.authContext.tenantId,
28160
28331
  workspaceId: args.authContext.workspaceId,
28161
- topicId: readString32(body.topicId),
28332
+ topicId: readString33(body.topicId),
28162
28333
  actorId: args.authContext.principalId ?? args.authContext.userId,
28163
28334
  actorType: inferActorType({
28164
28335
  authMode: args.authContext.authMode,
@@ -28228,10 +28399,10 @@ async function handleWebhookHealth(args) {
28228
28399
  }
28229
28400
 
28230
28401
  // ../../apps/gateway/src/routes/worktrees.ts
28231
- function asRecord31(value) {
28402
+ function asRecord32(value) {
28232
28403
  return value && typeof value === "object" && !Array.isArray(value) ? value : {};
28233
28404
  }
28234
- function readString33(value) {
28405
+ function readString34(value) {
28235
28406
  if (typeof value !== "string") {
28236
28407
  return void 0;
28237
28408
  }
@@ -28245,14 +28416,14 @@ function readStringArray18(value) {
28245
28416
  if (!Array.isArray(value)) {
28246
28417
  return void 0;
28247
28418
  }
28248
- const normalized = value.map((entry) => readString33(entry)).filter((entry) => Boolean(entry));
28419
+ const normalized = value.map((entry) => readString34(entry)).filter((entry) => Boolean(entry));
28249
28420
  return normalized.length > 0 ? normalized : void 0;
28250
28421
  }
28251
28422
  function readObjectArray(value) {
28252
28423
  if (!Array.isArray(value)) {
28253
28424
  return void 0;
28254
28425
  }
28255
- const normalized = value.map((entry) => asRecord31(entry)).filter((entry) => Object.keys(entry).length > 0);
28426
+ const normalized = value.map((entry) => asRecord32(entry)).filter((entry) => Object.keys(entry).length > 0);
28256
28427
  return normalized.length > 0 ? normalized : void 0;
28257
28428
  }
28258
28429
  function readConfidenceImpact(value) {
@@ -28263,18 +28434,18 @@ function normalizeMergeOutcomes2(value) {
28263
28434
  return [];
28264
28435
  }
28265
28436
  return value.map((entry) => {
28266
- const finding = readString33(entry);
28437
+ const finding = readString34(entry);
28267
28438
  if (finding) {
28268
28439
  return finding;
28269
28440
  }
28270
- const row = asRecord31(entry);
28441
+ const row = asRecord32(entry);
28271
28442
  if (!Object.keys(row).length) {
28272
28443
  return null;
28273
28444
  }
28274
28445
  return {
28275
- beliefId: readString33(row.beliefId) ?? "",
28446
+ beliefId: readString34(row.beliefId) ?? "",
28276
28447
  confidence: readNumber22(row.confidence) ?? Number.NaN,
28277
- rationale: readString33(row.rationale) ?? ""
28448
+ rationale: readString34(row.rationale) ?? ""
28278
28449
  };
28279
28450
  }).filter((entry) => entry !== null);
28280
28451
  }
@@ -28293,22 +28464,22 @@ function handleWorktreesError(error, fallbackMessage, correlationId, policyTrace
28293
28464
  }
28294
28465
  async function handleWorktreeCreate(args) {
28295
28466
  try {
28296
- const body = asRecord31(args.body);
28467
+ const body = asRecord32(args.body);
28297
28468
  const goCriteria = readStringArray18(body.goCriteria);
28298
28469
  const noGoSignals = readStringArray18(body.noGoSignals);
28299
28470
  const payload = await createWorktreeFromGatewayAuth(args.authContext, {
28300
- title: readString33(body.title) ?? readString33(body.name) ?? "",
28301
- topicId: readString33(body.topicId ?? body.projectId) ?? "",
28302
- topicHint: readString33(body.topicHint),
28303
- objective: readString33(body.objective),
28304
- hypothesis: readString33(body.hypothesis),
28305
- rationale: readString33(body.rationale),
28306
- worktreeType: readString33(body.worktreeType),
28471
+ title: readString34(body.title) ?? readString34(body.name) ?? "",
28472
+ topicId: readString34(body.topicId ?? body.projectId) ?? "",
28473
+ topicHint: readString34(body.topicHint),
28474
+ objective: readString34(body.objective),
28475
+ hypothesis: readString34(body.hypothesis),
28476
+ rationale: readString34(body.rationale),
28477
+ worktreeType: readString34(body.worktreeType),
28307
28478
  startDate: readNumber22(body.startDate),
28308
28479
  endDate: readNumber22(body.endDate),
28309
28480
  durationWeeks: readNumber22(body.durationWeeks),
28310
28481
  confidenceImpact: readConfidenceImpact(body.confidenceImpact),
28311
- beliefFocus: readString33(body.beliefFocus),
28482
+ beliefFocus: readString34(body.beliefFocus),
28312
28483
  beliefIds: readStringArray18(body.targetBeliefIds) ?? readStringArray18(body.beliefIds) ?? readStringArray18(body.beliefs),
28313
28484
  targetBeliefIds: readStringArray18(body.targetBeliefIds),
28314
28485
  targetQuestionIds: readStringArray18(body.targetQuestionIds),
@@ -28319,23 +28490,23 @@ async function handleWorktreeCreate(args) {
28319
28490
  noGoSignals: noGoSignals ?? []
28320
28491
  } : void 0,
28321
28492
  autoShape: typeof body.autoShape === "boolean" ? body.autoShape : void 0,
28322
- domainPackId: readString33(body.domainPackId),
28493
+ domainPackId: readString34(body.domainPackId),
28323
28494
  tags: readStringArray18(body.tags),
28324
28495
  touchedPaths: readStringArray18(body.touchedPaths),
28325
- sourceRef: readString33(body.sourceRef),
28326
- sourceKind: readString33(body.sourceKind),
28496
+ sourceRef: readString34(body.sourceRef),
28497
+ sourceKind: readString34(body.sourceKind),
28327
28498
  campaign: readNumber22(body.campaign),
28328
- lane: readString33(body.lane),
28499
+ lane: readString34(body.lane),
28329
28500
  laneOrderInCampaign: readNumber22(body.laneOrderInCampaign),
28330
28501
  orderInLane: readNumber22(body.orderInLane),
28331
28502
  dependsOn: readStringArray18(body.dependsOn),
28332
28503
  blocks: readStringArray18(body.blocks),
28333
- gate: readString33(body.gate),
28504
+ gate: readString34(body.gate),
28334
28505
  proofArtifacts: Array.isArray(body.proofArtifacts) ? body.proofArtifacts : void 0,
28335
- staffingHint: readString33(body.staffingHint),
28506
+ staffingHint: readString34(body.staffingHint),
28336
28507
  lastReconciledAt: readNumber22(body.lastReconciledAt),
28337
28508
  autoFixPolicy: body.autoFixPolicy && typeof body.autoFixPolicy === "object" && !Array.isArray(body.autoFixPolicy) ? body.autoFixPolicy : void 0,
28338
- lensId: readString33(body.lensId)
28509
+ lensId: readString34(body.lensId)
28339
28510
  });
28340
28511
  return successResponse(payload, {
28341
28512
  status: 201,
@@ -28354,10 +28525,10 @@ async function handleWorktreeCreate(args) {
28354
28525
  async function handleWorktreeList(args) {
28355
28526
  try {
28356
28527
  const payload = await listWorktreesFromGatewayAuth(args.authContext, {
28357
- topicId: readString33(args.query.topicId) ?? "",
28358
- status: readString33(args.query.status),
28359
- groupBy: readString33(args.query.groupBy),
28360
- lane: readString33(args.query.lane),
28528
+ topicId: readString34(args.query.topicId) ?? "",
28529
+ status: readString34(args.query.status),
28530
+ groupBy: readString34(args.query.groupBy),
28531
+ lane: readString34(args.query.lane),
28361
28532
  campaign: readNumber22(args.query.campaign),
28362
28533
  limit: readNumber22(args.query.limit)
28363
28534
  });
@@ -28377,10 +28548,10 @@ async function handleWorktreeList(args) {
28377
28548
  async function handleWorktreeListAll(args) {
28378
28549
  try {
28379
28550
  const payload = await listAllWorktreesFromGatewayAuth(args.authContext, {
28380
- status: readString33(args.query.status),
28381
- lane: readString33(args.query.lane),
28551
+ status: readString34(args.query.status),
28552
+ lane: readString34(args.query.lane),
28382
28553
  campaign: readNumber22(args.query.campaign),
28383
- groupBy: readString33(args.query.groupBy),
28554
+ groupBy: readString34(args.query.groupBy),
28384
28555
  limit: readNumber22(args.query.limit)
28385
28556
  });
28386
28557
  return successResponse(payload, {
@@ -28399,8 +28570,8 @@ async function handleWorktreeListAll(args) {
28399
28570
  async function handleWorktreeListCampaigns(args) {
28400
28571
  try {
28401
28572
  const payload = await listCampaignsFromGatewayAuth(args.authContext, {
28402
- topicId: readString33(args.query.topicId),
28403
- status: readString33(args.query.status),
28573
+ topicId: readString34(args.query.topicId),
28574
+ status: readString34(args.query.status),
28404
28575
  limit: readNumber22(args.query.limit)
28405
28576
  });
28406
28577
  return successResponse(payload, {
@@ -28436,27 +28607,27 @@ async function handleWorktreeActivate(args) {
28436
28607
  }
28437
28608
  async function handleWorktreeUpdate(args) {
28438
28609
  try {
28439
- const body = asRecord31(args.body);
28610
+ const body = asRecord32(args.body);
28440
28611
  const payload = await updateWorktreeFromGatewayAuth(args.authContext, {
28441
28612
  id: args.worktreeId,
28442
- objective: readString33(body.objective),
28443
- hypothesis: readString33(body.hypothesis),
28444
- rationale: readString33(body.rationale),
28613
+ objective: readString34(body.objective),
28614
+ hypothesis: readString34(body.hypothesis),
28615
+ rationale: readString34(body.rationale),
28445
28616
  campaign: readNumber22(body.campaign),
28446
- lane: readString33(body.lane),
28617
+ lane: readString34(body.lane),
28447
28618
  laneOrderInCampaign: readNumber22(body.laneOrderInCampaign),
28448
28619
  orderInLane: readNumber22(body.orderInLane),
28449
28620
  dependsOn: readStringArray18(body.dependsOn),
28450
28621
  blocks: readStringArray18(body.blocks),
28451
- gate: readString33(body.gate),
28452
- status: readString33(body.status),
28453
- topicId: readString33(body.topicId),
28622
+ gate: readString34(body.gate),
28623
+ status: readString34(body.status),
28624
+ topicId: readString34(body.topicId),
28454
28625
  additionalTopicIds: readStringArray18(body.additionalTopicIds),
28455
28626
  proofArtifacts: Array.isArray(body.proofArtifacts) ? body.proofArtifacts : void 0,
28456
- staffingHint: readString33(body.staffingHint),
28627
+ staffingHint: readString34(body.staffingHint),
28457
28628
  lastReconciledAt: readNumber22(body.lastReconciledAt),
28458
28629
  autoFixPolicy: body.autoFixPolicy && typeof body.autoFixPolicy === "object" ? body.autoFixPolicy : void 0,
28459
- lensId: readString33(body.lensId)
28630
+ lensId: readString34(body.lensId)
28460
28631
  });
28461
28632
  return successResponse(payload, {
28462
28633
  correlationId: args.correlationId,
@@ -28473,11 +28644,11 @@ async function handleWorktreeUpdate(args) {
28473
28644
  }
28474
28645
  async function handleWorktreeMerge(args) {
28475
28646
  try {
28476
- const body = asRecord31(args.body);
28647
+ const body = asRecord32(args.body);
28477
28648
  const outcomes = normalizeMergeOutcomes2(body.outcomes);
28478
28649
  const payload = await mergeWorktreeFromGatewayAuth(args.authContext, {
28479
28650
  id: args.worktreeId,
28480
- summary: readString33(body.summary),
28651
+ summary: readString34(body.summary),
28481
28652
  outcomes
28482
28653
  });
28483
28654
  return successResponse(payload, {
@@ -28495,7 +28666,7 @@ async function handleWorktreeMerge(args) {
28495
28666
  }
28496
28667
  async function handleWorktreeUpdateTargets(args) {
28497
28668
  try {
28498
- const body = asRecord31(args.body);
28669
+ const body = asRecord32(args.body);
28499
28670
  const payload = await updateWorktreeTargetsFromGatewayAuth(
28500
28671
  args.authContext,
28501
28672
  {
@@ -28521,11 +28692,11 @@ async function handleWorktreeUpdateTargets(args) {
28521
28692
  }
28522
28693
  async function handleWorktreeComplete(args) {
28523
28694
  try {
28524
- const body = asRecord31(args.body);
28695
+ const body = asRecord32(args.body);
28525
28696
  const payload = await completeWorktreeRecordFromGatewayAuth(
28526
28697
  args.authContext,
28527
28698
  {
28528
- worktreeId: readString33(body.worktreeId) ?? "",
28699
+ worktreeId: readString34(body.worktreeId) ?? "",
28529
28700
  keyFindings: readStringArray18(body.keyFindings),
28530
28701
  decisionsReached: readStringArray18(body.decisionsReached),
28531
28702
  nextSteps: readStringArray18(body.nextSteps)
@@ -28546,9 +28717,9 @@ async function handleWorktreeComplete(args) {
28546
28717
  }
28547
28718
  async function handleWorktreeAdvancePhase(args) {
28548
28719
  try {
28549
- const body = asRecord31(args.body);
28720
+ const body = asRecord32(args.body);
28550
28721
  const payload = await advanceWorktreePhaseFromGatewayAuth(args.authContext, {
28551
- worktreeId: readString33(body.worktreeId) ?? ""
28722
+ worktreeId: readString34(body.worktreeId) ?? ""
28552
28723
  });
28553
28724
  return successResponse(payload, {
28554
28725
  correlationId: args.correlationId,
@@ -28565,10 +28736,10 @@ async function handleWorktreeAdvancePhase(args) {
28565
28736
  }
28566
28737
  async function handleWorktreeSetPhase(args) {
28567
28738
  try {
28568
- const body = asRecord31(args.body);
28739
+ const body = asRecord32(args.body);
28569
28740
  const payload = await setWorktreePhaseFromGatewayAuth(args.authContext, {
28570
- worktreeId: readString33(body.worktreeId) ?? "",
28571
- phase: readString33(body.phase) ?? ""
28741
+ worktreeId: readString34(body.worktreeId) ?? "",
28742
+ phase: readString34(body.phase) ?? ""
28572
28743
  });
28573
28744
  return successResponse(payload, {
28574
28745
  correlationId: args.correlationId,
@@ -28585,12 +28756,12 @@ async function handleWorktreeSetPhase(args) {
28585
28756
  }
28586
28757
  async function handleWorktreePatchState(args) {
28587
28758
  try {
28588
- const body = asRecord31(args.body);
28759
+ const body = asRecord32(args.body);
28589
28760
  const payload = await patchWorktreeStateFromGatewayAuth(
28590
28761
  args.authContext,
28591
28762
  {
28592
- worktreeId: readString33(body.worktreeId) ?? "",
28593
- patch: asRecord31(body.patch)
28763
+ worktreeId: readString34(body.worktreeId) ?? "",
28764
+ patch: asRecord32(body.patch)
28594
28765
  }
28595
28766
  );
28596
28767
  return successResponse(payload, {
@@ -28608,7 +28779,7 @@ async function handleWorktreePatchState(args) {
28608
28779
  }
28609
28780
  async function handleWorktreeBulkCreate(args) {
28610
28781
  try {
28611
- const body = asRecord31(args.body);
28782
+ const body = asRecord32(args.body);
28612
28783
  const payload = await bulkCreateWorktreesFromGatewayAuth(args.authContext, {
28613
28784
  worktrees: Array.isArray(body.worktrees) ? body.worktrees : []
28614
28785
  });
@@ -28627,6 +28798,6 @@ async function handleWorktreeBulkCreate(args) {
28627
28798
  }
28628
28799
  }
28629
28800
 
28630
- export { handleBeliefArchive, handleBeliefBatchUpdateCriticality, handleBeliefBisect, handleBeliefConfidenceHistory, handleBeliefCreate, handleBeliefCreateContract, handleBeliefFork, handleBeliefGet, handleBeliefLineage, handleBeliefLink, handleBeliefList, handleBeliefReassignTopic, handleBeliefRefine, handleBeliefRelationships, handleBeliefUnlinkEvidence, handleBeliefUpdateConfidence, handleBeliefUpdateCriticality, handleBeliefUpdateRationale, handleBeliefUpdateStatus, handleContradictionFlag, handleContradictionGet, handleContradictionList, handleEdgeBatchCreate, handleEdgeCreate, handleEdgeDelete, handleEdgeList, handleEdgeRemove, handleEdgeTraverse, handleEdgeUpdate, handleEdgesRemoveBetween, handleEventsList, handleEventsReplay, handleEvidenceClassify, handleEvidenceClassifyBatch, handleEvidenceCreate, handleEvidenceFlagIncorrect, handleEvidenceGet, handleEvidenceLink, handleEvidenceList, handleEvidenceRemove, handleEvidenceSearch, handleEvidenceUpdate, handleEvidenceUpdateStatus, handleEvidenceUpdateVerificationStatus, handleGraphAnalysisCompute, handleGraphAnalysisLatest, handleGraphAnalysisList, handleGraphAnalysisListChanges, handleGraphAnalysisListSuggestions, handleGraphAnalysisSave, handleGraphAnalysisSaveSuggestions, handleGraphAnalysisUpdateSuggestion, handleGraphAnalyze, handleGraphBias, handleGraphEdgeList, handleGraphFalsify, handleGraphGaps, handleGraphNeighborhood, handleGraphNodeList, handleGraphRecommendationGet, handleGraphRecommendationStatus, handleGraphRecommendationsList, handleGraphTraverse, handleIdentityWhoami, handleOntologyBind, handleOntologyGet, handleOntologyList, handleOntologyMatch, handleOrgGraphByProvenance, handleOrgGraphNodeGet, handleOrgGraphPublished, handleOrgGraphSearch, handleQuestionAdd, handleQuestionAdvanceToConviction, handleQuestionAnswer, handleQuestionArchive, handleQuestionBatchCreate, handleQuestionCreate, handleQuestionDelete, handleQuestionFinalizeConviction, handleQuestionGet, handleQuestionGetAnswer, handleQuestionList, handleQuestionRefine, handleQuestionUpdate, handleQuestionUpdateConviction, handleQuestionUpdatePriority, handleQuestionUpdateStatus, handleSearchResources, handleSourceGet, handleSourceUpsert, handleTaskComplete, handleTaskCreate, handleTaskList, handleTaskUpdate, handleTopicBulkCreate, handleTopicCoverage, handleTopicCreate, handleTopicGet, handleTopicList, handleTopicRemove, handleTopicTree, handleTopicUpdate, handleWebhookCreate, handleWebhookDelete, handleWebhookDeliveries, handleWebhookGet, handleWebhookHealth, handleWebhookList, handleWebhookTest, handleWebhookUpdate, handleWorktreeActivate, handleWorktreeAdvancePhase, handleWorktreeBulkCreate, handleWorktreeComplete, handleWorktreeCreate, handleWorktreeList, handleWorktreeListAll, handleWorktreeListCampaigns, handleWorktreeMerge, handleWorktreePatchState, handleWorktreeSetPhase, handleWorktreeUpdate, handleWorktreeUpdateTargets };
28801
+ export { extractPermitWebhookTenantKeys, handleBeliefArchive, handleBeliefBatchUpdateCriticality, handleBeliefBisect, handleBeliefConfidenceHistory, handleBeliefCreate, handleBeliefCreateContract, handleBeliefFork, handleBeliefGet, handleBeliefLineage, handleBeliefLink, handleBeliefList, handleBeliefReassignTopic, handleBeliefRefine, handleBeliefRelationships, handleBeliefUnlinkEvidence, handleBeliefUpdateConfidence, handleBeliefUpdateCriticality, handleBeliefUpdateRationale, handleBeliefUpdateStatus, handleContradictionFlag, handleContradictionGet, handleContradictionList, handleEdgeBatchCreate, handleEdgeCreate, handleEdgeDelete, handleEdgeList, handleEdgeRemove, handleEdgeTraverse, handleEdgeUpdate, handleEdgesRemoveBetween, handleEventsList, handleEventsReplay, handleEvidenceClassify, handleEvidenceClassifyBatch, handleEvidenceCreate, handleEvidenceFlagIncorrect, handleEvidenceGet, handleEvidenceLink, handleEvidenceList, handleEvidenceRemove, handleEvidenceSearch, handleEvidenceUpdate, handleEvidenceUpdateStatus, handleEvidenceUpdateVerificationStatus, handleGraphAnalysisCompute, handleGraphAnalysisLatest, handleGraphAnalysisList, handleGraphAnalysisListChanges, handleGraphAnalysisListSuggestions, handleGraphAnalysisSave, handleGraphAnalysisSaveSuggestions, handleGraphAnalysisUpdateSuggestion, handleGraphAnalyze, handleGraphBias, handleGraphEdgeList, handleGraphFalsify, handleGraphGaps, handleGraphNeighborhood, handleGraphNodeList, handleGraphRecommendationGet, handleGraphRecommendationStatus, handleGraphRecommendationsList, handleGraphTraverse, handleIdentityWhoami, handleOntologyBind, handleOntologyGet, handleOntologyList, handleOntologyMatch, handleOrgGraphByProvenance, handleOrgGraphNodeGet, handleOrgGraphPublished, handleOrgGraphSearch, handlePermitProjectionWebhook, handleQuestionAdd, handleQuestionAdvanceToConviction, handleQuestionAnswer, handleQuestionArchive, handleQuestionBatchCreate, handleQuestionCreate, handleQuestionDelete, handleQuestionFinalizeConviction, handleQuestionGet, handleQuestionGetAnswer, handleQuestionList, handleQuestionRefine, handleQuestionUpdate, handleQuestionUpdateConviction, handleQuestionUpdatePriority, handleQuestionUpdateStatus, handleSearchResources, handleSourceGet, handleSourceUpsert, handleTaskComplete, handleTaskCreate, handleTaskList, handleTaskUpdate, handleTopicBulkCreate, handleTopicCoverage, handleTopicCreate, handleTopicGet, handleTopicList, handleTopicRemove, handleTopicTree, handleTopicUpdate, handleWebhookCreate, handleWebhookDelete, handleWebhookDeliveries, handleWebhookGet, handleWebhookHealth, handleWebhookList, handleWebhookTest, handleWebhookUpdate, handleWorktreeActivate, handleWorktreeAdvancePhase, handleWorktreeBulkCreate, handleWorktreeComplete, handleWorktreeCreate, handleWorktreeList, handleWorktreeListAll, handleWorktreeListCampaigns, handleWorktreeMerge, handleWorktreePatchState, handleWorktreeSetPhase, handleWorktreeUpdate, handleWorktreeUpdateTargets, isPermitWebhookAuthorized };
28631
28802
  //# sourceMappingURL=gateway.js.map
28632
28803
  //# sourceMappingURL=gateway.js.map