siteplane 0.1.54 → 0.1.55
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/README.md +12 -9
- package/dist/bin/siteplane.js +19 -0
- package/dist/next.js +8 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# siteplane
|
|
2
2
|
|
|
3
|
-
**
|
|
3
|
+
**Image-policy preparation:** When the scan includes image fields, `withSiteplane` prepares
|
|
4
4
|
Next Image and existing Next-config CSP headers for Siteplane's image route and your website's
|
|
5
5
|
`/siteplane-assets/` path. Existing image sources stay in place. Local builds require the same public HTTPS
|
|
6
6
|
`SITEPLANE_SITE_ORIGIN` supplied by `setup deploy`. Custom loaders and explicit redirect settings need
|
|
@@ -19,7 +19,7 @@ they choose **Open review** in their own browser. Do not consume the link on the
|
|
|
19
19
|
Issue a fresh link only when needed. The URL fragment is a short-lived credential, so do not
|
|
20
20
|
write it to source, documentation, analytics or shared logs. Guest review can organize and finish
|
|
21
21
|
the setup; activation and account ownership require the later claim step. This entry remains
|
|
22
|
-
controlled
|
|
22
|
+
controlled by the existing beta and launch gates.
|
|
23
23
|
|
|
24
24
|
### Controlled claim confirmation
|
|
25
25
|
|
|
@@ -88,24 +88,27 @@ preserves the Site, Run, runtime key, revalidation generation, selected fields a
|
|
|
88
88
|
Completed setup credentials remain closed. Known package/workspace/provider conflicts are diagnosed before
|
|
89
89
|
writes; support ranges do not trigger automatic framework or package-manager upgrades.
|
|
90
90
|
|
|
91
|
-
##
|
|
91
|
+
## Accountless start
|
|
92
92
|
|
|
93
|
-
|
|
94
|
-
|
|
93
|
+
Use `setup start` for an explicit user request to integrate a website before creating an account.
|
|
94
|
+
Save the user's exact editing instructions in a text file and pass `--instructions-file`; inline
|
|
95
|
+
`--instructions` is not supported. Omit the file only when the user asks the agent to choose.
|
|
95
96
|
|
|
96
97
|
Before starting, add `.siteplane/credentials.json` to the repository’s `.gitignore`. Start rejects tracked or
|
|
97
98
|
unprotected credentials before any provisioning request.
|
|
98
99
|
|
|
99
100
|
```bash
|
|
100
|
-
npx -y siteplane@0.1.
|
|
101
|
-
npx -y siteplane@0.1.
|
|
101
|
+
npx -y siteplane@0.1.55 setup start --modules editing --instructions-file instructions.txt
|
|
102
|
+
npx -y siteplane@0.1.55 setup context
|
|
102
103
|
```
|
|
103
104
|
|
|
104
105
|
Start performs read-only preflight and saves the installation key and original request privately before the
|
|
105
106
|
first provisioning call. Select `editing,analytics` only when explicitly requested. Retry in the same directory
|
|
106
107
|
with the same request after interruption; configuration without credentials produces a diagnosis, never a silent
|
|
107
|
-
replacement project. The returned task carries the provisional assignment and deadline.
|
|
108
|
-
|
|
108
|
+
replacement project. The returned task carries the provisional assignment and deadline. After verification,
|
|
109
|
+
`setup review` opens the saved guest review. The user can create an account or sign in from that review;
|
|
110
|
+
inspect and confirm only their concrete claim request in this repository. Claim preserves the review and
|
|
111
|
+
returns it to the owner's account; it does not activate editing or analytics.
|
|
109
112
|
|
|
110
113
|
## Approved fields
|
|
111
114
|
|
package/dist/bin/siteplane.js
CHANGED
|
@@ -4352,6 +4352,14 @@ function scanNextSourceFilesToSiteFieldContract(files, options) {
|
|
|
4352
4352
|
const fields = [];
|
|
4353
4353
|
for (const field of uniqueFields(scan.fields)) {
|
|
4354
4354
|
const routeKey = field.technicalRouteKey ?? field.routeHint;
|
|
4355
|
+
if (routeKey === "/*") {
|
|
4356
|
+
scan.warnings.push({
|
|
4357
|
+
code: "field_scan.global_route_key_invalid",
|
|
4358
|
+
message: `Field ${field.fieldId} uses /* as its routeKey. Use $global in both the value call and DOM attrs for content shared across routes; /* cannot produce matching editor evidence. This affects the editor integration, not the website build.`,
|
|
4359
|
+
fieldId: field.fieldId,
|
|
4360
|
+
filePath: field.sourceFilePath ?? "unknown"
|
|
4361
|
+
});
|
|
4362
|
+
}
|
|
4355
4363
|
if (!routeKey) {
|
|
4356
4364
|
scan.hardErrors.push({
|
|
4357
4365
|
code: "field_scan.route_key_missing",
|
|
@@ -6592,6 +6600,17 @@ async function runSetupCommand(args, dependencies) {
|
|
|
6592
6600
|
dependencies.env
|
|
6593
6601
|
);
|
|
6594
6602
|
if (area === "start") {
|
|
6603
|
+
const usage = "Usage: siteplane setup start [--modules editing,analytics] [--instructions-file <path>] [--api-base-url <url>]";
|
|
6604
|
+
if (areaArgs.includes("--help") || areaArgs.includes("-h")) {
|
|
6605
|
+
dependencies.stdout(usage);
|
|
6606
|
+
dependencies.stdout("Save the user's exact editing instructions in a text file and pass --instructions-file. Omit it only when the user asks the agent to choose.");
|
|
6607
|
+
return { exitCode: 0 };
|
|
6608
|
+
}
|
|
6609
|
+
const options = /* @__PURE__ */ new Set(["--modules", "--instructions-file", "--api-base-url"]);
|
|
6610
|
+
for (let index = 0; index < areaArgs.length; index += 2) {
|
|
6611
|
+
if (!options.has(areaArgs[index]) || !areaArgs[index + 1] || areaArgs[index + 1].startsWith("--"))
|
|
6612
|
+
throw new Error(`Invalid setup start option. ${usage}. User instructions require --instructions-file.`);
|
|
6613
|
+
}
|
|
6595
6614
|
const instructionsFile = readOption(areaArgs, "--instructions-file");
|
|
6596
6615
|
const modules = readOption(areaArgs, "--modules");
|
|
6597
6616
|
const result2 = await dependencies.commands.setupStartCommand({
|
package/dist/next.js
CHANGED
|
@@ -3086,6 +3086,14 @@ function scanNextSourceFilesToSiteFieldContract(files, options) {
|
|
|
3086
3086
|
const fields = [];
|
|
3087
3087
|
for (const field of uniqueFields(scan.fields)) {
|
|
3088
3088
|
const routeKey = field.technicalRouteKey ?? field.routeHint;
|
|
3089
|
+
if (routeKey === "/*") {
|
|
3090
|
+
scan.warnings.push({
|
|
3091
|
+
code: "field_scan.global_route_key_invalid",
|
|
3092
|
+
message: `Field ${field.fieldId} uses /* as its routeKey. Use $global in both the value call and DOM attrs for content shared across routes; /* cannot produce matching editor evidence. This affects the editor integration, not the website build.`,
|
|
3093
|
+
fieldId: field.fieldId,
|
|
3094
|
+
filePath: field.sourceFilePath ?? "unknown"
|
|
3095
|
+
});
|
|
3096
|
+
}
|
|
3089
3097
|
if (!routeKey) {
|
|
3090
3098
|
scan.hardErrors.push({
|
|
3091
3099
|
code: "field_scan.route_key_missing",
|