gipity 1.0.424 → 1.0.425
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/api.js +5 -3
- package/dist/commands/add.js +6 -0
- package/dist/commands/bug.js +21 -1
- package/dist/commands/fn.js +21 -2
- package/dist/commands/page-eval.js +75 -5
- package/dist/commands/page-inspect.js +1 -1
- package/dist/commands/page-screenshot.js +27 -2
- package/dist/commands/page.js +1 -1
- package/dist/commands/sandbox.js +21 -0
- package/dist/commands/test.js +39 -3
- package/dist/commands/workflow.js +24 -16
- package/dist/index.js +235 -39
- package/dist/knowledge.js +1 -0
- package/dist/sync.js +17 -3
- package/dist/trace.js +69 -0
- package/dist/updater/shim.js +55 -4
- package/package.json +2 -2
package/dist/trace.js
ADDED
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// Opt-in output tracing for diagnosing silent-success bugs (cli#125/#126/#108):
|
|
2
|
+
// invocations that exit 0 but print nothing. With GIPITY_TRACE_OUTPUT=1, every
|
|
3
|
+
// process.stdout/stderr write is teed as a JSONL record to
|
|
4
|
+
// ~/.gipity/trace/<yyyy-mm-dd_hh-mm-ss>-pid<pid>.jsonl, alongside start/exit
|
|
5
|
+
// markers carrying pid, argv, cwd, and TTY state. Diffing a trace against the
|
|
6
|
+
// captured tool output shows whether the bytes were ever emitted by this
|
|
7
|
+
// process (pointing at the environment) or never written (pointing at the CLI).
|
|
8
|
+
//
|
|
9
|
+
// Records are written with fs.writeSync on a raw fd, not a stream: the bug
|
|
10
|
+
// class under investigation is process teardown eating output, so the trace
|
|
11
|
+
// itself must not depend on stream flushing at exit.
|
|
12
|
+
import { openSync, writeSync, mkdirSync } from 'fs';
|
|
13
|
+
import { join } from 'path';
|
|
14
|
+
import { homedir } from 'os';
|
|
15
|
+
// Keyed on globalThis, not module state: the shim and the CLI entry are
|
|
16
|
+
// separate esbuild bundles loaded into one process (shim dynamic-imports the
|
|
17
|
+
// entry), so a module-level flag would double-install the tee.
|
|
18
|
+
const TRACE_KEY = Symbol.for('gipity.traceOutput');
|
|
19
|
+
/** Install the stdout/stderr tee if GIPITY_TRACE_OUTPUT=1. Idempotent per
|
|
20
|
+
* process; a re-entrant call (e.g. index.ts after shim.ts) logs a marker so
|
|
21
|
+
* the trace shows the in-process import chain actually ran. Never throws -
|
|
22
|
+
* tracing must not be able to break the CLI. */
|
|
23
|
+
export function installOutputTrace(label) {
|
|
24
|
+
if (process.env.GIPITY_TRACE_OUTPUT !== '1')
|
|
25
|
+
return;
|
|
26
|
+
try {
|
|
27
|
+
const g = globalThis;
|
|
28
|
+
const existing = g[TRACE_KEY];
|
|
29
|
+
if (existing) {
|
|
30
|
+
existing.emit({ event: 'reenter', label });
|
|
31
|
+
return;
|
|
32
|
+
}
|
|
33
|
+
const dir = join(process.env.GIPITY_DIR || join(homedir(), '.gipity'), 'trace');
|
|
34
|
+
mkdirSync(dir, { recursive: true });
|
|
35
|
+
const stamp = new Date().toISOString().slice(0, 19).replace('T', '_').replace(/:/g, '-');
|
|
36
|
+
const fd = openSync(join(dir, `${stamp}-pid${process.pid}.jsonl`), 'a');
|
|
37
|
+
const emit = (rec) => {
|
|
38
|
+
try {
|
|
39
|
+
writeSync(fd, JSON.stringify({ t: new Date().toISOString(), ...rec }) + '\n');
|
|
40
|
+
}
|
|
41
|
+
catch { /* trace write failure must never surface */ }
|
|
42
|
+
};
|
|
43
|
+
g[TRACE_KEY] = { emit };
|
|
44
|
+
emit({
|
|
45
|
+
event: 'start',
|
|
46
|
+
label,
|
|
47
|
+
pid: process.pid,
|
|
48
|
+
ppid: process.ppid,
|
|
49
|
+
argv: process.argv,
|
|
50
|
+
cwd: process.cwd(),
|
|
51
|
+
tty: { stdout: !!process.stdout.isTTY, stderr: !!process.stderr.isTTY },
|
|
52
|
+
});
|
|
53
|
+
for (const name of ['stdout', 'stderr']) {
|
|
54
|
+
const stream = process[name];
|
|
55
|
+
const original = stream.write.bind(stream);
|
|
56
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
57
|
+
stream.write = ((chunk, encoding, cb) => {
|
|
58
|
+
emit({
|
|
59
|
+
stream: name,
|
|
60
|
+
data: typeof chunk === 'string' ? chunk : Buffer.from(chunk).toString('utf8'),
|
|
61
|
+
});
|
|
62
|
+
return original(chunk, encoding, cb);
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
process.on('exit', (code) => emit({ event: 'exit', code }));
|
|
66
|
+
}
|
|
67
|
+
catch { /* tracing is best-effort only */ }
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=trace.js.map
|
package/dist/updater/shim.js
CHANGED
|
@@ -40,7 +40,7 @@ function spawnSyncCommand(cmd, args = [], options = {}) {
|
|
|
40
40
|
// src/updater/shim.ts
|
|
41
41
|
import { existsSync as existsSync3, readFileSync as readFileSync2 } from "fs";
|
|
42
42
|
import { fileURLToPath, pathToFileURL } from "url";
|
|
43
|
-
import { dirname, resolve, join as
|
|
43
|
+
import { dirname, resolve, join as join4 } from "path";
|
|
44
44
|
|
|
45
45
|
// src/updater/state.ts
|
|
46
46
|
import { readFileSync, writeFileSync, mkdirSync, existsSync } from "fs";
|
|
@@ -118,13 +118,64 @@ function bootstrap(version, quiet = false) {
|
|
|
118
118
|
return true;
|
|
119
119
|
}
|
|
120
120
|
|
|
121
|
+
// src/trace.ts
|
|
122
|
+
import { openSync, writeSync, mkdirSync as mkdirSync3 } from "fs";
|
|
123
|
+
import { join as join3 } from "path";
|
|
124
|
+
import { homedir as homedir2 } from "os";
|
|
125
|
+
var TRACE_KEY = /* @__PURE__ */ Symbol.for("gipity.traceOutput");
|
|
126
|
+
function installOutputTrace(label) {
|
|
127
|
+
if (process.env.GIPITY_TRACE_OUTPUT !== "1") return;
|
|
128
|
+
try {
|
|
129
|
+
const g = globalThis;
|
|
130
|
+
const existing = g[TRACE_KEY];
|
|
131
|
+
if (existing) {
|
|
132
|
+
existing.emit({ event: "reenter", label });
|
|
133
|
+
return;
|
|
134
|
+
}
|
|
135
|
+
const dir = join3(process.env.GIPITY_DIR || join3(homedir2(), ".gipity"), "trace");
|
|
136
|
+
mkdirSync3(dir, { recursive: true });
|
|
137
|
+
const stamp = (/* @__PURE__ */ new Date()).toISOString().slice(0, 19).replace("T", "_").replace(/:/g, "-");
|
|
138
|
+
const fd = openSync(join3(dir, `${stamp}-pid${process.pid}.jsonl`), "a");
|
|
139
|
+
const emit = (rec) => {
|
|
140
|
+
try {
|
|
141
|
+
writeSync(fd, JSON.stringify({ t: (/* @__PURE__ */ new Date()).toISOString(), ...rec }) + "\n");
|
|
142
|
+
} catch {
|
|
143
|
+
}
|
|
144
|
+
};
|
|
145
|
+
g[TRACE_KEY] = { emit };
|
|
146
|
+
emit({
|
|
147
|
+
event: "start",
|
|
148
|
+
label,
|
|
149
|
+
pid: process.pid,
|
|
150
|
+
ppid: process.ppid,
|
|
151
|
+
argv: process.argv,
|
|
152
|
+
cwd: process.cwd(),
|
|
153
|
+
tty: { stdout: !!process.stdout.isTTY, stderr: !!process.stderr.isTTY }
|
|
154
|
+
});
|
|
155
|
+
for (const name of ["stdout", "stderr"]) {
|
|
156
|
+
const stream = process[name];
|
|
157
|
+
const original = stream.write.bind(stream);
|
|
158
|
+
stream.write = ((chunk, encoding, cb) => {
|
|
159
|
+
emit({
|
|
160
|
+
stream: name,
|
|
161
|
+
data: typeof chunk === "string" ? chunk : Buffer.from(chunk).toString("utf8")
|
|
162
|
+
});
|
|
163
|
+
return original(chunk, encoding, cb);
|
|
164
|
+
});
|
|
165
|
+
}
|
|
166
|
+
process.on("exit", (code) => emit({ event: "exit", code }));
|
|
167
|
+
} catch {
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
|
|
121
171
|
// src/updater/shim.ts
|
|
172
|
+
installOutputTrace("shim");
|
|
122
173
|
var __dirname = dirname(fileURLToPath(import.meta.url));
|
|
123
174
|
var pkgRoot = resolve(__dirname, "..", "..");
|
|
124
|
-
var shimPkg = JSON.parse(readFileSync2(
|
|
125
|
-
var isDevLink = existsSync3(
|
|
175
|
+
var shimPkg = JSON.parse(readFileSync2(join4(pkgRoot, "package.json"), "utf-8"));
|
|
176
|
+
var isDevLink = existsSync3(join4(pkgRoot, "src"));
|
|
126
177
|
function startBackgroundUpdater() {
|
|
127
|
-
const checkScript =
|
|
178
|
+
const checkScript = join4(__dirname, "check.js");
|
|
128
179
|
try {
|
|
129
180
|
const child = spawnCommand(process.execPath, [checkScript], {
|
|
130
181
|
detached: true,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "gipity",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.425",
|
|
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": "tsc && 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-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__/relay-state.test.js dist/__tests__/relay-daemon.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__/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-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-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",
|
|
17
|
+
"test:smoke": "tsc && 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-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__/relay-state.test.js dist/__tests__/relay-daemon.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__/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-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-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__/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",
|