Skip to content

feat(agent-platform): custom-tool authoring foundations — types, docs, AST validators#66584

Open
dmarticus wants to merge 1 commit into
masterfrom
dylan/custom-tools
Open

feat(agent-platform): custom-tool authoring foundations — types, docs, AST validators#66584
dmarticus wants to merge 1 commit into
masterfrom
dylan/custom-tools

Conversation

@dmarticus

@dmarticus dmarticus commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Problem

The custom-tool runtime on the agent platform is production-grade — sandboxed dispatch, secret nonces, identity gate, approval queue, audit via session conversation. But there's no authoring loop a customer can actually use: no published type contract for editor intellisense, no docs explaining the compute-only model, no friendly errors at PUT time when source is malformed or imports a forbidden module.

This PR is the static half of that loop: the contract authors import, the docs that explain the contract, and the AST-level validation that runs at PUT /revisions/:id/tools/:id so authors get structured diagnostics before anything reaches the sandbox.

Changes

Typesagent-shared/src/spec/custom-tool.ts adds CustomToolContext, CustomTool, CustomToolAction. Mirrors the actual ctx built by agent-sandbox-host/src/dispatch.js (deliberately minimal: secrets.ref(name) + log). Type-only — esbuild strips at compile so nothing reaches the sandbox runtime. Authors use satisfies CustomTool for inference.

Docsdocs/custom-tools.md covers the compute-only model and why (no network reach is what makes custom tools safe on attacker-influenced input — the lethal trifecta is impossible because the third leg doesn't exist), the export default { actions: { default } } contract, the minimal ctx, the egress story (use @posthog/http-request with host-pinned secrets), and the identity / approval gating.

Compile pipelinecompile-custom-tools.ts gains two AST passes layered after the existing shape check:

  • Banned-construct check rejects imports of network/process modules (http, https, net, child_process, worker_threads, vm, plus escape hatches like inspector, module, repl, wasi) and rejects eval(...) / Function(...) / new Function(...). Covers import, require, and dynamic import() forms. Useful stdlib stays allowed (fs, crypto, path, util, stream, url, …).
  • Capability extraction walks the source for literal ctx.secrets.ref('NAME') calls and emits {secret_refs, dynamic_secret_refs} for the future authoring UI. Receiver-tight (only ctx, not <anyIdent>.secrets.ref) and conservative about completeness — aliases, destructures, computed access, and bare ctx.secrets reads flip dynamic_secret_refs: true so consumers know the static list is advisory.

Shape and banned errors merge into one response so authors fix everything in one round-trip. The bundle is left untouched on any failure. The PUT response gains a capabilities field.

Tests — 63 unit cases in compile-custom-tools.test.ts (parameterized: banned modules, allowed modules, dynamic-flag aliases, etc.) plus 2 wire-level e2e cases in typed-bundle-authoring.test.ts.

The runtime sandbox (--network=none in Docker, blockNetwork:true in Modal, --cap-drop=ALL) remains the real security boundary. The AST passes are a friendly-error layer on top of that — they exist to fail at PUT time with an actionable message instead of at session start with a cryptic runtime error.

How did you test this code?

Agent-authored — no manual testing claimed.

Automated tests run:

  • pnpm --filter @posthog/agent-janitor vitest run src/compile-custom-tools.test.ts — 63/63 pass (47 pre-existing, 16 new).
  • pnpm --filter @posthog/agent-tests vitest run src/cases/typed-bundle-authoring.test.ts — 31/31 pass.
  • pnpm --filter @posthog/agent-janitor typescript:check — clean.
  • pnpm --filter @posthog/agent-janitor lint — clean.
  • pnpm --filter @posthog/agent-shared typescript:check — clean.

What the new tests catch that nothing existing did:

  • Source with both a shape error and a banned import surfaces both diagnostics in one response, not in waves.
  • Function('payload')() (without new) is rejected — earlier code only matched new Function(...).
  • <non-ctx>.secrets.ref('NAME') is not over-collected into the capability summary.
  • Alias / destructure / computed-access patterns flip dynamic_secret_refs: true instead of silently under-reporting.
  • All five escape-hatch modules (inspector, inspector/promises, module, repl, wasi) are rejected at PUT time.

Automatic notifications

  • Publish to changelog?
  • Alert Sales and Marketing teams?

Docs update

The doc in this PR (products/agent_platform/docs/custom-tools.md) is the internal contract. Customer-facing docs (posthog.com) come later, after Phase 4's authoring UI lands.

🤖 Agent context

Autonomy: Human-driven (agent-assisted)

Tool: Claude Code (Opus 4.7). Skills invoked during this PR: /qa-team (multi-agent QA review at end of Phase 1; report at QAREPORT.md in the working tree — five reviewers converged on capability extractor scope, banned-list completeness, and error-reporting consistency, all addressed before this commit).

Scope choices made along the way that are worth flagging:

  • No new workspace package for the types. Plan originally called for products/agent_platform/packages/agent-tool-types/; once it became clear that the actual ctx is tiny and esbuild doesn't bundle imports anyway, the right place was a single file inside agent-shared that authors import type from. Extracting to a published @posthog/agent-tool-types later is mechanical when GA arrives.
  • Compute-only stays the contract for v1. The runtime already enforces it (no network in the sandbox), so the authoring story now documents and validates it. Wiring nonce → value substitution at egress (so custom tools could prepare authenticated requests for the runner to dispatch) is explicitly deferred to a later phase, re-evaluated after v1 usage signal.
  • No template registry. The kind: "custom_template" spec slot is still there from the pre-cutover registry that got deleted in eb2d9ef855; reviving it stays out of scope until there's cross-agent reuse demand.

Next: where does dry-run live?

This PR is the static half of custom-tool authoring. The runtime half — an interactive "test this tool against synthetic args" endpoint authors hit from the UI — is the next thing to build, and it has an architectural question I'd value pushback on before I open the Phase 2 PR.

Stuck: dry-run combines authoring the agent spec (janitor's job) with executing untrusted code (the tool can be arbitrary JS) in a sandbox (only the runner does this today). Three options I considered, with their costs:

  • Add a sandbox to agent-janitor — pro: natural URL shape, sits next to PUT /tools/:id. Con: janitor is a pure CRUD service today; adding a sandbox pool doubles its blast radius (Modal SDK init, OOM handling, orphan reaping, lifecycle bugs) for one feature.
  • Add HTTP onto agent-runner and let it do CRUD ops — pro: smallest code change, runner already owns the sandbox pool. Con: violates the queue-driven invariant the runner is sized and scaled around; the /healthz exception is the only one we want.
  • Round-trip the request through the conversation lifecycle queue — pro: zero new architectural surface (janitor enqueues a dry-run task, runner claims it, executes, publishes on the bus, janitor blocks and returns). Con: runner sandboxes are session-shaped (long-lived, multi-invoke); dry-run is one-shot and interactive, so we'd pay full session cold-start (~seconds on Modal) per test click with no warm-pool path that doesn't degrade real sessions.

IMO none of the existing services is the right home — each ends up either growing a responsibility it shouldn't have or running on a lifecycle that's wrong for the use case.

Pitch: a small new service agent-exec whose single job is "execute this compiled JS with these args + ctx stub, return result, terminate." Routing is Django → janitor → agent-exec, so janitor stays the authoring authority and does all the CRUD-shaped checks itself (verify JWT, assertDraft, fetch revision, read compiled.js + schema, validate args against the schema, check secret mocks against spec.secrets[]); agent-exec only sees the bytes it needs to run, with a single-shot lifecycle and warm-pool-capable for sub-second feedback. Cost is one extra intra-cluster hop (5-20ms, small against multi-second sandbox cold starts) plus a new k8s deployment / Helm chart / on-call surface. Implementation is ~400 lines mostly reusing selectSandboxPool + JWT verify from agent-shared.

Input requested:

  • Does the architectural call I'm leaning toward (small new agent-exec service for the execution leg, fronted by janitor) feel right, or am I over-rotating from "just put it on the runner / janitor / queue"?
  • For anyone who's touched the sandbox pool — any reason agent-exec shouldn't reuse selectSandboxPool with a single-shot lifecycle and a warm pool?
  • Option I missed?

…, AST validators

Static half of the custom-tool authoring loop. Adds the author-facing
type contract (`CustomToolContext`, `CustomTool`), a docs file explaining
the compute-only sandbox model, and two new AST passes in the compile
pipeline: a banned-construct check that rejects network/process modules
and dynamic-code constructs with friendly errors at PUT time, and a
capability extractor that surfaces declared secret refs for the
upcoming authoring UI. Shape + banned errors merge into one response
so authors see every diagnostic in a single round-trip. Capability
extractor is conservative: only literal `ctx.secrets.ref('NAME')` calls
are collected; aliases / destructures / computed access flip a
`dynamic_secret_refs` flag so the UI knows the static list is advisory.

The runtime sandbox (`--network=none` / `blockNetwork:true`) remains
the real boundary; the AST passes are a friendly-error layer on top.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@dmarticus dmarticus self-assigned this Jun 29, 2026
@assign-reviewers-posthog assign-reviewers-posthog Bot requested a review from a team June 29, 2026 01:37
@assign-reviewers-posthog

Copy link
Copy Markdown

👀 Auto-assigned reviewers

These soft owners were skipped because they only have minor changes here. Nothing blocks merge, so self-assign if you'd like a look:

  • @PostHog/team-devex (AGENTS.md)

Soft owners come from CODEOWNERS-soft and each product's product.yaml. Generated files and lockfiles are ignored when deciding ownership.

@greptile-apps

greptile-apps Bot commented Jun 29, 2026

Copy link
Copy Markdown
Contributor

Reviews (1): Last reviewed commit: "feat(agent-platform): custom-tool author..." | Re-trigger Greptile

@github-actions

Copy link
Copy Markdown
Contributor

Size Change: 0 B

Total Size: 64.8 MB

ℹ️ View Unchanged
Filename Size
frontend/dist-report/decompression-worker/src/scenes/session-recordings/player/snapshot-processing/decompressionWorker 2.85 kB
frontend/dist-report/exporter/_chunks/chunk 2.62 MB
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Action 28 kB
frontend/dist-report/exporter/_parent/products/actions/frontend/pages/Actions 5.76 kB
frontend/dist-report/exporter/_parent/products/ai_gateway/frontend/AIGatewayScene 13.2 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityScene 120 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 19.6 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 132 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/AIObservabilityUsers 3.44 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 21.8 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 53.9 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 20.7 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.07 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 60.8 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 33 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.81 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 37.5 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 32.9 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.21 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 32.1 kB
frontend/dist-report/exporter/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 11.9 kB
frontend/dist-report/exporter/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 23.3 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.69 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 5.83 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 41.7 kB
frontend/dist-report/exporter/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 1.68 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 101 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 6.58 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 6.43 kB
frontend/dist-report/exporter/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 9.23 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/DataWarehouseScene 32.3 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 2.91 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 34.1 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 6.79 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 2.69 kB
frontend/dist-report/exporter/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 7.49 kB
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeature 5.64 kB
frontend/dist-report/exporter/_parent/products/early_access_features/frontend/EarlyAccessFeatures 3.73 kB
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointScene 47.7 kB
frontend/dist-report/exporter/_parent/products/endpoints/frontend/EndpointsScene 27.5 kB
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsAuthorScene 5 kB
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsScene 23.9 kB
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/PullRequestDetailScene 20.5 kB
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunDetailScene 6.4 kB
frontend/dist-report/exporter/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunsScene 19 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 7.66 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 102 kB
frontend/dist-report/exporter/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 42.7 kB
frontend/dist-report/exporter/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.91 kB
frontend/dist-report/exporter/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB
frontend/dist-report/exporter/_parent/products/games/FlappyHog/FlappyHog 5.7 kB
frontend/dist-report/exporter/_parent/products/growth/frontend/IdentityMatchingScene 35.9 kB
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.1 kB
frontend/dist-report/exporter/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.37 kB
frontend/dist-report/exporter/_parent/products/links/frontend/LinkScene 25.4 kB
frontend/dist-report/exporter/_parent/products/links/frontend/LinksScene 5.15 kB
frontend/dist-report/exporter/_parent/products/live_debugger/frontend/LiveDebugger 19.6 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/LogsScene 22.7 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 18.5 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.11 kB
frontend/dist-report/exporter/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.12 kB
frontend/dist-report/exporter/_parent/products/managed_migrations/frontend/ManagedMigration 15.2 kB
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 135 kB
frontend/dist-report/exporter/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 16 kB
frontend/dist-report/exporter/_parent/products/metrics/frontend/MetricsScene 23.1 kB
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/components/QuestionRenderer 1.75 kB
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/components/RunViewerImpl 5.8 kB
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/components/tool/builtinToolRenderers 4.48 kB
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/components/tool/EditDiffRenderer 3.23 kB
frontend/dist-report/exporter/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker 23.7 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.45 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.34 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 9.83 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 5.98 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 6.16 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.06 kB
frontend/dist-report/exporter/_parent/products/product_analytics/frontend/insights/trends/TrendsSlopeChart/TrendsSlopeChart 2.6 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/observations/ReplayObservation 19.1 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 42.6 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 22.5 kB
frontend/dist-report/exporter/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 26.9 kB
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.49 kB
frontend/dist-report/exporter/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 29.9 kB
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.4 kB
frontend/dist-report/exporter/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 23.4 kB
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillScene 1.47 kB
frontend/dist-report/exporter/_parent/products/skills/frontend/LLMSkillsScene 1.48 kB
frontend/dist-report/exporter/_parent/products/tasks/frontend/SlackTaskContextScene 9 kB
frontend/dist-report/exporter/_parent/products/tracing/frontend/TracingScene 95.1 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterview 10.8 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviewResponse 8.05 kB
frontend/dist-report/exporter/_parent/products/user_interviews/frontend/UserInterviews 6.46 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 47.2 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.23 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 11.6 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.3 kB
frontend/dist-report/exporter/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 19.8 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/Workflows/WorkflowScene 113 kB
frontend/dist-report/exporter/_parent/products/workflows/frontend/WorkflowsScene 61.4 kB
frontend/dist-report/exporter/src/exporter/exporter 25.9 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterDashboardScene 6.74 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterHeatmapScene 20.1 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterInsightScene 7.31 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterInterviewScene 310 kB
frontend/dist-report/exporter/src/exporter/scenes/ExporterNotebookScene 2.98 MB
frontend/dist-report/exporter/src/exporter/scenes/ExporterRecordingScene 5.7 kB
frontend/dist-report/exporter/src/exporterSharedChunkAnchors 1.26 kB
frontend/dist-report/exporter/src/lib/components/ActivityLog/describers 129 kB
frontend/dist-report/exporter/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB
frontend/dist-report/exporter/src/lib/components/MonacoDiffEditor 533 B
frontend/dist-report/exporter/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB
frontend/dist-report/exporter/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B
frontend/dist-report/exporter/src/lib/lemon-ui/Link/Link 415 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditor 448 B
frontend/dist-report/exporter/src/lib/monaco/CodeEditorImpl 26.6 kB
frontend/dist-report/exporter/src/lib/monaco/CodeEditorInline 649 B
frontend/dist-report/exporter/src/lib/monaco/vimMode 211 kB
frontend/dist-report/exporter/src/lib/ui/Button/ButtonPrimitives 482 B
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitals 11.6 kB
frontend/dist-report/exporter/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 4.76 kB
frontend/dist-report/exporter/src/queries/Query/Query 5.18 kB
frontend/dist-report/exporter/src/queries/schema 1 MB
frontend/dist-report/exporter/src/scenes/approvals/changeRequestsLogic 622 B
frontend/dist-report/exporter/src/scenes/authentication/login/loginLogic 569 B
frontend/dist-report/exporter/src/scenes/authentication/shared/passkeyLogic 602 B
frontend/dist-report/exporter/src/scenes/data-pipelines/event-filtering/EventFilterScene 22.8 kB
frontend/dist-report/exporter/src/scenes/data-pipelines/TransformationsScene 8.09 kB
frontend/dist-report/exporter/src/scenes/experiments/notebook/NotebookCompactTable 1.54 kB
frontend/dist-report/exporter/src/scenes/hog-functions/misc/Diff 1.35 kB
frontend/dist-report/exporter/src/scenes/insights/views/BoxPlot/BoxPlot 4.49 kB
frontend/dist-report/exporter/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 8.88 kB
frontend/dist-report/exporter/src/scenes/insights/views/RegionMap/RegionMap 30.3 kB
frontend/dist-report/exporter/src/scenes/insights/views/WorldMap/WorldMap 1.04 MB
frontend/dist-report/exporter/src/scenes/models/ModelsScene 20 kB
frontend/dist-report/exporter/src/scenes/models/NodeDetailScene 18.9 kB
frontend/dist-report/monaco-editor-worker/src/lib/monaco/workers/monacoEditorWorker 288 kB
frontend/dist-report/monaco-json-worker/src/lib/monaco/workers/monacoJsonWorker 419 kB
frontend/dist-report/monaco-typescript-worker/src/lib/monaco/workers/monacoTsWorker 7.02 MB
frontend/dist-report/posthog-app/_chunks/chunk 2.62 MB
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Action 29.5 kB
frontend/dist-report/posthog-app/_parent/products/actions/frontend/pages/Actions 7.12 kB
frontend/dist-report/posthog-app/_parent/products/ai_gateway/frontend/AIGatewayScene 13.7 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityScene 122 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilitySessionScene 20.2 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityTraceScene 133 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/AIObservabilityUsers 4.26 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClusterScene 22.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/clusters/AIObservabilityClustersScene 54.4 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetScene 21.2 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/datasets/AIObservabilityDatasetsScene 4.58 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluation 61.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/AIObservabilityEvaluationsScene 34.4 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/evaluations/EvaluationTemplates 671 B
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/LLMASessionFeedbackDisplay 4.81 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/playground/AIObservabilityPlaygroundScene 38.1 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptScene 34.3 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/prompts/LLMPromptsScene 5.73 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTag 33.4 kB
frontend/dist-report/posthog-app/_parent/products/ai_observability/frontend/tags/AIObservabilityTagsScene 13.2 kB
frontend/dist-report/posthog-app/_parent/products/business_knowledge/frontend/scenes/BusinessKnowledgeScene 23.8 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/Assignee/CyclotronJobInputAssignee 1.38 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/SlaBusinessHours/CyclotronJobInputBusinessHours 2.7 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/components/TicketTags/CyclotronJobInputTicketTags 783 B
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/settings/SupportSettingsScene 7.9 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/ticket/SupportTicketScene 35.6 kB
frontend/dist-report/posthog-app/_parent/products/conversations/frontend/scenes/tickets/SupportTicketsScene 2.19 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/CustomerAnalyticsScene 101 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerAnalyticsConfigurationScene/CustomerAnalyticsConfigurationScene 8.66 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyBuilderScene/CustomerJourneyBuilderScene 7.75 kB
frontend/dist-report/posthog-app/_parent/products/customer_analytics/frontend/scenes/CustomerJourneyTemplatesScene/CustomerJourneyTemplatesScene 10.1 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/DataWarehouseScene 2.07 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/NewSourceScene/NewSourceScene 3.73 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SchemaScene/SchemaScene 34.7 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceConnectScene/SourceConnectScene 7.54 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourceScene/SourceScene 3.4 kB
frontend/dist-report/posthog-app/_parent/products/data_warehouse/frontend/scenes/SourcesScene/SourcesScene 8.14 kB
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeature 7.14 kB
frontend/dist-report/posthog-app/_parent/products/early_access_features/frontend/EarlyAccessFeatures 4.24 kB
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointScene 49.1 kB
frontend/dist-report/posthog-app/_parent/products/endpoints/frontend/EndpointsScene 26.9 kB
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsAuthorScene 5.52 kB
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/EngineeringAnalyticsScene 24.4 kB
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/PullRequestDetailScene 21 kB
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunDetailScene 6.91 kB
frontend/dist-report/posthog-app/_parent/products/engineering_analytics/frontend/scenes/WorkflowRunsScene 19.5 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingFingerprintsScene/ErrorTrackingIssueFingerprintsScene 8.2 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingIssueScene/ErrorTrackingIssueScene 103 kB
frontend/dist-report/posthog-app/_parent/products/error_tracking/frontend/scenes/ErrorTrackingScene/ErrorTrackingScene 45.1 kB
frontend/dist-report/posthog-app/_parent/products/feature_flags/frontend/FeatureFlagTemplatesScene 6.92 kB
frontend/dist-report/posthog-app/_parent/products/games/368Hedgehogs/368Hedgehogs 5.24 kB
frontend/dist-report/posthog-app/_parent/products/games/FlappyHog/FlappyHog 5.7 kB
frontend/dist-report/posthog-app/_parent/products/growth/frontend/IdentityMatchingScene 36.4 kB
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentNewScene 60.6 kB
frontend/dist-report/posthog-app/_parent/products/legal_documents/frontend/scenes/LegalDocumentsScene 6.88 kB
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinkScene 25.9 kB
frontend/dist-report/posthog-app/_parent/products/links/frontend/LinksScene 5.66 kB
frontend/dist-report/posthog-app/_parent/products/live_debugger/frontend/LiveDebugger 20.1 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/components/LogsViewer/LogsViewerModal/LogsViewerModal 2.45 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/LogsScene 24 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertDetailScene/LogsAlertDetailScene 19.2 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsAlertNotificationDetailScene/LogsAlertNotificationDetailScene 9.58 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingDetailScene/LogsSamplingDetailScene 6.63 kB
frontend/dist-report/posthog-app/_parent/products/logs/frontend/scenes/LogsSamplingNewScene/LogsSamplingNewScene 3.63 kB
frontend/dist-report/posthog-app/_parent/products/managed_migrations/frontend/ManagedMigration 15.8 kB
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsScene 128 kB
frontend/dist-report/posthog-app/_parent/products/mcp_analytics/frontend/MCPAnalyticsToolDetail 16.5 kB
frontend/dist-report/posthog-app/_parent/products/metrics/frontend/MetricsScene 23.9 kB
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/components/QuestionRenderer 1.75 kB
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/components/RunViewerImpl 5.84 kB
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/components/tool/builtinToolRenderers 4.48 kB
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/components/tool/EditDiffRenderer 3.23 kB
frontend/dist-report/posthog-app/_parent/products/posthog_ai/frontend/scenes/TaskTracker/TaskTracker 22.7 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessBarChart/StickinessBarChart 4.93 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/stickiness/StickinessLineChart/StickinessLineChart 4.82 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsBarChart/TrendsBarChart 10.3 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLifecycleChart/TrendsLifecycleChart 6.45 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsLineChart/TrendsLineChart 6.63 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsPieChart/TrendsPieChart 5.53 kB
frontend/dist-report/posthog-app/_parent/products/product_analytics/frontend/insights/trends/TrendsSlopeChart/TrendsSlopeChart 3.04 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/observations/ReplayObservation 21.2 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScanner 44 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ReplayScannersScene 23.8 kB
frontend/dist-report/posthog-app/_parent/products/replay_vision/frontend/replay_scanners/ScannerEditorScene 27.4 kB
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/revenueAnalyticsLogic 1.9 kB
frontend/dist-report/posthog-app/_parent/products/revenue_analytics/frontend/RevenueAnalyticsScene 31.4 kB
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummariesTable 5.91 kB
frontend/dist-report/posthog-app/_parent/products/session_summaries/frontend/SessionGroupSummaryScene 25.5 kB
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillScene 1.98 kB
frontend/dist-report/posthog-app/_parent/products/skills/frontend/LLMSkillsScene 1.99 kB
frontend/dist-report/posthog-app/_parent/products/tasks/frontend/SlackTaskContextScene 9.51 kB
frontend/dist-report/posthog-app/_parent/products/tracing/frontend/TracingScene 95.7 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterview 10.8 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviewResponse 8.55 kB
frontend/dist-report/posthog-app/_parent/products/user_interviews/frontend/UserInterviews 6.98 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewIndexScene 3.52 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunScene 47.7 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewRunsScene 8.75 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSettingsScene 12.2 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotHistoryScene 14.8 kB
frontend/dist-report/posthog-app/_parent/products/visual_review/frontend/scenes/VisualReviewSnapshotOverviewScene 20.3 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/TemplateLibrary/MessageTemplate 17.6 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/Workflows/WorkflowScene 107 kB
frontend/dist-report/posthog-app/_parent/products/workflows/frontend/WorkflowsScene 62.5 kB
frontend/dist-report/posthog-app/src/index 62.5 kB
frontend/dist-report/posthog-app/src/layout/panel-layout/ai-first/tabs/NavTabChat 7.93 kB
frontend/dist-report/posthog-app/src/lib/components/ActivityLog/describers 130 kB
frontend/dist-report/posthog-app/src/lib/components/Cards/TextCard/TextCardMarkdownEditor 10.6 kB
frontend/dist-report/posthog-app/src/lib/components/MonacoDiffEditor 533 B
frontend/dist-report/posthog-app/src/lib/components/Shortcuts/utils/DebugCHQueriesImpl 20.1 kB
frontend/dist-report/posthog-app/src/lib/components/Support/supportRouterLogic 1.56 kB
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonMarkdown/MermaidDiagram 2 kB
frontend/dist-report/posthog-app/src/lib/lemon-ui/LemonTextArea/LemonTextAreaMarkdown 790 B
frontend/dist-report/posthog-app/src/lib/lemon-ui/Link/Link 415 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditor 448 B
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorImpl 26.6 kB
frontend/dist-report/posthog-app/src/lib/monaco/CodeEditorInline 649 B
frontend/dist-report/posthog-app/src/lib/monaco/vimMode 211 kB
frontend/dist-report/posthog-app/src/lib/ui/Button/ButtonPrimitives 482 B
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitals 12.9 kB
frontend/dist-report/posthog-app/src/queries/nodes/WebVitals/WebVitalsPathBreakdown 5.17 kB
frontend/dist-report/posthog-app/src/queries/Query/Query 6.51 kB
frontend/dist-report/posthog-app/src/queries/schema 1 MB
frontend/dist-report/posthog-app/src/scenes/activity/explore/EventsScene 8.68 kB
frontend/dist-report/posthog-app/src/scenes/activity/explore/SessionsScene 10 kB
frontend/dist-report/posthog-app/src/scenes/activity/live/LiveEventsTable 6.61 kB
frontend/dist-report/posthog-app/src/scenes/agentic/AgenticAuthorize 5.51 kB
frontend/dist-report/posthog-app/src/scenes/approvals/ApprovalDetail 17.7 kB
frontend/dist-report/posthog-app/src/scenes/approvals/changeRequestsLogic 622 B
frontend/dist-report/posthog-app/src/scenes/audit-logs/AdvancedActivityLogsScene 43.1 kB
frontend/dist-report/posthog-app/src/scenes/AuthenticatedShell 207 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/AccountConnected 3.32 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/AgenticAccountMismatch 2.43 kB
frontend/dist-report/posthog-app/src/scenes/authentication/account/credential-review/CredentialReview 5.04 kB
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLIAuthorize 12.1 kB
frontend/dist-report/posthog-app/src/scenes/authentication/cli/CLILive 4.05 kB
frontend/dist-report/posthog-app/src/scenes/authentication/email-mfa-verify/EmailMFAVerify 3.04 kB
frontend/dist-report/posthog-app/src/scenes/authentication/invite-signup/InviteSignup 1.44 kB
frontend/dist-report/posthog-app/src/scenes/authentication/login-2fa/Login2FA 4.74 kB
frontend/dist-report/posthog-app/src/scenes/authentication/login/Login 1.53 kB
frontend/dist-report/posthog-app/src/scenes/authentication/login/loginLogic 569 B
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordReset 4.5 kB
frontend/dist-report/posthog-app/src/scenes/authentication/password-reset/PasswordResetComplete 3.06 kB
frontend/dist-report/posthog-app/src/scenes/authentication/shared/passkeyLogic 602 B
frontend/dist-report/posthog-app/src/scenes/authentication/signup/SignupContainer 1.42 kB
frontend/dist-report/posthog-app/src/scenes/authentication/two-factor-reset/TwoFactorReset 4.04 kB
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelConnect 5.03 kB
frontend/dist-report/posthog-app/src/scenes/authentication/vercel/VercelLinkError 2.3 kB
frontend/dist-report/posthog-app/src/scenes/authentication/verify-email/VerifyEmail 1.44 kB
frontend/dist-report/posthog-app/src/scenes/billing/AuthorizationStatus 768 B
frontend/dist-report/posthog-app/src/scenes/billing/Billing 717 B
frontend/dist-report/posthog-app/src/scenes/billing/BillingSection 21.8 kB
frontend/dist-report/posthog-app/src/scenes/code-canvas/CodeCanvasLink 1.89 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohort 34.1 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/CohortCalculationHistory 7.34 kB
frontend/dist-report/posthog-app/src/scenes/cohorts/Cohorts 11 kB
frontend/dist-report/posthog-app/src/scenes/coupons/Coupons 895 B
frontend/dist-report/posthog-app/src/scenes/dashboard/Dashboard 7.93 kB
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/Dashboards 22.7 kB
frontend/dist-report/posthog-app/src/scenes/dashboard/dashboards/templates/DashboardTemplateCopyScene 7.06 kB
frontend/dist-report/posthog-app/src/scenes/data-management/DataManagementScene 6.82 kB
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionEdit 23.4 kB
frontend/dist-report/posthog-app/src/scenes/data-management/definition/DefinitionView 31.6 kB
frontend/dist-report/posthog-app/src/scenes/data-management/MaterializedColumns/MaterializedColumns 12.8 kB
frontend/dist-report/posthog-app/src/scenes/data-management/variables/SqlVariableEditScene 8.53 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/batch-exports/BatchExportScene 67.8 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DataPipelinesNewScene 5.32 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/DestinationsScene 5.71 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/event-filtering/EventFilterScene 23.3 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/legacy-plugins/LegacyPluginScene 22 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/TransformationsScene 4.92 kB
frontend/dist-report/posthog-app/src/scenes/data-pipelines/WebScriptsScene 5.57 kB
frontend/dist-report/posthog-app/src/scenes/data-warehouse/DataWarehouseScene 2.06 kB
frontend/dist-report/posthog-app/src/scenes/data-warehouse/editor/EditorScene 4.98 kB
frontend/dist-report/posthog-app/src/scenes/debug/DebugScene 25.5 kB
frontend/dist-report/posthog-app/src/scenes/debug/hog/HogRepl 8.98 kB
frontend/dist-report/posthog-app/src/scenes/experiments/Experiment 227 kB
frontend/dist-report/posthog-app/src/scenes/experiments/Experiments 23.3 kB
frontend/dist-report/posthog-app/src/scenes/experiments/notebook/NotebookCompactTable 2.01 kB
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetric 12.5 kB
frontend/dist-report/posthog-app/src/scenes/experiments/SharedMetrics/SharedMetrics 1.84 kB
frontend/dist-report/posthog-app/src/scenes/exports/ExportsScene 5.56 kB
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlag 117 kB
frontend/dist-report/posthog-app/src/scenes/feature-flags/FeatureFlags 3.94 kB
frontend/dist-report/posthog-app/src/scenes/groups/Group 23.8 kB
frontend/dist-report/posthog-app/src/scenes/groups/Groups 9.65 kB
frontend/dist-report/posthog-app/src/scenes/groups/GroupsNew 8.62 kB
frontend/dist-report/posthog-app/src/scenes/health-alerts/HealthAlertsScene 6.33 kB
frontend/dist-report/posthog-app/src/scenes/health/categoryDetail/HealthCategoryDetailScene 13.4 kB
frontend/dist-report/posthog-app/src/scenes/health/HealthScene 17.2 kB
frontend/dist-report/posthog-app/src/scenes/health/pipelineStatus/PipelineStatusScene 12.2 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapNewScene 5.18 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapRecordingScene 5.18 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmap/HeatmapScene 7.9 kB
frontend/dist-report/posthog-app/src/scenes/heatmaps/scenes/heatmaps/HeatmapsScene 5.2 kB
frontend/dist-report/posthog-app/src/scenes/hog-functions/HogFunctionScene 60.8 kB
frontend/dist-report/posthog-app/src/scenes/hog-functions/misc/Diff 1.35 kB
frontend/dist-report/posthog-app/src/scenes/inbox/InboxScene 238 kB
frontend/dist-report/posthog-app/src/scenes/insights/InsightQuickStart/InsightQuickStart 8.19 kB
frontend/dist-report/posthog-app/src/scenes/insights/InsightScene 43.6 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/BoxPlot/BoxPlot 4.96 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/CalendarHeatMap/CalendarHeatMap 9.29 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/RegionMap/RegionMap 30.8 kB
frontend/dist-report/posthog-app/src/scenes/insights/views/WorldMap/WorldMap 6.13 kB
frontend/dist-report/posthog-app/src/scenes/instance/AsyncMigrations/AsyncMigrations 14.3 kB
frontend/dist-report/posthog-app/src/scenes/instance/DeadLetterQueue/DeadLetterQueue 6.68 kB
frontend/dist-report/posthog-app/src/scenes/instance/QueryPerformance/QueryPerformance 12.5 kB
frontend/dist-report/posthog-app/src/scenes/instance/SystemStatus/SystemStatus 18.2 kB
frontend/dist-report/posthog-app/src/scenes/integrations/IntegrationsLandingScene 1.67 kB
frontend/dist-report/posthog-app/src/scenes/IntegrationsRedirect/IntegrationsRedirect 955 B
frontend/dist-report/posthog-app/src/scenes/marketing-analytics/MarketingAnalyticsScene 47 kB
frontend/dist-report/posthog-app/src/scenes/max/Max 21 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/CreateInsightWidget 7.39 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/CreateNotebookWidget 1.86 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/ErrorTrackingWidget 7.87 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/QueryWidget 7.34 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/SearchSessionRecordingsWidget 7.89 kB
frontend/dist-report/posthog-app/src/scenes/max/messages/adapters/UpsertDashboardWidget 1.71 kB
frontend/dist-report/posthog-app/src/scenes/models/ModelsScene 20.6 kB
frontend/dist-report/posthog-app/src/scenes/models/NodeDetailScene 19.7 kB
frontend/dist-report/posthog-app/src/scenes/moveToPostHogCloud/MoveToPostHogCloud 4.5 kB
frontend/dist-report/posthog-app/src/scenes/new-tab/NewTabScene 2.79 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookCanvasScene 12.7 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookPanel/NotebookPanel 14.7 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebookScene 21.1 kB
frontend/dist-report/posthog-app/src/scenes/notebooks/NotebooksScene 8.73 kB
frontend/dist-report/posthog-app/src/scenes/oauth/OAuthAuthorize 810 B
frontend/dist-report/posthog-app/src/scenes/onboarding/legacy/coupon/OnboardingCouponRedemption 1.34 kB
frontend/dist-report/posthog-app/src/scenes/onboarding/Onboarding 781 kB
frontend/dist-report/posthog-app/src/scenes/onboarding/shared/sdkHealth/SdkHealthScene 9.07 kB
frontend/dist-report/posthog-app/src/scenes/organization/ConfirmOrganization/ConfirmOrganization 4.5 kB
frontend/dist-report/posthog-app/src/scenes/organization/Create/Create 704 B
frontend/dist-report/posthog-app/src/scenes/organization/Deactivated 1.17 kB
frontend/dist-report/posthog-app/src/scenes/organization/PendingDeletion 2.24 kB
frontend/dist-report/posthog-app/src/scenes/persons/PersonScene 28.7 kB
frontend/dist-report/posthog-app/src/scenes/persons/PersonsScene 11.9 kB
frontend/dist-report/posthog-app/src/scenes/PreflightCheck/PreflightCheck 5.57 kB
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTour 273 kB
frontend/dist-report/posthog-app/src/scenes/product-tours/ProductTours 6 kB
frontend/dist-report/posthog-app/src/scenes/project-homepage/ProjectHomepage 27.7 kB
frontend/dist-report/posthog-app/src/scenes/project/Create/Create 982 B
frontend/dist-report/posthog-app/src/scenes/project/PendingDeletion 2.6 kB
frontend/dist-report/posthog-app/src/scenes/resource-transfer/ResourceTransfer 10.5 kB
frontend/dist-report/posthog-app/src/scenes/saved-insights/SavedInsights 3.5 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/detail/SessionRecordingDetail 8.68 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/file-playback/SessionRecordingFilePlaybackScene 11.3 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/kiosk/SessionRecordingsKiosk 16.8 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/modal/SessionPlayerModal 8.39 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/player/snapshot-processing/DecompressionWorkerManager 323 B
frontend/dist-report/posthog-app/src/scenes/session-recordings/playlist/SessionRecordingsPlaylistScene 11.9 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/SessionRecordings 7.81 kB
frontend/dist-report/posthog-app/src/scenes/session-recordings/settings/SessionRecordingsSettingsScene 9.01 kB
frontend/dist-report/posthog-app/src/scenes/sessions/SessionProfileScene 21.9 kB
frontend/dist-report/posthog-app/src/scenes/settings/SettingsMap 6.79 kB
frontend/dist-report/posthog-app/src/scenes/settings/SettingsScene 10.1 kB
frontend/dist-report/posthog-app/src/scenes/sites/Site 1.57 kB
frontend/dist-report/posthog-app/src/scenes/startups/StartupProgram 21.1 kB
frontend/dist-report/posthog-app/src/scenes/StripeConfirmInstall/StripeConfirmInstall 3.7 kB
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionScene 17 kB
frontend/dist-report/posthog-app/src/scenes/subscriptions/SubscriptionsScene 7.06 kB
frontend/dist-report/posthog-app/src/scenes/surveys/forms/SurveyFormBuilder 3.06 kB
frontend/dist-report/posthog-app/src/scenes/surveys/Survey 7.65 kB
frontend/dist-report/posthog-app/src/scenes/surveys/Surveys 27.8 kB
frontend/dist-report/posthog-app/src/scenes/surveys/wizard/SurveyWizard 69.8 kB
frontend/dist-report/posthog-app/src/scenes/themes/CustomCssScene 4.94 kB
frontend/dist-report/posthog-app/src/scenes/toolbar-launch/ToolbarLaunch 4.01 kB
frontend/dist-report/posthog-app/src/scenes/Unsubscribe/Unsubscribe 1.71 kB
frontend/dist-report/posthog-app/src/scenes/web-analytics/SessionAttributionExplorer/SessionAttributionExplorerScene 12.5 kB
frontend/dist-report/posthog-app/src/scenes/web-analytics/WebAnalyticsScene 21 kB
frontend/dist-report/posthog-app/src/scenes/wizard/Wizard 4.45 kB
frontend/dist-report/posthog-app/src/sharedChunkAnchors 1.33 kB
frontend/dist-report/render-query/src/render-query/render-query 25 MB
frontend/dist-report/toolbar/src/toolbar/toolbar 11.3 MB

compressed-size-action

await writeToolSourceAndSchema(req.params.id, opts.bundles, tool)
await opts.bundles.write(req.params.id, toolCompiledPath(id), compile.compiled_js!)
res.json({ ok: true, tool_id: id })
res.json({ ok: true, tool_id: id, capabilities: compile.capabilities })

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Capabilities not persisted — authoring UI will be unable to retrieve them

capabilities is returned in the PUT response but never written to the bundle alongside compiled.js. The PR description explicitly lists "capability summaries on each tool card" as a coming feature; without a persisted artifact (e.g. tools/<id>/capabilities.json) the GET /revisions/:id/bundle endpoint has no way to surface them, and any UI that isn't holding the original PUT response in memory will silently show nothing. The source is available in source.ts and could be re-parsed, but that would duplicate the compile pipeline in the GET path.

Comment on lines +123 to +126
function isBannedModuleSpecifier(spec: string): boolean {
const stripped = spec.startsWith('node:') ? spec.slice('node:'.length) : spec
return BANNED_NODE_MODULES.has(stripped)
}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 'node:' literal repeated in the same expression (OnceAndOnlyOnce)

spec.startsWith('node:') and spec.slice('node:'.length) encode the same prefix independently. Extracting the prefix to a constant makes the coupling explicit and eliminates the subtle divergence risk if one is updated without the other.

Suggested change
function isBannedModuleSpecifier(spec: string): boolean {
const stripped = spec.startsWith('node:') ? spec.slice('node:'.length) : spec
return BANNED_NODE_MODULES.has(stripped)
}
const NODE_PREFIX = 'node:'
function isBannedModuleSpecifier(spec: string): boolean {
const stripped = spec.startsWith(NODE_PREFIX) ? spec.slice(NODE_PREFIX.length) : spec
return BANNED_NODE_MODULES.has(stripped)
}

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant