@posthog/wizard 2.64.1 → 2.66.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.
- package/README.md +7 -2
- package/dist/{add-mcp-server-to-clients-BUqb93_I.js → add-mcp-server-to-clients-DWDEuDUR.js} +210 -46
- package/dist/add-mcp-server-to-clients-DWDEuDUR.js.map +1 -0
- package/dist/{agent-interface-NurnwA01.js → agent-interface-D3MNaDp3.js} +405 -47
- package/dist/agent-interface-D3MNaDp3.js.map +1 -0
- package/dist/{agent-prompt-loader-CbowPuWI.js → agent-prompt-loader-D8Bajo-L.js} +10 -5
- package/dist/agent-prompt-loader-D8Bajo-L.js.map +1 -0
- package/dist/{agent-runner-DisJWxJa.js → agent-runner-DEeMqJxy.js} +111 -53
- package/dist/agent-runner-DEeMqJxy.js.map +1 -0
- package/dist/{analytics-D3vKvr3l.js → analytics-D8JNuPAT.js} +2 -2
- package/dist/{analytics-D3vKvr3l.js.map → analytics-D8JNuPAT.js.map} +1 -1
- package/dist/analytics-DN3Kzf7H.js +2 -0
- package/dist/{api-Bhe8jpUR.js → api-CemGgyBv.js} +3 -3
- package/dist/{api-Bhe8jpUR.js.map → api-CemGgyBv.js.map} +1 -1
- package/dist/bin.js +245 -93
- package/dist/bin.js.map +1 -1
- package/dist/{bounded-fs-BeWc675I.js → bounded-fs-C6OjqZst.js} +3 -3
- package/dist/{bounded-fs-BeWc675I.js.map → bounded-fs-C6OjqZst.js.map} +1 -1
- package/dist/{ci-install-BpNzfghY.js → ci-install-DIB2n4Ju.js} +4 -4
- package/dist/{ci-install-BpNzfghY.js.map → ci-install-DIB2n4Ju.js.map} +1 -1
- package/dist/{debug-hy6aWAyk.js → debug-BKqv-yfT.js} +14 -9
- package/dist/debug-BKqv-yfT.js.map +1 -0
- package/dist/{debug-DGfRPr2A.js → debug-H-GTKvvU.js} +1 -1
- package/dist/{defaults-mrAre0xM.js → defaults-BHhXrX9F.js} +1 -1
- package/dist/{defaults-mrAre0xM.js.map → defaults-BHhXrX9F.js.map} +1 -1
- package/dist/{env-api-key-CMPe-WJp.js → env-api-key-CzHDwfV2.js} +2 -2
- package/dist/{env-api-key-CMPe-WJp.js.map → env-api-key-CzHDwfV2.js.map} +1 -1
- package/dist/{environment-Ktu0Ktjl.js → environment-Cl-fIQku.js} +4 -4
- package/dist/{environment-Ktu0Ktjl.js.map → environment-Cl-fIQku.js.map} +1 -1
- package/dist/{file-watcher-CqJ1dgjq.js → file-watcher-Cr-4tA-e.js} +2 -2
- package/dist/{file-watcher-CqJ1dgjq.js.map → file-watcher-Cr-4tA-e.js.map} +1 -1
- package/dist/{headless-ui-zZLgs4QL.js → headless-ui-DT3Db1bk.js} +2 -2
- package/dist/{headless-ui-zZLgs4QL.js.map → headless-ui-DT3Db1bk.js.map} +1 -1
- package/dist/{interactive-BUw1SEOz.js → interactive-D3LdFxZG.js} +2 -2
- package/dist/{interactive-BUw1SEOz.js.map → interactive-D3LdFxZG.js.map} +1 -1
- package/dist/local-dev-BN6NKQ0B.js +135 -0
- package/dist/local-dev-BN6NKQ0B.js.map +1 -0
- package/dist/{mcp-C7NMhhWa.js → mcp-BjckYQmP.js} +2 -2
- package/dist/{mcp-C7NMhhWa.js.map → mcp-BjckYQmP.js.map} +1 -1
- package/dist/mcp-install-smoke-test.ts +477 -0
- package/dist/{mcp-prompt-streaming-CKyqqB10.js → mcp-prompt-streaming--sRErHKv.js} +20 -4
- package/dist/mcp-prompt-streaming--sRErHKv.js.map +1 -0
- package/dist/{non-interactive-73xGtug6.js → non-interactive-CNoYoEZp.js} +2 -2
- package/dist/{non-interactive-73xGtug6.js.map → non-interactive-CNoYoEZp.js.map} +1 -1
- package/dist/{orchestrator-tools-DcMJzfDH.js → orchestrator-tools-8bGyDDhn.js} +3 -3
- package/dist/{orchestrator-tools-DcMJzfDH.js.map → orchestrator-tools-8bGyDDhn.js.map} +1 -1
- package/dist/{package-json-CDs1ZVKu.js → package-json-D0DCWpe5.js} +1 -1
- package/dist/{package-json-CDs1ZVKu.js.map → package-json-D0DCWpe5.js.map} +1 -1
- package/dist/{package-manager-KweKX3u_.js → package-manager-BQDHm7ER.js} +58 -3
- package/dist/package-manager-BQDHm7ER.js.map +1 -0
- package/dist/{pi-B4p4gpr0.js → pi-W-4RUPFY.js} +11 -11
- package/dist/{pi-B4p4gpr0.js.map → pi-W-4RUPFY.js.map} +1 -1
- package/dist/{playground-AEkWcB1E.js → playground-uHHgZChe.js} +7 -7
- package/dist/{playground-AEkWcB1E.js.map → playground-uHHgZChe.js.map} +1 -1
- package/dist/{posthog-4PljLcIz.js → posthog-ChzdlmCs.js} +2 -2
- package/dist/{posthog-4PljLcIz.js.map → posthog-ChzdlmCs.js.map} +1 -1
- package/dist/{posthog-integration-DKlEg8-Q.js → posthog-integration-LxEBGkoe.js} +680 -49
- package/dist/posthog-integration-LxEBGkoe.js.map +1 -0
- package/dist/{provisioning-QsG7HDCm.js → provisioning-BHTl91OZ.js} +3 -3
- package/dist/{provisioning-QsG7HDCm.js.map → provisioning-BHTl91OZ.js.map} +1 -1
- package/dist/{queue-tools-Jlz9dV_B.js → queue-tools-DABh1Ssc.js} +33 -7
- package/dist/queue-tools-DABh1Ssc.js.map +1 -0
- package/dist/{registry-PG_nV5Bf.js → registry-CxNpCNAj.js} +309 -6
- package/dist/registry-CxNpCNAj.js.map +1 -0
- package/dist/{security-BKUJk-Gg.js → security-B4jU_-7q.js} +5 -5
- package/dist/{security-BKUJk-Gg.js.map → security-B4jU_-7q.js.map} +1 -1
- package/dist/{setup-utils-DNpldqge.js → setup-utils-aWZEdfwh.js} +18 -13
- package/dist/setup-utils-aWZEdfwh.js.map +1 -0
- package/dist/smoke-test-ci.sh +12 -1
- package/dist/{start-tui-D4B0-2nr.js → start-tui-BQH4mQIZ.js} +138 -27
- package/dist/start-tui-BQH4mQIZ.js.map +1 -0
- package/dist/{steps-Dy0AXdGo.js → steps-5HAqjUvn.js} +7 -7
- package/dist/{steps-Dy0AXdGo.js.map → steps-5HAqjUvn.js.map} +1 -1
- package/dist/{store-DouLLelV.js → store-P_7zUfbj.js} +22 -7
- package/dist/store-P_7zUfbj.js.map +1 -0
- package/dist/{subagent-B4yVs5A2.js → subagent-uGPDXPfS.js} +2 -2
- package/dist/{subagent-B4yVs5A2.js.map → subagent-uGPDXPfS.js.map} +1 -1
- package/dist/{task-DRKYEbKM.js → task-oh8OAnvR.js} +29 -18
- package/dist/task-oh8OAnvR.js.map +1 -0
- package/dist/{task-stream-BGUP7yA-.js → task-stream-jUARpyB5.js} +5 -5
- package/dist/{task-stream-BGUP7yA-.js.map → task-stream-jUARpyB5.js.map} +1 -1
- package/dist/{tasks-B2GzXsZ0.js → tasks-2mu3lAvm.js} +2 -2
- package/dist/{tasks-B2GzXsZ0.js.map → tasks-2mu3lAvm.js.map} +1 -1
- package/dist/{telemetry-6zaFfCcy.js → telemetry-BllPiBKw.js} +3 -3
- package/dist/{telemetry-6zaFfCcy.js.map → telemetry-BllPiBKw.js.map} +1 -1
- package/dist/{terminal-Bu3eHFn0.js → terminal-aWQrDy8s.js} +99 -98
- package/dist/terminal-aWQrDy8s.js.map +1 -0
- package/dist/{tools-DQO5tKJg.js → tools-u8TaJFqa.js} +54 -47
- package/dist/tools-u8TaJFqa.js.map +1 -0
- package/dist/{wizard-abort-D6jJh8u5.js → wizard-abort-D9jiMkZA.js} +4 -4
- package/dist/{wizard-abort-D6jJh8u5.js.map → wizard-abort-D9jiMkZA.js.map} +1 -1
- package/dist/{wizard-abort-PgTdRS1l.js → wizard-abort-pFFH7dcx.js} +1 -1
- package/dist/{wizard-session-DZUDtS5d.js → wizard-session-Cw7-_OcZ.js} +1 -1
- package/dist/{wizard-session-BUhlJ1b8.js → wizard-session-DTyLMPsX.js} +17 -3
- package/dist/wizard-session-DTyLMPsX.js.map +1 -0
- package/dist/{yara-hooks-DjReXmTQ.js → yara-hooks-BXDBIOBq.js} +4 -4
- package/dist/{yara-hooks-DjReXmTQ.js.map → yara-hooks-BXDBIOBq.js.map} +1 -1
- package/dist/yara-hooks-i2jOabhI.js +2 -0
- package/package.json +2 -1
- package/dist/add-mcp-server-to-clients-BUqb93_I.js.map +0 -1
- package/dist/agent-interface-NurnwA01.js.map +0 -1
- package/dist/agent-prompt-loader-CbowPuWI.js.map +0 -1
- package/dist/agent-runner-DisJWxJa.js.map +0 -1
- package/dist/analytics-hNca7GLq.js +0 -2
- package/dist/debug-hy6aWAyk.js.map +0 -1
- package/dist/mcp-prompt-streaming-CKyqqB10.js.map +0 -1
- package/dist/package-manager-KweKX3u_.js.map +0 -1
- package/dist/posthog-integration-DKlEg8-Q.js.map +0 -1
- package/dist/queue-tools-Jlz9dV_B.js.map +0 -1
- package/dist/registry-PG_nV5Bf.js.map +0 -1
- package/dist/setup-utils-DNpldqge.js.map +0 -1
- package/dist/start-tui-D4B0-2nr.js.map +0 -1
- package/dist/store-DouLLelV.js.map +0 -1
- package/dist/task-DRKYEbKM.js.map +0 -1
- package/dist/terminal-Bu3eHFn0.js.map +0 -1
- package/dist/tools-DQO5tKJg.js.map +0 -1
- package/dist/wizard-session-BUhlJ1b8.js.map +0 -1
- package/dist/yara-hooks-CN_uFGCu.js +0 -2
|
@@ -1,16 +1,16 @@
|
|
|
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-
|
|
2
|
-
import { n as analytics } from "./analytics-
|
|
3
|
-
import { i as withUtm, n as openTrackedLink } from "./telemetry-
|
|
4
|
-
import { a as safeReadFile, i as readProjectFile, o as walkProjectFiles } from "./bounded-fs-
|
|
5
|
-
import { i as tryGetPackageJson, n as isUsingTypeScript } from "./setup-utils-
|
|
6
|
-
import { i as requestDeepLink } from "./provisioning-
|
|
7
|
-
import "./wizard-session-
|
|
8
|
-
import { i as wizardAbort } from "./wizard-abort-
|
|
9
|
-
import { n as runAgent, r as shouldDisableAsk, s as authenticate } from "./agent-runner-
|
|
10
|
-
import {
|
|
11
|
-
import { h as EVENT_PLAN_FILE } from "./yara-hooks-
|
|
12
|
-
import {
|
|
13
|
-
import { i as SPINNER_MESSAGE, t as FRAMEWORK_REGISTRY } from "./registry-
|
|
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";
|
|
14
14
|
import * as semver from "semver";
|
|
15
15
|
import { existsSync, statSync } from "fs";
|
|
16
16
|
import { isAbsolute, join, resolve, sep } from "path";
|
|
@@ -240,10 +240,10 @@ const PROJECT_MANIFESTS = [
|
|
|
240
240
|
"manage.py",
|
|
241
241
|
"Gemfile",
|
|
242
242
|
"composer.json",
|
|
243
|
+
"pom.xml",
|
|
243
244
|
"Cargo.toml",
|
|
244
|
-
"go.mod",
|
|
245
245
|
"mix.exs",
|
|
246
|
-
"
|
|
246
|
+
"go.mod",
|
|
247
247
|
"*.csproj",
|
|
248
248
|
"Package.swift",
|
|
249
249
|
"Podfile",
|
|
@@ -390,13 +390,11 @@ function sessionToWizardOptions(session) {
|
|
|
390
390
|
installDir: session.installDir,
|
|
391
391
|
ci: session.ci,
|
|
392
392
|
debug: session.debug,
|
|
393
|
-
default: false,
|
|
394
393
|
benchmark: session.benchmark,
|
|
395
394
|
yaraReport: session.yaraReport,
|
|
396
395
|
signup: session.signup,
|
|
397
396
|
apiKey: session.apiKey,
|
|
398
|
-
projectId: session.projectId
|
|
399
|
-
localMcp: session.localMcp
|
|
397
|
+
projectId: session.projectId
|
|
400
398
|
};
|
|
401
399
|
}
|
|
402
400
|
const NOOP_SPINNER = {
|
|
@@ -411,18 +409,28 @@ const NOOP_SPINNER = {
|
|
|
411
409
|
*/
|
|
412
410
|
async function detectProjectsWithAgent(session, options) {
|
|
413
411
|
if (!session.credentials) throw new Error("Detection requires authenticated credentials.");
|
|
414
|
-
const { targets, purpose = "set up a PostHog integration", recommend = false, rerankIds, onEvent } = options;
|
|
412
|
+
const { targets, programId, purpose = "set up a PostHog integration", recommend = false, rerankIds, onEvent } = options;
|
|
415
413
|
const { accessToken, host } = session.credentials;
|
|
416
414
|
const cwd = session.installDir;
|
|
417
415
|
const runOptions = sessionToWizardOptions(session);
|
|
416
|
+
const wizardMetadata = {
|
|
417
|
+
...buildRunTags({
|
|
418
|
+
programId,
|
|
419
|
+
integration: "agentic-detect",
|
|
420
|
+
runId: analytics.runId,
|
|
421
|
+
build: analytics.build
|
|
422
|
+
}),
|
|
423
|
+
call_type: "detection"
|
|
424
|
+
};
|
|
418
425
|
const agent = await initializeAgent({
|
|
419
426
|
workingDirectory: cwd,
|
|
420
427
|
posthogMcpUrl: host.mcpUrl,
|
|
421
428
|
posthogApiKey: accessToken,
|
|
422
429
|
host,
|
|
423
430
|
detectPackageManager: detectNodePackageManagers,
|
|
424
|
-
skillsBaseUrl: getSkillsBaseUrl(
|
|
431
|
+
skillsBaseUrl: getSkillsBaseUrl(),
|
|
425
432
|
integrationLabel: "agentic-detect",
|
|
433
|
+
wizardMetadata,
|
|
426
434
|
allowedTools: [
|
|
427
435
|
"Read",
|
|
428
436
|
"Grep",
|
|
@@ -480,7 +488,7 @@ const INTEGRATION_TARGETS = Object.entries(FRAMEWORK_REGISTRY).map(([id, config]
|
|
|
480
488
|
name: config.metadata.name
|
|
481
489
|
}));
|
|
482
490
|
/** Run the agentic detector for the wizard's integration frameworks — the single home of targets + purpose. */
|
|
483
|
-
async function detectIntegrationProjects(session, options
|
|
491
|
+
async function detectIntegrationProjects(session, options) {
|
|
484
492
|
return detectProjectsWithAgent(session, {
|
|
485
493
|
...options,
|
|
486
494
|
targets: INTEGRATION_TARGETS,
|
|
@@ -511,6 +519,7 @@ async function scopeInstallDirToProject(session) {
|
|
|
511
519
|
let report;
|
|
512
520
|
try {
|
|
513
521
|
report = await Promise.race([detectIntegrationProjects(session, {
|
|
522
|
+
programId: "posthog-integration",
|
|
514
523
|
recommend: true,
|
|
515
524
|
onEvent: (line) => logToFile("[agentic detect]", line)
|
|
516
525
|
}), new Promise((resolve) => setTimeout(() => resolve(TIMED_OUT), AGENTIC_DETECTION_TIMEOUT_MS))]);
|
|
@@ -679,6 +688,71 @@ const SOURCE_DETECTORS = [
|
|
|
679
688
|
envKeys: [/^CONVEX_/, /^NEXT_PUBLIC_CONVEX_URL$/]
|
|
680
689
|
}
|
|
681
690
|
},
|
|
691
|
+
{
|
|
692
|
+
kind: "Firebase",
|
|
693
|
+
label: "Firebase",
|
|
694
|
+
mode: "in-cli",
|
|
695
|
+
signals: {
|
|
696
|
+
npm: ["firebase-admin", "firebase"],
|
|
697
|
+
python: ["firebase-admin"],
|
|
698
|
+
envKeys: [/^FIREBASE_/, /^NEXT_PUBLIC_FIREBASE_/]
|
|
699
|
+
}
|
|
700
|
+
},
|
|
701
|
+
{
|
|
702
|
+
kind: "Neon",
|
|
703
|
+
label: "Neon",
|
|
704
|
+
mode: "in-cli",
|
|
705
|
+
signals: {
|
|
706
|
+
npm: ["@neondatabase/serverless"],
|
|
707
|
+
envKeys: [/^NEON_/]
|
|
708
|
+
}
|
|
709
|
+
},
|
|
710
|
+
{
|
|
711
|
+
kind: "PlanetScaleMySQL",
|
|
712
|
+
label: "PlanetScale MySQL",
|
|
713
|
+
mode: "in-cli",
|
|
714
|
+
signals: {
|
|
715
|
+
npm: ["@planetscale/database"],
|
|
716
|
+
envKeys: [/^PLANETSCALE_/]
|
|
717
|
+
}
|
|
718
|
+
},
|
|
719
|
+
{
|
|
720
|
+
kind: "DynamoDB",
|
|
721
|
+
label: "DynamoDB",
|
|
722
|
+
mode: "in-cli",
|
|
723
|
+
signals: {
|
|
724
|
+
npm: ["@aws-sdk/client-dynamodb", "@aws-sdk/lib-dynamodb"],
|
|
725
|
+
python: ["pynamodb"]
|
|
726
|
+
}
|
|
727
|
+
},
|
|
728
|
+
{
|
|
729
|
+
kind: "Motherduck",
|
|
730
|
+
label: "MotherDuck",
|
|
731
|
+
mode: "in-cli",
|
|
732
|
+
signals: {
|
|
733
|
+
npm: ["@motherduck/wasm-client"],
|
|
734
|
+
envKeys: [/^MOTHERDUCK_/]
|
|
735
|
+
}
|
|
736
|
+
},
|
|
737
|
+
{
|
|
738
|
+
kind: "Databricks",
|
|
739
|
+
label: "Databricks",
|
|
740
|
+
mode: "in-cli",
|
|
741
|
+
signals: {
|
|
742
|
+
npm: ["@databricks/sql"],
|
|
743
|
+
python: ["databricks-sql-connector", "databricks-sdk"],
|
|
744
|
+
envKeys: [/^DATABRICKS_/]
|
|
745
|
+
}
|
|
746
|
+
},
|
|
747
|
+
{
|
|
748
|
+
kind: "Singlestore",
|
|
749
|
+
label: "SingleStore",
|
|
750
|
+
mode: "in-cli",
|
|
751
|
+
signals: {
|
|
752
|
+
python: ["singlestoredb"],
|
|
753
|
+
envKeys: [/^SINGLESTORE_/]
|
|
754
|
+
}
|
|
755
|
+
},
|
|
682
756
|
{
|
|
683
757
|
kind: "Stripe",
|
|
684
758
|
label: "Stripe",
|
|
@@ -1360,6 +1434,55 @@ const SOURCE_DETECTORS = [
|
|
|
1360
1434
|
envKeys: [/^OPENROUTER_/]
|
|
1361
1435
|
}
|
|
1362
1436
|
},
|
|
1437
|
+
{
|
|
1438
|
+
kind: "Browserbase",
|
|
1439
|
+
label: "Browserbase",
|
|
1440
|
+
mode: "in-cli",
|
|
1441
|
+
signals: {
|
|
1442
|
+
npm: ["@browserbasehq/sdk", "@browserbasehq/stagehand"],
|
|
1443
|
+
python: ["browserbase"],
|
|
1444
|
+
envKeys: [/^BROWSERBASE_/]
|
|
1445
|
+
}
|
|
1446
|
+
},
|
|
1447
|
+
{
|
|
1448
|
+
kind: "E2B",
|
|
1449
|
+
label: "E2B",
|
|
1450
|
+
mode: "in-cli",
|
|
1451
|
+
signals: {
|
|
1452
|
+
npm: ["e2b", "@e2b/code-interpreter"],
|
|
1453
|
+
python: ["e2b", "e2b-code-interpreter"],
|
|
1454
|
+
envKeys: [/^E2B_/]
|
|
1455
|
+
}
|
|
1456
|
+
},
|
|
1457
|
+
{
|
|
1458
|
+
kind: "WeightsAndBiases",
|
|
1459
|
+
label: "Weights & Biases",
|
|
1460
|
+
mode: "in-cli",
|
|
1461
|
+
signals: {
|
|
1462
|
+
python: ["wandb"],
|
|
1463
|
+
envKeys: [/^WANDB_/]
|
|
1464
|
+
}
|
|
1465
|
+
},
|
|
1466
|
+
{
|
|
1467
|
+
kind: "LlamaCloud",
|
|
1468
|
+
label: "LlamaCloud",
|
|
1469
|
+
mode: "in-cli",
|
|
1470
|
+
signals: {
|
|
1471
|
+
npm: ["llama-cloud-services"],
|
|
1472
|
+
python: ["llama-cloud-services"],
|
|
1473
|
+
envKeys: [/^LLAMA_CLOUD_/]
|
|
1474
|
+
}
|
|
1475
|
+
},
|
|
1476
|
+
{
|
|
1477
|
+
kind: "Zep",
|
|
1478
|
+
label: "Zep",
|
|
1479
|
+
mode: "in-cli",
|
|
1480
|
+
signals: {
|
|
1481
|
+
npm: ["@getzep/zep-cloud"],
|
|
1482
|
+
python: ["zep-cloud"],
|
|
1483
|
+
envKeys: [/^ZEP_API_KEY$/]
|
|
1484
|
+
}
|
|
1485
|
+
},
|
|
1363
1486
|
{
|
|
1364
1487
|
kind: "Paystack",
|
|
1365
1488
|
label: "Paystack",
|
|
@@ -1444,6 +1567,84 @@ const SOURCE_DETECTORS = [
|
|
|
1444
1567
|
envKeys: [/^INVOICED_/]
|
|
1445
1568
|
}
|
|
1446
1569
|
},
|
|
1570
|
+
{
|
|
1571
|
+
kind: "LemonSqueezy",
|
|
1572
|
+
label: "Lemon Squeezy",
|
|
1573
|
+
mode: "in-cli",
|
|
1574
|
+
signals: {
|
|
1575
|
+
npm: ["@lemonsqueezy/lemonsqueezy.js"],
|
|
1576
|
+
envKeys: [/^LEMONSQUEEZY_/, /^LEMON_SQUEEZY_/]
|
|
1577
|
+
}
|
|
1578
|
+
},
|
|
1579
|
+
{
|
|
1580
|
+
kind: "Razorpay",
|
|
1581
|
+
label: "Razorpay",
|
|
1582
|
+
mode: "in-cli",
|
|
1583
|
+
signals: {
|
|
1584
|
+
npm: ["razorpay"],
|
|
1585
|
+
python: ["razorpay"],
|
|
1586
|
+
ruby: ["razorpay"],
|
|
1587
|
+
envKeys: [/^RAZORPAY_/]
|
|
1588
|
+
}
|
|
1589
|
+
},
|
|
1590
|
+
{
|
|
1591
|
+
kind: "Adyen",
|
|
1592
|
+
label: "Adyen",
|
|
1593
|
+
mode: "in-cli",
|
|
1594
|
+
signals: {
|
|
1595
|
+
npm: ["@adyen/api-library"],
|
|
1596
|
+
python: ["adyen"],
|
|
1597
|
+
envKeys: [/^ADYEN_/]
|
|
1598
|
+
}
|
|
1599
|
+
},
|
|
1600
|
+
{
|
|
1601
|
+
kind: "ChartMogul",
|
|
1602
|
+
label: "ChartMogul",
|
|
1603
|
+
mode: "in-cli",
|
|
1604
|
+
signals: {
|
|
1605
|
+
npm: ["chartmogul-node"],
|
|
1606
|
+
python: ["chartmogul"],
|
|
1607
|
+
envKeys: [/^CHARTMOGUL_/]
|
|
1608
|
+
}
|
|
1609
|
+
},
|
|
1610
|
+
{
|
|
1611
|
+
kind: "Airwallex",
|
|
1612
|
+
label: "Airwallex",
|
|
1613
|
+
mode: "in-cli",
|
|
1614
|
+
signals: {
|
|
1615
|
+
npm: ["airwallex-payment-elements"],
|
|
1616
|
+
envKeys: [/^AIRWALLEX_/]
|
|
1617
|
+
}
|
|
1618
|
+
},
|
|
1619
|
+
{
|
|
1620
|
+
kind: "Flutterwave",
|
|
1621
|
+
label: "Flutterwave",
|
|
1622
|
+
mode: "in-cli",
|
|
1623
|
+
signals: {
|
|
1624
|
+
npm: ["flutterwave-node-v3"],
|
|
1625
|
+
python: ["flutterwave"],
|
|
1626
|
+
envKeys: [/^FLUTTERWAVE_/, /^FLW_(PUBLIC|SECRET)_KEY$/]
|
|
1627
|
+
}
|
|
1628
|
+
},
|
|
1629
|
+
{
|
|
1630
|
+
kind: "DodoPayments",
|
|
1631
|
+
label: "Dodo Payments",
|
|
1632
|
+
mode: "in-cli",
|
|
1633
|
+
signals: {
|
|
1634
|
+
npm: ["dodopayments"],
|
|
1635
|
+
python: ["dodopayments"],
|
|
1636
|
+
envKeys: [/^DODO_PAYMENTS_/]
|
|
1637
|
+
}
|
|
1638
|
+
},
|
|
1639
|
+
{
|
|
1640
|
+
kind: "Whop",
|
|
1641
|
+
label: "Whop",
|
|
1642
|
+
mode: "in-cli",
|
|
1643
|
+
signals: {
|
|
1644
|
+
npm: ["@whop/api", "@whop-apps/sdk"],
|
|
1645
|
+
envKeys: [/^WHOP_/]
|
|
1646
|
+
}
|
|
1647
|
+
},
|
|
1447
1648
|
{
|
|
1448
1649
|
kind: "SparkPost",
|
|
1449
1650
|
label: "SparkPost",
|
|
@@ -1518,6 +1719,90 @@ const SOURCE_DETECTORS = [
|
|
|
1518
1719
|
mode: "in-cli",
|
|
1519
1720
|
signals: { envKeys: [/^LEMLIST_/] }
|
|
1520
1721
|
},
|
|
1722
|
+
{
|
|
1723
|
+
kind: "Loops",
|
|
1724
|
+
label: "Loops",
|
|
1725
|
+
mode: "in-cli",
|
|
1726
|
+
signals: {
|
|
1727
|
+
npm: ["loops"],
|
|
1728
|
+
envKeys: [/^LOOPS_/]
|
|
1729
|
+
}
|
|
1730
|
+
},
|
|
1731
|
+
{
|
|
1732
|
+
kind: "Knock",
|
|
1733
|
+
label: "Knock",
|
|
1734
|
+
mode: "in-cli",
|
|
1735
|
+
signals: {
|
|
1736
|
+
npm: ["@knocklabs/node", "@knocklabs/client"],
|
|
1737
|
+
python: ["knockapi"],
|
|
1738
|
+
envKeys: [/^KNOCK_/]
|
|
1739
|
+
}
|
|
1740
|
+
},
|
|
1741
|
+
{
|
|
1742
|
+
kind: "AwsSes",
|
|
1743
|
+
label: "Amazon SES",
|
|
1744
|
+
mode: "in-cli",
|
|
1745
|
+
signals: {
|
|
1746
|
+
npm: ["@aws-sdk/client-ses", "@aws-sdk/client-sesv2"],
|
|
1747
|
+
envKeys: [/^AWS_SES_/]
|
|
1748
|
+
}
|
|
1749
|
+
},
|
|
1750
|
+
{
|
|
1751
|
+
kind: "Beehiiv",
|
|
1752
|
+
label: "beehiiv",
|
|
1753
|
+
mode: "in-cli",
|
|
1754
|
+
signals: { envKeys: [/^BEEHIIV_/] }
|
|
1755
|
+
},
|
|
1756
|
+
{
|
|
1757
|
+
kind: "Mailtrap",
|
|
1758
|
+
label: "Mailtrap",
|
|
1759
|
+
mode: "in-cli",
|
|
1760
|
+
signals: {
|
|
1761
|
+
npm: ["mailtrap"],
|
|
1762
|
+
python: ["mailtrap"],
|
|
1763
|
+
envKeys: [/^MAILTRAP_/]
|
|
1764
|
+
}
|
|
1765
|
+
},
|
|
1766
|
+
{
|
|
1767
|
+
kind: "Plunk",
|
|
1768
|
+
label: "Plunk",
|
|
1769
|
+
mode: "in-cli",
|
|
1770
|
+
signals: {
|
|
1771
|
+
npm: ["@plunk/node"],
|
|
1772
|
+
envKeys: [/^PLUNK_/]
|
|
1773
|
+
}
|
|
1774
|
+
},
|
|
1775
|
+
{
|
|
1776
|
+
kind: "Ortto",
|
|
1777
|
+
label: "Ortto",
|
|
1778
|
+
mode: "in-cli",
|
|
1779
|
+
signals: { envKeys: [/^ORTTO_/] }
|
|
1780
|
+
},
|
|
1781
|
+
{
|
|
1782
|
+
kind: "Postscript",
|
|
1783
|
+
label: "Postscript",
|
|
1784
|
+
mode: "in-cli",
|
|
1785
|
+
signals: { envKeys: [/^POSTSCRIPT_/] }
|
|
1786
|
+
},
|
|
1787
|
+
{
|
|
1788
|
+
kind: "Marketo",
|
|
1789
|
+
label: "Marketo",
|
|
1790
|
+
mode: "in-cli",
|
|
1791
|
+
signals: {
|
|
1792
|
+
python: ["marketorestpython"],
|
|
1793
|
+
envKeys: [/^MARKETO_/]
|
|
1794
|
+
}
|
|
1795
|
+
},
|
|
1796
|
+
{
|
|
1797
|
+
kind: "Lob",
|
|
1798
|
+
label: "Lob",
|
|
1799
|
+
mode: "in-cli",
|
|
1800
|
+
signals: {
|
|
1801
|
+
npm: ["lob"],
|
|
1802
|
+
python: ["lob"],
|
|
1803
|
+
envKeys: [/^LOB_API_KEY$/]
|
|
1804
|
+
}
|
|
1805
|
+
},
|
|
1521
1806
|
{
|
|
1522
1807
|
kind: "Segment",
|
|
1523
1808
|
label: "Segment",
|
|
@@ -1683,6 +1968,36 @@ const SOURCE_DETECTORS = [
|
|
|
1683
1968
|
mode: "in-cli",
|
|
1684
1969
|
signals: { envKeys: [/^JUSTCALL_/] }
|
|
1685
1970
|
},
|
|
1971
|
+
{
|
|
1972
|
+
kind: "Telnyx",
|
|
1973
|
+
label: "Telnyx",
|
|
1974
|
+
mode: "in-cli",
|
|
1975
|
+
signals: {
|
|
1976
|
+
npm: ["telnyx"],
|
|
1977
|
+
python: ["telnyx"],
|
|
1978
|
+
envKeys: [/^TELNYX_/]
|
|
1979
|
+
}
|
|
1980
|
+
},
|
|
1981
|
+
{
|
|
1982
|
+
kind: "Plivo",
|
|
1983
|
+
label: "Plivo",
|
|
1984
|
+
mode: "in-cli",
|
|
1985
|
+
signals: {
|
|
1986
|
+
npm: ["plivo"],
|
|
1987
|
+
python: ["plivo"],
|
|
1988
|
+
envKeys: [/^PLIVO_/]
|
|
1989
|
+
}
|
|
1990
|
+
},
|
|
1991
|
+
{
|
|
1992
|
+
kind: "Courier",
|
|
1993
|
+
label: "Courier",
|
|
1994
|
+
mode: "in-cli",
|
|
1995
|
+
signals: {
|
|
1996
|
+
npm: ["@trycourier/courier"],
|
|
1997
|
+
python: ["trycourier"],
|
|
1998
|
+
envKeys: [/^COURIER_AUTH_TOKEN$/]
|
|
1999
|
+
}
|
|
2000
|
+
},
|
|
1686
2001
|
{
|
|
1687
2002
|
kind: "WooCommerce",
|
|
1688
2003
|
label: "WooCommerce",
|
|
@@ -1756,6 +2071,15 @@ const SOURCE_DETECTORS = [
|
|
|
1756
2071
|
mode: "in-cli",
|
|
1757
2072
|
signals: { envKeys: [/^PRINTIFY_/] }
|
|
1758
2073
|
},
|
|
2074
|
+
{
|
|
2075
|
+
kind: "BigCommerce",
|
|
2076
|
+
label: "BigCommerce",
|
|
2077
|
+
mode: "in-cli",
|
|
2078
|
+
signals: {
|
|
2079
|
+
npm: ["node-bigcommerce"],
|
|
2080
|
+
envKeys: [/^BIGCOMMERCE_/]
|
|
2081
|
+
}
|
|
2082
|
+
},
|
|
1759
2083
|
{
|
|
1760
2084
|
kind: "Freshdesk",
|
|
1761
2085
|
label: "Freshdesk",
|
|
@@ -1976,6 +2300,226 @@ const SOURCE_DETECTORS = [
|
|
|
1976
2300
|
envKeys: [/^VERCEL_API_TOKEN$/]
|
|
1977
2301
|
}
|
|
1978
2302
|
},
|
|
2303
|
+
{
|
|
2304
|
+
kind: "Algolia",
|
|
2305
|
+
label: "Algolia",
|
|
2306
|
+
mode: "in-cli",
|
|
2307
|
+
signals: {
|
|
2308
|
+
npm: ["algoliasearch"],
|
|
2309
|
+
python: ["algoliasearch"],
|
|
2310
|
+
ruby: ["algolia"],
|
|
2311
|
+
envKeys: [/^ALGOLIA_/]
|
|
2312
|
+
}
|
|
2313
|
+
},
|
|
2314
|
+
{
|
|
2315
|
+
kind: "Inngest",
|
|
2316
|
+
label: "Inngest",
|
|
2317
|
+
mode: "in-cli",
|
|
2318
|
+
signals: {
|
|
2319
|
+
npm: ["inngest"],
|
|
2320
|
+
python: ["inngest"],
|
|
2321
|
+
envKeys: [/^INNGEST_/]
|
|
2322
|
+
}
|
|
2323
|
+
},
|
|
2324
|
+
{
|
|
2325
|
+
kind: "TriggerDev",
|
|
2326
|
+
label: "Trigger.dev",
|
|
2327
|
+
mode: "in-cli",
|
|
2328
|
+
signals: {
|
|
2329
|
+
npm: ["@trigger.dev/sdk"],
|
|
2330
|
+
envKeys: [/^TRIGGER_(SECRET_KEY|API_KEY|PROJECT_ID)$/]
|
|
2331
|
+
}
|
|
2332
|
+
},
|
|
2333
|
+
{
|
|
2334
|
+
kind: "Ably",
|
|
2335
|
+
label: "Ably",
|
|
2336
|
+
mode: "in-cli",
|
|
2337
|
+
signals: {
|
|
2338
|
+
npm: ["ably"],
|
|
2339
|
+
python: ["ably"],
|
|
2340
|
+
envKeys: [/^ABLY_/]
|
|
2341
|
+
}
|
|
2342
|
+
},
|
|
2343
|
+
{
|
|
2344
|
+
kind: "Netlify",
|
|
2345
|
+
label: "Netlify",
|
|
2346
|
+
mode: "in-cli",
|
|
2347
|
+
signals: {
|
|
2348
|
+
npm: ["@netlify/functions"],
|
|
2349
|
+
envKeys: [/^NETLIFY_/]
|
|
2350
|
+
}
|
|
2351
|
+
},
|
|
2352
|
+
{
|
|
2353
|
+
kind: "Railway",
|
|
2354
|
+
label: "Railway",
|
|
2355
|
+
mode: "in-cli",
|
|
2356
|
+
signals: { envKeys: [/^RAILWAY_/] }
|
|
2357
|
+
},
|
|
2358
|
+
{
|
|
2359
|
+
kind: "Render",
|
|
2360
|
+
label: "Render",
|
|
2361
|
+
mode: "in-cli",
|
|
2362
|
+
signals: { envKeys: [/^RENDER_API_KEY$/] }
|
|
2363
|
+
},
|
|
2364
|
+
{
|
|
2365
|
+
kind: "FlyIo",
|
|
2366
|
+
label: "Fly.io",
|
|
2367
|
+
mode: "in-cli",
|
|
2368
|
+
signals: { envKeys: [/^FLY_API_TOKEN$/, /^FLY_APP_NAME$/] }
|
|
2369
|
+
},
|
|
2370
|
+
{
|
|
2371
|
+
kind: "Heroku",
|
|
2372
|
+
label: "Heroku",
|
|
2373
|
+
mode: "in-cli",
|
|
2374
|
+
signals: { envKeys: [/^HEROKU_/] }
|
|
2375
|
+
},
|
|
2376
|
+
{
|
|
2377
|
+
kind: "DigitalOcean",
|
|
2378
|
+
label: "DigitalOcean",
|
|
2379
|
+
mode: "in-cli",
|
|
2380
|
+
signals: { envKeys: [/^DIGITALOCEAN_/] }
|
|
2381
|
+
},
|
|
2382
|
+
{
|
|
2383
|
+
kind: "Grafana",
|
|
2384
|
+
label: "Grafana",
|
|
2385
|
+
mode: "in-cli",
|
|
2386
|
+
signals: {
|
|
2387
|
+
python: ["grafana-client"],
|
|
2388
|
+
envKeys: [/^GRAFANA_/]
|
|
2389
|
+
}
|
|
2390
|
+
},
|
|
2391
|
+
{
|
|
2392
|
+
kind: "BetterStack",
|
|
2393
|
+
label: "Better Stack",
|
|
2394
|
+
mode: "in-cli",
|
|
2395
|
+
signals: {
|
|
2396
|
+
npm: ["@logtail/node", "@logtail/js"],
|
|
2397
|
+
envKeys: [
|
|
2398
|
+
/^BETTERSTACK_/,
|
|
2399
|
+
/^BETTER_STACK_/,
|
|
2400
|
+
/^LOGTAIL_/
|
|
2401
|
+
]
|
|
2402
|
+
}
|
|
2403
|
+
},
|
|
2404
|
+
{
|
|
2405
|
+
kind: "Honeycomb",
|
|
2406
|
+
label: "Honeycomb",
|
|
2407
|
+
mode: "in-cli",
|
|
2408
|
+
signals: {
|
|
2409
|
+
npm: ["@honeycombio/opentelemetry-node", "honeycomb-beeline"],
|
|
2410
|
+
python: ["honeycomb-beeline", "libhoney"],
|
|
2411
|
+
envKeys: [/^HONEYCOMB_/]
|
|
2412
|
+
}
|
|
2413
|
+
},
|
|
2414
|
+
{
|
|
2415
|
+
kind: "Descope",
|
|
2416
|
+
label: "Descope",
|
|
2417
|
+
mode: "in-cli",
|
|
2418
|
+
signals: {
|
|
2419
|
+
npm: [
|
|
2420
|
+
"@descope/node-sdk",
|
|
2421
|
+
"@descope/nextjs-sdk",
|
|
2422
|
+
"@descope/react-sdk"
|
|
2423
|
+
],
|
|
2424
|
+
python: ["descope"],
|
|
2425
|
+
envKeys: [/^DESCOPE_/]
|
|
2426
|
+
}
|
|
2427
|
+
},
|
|
2428
|
+
{
|
|
2429
|
+
kind: "FusionAuth",
|
|
2430
|
+
label: "FusionAuth",
|
|
2431
|
+
mode: "in-cli",
|
|
2432
|
+
signals: {
|
|
2433
|
+
npm: ["@fusionauth/typescript-client"],
|
|
2434
|
+
python: ["fusionauth-client"],
|
|
2435
|
+
envKeys: [/^FUSIONAUTH_/, /^FUSION_AUTH_/]
|
|
2436
|
+
}
|
|
2437
|
+
},
|
|
2438
|
+
{
|
|
2439
|
+
kind: "Hookdeck",
|
|
2440
|
+
label: "Hookdeck",
|
|
2441
|
+
mode: "in-cli",
|
|
2442
|
+
signals: {
|
|
2443
|
+
npm: ["@hookdeck/sdk"],
|
|
2444
|
+
envKeys: [/^HOOKDECK_/]
|
|
2445
|
+
}
|
|
2446
|
+
},
|
|
2447
|
+
{
|
|
2448
|
+
kind: "N8n",
|
|
2449
|
+
label: "n8n",
|
|
2450
|
+
mode: "in-cli",
|
|
2451
|
+
signals: {
|
|
2452
|
+
npm: ["n8n"],
|
|
2453
|
+
envKeys: [/^N8N_/]
|
|
2454
|
+
}
|
|
2455
|
+
},
|
|
2456
|
+
{
|
|
2457
|
+
kind: "Dbt",
|
|
2458
|
+
label: "dbt",
|
|
2459
|
+
mode: "in-cli",
|
|
2460
|
+
signals: {
|
|
2461
|
+
python: [
|
|
2462
|
+
"dbt-core",
|
|
2463
|
+
"dbt-snowflake",
|
|
2464
|
+
"dbt-postgres",
|
|
2465
|
+
"dbt-bigquery",
|
|
2466
|
+
"dbt-redshift",
|
|
2467
|
+
"dbt-databricks"
|
|
2468
|
+
],
|
|
2469
|
+
envKeys: [/^DBT_/]
|
|
2470
|
+
}
|
|
2471
|
+
},
|
|
2472
|
+
{
|
|
2473
|
+
kind: "Fastly",
|
|
2474
|
+
label: "Fastly",
|
|
2475
|
+
mode: "in-cli",
|
|
2476
|
+
signals: {
|
|
2477
|
+
npm: ["fastly"],
|
|
2478
|
+
python: ["fastly"],
|
|
2479
|
+
envKeys: [/^FASTLY_/]
|
|
2480
|
+
}
|
|
2481
|
+
},
|
|
2482
|
+
{
|
|
2483
|
+
kind: "Bunny",
|
|
2484
|
+
label: "Bunny.net",
|
|
2485
|
+
mode: "in-cli",
|
|
2486
|
+
signals: { envKeys: [/^BUNNY_/] }
|
|
2487
|
+
},
|
|
2488
|
+
{
|
|
2489
|
+
kind: "Codecov",
|
|
2490
|
+
label: "Codecov",
|
|
2491
|
+
mode: "in-cli",
|
|
2492
|
+
signals: {
|
|
2493
|
+
npm: ["codecov"],
|
|
2494
|
+
envKeys: [/^CODECOV_/]
|
|
2495
|
+
}
|
|
2496
|
+
},
|
|
2497
|
+
{
|
|
2498
|
+
kind: "Sourcegraph",
|
|
2499
|
+
label: "Sourcegraph",
|
|
2500
|
+
mode: "in-cli",
|
|
2501
|
+
signals: { envKeys: [/^SOURCEGRAPH_/, /^SRC_ACCESS_TOKEN$/] }
|
|
2502
|
+
},
|
|
2503
|
+
{
|
|
2504
|
+
kind: "TemporalIO",
|
|
2505
|
+
label: "Temporal.io",
|
|
2506
|
+
mode: "in-cli",
|
|
2507
|
+
signals: {
|
|
2508
|
+
npm: ["@temporalio/client", "@temporalio/worker"],
|
|
2509
|
+
python: ["temporalio"],
|
|
2510
|
+
envKeys: [/^TEMPORAL_/]
|
|
2511
|
+
}
|
|
2512
|
+
},
|
|
2513
|
+
{
|
|
2514
|
+
kind: "Hatchet",
|
|
2515
|
+
label: "Hatchet",
|
|
2516
|
+
mode: "in-cli",
|
|
2517
|
+
signals: {
|
|
2518
|
+
npm: ["@hatchet-dev/typescript-sdk"],
|
|
2519
|
+
python: ["hatchet-sdk"],
|
|
2520
|
+
envKeys: [/^HATCHET_/]
|
|
2521
|
+
}
|
|
2522
|
+
},
|
|
1979
2523
|
{
|
|
1980
2524
|
kind: "Pipedrive",
|
|
1981
2525
|
label: "Pipedrive",
|
|
@@ -2039,6 +2583,28 @@ const SOURCE_DETECTORS = [
|
|
|
2039
2583
|
mode: "in-cli",
|
|
2040
2584
|
signals: { envKeys: [/^VITALLY_/] }
|
|
2041
2585
|
},
|
|
2586
|
+
{
|
|
2587
|
+
kind: "Docusign",
|
|
2588
|
+
label: "DocuSign",
|
|
2589
|
+
mode: "in-cli",
|
|
2590
|
+
signals: {
|
|
2591
|
+
npm: ["docusign-esign"],
|
|
2592
|
+
python: ["docusign-esign"],
|
|
2593
|
+
envKeys: [/^DOCUSIGN_/]
|
|
2594
|
+
}
|
|
2595
|
+
},
|
|
2596
|
+
{
|
|
2597
|
+
kind: "PandaDoc",
|
|
2598
|
+
label: "PandaDoc",
|
|
2599
|
+
mode: "in-cli",
|
|
2600
|
+
signals: { envKeys: [/^PANDADOC_/] }
|
|
2601
|
+
},
|
|
2602
|
+
{
|
|
2603
|
+
kind: "Gong",
|
|
2604
|
+
label: "Gong",
|
|
2605
|
+
mode: "in-cli",
|
|
2606
|
+
signals: { envKeys: [/^GONG_/] }
|
|
2607
|
+
},
|
|
2042
2608
|
{
|
|
2043
2609
|
kind: "Asana",
|
|
2044
2610
|
label: "Asana",
|
|
@@ -2146,6 +2712,64 @@ const SOURCE_DETECTORS = [
|
|
|
2146
2712
|
mode: "in-cli",
|
|
2147
2713
|
signals: { envKeys: [/^PRODUCTBOARD_/] }
|
|
2148
2714
|
},
|
|
2715
|
+
{
|
|
2716
|
+
kind: "GoogleSheets",
|
|
2717
|
+
label: "Google Sheets",
|
|
2718
|
+
mode: "in-cli",
|
|
2719
|
+
signals: {
|
|
2720
|
+
npm: ["google-spreadsheet"],
|
|
2721
|
+
python: ["gspread"],
|
|
2722
|
+
envKeys: [/^GOOGLE_SHEETS_/]
|
|
2723
|
+
}
|
|
2724
|
+
},
|
|
2725
|
+
{
|
|
2726
|
+
kind: "Formbricks",
|
|
2727
|
+
label: "Formbricks",
|
|
2728
|
+
mode: "in-cli",
|
|
2729
|
+
signals: {
|
|
2730
|
+
npm: ["@formbricks/js"],
|
|
2731
|
+
envKeys: [/^FORMBRICKS_/]
|
|
2732
|
+
}
|
|
2733
|
+
},
|
|
2734
|
+
{
|
|
2735
|
+
kind: "Tally",
|
|
2736
|
+
label: "Tally",
|
|
2737
|
+
mode: "in-cli",
|
|
2738
|
+
signals: { envKeys: [/^TALLY_API_KEY$/] }
|
|
2739
|
+
},
|
|
2740
|
+
{
|
|
2741
|
+
kind: "Jotform",
|
|
2742
|
+
label: "Jotform",
|
|
2743
|
+
mode: "in-cli",
|
|
2744
|
+
signals: {
|
|
2745
|
+
python: ["jotform"],
|
|
2746
|
+
envKeys: [/^JOTFORM_/]
|
|
2747
|
+
}
|
|
2748
|
+
},
|
|
2749
|
+
{
|
|
2750
|
+
kind: "GitBook",
|
|
2751
|
+
label: "GitBook",
|
|
2752
|
+
mode: "in-cli",
|
|
2753
|
+
signals: {
|
|
2754
|
+
npm: ["@gitbook/api"],
|
|
2755
|
+
envKeys: [/^GITBOOK_/]
|
|
2756
|
+
}
|
|
2757
|
+
},
|
|
2758
|
+
{
|
|
2759
|
+
kind: "Wordpress",
|
|
2760
|
+
label: "WordPress",
|
|
2761
|
+
mode: "in-cli",
|
|
2762
|
+
signals: {
|
|
2763
|
+
npm: ["wpapi"],
|
|
2764
|
+
envKeys: [/^WORDPRESS_/]
|
|
2765
|
+
}
|
|
2766
|
+
},
|
|
2767
|
+
{
|
|
2768
|
+
kind: "Clockify",
|
|
2769
|
+
label: "Clockify",
|
|
2770
|
+
mode: "in-cli",
|
|
2771
|
+
signals: { envKeys: [/^CLOCKIFY_/] }
|
|
2772
|
+
},
|
|
2149
2773
|
{
|
|
2150
2774
|
kind: "Calendly",
|
|
2151
2775
|
label: "Calendly",
|
|
@@ -2289,6 +2913,16 @@ const SOURCE_DETECTORS = [
|
|
|
2289
2913
|
npm: ["react-native-appsflyer"],
|
|
2290
2914
|
envKeys: [/^APPSFLYER_/]
|
|
2291
2915
|
}
|
|
2916
|
+
},
|
|
2917
|
+
{
|
|
2918
|
+
kind: "Dub",
|
|
2919
|
+
label: "Dub",
|
|
2920
|
+
mode: "in-cli",
|
|
2921
|
+
signals: {
|
|
2922
|
+
npm: ["dub"],
|
|
2923
|
+
python: ["dub"],
|
|
2924
|
+
envKeys: [/^DUB_API_KEY$/]
|
|
2925
|
+
}
|
|
2292
2926
|
}
|
|
2293
2927
|
];
|
|
2294
2928
|
//#endregion
|
|
@@ -2304,7 +2938,7 @@ const SOURCE_DETECTORS = [
|
|
|
2304
2938
|
* Note we only read `.env` KEY NAMES, never values.
|
|
2305
2939
|
*/
|
|
2306
2940
|
const MAX_DEPTH = 3;
|
|
2307
|
-
const MAX_SIGNAL_SET =
|
|
2941
|
+
const MAX_SIGNAL_SET = MAX_ENV_KEY_SET;
|
|
2308
2942
|
function addCapped(set, value) {
|
|
2309
2943
|
if (set.size < MAX_SIGNAL_SET) set.add(value);
|
|
2310
2944
|
}
|
|
@@ -2337,7 +2971,7 @@ function matchDetector(detector, signals) {
|
|
|
2337
2971
|
const rubyHit = ruby?.find((gem) => signals.ruby.has(gem));
|
|
2338
2972
|
if (rubyHit) return `found \`${rubyHit}\` in Gemfile`;
|
|
2339
2973
|
if (envKeys) {
|
|
2340
|
-
for (const key of signals.envKeys) if (envKeys.some((re) => re.test(key))) return `found \`${key}\` in
|
|
2974
|
+
for (const [key, file] of signals.envKeys) if (envKeys.some((re) => re.test(key))) return `found \`${key}\` in \`${file}\``;
|
|
2341
2975
|
}
|
|
2342
2976
|
return null;
|
|
2343
2977
|
}
|
|
@@ -2346,9 +2980,9 @@ function collectSignals(installDir) {
|
|
|
2346
2980
|
npm: /* @__PURE__ */ new Set(),
|
|
2347
2981
|
python: /* @__PURE__ */ new Set(),
|
|
2348
2982
|
ruby: /* @__PURE__ */ new Set(),
|
|
2349
|
-
envKeys: /* @__PURE__ */ new
|
|
2983
|
+
envKeys: /* @__PURE__ */ new Map()
|
|
2350
2984
|
};
|
|
2351
|
-
walkProjectFiles(installDir, (name, fullPath) => ingestFile(name, fullPath, signals), MAX_DEPTH);
|
|
2985
|
+
walkProjectFiles(installDir, (name, fullPath) => ingestFile(installDir, name, fullPath, signals), MAX_DEPTH);
|
|
2352
2986
|
return signals;
|
|
2353
2987
|
}
|
|
2354
2988
|
/**
|
|
@@ -2357,12 +2991,12 @@ function collectSignals(installDir) {
|
|
|
2357
2991
|
* avoids slurping every file in the tree (lockfiles, binaries, assets) into
|
|
2358
2992
|
* memory just to discard it.
|
|
2359
2993
|
*/
|
|
2360
|
-
function ingestFile(name, fullPath, signals) {
|
|
2994
|
+
function ingestFile(installDir, name, fullPath, signals) {
|
|
2361
2995
|
const ingest = ingestorFor(name);
|
|
2362
2996
|
if (!ingest) return;
|
|
2363
2997
|
const content = safeReadFile(fullPath);
|
|
2364
2998
|
if (content === null) return;
|
|
2365
|
-
ingest(content, signals);
|
|
2999
|
+
ingest(content, signals, toPromptSafeRelativePath(installDir, fullPath));
|
|
2366
3000
|
}
|
|
2367
3001
|
/** Pick the parser for a manifest filename, or null if it's not one we read. */
|
|
2368
3002
|
function ingestorFor(name) {
|
|
@@ -2371,9 +3005,21 @@ function ingestorFor(name) {
|
|
|
2371
3005
|
if (name === "pyproject.toml") return (c, s) => parsePyprojectToml(c).forEach((d) => addCapped(s.python, d));
|
|
2372
3006
|
if (name === "Pipfile") return (c, s) => parsePipfile(c).forEach((d) => addCapped(s.python, d));
|
|
2373
3007
|
if (name === "Gemfile") return (c, s) => parseGemfile(c).forEach((g) => addCapped(s.ruby, g));
|
|
2374
|
-
if (name
|
|
3008
|
+
if (isEnvFileName(name)) return (c, s, relativePath) => addEnvKeys(c, s, relativePath);
|
|
2375
3009
|
return null;
|
|
2376
3010
|
}
|
|
3011
|
+
/**
|
|
3012
|
+
* Record each key NAME against the file that defined it. The first file wins,
|
|
3013
|
+
* so the reported signal stays stable when several `.env*` files repeat a key.
|
|
3014
|
+
* Values are never read.
|
|
3015
|
+
*/
|
|
3016
|
+
function addEnvKeys(content, signals, relativePath) {
|
|
3017
|
+
for (const key of parseEnvKeyNames(content)) {
|
|
3018
|
+
if (signals.envKeys.has(key)) continue;
|
|
3019
|
+
if (signals.envKeys.size >= MAX_SIGNAL_SET) return;
|
|
3020
|
+
signals.envKeys.set(key, relativePath);
|
|
3021
|
+
}
|
|
3022
|
+
}
|
|
2377
3023
|
function addNpmDeps(content, signals) {
|
|
2378
3024
|
try {
|
|
2379
3025
|
const pkg = JSON.parse(content);
|
|
@@ -2391,17 +3037,6 @@ function parseGemfile(content) {
|
|
|
2391
3037
|
for (const match of content.matchAll(/^\s*gem\s+['"]([^'"]+)['"]/gm)) gems.push(match[1]);
|
|
2392
3038
|
return gems;
|
|
2393
3039
|
}
|
|
2394
|
-
/** Extract KEY NAMES from a dotenv file. Values are intentionally discarded. */
|
|
2395
|
-
function parseEnvKeys(content) {
|
|
2396
|
-
const keys = [];
|
|
2397
|
-
for (const line of content.split("\n")) {
|
|
2398
|
-
const trimmed = line.trim();
|
|
2399
|
-
if (!trimmed || trimmed.startsWith("#")) continue;
|
|
2400
|
-
const match = trimmed.match(/^(?:export\s+)?([A-Za-z_][A-Za-z0-9_]*)\s*=/);
|
|
2401
|
-
if (match) keys.push(match[1]);
|
|
2402
|
-
}
|
|
2403
|
-
return keys;
|
|
2404
|
-
}
|
|
2405
3040
|
//#endregion
|
|
2406
3041
|
//#region src/lib/programs/warehouse-source/detect.ts
|
|
2407
3042
|
/**
|
|
@@ -2521,9 +3156,7 @@ async function detectPostHogIntegration(ctx) {
|
|
|
2521
3156
|
const sessionOptions = {
|
|
2522
3157
|
installDir,
|
|
2523
3158
|
debug: session.debug,
|
|
2524
|
-
default: false,
|
|
2525
3159
|
signup: session.signup,
|
|
2526
|
-
localMcp: session.localMcp,
|
|
2527
3160
|
ci: session.ci,
|
|
2528
3161
|
benchmark: session.benchmark,
|
|
2529
3162
|
yaraReport: session.yaraReport
|
|
@@ -3495,7 +4128,7 @@ const FUNNEL_BLOCK = {
|
|
|
3495
4128
|
*/
|
|
3496
4129
|
const getContentBlocks = (store) => [
|
|
3497
4130
|
{
|
|
3498
|
-
content: "Welcome.",
|
|
4131
|
+
content: store?.session.apiUser?.first_name ? `Welcome, ${store.session.apiUser.first_name}.` : "Welcome.",
|
|
3499
4132
|
pause: 3e3,
|
|
3500
4133
|
mode: 0,
|
|
3501
4134
|
animationInterval: 160
|
|
@@ -3736,7 +4369,7 @@ const warehouseSeedTasks = (sess) => {
|
|
|
3736
4369
|
})) },
|
|
3737
4370
|
notice: {
|
|
3738
4371
|
title: "Connect your data sources",
|
|
3739
|
-
body: ["We detected some warehouse sources we can connect to enrich your PostHog data.
|
|
4372
|
+
body: ["We detected some warehouse sources we can connect to enrich your PostHog data. Answer now, and we connect them at the end of the run, after your code changes. We will ask you for the credentials at that point, and beep when we do.", "You can select [Skip] if you'd like to do this later in PostHog."],
|
|
3740
4373
|
items: sources.map((s) => s.label),
|
|
3741
4374
|
docsLabel: "Learn more about warehouse sources",
|
|
3742
4375
|
docsUrl: WAREHOUSE_SOURCES_DOCS_URL,
|
|
@@ -3771,9 +4404,7 @@ const posthogIntegrationConfig = {
|
|
|
3771
4404
|
const context = await gatherFrameworkContext(frameworkConfig, {
|
|
3772
4405
|
installDir: session.installDir,
|
|
3773
4406
|
debug: session.debug,
|
|
3774
|
-
default: false,
|
|
3775
4407
|
signup: session.signup,
|
|
3776
|
-
localMcp: session.localMcp,
|
|
3777
4408
|
ci: true,
|
|
3778
4409
|
benchmark: session.benchmark,
|
|
3779
4410
|
yaraReport: session.yaraReport
|
|
@@ -3790,7 +4421,7 @@ const posthogIntegrationConfig = {
|
|
|
3790
4421
|
if (usesPackageJson) {
|
|
3791
4422
|
const packageJson = await tryGetPackageJson({ installDir: session.installDir });
|
|
3792
4423
|
if (packageJson) {
|
|
3793
|
-
const { hasDeclaredDependency } = await import("./package-json-
|
|
4424
|
+
const { hasDeclaredDependency } = await import("./package-json-D0DCWpe5.js").then((n) => n.i);
|
|
3794
4425
|
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.`);
|
|
3795
4426
|
frameworkVersion = config.detection.getVersion(packageJson);
|
|
3796
4427
|
} else getUI().log.warn("Could not find package.json. Continuing anyway — the agent will handle it.");
|
|
@@ -3847,7 +4478,7 @@ STEP 3: Load the installed skill's SKILL.md file to understand what references a
|
|
|
3847
4478
|
STEP 4: Follow the skill's program files in sequence. Look for numbered program files in the references (e.g., files with patterns like "1-", "2-", "3-"). Start with the first one and proceed through each step until completion. Each program file will tell you what to do and which file comes next. Never directly write PostHog tokens directly to code files; always use environment variables.
|
|
3848
4479
|
|
|
3849
4480
|
STEP 5: Set up environment variables for PostHog using the wizard-tools MCP server (this runs locally — secret values never leave the machine):
|
|
3850
|
-
- Use check_env_keys to see which keys already
|
|
4481
|
+
- Use check_env_keys to see which keys the project already sets, and where. Omit filePath and it scans every .env file in the project, so you don't have to guess between .env, .env.local and a nested one. It answers { status, foundIn } per key: "present" means a real env file sets the key, while a key found only in a committed template (.env.example and friends) reads as "missing" — a template documents a key rather than setting it, and is never a file to write credentials into.
|
|
3851
4482
|
- Use set_env_values to create or update the PostHog public token and host, using the appropriate environment variable naming convention for ${config.metadata.name}, which you'll find in example code. The tool will also ensure .gitignore coverage. Don't assume the presence of keys means the value is up to date. Write the correct value each time.
|
|
3852
4483
|
- Reference these environment variables in the code files you create instead of hardcoding the public token and host.
|
|
3853
4484
|
|
|
@@ -3859,7 +4490,7 @@ ${warehouseReportInstruction(session)}
|
|
|
3859
4490
|
postRun: async (sess, credentials) => {
|
|
3860
4491
|
const envVars = config.environment.getEnvVars(credentials.projectApiKey, credentials.host.apiHost);
|
|
3861
4492
|
if (config.environment.uploadToHosting) {
|
|
3862
|
-
const { uploadEnvironmentVariablesStep } = await import("./steps-
|
|
4493
|
+
const { uploadEnvironmentVariablesStep } = await import("./steps-5HAqjUvn.js");
|
|
3863
4494
|
const uploadedEnvVars = await uploadEnvironmentVariablesStep(envVars, {
|
|
3864
4495
|
integration: config.metadata.integration,
|
|
3865
4496
|
session: sess
|
|
@@ -3915,4 +4546,4 @@ const integrationRunStep = {
|
|
|
3915
4546
|
//#endregion
|
|
3916
4547
|
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 };
|
|
3917
4548
|
|
|
3918
|
-
//# sourceMappingURL=posthog-integration-
|
|
4549
|
+
//# sourceMappingURL=posthog-integration-LxEBGkoe.js.map
|