siteplane 0.1.36 → 0.1.37

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/index.js CHANGED
@@ -4,7 +4,7 @@ import { dirname } from "path";
4
4
 
5
5
  // ../shared/dist/actors.js
6
6
  import { z } from "zod";
7
- var ACTOR_TYPES = ["developer", "client", "agent", "system"];
7
+ var ACTOR_TYPES = ["workspace_member", "site_member", "agent", "system"];
8
8
  var actorTypeSchema = z.enum(ACTOR_TYPES);
9
9
 
10
10
  // ../shared/dist/analytics-defaults.js
@@ -587,7 +587,7 @@ var bookingAvailabilityIntervalsSchema = z8.array(z8.object({
587
587
  });
588
588
  var bookingPublicConfigSchema = z8.object({
589
589
  site: z8.object({
590
- name: z8.string().trim().min(1),
590
+ displayName: z8.string().trim().min(1),
591
591
  timezone: z8.string().trim().min(1),
592
592
  locale: z8.string().trim().min(2),
593
593
  bookingPageSlug: z8.string().regex(/^[a-z0-9]+(?:-[a-z0-9]+)*$/).min(2).max(64),
@@ -1011,6 +1011,9 @@ var CONTINUE_SITE_SETUP_MAX_ITEMS = 50;
1011
1011
  var CONTINUE_SITE_SETUP_RENDERED_PATH_MAX_BYTES = 512;
1012
1012
  var CONTINUE_SITE_SETUP_VISIBLE_VALUE_MAX_BYTES = 256;
1013
1013
  var CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES = 512;
1014
+ var CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES = 120;
1015
+ var CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES = 120;
1016
+ var CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES = 120;
1014
1017
  var CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES = 32 * 1024;
1015
1018
  var CONTINUE_SITE_SETUP_HTTP_BODY_MAX_BYTES = 64 * 1024;
1016
1019
  var siteSetupRunStatusSchema = z14.enum(SITE_SETUP_RUN_STATUSES);
@@ -1019,6 +1022,7 @@ var siteSetupErrorCodeSchema = z14.enum(SITE_SETUP_ERROR_CODES);
1019
1022
  var editorFieldSchema = z14.object({
1020
1023
  fieldId: fieldIdSchema,
1021
1024
  label: z14.string().trim().min(1),
1025
+ subsection: z14.string().trim().min(1).optional(),
1022
1026
  description: z14.string().trim().min(1).optional(),
1023
1027
  required: z14.boolean().optional(),
1024
1028
  maxLength: z14.number().int().positive().optional()
@@ -1026,7 +1030,24 @@ var editorFieldSchema = z14.object({
1026
1030
  var editorSectionSchema = z14.object({
1027
1031
  label: z14.string().trim().min(1),
1028
1032
  fields: z14.array(editorFieldSchema).min(1)
1029
- }).strict();
1033
+ }).strict().superRefine((section, context) => {
1034
+ const closedSubsections = /* @__PURE__ */ new Set();
1035
+ let currentSubsection;
1036
+ for (const [index, field] of section.fields.entries()) {
1037
+ if (field.subsection === currentSubsection)
1038
+ continue;
1039
+ if (currentSubsection)
1040
+ closedSubsections.add(currentSubsection);
1041
+ currentSubsection = field.subsection;
1042
+ if (currentSubsection && closedSubsections.has(currentSubsection)) {
1043
+ context.addIssue({
1044
+ code: "custom",
1045
+ message: `Subgroup fields must stay contiguous: ${currentSubsection}`,
1046
+ path: ["fields", index, "subsection"]
1047
+ });
1048
+ }
1049
+ }
1050
+ });
1030
1051
  var editorRouteSchema = z14.object({
1031
1052
  routeKey: siteFieldRouteKeySchema,
1032
1053
  label: z14.string().trim().min(1),
@@ -1106,13 +1127,34 @@ function normalizedSafeTextSchema(maxBytes, label) {
1106
1127
  var correctionItemBase = {
1107
1128
  renderedPath: renderedPathSchema,
1108
1129
  visibleValue: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_VISIBLE_VALUE_MAX_BYTES, "visibleValue"),
1109
- locatorHint: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES, "locatorHint")
1130
+ locatorHint: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES, "locatorHint"),
1131
+ requestedLabel: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES, "requestedLabel").optional(),
1132
+ requestedSection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES, "requestedSection").optional(),
1133
+ requestedSubsection: normalizedSafeTextSchema(CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES, "requestedSubsection").optional(),
1134
+ requestedSortOrder: z14.number().int().nonnegative().optional()
1110
1135
  };
1111
1136
  var setupCorrectionItemSchema = z14.discriminatedUnion("kind", [
1112
1137
  z14.object({ kind: z14.literal("text"), ...correctionItemBase }).strict(),
1113
1138
  z14.object({ kind: z14.literal("link"), ...correctionItemBase }).strict(),
1114
1139
  z14.object({ kind: z14.literal("image"), ...correctionItemBase }).strict()
1115
- ]);
1140
+ ]).superRefine((item, context) => {
1141
+ if (item.requestedSubsection && !item.requestedSection) {
1142
+ context.addIssue({
1143
+ code: "custom",
1144
+ message: "requestedSubsection requires requestedSection.",
1145
+ path: ["requestedSubsection"]
1146
+ });
1147
+ }
1148
+ });
1149
+ var setupCorrectionItemsSchema = z14.array(setupCorrectionItemSchema).max(CONTINUE_SITE_SETUP_MAX_ITEMS).superRefine((items, context) => {
1150
+ const bytes = utf8Bytes(stableJsonStringify(items));
1151
+ if (bytes > CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES) {
1152
+ context.addIssue({
1153
+ code: "custom",
1154
+ message: "Correction items exceed the 32 KiB canonical payload limit."
1155
+ });
1156
+ }
1157
+ });
1116
1158
  var canonicalHashSchema = z14.string().regex(/^sha256:[0-9a-f]{64}$/iu);
1117
1159
  var deploymentRevisionSchema = normalizedSafeTextSchema(256, "deploymentRevision");
1118
1160
  var continueSiteSetupInputSchema = z14.object({
@@ -1120,17 +1162,8 @@ var continueSiteSetupInputSchema = z14.object({
1120
1162
  runId: z14.string().uuid(),
1121
1163
  expectedFieldContractHash: canonicalHashSchema,
1122
1164
  expectedDeploymentRevision: deploymentRevisionSchema,
1123
- correctionItems: z14.array(setupCorrectionItemSchema).max(CONTINUE_SITE_SETUP_MAX_ITEMS)
1124
- }).strict().superRefine((input, context) => {
1125
- const bytes = utf8Bytes(stableJsonStringify(input.correctionItems));
1126
- if (bytes > CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES) {
1127
- context.addIssue({
1128
- code: "custom",
1129
- message: "Correction items exceed the 32 KiB canonical payload limit.",
1130
- path: ["correctionItems"]
1131
- });
1132
- }
1133
- });
1165
+ correctionItems: setupCorrectionItemsSchema
1166
+ }).strict();
1134
1167
  var siteSetupContextInputSchema = z14.object({}).strict();
1135
1168
  var siteSetupApplyInputSchema = z14.object({
1136
1169
  fieldContract: siteFieldContractV1Schema,
@@ -1224,25 +1257,8 @@ var completeSiteSetupInputSchema = z14.object({
1224
1257
  runId: z14.string().uuid(),
1225
1258
  expectedFieldContractHash: canonicalHashSchema,
1226
1259
  expectedDeploymentRevision: deploymentRevisionSchema,
1227
- accessMode: z14.enum(["fallback", "custom_domain"]),
1228
- siteDomainId: z14.string().uuid().optional(),
1229
- defaultCanPublish: z14.boolean()
1230
- }).strict().superRefine((input, context) => {
1231
- if (input.accessMode === "fallback" && input.siteDomainId) {
1232
- context.addIssue({
1233
- code: "custom",
1234
- message: "Fallback access cannot use a custom domain.",
1235
- path: ["siteDomainId"]
1236
- });
1237
- }
1238
- if (input.accessMode === "custom_domain" && !input.siteDomainId) {
1239
- context.addIssue({
1240
- code: "custom",
1241
- message: "Custom-domain access requires a site domain.",
1242
- path: ["siteDomainId"]
1243
- });
1244
- }
1245
- });
1260
+ expectedReadyFingerprint: canonicalHashSchema
1261
+ }).strict();
1246
1262
  var refreshSiteSetupDeploymentInputSchema = z14.object({
1247
1263
  siteId: z14.string().uuid(),
1248
1264
  deploymentUrl: z14.string().url().refine((value) => value.startsWith("https://")),
@@ -1267,7 +1283,7 @@ function utf8Bytes(value) {
1267
1283
  }
1268
1284
 
1269
1285
  // ../shared/dist/bridge-protocol.js
1270
- var BRIDGE_PROTOCOL_VERSION = 1;
1286
+ var BRIDGE_PROTOCOL_VERSION = 2;
1271
1287
  var bridgeRectSchema = z15.object({
1272
1288
  x: z15.number(),
1273
1289
  y: z15.number(),
@@ -1294,6 +1310,12 @@ var bridgePreviewValueSchema = z15.discriminatedUnion("fieldType", [
1294
1310
  previewLinkValueSchema,
1295
1311
  previewImageValueSchema
1296
1312
  ]);
1313
+ var fieldSelectionModeSchema = z15.enum(["replace", "range", "toggle"]);
1314
+ var fieldBridgeMissingContentActionSchema = z15.enum([
1315
+ "add",
1316
+ "select",
1317
+ "remove"
1318
+ ]);
1297
1319
  var FIELD_BRIDGE_MESSAGE_TYPES = [
1298
1320
  "siteplane:field-bridge:init",
1299
1321
  "siteplane:field-bridge:ready",
@@ -1303,11 +1325,12 @@ var FIELD_BRIDGE_MESSAGE_TYPES = [
1303
1325
  "siteplane:field-bridge:apply-preview-values",
1304
1326
  "siteplane:field-bridge:test-preview-values",
1305
1327
  "siteplane:field-bridge:preview-ack",
1306
- "siteplane:field-bridge:set-editability-review",
1328
+ "siteplane:field-bridge:set-visual-control-state",
1307
1329
  "siteplane:field-bridge:missing-content",
1308
1330
  "siteplane:field-bridge:error"
1309
1331
  ];
1310
1332
  var canonicalFieldContractHashSchema = z15.string().regex(/^sha256:[0-9a-f]{64}$/u);
1333
+ var bridgeSectionSchema = z15.string().trim().min(1).max(256);
1311
1334
  var realRenderedPathSchema = z15.string().trim().refine((value) => value.startsWith("/") && value !== "$global" && !value.includes("?") && !value.includes("#"), "A field bridge rendered path must be a real canonical path.");
1312
1335
  var fieldBridgeIdentitySchema = z15.object({
1313
1336
  publicRuntimeKeyId: z15.string().uuid(),
@@ -1353,7 +1376,7 @@ var fieldBridgeReadyMessageSchema = fieldBridgeBaseSchema.extend({
1353
1376
  z15.literal("field_selection"),
1354
1377
  z15.literal("preview_values"),
1355
1378
  z15.literal("field_evidence"),
1356
- z15.literal("editability_review")
1379
+ z15.literal("visual_field_control")
1357
1380
  ])
1358
1381
  }).strict()
1359
1382
  });
@@ -1366,14 +1389,33 @@ var fieldBridgeFieldsMessageSchema = fieldBridgeBaseSchema.extend({
1366
1389
  });
1367
1390
  var fieldBridgeSelectFieldMessageSchema = fieldBridgeBaseSchema.extend({
1368
1391
  type: z15.literal("siteplane:field-bridge:select-field"),
1369
- payload: z15.object({ fieldId: fieldIdSchema }).strict()
1392
+ payload: z15.object({
1393
+ fieldId: fieldIdSchema,
1394
+ selectionMode: fieldSelectionModeSchema
1395
+ }).strict()
1370
1396
  });
1371
1397
  var fieldBridgeSetSelectedFieldMessageSchema = fieldBridgeBaseSchema.extend({
1372
1398
  type: z15.literal("siteplane:field-bridge:set-selected-field"),
1373
1399
  payload: z15.object({
1374
- fieldId: fieldIdSchema.nullable(),
1400
+ fieldIds: z15.array(fieldIdSchema).max(200),
1401
+ primaryFieldId: fieldIdSchema.nullable(),
1375
1402
  scrollIntoView: z15.boolean().optional()
1376
- }).strict()
1403
+ }).strict().superRefine((value, context) => {
1404
+ if (value.fieldIds.length > 0 && value.primaryFieldId === null) {
1405
+ context.addIssue({
1406
+ code: "custom",
1407
+ message: "A non-empty selection needs a primary field.",
1408
+ path: ["primaryFieldId"]
1409
+ });
1410
+ }
1411
+ if (value.primaryFieldId !== null && !value.fieldIds.includes(value.primaryFieldId)) {
1412
+ context.addIssue({
1413
+ code: "custom",
1414
+ message: "The primary field must be part of the selection.",
1415
+ path: ["primaryFieldId"]
1416
+ });
1417
+ }
1418
+ })
1377
1419
  });
1378
1420
  var fieldBridgeApplyPreviewValuesMessageSchema = fieldBridgeBaseSchema.extend({
1379
1421
  type: z15.literal("siteplane:field-bridge:apply-preview-values"),
@@ -1392,13 +1434,28 @@ var fieldBridgePreviewAckMessageSchema = fieldBridgeBaseSchema.extend({
1392
1434
  fieldIds: z15.array(fieldIdSchema).max(200)
1393
1435
  }).strict()
1394
1436
  });
1395
- var fieldBridgeSetEditabilityReviewMessageSchema = fieldBridgeBaseSchema.extend({
1396
- type: z15.literal("siteplane:field-bridge:set-editability-review"),
1397
- payload: z15.object({ enabled: z15.boolean() }).strict()
1437
+ var fieldBridgeSetVisualControlStateMessageSchema = fieldBridgeBaseSchema.extend({
1438
+ type: z15.literal("siteplane:field-bridge:set-visual-control-state"),
1439
+ payload: z15.object({
1440
+ enabled: z15.boolean(),
1441
+ fieldProximityEnabled: z15.boolean(),
1442
+ pendingKeys: z15.array(z15.string().trim().min(1).max(2048)).max(50),
1443
+ activeFieldIds: z15.array(fieldIdSchema),
1444
+ fieldSections: z15.record(fieldIdSchema, bridgeSectionSchema),
1445
+ selectedPending: z15.array(z15.object({
1446
+ key: z15.string().trim().min(1).max(2048),
1447
+ locatorHint: z15.string().trim().min(1).max(2048)
1448
+ }).strict()).max(50),
1449
+ scrollPendingIntoView: z15.boolean().optional()
1450
+ }).strict()
1398
1451
  });
1399
1452
  var fieldBridgeMissingContentMessageSchema = fieldBridgeBaseSchema.extend({
1400
1453
  type: z15.literal("siteplane:field-bridge:missing-content"),
1401
- payload: z15.object({ item: setupCorrectionItemSchema }).strict()
1454
+ payload: z15.object({
1455
+ action: fieldBridgeMissingContentActionSchema,
1456
+ item: setupCorrectionItemSchema,
1457
+ suggestedSection: bridgeSectionSchema.optional()
1458
+ }).strict()
1402
1459
  });
1403
1460
  var fieldBridgeErrorMessageSchema = fieldBridgeBaseSchema.extend({
1404
1461
  type: z15.literal("siteplane:field-bridge:error"),
@@ -1417,7 +1474,7 @@ var fieldBridgeMessageSchema = z15.discriminatedUnion("type", [
1417
1474
  fieldBridgeApplyPreviewValuesMessageSchema,
1418
1475
  fieldBridgeTestPreviewValuesMessageSchema,
1419
1476
  fieldBridgePreviewAckMessageSchema,
1420
- fieldBridgeSetEditabilityReviewMessageSchema,
1477
+ fieldBridgeSetVisualControlStateMessageSchema,
1421
1478
  fieldBridgeMissingContentMessageSchema,
1422
1479
  fieldBridgeErrorMessageSchema
1423
1480
  ]);
@@ -1428,8 +1485,8 @@ import { z as z17 } from "zod";
1428
1485
  // ../shared/dist/errors.js
1429
1486
  import { z as z16 } from "zod";
1430
1487
  var UI_ERROR_CATEGORIES = [
1431
- "client",
1432
- "developer",
1488
+ "site_member",
1489
+ "workspace_member",
1433
1490
  "internal"
1434
1491
  ];
1435
1492
  var uiErrorCategorySchema = z16.enum(UI_ERROR_CATEGORIES);
@@ -1454,52 +1511,79 @@ var commandResultSchema = z17.discriminatedUnion("ok", [
1454
1511
  commandErrorSchema
1455
1512
  ]);
1456
1513
 
1457
- // ../shared/dist/fallback-portal.js
1514
+ // ../shared/dist/editor-settings.js
1458
1515
  import { z as z18 } from "zod";
1459
- var FALLBACK_PORTAL_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
1460
- var fallbackPortalSlugSchema = z18.string().regex(FALLBACK_PORTAL_SLUG_PATTERN, "Invalid fallback portal slug");
1516
+ var editorColorSchemeSchema = z18.enum([
1517
+ "paper",
1518
+ "slate",
1519
+ "siteplane",
1520
+ "bloom"
1521
+ ]);
1522
+ var editorColorSchemes = editorColorSchemeSchema.options;
1523
+ var editorColorModeSchema = z18.enum(["light", "dark"]);
1524
+ var editorColorModes = editorColorModeSchema.options;
1461
1525
 
1462
- // ../shared/dist/entitlements.js
1526
+ // ../shared/dist/site-slug.js
1463
1527
  import { z as z19 } from "zod";
1464
- var entitlementSnapshotSchema = z19.object({
1465
- planKey: z19.string().trim().min(1),
1466
- sitesLimit: z19.number().int().positive(),
1467
- clientAccountsPerSiteLimit: z19.number().int().positive(),
1468
- customAdminDomainsEnabled: z19.boolean(),
1469
- agentMcpEnabled: z19.boolean(),
1470
- emailNotificationsEnabled: z19.boolean(),
1471
- analyticsEnabled: z19.boolean(),
1472
- analyticsSitesLimit: z19.number().int().min(0),
1473
- analyticsClientPerformanceEnabled: z19.boolean(),
1474
- analyticsMonthlyReportsEnabled: z19.boolean(),
1475
- analyticsAiSummaryEnabled: z19.boolean(),
1476
- analyticsRawEventRetentionDays: z19.number().int().min(1).max(ANALYTICS_RETENTION_DEFAULTS.maxRawEventRetentionDaysWithoutAdr),
1477
- analyticsMonthlyEventLimit: z19.number().int().min(0),
1478
- bookingEnabled: z19.boolean().default(false),
1479
- bookingSitesLimit: z19.number().int().min(0).default(0),
1480
- bookingClientManagementEnabled: z19.boolean().default(false),
1481
- bookingResourcesPerSiteLimit: z19.number().int().min(0).default(0),
1482
- bookingServicesPerSiteLimit: z19.number().int().min(0).default(0),
1483
- bookingMonthlyBookingsLimit: z19.number().int().min(0).default(0),
1484
- bookingRemindersEnabled: z19.boolean().default(false)
1528
+ var SITE_SLUG_PATTERN = /^[a-z0-9]+(?:-[a-z0-9]+)*$/;
1529
+ var RESERVED_SITE_SLUGS = /* @__PURE__ */ new Set([
1530
+ "account",
1531
+ "admin",
1532
+ "api",
1533
+ "app",
1534
+ "auth",
1535
+ "book",
1536
+ "claim",
1537
+ "dev",
1538
+ "login",
1539
+ "new",
1540
+ "portal",
1541
+ "support",
1542
+ "workspace"
1543
+ ]);
1544
+ var siteSlugSchema = z19.string().regex(SITE_SLUG_PATTERN, "Invalid site slug").refine((value) => !RESERVED_SITE_SLUGS.has(value), "Reserved site slug");
1545
+
1546
+ // ../shared/dist/entitlements.js
1547
+ import { z as z20 } from "zod";
1548
+ var entitlementSnapshotSchema = z20.object({
1549
+ planKey: z20.string().trim().min(1),
1550
+ sitesLimit: z20.number().int().positive(),
1551
+ siteMembersPerSiteLimit: z20.number().int().positive(),
1552
+ customAdminDomainsEnabled: z20.boolean(),
1553
+ agentMcpEnabled: z20.boolean(),
1554
+ emailNotificationsEnabled: z20.boolean(),
1555
+ analyticsEnabled: z20.boolean(),
1556
+ analyticsSitesLimit: z20.number().int().min(0),
1557
+ analyticsPortalPerformanceEnabled: z20.boolean(),
1558
+ analyticsMonthlyReportsEnabled: z20.boolean(),
1559
+ analyticsAiSummaryEnabled: z20.boolean(),
1560
+ analyticsRawEventRetentionDays: z20.number().int().min(1).max(ANALYTICS_RETENTION_DEFAULTS.maxRawEventRetentionDaysWithoutAdr),
1561
+ analyticsMonthlyEventLimit: z20.number().int().min(0),
1562
+ bookingEnabled: z20.boolean().default(false),
1563
+ bookingSitesLimit: z20.number().int().min(0).default(0),
1564
+ bookingPortalManagementEnabled: z20.boolean().default(false),
1565
+ bookingResourcesPerSiteLimit: z20.number().int().min(0).default(0),
1566
+ bookingServicesPerSiteLimit: z20.number().int().min(0).default(0),
1567
+ bookingMonthlyBookingsLimit: z20.number().int().min(0).default(0),
1568
+ bookingRemindersEnabled: z20.boolean().default(false)
1485
1569
  });
1486
1570
  var EARLY_ACCESS_PLAN = {
1487
1571
  planKey: "early_access_2026",
1488
1572
  sitesLimit: 3,
1489
- clientAccountsPerSiteLimit: 5,
1573
+ siteMembersPerSiteLimit: 5,
1490
1574
  customAdminDomainsEnabled: true,
1491
1575
  agentMcpEnabled: true,
1492
1576
  emailNotificationsEnabled: true,
1493
1577
  analyticsEnabled: false,
1494
1578
  analyticsSitesLimit: 0,
1495
- analyticsClientPerformanceEnabled: false,
1579
+ analyticsPortalPerformanceEnabled: false,
1496
1580
  analyticsMonthlyReportsEnabled: false,
1497
1581
  analyticsAiSummaryEnabled: false,
1498
1582
  analyticsRawEventRetentionDays: ANALYTICS_RETENTION_DEFAULTS.enabledRawEventRetentionDays,
1499
1583
  analyticsMonthlyEventLimit: 0,
1500
1584
  bookingEnabled: true,
1501
1585
  bookingSitesLimit: 3,
1502
- bookingClientManagementEnabled: true,
1586
+ bookingPortalManagementEnabled: true,
1503
1587
  bookingResourcesPerSiteLimit: 10,
1504
1588
  bookingServicesPerSiteLimit: 50,
1505
1589
  bookingMonthlyBookingsLimit: 0,
@@ -1507,7 +1591,7 @@ var EARLY_ACCESS_PLAN = {
1507
1591
  };
1508
1592
 
1509
1593
  // ../shared/dist/readiness.js
1510
- import { z as z20 } from "zod";
1594
+ import { z as z21 } from "zod";
1511
1595
  var READINESS_CHECK_KEYS = [
1512
1596
  "agent_instructions_installed",
1513
1597
  "runtime_package_connected",
@@ -1522,19 +1606,19 @@ var READINESS_STATUSES = [
1522
1606
  "failing",
1523
1607
  "warning"
1524
1608
  ];
1525
- var readinessCheckKeySchema = z20.enum(READINESS_CHECK_KEYS);
1526
- var readinessStatusSchema = z20.enum(READINESS_STATUSES);
1609
+ var readinessCheckKeySchema = z21.enum(READINESS_CHECK_KEYS);
1610
+ var readinessStatusSchema = z21.enum(READINESS_STATUSES);
1527
1611
 
1528
1612
  // ../shared/dist/site.js
1529
- import { z as z21 } from "zod";
1613
+ import { z as z22 } from "zod";
1530
1614
  var SITE_STATUSES = [
1531
1615
  "setup",
1532
- "client_ready",
1616
+ "active",
1533
1617
  "disabled",
1534
1618
  "archived"
1535
1619
  ];
1536
- var siteStatusSchema = z21.enum(SITE_STATUSES);
1537
- var websiteUrlSchema = z21.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
1620
+ var siteStatusSchema = z22.enum(SITE_STATUSES);
1621
+ var websiteUrlSchema = z22.string().trim().url().refine((value) => value.startsWith("https://") || value.startsWith("http://"), "Website URL must use http or https");
1538
1622
 
1539
1623
  // ../cli/dist/analytics/static-scan.js
1540
1624
  import ts from "typescript";
@@ -1725,16 +1809,16 @@ ${analyticsRulesTemplate}`;
1725
1809
  import { createHash } from "crypto";
1726
1810
 
1727
1811
  // ../cli/dist/commands/analytics/public-key.js
1728
- import { z as z22 } from "zod";
1729
- var responseSchema = z22.object({
1730
- ok: z22.literal(true),
1731
- data: z22.object({
1732
- rawPublicKey: z22.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/)
1812
+ import { z as z23 } from "zod";
1813
+ var responseSchema = z23.object({
1814
+ ok: z23.literal(true),
1815
+ data: z23.object({
1816
+ rawPublicKey: z23.string().regex(/^pk_siteplane_[A-Za-z0-9_-]{16}_[A-Za-z0-9_-]{43}$/)
1733
1817
  })
1734
1818
  });
1735
- var errorResponseSchema = z22.object({
1736
- error: z22.object({
1737
- code: z22.string().regex(/^[a-z][a-z0-9_.-]+$/u)
1819
+ var errorResponseSchema = z23.object({
1820
+ error: z23.object({
1821
+ code: z23.string().regex(/^[a-z][a-z0-9_.-]+$/u)
1738
1822
  })
1739
1823
  });
1740
1824
 
@@ -1905,39 +1989,22 @@ async function bookingTestCommand(input) {
1905
1989
  });
1906
1990
  }
1907
1991
 
1908
- // ../cli/dist/commands/export.js
1909
- async function exportCommand(input) {
1910
- requireContentExportScope(input.tokenScopes);
1911
- const values = await input.readPublishedValues();
1912
- if (input.format === "prompt") {
1913
- return {
1914
- kind: "prompt",
1915
- output: Object.entries(values).map(([fieldId, value]) => `${fieldId}: ${JSON.stringify(value)}`).join("\n")
1916
- };
1917
- }
1918
- return {
1919
- kind: "json",
1920
- values
1921
- };
1922
- }
1923
- function requireContentExportScope(scopes) {
1924
- if (!scopes?.includes("content:export")) {
1925
- throw new Error("A Project Connection with content:export is required.");
1926
- }
1927
- }
1992
+ // ../cli/dist/commands/connect.js
1993
+ import { randomBytes } from "crypto";
1994
+ import { z as z27 } from "zod";
1928
1995
 
1929
1996
  // ../cli/dist/config/project-config.js
1930
1997
  import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
1931
1998
  import { randomUUID as randomUUID2 } from "crypto";
1932
1999
  import { join as join3 } from "path";
1933
- import { z as z23 } from "zod";
1934
- var siteplaneProjectConfigSchema = z23.object({
1935
- version: z23.literal(1),
1936
- apiBaseUrl: z23.string().url(),
1937
- siteId: z23.string().uuid(),
1938
- publicSiteKeyId: z23.string().uuid(),
1939
- publicSiteKey: z23.string().trim().min(1),
1940
- fieldContractHash: z23.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
2000
+ import { z as z24 } from "zod";
2001
+ var siteplaneProjectConfigSchema = z24.object({
2002
+ version: z24.literal(1),
2003
+ apiBaseUrl: z24.string().url(),
2004
+ siteId: z24.string().uuid(),
2005
+ publicSiteKeyId: z24.string().uuid(),
2006
+ publicSiteKey: z24.string().trim().min(1),
2007
+ fieldContractHash: z24.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
1941
2008
  }).strict();
1942
2009
  async function readProjectPackageJson(projectDir) {
1943
2010
  return JSON.parse(await readFile5(join3(projectDir, "package.json"), "utf8"));
@@ -1997,10 +2064,10 @@ import { randomUUID as randomUUID3 } from "crypto";
1997
2064
  import { chmod as chmod2, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
1998
2065
  import { dirname as dirname5, join as join4, relative } from "path";
1999
2066
  import { promisify } from "util";
2000
- import { z as z24 } from "zod";
2001
- var siteplaneCredentialsSchema = z24.object({
2002
- accessToken: z24.string().trim().min(1),
2003
- siteRevalidationSecret: z24.string().trim().min(1)
2067
+ import { z as z25 } from "zod";
2068
+ var siteplaneCredentialsSchema = z25.object({
2069
+ accessToken: z25.string().trim().min(1),
2070
+ siteRevalidationSecret: z25.string().trim().min(1)
2004
2071
  }).strict();
2005
2072
  async function writeLocalCredentials(projectDir, credentials, options = {}) {
2006
2073
  const path = join4(projectDir, ".siteplane/credentials.json");
@@ -2054,7 +2121,7 @@ async function gitPathMatches(projectDir, path, command) {
2054
2121
 
2055
2122
  // ../cli/dist/commands/init.js
2056
2123
  import { join as join5 } from "path";
2057
- import { z as z25 } from "zod";
2124
+ import { z as z26 } from "zod";
2058
2125
  async function initCommand(input) {
2059
2126
  if (!input.setupToken.trim()) {
2060
2127
  throw new Error("A Siteplane setup token is required.");
@@ -2074,24 +2141,24 @@ async function initCommand(input) {
2074
2141
  ]
2075
2142
  };
2076
2143
  }
2077
- var siteSetupBootstrapDataSchema = z25.object({
2078
- credentialPurpose: z25.literal("site_setup"),
2079
- apiBaseUrl: z25.string().url(),
2080
- siteId: z25.string().uuid(),
2081
- publicSiteKeyId: z25.string().uuid(),
2082
- publicSiteKey: z25.string().trim().min(1),
2083
- accessToken: z25.string().trim().min(1),
2084
- siteRevalidationSecret: z25.string().regex(/^[A-Za-z0-9_-]{43}$/u)
2144
+ var siteSetupBootstrapDataSchema = z26.object({
2145
+ credentialPurpose: z26.literal("site_setup"),
2146
+ apiBaseUrl: z26.string().url(),
2147
+ siteId: z26.string().uuid(),
2148
+ publicSiteKeyId: z26.string().uuid(),
2149
+ publicSiteKey: z26.string().trim().min(1),
2150
+ accessToken: z26.string().trim().min(1),
2151
+ siteRevalidationSecret: z26.string().regex(/^[A-Za-z0-9_-]{43}$/u)
2085
2152
  }).strict();
2086
- var featureBootstrapDataSchema = z25.object({
2087
- credentialPurpose: z25.enum(["analytics", "booking"]),
2088
- apiBaseUrl: z25.string().url(),
2089
- siteId: z25.string().uuid(),
2090
- accessToken: z25.string().trim().min(1)
2153
+ var featureBootstrapDataSchema = z26.object({
2154
+ credentialPurpose: z26.enum(["analytics", "booking"]),
2155
+ apiBaseUrl: z26.string().url(),
2156
+ siteId: z26.string().uuid(),
2157
+ accessToken: z26.string().trim().min(1)
2091
2158
  }).strict();
2092
- var bootstrapResponseSchema = z25.object({
2093
- ok: z25.literal(true),
2094
- data: z25.discriminatedUnion("credentialPurpose", [
2159
+ var bootstrapResponseSchema = z26.object({
2160
+ ok: z26.literal(true),
2161
+ data: z26.discriminatedUnion("credentialPurpose", [
2095
2162
  siteSetupBootstrapDataSchema,
2096
2163
  featureBootstrapDataSchema
2097
2164
  ])
@@ -2189,6 +2256,44 @@ function readErrorMessage(payload) {
2189
2256
  return null;
2190
2257
  }
2191
2258
 
2259
+ // ../cli/dist/commands/connect.js
2260
+ var claimResponseSchema = z27.object({
2261
+ ok: z27.literal(true),
2262
+ data: z27.object({
2263
+ pairingId: z27.string().uuid(),
2264
+ status: z27.literal("approval_required")
2265
+ }).passthrough()
2266
+ }).strict();
2267
+ var waitingResponseSchema = z27.object({
2268
+ ok: z27.literal(true),
2269
+ data: z27.object({ status: z27.literal("approval_required") }).strict()
2270
+ }).strict();
2271
+ var bootstrapResponseSchema2 = z27.object({
2272
+ ok: z27.literal(true),
2273
+ data: siteSetupBootstrapDataSchema
2274
+ }).strict();
2275
+
2276
+ // ../cli/dist/commands/export.js
2277
+ async function exportCommand(input) {
2278
+ requireContentExportScope(input.tokenScopes);
2279
+ const values = await input.readPublishedValues();
2280
+ if (input.format === "prompt") {
2281
+ return {
2282
+ kind: "prompt",
2283
+ output: Object.entries(values).map(([fieldId, value]) => `${fieldId}: ${JSON.stringify(value)}`).join("\n")
2284
+ };
2285
+ }
2286
+ return {
2287
+ kind: "json",
2288
+ values
2289
+ };
2290
+ }
2291
+ function requireContentExportScope(scopes) {
2292
+ if (!scopes?.includes("content:export")) {
2293
+ throw new Error("A Project Connection with content:export is required.");
2294
+ }
2295
+ }
2296
+
2192
2297
  // ../cli/dist/commands/scan.js
2193
2298
  import { readdir } from "fs/promises";
2194
2299
  import { extname, join as join6 } from "path";
@@ -2197,7 +2302,7 @@ import { extname, join as join6 } from "path";
2197
2302
  import { execFile as execFile2 } from "child_process";
2198
2303
  import { readFile as readFile7 } from "fs/promises";
2199
2304
  import { promisify as promisify2 } from "util";
2200
- import { z as z26 } from "zod";
2305
+ import { z as z28 } from "zod";
2201
2306
 
2202
2307
  // ../cli/dist/scan/next-source-scan.js
2203
2308
  import ts2 from "typescript";
@@ -2207,49 +2312,52 @@ var editableComponentNames = new Set(["Image", "Text", "LongText", "Link"].map((
2207
2312
 
2208
2313
  // ../cli/dist/commands/site-setup.js
2209
2314
  var execFileAsync2 = promisify2(execFile2);
2210
- var safeErrorSchema = z26.object({
2211
- code: z26.string().trim().min(1),
2212
- message: z26.string().trim().min(1)
2315
+ var safeErrorSchema = z28.object({
2316
+ code: z28.string().trim().min(1),
2317
+ message: z28.string().trim().min(1)
2213
2318
  }).passthrough();
2214
- var errorResponseSchema2 = z26.object({ ok: z26.literal(false), error: safeErrorSchema }).passthrough();
2215
- var contextDataSchema = z26.object({
2216
- site: z26.object({ siteId: z26.string().uuid(), websiteUrl: z26.string().url() }),
2217
- run: z26.object({
2218
- runId: z26.string().uuid(),
2219
- mode: z26.enum(["initial", "update"]),
2220
- status: z26.enum([
2319
+ var errorResponseSchema2 = z28.object({ ok: z28.literal(false), error: safeErrorSchema }).passthrough();
2320
+ var contextDataSchema = z28.object({
2321
+ site: z28.object({ siteId: z28.string().uuid(), websiteUrl: z28.string().url(), portalPath: z28.string() }),
2322
+ run: z28.object({
2323
+ runId: z28.string().uuid(),
2324
+ mode: z28.enum(["initial", "update"]),
2325
+ status: z28.enum([
2221
2326
  "waiting_for_agent",
2222
2327
  "working",
2223
2328
  "action_required",
2224
2329
  "ready_for_review"
2225
2330
  ]),
2226
- fieldContractHash: z26.string().nullable(),
2227
- deploymentOrigin: z26.string().nullable(),
2228
- deploymentRevision: z26.string().nullable(),
2229
- errorCode: z26.string().nullable(),
2230
- errorMessage: z26.string().nullable()
2331
+ fieldContractHash: z28.string().nullable(),
2332
+ deploymentOrigin: z28.string().nullable(),
2333
+ deploymentRevision: z28.string().nullable(),
2334
+ errorCode: z28.string().nullable(),
2335
+ errorMessage: z28.string().nullable()
2231
2336
  }),
2232
- allowedTasks: z26.array(z26.string()),
2233
- requiredEnvironmentNames: z26.array(z26.string())
2337
+ structureHandoff: z28.object({
2338
+ pendingFields: z28.array(setupCorrectionItemSchema).min(1).max(50)
2339
+ }).strict().nullable(),
2340
+ allowedTasks: z28.array(z28.string()),
2341
+ requiredEnvironmentNames: z28.array(z28.string())
2234
2342
  }).strict();
2235
- var contextResponseSchema = z26.object({ ok: z26.literal(true), data: contextDataSchema }).strict();
2236
- var applyDataSchema = z26.object({
2237
- status: z26.enum(["applied", "ready_for_review"]),
2238
- runId: z26.string().uuid().optional(),
2239
- contractVersionId: z26.string().uuid().optional(),
2240
- fieldContractHash: z26.string().regex(/^sha256:[0-9a-f]{64}$/u),
2241
- editorDefinitionHash: z26.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
2242
- fieldCount: z26.number().int().nonnegative().optional(),
2243
- routeCount: z26.number().int().nonnegative().optional()
2343
+ var contextResponseSchema = z28.object({ ok: z28.literal(true), data: contextDataSchema }).strict();
2344
+ var applyDataSchema = z28.object({
2345
+ status: z28.enum(["applied", "ready_for_review"]),
2346
+ runId: z28.string().uuid().optional(),
2347
+ contractVersionId: z28.string().uuid().optional(),
2348
+ fieldContractHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/u),
2349
+ editorDefinitionHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
2350
+ fieldCount: z28.number().int().nonnegative().optional(),
2351
+ routeCount: z28.number().int().nonnegative().optional()
2244
2352
  }).strict();
2245
- var applyResponseSchema = z26.object({ ok: z26.literal(true), data: applyDataSchema }).strict();
2246
- var verifyDataSchema = z26.object({
2247
- status: z26.literal("ready_for_review"),
2248
- runId: z26.string().uuid().optional(),
2249
- deploymentOrigin: z26.string().url().optional(),
2250
- deploymentRevision: z26.string().optional()
2353
+ var applyResponseSchema = z28.object({ ok: z28.literal(true), data: applyDataSchema }).strict();
2354
+ var verifyDataSchema = z28.object({
2355
+ status: z28.literal("ready_for_review"),
2356
+ runId: z28.string().uuid().optional(),
2357
+ deploymentOrigin: z28.string().url().optional(),
2358
+ deploymentRevision: z28.string().optional()
2251
2359
  }).strict();
2252
- var verifyResponseSchema = z26.object({ ok: z26.literal(true), data: verifyDataSchema }).strict();
2360
+ var verifyResponseSchema = z28.object({ ok: z28.literal(true), data: verifyDataSchema }).strict();
2253
2361
  export {
2254
2362
  bookingCheckCommand,
2255
2363
  bookingInitCommand,