alpic 0.0.0-dev.ge2111aa → 0.0.0-dev.gf7fc4b5
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/commands/tunnel.js +2 -14
- package/dist/commands/tunnel.js.map +1 -1
- package/dist/lib/alpic-command.d.ts +1 -1
- package/dist/lib/alpic-command.js +6 -10
- package/dist/lib/alpic-command.js.map +1 -1
- package/dist/lib/telemetry.js +11 -72
- package/dist/lib/telemetry.js.map +1 -1
- package/package.json +2 -3
- package/dist/sentry.d.ts +0 -3
- package/dist/sentry.js +0 -40
- package/dist/sentry.js.map +0 -1
package/dist/commands/tunnel.js
CHANGED
|
@@ -119,9 +119,8 @@ export class Tunnel extends AlpicCommand {
|
|
|
119
119
|
}
|
|
120
120
|
};
|
|
121
121
|
// Keep the process alive until Ctrl+C
|
|
122
|
-
await new Promise((resolve
|
|
122
|
+
await new Promise((resolve) => {
|
|
123
123
|
let closing = false;
|
|
124
|
-
let lastError;
|
|
125
124
|
const shutdown = () => {
|
|
126
125
|
if (closing) {
|
|
127
126
|
process.exit(0);
|
|
@@ -137,21 +136,10 @@ export class Tunnel extends AlpicCommand {
|
|
|
137
136
|
isPlain ? console.log(message) : pushActivity(message);
|
|
138
137
|
});
|
|
139
138
|
tunnel.on("error", (err) => {
|
|
140
|
-
lastError = err;
|
|
141
139
|
const message = err.message;
|
|
142
140
|
isPlain ? console.error(message) : pushActivity(chalk.red(message));
|
|
143
141
|
});
|
|
144
|
-
|
|
145
|
-
// captured error so it reaches `catch` (and telemetry) instead of
|
|
146
|
-
// silently exiting 0.
|
|
147
|
-
tunnel.on("close", () => {
|
|
148
|
-
if (!closing && lastError) {
|
|
149
|
-
reject(lastError);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
resolve();
|
|
153
|
-
}
|
|
154
|
-
});
|
|
142
|
+
tunnel.on("close", resolve);
|
|
155
143
|
});
|
|
156
144
|
const outro = "Tunnel closed";
|
|
157
145
|
if (isPlain) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"tunnel.js","sourceRoot":"","sources":["../../src/commands/tunnel.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,5 +9,5 @@ export declare abstract class AlpicCommand extends Command {
|
|
|
9
9
|
"non-interactive"?: boolean;
|
|
10
10
|
}): Promise<void>;
|
|
11
11
|
protected spinner(): p.SpinnerResult;
|
|
12
|
-
protected exitWithErrorMessage(message: string
|
|
12
|
+
protected exitWithErrorMessage(message: string): never;
|
|
13
13
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as p from "@clack/prompts";
|
|
2
|
-
import { Command,
|
|
2
|
+
import { Command, Flags } from "@oclif/core";
|
|
3
3
|
import { ORPCError } from "@orpc/client";
|
|
4
4
|
import { createSpinner } from "./agent-mode.js";
|
|
5
5
|
import { isAuthenticated, oauthLogin } from "./auth/auth.js";
|
|
@@ -17,12 +17,12 @@ export class AlpicCommand extends Command {
|
|
|
17
17
|
if (error.code === "NOT_FOUND" && config.load()) {
|
|
18
18
|
message += "\nYour .alpic config may reference a deleted resource. Run `alpic link` to re-link.";
|
|
19
19
|
}
|
|
20
|
-
this.exitWithErrorMessage(message
|
|
20
|
+
this.exitWithErrorMessage(message);
|
|
21
21
|
}
|
|
22
22
|
if (error instanceof Error) {
|
|
23
|
-
this.exitWithErrorMessage(error.message
|
|
23
|
+
this.exitWithErrorMessage(error.message);
|
|
24
24
|
}
|
|
25
|
-
this.exitWithErrorMessage(String(error)
|
|
25
|
+
this.exitWithErrorMessage(String(error));
|
|
26
26
|
}
|
|
27
27
|
async ensureAuthenticated(flags) {
|
|
28
28
|
if (!(await isAuthenticated())) {
|
|
@@ -36,13 +36,9 @@ export class AlpicCommand extends Command {
|
|
|
36
36
|
spinner() {
|
|
37
37
|
return createSpinner();
|
|
38
38
|
}
|
|
39
|
-
exitWithErrorMessage(message
|
|
39
|
+
exitWithErrorMessage(message) {
|
|
40
40
|
p.cancel(message);
|
|
41
|
-
|
|
42
|
-
if (cause !== undefined) {
|
|
43
|
-
exitError.cause = cause;
|
|
44
|
-
}
|
|
45
|
-
throw exitError;
|
|
41
|
+
this.exit(1);
|
|
46
42
|
}
|
|
47
43
|
}
|
|
48
44
|
//# sourceMappingURL=alpic-command.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"alpic-command.js","sourceRoot":"","sources":["../../src/lib/alpic-command.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAC7C,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC7D,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,MAAM,OAAgB,YAAa,SAAQ,OAAO;IAChD,MAAM,CAAU,SAAS,GAAG;QAC1B,iBAAiB,EAAE,KAAK,CAAC,OAAO,CAAC;YAC/B,WAAW,EAAE,8BAA8B;YAC3C,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,CAAC,KAAK;SAC/B,CAAC;KACH,CAAC;IAEO,KAAK,CAAC,KAAK,CAAC,KAAc;QACjC,IAAI,KAAK,YAAY,SAAS,EAAE,CAAC;YAC/B,IAAI,OAAO,GAAG,gDAAgD,KAAK,CAAC,OAAO,EAAE,CAAC;YAC9E,IAAI,KAAK,CAAC,IAAI,KAAK,WAAW,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAChD,OAAO,IAAI,qFAAqF,CAAC;YACnG,CAAC;YACD,IAAI,CAAC,oBAAoB,CAAC,OAAO,CAAC,CAAC;QACrC,CAAC;QACD,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;YAC3B,IAAI,CAAC,oBAAoB,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3C,CAAC;QACD,IAAI,CAAC,oBAAoB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,KAAK,CAAC,mBAAmB,CAAC,KAAsC;QAC9D,IAAI,CAAC,CAAC,MAAM,eAAe,EAAE,CAAC,EAAE,CAAC;YAC/B,IAAI,KAAK,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBAC7B,IAAI,CAAC,oBAAoB,CAAC,0EAA0E,CAAC,CAAC;YACxG,CAAC;YACD,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,oCAAoC,CAAC,CAAC;YACjD,MAAM,UAAU,EAAE,CAAC;QACrB,CAAC;IACH,CAAC;IAES,OAAO;QACf,OAAO,aAAa,EAAE,CAAC;IACzB,CAAC;IAES,oBAAoB,CAAC,OAAe;QAC5C,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAClB,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACf,CAAC"}
|
package/dist/lib/telemetry.js
CHANGED
|
@@ -1,72 +1,10 @@
|
|
|
1
1
|
import crypto from "node:crypto";
|
|
2
2
|
import ci from "ci-info";
|
|
3
3
|
import posthog from "../posthog.js";
|
|
4
|
-
import { initSentry, Sentry } from "../sentry.js";
|
|
5
4
|
import { globalStore } from "./global-store.js";
|
|
6
5
|
const ENV_TELEMETRY_DISABLED = "ALPIC_TELEMETRY_DISABLED";
|
|
7
6
|
const ENV_TELEMETRY_DEBUG = "ALPIC_TELEMETRY_DEBUG";
|
|
8
7
|
const ENV_DO_NOT_TRACK = "DO_NOT_TRACK";
|
|
9
|
-
// Unwrap oclif's ExitError wrapper so we report the real failure instead of
|
|
10
|
-
// "EEXIT: 1". AlpicCommand.exitWithErrorMessage attaches the original error
|
|
11
|
-
// as `cause` before throwing. That cause may be a non-Error value (e.g. a
|
|
12
|
-
// string or plain object thrown by a third-party lib), so we return `unknown`
|
|
13
|
-
// and let callers pick a representation.
|
|
14
|
-
function unwrapError(error) {
|
|
15
|
-
if (!error) {
|
|
16
|
-
return undefined;
|
|
17
|
-
}
|
|
18
|
-
return error.cause ?? error;
|
|
19
|
-
}
|
|
20
|
-
function getErrorMessage(error) {
|
|
21
|
-
if (!error) {
|
|
22
|
-
return undefined;
|
|
23
|
-
}
|
|
24
|
-
if (error instanceof Error) {
|
|
25
|
-
return error.message.trim();
|
|
26
|
-
}
|
|
27
|
-
if (typeof error === "string") {
|
|
28
|
-
return error.trim();
|
|
29
|
-
}
|
|
30
|
-
try {
|
|
31
|
-
return JSON.stringify(error);
|
|
32
|
-
}
|
|
33
|
-
catch {
|
|
34
|
-
return String(error).trim();
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
async function captureToPosthog(event) {
|
|
38
|
-
try {
|
|
39
|
-
posthog.capture({
|
|
40
|
-
distinctId: event.machineId,
|
|
41
|
-
event: event.command,
|
|
42
|
-
properties: event,
|
|
43
|
-
});
|
|
44
|
-
await posthog.shutdown(2000);
|
|
45
|
-
}
|
|
46
|
-
catch {
|
|
47
|
-
// no-op
|
|
48
|
-
}
|
|
49
|
-
}
|
|
50
|
-
async function captureToSentry(error, event) {
|
|
51
|
-
try {
|
|
52
|
-
initSentry(event.version);
|
|
53
|
-
Sentry.captureException(error, {
|
|
54
|
-
user: { id: event.machineId },
|
|
55
|
-
tags: {
|
|
56
|
-
command: event.command,
|
|
57
|
-
version: event.version,
|
|
58
|
-
platform: event.platform,
|
|
59
|
-
nodeVersion: event.nodeVersion,
|
|
60
|
-
isCI: String(event.isCI),
|
|
61
|
-
},
|
|
62
|
-
extra: { sessionId: event.sessionId },
|
|
63
|
-
});
|
|
64
|
-
await Sentry.flush(2000);
|
|
65
|
-
}
|
|
66
|
-
catch {
|
|
67
|
-
// no-op
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
8
|
export function isEnabled() {
|
|
71
9
|
if (process.env[ENV_TELEMETRY_DISABLED] === "1" || process.env[ENV_TELEMETRY_DISABLED]?.toLowerCase() === "true") {
|
|
72
10
|
return false;
|
|
@@ -118,7 +56,6 @@ const hook = async ({ id: command, config: { version }, error, }) => {
|
|
|
118
56
|
if (!isEnabled()) {
|
|
119
57
|
return;
|
|
120
58
|
}
|
|
121
|
-
const rootError = unwrapError(error);
|
|
122
59
|
const event = {
|
|
123
60
|
command,
|
|
124
61
|
version,
|
|
@@ -128,21 +65,23 @@ const hook = async ({ id: command, config: { version }, error, }) => {
|
|
|
128
65
|
nodeVersion: process.version,
|
|
129
66
|
platform: process.platform,
|
|
130
67
|
outcome: error ? "failure" : "success",
|
|
131
|
-
error:
|
|
68
|
+
error: error?.message,
|
|
132
69
|
};
|
|
133
70
|
if (isDebugMode()) {
|
|
134
71
|
console.debug("[Telemetry Debug] Would send event:", JSON.stringify(event, null, 2));
|
|
135
|
-
if (rootError !== undefined && rootError !== null) {
|
|
136
|
-
const detail = rootError instanceof Error ? (rootError.stack ?? rootError.message) : rootError;
|
|
137
|
-
console.debug("[Telemetry Debug] Would send exception to Sentry:", detail);
|
|
138
|
-
}
|
|
139
72
|
return;
|
|
140
73
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
74
|
+
try {
|
|
75
|
+
posthog.capture({
|
|
76
|
+
distinctId: event.machineId,
|
|
77
|
+
event: command,
|
|
78
|
+
properties: event,
|
|
79
|
+
});
|
|
80
|
+
await posthog.shutdown(2000);
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// Silently ignore telemetry errors - never block CLI operation
|
|
144
84
|
}
|
|
145
|
-
await Promise.allSettled(promises);
|
|
146
85
|
};
|
|
147
86
|
export default hook;
|
|
148
87
|
//# sourceMappingURL=telemetry.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"AAAA,OAAO,MAAM,MAAM,aAAa,CAAC;AAEjC,OAAO,EAAE,MAAM,SAAS,CAAC;AAEzB,OAAO,OAAO,MAAM,eAAe,CAAC;AACpC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/lib/telemetry.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "alpic",
|
|
3
|
-
"version": "0.0.0-dev.
|
|
3
|
+
"version": "0.0.0-dev.gf7fc4b5",
|
|
4
4
|
"description": "The command-line interface for Alpic",
|
|
5
5
|
"homepage": "https://alpic.ai",
|
|
6
6
|
"preferGlobal": true,
|
|
@@ -30,7 +30,6 @@
|
|
|
30
30
|
"@orpc/client": "^1.14.3",
|
|
31
31
|
"@orpc/contract": "^1.14.3",
|
|
32
32
|
"@orpc/openapi-client": "^1.14.3",
|
|
33
|
-
"@sentry/node": "^10.53.0",
|
|
34
33
|
"@t3-oss/env-core": "^0.13.11",
|
|
35
34
|
"@vercel/detect-agent": "^1.2.3",
|
|
36
35
|
"chalk": "^5.6.2",
|
|
@@ -45,7 +44,7 @@
|
|
|
45
44
|
"tar": "^7.5.15",
|
|
46
45
|
"undici": "^8.2.0",
|
|
47
46
|
"zod": "^4.4.3",
|
|
48
|
-
"@alpic-ai/api": "0.0.0-dev.
|
|
47
|
+
"@alpic-ai/api": "0.0.0-dev.gf7fc4b5"
|
|
49
48
|
},
|
|
50
49
|
"devDependencies": {
|
|
51
50
|
"@orpc/openapi": "^1.14.3",
|
package/dist/sentry.d.ts
DELETED
package/dist/sentry.js
DELETED
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
import os from "node:os";
|
|
2
|
-
import * as Sentry from "@sentry/node";
|
|
3
|
-
const SENTRY_DSN = "https://b60482c4b16639fbc9c553d95a70ce7c@o4509603522478080.ingest.us.sentry.io/4511450063175680";
|
|
4
|
-
let initialized = false;
|
|
5
|
-
export function initSentry(release) {
|
|
6
|
-
if (initialized) {
|
|
7
|
-
return;
|
|
8
|
-
}
|
|
9
|
-
initialized = true;
|
|
10
|
-
Sentry.init({
|
|
11
|
-
dsn: SENTRY_DSN,
|
|
12
|
-
release,
|
|
13
|
-
// No tracing, profiling, or logs for a one-shot CLI process.
|
|
14
|
-
tracesSampleRate: 0,
|
|
15
|
-
// The default integrations register uncaughtException / unhandledRejection
|
|
16
|
-
// handlers and start OpenTelemetry. We init lazily after oclif has already
|
|
17
|
-
// caught the error, so those are pure overhead with no benefit.
|
|
18
|
-
defaultIntegrations: false,
|
|
19
|
-
beforeSend(event) {
|
|
20
|
-
// Stack frames and exception messages often contain the user's home
|
|
21
|
-
// directory. Replace it with `~` so we don't ship absolute paths to
|
|
22
|
-
// Sentry.
|
|
23
|
-
const home = os.homedir();
|
|
24
|
-
if (!home) {
|
|
25
|
-
return event;
|
|
26
|
-
}
|
|
27
|
-
const scrub = (value) => (value ? value.split(home).join("~") : value);
|
|
28
|
-
for (const ex of event.exception?.values ?? []) {
|
|
29
|
-
ex.value = scrub(ex.value);
|
|
30
|
-
for (const frame of ex.stacktrace?.frames ?? []) {
|
|
31
|
-
frame.filename = scrub(frame.filename);
|
|
32
|
-
frame.abs_path = scrub(frame.abs_path);
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
return event;
|
|
36
|
-
},
|
|
37
|
-
});
|
|
38
|
-
}
|
|
39
|
-
export { Sentry };
|
|
40
|
-
//# sourceMappingURL=sentry.js.map
|
package/dist/sentry.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"sentry.js","sourceRoot":"","sources":["../src/sentry.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,SAAS,CAAC;AACzB,OAAO,KAAK,MAAM,MAAM,cAAc,CAAC;AAEvC,MAAM,UAAU,GAAG,iGAAiG,CAAC;AAErH,IAAI,WAAW,GAAG,KAAK,CAAC;AAExB,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO;IACT,CAAC;IACD,WAAW,GAAG,IAAI,CAAC;IAEnB,MAAM,CAAC,IAAI,CAAC;QACV,GAAG,EAAE,UAAU;QACf,OAAO;QACP,6DAA6D;QAC7D,gBAAgB,EAAE,CAAC;QACnB,2EAA2E;QAC3E,2EAA2E;QAC3E,gEAAgE;QAChE,mBAAmB,EAAE,KAAK;QAC1B,UAAU,CAAC,KAAK;YACd,oEAAoE;YACpE,oEAAoE;YACpE,UAAU;YACV,MAAM,IAAI,GAAG,EAAE,CAAC,OAAO,EAAE,CAAC;YAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,OAAO,KAAK,CAAC;YACf,CAAC;YACD,MAAM,KAAK,GAAG,CAAC,KAAyB,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YAC3F,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,SAAS,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;gBAC/C,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;gBAC3B,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,UAAU,EAAE,MAAM,IAAI,EAAE,EAAE,CAAC;oBAChD,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;oBACvC,KAAK,CAAC,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;gBACzC,CAAC;YACH,CAAC;YACD,OAAO,KAAK,CAAC;QACf,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,OAAO,EAAE,MAAM,EAAE,CAAC"}
|