deployai 0.1.0-beta.2 → 0.1.0-beta.4
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 +10 -7
- package/dist/index.js +239 -114
- package/package.json +49 -12
package/dist/index.js
CHANGED
|
@@ -117,7 +117,7 @@ var ISSUES = [
|
|
|
117
117
|
code: "adapter_missing_sveltekit",
|
|
118
118
|
severity: "blocker",
|
|
119
119
|
titleEn: "SvelteKit adapter is missing",
|
|
120
|
-
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC
|
|
120
|
+
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC\u05BESvelteKit",
|
|
121
121
|
agentLine: "SvelteKit is used without the Cloudflare adapter{detail} ({loc}).",
|
|
122
122
|
fixForAgent: 'Keep SvelteKit. Install @sveltejs/adapter-cloudflare as a dev dependency, then where the adapter is set (vite.config.ts on SvelteKit 3, svelte.config.js before) import adapter from "@sveltejs/adapter-cloudflare" and set adapter: adapter(). Remove @sveltejs/adapter-auto or other adapters. Do not convert the site.'
|
|
123
123
|
},
|
|
@@ -125,7 +125,7 @@ var ISSUES = [
|
|
|
125
125
|
code: "adapter_missing_react_router",
|
|
126
126
|
severity: "blocker",
|
|
127
127
|
titleEn: "React Router adapter is missing",
|
|
128
|
-
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC
|
|
128
|
+
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC\u05BEReact Router",
|
|
129
129
|
agentLine: "React Router (framework mode) is used without the Cloudflare Vite plugin{detail} ({loc}).",
|
|
130
130
|
fixForAgent: 'Keep React Router. Install @cloudflare/vite-plugin and wrangler as dev dependencies, add cloudflare({ viteEnvironment: { name: "ssr" } }) before reactRouter() in the vite.config plugins, add workers/app.ts that exports default { fetch } and passes each request to createRequestHandler(() => import("virtual:react-router/server-build")) from react-router, and add wrangler.jsonc with "main": "./workers/app.ts" and "compatibility_flags": ["nodejs_compat"]. Follow the official Cloudflare React Router template. Do not convert the site.'
|
|
131
131
|
},
|
|
@@ -141,7 +141,7 @@ var ISSUES = [
|
|
|
141
141
|
code: "adapter_missing_nextjs",
|
|
142
142
|
severity: "blocker",
|
|
143
143
|
titleEn: "Next.js needs the OpenNext adapter",
|
|
144
|
-
titleHe: "\u05DC
|
|
144
|
+
titleHe: "\u05DC\u05BENext.js \u05D7\u05E1\u05E8 \u05D4\u05DE\u05EA\u05D0\u05DD OpenNext",
|
|
145
145
|
agentLine: "Next.js{detail} is used without the OpenNext Cloudflare adapter ({loc}).",
|
|
146
146
|
fixForAgent: 'Keep Next.js. Install @opennextjs/cloudflare as a dependency and add open-next.config.ts with: import { defineCloudflareConfig } from "@opennextjs/cloudflare"; export default defineCloudflareConfig();. DeployAI then builds with opennextjs-cloudflare build. Next.js on DeployAI is in beta: tell the user, and do not convert the site.'
|
|
147
147
|
},
|
|
@@ -149,7 +149,7 @@ var ISSUES = [
|
|
|
149
149
|
code: "adapter_missing_solidstart",
|
|
150
150
|
severity: "blocker",
|
|
151
151
|
titleEn: "SolidStart preset is missing",
|
|
152
|
-
titleHe: "\u05D7\u05E1\u05E8\u05D4 \u05D4\u05D2\u05D3\u05E8\u05D4 \u05DC
|
|
152
|
+
titleHe: "\u05D7\u05E1\u05E8\u05D4 \u05D4\u05D2\u05D3\u05E8\u05D4 \u05DC\u05BESolidStart",
|
|
153
153
|
agentLine: "SolidStart is used without the Cloudflare preset{detail} ({loc}).",
|
|
154
154
|
fixForAgent: 'Keep SolidStart. Set server: { preset: "cloudflare_module" } in app.config.ts (in vite.config.ts on SolidStart 2). SolidStart on DeployAI is in beta: tell the user.'
|
|
155
155
|
},
|
|
@@ -157,7 +157,7 @@ var ISSUES = [
|
|
|
157
157
|
code: "adapter_missing_qwik",
|
|
158
158
|
severity: "blocker",
|
|
159
159
|
titleEn: "Qwik City adapter is missing",
|
|
160
|
-
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC
|
|
160
|
+
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC\u05BEQwik City",
|
|
161
161
|
agentLine: "Qwik City is used without the Cloudflare adapter{detail} ({loc}).",
|
|
162
162
|
fixForAgent: "Keep Qwik. Run npm run qwik add cloudflare-pages, which adds adapters/cloudflare-pages/vite.config.ts and the build.server script. Qwik City on DeployAI is in beta: tell the user."
|
|
163
163
|
},
|
|
@@ -165,7 +165,7 @@ var ISSUES = [
|
|
|
165
165
|
code: "adapter_missing_tanstack_start",
|
|
166
166
|
severity: "blocker",
|
|
167
167
|
titleEn: "TanStack Start adapter is missing",
|
|
168
|
-
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC
|
|
168
|
+
titleHe: "\u05D7\u05E1\u05E8 \u05DE\u05EA\u05D0\u05DD \u05DC\u05BETanStack Start",
|
|
169
169
|
agentLine: "TanStack Start is used without the Cloudflare Vite plugin{detail} ({loc}).",
|
|
170
170
|
fixForAgent: 'Keep TanStack Start. Install @cloudflare/vite-plugin and wrangler as dev dependencies, add cloudflare({ viteEnvironment: { name: "ssr" } }) to the vite.config plugins, and add wrangler.jsonc with "main": "@tanstack/react-start/server-entry" and "compatibility_flags": ["nodejs_compat"]. TanStack Start on DeployAI is in beta: tell the user.'
|
|
171
171
|
},
|
|
@@ -697,7 +697,7 @@ function frameworkDisplay(d) {
|
|
|
697
697
|
|
|
698
698
|
// ../shared/src/issue-help.ts
|
|
699
699
|
var HELP_ORIGIN = "https://deployai.co.il";
|
|
700
|
-
var DB_PROMPT_HE = "\u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05E9\u05DB\u05D1\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC
|
|
700
|
+
var DB_PROMPT_HE = "\u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05E9\u05DB\u05D1\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC\u05BECloudflare D1 (SQLite). \u05E2\u05DD Prisma \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BEprovider \u05E9\u05DC sqlite \u05D5\u05D1\u05DE\u05EA\u05D0\u05DD \u05E9\u05DC D1, \u05D0\u05D5 \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BEDrizzle \u05E2\u05DD drizzle-orm/d1. \u05E9\u05DE\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05DF \u05D8\u05D1\u05DC\u05D0\u05D5\u05EA \u05D5\u05E9\u05D3\u05D5\u05EA.";
|
|
701
701
|
function serverDb(nameHe, nameEn) {
|
|
702
702
|
return {
|
|
703
703
|
he: {
|
|
@@ -736,7 +736,7 @@ var ISSUE_HELP = {
|
|
|
736
736
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05E9\u05D5\u05DE\u05E8 \u05E7\u05D1\u05E6\u05D9\u05DD \u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05E2\u05DC \u05D4\u05E9\u05E8\u05EA, \u05DC\u05DE\u05E9\u05DC \u05EA\u05DE\u05D5\u05E0\u05D5\u05EA \u05E9\u05D2\u05D5\u05DC\u05E9\u05D9\u05DD \u05DE\u05E2\u05DC\u05D9\u05DD \u05D0\u05D5 \u05E7\u05D5\u05D1\u05E5 \u05E2\u05DD \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD.",
|
|
737
737
|
why: "\u05DC\u05D0\u05EA\u05E8\u05D9\u05DD \u05D0\u05E6\u05DC\u05E0\u05D5 \u05D0\u05D9\u05DF \u05D3\u05D9\u05E1\u05E7 \u05E7\u05D1\u05D5\u05E2. \u05DB\u05DC \u05DB\u05E0\u05D9\u05E1\u05D4 \u05DC\u05D0\u05EA\u05E8 \u05DE\u05EA\u05D7\u05D9\u05DC\u05D4 \u05DE\u05D7\u05D3\u05E9, \u05D5\u05E7\u05D5\u05D1\u05E5 \u05E9\u05E0\u05E9\u05DE\u05E8 \u05E0\u05E2\u05DC\u05DD \u05DE\u05D9\u05D3. \u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4 \u05E2\u05D3 \u05E9\u05D6\u05D4 \u05D9\u05E9\u05EA\u05E0\u05D4.",
|
|
738
738
|
fix: ["\u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05D2\u05D5\u05DC\u05E9\u05D9\u05DD \u05DE\u05E2\u05DC\u05D9\u05DD \u05E0\u05E9\u05DE\u05E8\u05D9\u05DD \u05D1\u05D0\u05D7\u05E1\u05D5\u05DF \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5.", "\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DB\u05DE\u05D5 \u05D4\u05D6\u05DE\u05E0\u05D5\u05EA \u05D0\u05D5 \u05E4\u05E0\u05D9\u05D5\u05EA \u05E0\u05E9\u05DE\u05E8\u05D9\u05DD \u05D1\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5.", "\u05E7\u05E8\u05D9\u05D0\u05D4 \u05E9\u05DC \u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05D4\u05DD \u05D7\u05DC\u05E7 \u05DE\u05D4\u05D0\u05EA\u05E8 \u05DE\u05D5\u05EA\u05E8\u05EA, \u05DB\u05E9\u05D4\u05D9\u05D0 \u05E7\u05D5\u05E8\u05D9\u05EA \u05D1\u05D6\u05DE\u05DF \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4."],
|
|
739
|
-
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05D1\u05DC\u05D9 \u05D3\u05D9\u05E1\u05E7 \u05E9\u05D0\u05E4\u05E9\u05E8 \u05DC\u05DB\u05EA\u05D5\u05D1 \u05D0\u05DC\u05D9\u05D5. \u05E9\u05DE\u05D5\u05E8 \u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05DE\u05D5\u05E2\u05DC\u05D9\u05DD \u05D1
|
|
739
|
+
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05D1\u05DC\u05D9 \u05D3\u05D9\u05E1\u05E7 \u05E9\u05D0\u05E4\u05E9\u05E8 \u05DC\u05DB\u05EA\u05D5\u05D1 \u05D0\u05DC\u05D9\u05D5. \u05E9\u05DE\u05D5\u05E8 \u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05DE\u05D5\u05E2\u05DC\u05D9\u05DD \u05D1\u05BER2 (\u05D0\u05D7\u05E1\u05D5\u05DF \u05E7\u05D1\u05E6\u05D9\u05DD) \u05D5\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D1\u05BED1. \u05E7\u05E8\u05D9\u05D0\u05D4 \u05E9\u05DC \u05E7\u05D1\u05E6\u05D9\u05DD \u05DE\u05EA\u05D5\u05DA \u05D4\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8 \u05DE\u05D5\u05EA\u05E8\u05EA \u05E8\u05E7 \u05D0\u05DD \u05D4\u05D9\u05D0 \u05E7\u05D5\u05E8\u05D9\u05EA \u05D1\u05D6\u05DE\u05DF \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4."
|
|
740
740
|
},
|
|
741
741
|
en: {
|
|
742
742
|
what: "The site saves files in a folder on the server, such as images that visitors upload or a file with data.",
|
|
@@ -748,10 +748,10 @@ var ISSUE_HELP = {
|
|
|
748
748
|
unsupported_db_mysql: serverDb("MySQL", "MySQL"),
|
|
749
749
|
unsupported_db_mongodb: {
|
|
750
750
|
he: {
|
|
751
|
-
what: "\u05D4\u05D0\u05EA\u05E8 \u05E9\u05D5\u05DE\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05D5 \u05D1
|
|
752
|
-
why: "\u05DB\u05DC \u05D0\u05EA\u05E8 \u05D0\u05E6\u05DC\u05E0\u05D5 \u05DE\u05E7\u05D1\u05DC \u05DE\u05E1\u05D3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DE\u05D5\u05D1\u05E0\u05D4, \u05D5\u05D0\u05D9\u05DF \u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC
|
|
751
|
+
what: "\u05D4\u05D0\u05EA\u05E8 \u05E9\u05D5\u05DE\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05D5 \u05D1\u05BEMongoDB, \u05DE\u05E1\u05D3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05E8\u05E5 \u05E2\u05DC \u05E9\u05E8\u05EA \u05E0\u05E4\u05E8\u05D3.",
|
|
752
|
+
why: "\u05DB\u05DC \u05D0\u05EA\u05E8 \u05D0\u05E6\u05DC\u05E0\u05D5 \u05DE\u05E7\u05D1\u05DC \u05DE\u05E1\u05D3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DE\u05D5\u05D1\u05E0\u05D4, \u05D5\u05D0\u05D9\u05DF \u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC\u05BEMongoDB. \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4 \u05E2\u05D3 \u05E9\u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D9\u05E2\u05D1\u05E8\u05D5 \u05DC\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5.",
|
|
753
753
|
fix: ["\u05D4\u05E1\u05D5\u05DB\u05DF \u05E9\u05DC\u05DB\u05DD \u05D4\u05D5\u05E4\u05DA \u05DB\u05DC \u05D0\u05D5\u05E1\u05E3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC\u05D8\u05D1\u05DC\u05D4 \u05D1\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5, \u05E2\u05DD \u05E2\u05DE\u05D5\u05D3\u05D5\u05EA \u05D1\u05E8\u05D5\u05E8\u05D5\u05EA.", "\u05D0\u05DD \u05D9\u05E9 \u05DB\u05D1\u05E8 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D0\u05DE\u05D9\u05EA\u05D9\u05D9\u05DD, \u05E9\u05D5\u05DE\u05E8\u05D9\u05DD \u05DE\u05D4\u05DD \u05E2\u05D5\u05EA\u05E7 \u05DC\u05E4\u05E0\u05D9 \u05D4\u05DE\u05E2\u05D1\u05E8.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
754
|
-
prompt: "\u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC
|
|
754
|
+
prompt: "\u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC\u05BECloudflare D1 (SQLite). \u05D4\u05E4\u05D5\u05DA \u05DB\u05DC collection \u05DC\u05D8\u05D1\u05DC\u05D4 \u05E2\u05DD \u05E2\u05DE\u05D5\u05D3\u05D5\u05EA \u05D1\u05E8\u05D5\u05E8\u05D5\u05EA, \u05D5\u05E9\u05DE\u05D5\u05E8 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DE\u05E7\u05D5\u05E0\u05E0\u05D9\u05DD \u05D1\u05E2\u05DE\u05D5\u05D3\u05D5\u05EA \u05D8\u05E7\u05E1\u05D8 \u05E9\u05DC JSON \u05DB\u05E9\u05E6\u05E8\u05D9\u05DA."
|
|
755
755
|
},
|
|
756
756
|
en: {
|
|
757
757
|
what: "The site keeps its data in MongoDB, a database that runs on a separate server.",
|
|
@@ -764,7 +764,7 @@ var ISSUE_HELP = {
|
|
|
764
764
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05E9\u05D5\u05DE\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05D1\u05E7\u05D5\u05D1\u05E5 \u05DE\u05E1\u05D3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05E0\u05DE\u05E6\u05D0 \u05D1\u05EA\u05D5\u05DA \u05D4\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8.",
|
|
765
765
|
why: "\u05D0\u05D9\u05DF \u05D0\u05E6\u05DC\u05E0\u05D5 \u05D3\u05D9\u05E1\u05E7 \u05E7\u05D1\u05D5\u05E2, \u05D0\u05D6 \u05E7\u05D5\u05D1\u05E5 \u05DB\u05D6\u05D4 \u05DC\u05D0 \u05E0\u05E9\u05DE\u05E8 \u05D1\u05D9\u05DF \u05DB\u05E0\u05D9\u05E1\u05D4 \u05DC\u05DB\u05E0\u05D9\u05E1\u05D4. \u05D4\u05D7\u05D3\u05E9\u05D5\u05EA \u05D4\u05D8\u05D5\u05D1\u05D5\u05EA: \u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5 \u05DE\u05D3\u05D1\u05E8 \u05D1\u05D0\u05D5\u05EA\u05D4 \u05E9\u05E4\u05D4, \u05D0\u05D6 \u05D4\u05D8\u05D1\u05DC\u05D0\u05D5\u05EA \u05D5\u05D4\u05E9\u05D0\u05D9\u05DC\u05EA\u05D5\u05EA \u05E0\u05E9\u05D0\u05E8\u05D5\u05EA \u05DB\u05DE\u05D5 \u05E9\u05D4\u05DF.",
|
|
766
766
|
fix: ["\u05D4\u05E1\u05D5\u05DB\u05DF \u05E9\u05DC\u05DB\u05DD \u05DE\u05D7\u05DC\u05D9\u05E3 \u05D0\u05EA \u05D4\u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC\u05E7\u05D5\u05D1\u05E5 \u05D1\u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5.", "\u05D4\u05D8\u05D1\u05DC\u05D0\u05D5\u05EA \u05D5\u05D4\u05E9\u05D0\u05D9\u05DC\u05EA\u05D5\u05EA \u05E0\u05E9\u05D0\u05E8\u05D5\u05EA.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
767
|
-
prompt: "D1 \u05D4\u05D5\u05D0 SQLite \u05E9\u05DE\u05E0\u05D5\u05D4\u05DC \u05E2\u05DC \u05D9\u05D3\u05D9 Cloudflare, \u05DB\u05DA \u05E9\u05D4 SQL \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05D9\u05E9\u05D0\u05E8. \u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA \u05D4\u05D3\u05E8\u05D9\u05D9\u05D1\u05E8 \u05D4\u05DE\u05E7\u05D5\u05DE\u05D9 \u05D1
|
|
767
|
+
prompt: "D1 \u05D4\u05D5\u05D0 SQLite \u05E9\u05DE\u05E0\u05D5\u05D4\u05DC \u05E2\u05DC \u05D9\u05D3\u05D9 Cloudflare, \u05DB\u05DA \u05E9\u05D4 SQL \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05D9\u05E9\u05D0\u05E8. \u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA \u05D4\u05D3\u05E8\u05D9\u05D9\u05D1\u05E8 \u05D4\u05DE\u05E7\u05D5\u05DE\u05D9 \u05D1\u05BEbinding \u05E9\u05DC D1, \u05D0\u05D5 \u05D1\u05BEDrizzle \u05E2\u05DD drizzle-orm/d1."
|
|
768
768
|
},
|
|
769
769
|
en: {
|
|
770
770
|
what: "The site keeps its data in a database file inside the project.",
|
|
@@ -789,8 +789,8 @@ var ISSUE_HELP = {
|
|
|
789
789
|
he: {
|
|
790
790
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 bcrypt \u05DB\u05D3\u05D9 \u05DC\u05E9\u05DE\u05D5\u05E8 \u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA \u05D1\u05E6\u05D5\u05E8\u05D4 \u05D1\u05D8\u05D5\u05D7\u05D4.",
|
|
791
791
|
why: "bcrypt \u05D1\u05E0\u05D5\u05D9\u05D4 \u05DE\u05E7\u05D5\u05D3 \u05DE\u05E7\u05D5\u05DE\u05D9 \u05E9\u05DC\u05D0 \u05E8\u05E5 \u05E2\u05DC \u05D4\u05E9\u05E8\u05EA\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4.",
|
|
792
|
-
fix: ["\u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05DC
|
|
793
|
-
prompt: "\u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA bcrypt \u05D1
|
|
792
|
+
fix: ["\u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05DC\u05BEbcryptjs, \u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05E9\u05E2\u05D5\u05D1\u05D3\u05EA \u05D1\u05D3\u05D9\u05D5\u05E7 \u05D0\u05D5\u05EA\u05D5 \u05D3\u05D1\u05E8 \u05D5\u05DB\u05EA\u05D5\u05D1\u05D4 \u05DB\u05D5\u05DC\u05D4 \u05D1\u05BEJavaScript.", "\u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA \u05E9\u05DB\u05D1\u05E8 \u05E9\u05DE\u05D5\u05E8\u05D5\u05EA \u05DE\u05DE\u05E9\u05D9\u05DB\u05D5\u05EA \u05DC\u05E2\u05D1\u05D5\u05D3. \u05D4\u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05DC\u05D0 \u05E6\u05E8\u05D9\u05DB\u05D9\u05DD \u05DC\u05D1\u05D7\u05D5\u05E8 \u05E1\u05D9\u05E1\u05DE\u05D4 \u05D7\u05D3\u05E9\u05D4."],
|
|
793
|
+
prompt: "\u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA bcrypt \u05D1\u05BEbcryptjs (\u05D0\u05D5\u05EA\u05D5 API, JavaScript \u05D8\u05D4\u05D5\u05E8), \u05D0\u05D5 \u05D1\u05BEWeb Crypto API (PBKDF2). \u05D2\u05D9\u05D1\u05D5\u05D1\u05D9 \u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA \u05E7\u05D9\u05D9\u05DE\u05D9\u05DD \u05E9\u05DC bcrypt \u05E0\u05E9\u05D0\u05E8\u05D9\u05DD \u05EA\u05E7\u05E4\u05D9\u05DD \u05E2\u05DD bcryptjs."
|
|
794
794
|
},
|
|
795
795
|
en: {
|
|
796
796
|
what: "The site uses the bcrypt library to store passwords safely.",
|
|
@@ -800,9 +800,9 @@ var ISSUE_HELP = {
|
|
|
800
800
|
},
|
|
801
801
|
native_module_other: {
|
|
802
802
|
he: {
|
|
803
|
-
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05E9\u05D1\u05E0\u05D5\u05D9\u05D4 \u05DE\u05E7\u05D5\u05D3 \u05DE\u05E7\u05D5\u05DE\u05D9 \u05DC\u05DE\u05D7\u05E9\u05D1 \u05DE\u05E1\u05D5\u05D9\u05DD, \u05D5\u05DC\u05D0 \u05E8\u05E7 \u05DE
|
|
803
|
+
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E9\u05EA\u05DE\u05E9 \u05D1\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05E9\u05D1\u05E0\u05D5\u05D9\u05D4 \u05DE\u05E7\u05D5\u05D3 \u05DE\u05E7\u05D5\u05DE\u05D9 \u05DC\u05DE\u05D7\u05E9\u05D1 \u05DE\u05E1\u05D5\u05D9\u05DD, \u05D5\u05DC\u05D0 \u05E8\u05E7 \u05DE\u05BEJavaScript.",
|
|
804
804
|
why: "\u05E1\u05E4\u05E8\u05D9\u05D5\u05EA \u05DB\u05D0\u05DC\u05D4 \u05DC\u05D0 \u05E8\u05E6\u05D5\u05EA \u05E2\u05DC \u05D4\u05E9\u05E8\u05EA\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4.",
|
|
805
|
-
fix: ["\u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05D0\u05EA \u05D4\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05D1\u05D7\u05DC\u05D5\u05E4\u05D4 \u05E9\u05DB\u05EA\u05D5\u05D1\u05D4 \u05D1
|
|
805
|
+
fix: ["\u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05D0\u05EA \u05D4\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05D1\u05D7\u05DC\u05D5\u05E4\u05D4 \u05E9\u05DB\u05EA\u05D5\u05D1\u05D4 \u05D1\u05BEJavaScript.", "\u05D0\u05D5 \u05DE\u05E2\u05D1\u05D9\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 \u05E9\u05DC\u05D4 \u05DC\u05D6\u05DE\u05DF \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4."],
|
|
806
806
|
prompt: "\u05E1\u05E4\u05E8\u05D9\u05D5\u05EA \u05E0\u05D9\u05D9\u05D8\u05D9\u05D1 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC\u05D5\u05EA \u05DC\u05E8\u05D5\u05E5 \u05D1\u05E9\u05E8\u05EA. \u05D4\u05D7\u05DC\u05E3 \u05D0\u05EA \u05D4\u05E1\u05E4\u05E8\u05D9\u05D9\u05D4 \u05D1\u05D7\u05DC\u05D5\u05E4\u05D4 \u05E9\u05DC JavaScript \u05D8\u05D4\u05D5\u05E8 \u05D0\u05D5 \u05E9\u05DC Web API, \u05D0\u05D5 \u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 \u05D4\u05D6\u05D5 \u05DC\u05D6\u05DE\u05DF \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4."
|
|
807
807
|
},
|
|
808
808
|
en: {
|
|
@@ -816,7 +816,7 @@ var ISSUE_HELP = {
|
|
|
816
816
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E4\u05E2\u05D9\u05DC \u05DE\u05E9\u05D4\u05D5 \u05E9\u05E8\u05E5 \u05D1\u05E8\u05E7\u05E2 \u05DB\u05DC \u05D4\u05D6\u05DE\u05DF, \u05DB\u05DE\u05D5 \u05D8\u05D9\u05D9\u05DE\u05E8, \u05EA\u05D5\u05E8 \u05DE\u05E9\u05D9\u05DE\u05D5\u05EA \u05D0\u05D5 \u05DE\u05E9\u05D9\u05DE\u05D4 \u05DE\u05EA\u05D5\u05D6\u05DE\u05E0\u05EA.",
|
|
817
817
|
why: "\u05D0\u05E6\u05DC\u05E0\u05D5 \u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05E8\u05E7 \u05DB\u05E9\u05DE\u05D9\u05E9\u05D4\u05D5 \u05E0\u05DB\u05E0\u05E1, \u05D5\u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05E0\u05E9\u05D0\u05E8 \u05E4\u05D5\u05E2\u05DC \u05D1\u05D9\u05DF \u05DB\u05E0\u05D9\u05E1\u05D4 \u05DC\u05DB\u05E0\u05D9\u05E1\u05D4. \u05DE\u05D4 \u05E9\u05E8\u05E5 \u05D1\u05E8\u05E7\u05E2 \u05E4\u05E9\u05D5\u05D8 \u05DC\u05D0 \u05D9\u05E4\u05E2\u05DC, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4.",
|
|
818
818
|
fix: ["\u05DE\u05D5\u05E6\u05D9\u05D0\u05D9\u05DD \u05DE\u05D4\u05D0\u05EA\u05E8 \u05D8\u05D9\u05D9\u05DE\u05E8\u05D9\u05DD, \u05EA\u05D5\u05E8\u05D9 \u05DE\u05E9\u05D9\u05DE\u05D5\u05EA \u05D5\u05E1\u05E4\u05E8\u05D9\u05D5\u05EA \u05E9\u05DC \u05DE\u05E9\u05D9\u05DE\u05D5\u05EA \u05DE\u05EA\u05D5\u05D6\u05DE\u05E0\u05D5\u05EA.", "\u05D0\u05DD \u05E6\u05E8\u05D9\u05DA \u05DE\u05E9\u05D9\u05DE\u05D4 \u05E9\u05E8\u05E6\u05D4 \u05DC\u05E4\u05D9 \u05E9\u05E2\u05D5\u05DF, \u05D4\u05E1\u05D5\u05DB\u05DF \u05D9\u05E9\u05D0\u05DC \u05D0\u05EA\u05DB\u05DD \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D5\u05D0 \u05D1\u05D5\u05E0\u05D4 \u05D0\u05D5\u05EA\u05D4."],
|
|
819
|
-
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05DC\u05DB\u05DC \u05D1\u05E7\u05E9\u05D4 \u05D1\u05E0\u05E4\u05E8\u05D3, \u05D5\u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05E0\u05E9\u05D0\u05E8 \u05E4\u05D5\u05E2\u05DC \u05D1\u05D9\u05DF \u05D1\u05E7\u05E9\u05D5\u05EA. \u05D4\u05E1\u05E8 \u05D8\u05D9\u05D9\u05DE\u05E8\u05D9\u05DD, \u05EA\u05D5\u05E8\u05D9 \u05DE\u05E9\u05D9\u05DE\u05D5\u05EA \u05D5\u05E1\u05E4\u05E8\u05D9\u05D5\u05EA cron. \u05E2\u05D1\u05D5\u05D3\u05D4 \u05DE\u05EA\u05D5\u05D6\u05DE\u05E0\u05EA \u05EA\u05D5\u05DB\u05DC \u05DC\u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1
|
|
819
|
+
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05DC\u05DB\u05DC \u05D1\u05E7\u05E9\u05D4 \u05D1\u05E0\u05E4\u05E8\u05D3, \u05D5\u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05E0\u05E9\u05D0\u05E8 \u05E4\u05D5\u05E2\u05DC \u05D1\u05D9\u05DF \u05D1\u05E7\u05E9\u05D5\u05EA. \u05D4\u05E1\u05E8 \u05D8\u05D9\u05D9\u05DE\u05E8\u05D9\u05DD, \u05EA\u05D5\u05E8\u05D9 \u05DE\u05E9\u05D9\u05DE\u05D5\u05EA \u05D5\u05E1\u05E4\u05E8\u05D9\u05D5\u05EA cron. \u05E2\u05D1\u05D5\u05D3\u05D4 \u05DE\u05EA\u05D5\u05D6\u05DE\u05E0\u05EA \u05EA\u05D5\u05DB\u05DC \u05DC\u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BECloudflare Cron Trigger \u05D1\u05D4\u05DE\u05E9\u05DA, \u05E9\u05D0\u05DC \u05D0\u05EA \u05D4\u05DE\u05E4\u05EA\u05D7 \u05E7\u05D5\u05D3\u05DD."
|
|
820
820
|
},
|
|
821
821
|
en: {
|
|
822
822
|
what: "The site starts something that keeps running in the background, such as a timer, a job queue or a scheduled task.",
|
|
@@ -829,7 +829,7 @@ var ISSUE_HELP = {
|
|
|
829
829
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E4\u05E2\u05D9\u05DC \u05E9\u05E8\u05EA WebSocket, \u05D7\u05D9\u05D1\u05D5\u05E8 \u05E4\u05EA\u05D5\u05D7 \u05E9\u05E0\u05E9\u05D0\u05E8 \u05E4\u05E2\u05D9\u05DC \u05DB\u05D3\u05D9 \u05DC\u05E9\u05DC\u05D5\u05D7 \u05E2\u05D3\u05DB\u05D5\u05E0\u05D9\u05DD \u05D7\u05D9\u05D9\u05DD.",
|
|
830
830
|
why: "\u05E9\u05E8\u05EA \u05DB\u05D6\u05D4 \u05E6\u05E8\u05D9\u05DA \u05DC\u05E8\u05D5\u05E5 \u05DB\u05DC \u05D4\u05D6\u05DE\u05DF, \u05D5\u05D0\u05E6\u05DC\u05E0\u05D5 \u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05E8\u05E7 \u05DB\u05E9\u05DE\u05D9\u05E9\u05D4\u05D5 \u05E0\u05DB\u05E0\u05E1. \u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4.",
|
|
831
831
|
fix: ["\u05DC\u05E2\u05D3\u05DB\u05D5\u05E0\u05D9\u05DD \u05D7\u05D9\u05D9\u05DD \u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05DE\u05D7\u05D3\u05E9 \u05DB\u05DC \u05DB\u05DE\u05D4 \u05E9\u05E0\u05D9\u05D5\u05EA, \u05D0\u05D5 \u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05D1\u05D6\u05E8\u05DD \u05E2\u05D3\u05DB\u05D5\u05E0\u05D9\u05DD \u05DE\u05D4\u05E9\u05E8\u05EA.", "\u05D0\u05DD \u05D6\u05D4 \u05DC\u05D1 \u05D4\u05D0\u05EA\u05E8, \u05DB\u05DE\u05D5 \u05E6'\u05D0\u05D8 \u05D7\u05D9, \u05D4\u05E1\u05D5\u05DB\u05DF \u05D9\u05E9\u05D0\u05DC \u05D0\u05EA\u05DB\u05DD \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D5\u05D0 \u05DE\u05E9\u05E0\u05D4 \u05D0\u05EA \u05D4\u05DE\u05D1\u05E0\u05D4."],
|
|
832
|
-
prompt: "\u05E9\u05E8\u05EA WebSocket \u05E2\u05E6\u05DE\u05D0\u05D9 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05DB\u05D0\u05DF. \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1
|
|
832
|
+
prompt: "\u05E9\u05E8\u05EA WebSocket \u05E2\u05E6\u05DE\u05D0\u05D9 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05DB\u05D0\u05DF. \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BEpolling \u05D0\u05D5 \u05D1\u05BEserver-sent events \u05DC\u05E2\u05D3\u05DB\u05D5\u05E0\u05D9\u05DD \u05D7\u05D9\u05D9\u05DD, \u05D0\u05D5 \u05E9\u05D0\u05DC \u05D0\u05EA \u05D4\u05DE\u05E4\u05EA\u05D7 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D0\u05EA\u05D4 \u05DE\u05EA\u05DB\u05E0\u05DF \u05DE\u05D7\u05D3\u05E9 \u05D0\u05EA \u05D4\u05D9\u05DB\u05D5\u05DC\u05EA \u05D4\u05D6\u05D5."
|
|
833
833
|
},
|
|
834
834
|
en: {
|
|
835
835
|
what: "The site runs a WebSocket server, an open connection that stays up to send live updates.",
|
|
@@ -851,11 +851,11 @@ var ISSUE_HELP = {
|
|
|
851
851
|
}
|
|
852
852
|
},
|
|
853
853
|
adapter_missing_astro: adapterMissing("Astro", '\u05D4\u05D5\u05E1\u05E3 \u05D0\u05EA \u05D4\u05DE\u05EA\u05D0\u05DD \u05D4\u05E8\u05E9\u05DE\u05D9: \u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @astrojs/cloudflare, \u05D5\u05D1\u05E7\u05D5\u05D1\u05E5 astro.config.mjs \u05D9\u05D9\u05D1\u05D0 cloudflare \u05DE "@astrojs/cloudflare" \u05D5\u05D4\u05D2\u05D3\u05E8 adapter: cloudflare(). \u05D0\u05DC \u05EA\u05E1\u05D9\u05E8 \u05E0\u05EA\u05D9\u05D1\u05D9 \u05E9\u05E8\u05EA \u05D5\u05D0\u05DC \u05EA\u05DE\u05D9\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8.'),
|
|
854
|
-
adapter_missing_sveltekit: adapterMissing("SvelteKit", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @sveltejs/adapter-cloudflare \u05DB\u05EA\u05DC\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D5\u05D1\u05DE\u05E7\u05D5\u05DD \u05E9\u05D1\u05D5 \u05DE\u05D5\u05D2\u05D3\u05E8 \u05D4\u05DE\u05EA\u05D0\u05DD (vite.config.ts \u05D1
|
|
855
|
-
adapter_missing_react_router: adapterMissing("React Router", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @cloudflare/vite-plugin \u05D5\u05D0\u05EA wrangler \u05DB\u05EA\u05DC\u05D5\u05D9\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D4\u05D5\u05E1\u05E3 cloudflare({ viteEnvironment: { name: "ssr" } }) \u05DC\u05E4\u05E0\u05D9 reactRouter() \u05D1
|
|
854
|
+
adapter_missing_sveltekit: adapterMissing("SvelteKit", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @sveltejs/adapter-cloudflare \u05DB\u05EA\u05DC\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D5\u05D1\u05DE\u05E7\u05D5\u05DD \u05E9\u05D1\u05D5 \u05DE\u05D5\u05D2\u05D3\u05E8 \u05D4\u05DE\u05EA\u05D0\u05DD (vite.config.ts \u05D1\u05BESvelteKit 3, svelte.config.js \u05DC\u05E4\u05E0\u05D9 \u05DB\u05DF) \u05D9\u05D9\u05D1\u05D0 adapter \u05DE "@sveltejs/adapter-cloudflare" \u05D5\u05D4\u05D2\u05D3\u05E8 adapter: adapter(). \u05D4\u05E1\u05E8 \u05D0\u05EA @sveltejs/adapter-auto \u05D0\u05D5 \u05DE\u05EA\u05D0\u05DE\u05D9\u05DD \u05D0\u05D7\u05E8\u05D9\u05DD. \u05D0\u05DC \u05EA\u05DE\u05D9\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8.'),
|
|
855
|
+
adapter_missing_react_router: adapterMissing("React Router", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @cloudflare/vite-plugin \u05D5\u05D0\u05EA wrangler \u05DB\u05EA\u05DC\u05D5\u05D9\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D4\u05D5\u05E1\u05E3 cloudflare({ viteEnvironment: { name: "ssr" } }) \u05DC\u05E4\u05E0\u05D9 reactRouter() \u05D1\u05BEplugins \u05E9\u05DC vite.config, \u05D4\u05D5\u05E1\u05E3 workers/app.ts \u05E9\u05DE\u05E2\u05D1\u05D9\u05E8 \u05DB\u05DC \u05D1\u05E7\u05E9\u05D4 \u05DC\u05BEcreateRequestHandler \u05DE\u05BEreact-router, \u05D5\u05D4\u05D5\u05E1\u05E3 wrangler.jsonc \u05E2\u05DD "main": "./workers/app.ts" \u05D5 "compatibility_flags": ["nodejs_compat"]. \u05E2\u05D1\u05D5\u05D3 \u05DC\u05E4\u05D9 \u05D4\u05EA\u05D1\u05E0\u05D9\u05EA \u05D4\u05E8\u05E9\u05DE\u05D9\u05EA \u05E9\u05DC Cloudflare \u05DC\u05BEReact Router. \u05D0\u05DC \u05EA\u05DE\u05D9\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8.'),
|
|
856
856
|
adapter_missing_hono: {
|
|
857
857
|
he: {
|
|
858
|
-
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1
|
|
858
|
+
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1\u05BEHono, \u05D0\u05D1\u05DC \u05DE\u05D5\u05E4\u05E2\u05DC \u05DB\u05E9\u05E8\u05EA \u05E9\u05DE\u05D0\u05D6\u05D9\u05DF \u05DC\u05E4\u05D5\u05E8\u05D8.",
|
|
859
859
|
why: "\u05D0\u05E6\u05DC\u05E0\u05D5 \u05D0\u05D9\u05DF \u05E9\u05E8\u05EA \u05E9\u05E8\u05E5 \u05DB\u05DC \u05D4\u05D6\u05DE\u05DF. Hono \u05E2\u05D5\u05D1\u05D3 \u05D0\u05E6\u05DC\u05E0\u05D5 \u05DB\u05DE\u05D5 \u05E9\u05D4\u05D5\u05D0, \u05E8\u05E7 \u05E6\u05E8\u05D9\u05DA \u05DC\u05D9\u05D9\u05E6\u05D0 \u05D0\u05EA \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05D1\u05DE\u05E7\u05D5\u05DD \u05DC\u05D4\u05E4\u05E2\u05D9\u05DC \u05E9\u05E8\u05EA.",
|
|
860
860
|
fix: ["\u05D4\u05E1\u05D5\u05DB\u05DF \u05DE\u05D5\u05D7\u05E7 \u05D0\u05EA \u05D4\u05E4\u05E2\u05DC\u05EA \u05D4\u05E9\u05E8\u05EA \u05D5\u05DE\u05D9\u05D9\u05E6\u05D0 \u05D0\u05EA \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05DE\u05E7\u05D5\u05D1\u05E5 \u05D4\u05DB\u05E0\u05D9\u05E1\u05D4.", "\u05DB\u05DC \u05D4\u05E0\u05EA\u05D9\u05D1\u05D9\u05DD \u05E0\u05E9\u05D0\u05E8\u05D9\u05DD \u05DB\u05DE\u05D5 \u05E9\u05D4\u05DD.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
861
861
|
prompt: '\u05D4\u05E9\u05D0\u05E8 \u05D0\u05EA Hono. \u05D4\u05E1\u05E8 \u05D0\u05EA serve() \u05E9\u05DC @hono/node-server \u05D5\u05D9\u05D9\u05E6\u05D0 export default app \u05DE\u05E7\u05D5\u05D1\u05E5 \u05D4\u05DB\u05E0\u05D9\u05E1\u05D4 (\u05DC\u05DE\u05E9\u05DC src/index.ts). \u05D4\u05D5\u05E1\u05E3 wrangler.jsonc \u05E2\u05DD "main" \u05E9\u05DE\u05E6\u05D1\u05D9\u05E2 \u05E2\u05DC \u05D4\u05E7\u05D5\u05D1\u05E5 \u05D4\u05D6\u05D4 \u05D5 "compatibility_flags": ["nodejs_compat"]. \u05D4\u05E9\u05D0\u05E8 \u05D0\u05EA \u05D0\u05D5\u05EA\u05DD \u05E0\u05EA\u05D9\u05D1\u05D9\u05DD.'
|
|
@@ -866,16 +866,16 @@ var ISSUE_HELP = {
|
|
|
866
866
|
fix: ["Your agent removes the server start and exports the app from the entry file.", "All routes stay as they are.", "Run the check again."]
|
|
867
867
|
}
|
|
868
868
|
},
|
|
869
|
-
adapter_missing_nextjs: adapterMissing("Next.js", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @opennextjs/cloudflare \u05DB\u05EA\u05DC\u05D5\u05EA \u05D5\u05D4\u05D5\u05E1\u05E3 open-next.config.ts \u05E2\u05DD: import { defineCloudflareConfig } from "@opennextjs/cloudflare"; export default defineCloudflareConfig();. DeployAI \u05D1\u05D5\u05E0\u05D4 \u05D0\u05D6 \u05E2\u05DD opennextjs-cloudflare build. Next.js \u05D1
|
|
870
|
-
adapter_missing_solidstart: adapterMissing("SolidStart", '\u05D4\u05D2\u05D3\u05E8 server: { preset: "cloudflare_module" } \u05D1\u05E7\u05D5\u05D1\u05E5 app.config.ts (\u05D1
|
|
871
|
-
adapter_missing_qwik: adapterMissing("Qwik City", "\u05D4\u05E8\u05E5 npm run qwik add cloudflare-pages, \u05E9\u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05EA adapters/cloudflare-pages/vite.config.ts \u05D5\u05D0\u05EA \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 build.server. Qwik City \u05D1
|
|
872
|
-
adapter_missing_tanstack_start: adapterMissing("TanStack Start", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @cloudflare/vite-plugin \u05D5\u05D0\u05EA wrangler \u05DB\u05EA\u05DC\u05D5\u05D9\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D4\u05D5\u05E1\u05E3 cloudflare({ viteEnvironment: { name: "ssr" } }) \u05DC
|
|
869
|
+
adapter_missing_nextjs: adapterMissing("Next.js", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @opennextjs/cloudflare \u05DB\u05EA\u05DC\u05D5\u05EA \u05D5\u05D4\u05D5\u05E1\u05E3 open-next.config.ts \u05E2\u05DD: import { defineCloudflareConfig } from "@opennextjs/cloudflare"; export default defineCloudflareConfig();. DeployAI \u05D1\u05D5\u05E0\u05D4 \u05D0\u05D6 \u05E2\u05DD opennextjs-cloudflare build. Next.js \u05D1\u05BEDeployAI \u05D1\u05E9\u05DC\u05D1 \u05D1\u05D8\u05D0: \u05E1\u05E4\u05E8 \u05E2\u05DC \u05D6\u05D4 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9, \u05D5\u05D0\u05DC \u05EA\u05DE\u05D9\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8.', true),
|
|
870
|
+
adapter_missing_solidstart: adapterMissing("SolidStart", '\u05D4\u05D2\u05D3\u05E8 server: { preset: "cloudflare_module" } \u05D1\u05E7\u05D5\u05D1\u05E5 app.config.ts (\u05D1\u05BEvite.config.ts \u05D1\u05BESolidStart 2). SolidStart \u05D1\u05BEDeployAI \u05D1\u05E9\u05DC\u05D1 \u05D1\u05D8\u05D0: \u05E1\u05E4\u05E8 \u05E2\u05DC \u05D6\u05D4 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9.', true),
|
|
871
|
+
adapter_missing_qwik: adapterMissing("Qwik City", "\u05D4\u05E8\u05E5 npm run qwik add cloudflare-pages, \u05E9\u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05EA adapters/cloudflare-pages/vite.config.ts \u05D5\u05D0\u05EA \u05D4\u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 build.server. Qwik City \u05D1\u05BEDeployAI \u05D1\u05E9\u05DC\u05D1 \u05D1\u05D8\u05D0: \u05E1\u05E4\u05E8 \u05E2\u05DC \u05D6\u05D4 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9.", true),
|
|
872
|
+
adapter_missing_tanstack_start: adapterMissing("TanStack Start", '\u05D4\u05EA\u05E7\u05DF \u05D0\u05EA @cloudflare/vite-plugin \u05D5\u05D0\u05EA wrangler \u05DB\u05EA\u05DC\u05D5\u05D9\u05D5\u05EA \u05E4\u05D9\u05EA\u05D5\u05D7, \u05D4\u05D5\u05E1\u05E3 cloudflare({ viteEnvironment: { name: "ssr" } }) \u05DC\u05BEplugins \u05E9\u05DC vite.config, \u05D5\u05D4\u05D5\u05E1\u05E3 wrangler.jsonc \u05E2\u05DD "main": "@tanstack/react-start/server-entry" \u05D5 "compatibility_flags": ["nodejs_compat"]. TanStack Start \u05D1\u05BEDeployAI \u05D1\u05E9\u05DC\u05D1 \u05D1\u05D8\u05D0: \u05E1\u05E4\u05E8 \u05E2\u05DC \u05D6\u05D4 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9.', true),
|
|
873
873
|
env_file_committed: {
|
|
874
874
|
he: {
|
|
875
875
|
what: "\u05E7\u05D5\u05D1\u05E5 env \u05E2\u05DD \u05E1\u05D9\u05E1\u05DE\u05D0\u05D5\u05EA \u05D5\u05DE\u05E4\u05EA\u05D7\u05D5\u05EA \u05E0\u05E9\u05DE\u05E8 \u05D1\u05EA\u05D5\u05DA git, \u05D4\u05D9\u05E1\u05D8\u05D5\u05E8\u05D9\u05D9\u05EA \u05D4\u05D2\u05E8\u05E1\u05D0\u05D5\u05EA \u05E9\u05DC \u05D4\u05E7\u05D5\u05D3.",
|
|
876
876
|
why: "\u05DB\u05DC \u05DE\u05D9 \u05E9\u05E8\u05D5\u05D0\u05D4 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D3 \u05E8\u05D5\u05D0\u05D4 \u05D2\u05DD \u05D0\u05EA \u05D4\u05E1\u05D5\u05D3\u05D5\u05EA. \u05DC\u05DB\u05DF \u05D0\u05E0\u05D7\u05E0\u05D5 \u05E2\u05D5\u05E6\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05D4\u05E2\u05DC\u05D0\u05D4.",
|
|
877
|
-
fix: ["\u05DE\u05D5\u05E6\u05D9\u05D0\u05D9\u05DD \u05D0\u05EA \u05D4\u05E7\u05D5\u05D1\u05E5 \u05DE
|
|
878
|
-
prompt: "\u05D4\u05D5\u05E6\u05D0 \u05D0\u05EA \u05E7\u05D5\u05D1\u05E5 \u05D4
|
|
877
|
+
fix: ["\u05DE\u05D5\u05E6\u05D9\u05D0\u05D9\u05DD \u05D0\u05EA \u05D4\u05E7\u05D5\u05D1\u05E5 \u05DE\u05BEgit \u05D5\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05D0\u05D5\u05EA\u05D5 \u05DC\u05E8\u05E9\u05D9\u05DE\u05EA \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD \u05E9\u05BEgit \u05DE\u05EA\u05E2\u05DC\u05DD \u05DE\u05D4\u05DD.", "\u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05DB\u05DC \u05DE\u05E4\u05EA\u05D7 \u05E9\u05D4\u05D9\u05D4 \u05D1\u05E7\u05D5\u05D1\u05E5, \u05DB\u05D9 \u05D4\u05D5\u05D0 \u05DB\u05D1\u05E8 \u05E0\u05D7\u05E9\u05E3.", "\u05D0\u05EA \u05D4\u05E1\u05D5\u05D3\u05D5\u05EA \u05E9\u05D5\u05DE\u05E8\u05D9\u05DD \u05D1\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05D4\u05D0\u05EA\u05E8 \u05D1\u05BEDeployAI, \u05DC\u05D0 \u05D1\u05E7\u05D5\u05D3."],
|
|
878
|
+
prompt: "\u05D4\u05D5\u05E6\u05D0 \u05D0\u05EA \u05E7\u05D5\u05D1\u05E5 \u05D4\u05BEenv \u05DE\u05BEgit (git rm --cached), \u05D4\u05D5\u05E1\u05E3 .env* \u05DC .gitignore, \u05D5\u05D0\u05DE\u05D5\u05E8 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9 \u05DC\u05D4\u05D7\u05DC\u05D9\u05E3 \u05DB\u05DC \u05E1\u05D5\u05D3 \u05E9\u05D4\u05D9\u05D4 \u05D1\u05D5. \u05E1\u05D5\u05D3\u05D5\u05EA \u05E0\u05E9\u05DE\u05E8\u05D9\u05DD \u05D1\u05E2\u05DE\u05D5\u05D3 \u05D4\u05D0\u05EA\u05E8 \u05D1\u05BEDeployAI, \u05EA\u05D7\u05EA \u05D4\u05D2\u05D3\u05E8\u05D5\u05EA, \u05DE\u05E4\u05EA\u05D7\u05D5\u05EA \u05E1\u05D5\u05D3\u05D9\u05D9\u05DD."
|
|
879
879
|
},
|
|
880
880
|
en: {
|
|
881
881
|
what: "An env file with passwords and keys is saved in git, the version history of the code.",
|
|
@@ -900,8 +900,8 @@ var ISSUE_HELP = {
|
|
|
900
900
|
he: {
|
|
901
901
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E8\u05D9\u05E5 \u05E4\u05E7\u05D5\u05D3\u05D5\u05EA \u05DE\u05E2\u05E8\u05DB\u05EA \u05D0\u05D5 \u05EA\u05D5\u05DB\u05E0\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05EA \u05DE\u05EA\u05D5\u05DA \u05D4\u05E7\u05D5\u05D3.",
|
|
902
902
|
why: "\u05E2\u05DC \u05D4\u05E9\u05E8\u05EA\u05D9\u05DD \u05E9\u05DC\u05E0\u05D5 \u05D0\u05D9 \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D4\u05E4\u05E2\u05D9\u05DC \u05EA\u05D5\u05DB\u05E0\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05EA. \u05E8\u05E7 \u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8 \u05E2\u05E6\u05DE\u05D5 \u05E8\u05E5, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4.",
|
|
903
|
-
fix: ["\u05E2\u05D5\u05E9\u05D9\u05DD \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E2\u05D1\u05D5\u05D3\u05D4 \u05D1
|
|
904
|
-
prompt: "\u05D4\u05E9\u05E8\u05EA \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05E4\u05E2\u05D9\u05DC \u05EA\u05D5\u05DB\u05E0\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05EA. \u05D1\u05E6\u05E2 \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 \u05D1
|
|
903
|
+
fix: ["\u05E2\u05D5\u05E9\u05D9\u05DD \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E2\u05D1\u05D5\u05D3\u05D4 \u05D1\u05BEJavaScript.", "\u05D0\u05D5 \u05E4\u05D5\u05E0\u05D9\u05DD \u05DC\u05E9\u05D9\u05E8\u05D5\u05EA \u05D7\u05D9\u05E6\u05D5\u05E0\u05D9 \u05D3\u05E8\u05DA \u05D4\u05D0\u05D9\u05E0\u05D8\u05E8\u05E0\u05D8.", "\u05D0\u05D5 \u05DE\u05E2\u05D1\u05D9\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 \u05DC\u05E9\u05DC\u05D1 \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4."],
|
|
904
|
+
prompt: "\u05D4\u05E9\u05E8\u05EA \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05E4\u05E2\u05D9\u05DC \u05EA\u05D5\u05DB\u05E0\u05D5\u05EA \u05D0\u05D7\u05E8\u05D5\u05EA. \u05D1\u05E6\u05E2 \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 \u05D1\u05BEJavaScript, \u05E7\u05E8\u05D0 \u05DC\u05BEHTTP API \u05D1\u05DE\u05E7\u05D5\u05DD, \u05D0\u05D5 \u05D4\u05E2\u05D1\u05E8 \u05D0\u05D5\u05EA\u05D4 \u05DC\u05E9\u05DC\u05D1 \u05D4\u05BEbuild."
|
|
905
905
|
},
|
|
906
906
|
en: {
|
|
907
907
|
what: "The site runs system commands or other programs from its code.",
|
|
@@ -913,8 +913,8 @@ var ISSUE_HELP = {
|
|
|
913
913
|
he: {
|
|
914
914
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05DE\u05E4\u05E2\u05D9\u05DC \u05E9\u05E8\u05EA \u05DE\u05E9\u05DC\u05D5 \u05E9\u05DE\u05D0\u05D6\u05D9\u05DF \u05DC\u05E4\u05D5\u05E8\u05D8, \u05DC\u05DE\u05E9\u05DC \u05E2\u05DD Express.",
|
|
915
915
|
why: "\u05D0\u05E6\u05DC\u05E0\u05D5 \u05D0\u05D9\u05DF \u05E9\u05E8\u05EA \u05E9\u05E8\u05E5 \u05DB\u05DC \u05D4\u05D6\u05DE\u05DF. \u05D4\u05D0\u05EA\u05E8 \u05E8\u05E5 \u05E8\u05E7 \u05DB\u05E9\u05DE\u05D9\u05E9\u05D4\u05D5 \u05E0\u05DB\u05E0\u05E1, \u05D5\u05DC\u05DB\u05DF \u05E9\u05E8\u05EA \u05E9\u05DE\u05D0\u05D6\u05D9\u05DF \u05DC\u05E4\u05D5\u05E8\u05D8 \u05DC\u05D0 \u05D9\u05E2\u05D1\u05D5\u05D3.",
|
|
916
|
-
fix: ["\u05DE\u05E2\u05D1\u05D9\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05E0\u05EA\u05D9\u05D1\u05D9\u05DD \u05DC
|
|
917
|
-
prompt: "\u05E9\u05E8\u05EA \u05DE\u05D5\u05EA\u05D0\u05DD \u05E9\u05DE\u05D0\u05D6\u05D9\u05DF \u05DC\u05E4\u05D5\u05E8\u05D8 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05DB\u05D0\u05DF. \u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D9\u05D1\u05D9\u05DD \u05DC
|
|
916
|
+
fix: ["\u05DE\u05E2\u05D1\u05D9\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05E0\u05EA\u05D9\u05D1\u05D9\u05DD \u05DC\u05BEHono, \u05E9\u05D3\u05D5\u05DE\u05D4 \u05DE\u05D0\u05D5\u05D3 \u05DC\u05BEExpress \u05D5\u05E2\u05D5\u05D1\u05D3 \u05D0\u05E6\u05DC\u05E0\u05D5.", "\u05D0\u05D5 \u05DC\u05E0\u05EA\u05D9\u05D1\u05D9 API \u05E9\u05DC Astro.", "\u05DE\u05D5\u05D7\u05E7\u05D9\u05DD \u05D0\u05EA \u05D4\u05E9\u05D5\u05E8\u05D4 \u05E9\u05DE\u05E4\u05E2\u05D9\u05DC\u05D4 \u05D0\u05EA \u05D4\u05E9\u05E8\u05EA (app.listen)."],
|
|
917
|
+
prompt: "\u05E9\u05E8\u05EA \u05DE\u05D5\u05EA\u05D0\u05DD \u05E9\u05DE\u05D0\u05D6\u05D9\u05DF \u05DC\u05E4\u05D5\u05E8\u05D8 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E8\u05D5\u05E5 \u05DB\u05D0\u05DF. \u05D4\u05E2\u05D1\u05E8 \u05D0\u05EA \u05D4\u05E0\u05EA\u05D9\u05D1\u05D9\u05DD \u05DC\u05BEHono (\u05D3\u05D5\u05DE\u05D4 \u05DE\u05D0\u05D5\u05D3 \u05DC\u05BEExpress \u05D5\u05E8\u05E5 \u05E2\u05DC Cloudflare Workers) \u05D0\u05D5 \u05DC\u05E0\u05EA\u05D9\u05D1\u05D9 API \u05E9\u05DC Astro, \u05D5\u05D4\u05E1\u05E8 \u05D0\u05EA app.listen."
|
|
918
918
|
},
|
|
919
919
|
en: {
|
|
920
920
|
what: "The site starts its own server that listens on a port, for example with Express.",
|
|
@@ -926,8 +926,8 @@ var ISSUE_HELP = {
|
|
|
926
926
|
he: {
|
|
927
927
|
what: "\u05D1\u05E7\u05D5\u05D1\u05E5 package.json \u05D0\u05D9\u05DF \u05E4\u05E7\u05D5\u05D3\u05EA build, \u05D4\u05E4\u05E7\u05D5\u05D3\u05D4 \u05E9\u05D1\u05D5\u05E0\u05D4 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8.",
|
|
928
928
|
why: "\u05D6\u05D5 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05D1\u05DC\u05D9 \u05E4\u05E7\u05D5\u05D3\u05EA build \u05D0\u05E0\u05D7\u05E0\u05D5 \u05DC\u05D0 \u05D9\u05D5\u05D3\u05E2\u05D9\u05DD \u05D0\u05D9\u05DA \u05DC\u05D1\u05E0\u05D5\u05EA \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8, \u05D5\u05D0\u05DD \u05D4\u05D5\u05D0 \u05E6\u05E8\u05D9\u05DA \u05D1\u05E0\u05D9\u05D9\u05D4 \u05D4\u05D5\u05D0 \u05E2\u05DC\u05D5\u05DC \u05DC\u05D0 \u05DC\u05E2\u05D1\u05D5\u05D3.",
|
|
929
|
-
fix: ["\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05DC
|
|
930
|
-
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05DC
|
|
929
|
+
fix: ["\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05DC\u05BEpackage.json \u05E4\u05E7\u05D5\u05D3\u05EA build \u05E9\u05D1\u05D5\u05E0\u05D4 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8, \u05DC\u05DE\u05E9\u05DC vite build \u05D0\u05D5 astro build.", "\u05D0\u05EA\u05E8 HTML \u05E4\u05E9\u05D5\u05D8, \u05D1\u05DC\u05D9 \u05E9\u05DC\u05D1 \u05D1\u05E0\u05D9\u05D9\u05D4, \u05DC\u05D0 \u05E6\u05E8\u05D9\u05DA \u05D0\u05D5\u05EA\u05D4."],
|
|
930
|
+
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05DC\u05BEpackage.json \u05E1\u05E7\u05E8\u05D9\u05E4\u05D8 "build" \u05E9\u05D1\u05D5\u05E0\u05D4 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8, \u05DC\u05DE\u05E9\u05DC "vite build" \u05D0\u05D5 "astro build".'
|
|
931
931
|
},
|
|
932
932
|
en: {
|
|
933
933
|
what: "package.json has no build command, the command that builds the site.",
|
|
@@ -940,7 +940,7 @@ var ISSUE_HELP = {
|
|
|
940
940
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1\u05DB\u05DC\u05D9 \u05E9\u05DC\u05D0 \u05E8\u05E5 \u05D0\u05E6\u05DC\u05E0\u05D5, \u05DC\u05DE\u05E9\u05DC WordPress, PHP \u05D0\u05D5 Python.",
|
|
941
941
|
why: "\u05D4\u05D0\u05D7\u05E1\u05D5\u05DF \u05E9\u05DC\u05E0\u05D5 \u05DE\u05E8\u05D9\u05E5 \u05D0\u05EA\u05E8\u05D9\u05DD \u05DE\u05D5\u05DB\u05E0\u05D9\u05DD \u05D5\u05D0\u05EA\u05E8\u05D9\u05DD \u05D1\u05DB\u05DC\u05D9\u05DD \u05E9\u05DC JavaScript. \u05D0\u05EA\u05E8 \u05DB\u05D6\u05D4 \u05DC\u05D0 \u05D9\u05E2\u05DC\u05D4 \u05DB\u05DE\u05D5 \u05E9\u05D4\u05D5\u05D0.",
|
|
942
942
|
fix: ["\u05DE\u05D1\u05E7\u05E9\u05D9\u05DD \u05DE\u05D4\u05E1\u05D5\u05DB\u05DF \u05DC\u05D1\u05E0\u05D5\u05EA \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05DE\u05D7\u05D3\u05E9 \u05DB\u05DA \u05E9\u05D9\u05E8\u05D5\u05E5 \u05D0\u05E6\u05DC\u05E0\u05D5, \u05E2\u05DD \u05D0\u05D5\u05EA\u05DD \u05D3\u05E4\u05D9\u05DD, \u05D8\u05E7\u05E1\u05D8\u05D9\u05DD \u05D5\u05EA\u05DE\u05D5\u05E0\u05D5\u05EA.", "\u05D4\u05D0\u05EA\u05E8 \u05D4\u05D9\u05E9\u05DF \u05E0\u05E9\u05D0\u05E8 \u05DB\u05DE\u05D5 \u05E9\u05D4\u05D5\u05D0 \u05E2\u05D3 \u05E9\u05D0\u05EA\u05DD \u05DE\u05D0\u05E9\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05D7\u05D3\u05E9."],
|
|
943
|
-
prompt: "\u05D1\u05E0\u05D4 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05DE\u05D7\u05D3\u05E9 \u05DB\u05DA \u05E9\u05D9\u05E8\u05D5\u05E5 \u05D1
|
|
943
|
+
prompt: "\u05D1\u05E0\u05D4 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05DE\u05D7\u05D3\u05E9 \u05DB\u05DA \u05E9\u05D9\u05E8\u05D5\u05E5 \u05D1\u05BEDeployAI: HTML \u05E1\u05D8\u05D8\u05D9 \u05D0\u05DD \u05D0\u05D9\u05DF \u05D1\u05D5 \u05E7\u05D5\u05D3 \u05E9\u05E8\u05EA, \u05D0\u05D5 Astro \u05D0\u05D5 Hono \u05D0\u05DD \u05D9\u05E9 (\u05D8\u05E4\u05E1\u05D9\u05DD, \u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA, \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD). \u05E9\u05DE\u05D5\u05E8 \u05E2\u05DC \u05DB\u05DC \u05D4\u05D3\u05E4\u05D9\u05DD, \u05D4\u05D8\u05E7\u05E1\u05D8\u05D9\u05DD, \u05D4\u05EA\u05DE\u05D5\u05E0\u05D5\u05EA, \u05D4\u05E7\u05D9\u05E9\u05D5\u05E8\u05D9\u05DD \u05D5\u05D4\u05D8\u05E4\u05E1\u05D9\u05DD, \u05D5\u05D4\u05E2\u05D1\u05E8 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD \u05DC\u05BED1. \u05D1\u05E0\u05D4 \u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D7\u05D3\u05E9\u05D4, \u05D4\u05E8\u05E5 \u05E9\u05DD npx deployai@latest check, \u05D5\u05D4\u05E9\u05D0\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05D4\u05D9\u05E9\u05DF \u05E2\u05D3 \u05E9\u05D4\u05DE\u05E9\u05EA\u05DE\u05E9 \u05DE\u05D0\u05E9\u05E8 \u05D0\u05EA \u05D4\u05D7\u05D3\u05E9."
|
|
944
944
|
},
|
|
945
945
|
en: {
|
|
946
946
|
what: "The site is built with a tool we do not run, such as WordPress, PHP or Python.",
|
|
@@ -979,7 +979,7 @@ var ISSUE_HELP = {
|
|
|
979
979
|
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1\u05DB\u05DC\u05D9 \u05E9\u05D4\u05EA\u05DE\u05D9\u05DB\u05D4 \u05D1\u05D5 \u05D0\u05E6\u05DC\u05E0\u05D5 \u05E2\u05D3\u05D9\u05D9\u05DF \u05D1\u05E9\u05DC\u05D1 \u05D1\u05D8\u05D0.",
|
|
980
980
|
why: "\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4, \u05D5\u05D4\u05D0\u05EA\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E2\u05DC\u05D5\u05EA. \u05D4\u05DB\u05DC\u05D9 \u05E0\u05D1\u05E0\u05D4 \u05E2\u05DD \u05D4\u05DE\u05EA\u05D0\u05DD \u05D4\u05E8\u05E9\u05DE\u05D9 \u05E9\u05DC\u05D5, \u05D0\u05D1\u05DC \u05E2\u05D1\u05E8 \u05D0\u05E6\u05DC\u05E0\u05D5 \u05E4\u05D7\u05D5\u05EA \u05D1\u05D3\u05D9\u05E7\u05D5\u05EA.",
|
|
981
981
|
fix: ["\u05DC\u05D0 \u05E6\u05E8\u05D9\u05DA \u05DC\u05E9\u05E0\u05D5\u05EA \u05DB\u05DC\u05D5\u05DD.", "\u05D1\u05D5\u05D3\u05E7\u05D9\u05DD \u05D4\u05D9\u05D8\u05D1 \u05D0\u05EA \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05EA\u05E6\u05D5\u05D2\u05D4 \u05D4\u05DE\u05E7\u05D3\u05D9\u05DE\u05D4 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05DE\u05E2\u05DC\u05D9\u05DD \u05D0\u05EA \u05D4\u05D2\u05E8\u05E1\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8."],
|
|
982
|
-
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E2\u05DC\u05D5\u05EA, \u05E0\u05D1\u05E0\u05D4 \u05E2\u05DD \u05D4\u05DE\u05EA\u05D0\u05DD \u05D4\u05E8\u05E9\u05DE\u05D9 \u05E9\u05DC Cloudflare, \u05D0\u05D1\u05DC \u05D4\u05DB\u05DC\u05D9 \u05D4\u05D6\u05D4 \u05E2\u05D1\u05E8 \u05E4\u05D7\u05D5\u05EA \u05D1\u05D3\u05D9\u05E7\u05D5\u05EA \u05D1
|
|
982
|
+
prompt: "\u05D4\u05D0\u05EA\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E2\u05DC\u05D5\u05EA, \u05E0\u05D1\u05E0\u05D4 \u05E2\u05DD \u05D4\u05DE\u05EA\u05D0\u05DD \u05D4\u05E8\u05E9\u05DE\u05D9 \u05E9\u05DC Cloudflare, \u05D0\u05D1\u05DC \u05D4\u05DB\u05DC\u05D9 \u05D4\u05D6\u05D4 \u05E2\u05D1\u05E8 \u05E4\u05D7\u05D5\u05EA \u05D1\u05D3\u05D9\u05E7\u05D5\u05EA \u05D1\u05BEDeployAI. \u05E1\u05E4\u05E8 \u05E2\u05DC \u05D6\u05D4 \u05DC\u05DE\u05E9\u05EA\u05DE\u05E9, \u05D5\u05D1\u05D3\u05D5\u05E7 \u05D4\u05D9\u05D8\u05D1 \u05D0\u05EA \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05EA\u05E6\u05D5\u05D2\u05D4 \u05D4\u05DE\u05E7\u05D3\u05D9\u05DE\u05D4 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D2\u05E8\u05E1\u05D4 \u05E2\u05D5\u05DC\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8."
|
|
983
983
|
},
|
|
984
984
|
en: {
|
|
985
985
|
what: "The site is built with a tool whose support on DeployAI is still in beta.",
|
|
@@ -989,7 +989,7 @@ var ISSUE_HELP = {
|
|
|
989
989
|
},
|
|
990
990
|
astro_adapter_unsupported: {
|
|
991
991
|
he: {
|
|
992
|
-
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1
|
|
992
|
+
what: "\u05D4\u05D0\u05EA\u05E8 \u05D1\u05E0\u05D5\u05D9 \u05D1\u05BEAstro, \u05D0\u05D1\u05DC \u05DE\u05D5\u05D2\u05D3\u05E8 \u05E2\u05DD \u05DE\u05EA\u05D0\u05DD \u05DC\u05E9\u05E8\u05EA \u05DE\u05E1\u05D5\u05D2 \u05D0\u05D7\u05E8.",
|
|
993
993
|
why: "\u05D6\u05D5 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05D4\u05DE\u05EA\u05D0\u05DD \u05E7\u05D5\u05D1\u05E2 \u05D0\u05D9\u05E4\u05D4 \u05D4\u05D7\u05DC\u05E7\u05D9\u05DD \u05D4\u05D3\u05D9\u05E0\u05DE\u05D9\u05D9\u05DD \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8 \u05E8\u05E6\u05D9\u05DD, \u05D5\u05DE\u05EA\u05D0\u05DD \u05DC\u05D0 \u05DE\u05EA\u05D0\u05D9\u05DD \u05D9\u05DB\u05D5\u05DC \u05DC\u05E9\u05D1\u05D5\u05E8 \u05D0\u05D5\u05EA\u05DD.",
|
|
994
994
|
fix: ["\u05DC\u05D7\u05DC\u05E7\u05D9\u05DD \u05D3\u05D9\u05E0\u05DE\u05D9\u05D9\u05DD \u05DE\u05D7\u05DC\u05D9\u05E4\u05D9\u05DD \u05DC\u05DE\u05EA\u05D0\u05DD \u05E9\u05D0\u05E0\u05D7\u05E0\u05D5 \u05EA\u05D5\u05DE\u05DB\u05D9\u05DD \u05D1\u05D5. \u05D4\u05E1\u05D5\u05DB\u05DF \u05D9\u05D5\u05D3\u05E2 \u05D0\u05D9\u05D6\u05D4.", "\u05D0\u05EA\u05E8 \u05E1\u05D8\u05D8\u05D9 \u05DC\u05D2\u05DE\u05E8\u05D9 \u05DC\u05D0 \u05E6\u05E8\u05D9\u05DA \u05DE\u05EA\u05D0\u05DD \u05D1\u05DB\u05DC\u05DC."],
|
|
995
995
|
prompt: "\u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05DE\u05EA\u05D0\u05DD @astrojs/cloudflare \u05DC\u05E0\u05EA\u05D9\u05D1\u05D9 \u05E9\u05E8\u05EA, \u05D0\u05D5 \u05D4\u05E1\u05E8 \u05D0\u05EA \u05D4\u05DE\u05EA\u05D0\u05DD \u05DC\u05D0\u05EA\u05E8 \u05E1\u05D8\u05D8\u05D9 \u05DC\u05D2\u05DE\u05E8\u05D9."
|
|
@@ -1044,7 +1044,7 @@ var ISSUE_HELP = {
|
|
|
1044
1044
|
what: "\u05D9\u05E9 \u05D1\u05D8\u05D5\u05E4\u05E1 \u05E9\u05D3\u05D5\u05EA \u05D1\u05DC\u05D9 \u05EA\u05D5\u05D5\u05D9\u05EA \u05E9\u05D0\u05D5\u05DE\u05E8\u05EA \u05DE\u05D4 \u05E6\u05E8\u05D9\u05DA \u05DC\u05DE\u05DC\u05D0 \u05D1\u05D4\u05DD.",
|
|
1045
1045
|
why: '\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05E7\u05D5\u05E8\u05D0 \u05DE\u05E1\u05DA \u05DE\u05E7\u05E8\u05D9\u05D0 \u05E8\u05E7 "\u05E9\u05D3\u05D4 \u05E2\u05E8\u05D9\u05DB\u05D4", \u05D5\u05D4\u05D2\u05D5\u05DC\u05E9 \u05DC\u05D0 \u05D9\u05D5\u05D3\u05E2 \u05DE\u05D4 \u05DC\u05DB\u05EA\u05D5\u05D1. \u05D8\u05E7\u05E1\u05D8 \u05DC\u05D3\u05D5\u05D2\u05DE\u05D4 \u05D1\u05EA\u05D5\u05DA \u05D4\u05E9\u05D3\u05D4 \u05DC\u05D0 \u05DE\u05E1\u05E4\u05D9\u05E7, \u05DB\u05D9 \u05D4\u05D5\u05D0 \u05E0\u05E2\u05DC\u05DD \u05DB\u05E9\u05DE\u05EA\u05D7\u05D9\u05DC\u05D9\u05DD \u05DC\u05D4\u05E7\u05DC\u05D9\u05D3.',
|
|
1046
1046
|
fix: ["\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05DC\u05DB\u05DC \u05E9\u05D3\u05D4 \u05EA\u05D5\u05D5\u05D9\u05EA \u05D2\u05DC\u05D5\u05D9\u05D4 \u05E9\u05DE\u05D7\u05D5\u05D1\u05E8\u05EA \u05D0\u05DC\u05D9\u05D5.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1047
|
-
prompt: '\u05EA\u05DF \u05DC\u05DB\u05DC input, select \u05D5
|
|
1047
|
+
prompt: '\u05EA\u05DF \u05DC\u05DB\u05DC input, select \u05D5\u05BEtextarea \u05EA\u05D5\u05D5\u05D9\u05EA \u05D2\u05DC\u05D5\u05D9\u05D4 <label for="field-id"> \u05E9\u05DE\u05EA\u05D0\u05D9\u05DE\u05D4 \u05DC\u05BEid \u05E9\u05DC \u05D4\u05E9\u05D3\u05D4, \u05D0\u05D5 \u05E2\u05D8\u05D5\u05E3 \u05D0\u05EA \u05D4\u05E9\u05D3\u05D4 \u05D1 <label> \u05E9\u05DC\u05D5. \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BEaria-label \u05E8\u05E7 \u05DB\u05E9\u05D0\u05D9\u05DF \u05D0\u05E4\u05E9\u05E8\u05D5\u05EA \u05DC\u05EA\u05D5\u05D5\u05D9\u05EA \u05D2\u05DC\u05D5\u05D9\u05D4. placeholder \u05D4\u05D5\u05D0 \u05DC\u05D0 \u05EA\u05D5\u05D5\u05D9\u05EA.'
|
|
1048
1048
|
},
|
|
1049
1049
|
en: {
|
|
1050
1050
|
what: "A form has fields with no label that says what to fill in.",
|
|
@@ -1057,7 +1057,7 @@ var ISSUE_HELP = {
|
|
|
1057
1057
|
what: "\u05D9\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05DB\u05E4\u05EA\u05D5\u05E8\u05D9\u05DD \u05D1\u05DC\u05D9 \u05E9\u05DD, \u05D1\u05D3\u05E8\u05DA \u05DB\u05DC\u05DC \u05DB\u05E4\u05EA\u05D5\u05E8\u05D9\u05DD \u05E9\u05D9\u05E9 \u05D1\u05D4\u05DD \u05E8\u05E7 \u05E1\u05DE\u05DC.",
|
|
1058
1058
|
why: '\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05E7\u05D5\u05E8\u05D0 \u05DE\u05E1\u05DA \u05DE\u05E7\u05E8\u05D9\u05D0 \u05E8\u05E7 "\u05DB\u05E4\u05EA\u05D5\u05E8", \u05D5\u05D4\u05D2\u05D5\u05DC\u05E9 \u05DC\u05D0 \u05D9\u05D5\u05D3\u05E2 \u05DE\u05D4 \u05D4\u05DB\u05E4\u05EA\u05D5\u05E8 \u05E2\u05D5\u05E9\u05D4.',
|
|
1059
1059
|
fix: ['\u05E0\u05D5\u05EA\u05E0\u05D9\u05DD \u05DC\u05DB\u05DC \u05DB\u05E4\u05EA\u05D5\u05E8 \u05D8\u05E7\u05E1\u05D8, \u05D0\u05D5 \u05E9\u05DD \u05E0\u05E1\u05EA\u05E8 \u05DC\u05DB\u05E4\u05EA\u05D5\u05E8 \u05E9\u05D9\u05E9 \u05D1\u05D5 \u05E8\u05E7 \u05E1\u05DE\u05DC, \u05DC\u05DE\u05E9\u05DC "\u05E1\u05D2\u05D9\u05E8\u05EA \u05D4\u05EA\u05E4\u05E8\u05D9\u05D8".', "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1060
|
-
prompt: '\u05EA\u05DF \u05DC\u05DB\u05DC <button> \u05E9\u05DD \u05E9\u05E7\u05D5\u05E8\u05D0 \u05DE\u05E1\u05DA \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05E7\u05E8\u05D9\u05D0: \u05D8\u05E7\u05E1\u05D8 \u05D2\u05DC\u05D5\u05D9, \u05D0\u05D5 aria-label="..." \u05DC\u05DB\u05E4\u05EA\u05D5\u05E8 \u05E9\u05D9\u05E9 \u05D1\u05D5 \u05E8\u05E7 \u05E1\u05DE\u05DC (\u05DC\u05DE\u05E9\u05DC aria-label="\u05E1\u05D2\u05D9\u05E8\u05EA \u05D4\u05EA\u05E4\u05E8\u05D9\u05D8"). \u05E1\u05DE\u05DF \u05D0\u05EA \u05D4\u05E1\u05DE\u05DC \u05E9\u05D1\u05EA\u05D5\u05DB\u05D5 \u05D1
|
|
1060
|
+
prompt: '\u05EA\u05DF \u05DC\u05DB\u05DC <button> \u05E9\u05DD \u05E9\u05E7\u05D5\u05E8\u05D0 \u05DE\u05E1\u05DA \u05D9\u05DB\u05D5\u05DC \u05DC\u05D4\u05E7\u05E8\u05D9\u05D0: \u05D8\u05E7\u05E1\u05D8 \u05D2\u05DC\u05D5\u05D9, \u05D0\u05D5 aria-label="..." \u05DC\u05DB\u05E4\u05EA\u05D5\u05E8 \u05E9\u05D9\u05E9 \u05D1\u05D5 \u05E8\u05E7 \u05E1\u05DE\u05DC (\u05DC\u05DE\u05E9\u05DC aria-label="\u05E1\u05D2\u05D9\u05E8\u05EA \u05D4\u05EA\u05E4\u05E8\u05D9\u05D8"). \u05E1\u05DE\u05DF \u05D0\u05EA \u05D4\u05E1\u05DE\u05DC \u05E9\u05D1\u05EA\u05D5\u05DB\u05D5 \u05D1\u05BEaria-hidden="true".'
|
|
1061
1061
|
},
|
|
1062
1062
|
en: {
|
|
1063
1063
|
what: "The site has buttons with no name, usually buttons that show only an icon.",
|
|
@@ -1083,7 +1083,7 @@ var ISSUE_HELP = {
|
|
|
1083
1083
|
what: "\u05D4\u05DB\u05D5\u05EA\u05E8\u05D5\u05EA \u05D1\u05E2\u05DE\u05D5\u05D3 \u05DE\u05D3\u05DC\u05D2\u05D5\u05EA \u05E2\u05DC \u05E8\u05DE\u05D4, \u05DC\u05DE\u05E9\u05DC \u05DE\u05DB\u05D5\u05EA\u05E8\u05EA \u05DE\u05E9\u05E0\u05D4 \u05D9\u05E9\u05E8 \u05DC\u05DB\u05D5\u05EA\u05E8\u05EA \u05D1\u05E8\u05DE\u05D4 \u05E8\u05D1\u05D9\u05E2\u05D9\u05EA, \u05D0\u05D5 \u05E9\u05D0\u05D9\u05DF \u05D1\u05E2\u05DE\u05D5\u05D3 \u05DB\u05D5\u05EA\u05E8\u05EA \u05E8\u05D0\u05E9\u05D9\u05EA.",
|
|
1084
1084
|
why: "\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05D2\u05D5\u05DC\u05E9\u05D9\u05DD \u05E2\u05DD \u05E7\u05D5\u05E8\u05D0 \u05DE\u05E1\u05DA \u05E2\u05D5\u05D1\u05E8\u05D9\u05DD \u05D1\u05D9\u05DF \u05DB\u05D5\u05EA\u05E8\u05D5\u05EA \u05DB\u05D3\u05D9 \u05DC\u05D4\u05D1\u05D9\u05DF \u05D0\u05EA \u05DE\u05D1\u05E0\u05D4 \u05D4\u05E2\u05DE\u05D5\u05D3, \u05D5\u05D3\u05D9\u05DC\u05D5\u05D2 \u05E2\u05DC \u05E8\u05DE\u05D4 \u05E0\u05E8\u05D0\u05D4 \u05DC\u05D4\u05DD \u05DB\u05DE\u05D5 \u05D7\u05DC\u05E7 \u05D7\u05E1\u05E8.",
|
|
1085
1085
|
fix: ["\u05E0\u05D5\u05EA\u05E0\u05D9\u05DD \u05DC\u05DB\u05DC \u05E2\u05DE\u05D5\u05D3 \u05DB\u05D5\u05EA\u05E8\u05EA \u05E8\u05D0\u05E9\u05D9\u05EA \u05D0\u05D7\u05EA.", "\u05DE\u05E9\u05EA\u05DE\u05E9\u05D9\u05DD \u05D1\u05E8\u05DE\u05D5\u05EA \u05D4\u05DB\u05D5\u05EA\u05E8\u05D5\u05EA \u05DC\u05E4\u05D9 \u05D4\u05E1\u05D3\u05E8, \u05D5\u05D4\u05DE\u05E8\u05D0\u05D4 \u05E0\u05E9\u05D0\u05E8 \u05D0\u05D5\u05EA\u05D5 \u05D3\u05D1\u05E8.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1086
|
-
prompt: "\u05EA\u05DF \u05DC\u05DB\u05DC \u05E2\u05DE\u05D5\u05D3 <h1> \u05D0\u05D7\u05D3, \u05D5\u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05DB\u05D5\u05EA\u05E8\u05D5\u05EA \u05DC\u05E4\u05D9 \u05D4\u05E1\u05D3\u05E8 \u05D1\u05DC\u05D9 \u05DC\u05D3\u05DC\u05D2 \u05E2\u05DC \u05E8\u05DE\u05D4 (h2 \u05DE\u05EA\u05D7\u05EA \u05DC
|
|
1086
|
+
prompt: "\u05EA\u05DF \u05DC\u05DB\u05DC \u05E2\u05DE\u05D5\u05D3 <h1> \u05D0\u05D7\u05D3, \u05D5\u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05DB\u05D5\u05EA\u05E8\u05D5\u05EA \u05DC\u05E4\u05D9 \u05D4\u05E1\u05D3\u05E8 \u05D1\u05DC\u05D9 \u05DC\u05D3\u05DC\u05D2 \u05E2\u05DC \u05E8\u05DE\u05D4 (h2 \u05DE\u05EA\u05D7\u05EA \u05DC\u05BEh1, h3 \u05DE\u05EA\u05D7\u05EA \u05DC\u05BEh2). \u05D1\u05D7\u05E8 \u05D0\u05EA \u05E8\u05DE\u05EA \u05D4\u05DB\u05D5\u05EA\u05E8\u05EA \u05DC\u05E4\u05D9 \u05D4\u05DE\u05D1\u05E0\u05D4, \u05D5\u05E9\u05DE\u05D5\u05E8 \u05E2\u05DC \u05D0\u05D5\u05EA\u05D5 \u05DE\u05E8\u05D0\u05D4 \u05E2\u05DD CSS."
|
|
1087
1087
|
},
|
|
1088
1088
|
en: {
|
|
1089
1089
|
what: "The headings on a page skip a level, for example from a subheading straight to a fourth level heading, or the page has no main heading.",
|
|
@@ -1109,7 +1109,7 @@ var ISSUE_HELP = {
|
|
|
1109
1109
|
what: "\u05D9\u05E9 \u05D1\u05D0\u05EA\u05E8 \u05E8\u05DB\u05D9\u05D1\u05D9\u05DD \u05E9\u05DE\u05E9\u05E0\u05D9\u05DD \u05D1\u05DB\u05D5\u05D7 \u05D0\u05EA \u05E1\u05D3\u05E8 \u05D4\u05DE\u05E2\u05D1\u05E8 \u05D1\u05DE\u05E7\u05E9 Tab.",
|
|
1110
1110
|
why: "\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05DE\u05D9 \u05E9\u05D2\u05D5\u05DC\u05E9 \u05E2\u05DD \u05DE\u05E7\u05DC\u05D3\u05EA \u05E7\u05D5\u05E4\u05E5 \u05D1\u05D9\u05DF \u05D7\u05DC\u05E7\u05D9 \u05D4\u05E2\u05DE\u05D5\u05D3 \u05D1\u05E1\u05D3\u05E8 \u05DE\u05D1\u05DC\u05D1\u05DC, \u05E9\u05DC\u05D0 \u05DE\u05EA\u05D0\u05D9\u05DD \u05DC\u05DE\u05D4 \u05E9\u05D4\u05D5\u05D0 \u05E8\u05D5\u05D0\u05D4.",
|
|
1111
1111
|
fix: ["\u05DE\u05D1\u05D8\u05DC\u05D9\u05DD \u05D0\u05EA \u05E1\u05D3\u05E8 \u05D4\u05DE\u05E2\u05D1\u05E8 \u05D4\u05DE\u05D5\u05EA\u05D0\u05DD, \u05D5\u05DE\u05E1\u05D3\u05E8\u05D9\u05DD \u05D0\u05EA \u05D4\u05E8\u05DB\u05D9\u05D1\u05D9\u05DD \u05D1\u05E2\u05DE\u05D5\u05D3 \u05DC\u05E4\u05D9 \u05D4\u05E1\u05D3\u05E8 \u05D4\u05E0\u05DB\u05D5\u05DF.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1112
|
-
prompt: '\u05D4\u05E1\u05E8 \u05E2\u05E8\u05DB\u05D9 tabindex \u05D2\u05D3\u05D5\u05DC\u05D9\u05DD \u05DE 0. \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1
|
|
1112
|
+
prompt: '\u05D4\u05E1\u05E8 \u05E2\u05E8\u05DB\u05D9 tabindex \u05D2\u05D3\u05D5\u05DC\u05D9\u05DD \u05DE 0. \u05D4\u05E9\u05EA\u05DE\u05E9 \u05D1\u05BEtabindex="0" \u05DB\u05D3\u05D9 \u05E9\u05E8\u05DB\u05D9\u05D1 \u05DE\u05D5\u05EA\u05D0\u05DD \u05D9\u05E7\u05D1\u05DC \u05E4\u05D5\u05E7\u05D5\u05E1, \u05D5\u05E1\u05D3\u05E8 \u05D0\u05EA \u05D4\u05E8\u05DB\u05D9\u05D1\u05D9\u05DD \u05D1\u05E1\u05D3\u05E8 \u05D4\u05E0\u05DB\u05D5\u05DF \u05D1\u05BEHTML \u05D1\u05DE\u05E7\u05D5\u05DD \u05DC\u05DB\u05E4\u05D5\u05EA \u05E1\u05D3\u05E8.'
|
|
1113
1113
|
},
|
|
1114
1114
|
en: {
|
|
1115
1115
|
what: "The site has elements that force a custom order for the Tab key.",
|
|
@@ -1148,7 +1148,7 @@ var ISSUE_HELP = {
|
|
|
1148
1148
|
what: '\u05E2\u05DE\u05D5\u05D3 \u05D4\u05D1\u05D9\u05EA \u05DC\u05D0 \u05DE\u05EA\u05D7\u05D9\u05DC \u05D1\u05E7\u05D9\u05E9\u05D5\u05E8 "\u05D3\u05D9\u05DC\u05D5\u05D2 \u05DC\u05EA\u05D5\u05DB\u05DF" \u05E9\u05DE\u05D5\u05D1\u05D9\u05DC \u05D9\u05E9\u05E8 \u05DC\u05EA\u05D5\u05DB\u05DF \u05D4\u05E8\u05D0\u05E9\u05D9.',
|
|
1149
1149
|
why: "\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4. \u05DE\u05D9 \u05E9\u05D2\u05D5\u05DC\u05E9 \u05E2\u05DD \u05DE\u05E7\u05DC\u05D3\u05EA \u05E6\u05E8\u05D9\u05DA \u05DC\u05E2\u05D1\u05D5\u05E8 \u05E2\u05DC \u05DB\u05DC \u05D4\u05EA\u05E4\u05E8\u05D9\u05D8 \u05D1\u05DB\u05DC \u05E2\u05DE\u05D5\u05D3 \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D5\u05D0 \u05DE\u05D2\u05D9\u05E2 \u05DC\u05EA\u05D5\u05DB\u05DF.",
|
|
1150
1150
|
fix: ['\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05D1\u05EA\u05D7\u05D9\u05DC\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3 \u05E7\u05D9\u05E9\u05D5\u05E8 "\u05D3\u05D9\u05DC\u05D5\u05D2 \u05DC\u05EA\u05D5\u05DB\u05DF" \u05E9\u05DE\u05D5\u05E4\u05D9\u05E2 \u05E8\u05E7 \u05DB\u05E9\u05DE\u05D2\u05D9\u05E2\u05D9\u05DD \u05D0\u05DC\u05D9\u05D5 \u05D1\u05DE\u05E7\u05DC\u05D3\u05EA.', "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1151
|
-
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D3\u05D9\u05DC\u05D5\u05D2 \u05DB\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05E9\u05DE\u05E7\u05D1\u05DC \u05E4\u05D5\u05E7\u05D5\u05E1 \u05D1 <body>: <a href="#main" class="skip-link">\u05D3\u05D9\u05DC\u05D5\u05D2 \u05DC\u05EA\u05D5\u05DB\u05DF</a> \u05D1\u05E9\u05E4\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3, \u05D5
|
|
1151
|
+
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D3\u05D9\u05DC\u05D5\u05D2 \u05DB\u05E8\u05DB\u05D9\u05D1 \u05D4\u05E8\u05D0\u05E9\u05D5\u05DF \u05E9\u05DE\u05E7\u05D1\u05DC \u05E4\u05D5\u05E7\u05D5\u05E1 \u05D1 <body>: <a href="#main" class="skip-link">\u05D3\u05D9\u05DC\u05D5\u05D2 \u05DC\u05EA\u05D5\u05DB\u05DF</a> \u05D1\u05E9\u05E4\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3, \u05D5\u05BEid="main" \u05E2\u05DC \u05E8\u05DB\u05D9\u05D1 \u05D4 <main>. \u05D4\u05E1\u05EA\u05E8 \u05D0\u05D5\u05EA\u05D5 \u05E2\u05D3 \u05E9\u05D4\u05D5\u05D0 \u05DE\u05E7\u05D1\u05DC \u05E4\u05D5\u05E7\u05D5\u05E1 \u05DE\u05D4\u05DE\u05E7\u05DC\u05D3\u05EA, \u05D5\u05D0\u05D6 \u05D4\u05E6\u05D2 \u05D0\u05D5\u05EA\u05D5.'
|
|
1152
1152
|
},
|
|
1153
1153
|
en: {
|
|
1154
1154
|
what: 'The home page does not start with a "Skip to content" link that goes straight to the main content.',
|
|
@@ -1161,7 +1161,7 @@ var ISSUE_HELP = {
|
|
|
1161
1161
|
what: "\u05DC\u05D0 \u05DE\u05E6\u05D0\u05E0\u05D5 \u05D1\u05D0\u05EA\u05E8 \u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA, \u05D0\u05D5 \u05E9\u05D0\u05D9\u05DF \u05D0\u05DC\u05D9\u05D4 \u05E7\u05D9\u05E9\u05D5\u05E8 \u05DE\u05E2\u05DE\u05D5\u05D3 \u05D4\u05D1\u05D9\u05EA.",
|
|
1162
1162
|
why: "\u05D6\u05D5 \u05E8\u05E7 \u05D0\u05D6\u05D4\u05E8\u05D4, \u05D5\u05D4\u05D0\u05EA\u05E8 \u05D9\u05E2\u05DC\u05D4. \u05D0\u05D1\u05DC \u05D1\u05D9\u05E9\u05E8\u05D0\u05DC \u05D0\u05EA\u05E8 \u05E9\u05DC \u05E2\u05E1\u05E7 \u05E9\u05E0\u05D5\u05EA\u05DF \u05E9\u05D9\u05E8\u05D5\u05EA \u05DC\u05E6\u05D9\u05D1\u05D5\u05E8 \u05E6\u05E8\u05D9\u05DA \u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA \u05E9\u05E7\u05DC \u05DC\u05DE\u05E6\u05D5\u05D0, \u05D1\u05D3\u05E8\u05DA \u05DB\u05DC\u05DC \u05D1\u05EA\u05D7\u05EA\u05D9\u05EA \u05DB\u05DC \u05E2\u05DE\u05D5\u05D3.",
|
|
1163
1163
|
fix: ['\u05DE\u05D5\u05E1\u05D9\u05E4\u05D9\u05DD \u05E2\u05DE\u05D5\u05D3 "\u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA" \u05E2\u05DD \u05DE\u05D4 \u05E9\u05D4\u05D5\u05E0\u05D2\u05E9, \u05DE\u05D4 \u05E2\u05D5\u05D3 \u05DC\u05D0, \u05D5\u05E4\u05E8\u05D8\u05D9 \u05D4\u05E7\u05E9\u05E8 \u05E9\u05DC \u05E8\u05DB\u05D6 \u05D4\u05E0\u05D2\u05D9\u05E9\u05D5\u05EA.', "\u05DE\u05E7\u05E9\u05E8\u05D9\u05DD \u05D0\u05DC\u05D9\u05D5 \u05DE\u05D4\u05EA\u05D7\u05EA\u05D9\u05EA \u05E9\u05DC \u05DB\u05DC \u05E2\u05DE\u05D5\u05D3.", "\u05DE\u05E8\u05D9\u05E6\u05D9\u05DD \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05D1\u05D3\u05D9\u05E7\u05D4."],
|
|
1164
|
-
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3 \u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA (\u05DC\u05DE\u05E9\u05DC accessibility.html, \u05E2\u05DD \u05D4\u05DB\u05D5\u05EA\u05E8\u05EA "\u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA" \u05D1\u05D0\u05EA\u05E8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA) \u05D5\u05E7\u05E9\u05E8 \u05D0\u05DC\u05D9\u05D5 \u05DE\u05D4\u05EA\u05D7\u05EA\u05D9\u05EA \u05E9\u05DC \u05DB\u05DC \u05E2\u05DE\u05D5\u05D3. \u05D4\u05E2\u05DE\u05D5\u05D3 \u05D0\u05D5\u05DE\u05E8 \u05DE\u05D4 \u05D4\u05D5\u05E0\u05D2\u05E9, \u05DC\u05E4\u05D9 \u05D0\u05D9\u05D6\u05D4 \u05EA\u05E7\u05DF (\u05EA
|
|
1164
|
+
prompt: '\u05D4\u05D5\u05E1\u05E3 \u05E2\u05DE\u05D5\u05D3 \u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA (\u05DC\u05DE\u05E9\u05DC accessibility.html, \u05E2\u05DD \u05D4\u05DB\u05D5\u05EA\u05E8\u05EA "\u05D4\u05E6\u05D4\u05E8\u05EA \u05E0\u05D2\u05D9\u05E9\u05D5\u05EA" \u05D1\u05D0\u05EA\u05E8 \u05D1\u05E2\u05D1\u05E8\u05D9\u05EA) \u05D5\u05E7\u05E9\u05E8 \u05D0\u05DC\u05D9\u05D5 \u05DE\u05D4\u05EA\u05D7\u05EA\u05D9\u05EA \u05E9\u05DC \u05DB\u05DC \u05E2\u05DE\u05D5\u05D3. \u05D4\u05E2\u05DE\u05D5\u05D3 \u05D0\u05D5\u05DE\u05E8 \u05DE\u05D4 \u05D4\u05D5\u05E0\u05D2\u05E9, \u05DC\u05E4\u05D9 \u05D0\u05D9\u05D6\u05D4 \u05EA\u05E7\u05DF (\u05EA\u05F4\u05D9 5568, WCAG 2.0 \u05D1\u05E8\u05DE\u05D4 AA), \u05DE\u05D4 \u05E2\u05D5\u05D3 \u05DC\u05D0 \u05E0\u05D2\u05D9\u05E9, \u05DE\u05D9 \u05E8\u05DB\u05D6 \u05D4\u05E0\u05D2\u05D9\u05E9\u05D5\u05EA \u05E2\u05DD \u05D8\u05DC\u05E4\u05D5\u05DF \u05D5\u05DE\u05D9\u05D9\u05DC, \u05D5\u05DE\u05EA\u05D9 \u05D4\u05D4\u05E6\u05D4\u05E8\u05D4 \u05E2\u05D5\u05D3\u05DB\u05E0\u05D4 \u05DC\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4.'
|
|
1165
1165
|
},
|
|
1166
1166
|
en: {
|
|
1167
1167
|
what: "We did not find an accessibility statement on the site, or the home page does not link to it.",
|
|
@@ -20914,16 +20914,19 @@ var DeployResponse = external_exports.object({
|
|
|
20914
20914
|
/** Only for a heavy home page (D-420): the files it loads from the site and whether it prefetches links. */
|
|
20915
20915
|
page: external_exports.object({ files: external_exports.number(), prefetches: external_exports.boolean() }).optional()
|
|
20916
20916
|
});
|
|
20917
|
+
var VersionStatus = external_exports.enum(["queued", "building", "ready", "failed", "replaced"]);
|
|
20918
|
+
var MigrationStatus = external_exports.enum(["waiting", "queued", "running", "done", "failed"]);
|
|
20917
20919
|
var Version = external_exports.object({
|
|
20918
20920
|
id: external_exports.string(),
|
|
20919
20921
|
number: external_exports.number(),
|
|
20920
20922
|
message: external_exports.string(),
|
|
20921
|
-
status:
|
|
20923
|
+
status: VersionStatus,
|
|
20922
20924
|
isLive: external_exports.boolean(),
|
|
20923
20925
|
createdAt: external_exports.string(),
|
|
20924
20926
|
sizeBytes: external_exports.number(),
|
|
20925
20927
|
/** Why the build failed, in words the customer's AI can act on. Null unless status is failed. */
|
|
20926
|
-
error: external_exports.string().nullable().optional()
|
|
20928
|
+
error: external_exports.string().nullable().optional(),
|
|
20929
|
+
migrationStatus: MigrationStatus.nullable().optional()
|
|
20927
20930
|
});
|
|
20928
20931
|
var VersionsResponse = external_exports.object({ versions: external_exports.array(Version) });
|
|
20929
20932
|
var EnvSetRequest = external_exports.object({ projectId: external_exports.string(), key: external_exports.string(), value: external_exports.string(), secret: external_exports.boolean().default(true) });
|
|
@@ -20936,13 +20939,15 @@ var StatusResponse = external_exports.object({
|
|
|
20936
20939
|
project: Project,
|
|
20937
20940
|
queue: external_exports.object({ position: external_exports.number(), running: external_exports.boolean() }),
|
|
20938
20941
|
/** The newest version, with the error and the end of the build log when it failed. */
|
|
20939
|
-
latest: external_exports.object({ number: external_exports.number(), status:
|
|
20942
|
+
latest: external_exports.object({ number: external_exports.number(), status: VersionStatus, error: external_exports.string().nullable(), logTail: external_exports.string().nullable(), migrationStatus: MigrationStatus.nullable().optional() }).nullable().optional()
|
|
20940
20943
|
});
|
|
20941
20944
|
var ApiError = external_exports.object({
|
|
20942
20945
|
error: external_exports.string(),
|
|
20943
20946
|
messageHe: external_exports.string().optional(),
|
|
20944
20947
|
/** Where to buy what the call needs (D-206). */
|
|
20945
|
-
buyUrl: external_exports.string().optional()
|
|
20948
|
+
buyUrl: external_exports.string().optional(),
|
|
20949
|
+
/** The dashboard page that resolves the refusal, for example the SQL to approve. */
|
|
20950
|
+
url: external_exports.string().optional()
|
|
20946
20951
|
});
|
|
20947
20952
|
var AddonRunStatus = external_exports.enum(["todo", "served", "done", "failed", "skipped"]);
|
|
20948
20953
|
var AddonItem = external_exports.object({
|
|
@@ -21117,12 +21122,12 @@ var SITE = "site-<slug>";
|
|
|
21117
21122
|
var SITE_DATA = "dai-<project id>";
|
|
21118
21123
|
var ARCH_NODES = [
|
|
21119
21124
|
// Outside
|
|
21120
|
-
{ id: "browser", kind: "actor", zone: "outside", label: "\u05D3\u05E4\u05D3\u05E4\u05DF", labelEn: "Browser", summary: "\u05DC\u05E7\u05D5\u05D7\u05D5\u05EA \u05D5\u05D0\u05D3\u05DE\u05D9\u05E0\u05D9\u05DD \u05E4\u05D5\u05EA\u05D7\u05D9\u05DD \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8, \
|
|
21125
|
+
{ id: "browser", kind: "actor", zone: "outside", label: "\u05D3\u05E4\u05D3\u05E4\u05DF", labelEn: "Browser", summary: "\u05DC\u05E7\u05D5\u05D7\u05D5\u05EA \u05D5\u05D0\u05D3\u05DE\u05D9\u05E0\u05D9\u05DD \u05E4\u05D5\u05EA\u05D7\u05D9\u05DD \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8, \u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4 \u05D5\u05D4\u05D0\u05D3\u05DE\u05D9\u05DF.", summaryEn: "Customers and admins open the site, the dashboard and the admin." },
|
|
21121
21126
|
{ id: "cli", kind: "actor", zone: "outside", label: "deployai CLI", summary: "\u05D4\u05E1\u05D5\u05DB\u05DF \u05D0\u05D5 \u05D4\u05DC\u05E7\u05D5\u05D7 \u05DE\u05E8\u05D9\u05E6\u05D9\u05DD check \u05D5\u05BEdeploy, \u05D5\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05D1\u05E7\u05D5\u05D3 \u05DE\u05DB\u05E9\u05D9\u05E8.", summaryEn: "The agent or the customer runs check and deploy, and logs in with a device code.", code: ["packages/cli"], docs: ["docs/07-cli.md"] },
|
|
21122
21127
|
{ id: "board-watcher", kind: "actor", zone: "outside", label: "Board watcher", summary: "\u05E8\u05E5 \u05D0\u05E6\u05DC \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD (pnpm board:watch): \u05DC\u05D5\u05E7\u05D7 \u05DB\u05E8\u05D8\u05D9\u05E1 \u05DE\u05DC\u05D5\u05D7 \u05D4\u05E2\u05D1\u05D5\u05D3\u05D4 (\u05E8\u05E7 \u05DB\u05E9\u05D4\u05DE\u05EA\u05D2 \u05E9\u05DC\u05D5 \u05D1\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05E4\u05D5\u05E2\u05DC), \u05DE\u05E8\u05D9\u05E5 Claude Code \u05DC\u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05DC\u05D1\u05D3 \u05D5\u05DE\u05D7\u05D6\u05D9\u05E8 \u05EA\u05D5\u05DB\u05E0\u05D9\u05EA. \u05DB\u05E8\u05D8\u05D9\u05E1 \u05E2\u05DD \u05D1\u05E0\u05D9\u05D9\u05D4 \u05D0\u05D5\u05D8\u05D5\u05DE\u05D8\u05D9\u05EA \u05E9\u05D0\u05D5\u05E9\u05E8 \u05E0\u05D1\u05E0\u05D4 \u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05EA \u05D4\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8, \u05D0\u05D7\u05D3 \u05D1\u05DB\u05DC \u05E4\u05E2\u05DD. \u05D4\u05D5\u05D0 \u05D2\u05DD \u05DB\u05D5\u05EA\u05D1 \u05D2\u05E8\u05E1\u05D0\u05D5\u05EA \u05D7\u05D3\u05E9\u05D5\u05EA \u05DC\u05E1\u05E4\u05E8\u05D9\u05D9\u05EA \u05D4\u05E4\u05E8\u05D5\u05DE\u05E4\u05D8\u05D9\u05DD \u05DC\u05E4\u05D9 \u05D4\u05E2\u05E8\u05D5\u05EA \u05D4\u05D1\u05E2\u05DC\u05D9\u05DD, \u05DC\u05D1\u05D3\u05D9\u05E7\u05D4 \u05D5\u05E4\u05E8\u05E1\u05D5\u05DD.", summaryEn: "Runs on the owner computer (pnpm board:watch): claims a work board ticket (only while its settings switch is on), runs Claude Code read only and posts a plan back. An approved auto build ticket is built in the project folder, one at a time. It also writes new versions of prompt library prompts from the owner notes, for review and publishing.", code: ["scripts/board-watch.ts", "scripts/prompts-sync.ts"], env: ["BOARD_RUNNER_TOKEN", "BOARD_URL"], decisions: ["D-110", "D-127", "D-182", "D-250"] },
|
|
21123
21128
|
{ id: "visitor", kind: "actor", zone: "outside", label: "\u05DE\u05D1\u05E7\u05E8 \u05D1\u05D0\u05EA\u05E8", labelEn: "Site visitor", summary: "\u05DE\u05D1\u05E7\u05E8 \u05D1\u05D0\u05EA\u05E8 \u05E9\u05DC \u05DC\u05E7\u05D5\u05D7 \u05D1\u05DB\u05EA\u05D5\u05D1\u05EA <slug>.<\u05D3\u05D5\u05DE\u05D9\u05D9\u05DF \u05D0\u05EA\u05E8\u05D9\u05DD> (\u05DB\u05DE\u05D5 deploy-net.com \u05D0\u05D5 freesite.click) \u05D0\u05D5 \u05D1\u05D3\u05D5\u05DE\u05D9\u05D9\u05DF \u05DE\u05E9\u05DC\u05D5.", summaryEn: "A visitor on a customer site at <slug>.<a sites domain> (like deploy-net.com or freesite.click) or on their own domain." },
|
|
21124
21129
|
// Platform
|
|
21125
|
-
{ id: "web", kind: "app", zone: "platform", label: "Web app (Next.js)", summary: "\u05D0\u05EA\u05E8 \u05D4\u05E9\u05D9\u05D5\u05D5\u05E7, \
|
|
21130
|
+
{ id: "web", kind: "app", zone: "platform", label: "Web app (Next.js)", summary: "\u05D0\u05EA\u05E8 \u05D4\u05E9\u05D9\u05D5\u05D5\u05E7, \u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4, \u05D4\u05D0\u05D3\u05DE\u05D9\u05DF \u05D5\u05D4\u05BEAPI \u05E9\u05DC \u05D4\u05BECLI. \u05DE\u05DB\u05E0\u05D9\u05E1 \u05E2\u05D1\u05D5\u05D3\u05D5\u05EA \u05DC\u05EA\u05D5\u05E8.", summaryEn: "The marketing site, the dashboard, the admin and the CLI API. Puts jobs in the queue.", code: ["apps/web/src/app", "apps/web/src/server"], env: ["DEPLOYAI_SPACE", "BETTER_AUTH_SECRET", "NEXT_PUBLIC_SUPPORT_WHATSAPP", "DEV_SUPERADMIN_PASSWORD"], portability: "Our app (site, dashboard, API, builds)", docs: ["docs/04-architecture.md"], decisions: ["D-020", "D-057", "D-104", "D-149", "D-238", "D-293"] },
|
|
21126
21131
|
{ id: "queue", kind: "db", zone: "platform", label: "pg-boss queue", summary: "\u05DB\u05DC \u05DE\u05D4 \u05E9\u05D0\u05D9\u05D8\u05D9 \u05D0\u05D5 \u05E0\u05D5\u05D2\u05E2 \u05D1\u05BECloudflare \u05E8\u05E5 \u05DB\u05E2\u05D1\u05D5\u05D3\u05D4 \u05D1\u05EA\u05D5\u05E8.", summaryEn: "Everything slow or that touches Cloudflare runs as a job in the queue.", code: ["apps/web/src/server/queue.ts"], portability: "Job queue", decisions: ["D-058"] },
|
|
21127
21132
|
{ id: "worker", kind: "app", zone: "platform", label: "Job worker", summary: "\u05EA\u05D4\u05DC\u05D9\u05DA \u05E0\u05E4\u05E8\u05D3 \u05E9\u05DE\u05E8\u05D9\u05E5 \u05D0\u05EA \u05D4\u05E2\u05D1\u05D5\u05D3\u05D5\u05EA \u05DE\u05D4\u05EA\u05D5\u05E8: \u05D1\u05E0\u05D9\u05D9\u05D4, \u05D4\u05E2\u05DC\u05D0\u05D4, \u05E0\u05D9\u05EA\u05D5\u05D1, \u05D1\u05D9\u05E7\u05D5\u05E8\u05D9\u05DD, \u05E2\u05DC\u05D5\u05D9\u05D5\u05EA \u05D5\u05DE\u05D9\u05D9\u05DC\u05D9\u05DD \u05DC\u05DE\u05E9\u05E4\u05DA (pnpm worker, \u05D0\u05D5 pnpm worker:public \u05DE\u05D0\u05D7\u05D5\u05E8\u05D9 \u05D4\u05BEtunnel).", summaryEn: "A separate process that runs the queued jobs: build, upload, routing, visits, costs and lifecycle emails (pnpm worker, or pnpm worker:public behind the tunnel).", code: ["apps/web/src/server/worker.ts", "apps/web/src/server/jobs.ts", "apps/web/src/server/site-data.ts", "apps/web/src/server/lifecycle", "apps/web/src/server/host-report.ts"], env: ["BUILD_SLOTS", "LIFECYCLE_NOW", "A11Y_RENDER", "DOCKER_HOST", "HOST_REPORT_PATH"], decisions: ["D-058", "D-148", "D-180", "D-340"] },
|
|
21128
21133
|
{ id: "build", kind: "app", zone: "platform", label: "Build service (Docker)", summary: "\u05E7\u05D5\u05E0\u05D8\u05D9\u05D9\u05E0\u05E8 \u05D7\u05D3\u05E9 \u05DC\u05DB\u05DC \u05E9\u05DC\u05D1, \u05D1\u05DC\u05D9 \u05E1\u05D5\u05D3\u05D5\u05EA. \u05D1\u05D5\u05E0\u05D4 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC \u05D4\u05DC\u05E7\u05D5\u05D7 \u05DC\u05E7\u05D5\u05D1\u05E5 Worker.", summaryEn: "A fresh container for every step, with no secrets. Builds the customer's code into a Worker file.", code: ["apps/web/src/server/build.ts"], env: ["BUILD_MODE"] },
|
|
@@ -21132,17 +21137,17 @@ var ARCH_NODES = [
|
|
|
21132
21137
|
{ id: "email-sending", kind: "external", zone: "services", label: "CF Email Sending", summary: "\u05E9\u05DC\u05D9\u05D7\u05EA \u05DE\u05D9\u05D9\u05DC\u05D9\u05DD \u05D3\u05E8\u05DA Cloudflare Email Sending. \u05D1\u05DC\u05D9 \u05D8\u05D5\u05E7\u05DF \u05D4\u05DE\u05D9\u05D9\u05DC \u05DE\u05D5\u05D3\u05E4\u05E1 \u05D1\u05DC\u05D5\u05D2.", summaryEn: "Sends email through Cloudflare Email Sending. Without a token, the email is printed to the log.", code: ["apps/web/src/server/email.ts"], portability: "Emails" },
|
|
21133
21138
|
{ id: "oauth", kind: "external", zone: "services", label: "Google / GitHub OAuth", summary: "\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05E2\u05DD Google \u05D0\u05D5 GitHub \u05D3\u05E8\u05DA Better Auth.", summaryEn: "Log in with Google or GitHub through Better Auth.", code: ["apps/web/src/server/auth.ts"], env: ["GOOGLE_CLIENT_ID", "GOOGLE_CLIENT_SECRET", "GITHUB_CLIENT_ID", "GITHUB_CLIENT_SECRET"], decisions: ["D-020"] },
|
|
21134
21139
|
{ id: "payments", kind: "external", zone: "services", label: "Payment provider (Cardcom)", summary: "\u05E7\u05D0\u05E8\u05D3\u05E7\u05D5\u05DD \u05DB\u05D1\u05E8\u05D9\u05E8\u05EA \u05DE\u05D7\u05D3\u05DC, \u05D5\u05E0\u05D1\u05D7\u05E8 \u05D1\u05D4\u05D2\u05D3\u05E8\u05D5\u05EA \u05D4\u05D0\u05D3\u05DE\u05D9\u05DF (\u05D0\u05D5 \u05DE\u05D3\u05D5\u05DE\u05D4 \u05DC\u05D1\u05D3\u05D9\u05E7\u05D5\u05EA). \u05D4\u05DB\u05E8\u05D8\u05D9\u05E1 \u05DE\u05D5\u05E7\u05DC\u05D3 \u05D1\u05D3\u05E3 \u05D4\u05DE\u05D0\u05D5\u05D1\u05D8\u05D7 \u05E9\u05DC \u05E7\u05D0\u05E8\u05D3\u05E7\u05D5\u05DD \u05D5\u05E0\u05E9\u05DE\u05E8 \u05DB\u05D8\u05D5\u05E7\u05DF \u05DE\u05D5\u05E6\u05E4\u05DF, \u05DB\u05DC \u05D7\u05D9\u05D5\u05D1 \u05E2\u05DD \u05DE\u05E4\u05EA\u05D7 \u05D0\u05D9\u05D3\u05DE\u05E4\u05D5\u05D8\u05E0\u05D8\u05D9\u05D5\u05EA, \u05D5\u05E7\u05D0\u05E8\u05D3\u05E7\u05D5\u05DD \u05DE\u05E4\u05D9\u05E7\u05D4 \u05D7\u05E9\u05D1\u05D5\u05E0\u05D9\u05EA \u05DE\u05E1 \u05DC\u05DB\u05DC \u05D7\u05D9\u05D5\u05D1 \u05D5\u05D7\u05E9\u05D1\u05D5\u05E0\u05D9\u05EA \u05D6\u05D9\u05DB\u05D5\u05D9 \u05DC\u05DB\u05DC \u05D4\u05D7\u05D6\u05E8.", summaryEn: "Cardcom by default, chosen in admin settings (or simulated for tests). The card is typed on the secure Cardcom page and saved as a sealed token, every charge carries an idempotency key, and Cardcom issues a tax invoice per charge and a credit invoice per refund.", code: ["apps/web/src/server/billing/provider.ts", "apps/web/src/server/billing/cardcom.ts", "apps/web/src/server/billing/card-pages.ts", "apps/web/src/app/api/billing/card"], env: ["BILLING_PROVIDER", "BILLING_MOCK_FAIL", "CARDCOM_TERMINAL", "CARDCOM_API_NAME", "CARDCOM_API_PASSWORD", "CARDCOM_INVOICES", "CARDCOM_CSS_URL", "CARDCOM_TOKEN_KEY", "CARDCOM_DEPARTMENT_ID"], portability: "Payments", decisions: ["D-175", "D-292"] },
|
|
21135
|
-
{ id: "registrar", kind: "external", zone: "services", label: "Domain
|
|
21136
|
-
{ id: "mcp", kind: "external", zone: "services", label: "MCP for AI tools (/api/mcp)", summary: "ChatGPT \u05D5
|
|
21140
|
+
{ id: "registrar", kind: "external", zone: "services", label: "Domain registrars (Cloudflare, LiveDNS)", summary: "\u05E7\u05E0\u05D9\u05D9\u05EA \u05D3\u05D5\u05DE\u05D9\u05D9\u05E0\u05D9\u05DD \u05DC\u05D0\u05EA\u05E8: \u05DB\u05DC \u05E9\u05DD \u05D4\u05D5\u05DC\u05DA \u05DC\u05E8\u05E9\u05DD \u05D4\u05D6\u05D5\u05DC \u05D1\u05D9\u05D5\u05EA\u05E8 \u05E9\u05E4\u05D5\u05E2\u05DC (Cloudflare \u05D1\u05D3\u05D5\u05DC\u05E8\u05D9\u05DD, LiveDNS \u05DC\u05D9\u05E9\u05E8\u05D0\u05DC\u05D9\u05D9\u05DD \u05DE\u05E7\u05E8\u05D3\u05D9\u05D8 \u05D1\u05E9\u05E7\u05DC\u05D9\u05DD, \u05D0\u05D5 \u05D9\u05D3\u05E0\u05D9 \u05DE\u05EA\u05D5\u05E8 \u05D4\u05E6\u05D5\u05D5\u05EA), \u05E8\u05D9\u05E9\u05D5\u05DD \u05D0\u05D7\u05D3 \u05DC\u05DB\u05DC \u05D4\u05D6\u05DE\u05E0\u05D4, \u05D9\u05D5\u05DE\u05DF \u05E7\u05E8\u05D9\u05D0\u05D5\u05EA \u05DC\u05DB\u05DC \u05D4\u05D6\u05DE\u05E0\u05D4, \u05D5\u05D7\u05D9\u05D3\u05D5\u05E9 \u05E9\u05E0\u05EA\u05D9 \u05D0\u05E6\u05DC \u05D0\u05D5\u05EA\u05D5 \u05E8\u05E9\u05DD. \u05DC\u05D3\u05D5\u05DE\u05D9\u05D9\u05DF \u05E9\u05E0\u05E7\u05E0\u05D4: \u05D3\u05D5\u05D0\u05E8 \u05D3\u05E8\u05DA Cloudflare Email Routing.", summaryEn: "Buying domains for a site: each name goes to the cheapest registrar that is on (Cloudflare in dollars, LiveDNS for Israeli names from shekel credit, or by hand from the team queue), one registration per order, a call log per order, yearly renewal at the same registrar. For a bought domain: email through Cloudflare Email Routing.", code: ["apps/web/src/server/registrar.ts", "apps/web/src/server/registrar-livedns.ts", "apps/web/src/server/registrar-log.ts", "apps/web/src/server/domain-sales.ts", "apps/web/src/server/domain-email.ts", "apps/web/src/server/billing/services.ts"], env: ["CF_REGISTRAR_TOKEN", "LIVEDNS_USER", "LIVEDNS_PASSWORD"], decisions: ["D-299", "D-300", "D-301", "D-458"] },
|
|
21141
|
+
{ id: "mcp", kind: "external", zone: "services", label: "MCP for AI tools (/api/mcp)", summary: "ChatGPT \u05D5\u05BEClaude \u05DE\u05EA\u05D7\u05D1\u05E8\u05D9\u05DD \u05D1\u05DC\u05D9 \u05D8\u05E8\u05DE\u05D9\u05E0\u05DC: OAuth \u05E2\u05DD \u05D0\u05D9\u05E9\u05D5\u05E8 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF, \u05D5\u05D0\u05D6 \u05DB\u05DC\u05D9\u05DD \u05DC\u05E8\u05E9\u05D9\u05DE\u05EA \u05D4\u05D0\u05EA\u05E8\u05D9\u05DD, \u05D1\u05D3\u05D9\u05E7\u05D4, \u05D4\u05E2\u05DC\u05D0\u05EA \u05D2\u05E8\u05E1\u05D4 \u05DC\u05EA\u05E6\u05D5\u05D2\u05D4 \u05DE\u05E7\u05D3\u05D9\u05DE\u05D4, \u05D4\u05E8\u05E6\u05EA \u05EA\u05D5\u05E1\u05E4\u05D9\u05DD \u05E9\u05D4\u05D0\u05EA\u05E8 \u05E7\u05E0\u05D4 (\u05D4\u05E7\u05E0\u05D9\u05D9\u05D4 \u05E8\u05E7 \u05D1\u05D0\u05EA\u05E8), \u05D5\u05D4\u05E2\u05DC\u05D0\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8 \u05E8\u05E7 \u05E2\u05DD \u05D4\u05E8\u05E9\u05D0\u05D4 \u05D5\u05D0\u05D9\u05E9\u05D5\u05E8.", summaryEn: "ChatGPT and Claude connect without a terminal: OAuth with a browser consent, then tools to list sites, check, upload a version to a preview, run add-ons the site owns (buying stays on the site), and go live only with the permission and a yes.", code: ["apps/web/src/app/api/mcp/route.ts", "apps/web/src/server/mcp-tools.ts", "apps/web/src/server/auth.ts"], decisions: ["D-302"] },
|
|
21137
21142
|
{ id: "npm", kind: "external", zone: "services", label: "npm registry", summary: "\u05DE\u05E4\u05D9\u05E5 \u05D0\u05EA \u05D4\u05BECLI, \u05D5\u05DE\u05DE\u05E0\u05D5 \u05D4\u05D1\u05E0\u05D9\u05D9\u05D4 \u05DE\u05EA\u05E7\u05D9\u05E0\u05D4 \u05EA\u05DC\u05D5\u05D9\u05D5\u05EA.", summaryEn: "Distributes the CLI, and the build installs dependencies from it." },
|
|
21138
|
-
{ id: "pagespeed", kind: "external", zone: "services", label: "Google PageSpeed Insights", summary: "\u05D1\u05D3\u05D9\u05E7\u05D5\u05EA \u05D4\u05DE\u05D4\u05D9\u05E8\u05D5\u05EA, \u05D4\u05E0\u05D2\u05D9\u05E9\u05D5\u05EA \u05D5\u05D4
|
|
21143
|
+
{ id: "pagespeed", kind: "external", zone: "services", label: "Google PageSpeed Insights", summary: "\u05D1\u05D3\u05D9\u05E7\u05D5\u05EA \u05D4\u05DE\u05D4\u05D9\u05E8\u05D5\u05EA, \u05D4\u05E0\u05D2\u05D9\u05E9\u05D5\u05EA \u05D5\u05D4\u05BESEO \u05D4\u05D7\u05D9\u05E0\u05DE\u05D9\u05D5\u05EA: Lighthouse \u05D1\u05DE\u05E2\u05D1\u05D3\u05D4 \u05E9\u05DC \u05D2\u05D5\u05D2\u05DC (\u05DB\u05D5\u05DC\u05DC \u05E1\u05D5\u05DB\u05E0\u05D9 AI) \u05D5\u05E0\u05EA\u05D5\u05E0\u05D9 \u05DE\u05D1\u05E7\u05E8\u05D9\u05DD \u05D0\u05DE\u05D9\u05EA\u05D9\u05D9\u05DD.", summaryEn: "The free speed, accessibility and SEO tests: Lighthouse run at Google (AI agents included) plus real visitor data.", env: ["PAGESPEED_API_KEY"], decisions: ["D-199", "D-222"] },
|
|
21139
21144
|
{ id: "turnstile", kind: "external", zone: "services", label: "CF Turnstile", summary: '\u05D1\u05D3\u05D9\u05E7\u05EA "\u05D4\u05D0\u05DD \u05D0\u05EA\u05DD \u05D1\u05E0\u05D9 \u05D0\u05D3\u05DD" \u05D1\u05D8\u05E4\u05E1\u05D9 \u05D4\u05DB\u05DC\u05D9\u05DD \u05D4\u05D7\u05D9\u05E0\u05DE\u05D9\u05D9\u05DD, \u05D1\u05DC\u05D9 \u05E4\u05D0\u05D6\u05DC\u05D9\u05DD \u05DC\u05E8\u05D5\u05D1 \u05D4\u05DE\u05D1\u05E7\u05E8\u05D9\u05DD.', summaryEn: 'The "are you human" check on the free tool forms, with no puzzle for most visitors.', env: ["TURNSTILE_SITE_KEY", "TURNSTILE_SECRET"], decisions: ["D-199"] },
|
|
21140
21145
|
// Cloudflare
|
|
21141
|
-
{ id: "tunnel", kind: "cf-resource", zone: "cloudflare", label: "Cloudflare Tunnel", summary: "\u05D4\u05D9\u05D5\u05DD \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05E8\u05E6\u05D4 \u05E2\u05DC \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4 \u05D5\u05E0\u05D7\u05E9\u05E4\u05EA \u05D3\u05E8\u05DA dev.deployai.co.il (pnpm tunnel, \u05D0\u05D5 \u05D4\u05DB\u05DC \u05D9\u05D7\u05D3 \u05D1\u05BEpnpm dev:public).", summaryEn: "Today the app runs on this computer and is exposed through dev.deployai.co.il (pnpm tunnel, or everything at once with pnpm dev:public).", code: ["scripts/dev-public.ts"], env: ["TUNNEL_ORIGIN_CERT"], decisions: ["D-089", "D-148"] },
|
|
21142
|
-
{ id: "cfapi", kind: "external", zone: "cloudflare", label: "Cloudflare API", summary: "\u05DB\u05DC \u05E4\u05E2\u05D5\u05DC\u05D4 \u05DE\u05D5\u05DC Cloudflare \u05E2\u05D5\u05D1\u05E8\u05EA \u05D1\u05BEREST API \u05E2\u05DD \u05D3\u05DC\u05D9 \u05D8\u05D5\u05E7\u05E0\u05D9\u05DD \u05DE\u05E9\u05D5\u05EA\u05E3. \u05D1\u05DC\u05D9 Wrangler.", summaryEn: "Every Cloudflare action goes through the REST API with a shared token bucket. No Wrangler.", code: ["apps/web/src/server/cloudflare.ts", "scripts/cf-setup.ts"], env: ["CF_API_TOKEN"], docs: ["docs/10-cloudflare-reference.md"], decisions: ["D-007", "D-031", "D-058"] },
|
|
21146
|
+
{ id: "tunnel", kind: "cf-resource", zone: "cloudflare", label: "Cloudflare Tunnel", summary: "\u05D4\u05D9\u05D5\u05DD \u05D4\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4 \u05E8\u05E6\u05D4 \u05E2\u05DC \u05D4\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4 \u05D5\u05E0\u05D7\u05E9\u05E4\u05EA \u05D3\u05E8\u05DA dev.deployai.co.il (pnpm tunnel, \u05D0\u05D5 \u05D4\u05DB\u05D5\u05DC \u05D9\u05D7\u05D3 \u05D1\u05BEpnpm dev:public).", summaryEn: "Today the app runs on this computer and is exposed through dev.deployai.co.il (pnpm tunnel, or everything at once with pnpm dev:public).", code: ["scripts/dev-public.ts"], env: ["TUNNEL_ORIGIN_CERT"], decisions: ["D-089", "D-148"] },
|
|
21147
|
+
{ id: "cfapi", kind: "external", zone: "cloudflare", label: "Cloudflare API", summary: "\u05DB\u05DC \u05E4\u05E2\u05D5\u05DC\u05D4 \u05DE\u05D5\u05DC Cloudflare \u05E2\u05D5\u05D1\u05E8\u05EA \u05D1\u05BEREST API \u05E2\u05DD \u05D3\u05DC\u05D9 \u05D8\u05D5\u05E7\u05E0\u05D9\u05DD \u05DE\u05E9\u05D5\u05EA\u05E3. \u05D1\u05DC\u05D9 Wrangler.", summaryEn: "Every Cloudflare action goes through the REST API with a shared token bucket. No Wrangler.", code: ["apps/web/src/server/cloudflare.ts", "scripts/cf-setup.ts", "apps/web/src/server/admin-geo.ts"], env: ["CF_API_TOKEN", "ADMIN_GEO_MANAGE"], docs: ["docs/10-cloudflare-reference.md"], decisions: ["D-007", "D-031", "D-058", "D-455"] },
|
|
21143
21148
|
{ id: "demos", kind: "worker", zone: "cloudflare", label: "deployai-demos", summary: "\u05D4\u05D3\u05DE\u05D5\u05D0\u05D9\u05DD \u05D1\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05DB\u05DE\u05D5 shop.deploy-net.com, \u05E2\u05DC \u05DB\u05DC \u05D3\u05D5\u05DE\u05D9\u05D9\u05DF \u05D0\u05EA\u05E8\u05D9\u05DD: \u05DE\u05D5\u05E9\u05DA \u05D0\u05EA /demo/<key> \u05DE\u05D4\u05D0\u05EA\u05E8 \u05E9\u05DC\u05E0\u05D5 \u05D5\u05DE\u05E1\u05D9\u05E8 \u05D0\u05EA \u05D4\u05E7\u05D9\u05D3\u05D5\u05DE\u05EA, noindex.", summaryEn: "The demos on hosts like shop.deploy-net.com, on every sites domain: fetches /demo/<key> from our site and strips the prefix, noindex.", code: ["workers/demos/src", "scripts/deploy-demos.ts", "packages/shared/src/demos.ts"], env: ["CHROME_PATH", "SHOTS_BASE"], docs: ["workers/demos/README.md"], decisions: ["D-112", "D-293"] },
|
|
21144
21149
|
{ id: "tools-worker", kind: "worker", zone: "cloudflare", label: "deployai-tools", summary: "\u05DE\u05D5\u05E8\u05D9\u05D3 \u05D0\u05EA \u05D4\u05E2\u05DE\u05D5\u05D3\u05D9\u05DD \u05D5\u05D4\u05EA\u05DE\u05D5\u05E0\u05D5\u05EA \u05E9\u05D4\u05DB\u05DC\u05D9\u05DD \u05D4\u05D7\u05D9\u05E0\u05DE\u05D9\u05D9\u05DD \u05D1\u05D5\u05D3\u05E7\u05D9\u05DD, \u05DB\u05D3\u05D9 \u05E9\u05DB\u05EA\u05D5\u05D1\u05EA \u05E9\u05DE\u05D1\u05E7\u05E8 \u05D4\u05E7\u05DC\u05D9\u05D3 \u05DC\u05D0 \u05EA\u05D9\u05D8\u05E2\u05DF \u05DE\u05D4\u05E9\u05E8\u05EA \u05E9\u05DC\u05E0\u05D5. \u05E8\u05E7 \u05E9\u05DE\u05D5\u05EA \u05E6\u05D9\u05D1\u05D5\u05E8\u05D9\u05D9\u05DD, \u05DB\u05DC \u05EA\u05E9\u05D5\u05D1\u05EA DNS \u05D5\u05DB\u05DC \u05D4\u05E4\u05E0\u05D9\u05D4 \u05E0\u05D1\u05D3\u05E7\u05D5\u05EA.", summaryEn: "Downloads the pages and images the free tools test, so an address a visitor typed is never fetched from our server. Public names only; every DNS answer and redirect is checked.", code: ["workers/tools/src", "scripts/deploy-tools.ts", "packages/shared/src/safe-url.ts"], env: ["TOOLS_FETCH_SECRET"], decisions: ["D-199"] },
|
|
21145
|
-
{ id: "uptime-worker", kind: "worker", zone: "cloudflare", label: "deployai-uptime", summary: "\u05D1\u05D5\u05D3\u05E7 \u05DE\u05D1\u05D7\u05D5\u05E5 \u05DB\u05DC 2 \u05D3\u05E7\u05D5\u05EA \u05E9-/api/health \u05E2\u05D5\u05E0\u05D4, \u05DB\u05D9 \u05E9\u05E8\u05EA \u05E9\u05E0\u05E4\u05DC \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D3\u05D5\u05D5\u05D7 \u05E2\u05DC \u05E2\u05E6\u05DE\u05D5. \u05E9\u05D5\u05DE\u05E8 \u05D0\u05EA \u05D4\u05EA\u05D5\u05E6\u05D0\u05D4 \u05D1
|
|
21150
|
+
{ id: "uptime-worker", kind: "worker", zone: "cloudflare", label: "deployai-uptime", summary: "\u05D1\u05D5\u05D3\u05E7 \u05DE\u05D1\u05D7\u05D5\u05E5 \u05DB\u05DC 2 \u05D3\u05E7\u05D5\u05EA \u05E9-/api/health \u05E2\u05D5\u05E0\u05D4, \u05DB\u05D9 \u05E9\u05E8\u05EA \u05E9\u05E0\u05E4\u05DC \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D3\u05D5\u05D5\u05D7 \u05E2\u05DC \u05E2\u05E6\u05DE\u05D5. \u05E9\u05D5\u05DE\u05E8 \u05D0\u05EA \u05D4\u05EA\u05D5\u05E6\u05D0\u05D4 \u05D1\u05BEKV, \u05D5\u05E9\u05EA\u05D9 \u05E0\u05E4\u05D9\u05DC\u05D5\u05EA \u05D1\u05E8\u05E6\u05E3 \u05E9\u05D5\u05DC\u05D7\u05D5\u05EA \u05DE\u05D9\u05D9\u05DC \u05DC\u05E6\u05D5\u05D5\u05EA.", summaryEn: "Checks from outside every 2 minutes that /api/health answers, because a server that is down cannot report itself. Keeps the result in KV; two failures in a row email the team.", code: ["workers/uptime/src", "scripts/deploy-uptime.ts", "apps/web/src/app/api/health/route.ts"], env: ["UPTIME_ALERT_TO", "UPTIME_ALERT_TOKEN"], decisions: ["D-331"] },
|
|
21146
21151
|
{ id: "dispatch", kind: "worker", zone: "cloudflare", label: "deployai-dispatch", summary: 'Worker \u05D0\u05D7\u05D3 \u05E2\u05DC */* \u05E9\u05DE\u05E0\u05EA\u05D1 \u05DB\u05DC \u05DB\u05EA\u05D5\u05D1\u05EA \u05DC\u05D0\u05EA\u05E8, \u05E1\u05D5\u05E4\u05E8 \u05D1\u05D9\u05E7\u05D5\u05E8\u05D9\u05DD, \u05DE\u05D2\u05D1\u05D9\u05DC \u05E7\u05E6\u05D1 \u05D5\u05DE\u05D5\u05E1\u05D9\u05E3 \u05D0\u05EA \u05D4\u05EA\u05D2 "\u05D1\u05D0\u05D5\u05D5\u05D9\u05E8 \u05E2\u05DD DeployAI" \u05DC\u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05D1\u05D7\u05D1\u05D9\u05DC\u05D4 \u05E9\u05DC\u05D4\u05DD \u05D9\u05E9 \u05EA\u05D2, \u05D0\u05E3 \u05E4\u05E2\u05DD \u05DC\u05D0 \u05DC\u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9.', summaryEn: 'One Worker on */* that routes every address to its site, counts visits, limits the rate and adds the "Live with DeployAI" badge to sites whose plan has the badge, never to a temporary site.', code: ["workers/dispatch/src", "scripts/deploy-dispatch.ts"], env: ["DISPATCH_RATE_LIMIT_PERIOD"], docs: ["workers/dispatch/README.md"], decisions: ["D-087", "D-113", "D-179", "D-238", "D-245"] },
|
|
21147
21152
|
// Customer sites
|
|
21148
21153
|
{ id: "site", kind: "worker", zone: "customer", label: SITE, summary: "\u05D4\u05D0\u05EA\u05E8 \u05E9\u05DC \u05D4\u05DC\u05E7\u05D5\u05D7: Worker \u05DC\u05DB\u05DC \u05D0\u05EA\u05E8, \u05E2\u05DD \u05D4\u05E7\u05D1\u05E6\u05D9\u05DD \u05D5\u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC\u05D5.", summaryEn: "The customer's site: a Worker per site, with its files and code.", portability: "Customer sites", decisions: ["D-113", "D-245"] },
|
|
@@ -21225,12 +21230,12 @@ var ARCH_FLOWS = [
|
|
|
21225
21230
|
label: "\u05DB\u05D9\u05D1\u05D5\u05D9 \u05D0\u05EA\u05E8",
|
|
21226
21231
|
labelEn: "Turn a site off",
|
|
21227
21232
|
steps: [
|
|
21228
|
-
{ edge: "browser-tunnel", text: '\u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05DC\u05D5\u05D7\u05E5 "\u05DB\u05D1\u05D4" \u05D1\
|
|
21233
|
+
{ edge: "browser-tunnel", text: '\u05D4\u05D1\u05E2\u05DC\u05D9\u05DD \u05DC\u05D5\u05D7\u05E5 "\u05DB\u05D1\u05D4" \u05D1\u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4.', textEn: 'The owner clicks "Turn off" in the dashboard.' },
|
|
21229
21234
|
{ edge: "tunnel-web", text: "\u05D4\u05D1\u05E7\u05E9\u05D4 \u05DE\u05D2\u05D9\u05E2\u05D4 \u05DC\u05D0\u05E4\u05DC\u05D9\u05E7\u05E6\u05D9\u05D4.", textEn: "The request reaches the app." },
|
|
21230
21235
|
{ edge: "web-queue", text: "\u05E2\u05D1\u05D5\u05D3\u05EA site-toggle \u05D1\u05E2\u05D3\u05D9\u05E4\u05D5\u05EA \u05D3\u05D7\u05D5\u05E4\u05D4.", textEn: "A site-toggle job with urgent priority." },
|
|
21231
21236
|
{ edge: "queue-worker", text: "\u05D4\u05BEworker \u05DE\u05E8\u05D9\u05E5 \u05D0\u05D5\u05EA\u05D4.", textEn: "The worker runs it." },
|
|
21232
21237
|
{ edge: "worker-cfapi", text: "\u05E4\u05E0\u05D9\u05D9\u05D4 \u05DC\u05BECloudflare API.", textEn: "A call to the Cloudflare API." },
|
|
21233
|
-
{ edge: "cfapi-kv", text: '\u05E8\u05E9\u05D5\u05DE\u05EA \u05D4\u05D0\u05EA\u05E8 site: \u05D1\u05BEKV \u05E0\u05DB\u05EA\u05D1\u05EA \u05DE\u05D7\u05D3\u05E9 \u05E2\u05DD \u05DB\u05D1\u05D5\u05D9, \u05D5\u05DE\u05D2\u05D9\u05E2\u05D4 \u05DC\u05DE\u05D1\u05E7\u05E8\u05D9\u05DD \u05EA\u05D5\u05DA \u05D3\u05E7\u05D4 (D-249). \u05D4\u05BEdispatch Worker \u05E2\u05D5\u05E0\u05D4 \u05D1\u05E2\u05DE\u05D5\u05D3 "\u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D6\u05DE\u05D9\u05DF" \u05D1\u05E9\u05E4\u05EA \u05D4\u05D3\u05E4\u05D3\u05E4\u05DF \u05E9\u05DC \u05D4\u05DE\u05D1\u05E7\u05E8 (D-413), \u05E2\u05DD \u05D4\u05DC\u05D5\u05D2\u05D5 \u05D5\u05E7\u05D9\u05E9\u05D5\u05E8 \u05DC
|
|
21238
|
+
{ edge: "cfapi-kv", text: '\u05E8\u05E9\u05D5\u05DE\u05EA \u05D4\u05D0\u05EA\u05E8 site: \u05D1\u05BEKV \u05E0\u05DB\u05EA\u05D1\u05EA \u05DE\u05D7\u05D3\u05E9 \u05E2\u05DD \u05DB\u05D1\u05D5\u05D9, \u05D5\u05DE\u05D2\u05D9\u05E2\u05D4 \u05DC\u05DE\u05D1\u05E7\u05E8\u05D9\u05DD \u05EA\u05D5\u05DA \u05D3\u05E7\u05D4 (D-249). \u05D4\u05BEdispatch Worker \u05E2\u05D5\u05E0\u05D4 \u05D1\u05E2\u05DE\u05D5\u05D3 "\u05D4\u05D0\u05EA\u05E8 \u05DC\u05D0 \u05D6\u05DE\u05D9\u05DF" \u05D1\u05E9\u05E4\u05EA \u05D4\u05D3\u05E4\u05D3\u05E4\u05DF \u05E9\u05DC \u05D4\u05DE\u05D1\u05E7\u05E8 (D-413), \u05E2\u05DD \u05D4\u05DC\u05D5\u05D2\u05D5 \u05D5\u05E7\u05D9\u05E9\u05D5\u05E8 \u05DC\u05BEDeployAI (D-178).', textEn: 'The site record site: in KV is written again with off, and reaches visitors within a minute (D-249). The dispatch Worker answers the "site unavailable" page in the browser language of the visitor (D-413), with the logo and a link to DeployAI (D-178).' }
|
|
21234
21239
|
]
|
|
21235
21240
|
},
|
|
21236
21241
|
{
|
|
@@ -21253,7 +21258,7 @@ var ARCH_FLOWS = [
|
|
|
21253
21258
|
{ edge: "queue-worker", text: "\u05E2\u05D1\u05D5\u05D3\u05D5\u05EA visits-collect \u05D5\u05BEusage-collect \u05E8\u05E6\u05D5\u05EA \u05E4\u05E2\u05DD \u05D1\u05D9\u05D5\u05DD.", textEn: "The visits-collect and usage-collect jobs run once a day." },
|
|
21254
21259
|
{ edge: "worker-visits", text: "\u05D1\u05D9\u05E7\u05D5\u05E8\u05D9\u05DD \u05DE\u05BEAnalytics Engine SQL.", textEn: "Visits from Analytics Engine SQL." },
|
|
21255
21260
|
{ edge: "worker-cfapi", text: "\u05E9\u05D9\u05DE\u05D5\u05E9 \u05D5\u05E2\u05DC\u05D5\u05EA \u05DC\u05DB\u05DC Worker \u05DE\u05BECloudflare.", textEn: "Usage and cost per Worker from Cloudflare." },
|
|
21256
|
-
{ edge: "worker-postgres", text: "\u05E0\u05E9\u05DE\u05E8 \u05D1\u05BEvisits_daily \u05D5\u05BEusage_daily \u05DC\
|
|
21261
|
+
{ edge: "worker-postgres", text: "\u05E0\u05E9\u05DE\u05E8 \u05D1\u05BEvisits_daily \u05D5\u05BEusage_daily \u05DC\u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4 \u05D5\u05DC\u05D0\u05D3\u05DE\u05D9\u05DF.", textEn: "Saved in visits_daily and usage_daily for the dashboard and the admin." },
|
|
21257
21262
|
{ edge: "worker-cfapi", text: "\u05E2\u05D1\u05D5\u05D3\u05EA cf-billing \u05DE\u05D1\u05D9\u05D0\u05D4 \u05D0\u05EA \u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05D4\u05D0\u05DE\u05D9\u05EA\u05D9 (\u05DE\u05E1\u05DC\u05D5\u05DC\u05D9\u05DD \u05D5\u05E9\u05D9\u05DE\u05D5\u05E9 \u05DC\u05E4\u05D9 \u05E9\u05D9\u05E8\u05D5\u05EA) \u05DE\u05BEBilling API, \u05DC\u05D9\u05D3 \u05D4\u05D4\u05E2\u05E8\u05DB\u05D4 \u05E9\u05DC\u05E0\u05D5 (D-281).", textEn: "The cf-billing job reads the real bill (plans and usage per service) from the Billing APIs, next to our estimate (D-281)." },
|
|
21258
21263
|
{ edge: "worker-cfapi", text: "\u05E2\u05D1\u05D5\u05D3\u05EA cf-caps \u05E1\u05D5\u05E4\u05E8\u05EA \u05D0\u05EA \u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05DE\u05D5\u05DC \u05D4\u05DE\u05D2\u05D1\u05DC\u05D5\u05EA \u05E9\u05DC Cloudflare (\u05DB\u05EA\u05D5\u05D1\u05D5\u05EA \u05DE\u05D5\u05EA\u05D0\u05DE\u05D5\u05EA, D1, R2, \u05E1\u05E7\u05E8\u05D9\u05E4\u05D8\u05D9\u05DD) \u05D5\u05DE\u05D5\u05E6\u05D0\u05EA \u05E9\u05D0\u05E8\u05D9\u05D5\u05EA, \u05D1\u05DB\u05DE\u05D4 \u05E7\u05E8\u05D9\u05D0\u05D5\u05EA \u05E7\u05E8\u05D9\u05D0\u05D4 \u05D1\u05DC\u05D1\u05D3 (D-283).", textEn: "The cf-caps job counts the account against Cloudflare's limits (custom hostnames, D1, R2, scripts) and finds leftovers, in a few read only calls (D-283)." },
|
|
21259
21264
|
{ edge: "worker-postgres", text: "\u05DB\u05DC \u05E7\u05E8\u05D9\u05D0\u05D4 \u05DC\u05BECloudflare \u05E0\u05E1\u05E4\u05E8\u05EA \u05DC\u05E4\u05D9 \u05D3\u05E7\u05D4 \u05D1\u05BEcf_api_minutes, \u05DE\u05D5\u05DC 1,200 \u05E7\u05E8\u05D9\u05D0\u05D5\u05EA \u05D5\u05BE320 \u05E9\u05D0\u05D9\u05DC\u05EA\u05D5\u05EA GraphQL \u05D1\u05BE5 \u05D3\u05E7\u05D5\u05EA (D-283).", textEn: "Every Cloudflare call is counted per minute in cf_api_minutes, against 1,200 calls and 320 GraphQL queries per 5 minutes (D-283)." }
|
|
@@ -21263,8 +21268,8 @@ var ARCH_FLOWS = [
|
|
|
21263
21268
|
|
|
21264
21269
|
// ../shared/src/cost-model.ts
|
|
21265
21270
|
var DEFAULT_FLEET = {
|
|
21266
|
-
mix: { basic: 0.65, business: 0.3,
|
|
21267
|
-
sitesPerAccount: { free: 1, basic: 1, business: 2,
|
|
21271
|
+
mix: { basic: 0.65, business: 0.3, agency: 0.05 },
|
|
21272
|
+
sitesPerAccount: { free: 1, basic: 1, business: 2, agency: 6 },
|
|
21268
21273
|
freeProfile: "quiet",
|
|
21269
21274
|
paidProfile: "typical",
|
|
21270
21275
|
ownDomainShare: 0.6,
|
|
@@ -21352,7 +21357,7 @@ var CLI_MAP_NODES = [
|
|
|
21352
21357
|
n("cmd-init", "cli", "init", "\u05D9\u05D5\u05E6\u05E8 DEPLOYAI.md \u05D5 .deployai/project.json.", "Creates DEPLOYAI.md and .deployai/project.json."),
|
|
21353
21358
|
n("cmd-inspect", "cli", "inspect", "\u05DE\u05D4 \u05D6\u05D5\u05D4\u05D4 \u05D1\u05E4\u05E8\u05D5\u05D9\u05E7\u05D8: \u05DE\u05E1\u05D2\u05E8\u05EA, \u05E9\u05E4\u05D4, \u05DE\u05E1\u05D3 \u05E0\u05EA\u05D5\u05E0\u05D9\u05DD.", "What the project is: framework, language, database."),
|
|
21354
21359
|
n("cmd-login", "cli", "login", "\u05DB\u05E0\u05D9\u05E1\u05D4 \u05D1\u05D3\u05E4\u05D3\u05E4\u05DF, \u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8 \u05DE\u05D0\u05E9\u05E8.", "Login in the browser, the owner approves."),
|
|
21355
|
-
n("cmd-logout", "cli", "logout", "\
|
|
21360
|
+
n("cmd-logout", "cli", "logout", "\u05DE\u05D1\u05D8\u05DC \u05D0\u05EA \u05D4\u05D8\u05D5\u05E7\u05DF \u05D5\u05D9\u05D5\u05E6\u05D0 \u05DE\u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05D1\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4.", "Cancels the token and logs out on this computer."),
|
|
21356
21361
|
n("cmd-whoami", "cli", "whoami", "\u05E2\u05DD \u05D0\u05D9\u05D6\u05D4 \u05D7\u05E9\u05D1\u05D5\u05DF \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD.", "Which account is logged in."),
|
|
21357
21362
|
n("cmd-link", "cli", "link [site]", "\u05DE\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05DC\u05D0\u05EA\u05E8, \u05D0\u05D5 \u05D9\u05D5\u05E6\u05E8 \u05D0\u05EA\u05E8 \u05E2\u05DD --create.", "Links the folder to a site, or makes one with --create."),
|
|
21358
21363
|
n("cmd-deploy", "cli", "deploy -m", "\u05D1\u05D5\u05D3\u05E7, \u05D0\u05D5\u05E8\u05D6 \u05D5\u05DE\u05E2\u05DC\u05D4 \u05D2\u05E8\u05E1\u05D4 \u05DC\u05EA\u05E6\u05D5\u05D2\u05D4 \u05DE\u05E7\u05D3\u05D9\u05DE\u05D4.", "Checks, packs and uploads a version to a preview."),
|
|
@@ -21363,7 +21368,7 @@ var CLI_MAP_NODES = [
|
|
|
21363
21368
|
n("cmd-promote", "cli", "promote v<N>", "\u05DE\u05E2\u05DC\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8 \u05D2\u05E8\u05E1\u05D4 \u05E9\u05D0\u05D5\u05E9\u05E8\u05D4.", "Puts an approved version live."),
|
|
21364
21369
|
n("cmd-versions", "cli", "versions", "\u05E8\u05E9\u05D9\u05DE\u05EA \u05D4\u05D2\u05E8\u05E1\u05D0\u05D5\u05EA \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8.", "The site's versions."),
|
|
21365
21370
|
n("cmd-rollback", "cli", "rollback v<N>", "\u05D7\u05D5\u05D6\u05E8 \u05DC\u05D2\u05E8\u05E1\u05D4 \u05E7\u05D5\u05D3\u05DE\u05EA.", "Goes back to an earlier version."),
|
|
21366
|
-
n("cmd-addons", "cli", "addons / addon next", "\u05D4\u05EA\u05D5\u05E1\u05E4\u05D9\u05DD \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8, \
|
|
21371
|
+
n("cmd-addons", "cli", "addons / addon next / addon buy", "\u05D4\u05EA\u05D5\u05E1\u05E4\u05D9\u05DD \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8, \u05D4\u05E9\u05DC\u05D1 \u05D4\u05D1\u05D0 \u05E9\u05DC \u05EA\u05D5\u05E1\u05E3 \u05E9\u05E0\u05E7\u05E0\u05D4, \u05D5\u05E7\u05D9\u05E9\u05D5\u05E8 \u05E7\u05E0\u05D9\u05D9\u05D4 \u05DC\u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8.", "The site's add-ons, the next step of one it bought, and a buy link for the owner."),
|
|
21367
21372
|
n("cmd-addon-run", "cli", "addon run / done", "\u05EA\u05D5\u05E1\u05E3 \u05D0\u05D7\u05D3 \u05DC\u05E4\u05D9 \u05E9\u05DD, \u05D5\u05D3\u05D9\u05D5\u05D5\u05D7 \u05E9\u05D4\u05E9\u05DC\u05D1 \u05D4\u05E1\u05EA\u05D9\u05D9\u05DD.", "One add-on by name, and the report that a step is done."),
|
|
21368
21373
|
n("cmd-env", "cli", "env list / set / remove", "\u05DE\u05E9\u05EA\u05E0\u05D9 \u05D4\u05E1\u05D1\u05D9\u05D1\u05D4 \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8. \u05E1\u05D5\u05D3 \u05DB\u05D1\u05E8\u05D9\u05E8\u05EA \u05DE\u05D7\u05D3\u05DC, \u05D5\u05DC\u05D0 \u05DE\u05D5\u05E6\u05D2 \u05E9\u05D5\u05D1.", "The site's environment variables. A secret by default, never shown again."),
|
|
21369
21374
|
n("cmd-speed", "cli", "speed <url>", "\u05D1\u05D3\u05D9\u05E7\u05EA \u05DE\u05D4\u05D9\u05E8\u05D5\u05EA \u05E9\u05DC \u05DB\u05EA\u05D5\u05D1\u05EA \u05D7\u05D9\u05D4.", "A speed test of a live address."),
|
|
@@ -21460,6 +21465,31 @@ function findSecretLine(text, re) {
|
|
|
21460
21465
|
}
|
|
21461
21466
|
return null;
|
|
21462
21467
|
}
|
|
21468
|
+
var PRIVATE_DIRS = /* @__PURE__ */ new Set([".deployai", ".claude", ".cursor", ".vscode", ".idea", ".git", ".github", ".husky"]);
|
|
21469
|
+
var PRIVATE_FILES = /* @__PURE__ */ new Set(["DEPLOYAI.md", "CLAUDE.md", "AGENTS.md", ".cursorrules", ".windsurfrules"]);
|
|
21470
|
+
var SERVED_DOT_DIR = ".well-known";
|
|
21471
|
+
var BUILD_DOTFILES = /* @__PURE__ */ new Set([".babelrc", ".babelrc.json", ".browserslistrc", ".postcssrc", ".postcssrc.json", ".postcssrc.js", ".postcssrc.cjs", ".postcssrc.mjs", ".swcrc", ".nvmrc", ".node-version", ".assetsignore"]);
|
|
21472
|
+
var segments = (path) => path.replace(/^\/+/, "").split("/").filter(Boolean);
|
|
21473
|
+
function privateProjectFile(path) {
|
|
21474
|
+
const parts = segments(path);
|
|
21475
|
+
const base = parts[parts.length - 1] ?? "";
|
|
21476
|
+
return PRIVATE_FILES.has(base) || parts.slice(0, -1).some((p) => PRIVATE_DIRS.has(p)) || PRIVATE_DIRS.has(base);
|
|
21477
|
+
}
|
|
21478
|
+
function dotPath(path) {
|
|
21479
|
+
const parts = segments(path);
|
|
21480
|
+
if (parts[0] === SERVED_DOT_DIR) parts.shift();
|
|
21481
|
+
return parts.some((p) => p.startsWith("."));
|
|
21482
|
+
}
|
|
21483
|
+
function neverUploadedFile(rel) {
|
|
21484
|
+
if (privateProjectFile(rel)) return true;
|
|
21485
|
+
const parts = segments(rel);
|
|
21486
|
+
if (parts.length === 1 && BUILD_DOTFILES.has(parts[0])) return false;
|
|
21487
|
+
return dotPath(rel);
|
|
21488
|
+
}
|
|
21489
|
+
|
|
21490
|
+
// ../shared/src/domain-sales.ts
|
|
21491
|
+
var IL_TLDS = ["co.il", "org.il", "net.il"];
|
|
21492
|
+
var LIVEDNS_TLDS = [...IL_TLDS, "com", "net", "org"];
|
|
21463
21493
|
|
|
21464
21494
|
// ../shared/src/env-scopes.ts
|
|
21465
21495
|
var ENV_KEYS = {
|
|
@@ -21471,6 +21501,9 @@ var ENV_KEYS = {
|
|
|
21471
21501
|
TUNNEL_ORIGIN_CERT: { scope: "local", section: "app", about: "The cloudflared login certificate pnpm dev:public checks. Default ~/.cloudflared/cert.pem." },
|
|
21472
21502
|
CF_API_TOKEN: { scope: "own", section: "cloudflare", required: ["server"], about: "Cloudflare token (pnpm cf:token-link): sites, KV, D1, R2, routes, custom hostnames and our emails. Each machine its own. Without it everything Cloudflare is a dry run." },
|
|
21473
21503
|
CF_REGISTRAR_TOKEN: { scope: "server", section: "cloudflare", about: "Buys real domains (D-300): a Cloudflare token with Registrar edit only. Server only." },
|
|
21504
|
+
LIVEDNS_USER: { scope: "server", section: "cloudflare", about: "Buys real Israeli domains at LiveDNS (D-458): the API user of our LiveDNS partner account. Server only: LiveDNS refuses some networks, and it spends prepaid credit." },
|
|
21505
|
+
LIVEDNS_PASSWORD: { scope: "server", section: "cloudflare", about: "Its password, sent in every LiveDNS call; never logged. Server only." },
|
|
21506
|
+
ADMIN_GEO_MANAGE: { scope: "server", section: "cloudflare", about: "1 lets the superadmin change the admin-geo rule on Admin, Server, Security (temporary, D-455); CF_API_TOKEN needs Zone WAF Edit. Off or unset: the card only shows it. The rule stays in Cloudflare either way." },
|
|
21474
21507
|
DISPATCH_RATE_LIMIT_GUEST: { scope: "same", section: "cloudflare", about: "pnpm dispatch:deploy: requests per IP per period on a temporary site (D-087, D-238)." },
|
|
21475
21508
|
DISPATCH_RATE_LIMIT_FREE: { scope: "same", section: "cloudflare", about: "The same on a site on a free plan." },
|
|
21476
21509
|
DISPATCH_RATE_LIMIT_PAID: { scope: "same", section: "cloudflare", about: "The same on a site on a paid plan." },
|
|
@@ -21628,6 +21661,7 @@ function loadConfig() {
|
|
|
21628
21661
|
};
|
|
21629
21662
|
if (typeof raw.apiUrl === "string") cfg.apiUrl = raw.apiUrl;
|
|
21630
21663
|
if (typeof raw.token === "string") cfg.token = raw.token;
|
|
21664
|
+
if (typeof raw.tokenApiUrl === "string") cfg.tokenApiUrl = raw.tokenApiUrl;
|
|
21631
21665
|
if (typeof raw.email === "string") cfg.email = raw.email;
|
|
21632
21666
|
if (raw.guestClaims && typeof raw.guestClaims === "object") {
|
|
21633
21667
|
const links = Object.fromEntries(Object.entries(raw.guestClaims).filter(([, v]) => typeof v === "string"));
|
|
@@ -21871,10 +21905,18 @@ var M = {
|
|
|
21871
21905
|
startExpired: "These instructions expired (they last 7 days). Copy them again from the DeployAI site.",
|
|
21872
21906
|
startUsedUp: "These instructions were already used 5 times. Copy them again from the DeployAI site.",
|
|
21873
21907
|
loginExpired: "The login code expired. Run: npx deployai@latest login",
|
|
21874
|
-
loggedOut: "Logged out. The token was removed from this computer.",
|
|
21908
|
+
loggedOut: "Logged out. The token was canceled and removed from this computer.",
|
|
21875
21909
|
protocol: "Unexpected answer from DeployAI. Run the latest CLI: npx deployai@latest",
|
|
21876
21910
|
guestClaimFirst: "This folder holds a temporary site, and you are logged in. Claim the site to your account first: {url}",
|
|
21877
21911
|
guestClaimFirstNoLink: "This folder holds a temporary site, and you are logged in. Claim it to your account first with the claim link deploy --guest printed.",
|
|
21912
|
+
guestAccountSite: "This folder belongs to a site in an account, so it cannot go up as a temporary site. Run: npx deployai@latest login, then: npx deployai@latest deploy",
|
|
21913
|
+
sqlWaitingLine: "Database changes (SQL) wait for your approval before this version goes live: {url}",
|
|
21914
|
+
sqlWaiting: "This version has database changes (SQL) that have not run yet. Approve them in the dashboard first, then promote again: {url}",
|
|
21915
|
+
tokenOtherApi: "The login on this computer is for {saved}, not {url}. Run: npx deployai@latest login --api {url}, or drop --api and DEPLOYAI_API_URL.",
|
|
21916
|
+
linkConfirm: "Link this folder to {name} ({address})? (y/N) ",
|
|
21917
|
+
linkOnlyOne: "You have one site: {name} ({address}). To link it, or a new site, run:",
|
|
21918
|
+
linkCancelled: "Not linked. Nothing changed.",
|
|
21919
|
+
loggedOutLocalOnly: "Logged out on this computer. DeployAI could not be reached, so the token stays valid until it expires (30 days).",
|
|
21878
21920
|
savedIn: "Saved in .deployai/project.json",
|
|
21879
21921
|
createdProject: "Created the site {name}.",
|
|
21880
21922
|
noProjects: "No sites yet.",
|
|
@@ -21885,14 +21927,14 @@ var M = {
|
|
|
21885
21927
|
runLink: " Run: npx deployai@latest link",
|
|
21886
21928
|
nextSteps: "Next steps",
|
|
21887
21929
|
readme: "Read README.md in the folder for what each file does.",
|
|
21888
|
-
states: { online: "live", building: "building", ready: "ready for review", failed: "failed", paused: "paused", off: "off", queued: "waiting", deleted: "deleted", new: "new" }
|
|
21930
|
+
states: { online: "live", building: "building", ready: "ready for review", failed: "failed", paused: "paused", off: "off", queued: "waiting", replaced: "replaced by a newer upload", deleted: "deleted", new: "new" }
|
|
21889
21931
|
},
|
|
21890
21932
|
he: {
|
|
21891
21933
|
startTitle: "DeployAI start",
|
|
21892
21934
|
startNewFolder: "\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DB\u05D1\u05E8 \u05D9\u05E9 \u05E7\u05D1\u05E6\u05D9\u05DD, \u05D0\u05D6 \u05D4\u05D0\u05EA\u05E8 \u05D4\u05D7\u05D3\u05E9 \u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D7\u05D3\u05E9\u05D4: {dir}",
|
|
21893
21935
|
startDownloaded: "\u05D4\u05D3\u05D5\u05D2\u05DE\u05D4 {key} \u05D4\u05D5\u05E8\u05D3\u05D4: {n} \u05E7\u05D1\u05E6\u05D9\u05DD.",
|
|
21894
21936
|
startInstalled: "\u05D4\u05D7\u05D1\u05D9\u05DC\u05D5\u05EA \u05E9\u05DC\u05D4 \u05D4\u05D5\u05EA\u05E7\u05E0\u05D5 (npm install).",
|
|
21895
|
-
startBrief: "\u05D4\u05E4\u05E8\u05D8\u05D9\u05DD \u05E9\u05DC \u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8 \u05E0\u05DB\u05EA\u05D1\u05D5 \u05DC {file} (\u05DC\u05D0 \u05E0\u05DB\u05E0\u05E1\u05D9\u05DD \u05DC
|
|
21937
|
+
startBrief: "\u05D4\u05E4\u05E8\u05D8\u05D9\u05DD \u05E9\u05DC \u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8 \u05E0\u05DB\u05EA\u05D1\u05D5 \u05DC {file} (\u05DC\u05D0 \u05E0\u05DB\u05E0\u05E1\u05D9\u05DD \u05DC\u05BEgit \u05D5\u05DC\u05D0 \u05E2\u05D5\u05DC\u05D9\u05DD \u05DC\u05D0\u05EA\u05E8).",
|
|
21896
21938
|
startLinked: '\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D7\u05D5\u05D1\u05E8\u05D4 \u05DC\u05D0\u05EA\u05E8 "{name}".',
|
|
21897
21939
|
startRelinked: '\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D7\u05D5\u05D1\u05E8\u05D4 \u05DC\u05D0\u05EA\u05E8 "{name}" \u05D1\u05DE\u05E7\u05D5\u05DD \u05D4\u05D0\u05EA\u05E8 \u05E9\u05D4\u05D9\u05D9\u05EA\u05D4 \u05DE\u05D7\u05D5\u05D1\u05E8\u05EA \u05D0\u05DC\u05D9\u05D5.',
|
|
21898
21940
|
statusLine: "\u05DE\u05E6\u05D1: {s}",
|
|
@@ -21927,21 +21969,21 @@ var M = {
|
|
|
21927
21969
|
queueWaiting: "\u05DE\u05DE\u05EA\u05D9\u05DF \u05D1\u05EA\u05D5\u05E8, \u05DE\u05E7\u05D5\u05DD {n}",
|
|
21928
21970
|
files: "\u05E7\u05D1\u05E6\u05D9\u05DD",
|
|
21929
21971
|
skipped: "\u05D3\u05D9\u05DC\u05D2\u05E0\u05D5",
|
|
21930
|
-
skippedLarge: "{n} \u05E7\u05D1\u05E6\u05D9\u05DD \u05D2\u05D3\u05D5\u05DC\u05D9\u05DD \u05DE
|
|
21972
|
+
skippedLarge: "{n} \u05E7\u05D1\u05E6\u05D9\u05DD \u05D2\u05D3\u05D5\u05DC\u05D9\u05DD \u05DE\u05BE{max}: {names}",
|
|
21931
21973
|
ownerKeys: "\u05DE\u05E4\u05EA\u05D7\u05D5\u05EA \u05D1\u05E2\u05DC\u05D9\u05DD \u05DC\u05D0\u05EA\u05E8 \u05D4\u05D6\u05D4 (\u05DE\u05D5\u05E6\u05D2\u05D9\u05DD \u05E4\u05E2\u05DD \u05D0\u05D7\u05EA, \u05E9\u05DE\u05E8\u05D5 \u05D0\u05D5\u05EA\u05DD \u05E2\u05DB\u05E9\u05D9\u05D5):",
|
|
21932
21974
|
guestLive: "\u05D4\u05D0\u05EA\u05E8 \u05E2\u05D5\u05DC\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8 \u05DB\u05E9\u05D4\u05D1\u05E0\u05D9\u05D9\u05D4 \u05DE\u05E1\u05EA\u05D9\u05D9\u05DE\u05EA (\u05D1\u05E2\u05E8\u05DA \u05D3\u05E7\u05D4).",
|
|
21933
21975
|
guestClaim: "\u05E4\u05EA\u05D7\u05D5 \u05D0\u05EA \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05DB\u05D3\u05D9 \u05DC\u05E9\u05DE\u05D5\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 (\u05D4\u05E8\u05E9\u05DE\u05D4 \u05D0\u05D5 \u05DB\u05E0\u05D9\u05E1\u05D4).",
|
|
21934
21976
|
claimLink: "\u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8 \u05D4\u05D6\u05DE\u05E0\u05D9: {url}",
|
|
21935
21977
|
pulled: "\u05D4\u05D5\u05E8\u05D3\u05E0\u05D5 \u05D0\u05EA \u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC \u05D2\u05E8\u05E1\u05D4 v{v}: {n} \u05E7\u05D1\u05E6\u05D9\u05DD.",
|
|
21936
|
-
pullNotLinked: "\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8\u05EA \u05DC\u05D0\u05EA\u05E8. \u05D4\u05E2\u05EA\u05D9\u05E7\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05E9\u05D5\u05E8\u05D4 \u05DE\u05D3\u05E3 \u05D4\u05D0\u05EA\u05E8 \u05D1
|
|
21978
|
+
pullNotLinked: "\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8\u05EA \u05DC\u05D0\u05EA\u05E8. \u05D4\u05E2\u05EA\u05D9\u05E7\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D4\u05E9\u05D5\u05E8\u05D4 \u05DE\u05D3\u05E3 \u05D4\u05D0\u05EA\u05E8 \u05D1\u05BEDeployAI.",
|
|
21937
21979
|
pullNotEmpty: "\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DB\u05D1\u05E8 \u05D9\u05E9 \u05E7\u05D1\u05E6\u05D9\u05DD, \u05D0\u05D6 \u05DC\u05D0 \u05D4\u05D5\u05E8\u05D3\u05E0\u05D5 \u05DB\u05DC\u05D5\u05DD. \u05D4\u05E9\u05EA\u05DE\u05E9\u05D5 \u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05E8\u05D9\u05E7\u05D4.",
|
|
21938
21980
|
pullNoSource: "\u05DC\u05D0\u05EA\u05E8 \u05D4\u05D6\u05D4 \u05E2\u05D5\u05D3 \u05D0\u05D9\u05DF \u05D2\u05E8\u05E1\u05D4 \u05DC\u05D4\u05D5\u05E8\u05D9\u05D3.",
|
|
21939
|
-
pullTooLarge: "\u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC \u05D4\u05D2\u05E8\u05E1\u05D4 \u05D4\u05D6\u05D5 \u05D2\u05D3\u05D5\u05DC \u05DE
|
|
21981
|
+
pullTooLarge: "\u05D4\u05E7\u05D5\u05D3 \u05E9\u05DC \u05D4\u05D2\u05E8\u05E1\u05D4 \u05D4\u05D6\u05D5 \u05D2\u05D3\u05D5\u05DC \u05DE\u05BE50MB, \u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9 \u05DC\u05D4\u05D5\u05E8\u05D3\u05D4.",
|
|
21940
21982
|
pullDamaged: "\u05D4\u05D4\u05D5\u05E8\u05D3\u05D4 \u05E4\u05D2\u05D5\u05DE\u05D4. \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1.",
|
|
21941
21983
|
guestEmailHint: "\u05DC\u05E7\u05D1\u05DC \u05D0\u05D5\u05EA\u05D5 \u05D1\u05DE\u05D9\u05D9\u05DC, \u05E2\u05DD \u05EA\u05D6\u05DB\u05D5\u05E8\u05EA \u05DC\u05E4\u05E0\u05D9 \u05D4\u05DE\u05D7\u05D9\u05E7\u05D4: npx deployai@latest claim --email <email>",
|
|
21942
|
-
claimEmailed: "\u05E9\u05DC\u05D7\u05E0\u05D5 \u05D0\u05EA \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05DC
|
|
21984
|
+
claimEmailed: "\u05E9\u05DC\u05D7\u05E0\u05D5 \u05D0\u05EA \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05DC\u05BE{email}. \u05EA\u05D6\u05DB\u05D5\u05E8\u05EA \u05EA\u05D2\u05D9\u05E2 3 \u05D9\u05DE\u05D9\u05DD \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D0\u05EA\u05E8 \u05E0\u05DE\u05D7\u05E7.",
|
|
21943
21985
|
claimNoLink: "\u05DE\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DC\u05D0 \u05D4\u05D5\u05E2\u05DC\u05D4 \u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9 \u05DE\u05D4\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4, \u05D0\u05D6 \u05D0\u05D9\u05DF \u05DB\u05D0\u05DF \u05E7\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DE\u05D9\u05E8\u05D4.",
|
|
21944
|
-
rollbackQueued: "\u05D4\u05D7\u05D6\u05E8\u05D4 \u05DC
|
|
21986
|
+
rollbackQueued: "\u05D4\u05D7\u05D6\u05E8\u05D4 \u05DC\u05BEv{n} \u05D1\u05EA\u05D5\u05E8. \u05D0\u05D9\u05DF \u05E6\u05D5\u05E8\u05DA \u05D1\u05D1\u05E0\u05D9\u05D9\u05D4 \u05DE\u05D7\u05D3\u05E9.",
|
|
21945
21987
|
promoteQueued: "\u05D4\u05E2\u05DC\u05D0\u05EA v{n} \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8 \u05D1\u05EA\u05D5\u05E8.",
|
|
21946
21988
|
runStatus: " \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest status",
|
|
21947
21989
|
statusTitle: "DeployAI status",
|
|
@@ -21961,7 +22003,7 @@ var M = {
|
|
|
21961
22003
|
envRemoved: "\u05D4\u05E1\u05E8\u05E0\u05D5 \u05D0\u05EA {key}. \u05D4\u05D5\u05D0 \u05D9\u05D9\u05E2\u05DC\u05DD \u05DE\u05D4\u05D0\u05EA\u05E8 \u05D4\u05D7\u05D9 \u05EA\u05D5\u05DA \u05DB\u05D3\u05E7\u05D4.",
|
|
21962
22004
|
guestNoEnv: "\u05DC\u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9 \u05D0\u05D9\u05DF \u05DE\u05E9\u05EA\u05E0\u05D9 \u05E1\u05D1\u05D9\u05D1\u05D4. \u05E9\u05DE\u05E8\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05DC\u05D7\u05E9\u05D1\u05D5\u05DF \u05E7\u05D5\u05D3\u05DD: npx deployai@latest claim",
|
|
21963
22005
|
envInvalidKey: "\u05E9\u05DD \u05DE\u05E9\u05EA\u05E0\u05D4: \u05D0\u05D5\u05EA\u05D9\u05D5\u05EA \u05D1\u05D0\u05E0\u05D2\u05DC\u05D9\u05EA, \u05E1\u05E4\u05E8\u05D5\u05EA \u05D5-_, \u05DC\u05D0 \u05DE\u05EA\u05D7\u05D9\u05DC \u05D1\u05E1\u05E4\u05E8\u05D4, \u05E2\u05D3 64 \u05EA\u05D5\u05D5\u05D9\u05DD.",
|
|
21964
|
-
envTooLong: "\u05D4\u05E2\u05E8\u05DA \u05D2\u05D3\u05D5\u05DC \u05DE
|
|
22006
|
+
envTooLong: "\u05D4\u05E2\u05E8\u05DA \u05D2\u05D3\u05D5\u05DC \u05DE\u05BE5KB, \u05D0\u05E8\u05D5\u05DA \u05DE\u05D3\u05D9 \u05DC\u05DE\u05E9\u05EA\u05E0\u05D4.",
|
|
21965
22007
|
envSendFailed: "\u05D4\u05E1\u05D5\u05D3 \u05DC\u05D0 \u05D4\u05D2\u05D9\u05E2 \u05DC\u05D0\u05EA\u05E8. \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1 \u05D1\u05E2\u05D5\u05D3 \u05D3\u05E7\u05D4.",
|
|
21966
22008
|
envNoKey: "\u05DC\u05D0\u05EA\u05E8 \u05D0\u05D9\u05DF \u05DE\u05E9\u05EA\u05E0\u05D4 \u05D1\u05E9\u05DD \u05D4\u05D6\u05D4. \u05DC\u05E8\u05E9\u05D9\u05DE\u05D4: npx deployai@latest env list",
|
|
21967
22009
|
buildFailed: "\u05D4\u05D1\u05E0\u05D9\u05D9\u05D4 \u05E9\u05DC v{n} \u05E0\u05DB\u05E9\u05DC\u05D4. \u05D4\u05D0\u05EA\u05E8 \u05D4\u05D7\u05D9 \u05DC\u05D0 \u05D4\u05E9\u05EA\u05E0\u05D4.",
|
|
@@ -21977,17 +22019,17 @@ var M = {
|
|
|
21977
22019
|
help: "\u05E2\u05D6\u05E8\u05D4",
|
|
21978
22020
|
notLoggedIn: "\u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login",
|
|
21979
22021
|
sessionExpired: "\u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD, \u05D0\u05D5 \u05E9\u05D4\u05D7\u05D9\u05D1\u05D5\u05E8 \u05E4\u05D2. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login",
|
|
21980
|
-
siteDeleted: "\u05D4\u05D0\u05EA\u05E8 \u05E0\u05DE\u05D7\u05E7 \u05D1\
|
|
22022
|
+
siteDeleted: "\u05D4\u05D0\u05EA\u05E8 \u05E0\u05DE\u05D7\u05E7 \u05D1\u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4 \u05E9\u05DC DeployAI. \u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E9\u05D7\u05D6\u05E8 \u05D0\u05D5\u05EA\u05D5 \u05DE\u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4 (\u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05DC\u05D9, \u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05E0\u05DE\u05D7\u05E7\u05D5) \u05EA\u05D5\u05DA 7 \u05D9\u05DE\u05D9\u05DD. \u05DB\u05D3\u05D9 \u05DC\u05D4\u05E2\u05DC\u05D5\u05EA \u05DC\u05D0\u05EA\u05E8 \u05D0\u05D7\u05E8, \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest link",
|
|
21981
22023
|
notEntitled: "\u05DC\u05D0\u05EA\u05E8 \u05D4\u05D6\u05D4 \u05D0\u05D9\u05DF \u05D0\u05EA \u05D4\u05EA\u05D5\u05E1\u05E3 \u05D4\u05D6\u05D4. \u05D1\u05E2\u05DC \u05D4\u05D0\u05EA\u05E8 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E7\u05E0\u05D5\u05EA \u05D0\u05D5\u05EA\u05D5 \u05DC\u05D0\u05EA\u05E8 \u05DB\u05D0\u05DF: {url}",
|
|
21982
22024
|
forbidden: "\u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05D4\u05D6\u05D4 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05E9\u05E0\u05D5\u05EA \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05D4\u05D6\u05D4. \u05D1\u05D3\u05E7\u05D5 \u05E9\u05E0\u05DB\u05E0\u05E1\u05EA\u05DD \u05E2\u05DD \u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05E9\u05D4\u05D0\u05EA\u05E8 \u05E9\u05D9\u05D9\u05DA \u05DC\u05D5.",
|
|
21983
22025
|
notFound: "DeployAI \u05DC\u05D0 \u05DE\u05E6\u05D0 \u05D0\u05EA \u05D6\u05D4, \u05D0\u05D5 \u05E9\u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05D4\u05D6\u05D4 \u05DC\u05D0 \u05E8\u05D5\u05D0\u05D4 \u05D0\u05EA \u05D6\u05D4. \u05D1\u05D3\u05E7\u05D5 \u05D0\u05EA \u05D4\u05E9\u05DD \u05D0\u05D5 \u05D4\u05E7\u05D9\u05E9\u05D5\u05E8, \u05D5\u05E9\u05E0\u05DB\u05E0\u05E1\u05EA\u05DD \u05E2\u05DD \u05D4\u05D7\u05E9\u05D1\u05D5\u05DF \u05E9\u05D9\u05E6\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8: npx deployai@latest whoami",
|
|
21984
|
-
badArchive: "\u05D4\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D4\u05D2\u05D9\u05E2\u05D4 \u05E4\u05D2\u05D5\u05DE\u05D4 \u05D0\u05D5 \u05E8\u05D9\u05E7\u05D4. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E4\u05E7\u05D5\u05D3\u05D4. \u05D0\u05DD \u05D6\u05D4 \u05D7\u05D5\u05D6\u05E8, \u05E2\u05D3\u05DB\u05E0\u05D5 \u05D0\u05EA \u05D4
|
|
21985
|
-
invalidRequest: "DeployAI \u05DC\u05D0 \u05E7\u05D9\u05D1\u05DC \u05D0\u05EA \u05D4\u05D1\u05E7\u05E9\u05D4. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05D0\u05D5\u05EA\u05D4 \u05E9\u05D5\u05D1 \u05E2\u05DD \u05D4
|
|
22026
|
+
badArchive: "\u05D4\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D4\u05D2\u05D9\u05E2\u05D4 \u05E4\u05D2\u05D5\u05DE\u05D4 \u05D0\u05D5 \u05E8\u05D9\u05E7\u05D4. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E4\u05E7\u05D5\u05D3\u05D4. \u05D0\u05DD \u05D6\u05D4 \u05D7\u05D5\u05D6\u05E8, \u05E2\u05D3\u05DB\u05E0\u05D5 \u05D0\u05EA \u05D4\u05BECLI: npx deployai@latest",
|
|
22027
|
+
invalidRequest: "DeployAI \u05DC\u05D0 \u05E7\u05D9\u05D1\u05DC \u05D0\u05EA \u05D4\u05D1\u05E7\u05E9\u05D4. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05D0\u05D5\u05EA\u05D4 \u05E9\u05D5\u05D1 \u05E2\u05DD \u05D4\u05BECLI \u05D4\u05E2\u05D3\u05DB\u05E0\u05D9: npx deployai@latest",
|
|
21986
22028
|
invalidEmail: "\u05DB\u05EA\u05D5\u05D1\u05EA \u05D4\u05DE\u05D9\u05D9\u05DC \u05DC\u05D0 \u05EA\u05E7\u05D9\u05E0\u05D4. \u05D1\u05D3\u05E7\u05D5 \u05D0\u05D5\u05EA\u05D4 \u05D5\u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1.",
|
|
21987
22029
|
emailSet: "\u05DB\u05D1\u05E8 \u05D4\u05D5\u05D2\u05D3\u05E8 \u05DE\u05D9\u05D9\u05DC \u05EA\u05D6\u05DB\u05D5\u05E8\u05EA \u05DC\u05D0\u05EA\u05E8 \u05D4\u05D6\u05D4.",
|
|
21988
22030
|
addonsClosed: "\u05D4\u05EA\u05D5\u05E1\u05E4\u05D9\u05DD \u05E2\u05D5\u05D3 \u05DC\u05D0 \u05E4\u05EA\u05D5\u05D7\u05D9\u05DD, \u05D5\u05DC\u05DB\u05DF \u05D0\u05D9 \u05D0\u05E4\u05E9\u05E8 \u05DC\u05D4\u05E8\u05D9\u05E5 \u05D0\u05EA \u05D6\u05D4 \u05E2\u05DB\u05E9\u05D9\u05D5.",
|
|
21989
|
-
timeout: "DeployAI \u05DC\u05D0 \u05E2\u05E0\u05D4 \u05D1\u05D6\u05DE\u05DF \u05D1
|
|
21990
|
-
unreachable: "\u05D0\u05D9\u05DF \u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC
|
|
22031
|
+
timeout: "DeployAI \u05DC\u05D0 \u05E2\u05E0\u05D4 \u05D1\u05D6\u05DE\u05DF \u05D1\u05BE{url}. \u05D1\u05D3\u05E7\u05D5 \u05D0\u05EA \u05D4\u05D7\u05D9\u05D1\u05D5\u05E8 \u05D5\u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E4\u05E7\u05D5\u05D3\u05D4.",
|
|
22032
|
+
unreachable: "\u05D0\u05D9\u05DF \u05D7\u05D9\u05D1\u05D5\u05E8 \u05DC\u05BEDeployAI \u05D1\u05BE{url}. \u05D1\u05D3\u05E7\u05D5 \u05D0\u05EA \u05D4\u05D7\u05D9\u05D1\u05D5\u05E8 \u05D5\u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E4\u05E7\u05D5\u05D3\u05D4.",
|
|
21991
22033
|
noProjectNamed: "\u05D0\u05D9\u05DF \u05D0\u05EA\u05E8 \u05D1\u05E9\u05DD {name}. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest link",
|
|
21992
22034
|
noNameGiven: "\u05DC\u05D0 \u05E0\u05D1\u05D7\u05E8 \u05E9\u05DD.",
|
|
21993
22035
|
noProjectPicked: "\u05DC\u05D0 \u05E0\u05D1\u05D7\u05E8 \u05D0\u05EA\u05E8.",
|
|
@@ -21996,7 +22038,7 @@ var M = {
|
|
|
21996
22038
|
sampleDownloadFailed: "\u05DC\u05D0 \u05D4\u05E6\u05DC\u05D7\u05E0\u05D5 \u05DC\u05D4\u05D5\u05E8\u05D9\u05D3 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D3\u05D5\u05D2\u05DE\u05D4 {key} (HTTP {status}). \u05D4\u05E8\u05D9\u05E6\u05D5 \u05E9\u05D5\u05D1 \u05D0\u05EA \u05D0\u05D5\u05EA\u05D4 \u05E4\u05E7\u05D5\u05D3\u05D4.",
|
|
21997
22039
|
sampleTooLarge: "\u05D4\u05D4\u05D5\u05E8\u05D3\u05D4 \u05E9\u05DC \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D3\u05D5\u05D2\u05DE\u05D4 \u05D2\u05D3\u05D5\u05DC\u05D4 \u05DE\u05D3\u05D9.",
|
|
21998
22040
|
noSampleNamed: "\u05D0\u05D9\u05DF \u05D0\u05EA\u05E8 \u05DC\u05D3\u05D5\u05D2\u05DE\u05D4 \u05D1\u05E9\u05DD {key}. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest samples",
|
|
21999
|
-
unknownSample: "\u05D4
|
|
22041
|
+
unknownSample: "\u05D4\u05BECLI \u05D4\u05D6\u05D4 \u05DC\u05D0 \u05DE\u05DB\u05D9\u05E8 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05DC\u05D3\u05D5\u05D2\u05DE\u05D4 {key}. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05E2\u05DD npx deployai@latest.",
|
|
22000
22042
|
loginNoToken: "\u05D4\u05D4\u05EA\u05D7\u05D1\u05E8\u05D5\u05EA \u05D0\u05D5\u05E9\u05E8\u05D4 \u05D0\u05D1\u05DC \u05DC\u05D0 \u05D7\u05D6\u05E8 \u05DE\u05E4\u05EA\u05D7. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login",
|
|
22001
22043
|
rateLimited: "\u05D9\u05D5\u05EA\u05E8 \u05DE\u05D3\u05D9 \u05E0\u05D9\u05E1\u05D9\u05D5\u05E0\u05D5\u05EA \u05D1\u05D6\u05DE\u05DF \u05E7\u05E6\u05E8. \u05D7\u05DB\u05D5 \u05D3\u05E7\u05D4 \u05D5\u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1.",
|
|
22002
22044
|
apiError: "DeployAI \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D9\u05D7 \u05DC\u05E2\u05E9\u05D5\u05EA \u05D0\u05EA \u05D6\u05D4 \u05E2\u05DB\u05E9\u05D9\u05D5 ({code}). \u05E0\u05E1\u05D5 \u05E9\u05D5\u05D1 \u05D1\u05E2\u05D5\u05D3 \u05D3\u05E7\u05D4.",
|
|
@@ -22018,7 +22060,7 @@ var M = {
|
|
|
22018
22060
|
uploadTooLargeGuest: "\u05D4\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D2\u05D3\u05D5\u05DC\u05D4 \u05DE\u05D3\u05D9 \u05DC\u05D0\u05EA\u05E8 \u05D1\u05DC\u05D9 \u05D7\u05E9\u05D1\u05D5\u05DF: {size} \u05D0\u05D7\u05E8\u05D9 \u05DB\u05D9\u05D5\u05D5\u05E5, \u05D4\u05DE\u05E7\u05E1\u05D9\u05DE\u05D5\u05DD {max}. \u05D4\u05EA\u05D7\u05D1\u05E8\u05D5 \u05DB\u05D3\u05D9 \u05DC\u05D4\u05E2\u05DC\u05D5\u05EA \u05D9\u05D5\u05EA\u05E8: npx deployai@latest login",
|
|
22019
22061
|
notLinked: "\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DC\u05D0 \u05DE\u05D7\u05D5\u05D1\u05E8\u05EA \u05DC\u05D0\u05EA\u05E8. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest link",
|
|
22020
22062
|
askGuest: "\u05DC\u05D4\u05E2\u05DC\u05D5\u05EA \u05D1\u05DC\u05D9 \u05D7\u05E9\u05D1\u05D5\u05DF? \u05EA\u05E7\u05D1\u05DC\u05D5 \u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9 \u05E9\u05D0\u05E4\u05E9\u05E8 \u05DC\u05E9\u05DE\u05D5\u05E8 \u05D0\u05D7\u05E8 \u05DB\u05DA. (y/N) ",
|
|
22021
|
-
inviteOnly: "\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D1\u05DC\u05D9 \u05D7\u05E9\u05D1\u05D5\u05DF \u05DE\u05D5\u05E9\u05D4\u05D9\u05EA \u05DB\u05DC \u05E2\u05D5\u05D3 \u05D4\u05D4\u05E8\u05E9\u05DE\u05D4 \u05DC
|
|
22063
|
+
inviteOnly: "\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D1\u05DC\u05D9 \u05D7\u05E9\u05D1\u05D5\u05DF \u05DE\u05D5\u05E9\u05D4\u05D9\u05EA \u05DB\u05DC \u05E2\u05D5\u05D3 \u05D4\u05D4\u05E8\u05E9\u05DE\u05D4 \u05DC\u05BEDeployAI \u05D1\u05D4\u05D6\u05DE\u05E0\u05D4 \u05D1\u05DC\u05D1\u05D3. \u05D0\u05DD \u05D9\u05E9 \u05DC\u05DB\u05DD \u05D7\u05E9\u05D1\u05D5\u05DF \u05D0\u05D5 \u05D4\u05D6\u05DE\u05E0\u05D4, \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login",
|
|
22022
22064
|
guestOneSite: "\u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC \u05DC\u05D9\u05E6\u05D5\u05E8 \u05D0\u05EA\u05E8\u05D9\u05DD \u05E0\u05D5\u05E1\u05E4\u05D9\u05DD. \u05E7\u05D5\u05D3\u05DD \u05E9\u05DE\u05E8\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05D1\u05D7\u05E9\u05D1\u05D5\u05DF \u05D7\u05D9\u05E0\u05DD: npx deployai@latest claim",
|
|
22023
22065
|
siteLimit: "\u05D4\u05DE\u05E1\u05DC\u05D5\u05DC \u05E9\u05DC\u05DB\u05DD \u05DE\u05D0\u05E4\u05E9\u05E8 {max} \u05D0\u05EA\u05E8\u05D9\u05DD, \u05D5\u05DB\u05D5\u05DC\u05DD \u05D1\u05E9\u05D9\u05DE\u05D5\u05E9. \u05E2\u05D3\u05DB\u05E0\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05DD \u05D1\u05DE\u05E7\u05D5\u05DD (npx deployai@latest link), \u05D0\u05D5 \u05E9\u05D3\u05E8\u05D2\u05D5 \u05D0\u05EA \u05D4\u05DE\u05E1\u05DC\u05D5\u05DC: {url}",
|
|
22024
22066
|
siteLimitNoMax: "\u05D1\u05DE\u05E1\u05DC\u05D5\u05DC \u05E9\u05DC\u05DB\u05DD \u05D0\u05D9\u05DF \u05DE\u05E7\u05D5\u05DD \u05DC\u05D0\u05EA\u05E8 \u05E0\u05D5\u05E1\u05E3. \u05E2\u05D3\u05DB\u05E0\u05D5 \u05D0\u05D7\u05D3 \u05DE\u05D4\u05D0\u05EA\u05E8\u05D9\u05DD \u05E9\u05DC\u05DB\u05DD \u05D1\u05DE\u05E7\u05D5\u05DD (npx deployai@latest link), \u05D0\u05D5 \u05E9\u05D3\u05E8\u05D2\u05D5 \u05D0\u05EA \u05D4\u05DE\u05E1\u05DC\u05D5\u05DC: {url}",
|
|
@@ -22028,10 +22070,18 @@ var M = {
|
|
|
22028
22070
|
startExpired: "\u05E4\u05D2 \u05D4\u05EA\u05D5\u05E7\u05E3 \u05E9\u05DC \u05D4\u05D4\u05D5\u05E8\u05D0\u05D5\u05EA \u05D4\u05D0\u05DC\u05D4 (\u05D4\u05DF \u05EA\u05E7\u05E4\u05D5\u05EA 7 \u05D9\u05DE\u05D9\u05DD). \u05D4\u05E2\u05EA\u05D9\u05E7\u05D5 \u05D0\u05D5\u05EA\u05DF \u05E9\u05D5\u05D1 \u05DE\u05D4\u05D0\u05EA\u05E8 \u05E9\u05DC DeployAI.",
|
|
22029
22071
|
startUsedUp: "\u05DB\u05D1\u05E8 \u05D4\u05E9\u05EA\u05DE\u05E9\u05D5 \u05D1\u05D4\u05D5\u05E8\u05D0\u05D5\u05EA \u05D4\u05D0\u05DC\u05D4 5 \u05E4\u05E2\u05DE\u05D9\u05DD. \u05D4\u05E2\u05EA\u05D9\u05E7\u05D5 \u05D0\u05D5\u05EA\u05DF \u05E9\u05D5\u05D1 \u05DE\u05D4\u05D0\u05EA\u05E8 \u05E9\u05DC DeployAI.",
|
|
22030
22072
|
loginExpired: "\u05E7\u05D5\u05D3 \u05D4\u05DB\u05E0\u05D9\u05E1\u05D4 \u05E4\u05D2. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login",
|
|
22031
|
-
loggedOut: "\u05D4\u05EA\u05E0\u05EA\u05E7\u05EA\u05DD. \u05D4\u05D8\u05D5\u05E7\u05DF \u05E0\u05DE\u05D7\u05E7 \u05DE\u05D4\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4.",
|
|
22032
|
-
protocol: "\u05EA\u05E9\u05D5\u05D1\u05D4 \u05DC\u05D0 \u05E6\u05E4\u05D5\u05D9\u05D4 \u05DE
|
|
22073
|
+
loggedOut: "\u05D4\u05EA\u05E0\u05EA\u05E7\u05EA\u05DD. \u05D4\u05D8\u05D5\u05E7\u05DF \u05D1\u05D5\u05D8\u05DC \u05D5\u05E0\u05DE\u05D7\u05E7 \u05DE\u05D4\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4.",
|
|
22074
|
+
protocol: "\u05EA\u05E9\u05D5\u05D1\u05D4 \u05DC\u05D0 \u05E6\u05E4\u05D5\u05D9\u05D4 \u05DE\u05BEDeployAI. \u05D4\u05E8\u05D9\u05E6\u05D5 \u05D0\u05EA \u05D4\u05D2\u05E8\u05E1\u05D4 \u05D4\u05D0\u05D7\u05E8\u05D5\u05E0\u05D4: npx deployai@latest",
|
|
22033
22075
|
guestClaimFirst: "\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05D9\u05E9 \u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9, \u05D5\u05D0\u05EA\u05DD \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD \u05DC\u05D7\u05E9\u05D1\u05D5\u05DF. \u05E7\u05D5\u05D3\u05DD \u05E9\u05DE\u05E8\u05D5 \u05D0\u05EA \u05D4\u05D0\u05EA\u05E8 \u05D1\u05D7\u05E9\u05D1\u05D5\u05DF: {url}",
|
|
22034
|
-
guestClaimFirstNoLink: "\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05D9\u05E9 \u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9, \u05D5\u05D0\u05EA\u05DD \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD \u05DC\u05D7\u05E9\u05D1\u05D5\u05DF. \u05E7\u05D5\u05D3\u05DD \u05E9\u05DE\u05E8\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05D1\u05D7\u05E9\u05D1\u05D5\u05DF \u05E2\u05DD \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05E9
|
|
22076
|
+
guestClaimFirstNoLink: "\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05D9\u05E9 \u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9, \u05D5\u05D0\u05EA\u05DD \u05DE\u05D7\u05D5\u05D1\u05E8\u05D9\u05DD \u05DC\u05D7\u05E9\u05D1\u05D5\u05DF. \u05E7\u05D5\u05D3\u05DD \u05E9\u05DE\u05E8\u05D5 \u05D0\u05D5\u05EA\u05D5 \u05D1\u05D7\u05E9\u05D1\u05D5\u05DF \u05E2\u05DD \u05E7\u05D9\u05E9\u05D5\u05E8 \u05D4\u05E9\u05DE\u05D9\u05E8\u05D4 \u05E9\u05BEdeploy --guest \u05D4\u05D3\u05E4\u05D9\u05E1.",
|
|
22077
|
+
guestAccountSite: "\u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05E9\u05D9\u05D9\u05DB\u05EA \u05DC\u05D0\u05EA\u05E8 \u05D1\u05D7\u05E9\u05D1\u05D5\u05DF, \u05D5\u05DC\u05DB\u05DF \u05D4\u05D9\u05D0 \u05DC\u05D0 \u05D9\u05DB\u05D5\u05DC\u05D4 \u05DC\u05E2\u05DC\u05D5\u05EA \u05DB\u05D0\u05EA\u05E8 \u05D6\u05DE\u05E0\u05D9. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login, \u05D5\u05D0\u05D6: npx deployai@latest deploy",
|
|
22078
|
+
sqlWaitingLine: "\u05E9\u05D9\u05E0\u05D5\u05D9\u05D9\u05DD \u05D1\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD (SQL) \u05DE\u05D7\u05DB\u05D9\u05DD \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8 \u05E9\u05DC\u05DB\u05DD \u05DC\u05E4\u05E0\u05D9 \u05E9\u05D4\u05D2\u05E8\u05E1\u05D4 \u05D4\u05D6\u05D5 \u05E2\u05D5\u05DC\u05D4 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8: {url}",
|
|
22079
|
+
sqlWaiting: "\u05D1\u05D2\u05E8\u05E1\u05D4 \u05D4\u05D6\u05D5 \u05D9\u05E9 \u05E9\u05D9\u05E0\u05D5\u05D9\u05D9\u05DD \u05D1\u05DE\u05E1\u05D3 \u05D4\u05E0\u05EA\u05D5\u05E0\u05D9\u05DD (SQL) \u05E9\u05E2\u05D5\u05D3 \u05DC\u05D0 \u05E8\u05E6\u05D5. \u05D0\u05E9\u05E8\u05D5 \u05D0\u05D5\u05EA\u05DD \u05E7\u05D5\u05D3\u05DD \u05D1\u05DC\u05D5\u05D7 \u05D4\u05D1\u05E7\u05E8\u05D4, \u05D5\u05D0\u05D6 \u05D4\u05E2\u05DC\u05D5 \u05DC\u05D0\u05D5\u05D5\u05D9\u05E8 \u05E9\u05D5\u05D1: {url}",
|
|
22080
|
+
tokenOtherApi: "\u05D4\u05DB\u05E0\u05D9\u05E1\u05D4 \u05D1\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4 \u05D4\u05D9\u05D0 \u05DC {saved}, \u05DC\u05D0 \u05DC {url}. \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest login --api {url}, \u05D0\u05D5 \u05D4\u05D5\u05E8\u05D9\u05D3\u05D5 \u05D0\u05EA --api \u05D5\u05D0\u05EA DEPLOYAI_API_URL.",
|
|
22081
|
+
linkConfirm: "\u05DC\u05D7\u05D1\u05E8 \u05D0\u05EA \u05D4\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05D4\u05D6\u05D5 \u05DC {name} ({address})? (y/N) ",
|
|
22082
|
+
linkOnlyOne: "\u05D9\u05E9 \u05DC\u05DB\u05DD \u05D0\u05EA\u05E8 \u05D0\u05D7\u05D3: {name} ({address}). \u05DB\u05D3\u05D9 \u05DC\u05D7\u05D1\u05E8 \u05D0\u05D5\u05EA\u05D5, \u05D0\u05D5 \u05D0\u05EA\u05E8 \u05D7\u05D3\u05E9, \u05D4\u05E8\u05D9\u05E6\u05D5:",
|
|
22083
|
+
linkCancelled: "\u05DC\u05D0 \u05D7\u05D5\u05D1\u05E8. \u05E9\u05D5\u05DD \u05D3\u05D1\u05E8 \u05DC\u05D0 \u05D4\u05E9\u05EA\u05E0\u05D4.",
|
|
22084
|
+
loggedOutLocalOnly: "\u05D4\u05EA\u05E0\u05EA\u05E7\u05EA\u05DD \u05D1\u05DE\u05D7\u05E9\u05D1 \u05D4\u05D6\u05D4. \u05DC\u05D0 \u05D4\u05E6\u05DC\u05D7\u05E0\u05D5 \u05DC\u05D4\u05D2\u05D9\u05E2 \u05DC\u05BEDeployAI, \u05D0\u05D6 \u05D4\u05D8\u05D5\u05E7\u05DF \u05EA\u05E7\u05E3 \u05E2\u05D3 \u05E9\u05D9\u05E4\u05D5\u05D2 (30 \u05D9\u05D5\u05DD).",
|
|
22035
22085
|
savedIn: "\u05E0\u05E9\u05DE\u05E8 \u05D1 .deployai/project.json",
|
|
22036
22086
|
createdProject: "\u05E0\u05D5\u05E6\u05E8 \u05D4\u05D0\u05EA\u05E8 {name}.",
|
|
22037
22087
|
noProjects: "\u05D0\u05D9\u05DF \u05E2\u05D3\u05D9\u05D9\u05DF \u05D0\u05EA\u05E8\u05D9\u05DD.",
|
|
@@ -22041,8 +22091,8 @@ var M = {
|
|
|
22041
22091
|
runLinkPick: ' \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest link <slug>, \u05D0\u05D5: npx deployai@latest link --create "<name>"',
|
|
22042
22092
|
runLink: " \u05D4\u05E8\u05D9\u05E6\u05D5: npx deployai@latest link",
|
|
22043
22093
|
nextSteps: "\u05D4\u05E9\u05DC\u05D1\u05D9\u05DD \u05D4\u05D1\u05D0\u05D9\u05DD",
|
|
22044
|
-
readme: "\u05D1
|
|
22045
|
-
states: { online: "\u05D1\u05D0\u05D5\u05D5\u05D9\u05E8", building: "\u05D1\u05D1\u05E0\u05D9\u05D9\u05D4", ready: "\u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8", failed: "\u05E0\u05DB\u05E9\u05DC", paused: "\u05DE\u05D5\u05E9\u05D4\u05D4", off: "\u05DB\u05D1\u05D5\u05D9", queued: "\u05D1\u05EA\u05D5\u05E8", deleted: "\u05E0\u05DE\u05D7\u05E7", new: "\u05D7\u05D3\u05E9" }
|
|
22094
|
+
readme: "\u05D1\u05BEREADME.md \u05E9\u05D1\u05EA\u05D9\u05E7\u05D9\u05D9\u05D4 \u05DB\u05EA\u05D5\u05D1 \u05DE\u05D4 \u05DB\u05DC \u05E7\u05D5\u05D1\u05E5 \u05E2\u05D5\u05E9\u05D4.",
|
|
22095
|
+
states: { online: "\u05D1\u05D0\u05D5\u05D5\u05D9\u05E8", building: "\u05D1\u05D1\u05E0\u05D9\u05D9\u05D4", ready: "\u05DE\u05D7\u05DB\u05D4 \u05DC\u05D0\u05D9\u05E9\u05D5\u05E8", failed: "\u05E0\u05DB\u05E9\u05DC", paused: "\u05DE\u05D5\u05E9\u05D4\u05D4", off: "\u05DB\u05D1\u05D5\u05D9", queued: "\u05D1\u05EA\u05D5\u05E8", replaced: "\u05D4\u05D5\u05D7\u05DC\u05E4\u05D4 \u05D1\u05D4\u05E2\u05DC\u05D0\u05D4 \u05D7\u05D3\u05E9\u05D4 \u05D9\u05D5\u05EA\u05E8", deleted: "\u05E0\u05DE\u05D7\u05E7", new: "\u05D7\u05D3\u05E9" }
|
|
22046
22096
|
}
|
|
22047
22097
|
};
|
|
22048
22098
|
function stateName(state, root) {
|
|
@@ -22055,7 +22105,7 @@ function messages(root) {
|
|
|
22055
22105
|
}
|
|
22056
22106
|
|
|
22057
22107
|
// src/version.ts
|
|
22058
|
-
var CLI_VERSION = "0.1.0-beta.
|
|
22108
|
+
var CLI_VERSION = "0.1.0-beta.4";
|
|
22059
22109
|
|
|
22060
22110
|
// src/api.ts
|
|
22061
22111
|
function apiContext(apiFlag) {
|
|
@@ -22067,6 +22117,8 @@ function userAgent(cfg) {
|
|
|
22067
22117
|
}
|
|
22068
22118
|
function requireToken(ctx) {
|
|
22069
22119
|
if (!ctx.config.token) throw new CliError(messages(process.cwd())("notLoggedIn"), 1, "auth");
|
|
22120
|
+
const saved = ctx.config.tokenApiUrl?.replace(/\/+$/, "");
|
|
22121
|
+
if (saved && saved !== ctx.apiUrl.replace(/\/+$/, "")) throw new CliError(messages(process.cwd())("tokenOtherApi", { saved, url: ctx.apiUrl }), 1, "auth");
|
|
22070
22122
|
return ctx.config.token;
|
|
22071
22123
|
}
|
|
22072
22124
|
async function apiRequest(ctx, path, schema, opts = {}) {
|
|
@@ -22111,6 +22163,9 @@ async function apiRequest(ctx, path, schema, opts = {}) {
|
|
|
22111
22163
|
if (parsed2.success && parsed2.data.error === "not_entitled") {
|
|
22112
22164
|
throw new CliError(t("notEntitled", { url: parsed2.data.buyUrl ?? ctx.apiUrl }), 1, "not_entitled");
|
|
22113
22165
|
}
|
|
22166
|
+
if (parsed2.success && parsed2.data.error === "sql_waiting") {
|
|
22167
|
+
throw new CliError(t("sqlWaiting", { url: parsed2.data.url ?? `${ctx.apiUrl}/dashboard` }), 1, "sql_waiting");
|
|
22168
|
+
}
|
|
22114
22169
|
const known = parsed2.success ? knownError(parsed2.data.error, data?.max, t, { ...data, billingUrl: `${ctx.apiUrl}/billing` }) : null;
|
|
22115
22170
|
if (known) throw new CliError(known, 1, parsed2.success ? parsed2.data.error : "api");
|
|
22116
22171
|
const msg = parsed2.success ? parsed2.data.error : `HTTP ${res.status}`;
|
|
@@ -22279,22 +22334,20 @@ async function sendTelemetryEvent(ctx, event) {
|
|
|
22279
22334
|
}
|
|
22280
22335
|
|
|
22281
22336
|
// src/commands/init.ts
|
|
22282
|
-
import { existsSync as
|
|
22337
|
+
import { existsSync as existsSync5, writeFileSync as writeFileSync3 } from "fs";
|
|
22283
22338
|
import { join as join5 } from "path";
|
|
22284
22339
|
|
|
22285
22340
|
// src/analyze.ts
|
|
22286
22341
|
import { execFileSync } from "child_process";
|
|
22287
|
-
import { existsSync as
|
|
22342
|
+
import { existsSync as existsSync4, readFileSync as readFileSync4, readdirSync as readdirSync2 } from "fs";
|
|
22288
22343
|
import { join as join4 } from "path";
|
|
22289
22344
|
|
|
22290
22345
|
// src/files.ts
|
|
22291
|
-
import { readdirSync, readFileSync as readFileSync3, lstatSync } from "fs";
|
|
22346
|
+
import { existsSync as existsSync3, readdirSync, readFileSync as readFileSync3, lstatSync } from "fs";
|
|
22292
22347
|
import { join as join3 } from "path";
|
|
22293
22348
|
var SKIP_DIRS = /* @__PURE__ */ new Set([
|
|
22294
22349
|
"node_modules",
|
|
22295
22350
|
".git",
|
|
22296
|
-
"dist",
|
|
22297
|
-
"build",
|
|
22298
22351
|
".next",
|
|
22299
22352
|
".astro",
|
|
22300
22353
|
".svelte-kit",
|
|
@@ -22302,9 +22355,19 @@ var SKIP_DIRS = /* @__PURE__ */ new Set([
|
|
|
22302
22355
|
".vercel",
|
|
22303
22356
|
".wrangler",
|
|
22304
22357
|
".turbo",
|
|
22305
|
-
".cache"
|
|
22306
|
-
"coverage"
|
|
22358
|
+
".cache"
|
|
22307
22359
|
]);
|
|
22360
|
+
var ROOT_BUILD_DIRS = /* @__PURE__ */ new Set(["dist", "build", "out", "coverage"]);
|
|
22361
|
+
function rootBuilds(root) {
|
|
22362
|
+
const file2 = join3(root, "package.json");
|
|
22363
|
+
if (!existsSync3(file2)) return false;
|
|
22364
|
+
try {
|
|
22365
|
+
const pkg = JSON.parse(readFileSync3(file2, "utf8"));
|
|
22366
|
+
return typeof pkg?.scripts?.build === "string";
|
|
22367
|
+
} catch {
|
|
22368
|
+
return true;
|
|
22369
|
+
}
|
|
22370
|
+
}
|
|
22308
22371
|
var MAX_FILE_BYTES = 10 * 1024 * 1024;
|
|
22309
22372
|
var MAX_TOTAL_BYTES = 50 * 1024 * 1024;
|
|
22310
22373
|
function isEnvFile(name) {
|
|
@@ -22375,10 +22438,19 @@ function loadIgnore(root) {
|
|
|
22375
22438
|
return [];
|
|
22376
22439
|
}
|
|
22377
22440
|
}
|
|
22441
|
+
function loadUploadIgnore(root) {
|
|
22442
|
+
let git = [];
|
|
22443
|
+
try {
|
|
22444
|
+
git = parseIgnore(readFileSync3(join3(root, ".gitignore"), "utf8"));
|
|
22445
|
+
} catch {
|
|
22446
|
+
}
|
|
22447
|
+
return [...git, ...loadIgnore(root)];
|
|
22448
|
+
}
|
|
22378
22449
|
function walkFiles(root, opts = {}) {
|
|
22379
22450
|
const result = [];
|
|
22380
22451
|
const maxFiles = opts.maxFiles ?? 2e4;
|
|
22381
22452
|
const rules = opts.ignore ?? [];
|
|
22453
|
+
const skipRootBuild = opts.skipRootBuild ?? rootBuilds(root);
|
|
22382
22454
|
const visit2 = (dirAbs, dirRel) => {
|
|
22383
22455
|
let names;
|
|
22384
22456
|
try {
|
|
@@ -22399,6 +22471,7 @@ function walkFiles(root, opts = {}) {
|
|
|
22399
22471
|
if (st.isSymbolicLink()) continue;
|
|
22400
22472
|
if (st.isDirectory()) {
|
|
22401
22473
|
if (SKIP_DIRS.has(name)) continue;
|
|
22474
|
+
if (!dirRel && skipRootBuild && ROOT_BUILD_DIRS.has(name)) continue;
|
|
22402
22475
|
if (isIgnored(rules, rel, true)) continue;
|
|
22403
22476
|
visit2(abs, rel);
|
|
22404
22477
|
} else if (st.isFile()) {
|
|
@@ -22412,12 +22485,12 @@ function walkFiles(root, opts = {}) {
|
|
|
22412
22485
|
return result;
|
|
22413
22486
|
}
|
|
22414
22487
|
function planUpload(root) {
|
|
22415
|
-
const all = walkFiles(root, { ignore:
|
|
22488
|
+
const all = walkFiles(root, { ignore: loadUploadIgnore(root), skipEnv: true, maxFiles: 1e5 });
|
|
22416
22489
|
const files = [];
|
|
22417
22490
|
const skippedLarge = [];
|
|
22418
22491
|
let totalBytes = 0;
|
|
22419
22492
|
for (const f of all) {
|
|
22420
|
-
if (f.rel
|
|
22493
|
+
if (neverUploadedFile(f.rel)) continue;
|
|
22421
22494
|
if (f.size > MAX_FILE_BYTES) {
|
|
22422
22495
|
skippedLarge.push(f);
|
|
22423
22496
|
continue;
|
|
@@ -22506,10 +22579,10 @@ function depLine(pkgText, dep) {
|
|
|
22506
22579
|
return l ?? void 0;
|
|
22507
22580
|
}
|
|
22508
22581
|
function detectPackageManager(root, pkg) {
|
|
22509
|
-
if (
|
|
22510
|
-
if (
|
|
22511
|
-
if (
|
|
22512
|
-
if (
|
|
22582
|
+
if (existsSync4(join4(root, "pnpm-lock.yaml"))) return "pnpm";
|
|
22583
|
+
if (existsSync4(join4(root, "bun.lockb")) || existsSync4(join4(root, "bun.lock"))) return "bun";
|
|
22584
|
+
if (existsSync4(join4(root, "yarn.lock"))) return "yarn";
|
|
22585
|
+
if (existsSync4(join4(root, "package-lock.json"))) return "npm";
|
|
22513
22586
|
const pm = pkg?.packageManager?.split("@")[0];
|
|
22514
22587
|
if (pm === "pnpm" || pm === "yarn" || pm === "bun" || pm === "npm") return pm;
|
|
22515
22588
|
return pkg ? "npm" : "none";
|
|
@@ -22537,7 +22610,7 @@ function detectFramework2(root, pkg, files, sources) {
|
|
|
22537
22610
|
}
|
|
22538
22611
|
function detectLanguage(root, pkg, files) {
|
|
22539
22612
|
const deps = { ...pkg?.devDependencies ?? {}, ...pkg?.dependencies ?? {} };
|
|
22540
|
-
if (
|
|
22613
|
+
if (existsSync4(join4(root, "tsconfig.json")) || deps.typescript) return "TypeScript";
|
|
22541
22614
|
if (files.some((f) => /\.(ts|tsx|mts|cts)$/.test(f.rel) && !f.rel.endsWith(".d.ts"))) return "TypeScript";
|
|
22542
22615
|
if (files.some((f) => /\.(js|jsx|mjs|cjs)$/.test(f.rel)) || pkg) return "JavaScript";
|
|
22543
22616
|
return "HTML";
|
|
@@ -22554,7 +22627,7 @@ function isBuildTimeFile(rel) {
|
|
|
22554
22627
|
return /\.config\.(js|ts|mjs|cjs|mts|cts)$/.test(base) || /^(scripts|tools|tests?|__tests__|e2e|cypress|prisma\/seed)\//.test(rel) || /\/(__tests__|__mocks__)\//.test(rel) || /\.(test|spec|stories)\.[a-z]+$/.test(base) || base.endsWith(".d.ts") || /^seed\.(js|ts|mjs)$/.test(base);
|
|
22555
22628
|
}
|
|
22556
22629
|
function trackedEnvFiles(root) {
|
|
22557
|
-
if (!
|
|
22630
|
+
if (!existsSync4(join4(root, ".git"))) return [];
|
|
22558
22631
|
try {
|
|
22559
22632
|
const out2 = execFileSync("git", ["ls-files", "-z"], { cwd: root, encoding: "utf8", timeout: 5e3, stdio: ["ignore", "pipe", "ignore"] });
|
|
22560
22633
|
return out2.split("\0").filter((p) => {
|
|
@@ -22725,7 +22798,7 @@ function analyzeProject(root) {
|
|
|
22725
22798
|
}
|
|
22726
22799
|
if (!databases.some((d) => d.kind === "d1")) {
|
|
22727
22800
|
for (const name of ["wrangler.toml", "wrangler.json", "wrangler.jsonc"]) {
|
|
22728
|
-
if (!
|
|
22801
|
+
if (!existsSync4(join4(root, name))) continue;
|
|
22729
22802
|
const text = readFileSync4(join4(root, name), "utf8");
|
|
22730
22803
|
const at = text.search(/d1_databases/);
|
|
22731
22804
|
if (at < 0) continue;
|
|
@@ -22902,7 +22975,7 @@ function runInit(root, opts = {}) {
|
|
|
22902
22975
|
const created = [];
|
|
22903
22976
|
const kept = [];
|
|
22904
22977
|
const md = join5(root, "DEPLOYAI.md");
|
|
22905
|
-
if (
|
|
22978
|
+
if (existsSync5(md) && !opts.force) {
|
|
22906
22979
|
kept.push("DEPLOYAI.md");
|
|
22907
22980
|
} else {
|
|
22908
22981
|
writeFileSync3(md, DEPLOYAI_MD);
|
|
@@ -23204,7 +23277,7 @@ async function loginCommand(ctx, opts = {}) {
|
|
|
23204
23277
|
});
|
|
23205
23278
|
if (poll.status === "approved") {
|
|
23206
23279
|
if (!poll.token) throw new CliError(messages()("loginNoToken"), 1, "protocol");
|
|
23207
|
-
updateConfig({ token: poll.token, email: poll.email, apiUrl: ctx.apiUrl });
|
|
23280
|
+
updateConfig({ token: poll.token, email: poll.email, apiUrl: ctx.apiUrl, tokenApiUrl: ctx.apiUrl });
|
|
23208
23281
|
out();
|
|
23209
23282
|
out(poll.email ? t("loggedInAs", { email: poll.email }) : t("loggedIn"));
|
|
23210
23283
|
out(t("nextStep"));
|
|
@@ -23215,9 +23288,18 @@ async function loginCommand(ctx, opts = {}) {
|
|
|
23215
23288
|
}
|
|
23216
23289
|
throw new CliError(t("loginExpired"), 1, "auth_expired");
|
|
23217
23290
|
}
|
|
23218
|
-
function logoutCommand() {
|
|
23219
|
-
|
|
23220
|
-
|
|
23291
|
+
async function logoutCommand(ctx) {
|
|
23292
|
+
let revoked = true;
|
|
23293
|
+
if (ctx.config.token) {
|
|
23294
|
+
const apiUrl = (ctx.config.tokenApiUrl ?? ctx.apiUrl).replace(/\/+$/, "");
|
|
23295
|
+
try {
|
|
23296
|
+
await apiRequest({ apiUrl, config: ctx.config }, "/api/cli/logout", null, { method: "POST", body: {}, timeoutMs: 1e4 });
|
|
23297
|
+
} catch (e2) {
|
|
23298
|
+
revoked = e2 instanceof CliError && e2.category === "auth";
|
|
23299
|
+
}
|
|
23300
|
+
}
|
|
23301
|
+
updateConfig({ token: void 0, tokenApiUrl: void 0, email: void 0 });
|
|
23302
|
+
out(messages()(revoked ? "loggedOut" : "loggedOutLocalOnly"));
|
|
23221
23303
|
}
|
|
23222
23304
|
async function whoamiCommand(ctx) {
|
|
23223
23305
|
const me = await apiRequest(ctx, "/api/cli/me", MeResponse);
|
|
@@ -23306,8 +23388,21 @@ async function linkCommand(root, ctx, target, opts) {
|
|
|
23306
23388
|
return;
|
|
23307
23389
|
}
|
|
23308
23390
|
if (projects.length === 1) {
|
|
23309
|
-
|
|
23310
|
-
|
|
23391
|
+
const p = projects[0];
|
|
23392
|
+
const address = p.url ?? p.slug;
|
|
23393
|
+
if (process.stdin.isTTY && process.stdout.isTTY) {
|
|
23394
|
+
const rl = createInterface({ input: process.stdin, output: process.stdout });
|
|
23395
|
+
let answer;
|
|
23396
|
+
try {
|
|
23397
|
+
answer = (await rl.question(t("linkConfirm", { name: p.name, address }))).trim().toLowerCase();
|
|
23398
|
+
} finally {
|
|
23399
|
+
rl.close();
|
|
23400
|
+
}
|
|
23401
|
+
if (answer === "y" || answer === "yes") return save(root, p);
|
|
23402
|
+
out(t("linkCancelled"));
|
|
23403
|
+
return;
|
|
23404
|
+
}
|
|
23405
|
+
throw new CliError([t("linkOnlyOne", { name: p.name, address }), ` npx deployai@latest link ${p.slug}`, ' npx deployai@latest link --create "<name>"'].join("\n"), 1, "usage");
|
|
23311
23406
|
}
|
|
23312
23407
|
const current = readProject(root)?.projectId;
|
|
23313
23408
|
out(t("projects"));
|
|
@@ -23487,6 +23582,7 @@ async function deployCommand(root, ctx, opts) {
|
|
|
23487
23582
|
if (!ctx.config.token) {
|
|
23488
23583
|
const guestToken = project?.projectId ? ctx.config.guestTokens?.[project.projectId] : void 0;
|
|
23489
23584
|
if (guestToken) return deployVersion(root, { ...ctx, config: { ...ctx.config, token: guestToken } }, opts, true);
|
|
23585
|
+
if (project?.projectId) throw new CliError(messages(root)("guestAccountSite"), 1, "auth");
|
|
23490
23586
|
const interactive = Boolean(process.stdin.isTTY && process.stdout.isTTY);
|
|
23491
23587
|
if (!opts.guest && !(interactive && await askGuest(root))) {
|
|
23492
23588
|
throw new CliError(messages(root)("deployNotLoggedIn"), 1, "auth");
|
|
@@ -23498,7 +23594,7 @@ async function deployCommand(root, ctx, opts) {
|
|
|
23498
23594
|
try {
|
|
23499
23595
|
return await deployVersion(root, ctx, opts, false);
|
|
23500
23596
|
} catch (e2) {
|
|
23501
|
-
if (!claim2 || !(e2 instanceof CliError) || e2.category !== "forbidden") throw e2;
|
|
23597
|
+
if (!claim2 || !(e2 instanceof CliError) || e2.category !== "forbidden" && e2.category !== "not_found") throw e2;
|
|
23502
23598
|
const t = messages(root);
|
|
23503
23599
|
const url2 = ctx.config.guestClaims?.[claim2];
|
|
23504
23600
|
throw new CliError(url2 ? t("guestClaimFirst", { url: url2 }) : t("guestClaimFirstNoLink"), 1, "guest_unclaimed");
|
|
@@ -23619,7 +23715,7 @@ async function claimCommand(root, ctx, opts) {
|
|
|
23619
23715
|
|
|
23620
23716
|
// src/commands/samples.ts
|
|
23621
23717
|
import { createInterface as createInterface3 } from "readline/promises";
|
|
23622
|
-
import { existsSync as
|
|
23718
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync3, readdirSync as readdirSync3, writeFileSync as writeFileSync5 } from "fs";
|
|
23623
23719
|
import { dirname, join as join6, relative, resolve, sep } from "path";
|
|
23624
23720
|
import { gunzipSync } from "zlib";
|
|
23625
23721
|
var SAMPLES = [
|
|
@@ -23641,7 +23737,7 @@ function listSamples(apiUrl) {
|
|
|
23641
23737
|
out(`See them live: ${apiUrl}/samples`);
|
|
23642
23738
|
}
|
|
23643
23739
|
function filesIn(dir) {
|
|
23644
|
-
return
|
|
23740
|
+
return existsSync6(dir) ? readdirSync3(dir).filter((f) => !IGNORED.has(f)) : [];
|
|
23645
23741
|
}
|
|
23646
23742
|
function freeFolder(cwd, key) {
|
|
23647
23743
|
for (let n2 = 1; ; n2++) {
|
|
@@ -23724,7 +23820,7 @@ async function samplesCommand(cwd, ctx, key, opts = {}) {
|
|
|
23724
23820
|
}
|
|
23725
23821
|
const written = await downloadSample(ctx, sample.key, root);
|
|
23726
23822
|
const base = resolve(root);
|
|
23727
|
-
const hasPackage =
|
|
23823
|
+
const hasPackage = existsSync6(join6(base, "package.json"));
|
|
23728
23824
|
out(base === resolve(cwd) ? `Downloaded the ${sample.key} sample: ${written} files.` : `Downloaded the ${sample.key} sample into the new folder ${relative(cwd, base)}: ${written} files. Work in that folder from now on.`);
|
|
23729
23825
|
out("");
|
|
23730
23826
|
const t = messages(base);
|
|
@@ -23796,18 +23892,23 @@ async function versionsCommand(root, ctx) {
|
|
|
23796
23892
|
const sorted = [...versions].sort((a, b) => b.number - a.number);
|
|
23797
23893
|
out("Versions");
|
|
23798
23894
|
for (const v of sorted) {
|
|
23895
|
+
const status = v.status === "replaced" ? stateName("replaced", root) : v.status;
|
|
23799
23896
|
const cols = [
|
|
23800
23897
|
`v${v.number}`.padEnd(6),
|
|
23801
23898
|
(v.isLive ? "live" : "").padEnd(6),
|
|
23802
|
-
|
|
23899
|
+
status.padEnd(10),
|
|
23803
23900
|
shortDate(v.createdAt).padEnd(18),
|
|
23804
23901
|
formatBytes(v.sizeBytes).padEnd(10),
|
|
23805
23902
|
v.message
|
|
23806
23903
|
];
|
|
23807
23904
|
out(` ${cols.join("")}`);
|
|
23808
23905
|
if (v.error) out(` ${v.error}`);
|
|
23906
|
+
if (v.migrationStatus === "waiting") out(` ${messages(root)("sqlWaitingLine", { url: versionsPage(ctx, projectId) })}`);
|
|
23809
23907
|
}
|
|
23810
23908
|
}
|
|
23909
|
+
function versionsPage(ctx, projectId) {
|
|
23910
|
+
return `${ctx.apiUrl}/project/${encodeURIComponent(projectId)}/versions`;
|
|
23911
|
+
}
|
|
23811
23912
|
async function changeLiveCommand(root, ctx, version2, kind) {
|
|
23812
23913
|
requireToken(ctx);
|
|
23813
23914
|
const projectId = linkedProjectId(root);
|
|
@@ -23835,6 +23936,10 @@ async function statusCommand(root, ctx) {
|
|
|
23835
23936
|
[t("queue"), s.queue.running ? t("buildingNow") : s.queue.position > 0 ? queueText(s.queue.position, root) : t("idle")]
|
|
23836
23937
|
])
|
|
23837
23938
|
);
|
|
23939
|
+
if (s.latest?.migrationStatus === "waiting") {
|
|
23940
|
+
out();
|
|
23941
|
+
out(t("sqlWaitingLine", { url: versionsPage(ctx, projectId) }));
|
|
23942
|
+
}
|
|
23838
23943
|
if (s.latest?.status !== "failed") return;
|
|
23839
23944
|
out();
|
|
23840
23945
|
out(t("buildFailed", { n: s.latest.number }));
|
|
@@ -23850,7 +23955,7 @@ async function statusCommand(root, ctx) {
|
|
|
23850
23955
|
|
|
23851
23956
|
// src/commands/start.ts
|
|
23852
23957
|
import { spawnSync as spawnSync2 } from "child_process";
|
|
23853
|
-
import { existsSync as
|
|
23958
|
+
import { existsSync as existsSync7, writeFileSync as writeFileSync6 } from "fs";
|
|
23854
23959
|
import { join as join7, relative as relative2, resolve as resolve2 } from "path";
|
|
23855
23960
|
var REASONS = { start_not_found: "startNotFound", start_expired: "startExpired", start_used_up: "startUsedUp" };
|
|
23856
23961
|
var reason = (code) => messages(process.cwd())(REASONS[code] ?? "startNotFound");
|
|
@@ -23889,7 +23994,7 @@ async function startCommand(cwd, ctx, id, opts = {}) {
|
|
|
23889
23994
|
if (sample && !sameSite) {
|
|
23890
23995
|
const written = await downloadSample(ctx, sample.key, root);
|
|
23891
23996
|
done.push(t("startDownloaded", { key: sample.key, n: written }));
|
|
23892
|
-
if (
|
|
23997
|
+
if (existsSync7(join7(root, "package.json"))) {
|
|
23893
23998
|
if (opts.install !== false && install(root)) done.push(t("startInstalled"));
|
|
23894
23999
|
else steps.unshift({ cmd: "npm install", say: "Installs the sample's packages." });
|
|
23895
24000
|
}
|
|
@@ -23960,6 +24065,25 @@ async function addonsCommand(root, ctx) {
|
|
|
23960
24065
|
}
|
|
23961
24066
|
out(`Next: ${r.next}. Ask the site owner if they want to start it now, then run: npx deployai@latest addon next`);
|
|
23962
24067
|
}
|
|
24068
|
+
async function addonBuyCommand(root, ctx, key) {
|
|
24069
|
+
requireToken(ctx);
|
|
24070
|
+
const projectId = linkedProjectId2(root);
|
|
24071
|
+
const name = key.trim().toLowerCase();
|
|
24072
|
+
const r = await apiRequest(ctx, `/api/cli/addons?projectId=${encodeURIComponent(projectId)}`, AddonsResponse);
|
|
24073
|
+
if (!r.open) {
|
|
24074
|
+
out("The DeployAI marketplace is not open yet. Add-ons open soon.");
|
|
24075
|
+
return;
|
|
24076
|
+
}
|
|
24077
|
+
const a = r.addons.find((x) => x.key === name);
|
|
24078
|
+
if (!a) throw new CliError(`No add-on named ${name}. See the list: npx deployai@latest addons`, 1, "unknown");
|
|
24079
|
+
if (a.owned) {
|
|
24080
|
+
out(`This site already has ${a.name}. To run it: npx deployai@latest addon run ${a.key}`);
|
|
24081
|
+
return;
|
|
24082
|
+
}
|
|
24083
|
+
if (!a.buyUrl) throw new CliError(`${a.name} is not for sale right now.`, 1, "not_for_sale");
|
|
24084
|
+
out(`Send this link to the site owner. They pay once for this site, then run: npx deployai@latest addon run ${a.key}`);
|
|
24085
|
+
out(a.buyUrl);
|
|
24086
|
+
}
|
|
23963
24087
|
function printAddon(a) {
|
|
23964
24088
|
out(`DeployAI add-on ${a.position} of ${a.total}: ${a.name} (${a.key}, run ${a.runId}).`);
|
|
23965
24089
|
out("Follow these instructions step by step, with the site owner:");
|
|
@@ -24094,7 +24218,7 @@ function buildProgram() {
|
|
|
24094
24218
|
program.command("start").description("start from the line copied on the DeployAI site: prepares this folder with every choice made there, then prints the steps").argument("<id>", "the code from the copied line").option("--here", "put a new site in this folder even when it has files").option("--no-install", "do not run npm install for the sample").action((id, opts, cmd) => startCommand(root(cmd), ctx(cmd), id, opts));
|
|
24095
24219
|
program.command("samples").description("list the official sample sites, or download one (into this folder when empty, else a new one)").argument("[name]", "landing, business, form, crud, shop or admin").argument("[folder]", "put the sample in this folder (default: this one when empty, else asks or makes a new one)").option("--force", "write into this folder even when it has files").action((name, folder, opts, cmd) => samplesCommand(root(cmd), ctx(cmd), name, { ...opts, folder }));
|
|
24096
24220
|
program.command("login").description("log in through the browser").action((_opts, cmd) => loginCommand(ctx(cmd), { root: root(cmd) }));
|
|
24097
|
-
program.command("logout").description("
|
|
24221
|
+
program.command("logout").description("cancel the login token and remove it from this computer").action((_opts, cmd) => logoutCommand(ctx(cmd)));
|
|
24098
24222
|
program.command("whoami").description("show the logged in user").action((_opts, cmd) => whoamiCommand(ctx(cmd)));
|
|
24099
24223
|
program.command("telemetry").description("show what is sent, or turn telemetry on or off").argument("[action]", "status, on or off", "status").action((action) => telemetryCommand(action));
|
|
24100
24224
|
program.command("link").description("link this folder to a DeployAI project").argument("[project]", "project slug or id").option("--create <name>", "create a new project and link it").action(
|
|
@@ -24111,6 +24235,7 @@ function buildProgram() {
|
|
|
24111
24235
|
const addon = program.command("addon").description("run the add-ons of this site, one at a time");
|
|
24112
24236
|
addon.command("next").description("print the next add-on for your agent").action((_opts, cmd) => addonNextCommand(root(cmd), ctx(cmd)));
|
|
24113
24237
|
addon.command("run").description("print one add-on by name").argument("<name>", "the add-on name, as npx deployai@latest addons lists it").action((name, _opts, cmd) => addonRunCommand(root(cmd), ctx(cmd), name));
|
|
24238
|
+
addon.command("buy").description("print the link where the site owner buys an add-on").argument("<name>", "the add-on name, as npx deployai@latest addons lists it").action((name, _opts, cmd) => addonBuyCommand(root(cmd), ctx(cmd), name));
|
|
24114
24239
|
addon.command("done").description("save the report of a finished add-on and print the next one").argument("<runId>", "the run id printed at the top of the add-on").option("--status <status>", "done, failed or skipped", "done").option("--report <file>", "the JSON report, for example .deployai/addon-report.json").action((runId, opts, cmd) => addonDoneCommand(root(cmd), ctx(cmd), runId, opts));
|
|
24115
24240
|
program.command("speed").description("Google PageSpeed test of a page: lab results, real visitor data, biggest opportunities").argument("<url>", "the page address").option("--desktop", "test a desktop load instead of a phone").action((url2, opts, cmd) => speedCommand(ctx(cmd), url2, opts));
|
|
24116
24241
|
const env = program.command("env").description("the site's environment variables: secrets by default, never shown again");
|