gipity 1.1.4 → 1.1.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/adopt-cwd.js +1 -1
- package/dist/agents/agy.js +52 -0
- package/dist/agents/index.js +2 -0
- package/dist/api.js +19 -3
- package/dist/banner.js +3 -5
- package/dist/capture/sources/agy.js +88 -0
- package/dist/client-context.js +9 -0
- package/dist/commands/add.js +1 -1
- package/dist/commands/brand.js +125 -0
- package/dist/commands/build.js +13 -12
- package/dist/commands/chat.js +1 -1
- package/dist/commands/deploy.js +1 -1
- package/dist/commands/fn.js +2 -8
- package/dist/commands/generate.js +5 -5
- package/dist/commands/gmail.js +1 -1
- package/dist/commands/init.js +2 -2
- package/dist/commands/job.js +10 -5
- package/dist/commands/key.js +91 -0
- package/dist/commands/load.js +2 -2
- package/dist/commands/login.js +7 -2
- package/dist/commands/page-eval.js +47 -8
- package/dist/commands/page-fetch.js +14 -10
- package/dist/commands/page-inspect.js +2 -2
- package/dist/commands/page-screenshot.js +5 -5
- package/dist/commands/page-test.js +1 -1
- package/dist/commands/records.js +57 -19
- package/dist/commands/remove.js +1 -1
- package/dist/commands/sandbox.js +1 -1
- package/dist/commands/save.js +1 -1
- package/dist/commands/secrets.js +1 -1
- package/dist/commands/service.js +1 -1
- package/dist/commands/setup.js +4 -6
- package/dist/commands/status.js +41 -12
- package/dist/commands/storage.js +2 -2
- package/dist/commands/sync.js +15 -0
- package/dist/commands/test.js +1 -1
- package/dist/commands/token.js +6 -1
- package/dist/commands/uninstall.js +14 -1
- package/dist/commands/upload.js +1 -1
- package/dist/commands/workflow.js +1 -1
- package/dist/hooks/capture-runner.js +20 -8
- package/dist/index.js +1046 -518
- package/dist/knowledge.js +4 -1
- package/dist/login-flow.js +44 -2
- package/dist/project-setup.js +2 -0
- package/dist/relay/diagnostics.js +4 -2
- package/dist/relay/onboarding.js +26 -44
- package/dist/setup.js +198 -16
- package/dist/sync.js +6 -6
- package/dist/template-vars.js +74 -0
- package/dist/utils.js +60 -3
- package/package.json +2 -2
package/dist/template-vars.js
CHANGED
|
@@ -33,6 +33,7 @@ export const KNOWN_PLACEHOLDERS = [
|
|
|
33
33
|
'{{JS_TITLE}}',
|
|
34
34
|
'{{PROJECT_GUID}}',
|
|
35
35
|
'{{DATABASE}}',
|
|
36
|
+
'{{HEAD_BLOCK}}',
|
|
36
37
|
'{{DESCRIPTION_META}}',
|
|
37
38
|
'{{OG_DESCRIPTION}}',
|
|
38
39
|
'{{JSON_LD_BLOCK}}',
|
|
@@ -49,6 +50,76 @@ function escapeHtml(s) {
|
|
|
49
50
|
function jsEscape(s) {
|
|
50
51
|
return s.replace(/\\/g, '\\\\').replace(/'/g, "\\'");
|
|
51
52
|
}
|
|
53
|
+
/** Accent palette + hash, mirrored from the server's `services/app-brand.ts`
|
|
54
|
+
* so the {{HEAD_BLOCK}} theme-color this path emits matches what a server
|
|
55
|
+
* install of the same project would emit. Append-only; keep in sync. */
|
|
56
|
+
const ACCENT_PALETTE = [
|
|
57
|
+
'#f59e0b', '#f97316', '#ef4444', '#ec4899', '#a855f7', '#6366f1',
|
|
58
|
+
'#3b82f6', '#0ea5e9', '#14b8a6', '#22c55e', '#84cc16', '#eab308',
|
|
59
|
+
];
|
|
60
|
+
function hashString(s) {
|
|
61
|
+
let h = 0x811c9dc5;
|
|
62
|
+
for (let i = 0; i < s.length; i++) {
|
|
63
|
+
h ^= s.charCodeAt(i);
|
|
64
|
+
h = Math.imul(h, 0x01000193);
|
|
65
|
+
}
|
|
66
|
+
return h >>> 0;
|
|
67
|
+
}
|
|
68
|
+
/** Blend the accent into near-black — theme-color tint (mirrors app-brand.ts). */
|
|
69
|
+
function darkTint(hex) {
|
|
70
|
+
const n = parseInt(hex.slice(1), 16);
|
|
71
|
+
const base = 0x101014;
|
|
72
|
+
const ch = (shift) => {
|
|
73
|
+
const a = (n >> shift) & 0xff;
|
|
74
|
+
const b = (base >> shift) & 0xff;
|
|
75
|
+
return Math.round(b + (a - b) * 0.14).toString(16).padStart(2, '0');
|
|
76
|
+
};
|
|
77
|
+
return `#${ch(16)}${ch(8)}${ch(0)}`;
|
|
78
|
+
}
|
|
79
|
+
/** The shared head every template's index.html carries as {{HEAD_BLOCK}}.
|
|
80
|
+
* Mirrors `buildHeadBlock` in platform `services/app-brand.ts` — same tags,
|
|
81
|
+
* same order, same indent; keep the two in sync. */
|
|
82
|
+
function buildHeadBlock(v) {
|
|
83
|
+
const t = escapeHtml(v.projectName);
|
|
84
|
+
const d = v.description ? escapeHtml(v.description) : '';
|
|
85
|
+
const url = v.accountSlug && v.projectSlug
|
|
86
|
+
? `https://app.gipity.ai/${v.accountSlug}/${v.projectSlug}/`
|
|
87
|
+
: undefined;
|
|
88
|
+
const themeColor = darkTint(ACCENT_PALETTE[hashString(v.projectGuid || v.projectName) % ACCENT_PALETTE.length]);
|
|
89
|
+
const jsonLd = JSON.stringify({
|
|
90
|
+
'@context': 'https://schema.org',
|
|
91
|
+
'@type': 'WebApplication',
|
|
92
|
+
name: v.projectName,
|
|
93
|
+
...(v.description ? { description: v.description } : {}),
|
|
94
|
+
...(url ? { url } : {}),
|
|
95
|
+
}, null, 2).replace(/<\//g, '<\\/');
|
|
96
|
+
const lines = [
|
|
97
|
+
`<title>${t}</title>`,
|
|
98
|
+
...(d ? [`<meta name="description" content="${d}">`] : []),
|
|
99
|
+
...(url ? [`<link rel="canonical" href="${url}">`] : []),
|
|
100
|
+
`<meta property="og:title" content="${t}">`,
|
|
101
|
+
`<meta property="og:type" content="website">`,
|
|
102
|
+
...(d ? [`<meta property="og:description" content="${d}">`] : []),
|
|
103
|
+
...(url ? [
|
|
104
|
+
`<meta property="og:url" content="${url}">`,
|
|
105
|
+
`<meta property="og:image" content="${url}images/og-image.png">`,
|
|
106
|
+
`<meta property="og:image:width" content="1200">`,
|
|
107
|
+
`<meta property="og:image:height" content="630">`,
|
|
108
|
+
] : []),
|
|
109
|
+
`<meta name="twitter:card" content="summary_large_image">`,
|
|
110
|
+
`<meta name="twitter:title" content="${t}">`,
|
|
111
|
+
...(d ? [`<meta name="twitter:description" content="${d}">`] : []),
|
|
112
|
+
...(url ? [`<meta name="twitter:image" content="${url}images/og-image.png">`] : []),
|
|
113
|
+
`<meta name="theme-color" content="${themeColor}">`,
|
|
114
|
+
`<link rel="icon" type="image/png" sizes="192x192" href="./images/favicon-192.png">`,
|
|
115
|
+
`<link rel="icon" type="image/png" sizes="512x512" href="./images/favicon-512.png">`,
|
|
116
|
+
`<link rel="icon" type="image/x-icon" href="./images/favicon.ico">`,
|
|
117
|
+
`<link rel="apple-touch-icon" href="./images/apple-touch-icon.png">`,
|
|
118
|
+
`<link rel="manifest" href="./manifest.webmanifest">`,
|
|
119
|
+
`<script type="application/ld+json">\n${jsonLd}\n </script>`,
|
|
120
|
+
];
|
|
121
|
+
return lines.map(l => `\n ${l}`).join('');
|
|
122
|
+
}
|
|
52
123
|
/** Build the substitution map. Pure — easy to unit-test. */
|
|
53
124
|
export function buildTemplateVars(v) {
|
|
54
125
|
const safeTitle = escapeHtml(v.projectName);
|
|
@@ -65,6 +136,9 @@ export function buildTemplateVars(v) {
|
|
|
65
136
|
'{{JS_TITLE}}': jsEscape(v.projectName),
|
|
66
137
|
'{{PROJECT_GUID}}': v.projectGuid,
|
|
67
138
|
'{{DATABASE}}': slug,
|
|
139
|
+
'{{HEAD_BLOCK}}': buildHeadBlock(v),
|
|
140
|
+
// Legacy per-tag placeholders — current templates carry only {{HEAD_BLOCK}},
|
|
141
|
+
// but older local template copies may still reference these.
|
|
68
142
|
'{{DESCRIPTION_META}}': v.description ? `\n <meta name="description" content="${safeDesc}">` : '',
|
|
69
143
|
'{{OG_DESCRIPTION}}': v.description ? `\n <meta property="og:description" content="${safeDesc}">` : '',
|
|
70
144
|
'{{JSON_LD_BLOCK}}': `<script type="application/ld+json">\n${jsonLd}\n </script>`,
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,62 @@
|
|
|
1
1
|
import { createInterface } from 'readline';
|
|
2
|
+
import { readFileSync, readdirSync, realpathSync, statSync } from 'node:fs';
|
|
3
|
+
import { basename, join } from 'node:path';
|
|
2
4
|
import { bold, dim } from './colors.js';
|
|
5
|
+
/** True inside Windows Subsystem for Linux (either env marker or kernel
|
|
6
|
+
* string). WSL ships without a systemd user session unless the user opts in
|
|
7
|
+
* via /etc/wsl.conf, and Windows-side paths live under /mnt/c. */
|
|
8
|
+
export function isWsl() {
|
|
9
|
+
if (process.platform !== 'linux')
|
|
10
|
+
return false;
|
|
11
|
+
if (process.env.WSL_DISTRO_NAME || process.env.WSL_INTEROP)
|
|
12
|
+
return true;
|
|
13
|
+
try {
|
|
14
|
+
return /microsoft/i.test(readFileSync('/proc/version', 'utf-8'));
|
|
15
|
+
}
|
|
16
|
+
catch {
|
|
17
|
+
return false;
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
const WINDOWS_PSEUDO_USERS = new Set(['All Users', 'Default', 'Default User', 'Public', 'desktop.ini']);
|
|
21
|
+
/** Under WSL, find a same-named project folder on the Windows side
|
|
22
|
+
* (C:\Users\<name>\GipityProjects\<dir>) that is NOT the linked project.
|
|
23
|
+
* From Windows Explorer that folder looks like "the project", so users drop
|
|
24
|
+
* new files there - but nothing syncs from it. Returns the twin's WSL path,
|
|
25
|
+
* or null when there is no twin (or no Windows mount at all). */
|
|
26
|
+
export function findWindowsTwinProject(projectRoot, usersBase = '/mnt/c/Users') {
|
|
27
|
+
try {
|
|
28
|
+
const name = basename(projectRoot);
|
|
29
|
+
if (!name)
|
|
30
|
+
return null;
|
|
31
|
+
const realRoot = realpathSync(projectRoot);
|
|
32
|
+
for (const user of readdirSync(usersBase)) {
|
|
33
|
+
if (WINDOWS_PSEUDO_USERS.has(user))
|
|
34
|
+
continue;
|
|
35
|
+
const candidate = join(usersBase, user, 'GipityProjects', name);
|
|
36
|
+
try {
|
|
37
|
+
if (!statSync(candidate).isDirectory())
|
|
38
|
+
continue;
|
|
39
|
+
if (realpathSync(candidate) === realRoot)
|
|
40
|
+
continue; // the linked project itself lives on /mnt/c
|
|
41
|
+
return candidate;
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
// this user has no such folder - keep scanning
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
// usersBase unreadable: not WSL, or no C: mount
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/** /mnt/c/Users/steve/... -> C:\Users\steve\... for display to a Windows user. */
|
|
54
|
+
export function wslPathToWindows(p) {
|
|
55
|
+
const m = p.match(/^\/mnt\/([a-z])\/(.*)$/);
|
|
56
|
+
if (!m)
|
|
57
|
+
return p;
|
|
58
|
+
return `${m[1].toUpperCase()}:\\${m[2].replace(/\//g, '\\')}`;
|
|
59
|
+
}
|
|
3
60
|
/** Safely decode a JWT payload without signature validation */
|
|
4
61
|
export function decodeJwtExp(token) {
|
|
5
62
|
try {
|
|
@@ -60,8 +117,8 @@ function rerunWithYes() {
|
|
|
60
117
|
*
|
|
61
118
|
* - `opts.default` controls which answer Enter / unknown-key selects. Defaults to `'no'`.
|
|
62
119
|
* - `opts.skip` (or the global `--yes` flag) auto-returns `true`.
|
|
63
|
-
* - Renders a `[Y/n]
|
|
64
|
-
* their own y/N suffix to `question`.
|
|
120
|
+
* - Renders a `[Y/n]:` or `[y/N]:` hint automatically - callers should NOT
|
|
121
|
+
* append their own y/N suffix (or a trailing `?`/`:`) to `question`.
|
|
65
122
|
* - In non-TTY environments without `--yes`, returns `false` and prints a hint. */
|
|
66
123
|
export async function confirm(question, opts = {}) {
|
|
67
124
|
const defaultYes = opts.default === 'yes';
|
|
@@ -75,7 +132,7 @@ export async function confirm(question, opts = {}) {
|
|
|
75
132
|
return false;
|
|
76
133
|
}
|
|
77
134
|
const hint = defaultYes ? dim('[Y/n]') : dim('[y/N]');
|
|
78
|
-
process.stdout.write(`${question} ${hint} `);
|
|
135
|
+
process.stdout.write(`${question} ${hint}: `);
|
|
79
136
|
const { stdin } = process;
|
|
80
137
|
const wasRaw = stdin.isRaw ?? false;
|
|
81
138
|
stdin.setRawMode(true);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gipity",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.6",
|
|
4
4
|
"description": "The full-stack platform tuned for AI agents. Database, storage, auth, functions, deploy, and drop-in kits - all agent-tuned. Pair with Claude Code or use standalone.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"gipity": "dist/updater/shim.js",
|
|
@@ -14,7 +14,7 @@
|
|
|
14
14
|
"prepack": "npm run build",
|
|
15
15
|
"dev": "tsc --watch",
|
|
16
16
|
"test": "npm run test:smoke",
|
|
17
|
-
"test:smoke": "npm run build && node --test dist/__tests__/utils.test.js dist/__tests__/platform.test.js dist/__tests__/colors.test.js dist/__tests__/config.test.js dist/__tests__/sync.test.js dist/__tests__/sync-apply.test.js dist/__tests__/sync-unretrievable.test.js dist/__tests__/sync-clean-check.test.js dist/__tests__/sync-lock.test.js dist/__tests__/auth-lock.test.js dist/__tests__/api-401-retry.test.js dist/__tests__/push-cas.test.js dist/__tests__/upload.test.js dist/__tests__/progress.test.js dist/__tests__/updater.test.js dist/__tests__/cli-smoke.test.js dist/__tests__/claude-noninteractive.test.js dist/__tests__/claude-trust.test.js dist/__tests__/build-picker.test.js dist/__tests__/relay-state.test.js dist/__tests__/relay-daemon.test.js dist/__tests__/session-pool.test.js dist/__tests__/relay-diagnostics.test.js dist/__tests__/relay-installers.test.js dist/__tests__/relay-bridge-abort.test.js dist/__tests__/relay-redact.test.js dist/__tests__/relay-machine-id.test.js dist/__tests__/stream-json.test.js dist/__tests__/ingest-queue.test.js dist/__tests__/media-upload.test.js dist/__tests__/stream-delta.test.js dist/__tests__/phase-tracker.test.js dist/__tests__/relay-ingest-contract.test.js dist/__tests__/prompts.test.js dist/__tests__/capture-transcript.test.js dist/__tests__/capture-parsers.test.js dist/__tests__/agents.test.js dist/__tests__/capture-lock.test.js dist/__tests__/capture-resolve.test.js dist/__tests__/flag-aliases.test.js dist/__tests__/client-context.test.js dist/__tests__/adopt-cwd.test.js dist/__tests__/cli-cmd-agent.test.js dist/__tests__/cli-cmd-approval.test.js dist/__tests__/cli-cmd-audit.test.js dist/__tests__/cli-cmd-bug.test.js dist/__tests__/cli-cmd-bug-queue.test.js dist/__tests__/cli-cmd-chat.test.js dist/__tests__/cli-cmd-credits.test.js dist/__tests__/cli-cmd-db.test.js dist/__tests__/cli-cmd-deploy.test.js dist/__tests__/cli-cmd-domain.test.js dist/__tests__/cli-cmd-email.test.js dist/__tests__/cli-cmd-file.test.js dist/__tests__/cli-cmd-storage.test.js dist/__tests__/cli-cmd-fn.test.js dist/__tests__/cli-cmd-service.test.js dist/__tests__/cli-cmd-job.test.js dist/__tests__/cli-cmd-generate.test.js dist/__tests__/cli-cmd-gmail.test.js dist/__tests__/cli-cmd-info.test.js dist/__tests__/cli-cmd-init.test.js dist/__tests__/cli-cmd-location.test.js dist/__tests__/cli-cmd-text.test.js dist/__tests__/cli-cmd-login.test.js dist/__tests__/cli-cmd-logout.test.js dist/__tests__/cli-cmd-token.test.js dist/__tests__/cli-cmd-logs.test.js dist/__tests__/cli-cmd-memory.test.js dist/__tests__/cli-cmd-page.test.js dist/__tests__/cli-cmd-plan.test.js dist/__tests__/cli-cmd-project.test.js dist/__tests__/cli-cmd-rbac.test.js dist/__tests__/cli-cmd-realtime.test.js dist/__tests__/cli-cmd-records.test.js dist/__tests__/cli-cmd-relay.test.js dist/__tests__/cli-cmd-setup.test.js dist/__tests__/cli-cmd-doctor.test.js dist/__tests__/claude-setup.test.js dist/__tests__/cli-cmd-sandbox.test.js dist/__tests__/cli-cmd-add.test.js dist/__tests__/cli-cmd-remove.test.js dist/__tests__/cli-cmd-skill.test.js dist/__tests__/cli-cmd-test.test.js dist/__tests__/cli-cmd-workflow.test.js dist/__tests__/setup-skills-block.test.js dist/__tests__/setup-hooks.test.js dist/__tests__/setup-codex-hooks.test.js dist/__tests__/trace.test.js",
|
|
17
|
+
"test:smoke": "npm run build && node --test dist/__tests__/utils.test.js dist/__tests__/template-vars.test.js dist/__tests__/platform.test.js dist/__tests__/colors.test.js dist/__tests__/config.test.js dist/__tests__/sync.test.js dist/__tests__/sync-apply.test.js dist/__tests__/sync-unretrievable.test.js dist/__tests__/sync-clean-check.test.js dist/__tests__/sync-lock.test.js dist/__tests__/auth-lock.test.js dist/__tests__/api-401-retry.test.js dist/__tests__/push-cas.test.js dist/__tests__/upload.test.js dist/__tests__/progress.test.js dist/__tests__/updater.test.js dist/__tests__/cli-smoke.test.js dist/__tests__/claude-noninteractive.test.js dist/__tests__/claude-trust.test.js dist/__tests__/build-picker.test.js dist/__tests__/relay-state.test.js dist/__tests__/relay-daemon.test.js dist/__tests__/session-pool.test.js dist/__tests__/relay-diagnostics.test.js dist/__tests__/relay-installers.test.js dist/__tests__/relay-bridge-abort.test.js dist/__tests__/relay-redact.test.js dist/__tests__/relay-machine-id.test.js dist/__tests__/stream-json.test.js dist/__tests__/ingest-queue.test.js dist/__tests__/media-upload.test.js dist/__tests__/stream-delta.test.js dist/__tests__/phase-tracker.test.js dist/__tests__/relay-ingest-contract.test.js dist/__tests__/prompts.test.js dist/__tests__/capture-transcript.test.js dist/__tests__/capture-parsers.test.js dist/__tests__/agents.test.js dist/__tests__/capture-lock.test.js dist/__tests__/capture-resolve.test.js dist/__tests__/flag-aliases.test.js dist/__tests__/client-context.test.js dist/__tests__/adopt-cwd.test.js dist/__tests__/cli-cmd-agent.test.js dist/__tests__/cli-cmd-approval.test.js dist/__tests__/cli-cmd-audit.test.js dist/__tests__/cli-cmd-brand.test.js dist/__tests__/cli-cmd-bug.test.js dist/__tests__/cli-cmd-bug-queue.test.js dist/__tests__/cli-cmd-chat.test.js dist/__tests__/cli-cmd-credits.test.js dist/__tests__/cli-cmd-db.test.js dist/__tests__/cli-cmd-deploy.test.js dist/__tests__/cli-cmd-domain.test.js dist/__tests__/cli-cmd-email.test.js dist/__tests__/cli-cmd-file.test.js dist/__tests__/cli-cmd-storage.test.js dist/__tests__/cli-cmd-fn.test.js dist/__tests__/cli-cmd-service.test.js dist/__tests__/cli-cmd-job.test.js dist/__tests__/cli-cmd-generate.test.js dist/__tests__/cli-cmd-gmail.test.js dist/__tests__/cli-cmd-info.test.js dist/__tests__/cli-cmd-init.test.js dist/__tests__/cli-cmd-location.test.js dist/__tests__/cli-cmd-text.test.js dist/__tests__/cli-cmd-login.test.js dist/__tests__/cli-cmd-status.test.js dist/__tests__/cli-cmd-logout.test.js dist/__tests__/cli-cmd-token.test.js dist/__tests__/cli-cmd-key.test.js dist/__tests__/cli-cmd-logs.test.js dist/__tests__/cli-cmd-memory.test.js dist/__tests__/cli-cmd-page.test.js dist/__tests__/cli-cmd-plan.test.js dist/__tests__/cli-cmd-project.test.js dist/__tests__/cli-cmd-rbac.test.js dist/__tests__/cli-cmd-realtime.test.js dist/__tests__/cli-cmd-records.test.js dist/__tests__/cli-cmd-relay.test.js dist/__tests__/cli-cmd-setup.test.js dist/__tests__/cli-cmd-doctor.test.js dist/__tests__/claude-setup.test.js dist/__tests__/cli-cmd-sandbox.test.js dist/__tests__/cli-cmd-add.test.js dist/__tests__/cli-cmd-remove.test.js dist/__tests__/cli-cmd-skill.test.js dist/__tests__/cli-cmd-test.test.js dist/__tests__/cli-cmd-workflow.test.js dist/__tests__/setup-skills-block.test.js dist/__tests__/setup-hooks.test.js dist/__tests__/setup-codex-hooks.test.js dist/__tests__/trace.test.js",
|
|
18
18
|
"test:smoke:quick": "node scripts/smoke-quick.mjs",
|
|
19
19
|
"test:e2e": "tsc && GIPITY_E2E=1 node --test --test-timeout=180000 dist/__tests__/cli-e2e-live.test.js dist/__tests__/cli-e2e-sync-live.test.js dist/__tests__/cli-e2e-sync-stress-live.test.js dist/__tests__/cli-e2e-rollback-live.test.js dist/__tests__/cli-e2e-services-media-live.test.js dist/__tests__/cli-e2e-workflow-live.test.js dist/__tests__/cli-e2e-sandbox-live.test.js dist/__tests__/cli-e2e-page-fetch-live.test.js dist/__tests__/cli-e2e-page-test-live.test.js",
|
|
20
20
|
"test:e2e:sync": "tsc && GIPITY_E2E=1 node --test --test-timeout=180000 dist/__tests__/cli-e2e-sync-live.test.js",
|