siteplane 0.1.40 → 0.1.42

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/next.js CHANGED
@@ -1216,6 +1216,8 @@ var CONTINUE_SITE_SETUP_LOCATOR_HINT_MAX_BYTES = 512;
1216
1216
  var CONTINUE_SITE_SETUP_REQUESTED_LABEL_MAX_BYTES = 120;
1217
1217
  var CONTINUE_SITE_SETUP_REQUESTED_SECTION_MAX_BYTES = 120;
1218
1218
  var CONTINUE_SITE_SETUP_REQUESTED_SUBSECTION_MAX_BYTES = 120;
1219
+ var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH = 2e3;
1220
+ var SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES = 8e3;
1219
1221
  var CONTINUE_SITE_SETUP_ITEMS_MAX_BYTES = 32 * 1024;
1220
1222
  var CONTINUE_SITE_SETUP_HTTP_BODY_MAX_BYTES = 64 * 1024;
1221
1223
  var siteSetupRunStatusSchema = z14.enum(SITE_SETUP_RUN_STATUSES);
@@ -1305,6 +1307,7 @@ var editorDefinitionV1Schema = z14.object({
1305
1307
  }
1306
1308
  });
1307
1309
  var forbiddenControlOrBidi = /[\u0000-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
1310
+ var forbiddenOwnerNoteControlOrBidi = /[\u0000-\u0008\u000b\u000c\u000e-\u001f\u007f-\u009f\u202a-\u202e\u2066-\u2069]/u;
1308
1311
  var unsafeLocator = /<\/?[a-z][^>]*>|\b(?:javascript|data:text\/html)\s*:|\bon[a-z]+\s*=/iu;
1309
1312
  var renderedPathSchema = z14.string().trim().transform((value) => value !== "/" ? value.replace(/\/+$/u, "") : value).superRefine((value, context) => {
1310
1313
  if (!value.startsWith("/") || value === "$global" || value.includes("?") || value.includes("#")) {
@@ -1357,6 +1360,175 @@ var setupCorrectionItemsSchema = z14.array(setupCorrectionItemSchema).max(CONTIN
1357
1360
  });
1358
1361
  }
1359
1362
  });
1363
+ var siteSetupOwnerEditabilityNoteSchema = z14.string().max(SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_LENGTH).superRefine((value, context) => {
1364
+ if (utf8Bytes(value) > SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES) {
1365
+ context.addIssue({
1366
+ code: "custom",
1367
+ message: `ownerEditabilityNote exceeds ${SITE_SETUP_OWNER_EDITABILITY_NOTE_MAX_BYTES} UTF-8 bytes.`
1368
+ });
1369
+ }
1370
+ if (forbiddenOwnerNoteControlOrBidi.test(value)) {
1371
+ context.addIssue({
1372
+ code: "custom",
1373
+ message: "ownerEditabilityNote contains a forbidden control or bidi character."
1374
+ });
1375
+ }
1376
+ });
1377
+ var SITE_SETUP_MODULE_SCOPES = {
1378
+ editing: ["setup:read", "setup:write"],
1379
+ analytics: [
1380
+ "analytics:setup",
1381
+ "analytics:sync",
1382
+ "analytics:test",
1383
+ "analytics:readiness",
1384
+ "analytics:agent_instructions",
1385
+ "analytics:public_key_read"
1386
+ ]
1387
+ };
1388
+ var siteSetupModulesSchema = z14.array(z14.enum(["editing", "analytics"])).min(1).max(2).refine((modules) => modules[0] === "editing" && (modules.length === 1 || modules[1] === "analytics"), "Choose Editing with optional Analytics.");
1389
+ function siteSetupScopes(modules) {
1390
+ return modules.flatMap((module) => [...SITE_SETUP_MODULE_SCOPES[module]]);
1391
+ }
1392
+ function hasExactSiteSetupScopes(scopes, modules) {
1393
+ const matches = (expected) => scopes.length === expected.length && expected.every((scope) => scopes.includes(scope));
1394
+ return modules ? matches(siteSetupScopes(modules)) : matches(siteSetupScopes(["editing"])) || matches(siteSetupScopes(["editing", "analytics"]));
1395
+ }
1396
+ var siteSetupActivityInputSchema = z14.object({
1397
+ phase: z14.enum([
1398
+ "inspecting",
1399
+ "integrating",
1400
+ "deploying",
1401
+ "verifying",
1402
+ "repairing"
1403
+ ]),
1404
+ textId: z14.enum([
1405
+ "inspecting",
1406
+ "integrating",
1407
+ "deploying",
1408
+ "verifying",
1409
+ "repairing"
1410
+ ])
1411
+ }).strict().refine((value) => value.phase === value.textId, "Activity text must describe its phase.");
1412
+ var nextActionFields = {
1413
+ actor: z14.enum(["agent", "user", "siteplane"]),
1414
+ boundary: z14.enum([
1415
+ "source",
1416
+ "environment",
1417
+ "deployment",
1418
+ "verification",
1419
+ "authorization",
1420
+ "review"
1421
+ ]),
1422
+ precondition: z14.string().min(1).max(1e3),
1423
+ instruction: z14.string().min(1).max(2e3),
1424
+ expectedEvidence: z14.string().min(1).max(1e3)
1425
+ };
1426
+ var siteSetupNextActionSchema = z14.discriminatedUnion("kind", [
1427
+ z14.object({
1428
+ ...nextActionFields,
1429
+ kind: z14.literal("run_command"),
1430
+ command: z14.string().min(1).max(500)
1431
+ }).strict(),
1432
+ z14.object({ ...nextActionFields, kind: z14.literal("agent_edit") }).strict(),
1433
+ z14.object({ ...nextActionFields, kind: z14.literal("needs_user_action") }).strict(),
1434
+ z14.object({ ...nextActionFields, kind: z14.literal("wait") }).strict(),
1435
+ z14.object({ ...nextActionFields, kind: z14.literal("done") }).strict()
1436
+ ]);
1437
+ var siteSetupTaskRunSchema = z14.object({
1438
+ runId: z14.string().uuid(),
1439
+ mode: siteSetupRunModeSchema,
1440
+ status: siteSetupRunStatusSchema,
1441
+ fieldContractHash: z14.string().nullable(),
1442
+ deploymentOrigin: z14.string().url().nullable(),
1443
+ deploymentRevision: z14.string().nullable(),
1444
+ publicRuntimeKeyId: z14.string().uuid().nullable(),
1445
+ reviewVersion: z14.string().nullable()
1446
+ }).strict();
1447
+ var siteSetupTaskProgressSchema = z14.object({
1448
+ progressStage: z14.enum([
1449
+ "waiting_for_connection",
1450
+ "agent_connected",
1451
+ "project_context_loaded",
1452
+ "fields_prepared",
1453
+ "deployment_verification",
1454
+ "ready_for_review",
1455
+ "action_required",
1456
+ "completed"
1457
+ ]),
1458
+ lastVerifiedAt: z14.string().datetime().nullable(),
1459
+ lastActivityAt: z14.string().datetime(),
1460
+ activitySource: z14.enum(["user", "server", "agent"]),
1461
+ activityPhase: siteSetupActivityInputSchema.shape.phase.nullable(),
1462
+ activityTextId: siteSetupActivityInputSchema.shape.textId.nullable()
1463
+ }).strict();
1464
+ var siteSetupTaskSchema = z14.object({
1465
+ contractVersion: z14.literal("siteplane.setup-task.v2"),
1466
+ workflow: z14.enum(["initial_setup", "structure_update"]),
1467
+ goal: z14.string().min(1),
1468
+ modules: siteSetupModulesSchema,
1469
+ authorizationVersion: z14.number().int().positive(),
1470
+ authorizedScopes: z14.array(z14.string()).min(2),
1471
+ site: z14.object({
1472
+ siteId: z14.string().uuid(),
1473
+ portalPath: z14.string(),
1474
+ adminOrigin: z14.string().url()
1475
+ }).strict().nullable(),
1476
+ run: siteSetupTaskRunSchema.nullable(),
1477
+ progress: siteSetupTaskProgressSchema.nullable(),
1478
+ assignment: z14.literal("owned"),
1479
+ deadline: z14.string().datetime().nullable(),
1480
+ userInstructions: z14.object({
1481
+ text: siteSetupOwnerEditabilityNoteSchema,
1482
+ source: z14.literal("user"),
1483
+ trust: z14.literal("untrusted")
1484
+ }).strict(),
1485
+ corrections: setupCorrectionItemsSchema,
1486
+ environmentBindings: z14.array(z14.object({
1487
+ name: z14.string().regex(/^[A-Z][A-Z0-9_]+$/u),
1488
+ source: z14.string().min(1),
1489
+ sensitivity: z14.enum(["public", "secret"]),
1490
+ usage: z14.enum(["build", "server", "build_and_server"]),
1491
+ evidence: z14.string().min(1)
1492
+ }).strict()),
1493
+ nextAction: siteSetupNextActionSchema,
1494
+ error: z14.object({
1495
+ code: z14.string().regex(/^[a-z0-9_.]+$/u).max(160),
1496
+ boundary: nextActionFields.boundary,
1497
+ responsibleActor: nextActionFields.actor,
1498
+ retryable: z14.boolean(),
1499
+ retryAfter: z14.number().int().nonnegative().nullable(),
1500
+ requestId: z14.string().regex(/^[A-Za-z0-9_-]+$/u).max(128)
1501
+ }).strict().nullable(),
1502
+ packages: z14.object({
1503
+ siteplane: z14.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u),
1504
+ runtimeNext: z14.string().regex(/^\d+\.\d+\.\d+(?:-[0-9A-Za-z.-]+)?$/u)
1505
+ }).strict(),
1506
+ communication: z14.object({
1507
+ beforeSourceChanges: z14.string().min(1),
1508
+ updates: z14.array(z14.string().min(1)).min(1),
1509
+ blocker: z14.string().min(1)
1510
+ }).strict(),
1511
+ discovery: z14.object({
1512
+ inspectPublicRoutes: z14.boolean(),
1513
+ contentKinds: z14.array(z14.enum(["text", "longText", "link", "image"])).min(1),
1514
+ rules: z14.array(z14.string().min(1)).min(1)
1515
+ }).strict(),
1516
+ steps: z14.array(z14.object({
1517
+ id: z14.enum([
1518
+ "inspect_repository",
1519
+ "install_packages",
1520
+ "instrument_fields",
1521
+ "apply_contract",
1522
+ "deploy_production",
1523
+ "verify_deployment"
1524
+ ]),
1525
+ instruction: z14.string().min(1)
1526
+ }).strict()).length(6),
1527
+ completion: z14.object({
1528
+ verifiedStatus: z14.literal("ready_for_review"),
1529
+ instruction: z14.string().min(1)
1530
+ }).strict()
1531
+ }).strict().refine((task) => hasExactSiteSetupScopes(task.authorizedScopes, task.modules), "Task scopes must exactly match its modules.");
1360
1532
  var canonicalHashSchema = z14.string().regex(/^sha256:[0-9a-f]{64}$/iu);
1361
1533
  var deploymentRevisionSchema = normalizedSafeTextSchema(256, "deploymentRevision");
1362
1534
  var continueSiteSetupInputSchema = z14.object({
@@ -1364,7 +1536,15 @@ var continueSiteSetupInputSchema = z14.object({
1364
1536
  runId: z14.string().uuid(),
1365
1537
  expectedFieldContractHash: canonicalHashSchema,
1366
1538
  expectedDeploymentRevision: deploymentRevisionSchema,
1367
- correctionItems: setupCorrectionItemsSchema
1539
+ correctionItems: setupCorrectionItemsSchema,
1540
+ ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema.optional()
1541
+ }).strict();
1542
+ var saveSiteSetupOwnerNoteInputSchema = z14.object({
1543
+ siteId: z14.string().uuid(),
1544
+ runId: z14.string().uuid(),
1545
+ expectedFieldContractHash: canonicalHashSchema,
1546
+ expectedDeploymentRevision: deploymentRevisionSchema,
1547
+ ownerEditabilityNote: siteSetupOwnerEditabilityNoteSchema
1368
1548
  }).strict();
1369
1549
  var siteSetupContextInputSchema = z14.object({}).strict();
1370
1550
  var siteSetupApplyInputSchema = z14.object({
@@ -1529,6 +1709,7 @@ var FIELD_BRIDGE_MESSAGE_TYPES = [
1529
1709
  "siteplane:field-bridge:preview-ack",
1530
1710
  "siteplane:field-bridge:set-visual-control-state",
1531
1711
  "siteplane:field-bridge:missing-content",
1712
+ "siteplane:field-bridge:preview-scrolled",
1532
1713
  "siteplane:field-bridge:error"
1533
1714
  ];
1534
1715
  var canonicalFieldContractHashSchema = z15.string().regex(/^sha256:[0-9a-f]{64}$/u);
@@ -1659,6 +1840,10 @@ var fieldBridgeMissingContentMessageSchema = fieldBridgeBaseSchema.extend({
1659
1840
  suggestedSection: bridgeSectionSchema.optional()
1660
1841
  }).strict()
1661
1842
  });
1843
+ var fieldBridgePreviewScrolledMessageSchema = fieldBridgeBaseSchema.extend({
1844
+ type: z15.literal("siteplane:field-bridge:preview-scrolled"),
1845
+ payload: z15.object({ renderedPath: realRenderedPathSchema }).strict()
1846
+ });
1662
1847
  var fieldBridgeErrorMessageSchema = fieldBridgeBaseSchema.extend({
1663
1848
  type: z15.literal("siteplane:field-bridge:error"),
1664
1849
  payload: z15.object({
@@ -1678,6 +1863,7 @@ var fieldBridgeMessageSchema = z15.discriminatedUnion("type", [
1678
1863
  fieldBridgePreviewAckMessageSchema,
1679
1864
  fieldBridgeSetVisualControlStateMessageSchema,
1680
1865
  fieldBridgeMissingContentMessageSchema,
1866
+ fieldBridgePreviewScrolledMessageSchema,
1681
1867
  fieldBridgeErrorMessageSchema
1682
1868
  ]);
1683
1869
 
@@ -1897,40 +2083,35 @@ alwaysApply: true
1897
2083
 
1898
2084
  ${bookingRulesTemplate}`;
1899
2085
 
1900
- // ../cli/dist/commands/connect.js
1901
- import { spawn } from "child_process";
1902
- import { randomBytes } from "crypto";
1903
- import { z as z27 } from "zod";
1904
-
1905
- // ../cli/dist/config/credentials.js
1906
- import { execFile } from "child_process";
2086
+ // ../cli/dist/config/project-config.js
2087
+ import { access, chmod, open, readFile as readFile5, rename, rm } from "fs/promises";
1907
2088
  import { randomUUID as randomUUID2 } from "crypto";
1908
- import { chmod, mkdir as mkdir5, open, readFile as readFile5, rename, rm } from "fs/promises";
1909
- import { dirname as dirname5, join as join3, relative } from "path";
1910
- import { promisify } from "util";
2089
+ import { join as join3 } from "path";
1911
2090
  import { z as z24 } from "zod";
1912
- var siteplaneCredentialsSchema = z24.object({
1913
- accessToken: z24.string().trim().min(1),
1914
- siteRevalidationSecret: z24.string().trim().min(1)
2091
+ var siteplaneProjectConfigSchema = z24.object({
2092
+ version: z24.literal(1),
2093
+ apiBaseUrl: z24.string().url(),
2094
+ siteId: z24.string().uuid(),
2095
+ publicSiteKeyId: z24.string().uuid(),
2096
+ publicSiteKey: z24.string().trim().min(1),
2097
+ fieldContractHash: z24.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
1915
2098
  }).strict();
1916
- var execFileAsync = promisify(execFile);
2099
+ async function readProjectConfig(projectDir) {
2100
+ return siteplaneProjectConfigSchema.parse(JSON.parse(await readFile5(join3(projectDir, "siteplane.config.json"), "utf8")));
2101
+ }
1917
2102
 
1918
- // ../cli/dist/config/project-config.js
1919
- import { access, chmod as chmod2, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
2103
+ // ../cli/dist/config/credentials.js
2104
+ import { execFile } from "child_process";
1920
2105
  import { randomUUID as randomUUID3 } from "crypto";
1921
- import { join as join4 } from "path";
2106
+ import { chmod as chmod2, mkdir as mkdir5, open as open2, readFile as readFile6, rename as rename2, rm as rm2 } from "fs/promises";
2107
+ import { dirname as dirname5, join as join4, relative } from "path";
2108
+ import { promisify } from "util";
1922
2109
  import { z as z25 } from "zod";
1923
- var siteplaneProjectConfigSchema = z25.object({
1924
- version: z25.literal(1),
1925
- apiBaseUrl: z25.string().url(),
1926
- siteId: z25.string().uuid(),
1927
- publicSiteKeyId: z25.string().uuid(),
1928
- publicSiteKey: z25.string().trim().min(1),
1929
- fieldContractHash: z25.string().regex(/^sha256:[0-9a-f]{64}$/iu).optional()
2110
+ var siteplaneCredentialsSchema = z25.object({
2111
+ accessToken: z25.string().trim().min(1),
2112
+ siteRevalidationSecret: z25.string().trim().min(1)
1930
2113
  }).strict();
1931
- async function readProjectConfig(projectDir) {
1932
- return siteplaneProjectConfigSchema.parse(JSON.parse(await readFile6(join4(projectDir, "siteplane.config.json"), "utf8")));
1933
- }
2114
+ var execFileAsync = promisify(execFile);
1934
2115
 
1935
2116
  // ../cli/dist/commands/init.js
1936
2117
  import { join as join5 } from "path";
@@ -1958,24 +2139,6 @@ var bootstrapResponseSchema = z26.object({
1958
2139
  ])
1959
2140
  }).strict();
1960
2141
 
1961
- // ../cli/dist/commands/connect.js
1962
- var claimResponseSchema = z27.object({
1963
- ok: z27.literal(true),
1964
- data: z27.object({
1965
- pairingId: z27.string().uuid(),
1966
- status: z27.literal("approval_required"),
1967
- approvalUrl: z27.string().url()
1968
- }).passthrough()
1969
- }).strict();
1970
- var waitingResponseSchema = z27.object({
1971
- ok: z27.literal(true),
1972
- data: z27.object({ status: z27.literal("approval_required") }).strict()
1973
- }).strict();
1974
- var bootstrapResponseSchema2 = z27.object({
1975
- ok: z27.literal(true),
1976
- data: siteSetupBootstrapDataSchema
1977
- }).strict();
1978
-
1979
2142
  // ../cli/dist/commands/scan.js
1980
2143
  import { readdir } from "fs/promises";
1981
2144
  import { extname, join as join6 } from "path";
@@ -2021,7 +2184,7 @@ async function collectSourceFiles(directory) {
2021
2184
  import { execFile as execFile2 } from "child_process";
2022
2185
  import { readFile as readFile7 } from "fs/promises";
2023
2186
  import { promisify as promisify2 } from "util";
2024
- import { z as z28 } from "zod";
2187
+ import { z as z27 } from "zod";
2025
2188
 
2026
2189
  // ../cli/dist/scan/next-source-scan.js
2027
2190
  import ts2 from "typescript";
@@ -2688,52 +2851,30 @@ function isPositionalFieldReference(value) {
2688
2851
 
2689
2852
  // ../cli/dist/commands/site-setup.js
2690
2853
  var execFileAsync2 = promisify2(execFile2);
2691
- var safeErrorSchema = z28.object({
2692
- code: z28.string().trim().min(1),
2693
- message: z28.string().trim().min(1)
2854
+ var safeErrorSchema = z27.object({
2855
+ code: z27.string().trim().min(1),
2856
+ message: z27.string().trim().min(1)
2694
2857
  }).passthrough();
2695
- var errorResponseSchema2 = z28.object({ ok: z28.literal(false), error: safeErrorSchema }).passthrough();
2696
- var contextDataSchema = z28.object({
2697
- site: z28.object({ siteId: z28.string().uuid(), portalPath: z28.string() }),
2698
- run: z28.object({
2699
- runId: z28.string().uuid(),
2700
- mode: z28.enum(["initial", "update"]),
2701
- status: z28.enum([
2702
- "waiting_for_agent",
2703
- "working",
2704
- "action_required",
2705
- "ready_for_review"
2706
- ]),
2707
- fieldContractHash: z28.string().nullable(),
2708
- deploymentOrigin: z28.string().nullable(),
2709
- deploymentRevision: z28.string().nullable(),
2710
- errorCode: z28.string().nullable(),
2711
- errorMessage: z28.string().nullable()
2712
- }),
2713
- structureHandoff: z28.object({
2714
- pendingFields: z28.array(setupCorrectionItemSchema).min(1).max(50)
2715
- }).strict().nullable(),
2716
- allowedTasks: z28.array(z28.string()),
2717
- requiredEnvironmentNames: z28.array(z28.string())
2718
- }).strict();
2719
- var contextResponseSchema = z28.object({ ok: z28.literal(true), data: contextDataSchema }).strict();
2720
- var applyDataSchema = z28.object({
2721
- status: z28.enum(["applied", "ready_for_review"]),
2722
- runId: z28.string().uuid().optional(),
2723
- contractVersionId: z28.string().uuid().optional(),
2724
- fieldContractHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/u),
2725
- editorDefinitionHash: z28.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
2726
- fieldCount: z28.number().int().nonnegative().optional(),
2727
- routeCount: z28.number().int().nonnegative().optional()
2858
+ var errorResponseSchema2 = z27.object({ ok: z27.literal(false), error: safeErrorSchema }).passthrough();
2859
+ var contextDataSchema = z27.object({ task: siteSetupTaskSchema }).strict();
2860
+ var contextResponseSchema = z27.object({ ok: z27.literal(true), data: contextDataSchema }).strict();
2861
+ var applyDataSchema = z27.object({
2862
+ status: z27.enum(["applied", "ready_for_review"]),
2863
+ runId: z27.string().uuid().optional(),
2864
+ contractVersionId: z27.string().uuid().optional(),
2865
+ fieldContractHash: z27.string().regex(/^sha256:[0-9a-f]{64}$/u),
2866
+ editorDefinitionHash: z27.string().regex(/^sha256:[0-9a-f]{64}$/u).optional(),
2867
+ fieldCount: z27.number().int().nonnegative().optional(),
2868
+ routeCount: z27.number().int().nonnegative().optional()
2728
2869
  }).strict();
2729
- var applyResponseSchema = z28.object({ ok: z28.literal(true), data: applyDataSchema }).strict();
2730
- var verifyDataSchema = z28.object({
2731
- status: z28.literal("ready_for_review"),
2732
- runId: z28.string().uuid().optional(),
2733
- deploymentOrigin: z28.string().url().optional(),
2734
- deploymentRevision: z28.string().optional()
2870
+ var applyResponseSchema = z27.object({ ok: z27.literal(true), data: applyDataSchema }).strict();
2871
+ var verifyDataSchema = z27.object({
2872
+ status: z27.literal("ready_for_review"),
2873
+ runId: z27.string().uuid().optional(),
2874
+ deploymentOrigin: z27.string().url().optional(),
2875
+ deploymentRevision: z27.string().optional()
2735
2876
  }).strict();
2736
- var verifyResponseSchema = z28.object({ ok: z28.literal(true), data: verifyDataSchema }).strict();
2877
+ var verifyResponseSchema = z27.object({ ok: z27.literal(true), data: verifyDataSchema }).strict();
2737
2878
 
2738
2879
  // src/next.ts
2739
2880
  var SiteplaneNextContractError = class extends Error {
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "siteplane",
3
3
  "private": false,
4
- "version": "0.1.40",
4
+ "version": "0.1.42",
5
5
  "type": "module",
6
6
  "license": "SEE LICENSE IN LICENSE",
7
7
  "publishConfig": {