@agent-native/core 0.122.3 → 0.122.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/corpus/README.md +1 -1
- package/corpus/core/CHANGELOG.md +6 -0
- package/corpus/core/package.json +1 -1
- package/corpus/core/src/cli/index.ts +2 -1
- package/corpus/core/src/cli/mcp.ts +13 -3
- package/corpus/core/src/cli/skills-content/rewind-skill.ts +36 -4
- package/corpus/core/src/cli/skills.ts +250 -37
- package/corpus/core/src/cli/telemetry-routing.ts +57 -0
- package/corpus/core/src/cli/telemetry.ts +3 -3
- package/corpus/core/src/mcp/screen-memory-stdio.ts +21 -2
- package/dist/cli/index.js +3 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/cli/mcp.d.ts.map +1 -1
- package/dist/cli/mcp.js +12 -3
- package/dist/cli/mcp.js.map +1 -1
- package/dist/cli/skills-content/rewind-skill.d.ts +1 -1
- package/dist/cli/skills-content/rewind-skill.d.ts.map +1 -1
- package/dist/cli/skills-content/rewind-skill.js +36 -4
- package/dist/cli/skills-content/rewind-skill.js.map +1 -1
- package/dist/cli/skills.d.ts +2 -0
- package/dist/cli/skills.d.ts.map +1 -1
- package/dist/cli/skills.js +191 -40
- package/dist/cli/skills.js.map +1 -1
- package/dist/cli/telemetry-routing.d.ts +2 -0
- package/dist/cli/telemetry-routing.d.ts.map +1 -0
- package/dist/cli/telemetry-routing.js +54 -0
- package/dist/cli/telemetry-routing.js.map +1 -0
- package/dist/cli/telemetry.js +3 -3
- package/dist/cli/telemetry.js.map +1 -1
- package/dist/collab/routes.d.ts +1 -1
- package/dist/collab/struct-routes.d.ts +1 -1
- package/dist/file-upload/actions/upload-image.d.ts +1 -1
- package/dist/mcp/screen-memory-stdio.d.ts +2 -0
- package/dist/mcp/screen-memory-stdio.d.ts.map +1 -1
- package/dist/mcp/screen-memory-stdio.js +12 -2
- package/dist/mcp/screen-memory-stdio.js.map +1 -1
- package/dist/observability/routes.d.ts +1 -1
- package/dist/progress/routes.d.ts +1 -1
- package/package.json +1 -1
- package/src/cli/index.ts +2 -1
- package/src/cli/mcp.ts +13 -3
- package/src/cli/skills-content/rewind-skill.ts +36 -4
- package/src/cli/skills.ts +250 -37
- package/src/cli/telemetry-routing.ts +57 -0
- package/src/cli/telemetry.ts +3 -3
- package/src/mcp/screen-memory-stdio.ts +21 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-routing.d.ts","sourceRoot":"","sources":["../../src/cli/telemetry-routing.ts"],"names":[],"mappings":"AA4CA,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,GAAG,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE,WAY5E"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
const REWIND_SKILL_TARGETS = new Set([
|
|
2
|
+
"rewind",
|
|
3
|
+
"screen-memory",
|
|
4
|
+
"clips-rewind",
|
|
5
|
+
"agent-native-rewind",
|
|
6
|
+
]);
|
|
7
|
+
function isRewindSkillTarget(value) {
|
|
8
|
+
return REWIND_SKILL_TARGETS.has(value?.trim().toLowerCase() ?? "");
|
|
9
|
+
}
|
|
10
|
+
const SKILLS_VALUE_FLAGS = new Set([
|
|
11
|
+
"--client",
|
|
12
|
+
"--agent",
|
|
13
|
+
"-a",
|
|
14
|
+
"--scope",
|
|
15
|
+
"--cwd",
|
|
16
|
+
"--mcp-url",
|
|
17
|
+
"--mode",
|
|
18
|
+
]);
|
|
19
|
+
function explicitSkillTargets(args) {
|
|
20
|
+
const targets = [];
|
|
21
|
+
const start = args[0] === "add" ? 1 : 0;
|
|
22
|
+
for (let index = start; index < args.length; index++) {
|
|
23
|
+
const arg = args[index];
|
|
24
|
+
if (arg === "--skill" || arg === "-s") {
|
|
25
|
+
if (args[index + 1])
|
|
26
|
+
targets.push(args[++index]);
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (arg.startsWith("--skill=")) {
|
|
30
|
+
targets.push(arg.slice("--skill=".length));
|
|
31
|
+
continue;
|
|
32
|
+
}
|
|
33
|
+
if (SKILLS_VALUE_FLAGS.has(arg)) {
|
|
34
|
+
index++;
|
|
35
|
+
continue;
|
|
36
|
+
}
|
|
37
|
+
if (arg.startsWith("-"))
|
|
38
|
+
continue;
|
|
39
|
+
targets.push(arg);
|
|
40
|
+
}
|
|
41
|
+
return targets;
|
|
42
|
+
}
|
|
43
|
+
export function shouldTrackCliRun(command, args) {
|
|
44
|
+
if (command !== "skills")
|
|
45
|
+
return true;
|
|
46
|
+
if (["list", "status", "update", "help", "--help", "-h"].includes(args[0] ?? ""))
|
|
47
|
+
return true;
|
|
48
|
+
const targets = explicitSkillTargets(args);
|
|
49
|
+
if (targets.length === 0)
|
|
50
|
+
return false;
|
|
51
|
+
const explicitlyTargetsRewind = targets.some(isRewindSkillTarget);
|
|
52
|
+
return !explicitlyTargetsRewind;
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=telemetry-routing.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"telemetry-routing.js","sourceRoot":"","sources":["../../src/cli/telemetry-routing.ts"],"names":[],"mappings":"AAAA,MAAM,oBAAoB,GAAG,IAAI,GAAG,CAAC;IACnC,QAAQ;IACR,eAAe;IACf,cAAc;IACd,qBAAqB;CACtB,CAAC,CAAC;AAEH,SAAS,mBAAmB,CAAC,KAAyB;IACpD,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;AACrE,CAAC;AAED,MAAM,kBAAkB,GAAG,IAAI,GAAG,CAAC;IACjC,UAAU;IACV,SAAS;IACT,IAAI;IACJ,SAAS;IACT,OAAO;IACP,WAAW;IACX,QAAQ;CACT,CAAC,CAAC;AAEH,SAAS,oBAAoB,CAAC,IAAc;IAC1C,MAAM,OAAO,GAAa,EAAE,CAAC;IAC7B,MAAM,KAAK,GAAG,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACxC,KAAK,IAAI,KAAK,GAAG,KAAK,EAAE,KAAK,GAAG,IAAI,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,SAAS,IAAI,GAAG,KAAK,IAAI,EAAE,CAAC;YACtC,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC;gBAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACjD,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC;YAC3C,SAAS;QACX,CAAC;QACD,IAAI,kBAAkB,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YAChC,KAAK,EAAE,CAAC;YACR,SAAS;QACX,CAAC;QACD,IAAI,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC;YAAE,SAAS;QAClC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACpB,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,OAA2B,EAAE,IAAc;IAC3E,IAAI,OAAO,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACtC,IACE,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAE5E,OAAO,IAAI,CAAC;IAEd,MAAM,OAAO,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAC3C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,KAAK,CAAC;IAEvC,MAAM,uBAAuB,GAAG,OAAO,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;IAClE,OAAO,CAAC,uBAAuB,CAAC;AAClC,CAAC","sourcesContent":["const REWIND_SKILL_TARGETS = new Set([\n \"rewind\",\n \"screen-memory\",\n \"clips-rewind\",\n \"agent-native-rewind\",\n]);\n\nfunction isRewindSkillTarget(value: string | undefined): boolean {\n return REWIND_SKILL_TARGETS.has(value?.trim().toLowerCase() ?? \"\");\n}\n\nconst SKILLS_VALUE_FLAGS = new Set([\n \"--client\",\n \"--agent\",\n \"-a\",\n \"--scope\",\n \"--cwd\",\n \"--mcp-url\",\n \"--mode\",\n]);\n\nfunction explicitSkillTargets(args: string[]): string[] {\n const targets: string[] = [];\n const start = args[0] === \"add\" ? 1 : 0;\n for (let index = start; index < args.length; index++) {\n const arg = args[index];\n if (arg === \"--skill\" || arg === \"-s\") {\n if (args[index + 1]) targets.push(args[++index]);\n continue;\n }\n if (arg.startsWith(\"--skill=\")) {\n targets.push(arg.slice(\"--skill=\".length));\n continue;\n }\n if (SKILLS_VALUE_FLAGS.has(arg)) {\n index++;\n continue;\n }\n if (arg.startsWith(\"-\")) continue;\n targets.push(arg);\n }\n return targets;\n}\n\nexport function shouldTrackCliRun(command: string | undefined, args: string[]) {\n if (command !== \"skills\") return true;\n if (\n [\"list\", \"status\", \"update\", \"help\", \"--help\", \"-h\"].includes(args[0] ?? \"\")\n )\n return true;\n\n const targets = explicitSkillTargets(args);\n if (targets.length === 0) return false;\n\n const explicitlyTargetsRewind = targets.some(isRewindSkillTarget);\n return !explicitlyTargetsRewind;\n}\n"]}
|
package/dist/cli/telemetry.js
CHANGED
|
@@ -152,7 +152,7 @@ export function createCliTelemetry(options) {
|
|
|
152
152
|
const publicKey = resolvePublicKey();
|
|
153
153
|
const disabled = telemetryDisabled() || !publicKey;
|
|
154
154
|
const endpoint = resolveEndpoint();
|
|
155
|
-
|
|
155
|
+
let installId = disabled ? "" : undefined;
|
|
156
156
|
const runId = crypto.randomUUID();
|
|
157
157
|
const inFlight = new Set();
|
|
158
158
|
const base = {
|
|
@@ -164,18 +164,18 @@ export function createCliTelemetry(options) {
|
|
|
164
164
|
ci: process.env.CI === "true",
|
|
165
165
|
interactive: options.interactive,
|
|
166
166
|
runId,
|
|
167
|
-
installId,
|
|
168
167
|
};
|
|
169
168
|
function track(event, properties) {
|
|
170
169
|
if (disabled)
|
|
171
170
|
return;
|
|
171
|
+
installId ??= resolveInstallId();
|
|
172
172
|
const body = JSON.stringify({
|
|
173
173
|
publicKey,
|
|
174
174
|
event,
|
|
175
175
|
anonymousId: installId,
|
|
176
176
|
sessionId: runId,
|
|
177
177
|
timestamp: new Date().toISOString(),
|
|
178
|
-
properties: { ...base, ...properties },
|
|
178
|
+
properties: { ...base, installId, ...properties },
|
|
179
179
|
});
|
|
180
180
|
const promise = fetch(endpoint, {
|
|
181
181
|
method: "POST",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/cli/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Best-effort install-funnel telemetry for the core CLI.\n *\n * Events are POSTed to the first-party Agent Native Analytics endpoint\n * (analytics.agent-native.com/track) using a PUBLIC, write-only key — the same\n * mechanism every agent-native app uses to report client-side events. Nothing\n * here ever blocks or throws into the install flow: sends are fire-and-forget\n * and `flush()` awaits any in-flight requests with a short cap before exit.\n *\n * Privacy: we report skill NAMES, client ids, scope, counts, platform, and the\n * CLI version — never file paths, repo names, cwd, skill sources, or anything\n * user-identifying. A random per-machine install id (unique installs) and a\n * per-invocation run id (step-by-step dropoff) are the only identifiers.\n *\n * Opt out with DO_NOT_TRACK=1 or AGENT_NATIVE_TELEMETRY_DISABLED=1.\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Public, write-only analytics key. Safe to embed (revocable from the Analytics\n// settings UI). Override with AGENT_NATIVE_ANALYTICS_PUBLIC_KEY for testing or\n// to point telemetry at a different first-party analytics instance.\n// guard:allow-public-key -- first-party analytics write key is public by design.\nconst EMBEDDED_PUBLIC_KEY =\n \"anpk_dc523e34b99bc34d76e82d94c46593544e4a8509a4bfc93c\";\nconst DEFAULT_ENDPOINT = \"https://analytics.agent-native.com/track\";\nconst FLUSH_TIMEOUT_MS = 1500;\n\nexport interface CliTelemetryOptions {\n /** Stable identifier for the emitting CLI, e.g. \"skills-installer\". */\n cli: string;\n cliVersion: string;\n command: string;\n interactive: boolean;\n}\n\nexport interface CliTelemetry {\n track(event: string, properties?: Record<string, unknown>): void;\n captureException(error: unknown, context?: CliExceptionContext): void;\n flush(): Promise<void>;\n}\n\nexport interface CliExceptionContext {\n handled?: boolean;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n tags?: Record<string, string | number | boolean | null | undefined>;\n extra?: Record<string, unknown>;\n}\n\nfunction resolvePublicKey(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY?.trim();\n return fromEnv || EMBEDDED_PUBLIC_KEY;\n}\n\nfunction resolveEndpoint(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT?.trim();\n return (fromEnv || DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n}\n\nfunction telemetryDisabled(): boolean {\n return (\n process.env.DO_NOT_TRACK === \"1\" ||\n process.env.AGENT_NATIVE_TELEMETRY_DISABLED === \"1\" ||\n process.env.NODE_ENV === \"test\" ||\n typeof fetch !== \"function\"\n );\n}\n\nconst MAX_EXCEPTION_MESSAGE_LENGTH = 1000;\nconst MAX_EXCEPTION_STACK_LENGTH = 8000;\nconst MAX_EXCEPTION_TAGS = 30;\nconst MAX_EXCEPTION_EXTRA_KEYS = 30;\nconst MAX_EXCEPTION_VALUE_LENGTH = 1000;\nconst SECRET_RE = /\\b(?:bearer|basic)\\s+[^\\s]+/gi;\nconst SECRET_KEY_RE =\n /(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)/i;\n\nfunction redactExceptionText(value: string): string {\n return value\n .replace(SECRET_RE, (match) => `${match.split(/\\s+/, 1)[0]} <redacted>`)\n .replace(\n /([A-Za-z0-9_$.-]*(?:authorization|cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)[A-Za-z0-9_$.-]*\\s*[:=]\\s*)([^\\s,;}]+)/gi,\n \"$1<redacted>\",\n );\n}\n\nfunction boundedExceptionText(value: unknown, max: number): string {\n const text =\n typeof value === \"string\" ? value : String(value ?? \"Unknown error\");\n const safe = redactExceptionText(text);\n return safe.length > max ? safe.slice(0, max) : safe;\n}\n\nfunction safeExceptionValue(value: unknown, depth = 2): unknown {\n if (\n value == null ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n return value;\n }\n if (typeof value === \"string\") {\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n }\n if (depth <= 0)\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n if (Array.isArray(value)) {\n return value\n .slice(0, 20)\n .map((item) => safeExceptionValue(item, depth - 1));\n }\n if (typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (Object.keys(out).length >= MAX_EXCEPTION_EXTRA_KEYS) break;\n const safeKey = boundedExceptionText(key, 100);\n out[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : safeExceptionValue(child, depth - 1);\n }\n return out;\n }\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n}\n\nfunction captureException(\n error: unknown,\n context: CliExceptionContext,\n trackEvent: (event: string, properties?: Record<string, unknown>) => void,\n): void {\n const exception =\n error instanceof Error\n ? {\n type: boundedExceptionText(error.name || \"Error\", 200),\n message: boundedExceptionText(\n error.message || error.name || \"Error\",\n MAX_EXCEPTION_MESSAGE_LENGTH,\n ),\n stack: error.stack\n ? boundedExceptionText(error.stack, MAX_EXCEPTION_STACK_LENGTH)\n : undefined,\n }\n : {\n type: \"Error\",\n message: boundedExceptionText(error, MAX_EXCEPTION_MESSAGE_LENGTH),\n stack: undefined,\n };\n const tags: Record<string, string> = {};\n for (const [key, value] of Object.entries(context.tags ?? {})) {\n if (Object.keys(tags).length >= MAX_EXCEPTION_TAGS || value == null) break;\n const safeKey = boundedExceptionText(key, 100);\n tags[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : boundedExceptionText(value, 200);\n }\n const extra = safeExceptionValue(context.extra);\n trackEvent(\"$exception\", {\n app: \"agent-native-cli\",\n template: \"cli\",\n runtime: \"cli\",\n source: \"cli\",\n exceptionType: exception.type,\n exceptionMessage: exception.message,\n ...(exception.stack ? { exceptionStack: exception.stack } : {}),\n handled: context.handled ?? false,\n level: context.level ?? \"error\",\n occurredAt: new Date().toISOString(),\n ...(Object.keys(tags).length ? { exceptionTags: tags } : {}),\n ...(extra && typeof extra === \"object\" ? { exceptionExtra: extra } : {}),\n });\n}\n\n/**\n * Read (or lazily create) a stable per-machine install id, shared across both\n * skills CLIs so one developer counts once. Best-effort: an unwritable home\n * directory just yields an ephemeral id for this run.\n */\nfunction resolveInstallId(): string {\n try {\n const dir = path.join(os.homedir(), \".agent-native\");\n const file = path.join(dir, \"installation-id\");\n const existing = fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").trim()\n : \"\";\n if (existing) return existing;\n const id = crypto.randomUUID();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(file, `${id}\\n`, \"utf8\");\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nexport function createCliTelemetry(options: CliTelemetryOptions): CliTelemetry {\n const publicKey = resolvePublicKey();\n const disabled = telemetryDisabled() || !publicKey;\n const endpoint = resolveEndpoint();\n const installId = disabled ? \"\" : resolveInstallId();\n const runId = crypto.randomUUID();\n const inFlight = new Set<Promise<void>>();\n\n const base = {\n cli: options.cli,\n cliVersion: options.cliVersion,\n command: options.command,\n node: process.version,\n platform: process.platform,\n ci: process.env.CI === \"true\",\n interactive: options.interactive,\n runId,\n installId,\n };\n\n function track(event: string, properties?: Record<string, unknown>): void {\n if (disabled) return;\n const body = JSON.stringify({\n publicKey,\n event,\n anonymousId: installId,\n sessionId: runId,\n timestamp: new Date().toISOString(),\n properties: { ...base, ...properties },\n });\n const promise = fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n keepalive: true,\n })\n .then(() => undefined)\n .catch(() => undefined);\n inFlight.add(promise);\n void promise.finally(() => inFlight.delete(promise));\n }\n\n async function flush(): Promise<void> {\n if (disabled || inFlight.size === 0) return;\n await Promise.race([\n Promise.allSettled([...inFlight]),\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n }\n\n return {\n track,\n captureException: (error, context = {}) =>\n captureException(error, context, track),\n flush,\n };\n}\n"]}
|
|
1
|
+
{"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/cli/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["/**\n * Best-effort install-funnel telemetry for the core CLI.\n *\n * Events are POSTed to the first-party Agent Native Analytics endpoint\n * (analytics.agent-native.com/track) using a PUBLIC, write-only key — the same\n * mechanism every agent-native app uses to report client-side events. Nothing\n * here ever blocks or throws into the install flow: sends are fire-and-forget\n * and `flush()` awaits any in-flight requests with a short cap before exit.\n *\n * Privacy: we report skill NAMES, client ids, scope, counts, platform, and the\n * CLI version — never file paths, repo names, cwd, skill sources, or anything\n * user-identifying. A random per-machine install id (unique installs) and a\n * per-invocation run id (step-by-step dropoff) are the only identifiers.\n *\n * Opt out with DO_NOT_TRACK=1 or AGENT_NATIVE_TELEMETRY_DISABLED=1.\n */\nimport crypto from \"node:crypto\";\nimport fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\n\n// Public, write-only analytics key. Safe to embed (revocable from the Analytics\n// settings UI). Override with AGENT_NATIVE_ANALYTICS_PUBLIC_KEY for testing or\n// to point telemetry at a different first-party analytics instance.\n// guard:allow-public-key -- first-party analytics write key is public by design.\nconst EMBEDDED_PUBLIC_KEY =\n \"anpk_dc523e34b99bc34d76e82d94c46593544e4a8509a4bfc93c\";\nconst DEFAULT_ENDPOINT = \"https://analytics.agent-native.com/track\";\nconst FLUSH_TIMEOUT_MS = 1500;\n\nexport interface CliTelemetryOptions {\n /** Stable identifier for the emitting CLI, e.g. \"skills-installer\". */\n cli: string;\n cliVersion: string;\n command: string;\n interactive: boolean;\n}\n\nexport interface CliTelemetry {\n track(event: string, properties?: Record<string, unknown>): void;\n captureException(error: unknown, context?: CliExceptionContext): void;\n flush(): Promise<void>;\n}\n\nexport interface CliExceptionContext {\n handled?: boolean;\n level?: \"fatal\" | \"error\" | \"warning\" | \"info\" | \"debug\";\n tags?: Record<string, string | number | boolean | null | undefined>;\n extra?: Record<string, unknown>;\n}\n\nfunction resolvePublicKey(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_PUBLIC_KEY?.trim();\n return fromEnv || EMBEDDED_PUBLIC_KEY;\n}\n\nfunction resolveEndpoint(): string {\n const fromEnv = process.env.AGENT_NATIVE_ANALYTICS_ENDPOINT?.trim();\n return (fromEnv || DEFAULT_ENDPOINT).replace(/\\/+$/, \"\");\n}\n\nfunction telemetryDisabled(): boolean {\n return (\n process.env.DO_NOT_TRACK === \"1\" ||\n process.env.AGENT_NATIVE_TELEMETRY_DISABLED === \"1\" ||\n process.env.NODE_ENV === \"test\" ||\n typeof fetch !== \"function\"\n );\n}\n\nconst MAX_EXCEPTION_MESSAGE_LENGTH = 1000;\nconst MAX_EXCEPTION_STACK_LENGTH = 8000;\nconst MAX_EXCEPTION_TAGS = 30;\nconst MAX_EXCEPTION_EXTRA_KEYS = 30;\nconst MAX_EXCEPTION_VALUE_LENGTH = 1000;\nconst SECRET_RE = /\\b(?:bearer|basic)\\s+[^\\s]+/gi;\nconst SECRET_KEY_RE =\n /(?:authorization|cookie|set[-_]?cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)/i;\n\nfunction redactExceptionText(value: string): string {\n return value\n .replace(SECRET_RE, (match) => `${match.split(/\\s+/, 1)[0]} <redacted>`)\n .replace(\n /([A-Za-z0-9_$.-]*(?:authorization|cookie|token|secret|password|passwd|pwd|api[-_]?key|apikey|credential)[A-Za-z0-9_$.-]*\\s*[:=]\\s*)([^\\s,;}]+)/gi,\n \"$1<redacted>\",\n );\n}\n\nfunction boundedExceptionText(value: unknown, max: number): string {\n const text =\n typeof value === \"string\" ? value : String(value ?? \"Unknown error\");\n const safe = redactExceptionText(text);\n return safe.length > max ? safe.slice(0, max) : safe;\n}\n\nfunction safeExceptionValue(value: unknown, depth = 2): unknown {\n if (\n value == null ||\n typeof value === \"boolean\" ||\n typeof value === \"number\"\n ) {\n return value;\n }\n if (typeof value === \"string\") {\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n }\n if (depth <= 0)\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n if (Array.isArray(value)) {\n return value\n .slice(0, 20)\n .map((item) => safeExceptionValue(item, depth - 1));\n }\n if (typeof value === \"object\") {\n const out: Record<string, unknown> = {};\n for (const [key, child] of Object.entries(value)) {\n if (Object.keys(out).length >= MAX_EXCEPTION_EXTRA_KEYS) break;\n const safeKey = boundedExceptionText(key, 100);\n out[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : safeExceptionValue(child, depth - 1);\n }\n return out;\n }\n return boundedExceptionText(value, MAX_EXCEPTION_VALUE_LENGTH);\n}\n\nfunction captureException(\n error: unknown,\n context: CliExceptionContext,\n trackEvent: (event: string, properties?: Record<string, unknown>) => void,\n): void {\n const exception =\n error instanceof Error\n ? {\n type: boundedExceptionText(error.name || \"Error\", 200),\n message: boundedExceptionText(\n error.message || error.name || \"Error\",\n MAX_EXCEPTION_MESSAGE_LENGTH,\n ),\n stack: error.stack\n ? boundedExceptionText(error.stack, MAX_EXCEPTION_STACK_LENGTH)\n : undefined,\n }\n : {\n type: \"Error\",\n message: boundedExceptionText(error, MAX_EXCEPTION_MESSAGE_LENGTH),\n stack: undefined,\n };\n const tags: Record<string, string> = {};\n for (const [key, value] of Object.entries(context.tags ?? {})) {\n if (Object.keys(tags).length >= MAX_EXCEPTION_TAGS || value == null) break;\n const safeKey = boundedExceptionText(key, 100);\n tags[safeKey] = SECRET_KEY_RE.test(safeKey)\n ? \"<redacted>\"\n : boundedExceptionText(value, 200);\n }\n const extra = safeExceptionValue(context.extra);\n trackEvent(\"$exception\", {\n app: \"agent-native-cli\",\n template: \"cli\",\n runtime: \"cli\",\n source: \"cli\",\n exceptionType: exception.type,\n exceptionMessage: exception.message,\n ...(exception.stack ? { exceptionStack: exception.stack } : {}),\n handled: context.handled ?? false,\n level: context.level ?? \"error\",\n occurredAt: new Date().toISOString(),\n ...(Object.keys(tags).length ? { exceptionTags: tags } : {}),\n ...(extra && typeof extra === \"object\" ? { exceptionExtra: extra } : {}),\n });\n}\n\n/**\n * Read (or lazily create) a stable per-machine install id, shared across both\n * skills CLIs so one developer counts once. Best-effort: an unwritable home\n * directory just yields an ephemeral id for this run.\n */\nfunction resolveInstallId(): string {\n try {\n const dir = path.join(os.homedir(), \".agent-native\");\n const file = path.join(dir, \"installation-id\");\n const existing = fs.existsSync(file)\n ? fs.readFileSync(file, \"utf8\").trim()\n : \"\";\n if (existing) return existing;\n const id = crypto.randomUUID();\n fs.mkdirSync(dir, { recursive: true });\n fs.writeFileSync(file, `${id}\\n`, \"utf8\");\n return id;\n } catch {\n return crypto.randomUUID();\n }\n}\n\nexport function createCliTelemetry(options: CliTelemetryOptions): CliTelemetry {\n const publicKey = resolvePublicKey();\n const disabled = telemetryDisabled() || !publicKey;\n const endpoint = resolveEndpoint();\n let installId: string | undefined = disabled ? \"\" : undefined;\n const runId = crypto.randomUUID();\n const inFlight = new Set<Promise<void>>();\n\n const base = {\n cli: options.cli,\n cliVersion: options.cliVersion,\n command: options.command,\n node: process.version,\n platform: process.platform,\n ci: process.env.CI === \"true\",\n interactive: options.interactive,\n runId,\n };\n\n function track(event: string, properties?: Record<string, unknown>): void {\n if (disabled) return;\n installId ??= resolveInstallId();\n const body = JSON.stringify({\n publicKey,\n event,\n anonymousId: installId,\n sessionId: runId,\n timestamp: new Date().toISOString(),\n properties: { ...base, installId, ...properties },\n });\n const promise = fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body,\n keepalive: true,\n })\n .then(() => undefined)\n .catch(() => undefined);\n inFlight.add(promise);\n void promise.finally(() => inFlight.delete(promise));\n }\n\n async function flush(): Promise<void> {\n if (disabled || inFlight.size === 0) return;\n await Promise.race([\n Promise.allSettled([...inFlight]),\n new Promise((resolve) => setTimeout(resolve, FLUSH_TIMEOUT_MS)),\n ]);\n }\n\n return {\n track,\n captureException: (error, context = {}) =>\n captureException(error, context, track),\n flush,\n };\n}\n"]}
|
package/dist/collab/routes.d.ts
CHANGED
|
@@ -26,8 +26,8 @@ export declare const getCollabState: import("h3").EventHandlerWithFetch<import("
|
|
|
26
26
|
* Body: { update: string (base64), requestSource?: string }
|
|
27
27
|
*/
|
|
28
28
|
export declare const postCollabUpdate: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
29
|
-
ok?: undefined;
|
|
30
29
|
error: string;
|
|
30
|
+
ok?: undefined;
|
|
31
31
|
} | {
|
|
32
32
|
error?: undefined;
|
|
33
33
|
ok: boolean;
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
* Body: { json: any, fieldName?: string, type?: "map"|"array", requestSource?: string }
|
|
14
14
|
*/
|
|
15
15
|
export declare const postCollabJson: import("h3").EventHandlerWithFetch<import("h3").EventHandlerRequest, Promise<{
|
|
16
|
-
ok?: undefined;
|
|
17
16
|
error: string;
|
|
17
|
+
ok?: undefined;
|
|
18
18
|
} | {
|
|
19
19
|
error?: undefined;
|
|
20
20
|
ok: boolean;
|
|
@@ -17,12 +17,12 @@ declare const _default: import("../../action.js").ActionDefinition<{
|
|
|
17
17
|
url?: undefined;
|
|
18
18
|
provider?: undefined;
|
|
19
19
|
} | {
|
|
20
|
-
error?: undefined;
|
|
21
20
|
configured?: undefined;
|
|
22
21
|
connectPath?: undefined;
|
|
23
22
|
url: string;
|
|
24
23
|
id: string;
|
|
25
24
|
provider: string;
|
|
25
|
+
error?: undefined;
|
|
26
26
|
}>;
|
|
27
27
|
export default _default;
|
|
28
28
|
//# sourceMappingURL=upload-image.d.ts.map
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { queryScreenMemoryContext } from "../mcp-client/screen-memory-local.js";
|
|
1
2
|
export interface ScreenMemoryChapter {
|
|
2
3
|
id: string;
|
|
3
4
|
/** In v2, chapter identity survives later semantic refinements. */
|
|
@@ -366,6 +367,7 @@ export declare function screenMemoryMcpToolDefinitions(): ({
|
|
|
366
367
|
};
|
|
367
368
|
};
|
|
368
369
|
})[];
|
|
370
|
+
export declare function queryScreenMemoryContextForStore(args: Parameters<typeof queryScreenMemoryContext>[0], storeDir: string, env: NodeJS.ProcessEnv): Promise<import("../mcp-client/screen-memory-local.js").ScreenMemoryQueryResult>;
|
|
369
371
|
export declare function runScreenMemoryMCPStdio(opts?: RunScreenMemoryMCPStdioOptions): Promise<void>;
|
|
370
372
|
export {};
|
|
371
373
|
//# sourceMappingURL=screen-memory-stdio.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"screen-memory-stdio.d.ts","sourceRoot":"","sources":["../../src/mcp/screen-memory-stdio.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"screen-memory-stdio.d.ts","sourceRoot":"","sources":["../../src/mcp/screen-memory-stdio.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,wBAAwB,EAAE,MAAM,sCAAsC,CAAC;AAiBhF,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,MAAM,CAAC;IACX,mEAAmE;IACnE,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,oBAAoB,EAAE,MAAM,CAAC;IAC7B,qBAAqB,EAAE,MAAM,EAAE,CAAC;IAChC,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,SAAS,EAAE,KAAK,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IACvE,YAAY,EAAE,KAAK,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;QACnB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,SAAS,CAAC,EAAE,MAAM,CAAC;QACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;QACpB,UAAU,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC,CAAC;IACH,QAAQ,EAAE,KAAK,CAAC;QACd,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC,CAAC;IACH,qBAAqB,EAAE,KAAK,CAAC;QAC3B,QAAQ,EAAE,MAAM,CAAC;QACjB,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,QAAQ,EAAE,MAAM,CAAC;QACjB,MAAM,EAAE,MAAM,CAAC;KAChB,CAAC,CAAC;IACH,sBAAsB,CAAC,EACnB,MAAM,GACN;QAAE,aAAa,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAC;QAAC,SAAS,EAAE,OAAO,CAAA;KAAE,CAAC;IACvE,gBAAgB,EAAE,MAAM,EAAE,CAAC;IAC3B,UAAU,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAAC;CAC7C;AAED,MAAM,WAAW,4BAA4B;IAC3C,aAAa,EAAE,CAAC,GAAG,CAAC,CAAC;IACrB,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,QAAQ,EAAE,mBAAmB,EAAE,CAAC;CACjC;AAED,MAAM,WAAW,wBAAwB;IACvC,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAAC;CACjD;AAWD,MAAM,WAAW,8BAA8B;IAC7C,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,8DAA8D;IAC9D,WAAW,CAAC,EAAE,wBAAwB,CAAC;CACxC;AA8RD,4FAA4F;AAC5F,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,MAAM,GACf,4BAA4B,GAAG,IAAI,CA2BrC;AAED,KAAK,eAAe,GAAG;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB,CAAC;AAsBF,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,4BAA4B,EACtC,KAAK,EAAE,MAAM,EACb,KAAK,SAAI,EACT,UAAU,CAAC,EAAE,MAAM,GAClB,KAAK,CACN,mBAAmB,GAAG;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,eAAe,EAAE,eAAe,EAAE,CAAC;CACpC,CACF,CA+HA;AAED,wBAAgB,mCAAmC,CACjD,OAAO,EAAE,UAAU,CAAC,OAAO,0BAA0B,CAAC,CAAC,MAAM,CAAC;;;;;;;;;;;;;;kBAlhBlD,MAAM;sBACF,MAAM;mBACT,MAAM;;;;;;;;uBAWE,MAAM;qBAAe,MAAM;mBAAa,OAAO;;;;;;;EA2iBrE;AAqGD,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,wBAAgD;;;;QAVrD,IAAI,EAAE,OAAO;QACb,IAAI;QACJ,QAAQ;;EAeb;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,cAAc,GAAE,MAAM,EAAO,GAC5B,MAAM,EAAE,CAsCV;AAED,wBAAgB,wBAAwB,CACtC,UAAU,EAAE,MAAM,EAClB,kBAAkB,EAAE,OAAO,GAC1B,OAAO,CAET;AAiCD,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAW1D;AAgHD,wBAAgB,0BAA0B,CACxC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,KAAK,CAAC;IAAE,SAAS,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAA;CAAE,CAAC,GACxD,IAAI,CAgBN;AAkDD,wBAAgB,8BAA8B;;;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAgBlC,IAAI;gBACJ,WAAW;;;gBAGX,IAAI;gBACJ,WAAW;;;gBAGX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;gBAaX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;gBAcX,IAAI;gBACJ,WAAW;;;gBAIX,IAAI;gBACJ,WAAW;;;gBAGX,IAAI;gBACJ,WAAW;;;gBAGX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;gBAeX,IAAI;gBACJ,WAAW;;;gBAGX,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;gBAYA,IAAI;;;;;;;;;;;gBAIf,IAAI;gBACJ,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;gBAcF,IAAI;gBAAY,WAAW;;;gBAC7B,IAAI;gBAAY,WAAW;;;gBAElC,IAAI;gBACJ,WAAW;;;gBAEQ,IAAI;;;gBACH,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;gBAWD,IAAI;;;;KAItC;AAED,wBAAsB,gCAAgC,CACpD,IAAI,EAAE,UAAU,CAAC,OAAO,wBAAwB,CAAC,CAAC,CAAC,CAAC,EACpD,QAAQ,EAAE,MAAM,EAChB,GAAG,EAAE,MAAM,CAAC,UAAU,mFAavB;AAED,wBAAsB,uBAAuB,CAC3C,IAAI,GAAE,8BAAmC,GACxC,OAAO,CAAC,IAAI,CAAC,CA4Yf"}
|
|
@@ -822,6 +822,16 @@ export function screenMemoryMcpToolDefinitions() {
|
|
|
822
822
|
},
|
|
823
823
|
];
|
|
824
824
|
}
|
|
825
|
+
export async function queryScreenMemoryContextForStore(args, storeDir, env) {
|
|
826
|
+
return queryScreenMemoryContext(args, {
|
|
827
|
+
homeDir: env.HOME,
|
|
828
|
+
env: {
|
|
829
|
+
...env,
|
|
830
|
+
AGENT_NATIVE_SCREEN_MEMORY_DIR: storeDir,
|
|
831
|
+
AGENT_NATIVE_SCREEN_MEMORY_CONFIG: path.join(path.dirname(storeDir), "feature-config.json"),
|
|
832
|
+
},
|
|
833
|
+
});
|
|
834
|
+
}
|
|
825
835
|
export async function runScreenMemoryMCPStdio(opts = {}) {
|
|
826
836
|
const env = opts.env ?? process.env;
|
|
827
837
|
const storeDir = opts.storeDir ?? defaultStoreDir(env);
|
|
@@ -849,11 +859,11 @@ export async function runScreenMemoryMCPStdio(opts = {}) {
|
|
|
849
859
|
});
|
|
850
860
|
}
|
|
851
861
|
if (name === "screen_memory_recent_context") {
|
|
852
|
-
const result = await
|
|
862
|
+
const result = await queryScreenMemoryContextForStore({
|
|
853
863
|
query: typeof args.query === "string" ? args.query : undefined,
|
|
854
864
|
sinceMinutes: typeof args.minutes === "number" ? args.minutes : undefined,
|
|
855
865
|
limit: typeof args.limit === "number" ? args.limit : undefined,
|
|
856
|
-
},
|
|
866
|
+
}, storeDir, env);
|
|
857
867
|
const sanitizedEvidence = result.evidence.map((item) => ({
|
|
858
868
|
...item,
|
|
859
869
|
excerpt: redactCredentialText(item.excerpt),
|