@asm-agent/coding-agent 0.8.8 → 0.9.0

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.
Files changed (178) hide show
  1. package/CHANGELOG.md +15 -0
  2. package/README.md +2 -7
  3. package/dist/asm-agent-runtime/src/__pycache__/asm_cm_driver.cpython-313.pyc +0 -0
  4. package/dist/asm-agent-runtime/src/__pycache__/phase76_address_head.cpython-313.pyc +0 -0
  5. package/dist/asm-agent-runtime/src/rlm/__init__.py +1 -1
  6. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-312.pyc +0 -0
  7. package/dist/asm-agent-runtime/src/rlm/__pycache__/__init__.cpython-313.pyc +0 -0
  8. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-312.pyc +0 -0
  9. package/dist/asm-agent-runtime/src/rlm/__pycache__/bash.cpython-313.pyc +0 -0
  10. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp.cpython-312.pyc +0 -0
  11. package/dist/asm-agent-runtime/src/rlm/__pycache__/mcp_base.cpython-312.pyc +0 -0
  12. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-312.pyc +0 -0
  13. package/dist/asm-agent-runtime/src/rlm/__pycache__/repl.cpython-313.pyc +0 -0
  14. package/dist/asm-agent-runtime/src/rlm/__pycache__/skill.cpython-313.pyc +0 -0
  15. package/dist/asm-agent-runtime/src/rlm/bash.py +94 -31
  16. package/dist/asm-agent-runtime/src/rlm/repl.md +3 -3
  17. package/dist/asm-agent-runtime/src/rlm/repl.py +46 -45
  18. package/dist/asm-agent-runtime/test/__pycache__/test_bash.cpython-313.pyc +0 -0
  19. package/dist/asm-agent-runtime/test/__pycache__/test_repl.cpython-313.pyc +0 -0
  20. package/dist/asm-agent-runtime/test/test_bash.py +74 -19
  21. package/dist/asm-agent-runtime/test/test_repl.py +67 -3
  22. package/dist/asm-agent-runtime/uv.lock +446 -155
  23. package/dist/bundle/{anthropic-OFECORE7.js → anthropic-ZOZNPFXS.js} +2 -2
  24. package/dist/bundle/{azure-openai-responses-AOVTLR6N.js → azure-openai-responses-TDHCU647.js} +2 -2
  25. package/dist/bundle/{bundled-modules-JQCJDEIY.js → bundled-modules-Q2YODC4B.js} +3 -3
  26. package/dist/bundle/{chunk-M67RGWDQ.js → chunk-AMKLNEAK.js} +25 -44
  27. package/dist/bundle/{chunk-7TB7CGPV.js → chunk-FPY7FFJS.js} +978 -1821
  28. package/dist/bundle/{chunk-JC2TT4MZ.js → chunk-G6SC4YYW.js} +4942 -1916
  29. package/dist/bundle/{chunk-A65OM3TZ.js → chunk-QLHAP3FT.js} +1 -1
  30. package/dist/bundle/{cli-main-FNHDQGQD.js → cli-main-277AG2BR.js} +3 -3
  31. package/dist/bundle/cli.js +1 -1
  32. package/dist/bundle/{google-RVJL6RIQ.js → google-Q3AJWUOY.js} +1 -1
  33. package/dist/bundle/{google-vertex-EZTRRRH6.js → google-vertex-2CSNOUBS.js} +1 -1
  34. package/dist/bundle/{main-IYXIIAJN.js → main-TNXWJXIU.js} +3 -3
  35. package/dist/bundle/{mistral-FSGKSMA7.js → mistral-XRYJGLLG.js} +1 -1
  36. package/dist/bundle/{openai-codex-responses-VM5Y564D.js → openai-codex-responses-C6BRO2BN.js} +2 -2
  37. package/dist/bundle/{openai-completions-X46FOQDN.js → openai-completions-DNXCK2JW.js} +3 -3
  38. package/dist/bundle/{openai-responses-SOQNEPBE.js → openai-responses-BEMWVIXE.js} +2 -2
  39. package/dist/config.d.ts +0 -1
  40. package/dist/config.d.ts.map +1 -1
  41. package/dist/config.js +0 -3
  42. package/dist/config.js.map +1 -1
  43. package/dist/core/agent-session-config.d.ts +1 -2
  44. package/dist/core/agent-session-config.d.ts.map +1 -1
  45. package/dist/core/agent-session-config.js +0 -3
  46. package/dist/core/agent-session-config.js.map +1 -1
  47. package/dist/core/agent-session-runtime.d.ts.map +1 -1
  48. package/dist/core/agent-session-runtime.js +0 -8
  49. package/dist/core/agent-session-runtime.js.map +1 -1
  50. package/dist/core/agent-session-services.d.ts +0 -2
  51. package/dist/core/agent-session-services.d.ts.map +1 -1
  52. package/dist/core/agent-session-services.js +0 -22
  53. package/dist/core/agent-session-services.js.map +1 -1
  54. package/dist/core/agent-session.d.ts +8 -1
  55. package/dist/core/agent-session.d.ts.map +1 -1
  56. package/dist/core/agent-session.js +100 -22
  57. package/dist/core/agent-session.js.map +1 -1
  58. package/dist/core/kernel/bootstrap.d.ts.map +1 -1
  59. package/dist/core/kernel/bootstrap.js +1 -1
  60. package/dist/core/kernel/bootstrap.js.map +1 -1
  61. package/dist/core/kernel/repl-manager.d.ts +32 -8
  62. package/dist/core/kernel/repl-manager.d.ts.map +1 -1
  63. package/dist/core/kernel/repl-manager.js +401 -102
  64. package/dist/core/kernel/repl-manager.js.map +1 -1
  65. package/dist/core/kernel/shared.d.ts +11 -7
  66. package/dist/core/kernel/shared.d.ts.map +1 -1
  67. package/dist/core/kernel/shared.js +2 -5
  68. package/dist/core/kernel/shared.js.map +1 -1
  69. package/dist/core/mcp/mcp-manager.d.ts +4 -2
  70. package/dist/core/mcp/mcp-manager.d.ts.map +1 -1
  71. package/dist/core/mcp/mcp-manager.js +9 -7
  72. package/dist/core/mcp/mcp-manager.js.map +1 -1
  73. package/dist/core/prime-inference-auth.d.ts +0 -9
  74. package/dist/core/prime-inference-auth.d.ts.map +1 -1
  75. package/dist/core/prime-inference-auth.js +0 -50
  76. package/dist/core/prime-inference-auth.js.map +1 -1
  77. package/dist/core/provider-display-names.d.ts.map +1 -1
  78. package/dist/core/provider-display-names.js +0 -1
  79. package/dist/core/provider-display-names.js.map +1 -1
  80. package/dist/core/session-manager.d.ts +0 -4
  81. package/dist/core/session-manager.d.ts.map +1 -1
  82. package/dist/core/session-manager.js +0 -22
  83. package/dist/core/session-manager.js.map +1 -1
  84. package/dist/core/settings-manager.d.ts +4 -16
  85. package/dist/core/settings-manager.d.ts.map +1 -1
  86. package/dist/core/settings-manager.js +13 -43
  87. package/dist/core/settings-manager.js.map +1 -1
  88. package/dist/core/slash-commands.d.ts.map +1 -1
  89. package/dist/core/slash-commands.js +0 -5
  90. package/dist/core/slash-commands.js.map +1 -1
  91. package/dist/core/tools/acp-mcp.d.ts +6 -0
  92. package/dist/core/tools/acp-mcp.d.ts.map +1 -0
  93. package/dist/core/tools/acp-mcp.js +86 -0
  94. package/dist/core/tools/acp-mcp.js.map +1 -0
  95. package/dist/core/tools/index.d.ts +1 -0
  96. package/dist/core/tools/index.d.ts.map +1 -1
  97. package/dist/core/tools/index.js +1 -0
  98. package/dist/core/tools/index.js.map +1 -1
  99. package/dist/core/tools/ipython.d.ts.map +1 -1
  100. package/dist/core/tools/ipython.js +9 -4
  101. package/dist/core/tools/ipython.js.map +1 -1
  102. package/dist/main.d.ts.map +1 -1
  103. package/dist/main.js +2 -11
  104. package/dist/main.js.map +1 -1
  105. package/dist/modes/acp/acp-mode.d.ts.map +1 -1
  106. package/dist/modes/acp/acp-mode.js +1 -1
  107. package/dist/modes/acp/acp-mode.js.map +1 -1
  108. package/dist/modes/agent-connection/daemon-agent-connection.d.ts +0 -2
  109. package/dist/modes/agent-connection/daemon-agent-connection.d.ts.map +1 -1
  110. package/dist/modes/agent-connection/daemon-agent-connection.js +0 -2
  111. package/dist/modes/agent-connection/daemon-agent-connection.js.map +1 -1
  112. package/dist/modes/agents-view/agents-view-mode.d.ts.map +1 -1
  113. package/dist/modes/agents-view/agents-view-mode.js +0 -19
  114. package/dist/modes/agents-view/agents-view-mode.js.map +1 -1
  115. package/dist/modes/daemon/daemon-mode.d.ts +1 -10
  116. package/dist/modes/daemon/daemon-mode.d.ts.map +1 -1
  117. package/dist/modes/daemon/daemon-mode.js +134 -274
  118. package/dist/modes/daemon/daemon-mode.js.map +1 -1
  119. package/dist/modes/daemon/daemon-protocol.d.ts +11 -5
  120. package/dist/modes/daemon/daemon-protocol.d.ts.map +1 -1
  121. package/dist/modes/daemon/daemon-protocol.js +6 -8
  122. package/dist/modes/daemon/daemon-protocol.js.map +1 -1
  123. package/dist/modes/daemon/daemon-supervisor.d.ts +0 -3
  124. package/dist/modes/daemon/daemon-supervisor.d.ts.map +1 -1
  125. package/dist/modes/daemon/daemon-supervisor.js +18 -52
  126. package/dist/modes/daemon/daemon-supervisor.js.map +1 -1
  127. package/dist/modes/daemon/daemon-worker-protocol.d.ts +1 -6
  128. package/dist/modes/daemon/daemon-worker-protocol.d.ts.map +1 -1
  129. package/dist/modes/daemon/daemon-worker-protocol.js +0 -2
  130. package/dist/modes/daemon/daemon-worker-protocol.js.map +1 -1
  131. package/dist/modes/interactive/auth-flows.d.ts +0 -2
  132. package/dist/modes/interactive/auth-flows.d.ts.map +1 -1
  133. package/dist/modes/interactive/auth-flows.js +1 -101
  134. package/dist/modes/interactive/auth-flows.js.map +1 -1
  135. package/dist/modes/interactive/components/assistant-message.d.ts +6 -1
  136. package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
  137. package/dist/modes/interactive/components/assistant-message.js +13 -3
  138. package/dist/modes/interactive/components/assistant-message.js.map +1 -1
  139. package/dist/modes/interactive/components/footer.d.ts +1 -1
  140. package/dist/modes/interactive/components/footer.d.ts.map +1 -1
  141. package/dist/modes/interactive/components/footer.js +2 -2
  142. package/dist/modes/interactive/components/footer.js.map +1 -1
  143. package/dist/modes/interactive/components/mermaid.d.ts +12 -0
  144. package/dist/modes/interactive/components/mermaid.d.ts.map +1 -0
  145. package/dist/modes/interactive/components/mermaid.js +63 -0
  146. package/dist/modes/interactive/components/mermaid.js.map +1 -0
  147. package/dist/modes/interactive/components/settings-selector.d.ts +3 -1
  148. package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
  149. package/dist/modes/interactive/components/settings-selector.js +10 -0
  150. package/dist/modes/interactive/components/settings-selector.js.map +1 -1
  151. package/dist/modes/interactive/feature-hints.d.ts.map +1 -1
  152. package/dist/modes/interactive/feature-hints.js +0 -4
  153. package/dist/modes/interactive/feature-hints.js.map +1 -1
  154. package/dist/modes/interactive/interactive-mode.d.ts +1 -7
  155. package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
  156. package/dist/modes/interactive/interactive-mode.js +23 -279
  157. package/dist/modes/interactive/interactive-mode.js.map +1 -1
  158. package/dist/utils/version-check.d.ts.map +1 -1
  159. package/dist/utils/version-check.js +1 -1
  160. package/dist/utils/version-check.js.map +1 -1
  161. package/docs/settings.md +1 -31
  162. package/docs/usage.md +1 -4
  163. package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
  164. package/examples/extensions/custom-provider-anthropic/package.json +1 -1
  165. package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
  166. package/examples/extensions/sandbox/package-lock.json +2 -2
  167. package/examples/extensions/sandbox/package.json +1 -1
  168. package/examples/extensions/with-deps/package-lock.json +2 -2
  169. package/examples/extensions/with-deps/package.json +1 -1
  170. package/package.json +6 -5
  171. package/dist/core/agent-traces.d.ts +0 -130
  172. package/dist/core/agent-traces.d.ts.map +0 -1
  173. package/dist/core/agent-traces.js +0 -746
  174. package/dist/core/agent-traces.js.map +0 -1
  175. package/dist/core/telemetry.d.ts +0 -92
  176. package/dist/core/telemetry.d.ts.map +0 -1
  177. package/dist/core/telemetry.js +0 -633
  178. package/dist/core/telemetry.js.map +0 -1
@@ -1 +0,0 @@
1
- {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../src/core/telemetry.ts"],"names":[],"mappings":"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","sourcesContent":["import { randomUUID } from \"node:crypto\";\nimport { lstatSync, mkdirSync, readFileSync, renameSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { arch, platform } from \"node:os\";\nimport { join } from \"node:path\";\nimport type { AssistantMessage, Usage } from \"@asm-agent/ai\";\nimport { detectInstallMethod, VERSION } from \"../config.js\";\nimport type { AgentSession, AgentSessionEvent } from \"./agent-session.js\";\nimport type { AgentExecutionMode } from \"./agent-session-config.js\";\nimport type { AuthCredential, AuthStatus } from \"./auth-storage.js\";\nimport type { SettingsManager } from \"./settings-manager.js\";\nimport { isBuiltinSlashCommandName, resolveBuiltinSlashCommandName } from \"./slash-commands.js\";\n\nconst DEFAULT_TELEMETRY_ENDPOINT = \"https://api.primeintellect.ai/api/v1/agent-analytics/events\";\nconst TELEMETRY_STATE_FILE = \"telemetry.json\";\nconst TELEMETRY_STATE_VERSION = 1;\nconst DEFAULT_BATCH_SIZE = 10;\nconst DEFAULT_FLUSH_INTERVAL_MS = 10_000;\nconst DEFAULT_REQUEST_TIMEOUT_MS = 1_500;\n\ntype TelemetryPrimitive = string | number | boolean | null;\ntype TelemetryProperties = Record<string, TelemetryPrimitive>;\n\nexport type TelemetryEventName =\n\t| \"agent started\"\n\t| \"onboarding completed\"\n\t| \"agent command used\"\n\t| \"agent run completed\"\n\t| \"agent session ended\";\n\nexport type TelemetryExecutionMode = AgentExecutionMode | \"unknown\";\nexport type TelemetryOnboardingOutcome = \"success\" | \"error\" | \"aborted\";\nexport type TelemetryAuthCategory =\n\t| \"oauth\"\n\t| \"api_key\"\n\t| \"runtime_api_key\"\n\t| \"environment\"\n\t| \"prime_cli\"\n\t| \"models_json\"\n\t| \"fallback\"\n\t| \"stale\"\n\t| \"stored\"\n\t| \"none\";\n\nexport interface TelemetryEvent {\n\tid: string;\n\tname: TelemetryEventName;\n\ttimestamp: string;\n\tproperties: TelemetryProperties;\n}\n\nexport interface TelemetryBatch {\n\tinstallation_id: string;\n\tevents: TelemetryEvent[];\n}\n\nexport interface TelemetrySink {\n\tcapture(name: TelemetryEventName, properties: TelemetryProperties): void;\n\tflush(): Promise<void>;\n}\n\ninterface TelemetryState {\n\tversion: number;\n\tinstallationId: string;\n}\n\ninterface TelemetryClientOptions {\n\tagentDir: string;\n\tendpoint?: string;\n\tfetch?: typeof fetch;\n\tnow?: () => number;\n\trandomId?: () => string;\n\tbatchSize?: number;\n\tflushIntervalMs?: number;\n\trequestTimeoutMs?: number;\n}\n\ninterface InstallAgentTelemetryOptions {\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\texecutionMode?: AgentExecutionMode;\n\tsink?: TelemetrySink;\n\tnow?: () => number;\n\trandomId?: () => string;\n}\n\nexport interface CaptureOnboardingCompletedOptions {\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\tdurationMs: number;\n\toutcome: TelemetryOnboardingOutcome;\n\tprovider?: string;\n\tauthSource?: AuthStatus[\"source\"];\n\tstoredCredentialType?: AuthCredential[\"type\"];\n\tsink?: TelemetrySink;\n\tnow?: () => number;\n\trandomId?: () => string;\n}\n\nexport interface CaptureAgentCommandUsedOptions {\n\tagentDir: string;\n\tsettingsManager: SettingsManager;\n\tcommandName: string;\n\tsink?: TelemetrySink;\n\tnow?: () => number;\n\trandomId?: () => string;\n}\n\ninterface UsageTotals extends Usage {\n\tmodelCallCount: number;\n}\n\ninterface ActiveRun {\n\tstartedAt: number;\n\tagentEnded: boolean;\n\tfirstTurnStartedAt?: number;\n\tfirstModelEventMs?: number;\n\tvisibleTtftMs?: number;\n\tcurrentTurnStartedAt?: number;\n\tmodelLatencyMs: number;\n\tmaxModelLatencyMs: number;\n\tturnCount: number;\n\ttoolCallCount: number;\n\ttoolErrorCount: number;\n\tcompactionCount: number;\n\tretryCount: number;\n\tusage: UsageTotals;\n\tlastAssistant?: AssistantMessage;\n}\n\ninterface SessionTotals {\n\tstartedAt: number;\n\trunCount: number;\n\tsuccessfulRunCount: number;\n\tfailedRunCount: number;\n\tabortedRunCount: number;\n\tpromptCount: number;\n\ttoolCallCount: number;\n\tcompactionCount: number;\n\tusage: UsageTotals;\n}\n\nconst EMPTY_USAGE_TOTALS: UsageTotals = {\n\tinput: 0,\n\toutput: 0,\n\tcacheRead: 0,\n\tcacheWrite: 0,\n\ttotalTokens: 0,\n\tcost: {\n\t\tinput: 0,\n\t\toutput: 0,\n\t\tcacheRead: 0,\n\t\tcacheWrite: 0,\n\t\ttotal: 0,\n\t},\n\tmodelCallCount: 0,\n};\n\nfunction newUsageTotals(): UsageTotals {\n\treturn structuredClone(EMPTY_USAGE_TOTALS);\n}\n\nfunction addUsage(target: UsageTotals, usage: Usage): void {\n\ttarget.input += usage.input;\n\ttarget.output += usage.output;\n\ttarget.cacheRead += usage.cacheRead;\n\ttarget.cacheWrite += usage.cacheWrite;\n\ttarget.totalTokens += usage.totalTokens;\n\ttarget.cost.input += usage.cost.input;\n\ttarget.cost.output += usage.cost.output;\n\ttarget.cost.cacheRead += usage.cost.cacheRead;\n\ttarget.cost.cacheWrite += usage.cost.cacheWrite;\n\ttarget.cost.total += usage.cost.total;\n\ttarget.modelCallCount++;\n}\n\nfunction mergeUsage(target: UsageTotals, usage: UsageTotals): void {\n\ttarget.input += usage.input;\n\ttarget.output += usage.output;\n\ttarget.cacheRead += usage.cacheRead;\n\ttarget.cacheWrite += usage.cacheWrite;\n\ttarget.totalTokens += usage.totalTokens;\n\ttarget.cost.input += usage.cost.input;\n\ttarget.cost.output += usage.cost.output;\n\ttarget.cost.cacheRead += usage.cost.cacheRead;\n\ttarget.cost.cacheWrite += usage.cost.cacheWrite;\n\ttarget.cost.total += usage.cost.total;\n\ttarget.modelCallCount += usage.modelCallCount;\n}\n\nfunction parseBooleanOverride(value: string | undefined): boolean | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\tconst normalized = value.trim().toLowerCase();\n\tif ([\"1\", \"true\", \"yes\", \"on\"].includes(normalized)) {\n\t\treturn true;\n\t}\n\tif ([\"0\", \"false\", \"no\", \"off\"].includes(normalized)) {\n\t\treturn false;\n\t}\n\treturn undefined;\n}\n\nexport function isTelemetryEnabled(settingsManager: SettingsManager): boolean {\n\tif (parseBooleanOverride(process.env.PI_OFFLINE) === true) {\n\t\treturn false;\n\t}\n\tif (parseBooleanOverride(process.env.DO_NOT_TRACK) === true) {\n\t\treturn false;\n\t}\n\tconst override = parseBooleanOverride(process.env.ASM_AGENT_TELEMETRY);\n\tif (override !== undefined) {\n\t\treturn override;\n\t}\n\tif (process.env.NODE_ENV === \"test\") {\n\t\treturn false;\n\t}\n\treturn settingsManager.getTelemetryEnabled();\n}\n\nfunction isInstallationId(value: unknown): value is string {\n\treturn (\n\t\ttypeof value === \"string\" &&\n\t\t/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(value)\n\t);\n}\n\nfunction readInstallationId(path: string): string | undefined {\n\ttry {\n\t\tconst parsed = JSON.parse(readFileSync(path, \"utf8\")) as Partial<TelemetryState>;\n\t\treturn parsed.version === TELEMETRY_STATE_VERSION && isInstallationId(parsed.installationId)\n\t\t\t? parsed.installationId\n\t\t\t: undefined;\n\t} catch {\n\t\treturn undefined;\n\t}\n}\n\nfunction writeTelemetryStateAtomically(path: string, state: TelemetryState): void {\n\tconst temporaryPath = `${path}.${process.pid}.${randomUUID()}.tmp`;\n\ttry {\n\t\twriteFileSync(temporaryPath, JSON.stringify(state, null, 2), {\n\t\t\tencoding: \"utf8\",\n\t\t\tflag: \"wx\",\n\t\t\tmode: 0o600,\n\t\t});\n\t\trenameSync(temporaryPath, path);\n\t} finally {\n\t\ttry {\n\t\t\tunlinkSync(temporaryPath);\n\t\t} catch {\n\t\t\t// The rename succeeded or the temporary file was never created.\n\t\t}\n\t}\n}\n\nexport function getOrCreateTelemetryInstallationId(agentDir: string, randomId: () => string = randomUUID): string {\n\tconst path = join(agentDir, TELEMETRY_STATE_FILE);\n\tlet replaceInvalidState = false;\n\ttry {\n\t\tconst stats = lstatSync(path);\n\t\tif (!stats.isFile()) {\n\t\t\tthrow new Error(\"Telemetry state path must be a regular file\");\n\t\t}\n\t\tconst existing = readInstallationId(path);\n\t\tif (existing) {\n\t\t\treturn existing;\n\t\t}\n\t\treplaceInvalidState = true;\n\t} catch (error) {\n\t\tconst code =\n\t\t\ttypeof error === \"object\" && error !== null && \"code\" in error\n\t\t\t\t? String((error as { code?: unknown }).code)\n\t\t\t\t: undefined;\n\t\tif (code !== \"ENOENT\") {\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tconst installationId = randomId();\n\tif (!isInstallationId(installationId)) {\n\t\tthrow new Error(\"Telemetry installation ID generator returned an invalid UUID\");\n\t}\n\tmkdirSync(agentDir, { recursive: true });\n\tconst state: TelemetryState = {\n\t\tversion: TELEMETRY_STATE_VERSION,\n\t\tinstallationId,\n\t};\n\ttry {\n\t\tif (replaceInvalidState) {\n\t\t\twriteTelemetryStateAtomically(path, state);\n\t\t} else {\n\t\t\twriteFileSync(path, JSON.stringify(state, null, 2), {\n\t\t\t\tencoding: \"utf8\",\n\t\t\t\tflag: \"wx\",\n\t\t\t\tmode: 0o600,\n\t\t\t});\n\t\t}\n\t\treturn installationId;\n\t} catch (error) {\n\t\tconst code =\n\t\t\ttypeof error === \"object\" && error !== null && \"code\" in error\n\t\t\t\t? String((error as { code?: unknown }).code)\n\t\t\t\t: undefined;\n\t\tif (code !== \"EEXIST\") {\n\t\t\tthrow error;\n\t\t}\n\t\treturn readInstallationId(path) ?? installationId;\n\t}\n}\n\nexport class TelemetryClient implements TelemetrySink {\n\tprivate readonly endpoint: string;\n\tprivate readonly fetchImpl: typeof fetch;\n\tprivate readonly now: () => number;\n\tprivate readonly randomId: () => string;\n\tprivate readonly batchSize: number;\n\tprivate readonly flushIntervalMs: number;\n\tprivate readonly requestTimeoutMs: number;\n\tprivate installationId?: string;\n\tprivate queue: TelemetryEvent[] = [];\n\tprivate flushTimer?: ReturnType<typeof setTimeout>;\n\tprivate flushInFlight?: Promise<void>;\n\tprivate disabled = false;\n\n\tconstructor(private readonly options: TelemetryClientOptions) {\n\t\tthis.endpoint = options.endpoint ?? process.env.ASM_AGENT_TELEMETRY_ENDPOINT ?? DEFAULT_TELEMETRY_ENDPOINT;\n\t\tthis.fetchImpl = options.fetch ?? fetch;\n\t\tthis.now = options.now ?? Date.now;\n\t\tthis.randomId = options.randomId ?? randomUUID;\n\t\tthis.batchSize = options.batchSize ?? DEFAULT_BATCH_SIZE;\n\t\tthis.flushIntervalMs = options.flushIntervalMs ?? DEFAULT_FLUSH_INTERVAL_MS;\n\t\tthis.requestTimeoutMs = options.requestTimeoutMs ?? DEFAULT_REQUEST_TIMEOUT_MS;\n\t}\n\n\tcapture(name: TelemetryEventName, properties: TelemetryProperties): void {\n\t\tif (this.disabled) {\n\t\t\treturn;\n\t\t}\n\t\ttry {\n\t\t\tthis.installationId ??= getOrCreateTelemetryInstallationId(this.options.agentDir, this.randomId);\n\t\t\tthis.queue.push({\n\t\t\t\tid: this.randomId(),\n\t\t\t\tname,\n\t\t\t\ttimestamp: new Date(this.now()).toISOString(),\n\t\t\t\tproperties,\n\t\t\t});\n\t\t} catch {\n\t\t\tthis.disabled = true;\n\t\t\tthis.queue = [];\n\t\t\treturn;\n\t\t}\n\t\tif (this.queue.length >= this.batchSize) {\n\t\t\tvoid this.flush();\n\t\t\treturn;\n\t\t}\n\t\tthis.scheduleFlush();\n\t}\n\n\tprivate scheduleFlush(): void {\n\t\tif (this.flushTimer) {\n\t\t\treturn;\n\t\t}\n\t\tthis.flushTimer = setTimeout(() => {\n\t\t\tthis.flushTimer = undefined;\n\t\t\tvoid this.flush();\n\t\t}, this.flushIntervalMs);\n\t\tthis.flushTimer.unref?.();\n\t}\n\n\tasync flush(): Promise<void> {\n\t\tif (this.flushTimer) {\n\t\t\tclearTimeout(this.flushTimer);\n\t\t\tthis.flushTimer = undefined;\n\t\t}\n\t\tif (this.flushInFlight) {\n\t\t\tawait this.flushInFlight;\n\t\t\tif (this.queue.length > 0) {\n\t\t\t\tawait this.flush();\n\t\t\t}\n\t\t\treturn;\n\t\t}\n\t\tif (this.queue.length === 0 || !this.installationId) {\n\t\t\treturn;\n\t\t}\n\n\t\tconst drain = this.drainQueue();\n\t\tthis.flushInFlight = drain;\n\t\ttry {\n\t\t\tawait drain;\n\t\t} finally {\n\t\t\tif (this.flushInFlight === drain) {\n\t\t\t\tthis.flushInFlight = undefined;\n\t\t\t}\n\t\t}\n\t\tif (this.queue.length > 0) {\n\t\t\tawait this.flush();\n\t\t}\n\t}\n\n\tprivate async drainQueue(): Promise<void> {\n\t\twhile (this.queue.length > 0 && this.installationId) {\n\t\t\tconst events = this.queue.splice(0, this.batchSize);\n\t\t\tconst batch: TelemetryBatch = {\n\t\t\t\tinstallation_id: this.installationId,\n\t\t\t\tevents,\n\t\t\t};\n\t\t\tawait this.send(batch);\n\t\t}\n\t}\n\n\tprivate async send(batch: TelemetryBatch): Promise<void> {\n\t\ttry {\n\t\t\tawait this.fetchImpl(this.endpoint, {\n\t\t\t\tmethod: \"POST\",\n\t\t\t\theaders: {\n\t\t\t\t\t\"content-type\": \"application/json\",\n\t\t\t\t\t\"user-agent\": `asm-agent/${VERSION}`,\n\t\t\t\t},\n\t\t\t\tbody: JSON.stringify(batch),\n\t\t\t\tsignal: AbortSignal.timeout(this.requestTimeoutMs),\n\t\t\t});\n\t\t} catch {\n\t\t\t// Product analytics is best-effort and must never affect the agent.\n\t\t}\n\t}\n}\n\nfunction modelCategory(model: string): string {\n\tconst normalized = model.toLowerCase();\n\tconst categories = [\n\t\t\"claude\",\n\t\t\"gpt\",\n\t\t\"o1\",\n\t\t\"o3\",\n\t\t\"o4\",\n\t\t\"gemini\",\n\t\t\"glm\",\n\t\t\"kimi\",\n\t\t\"qwen\",\n\t\t\"deepseek\",\n\t\t\"llama\",\n\t\t\"mistral\",\n\t];\n\treturn categories.find((category) => normalized.includes(category)) ?? \"custom\";\n}\n\nexport function telemetryProviderCategory(provider: string | undefined): string {\n\tif (!provider) {\n\t\treturn \"unknown\";\n\t}\n\tconst normalized = provider.toLowerCase();\n\tconst categories = [\n\t\t\"anthropic\",\n\t\t\"openai\",\n\t\t\"google\",\n\t\t\"asm\",\n\t\t\"openrouter\",\n\t\t\"bedrock\",\n\t\t\"vertex\",\n\t\t\"mistral\",\n\t\t\"groq\",\n\t\t\"xai\",\n\t];\n\treturn categories.find((category) => normalized.includes(category)) ?? \"custom\";\n}\n\nexport function telemetryAuthCategory(\n\tsource: AuthStatus[\"source\"],\n\tstoredCredentialType?: AuthCredential[\"type\"],\n): TelemetryAuthCategory {\n\tswitch (source) {\n\t\tcase \"stored\":\n\t\t\treturn storedCredentialType ?? \"stored\";\n\t\tcase \"runtime\":\n\t\t\treturn \"runtime_api_key\";\n\t\tcase \"environment\":\n\t\t\treturn \"environment\";\n\t\tcase \"prime_cli\":\n\t\t\treturn \"prime_cli\";\n\t\tcase \"models_json_key\":\n\t\tcase \"models_json_command\":\n\t\t\treturn \"models_json\";\n\t\tcase \"fallback\":\n\t\t\treturn \"fallback\";\n\t\tcase \"stale\":\n\t\t\treturn \"stale\";\n\t\tdefault:\n\t\t\treturn \"none\";\n\t}\n}\n\nfunction baseProperties(executionMode: TelemetryExecutionMode): TelemetryProperties {\n\treturn {\n\t\tversion: VERSION,\n\t\tos_family: platform(),\n\t\tarchitecture: arch(),\n\t\tinstall_method: detectInstallMethod(),\n\t\texecution_mode: executionMode,\n\t};\n}\n\nexport async function captureOnboardingCompleted(options: CaptureOnboardingCompletedOptions): Promise<void> {\n\tif (!isTelemetryEnabled(options.settingsManager)) {\n\t\treturn;\n\t}\n\n\tconst now = options.now ?? Date.now;\n\tconst randomId = options.randomId ?? randomUUID;\n\tconst sink =\n\t\toptions.sink ??\n\t\tnew TelemetryClient({\n\t\t\tagentDir: options.agentDir,\n\t\t\tnow,\n\t\t\trandomId,\n\t\t});\n\tsink.capture(\"onboarding completed\", {\n\t\t...baseProperties(\"interactive\"),\n\t\tduration_ms: Math.max(0, options.durationMs),\n\t\toutcome: options.outcome,\n\t\tauth_category: telemetryAuthCategory(options.authSource, options.storedCredentialType),\n\t\tprovider_category: telemetryProviderCategory(options.provider),\n\t});\n\tawait sink.flush();\n}\n\nexport async function captureAgentCommandUsed(options: CaptureAgentCommandUsedOptions): Promise<void> {\n\tif (!isBuiltinSlashCommandName(options.commandName) || !isTelemetryEnabled(options.settingsManager)) {\n\t\treturn;\n\t}\n\tconst commandName = resolveBuiltinSlashCommandName(options.commandName);\n\n\tconst now = options.now ?? Date.now;\n\tconst randomId = options.randomId ?? randomUUID;\n\tconst sink =\n\t\toptions.sink ??\n\t\tnew TelemetryClient({\n\t\t\tagentDir: options.agentDir,\n\t\t\tnow,\n\t\t\trandomId,\n\t\t});\n\tsink.capture(\"agent command used\", {\n\t\t...baseProperties(\"interactive\"),\n\t\tcommand_name: commandName,\n\t});\n\tawait sink.flush();\n}\n\nfunction errorCategory(message: AssistantMessage | undefined): string | null {\n\tif (!message || message.stopReason !== \"error\") {\n\t\treturn null;\n\t}\n\tconst error = message.errorMessage?.toLowerCase() ?? \"\";\n\tif (/\\b401\\b|\\b403\\b|auth|api.?key|credential|unauthori[sz]ed|forbidden/.test(error)) {\n\t\treturn \"authentication\";\n\t}\n\tif (/\\b429\\b|rate.?limit|quota/.test(error)) {\n\t\treturn \"rate_limit\";\n\t}\n\tif (/timeout|timed out/.test(error)) {\n\t\treturn \"timeout\";\n\t}\n\tif (/context|token.*limit|too long|maximum.*length/.test(error)) {\n\t\treturn \"context_limit\";\n\t}\n\tif (/network|socket|connection|fetch/.test(error)) {\n\t\treturn \"network\";\n\t}\n\tif (/\\b5\\d\\d\\b|overload|unavailable/.test(error)) {\n\t\treturn \"provider_unavailable\";\n\t}\n\treturn \"other\";\n}\n\nfunction runOutcome(message: AssistantMessage | undefined): \"success\" | \"error\" | \"aborted\" {\n\tif (message?.stopReason === \"aborted\") {\n\t\treturn \"aborted\";\n\t}\n\tif (!message || message.stopReason === \"error\") {\n\t\treturn \"error\";\n\t}\n\treturn \"success\";\n}\n\nfunction assistantMessage(event: AgentSessionEvent): AssistantMessage | undefined {\n\tif (event.type !== \"message_end\" || event.message.role !== \"assistant\") {\n\t\treturn undefined;\n\t}\n\treturn event.message;\n}\n\nfunction createActiveRun(now: () => number): ActiveRun {\n\treturn {\n\t\tstartedAt: now(),\n\t\tagentEnded: false,\n\t\tmodelLatencyMs: 0,\n\t\tmaxModelLatencyMs: 0,\n\t\tturnCount: 0,\n\t\ttoolCallCount: 0,\n\t\ttoolErrorCount: 0,\n\t\tcompactionCount: 0,\n\t\tretryCount: 0,\n\t\tusage: newUsageTotals(),\n\t};\n}\n\nexport function installAgentTelemetry(session: AgentSession, options: InstallAgentTelemetryOptions): void {\n\tif (!isTelemetryEnabled(options.settingsManager)) {\n\t\treturn;\n\t}\n\n\tconst now = options.now ?? Date.now;\n\tconst randomId = options.randomId ?? randomUUID;\n\tconst sink =\n\t\toptions.sink ??\n\t\tnew TelemetryClient({\n\t\t\tagentDir: options.agentDir,\n\t\t\tnow,\n\t\t\trandomId,\n\t\t});\n\tconst sessionId = randomId();\n\tconst sessionTotals: SessionTotals = {\n\t\tstartedAt: now(),\n\t\trunCount: 0,\n\t\tsuccessfulRunCount: 0,\n\t\tfailedRunCount: 0,\n\t\tabortedRunCount: 0,\n\t\tpromptCount: 0,\n\t\ttoolCallCount: 0,\n\t\tcompactionCount: 0,\n\t\tusage: newUsageTotals(),\n\t};\n\tlet activeRun: ActiveRun | undefined;\n\tlet turnActionActive = false;\n\n\tconst commonProperties = (): TelemetryProperties => ({\n\t\t...baseProperties(options.executionMode ?? \"unknown\"),\n\t\tsession_id: sessionId,\n\t});\n\n\tconst finalizeRun = (): void => {\n\t\tconst run = activeRun;\n\t\tif (!run) {\n\t\t\treturn;\n\t\t}\n\t\tactiveRun = undefined;\n\t\tconst outcome = runOutcome(run.lastAssistant);\n\t\tsessionTotals.runCount++;\n\t\tsessionTotals.toolCallCount += run.toolCallCount;\n\t\tsessionTotals.compactionCount += run.compactionCount;\n\t\tif (outcome === \"success\") {\n\t\t\tsessionTotals.successfulRunCount++;\n\t\t} else if (outcome === \"aborted\") {\n\t\t\tsessionTotals.abortedRunCount++;\n\t\t} else {\n\t\t\tsessionTotals.failedRunCount++;\n\t\t}\n\t\tmergeUsage(sessionTotals.usage, run.usage);\n\t\tconst lastAssistant = run.lastAssistant;\n\t\tsink.capture(\"agent run completed\", {\n\t\t\t...commonProperties(),\n\t\t\toutcome,\n\t\t\tduration_ms: Math.max(0, now() - run.startedAt),\n\t\t\tvisible_ttft_ms: run.visibleTtftMs ?? null,\n\t\t\tfirst_model_event_ms: run.firstModelEventMs ?? null,\n\t\t\tmodel_latency_ms: run.modelLatencyMs,\n\t\t\tmax_model_latency_ms: run.maxModelLatencyMs,\n\t\t\tmodel_call_count: run.usage.modelCallCount,\n\t\t\tturn_count: run.turnCount,\n\t\t\ttool_call_count: run.toolCallCount,\n\t\t\ttool_error_count: run.toolErrorCount,\n\t\t\tinput_tokens: run.usage.input,\n\t\t\toutput_tokens: run.usage.output,\n\t\t\tcache_read_tokens: run.usage.cacheRead,\n\t\t\tcache_write_tokens: run.usage.cacheWrite,\n\t\t\ttotal_tokens: run.usage.totalTokens,\n\t\t\tcompaction_count: run.compactionCount,\n\t\t\tretry_count: run.retryCount,\n\t\t\tprovider_category: telemetryProviderCategory(lastAssistant?.provider),\n\t\t\tmodel_category: lastAssistant ? modelCategory(lastAssistant.model) : \"unknown\",\n\t\t\terror_category: errorCategory(lastAssistant),\n\t\t});\n\t};\n\n\tsink.capture(\"agent started\", commonProperties());\n\n\tconst unsubscribe = session.subscribe((event) => {\n\t\tswitch (event.type) {\n\t\t\tcase \"session_action_update\":\n\t\t\t\tturnActionActive = event.actions.active?.kind === \"turn\";\n\t\t\t\tif (!turnActionActive && activeRun?.agentEnded) {\n\t\t\t\t\tfinalizeRun();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"agent_start\":\n\t\t\t\tif (activeRun?.agentEnded && !turnActionActive) {\n\t\t\t\t\tfinalizeRun();\n\t\t\t\t}\n\t\t\t\tactiveRun ??= createActiveRun(now);\n\t\t\t\tactiveRun.agentEnded = false;\n\t\t\t\tbreak;\n\t\t\tcase \"message_start\":\n\t\t\t\tif (event.message.role === \"user\") {\n\t\t\t\t\tsessionTotals.promptCount++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"turn_start\":\n\t\t\t\tif (activeRun) {\n\t\t\t\t\tactiveRun.currentTurnStartedAt = now();\n\t\t\t\t\tactiveRun.firstTurnStartedAt ??= activeRun.currentTurnStartedAt;\n\t\t\t\t\tactiveRun.turnCount++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"message_update\":\n\t\t\t\tif (!activeRun) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (activeRun.firstModelEventMs === undefined && activeRun.firstTurnStartedAt !== undefined) {\n\t\t\t\t\tactiveRun.firstModelEventMs = Math.max(0, now() - activeRun.firstTurnStartedAt);\n\t\t\t\t}\n\t\t\t\tif (\n\t\t\t\t\tactiveRun.visibleTtftMs === undefined &&\n\t\t\t\t\tactiveRun.firstTurnStartedAt !== undefined &&\n\t\t\t\t\tevent.assistantMessageEvent.type === \"text_delta\" &&\n\t\t\t\t\tevent.assistantMessageEvent.delta.length > 0\n\t\t\t\t) {\n\t\t\t\t\tactiveRun.visibleTtftMs = Math.max(0, now() - activeRun.firstTurnStartedAt);\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"message_end\": {\n\t\t\t\tconst message = assistantMessage(event);\n\t\t\t\tif (!activeRun || !message) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tactiveRun.lastAssistant = message;\n\t\t\t\taddUsage(activeRun.usage, message.usage);\n\t\t\t\tif (activeRun.currentTurnStartedAt !== undefined) {\n\t\t\t\t\tconst latency = Math.max(0, now() - activeRun.currentTurnStartedAt);\n\t\t\t\t\tactiveRun.modelLatencyMs += latency;\n\t\t\t\t\tactiveRun.maxModelLatencyMs = Math.max(activeRun.maxModelLatencyMs, latency);\n\t\t\t\t\tactiveRun.currentTurnStartedAt = undefined;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase \"tool_execution_end\":\n\t\t\t\tif (activeRun) {\n\t\t\t\t\tactiveRun.toolCallCount++;\n\t\t\t\t\tif (event.isError) {\n\t\t\t\t\t\tactiveRun.toolErrorCount++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"compaction_end\":\n\t\t\t\tif (activeRun && event.result && !event.aborted) {\n\t\t\t\t\tactiveRun.compactionCount++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"auto_retry_start\":\n\t\t\t\tif (activeRun) {\n\t\t\t\t\tactiveRun.retryCount++;\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase \"agent_end\":\n\t\t\t\tif (!activeRun) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tactiveRun.agentEnded = true;\n\t\t\t\tif (!turnActionActive) {\n\t\t\t\t\tfinalizeRun();\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t}\n\t});\n\n\tsession.registerDisposeCallback(async () => {\n\t\tunsubscribe();\n\t\tfinalizeRun();\n\t\tsink.capture(\"agent session ended\", {\n\t\t\t...commonProperties(),\n\t\t\tduration_ms: Math.max(0, now() - sessionTotals.startedAt),\n\t\t\tprompt_count: sessionTotals.promptCount,\n\t\t\trun_count: sessionTotals.runCount,\n\t\t\tsuccessful_run_count: sessionTotals.successfulRunCount,\n\t\t\tfailed_run_count: sessionTotals.failedRunCount,\n\t\t\taborted_run_count: sessionTotals.abortedRunCount,\n\t\t\ttool_call_count: sessionTotals.toolCallCount,\n\t\t\tcompaction_count: sessionTotals.compactionCount,\n\t\t\tmodel_call_count: sessionTotals.usage.modelCallCount,\n\t\t\tinput_tokens: sessionTotals.usage.input,\n\t\t\toutput_tokens: sessionTotals.usage.output,\n\t\t\tcache_read_tokens: sessionTotals.usage.cacheRead,\n\t\t\tcache_write_tokens: sessionTotals.usage.cacheWrite,\n\t\t\ttotal_tokens: sessionTotals.usage.totalTokens,\n\t\t});\n\t\tawait sink.flush();\n\t});\n}\n"]}