@posthog/wizard 2.66.0 → 2.67.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 (113) hide show
  1. package/dist/{add-mcp-server-to-clients-DWDEuDUR.js → add-mcp-server-to-clients-DHTRbyJX.js} +25 -25
  2. package/dist/{add-mcp-server-to-clients-DWDEuDUR.js.map → add-mcp-server-to-clients-DHTRbyJX.js.map} +1 -1
  3. package/dist/{agent-interface-D3MNaDp3.js → agent-interface-tM_b0l__.js} +130 -41
  4. package/dist/agent-interface-tM_b0l__.js.map +1 -0
  5. package/dist/{agent-prompt-loader-D8Bajo-L.js → agent-prompt-loader-BSMh5bfD.js} +5 -5
  6. package/dist/{agent-prompt-loader-D8Bajo-L.js.map → agent-prompt-loader-BSMh5bfD.js.map} +1 -1
  7. package/dist/{agent-runner-DEeMqJxy.js → agent-runner-DD65OMkB.js} +67 -36
  8. package/dist/agent-runner-DD65OMkB.js.map +1 -0
  9. package/dist/analytics-B4Igh5nv.js +2 -0
  10. package/dist/{analytics-D8JNuPAT.js → analytics-CtIYzkK4.js} +2 -2
  11. package/dist/{analytics-D8JNuPAT.js.map → analytics-CtIYzkK4.js.map} +1 -1
  12. package/dist/{api-CemGgyBv.js → api-BJft9v6K.js} +3 -3
  13. package/dist/{api-CemGgyBv.js.map → api-BJft9v6K.js.map} +1 -1
  14. package/dist/bin.js +200 -85
  15. package/dist/bin.js.map +1 -1
  16. package/dist/{bounded-fs-C6OjqZst.js → bounded-fs-BWqoFQvQ.js} +3 -3
  17. package/dist/{bounded-fs-C6OjqZst.js.map → bounded-fs-BWqoFQvQ.js.map} +1 -1
  18. package/dist/{ci-install-DIB2n4Ju.js → ci-install-BXGnVI7T.js} +18 -9
  19. package/dist/ci-install-BXGnVI7T.js.map +1 -0
  20. package/dist/{debug-BKqv-yfT.js → debug-BsHD83Vy.js} +4 -4
  21. package/dist/debug-BsHD83Vy.js.map +1 -0
  22. package/dist/{debug-H-GTKvvU.js → debug-mO3yg4Z7.js} +1 -1
  23. package/dist/{defaults-BHhXrX9F.js → defaults-DI642M3n.js} +1 -1
  24. package/dist/{defaults-BHhXrX9F.js.map → defaults-DI642M3n.js.map} +1 -1
  25. package/dist/{env-api-key-CzHDwfV2.js → env-api-key-DS0ghlcO.js} +2 -2
  26. package/dist/{env-api-key-CzHDwfV2.js.map → env-api-key-DS0ghlcO.js.map} +1 -1
  27. package/dist/{environment-Cl-fIQku.js → environment-C7CKGIOE.js} +4 -4
  28. package/dist/{environment-Cl-fIQku.js.map → environment-C7CKGIOE.js.map} +1 -1
  29. package/dist/errors-BHervYGs.js +156 -0
  30. package/dist/errors-BHervYGs.js.map +1 -0
  31. package/dist/{file-watcher-Cr-4tA-e.js → file-watcher-D1bdo9mq.js} +2 -2
  32. package/dist/{file-watcher-Cr-4tA-e.js.map → file-watcher-D1bdo9mq.js.map} +1 -1
  33. package/dist/{headless-ui-DT3Db1bk.js → headless-ui-6QuByWZ_.js} +2 -2
  34. package/dist/{headless-ui-DT3Db1bk.js.map → headless-ui-6QuByWZ_.js.map} +1 -1
  35. package/dist/{interactive-D3LdFxZG.js → interactive-DUpW84WU.js} +2 -2
  36. package/dist/{interactive-D3LdFxZG.js.map → interactive-DUpW84WU.js.map} +1 -1
  37. package/dist/{local-dev-BN6NKQ0B.js → local-dev-DPZiIPCK.js} +1 -1
  38. package/dist/{local-dev-BN6NKQ0B.js.map → local-dev-DPZiIPCK.js.map} +1 -1
  39. package/dist/{mcp-BjckYQmP.js → mcp-CHo9h-WV.js} +2 -2
  40. package/dist/{mcp-BjckYQmP.js.map → mcp-CHo9h-WV.js.map} +1 -1
  41. package/dist/{mcp-prompt-streaming--sRErHKv.js → mcp-prompt-streaming-CHRPxxd0.js} +4 -4
  42. package/dist/{mcp-prompt-streaming--sRErHKv.js.map → mcp-prompt-streaming-CHRPxxd0.js.map} +1 -1
  43. package/dist/{non-interactive-CNoYoEZp.js → non-interactive-Cr-chffe.js} +7 -2
  44. package/dist/non-interactive-Cr-chffe.js.map +1 -0
  45. package/dist/{orchestrator-tools-8bGyDDhn.js → orchestrator-tools-Tx18_TMb.js} +3 -3
  46. package/dist/{orchestrator-tools-8bGyDDhn.js.map → orchestrator-tools-Tx18_TMb.js.map} +1 -1
  47. package/dist/{package-json-D0DCWpe5.js → package-json-GEU2VZlS.js} +1 -1
  48. package/dist/{package-json-D0DCWpe5.js.map → package-json-GEU2VZlS.js.map} +1 -1
  49. package/dist/{package-manager-BQDHm7ER.js → package-manager-CLfc31yf.js} +4 -4
  50. package/dist/package-manager-CLfc31yf.js.map +1 -0
  51. package/dist/{pi-W-4RUPFY.js → pi-RlnYUHdb.js} +12 -11
  52. package/dist/{pi-W-4RUPFY.js.map → pi-RlnYUHdb.js.map} +1 -1
  53. package/dist/{playground-uHHgZChe.js → playground-DQ633rje.js} +7 -7
  54. package/dist/{playground-uHHgZChe.js.map → playground-DQ633rje.js.map} +1 -1
  55. package/dist/{posthog-ChzdlmCs.js → posthog-DSn9bIZc.js} +2 -2
  56. package/dist/{posthog-ChzdlmCs.js.map → posthog-DSn9bIZc.js.map} +1 -1
  57. package/dist/{posthog-integration-LxEBGkoe.js → posthog-integration-DFfBRGOC.js} +21 -17
  58. package/dist/{posthog-integration-LxEBGkoe.js.map → posthog-integration-DFfBRGOC.js.map} +1 -1
  59. package/dist/{provisioning-BHTl91OZ.js → provisioning-Cvy_vQHV.js} +3 -3
  60. package/dist/{provisioning-BHTl91OZ.js.map → provisioning-Cvy_vQHV.js.map} +1 -1
  61. package/dist/{queue-tools-DABh1Ssc.js → queue-tools-BC9HxOV6.js} +3 -3
  62. package/dist/{queue-tools-DABh1Ssc.js.map → queue-tools-BC9HxOV6.js.map} +1 -1
  63. package/dist/{registry-CxNpCNAj.js → registry-DCAElOyj.js} +81 -81
  64. package/dist/{registry-CxNpCNAj.js.map → registry-DCAElOyj.js.map} +1 -1
  65. package/dist/{security-B4jU_-7q.js → security-CuSX3XVo.js} +21 -9
  66. package/dist/security-CuSX3XVo.js.map +1 -0
  67. package/dist/{setup-utils-aWZEdfwh.js → setup-utils-D1tv0v_R.js} +13 -13
  68. package/dist/{setup-utils-aWZEdfwh.js.map → setup-utils-D1tv0v_R.js.map} +1 -1
  69. package/dist/{start-tui-BQH4mQIZ.js → start-tui-B5YfmqNr.js} +33 -23
  70. package/dist/start-tui-B5YfmqNr.js.map +1 -0
  71. package/dist/{steps-5HAqjUvn.js → steps-CLaSMwfR.js} +7 -7
  72. package/dist/{steps-5HAqjUvn.js.map → steps-CLaSMwfR.js.map} +1 -1
  73. package/dist/{store-P_7zUfbj.js → store-DzEgsAPN.js} +5 -5
  74. package/dist/{store-P_7zUfbj.js.map → store-DzEgsAPN.js.map} +1 -1
  75. package/dist/{subagent-uGPDXPfS.js → subagent-BUV6aD7p.js} +2 -2
  76. package/dist/{subagent-uGPDXPfS.js.map → subagent-BUV6aD7p.js.map} +1 -1
  77. package/dist/{task-oh8OAnvR.js → task-GnWId75q.js} +13 -12
  78. package/dist/{task-oh8OAnvR.js.map → task-GnWId75q.js.map} +1 -1
  79. package/dist/{task-stream-jUARpyB5.js → task-stream-DSzvwJrD.js} +16 -9
  80. package/dist/task-stream-DSzvwJrD.js.map +1 -0
  81. package/dist/{tasks-2mu3lAvm.js → tasks-BO0W8ocx.js} +2 -2
  82. package/dist/{tasks-2mu3lAvm.js.map → tasks-BO0W8ocx.js.map} +1 -1
  83. package/dist/{telemetry-BllPiBKw.js → telemetry-Vi9dWddJ.js} +3 -3
  84. package/dist/{telemetry-BllPiBKw.js.map → telemetry-Vi9dWddJ.js.map} +1 -1
  85. package/dist/{terminal-aWQrDy8s.js → terminal-B5wZK7aS.js} +13 -13
  86. package/dist/{terminal-aWQrDy8s.js.map → terminal-B5wZK7aS.js.map} +1 -1
  87. package/dist/{tools-u8TaJFqa.js → tools-C9cNluqc.js} +6 -6
  88. package/dist/{tools-u8TaJFqa.js.map → tools-C9cNluqc.js.map} +1 -1
  89. package/dist/{wizard-abort-pFFH7dcx.js → wizard-abort-BsNbguJt.js} +1 -1
  90. package/dist/wizard-abort-CGv3lVxw.js +71 -0
  91. package/dist/wizard-abort-CGv3lVxw.js.map +1 -0
  92. package/dist/{wizard-session-DTyLMPsX.js → wizard-session-Cex1BiXs.js} +2 -2
  93. package/dist/wizard-session-Cex1BiXs.js.map +1 -0
  94. package/dist/{wizard-session-Cw7-_OcZ.js → wizard-session-DHbUcjI7.js} +1 -1
  95. package/dist/yara-hooks-C3Vm2Gow.js +2 -0
  96. package/dist/{yara-hooks-BXDBIOBq.js → yara-hooks-DZIVzhA6.js} +57 -8
  97. package/dist/yara-hooks-DZIVzhA6.js.map +1 -0
  98. package/package.json +1 -1
  99. package/dist/agent-interface-D3MNaDp3.js.map +0 -1
  100. package/dist/agent-runner-DEeMqJxy.js.map +0 -1
  101. package/dist/analytics-DN3Kzf7H.js +0 -2
  102. package/dist/ci-install-DIB2n4Ju.js.map +0 -1
  103. package/dist/debug-BKqv-yfT.js.map +0 -1
  104. package/dist/non-interactive-CNoYoEZp.js.map +0 -1
  105. package/dist/package-manager-BQDHm7ER.js.map +0 -1
  106. package/dist/security-B4jU_-7q.js.map +0 -1
  107. package/dist/start-tui-BQH4mQIZ.js.map +0 -1
  108. package/dist/task-stream-jUARpyB5.js.map +0 -1
  109. package/dist/wizard-abort-D9jiMkZA.js +0 -49
  110. package/dist/wizard-abort-D9jiMkZA.js.map +0 -1
  111. package/dist/wizard-session-DTyLMPsX.js.map +0 -1
  112. package/dist/yara-hooks-BXDBIOBq.js.map +0 -1
  113. package/dist/yara-hooks-i2jOabhI.js +0 -2
@@ -1,4 +1,4 @@
1
- import { s as logToFile } from "./debug-BKqv-yfT.js";
1
+ import { s as logToFile } from "./debug-BsHD83Vy.js";
2
2
  //#region src/lib/task-stream/destinations/posthog.ts
3
3
  const MAX_ATTEMPTS = 3;
4
4
  const BASE_BACKOFF_MS = 500;
@@ -121,4 +121,4 @@ var PostHogDestination = class {
121
121
  //#endregion
122
122
  export { PostHogDestination };
123
123
 
124
- //# sourceMappingURL=posthog-ChzdlmCs.js.map
124
+ //# sourceMappingURL=posthog-DSn9bIZc.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"posthog-ChzdlmCs.js","names":[],"sources":["../src/lib/task-stream/destinations/posthog.ts"],"sourcesContent":["/**\n * PostHog destination — pushes wizard run state to the PostHog backend\n * via `POST /api/projects/{project_id}/wizard/sessions/`.\n *\n * The endpoint is an upsert keyed by `(team, session_id)`: 201 means\n * the row was created, 200 means it was updated. Both are success.\n *\n * Failure handling is fail-silent: never throws to the caller, never\n * writes to stdout/stderr, never blocks the agent. Errors flow through\n * the optional `onError` callback for the wizard's debug log.\n *\n * Retry policy:\n * 5xx / network → exponential backoff base 500ms cap 8s, max 3 attempts\n * 429 → honour `Retry-After` (seconds), single retry\n * 401 / 403 → disable for the rest of the run, no further pushes\n * 400 → give up for this push, do not disable\n * other 4xx → give up for this push, do not disable\n */\n\nimport type {\n TaskStreamDestination,\n TaskStreamUpdate,\n StreamEvent,\n} from '@lib/task-stream/types';\nimport type { Credentials } from '@lib/wizard-session';\nimport { logToFile } from '@utils/debug';\n\nexport interface PostHogDestinationOptions {\n /**\n * Lazy credential resolver — called on every send. Returns null\n * before authentication has completed; in that case the send is a\n * no-op (no HTTP request).\n */\n getCredentials: () => Credentials | null;\n /** Receives every error for the wizard's internal logfile. */\n onError?: (err: Error) => void;\n /** Override for tests. Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n}\n\nconst MAX_ATTEMPTS = 3;\nconst BASE_BACKOFF_MS = 500;\nconst MAX_BACKOFF_MS = 8000;\nconst DEFAULT_RETRY_AFTER_MS = 1000;\n// setTimeout silently clamps anything above 2^31-1 ms to fire\n// immediately, so any Retry-After-derived sleep must be capped.\nconst MAX_RETRY_AFTER_MS = 60_000;\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseRetryAfter(value: string | null): number {\n if (!value) return DEFAULT_RETRY_AFTER_MS;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(Math.ceil(seconds * 1000), MAX_RETRY_AFTER_MS);\n }\n // HTTP-date form — best-effort.\n const date = Date.parse(value);\n if (Number.isFinite(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_AFTER_MS);\n }\n return DEFAULT_RETRY_AFTER_MS;\n}\n\n/**\n * Strip the internal-only `timestamp` field before sending. The\n * backend schema in the RFC does not define it.\n */\nfunction toWirePayload(\n payload: TaskStreamUpdate,\n): Omit<TaskStreamUpdate, 'timestamp'> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { timestamp: _unused, ...rest } = payload;\n return rest;\n}\n\nexport class PostHogDestination implements TaskStreamDestination {\n readonly name = 'posthog';\n\n private readonly getCredentials: () => Credentials | null;\n private readonly onError: (err: Error) => void;\n private readonly fetchImpl: typeof fetch;\n private readonly sleep: (ms: number) => Promise<void>;\n\n private disabled = false;\n\n constructor(opts: PostHogDestinationOptions) {\n this.getCredentials = opts.getCredentials;\n this.onError = opts.onError ?? (() => undefined);\n this.fetchImpl = opts.fetchImpl ?? ((...args) => fetch(...args));\n this.sleep = opts.sleep ?? defaultSleep;\n }\n\n async send(_event: StreamEvent, payload: TaskStreamUpdate): Promise<void> {\n if (this.disabled) return;\n const creds = this.getCredentials();\n if (!creds) return;\n\n await this.postWithRetry(creds, toWirePayload(payload));\n }\n\n private buildRequest(\n creds: Credentials,\n body: object,\n ): { url: string; init: Parameters<typeof fetch>[1] } {\n const url = `${creds.host.apiHost.replace(/\\/$/, '')}/api/projects/${\n creds.projectId\n }/wizard/sessions/`;\n return {\n url,\n init: {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${creds.accessToken}`,\n },\n body: JSON.stringify(body),\n },\n };\n }\n\n private async postWithRetry(creds: Credentials, body: object): Promise<void> {\n const { url, init } = this.buildRequest(creds, body);\n let attempt = 0;\n let backoff = BASE_BACKOFF_MS;\n let retriedAfter429 = false;\n\n while (attempt < MAX_ATTEMPTS) {\n attempt += 1;\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (err) {\n if (attempt >= MAX_ATTEMPTS) {\n this.onError(err instanceof Error ? err : new Error(String(err)));\n return;\n }\n await this.sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n if (response.ok) {\n logToFile(`[task-stream] wizard/sessions push ok: ${response.status}`);\n return;\n }\n\n const status = response.status;\n\n if (status === 401 || status === 403) {\n this.disabled = true;\n this.onError(new Error(`wizard/sessions auth failed: ${status}`));\n return;\n }\n\n if (status === 429) {\n if (retriedAfter429) {\n this.onError(new Error('wizard/sessions rate limited'));\n return;\n }\n retriedAfter429 = true;\n const wait = parseRetryAfter(response.headers.get('Retry-After'));\n await this.sleep(wait);\n // Don't count this against the 5xx attempt budget.\n attempt -= 1;\n continue;\n }\n\n if (status >= 500) {\n if (attempt >= MAX_ATTEMPTS) {\n this.onError(new Error(`wizard/sessions server error: ${status}`));\n return;\n }\n await this.sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n if (status === 400) {\n let detail = '';\n try {\n detail = await response.text();\n } catch {\n // ignore\n }\n this.onError(new Error(`wizard/sessions bad request (400): ${detail}`));\n return;\n }\n\n this.onError(new Error(`wizard/sessions unexpected status: ${status}`));\n return;\n }\n }\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"posthog-DSn9bIZc.js","names":[],"sources":["../src/lib/task-stream/destinations/posthog.ts"],"sourcesContent":["/**\n * PostHog destination — pushes wizard run state to the PostHog backend\n * via `POST /api/projects/{project_id}/wizard/sessions/`.\n *\n * The endpoint is an upsert keyed by `(team, session_id)`: 201 means\n * the row was created, 200 means it was updated. Both are success.\n *\n * Failure handling is fail-silent: never throws to the caller, never\n * writes to stdout/stderr, never blocks the agent. Errors flow through\n * the optional `onError` callback for the wizard's debug log.\n *\n * Retry policy:\n * 5xx / network → exponential backoff base 500ms cap 8s, max 3 attempts\n * 429 → honour `Retry-After` (seconds), single retry\n * 401 / 403 → disable for the rest of the run, no further pushes\n * 400 → give up for this push, do not disable\n * other 4xx → give up for this push, do not disable\n */\n\nimport type {\n TaskStreamDestination,\n TaskStreamUpdate,\n StreamEvent,\n} from '@lib/task-stream/types';\nimport type { Credentials } from '@lib/wizard-session';\nimport { logToFile } from '@utils/debug';\n\nexport interface PostHogDestinationOptions {\n /**\n * Lazy credential resolver — called on every send. Returns null\n * before authentication has completed; in that case the send is a\n * no-op (no HTTP request).\n */\n getCredentials: () => Credentials | null;\n /** Receives every error for the wizard's internal logfile. */\n onError?: (err: Error) => void;\n /** Override for tests. Defaults to global fetch. */\n fetchImpl?: typeof fetch;\n /** Override for tests. Defaults to setTimeout. */\n sleep?: (ms: number) => Promise<void>;\n}\n\nconst MAX_ATTEMPTS = 3;\nconst BASE_BACKOFF_MS = 500;\nconst MAX_BACKOFF_MS = 8000;\nconst DEFAULT_RETRY_AFTER_MS = 1000;\n// setTimeout silently clamps anything above 2^31-1 ms to fire\n// immediately, so any Retry-After-derived sleep must be capped.\nconst MAX_RETRY_AFTER_MS = 60_000;\n\nfunction defaultSleep(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nfunction parseRetryAfter(value: string | null): number {\n if (!value) return DEFAULT_RETRY_AFTER_MS;\n const seconds = Number(value);\n if (Number.isFinite(seconds) && seconds >= 0) {\n return Math.min(Math.ceil(seconds * 1000), MAX_RETRY_AFTER_MS);\n }\n // HTTP-date form — best-effort.\n const date = Date.parse(value);\n if (Number.isFinite(date)) {\n return Math.min(Math.max(0, date - Date.now()), MAX_RETRY_AFTER_MS);\n }\n return DEFAULT_RETRY_AFTER_MS;\n}\n\n/**\n * Strip the internal-only `timestamp` field before sending. The\n * backend schema in the RFC does not define it.\n */\nfunction toWirePayload(\n payload: TaskStreamUpdate,\n): Omit<TaskStreamUpdate, 'timestamp'> {\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n const { timestamp: _unused, ...rest } = payload;\n return rest;\n}\n\nexport class PostHogDestination implements TaskStreamDestination {\n readonly name = 'posthog';\n\n private readonly getCredentials: () => Credentials | null;\n private readonly onError: (err: Error) => void;\n private readonly fetchImpl: typeof fetch;\n private readonly sleep: (ms: number) => Promise<void>;\n\n private disabled = false;\n\n constructor(opts: PostHogDestinationOptions) {\n this.getCredentials = opts.getCredentials;\n this.onError = opts.onError ?? (() => undefined);\n this.fetchImpl = opts.fetchImpl ?? ((...args) => fetch(...args));\n this.sleep = opts.sleep ?? defaultSleep;\n }\n\n async send(_event: StreamEvent, payload: TaskStreamUpdate): Promise<void> {\n if (this.disabled) return;\n const creds = this.getCredentials();\n if (!creds) return;\n\n await this.postWithRetry(creds, toWirePayload(payload));\n }\n\n private buildRequest(\n creds: Credentials,\n body: object,\n ): { url: string; init: Parameters<typeof fetch>[1] } {\n const url = `${creds.host.apiHost.replace(/\\/$/, '')}/api/projects/${\n creds.projectId\n }/wizard/sessions/`;\n return {\n url,\n init: {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n Authorization: `Bearer ${creds.accessToken}`,\n },\n body: JSON.stringify(body),\n },\n };\n }\n\n private async postWithRetry(creds: Credentials, body: object): Promise<void> {\n const { url, init } = this.buildRequest(creds, body);\n let attempt = 0;\n let backoff = BASE_BACKOFF_MS;\n let retriedAfter429 = false;\n\n while (attempt < MAX_ATTEMPTS) {\n attempt += 1;\n let response: Response;\n try {\n response = await this.fetchImpl(url, init);\n } catch (err) {\n if (attempt >= MAX_ATTEMPTS) {\n this.onError(err instanceof Error ? err : new Error(String(err)));\n return;\n }\n await this.sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n if (response.ok) {\n logToFile(`[task-stream] wizard/sessions push ok: ${response.status}`);\n return;\n }\n\n const status = response.status;\n\n if (status === 401 || status === 403) {\n this.disabled = true;\n this.onError(new Error(`wizard/sessions auth failed: ${status}`));\n return;\n }\n\n if (status === 429) {\n if (retriedAfter429) {\n this.onError(new Error('wizard/sessions rate limited'));\n return;\n }\n retriedAfter429 = true;\n const wait = parseRetryAfter(response.headers.get('Retry-After'));\n await this.sleep(wait);\n // Don't count this against the 5xx attempt budget.\n attempt -= 1;\n continue;\n }\n\n if (status >= 500) {\n if (attempt >= MAX_ATTEMPTS) {\n this.onError(new Error(`wizard/sessions server error: ${status}`));\n return;\n }\n await this.sleep(backoff);\n backoff = Math.min(backoff * 2, MAX_BACKOFF_MS);\n continue;\n }\n\n if (status === 400) {\n let detail = '';\n try {\n detail = await response.text();\n } catch {\n // ignore\n }\n this.onError(new Error(`wizard/sessions bad request (400): ${detail}`));\n return;\n }\n\n this.onError(new Error(`wizard/sessions unexpected status: ${status}`));\n return;\n }\n }\n}\n"],"mappings":"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"}
@@ -1,16 +1,17 @@
1
- import { L as Integration, N as HAIKU_MODEL, O as DETECTION_TIMEOUT_MS, _ as evaluateWizardReadiness, at as WIZARD_INTERACTION_EVENT_NAME, f as getUI, g as SIGNUP_WIZARD_READINESS_CONFIG, mt as getSkillsBaseUrl, s as logToFile, v as getBlockingServiceKeys, x as AGENTIC_DETECTION_TIMEOUT_MS } from "./debug-BKqv-yfT.js";
2
- import { n as analytics } from "./analytics-D8JNuPAT.js";
3
- import { i as withUtm, n as openTrackedLink } from "./telemetry-BllPiBKw.js";
4
- import { a as safeReadFile, i as readProjectFile, o as walkProjectFiles } from "./bounded-fs-C6OjqZst.js";
5
- import { i as tryGetPackageJson, n as isUsingTypeScript } from "./setup-utils-aWZEdfwh.js";
6
- import { i as requestDeepLink } from "./provisioning-BHTl91OZ.js";
7
- import "./wizard-session-DTyLMPsX.js";
8
- import { i as wizardAbort } from "./wizard-abort-D9jiMkZA.js";
9
- import { n as runAgent, r as shouldDisableAsk, s as authenticate } from "./agent-runner-DEeMqJxy.js";
10
- import { D as WIZARD_TOOL_NAMES, H as isEnvFileName, U as parseEnvKeyNames, V as MAX_ENV_KEY_SET, W as toPromptSafeRelativePath, i as runAgent$1, n as buildRunTags, p as AgentSignals, r as initializeAgent } from "./agent-interface-D3MNaDp3.js";
11
- import { h as EVENT_PLAN_FILE } from "./yara-hooks-BXDBIOBq.js";
12
- import { a as detectNodePackageManagers } from "./package-manager-BQDHm7ER.js";
13
- import { i as SPINNER_MESSAGE, t as FRAMEWORK_REGISTRY } from "./registry-CxNpCNAj.js";
1
+ import { a as AgentSignals, l as ErrorCodes } from "./errors-BHervYGs.js";
2
+ import { L as Integration, N as HAIKU_MODEL, O as DETECTION_TIMEOUT_MS, _ as evaluateWizardReadiness, at as WIZARD_INTERACTION_EVENT_NAME, f as getUI, g as SIGNUP_WIZARD_READINESS_CONFIG, mt as getSkillsBaseUrl, s as logToFile, v as getBlockingServiceKeys, x as AGENTIC_DETECTION_TIMEOUT_MS } from "./debug-BsHD83Vy.js";
3
+ import { n as analytics } from "./analytics-CtIYzkK4.js";
4
+ import { i as withUtm, n as openTrackedLink } from "./telemetry-Vi9dWddJ.js";
5
+ import { a as safeReadFile, i as readProjectFile, o as walkProjectFiles } from "./bounded-fs-BWqoFQvQ.js";
6
+ import { i as tryGetPackageJson, n as isUsingTypeScript } from "./setup-utils-D1tv0v_R.js";
7
+ import { i as requestDeepLink } from "./provisioning-Cvy_vQHV.js";
8
+ import "./wizard-session-Cex1BiXs.js";
9
+ import { i as wizardAbort } from "./wizard-abort-CGv3lVxw.js";
10
+ import { n as runAgent, r as shouldDisableAsk, s as authenticate } from "./agent-runner-DD65OMkB.js";
11
+ import { B as isEnvFileName, H as toPromptSafeRelativePath, T as WIZARD_TOOL_NAMES, V as parseEnvKeyNames, i as runAgent$1, n as buildRunTags, r as initializeAgent, z as MAX_ENV_KEY_SET } from "./agent-interface-tM_b0l__.js";
12
+ import { h as EVENT_PLAN_FILE } from "./yara-hooks-DZIVzhA6.js";
13
+ import { a as detectNodePackageManagers } from "./package-manager-CLfc31yf.js";
14
+ import { i as SPINNER_MESSAGE, t as FRAMEWORK_REGISTRY } from "./registry-DCAElOyj.js";
14
15
  import * as semver from "semver";
15
16
  import { existsSync, statSync } from "fs";
16
17
  import { isAbsolute, join, resolve, sep } from "path";
@@ -4394,7 +4395,10 @@ const posthogIntegrationConfig = {
4394
4395
  await scopeInstallDirToProject(session);
4395
4396
  const integration = await detectFramework(session.installDir);
4396
4397
  if (!integration) {
4397
- await wizardAbort({ message: "Could not auto-detect your framework for this project." });
4398
+ await wizardAbort({
4399
+ code: ErrorCodes.DetectNoFramework,
4400
+ message: "Could not auto-detect your framework for this project."
4401
+ });
4398
4402
  return;
4399
4403
  }
4400
4404
  session.integration = integration;
@@ -4421,7 +4425,7 @@ const posthogIntegrationConfig = {
4421
4425
  if (usesPackageJson) {
4422
4426
  const packageJson = await tryGetPackageJson({ installDir: session.installDir });
4423
4427
  if (packageJson) {
4424
- const { hasDeclaredDependency } = await import("./package-json-D0DCWpe5.js").then((n) => n.i);
4428
+ const { hasDeclaredDependency } = await import("./package-json-GEU2VZlS.js").then((n) => n.i);
4425
4429
  if (!hasDeclaredDependency(config.detection.packageName, packageJson)) getUI().log.warn(`${config.detection.packageDisplayName} does not seem to be installed. Continuing anyway — the agent will handle it.`);
4426
4430
  frameworkVersion = config.detection.getVersion(packageJson);
4427
4431
  } else getUI().log.warn("Could not find package.json. Continuing anyway — the agent will handle it.");
@@ -4490,7 +4494,7 @@ ${warehouseReportInstruction(session)}
4490
4494
  postRun: async (sess, credentials) => {
4491
4495
  const envVars = config.environment.getEnvVars(credentials.projectApiKey, credentials.host.apiHost);
4492
4496
  if (config.environment.uploadToHosting) {
4493
- const { uploadEnvironmentVariablesStep } = await import("./steps-5HAqjUvn.js");
4497
+ const { uploadEnvironmentVariablesStep } = await import("./steps-CLaSMwfR.js");
4494
4498
  const uploadedEnvVars = await uploadEnvironmentVariablesStep(envVars, {
4495
4499
  integration: config.metadata.integration,
4496
4500
  session: sess
@@ -4546,4 +4550,4 @@ const integrationRunStep = {
4546
4550
  //#endregion
4547
4551
  export { scopeInstallDirToProject as C, detectFramework as D, gatherFrameworkContext as E, detectIntegrationProjects as S, resolveProjectDir as T, HEALTH_CHECK_STEP as _, LINE_CHART_BLOCK as a, getDetectedWarehouseSources as b, TextBlock as c, isClearBlock as d, isLinesBlock as f, detectPostHogIntegration as g, Icons as h, FUNNEL_BLOCK as i, computeVisibleRange as l, Colors as m, integrationRunStep as n, PRODUCT_SUITE_BLOCK as o, isObjectBlock as p, posthogIntegrationConfig as r, StatusPeekTrigger as s, SETUP_REPORT_FILE as t, wordWrap as u, WAREHOUSE_ABORT_CASES as v, detectProjectsWithAgent as w, detectWarehouseSources as x, detectWarehousePrerequisites as y };
4548
4552
 
4549
- //# sourceMappingURL=posthog-integration-LxEBGkoe.js.map
4553
+ //# sourceMappingURL=posthog-integration-DFfBRGOC.js.map